2024/4/7 23:32

我的技术生涯(2013-2016)

高中

初中的一位好友曾说自己要去读中专,也是偏向于软件研发。这让我萌生也想去读中专的想法,简单的认为也许在哪能够充分发挥自己的能力和想法。

这时老爸阻拦了我:

“你要是考不上彭中,你就不用上高中了,中专更不用去!”

他对当地的教育环境看得更透彻,深知公立的高中学校除了这个别无选择,其它的生源只会更糟,也许某种程度也考虑到我曾是校园暴力受害者。

彭中全称“海丰县彭湃中学”,1957年,为纪念革命烈士彭湃,学校在五坡岭新建校址,并正式更名为彭湃纪念中学,简称彭湃中学,是当时我们县城里很好的高中学校。

可我总体成绩并不好,没有很大的信心,母亲也曾思考要不送去艺术学校得了,毕竟绘画天赋还是有一点的,但最后我还是最终决定拼一下试试,在中考前的最后阶段进行了拼死挣扎。

当我踏入这个近百岁的校园时,看着地面微微晃动的树荫,心中开始感激父亲的“阻拦”,我录取上了。

渴求知识

计算机教育在小城镇里是不会引起重视的,两周一次的电脑课,已经沦为游戏课。

课程内容设计上也是落后且过于基础,为了获得更有效的知识,一天周末前往了县图书馆找计算机课程书籍。

可惜这类书籍确实少得可怜,只借到了两本勉强可用的书籍:《21天学通Java》和《Flash8动画设计制作入门与提高》。

后续还前往当时规模最大的蓝天广场的书城中寻找编程书籍,在反复寻找和询问店员后,他们翻找出了一本《轻松学C++编程》.

书的质量不能说有点东西,只能说一言难尽,这让我很痛苦。感谢后来的当当网让处于小县城的我们也能买到优质书籍。

纸上写码

由于没有电脑能够实践,开始在纸上写下一段C语言代码,在没有编译器的情况下也没法判断是否写错,就很离谱(字就更没眼看了)。

编程小组

高二时,班里来了位年轻的数学老师,他叫刘畅,人比较瘦小,但思维十分跳跃、脑洞极大。

大家都认为他的言行不太寻常,我也曾公开吐槽过他,这里我要对他说一声对不起,因为他是我人生轨迹的重要一环,是把我彻底引入编程生涯的引路人。

“你们有人学过编程吗?”

这是他在课堂上提出的问题,当时数学的必修三课程还没有开始(只有这一本才会提到编程相关知识),突然提出这样的问题,同学们都一脸问号。

“我知道一点。”

沉寂了10秒左右,正当他准备结束这个问题时,社恐的我举起手说了这句话。

他的眼睛瞬间亮了,仿佛看到一块金子,立即当堂开始商量组建编程小组,由我作为组长。

于是,在这个小镇里,第一个由中学生组成的编程技术团体成立了。

起初,小组里只是定期分享一些技术知识,尽管大家都处于一知半解的状态,但都在努力的摸索和攀登。

当时的我在思考:“如果能让更多人学会编程该有多好,也许编程就是未来一项人人都需要掌握的技能呢?”。

刘畅老师和我谈话的部分脑洞语录:

编程社-成立

我们盘算着成立一个编程社团,这样能够吸纳更多对编程感兴趣的人参与进来。

筹划工作很快就开始了,社团命名为AiDou,刘老师请美工设计了编程社的第一版Logo:

成立准备

接着用当时从家里拿的旧安卓机起草了社团宣传单和社团成立申请书:



再自费在某宝订购印制了1000份社团宣传单及上百颗印有社团Logo的可佩戴徽章。



启动宣传

传单到位后,趁着午休时间迅速把传单发放到高一和高二年级学生的课桌上,很快下午就陆续有人加入社团的QQ群中,也陆续有人到我的班级门口递交报名回执。

我们向成员派发的印制编程社Logo的徽章,他们在书包挂上徽章为我们进行二次宣传,并在人流量最大的厕所张贴宣传单(女厕就托女同学去贴),很快又带来了更多的人。

编程社-改革

很快我们就发现,大部分人只是来凑个热闹,其中也不乏捣乱者,很多人发现编程学习的难度后也选择直接放弃,而且由于缺乏一些管理经验,整个群体氛围不佳。

在和几个活跃的同学讨论后决定进行初筛和复筛,我们出了一套题目用来验证是否具备学习编程的兴趣和计算机常识,最后通过复筛的仅剩20人左右。

后续制定了相应的社团规章制度用来规范风气。

编程社-网站建立

一位社员向我推荐了免费空间(简称免空)并为社团搭建了一个官方网站,他自己在运营一个名为“海丰萌客网”的网站,后来成为社团的前端部部长,免费空间其实就是一种共享虚拟机,和如今vps有一些区别,首先它是免费的,因此通常和其它站点共享同一个IP地址,带宽也是共享的,处理器、内存、存储资源也比较有限,不提供shell,只提供最基本的控制面板,可以进行ftp上传,提供基础的动态页面解释服务(如PHP),这种主机一般只能用来搭建一些个人的小站点,而当年的这批免费空间运营商早已不存在,用爱发电还是太难,站点管理,DDOS防御等等都得面临巨大开销。


编程社-申请驳回

为了提交社团建立申请书,和几位社员四顾校长室,终于等到校长,说明来意后他拒绝了我们的申请。

“你们现在这个阶段应该好好学习,高考比什么都重要,这些社团等到大学再去搞吧。”

其实校长说的并没错,但这让我们很沮丧,明明学校里的文学社、天文社、雅言社、吉他社等等都能光明正大的获批并运营,为什么编程社就不能存在呢?

第一次遭拒后,我们依然不死心,由我一位文学素养极高的老友正燊代笔写了一篇长篇报告再次去面见校长,但并没有带来任何改变。



在创立编程社的过程中,也在积极和国内其它的中学编程社团取得联系,希望从他们那获得经验,同时发现他们在申请建立社团时也遭遇同样的困境:

编程社-开课

社团成立遇挫,自然是无法申请到微机室的使用权,但我们心里的火苗并没有熄灭,决定进行游击作战。

我们通常挑选周六日或放学后的时间集结社员到教室里开会和教学,我抽空制作了每节课的PPT。

第一节

主要是讲述计算机的发展史、计算机的基础常识、计算机的分类、微控制器基础知识、数据表示基础知识。

第二节

主要是讲述计算机组成和工作原理、什么是编程、什么是编程语言、什么是编译。

第三节

主要是讲述软件的基础知识,常用软件功能的使用方法,认识一些工具。

遭遇变故

结果只开完三节基础课就被保安大叔发现我们在偷偷开课,非教学时间直接把教室门锁了。

之后还举办过一次社内的笔试答题比赛,并且为优秀的社员发放一些奖品。

编程社-社员作品

编程社中不乏有基础有水平的成员,他们做了些有趣的作品比较典型有:

前端部长使用易语言实现了一个成绩查询工具,可以通过学号和姓名直接查询到成绩而不用登录缓慢的教务系统,其中最骚的操作放到如今也十分亮眼:通过爬取新浪博客博文获得的内容判断是否需要更新工具的版本,并且将数学必修三的所有编程题目都使用易语言实现了一遍,现在他已经进入绿盟工作。



还有许多作品没有留存截图,大家的作品让我发现中学生是完全有能力学习并应用编程的。

编程社-望向远方

随着社团在校内活动日益不便,我决定将编程社独立到校外并成立为信息技术协会,同时加大在网络上的宣传。


后来免费帮助校内的五坡风文学社建立他们的网站。

虽然学校官博也曾声援过我们,但我们依然回不去了。

电脑自由

高中的暑假里,父亲终于允许使用家里的笔记本电脑,品牌是宏碁(Acer),据说在药店抽奖抽中的。

这来之不易的自由肯定要好好珍惜,打算尝试一下3D游戏的开发,下载了Unity3D和3dsMax。

初次接触对材质贴图都还没理解透彻,有点乱来,开始正式了解一些3D建模知识。



之后还去试了下刚出新的虚幻UDK引擎,实实在在的有UE4给那次时代的光影效果震撼到。

初试Java

和所有Java初学者一样,下载JDK并安装,再把环境变量配置好,不一样的是我的第一份代码并不是HelloWorld,而是用记事本编写好一个加法计算代码,接着使用javac编译出了字节码文件并运行。

我学习一样新东西的方法很奇葩,如果给一本书,我不会把它完整看完,而是从目录中挑选出我感兴趣或者我现在就需要用的章节来阅读,学习Java时我直接跳到了Java Swing的部分直接学习窗口程序的开发,由于当时还没学习文件IO相关知识,只配合Windows批处理bat文件实现了一个清理垃圾文件的功能。

Winform与PhotoShop初接触

学习Unity3D时发现里面使用的脚本语言是C# Script,为此我误打误撞从当当买了本《C#从入门到精通》,这之后才发现原来C# Script和书中提到的C# Winform不是一类东西,但Winform高效的窗体程序开发方式深深吸引了我。

这个《XXX从入门到精通》系列大家肯定很熟了,出了名的智商税书标题,可惜当时还不懂。

为开发Winform安装了Visual Studio 2010,忍不住吐槽这是一个十分笨重的版本,如果没记错,单安装包就接近4GB,启动速度慢、占用资源高,最后为了流畅的开发,不得不把Windows的效果调整为性能优先,硬生生把Window7的界面拉回到了Windows2000的模样。

刚开始使用C# Winform做了个巨丑无比的界面,估计请外星人来看都觉得抽象,不过在这个过程中对Windows的空间和COM组件有了一些了解,印象比较深刻的是异形窗体存在镂空的时候在某些系统无法显示为透明,动用了GUI绘制才解决。

作为一个程序当然需要有各种图标,当时有免抠图标的网站特别少,所以顺手把PhotoShop的抠图给学会了,然后就开始各种奇葩抠图。

PS在我以后的工作中已经是经常使用的工具了,在没有设计师的时候,自己就可以干完大部分活。






四处救火的日子

教室的多媒体系统处于长期无人维护的状态,这导致老师上课操作总会遇到各种诡异的问题,总是让我去救火,甚至是跨班级跨年级的救火。

班级管理系统

脑洞一开,想给班里搞个班级管理系统,把一些常用的功能放进去多媒体系统,我用C# Winform做了个有统计班级财务状况、播放日常英语、语文听力及投票功能的小工具,为了实现这些第一次接触了数据库和文件IO,使用的是Access数据库,这个数据库只能用于存储小体量的数据,但也足够使用了,文件IO主要是需要遍历文件夹以及读取文件播放。


第一个域名

编程社的官网其实一直都是挂在别人的三级域名上,为后续发展和宣传决定在万网买下一个域名。万网在当时还没并入阿里云。

选了个cn作为顶域,域名叫:aidoukj.cn,意思是AiDou科技,不过后来编程社改名为Vinlic后就弃用了此域名。

正式建站

既然域名到位,服务器自然也不能再用免费空间,为了先不备案我找到一家名叫恒创科技的主机商买了香港的共享主机。

共享主机和免费空间原理其实也差不多,都是从物理服务器上分割出多态虚拟主机,IP也依然是共享的,只是性能和带宽相较有一些优势,也不用老担心关停,重要的是对于资金紧缺的我来说270一年的服务器实在无法拒绝。

至于为什么不备案呢?当时国内阿里云、腾讯云、华为云等服务器商还没发展起来,备案是一件非常费时间精力的事情,要寄东西要到处跑,不像现在服务器商给你寄个幕布自己拍张照片,APP里操作一下上传些信息,服务器商帮你去处理管局备案,基本半个月后就通过了。

这个主机自带PHP解释服务和MySQL数据库,我下载了WordPress源码并上传上去,这是当时最流行的博客平台,只需要进行一些基本配置,网站就可以运行了,支持海量的插件与主题。接着给域名添加A记录把 www.aidoukj.cn 解析到主机IP地址上,同时接入了一家图床来提供图像服务,因为主机带宽比较小。

至此完成基本的建站工作,真正见识到基于PHP的WordPress是如何成为快速建站王者的,入门简单、生态丰富、扩展性强都让它成为第一大建站平台,比较大的缺点可能还是性能较差。



官网建设好后,就在思考如何能够在百度能够搜索到这个网站,通过了解爬虫和SEO,针对站点做了一些SEO优化。

某天,通过日志发现百度的爬虫终于进站爬了一遍,实际上谷歌的爬虫比他来得早得多,百度还是太磨叽了,第二页就能搜索到AiDou科技的官网。

刷机吧

这是一部只有几百块的语信T31,标准的山寨机,但是山寨机就是牛!那时小米还没出手机,而且是出MIUI刷新ROM,我第一次通过线刷方式给机子刷上了MIUI开发版,见识到获得ROOT权限的自由和风险也更深入的了解Recovery,太香了,至今仍然怀念。

离谱的逻辑

为了实现一个简单的注册登录逻辑,在没学过数据库之前曾想出过一个十分变态的方法:上FTP!注册时往一个文件写入密码,账号作为文件名,上传到FTP服务器,登录时就判断FTP服务器是否存在名为此账号的文件即得知是否已注册,已存在的话则下载文件并读取文件内密码比对。现在回看只有社死感。


低代码建站来了?

许多低代码或零代码建站平台开始集中涌现,其中我所了解到的就有凡科建站,其实就是提供许多现成模板可以实现整合加载,对于想快速建站但又没有Web基础的人也许勉强算是个好选择。低代码曾让我想起了失败的Dreamweaver,就是传说中的DW,生成的代码基本无法维护、代码提示能力一般、无法跟进前端生态还很笨重。

重装系统

作为一名程序员,应该要会重装系统吗?许多人认为不需要,但我觉得非常有必要,重装过程中会让自己对系统和硬件有更深入的了解。

有位同学拿来一台很老旧的笔记本,让我救救它,在没有任何经验却答应了,我真是个负责任的三好青年呢~

我马上从MDSN下载了原版Windows7系统镜像iso,直接把镜像烧录在U盘上却无法完成安装,也许是旧电脑的引导方式问题。

所以改为下载PE镜像烧录到U盘并放入一个ghost的Win7镜像,引导进入PE这回总算使用ghost间接完成系统重装,发现几乎没有什么Windows系统是无法通过ghost还原到硬盘上的。

51单片机

受重装系统的影响,我对硬件的兴趣提升了一个档次,斥巨资几十元从某宝购入一块STC 51开发板,跟着案例使用C语言编写基础的流水灯、数码管、矩阵按键、红外遥控等小功能。

C语言的上手之后给我最大的冲击是:性能优化很重要。

这是第一次接触如此底层的硬件,对电子器件的工作原理相较以前有了更加深入的理解,原来复杂器件之间沟通也有协议,他们通过串口、I2C等传输数据。原来,单片机的心脏就是那个小小的晶振。

越权漏洞

某天发现学校的成绩查询系统网站只要更改学号并提交表单就能够下载到其它学生的成绩文档,实际上这个漏洞和上面介绍社团作品时前端部长所利用的漏洞是同一个,于是利用该漏洞也实现了一个网页,提供给别人查询自己的成绩。

Android开发初探

Android机不知不觉占领了国产机的主流市场,相关应用生态也迅猛发展起来,因此Android开发进入了我的视野。

Android版本当时还处于4.X时代,新的Android Studio也还没有被大部分开发者认可,更多还是采用更原始的Eclipse + ADT插件这种方式搭建开发环境。

还不会科学上网的我一直卡在下载SDK的相关组件上,好在通过修改hosts勉强解决。就是虚拟机对性能损耗极大,后来通过Genymotion体验到x86平台的虚拟化技术的应用才体验到虚拟机真正应该拥有的速度。

开发时发现ADB调试桥非常有趣,不仅可以通过adb传输文件和模拟操作手机,还可以在获得root权限并安装busybox的情况下将Android几乎变为一台Linux服务器。

Busybox

之前在刷机的过程中知道了busybox这个强大的瑞士军刀,它集成了大量的常用Linux命令和工具,使得Android上能够运行一些只有在Linux中才有的命令,不过大部分命令需要root权限才能够正常执行。

Android底层其实就是裁剪和深度定制过的Linux系统,但本质已经脱离Linux发行版的范畴,我猜测busybox这些命令应该都是把源码编译成ARM平台的可执行文件,再通过ROOT权限注入到系统bin。

为了验证猜想,尝试下载了可以在ARM平台运行的jdk并配置环境变量,第一次成功在手机上完成了Java代码编译和执行。这让我对源码、编译、目标平台有了全新的认识,也知道了软件移植是如何实现的。

神奇脑洞

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

树莓派

和往常一样在网上找一些新奇的玩意来扩充官网文章时,看到名为树莓派的开发板,顿觉神奇,它的体型只有银行卡大小,却五脏俱全得像台电脑,CPU、GPU、内存、网卡以及各种各样的接口一应俱全。

当时树莓派才出到2B版本,现在已经出到4B、5B了,它相对于其它自称性能更强的开发板生态更好,树莓派基金会号称所有树莓派版本的硬件都是统一定价35美元(当时折算人民币约238元)算是一个比较亲民的价格,可惜后来它的价格开始疯狂,甚至变成一种理财产品。

树莓派采用TF卡作为硬盘,官方提供了基于Debian定制的Raspbian或其它第三方系统镜像供你烧录到TF卡,插上卡后,它就是一台基于ARM架构平台的Linux主机。

当然,不可能拿它跟我们的手机或电脑的性能相比较,因为它的工作场景和它们完全不同,它可以用于各种嵌入式开发中,也可以作为上位机控制下位机,机身上丰富的接口也为它的扩展性提供了更多的可能。

第一个教程

关于树莓派的教程实在有点稀缺,我就用糟糕的描述写了一篇关于通过手机OTG连接树莓派的教程,主要是方便在外面或者不具备内网条件的人(比如我)可以通过一条数据线连接树莓派,通过USB共享网络给树莓派,这样就可以和它处于同一个网络了。

教程链接:http://tieba.baidu.com/p/4064959646

内网映射

一天放假回家,我在想树莓派能不能作为服务器搭建一个WordPress博客网站,这也是我第一次正式在Linux搭建PHP运行环境。

在此之前一直是在Windows上用PHPStudy集合包,很快在树莓派上搭建好了一个LAMP(Linux+Apache+MySQL+PHP)环境,Apache在树莓派上运行确实有点太重了,后面换成了Nginx,当时还不懂得如何在Linux上编译源码,所以搭建环境主要还是靠apt-get命令来安装相应的包。

一整套环境折腾起来后WordPress成功起来,但是问题来了,怎么才能让别人访问到我家内网的服务器呢?尝试过使用端口转发,但运营商似乎封掉了民用的80端口,为了网站能够正常通过80端口访问,我找到了Ngrox这个代理隧道,换做现在的话我可能就直接写个隧道服务到自己的服务器来实现了,但当时水平实在有限。

了解路由器的小伙伴们应该都知道路由器通常都具有端口转发功能,内网映射和它有些类似,端口转发是将内网的某个端口转发到公网的某个端口,是一个挺Nice的功能,不过既然把端口暴露在公网自然会存在一些安全问题,所以现在民用网很多端口都被禁用掉了,比如80、21这类常用服务端口早就禁得差不多了。

回到正题,内网映射不一样的是,它是内网机器主动与服务器创建一条代理隧道,服务方为你提供域名,通过域名即可通过他们的服务器访问到你的内网机器,这个和我后面提到的SSH隧道原理很接近。

企业邮箱

腾讯企业邮箱刚上线时申请试用是免费的,这个邮箱至今还在使用:vinlic@vinlic.com,使用企业邮箱的一大好处是它能够绑定自己的域名,只需要绑定时在域名解析添加MX记录即可,这样就可以拥有一个独一无二后缀的邮箱地址,并且还能为别人开设同域名的邮箱,不过当时还在用 aidoukj.cn 这个域名,直到后面因社团改名才更改域名的。

SQL Server

在尝试过Access数据库的开发后,很快也开始尝试微软家SQL Server,实际编写了一些增删改查的SQL语句后,突然发现原来数据库并不难学,它只是一个工具,写了个连接小Demo玩↓。

毕设外包

“有人会Winform吗?”

这是QQ上某个C#交流群中的一条消息,我和他询问要做什么,他说想要别人帮忙做图书管理系统的毕设。

寻思着正好可以锻炼锻炼实战能力,就答应免费帮他做了,在之前的锻炼下,初步具备基础的debug能力和优化意识,不再像之前那样完全不考虑性能和体验。

花了三天时间给这位老哥做好了基本的功能,为了方便他演示,决定使用Access这种可以离线访问的数据库来存储图书数据。做完这个项目感觉代码能力提升了一个层次。

入群狂魔

编程学习渐入佳境时,我渴望接触更多的大牛、接触更多的新知识,开始疯狂加入各种技术交流群,把各类编程语言以及嵌入式等相关的QQ群都申请了一遍,比如PHP、C#、Java、前端、嵌入式、Android、数据库、SEO、树莓派等,最终群的列表得拉个十秒左右才能见底。

进群后统一使用了一个虚拟身份:性别为女,并化名卢雪霑,群昵称叫:富贵险中求,大家都叫我:富贵。

这么做是觉得大佬们更愿意为女生解答技术问题,在此我要向当时为我提供帮助的大佬们道歉,希望你们能原谅我的这种行为,有机会我会去找你们请客赔罪。

平时看着大佬给萌新们耐心的解答问题,和大佬们的交流也总是轻松愉快的,有时也给别人解答问题,这一来二去,算是对能力的一次综合提升,而且和大家逐渐熟络,成功在一些群里混上管理员。

随着对不同技术领域理解加深,我逐渐明白,技术终是融会贯通的,没有最好也没有最坏,当有人争论“某某语言/技术才是最好”时,我不会去参与,在技术领域里一切都是工具,只有适合和不适合之分,选择什么技术应当由需求决定,而不是以主观定论。

Github

作为全世界最大的同性交友源码托管平台,自然是每个程序员必去的圣地,可是国内的高墙经常导致网站时常无法访问,对于国内的刚入门的程序员来说是一件相当难受的事情,这其中就包括我,没能用上梯子就临时通过修改系统hosts的方式勉强访问到了,国内后期虽然也涌现除了一批如gitee这类较好的代码托管平台,但开源生态这环实在过于薄弱,很容易被当做单纯存放源码的工具,开源还未成功,同志仍需努力。

工控主板

在一个经常活跃的技术群里,有位朋友给我送了一套电脑主板,很感谢它,起初以为只是普通的电脑主板,直到看到这个供电接口才知道不一般,它是一个工控主板,我上闲鱼捡了块笔记本硬盘和内存条回来合体,在教室开上投影仪给装上了Ubuntu系统。



买书狂魔

为了扩充一些系统性知识,开始在当当和京东买些书回来,不过我承认我基本没把任何一本书完整的看完,基本都是用到啥学到哪,其中有几本明显的智商税书,当时觉得比较有帮助的大概是C#开发实战和JavaScript犀牛书。


贪吃蛇

学了一段时间的JavaScript后发现这必然是战未来的语言,越来越丰富和强大的Web生态几乎把js推向顶峰。先用它写了个基于DOM的贪吃蛇来试玩一下。

流浪协会

改为校外流浪模式的编程社,开始接收各学校的中学生们作为社员,入社依然是完全免费,社团的运营资金全靠热心支持者的捐款和自费,很感谢当年捐款支持我们的人!虽然最后没能运营下去,但是我会把社团的精神继续传下去,在未来会带着足够的底气杀回来。

我们决定给协会更换一个更有意义的名字,在学校旁的冷饮店开展核心成员集会,商讨新的名称,每当我们头脑风暴出一个新名称就马上在万网查一下这个名字的.com域名是否被占用,希望想出一个既有意义又不难记还不容易撞名的名称。

经过半小时后我们终于试出了Vinlic(文利克)这个名称,vinlic.com这个域名也刚好没人注册,而这个名字的含义是中文谐音未来客,象征着我们是走向未来的人。

后续赶制了一大批卡片,用来分发给学生们,希望他们能够加入。


在扩张过程中,也吸引到了远在深圳的宝安中学编程社的参与成立了深圳的分部。

如今这个名字已经变为我的常用昵称,最后只有我留了下来,大家都已经各奔东西,只能在网络上偶尔联系,希望有一天Vinlic能够再次伟大,带领更多人学习编程。

NAITA联盟

自从改名后,我们在思考能不能创建一个更大的组织,集结国内各个高中的编程、计算机社团一起,形成一个联盟。

实现学习资源共享、统一决策,一起研究如何提高高中生的编程能力以及计算机基础知识水平,也可以一起编制教材、做项目、探讨问题。

现在看来这种想法确实还是太年轻了,甚至还做过一些实际行动,域名和logo都准备好了,联盟名字就叫NAITA(全国信技社团联盟)域名是naita.org,后来参与进来的社团还是太少,大家拥有的时间更是少之又少,只好放弃。


adb妙用

自从把手机从ROOT过之后,就对我的红米2A进行了一系列的折腾,就想到能不能在Android上也运行一个adb工具通过OTG功能去操控其它Android机?手机上是ARM平台,上github一找还真有编译好的ARM平台adb工具包,下载下来后跟同学借了个手机过来并开启调试模式,用转接头和数据线将两台机器连接起来,成功通过adb devices找到它的设备,adb shell也能够正常执行命令,执行reboot对方手机就重启了。

这次经历,让我彻底认识到世界上所有设备其实都是一样的,不论电脑、手机、微控制器,都是一家人,不一样的只是CPU架构、算力资源和外设接口。

安卓手机助手

在进一步深入学习C# Winform后,想着Windows窗体程序+ADB会碰出什么样的火花呢?是不是可以开发一个安卓手机助手?当时觉得把手机通过数据线插入电脑挂载进行文件操作不太方便,于是开发了一个用于Android手机的文件管理工具,可以像Windows文件管理器一样轻松的操作手机文件,不同类型的文件拥有独立的图标,并且能够预览文件内容。

Python单片机

一位在嵌入式群的朋友给我寄来了一片可以运行Python的单片机,颠覆了我对固件程序开发效率低下的看法。

了解到MicroPython这个精简的Python实现,原来不是底层语言也能够在单片机执行,这对于初学者简直是福音。这个单片机支持挂载内置2MB Flash文件系统,可以直接把Python文件放入里面用于执行,不过执行效率和资源占用自然是没法和C/C++相差很远。


CodeIgniter

官网一直是运行在WordPress上的,但由于这套博客平台实在过于庞大,导致响应速度经常不理想,认识的一位编程社的社长他向我推荐了CodeIgniter框架,这是一个轻量优雅的MVC模式PHP框架,阅读框架源码后给了我很多灵感启发,使用它重建了官网并做了后台系统,不得不说MVC在前后端还未彻底分离的时代真是个伟大的设计。


MobaXterm

使用Linux系统自然避免不了使用SSH,所以一直在寻找一款好用的SSH客户端,最开始时接触到的是Putty和XShell,直到我找到了一款名为MobaXterm的神器,在大致摸索了以下功能后,发现在功能整合、命令行显示兼容上等各方面都直接秒杀其它工具,比如它支持侧边栏连接SFTP进行文件管理,于是决定将它作为主要的SSH客户端。

花生棒

在之前使用Ngrok进行内网穿透时就关注到了花生壳Oray(其实就是如今的向日葵)出的花生棒,据描述是能够实现内网穿透,出于好奇在他们官网下单买了回来,实测后发现虽然能够实现内网穿透,但只能使用固定的域名和端口号,如果想更换端口号还需要购买,每个月的流量也是有限额的,实际体验下来比较差。


纸板VR眼镜

Google开源了一个名为Cardboard的硬纸板虚拟现实眼镜,几片硬纸板、一根橡皮筋、两片透镜、两片魔术贴、两块磁铁,再配合手机通过极低的成本就可以让我们拼装体验一个丐版VR眼镜,没见识过VR的我就买了一款纸板眼镜来体验体验,实测戴上耳机玩手机上的VR游戏和视频效果还算不错,至于沉浸感当然是没法和专业的VR套装相比较。


开发论坛系统

在被CodeIgniter框架的思想开过光后,想自己使用PHP开发一个MVC模式框架,花了一周时间大概入门了PHP,发现PHP其实只是函数多,入门的门槛是很低的,而且函数的设计上非常贴近于C语言。

说干就干,在看了几遍CodeIgniter和WordPress的部分源码后就开工了,当时能力有限,仅实现了Controller与View并没有写Model,不过总体思想还是没有变,照着撸出了一个简易的论坛系统:Vbbs。

同时顺便学了下当时比较火的Bootstrap(CSS样式库)和Jquery,但很快我就发现整个设计并不成熟,而且对安全性考虑不足,比如没有对提交内容进行xss过滤。

双系统

我开始不满足于在虚拟机中使用Linux,希望在笔记本上安装一个Ubuntu系统试试,毕竟虚拟机对于只有2GB内存的笔记本来说还是有些吃力的,但又想保留笔记本上的Win7。

稍微了解双系统安装后便开始尝试:由Grub做启动引导。先在Windows的磁盘管理工具中为Ubuntu腾出一块容量为80GB的无分区空闲空间,接着把Ubuntu镜像写入U盘,插入U盘电脑引导进入Ubuntu的系统安装程序,这在上面对空闲的空间进行手动分区后开始了安装流程,完成后重启进入了Grub,这样就可以选择进入Ubuntu或者Windows7。

装好Ubuntu后开始进一步学习一些常用命令以及如何编译源代码来安装程序。


飞思卡尔

依然是嵌入式群里一位好友送给我了一款开发板,这块开发板是飞思卡尔的MKE02Z64VQH4,第一次见到包装这么精致的开发板,实际上机开发测试了一下,感觉一时半会驾驭不住就先放着了。


阿里云ECS

国内在很长一段时间里,都没有面向个人开发者的大型云服务厂商出现,直到阿里云、腾讯云相继出现,才终于填补了这个空白,让个人主体都可以很方便的租用服务器,而且价格并不算很高,腾讯云还提供过一段时间的试用名额,抢过一台腾讯云的服务器用了一段时间。当时阿里云已经支持自己拍幕布照片+APP的方式进行备案材料提交,所以买了阿里云的服务器,这次直接选择了CentOS镜像作为服务器的系统,并没有选择Windows Server,一个是同价位下配置比较低,而且相对Linux来说更加耗费资源。在上面搭建了一个LNMP(Linux+Nginx+MySQL+PHP)服务用来继续学习开发PHP。


迟来的开悟

临近高三年级毕业,我一个人坐在操场的台阶上,看着学长学姐们在度过学校的最后时光,不知道哪来的一激灵,突然想明白了,也许我不应该再对应试教育开炮。大学会给我成长的机会,会给我更高的起飞点,可惜一切已经晚了,因为我也即将面临高考,以前的从初中到现在的知识链条早就七分八裂、残缺不全,临时抱佛脚并不现实,本届高考也将面临改革为全国卷,难度也将上一个档次。

4KB程序

这是一个参加97年世界编程大赛并获得第一名获得者的作品,使用机器码实现,生成的可运行程序仅有4KB大小,所有的3D迷宫画面都是采用实时渲染,全程时长2分钟,还包含了配音,这震撼心灵的体验。。。


首个H5魔塔 ★

那时的我肯定想不到在红米2A手机上编写的5000行代码会在未来成长为一个知名的HTML5魔塔游戏引擎,产生活跃的H5魔塔生态,甚至引发与RPG Marker(简称RM)派魔塔的纷争。

先放上成品链接:https://blog.vinlic.com/mota

上课码代码的日子

由于已经彻底摆烂,对于高考的结果也已早有预知,我将高考前的最后三个月全部用来开发一个魔塔游戏,让魔塔摆脱本地程序枷锁,在任何网页浏览器都能随时玩到魔塔游戏。

我的课桌上总是堆着高高的书墙用来挡住老师的视线,其实高三大家的课桌都差不多,只是我的格外高一些。

在手机上写代码,不管是开发还是测试都无疑是一件十分困难的事情,甚至没有开发地图编辑工具连地图数据都是手动编的。

开发流程

手指在窄小的屏幕上快速的使用26键虚拟键盘往DroidEdit编辑器中输入代码,这是一款在手机上表现很不错的代码编辑器,自带语法高亮等功能,只是由于这次单文件的代码量比较巨大,写到2000+行时语法高亮就变得十分卡顿,写起来很难受,迫不得已只好关闭高亮继续敲代码,所以基本是对着黄底黑字在写代码。

通过KSWEB实现在手机上开启Web服务器,它提供了Nginx引擎、PHP解释环境和MySQL,之前通过玩PHP时认识了它,而现在我正需要它的Nginx引擎为我提供本地的Web服务,因为这个项目需要动态加载本地文件,只能采用localhost去访问避免跨域等问题。

运行和测试代码则是用UC浏览器,它曾时手机端浏览器的王者,除了Chrome就属它在手机端对HTML5的标准兼容最完整,使用手机浏览器调试将面临极为难受的问题,那就是无法通过控制台查看输出,对于所有数据流向和内容纯靠推理或alert弹窗,并且当时对于览器的缓存机制不熟悉,每次修改代码返回浏览器测试都需要清除一遍缓存再刷新,确保代码是最新的状态,整趟开发下来至少清除了几百次缓存,有一次还把UC清挂了,再起不能只好重装。

中间还遭遇了一次代码文件丢失问题,因为没有git带来的惨痛教训,好在有旧的备份,但这也让我有了重构的理由,对代码结构进行了一次修改。

还在贴吧对开发的流程进行了记录:https://tieba.baidu.com/p/4397526540

在开始开发前我收集了一些现成的素材,要感谢魔塔吧吧友整理的素材包,里面的素材都是雪碧图模样的,雪碧图就是sprite精灵图,一个角色或怪物的动画每一帧图像都在上面,这样可以提高加载的效率,对于浏览器来说更是能够减少并发的图片请求数,实际绘制到画布时就需要截取其中一部分来绘制。

最开始的想法是使用三层canvas,背景层+前景层+主角层,但当时还没精力去实现单canvas的多图层绘制,所以强行拆出了六层画布作为六个图层,分别是状态栏层、背景层、事件层、前景层、界面层、数据层。

我组建了一个测试组用来测试每一期迭代的成功,也获得百度魔塔吧的几位元老人物支持。

终于,为期3个月,史上第一个基于HTML5 Canvas的魔塔就这样诞生了,在高考的前一个晚上再魔塔吧和安卓魔塔吧发布了纪元魔塔前传,引起了一波小轰动。

魔塔吧发布贴:https://tieba.baidu.com/p/4545234500








第二天就去参加高考了,成绩出来不出预料,只有196分,但不幸中的万幸是碰上第一志愿的3B大专刚好扩招,碰巧就给补录上了,还好有个正规大学读,不然还得去技校。

后续还有魔塔大触写了攻略贴:https://tieba.baidu.com/p/4553189514

但故事还没有结束。

碰到过一个小奇葩事,他们所谓的“黑技术”也就是只需要下载前端源码即可,甚至源码我都没有混淆过。我尊重魔塔美术资源的原创版权不会用于盈利。

联系始祖魔塔作者

我通过邮件联系了在日本的原始魔塔的开发作者,向他们推荐了这款H5魔塔,他们也很友好的回复了我并把访问该魔塔的链接放入了他们自己的网站 http://wwajp.com 里,十分的感谢!


码云推荐

后续我将这个魔塔项目放到码云Gitee开源,很快被设为推荐项目,还被邀请去参加深圳源创会分享,让我有点受宠若惊,毕竟不得不承认我那源码水平实在很丢人。

码云仓库地址:https://gitee.com/Vinlic/Mota


自动寻路

之后一直在想着重构魔塔内核的事情,前传版本由于是少数能够在手机上游玩的魔塔游戏,部分体验者表示手机操控方向键有点难受,希望能够点击屏幕自动寻路,为此我潜心研究了A*寻路算法,我在算法方面的功底其实是很差的,花了一天多的时间去理解和写代码验证,不过终于还是使用JavaScript实现了寻路算法,并且这次还加入了背景音乐以及增强了屏幕适配,但第三版内核因为时间关系并没有开发完成烂尾了。


发扬光大

在重构内核工作放下后不久,有一位名为小艾的C++开发者在QQ上联系我,希望我能够提供纪元魔塔的相关源码作为参考,他想要开发一款在HTML5上的魔塔样板,我将前传的源码和第三版内核未完成的源码都发给了他,没过多久他迅速二开出了新版本的魔塔,这在后来演变为了HTML5魔塔开发引擎,让普通人都可以轻松开发HTML5魔塔游戏。

源码样板仓库地址:https://github.com/ckcz123/mota-js

我很敬佩他,因为任何人几乎都可以通过浏览器直接获得游戏的源码,而他却大费周章的询问,并在他源码的作者栏加上我的名字,而且他与一众开发者们共同将HTML5魔塔发扬光大,建立了一个在线游玩HTML5魔塔的网站 h5mota.com ,这可以说是把魔塔游戏拉入了一个新时代。


他还在B站发布过HTML5魔塔样板的使用教程:https://www.bilibili.com/video/BV17W411m7ww

看到自己的源码有了这种形式的传承很感动也感到很荣幸,也算是第一次为开源出了一点力量。

除此之外也有些开发者Fork的源码改造成更优秀的作品:https://gitee.com/lp9906/ts-mota

成为CTF赛事题目

某天,在网上发现杭州电子科技大学的CTF赛事中使用了纪元魔塔前传源码魔改的题目,这也行哈哈哈。

开发插件

能够科学上网后,终于可以在Chrome在线安装一些插件了,便有些好奇这些插件是怎么开发出来的,在大概了解之后明白所谓插件其实就是源代码加了配置文件的压缩包,于是拿出魔塔源码并配置了manifest.json后打包完成了小插件,在之后上大学时经常需要我们在线看视频和刷题,这对于学习效果其实是没有什么价值的还很浪费时间,所以也开发了一个刷视频和刷题的插件,代替本人去自动完成所有流程,虽然这些插件没有发布,只能本地加载文件夹,但几个人分享一下用是没问题的。


如转载本文章必需注明来源地址.

#回忆录