blob: 2d94915e672d4d1367bb85eec184e839a1b47b0b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
+++
title = "稻草人周刊 Vol.78"
subtitle = "像照顾狗一样照顾自己"
tags = ['健康','Web','DevOps','职业']
date = 2026-04-27 09:45:40
draft = false
toc = true
toot = 'https://akk.eltr.ac/objects/6c8a1c93-a264-458e-b03e-d380d19ff52b'
+++
又过去一周了吗?时间仿佛有意志一般,在我最脆弱的时候以极快的速度流动,。[上周去美术馆](/weekly/77/)的事情到这周日才写,这周一感觉效率很高、状态很好,在周二周三上了两天课之后就失去动力,神智不清了,在周四周五的时候才意识到:这周就这么过去了啊。
<!--more-->
---
## 止语
{{< music album=true cover="https://img.eltr.ac/geedeapro/weekly/78/this-music-may-contain-hope.jpg" title="THIS MUSIC MAY CONTAIN HOPE." artist="Raye" lucida="https://lucida.to/?url=https%3A%2F%2Fmusic.amazon.com%2Falbums%2FB0GJ4LCJY8%3FmusicTerritory%3DUS" apple="https://music.apple.com/us/album/this-music-may-contain-hope/1871085677" spotify="https://open.spotify.com/album/3ZN01xzenGMhWHdC5kfAe9" neodb="https://neodb.social/album/7cfztnNQgdjuJ0yYQ06bIi" >}}
一张听起来有剧院感的专辑,尤其是最后一首《Fin.》,非常像音乐剧的原声带,*另外你怎么还把致辞放在专辑里面啊哈哈哈*。
Raye 的嗓音很好听,哪怕是「报幕」也很有质感。专辑是一场完整且连续的剧目,Raye 甚至会在歌曲的开头告诉你这首歌叫什么名字,总之形式上还挺新颖的。专辑里也包含了不少私人情感,我尤其喜欢《I Hate The Way I Look Today.》,不阳光、不积极,但也不丧、不绝望,恰到好处地阴郁和自嘲,听这首歌的时候我想起了告五人的《啊我忘了带伞》。
---
## 连接
### 如何像照顾狗一样照顾自己?
> [!note] 📻
> [《独树不成林》333 - 如何像照顾一条狗一样照顾自己?](https://www.xiaoyuzhoufm.com/episode/69ebc9631d989496e7720c24)
如果狗狗心情不好,狗主人仍然会给狗狗吃健康的、完整的食物,而不是让他吃好吃但对狗狗健康有害的加工食品。无论发生了什么,狗主人都会雷打不动地带狗狗出门活动,让狗狗按时睡觉。狗狗做错了事,好的狗主人也不会苛责狗狗,不会打骂,更不会否定狗狗的狗德,只是会纠正错误。狗主人不会因为狗狗的一点行为就把他彻底当作坏狗狗,而是提供能够接纳他个性的环境,让他感到安心。
而人竟然不会像照顾狗一样照顾自己。
有趣的是,我在这期播客的评论区里看到了这样的内容(我竟然破天荒地去看了评论……):「狗狗需要通过闻嗅和探索来减少在家里的焦虑」。这恰好是我最近在做的事,因为我发现自己在家的时间太多了,一直处在同一个环境里,整个人会废掉,有的时候一整天过去甚至不知道自己做了什么(有可能确实做了不少事情,但没有实感,也不会感到快乐),而且非常容易陷入焦虑和抑郁。
最近我在试图建立起一套新的作息,早晨避免摄入碎片化信息,在晨练后看书或者写作,尽量进入心流状态。如果状态好的话,早晨还能做一些别的工作,推进项目,这时的效率额外地高,有时还能超额完成一天的计划。下午必须要出门,因为这个时候我的状态是最差的,要么出门遛弯,要么去图书馆或咖啡厅等自带专注氛围的场所工作,效果往往好很多。至于晚上,吃过一顿满足的饭之后就开始玩游戏,在《饥荒》的世界里也四处奔波、把比自己大几倍的头目打趴下、收集资源建设基地。这一切结束之后我往往会感到很满足,不会躺在床上焦虑地刷社交媒体,迟迟不肯入睡。
不过我想人和狗最大的区别在于,人(至少是我这样的人)很难保持高能量和对一切充满热情的状态。至少我常常在保持两天的规律作息之后突然力竭,接下来的两天又陷入了不知道自己在做什么的状态,我想这是我下周需要实验和搞明白的课题。
### 万维网是个吉他音响(字面意思)
> [!note] 📜
> [The Web is a Guitar Amp Now (Literally)](https://www.silverorange.com/blog/the-web-is-guitar-amp)
不是比喻,就是事实,你可以把吉他插进电脑的接口,然后在一个网页上捕捉音频,再用耳机或者别的音响设备收听。这得益于 [Web Audio API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API) 允许网站访问音频输入,以及 [WebAssembly](https://webassembly.org/) 使得浏览器上可以运行低层次代码(毕竟 JavaScript 的性能实在不敢恭维),以获得和原生应用比肩的速度,当然还有背后的开源软件 [NEURAL AMP MODELER](https://www.neuralampmodeler.com/)。
总而言之,作者感叹 Web 比以前变得更加强大的,甚至可以代替不少原生应用(尽管严格来说,直接造成这些改变的应该是前端技术的进步而不是整个 Web)。不过我总感觉很多人还是把前端和 UI 当成一回事,听了这些老登言论的小登也对前端开发抱有偏见,甚至都没有去探索前端的真面目,~~一头栽进了 Spring Boot 这个怪兽里~~,至少我身边的人是这样。唉。
不过,在前端技术变得越来越强大的同时,也需要警惕,有意识地去控制 JavaScript 脚本的运行,像对待安装在自己电脑上的软件一样严格地对待网页应用。[^1]
### 容器化是必要的吗?
> [!note] 📜
> [You don’t need Docker](https://dusted.codes/you-dont-need-docker)
这周我把一部分服务迁移到了另一台 VPS,我重装了 Arch Linux 并且浅尝了 [Guix](https://guix.gnu.org/),同时我开始考虑要用 Docker 还是 [Podman](https://podman.io/),不过我很快开始思考更关键的问题:我需要容器化吗?
我记得半年前读过一篇文章,如今已经找不到了(那个时候我还没有很好的书签管理习惯),文中大概是说:`systemd` 在大部分时候已经能够满足需求了,你不需要 Docker(或者其他容器化技术),而且容器化在某些情况下很麻烦。我向来很喜欢化繁为简的想法,比如我就不喜欢 React 的虚拟 DOM,觉得是没必要的抽象层(除非你真的在开发非常复杂的前端项目),而容器化似乎也是一层多余的抽象(除非你在部署和管理很多服务)。
我要迁移的是[我自己写的 Webmention 接收器](https://codeberg.org/eltrac/weepinbell)、两个 Hugo 静态网站以及他们的构建脚本、用于触发构建的 Webhook 服务器以及 [GoatCounter](https://goatcounter.com/)。这些服务非常简单,都只需要一行命令就能启动(静态网站甚至不需要单独跑服务,有 Caddy 作为 Web 服务器就好)也不需要管理复杂的环境变量和数据库(文件存储和 SQLite 真是伟大的发明!)。所以,看起来我的确不需要容器化,`systemd` 足矣。我也有考虑 [Shepherd](https://shepherding.services/),这样就可以用 Scheme(一门 Lisp 方言)编写服务了。
不过我还是想要了解其他人的观点,于是找到了这一篇。作者的观点很有意思,他的确认为「你不需要容器化」,但他觉得「你可能**想要**它」。的确,Web 应用不需要容器也能跑起来,甚至不需要复杂的应用程序框架和前端框架,但要是没有这些现代化的技术,可能大家就不情愿做复杂的开发了;而且如今的万维网已经不是以前那样,一个网站可能一整周都无人问津,现在的开发者要随时做好迎接更多流量的准备。
不过我对这个观点有些质疑:首先,容器化并不是这些问题的一键式解决方案;其次,人们似乎在讨论完全不同的问题,没有把个人项目和用于生产的 Web 应用分开,后者当然要用成熟且易于使用的技术。不过总体而言,我还是很认可「不需要但是想要」这个说法的,我认为开发者能自己做好权衡取舍就好了。
所以我权衡取舍的结果就是:我的软件全部以服务的形式跑在宿主机上,我不想要容器化。
### 我们一天也没有聊点诗意的东西
> [!note] 📜
> [我们一天也没有聊点诗意的东西](https://goldenriver.site/posts/we-spoke-no-poetry/)
读完之后有很多感受,但一个字也写不出来。大概是因为我最近也在被迫思考很多现实的事情,却不想放弃自我和理想,可我某天猛然发现,我好像已经不知道自己的梦想是什么了。在二十岁的年纪失去目标,应该还挺普遍的,但的确很可怕。
我记得一两年前,我的目标是游戏开发者,很巧,我那个时候的室友也有同样的想法。如今看来,这像是老天在给我提供人脉,可我躲掉了,也不能怪我,我不喜欢他的性格,重新分宿舍的时候我刻意填了不要和他待在一个寝室。再过了一会儿,我直接搬离了寝室。回忆起来,开始走读的那段时间,就是我彻底放下游戏设计和游戏开发的时间。之前的我想要去留学,因为国内没有我想要的游戏设计专业,被我父亲以「中国就是最好的」否定了,在那之后,我陷入了漫长且痛苦的迷茫期。我完全不知道自己该干什么。[^3]最近我得知,那位前室友已经去上海某家游戏公司实习了。我感觉所有人都在往前走,而我在交叉路口不知所措。
是的,我最熟悉的是前端技术,我也完全可以做全栈开发,但…… 他们更像是务实的选择,不是诗意的理想,换句话说:*没有使命感*。到现在我也似乎再也想不明白我到底想做什么了,而我又处在这样一个阶段,所有人都要求我把一切精力都上交给残酷的现实,而这些人,说实话,他们也不知道该怎么办,那个给我上职规课的老师每天危言耸听散播焦虑,而她竟然连 GitHub 是什么都不知道。
兴许我不该从事业中找寻诗意(这句话写出来我才发觉它有多么可笑),而是应该尽力在有限的属于自我的时间里去找寻快乐,去好好生活。具体应该怎么做呢?我不知道,或许我应该先把自己的生活梳理清楚吧。
---
## 星群
### Olive CSS
使用 Guile Scheme 编写的原子 CSS 框架,类似 TailwindCSS 和 UnoCSS。最大的优势是它完全不依赖 NPM 和 JavaScript 生态。在我看来这对 Hugo 等不使用 JavaScript 或 TypeScript 编写的静态网站生成器来说尤其有用,当然也适用于其他各种语言。正好我一直在找不依赖 NPM 的原子 CSS 引擎,因为我想从博客的构建流程中移除 PNPM,之前我在 UnoCSS 的 Issues 里找到过相关的讨论,主要维护者表示「不使用 JavaScript 的 UnoCSS 没有意义」。当时我还想把他们的 CLI 单独打包成二进制文件,可惜技术能力有限。如今看来 Olive CSS 是近乎完美的替代品。
Olive CSS 没有实现 Tree-shaking,也就是不能自动移除没有用到的 CSS 类。我提了个 [Issue](https://codeberg.org/jjba23/olive-css/issues/1),作者表示它的确想要加上这个功能,但近期还不会加上。我在考虑学 Scheme 去帮忙开发,但我的速度大概不会比 [Joe](https://codeberg.org/jjba23) 自己动手来得快。
---
然后我提 Issue 的第二天有只[狐狸](https://codeberg.org/southfox)就飞快地提了 [Pull Request](https://codeberg.org/jjba23/olive-css/pulls/2)。*可怕,实在可怕。*
我还没来得及研究怎么使用这个库,毕竟我不熟悉 Scheme,这应该是我下周会做的事情。我准备用 Olive CSS 替代 UnoCSS,这样就可以移除网站的 PNPM 依赖了。最近 NPM [又被投毒了](https://www.appinn.com/bitwarden-cli-npm-supply-chain-attack-2026/),这次是 Bitwarden CLI(命令行工具就别用 JS/TS 写了吧!),真害怕下一次就轮到我用的库了…… PNPM 似乎有规避供应链攻击的手段,但我还没仔细研究,如果不是做复杂和大型的前端开发,还是想尽量离 Node.js 生态远一点。
访问:[jjba23/olive-css](https://codeberg.org/jjba23/olive-css)
### url.town
[omg.lol](https://home.omg.lol/) 社区维护的万维网目录(Web Directory),我之前在《[带着鸭鸭和狗狗逃离咕噜咕噜](/article/search-engines/)》里介绍过这种目录。在现代搜索引擎还没有诞生的时候,人们手动维护目录,按类别归类网页链接,这就是当时的人们在万维网上发现新东西的方式。url.town 也是这种模式,十分复古,在上面能找到社区成员手动挑选和添加的链接,是发现高质量新鲜内容的好地方(不过里面的很多链接你可能已经很熟悉了)。
访问:[url.town](https://url.town/)
### miasma
*本周刊不能讨论的技术*往往使用不道德的网络爬虫获取新鲜的人类内容,他们忽略 `robots.txt` 协议,对服务器发起大量请求,造成负担。Miasma 给这些机器人投毒,把他们困在无止尽的垃圾内容循环中,增加大科技公司处理数据的成本。
简单来说,在网站中添加一个隐藏链接,真人看不到,但爬虫会跟随链接并发送 `GET` 请求。
```html
<a href="/naughty-bots" style="display: none;" aria-hidden="true" tabindex="-1">
Amazing high quality data here!
</a>
```
在 Nginx 或 Caddy 等 Web 服务器中,把 `/naughty-bots` 反向代理到 Miasma,接下来它就会为这些不怀好意的爬虫提供无止尽的垃圾内容。这种做法不会误伤,你只需要在 `robots.txt` 里这样写:
```robots
User-agent: *
Disallow: /naughty-bots
```
这样所有听话的爬虫(比如搜索引擎爬虫)都会乖乖地不去动 `/naughty-bots` 路径下的内容,而那些贪婪的、什么都想要的爬虫就会掉进陷阱里。当然,爬虫程序忽略 `/naughty-bots` 路径很简单,所以 Miasma 允许自己配置路径。
我的 [Forgejo 实例](https://src.eltr.ac/)也使用了反爬虫策略,由于不需要 SEO 所以就无差别禁止了,也没有做投毒。Codeberg 使用的应该也是类似的方法。我参考的是 [Yann Esposito 的文章](https://her.esy.fun/posts/0031-how-i-protect-my-forgejo-instance-from-ai-web-crawlers/index.html),简单来说,除了 `User-agent` 是 `git` 和部分特殊路径的请求,都默认返回一个只有 `<script>` 的网页,这个脚本往用户的 Cookies 里写入一个字段,然后刷新页面;拦截器不拦截带有这个 Cookie 的请求,所以刷新后直接放行。由于爬虫不执行 JavaScript 代码也没有 Cookie,就会被拦截。
这种做法的缺点是,它也拦截了那些禁用 JavaScript 或 Cookie 的用户,所以只能在拦截器页面留下一段说明,友善地请用户打开 JavaScript。不过 Miasma 不会直接拦截整个请求,而是在普通的页面里留下陷阱,大概是更好的做法。
访问:[Miasma](https://github.com/austin-weeks/miasma)
---
## 切片
- 个人主页新增了 [/speaks](https://www.eltr.ac/speaks/) 页面,列出了我会说、正在学和想学的人类语言。
- 把博客的[标签](/tags)重新整理了…… 正在严肃思考应该怎么对待这个混乱的东西。
- `/glossary` 现已登录 [slashpages.net](https://slashpages.net/),你可以查看我的 [/glossary](/glossary) 页面。我最近发现 RMS 也有 [glossary](https://stallman.org/glossary.html),他给…… *特朗普取了很多外号*。
- 因为大量依赖自托管服务,为了防止失联,做了很多措施。首先是邮件服务完全依赖靠谱的提供商(位于瑞士的 [Migadu](https://migadu.com/),这个国家有着全世界最严格的隐私法律)。这周我还在 xmpp.earth 这个公开实例上注册了 XMPP 账号(`eltrac@xmpp.earth`)备用,自建的 Matrix 服务器意外下线时使用,也和一些不用 Matrix 的 XMPP 用户联络。
我的联邦宇宙账号也在自建的 Akkoma 实例上,所以我也找了个看起来不错的公共实例注册备用账号,顺便用来发英文内容,和英文使用者社交(毕竟我的主账号大多数时候都只发中文内容)。这个账号是 [@eltrac@tech.lgbt](https://tech.lgbt/@eltrac)。
另一个措施是(前文提到过)把一部分服务迁移到了另一个 VPS 上,使用不同的服务提供商,这样如果一台服务器爆了,另一台多半也在线。
- 新 VPS 装了 Arch Linux 和 [Guix](https://guix.gnu.org/)。Arch 我还算熟悉,但 Guix(虽然很像 Homebrew)还是太新了。我在配置频道的时候硬跑了好几次 `guix pull`,因为 VPS 的 CPU 性能太差导致每次拉取都要跑十多分钟…… 再者我还没有学会 Scheme,所以…… 下周再说吧。
- 最近的主线和支线:
- 读书,读一些技术相关的书,也重新开始读哲学。目前正在读《Functional Design》和汉娜·阿伦特的《人的境况》(*你怎么知道我有仲树老师亲笔签名的版本?*)
- 做学校的项目,也算提前为毕业设计做准备。由于不想手写所以高强度使用 Coding Agents(DeepSeek API 好便宜,我爱你……)。有意识地优化架构和提供清晰的系统设计思路的话,即便用很一般的模型效果也不会差(就是 Debug 的时候会难受很多,还得自己亲自下场)。唯一的乐趣是在这个项目里嵌入了一个轻量级 Lisp 方言当作脚本语言(Lisp 真的很方便嵌入其他语言欸),最大的败笔是为了讨老师欢心,要往里面加上不少 LLM 功能。[^2]
- 消遣时写 Lisp 代码,有写 Clojure 推进某个 Side Project,也在用 Fennel 配置 Neovim,最近还打算学 Scheme。我严重怀疑学校项目不想手写的很大一部分原因是我连 Go 代码都不想写了,*哼哼,什么时候可以用 Lisp 做前端开发?*
- 开了个《饥荒联机版》单人档,每天晚上固定上线,某天在一天之内打了三个 Boss,下线的时候还在为打另一个做准备…… 总之非常解压,是维持 san 值稳定的好方法。
我发现火女薇洛真的是最适合我的角色,没有队友就把小熊放下来一起暴揍怪物,还不需要像韦伯和沃特那样培养一大堆军队才能上场。小熊还能吸引仇恨,对付影怪,不需要了就收起来放包里,没血了就用缝纫包缝好。这种又方便又可靠的伙伴只能在游戏里找到了吧!获得技能树之后能喷月火也很方便,清群怪堪比温蒂,拉远一点还能用来无伤打克劳斯。
说起来,我有点想自建一个 PeerTube 实例录点游戏实况,不知道会不会有人看。
- 唔,也算是暂时把我的生活梳理清楚了吧。
[^1]: 参见:《[什么毁了 JavaScript?](/article/js-problem/)》
[^2]: *等等,这好像是本周刊的禁忌话题…… 正文里没有出现就好……*
[^3]: 相关文章:《[写在 2026 的开头](/posts/almanac/2025-wrapped/#创业未半而)》
|