随记
(一)
这空荡荡的个人网站,可以佐证本人并不怎么公开地写东西。 如果再让我坦诚一些,那我会说:本人也很少会在私下去记录任何心绪或者想法。 出现在此处,这篇一反常态的写作也自然包含了某种变化。 以下皆为一些简单的记录,权当未来的谈资。
我时常感谢对“课外”信息对我早期求学生活(大学以前)的影响。 早些年,由于亲戚家后代“网瘾”的反面教材,亲人们似乎对电脑产生了天然的反感。 因为此,在小学阶段,我只能通过翻阅家乡小县城图书馆内破旧的电脑培训书籍来试图联系自己与那个奇妙的世界。 这些书作为计算机相关内容的启蒙书籍,在正在看我的随记的读者和今天的我的眼中,应该荒唐且可笑。 硬件相关的书会教你如何设置 IDE 硬盘的跳线、 如何制作只包含 COMMAND.COM
, IO.SYS
, MSDOS.SYS
的系统应急启动盘、 指示在安装 Windows XP 系统时于何处输入激活码。 软件相关的书,则看起来和今天我所认为的垃圾语言书并无二致, 试图在数周内让你学会一种编程语言、软件,或是开发框架。
自然,这些琐碎的技巧并不会对我产生绵延至今的影响; 不过当我在初中时获得第一台笔记本电脑后,它们或多或少帮我节省了一些配置软件或者系统的时间, 能让我对本人浪费其上的时间有些许慰藉。 然而这一丝慰藉是否真实,也无法断言。 本着尝鲜的爱好,我在新设备上安装了当时颇为时髦的 Windows 8 系统。 很可惜,这个系统是微软的失败之作,而我也败于解决它与我电脑的兼容性问题上,任它每次开机时黑屏与假死。 家里人对电脑的使用时间颇为严格,每周仅两小时。自然像许多小孩一样,我也会偷偷地使用电脑,在爸妈外出时,或者借口查题。 在碎片化的时间,我做碎片化的事。可能是上线 Minecraft 去看看,或者是享受 20 FPS 的 Kerbal Space Program, 抑或是在 Bad Piggies 中和小鸟们斗智斗勇。在这里列举出三个沙盒类游戏,足以说明我对这类游戏类型的喜爱。 自由探索的欲望或从更早的时刻,或从此时,便一以贯之。 刨开花在“电子鸦片”上的时间,我也会逛逛中文互联网的一些技术论坛。 那里认识的人都有些闲人的趣味,沉迷于钻研一些 niche 的技巧或技术,诸如纯净版、精简版系统,多系统安装,系统补丁集成等等。 在这里,我收获了第一个网络上相识的朋友,他热爱制作 Windows 上的自由软件(开源系统工具)。 我们创办了一个“组织”,但自然我没有做出任何非平凡的贡献。 很高兴在我写下文章的此刻,他仍为他的目标而努力,并有了一些不错的作品 (NanaZip)。
可能直到进入高中前,我对计算机相关的工作的想象都局限于开发应用软件 (现在,我终于能为我当时认知中的岗位分类了 — 软件客户端开发)。 在那个快乐的暑假,我买了一本关于 Windows 开发的书籍(里面大多是讲述 Win32 API 的使用), 而如今其中我能记起的内容就只有滑稽的匈牙利命名法了。 值得一提的是,在高二以前,我并不清楚还有 OI 竞赛的存在, 这在某种程度上也成为了我的一个遗憾,花费一点时间在算法与数据结构的学习上是不是会更好。
高中生活带给我的契机起源自学校的智慧课堂试点。 作为被选中的试点班级,所有同学都可以获得讯飞公司发放的廉价平板电脑的三年使用权。 作为一种必要的防备,平板上安装了管理软件,去掉了很多 Android 自带功能的入口, 也魔改了 Package Manager 只允许安装白名单软件。 我花费了非常多的时间研究如何绕过这些机制,例如修改安装包的包名绕过白名单检查; 尝试获取 Root 权限;修改管理软件的代码。这些方法多多少少起到了作用, 但要说影响深远的还是最后一项。当时 Android 使用 apk 文件封装应用程序安装包, 里面会封装一或多个 dex (Dalvik EXecutable) 文件,放置了应用的主要代码。 为了修改代码逻辑,我便使用外部工具反编译 dex, 然后查看对应的 Java 代码。 不过那个外部工具只支持查看 Java 代码,若是要修改则得直面 Dalvik 字节码, 而这则正是梦开始的地方。 Dalvik 是 Android 早期使用的应用程序虚拟机,有着丑陋的寄存器式字节码格式。 也许复杂系统注定就充满了某种神奇的魔力让人着迷,我在修改了几次字节码后, 对字节码的设计,如何产生字节码,如何快速地执行字节码产生了浓厚的兴趣, 也因此决定投入编译器相关的工作直至今日。