跳到主内容

Journal 2025

总之是之前看了 Link blog in a static site - Redowan 这篇文章,正好博客太久没有更新过了。看看能不能就这样稍微凑凑更新频率(事实证明并不能……

1. [2025-01-13 Mon] It’s time to abandon the cargo cult metaphor - Ken Shirriff

说实话之前都没有听说过“cargo cult”。个人来说我对例如 mastermain 之类的单语重命名倒是没有什么想法——“master”本身的词义也不少,无上下文的确无法评价(虽然我非常喜欢 main );但是,“cargo cult”的这种由假史料衍生出来的所谓“寓意”还是让人有些恶心,类似的自喻‘文明’的群体对‘非文明’甚至是动物的猎奇解读也是同理。

中文里对应“cargo cult”猎奇意的大概是“刻舟求剑”,也许好些?

2. [2025-01-14 Tue] Luck be a Landlord Might Be Banned from Google Play - TrampolineTales

《Luck be a Landlord》,中文译名一般是“幸运房东”,算是相对有名的一款独立游戏。它也启发了一些其它游戏,这类滚大数字卡牌构筑游戏有时候也被称为“幸运房东”游戏。总之, 就是摘一下 HN 的一个评论:

(大意)《幸运房东》被禁,《小丑牌》18+,而一众要真金实银的抽卡游戏却大行其道。 确实挺讽刺的。

jsheard

3. [2025-03-19 Wed] Trapping misbehaving bots in an AI Labyrinth

这段时间其实在 Cloudflare 的后台也可以看到我的一些网站(包括这个博客)也在被各种扫。之前试着开了一下 Cloudflare 的防护,但结果是把 ActivityRelay 给屏蔽了。目前来看来是没什么误伤率比较低的方法。

4. [2025-03-30 Sun] Zoom bias: The social costs of having a ‘tinny’ sound during video conferences

在线面试时候的麦克风会对评价有影响。想起来之前看到过的交响乐团试音时即使让面试者在帷幕后进行演奏,高跟鞋也会踏出声音来,不能达成排除性别偏见的目的。查了一下倒没能查到相关文献……

5. [2025-03-31 Mon] The Unbearable Loudness of Chewing

讲的是恐音症(Misophonia)的事。我个人的话其实对咂吧嘴和音响外放也是差不多的感觉。 文档里提到的 Trapped Prior 听起来挺有道理的,毕竟我除了听觉外还有一些其它烦躁 trigger,例如抖腿(视觉)和味道大的食物/饮品(抱歉,这包括咖啡)。在我看来这些和公众场合外放都是差不多的行为。

之前吃饭的时候其实还是有概率因此而心烦气躁的,但是在有了降噪耳机之后其实好多了。

6. [2025-04-01 Tue] The fediverse has a bullying problem

天哪……又是 W3C 把 ActivityPub 抛荒之后带来的一系列问题。本来最近因为折腾 Bluesky 自定义信息流的垃圾发文审核问题对 ActivityPub 稍有一点改观的,但是现在还是觉得这种 worse is better 的拍脑袋协议就放马桶里冲走吧。

8. [2025-04-04 Fri] What If We Made Advertising Illegal?

HN Discussion: https://news.ycombinator.com/item?id=43595269

把所有广告都禁掉,大开脑洞的一个想法。是不错的思想实验,但我个人比较悲观。

9. [2025-04-05 Sat] Or, On the Importance of Fact-Checking

9.1. 延伸

之前 Bluesky 时间线上刷屏过肾移植供体突破低龄、低体重极限,仁济和儿中心联合研究成果登器官移植权威杂志这样的新闻,基本上是质疑供体来源的讨论。事实如何不作评价 (因为我会无条件否定所有《大纪元》相关来源的新闻),但有用户发散到了否定所有幼儿供体的器官移植,就,有些唏嘘。下面是一些 fact check:

10. [2025-04-10 Thu] Novellas

总之就是 Ent 之前发表了一些政治敏感的话题,然后其大多中文网络上的痕迹就被消除掉了。最近想起来了 Ent 翻译/转载的部分短篇科幻,想找来看一下,于是下面的一大堆 Internet Archive链接就是其结果。

10.1. 另外翻到一个“100部最好的幻想小说阅读指南”

10.2. 来自异星生命的微波人工信号

是 Nature 上发过的一篇科幻小说。目前残存的记录有:

Nature 原文:MAXO signals(我真该在愚人节发到 HN 上去)

10.3. 阿瑟•克拉克:《星》 (重译)

10.4. 世间众生

10.5. 【转一帖】巴恩豪斯效应的报告by库尔特·冯内古特

10.11. 四小时赋格

10.13. 冰柱新娘

10.14. 未能找到

(这些都是见刊了的,之后可以翻一下图书馆)

  • 太初有一克里斯•罗宾逊
  • 时间甚简史 C·J·切利
  • 南极地图买家收藏指南凯瑟琳·瓦伦特

11. [2025-04-18 Fri] Concurrency in Haskell: Fast, Simple, Correct

与其说是 Haskell 的介绍不如说是 STM (Software Transactional Memory) 的介绍。

在常见的 RDBMS 中,transaction 可以并行进行。在最严格的隔离度下:

  • 一个 transaction 只能看见在其开始之前执行完毕的其它 transaction 的修改,而无法看见其它任何并行进行的 transaction 的改动。
  • 在提交改动时,若当前 transaction 与其它 transaction 的改动冲突时,数据库会舍弃掉当前的修改,此时程序可选择重试修改。

STM 基本上就是把上述的数据隔离给推广到了近乎任意数据,只要声明为了 STM 数据,即可使用 transaction 对数据进行改动,从而避免了手动的锁操作及死锁等问题。(但我感觉这种是不是用个正经数据数据库会好些,而且性能也是个问题。)

12. [2025-05-31 Sat] 端午更新一波

又好久没更新过了。把一大堆之前看过的都放上来,当个书签吧:

13. [2025-06-04 Wed]

  • Deep learning gets the glory, deep fact checking gets ignored

    用深度学习训练蛋白质分类,输出百来个“新”结果,然后只校验其中三个,最后发表在 Nature Communications 上。Wow…

    在我的领域这边,其实把人工智能用于分类的还不算太乱,最群魔乱舞的其实还是图像处理。对于现实的数据而言,很多时候是实际成像数据有不同程度的缺失,此时才有人工智能的用武之地——用各种其它数据来补全;但此时却恰恰没有可供校验的基准值,因此论证数据符合实际值的方法就还挺混乱的。

  • Ask HN: Options for One-Handed Typing

    平时打字其实还挺 take for granted 的。另外,HN 评论区有挺多建议挺不错。跑去 QMK 上看了一下,发现它也有一个可用于单手输入的配置(Swap-Hands Action | QMK Firmware)。

14. [2025-06-18 Wed] bzip2 crate switches from C to 100% rust

把 bzip2 用 Rust 重写之后能有性能上的提升。注意这里的重写其实主要是用 c2rust 转换的,应该没有太大的改动,所以能有性能提升还是挺神奇的。HN 评论里猜测是 C 的语义不够明确,因此编译器没法进行某些优化;而 Rust 的 borrow checker 则明确了各种 aliasing 情况,因而 LLVM 可以大胆优化。

文章里的 benchmark 用了 CPU cycles 来表征两种 bzip 实现的性能,不知道 CPU cycles 和实际运行时间两种指标会有什么不同。

15. [2025-06-19 Thu] Fundamental Problems of Lisp, the Cons Cell

目前在写一个 Emacs Lisp JIT解释器(用的 Graal Truffle,因此也没什么技术含量)。 而说到动态语言的 JIT 运行时,那肯定是需要去参考下 V8 JavaScript 引擎的。

V8 里面的数组有着各种优化,例如这类纯数字就可能会以“小整形”(SMI)的方式储存,而则有可能变为 holey SMI。 但无论如何,这些数据最底层的储存方式一定是数组,而不是什么见鬼的链表。

但很遗憾,Lisp 作为 LISt Processing 语言,它的最大的历史遗留问题之一就是——它的绝大多数数据结构/约定俗成都建立在了链表之上。我们不妨用数组来类比一下,看看 Lisp 的一系列操作在现在看来有多么离谱:

Lisp 函数 伪代码操作
(car list) list.get(0)
(cdr list) list.subList(1, list.length)
(setcar list x) list.set(0, x)
(setcdr list nil) list.setLength(1)
(setcdr list list2) list.setLength(1).extend(list2)
(setcdr list non-list) WTF

请注意上面所有操作都必须传递到所有/部分 subList 中去。

17. [2025-07-14 Mon]

今天在 HN 首页上看到了两篇吹嘘编程语言特性的文章:

给我的感觉都是:作者为了吹捧自己的语言将其与其它语言对比,但却不愿意去了解其它语言与实际的问题,因而显得非常傲慢与无知。

第一篇的 C3 语言我是没有听说过,但是 memory lifetime 要是能这么简单解决的话那世上也不会有那么多 GC 语言了,这里也就不特地拿出来讲了。但是第二篇的 Zig 还算是个小有名气的新兴语言,吹嘘自己解决了其它语言的函数染色,就显得有些不妥……

让我们来看两个 Kotlin 的例子:

  • 从异步函数里调用阻塞函数:使用 withContext 将任务放至别的线程执行,防止阻塞当前 event loop;
  • 从阻塞函数中调用异步函数:使用 runBlocking 在当前线程中设置 event loop 并等待事件完成。

正如 HN 上评论说的,Zig 的 async 需要引入一个 IO 参数,而 IO 参数的有无本身就是一种染色。Zig 最多能做的也就是引入一些全局的 IO 变量,使得没有 IO 参数变量中的函数可以调用 IO 函数。但说到底,这也只是 Kotlin 上面两种方式的语法糖而已,倒也不是什么新东西。何况 Zig 甚至现在还没有完全实现基于 IO 参数的异步,这就使整篇吹嘘显得空谈且可笑。

评论

This one-pixel image serves as a page view tracker and nothing more. This feedback keeps me motivated, because very few people ever comment.