目录
- 1. 发布至 HN 后,网站遭遇 AI 机器人流量洪峰
- 2. 利用 LLM 重构 Emacs Web 浏览器体验
- 3. 技术进步的悖论:为何体验反而恶化?
- 4. Deft 版本 0.2.0 发布
- 5. LLM 介入写作的边界在哪里?
- 6. 仅用约 350 行 Clojure 代码构建国际象棋
- 7. Deft 发布:Clojure/ClojureScript 的类与接口系统
- 8. 博客已支持 RSS 订阅
- 9. Wordle 获胜策略解析
- 10. 《习惯的力量》书评(第一部分)
- 11. 现代货币理论(MMT)科普
- 12. 完美相机的定义
- 13. 摄影器材清单:包中必备镜头
- 14. 基础预测错误的成因分析
- 15. 民主党初选背后的数学逻辑
- 16. 弹球游戏现状评估
- 17. 化疗治疗癌症综述(第三部分)
- 18. 化疗治疗癌症综述(第二部分)
- 19. 化疗治疗癌症综述(第一部分)
- 20. “无所事事”的重要性
- 21. 支持公民团结的理由
- 22. 相机设置指南
RSS

1. 发布至 HN 后,网站遭遇 AI 机器人流量洪峰
过去几年,开发者一直在维护 sprinklz.io,这是一款可定制的阅读器工具。
一个月前,该工具在 Hacker News (HN) 上获得关注,帖子收获 100 个赞成票。社区反馈显示,用户厌倦了关于大语言模型(LLM)的噪音,希望拥有能优先过滤此类内容的工具。然而,随着关注度提升,网站性能急剧下降,变得极度缓慢。
起初,开发者认为这是正常的高并发负载所致。但随后的指标记录显示出异常:活跃登录用户的负载极低,而整体服务器负载却极高。通过分析端点日志(URL 路径请求量),发现绝大多数请求并未尝试加载新闻文章,甚至未执行渲染页面所需的 JavaScript。
进一步审查 NGINX 日志后发现,主要流量来源并非真实用户,而是各类自动化脚本。其中包括自称提供“网站变化监听服务”的工具,其查询频率高达每分钟多次;以及常规的爬虫程序,如 Google 搜索索引和其他搜索引擎机器人。此外,还检测到针对非 WordPress 架构网站的漏洞扫描行为(如访问 /wp-content/phpinfo.php)。
应对措施包括更新 robots.txt 以屏蔽大多数 AI 扫描器,同时保留对 Google 等合法搜索机器人的允许访问,并实施合理的速率限制。目前,基础设施已完成优化,旨在提升高负载下的扩展性,改善所有用户的访问速度。该网站完全免费开放,用户可自定义订阅源,例如排除 AI 或 LLM 相关主题。
2. 利用 LLM 重构 Emacs Web 浏览器体验
Emacs 内置的 Web 浏览器 eww (Emacs Web Wowser) 基于终端文本环境。虽然它能处理简单的 HTML,但在面对依赖复杂 JavaScript 和现代 UI 设计的网页时表现不佳。
为解决这一问题,开发者提出了一种结合 LLM 的方案,旨在将现代网页转换为适合 Emacs 阅读的简化纯文本格式。核心流程如下:
- 在 Firefox 中打开目标网页。
- 加载页面并执行所有 JavaScript。
- 调用 LLM 生成一个转换程序,将当前页面内容转化为简化的文本结构。
- 将生成的 JavaScript 注入 Firefox 浏览器。
- 获取处理后的页面源码,并将其转发给 Emacs 浏览器进行渲染。
实际测试表明,该方法显著提升了可读性。以 ClojureDocs 为例,原始页面在 eww 中难以阅读,而经过 simpleweb-simplify-page 处理后,内容清晰有序。虽然初始生成转换程序需要一定时间,但一旦完成,日常浏览速度极快且稳定。
项目开源地址:https://github.com/sstraust/simpleweb
3. 技术进步的悖论:为何体验反而恶化?
尽管技术在不断迭代,许多用户却感觉数字体验日益糟糕。这种现象的核心原因在于激励结构的扭曲。高效的计算工具不仅提升了生产力,也被用于更有效地掠夺用户的注意力与幸福感。
这种趋势在 2010 年代末开始显现。早期的互联网连接并未导致类似的时间黑洞效应(如沉迷于重复观看《星际迷航》片段)。怀疑在于,软件工程的主体从爱好者转变为受金融和商业思维主导的管理者,导致曾经充满乐趣的工具变得枯燥且高度商业化。
针对这一困境,建议采取以下措施:
- 回归线下: 离开网络环境,参与公园棋局等实体社交活动,往往比线上互动更具价值。
- 公共行动: 通过抗议等方式表达诉求,示范行动力,鼓励更多人参与改变。
- 停止无效投入: 避免陷入“赌徒谬误”,即因偶尔的正向反馈而持续投入时间到那些总体损害体验的平台或机器上。
注:开发者的初衷是通过构建可定制的新闻阅读器来缓解对现代互联网的挫败感。若不使用该工具,建议直接订阅独立博客,远离大型平台。
4. Deft 版本 0.2.0 发布
Clojure 库 Deft 发布 v0.2.0 版本。Deft 旨在解决 Clojure 生态中类型定义与协议实现的痛点。
Clojure 的设计哲学推崇“万物皆映射(Map)”,反对 Java 式繁琐的 Getter/Setter 模式。然而,当使用内置的 defprotocol 和 defrecord 时,若函数逻辑依赖于特定字段的存在,开发者不得不重新引入 Getter/Setter 方法,或在 Protocol 与 Malli Schema 之间进行复杂的组合验证,这违背了简洁性的初衷。
Deft 的核心洞察是:如果记录中存在某字段,应自动赋予其相关的协议支持。v0.2.0 新增了对命名空间键(Namespaced Keys)的支持,允许在类型和协议定义中使用:
(defp Positioned :required-keys [::pos - ::Point])
示例用法:
(deft Circle [::location/position radius]) (>Circle ::location/position [1 2] :radius 12)
这使得定义依赖于特定字段存在的方法成为可能:
(defp Gremlin :extends [location/Positioned]) (defmethod game-object/get-hitbox ::Gremlin [self] (js/Matter.Bodies.rectangle (get-in self [::location/pos ::location/x]) (get-in self [::location/pos ::location/y]) 15 15))
项目地址:https://github.com/sstraust/deft
5. LLM 介入写作的边界在哪里?
Nate Silver 的新书《On the Edge》末尾披露,ChatGPT 在创作过程中提供了显著帮助,主要用于构思章节副标题、隐喻及类比,以及完善技术理解。
尽管作者声称由人工撰写,但这种辅助引发了关于“真实性”的思考。参考 Rich Hickey 的经典演讲《Simple Made Easy》,精确的语言定义本身就是思考过程的一部分。将这部分工作外包给 LLM,可能导致思维组织的缺失。
阅读体验显示,书中嵌入作者核心思维框架的语言与后期添加的内容存在明显质感差异,后者缺乏那种凝聚整体愿景的思维紧凑感。对于追求人际连接的读者而言,AI 生成的邮件或散文令人反感。人们更希望看到作者的原始意图(Prompt),而非经过算法修饰的结果。
结论:LLM 适用于数据分析(如医疗记录建模),但不适用于强调个人洞察与情感连接的写作。正如扑克玩家所言:“如果你连亲自写下想法都不愿付出努力,我也没兴趣去阅读。”深度的人类连接建立在时间与精力的真实投入之上,而非文字的机械生成。
6. 仅用约 350 行 Clojure 代码构建国际象棋
为了测试新发布的 Deft 库,开发者使用 Clojure 实现了一个国际象棋游戏。国际象棋因其规模适中、逻辑自包含且具备明显的面向对象特征,成为验证类与接口系统的理想场景。同时,它也需要处理易位(Castling)和吃过路兵(En passant)等边缘情况,体现了真实应用的复杂性。
所有棋子图形均为手绘,并使用 Reagent 组件渲染棋盘界面。代码展示了如何利用 Deft 定义的协议来处理游戏状态与交互逻辑。





