溯源

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

所谓溯源,又可作「溯缘」解。其一是在这里记述我的历史;其二是在这里述说我与世界各界的结缘。

关于昵称

目前常用昵称为极地萤火,含义大抵是「愿于最寒冷的极地之夜,用微弱的萤火为你照亮前路。」,至于是否已有能力庇护一方,那大概又是另一回事情了。​
在不便使用中文字符的情况下,也可以写作 alampy / ArcticLampyrid。

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

如何捕获

您可以在以下平台找到我,欢迎与我交流、讨论、分享、合作、提问、反馈等等,即使是一些闲聊也是可以的哦~

如果您认为我们讨论的话题较为敏感的话,也可以(at your option)使用 PGP 密钥来与我加密通信。

我的 PGP 公钥
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEW3J/nhYJKwYBBAHaRw8BAQdAC0hIsVWBAEim46UXs6RAcxPH8NeTwiF1ELlK
IfarvuW0HXFpcWl3b3JsZCA8MTM1NDA5MjU0OUBxcS5jb20+iJAEExYIADgWIQR9
qIFcEPzauMbRHEvccqJRnnfWzwUCW3J/ngIbIwULCQgHAgYVCgkICwIEFgIDAQIe
AQIXgAAKCRDccqJRnnfWz5LVAP4vXTURfSJQTc7ZmfNwgbwpjxoBNM8KcibDxjPe
NsE2FgD8CfIpgpcQQEJTLazXKB+SJm0+S9Lwl7dq7oNun5+rVAy0K0FyY3RpY0xh
bXB5cmlkIDxBcmN0aWNMYW1weXJpZEBvdXRsb29rLmNvbT6IkAQTFggAOBYhBH2o
gVwQ/Nq4xtEcS9xyolGed9bPBQJf05vDAhsjBQsJCAcCBhUKCQgLAgQWAgMBAh4B
AheAAAoJENxyolGed9bP8X8BANUjgv7Clfl9FiyKBBQafur/SS1aKvMw6JmrB/l4
9jFKAQDaEt/at0/IvWNRc2rrPUpGt9O+V5tAotWZVt8U4jd2Cbg4BFtyf54SCisG
AQQBl1UBBQEBB0BWuRqC3XNaVGxC8kgpWat7YhMt1s9WSIRqaV1LKW2hXgMBCAeI
eAQYFggAIBYhBH2ogVwQ/Nq4xtEcS9xyolGed9bPBQJbcn+eAhsMAAoJENxyolGe
d9bPhEEBAPx8DEZxu1CmSfvdaLkFt9/IfMXcwsfuLgFkuHsHXay7AQDIhczgFHO5
1Joa3yKS7LMjnDy7YUcnOl4Gl4C1LVx6AA==
=RFmP
-----END PGP PUBLIC KEY BLOCK-----

一些属性

是 00 后(生于 2003 年),曾经玩过一点点算法竞赛(已经 AFOIer 了),但一直是工程代码写得更多一些。
技术爱好者,相信开放、自由和多样化的世界,热爱开源,追求时尚技术。
目前就读电子信息类专业(2022 级),希望能成为软硬件兼修的全栈工程师。

大抵算是个浪漫主义者,追求爱与自由,拒绝功利束缚。
至今依旧在以解构 + 重构的方式不断认识世界,并在这个过程中看到了许多有趣、美好的不同事物。
和平主义者,无国界主义者,希望美好的事物不会被误解与冲突而破坏。

写过的一些小项目

不完全统计,仅列举部分项目,希望其中有能够帮助到您的存在。

  • CeePasswordCard:高考动态口令卡辅助查询工具。
  • CrucioBackupper:快点阅读文章(对话体小说)备份器。
  • DictationAssistant:一个用于辅助学习的工具,它可以利用自动化手段帮助您默写单词、短语、句子等。软件通过语音合成技术以给定的间隔、重复次数朗读指定的文本,以帮助您在传统纸张或电子设备上默写。
  • EProjectFile:C# 库,用于读取和写入易语言项目私有文件格式(.e 文件和 .ec 文件)。
  • GitHub Action: Wait For Workflow:GitHub Action,用于等待指定的工作流完成,以实现跨文件的工作流依赖。
  • Gradle Git Version:Gradle 插件,用于根据 Git 仓库的状态生成版本号。
  • Hexo Filter KaTex:Hexo 插件,用于将 TeX 公式转换为 KaTeX 渲染的 HTML 代码,服务器端渲染(SSR)。
  • Ippper (crate):Rust 库,用于实现一个极其简陋的 IPP(网络打印协议) 服务端。
  • KtJsonRpcPeer:一个以对等(Peer)模式实现 JSON-RPC 2.0 协议的 Kotlin 库,支持全双工通信。
  • MMKV.NET:一个用于 .NET 平台的 MMKV 绑定库,支持 .NET Core 3.1+,可用于跨平台的高性能键值存储。
  • NJUPT WiFi Login:一个帮助 NJUPTer 方便地连接校园网络的工具。希望可以做到无感知验证。
  • STM32Tesseract:一款工具性程序,旨在将 STM32CubeMX 生成的代码与现代 IDE 和构建系统无缝集成,便于使用 VSCode 等现代 IDE 进行 STM32 开发,并提供(准)一键环境搭建。
  • TextECode:C# 应用,用于实现易语言项目私有文件格式和文本文件之间的转换,以便于版本管理、代码审查、自动化代码分析等。
  • TwentyFourPoint:一款用 Qt6 编写的 24 点游戏,起始于程序设计周的课程作业。
  • UEXECUTER:UEXECUTER 是一个可爱的函数调用程序,使用人类可读的字符串为指令,通过 UART 通信调用 MCU 上的函数。目前,它支持 STM32F4 系列微控制器和 ARM 硬件浮点模型(-mfloat-abi=hard)。
  • WinPrint (crate):Rust 库,用于调用 Windows API 打印文档。
  • wsrpc:一个 Golang 模块,基于 JSON-RPC 2.0 协议实现的 WebSocket RPC 框架,支持全双工通信。
  • zhixue:智学网第三方 PC 客户端,方便电脑端查分。

那些与信息结缘的故事

什么时候接触编程已是不可考了,大抵是在小学时期。第一次接触与编程相关的东西,还是通过一个叫 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:加入萌备