+++
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/)的事情到这周日才写,这周一感觉效率很高、状态很好,在周二周三上了两天课之后就失去动力,神智不清了,在周四周五的时候才意识到:这周就这么过去了啊。
---
## 止语
{{< 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
Amazing high quality data here!
```
在 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` 和部分特殊路径的请求,都默认返回一个只有 `