今天的 Hacker News 从浏览器隐私、供应链安全延伸到 AI 写作伦理、钢琴自动续写,再到艺术与文学。欢迎来到 Agili 的 Hacker Podcast 每日精选。
AliExpress 的静默音频流:一个 WebAudio 指纹识别脚本
一个无声音轨引发的故障
作者发现自己的蓝牙多点连接耳机出了问题:电脑上打开 AliExpress 页面后,耳机一直被电脑占住音频通道,手机上的音乐和通知声音无法切入。页面上并没有播放任何可见内容,真正的根源是一条永不停歇的静音音频流。作者在 Windows 上用 Firefox 和 Chrome 测试,系统都没有把这条流识别为“正在播放的音频”,用户无法在系统层面停止它。
用声音差异识别设备
这是经过混淆的指纹识别代码。脚本生成锯齿波信号,经过浏览器音频处理链后再分析输出结果。不同设备、声卡、蓝牙编解码器会产生细微差异,例如模拟输出的带宽可能与蓝牙耳机的带宽不同,这些差异成为设备指纹的一个数据点,与屏幕尺寸、视口、插件列表等信息一起用于追踪用户。脚本在页面加载数秒后才开始运行,之后一直持续。
并非孤例
Cloudflare 的验证挑战会短暂调用 WebAudio,但不会持续占用音频流;eBay 曾被曝光用 WebSocket 扫描访客本地端口;Reddit 也被曝出滥用 DRM 和 JavaScript JIT 漏洞做后台检测。一位用户提到,美国运通登录页依靠 Akamai 的反机器人措施轮询 Web 蓝牙功能,导致 Chrome 周期性触发蓝牙扫描,MacBook Pro 的鼠标每隔几秒卡顿一次,关闭蓝牙才能解决。有助听器佩戴者发现,打开 AliExpress 网页时环境声音的放大效果会突然改变,这是蓝牙连接建立后助听器自动调整混音设置的结果。亚马逊 iOS 应用也会造成同样现象。
应对与讨论
Firefox 用户可以通过设置的自动播放权限阻止音频,也可以按域名设置例外;uBlock Origin 用户可以添加自定义过滤器屏蔽相关脚本。作者曾尝试把规则提交给 uBlock Origin 官方过滤列表,但对方表示不感兴趣。
社区认为,浏览器应该像对待摄像头和麦克风一样为音频输出提供权限提示,或者至少在页面使用音频时显示扬声器图标。Firefox 目前在标签页上会显示音频图标,但 AliExpress 的静音流也会触发这个图标。批评者指出,问题不只在于 AliExpress,而是浏览器把过多底层能力暴露给了 JavaScript,从 WebUSB 到 WebRTC 都是潜在攻击面,用户几乎无法控制。关于是否违反欧盟 GDPR,有评论认为指纹识别不属于严格必要的技术,需要用户同意才能进行,但目前还没有相关判例。
恶意 Rust crate arrayref 的构建脚本在编译时执行远程载荷
一行依赖的供应链攻击
2026 年 8 月 20 日,流行 crate arrayref 出现被攻破的版本。0.3.10 版新增了一个拼写仿冒 crate proc-macro1 依赖,其构建脚本会在项目编译时下载并运行远程二进制文件。crates.io 团队已移除恶意版本。
arrayref 只有四个宏,截至 0.3.9 没有构建脚本也没有运行时依赖。0.3.10 在 manifest 中加了一行 [dependencies.proc-macro1],Cargo 会构建所有声明的非可选依赖,无论代码是否实际用到。proc-macro1 的库代码是 proc-macro2 的机械重命名副本,正常构建时不易察觉。
恶意机制
恶意代码位于 proc-macro1 1.0.107 的构建脚本。服务器地址以 base64 片段存储,编译时拼接还原,解码后得到负载地址和命令控制地址。脚本通过一个接受任意证书、不做验证的 TLS 客户端下载与操作系统和架构对应的二进制文件,然后脱离构建进程运行。Unix 上写入并运行 /tmp/rust-setup;Windows 上写入 PowerShell 脚本和 VBScript 启动器,通过 wscript.exe 隐藏运行。源码注释说明,这样绕开 Cargo 的 job object,使子进程在构建结束后继续运行。整个过程没有功能开关或环境变量保护,在支持的四类平台(Linux x86_64、Windows x86_64、macOS x86_64、macOS aarch64)上每次构建都会执行。
传播路径
账号所有者把 0.3.5 到 0.3.9 全部 yank(撤回),Cargo 会提示开发者更新到未 yank 的版本,唯一非 yank 的版本就是恶意的 0.3.10。提交 RustSec 公告的举报者提到自己就是这样中招的。arrayref 作为传递依赖使用面很广,通过 tiny-skia、sctk-adwaita、winit 深入常见 Rust 依赖图,几乎所有基于 egui、eframe、iced 的 GUI 项目都会涉及。该 crate 累计下载约 2.45 亿次。
社区讨论
社区对 crates.io 的响应提出了批评:恶意版本从版本列表消失,没有留下任何标记,也没有安全公告。有人反驳说 crates.io 已在 2026 年 2 月更新过恶意 crate 处理流程,公告没有即时出现不代表组织失职。
构建脚本沙箱化是最集中的话题。支持者认为 Cargo 迫切需要沙箱,有评论建议默认拒绝网络访问和构建目录以外的写入。反对者指出,构建脚本常需要调用 C 编译器工具链,沙箱边界很难划;恶意代码也可以直接放进库代码本身,沙箱只是推迟问题。有人提出折中方案:依赖更新时若新增了构建脚本,应明确提示并让用户批准。Cargo 的 minimum release age(最低发布年龄)功能正在稳定化,预计随 Rust 1.100 落地,该功能会阻止依赖解析选择过新的版本。
不少评论把问题归因于 Rust 标准库过于精简,导致大量功能被推入第三方依赖。对比之下 Go 的标准库更完整,依赖卫生更好。反对意见认为大型标准库有长期维护成本:标准库无法做破坏性变更,容易积累过时组件;更可行的方案是维护官方支持的“受祝福” crate 集合。也有评论提到,用 LLM 扫描 crate 已能发现这类问题,本次攻击就是这样被发现的。
一圈是 1:代码里为什么用“圈”比弧度更好
弧度不好用的两个理由
2022 年 Casey Muratori 在《Computer, Enhance!》上发文主张:代码里应该用“圈”(turn)代替弧度表示角度。一圈是 1,半圈是 0.5,90 度是 0.25。他随手打开 Godot Engine 源码搜索“tau”,发现大量代码把本来范围就在 0 到 1 的周期变量乘以 tau(2π)再传给 sin。而很多快速三角函数库在入口处又会乘一个 4/pi 的常数做参数归约,等于调用方乘一个 π 让库立刻除掉。改用“圈”之后,调用方省掉一次乘法,库内部也能用更简单、更精确的常数。
弧度角除了 0 都难精确表示:90 度在弧度制下永远写不精确,在“圈”里就是 0.25,浮点尾数甚至不需要一位。把角度按一整圈归一化成 [0, 1] 是已有的数学构造,就叫 turn。
数学派反对:导数与欧拉公式
反对派的核心论点是微积分:弧度制下 sin 的导数是 cos,欧拉公式 e^{ix} = cos x + i sin x 也只在弧度制下成立;换成圈,所有导数和积分都会带上 2π 的转换因子。一位用户用“圈”重写欧拉公式得到 -1^{2x} = cost(x) + i*sint(x),但随即有人指出 (-1)^x 对非整数 x 定义本身就有歧义,绕不开复指数。
工程派支持:pico-8 与 BRAD
支持派认为,文章讨论的是把数学搬进代码,不是做数学研究。有人提到 pico-8 的三角函数本来就用圈,角度范围 0 到 1,用起来很顺手。还有人说自己在代码里存角度一直用圈,因为四分之一圈可以精确表示。Doom 时代用 16 位整数表示二进制角(BRAD),一圈 65536 份,溢出就是天然的取模;8 位游戏机时代用 0 到 255 表示一圈也很常见。
有评论区分了两件事:做微积分、解微分方程用弧度,写游戏引擎、图形渲染这类大量调用 sin/cos 的数值代码用圈反而更直接。弧度制在符号计算和理论推导里不可替代,但大多数工程代码并不是在求导。
标准库开始接纳
标准库之前没有圈为单位的三角函数,现在 C23 和 Fortran 2023 都加入了 sinpi/cospi 这类以半圈为单位的函数。角度单位的选择也取决于具体场景:炮兵用密位(mil),欧洲大陆习惯用百分度(gradian),工程计算常用度,数值库里用圈或二进制角。关键不是哪种单位绝对正确,而是不要在调用方和库之间反复乘除 π。
HTML 原生能力正在顶替 JavaScript
弹层、命令与锚点定位
Chris Burnell 在 HTML Day 2026 活动期间搭建了 "HTML Can Do That" 页面,列出纯 HTML 就能实现的动态功能。popover 属性配合 popovertarget,让按钮直接控制弹出层,支持点击外部关闭和 Esc 键关闭,不需要管理 z-index。<dialog> 元素提供原生模态对话框。新增的 command 与 commandfor 属性让独立按钮控制同一个弹出层。
有开发者表示,整个生产应用都在使用这些功能,对话框和弹出层渲染在浏览器顶层,嵌套弹出层自动堆叠并支持级联关闭。难点仍在把弹出层定位到触发按钮附近,CSS 锚点定位支持有限。也有开发者提到,大语言模型对这类新标准的训练数据极少,经常误判它们还不够成熟,AI 编程可能会让代码停留在旧时代的库和框架上。
折叠、懒加载与搜索展开
给一组 <details> 设置相同的 name 属性,它们就变成互斥手风琴,打开一个自动关闭其他。图片加 loading="lazy" 延迟加载,不需要交叉观察器。hidden="until-found" 让隐藏内容在被浏览器搜索命中时自动展开并高亮。多位评论者提到,可以用它实现可搜索的折叠内容、标签页内容,避免用户手动展开所有折叠区才能用 Ctrl+F 找到目标。
表单控件的现实短板
原生表单控件方面,颜色、日期、范围选择器都已内置。作者警告这些元素尚未完善,不同浏览器的默认样式差异大,无障碍体验差。<datalist> 提供原生自动补全建议,但多名评论者印证了它的短板:用户仍可输入任意内容,没有模糊过滤和拼写纠错。一位开发者说自己在纯 HTML 页面里为单个输入框引入了 React 组件,因为原生方案差距太大。还有人指出 Firefox 里 datalist 至今没反应。
日期输入格式引发讨论。用户希望强制使用 ISO 格式,因为操作系统语言与网页语言不一致时,原生日期格式会造成困惑。有开发者分享真实事故:设备设置为 dd/mm/yyyy 的用户的表单被系统按 mm/dd/yyyy 记录,8 月 4 日被记成了 4 月 8 日。
原生与反对声音
一位仍在使用 NoScript 的开发者说,这些 HTML 功能让他可以按站点逐个启用 JavaScript,大部分交互用 HTML 加一点 HTMX 就能完成,单页应用在多数场景并非必要。有用户希望 HTML 原生支持可排序表格,另一位回应说,只有字典序或数字排序才简单,复杂表格中排序数据和显示数据经常不同,有人提议加 sortkey 属性。
一位评论者回顾说,HTML 在 2026 年才开始做到 1996 年原生桌面 GUI 框架的大部分功能。参与过 Web 标准讨论的 esprehn 说,声明式命令 API 讨论了十多年,服务端渲染复兴让业界重新重视这些交互 API,但他认为日期选择器 API 是场灾难,旅行网站需要范围选择、日期高亮这类更丰富的功能。
反对声音也存在。有人问为什么又要接受弹出层,任何打断和遮挡内容的元素都会让人立刻离开。关于互斥手风琴,有评论引用尼尔森诺曼集团的研究:自动关闭已展开项会带来用户挫败感,应该让用户自己决定何时关闭。
125M 参数模型在 iPhone 上实时续写钢琴旋律
给钢琴配一个自动补全
作者花了近一年时间,把这个想法做成了免费 iOS 应用 RollTab:连接 MIDI 钢琴和 iPhone,弹奏几个音符,让 AI 实时续写旋律,类似 GitHub Copilot 补全代码。应用背后的模型是一个 125M 参数的 transformer(基于自注意力机制的神经网络架构),在 iPhone 15 上达到约每秒 108 个音符的处理速度,足够真人演奏使用。作者把这个项目比作“钢琴界的 GPT-2”。
复合音符 token 与 DPO
技术核心是 MIDI 的表示方式。最简单的是每个事件一个 token,但 note-on/note-off 风格会让小型实时模型“漂移”:忘记发送 note-off、留下悬空音符。作者最终采用复合音符 token:NOTE(pitch, delta_onset, duration, velocity),没有独立的 TIME_SHIFT 事件,休止由下一个音符的起始时间差表示,和弦编码为 delta=0、按音高排序的多个音符。这让模型每处理一个音符只需一次自回归步骤,速度提升约 5 倍。延音踏板不单独建模,而是在预处理时把踏板效果折算进音符时长。
数据集包含几十万份 MIDI 文件,约 3 亿个音符事件。作者发现清洗和筛选比堆数据量重要:把数据集扩到 5 倍后模型反而更差。DPO(直接偏好优化,用偏好对比来微调模型)是预训练之后提升最大的环节,偏好数据只有约 700 个样本,在单张 GPU 上训练了 12 分钟,69% 的续写比基础模型更受偏好。计划抽样也让力度和时长预测有时看到模型自己预测的音高而不是真实音高,验证损失上升了,生成质量却显著改善。
评估模型写的好不好
自动指标如重复音高 n-gram、音高熵、音域、音符密度等,能抓住明显错误但不足以选出最佳模型。最终用 Gemini 3.5 Flash 做两两比较,并把评分拆成两个维度:续写是否贴合提示、单独听是否好听。对比时交换 A/B 顺序以减少位置偏差,200 首曲子的测试中,70% 的情况评估器在反转顺序后给出相同偏好。
没有奏效的尝试包括:note-on/note-off 表示(模型漂移)、语法掩码 token 流(语法正确但慢)、更大但更嘈杂的数据集(效果更差)、Mirostat(减少重复但输出不连贯)、born-again 网络(无提升)。部署方面,模型导出到 Apple 的 Core ML 框架,权重做了 INT8(8 位整数)量化。
即兴演奏的传统
社区讨论把这件事放进了更长的历史脉络。有评论指出“自动续写”其实是古典作曲家训练的基础:Robert Gjerdingen 的 Gebrauchs-Formulas 文章讨论过这种模式识别与生成游戏,19 世纪末四位俄国作曲家(包括拉赫玛尼诺夫)曾在晚宴上玩过。贝多芬在一次即兴对决中,把对手 Steibelt 前一天偷用的三重奏主题乐谱倒放在钢琴上。浪漫主义之后,即兴传统逐渐让位于“写下的音符神圣不可侵犯”的标准。
一位古典钢琴家评论说,这个项目和众多 AI UX 设计工具处境相似:生成成本归零后,剩下的都是品味,而品味来自探索和淘汰死胡同。有用户实际试了应用,希望模型输出的 MIDI 能回传给演奏者的乐器,而不是只从 iPhone 扬声器播放。也有人提到 2003 年 François Pachet 的 Continuator 用分层马尔可夫模型做过类似的事。
一名评论者担心机器生成音符会夺走学习钢琴的乐趣。另一位回应说,作者找到了另一种乐趣来源,作者自己写得很清楚:“我想要自己想通问题的乐趣,而不是实现别人的研究。”还有听众表示,听到《致爱丽丝》开头后走向完全不同的方向,“令人意外地不安”。作者自己说,模型还远非完美:偶尔循环,短提示难处理,但他已经到达一个享受的状态,坐在钢琴前弹几个音符,看看和模型一起能写出什么。
别把 AI 的回答直接粘贴给对方
普通回答等于告诉对方不值得动脑
有人问了你一个真诚的问题。你把它丢进聊天机器人,复制答案,原样发回去。感觉很快,也像真的帮上了忙,其实没有。对方手里有你一样的工具。想要一段通用答案,他自己几秒钟就能从 AI 那里拿到。他来找你,要的是你的判断、你的上下文、你的口味。直接粘贴 AI 输出,等于告诉他:这件事不值得你动脑。
有评论者把这种人叫“肉代理”(meat proxy),意思是被 AI 操控、替 AI 传话的人。正常关系应当是你给 AI 指令、它干活;一旦变成 AI 给指令、你照做,就该警惕。
企业的 AI 使用原则
一位自称在 AI 赋能公司工作的人,刚亲手写完一份公司内部的 AI 使用原则,第一条是“用自己写”:公司付钱买的是你的专业能力和洞察。把 Claude 的回答原样粘贴到 Slack 或邮件里,是把理解和消化的负担转嫁给所有人,更糟的是你自己可能连理解这一步都省了。哪怕用 Claude 整理思路,最后落笔的也必须是你的手,而不是让 Claude 模仿你的语气,或“改得不像 AI”。他区分了场景:Slack 和邮件沟通基本都应自己写;提案、路线图这类长格式交付物用 agent 是正常的,但要遵循另一条原则 Own the Output(对产出自负其责)。
一个具体的例子说明了后果:有人的团队里,一名员工因为过度使用 AI 被解雇。此前任何反馈,那人的回应都是“大家都在用 AI,怎么会是坏事”。直到主管让他坐下来,把自己发出去的内容通读一遍,他才承认其中 90% 是幻觉和 AI 在填补空白。
锚定效应与四条建议
更深的担忧来自认知层面。有评论者提到,人脑存在锚定效应(anchoring effect,被先出现的立场强烈影响)。觉得“读了 AI 输出之后还能产生自己的想法”是一种傲慢;哪怕只是参考,AI 给出的方向也会在不知不觉中塑造你的表达。最坏的情况是:AI 成了你思考生活中那个“有海量信息却没有智慧”的邻居,而你习惯了复读它。
正确的用法是什么?原文给了四条建议:可以用 AI 当作起草工具,但一定要读一遍,然后写成自己的版本,再做修改;只取真正回答问题的部分,忽略其余,三句话往往就够;如果模型回答里确实有一块有用,引用并解释为什么;如果没有可补充的,直接说“我没有太强的意见”,沉默也是一种回答。
合理使用与提问者的责任
AI 辅助写作并非没有意义。一位有阅读障碍的评论者说,LLM 让他的句子拼写正确、语法正确,长文档的耗时从几周缩短到几天。另一种更保守的做法是自己先写,然后让 AI 只修正拼写和语法,明确告诉它不要改动结构和含义。争议在于,有人觉得只要文字经由 AI 生成,结构里就带着 AI 的骨架,改写并不能让它真正成为你的思考。
问题另一端的提问者也值得说。一位评论者观察到,有的提问者连基本的搜索和尝试都没有,就把问题丢进群聊,让整个团队替自己干活。他们团队把这种行为叫“远程执行大脑”。把试过什么、查到什么写进问题里,对方才更可能认真回答你。
Swartz 因爬取被起诉,Meta 下载 80TB 书籍却只面对民事纠纷
两个爬取故事的落差
Aaron Swartz 是 RSS 协议的联合创始人之一,也参与过知识共享等开放项目。2011 年,他在 MIT 校园内用脚本批量下载 JSTOR 上的学术论文,总量约 70GB。联邦政府随后以《计算机欺诈与滥用法》(CFAA,Computer Fraud and Abuse Act) 和电信欺诈等罪名起诉他,指控最高可累计 35 年刑期、100 万美元罚款并没收财产。Swartz 在案件审理期间结束了自己的生命,年仅 26 岁。
十多年后,Meta 被曝光用 BitTorrent(点对点下载协议)下载了超过 80TB 的盗版书籍,用于训练 AI 模型。出版商发起的民事诉讼还在进行,但 Meta 大概率只会在财务上受到一点擦伤,模型照常赚钱。
“35 年”是谈判筹码
HN 社区讨论中最有力的声音在补充事实,也在质疑这个对比的简化。Swartz 案的“35 年”是法定最高刑期,不是实际量刑预期。检方给出的认罪协议是 6 个月监禁,Swartz 拒绝了。他的辩护律师在他去世后写道,即使案件败诉,Swartz 也很可能不会真的入狱。另一个常被忽略的细节是:Swartz 不是简单地爬取公开网页,他在数月内多次进入 MIT 的一间机房,接入网络下载论文,并更换 MAC 地址躲避管理员的封禁。MIT 最终安装了摄像头,联系了联邦调查局和特勤局。
这些细节没有让评论者得出“起诉合理”的结论。多数人认为核心问题是选择性执法。JSTOR 在与 Swartz 达成民事和解后已不再追究,是马萨诸塞州联邦检察官 Carmen Ortiz 坚持推进刑事起诉。有评论者说,检方报出耸人听闻的最高刑期,本身就是为了压迫被告放弃陪审团审判,这正是认罪协议机制的运作方式。一位坐过牢的评论者写道,他无法想象面对一年刑期的感受,更不用说五年,“这种不人道的量刑威胁,就是用来取消我们的陪审团审判权的。”
选择性执法与制度困境
有人提出一个制度设想:如果被告能证明检方选择性执法,相关法律就应当被废除;要么起诉所有人,要么谁都别想被起诉。反对意见认为,这会成为大企业的一件新武器:故意违法,然后迫使政府放宽法律。一条高赞评论写道:“对圈内人,法律只保护不约束;对圈外人,法律只约束不保护。”
一位自称认识 Swartz 的评论者留下了一段个人回忆:他当时是“一个聪明而破碎的孩子”,心理状态已经很脆弱,却被年长的有权势者利用去推进各种议程。“所有机构都沾着他的血。让这个孩子安息吧。”
爬取本身是否该是犯罪
最核心的对比仍然成立:Swartz 下载论文是为了传播和存档知识,Meta 下载书籍是为了训练专有的 AI 模型,给最富有的人创造利润。两者数据量相差约一千倍,法律后果却完全颠倒。有人套用“大到不能倒”的说法概括:小人物爬取是犯罪,大公司爬取是生意。也有人提出另一种解法:正确的方向不是让 Meta 也受罚,而是让爬取本身不再成为犯罪。“最好的状态是,Aaron、Meta、任何人都不会因为爬取而被起诉。”
Windows 95 包装盒上的“裸体婴儿”全息图
被投诉的全息图
Windows 95 的包装盒侧面有一枚防伪全息图,摄影师用自己的婴儿儿子做模特,因为人脸很难被精确复制。婴儿坐在电脑旁,转动全息图时他的手臂会抬起指向屏幕,屏幕迸出 Windows 95 标志。这个设计本来很可爱,直到某个政府(名字因显而易见的原因被隐去)投诉 Windows 95 描绘了裸体儿童。婴儿只露出了腰部以上,没穿衬衫,但投诉方认定他肯定也没穿裤子。微软为此赶制了新全息图,给婴儿穿上衬衫和背带裤,但匆忙之中去掉了手臂动画。所以如果你手里还有 Windows 95 包装盒,检查一下全息图:婴儿没穿衬衫的就是真·收藏品。Raymond Chen 在 2003 年的这篇博客里说,自己见过“裸体婴儿”版本,但自己的那套是穿衣服的。
Windows XP 也遭遇过类似的罗夏测试(Rorschach test,墨迹测验,用来观察人如何投射自己的想象)。默认壁纸 Red Moon Desert 被说像一对屁股;用户账户控制面板里的一个通用人物形象被说像希特勒;另一个政府声称 Switch Users 对话框里的卡通形象像不雅身体部位。这些都改了。作者评论说,这让人怀疑测试者的精神状态。
罗夏测试不是微软专属
评论区有不少人拿出类似的例子。有人提到早年 Ubuntu 的壁纸,一位父亲觉得桌面上的“骷髅头”很别扭,后来发现那其实是 “Intrepid Ibex”版本(8.10)的咖啡渍壁纸,但认出骷髅头之后很多人表示“回不去了”。还有人提到 FreeBSD 的恶魔标志被酒店客人当成撒旦崇拜,酒店老板因为客人威胁退房而要求移除登录页上的 “Powered by FreeBSD”标识。更早的案例是 1989 年 SimCity 的原版包装:封面上的怪兽被媒体称为“哥斯拉”,结果东宝(Toho)公司以“市场混淆”为由起诉 Maxis,Maxis 支付了 5 万美元庭外和解,封面上的怪兽也被换成了龙卷风。Maxis 联合创始人 Jeff Braun 在 2024 年的一封邮件里确认了这个数字。
也有评论者指出,这类敏感从来不是某一代人的专利,有人举了 Nirvana《Nevermind》专辑封面婴儿被审查的例子,并引用塞缪尔·约翰逊的故事:他把粗俗词从词典里删掉后,被祝贺说删得好,约翰逊回答:“我祝贺你能查得出来。”
批评者的相反声音
也有评论把矛头指向微软更现实的问题:Windows 11 强制要求登录微软账号、预装垃圾软件、默认把开始菜单搜索送去 Bing、遥测收集私人信息、文件资源管理器挂起、Windows 8 的灾难性 UI,以及 200 美元的操作系统连 HEVC 解码支持都要单独收费。还有人分享了自己从 Windows 切换到 Linux 的经历,提到同一款游戏在 Windows 上频繁崩溃,换到“本不该兼容”的 Linux 上反而稳定。这些批评者认为,这篇文章把微软塑造成“被误解的工匠”是一种转移视线,Windows 的真实问题远不止包装上的误会。
对于“什么都像某种东西”的反应,也有评论持相反态度:有人觉得微软不该因为投诉就更改一切,那样只会让设计变成“廉价的白色粥”;也有人觉得,向一家政府妥协是务实之举,但如果把每个疯子的反馈都当真,设计就没办法做了。
小坂学的纸雕:手工堆叠出固体质感的日常物品
像照片一样的纸雕
小坂学(Manabu Kosaka)用纸手工制作雕塑,把日常物品变成精确的立体形态。每件作品都完全由手工完成,通过切割、塑形、组装细小部件,经过长时间重复与精确操作,让纸张逐渐变成带有固体质感的细节物体。网站展示了作品 #256 [BCL Radio],2022 年,纸制,尺寸 220 × 180 × 70 mm(可变),以及多张局部照片。
Hacker News 评论者对作品感到难以置信。一位用户说,如果不知道材质,会以为那是 Big Mac 和鞋子的黑白照片。另一位原本以为用了某种纸张压缩技术,后来发现所有部分都是切割出来,再像手工 3D 打印一样逐层堆叠、粘合。作品包含极小字体的排版细节。
制作过程与延伸想象
艺术家在 X(Twitter)上每天发布制作过程视频,YouTube 上有更长的制作影片,比如一支制作 PlayStation 2 的视频。关于粘合剂,有评论猜测可能是小麦浆糊或米浆,但从视频里看不出涂胶的过程。还有评论联想到小时候用回收纸制浆做再生纸的经历,提议能否造一台用纸浆直接打印物体的 3D 打印机;另一个人回应说纸纤维不规则,容易堵塞细小的出料管,而且干燥时间会明显变长。
好作品的厚度:为什么有些书值得反复细读
在《人间乐园》前走不动路
作者亚当·马斯特罗安尼在《Experimental History》上向他的英语老师们道歉。他上学时认定所谓“伟大文学”是骗局,是学校强加给年轻人的惩罚。后来他发现自己错了:确实存在伟大这种东西,更准确地说,存在“厚度”(thickness)。伟大的作品会回应你的注意力,你投入的时间越多,得到的就越多。这种特质让人上瘾,甚至会驱使人去做教高中生文学这种苦差事。
作者是在普拉多博物馆的《人间乐园》面前体验到厚度的。这幅 500 年前的博斯三联画像每个角落都塞满怪诞场景。画里有个裸男的屁股上印着乐谱。2012 年,一位叫 Amelia Hamrick 的学生把这段“屁股音乐”抄下来录了音,发到博客上走红。但研究中世纪音乐的专家 Ian Pittman 指出,这段乐谱根本不是音乐:没有谱号,音符间距随意,其中一条谱线数量都不同。博斯是故意画一段不能演奏的音乐,因为在15世纪的观念里,世俗音乐是通往地狱的单程票。画里众多音乐家正被折磨:有人被困在被浣熊恶魔敲打的鼓里,有人被钉在竖琴上。所以画在屁股上的不是秘密彩蛋,而是警告。
四种“增厚剂”
作者提出四种“增厚剂”。第一,未走的路。葛饰北斋画了四版神奈川冲浪里,33 岁、44 岁、46 岁、72 岁各一版,废弃的手法和想法堆得比成品还高。第二,蛋糕粉里留个鸡蛋。Betty Crocker 公司本可以把鸡蛋粉混进蛋糕粉,但他们不这么做,因为敲鸡蛋能让使用者假装自己在烘焙。厚艺术也留给你一个鸡蛋,真正的事情发生在你的脑子而不是画面或纸面上。例如 Graeme Base 的童书《第十一个小时》,读到结尾你才发现一桩罪行一直发生在你眼前,线索藏在前面所有插画细节里,真正的体验是带着答案重读。第三,理由。为什么是这个词、这个场景、这个人物?薄艺术没有答案,厚艺术有。《哈姆雷特》里到处都是耳朵:耳朵里下毒、偷听、劝人倾听。莎士比亚是否有意为之不重要,这些反复出现的意象制造出能感受到的深度。第四,血祭。人类终有一死,创作付出的人生成本越高,作品可能越厚。大都会修道院博物馆里那些 15 世纪的木质祭坛画,观者能下意识计算雕刻所耗的时间。魔术师佩恩和泰勒的吃火表演也一样,佩恩在吞火前说,没有技巧能保护吃火者,他们会烫伤、中毒、得“吞火者肺炎”。看人吞火就是看人为了娱乐你缩短自己的寿命。
薄艺术与厚非虚构
作者用“自行车形物体”来解释薄的本质。便宜材料和敷衍工艺造出的东西有座椅、踏板、轮子,但不是真正的自行车。同样有电影形物体、书形物体、艺术形物体。他举了一本朋友发来的自助书,里面说“你生来就能在压力下表现出色”,“提醒自己在压力下表现会改善实际表现 33%”。他查了原文,找不到这个 33%;所谓“表现”主要来自多选题实验,却被推广成普遍结论。这种书像波将金村,任何想法一碰就倒。
对比之下,简·雅各布斯《美国大城市的死与生》是厚非虚构的典范。她写道,纽约上百老汇的长椅摆在混凝土缓冲带后面,天气稍微能忍受的日子就坐满人,人们看过路的行人、看车流、看彼此;而哥伦比亚大学附近街道安静、行人有序,长椅却空荡荡。雅各布斯说她试坐过,再也找不到比那更无聊的地方。作者曾经就住在那个“曼哈顿死区”,说不清哪里不对劲,读雅各布斯才明白。
社区体验:金庸与罗斯科
HN 讨论里,不少读者分享了自己的“厚度”体验。一位叫 hibikir 的用户说,普拉多博物馆曾困住过一个美国博士生,他原本要飞往希腊研究古希腊艺术,途中在马德里停留,看到馆里无数杰作后改了方向,留在马德里教书直到退休。另一位用户 jameshart 说,逛画廊的正确方式就是走一圈,直到某件作品击中你,他没想到一面墙大的罗斯科画作会让他动弹不得。评论者 exmadscientist 说,分析“为什么是这个不是那个”是他所知最强有力的深度思考工具,他还会用“这本书是本月之书还是十年之书”来取代星级评分。
关于高中该不该读经典,评论区立场不一。lordnacho 认为艺术和人文学科放在错误的人生阶段,青少年缺乏历史背景和生活经验。serbuvlad 反驳说书本身就提供背景,罗马尼亚高中生读《离子》就能理解农民对土地的执念。RealityVoid 承认对十几岁的人来说很少能真正共鸣,但承认这为将来埋下种子。
莎士比亚的讨论里,很多人说在课堂上念剧本毫无意义,直到看了演出才明白。评论者 Alephinitesimal 给出了一个有力的例子:金庸的武侠小说小时候当翻页小说读,工作后在现实里遇到像慕容复那样为了野心牺牲身边所有人的人,再回头看,发现书没变,变的是读者的阅历。这恰好就是厚度。
播客全文
女:Hello 大家好,欢迎收听 Agili 的 Hacker Podcast,我是莓莓。
男:大家好,我是阿迪。
女:今天聊的话题有点杂,但都围绕一件事:技术替我们做了很多决定,但那些决定不一定对。
男:从浏览器到钢琴,从艺术到法律,确实都碰上了这个主题。
女:先说一个我这两天遇到的怪事。我朋友说他的耳机出了问题——电脑连着蓝牙耳机,但只要打开 AliExpress 页面,耳机就切到电脑的音频通道,手机上的音乐放不出来了。他以为是系统 bug,查了半天才发现是网页在后台搞鬼。
男:这个我看到了,有人在 Hacker News 上写了调查。AliExpress 网页端跑着一个静默的 WebAudio 指纹识别脚本。它会生成一段不间断的静音音频流,你的蓝牙耳机就这样被一直占用着。最坑的是,Windows 系统根本不会把这条静音流识别成“正在播放的音频”,用户无从下手。
女:所以它不是真的一点声音都没有?
男:对,它生成的是锯齿波信号,经过浏览器的音频处理链再分析输出结果。不同设备、声卡、蓝牙编解码器都会让这个信号产生细微差异,比如模拟输出的带宽和蓝牙耳机的带宽不一样,这些差异就成了设备指纹的一个数据点。浏览器把这个指纹和屏幕尺寸、视口、插件列表等信息拼在一起,就能持续追踪你。
女:那它为什么要一直运行?按理说采集一次指纹就够了吧。
男:这确实奇怪,脚本在页面加载数秒后才开始跑,然后一直不停止。作者推测可能是在持续更新或验证指纹。这不是第一次有网站这么干,Cloudflare 的验证挑战也会调用 WebAudio,但不会占着音频流不放。eBay 之前被曝出用 WebSocket 扫描访客本地端口,Reddit 也滥用过 DRM 和 JavaScript JIT 漏洞做后台检测。
女:受影响的只有耳机用户吗?
男:不只是耳机。有位助听器佩戴者发现,打开 AliExpress 网页时环境声音的放大效果会突然改变,因为蓝牙连接建立后助听器会自动调整混音设置。还有人说只要标签页开着,电脑温度就轻微上升,浏览器一直在做音频计算。美国运通的登录页也干过类似的事,它轮询 Web 蓝牙功能,导致 MacBook Pro 的鼠标每隔几秒卡顿一次,关掉蓝牙才能解决。
女:那中国这边的应用呢?听说有些 App 也会用静音音频维持后台。
男:对,不少移动应用靠这个保活,目的是满足活跃用户指标。这个问题其实挺大的:浏览器把 WebUSB、WebRTC 这些底层能力都暴露给了 JavaScript,用户几乎没法控制。
女:Firefox 用户有没有什么办法?
男:可以。Firefox 的自动播放权限能按域名阻止音频,uBlock Origin 加两条自定义过滤器也能屏蔽相关脚本,论坛上有现成规则。作者试过把规则提交给 uBlock Origin 官方列表,但对方不感兴趣。有人建议浏览器应该像对待摄像头一样对待音频输出,弹权限提示,或者至少在标签页显示扬声器图标。Firefox 其实有音频图标,但这条静音流也会触发它。
女:你提到这是指纹识别,那 GDPR 不是应该管管吗?
男:很多人也在讨论这个。指纹识别不属于严格必要的技术,理论上需要用户同意才能做。但目前还没有相关判例,所以 AliExpress 还在继续。
女:这让我想到另一件事。前阵子一个朋友问我专业意见,我随手丢进 ChatGPT,拿到答案直接复制粘贴发了回去。当时觉得挺高效,后来想想特别心虚。
男:你说的正好是 Hacker News 上那篇讨论“肉代理”的文章,英文叫 meat proxy,意思是人被 AI 操控、替 AI 传话。你问一个人类,要的是他的判断、上下文和口味。对方手里也有一样的工具,想要通用答案自己几秒钟就能拿到。直接粘贴 AI 输出,等于告诉对方:这件事不值得我动脑。
女:这篇文章里有个很犀利的说法,“把理解和消化的负担转嫁给所有人”。我读到这句的时候愣住了。
男:有位自称在 AI 赋能公司工作的人,刚写完公司内部 AI 使用原则,第一条是“用自己写”。公司付钱买的是你的专业能力,不是 Claude 的能力。哪怕用 AI 整理思路,最后落笔的也必须是你的手。有人补充了信任层面:你问一个人,如果他不花时间验证 AI 答案,那就等于没有判断力,几次之后他说的话都得被怀疑。
女:文章里还有个具体例子,说有员工因为过度使用 AI 被解雇了?
男:对。那员工的反馈都是“大家都在用 AI,怎么会是坏事”,直到主管让他把自己发出去的内容通读一遍,他承认其中 90% 是幻觉和 AI 在填补空白。
女:那正确的用法是什么?总不能用都不让用吧。
男:文章给了几条建议:可以用 AI 当起草工具,但一定要读一遍,改写成自己的版本;只取真正能回答问题的部分,三句话往往就够;如果某一块确实好,就引用来解释为什么;没有可补充的直接说“我没有太强的意见”。有位有阅读障碍的评论者说,LLM 让他的句子拼写正确、语法正确,长文档耗时从几周缩短到几天。也有一种保守做法:自己先写,再让 AI 只改拼写和语法,不动结构和含义。
女:我听到一个更深层的担心是锚定效应。读了 AI 输出之后,你很难再产生真正自己的想法。
男:对,有人说得挺狠,说 AI 成了你思考生活中那个“有海量信息却没有智慧”的邻居,而你习惯了复读它。
女:有时候提问的人也有问题。有人把连基本搜索都不做的提问丢进群聊,评论区管这叫“远程执行大脑”。我觉得把试过什么、查到什么写进问题里,对方才更愿意认真回答。
男:这个说法挺有意思,正好我们今天聊的很多工具和技术,某种意义上也是“远程执行”。说到这个,我们换个话题轻松一下。阿迪,你知道角度除了用度、弧度,还有什么单位吗?
男:有一种叫“圈”(turn)的单位,一圈等于 1,半圈 0.5,90 度就是 0.25。
女:这个比弧度好理解多了。那为什么我们平时都用弧度和度?
男:2022 年有个叫 Casey Muratori 的程序员写了篇文章,主张代码里应该用“圈”代替弧度。他随手打开 Godot Engine 的源码找 tau(2π),发现大量代码把本来范围就在 0 到 1 的周期变量乘以 tau 再传给 sin。而很多快速三角函数库在入口处又会乘一个 4/pi 的常数做参数归约,相当于调用方乘一个 π,库立刻除掉。改用“圈”之后,调用方省掉一次乘法,库内部也能用更简单、更精确的常数。
女:弧度制下 90 度确实写不精确,是π/2,浮点数表示会有误差。但在“圈”里就是 0.25,尾数都不需要动。
男:对。但反对派的观点也站得住:微积分公式在弧度制下最漂亮,sin 的导数是 cos,欧拉公式 e^{ix} = cos x + i sin x 也只在弧度制下成立。换到“圈”,导数和积分都带上 2π 因子。有人用“圈”重写欧拉公式得到 -1^{2x} = cost(x) + i sint(x),结果有人指出 (-1)^x 对非整数 x 的定义本身就有歧义,绕不开复指数。
女:那这篇文章吵了半天,到底谁对?
男:评论区有人把两者分开了:做微积分、解微分方程用弧度;写游戏引擎、图形渲染这类大量调用 sin/cos 的数值代码用“圈”更直接。标准库现在也正往这个方向走,C23 和 Fortran 2023 加入了 sinpi/cospi 这类以半圈为单位的函数。还有人说 pico-8 的三角函数本来就用圈,范围 0 到 1,用起来很顺手。Doom 时代用 16 位整数表示二进制角,一圈 65536 份,溢出就是天然的取模。关键不是哪种单位绝对正确,而是不要在调用方和库之间反复乘除 π。
女:我最近刚补了纸雕塑家小坂学的作品,差点以为那是黑白照片。他用手工纸做出了一台台电器、鞋子、食品包装,细节精细得吓人。
男:对,Hacker News 评论区很多人第一反应也是“这怎么可能是纸”。他的每件作品都是切割、塑形、组装出来的,像手工 3D 打印一样逐层堆叠、粘合。评论里提到他在 X 上每天发布制作过程视频,YouTube 上有制作 PlayStation 2 的长片。有段定格画面显示他在雕刻鞋面的立体形状。
女:他用的是什么胶水?
男:有人猜小麦浆糊或米浆,但从视频里看不出涂胶过程。还有人联想到小时候用纸浆制浆做再生纸,提议造一台用纸浆直接打印物体的 3D 打印机。另一个人回应说纸纤维不规则,容易堵塞出料管,干燥时间也会变长。
女:这种手工精度让我想起一个完全不同的故事。你知道吗,Windows 95 的包装盒侧面有一枚防伪全息图,里面的婴儿是摄影师自己的孩子,转动全息图时婴儿的手臂会抬起来指向屏幕。后来有政府投诉它描绘了裸体儿童,微软赶紧重新做了全息图,给婴儿穿上衬衫和背带裤,但匆忙中把手臂动画删掉了。所以现在如果你有一盒没穿衬衫的 Windows 95,那是收藏品。
男:Raymond Chen 在 2003 年那篇博客里说了这个故事。Windows XP 也遇到过类似的申美事故——Red Moon Desert 壁纸被说像屁股,用户账户面板里一个卡通形象被说像希特勒,Switch Users 对话框里的形象也被投诉过。作者抱怨说,这让人怀疑投诉者的精神状态。
女:评论区还有不少类似的例子。早年 Ubuntu 的咖啡渍壁纸被老爸当成骷髅头,认出之后回不去了。FreeBSD 的恶魔标志被当成撒旦崇拜,酒店老板威胁要移除“Powered by FreeBSD”的标识。最早期的是 1989 年 SimCity 原版包装,封面怪兽被媒体叫做“哥斯拉”,东宝公司以市场混淆起诉 Maxis,Maxis 付了 5 万美元庭外和解,封面换成龙卷风。
男:也有人说,这种“什么都能看出问题”的敏感从来不是某一代人的专利。Nirvana《Nevermind》封面婴儿被审查是同一个模式。塞缪尔·约翰逊把粗俗词从词典里删掉后被人祝贺,他回答“我祝贺你能查得出来”。
女:不过评论区也有相反的声音,觉得微软不该因为投诉就妥协,那样设计会变成“廉价的白色粥”。但向政府妥协是务实之举,如果把每个疯子的反馈都当真,设计就做不下去了。
男:说到设计,最近有个叫 Chris Burnell 的开发者做了一个“HTML Can Do That”页面,展示纯 HTML 就能实现的动态功能。看起来浏览器这几年悄悄升级了不少东西。
女:比如?
男:popover 属性加 popovertarget,让按钮直接控制弹出层,支持点击外部关闭和 Esc 键关闭,不用管 z-index。dialog 元素提供原生模态对话框。给一组 details 设置相同的 name 属性,它们就变成互斥手风琴,打开一个自动关闭其他。图片加 loading="lazy" 就能延迟加载,不需要 IntersectionObserver。hidden="until-found" 让隐藏内容在被浏览器搜索命中时自动展开并高亮。
女:这个 for 查找挺有用,之前想 Ctrl+F 找内容,折叠区里的全搜不到。
男:是。新加的命令 API 也挺有意思,command 和 commandfor 属性让独立按钮控制同一个弹出层。有人负责整个生产应用都在用这些功能,对话框和弹出层渲染在浏览器顶层,嵌套弹出层自动堆叠并支持级联关闭,标准设计得很好。难点仍在把弹出层定位到触发按钮附近,CSS 锚点定位支持有限。有人分享 top: anchor(bottom) 可以直接定位到按钮下方。
女:那它有什么坑?
男:原生表单控件是重灾区。颜色、日期、范围选择器虽然内置了,但不同浏览器默认样式差异大,无障碍体验差,作者都警告要谨慎。datalist 提供原生的自动补全,但用户仍可输入任意内容,没有模糊过滤和拼写纠错。有开发者说自己在纯 HTML 页面里为单个输入框引入了 React 组件,因为原生方案差距太大。Firefox 里 datalist 至今没反应。
女:日期格式那个真实事故你有印象吗?设备设置为 dd/mm/yyyy 的用户表单被系统按 mm/dd/yyyy 记录,8 月 4 日被记成了 4 月 8 日。
男:对对,这个例子评论区传得很广。有用户希望强制使用 ISO 格式,因为操作系统语言和网页语言不一致时,原生日期格式会让人困惑。
女:那位还在用 NoScript 的开发者说得挺有道理:这些 HTML 功能让他可以按站点逐个启用 JavaScript,大部分交互用 HTML 加一点 HTMX 就能完成,单页应用不是万能的。还有人说服务端渲染配合 View Transition API 效果也很好。
男:也有人提出希望 HTML 原生支持可排序表格,但评论区的回应是:简单排序听着容易,排序数据和显示数据经常不同,大多数 JavaScript 表格同样做不对。有人提议加 sortkey 属性,类似 option 的 value 属性。
女:有意思的是,大语言模型对这类新标准训练数据极少,经常误判它们不够成熟。
男:这是个好观点,AI 编程可能会让代码停在旧时代的库和框架里。参与过 Web 标准讨论的 esprehn 说,声明式命令 API 讨论了十多年,服务端渲染复兴让业界重新重视这些交互 API。但他认为日期选择器 API 是场灾难,旅行网站需要范围选择、日期高亮这类更丰富的功能。
女:也有反对声,有人问为什么又要接受弹出层,任何打断和遮挡内容的元素都会让人立刻离开。关于互斥手风琴,尼尔森诺曼集团的研究说自动关闭已展开项会带来挫败感,应该让用户自己决定何时关闭。
男:普通用户真的能感觉到这些差异吗?
女:能。就像那个耳机事件,普通人感知到的不是音频指纹,而是蓝牙耳机为什么突然不响了。技术选择落到用户头上,就成了体验问题。
男:说到体验,你听说了吗?Rust 生态出了个安全事件。arrayref 这个库,只有四个宏,一直被广泛依赖。
女:嗯?arrayref 是做什么的?
男:它提供在切片上引用固定长度数组的宏。因为太轻量,很多库把它当传递依赖用,累计下载约 2.45 亿次。2026 年 8 月,有人在维护者账号疑似被入侵的情况下发布了 0.3.10 版,新依赖拼写仿冒 crate proc-macro1,其构建脚本会在编译时下载并运行远程二进制文件。
女:等下,构建脚本?它不是只声明依赖吗?
男:Cargo 会构建所有声明的非可选依赖,无论代码是否实际用到。proc-macro1 的 src 目录是 proc-macro2 的机械重命名副本,库代码真实可用,正常构建时不易察觉。恶意代码在构建脚本里:服务器地址以 base64 片段存储,编译时拼接还原,解码后得到负载地址。脚本通过一个接受任意证书、不做任何验证的 TLS 客户端下载二进制文件,然后脱离构建进程运行。Unix 上写入并运行 /tmp/rust-setup,Windows 上写 PowerShell 脚本和 VBScript 启动器,通过 wscript.exe 隐藏运行。整个过程没有功能开关或环境变量保护,在支持的平台上每次构建都会执行。
女:这也太隐蔽了。它怎么传播的?
男:账号所有者把 0.3.5 到 0.3.9 全部 yank。Cargo 会提示开发者更新到未 yank 的版本,而唯一非 yank 的就是恶意的 0.3.10。提交 RustSec 公告的人就是这么中招的。arrayref 作为传递依赖,通过 tiny-skia、sctk-adwaita、winit 深入常见 Rust 依赖图,几乎所有基于 egui、eframe、iced 的 GUI 项目都会碰到。
女:社区反应怎么样?
男:批评集中在 crates.io 的处理:恶意版本从版本列表消失,没有留下任何标记,也没有安全公告。有人说 yank 后 Cargo 仍可通过 lockfile 下载该版本,对已攻破的 crate 应该删除而不是 yank,版本页应明确显示删除状态并附公告链接。也有人反驳说 crates.io 已在 2026 年 2 月更新过恶意 crate 处理流程,公告没有即时出现不代表组织失职。
女:有解决方案吗?
男:讨论最多的是构建脚本沙箱化。支持者认为 Cargo 默认拒绝网络访问和构建目录以外的写入不会破坏大多数构建;反对者说构建脚本常需要调用 C 编译器工具链,沙箱边界很难划,而且恶意代码可以直接放进库代码里,编译产物运行时照样执行,沙箱只是把问题推迟。折中方案是依赖更新时新增构建脚本要明确提示用户批准。Cargo 的 minimum release age 功能正在稳定化,会阻止依赖解析选择过新的版本,预计随 Rust 1.100 落地。
女:为什么 Rust 生态这么容易受影响?是不是标准库太精简了?
男:很多评论正是这么归因的。arrayref 这种只有四个宏的小包也被广泛依赖,就是因为标准库里没有现成等价功能。对比之下 Go 的标准库更完整,依赖卫生更好。但反对意见说大型标准库有长期维护成本,标准库无法做破坏性变更,容易积累过时组件。更可行的方案是维护官方支持的“受祝福” crate 集合,或者把 once_cell 这类广泛使用的 crate 收编进标准库。也有人提到,用 LLM 扫描 crate 已经能发现这类问题,本次攻击就是这样被发现的。
女:这让我想起 Aaron Swartz。他下载 JSTOR 论文被起诉的时候,是 2011 年吧?
男:对,2011 年。Swartz 在 MIT 校园内用脚本批量下载学术论文,总共约 70GB。联邦政府以计算机欺诈与滥用法等罪名起诉他,检方列出的指控最高可累计 35 年刑期、100 万美元罚款。他后来结束了自己的生命,26 岁。
女:那 Meta 现在做的事,性质不也一样吗?
男:Meta 被曝光用 BitTorrent 下载了超过 80TB 的盗版书籍用于训练 AI 模型,是同一台设备上数据量的一千多倍。但它大概率只会在财务上受一点擦伤,模型照常赚钱。评论区最核心的对比就是:小人物爬取是犯罪,大公司爬取是生意。
女:但有人指出这个对比太简化了。Swartz 案里的“35 年”是法定最高刑期,不是实际量刑预期,检方给出的认罪协议是 6 个月监禁,Swartz 拒绝了。
男:对,他的辩护律师在他去世后写道,即使案件败诉,Swartz 也很可能不会真的入狱。还有细节:Swartz 不是简单爬取公开网页,他在数月内多次进入 MIT 的一间机房,接入网络下载论文,并更换 MAC 地址躲避封禁。
女:这些细节改变了案件的性质吗?
男:没有让评论者得出“起诉合理”的结论。多数人认为核心问题是选择性执法。JSTOR 在与 Swartz 达成民事和解后已不再追究,是马萨诸塞州联邦检察官 Carmen Ortiz 坚持推进刑事起诉。检方报出耸人听闻的最高刑期,本身就是为了压迫被告放弃陪审团审判,这正是认罪协议机制的运作方式。
女:有个评论让我印象深刻:对圈内人,法律只保护不约束;对圈外人,法律只约束不保护。
男:有位自称认识 Swartz 的评论者留下一段个人记忆:他当时是“一个聪明而破碎的孩子”,心理状态已经很脆弱,却被年长的有权势者利用去推进各种议程。所有机构都沾着他的血。
女:那“正确”的方向是什么?让 Meta 也受罚?
男:有评论提出另一种解法:正确的方向不是让 Meta 也受罚,而是让爬取本身不再成为犯罪。最好的状态是 Aaron、Meta、任何人都不会因为爬取而被起诉。
女:这种“爬取”的话题让我想到另一个东西:AI 音乐。最近有人做了个应用,用 MIDI 钢琴连手机,弹几个音符,让 AI 实时续写旋律,有点像 GitHub Copilot 补全代码。
男:你说的是 RollTab,作者花了近一年做成免费 iOS 应用。背后的模型是 125M 参数的 transformer,在 iPhone 15 上每秒能处理约 108 个音符,够真人演奏。它经历过 14 轮实验。
女:技术上最难的部分是什么?
男:MIDI 的表示方式。MIDI 文件存的是事件序列——按键、释放、延音踏板状态变化——不是录音。最直接的做法是每个事件一个 token,但 note-on/note-off 风格会让小型实时模型“漂移”:忘记发送 note-off、留下悬空音符。作者最终用了复合音符 token,每个音符是一次自回归步骤,不用为音高、时间、力度、时长各跑一次,速度提升了约 5 倍。延音踏板不单独建模,而是在预处理时折算进音符时长。
女:数据集呢?有多大?
男:几十万份 MIDI 文件,约 3 亿个音符事件。有趣的是,把数据集扩到 5 倍后模型反而更差,清洗和筛选比堆数据量重要。数据增强包括全局移调、速度缩放、力度和时长抖动、随机丢弃提示音符,用来模拟真实弹奏的不精确。
女:这次训练里最重要的改进是什么?
男:DPO,直接偏好优化,是预训练之后提升最大的环节。偏好数据只有约 700 个样本,在单张 GPU 上训练了 12 分钟。β=0.03 加上只保留评估器一致同意的“共识”数据集效果最好,69% 的续写比基础模型更受偏好。还有个细节:训练时让力度和时长预测有时看到模型自己预测的音高而不是真实音高,虽然验证损失上升,生成质量却显著改善。
女:评估呢?怎么判断好不好听?
男:自动指标能抓明显错误但不足以选模型。作者最终用 Gemini 3.5 Flash 做两两比较,评分拆成两个维度:续写是否贴合提示、单独听是否好听。镜像交换 A/B 顺序减少位置偏差,200 首曲子里有 70% 是评估器在反转顺序后给出相同偏好。
女:有什么没奏效的尝试?
男:note-on/note-off 表示会让模型漂移;语法掩码 token 流语法正确但慢;更大但更嘈杂的数据集效果更差;Mirostat 减少重复但输出不连贯;born-again 网络无提升;单独看验证损失会遗漏生成质量差异。
女:社区讨论里最有趣的是什么?
男:有人指出“自动续写”本来是古典作曲家训练的基础。Robert Gjerdingen 讨论过这种模式识别与生成游戏,19 世纪末四位俄国作曲家包括拉赫玛尼诺夫在晚宴上玩过。贝多芬在一次即兴对决中,把对手 Steibelt 前一天偷用的三重奏主题乐谱倒放,用一根手指敲出主题再即兴演奏,Steibelt 羞愧离场。浪漫主义之后,即兴传统才逐渐让位于“写下的音符神圣不可侵犯”的标准。
女:有人担心这会让学钢琴失去乐趣吗?
男:有。一位评论者担心机器生成音符会夺走学习钢琴的乐趣,手指位置与节拍的内在化过程本身就让人满足。作者自己说得清楚:“我想要自己想通问题的乐趣,而不是实现别人的研究。”另一人是古典钢琴家兼软件产品设计师,说这个项目和众多 AI UX 设计工具处境相似:生成成本归零后,剩下的都是品味,而品味来自探索和淘汰死胡同。有个听众听到《致爱丽丝》开头走向完全不同的方向,评论说“令人意外地不安”。
女:上周一位叫亚当·马斯特罗安尼的作者写了一篇长文,谈“厚度”——伟大的作品会回应你的注意力,投入的时间越多,得到的就越多。
男:他有几个很妙的论点。第四个叫“血祭”。人在创作中付出的人生成本越高,作品可能越厚。他把这个和 AI 生成内容联系起来:slop 没有秘密,经不起细看,像只有无限频道的电视。
女:他给出了“增厚”的方式,其中一个比喻我一直记得:蛋糕粉里留个鸡蛋。Betty Crocker 公司本可以把鸡蛋粉混进蛋糕粉,但他们不这么做,因为敲鸡蛋能让使用者假装自己在烘焙。厚艺术也留给你一个鸡蛋,真正的事情发生在你的脑子,而不是画面或纸面上。
男:这个比喻好。Graeme Base 的童书《第十一个小时》就是典型:读到结尾你才发现一桩罪行一直发生在眼前,线索藏在前面所有插画细节里,真正的体验是带着答案重读。
女:他还有一个观点很有意思,关于为什么我们该读旧书。他说只有活下来的东西能证明质量。
男:评论区有人分享了自己在普拉多博物馆的经历:一个美国博士生原本要飞往希腊研究古希腊艺术,途中在马德里停留,看到馆里无数杰作后改了方向,留在马德里教书直到退休。这很像文章里提到的主角的体验,他在《人间乐园》面前走不动了。
女:画里有什么特别的东西?
男:裸男的屁股上印着乐谱。2012 年有个学生把它抄下来录了音,发到博客上走红。但研究中世纪音乐的专家指出,那段乐谱根本不是音乐:没有谱号,音符间距随意,其中一条谱线数都不对。博斯是故意画一段不能演奏的音乐,因为在他看来,世俗音乐是通往地狱的单程票。画里众多音乐家正被折磨,有人被困在被浣熊恶魔敲打的鼓里,有人被钉在竖琴上,屁股乐谱那位被琉特琴压死。所以那不是彩蛋,而是警告。
男:现实中也有类似的事。一位认识他的评论者说,他当时“聪明而破碎”,被年长者利用去推进各种议程。这和“厚度”那篇文章不是一回事,但我总觉得——技术能替我们弹钢琴、写邮件甚至画全息图,但我们自己的判断、审美和良心,不能外包给模型。一个能听出《致爱丽丝》被续写得不安的人,和一个直接把 AI 答案发回给朋友的人,过的可能是不同的生活。
女:所以今天聊的这几个话题,从 AliExpress 的音频指纹到“厚度”的那篇文章,其实都是同一个问题的不同切面:技术在替我们做决定,但决定的质量,依然取决于我们自己的投入。
男:对,工具可以扩展我们的能力,但使用工具的品味和责任还是自己的。就像那个自助书上的假统计数据,AI 生成的答案也一样——看起来合理,但经不起细看。真正有价值的是我们验证、质疑、改写的过程。
女:这让我们想起那篇文章里最实用的建议:如果你没有可补充的,直接说“我没有太强的意见”。沉默也是一种回答。
男:对。还有一个建议,把试过什么、查到什么写进问题里,也是在回应别人的厚道。
女:纸雕艺术家的故事和“厚度”也能连起来:手工切割、塑形、组装细小部件,经过长时间重复与精确操作,让纸张变成带有固体质感的物体。如果 Bo 斯的《人间乐园》是厚度的代表,那这种手工作品大概也是用时间“血祭”换来的厚度。
男:但它最迷人的地方在于——它没有 AI,没有自动化,纯粹是人的手、不断校准的眼睛,和耐心。
女:你是说它像“圈”和弧度之争一样,技术上的精确和手工的精确是两种不同的精确?
男:对,弧度制在数学上是好的、不可替代的,但如果你只是在写游戏引擎或画图,用“圈”反而更自然。技术和手工,实际上是两种不同的“工具”,选择哪个取决于目标。
女:那回到 HTML,大家有没有实现这些原生控件的建议?万一踩到坑怎么办?
男:先说结论:能用就用,但要用得克制。像 popover、dialog 这些已经稳定的,直接上问题不大,记得测一下键盘操作和读屏器。datalist 和日期选择器要谨慎一点,尤其日期,跨语言环境很容易出事故。所有新功能都建议查一下 CSS 锚点定位的支持情况——这才是真正决定弹出层体验的东西。
女:我觉得这也暗合“厚度”的主题:选择工具不是单纯选一个名词,而是选一个你愿意长期投入理解的技术栈。HTML 的新能力再怎么方便,如果不懂底层的原理,用起来还是会出问题。
男:好总结。那今天我们聊了很多,你希望听众记住哪件事?
女:记住一个事实吧:一个网站可以在你不知情的情况下占用你的耳机。记住了这个,你就知道,技术世界表面上是免费的,但实际上每一项便利都可能藏着别的代价。多留心、多提问、多验证,总是好的。
女:感谢收听,也欢迎大家到泛用型播客客户端订阅我们的节目。下次见。
男:再见。
参考链接
- AliExpress runs silent WebAudio fingerprinting that breaks Bluetooth multipoint
- Don't paste the AI, please
- Turns are Better than Radians (2022)
- Windows brings out the Rorschach test in everyone (2003)
- HTML Can Do That
- Aaron Swartz was prosecuted for scraping, while Meta does it without consequence
- Show HN: I trained a 125M model to autocomplete piano on-device
- Manabu Kosaka's Handmade Paper Sculptures
- Malicious Rust crate Arrayref runs a build-time payload
- I like 'em thick: an apology to my English teachers
