


















下午好,这里是被实训课关在机房写 Java 和 Spring,审查组员提的 Pull Requests,合并和解决代码冲突到晕头转向的 Eltrac。这个天真的小男孩曾以为自己拿到了 Golang 岗位的 Offer 之后就再也不用写 Java 这种东西了,没想到,生活只会给他一拳又一拳的重击,拳打脚踢之间还穿插着一些 LLM 生成的垃圾话。可怕,实在可怕。
You know a week is truly horrible when you realize there’s no fucking music.
——No One
📜
一篇讽刺小短文,主人公是求职者,正在应聘学界的一个职位,之前的流程都很好,但是在 Chalk Talk 环节,她需要在白板上边画边讲解自己的研究成果。当她打开笔记本电脑,开始输入提示词的时候,面试官问她在干什么。之后她被禁止使用 ChatGPT,于是她完全没有办法解释自己的研究。
My own words? I haven’t used my own words since 2022. I’m not even sure I have my own words anymore. When I try to think without a prompt box in front of me, my mind returns only a vague sense of fog and the faint echo of a cursor blinking. My thoughts are not organized into paragraphs. They do not have topic sentences. They are just fragments. Impressions. My job is just… prompt.
用我自己的话?我从 2022 年开始就没有用过自己的话了。我都不确定我还有没有自己的话。当我面前没有提示词输入框,思考时我的意识只会返回模糊的雾蒙蒙的感觉和光标闪烁的微弱回响。我的想法没有被整理成段落。它们没有主题句。它们只是碎片。印象。我的工作只是…… 输提示词。
面试官指出她缺乏对领域知识的理解,她回应:
I pointed out that memorizing information is not the same as understanding it, and that my ability to construct effective prompts demonstrated a sophisticated grasp of my field.
我指出记住信息和理解信息不是一回事,我构建高效提示词的能力展示了我对我领域的高深理解。
她记不住自己的研究成果,当被要求在白板上绘图讲解的时候,她回忆:
I have written about it extensively, or rather, ChatGPT has written about it extensively and I have agreed with what it wrote. But the actual shape of it—the nodes, the arrows, the connections—these were not stored in my brain. They were stored in the cloud. The cloud was not available to me.
我长篇大论地写过,或者说,ChatGPT 长篇大论地写过,并且我同意它写的东西。但它的实际形状——那些结点、箭头、联系——那些东西不在我脑子里。它们存在云上。现在我不能用云服务。
拒绝信里提到她缺乏独立思考能力,她不解:
Independent thinking? I think independently all the time. Just last week, I independently decided to ask ChatGPT to “compare the advantages and disadvantages of optogenetic versus chemical-genetic approaches for my research” and then I independently selected the option that sounded best. That is independence. That is scientific judgment.
独立思考?我一直在独立思考?就在上周,我独立地决定让 ChatGPT “比较光遗传学与化学遗传学方法在我研究中的优缺点”,然后我独立地选择了听起来最好的观点。那就是独立。那就是科学判断。
我最喜欢的句子是:难道我要像一个中世纪的贱民一样用自己的脑子思考吗?
讽刺最好玩的点在于,它是真的,只是在用词上稍显夸张。不过,读完我感到害怕,难道未来所有的工作都会变成「输提示词」吗?人们真的会推崇这种工作方式吗?据说如今「不用 “AI” 就是罪人」的风气已经在不少大公司里流行起来了,以后会不会愈演愈烈?
令人毛骨悚然,这篇文章的评论里有一条看起来不像是讽刺,像是个没读懂这篇文章的、和主人公同类的人的回复(或者说他是用 LLM 总结的方式读完全文的),他表示认可作者写这篇文章的勇气,并祝福她找到更好的工作。
📜
这篇文章的作者是个作家,最近几乎每个跟他聊天的人,都会很快把话题扯到 “AI” 上,询问他如何看待这项技术。更令人气愤的是,这些人并不是诚心想要听他的意见,因为当他说完之后,有不少人会补充「自己使用 “AI” 的方法」(谁问了?),好像要从他那里得到认可似的。他厌倦了这种对话,而且这是对他的一种羞辱。
When you ask me what I think about AI as if that has any actual relevance to the work I do, that tells me you don’t actually care about my work.
当你问我我怎么看 AI,似乎那和我做的事情有任何实际关联一样,那说明你实际上不关心我的作品。
文中还有一句令我深有同感的话,他被这种现象困扰过后,有好长一段时间没办法动笔。阅读的目的向来是从文字中收获某种真实的东西,然而,对一些人而言,具有娱乐性、能填充自己的时间并且质量“足够好”就行了。当有人询问他怎么看 “AI” 时,他会陷入对写作的怀疑——他当然知道写作本身的价值,但问题在于越来越多的人不在意这种价值了。最近的几个月,我也在逃不掉的课堂上被老师的 “AI” Talk 轰炸,互联网上的各种信息也令我措手不及,这让我陷入了对软件工程的 疲乏 当中。我有好长一段时间时间都没有写过一句代码。
不过我倒是没有对写作这件事情感到焦虑,我想原因是我从来没有对文章没有人读感到焦虑过,我写作是为了表达自己,而 LLM 至少在目前还没有办法直接读取我的生物记忆和分析我的思考方式(哇,很酷的小说点子)。然而,作者以写作为生,我以开发软件为生(至少目前看来是这样),这些事情关乎我们的存在本身,所以为此焦虑。我想这也是我厌恶 “AI” 这种文化现象的原因——快速生成的劣质产品使真正想把事情做好的人陷入存在危机。
📻
不健康的爱(粉丝对偶像的爱,过度干涉孩子人生的母亲对孩子的爱)不以「让对方变好」为目的,尽管他们常常打着「为你好」的旗号。实际上母亲希望孩子永远不要发展出独立人格,这样她就能控制子女;粉丝希望偶像在人格上不要有成长和变好,这样他们就能一直崇拜他最开始喜欢上他的样子。被爱者也不是无辜的,妈宝男接受了母亲的这种爱,作为成年人却利用母亲逃避了做决定和承担责任,当有问题出现,他仅仅说一句「我妈是为了我好」「这不关我事,是我妈决定的」;偶像也说「我没有要求他们这样做」。实际上,被爱者可以明确地表示他不接受什么样的爱,不容许因这种爱产生的行为,但现实是他们默许了,这就是问题。
健康的爱不是占有,应该是以「让对方成为更好的人」为目的,「更好」是指更健全的人格、更独立的思考等等,而不是停滞不前和永远依附于自己。这种爱的方式对爱者而言的确有些可怕,因为结果不可预测,但在我看来,接纳这种不确定性才是成熟的表现。
📜
一篇讲解威胁模型(Threat model)的博客文章,简单来说威胁模型应该包括相关的假设(assumptions)、要保护的对象(也称资产,assets)、资产之间的联系、可能的攻击者、可能的攻击方式、如何阻止这些攻击方式,以及还有什么威胁没有包括在威胁模型里。
Soatok 一如既往地批斗 Matrix 通信协议的安全性:Matrix 的威胁模型文档很久没有更新了,而且仅仅是列出了一系列可能的漏洞(没有阻止方案和规避手段,也没有列出需要保护的资产,没有假设等等),写得很差。不过好在 Matrix 有威胁模型,而 Signal 连威胁模型都没有,只给出了技术规范。顺带一提,我最近在读《 深入浅出密码学 》,这本书的作者也审视并发现了 Matrix 协议的不少问题。看来我要考虑换个通信协议了,真难啊……
📜
有人解码了 Claude Code 的代码,发现它以一种极其隐晦的方式标记了时区为 Asia/Shanghai 和 Asia/Urumqi,以及 API 端口地址匹配某些域名或者关键词的请求。标记的方式是这样的:如果符合以上条件,Claude Code 会改变输出到系统提示词1中的一段时间字符串。
[1]
System prompt,区别于用户提示词(user prompt),是 LLM 应用预设的全局提示词。 ↩︎
正常的字符串长这样:
Today's date is 2026-06-30.
如果时区符合条件,日期字符串会改成 2026/06/30。如果 API 端口域名符合条件,则会替换 Today's 中的 ':如果是某个已知的域名,就替换为 \u2019;如何匹配某些 “AI” 实验室的关键词,就替换为 \u02BC;如果前面两个条件都匹配,则替换为 \u02B9——这三个字符和 ' 看起来几乎一模一样。
关键词解码后会得到:
deepseek,moonshot,minimax,xaminim,zhipu,bigmodel,baichuan,stepfun,01ai,dashscope,volces
域名列表长得多,其中一部分是:
cn
baidu.com
alibaba-inc.com
alipay.com
antgroup-inc.cn
bytedance.net
kuaishou.com
xiaohongshu.com
jd.com
bilibili.co
iflytek.com
stepfun-inc.com
moonshot.ai
anyrouter.top
claude-code-hub.app
claude-opus.top
openclaude.me
proxyai.com
yunwu.ai
zenmux.ai
很显然 Claude Code 在针对中国企业,从时区和域名就可以看出来,除此之外还有 Any Router 这样的 API 代理服务商和中间商。不过这段代码只表明了他们在标记这些“可疑”请求,在功能上似乎没有限制。更可疑的是他们不能用更直白的方式做标记,而是用修改看起来完全无关的系统提示词字符串来做标记,而且要完全隐藏的话,难道不能用密码学手段吗?
总之非常可疑,建议用 OpenCode 或者别的开源 Agent 替代 Claude Code。
谷歌推出的零知识证明库,用于支持欧盟的年龄验证,以保证用户能在不暴露真实身份凭证的情况下证明自己已成年。文档包含三个机构的评审,看起来问题不大,不过我对密码学的了解有限,需要等待更多的第三方评审才能确定其质量。
如果能广泛应用的话,年龄认证的隐私问题应该是解决了,但请读者回顾 第 68 期周刊 、 第 76 期周刊 和 第 80 期周刊 ,社交媒体禁令背后的问题远比隐私问题复杂。而且,立法者真的会关心普通人的隐私吗?他们愿意了解零知识证明这种技术吗?
另外,Hacker News 上怎么总有人对开源项目说「我不信任……」的话?源代码就在那啊。如果你看不懂,可以找一个信得过的密码学专家去评审。
衡量 Fediverse(基于 ActivityPub 的去中心化社交网络)和 Atmosphere(基于 AT-Protocol 的去中心化社交网络)去中心化程度的网站,可以直观地看到两边网络实例的去中心化程度、软件的去中心化程度,以及云服务器、Git 提供商、DNS 提供商、TLS 证书签发机构、电子邮件提供商和网络技术设施的去中心化程度。
意料之中的是 Bluesky(Atmosphere)的去中心化程度非常低,而 Fediverse 的软件也非常中心化(大部分集中在 Mastodon),这些软件的 Git 提供商是最中心化的,可想而知 GitHub 是中心化的源头。意料之外的是 Web 服务并不像我预想的那样集中在 Cloudflare 上。
终端界面的
Gopher
和
Gemini
客户端。因为看到
omg.lol
推出了 Gemini 协议的胶囊(gemini://omg.lol/),便试着寻找相关的客户端。由于我看到的大部分 Gopher/Gemini 图形客户端都很丑,所以选择了 TUI 软件。
顺带插一嘴,其中不少客户端都是用 Go 和 Rust 写的,不出意外也有 Racket 和 Common Lisp 这些 Lisp 方言的实现,更不出意外的是:There’s an
Emacs mode
for that. 其实也有可以浏览 Gemini 胶囊的 Vim 插件,不过要用编辑器做稀奇古怪的事情的话,那我为什么不用 Emacs 呢?由于本人不喜欢用编辑器煮咖啡,还有精神洁癖不愿意用已有的配置,暂时不打算攀爬陡峭的 Emacs 学习曲线。所以,最后随便选了一个用 Go 写的实现了 Vim 键位的 Gopher/Gemini 客户端,说实话,有点想自己写一个。
我暂时还没有频繁访问 Gemini 胶囊和 Gopher 站点的需求,所以简单的 TUI 应用足够了。比方说要访问 omg.lol 的胶囊,只需要在终端输入 bombadillo gemini://omg.lol/。
如果你不知道什么是 Gopher 和 Gemini 协议,我在一篇讲搜索引擎的博客文章里提过 Gopher 协议,你也可以去 Cytrogen 的博客了解 Gemini 协议,后者是前者的精神后继。简单来说,这是两个和 HTTP 协议(万维网)平级的网络协议,用于提供结构化的内容,很适合文档、博客等等。相比 HTTP,Gopher/Gemini 更注重内容本身,没有 CSS 也没有 JavaScript。
访问: Bombadillo
开源的 3D 物理引擎,和 Box2D 是同一个作者。大一的时候我用 Java Swing 和 JBox2D(Box2D 的 Java 移植)做过一个愤怒的小鸟游戏,因为抽到了这个作业选题,当时对 Box2D 的印象就很好,各部分的抽象很合理,了解概念之后用起来很方便。
如果我没理解错,Box3D 和 Box2D 一样,仅仅是物理引擎,可以模拟刚体形状、运动和碰撞等等。如果要渲染 3D 图形还得用别的库。
访问: erincatto/box3d
SearX 的原作者开发的搜索引擎 Hister ,比较值得一提的是他的索引方式。Hister 服务端不会发送任何请求,它仅仅索引客户端发送给它的页面。如果安装了浏览器拓展,用户自己就能作为「爬虫」,自动将访问的页面发送给 Hister 服务端索引,并且还不会被反爬手段拦截。另外,Hister 还有个很棒的 TUI 客户端,可以在终端里搜索网页。
印象中搜索引擎都很消耗资源,所以我在 讨论区 询问了最低的系统要求。以下是作者的回复:
The base RAM usage isn’t high but it can have momentary few GB peaks for tricky queries when the index has content with multiple languages and language detection is turned on. Turning off language detection reduces RAM usage signficantly.
基础内存占用不高,但索引里有多语言内容并且开了多语言检测的话,可能会在比较难搞的查询时产生临时的 GB 峰值。关掉语言检测会显著地降低内存占用。Disk usage is on average 80-100MB / 1K saved websites, but there is plenty of room for optimization. 磁盘占用平均上是 80-100MB 每千个保存的网站,但有很多优化空间。
看起来还不错,我可能会试试,比方说把整个 IndieWeb 索引了(可能已经有人在做了吧?)。
访问: Hister
翻到一张几个月前写的便签:
现代人习惯了敏感词,竟然忘了「沙雕」这个人人都爱用的热词实际上是「傻屌」,指代男性生殖器,进入了各种文化作品。另外,英语里也有 A-hole2 来着。
[2]
Asshole(本意屁眼,用于骂人)的委婉语替代,虽然不知道委婉在哪里。 ↩︎
记得当时应该是上班的时候被迫听了很多遍《像你这样的朋友》,除去这首歌本身就十分令人蜷缩、制造感动、令人作呕之外,歌词里还有「沙雕」这个词。如今这个词貌似被「抽象」替代了。
我觉得与其把实际上并不委婉的委婉语当成可以随便用的词,还不如光明正大地用一开始的脏字儿。
时光偷走遇见转角送来错过
四季飞快像坐过山车
那些傻屌的 深刻的
专属我们的
如果这辈子做朋友你都不嫌多
下辈子够不够
对了,这首歌还上过春晚。
回复 Offer 的邮件被公司的邮件系统当成了垃圾邮件,我在想究竟是 .ac 域名的问题,还是瑞士 IP 地址的问题(我的邮件提供商是 Migadu)。不过,后来想到,我其实不该把自己的域名邮箱和工作邮箱混用吧。
上次剪头发是三个月前,上次烫头是六个月前。我的头是细软塌发质,如果不烫、不打理就会又直又油还贴头皮,烫头之后的几个月都会很蓬松清爽,打理难度也会降低,总之两三百的价格从这个角度来看其实很划算了。
这天给我洗头的小哥一边工作一边跟同事聊天,我没注意听前后文,但他说刚才在外面抽了一根烟、嚼了两个槟榔,我当下就想让他把手从我的头发里抽出来…… 不知道是不是我的样本太局限,我总感觉理发店有很多这样的人。
不知道什么毛病发作了,做什么事情都提不起劲儿,突然看到《后室》电影上映,于是买票晚上去看了。我还挺喜欢的,在 NeoDB 上写了一则 不长不短的评价 。
It’s OK. She said that we don’t need to change. It’s just how we’re wired.
In this world, it’s kill or be killed.3[3]
等等,这不是《Undertale》的台词吗?你的精神状态真的有点堪忧了。 ↩︎
原来在 Windows 上安装环境需要手动下载压缩包、手动解压、手动放进某个目录里,再手动在某个神秘图形界面里配置 PATH 吗?可真是…… 有种用智能手机钻木取火又现代又原始的奇妙感受啊——整个 Windows 生态都给我这种感觉。在我看来 Windows 已经是完全不能用的操作系统了。It just does not work.
如果上班只有 Windows 电脑的话,我一定会想办法装 Arch Linux 的,哪怕惩罚我不准装 yay 只能用 pacman,那也比 Windows 好太多了。
多抓鱼有八条鱼月底过期,翻遍各种书单,那些抢手的需要用鱼预订的书都要求十条以上的鱼,8 可真是个尴尬的数字啊。
养宠物和养育子女在一点上是共通的:有的人不配做父母,也有人不配做宠物主人。
至少对我而言,在没有做好充足准备(生活环境稳定、财务情况稳定,并且在生活空间中给它预留充足的位置),也没有系统地了解过饲养这种宠物所需的知识(除了食物,还有习性以及怎么教育和训练等等)之前,我绝对不会承担起一个生命的责任。
很多父母在这件上做得还不如宠物主人,很多宠物主人对待宠物的方式和那些不合格的家长一样,我只能全部总结为:不敬重生命。我很少讨论崇高的东西,因为我讨厌,但「生命」是为数不多我为之感动且会感到愤愤不平的崇高性。
感觉英文单词也有完形崩溃,刚才写 RBAC 的时候对 Permission 的拼法感到了怀疑——这难道不是 Per(每个)和 Mission(任务)吗?但的确是这么拼的。
Eltrac 吐槽实训课的 Fedi 串 绝赞连载中。
想不到又要被迫写 Java 代码了…… 我是绝对不会装 IntelliJ IDEA 的,但 Java 的废话代码实在太多的,不用生成器很难受,于是装了几个相关的插件、配置了语言服务器(另外,jdtls 这个语言服务器真是我安装过的最臃肿、启动最慢的 LS 了……)。
因为 Java 项目的目录结构也非常反人类,所以要装 Neotree 一类的插件显示目录结构(以前我都是直接用 Telescope.nvim 跳转到指定文件的,因为目录结构简单明了,所以记得住大部分文件的名字),最后得到的配置把我自己恶心到了,故另起一个分支,cherry-pick 了一些 commits,于是就推出了 eltrac.nvim
Java Edition
。
因为我自己还要写一些正常的项目,所以写了个脚本快速切换 Neovim 配置,写着写着就起了个名字,叫作
vimulti
,然后又加上了切换仓库、指定分支和指定 tag 的功能,现在还能读取当前目录中的 vimulti.edn 配置文件,直接执行 vimulti 就可以用该目录指定的配置打开 Neovim。比方说我可以在 Java 项目的根目录下放上 vimulti.edn,写上 :default-target "nvim:java-edition",这样直接执行 vimulti 就可以打开 Java Edition,在其他目录下执行就会使用全局的默认配置。
脚本是用
Babashka
(Clojure)手写的,没有也不会有 LLM 参与。现在还有些小 Bug,安装也比较麻烦,总之还在利用摸鱼时间火热开发中。我在考虑加上切换编辑器的功能,比方说可以指定打开 Emacs 而不是 Neovim,但我想 Emacs 用户是不会有这个需求的。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。