MoreRSS

site iconEltrac | 極客死亡計劃修改

常讨论心理学和社会观察相关内容,不敢说很懂哲学;也会写笔记和生产力工具相关内容;还是学生。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Eltrac | 極客死亡計劃的 RSS 预览

稻草人周刊 Vol.73

2026-03-23 00:36:56

Kiss All The Time. Disco, Occasionally. music cover

Kiss All The Time. Disco, Occasionally.

Harry Styles

Harry Styles 在三月初发布的新专辑,我居然在中旬才发现。印象中,专辑发布的时候 Apple Music 有给我推荐这张专辑,但看到封面的时候根本没想到这是 Harry Styles 的专辑。最喜欢的几首:《Ready, Steady, Go!》《Dance No More》《Carla’s Song》。

不过,你的 MV 到底是在闹哪样啊?


开始之前

从本期开始,《稻草人周刊》不会包含任何与大语言模型及其应用的相关内容。如果出现了,请发邮件狠狠地谴责我。如果我真的要谈这门技术,我会专门写一篇文章来谈。周刊对大模型话题的单向封锁是为了表态:除了大模型,有趣的技术和话题不少而且更能激发我的好奇心;我不讨厌技术本身(除了 OpenClaw,我很讨厌它),但我讨厌对技术的滥用、自以为是和陈词滥调。

爱的反义词不是恨,而是漠不关心,所以接下来很长一段时间内我都不会关心它。


连接

在老鼠的世界里做一只浣熊

📻

现代科学使用的其实并非自然的老鼠,而是人工培育的近亲繁殖实验室老鼠,是老鼠和兄弟姐妹繁殖二十几代后诞生出的基因完全相同的老鼠,把控制变量这件事情做到了极致。

除了基因受到完全的控制以外,老鼠成为完美的实验室动物还有另一个原因:他们天生听话、勤勉且能干。相比之下,浣熊就是混沌的生物,会在被训练执行某些动作的时候做出非议所思的行为。浣熊不会像老鼠一样乖乖走迷宫,而是会把一切都破坏掉,浣熊只想要破坏

现代科学通过老鼠研究人类,正是假设人类和听话的老鼠更相似。由于老鼠非常听话,所以它们的行为是可预测的,一切都能够量化。以此建立起来的科学理论也因此认为,人类行为也是可预测、可量化的,人类不会像浣熊一样无法预测,比如,现代心理学抛弃了对难以量化的意识的研究,转而用科学的方法研究行为,认为一切没有表现出来、不能被量化、不能被预测的存在都不值得研究(或者说,都不存在)。在我看来,与此相关的还有行为经济学,以及各种研究人类行为的理论。

仔细思考一下,现代社会的一切规则,似乎都建立在「人类像老鼠一样听话」的假设上,浣熊一样的人类会扰乱秩序,因为浣熊一样的人类无法被预测行为、无法被量化,也就不存在价值。实验室使用老鼠而不是浣熊,是因为人们认为浣熊不便管理,不能为科学提供价值,不像听话的老鼠。人类社会也是一样。

听完这些叙述,我感到背脊发凉。

我其实有在异宠店接触过浣熊这种生物,当时我在逗一只翅膀受伤的鹦鹉,店主告诉我它是被那只浣熊咬伤的。鹦鹉站在我手上的时候,店主不得不给它套上铰链,因为担心它会飞到浣熊那里,再次被咬伤。当时鹦鹉一直在用喙啄脚上的链子,因为那让它很不舒服。那只浣熊被关在笼子里,放在店铺的最角落。店主说:“如果没有它,我们这里管理起来就方便很多了。”

店主当然是爱动物的人,她会做出这样的评价,是因为浣熊在客观意义上就是对其他生物非常不友好的存在。因为好奇心旺盛,它们会偷走顾客的手表和戒指,会用肥硕的身躯撞击笼子,会抓扯和撕咬他们看到的一切。

但是,我能说浣熊不应该存在于这个世界上吗?不,浣熊只是不应该被关在笼子里。老鼠或许能忍受,每天能得到一些食物碎屑就很开心了,能够勤勉地工作好几个小时,但浣熊会说:生命很短,吃垃圾吧,自由生活。

网页横幅按钮考古

📜

一篇介绍复古和早古网站中常用的按钮图片的文章,包含 88x31 和 200x60 等尺寸。我原本只知道流行于 IndieWeb 和 Neocities 社群的 88x31 尺寸,竟然还有其他尺寸的规范,长见识了。

其实上周我就悄悄给 林卷 页面添加了 88x31 按钮,也和一些朋友做了交换,似乎还在联邦宇宙上带起了一波小小的热潮?总之有一些朋友看到我的按钮之后也制作了自己的 88x31 徽标,而且一个个都做得比我好看,你们真的……

我觉得交换按钮和交换友情链接是有很大不同的,比起可能有些复杂的人情世故,交换按钮对我来说更像是一种收集爱好。就像收集邮票一样,在互联网上发现了喜爱的内容,可能是有趣的人也可能是某种理念、建议和有趣的句子( 88x31.nl 上收集了很多按钮,上面有类似「最好使用桌面端访问这个网站」的实用型按钮),就可以放到自己的网站上作为收藏,也不总是要交换。

容器术语实用介绍

📜

这周给 Weepinbell 做了样例的 Dockerfiledocker-compose.yml,这样用户只要把仓库克隆下来,直接运行 docker compose up -d(或者 Podman,应该是兼容的?)就可以容器化部署了。

这个过程中踩了一些坑,我突然意识到自己虽然有使用 Docker 的经验,但对一些基本概念不甚了解,至少我现有的知识不足以支持我发布一个可以用 Docker 部署的应用。

于是我找到了这篇《容器术语使用指南》,我认为在了解一个概念和体系之前,从术语入手是最容易的。一方面,理解术语的意思就是理解概念本身;另一方面,了解规范的术语使用也能极大地帮助自己阅读其他相关的文章、和其他人讨论相关话题。我见过很多失焦的讨论源自于对同一个词的理解不同,想必在技术领域,规范使用术语尤为重要。

切换到 MVNO

📜

本文介绍了一种省钱方法,就是把电信提供商替换为 MVNO。我在这里引用维基百科的定义解释什么是 MVNO。

移动虚拟网络运营商(Mobile virtual network operator,MVNO)是指不拥有无线网络基础设施,向消费者提供无线通信服务的电信运营商。移动虚拟网络运营商向传统运营商批发通信服务后,制定具有自己特点的套餐提供给消费者。移动虚拟网络运营商可以使用自己的客户服务体系、计费系统、销售人员,也可以使用移动虚拟网络(MVNE)的技术服务。1

简单来说,MVNO 向传统电信运营商租赁通信服务,然后自己销售。根据作者所述,这实际上会比直接购买传统运营商的服务更便宜,唯一的缺点是,在人多的地方,MVNO 用户的数据优先级会被降低,比如,在 Taylor Swift 演唱会上直播就不太现实了。

国内也有 MVNO 服务,官方名称叫作「移动通信转售」,不过有单独的 号码段 ,大概是不能保留号码无缝切换的,我也没有仔细研究,所以不知道国内这种服务是否具有价格优势。

去你的,做个网站不行吗?

📜

You don’t own shit that you put on social media platforms. You don’t own your follower counts, you don’t own your posts. Stop giving away all of your shit to data harvesters and advertisers for free in exchange for the illusion of importance that comes with likes and a follower count.

你放到社交媒体平台上的东西不是你自己的。你不拥有你的粉丝数,你不拥有你的帖文。别再免费把你的东西交给数据收割者和广告商了,那只能换取点赞数和粉丝数很重要的幻觉而已。

作者实际上不是在给出有关数字主权的建议,而是在抱怨商家为什么一定要在社交媒体上发布消息(当然,个人用户也可以参考这些建议)。作者不使用社交媒体,已经很久没有注册过账号了,可他仍然希望了解一些餐馆和线下商户的信息,如果他们能在网站上放上菜单和营业时间就再好不过了。

可如今,搭建一个网站似乎变得很麻烦(至少人们认为很麻烦),大多数商户都会选择在 Instagram 上注册账号,请顾客关注(国内的话,应该是小红书和大众点评吧)。

尽管很认同作者的观点,但我实在不觉得这类说辞和呼吁能起到什么实际作用。商家全都转向社交媒体是市场的供需关系决定的,如果商家不这么做,而是花更多的时间精力去搭建很多人可能根本就不知道如何访问的网站,就是在浪费钱,而且在面对其他使用社交媒体与消费者建立联系的那些商家时,固执地搭建网站的商家会失去竞争力,最终…… 消失,除非商户能在其他方面发展很强的竞争力。

所以这类观点是无法作用于商业世界的,只能作为对个人的建议。最后,我也想说,远离传统社交媒体,加入 联邦宇宙 吧,或者在独立博客网络上建立更深度的交流,抑或者,完全远离社交媒体,去过好自己的现实生活。

星群

Farside

Farside 是一个重定向工具,将访问者从某个大平台的链接重定向到自由且开源的替代前端实例上。替代前端(alternative frontends)一般是注重隐私,没有添加任何跟踪器,只有很少 JavaScript 代码的前端,也就是说,不用亲自访问某个大平台的服务,不直接建立连接,就能够通过另一个前端使用他们的部分服务。这类项目也叫作隐私前端(privacy frontends)。

对于 YouTube,有 Invidious 。Reddit、Twitter、Wikipedia、Medium、GitHub 甚至 Google Translate 等服务都有自由软件社区维护的隐私前端源代码,不同的人和组织托管了公用的隐私前端实例供所有人使用,免受大科技公司的跟踪,避免在浏览器中运行非自由的 JavaScript 脚本。

由于维护这些前端实例的往往是自愿者,而 YouTube 这类视频流量往往会消耗很多资源,所以 Farside 的另一个作用是在这些隐私前端实例之间均衡地分配流量,避免遇到瓶颈和速率限制。

Farside 本身作为重定向服务也可以自托管,有多个实例。有一些浏览器插件(如 PrivacyRedirect+ )利用 Farside 实现了这样的效果,在浏览器中点击任意大平台链接都会跳转到对应的隐私前端。如果想要分享来自某个大平台的内容,与其使用源链接,不如使用 Farside 链接更能保障被分享者的隐私。

访问: Farside

Ghostling

Ghostty 是我日常一直使用的终端模拟器(实际上我现在就在用 Ghostty 运行 Neovim 编辑这段文字),之前听 这期采访播客 的时候就了解到 Mitchell 开发了一个名为 libghostty 的 C 语言库,是 Ghostty 的内核,提供了基础且核心的终端能力。

这周 Mitchell 发布了 Ghostling(意思是……「小鬼」?),用 libghostty 开发的最小终端应用,目的是展示这个库的能力(顺带鼓励更多的人用 libghostty 开发其他应用,我猜是这样)。

The Ghostling terminal isn’t meant to be a full featured, daily use terminal. It is a minimal viable terminal based on libghostty. Also, since this is basically a demo, I didn’t carefully audit every single place for correctness, and this is C, so you’ve been warned!

Ghostling 不会添加完整的功能,不是日常使用的终端。这是基于 libghostty 的最小可行性终端。再者,由于这基本上只是个演示程序,我没有仔细地审计每一个地方,而且这是 C 写的,我已经警告过你了!

那期播客里 Mitchell 表示 libghostty 作为一个 C 语言库可以用在很多地方,任何人都能轻易地在自己的应用里嵌入一个终端,或者开发新的终端模拟器。浏览器作为 Web 的入口已经被开发得很完全了,而终端却较少受到关注,希望借助 libghostty,终端的生态也能变得丰富起来。

访问: ghostling

Doppler

啊,稻草人周刊已经有多久没出现闭源商业软件了?

我从今年年初就开始设立目标,尽可能全面拥抱自由软件,减少对闭源商业软件的依赖。我首先是逃离了大平台,然后逐渐用自由的解决方案代替 Google、Apple 和 Microsoft 提供的服务。这周我把刀口指向了音乐流媒体——我取消了 Apple Music 的订阅。

是的,有大学生优惠的话,Apple Music 仅需 ¥6 一个月,实际上相当划算(更何况我在最初还享受了半年的免费 Apple Music 订阅,买新 iPhone 似乎都能享受)。

我这里就不打算谈流媒体平台对小艺术家有多么不公平了,我下周会专门写一篇文章谈我从流媒体平台上退出这件事情。总而言之,现在我开始在 Bandcamp 上购买专辑并下载 FLAC 格式的高质量音频,开始用 Lucida 下载那些头部歌手的音乐。染上本地音乐之后,当然要给自己找一个称手的播放器。我平时用手机和 AirPods 听歌,所以在 iOS 上找一个自由且开源的音乐播放器就好……

你做梦。

在 iOS 生态里找存活下来的自由软件实在是太难了(本想说有机会就换到安卓,但 Google 最近又在搞事情,那边也不太平啊),好在我不是完全排斥闭源软件。我找到了一位独立开发者开发的口碑不错的音乐播放器,名叫 Doppler,作者 Ed 在 Mastodon 上还有 账号 。软件的 UI/UX 很舒服,试用了三天还没有遇到任何问题。

Doppler 有七天的试用期,买断价格十分合理,是 ¥58 人民币。这在 iOS 应用里是很好的盈利模式了,有不少 iOS 应用(可以说大多数)都会在用户第一次打开软件,还没有开始使用任何功能的时候,弹出流氓一般的优惠信息和购买按钮,关闭按钮藏得很深,有时候甚至根本没有。

总之,如果你也有在 iOS 上播放本地音乐的需求,可以尝试 Doppler,我对它的印象不错。

访问: Doppler

切片

  • 水逆结束了,不知道自己是不是什么高灵性玄学体质,水星开始和结束逆行的时候会有非常明显的感知(就算没有关注并且忘记了相关天象的时间点)。尤其是水逆结束的时候,会在当天凌晨开始感到神清气爽和精神焕发,抑郁情绪几乎很快就消失了,看不开的事情也很快看开了,语言组织能力也开始慢慢恢复。总之非常神秘。

  • Lucida 2 下载了 FLAC 格式的专辑在本地播放,音质…… 我去这个音质连我这个木头耳朵都能听出区别,比流媒体好太多,听到了好多之前没听到的细节——被流媒体害惨了。

  • 在家有室友穿透力极强的咳嗽和外放音乐(他大概觉得外放钢琴曲没有什么问题吧),出门去西西弗找地方坐,结果里面挤满了人,最后逃到学校图书馆,终于获得了安静…… 只是,为什么有人会恬不知耻地在图书馆这种地方打电话、在桌子下面踢腿和拖椅子啊!

    我不想戴耳机,我只想要绝对的安静。

    塞涅卡听了大概会说:内心平静才是最重要的,哪怕在闹市我也能专心写作——闭嘴吧,你们斯多葛主义哲学家!我要做浣熊,我要把你们吵闹的人都杀了!


  1. 参见: 移动虚拟网络运营商  ↩︎

  2. Lucida 的 88x31 按钮已加入 林卷 页面。 ↩︎

不能承受的生命之轻

2026-03-21 19:22:40

本想给这本小说五星评价,因为实在喜欢,但诚实地讲,我并没有完全读懂这本小说,在没有读懂的前提下给一本经典小说极高的评价是极其虚伪的。于是《不能承受的生命之轻》这本小说,目前我只给了四星,不过我能预见我会在未来再次翻开这本书,到时候兴许会再写一篇书评,重新给出评价。


整体而言,这部小说的叙事和语言风格我很喜欢。要形容昆德拉的文字带给我的感觉,我觉得可以用「完美」和「富有灵气」这两个词。即便不能完全读懂小说要表达的思想,但也能从文字的美感中获得享受,同时还能引发思考。对我而言,这是文学作品的范本了。

小说中通过四个主要人物和一些次要人物的人生经历,给出了多种对「生命之轻」的解释。每个人物在小说里都有他们自己的主题,这些主题贯穿始终,却也在不断变化。

如果你不想读太多有关小说情节的描述,可以跳到《 To be political or not to be political 》这一节。

轻与重

首先是托马斯,小说的第一部和第五部都题为「轻与重」,这是托马斯的主题。

在小说的开头,作者阐述了尼采的「永恒轮回」,这个狡猾且可怖的哲学概念是轻与重的来源。简单来说,永恒轮回假设一切都会重来,相同的历史会在无限的时间长河里反复上演。老实说,我在几年前第一次接触到这个哲学概念时,是用现代科学的角度来思考的:如果时间无限长,那么就像猴子打字机一样,事情总会在人类无法计量的时间过后再次发生,这的确是有可能并且很有趣的物理学观点。

我的理解完全忽略了永恒轮回在哲学意义上给人类带来的沉重感

若法国大革命永远地重演,法国的史书就不会那么以罗伯斯庇尔为荣了。正因为史书上谈及的是一桩不会重现的往事,血腥的岁月于是化成了文字、理论和研讨,变得比一片鸿毛还,不再让人惧怕。一个在历史上只出现一次的罗伯斯庇尔和一位反复轮回、不断来砍法国人头颅的罗伯斯庇尔之间,有着无限的差别。

“如果我们生命的每一秒钟得无限重复,我们就会像耶稣被钉在十字架上一样被钉在永恒上”,所以尼采说永恒轮回是最沉的负担。如果永恒轮回不存在(我们也确实生活在认为它不存在的世界里),那么世界便是轻盈而灿烂的吗?生活在只会有一次的「轻」当中,同样痛苦,因为做出的决策没有过去的参照,也没有在未来修正的机会。

永恒轮回、隐喻与偶然

轻与重是很大、很抽象的主题,在托马斯的故事线里,还有一些更具体、更容易理解的小主题,也与轻重相关。在第一部里,这个主题叫作「偶然」。

故事发生在捷克布拉格,托马斯是个外科大夫,属于受人尊敬的知识分子,这类人是不会表现出过于热切的政治理念的。他的前妻是共产主义者,和他有着不可调和的矛盾,简而言之,他离婚了,受了情伤,此后失去了爱人的能力,没办法进入一段稳定的关系,每天都和不同的女人交欢。直到有一天,他遇见了特蕾莎。哪怕在读完小说之后再看这此相遇,特蕾莎也没什么特别的,至少对托马斯来说是这样,她不是把托马斯从苦海中解救出来的女性,完全不是。

托马斯爱上特蕾莎的原因是「隐喻」。故事是这样的,托马斯和特蕾莎做爱过后,特蕾莎发了烧,他没办法像送走其他女人一样把特蕾莎送走,于是特蕾莎就留在了他的公寓里。托马斯的同情心作祟,他想象有人把特蕾莎放进一只小船里,她是顺着河流漂到他身边的——对,就是这个隐喻。在第五部里作者还会再次强调:爱由隐喻而起。

支撑起托马斯与特蕾莎爱情的东西是他的同情心(在特蕾莎眼里是她的忠贞和软弱),一开始是想象「特蕾莎是被人放在小船里顺着河流漂到他身边的」而产生的同情心,后来是特蕾莎紧抓着他的手不放而产生的同情心,再后来是特蕾莎从瑞士回到布拉格,而托马斯无法忍受自责(因为他想象特蕾莎一个人待在布拉格的公寓里,过得很惨)而丢下工作回去找她。哪怕在小说的后半段,也能看到托马斯经常对特蕾莎做的一个动作:抓紧她颤抖的手,让她不再感到害怕。在小说的后期,当托马斯意识到他已经没办法握住她的手让他停止担忧的时候,他深深地感到绝望。

哦对,我忘了说,即便是和特蕾莎在一起之后,托马斯依旧每天和别的女人做爱,他没办法停下。为什么呢?可能因为遇见特蕾莎是一系列的偶然导致的,可能他还没有准备好。总之,一直到小说的最后部分,特蕾莎才感到能够完全信任托马斯,不过这是属于特蕾莎主题的一部分了,这里带过就好。

偶然是怎么体现的呢?

七年前,在特蕾莎居住的城市医院里,偶然发现了一起疑难的脑膜炎,请托马斯所在的科主任赶去急诊。但是,出于偶然,科主任犯了坐骨神经病痛,动弹不得,于是便派托马斯代他到这家外省医院。城里有五家旅馆,可是托马斯又出于偶然在特蕾莎打工的那家下榻。还是出于偶然,在乘火车回去前有一段时间,于是进了旅馆的酒吧。特蕾莎又偶然当班,偶然为托马斯所在的那桌客人提供服务。恰是这六次偶然把托马斯推到了特蕾莎身边,好像是自然而然,没有任何东西在引导着他。

在意识到这六次偶然之前,托马斯刚辞去了瑞士医院的工作,回到布拉格和特蕾莎在一起。他离开时非常坚决,引用了贝多芬的 F 大调第 16 号弦乐四重奏的这句词「es muss sein!」,意思是「非这样不可」。可是,如此必然的决定依赖的却是这样偶然的爱情,这让他又开始感到绝望。

必然是重,偶然是轻。前者让托马斯坚决地做出了决定,后者让他再次陷入了不可承受的痛苦当中。

缺乏重量的决绝

以上是第一部的故事,在第五部中,有关轻与重的论述变少了,但依旧作为线索存在。第五部的托马斯丢掉了他外科大夫的工作,成为了一名窗户擦洗工,这个抉择的确是慎重的考虑,但与此同时又显得很轻。故事是这样的:托马斯撰写了一篇对当局不利的文章发表在报纸上,借用了俄狄浦斯的故事(俄狄浦斯意识到自己弑父娶母的行径之后,戳瞎了自己的双眼,因为他认为自己有罪)以此来说明,即便是因为当时不知道某些事情而犯下了伤害别人的错误,仍然是有罪的。这篇文章被记者删减了,最终呈现出来的效果是,包括当局在内的所有人都以为托马斯要捷克共产党人戳瞎他们的双眼。

在那个国家,医生是公职人员,受国家直接管理。有人找他谈话,想要他发表一篇声明,撤回自己先前的言论,并且再加上一些赞扬和批评的话,签上自己的名字。有趣的是,托马斯其实认为签或不签都问题不大,让他感到不舒服的是这件事情发生之后,同事看他的眼神:在之前,托马斯是个受人尊敬又有些孤僻的大夫,大家都觉得他不好接近(毕竟他业余时间都去约炮了),可知道这件事情之后,大家都笑眯眯地盯着托马斯,认为他一定会签的,而一旦签了字,托马斯就变成他们的同类了

纠结过后托马斯没有签字,到了一个小地方的小诊所给病人开药,在那里也逃不了相关人士的穷追不舍,最终他不行医,去擦窗子了。

听起来这是相当有原则的决策,是「重」的,为什么说是「轻」呢?托马斯其实并不关心政治(当然,政治来关心他了;小说中唯一一个富有热情参与到政治活动中的人是弗兰兹,这个之后再讲),他并不是为了坚定政治立场而做的这个决定。

于是托马斯给警方一丝希望,表示自己去写声明以此争取时间。第二天,他就开始着手写辞职信。他设想(设想得很正确)自己一旦自愿沦落到社会最底层(那时已有别的学科成千上万的知识分子都降到了社会最底层),警察就再也不会抓着他不放,不会再对他有什么兴趣。那样的话,他们便不会去发表所谓由他自己签名的声明,也绝对不会有人相信。谁发表这种无耻的公开声明只会高升,而不是沦落。

所以,托马斯是为了不被警察烦扰,不被人误以为无耻而做了这个决定。我很难描述清楚,但我似乎能从作者的笔触中感觉到,他认为托马斯做出这种沉的决定,是出于及其的理由。

不过他并没有过得很惨,当了擦洗工之后,每天都有他以前的病人点名要他去他们家擦窗户,以美食好酒招待他,然后签工单证明他干了活。他也会遇到一些女性,和丈夫不在家的妻子做不可言说之事。第五部也对托马斯对女性的态度进行了一番描写,他像做手术一样用解剖刀一样的好奇心对待每个不同的女性,吸引他的不是美色,而是女人的个体性(怎么还挺女性主义的?)。对于特蕾莎就不是这样,他不对特蕾莎感到从事科学研究一样的好奇,他和特蕾莎之间爱情的纽带,我们已经说过了,是「同情心」。

没有使命的自由

到了第七部也就是最后一部,托马斯和特蕾莎去到了乡下生活,因为特蕾莎不喜欢布拉格,她在城里的酒吧工作,总是被警察骚扰。托马斯当擦洗工一段时间过后,之前的病人也不常找他了,他在布拉格没有什么留恋的,而且,出于「同情心」,他不能忍受特蕾莎受苦。于是,在特蕾莎的提议和要求之下,他们把过去的生活完全抛掉,去到了农村种地干活。他们在第一部就养了一条狗,名叫卡列宁,到了乡下,最开心的显然是卡列宁。

第七部实际上是关于特蕾莎的,准确而言,是特蕾莎和卡列宁的关系,所以在讲托马斯的这一节里我不会展开太多。我只想引用托马斯在第七部所说的话:

“当你发现自己是自由的,没有任何使命时,便是一种极大的解脱。”

这句话出现在特蕾莎的自责之后,她觉得要是她一开始没有从瑞士回到布拉格,托马斯也不会跟着回去,后面的一切也都不会发生,托马斯不会丢掉他医生的使命,也不会和她一起流落到乡下。

最终托马斯和特蕾莎出了车祸,一起死在了山里。唔,虽然我写得好像挺悲伤的,但我并不觉得这部小说有任何悲剧色彩。

灵与肉

「灵与肉」是特蕾莎的主题,是第二部和第四部的标题,指代的显然是灵魂与肉体。

羞耻心、个体性、原生家庭与另一种偶然

肉体很好理解,可灵魂到底是什么?在特蕾莎眼里,灵魂是个体性的证明,也是将自己与自己的肉体区分开来的东西。特蕾莎很讨厌自己的母亲,她的母亲是个毫无肉体羞耻心、一点也不尊重隐私的人。她母亲会在家里不穿衣服走动,特蕾莎就会慌张地把窗帘拉上,不让人看见。这一举动反而遭到了母亲的嘲笑,因为母亲认为人人的肉体都是一样的,长得没有什么不同,遮蔽肉体或者对暴露肉体感到非常不舒服,反而是可笑的,是因为认为自己特殊。

特蕾莎恐惧的就是源自于肉体的平庸与一致性。母亲说「人人都有肉体、都有一样的器官」「肉体就是人的全部,人也没什么好隐藏的,所以肉体也没什么好隐藏的」。这实际上是在否认个体性,否认灵魂的存在。

特蕾莎不仅从小被母亲的嘲笑长大,还伴随着母亲的嫉妒长大。小时候,父亲会在特蕾莎还在洗澡时闯进卫生间,她感到隐私被侵犯了;然而,母亲却不这么觉得,母亲觉得特蕾莎没有资格遮蔽自己的肉体。这里的情感有些复杂,一方面母亲的确是被「丈夫可能被女儿的肉体吸引」而感到嫉妒,另一方面她又认为「就算这样女儿也不该遮蔽肉体,不该躲避」。我没能完全理解这种想法,大概是觉得特蕾莎在装圣洁吧。

显而易见地,特蕾莎在遇到了托马斯之后,搬离了母亲的家,与她彻底切割(她母亲还好几次试图卖惨骗她回去,还好她没能得逞)。更显然易见地,尽管在肉身上进行了隔离,特蕾莎的灵魂里依然留下了母亲的印记,她做的梦就是很好的例子。

特蕾莎知道托马斯在外面和其他的女人交欢,她一开始非常愤怒,后面却慢慢接受了,这个事实贯穿了他们十几年的婚姻生活(是的,他们结婚了)。她做了这样一个梦:她梦到她和一群女人(托马斯的情人)光着身子站在游泳池边,泳池上是拿着手枪的托马斯,她们排着队转着圈给他唱歌,谁要是停下来,就会被托马斯拿枪击毙,掉进泳池里。

在这个梦里,个体性被肉体的暴露消灭了,她们都没有穿衣服、都只能唱歌、都被枪指着。特蕾莎就生活在这样的恐惧里,而她如何缓解这种恐惧呢?很简单,让托马斯证明他认可特蕾莎的个体性,证明她是特殊的,和情人不一样。

一开始,布拉格被俄国人侵略时,他们逃到了瑞士,托马斯在那里当了医生。特蕾莎以为去了另一个地方,她就会好受一些,然而托马斯依旧死性不改。她忍受不了,一个人回了布拉格。后来的事情我们知道了,托马斯出于同情心,回布拉格去找特蕾莎,回到了原来的公寓里。特蕾莎实际上清楚托马斯会回去找她,她实际上在展示自己的软弱,把托马斯留在身边。

还需要说明一下特蕾莎为什么爱上托马斯。托马斯爱上特蕾莎是因为隐喻和偶然,特蕾莎也是出于同样的原因,但又略有不同。托马斯对偶然感到痛苦,认为那是不能承受的生命之轻;而特蕾莎却觉得偶然是爱情的隐喻,偶然就是证明。托马斯住在六号房间,而她六点下班;他听贝多芬的音乐;她在出门的时候又在公园的小长凳上遇见了他。这些偶然事件都是他们爱情之独特的证据。

此外,由于特蕾莎重视灵魂而厌恶肉体,书籍对她来说是逃离母亲影响的避难所,也是一种「秘密兄弟会的暗号」。她看到托马斯的桌上又一本书,便对上了暗号,因为酒吧里没有别人带了书。不过这种暗号的意义其实仅仅是逃避而已,特蕾莎自己并不爱好文学,她从书中获取的是灵魂的隐喻。

在第四部里,特蕾莎又做了一个梦,梦到托马斯要她去死。那个时候她实在是受不了了,因为她每天晚上都能在托马斯的头发里问到女人下体的味道(托马斯每次都会洗澡,但是忘了头发),她陷入绝望。在梦中,她向托马斯求助,托马斯让他去比得山。去了之后,特蕾莎发现那里有个枪手,专门帮别人自杀。她知道托马斯是要她死,她不想死,可她(在潜意识里)不敢违抗托马斯的意愿。直到枪手要开枪的时候,她才大声喊出:这不是我的意愿。

上一个梦反映的是特蕾莎对失去个体性的恐惧,这个梦更上了一层,此时的「个体性」变成了「遵从自己意愿的自由」。梦境反映的是特蕾莎对违抗托马斯的恐惧。

做了这个梦之后,她很快在工作的酒吧遇到一位工程师,然后,呃…… 他们做了。不过,特蕾莎一点也不享受这个过程,她这么做的原因是,她对肉体的厌恶达到了极点,她的灵魂想要把肉体「打发走」。与工程师交媾时,她感到灵魂与肉体是分立的,这使得她木然地接受了与陌生人的性爱。

使她对肉体的厌恶达到极点的,是托马斯的不忠。因为她憎恶这具身体无法成为托马斯的唯一,所以想要把它打发走。当然,背后还有更深层次的原因,上一小节已经解释过特蕾莎对肉体的态度了。

这次经历让她意识到了三件事情:

  1. 她一点也不喜欢别人的身体,做爱的时候,她觉得那样的接触很奇怪,甚至是对个体性的亵渎。这不难理解,特蕾莎向往的是灵魂的契合,是精神上的爱情,或许这也是她能够忍受托马斯不忠行为的原因之一。
  2. 她感到自己的生活是被监视着的。她事后想到,那位工程师完全有可能是秘密警察,想要与她发生关系,以此证明她是个妓女(她把各种可疑的线索拼凑起来得到了这个结论,比如工程师一开始说要去做咖啡,可几分钟之后却没有端着咖啡回来,她怀疑工程师实际上是去架设摄像头了)——作者没交代这个猜想是否真实,但我宁愿相信那是特蕾莎童年创伤的另一个症状。
  3. 她意识到她与托马斯之间爱情的纽带是她的忠贞,因此,她没有把这件事情告诉托马斯。

最后,交代一下特蕾莎是如何从工程师家里逃脱的。特蕾莎洗过澡之后,听到了工程师的呼唤,这个时候她看不到工程师高大的身躯,因此声音就显得格外刺耳。工程师的声音又细又尖,这点她之前没有注意到,此时的她感到困惑、不快,身体的冲动消失了,灵魂又占据了主导,所以她突然清醒过来,没有回应工程师,直接离开了。此后,她再也没有见到那个男人。

声音似乎可以唤醒灵魂,而视觉会激发肉体。

卡列宁的微笑

特蕾莎受不了秘密警察的打扰(即便那个工程师后来再也没来过,也真的有卧底的警察在酒吧天天骚扰她,怀疑她是个妓女,说些难听的话),提议和托马斯去了乡下居住。第七部的标题是「卡列宁的微笑」,这一部讲的是特蕾莎和她的狗卡列宁的感情,这一部的主题是「牧歌」。

人与狗之间的爱和牧歌是一样的。这是一种没有冲突,没有撕心裂肺的场面,没有变故的爱。

牧歌似乎是个比喻,具体的含义大概是,人不试图占领和支配自然,不像笛卡尔一样认为动物是没有灵魂的,而是与自然共生的面对世界的态度。1

在第七部中,特蕾莎意识到自己对卡列宁的爱,要比他对托马斯的爱情来得更加高尚。诚实地讲,这一小节所表达的思想我没能完全理解,因为这一节有很多文字都在讨论「人类」。

那就先把情节讲清楚吧。特蕾莎和托马斯发现卡列宁的腿上长了一个肿瘤,托马斯在兽医的协助下给卡列宁做了手术,可肿瘤还是扩散了。赶牛群的时候,卡列宁只能用三条腿跑步,用针缝上的腿儿还在往外渗血。特蕾莎很悲伤,当村里人问起缘由时,特蕾莎哭了,可对方并不理解特蕾莎为什么为了一条狗哭泣。

让我感到痛心的情节是,当卡列宁已经没有力气玩耍,甚至没有力气走动时,面对特蕾莎,卡列宁依旧用尽力气站起来和他们出门散步。不是因为它想,而是因为它想让主人开心。

最后托马斯亲自给卡列宁做了安乐死,让它体面地离开了。它被埋在了院子里。

我意识到这是这整部小说里最让我感到痛心的死亡场面,特蕾莎和托马斯出车祸被压扁,弗兰兹身不由己地死在前妻身边,都没能让我感到伤心。可恶啊,为什么要把狗狗写死……

以一段我很喜欢的句子结束这一小节吧。卡列宁在生前每天都和特蕾莎重复这样的仪式:等着主人中有一个人醒了,它就跳到床上,之后特蕾莎会出门买东西,顺带给他买一块羊角面包,它会很开心地叼着这个面包,等回家后和托马斯一起玩争抢面包的游戏。昆德拉说,如果卡列宁是个人类的话,它就会说:“我说你能不能别再给我买那个羊角面包了?给我弄点新鲜的吃的不行吗?”

人类之时间不是循环转动的,而是直线前进。这就是为什么人类不可能幸福的远古,因为幸福是对重复的渴望。

不解之词和伟大的进军

托马斯和特蕾莎的主题可以说都被我讲得稀里糊涂的,现在让我们暂时放下他们两个,来关注另外一对。萨比娜是托马斯以前的情人,似乎也是小说里唯一一个有姓名的情人,她还和特蕾莎有过正面接触。萨比娜从布拉格搬到了瑞士(而我们知道托马斯为了特蕾莎又回到了布拉格,所以之后他们的联系就变少了),在那里遇到了弗兰兹,一位…… 已婚男士,也是一位有品味的知识分子。

弗兰兹讨厌他的妻子,也不喜欢他的女儿,因为女儿和妻子非常像。妻子玛丽·克洛德属于大大咧咧的性格,总是喜欢在人群里大声说话,想要展示自己,活在他人的关注当中。2不过这不代表她很低俗,缺乏教养,她对艺术其实相当在行。萨比娜是个艺术家,她与玛丽·克洛德共事——是的,这样的人物关系让情节变得有趣起来了。

不解之词

第三部的标题叫作「不解之词」,我很喜欢这一部,可以说是整部小说里我最喜欢的部分。第三部围绕萨比娜与弗兰兹对相同词语的不同理解来展开,与此同时解释了他们为什么会有不同的理解,往往是人生经历和价值观的矛盾。

比如,他们对音乐的理解就完全不同。

弗兰兹对高雅音乐和轻音乐不加区分。区分在他看来是虚伪而老套的。他对摇滚乐和莫扎特的喜爱不偏不倚。

萨比娜讨厌音乐向「噪声」的不断演变,而弗兰兹却朦朦胧胧地渴望着一种巨大而绝对的噪声,将所有一切吞噬,这样一来,话语带来的痛苦、虚幻和空洞都会消失。

音乐是对词句的否定,音乐是反话语。她渴望与萨比娜久久地拥抱在一起,不要说话,一句话也不要说,就让快感同音乐的狂乱喧嚣融合在一起。

读到第三部的时候,我感觉弗兰兹是我最喜欢的角色,读完之后也是如此(尽管他死得很惨,而且死法可以说是好笑)。我大概是在弗兰兹的人物形象里找到了一些与我自己的相似之处吧,有令人欣赏的相似之处,也有让人感到可悲的相似之处。

他们对「力量」一词的理解的分歧,尤其让我觉得有意思。

萨比娜渴望被力量支配,可又不喜欢被发号施令,于是得出结论认为:没有男人适合他。和托马斯还有交流的时候,她很享受托马斯在床事上对她的各种命令,比如「把衣服脱了」,还有一次他让萨比娜光着身子在镜子上爬行。如果这种发号施令来到了生活中,她不能接受有男人要干涉她的行动。她对力量的理解很矛盾,她觉得力量是用来使用的,觉得展示力量很诱人,但却不希望成为力量的受者。

弗兰兹拥有力量,他的肌肉很健壮,可他不使用力量,从没打过人。对于萨比娜在床上的要求,他表示「爱就是放弃力量」,而这也让萨比娜觉得他在情欲里威风不再。

第三部是这样结束的:弗兰兹想要或在真实里,显然,萨比娜对真实的理解与他有着不可调和的差异。所以,当弗兰兹跟妻子坦白自己劈腿的事情时,弗兰兹获得了自由,然而萨比娜却感到恐慌。这不难理解,萨比娜在当地艺术界的发展是要靠弗兰兹的妻子的,不过这不是最重要的原因。

最重要的原因是什么呢?我竟然没有印象。回到小说中一看,萨比娜自己似乎也说不明白为什么光明正大的生活让她痛苦。大致的原因是,她不愿意爱情进入公共视野,希望保持私密。

总之,萨比娜背叛了弗兰兹,逃到了巴黎,最后又去到了美国。对她来说,背叛是美妙的、清爽的,她之前也实施过一次又一次的背叛。我想,这是因为她有着自由且独立的灵魂吧。我决定在之后不继续谈萨比娜这个人物,因为我对她的理解实在匮乏(可能是她和弗兰兹一起出现时,我的注意力都放在弗兰兹身上了)。

伟大的进军

尽管有这么多的分歧,弗兰兹依然爱着萨比娜,他意识到自己对萨比娜的爱,比起爱欲,更接近一种宗教信仰。(可恶,这下我跟弗兰兹更像了)第六部的名字是「伟大的进军」,这一部进一步地描绘了弗兰兹的人物形象,尤其是他的政治活动和他梦想家的人格色彩。

萨比娜走后,弗兰兹跟一个女大学生在一起了。当然,我们知道,他对萨比娜还有感情,这种感情不是爱情,而是宗教信仰。弗兰兹作为知识分子,受邀去柬埔寨参加一次政治活动,为那边受战火影响的人民提供帮助。弗兰兹很纠结,一方面,他不愿意离开女大学生,他知道她不会想让他去的;另一方面,他想要让萨比娜对他刮目相看,哪怕萨比娜根本就看不到他。

正如信仰上帝的人知道上帝不在身边,却仍然认为上帝在看着他的所作所为一样,把萨比娜当作宗教信仰的弗兰兹知道萨比娜不在身边,但他仍然活在想象的萨比娜的目光里。所以,他接受了邀请,去到了柬埔寨。

标题中的「伟大的进军」是对左派政治人士的描述,他们援引过去各种人类思想家的言论,为自己的信仰而战,为改变世界而战,这便是伟大进军。这种狂热之中有媚俗的成分在,媚俗也是第六部的主题之一——再次,我没能完全理解这篇小说里媚俗的概念,所以不展开谈了。现在我们只关注弗兰兹这个人物。

总之,弗兰兹参与到了一场伟大进军当中。

弗兰兹参与这场政治活动的目的是为了让他想象中的萨比娜对他刮目相看,因为他是个梦想家。等他们来到边界,向对岸的人说明了来意过后,却没有收到任何回应。最终,这场伟大进军的热情被浇灭了,所有人都垂头丧气地回了旅馆。弗兰兹感到想象中萨比娜的目光消失了,又想起了女大学生看他的眼神。他觉的这一切都没有意义,应该回去陪他真正的爱人。可以说,随着伟大进军的受阻,弗兰兹的梦想和信仰也随之破灭。

弗兰兹要一个人走走,结果遇到了强盗,要拿他的钱。这时,他突然想起萨比娜一直很欣赏他的力量,可他一直放弃使用力量。他想着让萨比娜刮目相看,于是挥起拳头,向强盗打了过去。这时,萨比娜的目光又回来了,他又成了梦想家。

结果他在背后被人打晕,再次醒来的时候,是在日内瓦的医院里。他的前妻陪在他身边,因为前妻认为,弗兰兹去了柬埔寨这么远的地方还被人打伤,实际上是为了她,为了让她刮目相看。弗兰兹想要让她离开,却发现自己说不了话,也动弹不得。他闭上眼睛之后,就再也没有醒来。

他的葬礼是前妻主持的。他信仰的萨比娜远在美国,对故土的情况毫不在意。他爱的女大学生在葬礼的最后一排,在朋友的搀扶下痛哭流涕。

这是梦想家的下场。

To be political or not to be political

人物都讲完了,我略过了西蒙这个人物,也就是托马斯和前妻的儿子,因为我对他的理解也很匮乏。现在,我想从情节和人物中跳脱出来,谈谈我读完这部小说的另一个感受。

我向来避讳政治话题,因为我觉得谈论政治会让很多事情都变得麻烦和棘手,我想要纯粹地讨论技术、艺术和文学。我逐渐发现这是不可能的。如果要讨论技术,我就必然会展示出我的政治倾向,比如对自由软件的偏好和对闭源商业软件的厌恶。以前我没觉得这是政治问题,不过现在看来的确是的,不然 Richard Stallman 为什么会被称为社会活动家?

讨论文学时,更是避不开政治。这部小说的背景就是俄国对捷克的侵略,小说中托马斯被警察骚扰而放弃行医,特蕾莎感到生活被监视,萨比娜离开布拉格定居瑞士,都与这个政治事件有关;哪怕是弗兰兹这个瑞士人,也参与到政治活动当中了。在文学中,人物的政治倾向自然也是塑造他们形象的关键部分,而且,文学作品所要表达的丰富内涵,当中也有政治思想。

可以说,如果不讨论政治,我就没办法完整地欣赏文学。让我回到第六部《伟大的进军》的情节,这里的故事若是完全忽略政治来理解,那基本等于没看。

昆德拉描述的这场伟大进军非常精彩,因为这次政治活动有法国人、美国人和欧洲各国人的参与。我很喜欢法国人的态度,因为即便他们全部都能听懂英语,也鄙视美国人在会议上讲英语的行为——“在场还有法国人呢,为什么不讲法语,要讲英语?”他们要求找译员,找到译员之后也一直在挑译员的翻译错误,把会议拖得很长。后来,法国人们开始讲一些攻击美国的话,译员不敢翻译,美国人就微笑地看着他们,甚至挥拳表示赞赏。

在去到柬埔寨国界的路上,一位美国女明星也在场。法国人不乐意,因为这是一场医疗援助,医生应该走在最前面,知识分子排在后面,女明星应该走在最后。后来女明星受不了委屈,固执地往前面跑,却被人拦住,最终被一个德国诗人护住。摄影师觉得这一幕值得报道,于是往远处跑,找角度拍照,结果踩到了地雷,被炸成肉块,鲜血染红了一行人举着的白旗。

惊恐过后,人群觉得这鲜血让他们的伟大进军更加光容,感到骄傲,继续前进了。

Wow. Just… Wow…

如果我避开政治的话,我能读懂昆德拉文字里的讽刺吗?我能欣赏这精彩的场面吗?我能理解这部小说的文学价值吗?

我逐渐意识到我真正避讳的并不是政治话题,而是「时政」。一方面,我讨厌在饭桌上大谈中美关系局势的中年男人;另一方面,谈论另一个国家发生的与我无关的事情让我焦虑;再者,谈论身边的时政是危险的。

所以,这本书给我的一个重大改变(准确来说应该是读了这么多文学作品给我带来的改变)就是,我不再避讳讨论政治了。Google 正在让 Android 系统变得更封闭?这就是政治话题,要用政治的思想来讨论和行动。不过,我也意识到,互联网上讨论政治的问题之一,是大多数人都没有相关的知识储备和眼界(难怪讨论性少数和女性主义等时政话题的时候,大家都吵得不可开交,而且都吵不到点上)。

所以,尽管我开始接受政治话题,但我并不会像开闸放水一样立马开始写长篇大论。我大概会找一些政治哲学相关的书来读,学会真正地用政治的视角思考问题之后,再考虑在博客里写作相关的话题。

昆德拉的叙事

我很喜欢这部小说的叙事顺序,不是简单的顺序也不是简单的倒序,而是穿插着的,从目录就可以看出:

第一部 轻与重(托马斯的视角,他与特蕾莎的故事)

第二部 灵与肉(用特蕾莎的视角重述了上一部的故事)

第三部 不解之词(萨比娜的视角,她与弗兰兹的故事)

第四部 灵与肉(特蕾莎的故事)

第五部 轻与重(与第四部并行发生的,托马斯的故事)

第六部 伟大的进军(弗兰兹的故事)

第七部 卡列宁的微笑(特蕾莎的视角,她与卡列宁以及托马斯的故事)

托马斯和特蕾莎之死,其实在第三部就交代了。那个时候萨比娜收到了托马斯儿子的信,得知托马斯和特蕾莎死在了山里。也正是因为读者早就知道托马斯和特蕾莎的死法,最终小说没有以死亡收尾,相反,读者在读完之后清楚地知道托马斯和特蕾莎正在「向死而生」。

我在阅读第七部的时候,每次读到托马斯和特蕾莎上了卡车,心里就会咯噔一下,因为我担心再往后读几行,他们就死在卡车里了。幸运的是,昆德拉没有写出一个悲剧的结局。小说的最后一段是这样的:

托马斯打开房间的门,揿亮了吊灯。特蕾莎看见两张床对放着,一张床边有一个带灯的床头柜。一只巨大的蝴蝶被光线一惊,飞离灯罩,在房间里盘旋。下面,传来钢琴和小提琴微弱的声音。

我不敢说我读懂了这个结尾,但我可以提供我粗浅的理解。在这段话的前几段,特蕾莎刚刚向托马斯表达了愧疚,因为她一直利用自己的软弱和托马斯的同情心,把托马斯拉到自己身边、拉回布拉格、拉到乡下,让托马斯没办法行使他医生的使命,也正是这个时候,托马斯表示,没有使命是自由、是解脱。

第七部的主题是「牧歌」,是人类不支配自然、与自然共生的寓意。前面提到,人类无法获得幸福的原因是人类的时间是线性的,人类无法像狗一样忍受重复。我想,牧歌作为主题的另一层含义,是人类终于停止了前进,停止了对使命的追求,终于获得了全然的自由和解脱。此时的托马斯和特蕾莎,虽然对生活感到忧虑,但已经不再追求任何他们不拥有的东西了。可以说,他们获得了幸福。

所以,我的粗浅理解是,小说的最后一段话,表面上是对房间的无趣描写,实际上等同于这句话:“他们幸福快乐地生活了下去。”


  1. 顺带一提,我写到这里的是顺便搜了一下牧歌的原文,意大利语写作 Madrigale,英文写作 Madrigal。迪士尼电影《魔法满屋》中主角一家人的姓氏就叫作 Madrigal。 ↩︎

  2. 插句无关的话:玛丽·克洛德在小说中与其他知识分子大声地讨论过这样一个问题,她觉得有的书是白天读的,有的书是晚上读的,然后问其他人应该把司汤达的书归为哪一类。当听到她不认可的答案时,她直言不讳地说:“不对不对,完全不对,司汤达的书应该是晚上读的”。我正好读过两本司汤达的长篇(《 红与黑 》和《 帕尔马修道院 》),我不得不同意她的观点。我能理解弗兰兹为什么不喜欢她的性格,但必须承认,我很敬佩敢在人群面前大声表达自己观点的人。在一群人面前说“不对不对,完全不对”,难道不需要勇气吗? ↩︎

Ready, Steady, Go...?

2026-03-19 18:29:28

这几天出门总是发现路面被浸湿,空气冷冷的,呼吸起来很舒服,却从未见到下雨。大概是因为雨都很方便地发生在夜晚吧,不过,也有可能是我最近没怎么从家里走出来。

不知道什么时候开始,去过一趟学校之后,我就会失去和世界抗争的所有力量,然后把自己关在房间里一晚上什么也干不了,所以就不出门了。

之前写《 迷失于图形界面 》的时候,我的语气还是太收敛了,而部分路过的读者还持有对教师群体的不理性尊敬(我尊敬很少一部分教师,不是全部),以至于有人专门发邮件教我要从别人的角度思考问题,考虑老师的教学工作是如何进行的。所以我决定向读者描述最近一次,一位大学老师是怎么浪费了半个小时的时间讲授完全无用的知识的。

任何一门编程语言里,几乎都有保留字,也叫关键字,这些字符是不能用来命名自定义符号(变量、函数)的,因为它们是构成语法的一部分,比如 forifswitch 等。这本来是很简单的知识,一遍带过就好。请记住,这位老师是在给大三的学生教授 Python 这门课,他非常清楚这些学生都有 C 语言和 Java 的编程基础,这些知识他们是了解的。

这位老师在幻灯片上展示了 Python 的所有保留字,然后提出了一个匪夷所思的问题:上面这些保留字,哪些是 Python 独有的?于是接下来的几十分钟,我们都在解决这个问题。

给这场可笑的讨论雪上加霜的是老师狭隘的认知,他的眼里只有 C、C++、Java 和 Python 这几门语言,因此,虽然他的问题是「哪些保留字是 Python 独有的?」,他实际上说的是「哪些 Python 的保留字不存在于 C、C++ 和 Java 中?」,一个同样缺乏意义的问题。

“这个 asyncawait 关键字是 Python 独有的吧?”——不,JavaScript 里经常用到。

“还有 def 是 Python 用来定义函数的,其他语言里没有。”——Clojure 用 def 定义全局变量。

elif 是 Python 独有的吧?反正我是没在其他语言里见过。”——老师显然没写过 Bash 脚本。

老师甚至忽略了 Python 中布尔值写法的不同,这门语言的 TrueFalse 开头是大写的,而其他语言里一般写作 truefalse——这显然是更容易造成误解的区别,是更值得提出的问题。然而,当老师在抽点学生回答他那个毫无意义的问题时,他却批评指出这个问题的学生「钻牛角尖」。“其他语言里难道没有 truefalse 吗?仅仅是因为大写吗?我觉得不算吧。”

“我刚刚问了下豆包啊,他给我生成的结果,我看也跟我想的差不多”,是的,这位老师在课堂上临场使用大模型回答他自己提出的问题,“同学们你们也可以搜一下啊,都不用自己搜索,问问 AI 软件就好了。”

忍受这样的课堂,真是消磨我的意志力。


最近的精神状态真的日渐萎靡,昨天破天荒地在凌晨之前上床睡觉,结果没被闹钟叫醒,卡在上课前十分钟醒来,出门已经晚了,正好是一个不点名的老师的课,索性继续躺下了,醒来的时候辅导员因为旷课给我发了个黄牌警告,因为老师不点名但辅导员叫班委点了名。

今天也是,十点半的课但是十点二十才醒(不过说实话我睡得很好,这大概是最重要的),索性也没去,这节课是辅导员上的课,反倒没点名。

一节课名字叫作创新创业基础与实践,另一节课名字叫作就业指导与生涯规划。

没去上课,就在家里做了半个小时 HIIT,洗完澡之后神清气爽,感觉世界都明亮了。我在想状态萎靡有没有可能是没洗头感到不舒服导致的。

还是要少上课,多洗澡啊!

—— Eucalyptus

刚开始写这篇文章的时候本来是雨天,结果某天早上起来,天晴了。两个月前写《 All Those Who Wander 》这篇文章的时候,我不太想把它归类到《乱章》这个散文系列里,总觉得它表达了一种更深远、更柔和也更痛苦、更具美感的负面情绪,这种情绪在平常隐身,在雨天显形,像是季节性抑郁。

于是我默默把它和先前的一篇文章收进《雨天集》这个新系列里,可惜那之后的日子里,重庆都没怎么下雨。

如你所见,我现在处于一个尴尬的境地,本想用写作排忧解难的我拖延了这次写作,拖到雨停了,而我也发现自己的睡眠和情绪随着水星逆行即将结束、新的月相周期开始,逐渐好了起来。

状态逐渐恢复的另一个原因是没上课的那天畅快地洗了一次澡并且睡得很好,不如说这才是关键原因。

不过,雨水还没干,我也觉得自己需要在清醒和阳光充足的时间里,对前段时间挥之不去的负面情绪做一些理智的反思。所以,文章还是要继续写的。


两个月前我请一位塔罗爱好者朋友帮我占卜,我想知道在大四开始之前,我能不能摆脱当下所感到的迷茫,至少有清晰的职业目标。如我所料,答案是没有,或许是我想要的太多了,或许是我不愿意妥协,比如,我绝对不想要一份每天都要写恶臭的 Java 代码的工作,我不想要在主要业务令我哈欠连连的企业上班。朋友说我或许适合去有愿景的初创公司工作,我想是的,可我自己也没想好。

独立开发呢?那我岂不就成了专有软件的创造者,成为了我讨厌的人吗?诚然,编写自由软件是养不活自己的。自然也有开源但提供付费云服务的盈利模式,可我自己都不会使用这种服务,为什么要做自己不赞同的事情呢?更何况,这一切的前提,都是我有能力开发具有商业价值的软件。

我知道我所有的忧虑都有一个非常简单的解决方案:停止思考,开始行动。可怎么行动呢?像苍蝇一样到处乱撞,还是加入我讨厌的团体,写着一成不变的代码,做着无趣的事情,和无聊的人打交道?

我知道我站在这样一个岔路口,一边是令人恐惧的不确定性,另一边是味同嚼蜡的确定性。更可怕的是,所有人都在往前走,只有我蹲在原地,不敢选择。

每次去到学校,我都会被提醒那条相对而言具有确定性的那条道路有多么令人抑郁,又是如何在步步紧逼。不称职的老师自以为是地讲授着无用的知识,时不时插入一些关于 OpenClaw 的粗浅发言,让自己感到「我有在跟上潮流」。等他感到无聊了,就会吓一吓学生,不断地提醒他们大四就没有课程要修了,要出去实习找工作了。另一边,热心的辅导员要求每个学生把简历写好发给她检查,时不时发一些岗位信息在群里,拍一些学生在双选会上和人事聊天的照片,告知有人已经被某某企业通知面试的消息。

是的,我感到只有我一个人留在原地,因为我不愿意选择这条路。

把项目经历写在简历上的时候,我感到一种十分令人不适的被挑选的感觉。我要写什么呢?GitHub 上有五百多星星的项目是我在高中的时候写的,面试官会在意这个不完整的 PHP 项目吗?用 Lisp 语言写 Webmention 接收器,还实现了 microformats 解析,我的确花了不少心思,但有谁会在意这些小众的技术呢?更别提那些零零散散的小 Web 应用了。值得被好好审视一番的,似乎就只有我作为课程设计组长用 Java 写的那个我自己都讨厌的软件系统了。


我和同室1共用一个书架,那个书架是我搬家前买的,因为当时还没放满,所以就腾了些空间给他。最近买了些文学作品和技术相关的书,发现书架已经放不下了,而我的书桌上也堆放了好几本书,于是我向同室提出再购置一个书架。

“但是我下个月就不在这了。”

“你是要搬走吗?”

“也不算吧…… 总之就是我下个月就不在重庆了。”

于是同室把他的书从书架上移走了一部分,给我的新书腾出了空间。那一层空了两三天,我才开始整理书本,我尝试给哲学类书籍、小说和工具书分类,还在想要不要按国家给外国文学分类,可我很快发现我没办法在那个书架前面正常思考,匆忙地把《帕尔马修道院》《翻译研究》和《深入浅出密码学》放在一起,然后逃回了房间。

说实话,同室要走了我应该高兴,我一直不喜欢他。可我现在感受到的是什么呢?是嫉妒吧。虽然很难承认,但我的确是会嫉妒的。


在我的观察里,洁癖有两种,一种是「爱干净」,另一种是「怕脏」。

表面看起来是相似的,但完全不同,至少我作为「爱干净」的类型,和「怕脏」的人生活在一起,会感到非常烦恼。

举个例子,家里的吸尘器尘仓满了是我清倒的,抽油烟机(没有油烟管道,是会把油汇集在一个小盒子里的)是我清洁的,灶台都是我擦的(我指的是把铁架抬起来擦拭);浴室的地漏每次都是我通的,同室好像是习惯了洗澡的时候有积水似的,从没想过想办法疏通管道。

同室的「怕脏」怎么体现呢?他冲马桶之前会把马桶盖盖上再冲,有时候一次没有办法冲下去,但盖子盖上他也不去看(或者他就是忘记了),我偶尔能在自己家里体验开盲盒开到人类排泄物的恶心感。浴室的地漏很容易卡头发,他是不会用手捡的,或者很少去捡,要么一直卡在那,要么被他用什么工具拖到一旁不管(也不知道是不是想等着我来收拾)。

其实影响最大的是他擦屁股的习惯,因为怕脏了他的手,他上完一次厕所会消耗几十张纸巾(大概是要把纸张叠得厚厚得,才敢碰自己身体最脏的部位),而厕所的纸巾向来是谁用完了谁用自己的抽纸换上。有一次我买了一袋很大的竖着挂的抽纸放在厕所,换上的一天之后我就出门了,三天之后才回来,到家的时候那一大袋抽纸只剩最后几张了。我问他怎么能用这么多,他反问我「这不是很正常吗?」

—— Eucalyptus

不久前我向同室提出分开使用厕所的卫生纸,这几天我能明显观察到,我一周只会更换一两次厕所的卫生纸,但同室前一天换上的卫生纸,第二天就过半了。

说是怕脏,但他同时对一切似乎都很淡漠,他不在乎地面是否清洁,不在乎台面是否有油污,不在乎镜子是否透亮。他只是把家务当作义务,一件因为有其他人(我)存在而不得不做的事情。他显然没有很负责任,否则我也不会因为难以忍受他的疏忽,而提出「家务都让我来做」。

其他都还能忍受,但同室有堆积垃圾的习惯。当我的精力被学校的破事消磨殆尽回到家时,低头就能看见同室肆无忌惮地留在玄关的垃圾小山(说是小山其实毫不夸张,大概有我膝盖那么高吧),其中的一些垃圾,似乎四五天前就在那里。

有一天我终于没办法忍耐,问他:

“门口的垃圾你什么时候丢?”

他一如既往地露出尴尬又令人讨厌的笑,回答:

“今天出门就丢。”

等我再次回家的时候,之前的垃圾的确不见了,但又有新的外卖包装被放在门口,作为新垃圾山的地基。毫不令人意外,第二天又有新的垃圾出现在那里。


我快二十一岁了,但我依然抱着玩偶睡觉。最近它安抚我的时间开始蔓延了,从令人抓狂的课堂逃离回家,从碍眼烦心的垃圾堆走过的时候,我开始奔进卧室,把它从卧室带出来,放到书桌前,然后小声跟它说话。

“我不喜欢那个人。”

“我出去接杯水,很快回来。”

“噢,我还要去拿个东西,然后洗手…… 没事,也很快的。”

“你就待在这里等我。”

之后我的理智大概是宕机了,列出的待办清单都没有被完成,我开始不间断地看 Matt Rife 的单口喜剧专场、芦苇的《植物大战僵尸》游戏视频和宝可梦对战。陷在信息流里出不来,对我来说是能量低谷的警报,可是,就像我在岔路口不知道如何抉择一样,在警报响起时,我根本不知道怎么做。

我感到自己坐在鸣笛声不停还闪着红光的封闭空间里,听见旁边的走廊上有怪物正在靠近,而我却陷入僵直反应中无法逃脱。

显然,不健康的心理状态影响了我的睡眠和认知。我读的书变少了,我开始在写代码和写文章的时候感到没法集中注意力,我开始逃避原本能让我沉浸的事情,因为对现在的我而言,沉浸意味着沦陷,仿佛我要是现在不去写简历、不去参加比赛、不去考证,而是在可笑的电脑面前写着可笑的 Lisp 代码就是在浪费生命,马上就会流落街头。

然而,我却没有办法真的去做那些事情,因为他们让我感到厌烦。如果我把一整天的时间用在谄媚和我并不在乎的竞争上,我会打心底里开始痛恨自己。我就这样被卡在中间,无法动弹。

更令人抑郁的是孤立无援之感,我感到我讨厌我身边的所有人,没有一个人让我感到安全。我知道我需要加入一个群体,找到志同道合的人,无论是我自己的理性思考还是玄学预言都揭示了这一点,可这种解决方案,就像是在说「我需要有很多钱」一样,没有改变任何事情。

或许我应该严肃地考虑养一只猫了。


如果我要回到四年前,给还处在高中的我一些建议,我一定会说:好好学习,不是为了什么考上好学校有个好文凭,是为了遇到更好的人。

可是,光是这样想就很自私吧?逼过去的自己做讨厌的事情,和让现在的自己去做 Java 开发有什么区别?

周四的上午收到一条消息,来自之前兼职过的教培机构,那里的老师问我暑假有什么安排,可不可以回去做助教老师。印象里,他们时不时就会问问我的意向,教学总监也说要想办法让我过去当老师。为什么不去呢?教培的确很赚钱,而且我的英语不差,至少他们都很认可。

此时的我似乎忘记了,我在去年写过一篇 文章 抱怨这份工作。教培很赚钱,但也很累人,而且,我并不赞赏那里的文化,尽管我在那里遇到了不少有趣的人。当然,那篇文章的内容也有失公正,因为当时我的精神状态非常差(如今回忆起来,当时好像还真的想死来着),而精神状态差并不是那份工作直接导致的。

不过说到底,我仍然不想做出选择。

我看见我的人生像小说中那棵无花果树一样,枝繁叶茂。

在每一根树枝的末梢,一个个美妙的未来,仿佛丰腴的紫色无花果,向我招手,对我眨眼示意。一枚无花果是丈夫、孩子、幸福的家,另一枚是名诗人,又一枚是才学出众的教授,一枚是埃·格,了不起的大编辑,再一枚是欧洲、非洲、南美,另一枚是康斯坦丁、苏格拉底、阿提拉以及一堆姓名古怪、从事非凡职业的情人们,再一枚是奥林匹克女队冠军,在这些无花果的上上下下还有许许多多我不大辨认得出的无花果。

我看见自己坐在这棵无花果树的枝桠上,饥肠辘辘,就因为我下不了决心究竟摘取哪一枚果子。我哪个都想要,但是选择一枚就意味着失去其余所有的果子。我坐在那儿左右为难的时候,无花果开始萎缩、变黑,然后,扑通,扑通,一枚接着一枚坠落地上,落在我的脚下。

——西尔维娅·普拉斯《钟形罩》

我与埃斯特的区别在于,我看到的无花果一点也不丰腴,它们在一开始就是萎缩、发黑、发臭的,或者,那些肥硕多汁的果实藏在我看不到也够不着的地方,而我却没有梯子。我不愿意吃掉难吃的果实充饥,也找不到梯子,我知道果实就快要落下来,可我什么也做不了。


  1. 我不喜欢「室友」这个称呼,共处一室的人不一定是朋友,所以我使用「同室」这个词代替,就像「同学」是指一起学习的人,「同事」是指共事的人一样。 ↩︎

计算无穷

2026-03-18 00:22:11

由于计算机算法的特性之一是有穷性,一切能被计算机计算的东西都必须是能够在有限步骤内完成的,所以,计算机不能够应对无穷长的数据。

真的是这样吗?

穿针引线

在正式介绍 Clojure 这门语言如何操作无穷之前,我想先介绍两个非常好用的宏,->->>,因为我会在接下来的演示代码中非常频繁地使用它们。这两个宏的名字分别叫作 thread-first 和 thread-last。它们是用来做什么的呢?

首先,在任何编程语言中(哪怕不是 Lisp),都有可能遇到连续对数据进行计算的情况,一段计算完成之后,需要把结果传递给下一段代码继续操作,一般来说需要嵌套函数。假设我们需要解析一段 Markdown 文本,而我们采取的策略是,使用一个函数解析所有的标题,使用另一个函数解析块引用,再使用一个函数解析列表,以此类推,我们可能会这样写:

func parseMarkdown(raw string) string {
 return parseLists(parseBlockquotes(parseHeadings(raw)))
}

显然,这种代码可读性很差。大多数时候,我们可能会将某一段计算的结果存放在变量里,再把变量的值传递给下一个函数,以此提升可读性。

func parseMarkdown(raw string) string {
 result1 := parseHeadings(raw)
 result2 := parseBlockquotes(result1)
 result3 := parseLists(result2)
 return result3
}

上面这段代码可读性就高很多了。你可能觉得这样很蠢,怎么会有人这样写解析器?没关系,就算不是解析器,也可能会出现类似结构的代码,比如一开始传入一个文件路径,读取这个路径下文件的内容,再把文件内容(假设是 JSON 字符串)解析为数据对象,再提取数据中的某个值。

这种做法看起来并不少见,所以能否简化呢?有没有办法让我们不需要把数据放进变量里,再取出来,再传给下一个参数,而是能够直接把所有的操作都串起来呢?

而且,我们知道,Lisp 语言一般遵从函数式编程范式,这种范式一般要求变量是不可变的,对赋值有着极为苛刻的要求,在 Lisp 语言里用这么多变量是不现实的,尽管能够用不太优雅的方式做到。

用 thread-first 和 thread-last 这两个宏就能解决上述问题。

(defn parseMarkdown [raw]
 (-> raw
 parseHeadings
 parseBlockquotes
 prseLists))

视觉上,这很像类 Unix 系统上常用的管道(Pipes),即 | 符号。在输入命令行的时候,可以用 | 把两个命令串联起来,使 | 之前的命令的结果传递给之后的命令。假设你需要读取 foo.txt 这个文件的内容,并查找其中包含 bar 的行,就可以这样写。

cat foo.txt | grep bar

使用 -> 可以让代码变得简洁。假如你想要读取一个 JSON 文件的内容,这个文件不大,你想直接加载到内存里并直接转换为 Clojure 的数据结构,就可以这样写:(-> filename slurp json/read-string)

thread-first 和 thread-last 的区别是什么呢?刚刚我们演示的函数都只接受一个参数,而 first 或 last 指的是把上一个函数运算的结果传给下一个函数的第一个参数或最后一个参数,所以并没有体现出区别。

假设我们要操作的数据是列表,而操作这类数据的函数往往在最后一个参数的位置接收列表(比如 (map f coll) 的作用是对 coll 中的每一个元素执行 f 操作,然后返回一个惰性序列,coll 就是最后一个参数)。如果使用 thread-first,也就是 -> 宏,列表就会作为第一个参数传入,也就是被当成函数 f 而非 coll

箭头宏还有另外的版本,cond->cond->>,这里的 cond 是 condition(条件),你可以根据条件判断要不要执行这条流水线里的某一环。

(cond-> filename
 true slurp ;; 由于条件为 true,所以总是会被执行
 json? json/read-string ;; 如果是 json,才会被解析
 json? :body ;; 如果是 json,才会尝试获取 body
 true println)

箭头宏的用处很多,最常见的场景之一是用来处理列表,毕竟,Lisp 就是列表处理语言(List Processing)啊!

假设我们有一个装满了狗狗的向量,我们要从所有的狗狗中找出听话的好狗狗,并给好狗狗每只狗一块零食吃。1

(defn treat-good-dogs [dogs]
 (->> dogs
 (filter :good)
 (map give-treat)
 doall))

如果对上面的代码进行宏展开,就会得到:

(defn treat-good-dogs [dogs]
 (doall (map give-treat (filter :good dogs))))

不过,为什么在最后加上 doall 呢?这是做什么的?

惰性的魔力

假设我们有无穷只狗狗,但我们的零食数量是有限的,要怎么办呢?我们当然没办法满足所有的好狗狗,在零食发放完之后就不能继续操作了。这要怎么写呢?你可能会想,需要一个整数型的变量来表示零食的数量,每发出去一块零食就减 1,当变量值为 0,就停下,终止操作。

用不着这么麻烦,我们可以直接对无穷进行操作,直接在无穷的狗狗里筛选好狗狗,再取出前 n 个好狗狗(n 为零食的数量),给他们零食就好了。

假设 dogs 是一个无穷的序列,也就是说用无穷无尽的狗狗们在等待着发放零食(天哪,光是写下来就觉得可爱爆了)。那么,下面这段代码会陷入无限循环吗?

(->> dogs
 (filter :good)
 (map give-treat))

不会,因为 filtermap 返回的是惰性序列(Lazy sequence)。

简单来说,只要我们不主动读取惰性序列中的数据,相关的操作就永远不会被计算。比如 (filter :good dogs) 这一步,虽然写法很优雅,可以直接读作「filter good dogs」(筛选好狗狗),但 Clojure 实际上并没有真的去筛选好狗狗,而是承诺:下次,下次一定,之后我就把这件事情办了。

下一步 (map give-treat ...) 也是一样,Clojure 还没有「给每一只好狗狗一块零食」,而是做出了「我之后就会给每只好狗狗一块零食」的承诺。

这就是为什么之前我们要用到 doall,这个函数的效果是执行惰性序列中的所有效果。如果没有这个函数,我们就只是做出了承诺,而没有真的去执行。

当然,现在的情况是,我们得到的惰性序列是无穷长的(无穷的狗狗中好狗狗的数量自然也是无穷),当然不能 doall,因为这样做资源会很快被消耗光,我们没有那么多零食。在计算机系统的视角下,我们也没有那么多的内存和处理器资源可以分配。

假设我们有 n 个零食,我们可以这样写:

(->> dogs
 (filter :good)
 (map give-treat)
 (take n)
 doall)

上面这段代码的意思是:

  1. 我们有无穷的狗狗
  2. 承诺之后会筛选出其中的好狗狗
  3. 承诺之后会给筛选出的好狗狗零食吃
  4. 取出前 n 个承诺
  5. 执行这些承诺

实践惰性

你可能会以为,dogs 为无穷长的序列只是个假设,如果真的有无穷长的序列,Clojure 也是处理不了的。

实际上 Clojure 真的可以生成无穷长的惰性序列。 range 函数一般接收一到两个参数,生成一段由连续整数组成的惰性序列,例如执行 (range 3) 会得到 (0 1 2),执行 (range 1 3) 会得到 (1 2)。如果不传入任何参数,也就是不限定边界,就会得到一个无穷长的惰性序列。

读《Living Clojure》的时候,读到作者写了这样一句话:

不要运算它,否则会使你的 REPL2 崩溃

于是我就这么做了。

在 REPL 里运行 (range) 的后果

Clojure 显然是陷入了每个程序员都遇到过的无限循环,这是怎么发生的?首先,我输入了 (range),构造了一个无穷的惰性序列,然后 REPL 读取了这个惰性序列,并想立刻求出这个惰性序列的值,于是惰性序列中的元素就被运算了,运算之后被打印了出来,就造就了图中的局面。

我们可以优雅地从无穷里取出有限个元素,来避免无限循环。

(take 5 (range))
;; => (0 1 2 3 4)

显然,我们并不会遇到规模为无穷的问题,否则就算有能力处理无穷长的惰性序列,在实际运算这个惰性序列时,也会因为陷入无限循环而无法继续执行程序。

不过,这不妨碍我们利用惰性序列优雅地处理大规模的问题。

假设有一个几万行的 JSONL 文件,也就是说有好几万条 JSON 数据被存储在这个文件里,每一行都是有效的 JSON 对象。我们知道 I/O 操作开销很大,把这么大的数据整个读取到内存里也极其消耗资源,更别提还要把 JSON 字符串解析为可以直接操作的数据结构,为了保证程序不会太低效,必须采取一些手段。

惰性序列就是很好的解决方案。

(with-open [rdr (io/reader "very-large-file.jsonl")]
 (let [lines (line-seq rdr)] ;; line-seq 返回包含所有行的惰性序列
 ;; 它接收的数据类型是 java.io.BufferedReader
 (count lines))) ;; 返回文件行数,但没有真的读取文件内容

你也可以用 filtermapreduce 等函数直接操作惰性序列,它们接收惰性序列,返回的也是惰性序列,只要不执行 doalldorun,或者用其他函数读取其中的值,它们就永远不会被计算。

如果你打算遍历这个文件的所有行,只有被遍历到的行才会被读取,余下的行仍然是惰性的。换句话说,如果你在惰性序列里寻找一个符合特定条件的元素,比如包含特定字符串的行,而符合条件的元素恰好就是第一个元素,那么整个遍历操作实际上只会读取文件的第一行。

如此优雅的操作,只需要三行代码!

这就是把一切都变成列表的好处。除了用于筛选的 filter、用于创建映射的 map 和用于累计计算所有元素的 reduce,还有许多可以用来操作列表的工具,比如 remove 可以移除列表中符合条件的元素,flatten 可以打平任意嵌套的列表,into 可以把一个列表的元素全部放进另一个列表,partition 可以把一个列表分割成相等长度的多个列表。

你可能还发现上面的许多函数都还涉及判断列表元素是否符合某个条件,在其他语言里你可能见过类似的做法,比如给排序函数传入一个函数作为参数,用来比较谁应该放在前、谁应该放在后,这种函数一般叫谓词函数(predicate)。

Clojure 里有很多好用的谓词函数。比如 nil? 可以判断一个值是 nil 还是不是,如果要移除列表里所有的 nil,就可以这样写 (remove nil? coll)。我也很喜欢 complement 谓词,它的意思是「补集」,比如 nil? 的补集 (complement nil?) 就是判断一个值不是 nil 的谓词,如果不是 nil 就返回 true。刚才写的 (remove nil? coll) 也可以写作 (filter (complement nil?) coll)

你也可以用匿名函数作为谓词,写法是 (fn [] ...),简便写法是 #(...),在简便写法中可以使用 % 来表示参数,如果有多个参数,就写作 %1 %2…… 上面写的用来在列表中移除 nil 值的函数,还可以这样写:(filter #(not (nil? %)) coll)

利用好这些谓词函数和操作列表的函数来操作惰性序列,在最后才读取惰性序列中的值,就能用最简短的方式写出高性能的代码,虽然跑在 JVM 上性能也高不到哪里去就是了。

最后

本文是学习 Clojure 约莫一个月时间,在一个月内连连感到大脑被击穿,在人脑代码解析器过载和好奇心被狠狠满足之间反复横跳后产生的东西。

到目前为止,对 Clojure 唯一的不满就是:我写出来的东西只能编译成 .jar 文件,用 Java 运行环境来执行,因为这是一门运行在 Java 虚拟机上的语言。虽然能偷 Java 的库来用,但也不可避免地继承了 Java 的臃肿,比如 weepinbell 编译之后竟然有 170+ MB 大小,实在是太让人不爽了。

唉,美味中拌了点垃圾也将就吃吧。

死亡很近。吃垃圾。自由生活。


  1. 假设「好狗狗」的数据结构长这样 {:good true},这是 Clojure 中映射的写法,可以用关键词作为操作取出其映射的值,比如 (:good {:good true}) 就会返回 true。 ↩︎

  2. REPL:Read Eval Print Loop(读取-求值-打印-循环),是与 Clojure 交互的最简单方式,基本上就是一个接收代码然后运算,再把结果打印出来的程序。 ↩︎

Es muss sein?

2026-03-17 09:24:31

和另一个塔罗牌爱好者朋友一起解牌的时候,能够相互交流、补足理解,但偶尔也会有明显的分歧,其中的一个分歧就是我和她对于「倒吊人」这张牌的理解。她认为倒吊人代表的是一种很痛苦、很不舒服、受到限制的心理状态,可我告诉她,每次我见到倒吊人,都觉得有人要破茧成蝶了。我在「塔」的 牌意解析 中也提到,我更喜欢「倒吊人」这类令人闻风丧胆的牌。

上次更新《塔罗牌漫谈》是三个月前了,已经有些忘记这个系列应该怎么写,印象中我会把自己有的塔罗牌如数家珍地拿出来,然后把每副牌中特定的要写的那张牌挑出来,顺便读读某些设计得比较有意思的塔罗牌的说明书,然后去搜寻各种资料。不过,既然要谈倒吊人,那还是要打破规矩,选择能让我更容易沉浸其中的写作方式才比较好。所以,这篇文章我就来谈一谈,「把人脚朝上吊起来」这个意向,究竟能延伸出多少解读。

被吊起来的人是谁?

倒吊人是二十二张大阿尔卡那牌的第十二张,它的前一张是对应天秤座的正义。很显然的一种解读是:在第十二张牌中被吊起来的人和正义牌中手持天平和宝剑的是同一人,象征着旧有秩序被推翻。

说到「旧有秩序被推翻」,就不得不谈到下一张牌。十三这个不吉利的数字对应的是死神牌,紧随倒吊人之后,而还有什么秩序的覆灭比得上死亡?

我一直倾向于把死神牌提前解读为新生,或者,至少是绚丽的死亡。记得有一次我在路上看到了满地的落叶,遮住了地面,脚踩在上面发出了脆脆的声音,我觉得那个场面很像塔罗牌里的死神。可惜我把这个观察告诉朋友时,对方并不能理解。倘若再仔细想想,落叶会成为土壤的一部分,为新的生命提供养料,这便是死亡。在死亡之前,必须要确定的是,这个生命的确应该去死,而这个具有决定性的时刻,就是倒吊人。倒吊人的存在为真正重大的改变做着必不可少的准备。

于旧的秩序之后,新的生命之前,倒吊人象征着奇妙但又有些尴尬的局面:他究竟应该何去何从?答案是,他的脚被绑起来了,哪也去不了。

倒吊人在许多人眼里,寓意很坏,因为被束缚住,什么也做不了,会陷入内耗和纠结当中。可我认为,正是因为哪也去不了、什么也干不了,才不会陷入纠结——空想有什么用呢?反正也没有办法行动。倒吊人的束缚与另一张牌, 宝剑八 所象征的束缚有明显的不同:首先,倒吊人的眼睛没有被蒙住,他还看得见,还能清醒地思考;其次,宝剑八中的人被束缚的是手臂,他仍然能行走,而倒吊人却相反。

在我看来,所谓的内耗、焦虑和纠结是属于宝剑八的(因为他能走,却不知道往哪走),对于倒吊人而言,一切都相当明了:虽然照理来说,不该在一棵树上吊死,可我已经被吊着了,还能怎么办呢?

这让我想到《不能承受的生命之轻》里,托马斯从贝多芬的音乐里借来的母题「es muss sein!」,意思是「非如此不可!」。

摘自贝多芬 F 大调第 16 号弦乐四重奏

特蕾莎独自一人回到家乡后,托马斯陷入了同情心的无尽折磨当中,最终他决定接受,跟院长辞了职,要回布拉格跟特蕾莎在一起,因为「非这样不可」。当他做出这个细细掂量的决定,并认为自己除此之外别无选择之后,他马上脱离了痛苦(不过他很快又开始质疑「真的非这样不可吗?」,但那是后话了)。倒吊人就是这样的状态,深陷麻烦的境地当中,但一想到非这样不可,命运就变得容易接受了。

不过,有一个狡猾的点在于,倒吊人的「非这样不可」,真的是他细细掂量的选择吗?换句话说,真的非这样不可吗?

他是自己把自己吊起来的吗?

是时候来讨论房间里的大象了:这个以一种异常不舒服的姿势被吊起来的人,为什么脑袋发着光,看起来这样精神焕发?

于是,另一种解读就出现了:倒吊人不是被人吊起来的正义,他是自己把自己吊起来的;他不是接受了命运,而是主动选择了命运,因为「非这样不可」;他不是受罚的西西弗斯,他是快乐地推石头的西西弗斯。

但…… 为什么?为什么要这样折磨自己?

同样的问题,减肥的人、健身爱好者、废寝忘食学习的人,也会被问到。如果把倒吊人和他们联系起来,答案就不言自明了。在旁人看来是自我折磨,在当事人自己的体验里,却是无与伦比的快乐。为什么?答案有两个。

第一个答案是真理,所有让自己陷入短期(甚至长期)的痛苦并乐此不疲的人,都是在追寻某种既抽象又具体的真理。抽象是指信仰,因为相信以特定的方式活动身体能让自己的身体机能得到锻炼,提升生命的质量,所以不在乎痛苦(兴许宗教也是相同的逻辑);具体是指可被观察到的变化,体态的矫正、学识的增长、处理问题的能力等等。

第二个答案更现代,也更容易被不喜欢神神叨叨的读者理解:心流状态。倒吊人很明显的一层含义是「沉浸感」,由于被吊起来了,什么事也干不了,就像被关在书房里,而电子设备和朋友们都在房间外面,为了消磨时间,便只能冥想、读书和工作了。高质量且不受打扰的专注时间,能给人带来如牌面中倒吊人那样的光辉。

所以,是的,倒吊人可能是自己把自己吊起来的。为什么?为了给自己创造「非这样不可」的意义、无纷扰的环境,以及新的视角

不过别忘了,塔罗牌还有逆位含义。逆位的倒吊人,在我看来,做的是徒劳无功的事情,就算以目光长远的角度来看,也缺乏意义。如果把倒吊人这张牌倒置,会看到倒吊人尽管处于一种不舒服的被束缚状态,他的身体仍然是正立的,和倒吊之前没有区别。用通俗的话来讲,就是「没苦硬吃」,或者说吃了苦却没产生实际效果。

减肥者群体中有另一类人,他们不关注合理膳食,吃饭只吃水煮白菜,营养极度不均衡,拿自己的健康甚至性命做交换,而这样的人却能得到不少人的赞叹,实在可笑——这些人就是逆位的倒吊人,倒吊之前,他们膳食不合理(所以肥胖);倒吊之后,他们仍然坚持不健康的生活方式,只不过换了形式。

逆位的倒吊人抓错了重点,重点从来不是受苦,而是为了让自己沉浸、接受命运、活在当下、追求某种真理和心流状态。

如果是别人把他吊起来的呢?

这个「别人」是谁?不重要。无论是谁,我们都可以浪漫地归结于命运。有的时候,人的确会遇到完全无能为力的麻烦,就像被人吊了起来,只能看着事情一点点变得更糟,自己却什么也做不了。这个时候,要是大喊着「我命由我不由天」,在绳子上挣扎,只会让身体摇来摇去,感到眩晕和恶心。

倒吊人提醒当事人:有的事情就是无法改变的。

如果不能改变,那还能怎么办呢?如果执着于行动不会让情况变好,反而会白白耗费心力,甚至让自己受伤,那更好的选择是接受现状,但并不是摆烂,重要的是:以完全不同的视角观察当下的局面。

如何让自己以完全不同的视角观察世界?答案:把自己倒过来。是的,这难道不是很有趣的隐喻吗?之所以需要用新的视角观察局面,是因为自己无法改变现状;而无法改变现状的事实,也就是新视角本身——什么都做不了这个事实会让人产生新的思考,前提是甘愿接受这个事实。

我想倒吊人这张牌也可以引伸出这样的含义:解决问题的思路就是问题本身。应该停止用锤子的视角思考,开始以钉子的方式想问题。

为什么是倒吊,而不是正立?

倒吊人在占星意义上对应的是海王星,而海王星在占星中是人类精神世界的投射,与想象力、幻想、梦想和直觉相关。我之前有一个 Telegram 频道,名字叫作「大脑充血」(未来的月刊大概也会叫这个名字),频道的头像就是倒吊人。在影视作品里会见到一些角色把自己倒吊起来,使血液流向大脑,让大脑更高效地运转——这大抵是不可信的,但的确是很好的写作素材。

当全身的血液都流向大脑,人真的会变得更聪明吗?或者,用更科学的方式假设,如果人脑的所有功能都放大和加速,人是不是会变得更有效率、更理性、更容易相处?如果所有人都这样,经济会不会快速发展?会不会促成世界和平?

现代人似乎喜欢把大脑想象成理性的机器,是用来思考并且只是用来思考的,实则不然,本能、情感、想象力和直觉,也都发生在大脑当中。当大脑的功能被增强,这些功能也会变得更强。人会无法忘记创伤经历,变得更情绪化,更容易冲动行事,与此同时,大脑的另一部分又在以更高的速度阻止个体意气用事,内耗、纠结、矛盾愈演愈烈。我想起《瑞克与莫蒂》第八集最后一集的情节,Beth 的大脑被相互矛盾的记忆折磨,让她无法分清正与误、真与假,那个时候她已经无法正常思考,想要一切停下来,甚至拿枪对准了自己的太阳穴。

倒吊人象征的兴许也是这样的有些棘手的状态,由于身体被束缚,所以大脑高度活跃。正位的倒吊人能够驾驭这种状态。首当其冲的原因是,他虽然沉浸其中,但终究会从树上下来,不会让自己过度思考、过度想象,继而陷入虚无。其次,他知道自己为什么要停下来思考,他的大脑不是完全的一团糨糊,独处时的想象、思索和直觉能够帮助他更好地生活,甚至重获新生,在死神牌到来时建立起新的秩序。

在我看来,倒吊人象征的是必要的反思,对已有秩序(正义牌)的反思;倒吊人也象征发散的想象,想象为新秩序的建立(死神牌)提供养料。这正好呼应了海王星的主题,想象力、梦想和直觉。

逆位的倒吊人则陷入了海王星的另一个面向。想象力的另一个面向是不切实际,梦想的另一个面向是逃避现实,直觉的另一个面向是对事实根据的不尊重。整体而言,逆位的倒吊人代表的是过度反思和不问世事。

倒吊的群像

这一小节,我将展示不同塔罗牌中倒吊人的设计。它们大多都强调了这张牌的某一层含义,或者试图建立新的理解。

在《缥缈愿景》塔罗中,倒吊人是一个年轻的男孩,他摆出的姿势与韦特塔罗牌中的倒吊人区别不大,但他的左手拉着捆住右脚的绳子——他完全是靠着自重把自己吊起来的。

比起束缚,这张牌更强调灵活和掌控。倒吊人完全清楚自己在做什么,并且享受着常人觉得痛苦且避而远之的状态。

这张牌还透露出「玩世不恭」的态度,与「推翻旧秩序」「打破规则」的含义形成照应。

在《吸引力法则》塔罗中,倒吊人没有被吊起来,而是在吊索上艰难地行走。尽管手脚能够活动,但他仍然是受到束缚的,这种束缚实际上更贴合现实中人的境遇——我们没有被捆住手脚,但仍然感到被困。

尽管步履艰难,牌中的男人显然有明确的目的地,这对应倒吊人有关梦想和直觉的含义。起点的窗户是旧秩序的象征,终点则是新生,而这张牌是两者之间的状态。

《暴风雨》塔罗中的倒吊人牌面上没有人,取而代之的是坠入海底的三叉戟。无论是用来捕鱼还是象征海神,三叉戟都具有征服海洋的力量,而牌上的三叉戟却卡在海床的泥土当中,无计可施。

有趣的是,阳光透过海面照在了三叉戟上,这是否象征着,即便不被使用、不被驾驭,三叉戟本身依然具有某种神圣的气质和潜能?正如即便没有即时的回报也能坚持自我的倒吊人一样。

《天使感召》塔罗中的倒吊人是卡西尔,孤独与眼泪之天使。他收起了翅膀,倒挂在空中,象征着从行动中退出,什么也不做。他做的仅仅是观察善与恶,不评判也不干预。

牌中的湖代表潜意识,镜面般的湖面象征着反思。图中还有远景,卡西尔就这样看着,观察着景色,却不是景色的一部分,不参与到世界的运动当中。这幅牌的倒吊人强调的是「无为」。

《艾伦伯格》塔罗强调的完全是倒吊人的负面含义,而且变本加厉:被捆起来的不是一只脚,而是两只。被吊起来的人显然完全无能为力,只能认命。

这张牌要人们意识到,面对当下的场合,自己的确是无能为力的,应当接受这一点,并换一个视角重新看问题。第一步是接受自己不能改变的,下一步(死神牌)就是改变自己能改变的,再下一张牌是节制,兴许就是分辨这两者的智慧。

最后

至此,我们总结出倒吊人这张牌的几个关键词:旧秩序的颠覆、从行动中退出、必要的反思、心流状态、坚持自我、用新视角看待问题、接受不能改变的、精神上的掌控感。

对于逆位的倒吊人,可以这样总结:无意义的受苦、不成功的改变、痛苦的挣扎、不切实际的幻想、与现实脱节、执拗、过度反思、内耗与纠结、身不由己。

照这个更新速度,我什么时候能写完 78 张牌的牌意解析呢?

稻草人周刊 Vol.72

2026-03-16 00:07:34

Nothing's About To Happen To Me music cover

Nothing's About To Happen To Me

Mitski

一张另类摇滚专辑,是我喜欢的风格。创作者 Mitski 的歌我之前只通过另一位翻唱歌手 Chloe Moriondo 听过,对她的《Nobody》印象很深刻。这张专辑我这周听了好几遍,最喜欢的歌是《Lightning》和《Instead of Here》,第二首《Where’s My Phone》也很有个性。很奇妙,Mitski 的歌总给我这种感觉:这是来自金星的音乐。

To feel like myself again,

I won’t be here. I’m where nobody can reach.

I’m not here. I’m where nobody can reach.

Instead of here, I’m where nobody can reach.

连接

我有 ADHD 吗?

📜

其实我从未怀疑过自己有 ADHD,也就是俗称的多动症,但这个病在网络上的讨论在最近有所增加,确诊的人也不少——可能是因为人们对心理健康的关注更多了,是好事。也正因为近来讨论的人多了,听他们描述自己的症状,我自己也有些不确定了。之前听一期播客讲一个简单的 ADHD 判断方法:如果做家务的时候能做完一件再做下一件,不会把各个角落的各种事情都展开之后迟迟不收尾,那就不是 ADHD。在那之后,我每次做家务都会刻意地不让自己同时开始多件事情——尽管我后来发现我只是在进行合理的多线程并发,避免处理器空闲,比如给床单喷了除螨剂之后要等它干掉才能叠被子,这个时候我就会走出卧室去擦厨房。

我也偶尔会有在面对焦虑和压力时失去所有动力,什么也干不了的情况。不过一年前我也自我剖析过,一方面是自己的确有些抑郁的倾向在,另一方面,没办法好好应对压力也算人之常情,而且这种情况也不算常见。可是,我也经常在写文章写到一半的时候去查看社交媒体信息,或者上网冲浪的时候发现自己不知不觉地打开了十几个标签页,在同时探索各种不同的主题,这似乎是注意力没办法集中的体现吧?

无论如何,还是自检一下比较放心,我找到了一张 成人 ADHD 自检量表 ,只有 18 题,很快做完了。结果是:我不太可能有 ADHD。

做题的过程中我就猜到了,我有好几题都选择了「从来没有」。比如「在家里或是在工作时,你经常乱放东西或是找不到东西」和「你认为记住约会或是必须要做的事情很困难」,我虽然不算非常有条理,但这这两件事情还从来没有发生过,因为我非常害怕丢东西和忘记和别人的约定,这种警觉性让我从来没有遇到过这方面的问题。

做完之后还有一个感受:如果有人真的表现出这些症状,我好像是会生气的。比如这几条:

  • 有人面对你说话时,你很难专心地听完他说的内容

  • 当与他人交谈时,你会在别人还没把话讲完前就插嘴或接话替对方把话讲完

  • 你会在别人忙碌时打断别人

以前我认为这些人是没有教养,现在看来,他们有可能并不是想要这样做,而是因为觉得不这样做很困难。我想我可以多一些包容和理解吧。

Org Mode 是最好的标记语言吗?

📜

I did not find any tool support for Markdown, AsciiDoc, Wikitext or reStructuredText anywhere that could compete with the cozy Org mode syntax support within Emacs.

Well, look harder.

作者在这篇文章中对比了 Org Mode 和其他标记语言(Markdown、AsciiDoc、Wikitext 和 reStructuredText)的区别,以及为什么他认为 Org Mode 比这些标记语言更具优势、更合理。

文章前半部分的观点我很认同。首先,Org Mode 是规范化的,而 Markdown 却有很多不同的 Flavor,在不同的平台上输入 Markdown 得到的结果不总是一样的,比如 Markdown 很常见的表格就是拓展语法而非最初的标准。我自己也依赖一些并不常见的 Markdown 拓展语法,比如 Obsidan 里常用的 ==高亮标记== 和 GitHub 上常用的 Alert ,这两个语法都被 Hugo 支持,所以我在博客里也经常用,但是在其他地方就不一定了。这的确是 Markdown 的缺陷之一。

其次,Org Mode 的行内标记是符合直觉的,*加粗* /斜体/ _下划线_ ~代码~=等宽字= 都很容易记住,是唯一的语法,而且都是一前一后的单个字符,不像 Markdown 有 _斜体_*斜体* 两种写法,而 **加粗**~~删除线~~ 居然需要一前一后的双字符进行标记,和其他行内标记不统一。说实话,我之前尝试 Org Mode 时,就挺搀它的行内标记语法的。

接下来是我不太赞同的部分。

作者说他认为 Markdown 的链接语法令人疑惑,它会忘记 [文字](链接) 哪个在前、哪个在后,并且它不理解为什么要用到两种括号。Org Mode 里的链接写作 [[链接][文字]]。我可以用相同的逻辑论述为什么 Org Mode 的链接语法令人疑惑。在 Markdown 里,[] 是用来包裹文字的,() 是用来包裹链接的,至少我永远不会搞错文字和链接各自的括号是什么;我相信大部分 Markdown 用户记住哪边是链接、哪边是文字的方式都是这样的,[]() 这样的形式看得多了,就会知道谁在前在后;如此一来,我就不会搞错链接和文字的位置了。反观 Org Mode,链接和文字都用 [] 包裹,谁在前在后就更难记住。

我认为「我容易忘记语法的顺序」并不是很有说服力的论据,因为我认为 Org Mode 用户能记住 [[链接][文字]],和 Markdown 用户能记住 [文字](链接) 的方式一样:见多了就记住了,不是因为哪个语法更符合直觉。两边都有各自的优势和缺陷,仅仅是个人偏好和习惯问题。

我尝试过 Org Mode,其中一部分我很喜欢,另一部分则很不习惯。我最不能接受的是 Org Mode 对中日韩文字的支持,它不能解析 这样的*加粗*文字,因为 Org Mode 的行内标记前后必须有空格,这显然是欧洲语言的使用逻辑,中文里就是很少用空格。其次,标准化是好事,但拓展性差也是问题,我没办法用 ==高亮标记== 这种拓展语法。再次,你们是怎么忍受 #+BEGIN_SRC #+END_SRC 这种写法的?这跟 Markdown 的 ``` 比难道不是长得多吗?和 ~行内代码~ 也没有连贯性(反而 Markdown 可以写 ~~~ 标记代码块)。

不过,读完这篇文章过后,我的确产生了很多思考,其中之一是:标记语言本身真的有好坏之分吗?我认为,就和代码风格一样,有的风格固然是不好的,比如可读性很差的风格,但有的风格很难分个高下,比如 {} 应不应该换行写、缩进应该用空格还是制表符、文件末尾应该不应有空行,标记语言也有很难说是好是坏的语法。用于写配置的标记语言 YAML 和 TOML 也是一样,有人认为 YAML 有诸多缺陷 ,而 TOML 的缺陷 也有人能列出来不少。

你猜怎么着?没有一门标记语言是完美的,包括 Org Mode 和 Markdown。

如何选择标记语言,应该由使用者自己尝试、权衡和决定,不存在「最合理且对所有人都同样合理」的语言。或许,可以开发一种自定义程度极高的标记语言,人们可以自己写配置调整语法,自己创造最适合自己的语言,就像配置编辑器一样。

「结果啊……」

📜

作者表示他很喜欢「It turns out」这个表达,他常在 Paul Graham 的文章里读到,这个表达应该可以对应中文里的「结果……」「最后发现……」。

如果把一句话直接说出来,尤其是那些稍微有些让人难以接受的观点,可能不会起到很好的效果,但如果作者自己在一开始就表达些许的质疑和不确定,然后再以「结果……」「最后发现……」来转折,语气中透露的些许惊讶就会让读者更容易接受这个没有论据支撑的观点。作者说这是一种很巧妙的偷懒技巧,或者说「黑客技巧」(Hack)。

第 43 期周刊 中我分享了 Paul Graham 的另一篇文章,题为《Good Writing》。PG 表示他发现「读着顺口」和「写得正确」这两者之间存在联系,简单来说,如果把句子写得更通顺,这个句子表达的意思就更有可能是正确的,内部逻辑可能更连贯——不过前提是修改,PG 表示他经常修改一些句子,使之更顺口,这样就无意识地修正了一些错误表达。

我想「It turns out」可能也是 PG 的「顺口表达」之一吧。

死互联网已经不再是理论了

📜

作者最近邀请了一个职位的申请者来参加第一轮面试,结果收到了这样的回复:

hey sorry - my agent got a mind of its own and started applying for jobs for me. i’m not currently looking for a job 😅
嘿不好意思 - 我的 Agent 有了自己的想法,开始帮我申请工作了,我现在没有在找工作。

please ignore and sorry for that
请忽略,抱歉。

作者意识到「互联网已死」已经成现实了:Hacker News 开始限制新用户发表 ShowHN,因为最近出现了太多 Vibe Coded 且低质量的投稿; Reddit 上有很多机器人在评论区发帖宣传 SaaS 产品;LinkdIn 上的更新也是 AI 废料占大多数(作者贴的一条 LinkdIn 帖子的截图,帖子上全是些让人抓不住重点的车轱辘话,居然有两百多条评论和五千多个点赞);GitHub 也逃不过,AI 生成的 Pull Request 下的代码审查和回复竟然也是 AI 生成的。

对此我的态度是,我就待在小互联网上好了,与大平台保持距离,和自己选择的真实的人社交。说实话,我一旦在 RSS 更新中看到了 AI 生成的内容,我就会直接把这个订阅源删掉。

不过,倒霉的是,我办法屏蔽现实中人类的声音。

因为 AI 错误,老奶奶被关进监狱半年

📜

美国北达科他州法戈的警察在调查一项银行诈骗案时使用了 AI 技术,用人脸识别锁定了位于田纳西州的 Angela Lipps 为主要嫌疑犯。在七月 14 日,警察在 Lipps 的家门口逮捕了他,那个时候她还在照看四个年轻的孩子。50 岁的 Lipps 从未去过北达科他州,甚至从未坐过飞机。她被关在田纳西州的监狱近四个月,法院为他指派的律师告诉她,如果要上诉,就要去北达科他州,于是她又被转移到了那边的监狱,直到第五个月的时候,逮捕她的警察才第一次和她谈话。

在法庭上,证据表明 Lipps 在被怀疑实施诈骗的时间在田纳西州还有银行记录,最终经过了六个月后被释放。时间已经来到了冬天,出狱的时候她穿着夏装,很冷,没有地方去,也不知道怎么回家。由于在监狱里没办法支付账单,她失去了她的房子、车,甚至她的狗。

“Why did nobody from Fargo Police ever speak with Angela Lipps for the five months she was in jail?” Zibolski was asked.
“为什么法戈的警察在 Angela Lipps 被关押的前五个月都没有人想过跟她交谈?”,Zibolski 被问到。

“Thank you, Matt (Henson), for that question but we are not here to talk about that today,” Zibolski replied.
“谢谢你,马特(汉森),对于这个问题我们今天暂时不回答。”Zibolski 回复。

Lipps 现在回到了田纳西州,但从始至终,法戈警察没有跟她道过歉。

所以教训大概是,不要把 AI 技术交给蠢蛋

星群

Hugo 社交媒体卡片

Twitter 和 Mastodon 自带的嵌入卡片可能和网页的风格不统一,而且需要从外部加载资源,在这个过程中可能会暴露访客的 IP 地址和 Cookies 等信息给第三方。作者做了一个在 Hugo 构建过程从 API 拉取数据,静态展示社交媒体内容的卡片,和自己网站的风格更匹配,而且不会追踪任何用户数据。

我其实也想添加,但我一直不太能接受在静态网站的构建过程中,从网络加载资源,我认为这会拖慢世界上最快的静态网站生成器的构建速度。不过 Hugo 有构建缓存,兴许可以试试吧。

访问: thumbsupdotme/social-cards

DNSControl

使用 Go 编写的通用 DNS 管理工具,使用简单的 JavaScript 代码管理 DNS 记录,而不是忍受 DNS 提供商难用且加载速度很慢的 Web 面板。DNSControl 还鼓励用户把 DNS 配置文件放在 Git 仓库里,这样 DNS 记录也有了 Git 历史,可以查看变更和随时回退。这个项目相当观点鲜明,以下是它自述的功能:

  1. 使用高级语言维护 DNS 配置,可以使用宏和变量,便于更新;
  2. 避免被提供商锁在平台上,可以随时切换提供商,并且非常简单;
  3. 支持超过 35 个 DNS 提供商;
  4. 可以使用插件支持更多的提供商;
  5. 对 DNS 使用 CI/CD 原则:单元测试、系统测试、自动部署;
  6. 可以开关 Cloudflare 的代理;

对我来说,这意味着我可以在本地打开我最喜欢的编辑器(Neovim)编辑 DNS 记录,然后推送到远程 Git 仓库并利用 Forgejo/GitHub Action 将变更的记录推送给 DNS 提供商,不用打开浏览器、登录,然后找到 DNS 控制面板,再等待加载。DNSControl 还有预览功能,dnscontrol preview,避免误操作。迁移也很方便,可以用 dnscontrol get-zone 获取已有的 DNS 记录。

如果你也想使用 DNSControl,可以参考 Sukka 大佬编写的《 用代码和 Git 管理 DNS 记录 —— DNSControl 和 GitHub Actions CI/CD 实践 》。如果你不介意读英文,也愿意忍受我的凌乱笔记结构的话,我有一个简练的版本: DNSControl Setup

不过,未来有没有机会用 Lisp 写 DNS 记录呢?

访问: DNSControl

LibreSprite

想要画一个 88x31 小按钮,所以第一步是从源代码编译绘图软件!1然后 CMake 成功了,Ninja 编译失败了,不熟悉 C++ 的编译系统,照着 aseprite 的安装文档操作也难免做额外的功课,索性直接放弃。

狐工智能 :所以为什么不用 LibreSprite?

啊什么,居然有 Fork 吗?

LibreSprite 是自由软件,是 aseprite 的分支,可以免费下载使用。不过最新的 1.1 版本和预发布的 1.2 版本对 macOS 的支持都有 问题 ,macOS 用户可以暂时使用 1.0 版本。

访问: LibreSprite


  1. aseprite 是开源的商业软件,买断价格是 $19.99。如果不想花钱,也可以自己从源代码编译,可以合法地免费使用。不过,尽管开源,aseprite 并不是自由软件。 ↩︎