No.01
Deno Desktop
Deno Desktop:把Deno项目一键打包成桌面应用
212 分
69 条评论
作者: GeneralMaximus
Deno Desktop 是 Deno v2.9.0 引入的新功能,可将任意 Deno 项目(从单文件到 Next.js 应用)转换为跨平台桌面二进制。默认使用系统 WebView 实现小体积,同时通过 Node 兼容层支持完整 npm 生态;也可切换 CEF 后端保证跨平台渲染一致性。支持 Next.js、Astro、Fresh、Remix 等主流框架自动检测,零配置即可将 Web 项目转为桌面应用。进程内绑定替代了传统 IPC,声称无跨进程往返开销;内置 bsdiff 差分更新与自动回滚;支持跨平台交叉编译。评论中有用户关注其与 Deno 权限系统的集成、质疑「Web 技术是最广为人知 UI 工具包」这一说法,并对与 Tauri/Electron 等竞品的体积和功能差异展开讨论。
No.02
GLM 5.2 vs. Opus
GLM 5.2 vs Opus 4.8实战对比:3D游戏开发谁更强
37 分
13 条评论
作者: ritzaco
作者对国产开源模型GLM-5.2与Claude Opus 4.8进行了实战对比测试:两者收到相同提示词,需从零用纯WebGL构建一款3D平台游戏。测试结果:Opus用时约34分钟完成,游戏画面完整、材质正确、有胜利条件;GLM-5.2用时约1小时11分钟,游戏存在材质丢失、缺少胜利条件等缺陷,但弹簧跳跃机制工作正常。GLM-5.2的优势在于价格不到Opus的五分之一,且为MIT许可证开源权重,无法被随意下架;其1M token上下文和双档思考模式适合长时间代理任务。关键局限:GLM-5.2为纯文本模型,无法通过截图自检游戏效果,只能用像素颜色采样验证,导致未能发现材质问题。两者均不支持多模态截图审核。评论指出单次提示词测试不能算严格基准,中国模型普遍存在基准优化与实操落差的问题,价格比较也应纳入订阅方案。
No.03
Help I accidentally a wigglegram
展示:意外收获的数百张 wigglegram 立体动画
176 分
29 条评论
作者: gregsadetsky
作者发现自己作为「选择困难」摄影师,习惯从不同角度拍大量同一场景的照片,结果无意间在相册里积累了大量 wigglegram(多帧立体动画GIF)素材。他想到用感知哈希(perceptual hashing)——也就是 TinEye reverse image search 用的技术——来自动从 iCloud 照片库中提取相似图片序列,拼合成 wigglegram。脚本已开源,Mac 用户可直接对接 iCloud,其他用户可指定本地图片目录。评论指出 iPhone 的 Live Photos 功能早已自动记录拍照前后各 3 秒视频,其实也在做同样的事;也有人提到 ADHD 用户观看这类动画可能感到不适,以及这类 pseudo-3D 技术在数据可视化领域被低估。
No.04
Did my old job only exist because of fraud?
我的前东家是否只因诈骗而存在?
496 分
220 条评论
作者: advisedwang
作者在英国创业公司 GenieDB 工作时,公司被美国风投基金 Frost VP 收购,因此得以移居美国、改变人生轨迹。十年后他发现创始人 Stuart Frost 正被 SEC 起诉——指控该基金通过向被投公司收取超额服务费进行欺诈,内部邮件显示 GenieDB 被用作转移投资者资金的工具。作者意识到自己的职业生涯、家庭和公民身份都建立在这个骗局之上,一度感到被利用。但最终他释然:GenieDB 的技术构想确实早于 Frost 的收购,他和同事也在认真构建产品,只是风投在消耗他们的资金用于个人获利;况且人生的轨迹本就常被偶然、善意乃至罪恶所改变。
No.05
Apertus – Open Foundation Model for Sovereign AI
Apertus:面向主权AI的开源基础模型
358 分
118 条评论
作者: T-A
Apertus 是一套面向「主权AI」的开源基础模型,包含 16 个小型语言模型(8B 和 70B 参数),主打蒸馏和量化技术。其核心卖点是:训练数据、代码、权重、方法论和对齐原则全部公开可复现,符合欧盟 AI 法案要求(尊重退出权、移除 PII、防止记忆化),支持 1000+ 语言。团队将自身定位为 AI 领域的「Linux」,声称在同等规模下可与顶级开源模型竞争。但社区反馈两极:部分用户实测效果不佳且版权声明存疑,也有用户认为作为 RAG 驱动或通用基础模型尚可一用。争议焦点集中在「主权」是真实需求还是营销噱头,以及「完全开源」是否真正实现——批评者指出其训练数据来源(FineWeb 来自未授权爬取的 Common Crawl)与传统开源定义相去甚远。
No.06
Codex logging bug may write TBs to local SSDs
Codex 日志 bug 可能向本地 SSD 写入 TB 级数据
23 分
5 条评论
作者: vantareed
GitHub 上爆出 OpenAI Codex 存在严重日志记录 bug,在特定条件下可能向用户本地 SSD 写入海量数据(TB 级别)。该 bug 引发社区对 Codex 代码质量和测试流程的强烈质疑。评论者指出,即使拥有优秀工程师团队,此类明显错误仍出现在生产级产品中,令人费解。有观点认为问题根源在于使用「gpt-5.5-xhigh」等商业模型驱动开发流程,而非严格的代码审查机制。社区同时对 GitHub PR 中泛滥的 AI 生成评论表达了强烈不满。
No.07
There is minimal downside to switching to open models
切换到开源模型:代价微乎其微
198 分
144 条评论
作者: amarble
作者以 Linux 演化史类比开源 LLM:早期 Linux 兼容性差、软件生态不成熟如同曾经的专用模型;如今开源模型虽在排行榜上仍落后于 Claude、GPT 等闭源模型,但差距已大幅收窄,通常仅落后几个月。文章指出闭源模型存在隐私风险(第三方服务商处理数据方式不够透明)且面临日益严格的 ID 验证要求,而开源模型可本地部署或通过 OpenRouter 等平台获取,隐私可控且无供应商绑定风险。作者认为切换成本将是「最小化的」,短期内生产力可能有小幅下滑,但不像当年从 Matlab 转向 GNU Octave 那样需要做出重大牺牲。评论中有人看好本地模型的隐私优势,有人认为开源模型在软件工程任务上尚未真正匹敌 Opus,也有用户指出硬件门槛(16GB VRAM 远不够用)和成本问题仍是障碍。
No.08
Munich 1991: The Roots of the Current AI Boom
慕尼黑1991:当前AI热潮的根源
17 分
3 条评论
作者: tosh
文章指出,当今价值万亿美元的AI产业基础,实际上源自1991年慕尼黑工业大学Jürgen Schmidhuber实验室的突破性工作。该团队在短短几个月内相继发表:首个Transformer变体ULTRA(ChatGPT「T」的来源)、无监督预训练方法(ChatGPT「P」的来源)、神经网络蒸馏技术,以及深度残学习(为LSTM和ResNets奠定基础)。这些技术几乎构成了现代大语言模型的核心组件。此外,他们还为生成对抗网络(GANs)奠定了早期基础。文章由David Ha(曾任职Google Brain,现于Sakana AI)撰写序言,强调这些想法经受住了时间考验,最终被全球AI社区广泛采用。评论区引发关于深度学习历史归属的争议:有人认为根源应追溯至Hinton的反向传播工作,但h8hawk指出Hinton并未发明反向传播——现代反向传播实由Seppo Linnainmaa于1970年首次发表。
No.09
Memory Safe Inline Assembly
内存安全的内联汇编:Fil-C 的实现方案
89 分
18 条评论
作者: pizlonator
Fil-C 团队宣布实现了世界首个内存安全的内联汇编支持。传统 GCC/clang 的内联汇编语法功能强大但危险——程序员若遗漏约束符「+」或忘记声明「cc」clobber,编译器会静默生成错误代码。Fil-C 通过三重验证机制解决此问题:解析汇编字符串(拒绝包含内存访问或控制流指令的代码)、解析约束字符串(拒绝不支持的语法)、确保汇编效果被约束完全覆盖。文章列举了内联汇编的合法用途——编译器屏障(blank asm)、CPU 特性检测(cpuid/xgetbv)、加密常量时间运算、原子指令围栏(lfence/sfence/mfence/serialize)以及 x87 浮点函数调用,并指出这些用法在 zstd、simdutf、simdjson 等流行库的临界路径上被广泛使用。目前内存访问型内联汇编和系统调用仍在支持范围外。文章同时提供了作者与 AI agent 的相关讨论。
No.10
Sakana Fugu
Sakana Fugu:多模型协作超越单一前沿模型
107 分
61 条评论
作者: Finbarr
Sakana AI 发布 Fugu 模型,核心思路是让多个强模型协作来超越任何单一前沿模型。在 6 个案例测试中,Fugu-Ultra 均有不俗表现:ML 自动研究(123 次实验找到最佳 BPB 0.9748)、日语古籍「假名消息」阅读顺序推断(NED 0.80 vs 其他模型 0.24)、纯 Python 魔方求解(平均 19.72 手 vs 对手 19.76 手)、机械虹膜 CAD 生成、4 局目盲棋(战胜 2100 Elo Stockfish)以及股票交易(5 次平均 +19.43% 回报)。社区反应两极:好评认为多模型检查是正确方向;但批评集中在价格($200/月限制严格)、防卫合同争议、与 OpenRouter Fusion 相似度过高,以及 4 亿美元融资后产品不够惊艳。
No.11
Good results fine tuning a local LLM like Qwen 3:0.6B to categorize questions
微调 Qwen 3:0.6B 做问题分类:10%→92% 准确率实践
117 分
24 条评论
作者: dev-experiments
作者尝试用 Qwen 3:0.6B(6 亿参数)微调后实现可靠的家庭问题分类,以配合 RAG 管道做元数据筛选。使用 Unsloth + QLoRA,在约 850 条数据上训练,70/15/15 划分。实验三阶段:基线(纯提示)准确率仅 10%;首次微调后升至 79%,但存在输出片段化问题(如 ac/air 而非 hvac);关键改进是将类别映射为两字符不透明 ID 以消除语义重叠,二次微调后达 92% 准确率。作者强调好数据集比调参更重要,并加入用户反馈循环持续优化。评论质疑为何不用 BERT 类编码器或 SGD 分类器,有人对比 ModernBERT 与微调小模型的表现,还有讨论约束解码防止模型杜撰类别。
No.12
Everything is logarithms
万物皆对数
201 分
43 条评论
作者: E-Reverance
作者提出一种理解对数的新视角:将无基数对数「log N」视为一个抽象代数对象,而非简写。将 change-of-base 公式诠释为「单位转换」——log₂N = log N / log 2 如同将同一几何量分别用「bits」和「nats」单位表达。在此框架下,对数类似于向量:选择底数相当于选择坐标系的「原点」,有基数的对数是坐标向量,无基数的「log N」是更本质的几何对象。有评论者指出这在数学上称为「torsor」(与位置、货币同类,无基点的代数对象);也有批评认为这更多是符号游戏,缺乏真正新的数学事实。另有讨论将对数与 dB 音频标度、计算尺等物理实现相联系,以及对数在物理中为何只出现到指数层级就消失的问题。
No.13
Identity verification on Claude
Claude 身份验证政策:要求用户上传政府证件及自拍,引发隐私争议
719 分
609 条评论
作者: bathory
Anthropic 宣布在特定用例中引入身份验证,使用第三方服务商 Persona Identities 采集用户政府证件照片及实时自拍。官方声明数据由 Persona 直接持有,Anthropic 无法直接访问图像,仅在申诉时通过平台查阅;同时强调不会将身份数据用于模型训练。但评论區普遍持批评态度:Persona 此前有数据泄露记录且与 Palantir 有关联,用户担忧政府可借此追踪 LLM 使用者行踪;有人指出信用卡付款已完成 KYC,再次要求上传证件属多余;也有人联想到美国政府向 Anthropic 施压的时间线,认为政策转向过快;另有用户提及 OpenAI 早已实施类似验证,并建议转向去中心化或开源模型。
No.14
Danish privacy activist Lars Andersen raided by police
丹麦隐私活动家Lars Andersen因追踪官员被警方突击搜查
199 分
129 条评论
作者: I_am_tiberius
丹麦隐私活动家Lars Andersen因在部长车辆上安装GPS追踪器、追踪官员家人并曝光其子女信息,被警方突击搜查。警察切断其住宅电力并没收摄像机等设备。评论呈现两极分化:一方认为他越界过多,是有犯罪前科的灰色人物,并非真正的隐私倡导者;另一方则认为他揭示了选择性执法的虚伪——威胁短信发给检察官未被起诉,而同样的行为却让他被起诉,且首相支持无搜查令使用医疗记录和禁止加密的「Chat Control」法案。技术细节显示其Google Nest摄像机切至本地录制模式,警方在切断网络连接后取走证据;亦有评论指出他提前以幽默方式在网上发布了「两个最喜欢的数字」作为备份暗示。有评论援引Afroman案例质疑警察破门而入的正当性,并指出在丹麦拥有枪支并非不可能。
No.15
How I play video games with spinal muscular atrophy
脊髓性肌萎缩症患者如何玩电子游戏:我日常使用的辅助技术工具
101 分
15 条评论
作者: dannyobrien
作者Andrei Cebotar患有脊髓性肌萎缩症,双手极易疲劳,仅能使用一个鼠标键,却通过辅助技术实现了玩游戏、写作和在线交流。他详细介绍了自己日常使用的工具组合:PlayAbility通过摄像头捕捉面部表情和头部动作来映射游戏按键;Handy是本地处理的语音转文字应用,用于替代键盘输入;Xbox Adaptive Controller作为中枢连接摇杆和开关按钮,提供低阻力操作。他还尝试过Tobii眼动追踪(因眼睛疲劳停用)和Talon Voice(误触过多放弃)。作者强调关键在于工具组合使用,并建议有类似需求的患者从免费的PlayAbility和Handy开始,硬件设备后续再按需补充。
No.16
Lisp in the Rust Type System
在 Rust 类型系统中实现 Lisp
46 分
0 条评论
作者: quasigloam
这是一个展示项目,作者尝试在 Rust 类型系统中嵌入一个完整的 Lisp 方言,通过 Rust 的高级类型特性(trait、关联类型、类型级别编程)在编译期实现 Lisp 语义。该实现将 Lisp 的核心概念——S 表达式、原子、列表、闭包、环境——全部编码为类型级别结构,使 Lisp 程序在编译时完成求值,而非运行时解释。这种「类型层面的语言虚拟机」展示了 Rust 类型系统的极致表达能力,也为探索依赖类型、类型推导边界提供了实验场。项目代码托管于 GitHub,属于探索性技术实验。
No.17
JSON-LD explained for personal websites
个人网站 JSON-LD 入门指南
203 分
60 条评论
作者: ethanhawksley
JSON-LD(JSON Linked Data)是一种通过 <script type="application/ld+json"> 嵌入网页的结构化数据格式,基于 Schema.org 标准定义「@context」「@graph」「@type」「@id」等关键词,帮助爬虫理解页面语义。文章详细演示了 WebSite、WebPage、Person 等常用类型节点的写法:WebSite 描述站点元数据,建议根页面完整输出、其他页面精简;Person 节点锚定作者身份,全站应保持一致;ProfilePage 和 CollectionPage 是 WebPage 的子类型。社区争议集中在:批评者认为语义 HTML 本身已能表达结构,JSON-LD 不过是重复劳动;Google 对 SEO 的实际帮助非常有限,主要受益方是知识图谱构建和 LLM 爬虫引用;OpenGraph 在链接预览支持度上比 JSON-LD 更普遍;也有评论提及 llms.txt 等新兴标准正在探索替代方案。
No.18
Beyond All Reason (Free Total Annihilation Inspired RTS)
Beyond All Reason:免费开源的《最高指挥官》风格RTS游戏
474 分
279 条评论
作者: mosiuerbarso
Beyond All Reason(BAR)是一款受《Total Annihilation》启发的免费开源RTS游戏,基于Recoil引擎构建。游戏主打真实弹道、爆炸物理和地形变形的全实时模拟,支持千人规模军团作战,10余种单位类型各具战术价值。地形系统直接影响战略选择——雷达无法穿透山脉,核武器会永久改变地貌。游戏社区文化浓厚,提供精彩赛事解说内容。然而社区存在毒性和竞争压力问题,新手建议先观看视频、单机熟悉机制后再加入多人对战。关于核心管理员将游戏商业化登录Steam的争议,GPL协议保证了源码永久开源。游戏支持人机对战PvE模式,但高分玩家可能直接「吃图」导致新手体验不佳。
No.19
1983 Northern Telecom Commodore Phone
1983年北方电信 Commodore 电话:加拿大独有的技术怪胎
47 分
13 条评论
作者: arexxbifs
1983年,Commodore 在加拿大销售 VICModem 时遭遇独特困境:当地电话全部硬连线( handset 固定在 base 上,不可分离),而 VICModem 需要插入 handset 和 base 之间才能截获信号。Bell Canada 垄断全国电话设备,Commodore 不得不与其谈判,最终获准销售北方电气(Northern Electric)生产的 Commodore 品牌旋转拨号电话,但条件苛刻:仅能作为 VICModem 套餐捆绑销售。然而新电话到货后仍是标准硬连线型号,问题依旧。Bell 援引一条奇怪法规:连接网络的电话必须始终保持完全可用状态,禁止任何临时改造。Commodore 最终推出 VIC-1605 适配器,通过 RJ-9 公头连接 modem、两个 RJ-11 母座分别接电话和壁插,用拨动开关切换信号通路。这款加拿大限定、仅随 VICModem 附赠的电话如今极为稀有,是早期家用计算时代企业应对各国不同基础设施与监管环境的典型案例。
No.20
Japanese verb conjugation the simple hard way
日语动词变位:一种「简单却难」的方法
87 分
101 条评论
作者: valzevul
本文作者 Dan Abramov 分享了自己学习日语动词变位的「简单 hard」方法。传统教学将动词分为「-ru 动词」和「-u 动词」,但作者认为这种命名令人困惑。他提出用词干(stem)和后缀(suffix)来理解变位:- 一段动词(如「taberu」)词干简单固定(tabe),直接拼接后缀;- 五段动词(如「nomu」)词干带有通配符(nom*),词干元音在 a/i/u/e/o 五行间交替;- 每个后缀都携带一个「秘密元音」,当词干以通配符结束时该元音显现,否则被丢弃。作者认为这种系统性理解比死记硬背更令人满足,但承认该方法更侧重阅读理解而非快速口语输出。评论区对 romaji 教学法存在争议,有母语者认为这只是「过度复杂的脑补」,也有学习者认同作者从原理出发的思路。
No.21
PowerFox Browser
PowerFox:为老旧苹果系统打造的现代浏览器
124 分
32 条评论
作者: thisislife2
PowerFox 是一款专为 Mac OS X Tiger、Leopard 和 Snow Leopard 打造的浏览器,旨在让这些已停止安全更新的老系统重获现代浏览能力。项目基于 Goanna 引擎(Firefox/Gecko 的分支,源自 Basilisk Browser),支持 TLS 1.3、现代密码套件、多语言包、WebGL、Color Emoji 以及 NPAPI 插件,同时针对旧 Mac 进行了体验优化,包括经典 Aqua 滚动条等设计细节。社区讨论聚焦于版本对应问题——用户难以判断其相当于哪个 Firefox 版本;与 TenFourFox 的渊源也被提及,后者维护者确认部分代码被复用。另有评论指出老旧 Mac 可作为瘦客户端连接现代桌面环境,或安装 Linux 延续可用性,但仍有爱好者因怀旧情结和硬件美感坚持使用原版系统。
No.22
Minecraft: Java Edition 26.2, the first version with Vulkan 1.2
Minecraft Java 版 26.2:首个支持 Vulkan 1.2 的版本
131 分
40 条评论
作者: ObviouslyFlamer
Minecraft Java 版发布 26.2 正式支持 Vulkan 1.2 图形 API,这是本次最大亮点。Vulkan 相比 OpenGL 的关键优势在于可由应用主动指定使用独立显卡而非集成显卡,解决了多显卡用户的痛点。技术层面还包括:数据包版本升至 107.1,新增硫磺立方体(来源未完整显示)原型注册表;服务器管理协议升级, heartbeat 提前到世界加载阶段发送;新增游戏内垃圾信息阈值配置(聊天/命令分离,默认 10 秒);遥测系统新增 graphics_capabilities 事件以采集显卡后端类型和故障信息。实体系统新增弹性、摩擦力、空气阻力和名称标签可见距离等属性。另有渲染器改进:反向深度缓冲区、粒子统计分组、F3 屏幕显示 present mode 等细节优化。
No.23
Show HN: Teach your kids perfect pitch
展示:用颜色教孩子绝对音高
122 分
71 条评论
作者: paytonjjones
这是一个 Show HN 项目,作者 paytonjjones 开发了一款应用,通过将音符与颜色绑定来教儿童绝对音高(perfect pitch)。项目基于一种理论:人类需要在幼年(约 6 岁前)才能自然习得绝对音高,成年后窗口关闭。核心方法是用视觉颜色帮助儿童建立音高认知,例如 F 音对应某种颜色,最终让他们能够脱离颜色识别音符。评论引发激烈争论:批评者认为绝对音高是「诅咒」——音高会随年龄漂移导致所有声音听起来走调,且这个技能在现代音乐中实际用处不大,反而可能阻碍对不同调性体系(如巴洛克 A=415Hz)的适应。支持者则表示绝对音高是难得的体验,不会放弃。更多人认为相对音高更实用,且不应为追求绝对音高而牺牲孩子广泛接触音乐的机会。
No.24
Efficient C++ Programming for Modern C++ CPUs, Chapter 4/part 2
现代 64 位 CPU 高效 C++ 编程:第四章第二部分(CPU 周期成本图解)
42 分
5 条评论
作者: birdculture
本文为《高效 C++ 编程:现代 64 位 CPU》第一章第四章草稿,聚焦 CPU 物理与时钟周期的实际成本。作者Sherry Ignatchenko 与 Dmytro Ivanchykhin 指出:乘除法远贵于加减——整数乘法需 3-5 周期,除法高达 15 周期(64 位);RTTI 的 dynamic_cast 比虚函数调用贵 5 倍;C++ 异常在极少错误时更高效(异常发生约耗 5000 周期),但每百次调用就出一次错时应选返回值检查;原子操作(CAS)约 15 周期,多插槽 NUMA 场景可达 600 周期;函数调用直接成本约 15-30 周期,但内联可消除调用开销并释放编译器跨函数优化空间(如避免冗余 imul)。作者强调,微基准测试易失真,图示各操作量级更具实际参考价值——所有数字仅保证「数量级准确」。
No.25
Show HN: Criterion Closet as a website – pull any of 1,247 films off the shelf
展示:Criterion 影库网站——从1247部电影中随手抽取
92 分
23 条评论
作者: olievans
一位开发者将 Criterion 影库的实体「衣柜」形式做成了网页应用,用户可以在1247部电影中随手抽出任意一张影碟浏览。网站模拟真实的物理衣橱体验,用户通过瞄准十字准星点击菜单来浏览影碟。评论区的核心争议集中在:流媒体链接对部分影片(如「Brazil」)无效,只能匹配到其他相关影片而非目标本身;无障碍访问方面,有用户指出缺乏 Y 轴反转选项,导致无法正常使用;多位用户建议增加「Closet Picks」排序功能,按收藏热度展示热门影片;还有用户建议按影片封面而非书脊进行分组显示,或接入 polycss.com 渲染整个影库。该项目获得了不少肯定,有用户表示 Criterion 官方应该提供类似的浏览视图。
No.26
Rent collections are down in New York
纽约租金收缴率持续下滑,现象背后原因众说纷纭
75 分
283 条评论
作者: JumpCrisscross
据 Politico 报道,纽约可负担住房项目的租金收缴率出现显著下滑——从94%降至89%,涉及约400个项目、近3.7万套住房单元。然而,对于这一现象的成因,各方解读大相径庭。有人认为这只是「最小 subset」故意不付租的个体行为;但评论者指出,逾期欠款趋势早在六年前就已开始,大部分发生在现任市长 Adams 任期之内,且并非简单道德问题。有资产管理公司虽承认收缴率下降,却强调这些资产可「永久持有」,暗示损失可控。社区讨论的焦点还包括:收入不平等加剧导致租客无力支付、租客保护法使小房东难以驱逐欠租者、高收入人群中存在鼓励拒付租金的亚文化,以及自动化门禁惩罚机制的伦理争议。部分观点认为,增加住房供应或新建城市才是根本解决之道,但质疑者指出美国多数城市已存在大量廉价库存,问题根源在于资源分配而非总量不足。
No.27
Prefer duplication over the wrong abstraction (2016)
重复代码比错误的抽象更便宜(2016)
469 分
312 条评论
作者: rafaepta
本文是 Sandi Metz 关于软件设计中「错误抽象」问题的经典论述。她在 RailsConf 2014 的演讲中提出「重复代码远比错误的抽象便宜」,引发强烈共鸣。文章描述了一个典型反模式:程序员 A 发现重复代码并提取为抽象,但随着新需求到来,程序员 B 开始通过添加参数和条件分支来「适应」这个抽象,循环往复直到代码变得无法理解。作者指出,错误抽象会累积复杂度和混乱,比重复代码更难维护。解决方案是「回退」:将抽象内联回各个调用者,删除每个调用者不需要的部分,然后重新识别真正的重复并提取正确的抽象。核心忠告是不要被沉没成本所困——当抽象已被证明是错误的时候,最快的前进方式是后退,这不是退缩,而是以更好的方向前进。
No.28
The minimum viable unit of saleable software
LLM时代软件还能卖吗?最小可行销售单位框架
158 分
59 条评论
作者: brandur
作者 Brandur 离开 Stainless 后打算将开源项目 River 打造成可持续业务,面对「AI 时代任何软件都能被 LLM 瞬间复制」的质疑,他提出「最小可行销售单位」框架。核心论点是:即便 LLM 大幅降低了开发成本,软件仍存在「可行性区间」,需满足两个条件——足够的 novelty(重建复杂度高)和合理的 pricing(不会贵到让人想用 LLM 替代)。他用具体数字说明:Jira 每月 $400 的成本,工程师时薪 $96,最多只能花 4 小时/月 维护自建替代品才能回本,这显然不现实;但 Salesforce 每人 $500/月的定价就接近可建边界。River 通过开源免费版积累社区信任,Pro 版针对高级特性收费 $125/月,寄望于此定价策略能维持可行性。
No.29
(How to Write a (Lisp) Interpreter (In Python)) (2010)
如何用 Python 写一个 Lisp 解释器
182 分
61 条评论
作者: tosh
谷歌研究主管 Peter Norvig 2010 年写的经典教程,手把手教读者用 Python 实现一个名为 Lispy 的 Lisp 解释器。文章引用 Steve Yegge 的观点——不理解编译器工作原理就无法真正理解计算机工作原理——作为动机,随即从 Scheme 语法入手,通过 tokenize、parse、read_from_tokens 将代码字符串转换为抽象语法树(AST),再实现 eval 函数对 AST 求值。标准库通过导入 math 模块和 operator 模块提供 sin、cos、pi 等内置过程,用户自定义过程用「lambda」关键字创建。解释器还包含 Env 环境类(支持嵌套作用域查找)和 Procedure 类,最终实现了一个可交互的 REPL。评论者普遍认为这是学习语言实现的最佳入门资源,也有开发者提到 David Beazly 的 SICP 课程、以及 Rust 版实现等项目可以作为延伸学习。
No.30
Show HN: Recall – Local project memory for Claude Code
展示:Recall — Claude Code 本地项目记忆工具
109 分
67 条评论
作者: mateenah
Recall 是一个为 Claude Code 打造的本地项目记忆工具,旨在帮助 AI 编程助手在不同会话之间保持对项目的理解。该工具自动生成并维护项目状态文档,使每次新会话开始时 Claude 能快速获取项目上下文。评论区的反应以质疑为主,许多资深用户表示从未需要「解释项目」——直接给任务、让模型自己读代码反而更高效。大量评论指出 CLAUDE.md/AGENTS.md 已能解决同类问题,甚至认为过度填充上下文会让模型性能下降。不过也有用户认为这类工具对编程经验较少的人有价值,或提到可通过 Claude 自身生成的 hook 实现类似自动化功能。
评论精华