溯源

亲爱的旅人,感谢您追寻萤火之光,来到这里。

关于昵称

目前常用昵称为极地萤火——愿于最寒冷的极地之夜,用微弱的萤火为你照亮前路。​
在不便使用中文字符的情况下,也可以写作 alampy / ArcticLampyrid。

不过日常中大家更多地称呼我为橙子,源于我曾用的经典头像 —— 一只橙子。

如何捕获

属性

  • 00后(2003)
  • 大二(2024),高三(2022)
  • AFOIer,超级弱
  • 开源热爱者
  • 无国界主义者
  • 某种意义上的时尚者,主要表示在技术栈的激进上
  • 浪漫主义者
  • 追求爱与自由
  • 以解构 + 重构的方式不断认识世界

缘起

什么时候接触编程已是不可考了,大抵是在小学时期。第一次接触与编程相关的东西,还是通过一个叫 Scratch 的软件。彼时 Scratch 还是 1.x 版本,刚被引入中国,还远没有像现在遍地都是“少儿编程补习班”这么普及呢。严格来说,Scratch 其实并不算什么编程语言,只不过能通过拖拽编写一些简易脚本,以控制小猫咪和其它角色的运动罢了。不过呢,至少通过 Scratch,我把循环、条件、变量等基本概念给弄明白了。

玩腻了“小猫咪”后,便开始接触 Small Basic —— 一款微软出品的、为初学者设计的玩具语言。这应该才算是我真正第一次接触命令式代码编程吧。还记得那时候,因为英语基础太烂,甚至连 if / then 这些关键字都不会读,只能硬背🥲。但不管怎么说,通过代码将幻想中的逻辑一条条投射到现实世界之中,对我有着难以抵御的诱惑力。于是在条件不利的情况,我也没有浪费太多时间,便掌握了 Small Basic 的玩法。

可惜的是,Small Basic 只能编写 CLI 程序,这自然是不太好玩的。于是我很快就转向学习 Visual Basic 6,尝试开发一些简单却又奇妙的 GUI 应用。至于具体是什么时间接触 VB6,也已经记不清了,而早期的一些源码也大多随着电脑的损坏、更换等原因而弄丢了😔。目前能找到的最早一份较完整源码是 2013 年的(感谢百度网盘的持久~),学习 VB6 大抵要在此之前。记得当初入门时,还啃着计算机二级的教材(那时 VB6 还是二级选考科目),对着一个一个实例敲着代码,再慢慢理解。后来,才接触到 VB6 的一些高级特性,比如 COM 组件、API 调用等。那时候觉得 Windows API 调用很是神奇,却又对 Windows 系统的底层机制一无所知,便只能把那些 API 调用当作是一种黑魔法了。大抵要直到我看完《Visual Basic 6.0 与 Windows API 讲座》,才终于对 Windows API 有点比较基本的认识(好耶!

然而,VB6 的时代毕竟过于远古,以致于在进行窗口子类化(sub-classing)、多线程编程等方面极其困难,于是又去折腾了一段时间的易语言。易语言的设计依旧较为古老,但却意外地支持了内联汇编(inline assembly),Amazing!于是那段时间我便跑去把 IA32 汇编和 x86 下的内存模型学习了一下。当然,易语言的设计显然也难以满足大型应用下对复杂对象模型的需要,随着时间的推移,我也逐渐放弃使用它了。

学习 Java (JDK 1.6) 呢,则大概是 2014 年的事情,当时的动机大抵是想做一些 Android 应用来和 PC 端的一些程序联动(比如手机摇一摇,然后电脑切换页面之类的啦),而 Java 是当时开发 Android 应用的准“唯一”选择。Java 是我接触到的首个现代化编程语言。虽然时至今日我还是 PC 端钉子户,几乎没有写过什么 Android 应用(❤️ PC yyds!),但 Java 的面向对象编程思想、泛型编程范式等等却是深深影响了我,对我后来学习 C++、C# 等语言也产生了非常奇妙的帮助~

同样是在 2014 年,我决定重构一个用 VB6 开发的单词默写助手,于是踏入了 .NET 的大门。作为 Basic 系入门的 Coder(其实现在更喜欢 C-style 语法啦😽),我最初很自然地选择了 VB.NET 作为 .NET 平台的入门语言。VB.NET 的设计虽然与 VB6 有很大不同,但受益于学习 Java 时对面向对象、泛型编程等的理解,我基本只补充学习了委托、事件、P/Invoke 等少数特性,就迈向了 .NET 平台。

不过考虑到 C# 在 .NET 平台的主流地位,我大概在 2018 年左右又转向了使用 C# 重构这一项目,并且在此之后的所有 .NET 平台的项目中都使用 C# 作为主要开发语言(Basic 哭晕在厕所🥺)。此时我主要还是使用 WinForm 开发 Windows 桌面程序。首次使用 WPF 则需要推迟到 2020 年,直接原因是我在 2019 年更换了高分屏显示器,而在当时的 WinForm 技术下做优化高分屏的工作实在过于繁琐。也是从这个时候开始,我开始接触 MVVM 架构、Data Binding、依赖注入等现代化的 UI 开发技术,这些东西至今还能在 React、Vue 等框架中找到影子。

接触 C++ 的时间呢,则是穿插在上述这些时间之中了。最初接触 C++ 主要是为了看懂各种 Native SDK 的文档和实例,后来则更多是用于编写一些 slim wrapper 以便在其它语言中调用某些 C/C++ 的库(如 ffmpeg)。目前能找到的最早一份 C++ 源码是 2016 年的,用于调用 ffmpeg 和 Slik Codec 来编解码 silk 格式的音频文件(早年腾讯 QQ 的语音消息会使用这种方式存储🧐)。此时我的 C++ 水平还是很低,且对于很多现代 C++ 特性一无所知。而后来接触 Modern CMake + Modern C++ 则是因为另一个巧合:2020 年时曾试图实现一个第三方的易语言代码翻译器:易语言 ➡️ C++(基本废弃且代码极其混乱),因此使用了各种模板元、constexpr 等现代 C++ 特性来另起炉灶了一个易语言的简易标准库。

至于传统 Web 相关的技术,则大概是在 2014 的时候开始接触的。当时的想法是构建一个内网的个人主页(非博客,个人介绍 + 留言板那种)。不过早期我的 Web 技术水平很低,几乎完全是依靠 FrontPage / Dreamweaver 这类所见即所得的工具来完成纯静态页面的设计。系统地学习传统前端相关技术(HTML4 + CSS2 + ES5 + jQuery 1.x + AJAX + HTTP 协议 + XML + JSON)则大概已经是 2016 年后的事情了。

学习 Python 则和我在 2016 年接触 QQ 机器人有关。虽然当时的 QQ 机器人的插件机制主要是使用 Native DLL 形式完成的,但我当时想要做个基于机器学习的垃圾消息判定机器人(群管类),而 Python 已经是当时 NLP 技术的首选语言了。当年的想法是仿照 QVM (Qihoo Support Vector Machine) 杀毒引擎的思路,使用 SVM 技术来判断消息是否为垃圾消息。然而由于我的数学基础太差(其实现在也很烂😢),且手动标记数据集的工作量太大,这个项目最终并没有完成。不过,倒是顺利通过廖雪峰的教程入门了 Python。

后来,多家第三方 QQ 机器人框架遭受资本打击,而我也因此意识到和某一框架的插件机制深入绑定对迁移工作的不利。彼时社区还没有一个通用的协议标准(OneBot 标准直到 2021 年才发布),因此我决定实现一套通用的聊天机器人平台(于 2020 年尝试开发 UBot Platform,现已转为不活跃阶段),试图以微服务的结构分离应用和协议实现,并支持 Telegram、Discord 等多种平台。也是通过这个项目,我学习了 Golang、Kotlin 语言,并深入了解了协程、异步编程、反射、序列化、RPC 等技术。

时间很快来到 2021 年,我开始实践 Rust 语言。目前能找到的最早一份 Rust 项目是 ippper.rs:用于实现一个极其简陋的 IPP 服务端。靠着 Ownership、Borrowing、Lifetime、Trait 等特性,Rust 让我对内存安全、并发安全、类型系统等有了更深的理解,并深刻体验到了编程语言设计(programming language design)的魅力。至今,Rust 已经成为我最喜欢的系统编程语言之一(主要用来做基建,业务代码还是以带 GC 的语言为主啦)。

2022 年,正式开始大学生活。因扩宽技术探索空间的需要,并受 @社会易姐QwQ / @littlefish12345 等人影响、@稚晖君 / @老师好我叫何同学 等 UP 主影响,结合个人兴趣、专业前景等因素,选择了电子信息类专业,并开始学习嵌入式相关软硬件知识,逐渐试图成为软硬件兼修的全栈工程师,向各位大佬靠近 (几位佬的技术好强QwQ)

至今比起各位佬依旧是个蒟蒻QwQ,但我会努力的😊。

站点历史

  • 2016-04-28:注册了第一个免费域名(qiqiworld.tk,已废弃),并使用 GitHub Pages + Hexo 搭建了第一个独立博客
  • 2022-03-06:新博客上线,使用域名 alampy.com
  • 2022-04-19:使用结构化数据标记博客文章,以便更好地被搜索引擎收录
  • 2022-06-25:Atom 订阅支持 WebSub 协议,以便更快地推送更新
  • 2024-02-19:加入开往
  • 2024-03-27:加入萌备