因为更新时间实在是波动极大,月记/周记已经不能描述这一系列杂记的更新时间了明明是你拖更拖久了导致的吧 ,所以本系列直接叫杂记了。诶这个人怎么这么起名废啊,你看隔壁小氯就起名一套一套的。反观这个人连自托管的 Git Forge 平台都懒得改名,博客也只想得到小屋这种烂大街名。
需要被推着走的人#
在一次次拖延中,我的论文总算是给导师交上了初稿。其实也不算初稿,因为还没有查重,不过也算是告一段落了,可以稍微休息几天,打打游戏放松一下。
如果专心写论文的话,这份初稿大概半个月前就该交到导师手上了。但是这段时间里我花了不少时间在搓博客代码、打游戏和随缘找工作中渡过,直到导师来催论文了,我才紧赶慢赶地把论文搞完――第一次来催初稿的时候我论文甚至还没有开始动笔。这属于是我这个 DDL1 战士日常了。
我刚才说说到了「随缘找工作」。正所谓「金三银四」,到了四月底,春招已经快结束了,我却还在随缘找工作,完全不上心。这大概是因为我有「后路」:家里虽说不算大富大贵,但也算是小有资产,还轮不到我来赚钱养家,实在找不到工作也可以选择回家继承家业。这使得我在找工作这方面没有 DDL 可言,于是 DDL 战士就开始华丽地摆烂了。
我是一个需要被推着走的人。在大二那年,我就意识到了这一点。那时我开始了持续至大四的学习状态:上课刷手机,偶尔看看教材自学一下勉强跟进度,能独立(含查资料)做完作业就算成功。得到的结果是:大部分专业课程,我的分数都比较一般,只有几门重实践的课分数好看点。
类似的状态曾出现在我的初三与高一上的时候,那段时间我上课的时候,右手里一定揣着一个小 mp3 在看小说。高一下的时候,因为差点被老师抓现行,以及上课看小说对成绩影响很大,我丢掉了 mp3,只在中午、下午与晚上的时候,在宿舍里偷偷玩手机。那时我有学校的规则推着走,最后成绩至少还算说得过去。
对我自己来说,这种性格感觉改也不知道怎么改了。「学习搭子」这种机制大概会有点用,或者是花钱找人管也不失为一种办法。就连这篇文章都是在「再不更新就会被博客寥寥几个读者来问」的状态下完成的。
Hello, Codeberg#
Codeberg 这个非盈利代码仓库托管服务商,我还是从小氯那里知道的。
Codeberg 很小众——小众到整个站点最高 star 的仓库 Forgejo2 也只有 2.2k star。这个 star 数量是什么概念呢?GitHub Copilot Pro 对「知名开源仓库的维护者」免费开放,而这个「知名开源仓库」的要求是 1k star。Forgejo 刚刚超过这个门槛的一倍,而整个 Codeberg 上,也只有三个仓库达到了这一门槛。
Codeberg 不受支持——例如 Netlify 的持续集成部署只支持从 GitHub、GitLab、Bitbucket 和 Azure 中导入项目,其他的 Git 托管服务商用都没法用。
另一方面,FOSS3 爱好者可能会喜欢 Codeberg,因为它是非盈利组织,且使用 GPL 3.0 协议的 Forgejo 提供服务。以及 Forgejo/Gitea 在某些方面比 GitHub 做的更好,比如多语言支持——GitHub 需要手动在 README 里添加其他语言 README 链接,比起 Forgejo/Gitea 根据页面语言选择对应版本 REAMD 还是差太多了。
此外,小众也有小众的好处——GFW4 并没有注意到这个站点,不需要再折腾半天不同软件的代理配置了(这大概也是最现实的因素了)。
目前我只迁移了 Astral Halo 项目——也就是我现在在用的博客模板——到 Codeberg 上,然后通过 Forgejo/Gitea 的镜像推送功能,每次提交都会推送到 GitHub 的仓库中,触发 Netlify 的重新构建(博客主题的 Demo 站点)。而现在的博客源码我则是放在了自部署的 Forgejo 上,同样通过镜像功能推送到 GitHub。
4 月 13 日中午,惊闻 GitHub 主动禁止了来自中国(港澳似乎也受影响)的 IP 对 github.com 子路径的访问。虽然在 4 月 13 日晚上,GitHub 恢复了中国地区的访问,并声明这是网络配置错误导致的问题,但也说明做两手准备总不是坏事,有必要提前做好准备,把 GitHub 上的一些仓库做个备份。当然,也可以干脆把重心移出 GitHub,转向其他 git 托管平台。此时 Codeberg 就成为了一个脱离 GitHub 的优秀选择。
为什么还是用国外的 git 托管服务商?因为国内的几个 git 托管服务商一个比一个看不下去。Gitee 生态烂的同时还有代码文本审查机制,J**aScript 这种笑话还是快端下去吧。GitCode 本身就是毒瘤,有着从 CSDN 继承来的登录后复制(虽然众所周知前端挡不住人,但还是恶心),还从 GitHub 上镜像了海量的仓库和组织。其实镜像仓库不算什么大事,仓库开源出来还能不让人 clone 了?但是 GitCode 还顺便把账号、组织的公开信息等一起镜像了,之前有段时间还不标注原仓库链接,这就很恶心了。
综上,小众、未被屏蔽且服务端开源的 Codeberg 就成为了离开 GitHub 的一个好去处。Codeberg 当然也有他自己的风险,但 git 托管服务商哪有没风险的呢?自托管放在 VPS 要考虑 VPS 提供商是否靠谱;放在家里的 NAS 上虽然服务本身靠谱,但光是申请固定 IP 就够喝一壶了。至少,现在 Codeberg 用起来还算不错,不是吗?
Hello, Rime#
大约一年以前,我就在 PC 上使用 Rime 输入法了,使用的是小狼毫和雾凇拼音。但是手机上,我则是一直使用的华为自带的小艺输入法。在遇到了几次刚在 QQ 群聊完某个东西,打开淘宝里面看到相关推荐的事后,我决定在手机上也改用 Rime。
既然要用 Rime 了,前端自然是要用开源的。在 F-Droid 里翻了一下,安卓的开源 Rime 前端就两个选择:小企鹅输入法和同文输入法。
小企鹅输入法使用手感很好,但是它存在一个问题:它的 Rime 配置文件是放在 data 目录下的,我还用的是阉割掉安卓 12 无线调试设置页面的华为鸿蒙 4 系统,不方便通过 Shizuku 来访问 data 目录内容。结果就是我只能手动连接数据线到电脑上才能同步用户词典数据。
同文输入法则可以自定义 Rime 配置目录路径,从而可以通过 Syncthing 实时与电脑上的用户词典进行同步。但是我能找到的所有主题配置都非常不顺手,打字时很容易莫名其妙打出一些错误的内容。并且似乎是因为主题太老以及同文输入法本身配置过于自由的原因,几乎所有其他输入法中可以通过滑动来浏览的菜单,在同文输入法都需要按翻页键才能实现。同时同文输入法的很多主题都年久失修,偶尔会出现崩溃的情况。
最后我还是选择了小企鹅输入法。手动同步虽然麻烦了点,但本身词库同步也不是什么需要特别频繁进行的操作,每个月拿一天时间出来同步一下数据就好。
Hello, Artalk#
4 月初,我把小屋的评论换成了 Artalk。一方面,是因为 Twikoo 管理评论实在是太太太麻烦了,对于一些错误的评论,想修改会非常麻烦。比如我有时候会把 Twikoo 用于隐藏设置面板的用户名用于回复评论,这是不应该出现的情况。但如果我想修改这一用户名,就需要删除全部评论,再将导出并修改的评论数据重新导入 Twikoo。另一方面,我的 2H2G5 的 VPS 在精简掉不常用的服务后,还有一半多点的内存没用上,部署一个 Artalk 正合适。
Artalk 的评论区我并没有添加自定义样式,而是直接使用 Artalk 自己的样式。这主要是因为我正在使用的框架 Astro 对 CSS 的 tree-shaking6 不够强,未被使用的评论系统的自定义样式也会被打包到构建产物中。而我的博客整理出了一个主题 Astral Halo,我如果写了 Artalk 自定义样式,也应该放到这个主题中,导致主题打包产物体积膨胀。
另一方面,也是因为早些时候给 Twikoo 搓自定义样式花了很多精力才搞好,有点懒得动手。所以,在我找到解决方案,或者上游解决了这个问题之前,我就先用着 Artalk 的默认样式了。
Hello, WezTerm#
怎么这么多 Hello 环节啊。
WezTerm 是一个 Rust 编写的跨平台终端仿真器,使用 Lua 作为配置文件。相比于 Windows Terminal,WezTerm 的自定义程度更高,性能更好,也不存在一些神必快捷键冲突。其跨平台的特性和基于 Lua 的配置文件也使得 WezTerm 可以在多种系统的桌面环境共享同一套配置文件。
考虑到 WezTerm 的稳定版本已经超过一年没有更新了,此时更建议使用 nightly 版本。nightly 版本相比稳定版本修复了不少 bug,比如在 WSL2 中使用 yazi 时,稳定版本会炸掉,而 nightly 版本则不会出现该问题。
一篇故事#
最近才看到 core.js 作者的故事,一个如此符合下面这张梗图的压抑的故事。
如果你没有看过上面链接中的文章,我建议你看一下――我相信能够来到小屋的读者,有耐心读完那篇长文。
开源的幻觉#
开源会给一些人带来一种幻觉:「你不做有的是人做」。你可以在很多地方看到类似的言论,比如「美国要是禁止国人参与 Linux 开发,国内就自己分叉一个」、「开源库总会有人审查代码安全,不用担心内藏病毒和后门」,以及在 core.js 关于这篇文章的 issue 中出现的:
The community at large will pick it up and maintain it. Your legacy is intact. Such is FOSS.
整个社区会接手并维护它。你的遗产是完整的。这就是开源软件的魅力。
那篇文章中提前对此给出了回应
Q: 这是开源的,我们将分叉(fork)它,滚开。
A: 我经常看到这样的评论,有人甚至试图用分叉吓唬我。我已经说过太多次了,如果有人能分叉并正确维护
core-js
,我会很高兴——在没有人维护的情况下,分叉有什么意义呢。现在我根本没有看到任何人试图为core-js
添加一些重要的东西,或者至少定期做出贡献。项目应该跟进每个新的 JavaScript 引擎版本,更新兼容性数据,修复或至少考虑每个引擎的每个新错误(无论多大的错误),查看并实现每个可能的新的 JavaScript 功能,最大限度地正确执行,测试并考虑每个现代引擎或老引擎的每个版本的具体细节。这是一项艰苦的工作,你准备好了吗,并且有所需的知识和时间吗?举个例子,当我在监狱里时,Babel 说他们搞不定:
「Talk is cheap, show me your code」。虽然说出这话的 Linus7 本人也因为偷偷摸摸踢走 Linux 的俄罗斯维护者8 而「塌房」了,但这话对上文提到的幻觉依旧有用。因为上文提到的幻觉,实质上是给出了这样的回答:「Someone will show you the code, but NOT ME」。
莫名的恶意#
我不知道这种莫名的恶意从何而来:怨恨软件作者任何与该软件无关的言论,比如「如何去除 Vim 启动页面中的『帮助乌干达的可怜儿童』」,比如 core.js 作者因为在 npm 包安装过程中添加了寻求赞助的提示被大量辱骂。引用那篇长文中的话:
开发人员喜欢使用免费的开源软件——免费,效果好。他们对背后数千小时的开发不感兴趣,他们对项目背后那个真人的问题和需求不感兴趣。他们认为,提及这些就是对他们个人空间的侵犯,甚至是对他们个人的冒犯。对他们来说,这些开源项目,就是一些齿轮,应该自动耦合,不应该有任何噪音,也不应该要他们参与。
好人应有好报#
好人没好报的故事,我见过太多了。从互联网方面看,有上面那样得不到回报的开源库维护者,有免费分享的资源被淘宝/闲鱼/拼多多等平台的贩子倒卖的,有免费帮助他人结果因为做的没付费的好反被辱骂的,我都或多或少见过实例。
而从现实方面看,「得益」于各路媒体总是将「歌颂面对苦难的精神」搞成「歌颂苦难」,各种行业领头人没工资,家人一直住在贫困农村的故事已经屡见不鲜了;抛开这些故事,也有「不是你撞的你为什么要扶」这种令全国社会道德大滑坡的事迹,什么免费送水/食品的人因为送得不够「好」反被指着骂的情况也算是屡见不鲜了。
好人应有好报,我如此认为。所以我向这位致力于维护开源仓库的作者捐赠了 140 元――和目前的 AI 产品常用定价 20 美元一致。
后话#
本次月记的脚注格外的多,大概是因为最近写论文找参考文献找魔怔了吧(笑)。还有一部分考虑,是小屋确实有一些读者了。虽然数量不多,但确实有考虑他人阅读感受的必要,姑且也算是一个好习惯吧。
这篇月记拖了两周才写好,原计划是 4 月 21 日发布,现在都拖到五一假期结束了,不能再拖了。为了达成月更,所以四月底水了一篇文章出来凑数。希望以后不会再水了……吧。
Footnotes#
-
Deadline 的缩写,一般代指截止日期。 ↩
-
也是 Codeberg 自己使用的 Git 托管服务,从 Gitea 分叉而来。 ↩
-
自由开源软件(Free and Open Source Software)的简称。 ↩
-
长城防火墙(Great Firewall)的简称,代指中国大陆地区对部分网站实行的包括但不限于 IP 屏蔽、DNS 劫持、间歇性阻断等措施。 ↩
-
xHyG,代指服务器的配置,x 表示虚拟处理器核心数量,y 表示内存容量(GB)。 ↩
-
前端优化术语,指像摇掉树上的枯枝烂叶一样,去除未被使用的代码的前端性能优化技术。 ↩
-
Linus Benedict Torvalds,Linux 内核的发明人与核心维护者。 ↩