23 KiB
title | date | slug | featuredImage | categories | tags | series | summary | description | wikilinks | lastmod | |||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
岁时录(十八) | 2025-04-29 | weekly-18 | https://img.viento.cc/cover/weekly-18-cover.webp |
|
|
岁时录 | 岁时录其十八 | 本文是作者周报《岁时录》的第十八期,讲述了作者近期的生活与思考,包括技术实践、学习经历和个人兴趣。作者分享了新域名 `eigen.im` 的启用及其背后的自我表达理念,并介绍了 Matrix 服务的分域部署经验。在学习方面,作者记录了数电实验和 FPGA 烧录过程中遇到的实际问题与解决方法,展现了理论与实践结合的体会。此外,作者还尝试开发自托管匿名提问箱,探讨了匿名与坦诚的关系。生活片段如品尝酒酿、反思阅读习惯(偏好外文原版而较少读中文书),以及用 AI 辅助写游戏 Mod 和制作可爱的表情包,体现了作者对技术工具的积极应用和自我认同的探索。 | true | 2025-04-29 |
诸位老友,下午好。这里是 Chlorine。
趁着五一出发之前,再凑一期岁时录吧。讲讲这一周(几周)有趣的事情,顺便清一清废稿(悲)。
由于这个月主要在忙期中和园子的重构工作(见DGP:重新出发),所以内容也没有写太多……算了我承认这篇文章很水(大悲)。
Hello,Eigen
这里原本应该有很多东西的,但由于还没实践完,被小氯砍掉了。简单来说,就是小氯又希望搭建一个属于自己的社交系统了,尽管目前似乎有一点工具性分享倦怠(由于没有称手的工具,不太想贸然发帖子)。
又又又又又一个域名
这次是 eigen.im
。
.im
是……等会儿,我去看看。.im
是英国王室属地马恩岛(Island of Man)的 ccTLD,由于可解读性比较高,也常常被作为泛用顶级域。大致的含义有以下几个:
- Instant Message:即时通讯,比如 FluffyChat。
- Input Method:输入法,比如小氯好喜欢好喜欢的 Rime。
- I'm:自我介绍,所以可以当做个人博客,比如陈仓颉老友。
.im
是个很便宜的域名后缀,Spaceship 一年不到 50 CNY。不过不知道是不是因为太冷门了,所以名声似乎还算可以。
而前缀 Eigen 是德语,意思是「自我」。这不仅昭示了这是一个「服务于个人」的项目,而且也宣称了「保持自我」的追求。这可能也是社交服务的最终目的:建立人与人之间的联系,并在这种联系中寻找自我的真实。
……嗯,好吧,其实当初买的时候并不是这么考虑的。单纯只是想买个用来搭 Matrix 的域名,众所周知,Matrix 这个词在数学里有「矩阵」的意思,而矩阵最重要的性质之一,就是特征值(Eigenspace)和特征向量(Eigenvector),或者翻译为「本征」。就这么简单。
之前小氯手中还有一个 sayso.im
。Say So,直译大概就是「这样说」,或者借用佛经的话,叫作「如是说」。
一切有为法,如梦幻泡影。如露亦如电,应作如是观。
这个域名小氯也是蛮喜欢的,不过秉持着奥卡姆剃刀原则(如无必要,勿增实体),这个域名也没有过大的必要存在了。
哦,此外,一个小小的 Bonus:小氯有一首很喜欢的歌,也叫《Say So》,别名「种田の小曲」。1
分域部署
为了省域名兼好看。小氯打算做一个小小的聚合:把所有的相关服务的标识符都聚合到同一个域名下,比方说在 Fediverse 下是 @chlorine@eigen.im
,在 Matrix 是 @chlorine:eigen.im
,在 Nostr 是 chlorine@eigen.im
,在 Bluesky……哦,Bluesky 有 Handle,不用这个。这就不得不涉及分域了。
「分域」就是把用户标识符域名和实例域名分开。我们举个例子:我们要部署一个 Matrix Server。我们希望用户的标识符是类似 @user:example.com
,但是 example.com
我们希望另做他用,转而把实例运行在 matrix.example.com
。这时候我们就需要做一点小小的 tweak,在他人查找 example.com
上的用户时导引到 matrix.example.com
。
这里我们简单说说 Matrix 的分域方法,以 Conduwuit 服务器为例。Conduwuit 是著名的 Conduit 的分支,加入了不少的新特性和 Bug Fix(2025-04-28 注:Conduwuit 寄了,有一个后继者 Tuwunel,但是还没有完善的自部署和迁移文档)。
在 Conduwuit 的环境变量中,将 CONDUWUIT_SERVER_NAME
设置为 example.com
。然后使用反代服务器,如 Nginx 或者 Caddy 将 matrix.example.com
反代到 Conduwuit 的地址,一般是 127.0.0.1:8448
。
然后在 example.com
的域名下运行一个反向代理(看你希望拿这个网页做什么了,对于小氯来说一个静态文件代理即可),在网站根目录下创建 .well-known/matrix
文件夹,写入两个文件:
// client
{
"m.homeserver": {
"base_url": "https://matrix.example.com/"
}
}
// server
{
"m.server": "matrix.example.com:443"
}
甚至你用 Cloudflare Workers 或者别的什么 Serverless 平台都可以,毕竟这只是两个静态文件。
把 DNS 解析配好,大功告成。可以用这个网站检查一下配置是否成功。
目前小氯在这个域名跑了 Matrix 和 Bluesky PDS,后续可能会加 XMPP 和 Fediverse 之类的。不过 ActivityPub Git Forge 小氯不打算在这里跑,估计会用 foss.moe
。
海鲜炒面
看了这么久,饿了吗老友们?OωO
……
不会有人真的以为这一节要讲吃的吧,不会吧不会吧……
好吧,这其实是指数实的实验接线。情况是这样的:本周的数实主题是让你搭建两个版本(补码和原码)的全减器,以及其他的小电子元件。哦,补码是指……
好啦好啦,不讲术语了。总而言之,各位只需要知道,我们要搭一个电子元件就好了。
要搭两位全减器,比较舒服的方法是先搭一个全加器。两位全加器的结构其实不麻烦,因为我们只需要全加器而不需要快加器,所以只需要把两个一位全加器串起来就可以。而一位全加器的逻辑表达式我们几乎可以背下来了:
F = A \oplus B \oplus C_{\text{in}} \text{, } C_{\text{out}} = AB + BC_{\text{in}} + AC_{\text{in}}
其中 \oplus
代表异或。
而两位补码全减器只需要把 B 的各位、输入和输出的进位(准确来说此时是借位了)反相,原码全减器就加一个补码转原码的部分即可。
听着简单对吗?那我们看看实际接线的效果吧。
Warning
前方高能,强迫症和洁癖人士请尽快撤离!这不是演习!
这是原码全减器(准确来说,这不是小氯的版本,是小氯帮同学搭的。小氯的版本更惊悚):
现在知道为什么这节的标题叫「海鲜炒面」了吧,你就说像不像吧(乐)。
当然,吸取了岁时录(十七)的教训,小氯可是不敢怠慢。课前反反复复拼了好几次才敢过去。
最终当然是顺利地过了,不过中间也是遇到了点乐子:测试出来 2 - 3 显示了 3(应该显示 1)。找不到问题,遂推倒重来。最后发现是有一个异或模块电源引脚接错了。嗯,小氯酱是笨蛋。
烧位码传奇
本来一周只有一节数实的,奈何小氯鸽的天数太多了,就凑到一起了(捂脸)。
作为一名全面发展的带学生,上了这门全面发展的数电/数实,烧板子自然也是不可不品尝的一环。
我们烧板子用的是 Vivado,这玩意是不支持 macOS 的,需要通过极其丑陋的方式,包括虚拟机和 Rosetta 等方式去运行,还需要安装几十个 G 的庞然大物。众所周知,小氯有严重的环境洁癖,让小氯在自己心爱的 MacBook 上面搞这么一出,在小氯看来不啻于在故宫里开夜总会。
很可惜,小氯的 Windows 备用机已经留给老爹了。于是小氯一面将备用机从老爹手里巧取豪夺了回来,一面着手去借一台电脑临时顶用。所幸关键时刻还是我光荣而伟大的孙哥为我提供了支持。
不过小氯首先发现,自己的实验箱里面没有烧录线(或者叫下载器)。于是小氯去找自己的同学借了个下载器。
中午吃完饭,把电脑薅回来之后就开始下载……事实证明,这是一个「把大象装进冰箱」的过程。
图片忘记截了。我用语言叙述一下:校内提供的备份包,下载速度达到了惊人的 1000 B/s,距离下载结束还有 193 天。好家伙,带嘤的 HS2 跟它一比都算是迅捷高效的。
最难绷的是,虽然插着电,但是孙哥的电脑下着下着居然……关机了。于是小氯又去找自己的另一位同学借了个同型号充电器。拼好课了属于是。
无可奈何之下,小氯打算去找同学帮忙。反正代码小氯已经写好了,只需要烧到板子里就行。
幸运的是,还真有一位同学愿意帮忙,于是小氯背起两台电脑和实验箱就往教学楼跑。
然后到了之后,小氯想到……为什么不把同学下载好的安装包复制一份拿过来呢?这样总归会比一点点下载强多了。
同学倒是还留着安装包,也有 U 盘,不过不知道为什么,一直显示文件过大。小氯拿出自己全部的社交勇气在走廊里面堵了十几个同学都没借到新的 U 盘。
好好好,那我买一个还不行嘛。小氯去了附近的便利店,斥巨资 40 CNY 买了一块 64 GB 的 U 盘。
结果插上一看……还是显示空间不足?
邪了门了。求助一下 ChatGPT 大神……哦,原来是 U 盘格式的问题,改成 ExFAT 格式就行了。
然后就等着呗。等了半小时(小氯闲着没事在看大物),终于是拷贝过来了。于是小氯告别了同学,准备回去安装。
不过这个安装处处透露着诡异的气息……为什么 7-Zip 说压缩包存在无法修复的错误?
换 Better Zip 试一下。解压了十几分钟之后……好家伙,解压错误。
此时小氯的表情就像是坐完敞篷车的 JFK——乐不起来了。
所谓不在沉默中学坏,就在沉默中变态。无计可施的我直接放弃了配置环境,明天找同学的电脑烧吧。事后证明这是个正确的选择,因为这节课的任务确实很简单,不需要什么练习;而且 FPGA 大部分是断电即失的,很难提前烧好带过去。
第二天糊弄完课,小氯收到了邮来的备用机,赶紧重新下载配环境。这次倒是比较顺利,下了两个小时就下完了(这说明这应该是电脑的问题,而不是校园网或者我的问题),然后安装、试烧录一气呵成。以后就不用担心这些乱七八糟的事情了。
下一节课小氯甚至有时间去嘲笑赶 DDL 的同学们:
匿名提问箱?
这是小氯的开发清单上平平无奇的一项。
之前曾经跟风开过一个箱子,如果我记得没错的话,头像还是小氯开始用「小氯」这个昵称开始时的那个,签名很让人费解。不过听玩提问箱比较久的老友说,之前很多提问箱都寄掉了(应该也包括小氯说的这个),很多珍贵的数据都没了。
这事好办,不就是数据不在自己手里嘛,那咱们自托管不就行了。
现在市面上的自托管提问箱不多,但是有。不过,小氯都不太满意。一个主要的原因是没找到兼容 SQLite 的,另一方面:提问箱无非是一个前端加一个数据库,那么,Serverless 不是也可以吗?
似乎确实可以。以 Cloudflare Full Stack 为例,Workers 做边缘计算,Pages 展示前端,D1 数据库,R2 对象存储,KV 缓存,Turnstile 验证。Wasm 加的意义似乎不是很大,也有点麻烦,但也可以试试。
所以说,匿名提问箱这种东西到底有什么用呢?或者我们换一个更加 precise 的问题吧,为什么提问箱要是匿名的?
解释起来似乎也不算难:因为这样可以用一种「一视同仁」的方式回答所有的问题。之前写文章的时候小氯小氯,Chlorine抑或我,自我是语境特异化的。这么看的话,自我的区分甚至可以达到单个人这样的亚语境层次。只是可能没那么质变而已。
不过,这本质上是一种「单向匿名」,因为除非每个问题都是私聊性质的,不然最终的回答都还要是公开的,所以在公开提问箱里面痛骂自己的导师并不是什么好的选择。所以小氯对这种方式到底能否做到「坦诚相待」持相当的怀疑态度,因为这可能只是把「对不同的人的不同的部分真实」,换成了「对所有人统一的部分真实」。
酒酿
事情大概是这样的。周四那天(忘记是哪个周四了),小氯考完了寄凉惊悸穴,打算去院里的留学分享会听个热闹。可能是这几天风比较大,小氯感觉脑子有点不清醒。小感冒而已,无伤大雅。
一个小小的惊喜是,主办方给来听的同学准备了一份茶百道。由于来得比较晚,小氯急匆匆地抓了一杯就去找座位开始听了。
安顿下来之后,看一看上面的标签……竹香酒酿?
如果小氯没记错,酒酿应该是米酒发酵的一种半成品,由于淀粉被大量分解为单糖和寡糖,因此很甜。小氯的身体不大好,因此极少接触酒类。不过既然都拿到手了,也没有不喝的道理。
总体来说味道还挺不错的,浓郁的米甜味带着淡淡的酒气。不过喝着喝着,小氯感觉有点发热,脑袋也有点昏昏沉沉的,想睡觉——尽管小氯那天睡得并不少。没有什么飘飘欲仙,也没能让我看到什么光怪陆离或者颠倒淋漓的盛景。只是想睡觉而已。
后来再想买一杯尝一尝,发现已经买不到了。有一点可惜。
我还在读中文书吗?
这里说的书,只包括「我自己想读」的书。用来复习考试的指定参考书除外。
这个问题的来源很无厘头。大概就是在无垠的 Indieverse(这个词是小氯自己创造的,指所有独立性网站——尤其是个人运营的那部分,大体可以理解为不一定要实现 Indieweb 标准的 Indieweb)闲逛的时候,看到了一篇吐槽某本书翻译的文章。小氯大概看了一下文中的例子,不得不说确实是挺难绷的。看来我们的中文译者还是要努力啊。
译者……等会,我多久没读过翻译为中文的书了?甚至我多久没读过中文书了?
我仔细想了想自己最近在读的书。《1984》,英语原版;《麻省理工学院概率论讲义》——哦,这个名字是我起的,就是指 MIT 那门著名的概率论 OCW 的讲义,当然是英语版;《资本论》第一卷,英语版——小氯看不懂德语,《国家与革命》和《资本积累论》同理。甚至可以把目光投入到自大学开始以来,结论依然成立。唯三的中文书,有两本是小氯喜欢的教材——陈希孺院士的《概率论与数理统计》和菲赫金戈尔茨的《微积分学教程》,另一本是《枪炮,病菌与钢铁》——读到一半我就不想看了。那看看自己的计划书单呢?好像也没几本中文书,无论是本土的中文著作,还是翻译的外语书籍。其中不多的几本,也都是相对靠前的了,比如说《史记》(是的,你没听错,这只元素娘想读《史记》),近一些的像鲁迅先生的几本书——之前看先生的杂文比较多,反而没能好好读读其余的作品。以及陈忠实先生的《白鹿原》。
这好像不是什么 normal 的事情,尤其考虑到小氯依然生活在中国,日常生活完全中文语境主导,同时对于自己的国籍、语言和文化抱有很大认同的情况下。
不喜欢读翻译版本,似乎还比较容易辩解。毕竟「原汁原味」的原文,不但锻炼语言能力,表意方面也更加契合作者的原意——翻译毕竟都是有损转码。举个例子:《1984》中「新话」的许多词汇,其实是没办法很好地翻译为中文的,如 thinkpol 翻译为「思想警察」有失词汇脱水缩合的压缩感,「想警」则过于晦涩,不易理解(当然,中文翻译为外语也一样,甚至可能更费力)。此外,即使不考虑翻译问题,为了适应各地的语言文化、风俗习惯、法律法规等,不同的翻译版本也不可避免地会做一些增删减补,比如说今年(去年?)诺经奖得主的某本知名著作。如果不想其中一些内容被和谐掉,还是读原版好一些。
至于不喜欢读(比较现代的)本土书籍……这事说起来可得小心些,被扣上「崇洋媚外」的大帽子可就不好了。说实话,就小氯的印象来说,似乎中国的现代文学——尤其是 21 世纪以来的文学,找不到一本能被称为经典的著作,一本都没有——当然,小氯本身读这些书不多,认知范围也比较局限,此外可能存在一个「时间错位」的问题,像莫言、余华等前辈的某些(小氯比较喜欢的)书,在我的观念里并不是 21 世纪的书。唯一很熟悉的《三体》,小氯看得也蛮多的,但是还够不上文学经典的槛(「科幻经典」倒没什么问题)。如果让小氯说一本「中国文学经典」,那小氯第一时间想到的几乎都是两百年往上的东西,第二时间呢,大概是 20 世纪的一些(在小氯看来)写得很好的书了。
不过无论如何,小氯以后也不打算过多地涉及什么中文书了。当然,《论语》之类的古典著作和《毛选》之类的近现代经典除外——「崇洋媚外,厚古薄今」,小氯大抵如此。
用 AI 写 Mod
Warning
由于下面的某些内容涉及一些可能令人感到不适的意识形态,所以我不会提供具体的文字和图像资料。
作为交叉学科缝合怪 + 赛博原始魔怔人(原始指总是落后于时代风潮,魔怔指抓到一个话题就不断玩弄),小氯对于架空历史非常热衷。而作为著名战犯模拟器历史战略游戏,《钢铁雄心 IV》的各种 Mod 在小氯的日常阅读材料中占有很大的比例,尤其是 TNO、KR / KX 和 RF 这样公认优秀的架空历史 Mod,而小氯也试过自己写一些 Mod 的设定,类似于平时小氯喜欢做的写 AltHis Wiki 的感觉,但是由于有国策、参数面板之类的游戏元素,写起来似乎也更加规正和有趣味。不过,据我真的在写 Mod 的战犯玩家朋友说,P 社(Paradox Interactive)的 Mod 标准极其抽象。于是小氯止步于了理论构想,Markdown 不比 YAML 和 JSON 舒服嘛。
当然,这种申鹤震怒的工作,用天朝的 AI 显然是不行的,因此需要从资本主义世界批判性使用一些 AI。于是小氯随手选择了限制没那么多的 ChatGPT。倒是没像 Zeee 那样用 GPT-4.5(没付钱),平常的 GPT-4o 足够了。
然后我发现,ChatGPT 在这方面的能力比我想象中的还要强。例如说它写的世界新闻,虽然说不太符合 HOI4 的新闻格式(好吧好吧这是我的 prompt 的问题啦),但是内容相当丰富,比如说各个国家的反应之类的。
而且,由于 OpenAI 的奇妙设计,我甚至可以在说完一个国家的基础设定之后,让它帮我画一面国旗,总体效果相当惊艳。比如说,如果我试图做一个美国的 Business Plot 线,它画出来的国旗一眼就能看出来美式牢保和棕线(法家思想)的风格;而如果要做一个「工农兵联合公社」,旗子大概就是……嗯,可以参考 TNO 图哈切夫斯基的旗子,可谓武德爆炸。
所以我们在使用 AI 做 Mod 的时候,AI 到底是在做什么呢?
Meme Set
嗯,小氯也是好起来了,都有表情包了(骄傲)。
事情是这样的:某个中午,小氯正在报仇雪恨般地摸鱼,闲着没事薅 GPT 和 Gemini 的算力优化头像(自设)。结果自然还是没有结果。咱就是说……我都不指望优化什么细腻的动作了,能不能把那个灰色的 MacBook Pro(一定是 Pro,而且估计是 Intel 时期的,Air 不会那么笨重的)换成小氯在用的星光色 MacBook Air 啊?或者星光色难画,咱们换一个银色的也行啊……
郁闷之下小氯开始去互联网上随机游走实践 PageRank 算法,结果跳到了阮一峰老师的这期周报,里面有提到用 GPT-4o 画表情包。对于 GPT-4o 的绘图能力,小氯还是给予高度认可的。那么既然如此,不妨试着玩一下。
把我的头像扔进去,Prompt 就写:
这是一个可爱的氯元素拟人形象。请把这个角色画成 Q 版,并用 12 个动作和文字做成表情包。
稍等一会就可以看到结果。结果……嗯?似乎还挺拟人的。
多画几张玩玩。下面展示一下比较好的一张吧,虽然说不是 12 个。基本上是原图,只是用 pillow
库扩充了下背景(后面会讲)。
不得不说……好像……还挺可爱的?
所以为什么第一个表情给我画了个武魂真身
那下面想办法把图片切成单独的表情包吧。由于 ChatGPT 并没有画严格的九宫格,所以我们需要一张张手动裁剪。幸福的烦恼。
在 iLoveIMG 上比画了两下,感觉横 330 * 纵 360 的大小比较合适。不过由于原本的表情包贴着边缘太近了,所以我们需要简单地来一下扩充画布。至于工具,当然是程序员的 Photoshop——Pillow。
from PIL import Image
# 打开原图
img = Image.open("input.jpg")
top = 50
bottom = 100
left = 50
right = 50
new_width = img.width + left + right
new_height = img.height + top + bottom
color = (255, 255, 247)
new_img = Image.new(img.mode, (new_width, new_height), color)
new_img.paste(img, (left, top))
new_img.save("output.jpg")
完事之后一张张切就行了。或者你写个脚本切也没问题。
切完之后我们就获得了一堆小图片。用 cavif
转一下格式就算完事了。由于人物的衣服和背景色比较相近,去背景很麻烦,干脆留着了。
现在这组表情已经加入园子的表情列表(不过因为 JSDMirror 的缓存,可能会有一定的延迟),欢迎使用 OuO
干得不错 CloseAI,多整点这样的好东西。
-
种田大致指在战略游戏,例如《钢铁雄心 IV》和《维多利亚 III》中,着力发展经济、改善财政等的行为。在「种田」期间,玩家一般较少或不发动战争。 ↩︎