2024-12-16

34 篇热帖

1. Why is it so hard to buy things that work well? (2022) (danluu.com)

文章摘要:为何购买好用的东西如此困难?

本文挑战了“市场必然淘汰低效和劣质产品”的传统效率市场假说,通过多个层面的实例论证,指出由于信息不对称、评估困难、文化规范及组织惰性等因素,市场中普遍存在且长期维持着低效的产品与服务。

核心论点

  1. 个人消费层面的困难

    • 消费者缺乏专业知识,难以辨别产品质量(如家装、会计服务)。
    • 支付高价并不保证高质量(如大型会计事务所可能比小型本地会计错误率更高)。
    • 购买决策常受营销和公关误导,而非基于产品真实优劣(如因误解从iPhone转用Android手机)。
    • 专家建议可能不靠谱(如空调维修工错误地认为所有空调噪音水平相同)。
  2. 企业采购与外包的困境

    • 市场环境更不透明,产品选择更少,“电话询价”模式普遍。
    • 遵循“专注核心能力,外包其他”这一流行建议,常导致糟糕结果。例如,依赖外部支持服务可能成本高、效果差。
    • 许多外购产品存在根本性设计缺陷,无法正常工作(如某主流数据同步工具在同步Postgres时会丢失、重复和损坏数据)。
    • 即便在看似应该外购的领域(如快递、芯片设计工具),自建有时反而是更可靠、更经济的选择,因为外部服务可能极不可靠。
  3. 市场选择压力微弱的原因

    • 消费者信息匮乏,难以区分优劣。
    • 无法像在资本市场那样,通过做空等方式直接套利以纠正错误定价。
    • 公司内部技术决策常受流行商业口号(如“聚焦核心”)驱动,而非基于具体案例的理性分析,导致大量低效迁移。
    • 成功企业往往擅长营销产品卖点(如“可靠性”),而非实际改进产品(如MongoDB早期注重性能营销而非正确性)。
    • 真正推动产品质量(如数据库正确性测试、汽车结构安全)的,往往是少数坚持的“异类”个人或企业,但这是罕见且代价高昂的。
  4. 文化与社会期望的影响

    • 在某些文化(如北美)中,受害者常因“未充分自我保护”而受指责,而另一些文化(如韩国、日本)社会信任度更高,公共服务体验截然不同。
    • 对领导层和外部承诺的不信任,会导致组织内部“帝国构建”和资源浪费,这与跨公司间的低信任问题类似。
    • 文化规范并非自然法则,不同地区的工作实践和效率观念存在巨大差异。
  5. “自建”的代价与风险

    • 自建能提供更好的控制和质量保证,但绝非万无一失。功能失调的团队同样可能制造出无法工作的内部产品。
    • 在缺乏信任和良性文化的环境中,即便自建也可能因内部垄断、缺乏批判和追求正确的动力而失败。

结论

市场并非一台能自动优化产品质量的机器。低效率和劣质产品的持续存在,源于评估成本高昂、信息不对称、文化期望的差异、以及组织决策流程的缺陷。消费者和企业常常无法获得“好用”的产品,并非因为不存在,而是因为识别、选择和推动生产这些产品的系统性机制非常薄弱。

2. OpenERV (www.openerv.ca)

OpenERV 技术摘要

OpenERV 是一种分散式能量回收通风机,旨在全年提供新鲜户外空气,同时回收约85-90%的热能。该技术包括两个主要型号:TW4 单模块和 WM12 双模块(由两个 TW4 模块并排组成,可置于窗户中)。

项目状态: 截至2025年6月,该项目已暂停,作者专注于“Big Quiet Fan”的大规模生产。作者表示将转向采用重型消音器设计(能有效隔绝交通等外部噪音),而非轻型3D打印噪音分裂器。暴风阀已被证明基本不必要,将作为可选附加件。HEPA过滤器也将作为可选附加件,主要用于夏季为房屋加压过滤空气。

核心性能:

  • 热回收: 最大速度下显热回收率约85%,潜热回收率约80%;低速时更高。性能几乎不受温度、湿度或季节影响。
  • 风量: 热回收模式最大速度下,实际平均净新鲜风量为60 CFM。
  • 噪音: 低速时几乎无声;中速为37 dBa;最大速度时每个模块(一对中的一半)约42.5 dBa。噪音无嗡嗡声等恼人特征,风扇周期性反转引起的变化在高速时很小,在中低速下不可察觉。
  • 投资回报率: 与典型无管道ERV单元相比,长期回报率约高20倍;与典型有管道HRV/ERV单元相比,回报率约高3倍;在加拿大渥太华等地区,回报率高于光伏面板10倍以上。

其他关键特性与细节:

  • 耐用性: 设计使用寿命超过50年,无长期部件供应问题。
  • 智能家居集成: 可通过MQTT与Google Home、Alexa、Home Assistant等系统集成,支持手机WiFi控制、传感器操作、开关调节等。
  • 能效: 每个模块低速耗电2瓦,最大功率7瓦。
  • 空气质量: 有效降低二氧化碳水平,减少空气传播病原体,全面提升室内空气质量。
  • 自动平衡: 自动风力补偿确保双向气流精确平衡,优化效率并防止房屋意外加压。
  • 可选组件:
    • HEPA (H13) 过滤器(使用汽车空调滤芯,广泛可用),需外部面板和护罩。
    • 重型消音器(有效衰减外部噪音)。
    • 暴风阀(防风雨侵入,需外部面板和护罩)。
  • 灵活性: 产品坚固、经济、安静、灵活、可修改和维护。夏季可移除热交换器以获得更大风量和更低噪音,可用于大量新鲜空气供应或通过HEPA过滤器进行过滤加压(有时称为“自由冷却模式”,但实际冷却所需风量通常更大)。
  • 待开发功能: 固件尚未添加单向工作模式。
3. Xiaomi Home Integration for Home Assistant (github.com)

Xiaomi Home Integration for Home Assistant 概要

Xiaomi Home Integration 是小米官方为 Home Assistant 开发的集成组件,允许用户在 Home Assistant 中使用小米 IoT 智能设备。

安装要求与方法

  • 系统要求:Home Assistant Core 版本 ≥ 2024.4.4,操作系统版本 ≥ 13.0。
  • 安装方法
    1. Git 克隆:推荐方式,便于版本管理。
    2. 通过 HACS:在 HACS 中搜索并一键安装。
    3. 手动安装:将组件文件夹复制到 Home Assistant 的 custom_components 目录。

配置与使用

  • 登录:在“设备与服务”中添加集成,使用小米账号通过 OAuth 2.0 流程登录。
  • 添加设备:登录后选择需要导入 Home Assistant 的家庭和设备。
  • 多账号支持:配置完成后,可继续添加其他小米账号,不同账号的设备可添加至同一区域。
  • 配置更新:可在集成的“配置选项”中更新用户昵称和设备列表等。
  • 调试模式:可启用“操作调试模式”,手动向设备发送带参数的 Action 命令。

安全注意

  • 集成使用 OAuth 2.0 登录,不存储账号密码。
  • 重要风险:由于 Home Assistant 平台限制,登录后的用户信息(设备信息、证书、令牌等)将以明文形式保存在配置文件中。需确保配置文件安全,防止泄露。
  • 如怀疑令牌泄露,可在小米账号管理页面撤销对“Xiaomi Home (Home Assistant Integration)”的授权。

常见问题 (FAQ)

  • 设备支持:支持大多数品类,但不支持蓝牙、红外和虚拟设备。
  • 多账号:支持多个小米账号。
  • 本地模式
    • 通过小米中枢网关(固件版本 ≥ 3.3.0_0023)或内置中枢网关功能的设备(软件版本 ≥ 0.8.9)实现。注意: 小米中枢网关仅在中国大陆可用。
    • 也可启用 Xiaomi LAN 控制功能,通过局域网控制 IP 设备(WiFi/有线连接)。但此功能不支持 BLE Mesh、ZigBee 设备,可能导致异常,不推荐使用。若局域网内存在中枢网关,此功能不会生效。
  • 可用地区:支持中国大陆、欧洲、印度、俄罗斯、新加坡和美国。需在配置时选择地区,数据隔离。
  • 消息原理
    • 云端控制:集成通过 MQTT 订阅云端消息,实现设备状态实时更新;通过 HTTP 接口发送控制命令。
    • 本地控制:集成通过中枢网关的 MQTT Broker 订阅消息和发布命令。

技术细节:MIoT-Spec-V2 到 Home Assistant 实体的映射

集成依据小米的 MIoT-Spec-V2 协议(设备功能的标准描述)创建 Home Assistant 实体。

  • 通用转换规则

    • 属性 (Property):根据其可写性、数据类型和值列表/范围,转换为 TextSwitchSelectNumberSensor 实体。
    • 事件 (Event):转换为 Event 实体,事件参数可通过 _trigger_event 获取。
    • 操作 (Action):如果输入参数为空,转换为 Button 实体;否则,转换为 Notify 实体。启用调试模式时,若输入参数非空,会额外创建 Text 实体用于手动执行。
  • 特定转换规则

    • 集成会根据设备、服务、属性的实例名称 (name) 优先匹配特定的实体映射规则(定义于 SPEC_DEVICE_TRANS_MAPSPEC_SERVICE_TRANS_MAPSPEC_PROP_TRANS_MAP 等配置中)。
    • 对于不符合特定规则的实例,则回退到通用规则进行转换。
  • MIoT-Spec-V2 过滤

    • 使用 spec_filter.yaml 文件可过滤掉不需要转换为 Home Assistant 实体的实例。
    • 通过指定设备 URN(不含版本)及其下的服务、属性、事件或操作 ID(支持通配符)来实现过滤。

其他信息

  • 多语言支持:支持 13 种语言。配置流程的简体中文和英文经过人工审核,其他语言为机器翻译或社区贡献。实体名称翻译会优先使用本地 multi_lang.json 文件中的定义。
  • 目录结构:核心代码位于 miot 目录,包含客户端、云端、设备、消息总线、规范解析、局域网控制、服务发现、网络、存储等模块。配置流程位于 config_flow 目录。
  • 更新生效:若修改了 miot/specs 目录下的文件(如 spec_filter.yamlmulti_lang.json),需要在集成的配置页面手动“更新实体转换规则”才能生效。
4. Most iPhone owners see little to no value in Apple Intelligence so far (9to5mac.com)

根据科技回收网站SellCell的一项最新调查,大多数iPhone用户认为苹果现有的人工智能(AI)功能价值甚微,尽管AI在选购新手机时是一个重要考量因素。

调查核心发现

  • iPhone用户更重视AI:在购买新手机时,47.6%的iPhone用户认为AI功能“非常重要”或“比较重要”,而持相同看法的三星用户仅为23.7%。
  • 对现有AI功能满意度低:超过七成(73%)的苹果智能(Apple Intelligence)用户认为当前功能“价值不大”或“几乎没有价值”。三星Galaxy AI用户的不满比例更高,达到87%。

现有功能受欢迎度排名(iOS 18.2更新前)

  1. 写作工具(72%)
  2. 通知摘要(54%)
  3. 优先处理信息(44.5%)
  4. 照片清除功能(29.1%)
  5. 邮件和消息的智能回复(20.9%)

新功能可能带来转机 调查在iOS 18.2发布前进行。该版本新增了Genmoji(通过AI生成自定义表情符号)和ChatGPT集成(Siri可将特定问题转交ChatGPT处理)两项功能。文章指出,这些更互动、实用的新功能有可能改变用户对苹果AI价值的看法。

5. US lawmakers tell Apple, Google to be ready to remove TikTok from stores Jan. 19 (www.reuters.com)
6. Ask HN: SWEs how do you future-proof your career in light of LLMs?
7. Palm's CEO emails Steve Jobs (2007) (twitter.com)

事件概述

  • 标题:Palm的CEO致信史蒂夫·乔布斯(2007年)
  • 日期:2007年8月24日
  • 来源:内部科技邮件(TechEmails)的社交网络页面
  • 核心内容:Palm公司首席执行官在2007年8月24日向苹果公司联合创始人史蒂夫·乔布斯发送了一封电子邮件。
8. 25 Years of Dillo (dillo-browser.github.io)

Dillo 浏览器 25 年历史摘要

项目起源

  • 1999年:Jorge Arellano Cid 领导的开发团队从 Raph Levien 开发的 Gzilla/Armadillo 代码分叉,创建了 Dillo 网页浏览器。
  • GTK 1.0 时期(1999 - 2006)
    • 初始版本使用 GTK 1.0 作为 UI 库。
    • 2000年3月,项目在获得原作者同意后,将许可证变更为 GPL。
    • 开发重点包括建立代码命名规范、重写网络通信架构(最终形成沿用至今的“并行控制链”CCC机制)。
    • Sebastian Geerken 于2000年加入,成为渲染引擎(Dw)的主要架构师,负责元素尺寸与位置计算。
    • HTML/CSS 特性支持(如表格、文本)逐步增强。
    • 关键决策:团队因考虑复杂性和性能,放弃迁移到 GTK2,转而评估 FLTK 2。
    • 2004年,Sebastian 推动渲染引擎 Dw 独立于工具包,以便并行开发 GTK1 和 FLTK2 版本。
    • 外部功能模块化:通过 DPI(插件)机制将下载、书签、FTP、HTTPS 等功能移至外部程序。
    • 2004年10月发布的 0.8.3 版已支持 HTTPS。
    • 最后一个 GTK1 版本是 2006年4月的 0.8.6。

FLTK 2 时期(2005 - 2011)

  • 移植目标:使浏览器更小巧,并支持抗锯齿等特性。
  • 资金挑战:项目寻求公司赞助未果,面临停滞风险。
  • 代码开源:FLTK2 移植版曾长期闭源,直至2007年9月在获得 Sebastian 同意后以 alpha 版形式公开。
  • 社区复苏:开源后吸引了开发者贡献补丁,推动项目重新活跃。
  • 重大功能:2008年9月宣布支持标签页。
  • 首个 FLTK2 版本:经过大量修复后,于2008年10月发布 Dillo 2.0.0。
  • 最后版本:2011年发布 2.2.1(外观与现代版本相似)。
  • FLTK2 库问题:由于 FLTK2 官方开发停滞,未发布正式版本,导致下游发行版打包困难,促使 Dillo 决定转向 FLTK 1.3。

FLTK 1.3 时期(2011 - 2016)

  • 快速移植:随着 FLTK 1.3 于2011年6月发布,Dillo 迅速完成移植,并于同年发布 3.0.0。
  • 关键贡献:Sebastian Geerken 提交了大量代码,引入了基于 TeX 算法的断字功能(并入 3.0.3 版)。
  • GROWS 重新设计:Sebastian 主导了此设计,改变了部件(页面元素)尺寸的计算方式。
  • 开发停滞:2016年10月 Sebastian 去世,其大量未发布的工作流失,开发随即陷入停滞。
  • 最后通信:2019年,Jorge 建议用户直接使用代码仓库版本,而非等待未发布的 3.1 版。此后项目领导层失联。

项目废弃与复活(2022 - 至今)

  • 废弃期(2022):dillo.org 域名丢失,导致网站、代码仓库、邮件列表等所有基础设施消失,项目变为无人维护状态。
  • 复活(2023 - 2024)
    • 2023年12月,Rodrigo Arias Mallo 开始修复代码以使其能重新编译。
    • 在 Atari 论坛成功移植的鼓舞及 Hacker News 社区的关注下,决定尝试复活项目。
    • 建立 GitHub 组织和仓库,使用 GitHub Pages 搭建新网站,并尽可能恢复历史资料。
    • 经过数月业余时间努力,于2024年5月发布 3.1.0 版本,获得了新闻网站关注并进入多个 Linux 发行版软件库。
    • 当前(2024年12月)维护版本为 3.1.1,正吸引新的贡献者,项目缓慢进展中。
9. Popeye and Tintin enter the public domain in 2025 along with Faulkner, Hemingway (apnews.com)

2025年1月1日起,美国将有大量1929年的知识产权作品进入公共领域,使用者可无需授权或付费进行改编。本次进入公共领域的作品主要包括:

漫画角色

  • 大力水手(波派):由E.C. Segar创作,1929年首次出现在报纸连载漫画中。但仅限早期版本,其标志性超能力来源“菠菜”并非初始设定,后续动画及1980年电影仍受版权保护。
  • 丁丁:由比利时画家埃尔热创作,1929年首次出现在报刊副刊。早期版本为黑白,其著名的彩色形象及红色头发是后期添加,在部分国家(如作者逝世70年后版权才过期的地区)可能仍存法律争议。

文学作品

  • 威廉·福克纳《喧哗与骚动》(1929):现代主义意识流小说的代表作。
  • 欧内斯特·海明威《永别了,武器》(1929):半自传体小说,巩固了其在美国文学经典中的地位。
  • 约翰·斯坦贝克《金杯》(1929):其首部长篇小说。
  • 弗吉尼亚·伍尔夫《一间自己的房间》(1929):现代主义文学及女性主义里程碑。

电影

  • 阿尔弗雷德·希区柯克《敲诈》(1929):英国首部有声片之一,有默片与有声两个版本。
  • 约翰·福特《黑卫士》(1929):其首部有声电影,约翰·韦恩作为群众演员首次出现。
  • 塞西尔·B·德米尔《炸药》(1929):其首部有声电影。
  • 马克思兄弟主演的《椰子》(1929)。
  • 《百老汇旋律》(1929):首部有声片之一,第二届奥斯卡最佳影片。
  • 迪士尼动画:继《汽船威利号》后,另有12部米老鼠早期动画进入公共领域,包括米老鼠首次开口说话的《狂欢小子》。

音乐

  • 科尔·波特的《这叫什么爱?》和《踮脚穿过郁金香》。
  • 胖子·沃勒和哈里·布鲁克斯的爵士经典《没有做错事》。
  • 首次出现在1929年电影中的《雨中曲》。
  • 根据不同法律,1924年的录音进入公共领域,包括:
    • 玛丽安·安德森录制的《无人知晓我的痛苦》。
    • 乔治·格什温演奏的《蓝色狂想曲》。

本次进入公共领域的作品虽不及去年米老鼠进入时引人瞩目,但涵盖了文学、漫画、电影、音乐等多个领域的经典之作。

10. Modelica (modelica.org)

Modelica 是一种面向对象的建模语言,主要用于对网络物理系统(CPS) 进行建模。其核心特点在于支持基于数学方程非因果连接,允许组合可重用组件,从而便于从第一性原理出发进行系统建模。

该语言及相关生态系统主要包含以下几个关键部分:

  1. Modelica语言:其定义与规范。
  2. Modelica库:一系列预先构建好的、用于不同领域(如机械、电子、热力等)的可复用模型组件。
  3. Modelica工具:用于创建、编辑、仿真和分析Modelica模型的软件。
  4. Modelica协会:负责管理该语言标准、促进社区发展和工具协作的组织。

近期,该领域的SSP项目迎来了新的负责人与副手。

11. Map of GitHub (github.com)

GitHub 项目地图概览

本文介绍了一张包含超过 69万 GitHub 项目的交互式地图。每个点代表一个项目,点之间的距离越近,表示这两个项目拥有越多的共同关注者(stargazers)。该项目由一位9岁的孩子设计了 Logo。

版本信息

  • 当前版本(2025年5月10日):包含 69万个项目和 1500 多个聚类(clusters)。
  • 初始版本(2023年5月8日):包含 40万个项目和 1000 个聚类。

制作过程

  1. 数据获取:从 Google BigQuery 的公开 GitHub 活动事件数据集中,提取了 2011年2月至2025年5月期间约 5亿次 星标数据。
  2. 相似度计算:计算每对仓库之间的精确 Jaccard 相似度。由于数据量巨大,使用了拥有 512GB 内存的 AWS EC2 实例进行处理。
  3. 聚类分析:应用聚类算法对仓库进行分组。最终选用 Leiden 聚类算法,产生了 1500 多个聚类,涵盖了 69万个项目。
  4. 布局计算:使用 ngraph.forcelayout 库分别计算聚类内部和全局的布局。
  5. 地图渲染:采用 MapLibre 进行渲染,将数据转换为 GeoJSON 格式,使用 tippecanoe 生成地图切片,并配置浏览体验。

国家名称生成

地图中聚类的“国家”名称大多借助 ChatGPT 生成。通过特定的提示词(prompt),要求模型为每个项目集合创建独特、具体且易记的名称,避免使用通用术语,并鼓励使用意象和隐喻。用户发现名称问题可直接通过拉取请求(pull request)提交修正。

搜索与设计

  • 搜索功能:通过按仓库名或作者名首字母建立索引,实现客户端模糊搜索。
  • 设计现状:作者认为数据本身比当前的视觉设计更有趣,欢迎有地图设计经验者提供改进建议。

其他说明

  • 支持:用户可通过加入支持群组或在 GitHub/Twitter 提问来获取帮助或支持项目。
  • 致谢:特别感谢了 Ryan、Andrey、Alex、Dmytro 以及设计 Logo 的女儿 Louise,并对所有开源贡献者表达了感激。
  • 许可:项目采用 MIT 许可证 发布。建议在使用数据时,为本项目添加归属说明。
12. Ask HN: How do you find part time work?
13. 3D-Printed Dune Chess Set (parametric-architecture.com)

3D打印沙丘国际象棋套装总结

  • 设计理念与目标:该设计旨在利用先进的石英3D打印技术,创造一种沉浸式的触觉游戏体验。它将沙子这种流动、变化的自然元素转化为坚固的棋具,象征着国际象棋游戏本身固有的、随时间演变的不可预测性与策略深度。设计追求的是从无形、流动的材料中塑造出稳固的形态,同时保留其“变化与潜力”的质感。

  • 设计过程与技术挑战:设计师Rory Noble-Turner使用了通常用于视觉特效行业的3D雕刻工具,获得了高度的创作自由。核心挑战在于通过数字脚本生成自然的、被风吹拂过的波纹纹理。这涉及精细调整波纹的随机性、密度、深度及其向平滑表面平缓过渡的质感,整个过程耗费了数月进行问题解决与优化。为了实现这种自然外观,设计师甚至深入探索了视觉脚本论坛。

  • 功能性设计:在单一材料的设计中,通过波纹与光滑表面的二元对比来区分对立双方的棋子以及棋盘格。这直接呼应了沙子在自然界中的两种对比状态,解决了单色棋具在游戏中的辨识度问题。

  • 更广泛的探索:触觉与感官体验:该作品是对触觉与亲密感的探索,旨在对抗日常生活中日益增长的、以视觉为主导的、脱离身体的屏幕交互模式。设计希望通过激发用户的触摸欲望,重建用户与其身体及周围物理世界之间的感官连接。因此,作品的成功不仅在于其视觉吸引力,更在于它能否成功引发一种“触摸的体验”或“触摸的渴望”。

  • 项目信息:摄影师为设计师Rory Noble-Turner,使用了Rhinoceros3D和Grasshopper3D等软件。

14. Show HN: SmartHome – An Adventure Game (smarthome.steviep.xyz)

SmartHome: An Adventure Game 游戏概述

游戏简介

SmartHome 是一个基于网页的文本冒险游戏,玩家在一个智能家居公寓中进行探索和互动。游戏通过讽刺的方式展现了物联网设备对应用程序的依赖,并引导玩家通过解谜和探索来推进剧情。

核心玩法与主题

  • 交互方式:玩家通过点击屏幕上的按钮(如“电话”、“开门”、“查看恒温器”)来做出选择,驱动游戏进程。
  • 核心主题:游戏讽刺了现代智能家居中几乎所有设备(如灯、窗户、门锁、马桶)都需要下载并使用特定应用程序才能正常工作的现象。
  • 目标:探索公寓,通过扫描二维码下载各种应用(如Shayd、SmartLock、ThermoSmart)来控制设备,并最终找到离开公寓(迷宫)的方法。

游戏结构与技术实现

  1. 状态机驱动:游戏核心由一个复杂的状态机(StateMachine)管理,包含数百个“节点”(如wakeUpInithallwaylivingRoom),每个节点定义了文本描述、可执行动作和后续逻辑。
  2. 场景与互动
    • 主要区域:卧室、走廊、客厅、厨房、浴室、外部走廊、楼梯间、迷宫。
    • 互动设备:手机(模态框)、电视、路由器、恒温器、智能锁、自动冲水马桶、扫地机器人、电子记事本等。玩家需通过游戏内的“应用市场”或扫描特定二维码下载对应应用来解锁设备功能。
  3. 技术栈
    • 前端:纯HTML、CSS、JavaScript(使用ES模块)。
    • 数据持久化:使用localStorage保存游戏进度(如当前位置、物品状态)。
    • 音频系统:包含简单的音频合成(正弦波)用于环境音和提示音。
    • UI组件:使用自定义元素(如<trapped-modal>, <mobile-phone>)构建游戏内设备界面。

关键游戏流程

  1. 开局:玩家在床上醒来,首先需要与手机互动(下载应用),然后探索卧室。
  2. 公寓探索:在公寓的各个房间中,玩家会遇到各种需要特定应用才能操作的设备(如用Shayd应用开窗,用SmartLock应用开门)。
  3. 解谜与推进
    • 路由器:检查底部的WiFi密码,了解网络状况。
    • 楼梯间:离开公寓后进入楼梯间,需要通过一个带有数字键盘的密码门(代码9388038190)。
    • 迷宫:通过密码门后进入一个多房间的迷宫,需要找到通往“EXIT”房间的路径。
    • 电梯结局:在迷宫尽头找到电梯,进入后游戏结局播放,显示完成时间,并提供重玩选项。
  4. 成就系统:游戏中有隐藏的成就(如“访问所有迷宫房间”、“让扫地机器人去每个房间”),触发时会给予提示。
  5. 彩蛋与细节
    • 电子记事本(eNotepad)有电池系统,需要插电充电。
    • 扫地机器人会在不同房间随机移动。
    • 恒温器会发出警报,显示CO2超标。
    • 游戏内时间在检查闹钟后开始倒计时。

总结

《SmartHome》是一款风格独特的文本冒险游戏,它将经典的交互式叙事与对科技依赖的批判性思考相结合。游戏机制围绕“通过应用程序解锁功能”这一核心循环展开,创造了既熟悉又陌生的互动体验。其技术实现完整,从状态机逻辑到细节丰富的UI组件,构建了一个可深度探索的数字空间。

15. "Nvidia is so far ahead that all the 4090s are nerfed to half speed" (twitter.com)

摘要

提供的文章标题为“Nvidia is so far ahead that all the 4090s are nerfed to half speed”,但内容显示页面不存在,错误消息为“Nothing to see here Looks like this page doesn’t exist. Here’s a picture of a poodle sitting in a chair for your trouble. Looking for this?”。因此,无法获取关于Nvidia 4090 GPU被限制速度的实质信息。

16. Kowloon Walled City: Heterotopia in a Space of Disappearance (2013) (mascontext.com)

The request was rejected because it was considered high risk

18. SVC16: Simplest Virtual Computer (github.com)

SVC16 虚拟计算机规格摘要

设计目标

SVC16 是一个极其简单的可模拟虚拟计算机,旨在实现三个核心目标:

  1. 简单性:指令易于理解,机器码编写和编译器开发门槛低。
  2. 可复现性:系统完全规范化,确保程序在任何环境下运行结果一致。
  3. 无辅助功能:不提供汇编器、编译器或调用约定,鼓励用户自行构建。

系统组成

内存与数据表示

  • 无 CPU 寄存器,仅有一段主内存。
  • 所有值(包括数字、地址、颜色、指令指针和输入)均为无符号 16 位整数。
  • 算术运算为回绕操作。
  • 主内存地址范围覆盖所有有效 u16 值(65,536 个地址)。

指令指针

  • 初始值为 0,通过指令操作跳转,指向主内存地址。

屏幕

  • 分辨率:256×256 像素(总计 65,536 个像素)。
  • 颜色格式:RGB565(16 位)。
  • 坐标 (x, y) 映射到屏幕缓冲区索引:256×y + x,(0,0) 位于左上角。
  • 屏幕缓冲区修改需通过同步操作才会显示。

声音

  • 通过声音缓冲区构建波形播放,无内置采样。

输入

  • 支持鼠标位置和 8 个按键(模拟 NES 控制器)。
  • A/B 键同时映射为鼠标左右按钮。

同步机制

  • 目标帧率:30 FPS。
  • 每帧最多执行 300 万条指令。
  • 同步时更新屏幕显示和输入缓冲区,系统休眠至下一帧开始。

指令集

  • 每条指令由 4 个 u16 值组成:操作码 arg1 arg2 arg3
  • 共 16 条指令,主要包括:
操作码 名称 功能简述
0 Set 有条件赋值:若 arg3 非零,将指令指针存入 @arg1;否则将 arg2 存入 @arg1。
1 GoTo 有条件跳转:若 @arg3 为 0,将指令指针设为 @arg1 + arg2。
2 Skip 有条件相对跳转:若 @arg3 为 0,调整指令指针偏移。
3-6 算术 加减乘除运算,结果存入 @arg3。
7 Cmp 无符号比较,结果(0 或 1)存入 @arg3。
8-9 内存 Deref(间接读取)、Ref(间接写入)。
10 Debug 提供调试信息。
11-12 缓冲区 Print(写屏幕/声音缓冲区)、Read(读缓冲区)。
13-14 位运算 Band(按位与)、Xor(按位异或)。
15 Sync 同步系统:写入位置码和键码,刷新屏幕并可选播放声音。
  • 指令推进:大多数指令执行后指针前进 4 个值(一条指令长度),跳转指令可能改变指针。

程序构建

  • 程序为主内存的初始状态,指令与数据混合存储。
  • 以二进制文件加载(小端序 u16 值),最大 131.1 KB。
  • 不足部分用零填充,执行从索引 0 开始。

示例程序

  • 功能:将所有可能颜色(65,536 种)打印到屏幕。
  • 核心逻辑:
    1. 使用 Set 指令初始化计数器和最大值。
    2. 循环使用 Print 指令将当前索引值作为颜色写入对应像素。
    3. 递增计数器,通过 Cmp 和 Skip 指令控制循环。
    4. Sync 指令刷新显示,GoTo 维持窗口。
  • 可通过 Python 脚本生成可执行二进制文件。

贡献与反馈

  • 鼓励用户分享基于 SVC16 构建的游戏或程序。
  • 可提交问题以报告规格与实现之间的差异或文档不清晰之处。
19. OpenAUTH: Universal, standards-based auth provider (openauth.js.org)

OpenAUTH: 通用、基于标准的身份验证提供商

OpenAUTH 是一个通用、基于标准的身份验证提供商。

  • 通用性:您可以将其部署为独立服务,或嵌入到现有应用程序中。它适用于任何框架或平台。
  • 自托管:它完全运行在您自己的基础设施上,并可部署在 Node.js、Bun、AWS Lambda 或 Cloudflare Workers 环境中。
  • 基于标准:它实现了 OAuth 2.0 规范,并基于网络标准构建。因此,任何 OAuth 客户端都可以使用它。
  • 可定制性:它附带了可主题化的预建用户界面,您可以对其进行自定义或选择不使用。
20. UK's Online Safety Act comes into force (www.ofcom.org.uk)

提供的HTML内容是一个Cloudflare安全挑战页面,标题为“Just a moment...”。该页面的目的是验证用户是否启用了JavaScript和cookies,以防止自动化访问并确保安全连接。页面结构包括HTML头部(定义元数据、字符集、视口设置、内容安全策略)和主体部分(显示错误消息“Enable JavaScript and cookies to continue”)。关键功能涉及JavaScript脚本,该脚本处理安全挑战,可能包括重定向和验证流程,以保护网站免受恶意请求。内容中没有包含关于“UK's Online Safety Act”的实际文章信息,仅显示技术性安全验证机制。

21. Load is not what you should balance: Introducing Prequal (www.usenix.org)

PReQuaL(Probing to Reduce Queuing and Latency)是一种用于分布式多租户系统的负载均衡器,旨在最小化实时请求延迟,特别适用于服务器容量异构且负载不均匀、时变的场景。它不均衡传统意义上的CPU负载,而是通过主动探测服务器负载,并基于估计的延迟和活跃的请求数(RIF)来选择服务器,从而优化性能。

PReQuaL扩展了“d选择”范例,引入了异步和可重用的探测机制,以实现实时负载感知和低延迟决策。这种方法避免了依赖静态负载指标的局限性,能够动态适应变化的工作负载。

在YouTube上的实际部署中,PReQuaL已运行超过一年,显著降低了尾部延迟、错误率和资源使用,提升了系统利用率和稳定性。该技术展示了在生产环境中通过智能负载均衡改善性能的有效性。

相关研究和资源由USENIX开放访问,包括论文和演示视频。

22. The Antikythera mechanism – 254:19 ratio (leancrew.com)

文章讨论了安提基特拉机械的齿轮比例254:19及其天文学含义。该机械是公元前1世纪的青铜装置,用于追踪日月行星运动。

播客中,Mike Edmunds提到机械的一个齿轮有233齿用于预测日食,但作者指出沙罗周期实际为223个朔望月,即从一次新月到下一次新月的周期。

另一位嘉宾Jo Marchant提到机械中六个齿轮的传动比为254/19,以协调日月运动。作者起初误听为354,后经思考发现254:19比例源于默冬周期(19年或235个朔望月)中月球与地球的轨道关系。

作者解释,由于地球在轨道上移动,月球需旋转超过360度才能再次回到日地之间(新月位置)。计算显示,在一个朔望月内,地球绕日移动约29.1度,因此月球需转动约389.1度。月球与地球的角速度比约为13.368。在19年内,月球绕地球约254圈,地球绕太阳19圈,故形成254:19的比例。

作者讨论了该计算的潜在问题:椭圆轨道影响较小;使用恒星年或回归年对结果影响微小(约1/26000);且该比例基于观测经验,与日心说模型无关。

总结来说,安提基特拉机械的254:19齿轮比精确反映了19年默冬周期中月球与地球公转的周期关系,体现了古希腊天文机械的精密性。

23. Cyphernetes: A Query Language for Kubernetes (cyphernet.es)

Cyphernetes 是一个专为 Kubernetes 设计的查询语言,旨在通过直观、图谱驱动的语法简化复杂的集群操作。它通过借鉴 Neo4j 的 Cypher 语言,让用户能够以声明式的方式查询和操作 Kubernetes 资源及其关系。

核心优势与对比 与传统 kubectl 命令的复杂链式调用相比,Cyphernetes 显著简化了操作。例如,删除所有非运行状态的Pod,传统方式需要冗长的命令组合,而使用 Cyphernetes 只需简洁的查询语句:

MATCH (p:Pod)
WHERE p.status.phase != "Running"
DELETE p;

主要特性

  1. 图谱驱动的查询:允许以优雅的 Cypher 语法表达复杂的多资源操作,将资源间的关系作为核心概念。
  2. 零配置:可与任何 Kubernetes 集群即时协作,自动发现所有自定义资源定义(CRD)并理解资源关系。
  3. 多集群原生:支持通过单一命令查询整个基础设施,使用统一语法管理多个 Kubernetes 环境。

多种使用接口 Cyphernetes 提供多种交互方式以适应不同场景:

  • 交互式 Shell:一个功能强大的 REPL 环境,具备智能自动补全、语法高亮和用于常见操作的内置宏。
  • Web 界面:将集群可视化为图谱,直观展示资源间关系,并提供即时视觉反馈的查询执行。
  • 动态操作符:允许使用 Cyphernetes 查询定义反应式工作流,无需编写 Go 代码即可构建生产级操作符。
24. Conda: A package management disaster? (pyherald.com)

Conda 与 Python 包管理的问题概述

Conda 的复杂性问题

  • 多重版本冲突:Anaconda 发行版允许同时安装多个同一包(如 NumPy)的版本,但 Python 进程可能无法正确识别,导致不同环境或工具(如 Jupyter、pip、conda)显示版本不一致。
  • 工具混用风险:在 conda 环境中混用 pip 和 setuptools 安装包,可能通过硬链接机制意外覆盖文件,破坏其他环境。
  • 环境格式兼容性:conda 版本更新导致虚拟环境格式不兼容,若错误使用旧版 conda 命令可能引发意外行为。
  • 路径优先级干扰:Python 的模块查找路径包括当前目录(可能意外导入同名文件)和 PYTHONPATH 环境变量,增加调试难度。

Python 包管理的系统性缺陷

  • 发布周期短:包维护者缺乏充分测试时间,导致新版本常存在兼容性问题。
  • 缺乏应用级依赖管理:Python 没有原生“应用”概念,依赖管理依赖于虚拟环境(如 venv),但难以处理共享库和版本隔离。
  • 社区实践问题:常见做法(如使用 requirements.txtpyproject.toml)可能过度复杂化配置流程,开发者对基础设施理解不足。
  • 解决方案多样:无通用方案,需根据场景选择 venv、容器、Conda 或其他工具。

Markdown 格式化困惑

  • 标准不统一:Markdown 实现多样,不同工具(如 Python 的 Markdown 包)基于过时定义,导致代码块等语法支持不一致。
  • 正确格式要求:特定语法(如缩进四格或三反引号)需配合 CSS 文件才能正确渲染代码块和行号。
  • 社区标准化努力:CommonMark 标准化曾因发明者反对受阻,加剧工具间的差异。

核心结论

Python 生态的包管理问题源于工具设计缺陷、社区实践混乱及标准化不足,导致开发者常面临环境冲突和调试复杂度高的挑战。解决方案需结合具体需求权衡,但缺乏根本性改进。

27. Coder wrote a bug so bad security guards wanted a word when he arrived at work (www.theregister.com)

HTML 页面:Proof of Work 验证机制总结

此 HTML 文档实现了一个 "proof of work"(工作量证明)挑战,旨在验证用户是否为人类(从页面标题 "Are we human?" 推断),用于网站安全或反机器人措施。页面结构简单,包含内联 CSS 样式和 JavaScript 代码,核心功能是处理挑战解决后的服务器验证。

目的

  • 作为安全验证环节,要求用户完成计算任务以证明是人类操作,防止自动化攻击。
  • 标题暗示了程序员编写漏洞的故事,但内容中未涉及具体叙述,仅展示技术实现。

结构

  • HTML 基础:标准 HTML5 文档,设置字符编码、视口和标题。
  • CSS 样式:使用媒体查询实现响应式设计,针对不同屏幕宽度(如 1024px 以上、513-1023px、512px 以下)调整 .wicketkeeper 元素的尺寸和字体大小,确保挑战界面在各种设备上显示正常。
  • JavaScript 逻辑
    • 加载外部脚本 /_labrador/pow/slow.js,可能用于执行 proof of work 计算。
    • 定义 solved 函数,当挑战被解决时调用,通过 fetch API 向服务器端点 /_labrador/pow/v0/verify 发送 GET 请求,携带 noncetokenresult 头信息进行验证。
    • 若服务器返回状态码 200(成功),则在 500 毫秒延迟后重新加载页面,可能用于后续处理。
  • 页面主体:包含一个 div 元素,类名为 wicketkeeper,通过数据属性指定输入名称和回调函数,作为挑战交互的容器。

关键功能

  • 验证流程:依赖外部脚本处理计算任务,用户完成后触发 solved 函数,实现与服务器的安全验证。
  • 响应式布局:通过 CSS 媒体查询确保挑战元素在不同设备上自适应,提升用户体验。
  • 无直接叙事内容:提供的 HTML 代码纯技术性,未包含标题中提及的程序员故事细节,仅为功能实现代码。

此页面整体设计简洁,专注于技术安全验证,不涉及额外信息或评论。

28. Charles de Gaulle manuscripts discovered in a safe (www.smithsonianmag.com)

戴高乐手稿在保险柜中被发现

巴黎拍卖行Artcurial将在下周拍卖法国前总统夏尔·戴高乐的372件遗物,总估价约100万欧元(约合105万美元)。这批物品此前存放在其子、已于今年3月去世的菲利普·戴高乐的银行保险柜中,连家族成员也未曾知晓其价值。

此次拍卖的藏品极具历史与个人意义,包括:

  • 重要历史文件:戴高乐1940年从伦敦通过BBC发表的著名抗德演讲的亲笔手稿(此件仅公开展览,不出售)。
  • 文学与学术手稿:其14岁时写的短篇小说、1924年首部著作《敌人的分裂》的手稿,以及数年后用化名“Charles de Lugale”发表的故事。
  • 私人笔记与信件:包含哲学思考、政治分析和文学评论的未出版笔记本;二战初期他写给妻子的战场家书;以及一战期间身为战俘时写给母亲的密码信件。
  • 他人信件:包括英国前首相温斯顿·丘吉尔1946年表达对苏联扩张担忧的信函,以及歌手约瑟芬·贝克签名为“您忠诚而肮脏的抵抗者”的信件。
  • 个人物品:戴高乐的金制电子手表、座钟以及童年玩具兵等。

拍卖行负责人表示,发现这批物品时感到“完全意外”,并称其为“法国拯救者戴高乐将军生平的历史宝库”。

部分拍卖收益将捐赠给“安妮·戴高乐基金会”。该基金会以戴高乐患有唐氏综合征的女儿命名,旨在为残疾人士提供住所和支持。

29. Maximum likelihood estimation and loss functions (rish-01.github.io)

本文探讨了机器学习中常用损失函数的统计学起源,揭示了其并非凭空设计,而是自然源于最大似然估计(MLE) 这一概率框架。核心结论是,最小化损失函数等价于寻找模型参数的最大似然估计

1. 最大似然估计(MLE) 最大似然估计的核心是,选择使观测数据出现概率最大的模型参数。给定独立同分布的样本集,MLE的目标是最大化模型在所有样本上的联合概率。为便于计算,通常最大化其对数形式,这等价于最大化样本对数似然的平均值(即关于数据分布的期望)。

2. MLE与KL散度的等价性 文章指出,最小化真实数据分布与模型分布之间的KL散度,等价于执行最大似然估计。KL散度衡量两个分布的差异,其数学推导显示,最小化KL散度的目标函数最终简化为最大化模型分布的期望对数似然,这与MLE的目标完全一致。这为MLE提供了更深刻的几何或信息论解释。

3. 从MLE推导常用损失函数 基于上述等价性,文章展示了如何从MLE出发,为特定模型假设推导出具体的损失函数。

  • 均方误差损失(用于回归) 假设在给定输入 ( \boldsymbol{x} ) 下,输出 ( y ) 服从以模型预测 ( \hat{y} ) 为均值、方差固定的高斯分布。在此假设下,最大化条件对数似然的结果中,需要最小化的项正是预测值与真实值之差的平方和,即均方误差。因此,最小化MSE等价于在该高斯噪声假设下的最大似然估计

  • 二元交叉熵损失(用于分类) 对于二分类问题,模型输出通过Sigmoid函数得到概率 ( p ),代表 ( y=1 ) 的概率。此时,输出 ( y ) 服从参数为 ( p ) 的伯努利分布。最大化条件对数似然,等价于最小化负的对数似然,其形式正是二元交叉熵:( -[y \log p + (1-y) \log (1-p)] )。因此,最小化二元交叉熵等价于在该伯努利分布假设下的最大似然估计

总结 本文系统阐述了最大似然估计作为损失函数理论基础的角色。通过引入KL散度,为MLE提供了更优雅的解释,并通过具体案例(线性回归、逻辑回归)证明了均方误差和交叉熵损失并非人为指定,而是从概率模型和MLE原则中自然推导而来。

31. Nokia 5110 – Back from the Dead (opsbros.com)

Nokia 5110 手机重生计划:从2G经典到4G改装

核心背景

  • 经典机型:Nokia 5110 因其坚固耐用而成为传奇,且支持可更换外壳。
  • 情感联结:作者的第一部手机,具有特殊意义。
  • 现实挑战:原机使用2G网络,该网络已在多数西方国家(包括澳大利亚)关闭,3G网络也即将淘汰。

技术解决方案

  • 核心模块:选用 SIM7600SA(SIM7600E-H) 系统级芯片(SoC)。
  • 模块能力
    • 支持4G网络通信。
    • 可实现短信、通话、TCP/IP、数据传输等功能。
    • 尺寸仅30mm x 30mm。

改装优势与设计

  • 意外之喜:拆解后发现5110的设计使改装比预想容易得多。
    • 内部由两块PCB板组成:接口板(UI Board)基板(Baseboard)
    • 两者通过标准的板对板(B2B)连接器相连。
  • 改装策略:只需重新设计基板,集成4G模块、微控制器、音频处理及电源管理电路,即可无缝替换原基板。
  • 兼容性极佳:B2B连接器提供了标准接口,包括:
    • 按键矩阵(ROWx/COLx)。
    • 电源按钮、LED背光、蜂鸣器和扬声器线路。
    • 显示屏使用标准的I2C接口。

当前进度与后续计划

  • 当前成果:已确认改装方案可行,可完整保留手机原始外观与操作手感。
  • 下一步:将进入第二阶段,详细设计新基板的电路,以确保手机正常运作并具备长久耐用性。
32. Using Drop for safety in Rust (v5.chriskrycho.com)

摘要

本文探讨Rust中Vec::drain方法的实现,重点分析如何通过Drop trait确保内存安全。Vec::drain用于从向量中移除指定范围的元素,返回一个迭代器。实现时,Rust不复制元素到新向量,而是保持对原向量的可变引用,利用所有权规则防止迭代器失效或数据损坏。

Vec::drain返回一个Drain结构体,它持有对原向量的可变引用和一个切片迭代器。迭代时通过std::ptr::read立即返回值,这依赖于所有权保证安全:在Drain存在期间,原向量无法被访问。关键点在于Drop trait的实现不能单独保证soundness;Rust在创建Drain时通过截断向量长度(set_len(start))来确保安全性,即使Drop未运行(例如通过std::mem::forget泄漏),也不会违反安全不变量。

Draindrop实现包含一个内部DropGuard结构,用于在迭代器丢弃时将未drain的元素(尾部)移回原向量。DropGuard自身的Drop实现确保元素迁移,即使drop_in_place发生panic。实现还处理零大小类型(ZST)的特殊情况,通过调整向量长度而非移动内存。性能上,元素移动仅在迭代器丢弃时进行,避免预处理开销。

安全保证包括:原向量在drain期间和之后始终有效;迭代器不会被无效化;这些保证在遇到行为不良的Drop实现时仍然成立,前提是代码没有不健全的unsafe操作。最坏情况下(如内存泄漏),内存安全依然保持。Rust的所有权模型消除了常见的迭代器无效化 bug,这些在其他语言中可能出现。

文章进一步讨论了指针来源(provenance)的重要性,以及使用Miri工具进行动态分析以确保unsafe代码的正确性。整体上,Vec::drain展示了Rust如何结合unsafe代码和所有权语义,提供高性能的同时维护内存安全。

33. Ask HN: Examples of agentic LLM systems in production?