summaryrefslogtreecommitdiff
path: root/content/posts
diff options
context:
space:
mode:
Diffstat (limited to 'content/posts')
-rw-r--r--content/posts/weekly/65.md116
1 files changed, 116 insertions, 0 deletions
diff --git a/content/posts/weekly/65.md b/content/posts/weekly/65.md
new file mode 100644
index 00000000..cd0f04f9
--- /dev/null
+++ b/content/posts/weekly/65.md
@@ -0,0 +1,116 @@
+---
+title: 稻草人周刊 Vol.65
+subtitle:
+tags:
+date:
+categories: 稻草人周刊
+draft: true
+toc: true
+toot:
+---
+
+{{< music cover="https://r2.eltr.ac/geedeapro/posts/weekly/65/mlp-album-cover.png" title="This Day Aria" artist="from My Little Pony" apple="https://music.apple.com/cn/album/this-day-aria/1646671002?i=1646671183&l=en-GB" netease="https://music.163.com/#/song?id=28077570" spotify="https://open.spotify.com/track/4QogUq9Sgfoh33oSTondjr" >}}
+
+<!--more-->
+
+## ⋈︎ · 连接
+
+### Ghostty 的 AI 政策
+
+> [!note] 📃
+> [AI Usage Policy - ghostty-org/ghostty](https://github.com/ghostty-org/ghostty/blob/main/AI_POLICY.md)
+
+我日常使用的终端模拟器是 Ghostty,这个项目在前不久正式成为了非盈利软件并接受捐赠(参见[第 58 期周刊](/posts/weekly/58/)),这周他们团队发布了 AI 使用政策,以下是我最喜欢的一句话:
+
+> Bad AI drivers will be banned and ridiculed in public.
+>
+> 坏的 AI 使用者会被封禁并且被**公开羞辱**。
+
+### 亮色模式「膨胀」
+
+> [!note] 📜
+> [Light Mode Infffffflation](https://willhbr.net/2025/10/20/light-mode-infffffflation/)
+
+作者观察到了一个有趣的现象,在 macOS 上,亮色模式正在变得越来越亮。在以前,系统 UI 没有亮色模式和暗色模式的选项,那个时候的 UI 除了个别是黑色背景,大部分都偏向中性的灰色。到后来,UI 界面变得越来越白,暗色模式也随之出现。作者表示,由于 macOS 的某次更新让 UI 变得太亮,他一直保持使用暗色模式,尽管他有些想念以前的灰色 UI。
+
+令我震惊的是,iOS 26 竟然开始使用 HDR 技术让一些元素变得比 100% 的白色还要更亮,简直是邪恶至极,又多了一个讨厌 iOS 26 和 macOS Tahoe 的原因。
+
+白色的确会让人感觉更干净,黑色越深也让人感觉越酷,这种审美倾向使得亮色模式变得越来越亮。说不上有什么社会危害,但对我的眼睛非常不友好。作者建议,如果要设计 UI 界面,可以大胆一些,选择 50% 的灰色。我们的眼睛都会谢谢你的。
+
+### 你的订阅现在成了我的周末项目
+
+> [!note] 📜
+> [Your App Subscription Is Now My Weekend Project](https://rselbach.com/your-sub-is-now-my-weekend-project)
+
+比起「现在有了 AI 人人都能做副业当程序员开发软件」的说辞,我更喜欢这篇文章作者的态度。他 Vide Code 了一些解决自己需求的小软件,用来代替订阅制软件,并且承认他清楚这些软件的质量无法承受更多的用户,他不会将它们商用甚至推荐任何人使用。他仅仅是用来解决自己的需求而已。
+
+不过,LLM 编程工具并不是免费的,Vibe Coding 实际上很烧钱。从我有限的经验来看,开发规模稍大一些的软件时,使用自然语言编程所耗费的精力比自己亲手写要多得多,描述需求就是很累人的,因为需要完成想法到指令的转换——*说真的,为什么有人比起自己敲代码,会更愿意去做对接沟通和审查工作的事情?* 所以,长期而言,我很怀疑作者能不能用这种方式维持自己的数字生活。对于其他想要做此尝试的人:作者本身就是软件工程师,只是没有编写 macOS 应用的经验而已,而 LLM 编程工具只是帮他补足了这方面的空缺。
+
+### Tree-sitter 和 LSP 有什么区别?
+
+> [!note] 📜
+> [Explainer: Tree-sitter vs. LSP](https://lambdaland.org/posts/2026-01-21_tree-sitter_vs_lsp/)
+
+前几天折腾 NeoVim 插件和配置,经常接触到 LSP(Language Server Protocol)和 Tree-sitter 这两个东西。我感觉它们提供了类似的能力,但似乎略有不同。这篇文章解释了两者在应用层面的区别,读完之后有豁然开朗的感觉。
+
+简单来说,Tree-sitter 常被用来实现代码语法高亮,它看起来像是一个语法解析器,但实际上是个「解析器生成器」——给它一门编程语言的语法描述,它就可以生成这门语言的语法解析器程序。比起使用正则表达式匹配语法结构,Tree-sitter 能够容忍语法错误——这很重要,因为在编写代码的时候,代码在大部分时候都处于「有语法错误」的情况。如果使用正则表达式实现语法高亮,编写代码的时候,屏幕上代码的颜色就会一直变化。一些插件也可以调用 Tree-sitter 来查询代码中是否存在特定的语法对象。
+
+而 LSP 是一个开放的协议,是编辑器和语言服务器(Language Server)通信的协议。语言服务器从名称上来看,似乎就会做更多的计算和分析。Rust 的官方语言服务器名为 `rust-analyzer`,就是「Rust 分析器」的意思。编辑器里显示的错误和警告,例如未被使用的符号定义、不够现代的 `for` 循环写法等等,都是语言服务器提供的。还有代码补全、通过函数引用寻找定义、显示某个标准库函数的文档,也是语言服务器的能力。~~所以我不理解那些非要用 IntelliJ IDEA 写 Java 代码的人,真要伺候这门语言也完全可以换个好点的编辑器,IDEA 有超过一半的功能都可以用 Java 的语言服务器代替,另外一部分功能学会命令行也能用,而且更快,不会在臃肿的 GUI 迷宫里迷路。~~
+
+如果用人类语言类比,我感觉 Tree-sitter 像是兴趣广泛的语言学爱好者,知道 à、en 和 dans 是法语里的介词,但不知道是什么意思。给他一个法语句子他能划分出句子成分,但是自己不会写也读不懂。~~天哪,这简直就是我。~~ 语言服务器除了能读懂语法,还能指出用词不当和句式杂糅等问题,对一门语言有最官方和全面的了解。
+
+从功能上看,LSP 优于 Tree-sitter,但后者速度更快,代码高亮和基础的语法分析应该用它。
+
+## ⁂ · 星群
+
+## ↯ · 当下
+
+### 成为~~密码学黑客~~
+
+上周更新了邮箱地址到 `hi@eltr.ac`,突然想到自己的 GPG 密钥对也应该更新,毕竟密钥上还用的是旧邮箱信息。一开始我不知道能够直接用 `gpg --edit-key` 增加 UID,所以生成了一个新的密钥对。正好,我之前的密钥一直是储存在本地的,日常使用也是直接使用主密钥签名,这并不是最佳实践,甚至可以说十分危险。
+
+开始讨论之前要简单解释几个名词。PGP 是 Pretty Good Privacy 的缩写,是一个非自由软件,用于加密、认证和签名,为通信和数据交换提供隐私保障,其原理是非对称加密算法——用户生成一对公钥和私钥,公钥可以加密信息,但是只有私钥可以解密,这种非对称性也能用于验证互联网上某人的身份。OpenPGP 是一个开放的协议,而 GPG(GNU Privacy Guard)是实现了这个协议的自由软件。在应用层面,OpenPGP 可以给 Git commit 签名以验证代码提交者的身份,可以签名或者加密电子邮件保证隐私,可以直接加密本地存储的文件以避免明文储存敏感信息…… 关于 OpenPGP 还有很多值得探索的,这里点到为止。
+
+一般来说,OpenPGP 的最佳实践是**离线**创建一个只有签发(Certificating)能力的主密钥,并且储存在永远离线的介质上;同样在离线情况下,使用主密钥签发具有其他能力的子钥,比如签名(Signing)、认证(Authenticating)和加密(Encrypting),并且子钥的有效时间应该较短,可以每年或者每半年更换一次。原则上,只有需要签发新的子钥的时候,才应该使用主密钥,日常都应该使用私钥,并且主密钥应该从联网的设备上删除。
+
+不过就算是私钥,一旦暴露也会对自己的数据身份造成威胁,应该有更安全的、不可导出的、兼顾存储安全和使用便捷性的解决方案。事实上也确实有,那就是实体密钥。最常见的实体密钥是 Yubikey,支持 OpenPGP、Passkey 和多种协议,但是国内买一个 Yubikey 实在是太贵了,要六七百。联邦宇宙上[有人推荐](https://m.isle.moe/notes/ahsra74gop)了国产且开源固件的 Canokey,价格不到两百,而且支持的协议也完全够我用,于是我几乎没有犹豫就下单了。
+
+![Canokey 是一个扁扁的塑料方片,其中一端有 Type-C 接口,中间是铜色的金属点](https://r2.eltr.ac/geedeapro/posts/weekly/65/airpods-vs-canokey.jpeg "为了方便直观地比较大小,我放了个 AirPods 4 在这。")
+
+我把加密子钥和认证子钥导入了 Canokey,把签名子钥留在了 MacBook 上,因为我需要频繁给 Git commit 签名,一直插着 Canokey 大概也不太合适。目前我的 GPG 密钥对信息是这样的。[^1]
+
+```shell
+➜ ~ gpg --list-secret-keys
+[keyboxd]
+---------
+sec# ed25519 2026-01-22 [SC] [expires: 2029-01-21]
+ 2DF03B76B4588E9DE7A80FEF8CF13C15FE112E87
+uid [ultimate] Eltrac (Eltrac's Master Key) <hi@eltr.ac>
+ssb ed25519 2026-01-22 [S] [expires: 2026-07-21]
+ssb> rsa3072 2026-01-22 [E] [expires: 2026-07-21]
+ssb> rsa3072 2026-01-25 [A] [expires: 2027-01-25]
+```
+
+主密钥我离线储存在加密的 U 盘和离线硬盘上,有两份,目前大概还做不到异地备份,但暂时也足够安全了。
+
+关于 GPG,我还有很多要探索的,就放在之后再谈吧。
+
+### 博客的改动和未来发展
+
+这周我购买了 Contabo 的一台 VPS,安装配置了 Akkoma(一个联邦宇宙软件,Pleroma 的分支),迁移了自建的 Linkding 和 Forgejo,安装了 Uptime Kuma。我还迁移了博客的对象存储到 Cloudflare R2,你大概会觉得图片加载慢了一些。
+
+详细的相关内容,可以阅读《[极客死亡计划书 III](/posts/site-report-3/)》。值得在这里一提的是,我的 Uptime Kuma 站点名字叫作「How's Eltrac?」(Eltrac 还好吗?),域名是 [hows.eltr.ac](https://hows.eltr.ac/)——这下这个 $45 的域名也算是玩回本了(并不)。
+
+### 有没有中文博客圈的 Hacker News?!
+
+我开始讨厌 Giscus,但是我四处翻找都没能发现令我满意的评论系统,这真是静态博客最不可忽视的缺陷之一了。
+
+最近在 Hacker News 上看英文文章的时候,突然开始羡慕英文博主能够大大方方地不添加评论区,因为他们可以把链接提交到 Hacker News 上,大家在这个网站上讨论页面内容,甚至有不少博主会引导访客到 Hacker News 上讨论。于是我在 Fedi 上发了一条[帖子](https://akk.eltr.ac/objects/88bdf774-6ad6-4f78-8fff-5bb970f64446):
+
+> 希望中文独立博客圈有类似 Hacker News 的网站,这样我就不用纠结要使用什么评论系统了,大家都在一个网站上讨论文章内容就好,还能把写作和社交这件事情很好地分开。
+
+中文博客圈的 RSS 聚合网站和导航网站已经够多了,如果有一个类似于 Hacker News,能让大家围绕一个 URL 展开讨论,并且足够开放和自由的平台就好了!V2EX 和 LinuxDo 这样的论坛似乎很多人喜欢,可我也很难融入那里的氛围,而且也不是为了「讨论其他网站上的内容」而生的。
+
+*已经在考虑自建一个支持 ActivityPub 的中文 Hacker News 替代了*。
+
+[^1]: 如果你不熟悉 GPG 的命令行界面,其中 `sec` 表示私钥(Secret Key),而 `ssb` 表示子私钥(Secret Subkey);`#` 表示没有在本地设备上找到这个私钥,`>` 表示这个私钥储存在卡片上。