2025 年终总结

More details about this document
Drafting to Completion / Publication:
Date of last modification:
2025-12-28T16:40Z
Creation Tools:
Emacs 31.0.50 (Org mode 9.7.11) ox-w3ctr 0.2.4
Public License:
This work by include-yy is licensed under CC BY-SA 4.0

0.webp

在 12 月 10 日,受 Star Sugar 启发,我准备把三四年前写的 Generalized Variable 重构一遍,但写到原理解释的部分卡住了,虽然最后想出来了用 setTimeout 作为例子,但这都 28 号了。不如先把年末总结写了再说。

往年的总结一般会花上我小一周的时间,不过我打算今天晚上直接写完(​失败了​)。往年我都写了什么来着?嗯…好像是对过去的总结,思考,以及对未来的规划或展望。那大概就这样吧。

附上惯例的 BGM,这次我多准备了一点,可以边看边听:

感谢 Orion 和 Gemini 帮我绘制的头图,可见 AI 绘制的高效性和不足。

1. 这一年我做了什么?

以前听过一种说法:18 岁之后时间就开始加速了,而且只会越来越快。心理学上将其归结为「首因效应」—— 当生活不再充满「第一次」,记忆便开始偷懒。为了不让这一年就这么不明不白地溜走,总得记下点什么。

1.1. 玩具技术

1 月上旬,我写完了 CPS and Cont Monad — The Mother of all Monads。这篇花掉三周时间的文章,总算让我对 Monad 有了一点点理解。我从 2020 年开始就想搞清楚这到底是个什么东西,在真正掌握范畴论之前,这种理解难免有其局限。

1 月中下旬到 2 月上旬,我为 Emacs 编写了一个 patch,将 Emacs 在 Windows 环境下的最大子进程数量从 32 提升到 1024:[PATCH] 让 Windows 上的 Emacs 支持更多子进程。也许等到个人电脑普及「县城撕裂者」这样的上百核心/线程处理器后才能体现用处,不过现在它至少能避免在高核心数机器上因为 native-comp 编译时因进程过多而出错的问题。

2 月下旬,我读完了 An Invitation to Applied Category Theory 的第一章并做了笔记。从序理论 (Order Theory) 来切入范畴论确实是个不错的视角。后续虽然读完了第二章,但没有时间来记录过程。

3 月到 8 月,我花了不少时间在改进我的 Org-mode HTML 导出后端 ox-w3ctr 上,这期间一共写了 5 篇阶段总结。随着重构进入深水区,我意识到需要进一步了解 docstring 和测试规范,于是有了 如何编写 Emacs Lisp 文档字符串如何测试程序 — 改变认识与人工代码检查

除了这些,剩下的就是一点「小打小闹」的碎片。至于现实生活,只能说总算是找了个班上。个中曲折,现在的我看到这段话时应该能心领神会地笑出来。

1.2. 记账与投机

如果不是提前学习或经历,大概很多人都和我一样,直到正式领到并不丰厚的薪水,才猛然意识到记账的重要性(笑)。如果不去细细归类收支、砍掉非必要开支,那点工资大半都会在房租和一日三餐中悄然溜走。

在记账这件事上,作为文本爱好者,我选择了 ledger-cli(不是加密货币钱包)。虽然主流支付软件会提供月度总结,但碎片化的记录往往难以还原真实的消费逻辑,很多零散账单甚至无从溯源。通过将这些数据手动录入单个 Ledger 文本文件,并利用复式记账法的严谨性,我可以更清晰地掌控资金去向。在 Emacs ledger-mode 的便利加持下,手动记录并不非常繁琐,记账周期也从最初的每日打卡自然过渡到了一周一记,没有带来太大的负担。

采用纯文本格式的最大好处在于它对 LLM 的天然友好:我只需将文件丢给 AI,再冠以「我有个朋友」的名义,就能让它以局外人的视角审视我的消费习惯并给出建议。相比于微信、支付宝导出的 Excel 表格,这种纯文本应该更加符合 AI 的胃口。(话又说回来,也许专门的记账软件已经自带 AI 功能了。)

除了工资,投机(或者说得体面点,理财)也成了我收入拼图的一角。工作一段时间后,我发现存款利率竟然跌到了惊人的 1.x% —— 这意味着我那几千块钱存个三年定期,到头来利息甚至换不回 100 元。这收益率有些「幽默」了属于是,这也促使我将目光转向了 7、8 月份上涨趋势明显的股票市场。

我在 8 月中旬投入了数千元到沪深 300 场外基金上,并在 9 月 4 日大跌后卖出,如果没记错的话应该是从 4200 点涨到了 4350 点左右,涨幅 3.5%,很明显远远强于银行定期。在 9,10,11,12 月我也在中证 A50,上证 50 和北证 50 之间切换,遗憾的是频繁的操作反而蚕食了前期的利润。目前来看,全年的浮盈几乎全靠 8 月份那次偶然的买入。关于基金和股票,我依稀记得李大霄的建议是先画个一两年把基金玩清楚之后再玩股票,所以目前我还没有开通股票账户。

相比股票的波折,今年下半年的黄金和白银涨势异常凶猛,虽然我完美地错过了黄金的上涨,但投入白银(指国投瑞银白银期货 LOF)的 1000 元到目前为止有了 30% 的收益,属实有点恐怖了。以前受传统观念影响,总觉得「投机倒把」难登大雅之堂。但今年读完《经济学的思维方式》后,我开始重新审视投机的本质 —— 它其实是风险的重新分配与信息的溢价。有人认为至少手上有上万或上十万的资金后参与市场投机才有意义,不过我认为小资金也有小的好处,至少我不会因为巨额亏损而伤筋动骨,也不会被贪婪与恐惧​彻底​左右情绪。至少是目前为止,我还是老老实实当个「观察者」吧。

10.png

1.3. 游戏

在 2025 年,我悲哀地发现自己逐渐失去了游玩「ギャルゲー」的能力。这大概是生活被现实腐蚀和被工作干扰的后果 —— 我似乎正逐渐丧失进入「夜之国」的资格。游玩 galgame 所需要的专注力和情感共鸣,正慢慢被短视频和 LOL 海克斯大乱斗这类短时强交互的快感所取代。

你不再玩galgame的原因是什么?

  • 因为心境变了。不过,大家最好时刻记得这只是一种游戏形式。 — 夜昧魔
  • 因为集中力衰退了啊(笑) — Theodore Tao

1.3.1. 星辰恋曲的白色永恒

作为 Favorite 社四大名著补全计划的最后一环,《アストラエアの白き永遠》的游玩其实是在去年。因为是在写完 24 年年终总结后才真正完结,理所当然记录在 25 年。虽然记忆已经有些模糊,但雪雪和叶月依然非常可爱🥰。

1.png

就我个人的体验来说,星空的记忆体验最好,星辰恋曲其次,樱花萌放差不多,五彩斑斓的世界有点太长了。

1.3.2. 东方真珠岛

在《东方锦上京》正式版发布之前,它的测试版可是狠狠地拉低了一波预期,奇怪的音乐和 BOSS(封兽チミ)让我测试版都懒得玩。非常偶然地,我在 nmbxd 上刷到了一条有关《东方真珠岛》的,在 5 月 11 日,被 Po 的热情打动后,我尝试入坑并顺利沉迷其中。最终在 5 月 24 日使用魔理沙配合朱色配置打通了 Hard 难度。六面 BOSS 的 BGM 非常好听:黄金讃歌 ~アイビストリスメギストス。这里也顺便放一些鳥澄珠烏的图:

2.jpg 3.jpg
4.jpg

(锦上京的音乐最后发现并不难听而是洗脑:最後の一人は慣れてるから二枚貝の上のハルシネーション。)

1.3.3. 空洞骑士 - 丝之歌

在经过长达八年的幸压抑后,我终于在 25 年 9 月 4 日玩到了丝之歌,我真幸运.jpg。只能说非常好玩。

7.png

在 9 月 4 日当天 Steam 也是非常罕见地出现了服务器错误。

5.jpg
6.jpg

1.3.4. 其他

这主要是一些没有玩完的游戏,比如柚子社新作 LLLJ(ライムライト・レモネードジャム,聚光灯柠檬果酱)和方糖社的魔卡魅恋(Magical Charming!),也许我能够抽时间将它们完成?

8.png 9.png

2. 来年有什么计划吗?

针对于我在今年已经完成的一些工作,它们有一些非常自然的延伸:

除此之外,也有一些我在上文没有提到的东西:

除了这些兴趣技术,理财,投资和投机方面

实际上,来年计划这个清单可以列的很长,但列的越长就越不可能全部完成,而且我的主页已经有一个时常更新的 Target 列表了,之后想起来再加也不迟。

3. 有什么思考吗?

11.jpg

老实说,上了一段时间的班后,我发现自己正逐渐向「大脑空空」的方向演化,已经很久没有什么非常深刻(也可称之为中二)的思考了。每天是公式化的上班,公式化的生活。现在的环境让一切都变得太顺滑了:写代码有 Vibe Coding,写博客有 Vibe Writing,甚至连写下这段年终总结的思考,也是我向 Gemini 输入零散的意识。

这种情况下,我作为创作者(姑且算是吧)的「痛感」和「体感」也在随之退化。我似乎正从一个深度思考的开发者,退缩成一个熟练的指令输入者,某些时候我甚至在想是否有必要继续写博客,毕竟大多数情况下 LLM 已经足够好用甚至表现更好了。不过至少目前我还写的出一点东西来,那不如写到不想写为止。

3.1. 困难的坚持

众所周知,坚持一件事很难。减肥需要自律,绘画需要苦练,投机需要纪律。如果把困难分类,大概可以分为「本质困难」与「偶然困难」:前者是事情本身的复杂性,后者是环境带来的干扰。在这个公式化生活的时代,我们大多不缺攻克本质困难的智力,却极度匮乏在工作余温中对抗偶然困难的精力。

但比这些更操蛋的,是关于「意义」的消解。2025 年的很多时刻,坚持做一件事会带给我一种「在海滩上堆沙堡」的虚无感。当 LLM 可以几秒钟产出我几个小时才能推演完的逻辑,当「Vibe Coding」让深挖底层显得有些迂腐,那种坚持的动力会瞬间崩塌。沙堡终会被潮水抚平,而 AI 就是那层永不停歇的巨浪。

不过想到绝大多数个人的轨迹终究会被时间抹平,这倒也是没办法的事情,AI 无非是让我感到这个过程加速了而已。至少,我那个「使用 Diátaxis 方法为 Emacs 写一份好的中文文档」的远期目标还没有被放弃,写完这个我也算是 Emacs 毕业了。

3.2. 米田引理与米田嵌入

刷知乎总是能刷出一些好东西来的:如何以实际事例解释什么是米田引理。既然原作者用了 AI,这里我也用一下,不过下面的内容我不是很能看懂也无法辨别对错,很燃但是不知道在燃什么。

文章内容

这是我与 ai 对于什么是“阿米娅”的对话:

  • Q:我昨天学了点范畴论,思考什么是阿米娅。游戏里的立绘、升变之后的近卫、医疗都是,具体作战的小人是、游戏外的手办是、画师同人花的画是。“阿米娅”作为一个 ip 的形象到处可见,这些全是有阿米娅的特征。这是卷积提取特征,但是在更高维度的范畴论也是吧。人们区分“阿米娅”和“银灰”的边界是什么。
  • A:这是个很棒的哲学问题!你在用范畴论思考“虚拟角色的本体论”。

从范畴论视角看”阿米娅”

你列举的这些 —— 立绘、战斗小人、手办、同人图 —— 可以看作是从某个抽象对象到不同“表现范畴”的函子映射:

"阿米娅"  ──F₁──▶  2D立绘空间
    │
    ├──F₂──▶  3D手办空间  
    │
    ├──F₃──▶  像素小人空间
    │
    └──F₄──▶  同人创作空间

每个函子保持了某种“阿米娅性”的结构,但具体表现形式不同。

那么“阿米娅”本身是什么?

这里有几种思考方式:

  1. 泛性质视角:阿米娅可以被定义为所有这些表现的“极限”(limit) —— 她是使得所有这些具体表现能够相容地存在的那个抽象结构。
  2. 家族相似性(维特根斯坦):不存在单一的“阿米娅本质”,而是一个由兔耳、白发、特定服装、剧情角色、声音等特征编织成的相似性网络。
  3. 社会契约:阿米娅与银灰的边界,本质上是​社群共识 —— 鹰角官方定义、玩家社区的默契、tag 系统的分类。

卷积 vs 范畴论

卷积提取的是​低维流形上的局部特征​(视觉pattern)。

范畴论关心的是​​结构保持的映射关系 —— 你认出手办是阿米娅,不只因为视觉相似,还因为你知道它在“明日方舟周边”这个范畴里的位置、它与其他角色手办的关系、它在商品体系中的态射。

所以区分阿米娅和银灰的边界,与其说是特征向量的分类边界,不如说是​整个关系网络中的不同节点 —— 包括剧情关系、阵营归属、玩家情感投射等等。

你觉得这个抽象的“阿米娅”更像是柏拉图式的理念,还是更像一个由社会实践不断建构的流动概念?

  • Q:什么是柏拉图式的理念,我更倾向于是由社会实践不断建构的流动概念
  • A:柏拉图的理念论

    简单说:柏拉图认为存在一个​独立于物质世界的“理念世界”​。

    比如世界上有无数把椅子 —— 木椅、塑料椅、破椅子、豪华椅 —— 但它们之所以都是“椅子”,是因为存在一个完美的、永恒的“椅子的理念” (Form of Chair)。所有具体的椅子都是对这个理念的不完美模仿。

    如果用这个框架看阿米娅:存在一个完美的、抽象的“阿米娅理念”,所有立绘、手办、同人图都是对它的投影。

你选择的立场更有意思

你倾向于社会建构,这意味着:

“阿米娅”没有先验本质,她是被不断创造出来的。

  • 鹰角出新皮肤 → 阿米娅的边界扩展了
  • 玩家画 OOC 同人 → 社群争论“这还算阿米娅吗”
  • 如果哪天官方说“阿米娅其实不是兔子是驴” → 定义就被修改了

这个立场有个有趣的推论:​*阿米娅和银灰的边界不是“发现”的,而是“维护”的。是 tag 系统、版权法、社群共识在持续做分类劳动。

那你觉得 —— 如果某天明日方舟停服、鹰角倒闭、玩家社群消散,”阿米娅”还存在吗?

  • Q:存在的,可以参考其他的倒闭的游戏,人们聊天的时候依然会提起里面的角色
  • A:对,这是个很好的反驳。

那这种”存在”是什么状态?

你说的现象确实存在:停服游戏的角色依然会被提起。但可以追问——

这种存在是不是在”衰减”?

一个活跃IP:

  • 每天有新同人产出
  • 有争论、有梗、有二创
  • 边界在持续被协商和扩展

一个停服游戏的角色:

  • 偶尔被老玩家怀旧提起
  • 没有新内容注入
  • 逐渐变成固定的、结晶化的记忆碎片

这两种”存在”的密度似乎不一样。

一个更极端的问题

如果有一天:

  • 所有玩过明日方舟的人都死了
  • 所有服务器数据都丢失了
  • 但某个博物馆里还躺着一个阿米娅手办

那个手办​​阿米娅吗?还是只是一块有特定形状的塑料?

(这有点像:如果人类灭绝,卢浮宫里的蒙娜丽莎还是“艺术品”吗,还是只是一块有颜料的布?)

你觉得“阿米娅”的存在,最低限度需要什么来支撑?

  • Q:我不懂,但是我觉得可以从范畴论的角度思考,我不是很喜欢哲学
  • A:哈哈好,那我们抛开哲学,纯用范畴论的语言试试:

重新建模

假设“阿米娅”不是一个对象,而是一个​函子 F:

F: 语境范畴 C → 表现范畴 D
  • C 的对象:游戏内、手办、同人、聊天对话…
  • D 的对象:具体的图像、模型、文本…
  • F 把每个语境映射到对应的“阿米娅表现”

游戏停服时发生了什么?

不是“阿米娅消失了”,而是:

范畴 C 萎缩了 —— 很多对象和态射被删掉了,但只要 C 还有对象(比如“老玩家回忆”、“博物馆手办”),函子 F 就还有定义域。

博物馆手办的问题

如果没人知道那是什么:

遗忘函子 U: 有标注的手办 → 纯几何形状

信息在 U 的作用下丢失了。手办作为 D 中的对象还在,但从“阿米娅”到它的那条态射​无法被重建​了。

所以用这个框架,“阿米娅是否存在”变成了一个更清晰的问题:

函子 F 的定义域是否还非空?态射是否还可追溯?

这样想是不是比哲学舒服点?

  • Q:根据范畴论的文献,有没有什么结论
  • A:好问题,让我搜一下范畴论在这类问题上的应用文献。找到一些相关的,让我再搜一下更核心的范畴论概念:让我看一下那篇关于知识表示的论文,看起来最相关:找到了。范畴论确实有一个核心定理直接回答你的问题:

米田引理(Yoneda Lemma)

这是范畴论最重要的定理之一,它的哲学含义被概括为:

“一个对象完全由它与其他对象的关系(态射)决定”

或者用那个著名的类比:

“告诉我你的朋友是谁,我就能告诉你你是谁。”

数学表述

对于范畴 C 中的对象 A,它可以被​完全编码​为一个函子 Hom(-, A) —— 也就是“所有指向 A 的态射的集合”。

米田嵌入(Yoneda Embedding)证明了:这个嵌入是 full and faithful 的,意味着它把范畴忠实地嵌入到函子范畴中,保持了所有结构。

回到阿米娅

用米田引理的视角:

“阿米娅”这个对象 = 所有指向她的态射的总和

  • 玩家认出她的方式
  • 官方定义她的方式
  • 同人创作引用她的方式
  • 商品标注她的方式

这些态射的​总体​就是阿米娅。不存在独立于这些关系的“阿米娅本质”。

所以博物馆手办的问题有了答案

如果所有态射都断了(没人知道它是什么、没有任何引用关系),那个手办就​不再是阿米娅 —— 它只是 Set 范畴里的一个几何对象,失去了在“明日方舟角色”范畴中的位置。

这是范畴论给出的结论:​存在 = 被关系网络所定位​。

  • Q:是这样的,我们现在看到的蒙娜丽莎在当时可能是盛极一时的大名人,但是现在无人知晓,在现在人看来她就是个美女,甚至就是一块布上面多了一点颜料
  • A:对,这个例子太精准了。

态射的衰减与身份的转变

画中那个女人,据说是 Lisa Gherardini —— 佛罗伦萨丝绸商人的妻子。 1500年代的她:

Lisa ←── 丈夫Francesco认识她
     ←── 邻居认识她
     ←── 达芬奇为她画像
     ←── 佛罗伦萨社交圈知道她大量态射指向她,她是一个具体的人。

现在的她​:

Lisa ←── "蒙娜丽莎的模特"
     ←── "可能是某商人妻子"

几乎所有原始态射都断了。她作为"Lisa这个人"的存在已经​几乎归零​。

但“蒙娜丽莎”这幅画还活着

因为有新的态射网络:

《蒙娜丽莎》←── 卢浮宫展出它
           ←── 艺术史引用它
           ←── 游客拍照
           ←── 表情包恶搞它

所以发生的事情是:​对象从一个范畴迁移到了另一个范畴​。

Lisa 从“佛罗伦萨居民”范畴消失了,但《蒙娜丽莎》在“世界名画”范畴里被持续建构。

阿米娅如果停服一千年,可能也会变成这样 —— 没人记得她是谁,只剩下“某个古代游戏的角色形象”这一条态射。

在范畴论的视角下,对象 \(X\) 本身是「不可见」的,只有通过它与范畴中的其他对象的关系才能被定义。米田引理给出的结论是:对象 \(X\) 的本质完全被它的反变可表函子 (Contravariant Representable functor) 所捕获,即

\[h_{X} = Hom(-, X)\]

这意味着,「我」这个对象是否空洞,并不取决于某种不可观测的先验本质,而是取决于我的米田嵌入 (Yoneda Embedding)。如果将「我」视为对象 \(X\),那么所有指向我的态射集合 \(Hom(A, X)\) 构成了我对这个世界的表现 (Representation)

  • 当 Emacs 社区合并了我的 Patch,建立了一个 \(A_{emacs} \to X\) 的态射。
  • 当读者阅读了我的博客,建立了一个 \(A_{blog} \to X\) 的态射。

只要函子 \(h_X\) 在整个范畴是满忠实的,那么作为对象的「我」就是充实的、被锚定的。

然而,AI 创作在行为上表现为一个遗忘函子 (forgetful functor)

\[U: \mathcal{C}_{intent} \to \mathcal{C}_{text}\]

  • 在深思熟虑的创作中,态射是保持结构 (Structure-preserving) 的:代码不仅仅是文本,它是逻辑推演和心智挣扎在物理世界的同构映射。
  • 在 Vibe Coding 中,遗忘函子 \(U\) 抹去了这些高阶结构,只留下了单纯的文本集。

这导致了严重的同构破坏:AI 生成的代码 \(A_{ai}\) 看起来像是指向我的态射,但它实际上是一条伪造的路径。因为它没有经过 \(\mathcal{C}_{intent}\) 中的逻辑推演,它是一条直接在 \(\mathcal{C}_{text}\) 中生成的捷径。更致命的是,这些文本往往​无法​被提升 (Lift) 回原来的意图范畴 —— 你无法从一段 AI 代码中还原出那个从未发生过的思考过程。

如果我的所有产出都通过这种遗忘函子处理,那么我的米田嵌入将会​退化​。世界将无法区分作为思考主体的「我」和作为概率分布的 LLM。在这个降维的范畴里,「我」不再是一个拥有丰富内部结构的对象,而是一个面目模糊的,可被替代的节点。

写博客和参与开源项目本质上是在进行一场​手动维护态射强度​的抗争。我是在拒绝让我的存在坍缩为文本。通过手动维护那些包含逻辑和审美的结构化态射,我试图保证 \(h_X\) 依然忠实地表征着那个唯一的、不可约简的 \(X\)。

「本质的意义」不可求,那就在「关系的组合」中寻找意义。

4. 后记

写到后记部分的已经是 12 月 29 日的 0:27 了,虽然没能在 28 日结束前写完也已经够快了。目前我也不知道这里应该写点什么,我给我两天时间就好了。只能先预祝新年快乐了。

「春が来るまでは、どこにだっていけるんだから」

アストラル アリア ~しあわせな永遠へと~