2024-06-17

49 篇热帖

1. DJI ban passes the House and moves on to the Senate (dronedj.com)

美国众议院通过包含大疆禁令的国防授权法案

  • 立法进展:美国众议院在按党派划线投票中通过了2025财年《国防授权法案》。该法案为国防部及能源部的国防行动提供资金,是每年必须通过的法案,其内容现已超过1000页,包含许多与军费无关的附加条款。
  • 关键条款:法案中的一项修正案(H.R. 2864,即《反制中国共产党无人机法》)位于第1722条。该条款旨在禁止大疆公司获取美国联邦通信委员会的批准,从而阻止未来大疆无人机在美国的进口,并可能导致现有无人机被停飞
  • 通过背景:此次投票基本沿党派划线进行。此前,由于共和党附加了具有党派色彩的修正案,导致民主党人集体反对。但分析指出,反制中国的立法在美国两党中均受到支持,因此民主党并非反对该禁令本身。
  • 当前状态与后续影响:该法案已移交美国参议院审议。若在参议院获得通过并经总统签署成为法律,该禁令将直接影响美国市场。目前法案未规定对受影响用户进行补偿。
  • 潜在挑战:如果法案最终成为法律,大疆及公众是否会对禁令提出法律挑战,将成为后续关注焦点。
4. MicroMac, a Macintosh for under £5 (axio.ms)

MicroMac:基于微控制器的Macintosh 128K模拟器

项目概述

MicroMac是一个在Raspberry Pi Pico微控制器(搭载RP2040芯片)上运行的Macintosh 128K模拟器项目。其目标是利用成本低于5英镑的硬件,通过VGA视频输出和USB键鼠输入,完整模拟初代Macintosh 128K的计算体验,并能运行当年的系统软件及应用程序(如MacDraw、MacWrite)。

核心技术挑战与解决方案

1. 硬件平台限制

  • 内存:RP2040的264KB RAM足够容纳Macintosh 128K所需的128KB内存,并为模拟器自身代码留出空间。
  • 存储:Pico板载的2MB闪存用于存放Macintosh ROM和磁盘映像。
  • 外设支持:利用RP2040的USB主机功能连接键盘和鼠标,并通过其可编程IO(PIO)状态机生成512x342的单色VGA视频信号。

2. 软件模拟器开发 (umac项目)

作者基于Musashi 68K解释器构建了名为umac的模拟器,遵循以下原则:

  • 不自行编写68K汇编器,而是集成现有解释器。
  • 将Macintosh ROM和操作系统视为“黑盒”,专注于模拟硬件。

主要模拟的硬件组件包括:

  • 地址解码与内存映射:处理CPU访问路由至RAM、ROM或特定设备。
  • VIA、SCC芯片:模拟中断、鼠标键盘输入及定时器。
  • IWM软盘控制器:这是最大的难点。IWM直接提供原始磁盘数据流,不抽象物理细节,且涉及复杂的伺服控制。作者通过ROM补丁半虚拟化驱动(参考Basilisk II和Mini vMac的做法)绕过了完全模拟IWM的复杂性,使操作系统能通过自定义驱动直接读取虚拟磁盘块。
  • 视频与定时中断:模拟固定512x342的1位/像素视频扫描和系统时钟。

3. 性能优化

初始模拟速度极慢(约300 KIPS)。为达到接近原机8MHz 68000的约1 MIPS性能,进行了多项优化:

  • 超频:将Pico从125MHz超频至250MHz。
  • 代码优化:精简Musashi主循环,移除不必要的检查(如对齐检查)。
  • 关键优化 - 指令缓存:通过性能分析发现,仅5%(前100条)的68K热点指令占据了89%的执行时间。作者利用构建后处理将最常用的200条指令(98%执行量)放入RP2040的快速SRAM中运行(使用__not_in_flash_func属性),从而大幅减少从较慢的XIP闪存取指的延迟。最终实现约1.4 MIPS,足以流畅运行应用程序和游戏。

4. 硬件构建

  • VGA输出:设计了简单的电阻分压电路将3.3V GPIO信号转为0.7V VGA信号。视频生成通过PIO和DMA实现,经历了三次迭代以解决同步和稳定性问题,最终采用三通道DMA设计,确保无画面撕裂或锁死。
  • 系统集成:将模拟器、USB HID驱动和视频驱动整合到Pico固件中,总代码和数据占用约35-40KB RAM,在为Macintosh保留128KB后仍有超过95KB的空闲RAM。

成果与限制

  • 成功运行:MicroMac能够启动System 3.2,并运行MacDraw、MacWrite、MacPaint(需特定条件)以及《Missile Command》等游戏。
  • 局限性
    1. 由于Macintosh Plus ROM占用更多内存,在128KB配置下无法直接运行MacPaint等需要写临时文件的应用。作者探索了“Mac 200K”的非2次幂内存配置,但遇到ROM内存测试和地址镜像问题。
    2. 当前的128KB内存是限制更多应用运行的主要瓶颈。作者指出,若使用拥有约300KB RAM的MCU,则可构建支持256KB内存的版本,从而获得更好的兼容性。

资源

项目代码和构建指南已开源:

5. How to get stuff repaired when the manufacturer don't wanna: take 'em to court (blog.simonrumble.com)

文章标题:当制造商不愿维修时:通过法律途径维权

核心内容摘要:

本文作者通过亲身经历,阐述了当电器制造商以“超出保修期”为由拒绝提供免费维修时,消费者如何依据澳大利亚消费者法争取合法权益,并最终通过法律途径成功解决问题的过程。

主要要点:

  1. 问题与初始交涉

    • 作者的烤箱出现故障,联系制造商伊莱克斯后被告知需支付至少160美元的上门诊断费。
    • 这与澳大利亚消费者法相悖,该法规定消费者享有法定权利,可期望商品在合理期限内保持正常使用。
  2. 法定权利 vs. 有限保修

    • 制造商提供的书面保修是“明示保修”,是法定权利之外的额外保障。制造商不能排除法定权利。
    • 消费者有权期望电器达到“合理”的使用年限,具体时长因商品类别和价位而异。
  3. 采取法律行动

    • 在与制造商沟通无果后,作者决定诉诸新南威尔士州民事和行政仲裁庭(NCAT)。这是一个处理消费者索赔的低成本、流程简化的法庭,通常无需律师。
    • 作者指出,通常应向零售商而非制造商提起诉讼。他联系了零售商Appliances Online,但对方最初也推卸责任。
  4. 仲裁过程与效果

    • 作者支付了58美元的申请费并提交了NCAT申请。
    • 收到开庭日期后,零售商迅速主动联系作者,表示将安排制造商进行维修,以避免出庭。文章强调,对零售商而言,派人出庭的成本通常高于直接维修。
  5. 问题解决

    • 伊莱克斯工程师先后两次上门。首次维修未彻底解决问题。
    • 在作者表示问题依旧后,第二次上门更换了加热元件和风扇,最终排除了故障。
  6. 结论与倡导

    • 作者对结果满意,但为必须如此大费周章才能行使法定权利感到不满。
    • 作者鼓励其他消费者也积极主张自身权益,以此促使企业更主动地遵守消费者法,避免企业以“短保修期”推卸责任。
6. Why "Structure and Interpretation of Computer Programs" matters (2011) (people.eecs.berkeley.edu)

文章核心观点:SICP对计算机科学教育的革命性影响

1. 提升计算机科学入门课程的标准

  • SICP之前的计算机科学入门课程通常专注于学习特定编程语言的细节。
  • SICP则从更高层次审视编程过程,强调抽象的核心概念:从具体问题中发现通用模式,并构建体现这些模式的软件工具。
  • 它大量运用了函数作为数据的概念,这是一个初学困难但极其强大的理念。
  • 它在第一门课程中融入了三种编程范式(函数式、面向对象和声明式),而当时大多数课程甚至不会深入讨论任何一种范式。

2. 选择Scheme语言作为教学工具

  • Scheme从未在工业界广泛使用,但它被证明是计算机科学入门的理想语言。
  • 其语法简洁且统一,使得课程能将大量时间用于学习思想而非语法细节。
  • 尽管简单,Scheme功能强大,足以展示多种编程范式,并能揭示面向对象编程的内部实现原理,使其不再神秘。
  • 作者和SICP的创作者们相信,掌握了核心思想后,学习新编程语言将变得轻松。

3. 对学生的高期望与严谨内容

  • SICP对大学新生的能力持乐观态度,其课程内容(如编写解释器)通常被认为是高年级的内容。
  • 教材本身阅读难度高,没有现代教材常见的辅助设计元素,但每句话和每个习题都经过精心设计,旨在教授重要概念。

4. 持久的影响力与后续发展

  • 尽管基于SICP的课程在统计上属于少数,但它启发了众多后续教材,并提升了编程范式等思想在计算机科学教育中的关注度。
  • SICP教材本身具有罕见的持久性,出版25年后仍在使用,这得益于其捕获的是计算背后不变的核心思想。
  • 文章作者自1987年起在伯克利大学教授基于SICP的课程,并对其进行了增量更新(如增加并发、用户界面设计等内容)。
  • MIT近期的本科课程重组并非简单“转向Python”,而是从以主题为中心转向以应用为中心的课程组织,SICP所代表的理念革命性尚未被超越。
  • 经验表明,学生可能在课程中未充分意识到所学的价值,但多年后常反馈SICP中的思想在工作中极具实用性(例如谷歌MapReduce基于函数式编程思想)。

5. 现状与展望

  • 文章指出,伯克利大学计算机科学专业新的入门课程已改用Python,并尝试保留SICP的思想与部分内容。
  • SICP证明了计算机科学教育应关注思想而非仅仅编程实践,这一理念已扩展到涵盖计算的社会背景和影响等非技术层面。
7. Experts vs. Imitators (fs.blog)

专家 vs. 模仿者

要获得最高质量的信息,必须向最优秀的人求教。问题在于,许多人自称专家,实则并非如此。

核心建议: 花时间辨别真正的专家与模仿者。并非所有自称专家的人都货真价实。

例如,许多基金经理模仿沃伦·巴菲特的观点,他们听起来像巴菲特,但并不具备其投资能力,这些人便是模仿者。查理·芒格曾指出:“很难区分一个优秀的基金经理和一个只是掌握了一套说辞的人。”

如何区分专家与模仿者?

  • 模仿者无法深入解答问题。 具体知识是实践所得,而非仅靠学习,因此模仿者对其谈论的理念理解肤浅。当涉及细节、第一原理或非标准案例时,他们无法给出有力回答。
  • 模仿者不能灵活调整表达方式。 他们只能使用所学的、通常充满行话的术语进行解释。由于对术语背后的思想理解不透,他们无法为听众更清晰地调整表达。
  • 当你说“不理解”时,模仿者会感到沮丧。 这种沮丧源于他们过度在意专家形象的表面维护,深入解释可能破坏这种形象。真正的专家则乐于分享他们所知,不会因你的不理解而沮丧,反而欣赏你的好奇心。
  • 专家能讲述自己所有失败的经历。 他们知道并接受失败常是学习过程的一部分。模仿者则可能回避承认错误,担心损害其试图塑造的形象。
  • 模仿者不知道其专业知识的界限。 专家清楚自己知道什么,也明白自己不知道什么,并能指出自己何时接近能力圈的边界。模仿者则无法识别这些界限。

最后提醒: 我们许多知识并非来自原始研究或直接请教专家,而是通过旨在广泛传播的通俗解读获取。通俗解读作者比外行懂得多,但他们本身并非专家,只是擅长清晰、易记地传达思想。因此,通俗作者常被误认为专家。在寻找专家时需注意:真正具备专业知识的人,往往并非那个让该主题变得流行的人。

(本文改编自《清晰思考:将普通时刻转化为非凡成果》)

11. Marion Stokes, the Woman Who Spent over 30 Years Recording Every Minute of US TV (allthatsinteresting.com)

马里昂·斯托克斯:耗费三十余年记录美国电视的女性

马里昂·斯托克斯(Marion Stokes)从1979年开始,持续30多年,私人录制多个电视频道的节目,每天24小时不间断,最终积累了约71,000盘录像带,构成了一部庞大的美国电视历史档案。

个人背景与起因

  • 生平:1929年生于费城,曾任图书馆员,也是民权活动家,参与过多个社会运动组织。
  • 转折点:1979年伊朗人质危机期间,她开始持续录制电视新闻,认为电视中包含可能丢失的关键历史细节,并坚信“按下录制键后,她就再未停止”。

录制工作的规模与特点

  • 设备与存储:她同时在最多8台电视机上录制节目,后期投资了大量VHS和Betamax录像带,并购买了额外的公寓用于存储。
  • 内容范围:不仅录制新闻,还包括情景喜剧、广告和脱口秀等多种节目,总计超过400,000小时的素材。
  • 工作方式:每6至8小时更换一次录像带,生活节奏完全围绕录制进行,其他事务均为此让路。

去世与项目延续

  • 逝世:2012年12月14日去世,巧合的是,当日全美正报道桑迪胡克小学枪击案。
  • 数字化保存:2013年起,互联网档案馆(Internet Archive)开始将其录像带数字化并上线。
  • 纪录片:2019年纪录片《录制者:马里昂·斯托克斯计划》上映,讲述了她的故事与理念。

项目意义与现状

斯托克斯的工作引发了关于媒体保存、事实记录以及物理媒体价值的讨论。随着流媒体时代内容可能消失或受限,她的档案更显珍贵。互联网档案馆的图书馆员指出,可能还有其他像她一样的“游击式档案保存者”存在。

13. Lindroid (twitter.com)

摘要

内容描述了用户在x.com平台上遇到的错误情况。系统提示操作未成功执行,但鼓励用户无需担忧,并建议重新尝试。具体指出隐私相关的浏览器扩展可能是导致该问题的原因,因此建议用户禁用这些隐私扩展后再次操作。整体信息简洁,旨在提供错误处理指导。

14. React 19 almost made the internet slower (blog.codeminer42.com)

React 19 潜在性能问题与社区反应

背景与影响范围 React 仍是全球最流行的前端框架,为 Netflix、Airbnb、Discord 及 Meta 旗下产品提供用户界面,其运行时性能影响着海量互联网流量。今年宣布的 React 19 引入了诸多新特性,但一项未被广泛注意的变更可能显著降低依赖特定数据获取模式的网站性能。

核心变更:Suspense 边界内渲染机制的改动 该变更源于一个 GitHub Pull Request (#26380),主要调整了同一 Suspense 边界内兄弟组件的渲染行为:

  • React 18 行为:当边界内有多个组件时,即使第一个组件触发挂起,React 仍会尝试渲染所有兄弟组件。若组件内包含数据获取或懒加载,这些操作会并行启动
  • React 19 变更后行为:一旦首个组件挂起,渲染立即停止(即“中止”),后续兄弟组件的数据获取或懒加载不会启动,直到前一组件完成。这导致原先并行的操作变为顺序执行(瀑布流),增加整体加载时间。

技术示例与影响 代码示例展示了三个同级 Suspense 边界内的数据获取组件:

  • 在 React 18 中,三个数据请求几乎同时发起(并行)。
  • 在 React 19 中,请求顺序执行,形成瀑布流,总耗时延长。

此变更不仅影响基于第三方库(如 TanStack Query)的客户端数据获取模式,也影响长期官方支持的 React.lazy 代码分割模式,波及范围较广。

变更理由与开发者体验权衡 React 团队解释此变更有两方面考量:

  1. 性能优化:原机制尝试渲染所有兄弟组件后再显示 fallback,延迟了加载指示器的出现。
  2. 架构理念对齐:与团队倡导的 “渲染时获取” 理想模式一致——即数据获取应尽早发起(如在组件外部),而非在渲染时触发。

然而,理想模式要求组件与其数据需求分离(即数据获取逻辑提升到组件外),这会损害 开发者体验,难以实现组件与数据的就近维护(colocation)。社区指出,在不依赖编译器(如 Relay)的情况下,兼顾最佳性能与开发便利性非常困难。

社区反应与后续 该变更引发开发者社区广泛关注与批评,核心维护者(如 TanStack Query 维护者 TkDodo)和社区成员通过社交媒体指出其对现有代码的破坏性影响。鉴于强烈的反对声音,React 团队最终暂时搁置了这一变更。

总结 此次事件凸显了 React 核心团队的技术愿景(侧重渲染优化与架构理念)与广大开发者实际使用模式及依赖之间的张力。React 19 的此项变更虽出于性能考虑,但可能破坏现有并行数据获取模式,影响开发范式。社区反馈最终促使团队暂停推进,也反映出大型开源项目中技术决策与社区协同的挑战。

16. I learned Haskell in just 15 years (duckrabbit.tech)

我花了15年学习Haskell

作者Evan Silberman回顾了自己长达15年的Haskell学习历程。他最初在2007-2008年左右开始接触Haskell和函数式编程,通过阅读Graham Hutton的《Programming in Haskell》以及后来的《Real World Haskell》进行学习,但收效甚微,未能真正掌握。

一个转折点是2009年,作者在安装了Xmonad窗口管理器的笔记本上进行配置修改,这是他第一次为Haskell编写代码,尽管主要是通过修改示例配置来完成的。

在随后几年里,作者因工作原因使用Ruby、Python等语言,但始终对Haskell保持兴趣,并经常使用用Haskell编写的软件如hledger和Darcs。

2016年,作者通过学习Elm语言取得了实质性进展。Elm与Haskell相似但更为简洁,其明确的架构(The Elm Architecture)帮助作者理解了函数式编程的核心概念,例如使用纯函数处理状态,以及明确解码JSON数据到领域类型。

后来,作者使用Haskell的Shake库构建静态网站生成器,进一步积累了经验。在一次会议上,他开始为内部文档构建站点。

2023年失业后,作者开始自由职业,并用Haskell编写了一个真正有用的程序——一个用于跟踪工作时间的时间管理工具。该程序能解析命令行参数、操作数据库、进行时区转换并生成报告。这是作者第一个“实用”的Haskell程序。

作者总结道,他喜欢Haskell的原因在于其自然的编程方式:声明式地构建领域数据模型,编写纯函数处理数据,并在程序边界与现实世界交互。即使不使用Haskell,这也是他最喜欢的编程方式。整个学习历程表明,通过实际项目和约束性强的工具(如Elm)循序渐进地学习,是掌握函数式编程的有效途径。

17. Creativity has left the chat: The price of debiasing language models (arxiv.org)

摘要:创造力已离线:去偏见语言模型的代价

核心议题
该文章探讨了在自然语言处理(NLP)领域中,对语言模型进行去偏见(debiasing)处理所可能带来的副作用,特别是对模型创造力的潜在削弱。其核心论点在于,去除模型中的偏见(如性别、种族、社会文化偏见)可能同时消除了某些有助于生成新颖、多样化内容的“隐含特征”,导致模型在创造力方面的表现下降。

关键内容推测(基于标题与上下文)

  1. 研究背景:当前语言模型(如大型语言模型LLMs)因可能再现训练数据中的社会偏见而备受关注。去偏见技术被广泛研究和应用,旨在促进公平性和减少有害输出。
  2. 核心矛盾:文章指出,去偏见过程可能存在一个权衡:在消除有害偏见的同时,也可能抑制了模型产生非常规、创造性表达的能力。这种“创造力代价”可能源于去偏见操作对模型内部表征的过度简化或约束。
  3. 研究意义:该研究揭示了在人工智能伦理(如公平性)与模型能力(如创造力)之间可能存在的张力,呼吁对去偏见技术进行更精细的评估,避免“一刀切”的处理方式。

关联信息

  • 平台与工具:文章涉及的数据、代码或媒体内容可能与arXiv平台的开源实验项目 arXivLabs 相关联。该项目致力于通过社区协作开发新功能,强调开放性、社区合作和用户数据隐私。
  • 研究生态:文章可能使用了相关的文献探索、引用工具、推荐与搜索系统等学术研究辅助工具。

总结
该文章质疑了当前去偏见语言模型范式的潜在成本,提出创造力的衰减可能是一个未被充分重视的代价。它鼓励研究者在追求模型公平性的同时,也需关注并量化其对模型多样性和创新性的影响,寻求更平衡的优化方案。

18. First look at the upcoming Starlink Mini (www.starlinkhardware.com)

Starlink Mini 超便携卫星互联网天线初体验

概述 Starlink Mini是一款超便携卫星互联网天线,尺寸类似笔记本电脑,是Starlink现有产品中最紧凑的碟形天线。尽管体积小巧,但其性能与功能并未缩水。

设计与开箱

  • 尺寸与重量:尺寸为11.75″ x 10.2″ x 1.45″,重量约2.5磅,可轻松放入背包。
  • 集成化设计:与传统分离式设计不同,Mini将Wi-Fi路由器集成在天线内部,无需外接路由器,极大简化了设备。
  • 接口:背面设有电源接口(DC5521)和一个以太网端口(不支持PoE),均具备IP67防水防尘等级。
  • 包装内容:套件包含天线、AC电源适配器、50英尺DC电源线以及两种安装支架(临时支架和管状适配器)。

供电灵活性(核心优势) Mini的供电方式极为灵活,这是其关键优势之一:

  • 直流输入:支持12-48V直流电,可通过多种方式直接供电:
    • USB-C供电:需要支持PD协议的USB-C端口(最低20V/5A)。
    • 车载电源:可通过车辆点烟器端口供电,适合车载移动使用。
    • 电池/电站:可连接便携电站、RV电池系统等。
  • 交流输入:也附带AC电源适配器,可使用传统墙插。
  • 功耗低:连接稳定后,平均功耗约为20-30瓦,仅为旧型号的一半左右,非常适合离网、电池或太阳能供电场景。

性能表现

  • 速度测试:在理想条件下(设备紧贴天线),下载速度最高可达约200 Mbps,上传速度约30 Mbps,延迟约30毫秒。移动使用(如车载,时速70英里)时,下载速度仍可超过100 Mbps。
  • Wi-Fi覆盖范围:这是主要短板。集成路由器的Wi-Fi覆盖范围有限(约1200平方英尺),距离越远,信号衰减和速度下降越明显。建议在需要更好覆盖时,外接第三方路由器或使用Mesh网络。
  • 移动性能:在高速移动中(如车内)能保持稳定、高速的连接,表现令人印象深刻。

优点

  1. 极致的便携性:尺寸小、重量轻,是背包旅行、房车露营和车载移动的理想选择。
  2. 出色的能效:功耗远低于其他Starlink型号,长时间电池供电成为可能。
  3. 供电灵活:支持多种直流电源直接输入,摆脱了对交流电源的依赖。
  4. 一体化设计:开箱即用,无需额外配置路由器。

缺点与考量

  1. Wi-Fi性能有限:集成路由器导致覆盖范围小,远距离使用体验下降。
  2. 价格较高:在美国售价为499美元,比标准版(349美元)贵150美元。其溢价主要体现在便携性和低功耗上。
  3. 以太网端口无PoE:若想绕过集成路由器使用有线连接,仍需额外供电线,布线不够简洁。

结论 Starlink Mini是一款为移动性与低功耗需求而生的专用产品。它在性能和尺寸之间取得了出色的平衡,是RV旅行者、数字游民和应急通信场景的绝佳选择。然而,其较弱的Wi-Fi覆盖和较高的价格意味着,对于家庭固定使用场景,标准版可能是性价比更高的选择。总体而言,如果你将便携性和电源灵活性置于首位,Mini目前无可替代。

19. Show HN: SQLite Database Explorer (github.com)

SQL Studio 数据库管理工具

SQL Studio 是一个单一二进制文件、单命令启动的 SQL 数据库浏览器工具。

支持的数据库类型

该工具支持连接多种数据库和文件格式:

  • 本地文件:SQLite、libSQL (本地驱动)、DuckDB、Parquet、CSV
  • 远程数据库服务器:libSQL、PostgreSQL、MySQL/MariaDB、ClickHouse (部分支持)、Microsoft SQL Server

核心功能

  • 概览页面:展示通用的数据库元数据。
  • 表页面:查看每个表的元数据。
  • 查询页面:提供更深入的数据库访问和查询能力。
  • 无限滚动行视图:方便浏览大量数据行。
  • 丰富的 SQL 智能感知:在自定义查询时提供语法提示。
  • 其他更多功能可在发布页面查看。

安装与使用

安装方式

  • macOS/Linux:可通过 shell 脚本安装预编译二进制文件。
  • Windows:可通过 PowerShell 脚本安装。
  • Nix:支持通过 nix shell 使用。
  • Docker:提供 Docker 镜像,例如用于运行 PostgreSQL 驱动的容器命令。

基本命令示例

启动工具后,通过不同子命令连接各类数据库,例如:

  • sql-studio sqlite [sqlite_db]
  • sql-studio postgres [url]
  • sql-studio csv [csv_file]

开发相关

项目采用 Rust 开发,UI 文件会被静态嵌入到二进制文件中。本地开发前需先进入 ui 目录构建前端资源,然后再运行 cargo run 编译主程序。

21. Optical PCIe 7.0 connection hits 128 GT/s (www.tomshardware.com)

在2024年PCI-SIG开发者大会上,Cadence展示了其专有的PCIe 7.0光学连接解决方案,实现了全球首次128 GT/s速率的光学互连演示。此次演示是一个重要的概念验证,因为PCIe 7.0规范尚未最终确定。

  • 演示细节与性能:该演示使用了真实的、低延迟、非重定时、线性的光学连接,稳定达到了约3E-8的预前向纠错误码率,远优于PCIe规范要求的1E-6。演示中的接收端PAM4眼图显示出优异的线性度和余量。
  • 行业标准化背景:PCI-SIG于2023年成立了光学工作组,旨在制定行业标准的PCIe over optical接口。PCI Express传统上仅依赖铜缆互连。随着在AI和HPC服务器等应用中连接距离变长,使用重定时器(每条链路最多两个)变得复杂、昂贵且耗电,因此探索光学连接意义重大。
  • 标准与技术路径:多家供应商目前提供专有的外部PCIe连接方案,但这与PCI-SIG的标准化工作并不冲突。PCI-SIG强调其目标是开发一个技术无关的规范,支持广泛的光学技术,而非为特定技术制定标准。
  • 广泛展示:除了光学PCIe 7.0,Cadence在展会上还展示了多种PCIe配置,包括PCIe 7.0电气方案,以及各种PCIe 6.0设置(如RP/EP互操作背靠背、FLIT模式协议演示、JTOL测试和系统级互操作性演示)。PCIe 7.0的光学解决方案预计将在未来几年内成为必需。
22. They make USB-C cables with displays now (ounapuu.ee)

这篇文章介绍了作者在寻找额外USB-C电缆时,发现了一种内置小型显示屏的USB-C电缆,该显示屏能够实时显示连接设备的功耗。作者认为这对监控设备功耗和确认充电速度是否符合预期非常有用。该电缆价格为6.72欧元,但质地较硬,可能是因为支持USB 4标准需要更好的线材和屏蔽。经测试,它能稳定支持3440x1440分辨率60Hz的DisplayPort输出。不过,其耐用性尚需时间验证。作者提醒,此类电缆可能存在隐藏恶意芯片的安全风险。如需更专业的功耗测量,可参考GitHub上列出的其他测量设备。搜索时建议使用关键词“USB 4 Cable with LED Display”。

23. Lnav Logfile Navigator (lnav.org)

Lnav Logfile Navigator 是一款专为终端设计的日志文件查看器,旨在让用户能够轻松地合并、追踪、搜索、过滤和查询日志文件。其主要特点和优势如下:

  • 核心功能:无需服务器或复杂配置即可提供丰富的功能,专注于高效的日志处理。
  • 易于使用:操作简便,只需将 lnav 指向一个目录即可自动处理。它能自动识别文件格式并实时解压压缩文件,配合在线帮助和操作预览,可提升用户体验。
  • 性能出色:在处理日志文件时,其性能优于标准的终端工具。根据一份使用 3.3GB 访问日志进行的对比测试,lnav 在 CPU 和内存使用方面更具效率(该测试图表也由 lnav 的 SQLite 接口生成)。
  • 学习资源:用户可通过官方提供的介绍视频和文档进一步了解和使用该工具。
24. The enduring mystery of how water freezes (www.quantamagazine.org)

水结冰的奥秘在于冰核形成,这一过程远比单纯的零下温度复杂。通常,水在0°C并不立即结冰,因为液态水分子需要跨越能量屏障,随机排列成微小的冰胚并达到临界尺寸后才能形成稳定的冰核,进而生长为冰晶。纯水的冰核形成非常缓慢,但在自然界中,杂质和表面为这一过程提供了“脚手架”,能显著降低能量屏障,提高结冰温度。

表面特性如结晶度、化学结构模仿冰晶以及特定尺寸的孔隙,均能促进冰核形成。生物界中的细菌和真菌是高效的天然冰核剂,例如丁香假单胞菌的蛋白能在约-2°C诱导水结冰,已用于人工造雪。尽管通常蛋白质越大越利于冰核化,但真菌却通过聚集成大型复合体来弥补小尺寸的不足。

科学家通过构建计算机模型来模拟水的冰核过程。这些模型能准确再现水的宏观性质,并预测冰核化温度与表面特性之间的关系。例如,表面的凸凹几何形态能通过改变水分子构型来影响冰核化效率,这为设计改进型冰核材料提供了可能。

理解冰核化具有重要应用价值。大气中的颗粒(如矿物尘和生物蛋白)通过冰核化影响云中降水形成,相关技术已被应用于人工增雨和防雹等领域。然而,自然云中冰核的具体作用机制与关键物质仍有待深入研究。

25. New branding, same scanning: Upload moderation undermines end-to-end encryption [pdf] (signal.org)

文章摘要

这篇文章是Signal总裁Meredith Whittaker于2024年6月17日发表的声明,针对欧盟围绕“聊天控制”立法的辩论。其核心观点是,所谓的“上传审核”提案实质上是破坏端到端加密的旧方案的新包装,会对全球安全和隐私构成严重威胁。

主要内容如下:

  1. 核心立场:端到端加密是抵御国家和企业大规模监控的关键隐私保护技术。其完整性一旦被破坏,将无法修复。
  2. 欧盟背景:欧盟议会于2023年11月投票将大规模监控令排除在端到端加密之外,这符合全球众多计算机安全专家的共识。
  3. 对“上传审核”的批评:一些欧洲国家现以“上传审核”这一新术语替代“客户端扫描”,并声称因为在消息加密前进行扫描,所以不会破坏加密。Whittaker严正驳斥这一说法,指出在加密前强制扫描私人通信的做法,无论叫什么名字(后门、前门或上传审核),都等同于在基础设施中植入一个可被黑客和敌对国家利用的高危漏洞。
  4. 根本原则:破坏端到端加密(尤其是在当前地缘政治不稳定时期)将是一场灾难。加密要么保护所有人,要么对所有人都失效。
  5. 呼吁:Whittaker呼吁停止这种文字游戏,要求决策者正视专家社区的明确警告:任何旨在对加密通信内容进行大规模扫描的方案,都将从根本上破坏加密技术本身。
26. NumPy 2.0 (numpy.org)

NumPy 2.0.0 版本摘要

版本概述

NumPy 2.0.0 是自 2006 年以来的首个主要版本,包含大量新功能、性能改进和破坏性变更(如 ABI 不兼容、类型提升规则改变等)。支持 Python 3.9-3.12。

主要亮点

新功能

  • 新字符串数据类型:引入 StringDTypenumpy.strings 命名空间,用于高效字符串操作。
  • 数组 API 标准:主 numpy 命名空间支持数组 API 标准。
  • 其他新函数/特性bitwise_countnumpy.linalg.svdvalsnumpy.linalg.diagonal/tracenumpy.linalg.outer/cross、矩阵转置 .mT 属性、astype 函数、unique_* 系列函数、新的 long/ulong 数据类型等。
  • 新关键字参数:为 var/std 添加 correction,为 sort/argsort 添加 stable,为 matrix_rank 添加 rtol 等。

性能改进

  • 排序加速sortargsort 等函数利用 SIMD 库(如 Intel x86-simd-sort 和 Google Highway)显著提速。
  • macOS 支持:集成 macOS Accelerate 框架,线性代数运算性能提升最高达 10 倍,提供二进制安装包。
  • 字符串操作加速numpy.char 固定长度字符串操作通过新 ufunc 加速。
  • FFT 支持原生精度numpy.fft 函数根据输入精度(float32/float64/longdouble)进行计算,并支持原地计算。
  • 新诊断 APInumpy.lib.introspect.opt_func_info 用于追踪硬件特定内核。

API 重大改进与变更

Python API

  • 公共/私有 API 明确分离:主命名空间对象减少约 10%,numpy.lib 减少约 80%,移除大量不推荐的函数和别名。
  • 类型提升规则变更:采用 NEP 50,修复依赖数据值的意外行为,但可能导致输出数据类型变化。
  • 新功能numpy.isdtypenumpy.astype、数组 API 兼容别名(如 concattensordot)。
  • 默认整数类型更改:在 64 位 Windows 上默认为 int64(与其他平台一致)。
  • 标量表示更改:现在输出 np.float64(3.0) 而非 3.0
  • 字符串真值行为统一:现在非空字符串为 True,空字符串为 False
  • copy 参数语义明确False 在需要复制时会引发错误。
  • 返回类型变更np.gradient 等函数返回元组而非列表。

C API

  • 新公共 API:用于创建自定义数据类型的 API。
  • 新初始化函数PyArray_ImportNumPyAPIPyUFunc_ImportUFuncAPI
  • ABI 破坏性变更:基于 NumPy 1.x 构建的二进制扩展将无法在 2.0 上工作,需重新构建。
  • 结构体字段访问变更PyArray_Descr->f 等字段被移除,需通过新函数访问。
  • 新函数PyArray_PackPyDataType_FLAGS 等。
  • 常量与宏变更NPY_MAXDIMS 增至 64,引入 NPY_RAVEL_AXIS

重要的移除与弃用

已移除

  • Python 函数/别名np.cast, np.source, np.lookfor, np.who, np.float_, np.complex_, np.Inf 等众多别名,以及 np.find_common_type, np.round_, np.compare_chararrays 等。
  • C API:大量过时函数和宏,如 PyArray_CGT 系列宏、npy_interrupt.hnoprefix.hMapIter 相关 API 等。
  • 子模块numpy.core 重命名为 numpy._core(私有),numpy.linalg.linalg 重命名为 numpy.linalg._linalgnumpy.fft.helper 重命名为 numpy.fft._helper

已弃用

  • np.compat, np.recfromcsv, np.recfromtxt, np.trapz, np.in1d, np.row_stack 等。
  • 对于 N-D FFT 函数,s 参数包含 None 值和 axes=None 的用法。
  • __array_wrap__ 方法的新签名要求。

兼容性与迁移建议

  • 必须迁移:下游包需针对 NumPy 2.0 重新构建以验证兼容性。
  • 迁移指南:提供详细的《NumPy 2.0 迁移指南》和针对下游包作者的特定建议。
  • 自动修复:提供 Ruff 模式来自动修复部分 Python 代码。
  • 关键行为变更:类型提升规则、默认整数类型、排序算法结果可能微调、np.solve 广播规则、Polynomial 表示方式等。

结论

NumPy 2.0 是一个包含大量改进但具有破坏性的重要版本。用户和下游开发者应仔细阅读发布说明、迁移指南和兼容性注释,以确保平稳升级。

27. Backdoor in D-Link routers enables telnet access (supportannouncement.us.dlink.com)

D-Link 路由器漏洞安全公告摘要

核心内容: D-Link 旗下多个系列的路由器被报告存在两个安全漏洞,攻击者可在同一局域网内利用漏洞进行未授权访问和读取敏感文件。厂商已发布固件更新并建议用户立即升级。

漏洞详情:

  1. CVE-2024-6044 (CVSS 6.5)

    • 类型: 路径遍历漏洞 (CWE-22)。
    • 影响: 未经身份验证的攻击者可以读取设备上的任意系统文件。
  2. CVE-2024-6045 (CVSS 8.8)

    • 类型: 隐藏功能与硬编码凭据 (CWE-912, CWE-798)。
    • 影响: 未经身份验证的攻击者可以通过访问特定URL强制启用设备的 telnet 服务,并使用固件中硬编码的凭据登录,从而获取未授权管理权限。

受影响设备: 受影响的产品属于 EAGLE PRO AIAQUILA PRO AI 系列,硬件修订版为 Ax。具体型号包括:E15, E30, G403, G415, G416, M15, M18, M30, M32, M60, R03, R04, R12, R15, R18, R32。这些型号覆盖了全球和非美国区域。

修复与建议:

  • 解决方案: D-Link已发布包含漏洞修复的固件版本(例如v1.20.01, v1.10.02等,具体因型号而异)。
  • 更新方式: 厂商已通过 自动强制更新 的方式推送修复固件。用户也可通过D-Link移动应用检查并手动触发更新,或访问官方支持网站下载对应型号和硬件版本的固件进行手动升级。
  • 重要提示: 更新后,用户务必通过设备界面核实固件版本,以确保更新成功。同时需注意区分设备的硬件修订版,并下载匹配的固件。
28. Software Friction (www.hillelwayne.com)

文章将克劳塞维茨在《战争论》中提出的“摩擦”概念(即理论与现实之间的差距)引入软件开发领域。软件中的“摩擦”表现为各种不可预见的干扰和障碍,例如API变更、依赖冲突、人员变动、需求模糊、设备故障、工具问题等。

摩擦在大范围、长时间跨度的项目中影响更显著,且会相互叠加——多个问题的负面影响往往超过其简单相加,因为系统在应对一个问题后适应性会下降。解决摩擦的过程有时又会引入新的摩擦。

文章列举了多种减少摩擦或增强抗摩擦能力的策略:

  1. 缩小范围与缩短迭代:采用敏捷方法,减少不确定性积累的空间。
  2. 提高自主权:让团队成员能灵活应对局部问题,但需避免过度自治导致系统风险。
  3. 建立冗余:通过备份资源、人员备份或时间缓冲来应对意外,代价是常态效率。
  4. 加强规划:通过形式化规范等方法识别更多潜在问题,减少意外。
  5. 自动化:减少人为错误,但自动化本身可能产生缺陷且降低人员经验。
  6. 积累经验:通过实践提升预见和解决问题的能力。
  7. 模拟演练:在安全环境中练习应对问题(如故障恢复、安全事件),提前积累经验。
  8. 制定检查清单与操作手册:将处理问题的隐性知识显性化。

文章最后提出了一些开放性问题,例如摩擦的分类是否有用、其他行业如何应对摩擦、如何在效率和抗摩擦能力之间取得平衡等。

30. I've compared nearly all Rust crates.io crates to contents of their Git repos (mastodon.social)
31. A long guide to giving a short academic talk (2022) (benjaminnoble.org)

本文聚焦于如何做好15分钟学术会议演讲,核心观点是演讲本质上是一种“推销”——既要推销研究成果,也要推销自己作为学者的能力。作者强调,演讲不应是论文的冗长复述,而应是一份引人入胜的“广告”,激发听众的兴趣,引导他们之后自行深入阅读论文。

演讲的重要性:

  • 学术成果不会自动被发现和引用,主动通过演讲展示至关重要。
  • 每一次演讲都应认真对待,如同“求职演讲”,因为你永远不知道听众中是否有未来雇主、审稿人或合作者。

如何构思演讲内容:

  1. 选择一个核心结果:15分钟时间有限,必须聚焦于论文中最易理解且最令人印象深刻的一个主要发现。优先选择需要较多数据收集或新颖建模的复杂结果,以展现研究深度和能力。
  2. 遵循标准结构
    • 开场动机:用现实案例或学术缺口引出研究问题。
    • 提出问题与答案预告:清晰陈述研究问题并简要给出你的核心答案。
    • 文献简述:点明所对话的学术领域。
    • 理论创新:阐述你的理论贡献。
    • 数据与方法:简介数据来源,仅在必要时提及复杂或非标准方法。
    • 展示结果必须用图表呈现关键统计结果,切勿展示回归表格。
    • 结论:重申主要发现,简要提及其他附录结果,并指出研究的更广泛意义。

如何准备演讲:

  1. 撰写脚本与幻灯片:这是一个迭代过程。基于论文引言,在幻灯片草稿和演讲脚本(比书面语更口语化)之间反复修改,直至两者完全同步。
  2. 反复练习直至熟练
    • 初期:朗读脚本并同步翻页,进行质量检查和内容调整。
    • 中期:逐步脱离脚本,尝试凭记忆演讲,仅在必要时瞥一眼。
    • 后期:寻求导师和同学的反馈,聚焦于演讲的清晰度和影响力,而非研究内容本身,并据此修改。
    • 彩排:进行数次完整计时演练,确保不超时。演练应模拟正式场合,保持自然流畅、有感染力的谈话风格,而非机械背诵。

现场演讲要点:

  • 开场前紧张是正常的,开始后专注内容即可缓解。
  • 若中途忘词或出错,稍作停顿整理思绪即可继续,听众并不知道你的原计划。
  • 保持积极兴奋的状态。你的热情具有感染力,能让听众对你的研究产生兴趣。

最终,成功的学术演讲源于认真的准备和练习。将其视为分享你对研究热忱的机会,并以同等甚至更多的精力投入演讲准备,因为其影响可能比论文本身更直接、更广泛。

32. Why Google Takeout is sooo bad (marcin.cylke.com.pl)

文章摘要:为何 Google Takeout 如此糟糕

这篇文章主要讲述了作者因数据安全考虑(如身份盗窃或账户被意外封锁),希望将约200GB的Google Photos数据定期、自动地备份到其他云存储和本地,但尝试使用官方的Google Takeout服务时遭遇了严重挫折的经历。

核心问题与动机: 作者的数据存储在Google Cloud中,他担心仅依赖单一供应商存在风险(如发生账户封锁导致无法访问照片)。因此,他寻求一个理想的备份方案:将数据自动同步到另一个云服务并保留本地离线副本,要求过程自动化、免维护。

初步尝试与Google Takeout的引入:

  • 作者曾尝试使用同步工具将文件保存到本地硬盘,但因数据量大、过程漫长而不满意。
  • 他发现开源工具gphotos-sync存在会降低视频质量、转换照片质量和移除GPS元数据等已知问题。
  • 付费工具photovaultone.com则被视为另一种供应商锁定。
  • 于是,作者将希望寄托于Google官方提供的数据导出服务——Google Takeout,其设计初衷允许用户提取自己的数据。特别是该服务支持将备份直接导出至Microsoft OneDrive、Dropbox等其他云存储,这看似是实现“供应商多样化”和“分块下载”的理想方案。

Google Takeout 的主要问题(作者的核心吐槽):

  1. 过程频繁失败:无论选择何种导出数据块大小,备份过程总是失败。
  2. 日志与可追踪性差:日志仅保留7天,且没有详细的处理过程记录,导致很难发现缺失的文件(例如,10个文件中缺失第7个很难察觉)。
  3. 错误信息模糊:仅显示“Failed to backup”等加密错误信息,缺乏具体原因。
  4. 技术支持无效:作者联系技术支持后,问题在不同部门间被推诿,最终得到的建议是“重装操作系统”或“重启设备”等无关方案。
  5. 作者推测的意图:作者认为这些体验表明Google在有意阻碍用户将数据备份到其云生态之外,这是“非常糟糕”的。

其他重要考虑与后续计划:

  • 作者与家人共享照片,他怀疑Google Takeout可能不会备份这些共享的照片。
  • 若备份流程能稳定,他需要考虑备份数据的保留策略。
  • 当前计划:尝试使用其他导出目标(如Box)、寻找可能有效的其他工具、将备份任务拆分为更小的单元以提高成功率、并监控目标驱动器的内容状态。
  • 编辑备注澄清了历史信息:评论指出,Google Takeout实际上早于GDPR(欧盟《通用数据保护条例》)发布,其诞生于一个名为“Google Data Liberation Front”的内部团队项目,旨在允许用户迁移数据。

总结: 尽管对Google Takeout的体验极为不满,作者目前仍接受其缺陷,继续使用该服务进行不完美的备份,因为他认为拥有多数数据总比完全没有备份要好。文章的核心论点是Google Takeout在可靠性、透明度和支持方面表现不佳,损害了用户数据自主权。

33. The time keepers: pg_cron and pg_timetable (notso.boringsql.com)

pg_cron 与 pg_timetable:PostgreSQL 任务调度工具对比

本文介绍了两种用于 PostgreSQL 自动化任务调度的专用工具:pg_cronpg_timetable,并分析了它们的特性与适用场景。

任务调度的作用

数据库中的任务调度远不止数据存取,它是优化集群(如执行 VACUUM、重建索引)、维护数据质量(如刷新物化视图)、自动生成报告以及协调业务流程的基础。将自动化逻辑与数据存储在一起是理想的选择。

pg_cron:基础自动化工具

pg_cron 是一个 PostgreSQL 扩展,它将操作系统层 cron 的熟悉语法直接引入数据库环境。

  • 安装与配置:作为扩展,它需要在 postgresql.conf 中配置 shared_preload_libraries 并重启集群,然后在数据库中使用 CREATE EXTENSION 安装。在大多数云托管服务中可用。
  • 功能与限制
    • 使用标准 cron 语法调度 SQL 任务,例如定时删除旧数据。
    • 默认在 postgres 数据库存储元数据,可通过查询 cron.job_run_details 进行基本监控。
    • 主要局限:仅支持 cron 语法,不支持任务链、依赖关系或触发器;无法直接与其他 PostgreSQL 集群通信;错误处理和日志记录功能基础。

pg_timetable:高级编排工具

pg_timetable 不是数据库扩展,而是一个独立的可执行文件(或 Docker 镜像),功能远比 pg_cron 强大。

  • 核心优势
    • 强大的调度能力:除 cron 语法外,支持 @every(重复执行)和 @after(间隔执行)等更灵活的调度,可精确到秒级间隔。
    • 任务链与复杂工作流:支持将多个任务组成链,按顺序执行,并可在任务间传递参数。
    • 多样化的任务类型:不仅支持 SQL 命令,还支持内置任务(如发送邮件、下载文件)和外部 shell 命令。
    • 高级编排能力:允许配置每个任务连接到不同的 PostgreSQL 集群,从而实现跨多个数据库集群的任务编排。
    • 增强的错误处理与日志:提供比 pg_cron 更完善的错误处理机制和审计日志。
  • 架构:其配置和执行日志存储在默认的 timetable 模式中。作为独立服务运行,这使其天然兼容所有无法安装扩展的托管数据库服务。

如何选择

特性 pg_cron pg_timetable
分发形式 PostgreSQL 扩展 独立可执行文件
调度能力 有限(仅 cron 语法) 丰富(支持间隔、自定义日历)
任务类型 SQL SQL、内置任务、Shell 命令
任务链 不支持 支持
错误处理/日志 基础 中级
依赖关系 有(独立进程)
易用性 简单 中等
编排范围 单集群 高级(可跨多集群)

选择 pg_cron 的场景

  • 需求简单,如执行单集群内的定期维护、刷新物化视图或生成基础报告。
  • 追求安装和配置的简便性,希望以数据库扩展形式快速集成。
  • 仅需基础的错误处理和日志功能。

选择 pg_timetable 的场景

  • 需要高级调度功能、任务依赖与链式执行。
  • 工作流涉及多种任务类型(如 SQL 结合邮件通知、文件操作)。
  • 需要跨多个 PostgreSQL 集群编排任务。
  • 需要更完善的错误处理、日志和审计功能。
  • 运行环境无法或不宜安装数据库扩展(如某些托管服务)。

总结:pg_cron 以其简单易用适合基础、单集群的调度任务。pg_timetable 则凭借其强大的链式任务、多集群编排和丰富的任务类型,成为处理复杂自动化工作流的优选方案。两者定位不同,需根据具体需求和规模选择。文章也提及 pgAgent,但认为其已不再活跃维护。

34. Developer Takes 'Retro' Concept to New Level by Creating Physical Winamp Player (www.xatakaon.com)

Linamp:受 Winamp 启发的物理媒体播放器

  • 设备概述:Linamp 是一款物理媒体播放器,灵感来自 1997 年首次发布的经典 Windows 媒体播放器 Winamp。它结合了复古设计和现代技术,旨在让用户体验怀旧与创新的融合。

  • 技术规格

    • 核心硬件:由 Raspberry Pi 4B 微计算机驱动,配备 32GB SD 卡。
    • 接口:包括 3.5mm 耳机插孔、USB-C 端口、USB-A 端口和以太网端口,增强了连接性和功能性。
    • 机身设计:铝制机身模仿 1990 年代音频设备风格,前部 3D 打印并标有 "Linamp",外观借鉴 Winamp 的经典皮肤。
  • 功能与操作

    • 显示屏:7.9 英寸触摸屏,实时显示 Winamp 界面,提供直观的用户交互。
    • 音频播放:支持通过 SD 卡或外部光驱播放音频文件。插入 CD 时,设备自动检测光盘、提取曲目信息,并通过触摸屏的播放按钮启动音乐播放。
  • 创建者与未来计划

    • 开发者:Rodrigo Méndez,墨西哥的计算机工程师和软件工程师,专注于嵌入式系统和电子项目。
    • 未来更新:计划添加蓝牙和 Spotify 支持,以扩展设备的功能和兼容性。
  • 背景与意义:该项目反映了对复古设备的怀旧情感,通过结合旧式设计和现代技术,创造了独特的用户体验。更多细节可在开发者的 YouTube 视频中查看。

36. OpenBSD, the computer appliance maker's secret weapon (hiandrewquinn.github.io)

OpenBSD:计算机设备制造商的秘密武器

核心观点

文章探讨了在B2B领域中,计算机设备(computer appliances)的长期维护挑战,并指出OpenBSD因其卓越的稳定性和安全性,成为该领域的理想选择。

计算机设备的特征

  • 形态介于小型嵌入式设备(如ESP32)与大型服务器之间,通常是定制化的树莓派等设备,搭配脚本、外壳和长期维护合同。
  • 工作方式更接近传统黑客,依赖Bash/Perl脚本等技能,而非现代云原生工具。
  • 生命周期长达15至30年,强调长期稳定性和可维护性。

长期维护的挑战

  • 知识遗忘问题:随着时间推移,维护人员可能对旧版系统(如Debian 4甚至Windows XP)不熟悉,导致调试困难。
  • 系统稳定性需求:需要操作系统在多年版本迭代中保持高度兼容和稳定。

BSD系统的优势

  • 稳定性优先:FreeBSD、OpenBSD、NetBSD等BSD系统遵循“不坏就不修”的原则,确保系统在不同版本间高度稳定。例如,2007年的NetBSD配置在2024年仍可正常使用。
  • 长期可维护性:支持设备长期运行而无需频繁升级,适合生命周期长的B2B设备。

OpenBSD的独特价值

  • 安全性突出:即使设备不直接连接互联网,OpenBSD也能通过强大的安全机制(如Blowfish加密)抵御潜在攻击。
  • 学习与采用:作者因上述优势正在学习OpenBSD,认为其能有效应对计算机设备的长期维护和安全挑战。
37. The Programmer's Brain (2021) (yoan-thirion.gitbook.io)

《The程序员的大脑》内容摘要

本书基于认知科学,探讨程序员如何更有效地阅读、思考和编写代码。其核心观点是:编程的认知过程受限于人脑的记忆系统——长期记忆短期记忆工作记忆。通过理解并优化这些认知过程,可以提升编程效率。

第一部分:更好地阅读代码

理解困惑与认知基础

编程时的困惑主要源于三个认知系统的问题:

  • 缺乏易获取的信息(短期记忆问题)
  • 缺乏处理能力(工作记忆过载)
  • 缺乏领域知识(长期记忆中无相关图式)

加速代码阅读与记忆

  • 分块:专家能将代码元素组合成有意义的块,如同棋手下棋。学习设计模式和编写清晰注释有助于分块。
  • 信标:代码中帮助理解意图的部分,如可读变量名或结构语句(if, for)。
  • 记忆语法:使用闪卡间隔重复学习新语法,以对抗遗忘曲线(2天后仅剩25%记忆)。通过提取练习精细加工(关联已有知识)来加强记忆。

处理复杂代码

工作记忆容量有限(约2-6个项目),易被认知负荷压垮。

  • 减少外在认知负荷:通过临时重构代码使其更易理解,如内联方法或替换不熟悉的语法结构
  • 外部辅助:当思维难以跟踪时,绘制依赖图(可视化代码结构)或使用状态表(跟踪变量值变化)来释放工作记忆。

第二部分:思考代码

深入理解与解决问题

  • 变量角色:识别变量在程序中的功能角色(如固定值、步进器、收集器等)能极大帮助理解。
  • 从表层到深层理解:采用类似阅读理解的策略——确定焦点、扩展知识、理解概念、跨实体综合。主动提问写自然语言摘要尤为有效。
  • 问题解决模型:理解问题时,大脑会形成心智模型。新手依赖逻辑推理,而专家更多依赖情景记忆(以往类似问题的解决方案)。

避免思维误区

  • 负向迁移:旧知识有时会阻碍新学习(如从C#转向Java时对异常处理的误解)。需要构建正确的新心智模型来替换错误观念。

第三部分:更好地编写代码

命名的力量

好的变量名是强大的“信标”和文档,能激活长期记忆中的相关知识。

  • 应遵循一致、清晰、避免缩写的原则。
  • 三步命名法:选择概念、选择词汇、组合成名称。
  • 模糊或错误的命名(语言反模式)会导致误分块,显著增加认知负荷。

减少代码坏味道与认知负荷

代码坏味道(如过长参数列表、大型switch语句)会使工作记忆过载。它们不仅影响可维护性,也直接阻碍理解。识别并重构这些模式是改善代码可读性的关键。

提升复杂问题解决能力

  • 自动化:通过刻意练习将小技能(如循环、API调用)自动化,形成内隐记忆,从而为思考更大问题腾出工作记忆。
  • 学习示例代码:研究附有解释的工作示例,比单纯自己摸索更有效。可通过代码阅读俱乐部或探索GitHub仓库进行。

第四部分:代码协作

编程活动与中断管理

编程涉及搜索、理解、转录、增量、探索等不同认知活动,分别主要占用短期和工作记忆。

  • 中断代价高昂:中断后约需15分钟才能恢复深度编程状态。
  • 应对策略:在注释中保存心智模型、使用TODO提醒未来意图、明确分解子目标。
  • 中断时机:通过类似FlowLight的工具识别开发者是否处于高认知负荷状态,避免此时打断。

系统设计与改进

使用认知维度框架作为检查清单来评估和改进代码库的易用性,例如:

  • 一致性:类似事物是否相似处理。
  • 可见性:系统各部分的清晰度。
  • 工作粘度:更改代码的难易程度。
  • 领域接近性:代码与问题领域的接近程度。 任何维度上的优化都可能需要权衡。

新成员入门

“专家诅咒”使得资深开发者难以理解新人的困境。有效的入门流程应:

  • 限制活动类型:一次只进行一种认知活动(如浏览、搜索、理解、扩展)。
  • 支持记忆系统:为长期记忆提供领域知识背景;为工作记忆采用团队协作代码阅读,并应用七种文本理解策略(如激活先验知识、可视化、提问、总结)。
  • 理解任务优于构建任务:让新人先总结代码,再开始编码。
38. Edinburgh, Scotland makes it illegal to advertise SUVs (www.washingtonpost.com)

爱丁堡成为欧洲最新禁止SUV等产品广告的首都城市。该市议会投票决定,禁止在市政财产上投放化石燃料广告,此举不仅影响石油公司,也限制了汽车制造商、航空公司和邮轮公司的产品推广。此外,该禁令也涉及武器制造商。这一决定是爱丁堡市在环保方面采取的现代举措。

41. Japanese words and names sound African (2022) (www.farooqkperogi.com)

日语与非洲语言的音韵巧合

文章指出,日语与西非、中非、东非及南非的多种语言在词汇和人名上存在显著的音韵对应关系,这种相似性是相互的,且引发了日本人的兴趣。

主要例证

  1. 地名与人名

    • 奥巴马(Obama):既是肯尼亚卢奥族的姓氏,也是日本一个城镇的名字,意为“小海滩”。尼日利亚河流州也有同名城镇。
    • 东京(Tokyo)旧称“江户(Edo)”,与尼日利亚中西部一个州及民族的名称相同。
    • 日本人常见名如Chika(伊博语名)、AinaFumi(约鲁巴语名)、Sambo(富拉尼语名)、Maitama(豪萨语名)等,均与尼日利亚多个民族的人名重合。
    • 其他重合的日本名包括Baba, Duro, Emiko, Femi, Obi, Oba, Okada等,对应尼日利亚的人名、常见事物或地名。
  2. 词汇与品牌

    • 阿吉诺莫(Ajinomoto):一个在日本家喻户晓的调味品品牌,其发音易被误认为是尼日利亚本土语言(如约鲁巴语)词汇。
    • **铃木(Suzuki)、雅马哈(Yamaha)、川崎(Kawasaki)**等日本品牌名,在尼日利亚人听来也颇具非洲感。
    • 约鲁巴族名“Yoruba”在日语中可被解读为“夜马”(“yoru”意为夜,“ba”意为马)。

语言学视角与类比案例

  • 仅为音韵巧合:尽管存在惊人的相似性,但语言学研究未发现日语与非洲语言间存在谱系关联或历史接触的证据,认为这属于“音义偶然对应”。
  • 类似案例:尼日利亚高原州语言与汉语:作者以尼日利亚高原州(Plateau State)的语言为例,指出其地名(如Pankshin, Shendam)和人名(如Shok Jok, Gyang Nyam Shom Pwajok)在听感上与汉语(包括普通话和粤语)非常相似。一位日本语言学家通过词汇统计学分析发现,高原州语言与汉藏语系之间相似发音的词汇中,含义相同的比例不足30%,因此也归类为“偶然证据”。
  • 语言特点:日语和尼日利亚高原州的语言在各自区域都是语言孤立体,不属于周围主要的语系。

结论

文章认为,日语与非洲语言之间广泛存在的音韵相似性,以及高原州语言与汉语的听感类似,均属于大规模的偶然现象,而非源流关系的证明。

42. Proton is transitioning towards a non-profit structure (proton.me)
43. Horses may have been domesticated twice (www.sciencenews.org)

马匹可能曾被两次驯化

核心发现

根据发表于《自然》杂志的研究,马匹在历史上可能经历了至少两次独立的驯化过程

  1. 首次尝试(约5000年前):中亚的波泰狩猎采集者可能最早开始驯化马匹,目的是获取奶和肉。然而,这次驯化并未持续下去,波泰马的唯一现存后代是野生的普氏野马。
  2. 成功驯化(约4200年前):居住在高加索山脉以北的人群为了交通运输的目的,成功驯化了马匹。这些马在短短几个世纪内迅速取代了野生种群,成为现代家马的祖先。

对传统观点的挑战

这一发现颠覆了关于马匹驯化时间、原因和主体的长期认知。

  • 颠覆颜那亚人角色:研究质疑了西南亚的颜那亚人曾是最早骑马者的传统观点。基因数据显示,马匹基因开始全球扩散的时间(约4200年前)比颜那亚人的迁徙(约5000年前)晚了约800年。这表明颜那亚人的迁徙并非骑马完成,更可能是依靠牛车和步行。
  • 驱动力是机动性:成功的第二次驯化明显以提升人类机动能力为目的,这解释了该马匹谱系能在短期内全球扩散的原因。

驯化的证据

研究团队通过分析475匹古代马和77匹现代马的DNA,结合碳测年和考古数据,得出了上述结论。

  • 繁殖控制证据:他们发现,在马匹开始扩散后,其世代时间从七年多缩短至约四年,且出现了近亲繁殖。这些现象在自然界中不会发生,表明人类开始控制马匹繁殖以增加数量和选择特定性状,这是驯化的明确标志。
  • 波泰人的早期迹象:类似的世代时间缩短也出现在5000年前的波泰马遗骸中,这可能意味着波泰人曾为了增加肉类供应而进行过驯化尝试。

争议与不同观点

研究结论在学术界引发了一些讨论。

  • 支持观点:部分学者认为,波泰马世代时间缩短的证据非常有说服力,表明其确实被用于特定目的,可视为一次驯化尝试。
  • 反对观点:也有研究者认为,该研究忽略了更早的骑马和驯化证据。一些考古学家坚信,颜那亚人的快速扩张离不开马匹和轮式车辆。但研究方反驳指出,历史上人类的大规模迁移主要依靠步行,而非马匹。
  • 对波泰驯化的质疑:另有学者认为,波泰人与马的关系更可能是狩猎-猎物关系的最后阶段,而非真正意义上的驯化。
44. Pop culture has become an oligopoly (2022) (www.experimental-history.com)

近年来,流行文化(包括电影、电视、音乐、图书和视频游戏)正经历着一场结构性的转变:市场份额正以前所未有的速度集中到一小撮“超级明星”产品(如续集、翻拍、系列作品)手中。这种现象被作者称为“流行文化寡头垄断”,即从过去的“赢家通吃部分”发展到了“赢家通吃大部分”乃至接近“赢家通吃全部”。

现象与数据佐证:

  1. 电影:自2010年起,每年票房前20的影片中,属于已有系列(续集、翻拍、电影宇宙等)的作品占比持续超过50%,近年更接近100%。原创电影在顶级市场几乎绝迹。同时,排名前20的电影占据了总票房收入的更大份额。
  2. 电视:尽管频道和流媒体内容激增,但收视率榜单并未变得更分散。自2000年以来,约三分之一的顶级节目是其他热门节目的衍生作品或同一节目的多次重播,少数系列统治了更大的播出份额。
  3. 音乐:Billboard Hot 100榜单上的艺术家数量在几十年间持续减少,而每位上榜艺术家拥有的热门歌曲数量却在增加。
  4. 图书:利用年度畅销书榜单数据发现,同一作者拥有多本年度畅销书的情况变得常见,且榜单中新面孔的比例下降,近75%的上榜作者是过去十年内曾进入过榜单的“老面孔”。
  5. 视频游戏:自2005年以来,每年最畅销的游戏中,属于既有游戏系列续作的比例始终高于75%,有时甚至达到100%。市场被马里奥、使命召唤等系列牢牢把持。

原因分析: 文章从供需两端探讨了这一趋势的成因:

  • 供给侧
    • 创作门槛降低与“入侵”:互联网和软件使得内容创作和发布更容易,但大量业余创作也促使主流媒体巨头选择投资那些业余创作者难以企及的、风险更低的系列作品。
    • 行业整合:媒体公司不断兼并壮大,形成了自然垄断的趋势,巨头倾向于生产和推广能最大化利用现有IP的内容。
    • 叙事创新:一些商业模式的创新,如“电影宇宙”的构建、音乐中的采样、图书中快节奏情节和章节悬念的运用,抓住了观众,帮助早期采纳者赢得了稳固的市场份额。
  • 需求侧
    • 选择过剩与风险厌恶:文化产品数量呈爆炸式增长,消费者面临的选择过多,机会成本升高。这导致人们更倾向于依赖明星、品牌或熟悉系列等“信号”来做选择,以降低试错风险,从而减少了对全新、未知内容的尝试。

影响与反思: 作者指出,问题不在于文化产品的平均质量下降(任何时代都有好作品和烂作品),而在于 “方差缩小”——文化体验变得过于同质化和安全。持续消费“文化舒适区”内容(如无穷无尽的续集)可能限制想象力、削弱创造力,使人们难以接触到能拓展意识、激发思考的全新世界与感受。

然而,文章也指出了出路:尽管排行榜顶端被寡头垄断,但底层文化生态依然充满活力,存在大量奇特的书籍、电影和来自世界各地的作品。作者鼓励人们主动去发掘和滋养这些小众、陌生的文化内容,因为学会欣赏不熟悉的事物能培养对陌生人的共情,并点燃人类内心宝贵的好奇心与创造力之火。

45. FPGA-Based Disk Controller for the Apple II (2017) (www.bigmessowires.com)

FPGA磁盘控制器项目概述(2017)

技术背景与动机

  • Apple II磁盘控制器种类繁多、稀缺且昂贵,作者旨在通过FPGA设计通用替代方案。
  • 大多数控制器共享相同的8位总线和19针磁盘接口,理论上可通过可编程FPGA克隆多种控制器(如Liron、Disk 5.25/3.5等)。
  • 项目灵感源于Floppy Emu固件更新后对Liron卡的需求激增,但原版Liron卡难以获取。

设计方案与实现

  • 核心思路:用FPGA替代原控制器中的74系列逻辑芯片和IWM(Integrated Wozniak Machine)芯片,集成ROM功能。
  • 硬件核心:采用Lattice MachXO2-1200HC FPGA(1280个LUT、8KB块RAM、内置Flash存储)。
  • 接口设计:通过20针排线连接磁盘驱动器(兼容Apple IIc和Floppy Emu),并配备DB-19转接器支持其他外置驱动器。
  • 电平转换:使用四片74LVC245芯片实现5V Apple II总线与3.3V FPGA之间的双向/单向电平转换。
  • 扩展功能:添加2MB串行EEPROM,可存储多个磁盘镜像,实现类似CFFA3000的虚拟磁盘功能。

项目现状与问题

  • 进度延迟:原型板在2016年7月设计完成后,因作者个人原因进展缓慢。
  • 初步测试:已验证FPGA可通过JTAG编程并响应Apple II总线信号,但未连接实际磁盘驱动器测试。
  • 已知问题:原型板在插入Apple IIe时JTAG编程失败(通信错误),可能由信号干扰或电源波动引起,需进一步调试。

未来规划与挑战

  • 商业化考虑:作者原计划将产品上市,但担心兴趣爱好变为工作负担。
  • 固件更新问题:用户如何更新FPGA固件?可能方案包括:
    • 添加微控制器和SD卡插槽(增加成本与复杂度)。
    • 利用Apple II本身作为JTAG编程器(需额外硬件)。
    • 提供内置固件选项(通过开关选择,但无法后续升级)。
  • 下一步目标:优先修复JTAG问题、连接真实驱动器验证功能,计划在圣诞节前完成。

设计特点

  • 全板采用手工焊接,尺寸紧凑(电压调节器仅0805电容大小)。
  • FPGA的3.3V I/O兼容5V总线,无需额外电平转换电路即可与Apple II通信。
  • 通过JTAG接口直接编程FPGA,支持固件重构以适配不同磁盘控制器类型。
46. Maintaining large-scale AI capacity at Meta (engineering.fb.com)

Meta 维护大规模AI训练基础设施

Meta在全球运营着多个配备GPU训练集群的数据中心,为支撑AI业务的指数级增长,已构建起世界领先的AI训练基础设施。目前,该基础设施由数十个规模各异的AI集群组成,每日运行数千个训练任务,并计划在未来一年将GPU数量扩展至60万个。

GPU训练的核心挑战

AI训练任务对基础设施提出了严格要求:

  • 容量保障:许多任务具有时效性或需24/7运行,不能随意中断。
  • 主机一致性至关重要:跨主机协作的训练对性能和网络问题极度敏感。
  • 低中断率:任务涉及成千上万台主机协同,任何中断代价高昂。
  • 安全部署:软件栈复杂,问题难定位,需谨慎进行组件更新。
  • 集群一致性:统一的环境配置有助于调试和避免严重事件。

Meta的维护策略

Meta采用定制化硬件、高性能网络和敏捷的软件栈,支持超过30类维护操作和50余种组件的更新。其维护策略的核心特点如下:

1. 维护列车

Meta采用“维护列车”机制,以循环方式暂停小部分容量进行更新,确保除一个维护域外所有容量持续运行,从而保障容量的可预测性,这对在线和定期训练任务至关重要。

2. 渐进式部署

由于基础设施规模庞大,除特殊情况外,所有破坏性更新均采用渐进方式。集群内不同服务器可能在短期内运行不同的底层栈,但AI任务本身(包括CUDA库)保持一致。底层组件(需重启或长时间配置)与高层组件(可灵活重启)的升级路径被明确区分。

3. 优化的维护域

维护域的大小基于两个关键因素选择:预留缓冲容量的规模(越小越好)以及对训练任务的中断影响(越大越好)。通过与AI团队合作优化,Meta显著降低了维护对AI工作的开销。

4. OpsPlanner:统一编排工具

为确保数千台主机在大量计划内与计划外操作中保持状态一致,Meta开发了OpsPlanner工作编排器。该工具能够:

  • 协调重叠范围的操作并正确序列化。
  • 安全地将主机移出并重新纳入生产环境。
  • 内置移交流程,避免操作重叠和死锁。
  • 确保主机在返回生产前完成升级。
  • 管理计划维护和故障缓冲区。
  • 目前每日处理高达百万次操作。

安全措施与故障应对

Meta部署了多层安全机制,包括:维护列车在缓冲耗尽时自动停止、自动下线故障升级、分阶段推出经过测试的变更。遇到问题时,可通过应急列车或大规模维护快速响应。

结语

Meta通过持续创新,解决了在超大规模、多样化环境中维护AI基础设施的独特挑战。其方法论不仅保障了业务连续性,也为快速发展中的生成式AI领域奠定了坚实的基础。

47. Don't store your cucumbers in the fridge (2012) (www.rootsimple.com)

黄瓜的正确储存方式
根据加州大学戴维斯分校(UC Davis)采后技术部门的研究,黄瓜应在室温下储存,而非放入冰箱。若需冷藏,黄瓜最多可承受3天低于50°F(10°C)的低温,且取出后需尽快使用,否则容易引发冷害,表现为外皮凹陷、水分过多或加速腐烂。

此外,黄瓜对乙烯气体敏感,应避免与释放乙烯的蔬果(如甜瓜、番茄、香蕉)一同存放,以延长保鲜期。类似地,番茄、辣椒和茄子等也易受低温损伤,建议常温保存。

更多果蔬储存指南可参考UC Davis发布的专题资料及储存图表。

48. Crossing the impossible FFI boundary, and my gradual descent into madness (verdagon.dev)

跨越不可能的FFI边界:从疯狂到顿悟的探索

核心挑战

创建新的主流编程语言极其困难,除非有大公司支持(如Kotlin之于Google)。对于Vale、Austral或Ante等新兴低层级、内存安全的语言,没有现成的快速内存安全生态系统可供利用。直接无缝集成Rust的生态系统曾被认为是不可能的,主要障碍包括:

  • 不稳定ABI:Rust没有稳定的ABI,rustc编译的函数签名不可预测,链接器无法识别。
  • 类型限制:无法直接传递普通Rust对象,需使用#[repr(C)]的结构体,且包含严格限制。
  • 泛型与安全:Rust的泛型无法在不了解外部语言类型大小的情况下工作;从无借用检查器的语言调用时,如何维护Rust的内存安全保证;以及Vale特定的更高阶保证(如确定性、可重放性)。

探索方案:基于不透明类型的C语言原型

作者通过C语言调用Rust的初步原型证明可行性:

  • 核心方法:将Rust对象视为不透明字节块,C代码无法直接读取其内容,但可将其传递给其他Rust函数进行操作。
  • 用户界面:通过类似#pragma的指令声明Rust类型和函数(如#pragma rsuse VecInt = std::vec::Vec<u64>)。
  • 底层生成:工具自动生成#[repr(C)]的包装结构体和extern "C"的函数,实现类型转换(transmute)和调用委托。

关键难题:收集类型与函数信息

1. 类型信息收集

  • 所需数据:Rust类型(如Vec<u64>)的大小、对齐方式和真实名称。
  • 解决方案:运行一个临时的Rust程序,利用std::mem::size_ofalign_ofstd::any::type_name输出这些信息。

2. 函数信息收集

  • 挑战:从用户指令(如VecInt_with_capacity = VecInt::with_capacity)确定函数的真实名称、返回类型和参数类型。
  • 初期尝试(地狱般的想法):计划解析rustc的MIR(中间表示),但过于复杂。
  • 改进方向(更好的地狱想法):使用rustdoc的JSON输出和rustdoc_types crate解析文档数据,遍历所有fnstructimpl等构建关系映射。

深陷疯狂:解决重载与泛型

Rust函数重载问题

当遇到多个同名函数(如OsString::from有多个impl)时,工具无法自动选择正确版本。作者被迫实现了复杂的重载解析和泛型求解逻辑

  • 通过用户更具体的声明(如OsString::From<&str>::from)缩小范围。
  • 工具需遍历所有impl,匹配泛型参数(如确定T = str),最终筛选出唯一候选。
  • 此过程代码量庞大(原型约3200行),且难以覆盖Rust全部复杂性。

智慧转折:Rust的“魔法”解决方案

在作者深陷复杂实现时,Alex Kladov(matklad)提供了基于Rust类型系统的巧妙方案:

  • 核心技巧:利用泛型trait和函数重载,在编译期推断函数签名。
  • 代码示例:通过一个reflect函数和PrintFn trait,直接输出目标函数的参数大小、返回类型等信息。
  • 最终简化:社区进一步发现单行解决方案:print_fn(<std::ffi::OsString as From<&str>>::from);,完美选择特定重载。

最终方案与成果

作者放弃了复杂的重载解析逻辑,采用简洁的混合方案:

  1. 读取用户声明的类型和函数指令。
  2. 生成临时Rust程序,利用类型反射魔法输出类型信息(大小、对齐、名称)和函数签名。
  3. 调用cargo run收集输出。
  4. 仍使用rustdoc信息校正类型公共名称。
  5. 生成最终的Rust库,实现C通过不透明类型调用Rust函数。

未解决的问题与未来

  • 如何让Rust接受外部语言定义的类型(如Vec<OurStruct>)?
  • 如何从无借用检查器的语言维护Rust内存安全?
  • 如何维护Vale的特有保证(如更高阶RAII、确定性)? 作者计划将此工具集成到Vale中,实现类似Vec<int>.with_capacity(42)的直接调用。代码已开源,但尚未转化为生产工具。

致谢

感谢Alex Kladov、Rust Discord社区成员(Helix、anden3)及众多贡献者的帮助,使得跨越FFI边界的努力得以推进。

49. Monopolies across the grocery supply chain squeeze consumers, small businesses (prospect.org)

《超市供应链中的垄断如何挤压消费者与小企业》

超市看似提供了前所未有的丰富选择,但其光鲜表面之下,实则隐藏着一个由少数巨头控制的、充满垄断力量的战场。这种从原材料到零售终端的纵向与横向整合,推高了商品价格,挤压了小供应商和独立杂货商的生存空间,并最终将消费者置于不利境地。

供应链的高度集中与垄断 食品供应的源头已被少数几家公司掌控。例如,四家公司控制了美国55%至85%的牛肉、禽肉和猪肉加工市场。在饮料和零食领域,百事可乐、可口可乐等巨头通过收购拥有了众多子品牌(如百事旗下有菲多利零食、桂格燕麦等),制造了选择丰富的假象。这种集中度赋予了企业巨大的定价权,它们能够在通胀时期以远超成本的幅度提价,且往往涉及非法价格协同。

零售端的巨头主导 在零售端,沃尔玛占据了绝对主导地位,在许多地区的市场份额超过50%。其巨大的采购规模使其能对供应商施加苛刻条件,如要求极高的准时交货率、收取高额的“货架费”以获取黄金陈列位,并优先获得供应链资源。在疫情期间,大型零售商甚至要求供应商优先供货,导致独立杂货商面临断货或以远高于零售价的价格采购商品。Kroger与Albertsons的潜在合并将进一步加剧市场集中。

对消费者与小企业的多重挤压

  1. 价格上涨与定价策略:垄断力量是导致2020年以来食品杂货价格上涨25%(显著高于工资涨幅)的关键因素。企业运用多种策略变相提价,如“缩水通胀”(减少包装分量但价格不变),使得实际通胀率比官方数据更高。
  2. 数据驱动与未来威胁:零售商通过会员卡、数字优惠券等方式积累海量消费者购物数据,并利用其进行精准营销。更令人担忧的是,这正推动超市行业向“动态定价”和“高峰定价”模式发展,可能在未来侵蚀消费者剩余。此外,零售媒体业务正成为新利润增长点,零售商通过向广告商出售消费者数据获利,沃尔玛建议收购电视制造商Vizio即为此布局。
  3. 小企业困境:独立杂货商在采购成本、货架空间和供应链韧性上均处于劣势,生存艰难。小型食品供应商则面临高昂的渠道费用、大型零售商的盘剥,以及可能被竞争对手“扼杀在摇篮中”的风险(如文中Snoop Cereal案例)。

监管动向与未来展望 美国联邦贸易委员会已发布报告,确认大型零售商利用其买方权力损害了小型竞争对手的利益。监管机构显露出重启执行《罗宾逊-帕特曼法案》(旨在防止价格歧视)的意愿,并已对百事、可口可乐等公司展开调查。然而,要扭转数十年来形成的市场格局,挑战依然巨大。未来,食品杂货行业的竞争不仅关乎价格,更关乎消费者数据的控制权。