这里将记载我从14年至今的IT生涯回顾,从上到下从旧到新排列。我是一个容易忘事的人,所以我希望能把以前的回忆记载下来,这一整篇文章的所有素材是通过我的三部旧手机各种图片视频截图、QQ空间、微信朋友圈、新旧电脑文件找到的,并结合在一起写出我的历史,不是很主要的内容我就删掉了一部分了。也希望能给我的师弟师妹们一点儿启发。我不喜欢看书和看视频,但是特喜欢使用搜索引擎。

更新时间:2018/08/01 19:28

有一种冲动叫兴趣

小时候呢,一直有做一个网页、窗体程序的梦想,尝试在Word里生成HTML文件、尝试在画图工具里绘制程序窗体和控件的模样、尝试用PPT实现程序的连贯动画等等。当时对编程没有一点了解。但是心中的冲动告诉我应该试一试。

初次接触

初二那年,我在好奇心驱使下,走进了我家乡(广东汕尾海丰)少有的图书城,这里面关于IT类的图书少得可怜,甚至翻不出一本C语言的书,在工作人员帮忙下也只能寻找出一本C的书“轻松学C编程”,挺厚的一本,现在看来还真不是什么好书。我没想到的是,在当时我的理解水平根本看不懂这“天书”。于是编程这件事情我逐渐的放下了。
在初三毕业时,我一度有去读中专的冲动,不过被家人拦下了(没错,我就是那种信奉读书无用论的人,但是现在不这么觉得了),直到今天,我觉得他们做得很对!

初二初三的小游戏生活

不过贯穿这个初二到初三的莫过于偷偷的在按键机玩java小游戏了,当时J2ME还有一席之地,在按键机打开这些程序都会显示一个Java咖啡图标,但是国内这些游戏都有个问题就是:内购成灾。为了破解内购或者免L也废了不少心思哈哈。

遇上RPG Maker

这个工具简称RM,是一个很易于上手的制作RPG游戏的软件,即使没有编程基础只要有逻辑思维就能开发RPG游戏。为什么会用到这个东西呢?小时候还喜欢玩魔塔这个小游戏(咦,咋和别的小朋友不一样=-=),所以也有做一个魔塔的想法,当时了解到了RPG Maker XP,一个用于快速开发RPG游戏的傻瓜式游戏引擎(前提是你不打算写Ruby脚本来修改预设的一些设定和逻辑),挺不错的,后面出了很多新版本,尝试使用这个工具制作魔塔游戏,不过放假时间不够,并没有做成。但从这里开始我开始逐渐的对编程产生更加浓厚的兴趣。

菜鸟上路

我终于上高中了,在我那还算是个不错的中学,高一时决定一定要再次尝试以下编程,这时候给我的书加了一本“21天学通Java”和一本“Flash8动画设计制作入门与提高”,现在看到这些个标题很想笑。没办法,在我们小城镇能找本编程书已经是不易,当时不了解只能选择这些书。后面还是决定先从C语言入手。
于是乎,我在白纸上手写。。。了一段计算圆柱体体积的C语言程序,当时在校,没法用电脑和手机,所以没法编译和运行。记得还被读中专的同学嘲笑了一波,不过并不影响。

编程社搞起

在一个神奇数学老师的提议下,我成立了一个编程小组并且向学校团委会申请创立编程社社团。印制了1000张社团宣传单。当时终于有了部旧的安卓机,至少文档能在手机里写了。

也设计出了编程社Logo,AiDou,还做了一堆社徽徽章

由于传单的关系,社团的人员迅速增多到120个人,其实大部分人都是来凑热闹而已。

这个时候我依然在埋怨应试教育,希望自己通过编程闯出一条路

在结识了一位朋友后,他让我了解到了免费空间这个东西,然后他帮忙提供了编程社的官方网站。免费空间其实就是一种共享主机,只提供一个简单的操作面板,提供ftp功能上传页面,提供基础的动态语言解释服务(比如PHP),在当时免费空间商是挺良心的,不过安全性、稳定性肯定是无法保证的,而且万一哪天免空商做不下去跑路了你的网站也就没了。当然,现在已经没了。

电脑安排上了

这个时候大概是暑假了,同时也被批准可以偶尔用一下家里笔记本了-

当时我对开发游戏情有独钟,了解了Unity3D,在建模软件Maya和3DsMax两个软件的抉择中我选择了3ds,于是先从了建模入手,当时完全不懂材质如何使用,瞎搞一通。

同时。。我继续在抱怨着应试教育。

C#和PS的初次接触

这其实是我真正走入编程大道的第一步,为什么会从C#语言开始呢?用过Unity3D的小朋友应该知道里面的脚本语言可以用C#。我买了一本C#入门书但是歪打正着的学成了C# Winform,于是乎,游戏没做成,做成了Windows窗体程序,因为这不正是我一直想做的东西嘛?这一步让我体会到了那种成就感(虽然现在看到这个很搞笑,实在太丑了,当时也被嘲笑一波)

当时是用Visual Studio 2010,不得不说这真是一个十分笨重的版本,在之后的网友评论里也验证了这个事实,如果没记错安装包都快4个G,而且启动速度慢,占用资源大。甚至还把Windows的效果全部调为性能最优了,所以界面emmmmm。
同时为了做一些图标需要抠图不得不接触了PhotoShop,用魔棒或者套索成功抠出了人生第一张图片。使用PS的能力也伴随着我开发程序慢慢的有所提升。

表示这界面丑的我自己都快看不下去了😂。在这个过程中慢慢的对Windows的控件和COM组件有了一些了解,还把FTP接入当网盘。

体验一波刷机

从来没试过刷机,于是好奇的试了一遍刷机,也算是认识了一遍recovery。

不正经的窗体程序

也不知道当时发的什么神经,突然想做不规则窗体程序,当时不规则窗体的解决方案好像不是很妥,只能采用过滤某个颜色的方法达到透明,不然就要动用GUI绘制了吧。当时也有人吐槽了这个窗体😂。

至今都觉得神奇的想法

这是一个注册登录逻辑,当初呢,觉得数据库很难,不敢碰,所以想了一个十分变态的方法:用FTP。注册时往一个文件写入用户密码,账号作为文件名,上传到FTP服务器,登录时判断FTP服务器上是否存在此账号的文件即得出是否已注册,已存在则下载文件并读取文件内的密码比对。真是一个有毒又神奇的想法=-=

居然用过凡X建站

高中有一个文学社叫五坡风,他们当时需要一个官方网站,苦于还没有足够的前端知识,了解了个凡科的快速建站,对于没有Web基础又想做网站的人,也许勉强是个不错的选择吧。

第一次重装系统

在这之前我对系统的了解是比较少的,经历过这一波后了解了许多,当时是同学拿来笔记本问我能不能帮忙重装,我没有经验的极不负责任的答应了😂,然后在网上了解了一波流程之后,下了UltraISO(国内翻译叫软碟通),然后去MSDN的一个貌似是个人的镜像站下了Win7原生镜像,用UltraISO烧写进U盘,然后在那台笔记本启动,启动装了之后发现似乎启动有问题,当时不知道什么原因,就采用终极方案,Ghost还原到硬盘,于是下了一个PE镜像烧进U盘,然后下载一个Win7 GHO备份文件塞进U盘。在笔记本启动PE后,用Ghost还原到C盘,启动,大功告成!

玩一玩单片机

很神奇的是居然接触上了51单片机,可能是对硬件也有点兴趣(不过这也为现在走向软硬结合物联网铺垫了一下下),跳了几个坑,也让我重新认识了C语言,对程序性能优化也有了点灵感。

再次接触Unity3D与3DsMax

当时一直有个想做3D恐怖游戏的冲动,可能是对寂静岭这个游戏情有独钟吧,也或许我的心里真的是有一个寂静岭,有一段时间很抑郁过,心里很黑暗。甚至有个把自己高中学校建模下来作为恐怖游戏场景的想法,所以又回来玩一下Unity3D和建模。后面又初探了一下虚幻UDK引擎。

步入Java

就像所有Java初学者一样,通过查资料,下载安装了JDK,使用Java代码编写加法程序到java文件,在cmd编译运行成功时,是挺兴奋的嘿嘿。

我的学习方式很奇葩,不会完整的看一本书,一本书里我只找我需要用的东西,于是乎。直接跳到了Swing,可能对窗口程序情有独钟吧。配合Windows的Bat批处理删除文件,这也是第一次接触批处理文件。

写一个查询考试成绩的程序

既然学了C# WinForm顺便就做点利民的事情咯,不过那时不懂request和response,所以采用模拟提交表单的方式,登录后访问查询页面使用正则提取数据显示到Label咯

第一次接触Android开发

趁着学Java的热度,我开始不满足于窗口程序,想开发一个Android程序,其实很多都是三分钟热度吧。如果没记错那时Android Studio还没被开发者们接纳,很多人都是采用比较原始的Eclipse + ADT插件的方法开发安卓,我也是照猫画虎这么搞一波,但是坑爹的是,我当时不会科学上网!所以一直卡在下载组件上,被坑的可惨,后面通过修改hosts勉强解决,还遇到过ADT版本不兼容的问题,贼抓狂。好在开发环境是配好了。随便写了一个很丑很简单的界面。

让Android回到Linux模样

在之前刷机过程中,我了解到了BusyBox,当时我知道如果不安装BusyBox时其实很大部分命令是无法使用,而且把手机root过了,然后安装了BusyBox并把命令全部注入进去,这时使用之前在Android上安装的终端软件能够连接到本地并且使用那些命令,顺便尝试去下载了arm可用的jdk并配置了环境变量,成功在Android手机上编译了一次Java程序。

买了人生第一个域名

当时去万网买了一个cn域名叫aidoukj.cn(AiDou科技),那时万网还没并进阿里也好像没见过阿里云,没买其它新出域名可能是觉得含金量不如com/cn这类吧。

终于建站啦建站啦

这个时候我终于踏上了建站正轨,不想再用免费空间,这时候我找了一家主机商:恒创科技,当时是购买了香港共享主机,什么叫共享主机呢,其实和免空也有点小接近,其实就是从一台大的物理机上使用服务器切分出多台虚拟主机(vhost),IP是共享的(遇上某个网站被别人DDOS时其它同主机的虚机都得遭殃。。。遇上过一回),没法进行SSH这些控制,只能在控制面板操作。当时选择这个的原因是:比较便宜、有控制面板、稍微稳定些、最重要的是主机在香港免备案(那时候国内主机备案还是一件麻烦事,要寄东西要跑路,不像现在顶多寄个幕布过来拍一张然后APP里操作一波等半个月就好)。价格好像是250+一年,控制面板应该是自家的面板,至今我看过最好的面板是Cpanel,于是乎当时很兴奋,直接下了一个WordPress想给编程社弄一个官方网站,把WP的文件都上传上去后配置了一波。成功把域名添加A记录解析IP,然后用上WP了,贼开心,静态文件挂到了七牛云上。这也是第一次见识PHP这个语言。

后面了解了爬虫,终于被百度蜘蛛爬了一遍网站,成功在百度能够搜索到我的网站。很开心。不过现在已经挂了,我也换了另一个域名了。

一个神奇的脑洞

那时候突然想做一个游戏,让玩家自己在电脑创建一个文件,然后使用这个文件的数据与其它文件数据战斗,根据某种文件特有属性来定义游戏对手属性,如果成功打败一个文件就销毁这个文件,虽然没什么好处,但是可以根据文件属性任意变异出游戏对象,甚至游戏对象的造型也可以根据文件的编码来做,将电脑分区作为整个游戏的世界,游戏剧情根据由所有文件个体数据随意构造,当然需要一个庞大数据库来定义某些数据能触发哪些剧情。所有都通过数据组合变异而来,如果自己被打败,就需要重新编写自己的特性数据来与其它数据战斗,感觉不错,既是游戏又是能销毁数据的病毒。
当自己的文件不断打败其它文件后,就获取到该文件的数据再作为自己的特性数据,再销毁掉这个数据,这样就相当于复制了对手的属性,让自己的文件数据更完善,战斗力更强。
现在想想,这TMD怎么跟MD5完整性验证一个尿性。。。

一不小心用上企业邮箱

当时腾讯企业邮箱是在试用阶段,也就是说申请试用是免费的,到如今我还在继续使用,使用它的一个神奇的原因是因为它能够绑定自己的域名,当时就把aidoukj.cn添加解析记录绑定上去了(之后这个域名不用后就改成了当今还在用的vinlic.com,我现在的邮箱:vinlic@vinlic.com),而且企业邮听上去还挺高级,还不错。

给班里做一个管理器

挺有毒的,也是脑洞一开就想做,高中教室都是有多媒体教学的所以有电脑,于是乎就做了这么个神奇的东西。

终于决定迈出数据库第一步

这次应该算是我第一次有勇气迈出了接触数据库的第一步,接触了巨硬家的SQL Server,在编写了几次增删改查的SQL语句后,突然发现其实数据库也没有想象中那么恐怖嘛,于是乎就来劲了。

接到一个毕设单子

记得可能是有个不知哪学校的一位师兄需要使用C# WinForm做一个图书馆管理系统,找上我帮他做。按理现在的话当然不会帮他做了,不过当时想要试一试手。这个时候经历了之前这些锻炼后,有了基础的查错能力以及优化意识,不再像之前的程序那样完全不考虑资源占用发布出来一个程序上百M吓死人。终于花了三天把这个程序做好了,于是乎仿佛技能又经历了一次Level Up,重点是我可没收费啊。

疯狂进入各大技术类QQ群

在进入正轨后开始渴望接触更多的大牛,接触更多的新知识,但又懒得看书看视频于是乎选择了进入各类编程语言以及嵌入式之类的QQ群。还用了一个很神奇的身份:把QQ性别改成女的并化名卢雪霑,毕竟大佬们更愿意为女生解答技术问题,抓住这个心理就以女生身份混进了各大QQ群,并且聊的火热,至少进了有20个技术群,PHP、C#、Java、前端、嵌入式、Android、数据库各类群,在里面看着大佬解答萌新问题,也问了一些问题,还经常给萌新解答一下问题,就这么一来二去,算是对能力的一次综合提升。

别人给了一套工控主板

一个网友给我寄来了一套工控主板,这一次也算是我真正意义的一次“装机”,当时对硬件知识几乎没有,接着我就上淘宝闲鱼捡垃圾去了,把硬盘内存装上,亮机走一波,接上教室的投影仪,装一波Ubuntu桌面版。

买书狂的日子

据说每个程序员都有过这种狂买书的经历?不过我从来不把一本书完整的看完,因为我觉得精髓就是你需要的时候你看了。在这么一大段时间里一只积累了一些书,最显眼的是“从入门到精通”哈哈哈哈哈,当时不懂事,买了一堆这些书,后面才知道这个梗。不过也没事对我帮助还是有的。特别要提的一点的是那两本《C#开发实战1200例》是对我C# winform开发帮助很大的案例书。还有一本大家都知道的JS犀牛书。当时还撸了一段时间Python。

做一个简单的贪吃蛇游戏

因为我数学一直没好过,对于一些需要稍微复杂逻辑的代码,我是不敢想的,所以做个贪吃蛇只是想验证一下,我是不是这种程序的逻辑都无法承受。事实上我成功了,挺有成就感。

一个不实际的想法

也不知道自己为什么会这么想,我想要创建一个组织,集合国内各高中的编程社团、计算机社团一起,作为一个联盟,资源共享,统一决策,一起研究提高高中学生的编程能力以及计算机基础知识水平,也可以一起编制教材,一起做项目,一起探讨问题。不过其实也不实际吧,当时也做过点实际行动,连域名都买好了,logo其它的一个编程社社长都设计好了,联盟名字叫NAITA。

玩上了树莓派

我在网上发现了树莓派这种开发板,觉得很神奇,体型只有银行卡大小,却五脏俱全就像一台电脑,CPU(arm架构)、显卡、内存、网卡、输入输出口等等一应俱全,当时树莓派才出到2B版本,现在已经有3B+了(也买了,性能更强),而且事实证明树莓派的生态要比其他吹嘘更高性能的开发板要好(像什么香蕉派这种的),而且这是树莓派基金会这个公益组织推出的,号称所有树莓派版本的硬件都是定价35美元(折算人民币大概238元,还算是一个可接受的平民价)。当然,不可能拿它跟手机或者电脑性能比,因为它不是用来做这些工作的,他可以用于各种嵌入式开发中,比如可以作为上位机控制Arduino这些。同时它运行的是linux系统,也就是说它的功能很强大,可以通过安装各种系统或者软件工具实现更强大的应用,比如后面了我将树莓派作为Web服务器使用,事实证明性能还是OK的。顺便还外挂了一块锂电池,停电时依然可用。

发布一个小教程

当时国内关于树莓派的一些教程不是很多,比如实现一个将手机屏幕作为树莓派的屏幕使用这个操作,在当时是几乎没有的,弄这个原因是想要在手机操作树莓派桌面但又没有网络环境又没有电脑,想要直接通过一条USB线连接并显示。在自己折腾了一波后成功通过androidVNC访问了树莓派的桌面,然后在贴吧做了一篇教程:http://tieba.baidu.com/p/4064959646,这个教程后面也逐渐被其它博客或论坛所采用并发布重写了教程。

使用Ngrox进行内网映射

为什么突然碰上这个呢?因为那段时间放假了,回到家想用树莓派做一个Web服务器搭建一个WordPress博客网站。这也是我正式在Linux搭建PHP运行环境,那时搭建了一个LAMP环境,当时还不会编译这种操作,是通过类似Debian系列系统的apt-get命令安装了Apache2、PHP5、MySQL5,这么一整套环境折腾起来后把WP文件全部传上去后配置了一波终于运行起来了,但是有个问题就是怎么让别人访问到我家里的服务器,尝试过端口转发,但是民用网封了端口,不得不选择上Ngrox代理隧道,如果是现在的话我应该会写一个隧道服务到自己服务器来实现。
内网映射,了解路由器的人应该知道路由器通常都有一个端口转发的功能,内网映射和端口转发有些类似,端口转发是将内网某台机器的某个端口转发到外网对应的端口,这样外网就可以通过对应的端口直接访问到内网这台机的端口,是一个挺不错的操作,不过涉及到一定的安全问题,还是需要警惕一下的,现在民用网很多端口都被禁用掉了,比如80、21端口这类常用服务的端口早就禁得差不多了,转发出去可能也就只能在你这个城镇里能够访问到,跨个地域就无法访问了。回到正题,内网映射,原理上和端口转发相近,不过这个是内网机器直接与Ngrox服务器创建一个代理隧道,它为你提供域名,通过这个域名即可通过他们服务器访问到你内网的机器,我这段时间用得很多的SSH代理隧道原理也很接近。

利用ADB搞事控制别人Android机

把自己的Android机ROOT后,然后安装了BusyBox,下载了arm上运行的adb工具包。当对方的usb调试打开时,用一条数据线将我的手机和他的手机连接一起,我的手机是支持OTG功能的(也就是说能够外挂其它设备的),lsusb找到他的设备连接后adb devices找到Android设备,adb shell就可以来一波骚操作,如果对方手机root过的话,他手机系统的生杀大权就在自己手上了嘿嘿。

开发一个安卓手机助手

在经过C# Winform和Android的学习,突然冒出一个神奇的想法,何不借助winform + adb调试桥做一个安卓手机助手呢,当时觉得把手机插入电脑挂载进行文件操作不太爽,希望开发一个能够进行文件管理等操作的工具。不过当时忘记截图了,只剩一个启动界面。

神奇的Python单片机

之前接触51单片机之类的都是使用C语言编写程序,这一次一个嵌入式群的朋友给我寄来了一个可以使用Python开发的单片机。不过现在使用其他语言开发单片机程序的开发板已经有很多了,以前那时几乎还没有。尝尝鲜。

新社团,新域名

当时编程社在高中学校里不受学校的支持反而是反对,我们多次申请成立社团都没能得到正面的答复。于是不打算在学校里办了,直接独立出校外,吸收当地各个学校的学生作为社员,社团也是完全免费的不像其他社团要交入社费。基本大部分资金都由我出了,也有不少热心的支持者向社团捐款,很感谢他们但最后也辜负了他们。在这种情况下我们也不再用原来的社团名称了,和几个主要成员聚在一起商讨新名称,每商量一个名称我就在手机上就用万网查一下这个域名是否被占用,最后试出了Vinlic这个名称,然后我就去注册了vinlic.com这个域名。改名也许是为了证明新生吧,没错,这就是我现在常用的昵称,它曾代表着一群人,最后只有我留了下来。

把网站替换成了CI框架

那时觉得官网用WP太笨重了,运行速度不行,虽然做过几次优化。在结识另一个编程社的社长后尝试了CodeIgniter,一个挺优雅的PHP框架,第一次接触到MVC开发模式,有点懵逼,也正是这个框架给了我后续开发其它语言程序的灵感启发,使用这个框架重建了官网并做了后台系统,不得不说MVC真是个伟大的思想,为前后端分离走出了第一步(当然,现在更成熟的方案已经遍地开花了)。

力推一个神奇的SSH客户端

当时一直在寻找一个可靠的SSH客户端,最开始碰见的是putty,然后是XShell,后面我遇到了一个功能更全更方便的客户端,那就是MobaXterm,它不仅支持开启ssh session会话,还支持各种接口的访问,甚至VNC等远程桌面都支持,还有一个很重要的是它旁边附带一个SFTP连接窗口,可以在右侧运行命令,左侧操作文件,进行上传下传十分方便。

神奇的GitHub

我也在此时接触了GitHub(世界最大的同性交流网站),学会将代码托管到上面,虽然当时git命令还不是很熟悉,但是会基本的fetch、merge、add、commit、push,Git是个伟大的发明。

花生棒,好坑的东西

之前使用Ngrok进行内网穿透时就关注到花生壳Oray的花生棒,到手后,虽然能够实现内网穿透,但只能使用固定域名和固定端口号,换端口号还要买,月流量也有限制。非常的不自由,虽然现在他们的产品应该改进了不少。

做一个网页的成绩查询系统

当初应该是利用全通数码的一个后台漏洞直接查询成绩来着。

居然想自己写一个论坛

可能是受到CI框架MVC思想的感化,同时还学会了使用Bootstrap去美化界面,也学会了使用Jquery,入门PHP大概一个星期左右,在这种情况下居然想写一个论坛,我的性格是说干就干的,于是乎我参考了CI在controller和view之间的源码然后也看了WordPress的部分源码,决定开始做,当时水平不够,不敢把MVC的Model加进来,直接使用CI框架的思想结合WordPress设计上的思想撸出了一个VC架子雏形做成了一个简单的论坛系统:Vbbs,不过因为各种不成熟最后决定弃坑,比如没有对发送的内容进行xss过滤等问题,不过也是成功为后面做了铺垫。

Windows + Ubuntu双系统走起

随着对Linux系统的深入探究,我开始希望直接在笔记本安装一个Linux系统玩玩,但是机子上还有个Win7不想直接换掉(当时Win10应该出了,但是笔记本配置怕拖不起就没装上Win10),于是乎我选择弄双系统,由Grub作为启动引导。先在Windows里在磁盘管理里腾出装Ubuntu的空闲空间,应该是腾了80GB,接着把Ubuntu镜像烧写进U盘,然后U盘启动,用Ubuntu安装程序自带的分区程序根据百度的教程手动分一下区,然后开始安装流程,安装完后重启,自动进入Grub引导选择启动程序,这样就又能进Win7又能进Ubuntu了。通过这一波学了一堆命令以及编译安装这些操作。

国内版GitHub:码云

当时见多的是开源中国但不知道啥时冒出一个码云,似乎是刚出的代码托管服务。一脸好奇的用上了码云OSC,当时码云域名还不是gitee.com,国内的代码托管意味着速度快多了,但是缺点是开源项目太少了。自己托管点代码还是很不错的,不过现在环境应该有点变了,开源项目开始丰富起来。目前托管代码也是经常在码云上。

阿里云服务器

这个时候阿里和腾讯的学生服务器像我招手了,以着较低的价格购买服务器深得我心,之前也抢过免费腾讯云服务器拿来用了一段时间,最重要的是那时候已经支持幕布拍照+阿里云APP拍照的备案方式。于是乎买了服务器,果断的选择了Linux做服务器系统,不选WindowsServer的原因是服务器配置比较低,开个桌面还是很耗资源的,而且在很多服务器软件的选择上更偏向开源软件,所以选择了CentOS6做系统了,最开始搭了Apache2 + PHP7 + MySQL5,后面慢慢的把Apache转向更轻量的Nginx,再往后就没用PHP了。

程序员也要懂得小烂漫

程序员还是不能太呆😂,高三时用Jquery实现一个自动轮播的文字和图片配上音乐送给一个人。

迟来的开悟

到了这个时候我突然想明白一件事,不再对应试教育开炮。大学给了我成长的机会,给了我更高的起飞点。

可是这时候想通也已经晚了,因为我也即将面临高考,以前的知识链条早就七分八裂,临时抱佛脚并不现实。

完成一个小目标:开发魔塔

先放上小游戏链接:点击进入游戏
首先发布的地方是在魔塔吧:https://tieba.baidu.com/p/4545234500
码云Git:https://gitee.com/Vinlic/Mota
我是一个不善于玩游戏的人,不过小时候喜欢玩的游戏还是至今都喜欢的。红警2、魔塔等等这些游戏是我的童年记忆,至于魔塔,这个游戏可能比较冷门,是一个历史蛮久的游戏了,一种策略类的固定数值RPG游戏,最开始的魔塔是两位日本人开发的,后面传进国内,就有人开发出各种不同的版本了,我玩的最多的是胖老鼠工作室的魔塔,它的配乐也挺吸引我的。我迷上了这个神奇的游戏决定有一天也要开发一个魔塔,之前我是尝试用RPG Maker制作,但是这时候我已经有一点HTML5的基础并了解到画布Canvas的使用,就萌生了一个大胆的想法:开发一个HTML5魔塔。当时我可以很确定的是,还没有任何一个基于HTML5的魔塔出现,所以做成了这个也算是开启了先河哈哈。整个开发流程也算坎坷,也感谢魔塔吧的几位元老建议以及当时建立的测试组的建议支持,魔塔取名叫:纪元魔塔前传。

重点的是那时候高三好像离高考也不远了,我没得用电脑!不得不拿起我手上的红米手机来写代码!然后出现了这么一幕。。。

就连地图的数组都是手打出来的,本来这次开发完是打算做一个地图生成工具的

没有看错,在手机上写代码,完成了整个魔塔小游戏的开发。主要用了三个工具:DroidEdit、ksWeb、UC浏览器。第一个是安卓上的代码编辑器,也是我当时能找到最好的掌上代码编辑器了,自带语法高亮等功能(不过代码写到2000+行的时候语法高亮变得十分的卡顿,可能代码量过大,后面直接关掉语法高亮继续敲代码,所以当时我几乎是看着一坨黑字在敲代码),也就只有H5的代码能这样直接在手机上写直接在手机上调试了吧。ksWeb是一个能够在安卓机上开启Web服务的软件,提供了Nginx服务器引擎、PHP解释环境和MySQL,使用它是只开启Nginx方便在浏览器里面访问localhost。然后为什么选择UC呢?那个时候主流的手机浏览器里我大概测了一遍发现UC和Chrome对H5支持还不错,当时像Vla这种偏向于开发人员的浏览器还没有,最终选择UC的原因是UC清除浏览器缓存不会那么麻烦(因为手机浏览器基本都没有关闭缓存的功能,而我又要在手机上做H5开发,每次修改完必须清除浏览器缓存再刷新让最新的代码运行,整个开发下来我都忘记我清了多少次缓存了,至少有几百次,中途有一次清缓存把UC清挂了,不得不重装UC。),最终成品接近5000行代码,也是一段很奇葩的历史了,手机敲代码敲出一个小游戏。

在开始之前我收集了一些现成的素材,素材都是采用雪碧图那样的,下图是一小部分素材的样子,需要把素材动态的绘制到画布上。

最开始的想法是使用三层canvas,背景层、前景层、主角层,这个做法是借鉴了之前看到的一款H5游戏中的做法受到的启发。后面了才发现不够用。最简单的版本粗线了!

但是觉得界面太丑逻辑太烂,于是开发第二版本出来。

然后还是觉得太丑逻辑太烂,还有一个原因是不支持PC横屏,于是开发出了现在的终极版本。

到此,这个持续3个月在手机上敲代码开发的魔塔小游戏终于完工了,在高考前一晚上我发布了这个魔塔到魔塔吧和安卓魔塔吧。第二天就去高考了,其实我已经预料到结果了,高考最后成绩是196分,不过幸好补录到环境还不错的东莞的3B大专学校,也是万幸了。

之后还邮件联系了日本的最初元祖魔塔的作者,他们也给出了不错的回复,并把首个H5魔塔放入了他们自己网站(http://wwajp.com)的链接里,十分感谢。

Chrome插件喵喵喵?

在科学上网后,也使用上了不少Chrome插件,于是很好奇的想去是试一下开发个插件玩玩,跟着一些教程在manifest.json配置了一波自己再写了部分代码后成功完成了小插件。当时需要刷一些没用的题目,我就靠这个插件自动刷题了,顺便还把上面的魔塔小游戏也封到了插件玩玩~

准备开发第三版内核

在上面魔塔的基础上,我觉得应该重构一次代码,于是这次潜心研究了A*寻路算法,由于我数学功底很差,花了挺长时间去理解和写代码验证,这一次加入了自动寻路和背景音乐,也改进了屏幕适配。但这一次却因为时间不足烂尾了。不过寻路算法的成功应用给了我对算法的一点信心。

自制小框架

在经历之前那么一大波之后,其实我算是正式走入拍黄片(PHP)的大门,也准备跨入大学阶段了。然后又产生了一个大胆的想法,为何不做一个PHP框架呢,反正有从之前CI和WP学到的框架思想。又是一个说干就干的事情,在花了大概两三个星期的时间终于把这个“框架”给完成了,并花了几天时间整理成开发文档doc.html。Gitee地址:https://gitee.com/vblog/VCMINI

又来一个毕设

虽然这个时候还没进大学,但已经进了各种学校的新生群,有一个师兄找上我问能不能帮忙用PHP做一个论坛系统作为毕设,这一次和上次一样我依然没收费,决定开干,经验比钱重要。最重要的是我可以验证一次我的VCMINI框架的可靠性。花了大概三天左右的时间,论坛系统新鲜出炉了,基本功能都齐全了。命名为LHKB。

开发自己的博客系统

我其实是一个不喜欢看书、看视频的人,而是喜欢用搜索引擎搜索,搜索经常能看到各位大佬的个人博客,甚是羡慕。又不想用WP这些笨重的博客系统,于是乎,想基于之前的VCMINI开发一个自个用的轻量级博客,页面上也引个JQ自个做,用CSS3媒体查询做做自适应,说干就干,经过了两三周努力后,终于把这么个Vinlic博客系统撸好了。图只能放一下手机上的截图了,因为当初没有截电脑图。

进入工作室了

进入了我觉得挺OK的大学了,军训前就有个师兄问我要不要进入科创工作室,工作室那时也是刚刚建立,来得早不如来得巧,于是军训后我这个16级的新生就和几个15级的师兄一起进入了这个工作室,工作室由于刚建立,虽然有了一块很大的地方,但是设备是不齐的,只有从老师那里搬来的6张办公桌,各两张拼在一列,师兄们坐满两边,我神奇般的选择坐靠近门口的两张桌子的夹缝之间,也就是位置是由两张桌子构成的。有了这样一个环境和气氛,让我成长得更快了。这些师兄也很不错。

蓝桥杯?!

这时第八届蓝桥杯杀过来了,好像是工作室的指导老师让我们参加。很早以前就听过这个比赛,说实话,我很排斥算法类的比赛,主要是因为我数学不好,小学以来一直对数学提不起兴趣,到后面后知识链彻底断了后数学就再也学不回来了。我似乎有报名参赛,在体验了一次比赛后我也大致了解了这个比赛,在我看来里面其实很多题目跟真正的算法题无关,也就是说我还是有很大的挑战余地的,前提是得多练题。但是这么长久以来的考试挫败以及对数学的恐惧让我面对这些很颓废,也许在后面才慢慢改变看法了。

给工作室做一个打卡系统

随着进入工作室的人越来越多,为了知道大家来的情况,需要有一个打卡系统,于是乎就借助树莓派作为服务器在内网建立了一个Web服务器用于支持打卡系统,基于VCMINI开发出一个打卡系统网站,在内网访问系统打卡。

人生第一个机械键盘

在挑机械键盘前,仔细去看了各类对轴类的介绍和分析,最后选择了茶轴,很多人的评价都是说,刚开始用他就跟个薄膜差不多,用久了就能用出区别。我选了一个好像不怎么常见的键盘:Varmilo阿米洛va87m,600+的价格还是很心疼的,不知道有没有被坑,毕竟第一次买。到手之后第一感觉就是非常重,铁壳的,键帽是侧刻的PBT,后面又买了一套有刻的键帽装上去。茶轴刚开始敲还真的有点普通,不过慢慢的还算适应,之后换了两次键盘最后还是选择用回了这个键盘,也许这就是适应了吧,当初觉得键帽太高了很难按到,现在却不觉得了,很舒服的打字,没有青轴的吵声又有点击打感。

玩一玩神奇的电脑棒

之前一直很好奇Intel的Win10电脑棒,然后去买了个回来玩玩,CPU是tom Z3735F,内部存储32GB,2GB内存,在体验上表示一般般,只能应付很普通的办公工作,拿来写代码勉强把。

换了新电脑

之前用的那台电脑应该有好几年了,当初是家里在药店抽奖中的(贼神奇),原本是2G内存后面我加了条4G内存条后感觉还能再战几年。不过该换还是换了,这次入了革命军(机械革命x6ti,十分后悔的选择),这是一个游戏本,配置自然不用说,但是重量和续航方面。。。,重量是我原来的笔记本的2倍重还要多,续航一般只能撑1个多小时。再往后一查机械革命的这款机器已经停止销售,官方也有透露出这款机器的电源设计有问题等等。在这之后痛定思痛,决定不再被坑。

登入锐捷交换机

工作室有两台锐捷交换机,看到上面有Console口,很好奇,不过当时还是对网络一点都不懂的,试了一次普通网线发现并不能串口通信,经过搜索一番后上淘宝买了Console调试线,拿回来后一顿折腾,大致了解了一点锐捷交换机的配置,不过这个交换机功能有点少,应该不是网管型交换机吧。

公司找上来,做微信小程序

微信在17年1月9号发布了微信小程序,才过不到一个星期,突然有一个人在QQ里找到我,是一家我本地的公司的老板,问我能不能做微信小程序。其实在此之前我对小程序的态度是消极的,认为不可能代替APP,但是后面我想清楚了,小程序出现的意义不是为了替代APP。这家公司想做一个点餐平台小程序,不是针对单家商户做点餐而是所有商户都可以加入平台,就像当时的美团那样。这个公司也是很小的,没有技术人员,我进入了这家公司任职开发工程师。为了开发这个小程序花了大量的时间精力去研究后端,从PHP + MySQL架构逐渐转移到NodeJS + Redis + MongoDB架构,因为发现PHP在应付这类项目显得有点力不从心,特别是在使用WebSocket实时通信上。这是至今我历程里提升最快的一次,基于koa2框架并采用自己的思想改造成自用API框架,然后在琢磨过程中不断的改进,也对数据缓存的重要性有了深刻的认识,接触了更多的数据库,了解更多特性,用上了ES7的语法,用云压测等测试接口返回速度等等,微信小程序上面代码架构几乎所有界面由自己设计和编写,整个过程在各方面综合的得到了巨大提升。但是很明显,我和老板都犯了几个严重的错误。首先不应该把一个小程序做的跟APP那样功能齐全,甚至集齐所有商家到一个小程序上,在战略上一个失误。加上这个产品的命名也不是一个很好的名称:粿团点餐。虽然抢占了小程序市场先机,但是各方面的市场战略不成熟加上缺少足够能力的技术人员,导致这个产品夭折。在过了一段时间后一个类似的小程序产品在海南上线了。我们已经晚了,到了后面老板也开始想换方向做。工资一个月是2000暑假期间4000,到了后面老板也宣布公司资金已经用光,我做到后面也已经有气无力的撑了两个月,不想再做了。不过这在我整个历程来看是里程碑的一次经历。

遇到iBeacon

在开发点餐小程序时曾经有个想法,利用iBeacon基站来定位用户在哪家店,如果能够更精确就定位到哪个位置(不过不太可能),想法很快也是打消了,因为很明显用在这个地方是不实用的。但是iBeacon确实可以完成很多事情,它使用蓝牙广播自己的ID,用户机器通过蓝牙能够感知iBeacon基站的位置了,可以实现如活动出席手机签到,多个iBeacon能够提供场馆导游、室内定位等功能,在未来物联网应该是一个不错的东西。在后面我就打算在一个校园小程序里利用这个进行学生考勤。

MarkDown写文档

因为老板说需要写一份接口文档,方便对接接口,然后选择了markdown,事实证明它确实很适合编写文档,可以通过特定的符号组合实现不同的效果,还可以内嵌HTML、图片、表格、列表等等,十分方便,当时使用的编辑器好像是马克飞象现在用了MarkDownPad2。包括这个博客里的所有文章,都是使用MarkDown语法写的,MarkDown万岁。

万能的Nginx

在之前的时候一直都在用的Web服务引擎是Apache或者Node.js直接创建的httpServer或者Tomcat。在后面接触了Nginx这么个服务器引擎后,仿佛得到了一把瑞士军刀一般,像之前只使用Nodejs做图片资源服务接口时发现访问时速度挺慢的,除去带宽问题还是有那么点慢,于是乎,决定让Nginx来顶住静态资源服务顺便用上gzip,然后其它接口请求使用Nginx的反向代理,同时代理SSL,这样就能够通过443端口访问到内网的Nodejs服务器的任意端口,这样不仅可以提高静态资源服务速度,还能代理SSL请求实现https,同时还可以实现负载均衡,分离Vhost,Nginx还可以实现各种神奇的应用,给我的感觉就是一把瑞士军刀。
静态资源服务配置

API服务反向代理、负载均衡配置

一个有故事的故事

这期间我特喜欢听网易云上一个电台,这个电台叫:鱼乐七天,电台的主播是一个非常乐观向上在英国伦敦工作的小姐姐,她叫子涵,她拥有十分甜美的声线,经常谈各种人生哲理各种话题各种吐槽,得到很多听众的喜欢,她甚至还创建了自己的“后宫群”人能排到3号群,她的群也神奇般的有那么几个程序猿,可能她这样的女生特招程序猿喜欢。到了后面我决定干一件大事,为这个电台节目做一个“鱼乐七天lite”小程序,花了大概一个星期开发,但是在审核上线时受阻了,我忘记了这是需要许可证才能通过审核的条目,不属于个人可直接发布的小程序。后面想了想算了吧,就当练练手,得到小姐姐的赞还是挺兴奋的。

然而就在不久之后。。。。。我看到一篇新闻,时间17年12月28号,标题是:中国游客大巴冰岛车祸,大巴为了避让前面的车辆侧翻,有一名中国公民死亡。。。后来得知那个人就是子涵。第一次觉得生死原来离得这么近,心里很痛,现在每次打开她的电台还是会忍不住流泪,这么一场事故带走了这么好的才女,她连男朋友都还没交,人生还没正式开始就结束了。。。网易官方在得知这件事后也一起主持了最后一次节目,听哭了多少人。她因为没有系安全带,给大家提个醒,坐车还是应该系好安全带!这是血淋淋的教训。

初尝Electron

这段经历是包含在上面公司里的,当初老板要求做一个桌面版的商户端,在选择语言时,我发现NodeJS真是万能,JavaScript真是万能呐,前端、后端、桌面应用、安卓、IOS、嵌入式,这些都能采用NodeJS开发,简直上天入地无所不能。原本是想吃老本用C# WinForm开发的,看到有Electron时还是选择了它,毕竟谁不想一个语言打天下呢,这是一个能够使用前端代码构建桌面应用的框架。要说举例Electron的成功应用我就肯定会提VSCode。在开发这个桌面客户端的时候面临一个神奇的问题,那就是如何让这么一个桌面应用连接小票打印机出单呢?毕竟NodeJS和WinForm这种直接可以调用API不同,当时应该是安装了一个USB库,在Windows上还必须安装对应的驱动程序来供这个lib访问,折腾了一两天翻烂文档后终于能够控制小票机打印东西了,乱码问题也用编码转换解决了。不得不说electron是个好东西。

三角洲3D打印机

不知道是着了什么魔,又对3D打印十分感兴趣,然后上淘宝找了三角洲,也许是因为价格便宜,也许是因为公司发了工资,从精度上讲肯定是没有其他的精准。不过还是忍痛买下了,是线轨版的,比滑轮版提高点精度。到货后十分兴奋的拆箱装机(表示装机就花了一个下午,零件是真TMD多,玻璃不要在意,开始时放错位置)

组装完成后研究了一波Cura后,然后拿现成的或者是在3DsMax建模出来的模型,在Cura切片过后,由于第一次没啥经验发送打印后精度实在感人。。。可能没有调平,小时候喜欢红警于是乎做点红警的东西。

Server酱,服务器和开发者的桥梁

当初接触的一个不错的应用。这是一个利用公众号和开发者绑定,然后利用平台提供的key发送请求到他们平台,他们平台推送对应消息给开发者的应用。用于服务器报警上挺不错的,但是有些限制,Server酱,以后估计也打算为自己的应用单独做一套推送报警和日志的工具。

魔塔传人来了来了

之前魔塔第三版内核没做成,后面了突然有一个人在QQ上找到我,希望我提供魔塔源码,他想要开发一套魔塔样板做下去,我把源码交给了它,在之后后面的成就是出乎我意料的,他最后甚至改造出一套HTML5魔塔开发工具,并在B站发布了使用教程HTML5魔塔样板使用教程,也传到github出了文档mota-js,看到自己的源码有了这种传承方式很感动,也算是为开源出了一份力量,可惜已经没有时间去继续开发了。

第一次当讲师

这应该算是我第一次站在台上给别人讲东西,主题是GIt入门与应用,当时想要把Git安利给工作室的成员,认为学会代码托管是程序员的必备技能,git也好svn也好至少应该掌握一下。为这个也算精心准备了PPT讲解,让大伙大致了解Git是什么样的工具以及GitHub和码云,然后手把手教学一波基本命令操作。但是让我意想不到意想不到的是=-=学校的一位老师不知哪来的风声,也去学了这些,等到我大二时,他。。。居然把Git托管代码作为考试题目来考试,虽然考试是GUI的操作但是已经习惯了命令行了。

搞一个投票系统

那时学校有一个金点子大赛,大概是写出idea去比赛,需要一个投票系统,于是临时用NodeJS写了一个,由于是校内所以没有太多的防刷票机制,只通过限制IP和投票数量,数据库设计是每投一票插入一条投票记录,所以统计起来有点麻烦,闲着就用Python写一个程序统计票数,效果还行。

图片密码记事本

叫这个名字是因为,这个记事本是使用图片来作为开启记事本钥匙的,原理是通过获取图片的md5值作为密钥,获取数据返回,没啥技术含量,算是一个突然的想法吧,把自己的一些信息存在里面用一张特殊意义的图片作为钥匙。

人生第二个机械键盘

在一朋友的强推下,我一入坑就起不来了,买了IKBC Poker2青轴,到手后用起来是很爽的,毕竟第一次使用青轴机械键盘,噼里啪啦的click感很舒服,但是声音也很响,我最喜欢的是它携带十分方便,有边框,体型又小,他键位和其它键盘有些不一样,比如方向键集成到了WASD位置要按住另一个按键才能触发方向键。在当时觉得很方便,手腕不用左右移动去按方向键(如果用VIM做编辑器的话我觉得恰好满足需求,当时还是用得不是很顺)。

上手ChromeBook

很早就有听说ChromeBook的消息,很好奇,这么一个基于云的系统是有多6,不过我相信这是以后操作系统的方向,全部基于云进行数据同步,在新电脑上无需搬运数据。最开始上亚马逊看ChromeBook,发现价位大概在1000-3000左右,想买但是看到那巨额运费果断打消想法。后面了直接在闲鱼上淘个二手的惠普代工ChromeBook14,卖家还挺良心,卖之前提示我需要翻墙才能正常使用,当初虽然没搭服科学上网,但是借助自己笔记本全局科学上网开热点后还是能用的。到手后登上自己的Google账号,看到系统把我在自己Chrome浏览器的插件和记录同步过来的时候是挺惊奇的,之后又通过crouton安装了Ubuntu,毕竟ChromeOS用来做开发还是不是很适合的,于是乎装多个Ubuntu来玩,性能还不错,续航也令我很惊奇,可以用上五六个小时。

SSH隧道牛逼

接触到这个是因为偶然看到SSH命令有几个神奇的选项,竟然能够搭建正向/反向隧道,也就是说能够直接和开启着SSH服务的机器直接搭建一条安全隧道进行通信,就像VPN那样,于是就产生了神奇的联想:假设我想要在自己电脑行直接访问服务器的MySQL数据库,为了安全,MySQL服务器是只能通过localhost访问的,这时候自己电脑自然不能直接访问了,但是!如果采用SSH正向隧道,将服务器MySQL的端口代理到自己电脑的某某端口,不就可以实现连接本地某某端口相当于连接到了服务器的MySQL了嘛。把服务器MySQL 3306端口代理到本地的3306端口一条命令搞定:
ssh -fNL 3306:localhost:3306 user@ip

既然有正向那就有反向隧道了,反向隧道一个很神奇的地方就是,它能够进行内网穿透!没错,就像Ngrok那样,我能够把自己电脑的端口代理到服务器或者其他机器上的某个端口,这样服务器或者其他机器就可以通过那某个端口访问到我的电脑的端口了,这样就变得很有趣了,假设想在公司访问自己电脑的文件,只需要保持一条从自己电脑到公司电脑的反向隧道就可以了,不过这个做法我认为是存在一定风险的,毕竟反向隧道是在防火墙上打个洞出去的。之前还做过一个好玩的操作,我想要在外网远程桌面连接我内网的笔记本,于是用反向隧道将笔记本的3389端口代理到服务器的3389端口,服务器再将3389暴露外网。然后就可以随时随地在有网络的地方远程桌面连接到自己的笔记本操作了,前提是服务器带宽够大,不然那传输速度够呛。。反向隧道命令也很简单:
ssh -fNR 3389:localhost:3389 user@ip

给师弟师妹们洗脑

本来我是一个挺自卑的人,但是经过几次练胆后也是敢上台的,于是趁着大一学弟学妹刚来这个专业有些迷茫,赶紧洗脑,洗脑大概是有那么点成功,大概内容是引导他们如何走入编程这个深坑,如何少走一点弯路。

顺便在演讲前的晚上,熬夜花三个小时做一个资源站以及写的一万字问题解答文档,当做送他们们的小礼物。

Nginx + FFmpeg实现直播

之前的老板有一个需求,他们电视台要做一个小程序上的频道直播,有推流机,我大致研究一番后,决定让推流机推RTMP流到Nginx,FFmpeg从Nginx中拉流转码后再推给Nginx HLS,HLS将流分解成m3u8索引和片段,网页上使用video.js来播放m3u8实现直播。这一次,我发现工作室的摄像头的RTSP流似乎并没有加密(市面上很多网络摄像头的连接地址和用户密码都是固定的),于是乎,根据上面的原理把RTSP流拉给FFmpeg解码推到Nginx,网页上就实现实时的监控画面了~。

入了DELL屏幕

开始觉得屏幕太小,写代码分两框时,有点不够显示,于是乎,又下重本去买了个Dell的SP2318H,虽然色域上等等不是很好,但是我只用来写代码足够了,重点是当初狗东上这屏幕搞活动只要998。到手后还不错。

拿到树莓派3B

之前买的是树莓派2B,这一次看出了3B挺好奇的也买了个,这一次比上一次有诸多新鲜点,WIFI和蓝牙都集成在了板子上,不用再外接网卡了,性能和内存都有所提高,挺满意,不过目前还是被我拿来做服务器用。在之前也进了树莓派的QQ群并混上管理员了,给群友解答问题得到了不少提升。

斐讯k2刷一波固件

斐讯k2的0元购吸引了一波羊毛党。不过这次是真的想试一波这个路由器,之前闲置的这么一台斐讯k2双频路由,想要刷一刷固件拿到宿舍用,因为发现宿舍那破小米路由3C是真的不行,趁着宿舍提速到50M(对,在这个100M带宽遍地是的情况下学校联通宽带才升到50M,而且费用贵,网速还好够用)赶紧装下去试试,于是对路由器开刷,下了Breed、华硕老毛子固件,先刷了个Breed防止刷砖,然后在Breed刷固件,成了后就按自己的开搞了。

玩了玩Arduino

在了解树莓派的过程中也顺路接触了Arduino,将树莓派作为上位机,Arduino作为下位机,实现一个远程控制舵机旋转打开门。蛮好玩的。

强上React-Native

老板后面又找我说打算开发一个美篇那样的APP,就这样连React都没碰过的我,强上了React-Native。老板的话仿佛是说:“你被强化了,快送!”。也不算很吃力,但是直接强上还是有些心累,做到后面老板也不定方向做也不发工资了,决定还是放弃吧,我自己还有很多事情可以做。也算是玩过RN的人,说实话还是需要有一些Android的干货知识,不然用RN开发Android还是会遇上一些奇怪问题无法解决的。

程序员也要懂得小烂漫2

情人节前一天用一天时间赶出来的程序,虽然还是基于Jquery,但是比上次的程序改进很多,效果也多了点花样,也是送给了一个人。

用Vue.js + Node.js建个API服务网站

没错,这又是一个弃坑的项目。灵感来自又一个神奇的想法,在想如果在学校内部署一些传感器,通过传感器获得一些实时数据,存入时序数据库,然后提供API接口服务,校内开发者能通过接口获得一些实时数据,比如食堂某个时段的人流量,通过这个接口也能建立大数据图表,数据甚至能够用于AI模型训练。于是乎做这个服务网,但是还是因为种种原因终止了,不过想法我觉得是挺不错的。

Vinlic框架搞起

这时已经是这个框架改造的第五个版本了,这是从开发小程序开始在研究的,koa2原本是一个类似Express的Web框架,但是为了做成一个比较顺手的RESTful API,才决定的改造,改造的效果还是不错的。独立出路由件和处理件,不断积累公共类库common,并对mysql、redis、rabbitmq等语句操作做了二次封装和不断改进,后面的创新盒子小程序也是沿用这个框架。

根目录

路由件采用HTTP动词作为key,接口URI和方法作为value,当请求接口时匹配URI,匹配上的时候就调用路由方法

处理件作为一个类暴露给路由件,路由方法被调用时根据需要调用对应的处理件的方法,完成处理后返回数据。图里是user处理件的checkLogin方法。

目前这个“框架”不足是非常多的,比如事务上、错误报警等的支持等等并不完善,正在准备重构。

第一次拥有用户,创新盒子

这是对我人生意义重大的第二个项目,第一个是魔塔,因为这也是第二个真正意义上完整并上线的项目,最重要的是这次有了用户,有用户就意味着你的程序能得到大家的测试,有了真实的建议和需求。他们使我不敢轻易弃坑。
这是一个提供优质校园服务的微信小程序,专门做出来给自己大学用的,现在学生用户量已经有7500+,整个学校学生12000+人。
为什么要做这样一个小程序呢?首先,我是为了一个人,想要让这个小程序帮助她更好的走过大学生活。然后是因为觉得学校的校园服务实在太烂了,想要做个好的系统来为师生服务。一有想法就立刻开干了,后端API沿用了Vinlic框架,经过一段时间的研究和设计架构,决定了如下架构:

Nginx进行SSL代理和负载均衡并负责静态资源服务。

MSYS是开发出来用于处理WebSocket连接和数据整合并对接RabbitMQ消息队列的“框架”,因为要进行消息推送等服务。

Vinlic框架负责整个RESTful API服务运行。

Redis负责各类数据的高速缓存。

MySQL负责持久化数据的读写。

由于服务器并不够所以里面集群目前都还是单机,但是随时可以实现集群。

其中有一点是查饭卡数据的平台在学校内网,外网无法访问,于是乎刚好用上之前玩的SSH隧道借助跳板机进行一波代理,那么跳板机选啥呢,当然是成本低的树莓派了,它接入到工作室网络可以同时访问内网和外网,反正放着也是吃灰,于是乎树莓派作为中间人,在我的服务器和学校内网的一卡通平台搭一条桥梁。

有了比较可靠的架构和后端接口,小程序开发起来也算顺手,但是小程序原生封装起来还是有点麻烦吃力,基本是沿用之前做小程序的那一套封装,下次重构了准备用上wepy或者mpvue框架,总的来说还是OK的,初步功能都是提供给学生的,从学生的反馈来看,还是相对靠谱的,在期末查成绩高峰时,前后端一切正常,除了爬取学校服务器的部分可能出点问题,问题是因为学校服务器抗不下这么大请求,就算我这边后端正常,学校服务器宕机了也是没法子的,所以我经常得盯着学校的服务器怕挂了。实现了一些功能,比如一卡通查询、查成绩、图书馆、课程表等功能。

拿这个作品也去了不少校内外比赛,拿了不少奖了,第一次接触这么多用户的使用也给了我一种责任,我想好好做好这个产品,为他们负责,为新生们提供最好的校园服务。我觉得我还应该面对更多用户,验证我的架构是否有问题。不能停留在理论。