2024-02-24

23 篇热帖

1. Institutions try to preserve the problem to which they are the solution (effectiviology.com)

希基原则摘要

希基原则的核心表述是:“机构会试图保留它们所解决的问题”。更宽泛地看,也可以描述为“每个实体都倾向于延长它正在解决的问题”。

核心含义与示例

该原则意味着,一个旨在解决特定问题的机构或实体,可能会阻碍他人解决该问题的努力,以确保自身存在的相关性;或者因专注于现有的解决方案,而未能采用更好的新方法,从而延长了问题的存在。

文章提供了多个示例:

  1. 税务申报公司游说政府,阻止其提供免费便捷的报税方式,以确保自身利润。
  2. 私人监狱公司游说政府支持增加监禁人数和刑期的政策。
  3. 一个经典案例是安大略省公交公司Trentway-Wagar,它试图通过法律手段取缔高效的拼车网站PickupPal,其论点是“因为拼车过去不方便,所以它就应该一直不方便”。最终在公众压力下,法律被修订以允许该服务。

此外,该原则不仅限于机构,也适用于个人(如员工抵制自动化其工作流程),且其行为可能是无意的(例如公司因专注于现有平庸解决方案而忽略更优技术)。

起源与不同表述

该原则由《连线》杂志编辑凯文·凯利在2010年基于学者克莱·舍基的观点提出。凯利在其博文中给出了三种微妙但重要的表述:

  1. 机构表述:“机构会试图保留它们所解决的问题。”——暗示有意为之。
  2. 复杂解决方案表述:“复杂的解决方案……可能会无意中延续它们所解决的问题。”——强调无意。
  3. 普遍实体表述:“每个实体都倾向于延长它正在解决的问题。”——最普遍,不指明意图。

相关概念与注意事项

  • 相关概念

    • 眼镜蛇效应:印度德里悬赏眼镜蛇尸体,却导致人们养殖眼镜蛇;以及河内悬赏灭鼠尾,反而催生了养老鼠的产业。这些案例说明了解决问题的机制可能产生反效果。
    • 帕金森定律(工作会膨胀以填满可用时间)和厄普顿·辛克莱的名言(“当一个人的薪水取决于他不理解某件事时,就很难让他理解它”)都与希基原则相关,共同揭示了官僚主义和利益冲突导致的低效。
  • 注意事项

    1. 该原则只是一项普遍观察,并非在所有情况下都正确。
    2. 它可适用于各类实体(机构、个人、小团体)。
    3. 背后动因多样(贪婪、自保、惰性、疏忽)。
    4. 行为模式多样:可能包括延长现有问题、阻碍新方案、加剧问题、甚至创造新问题以成为其解决方案。
    5. 因此,一个更广泛的表述可以是:“实体常常推广它们能从中受益的问题”。

实际应用与总结

理解希基原则有助于:

  • 理解行为:解释为何某些机构投入大量资源却收效甚微。
  • 预测行为:判断某人是否会为自身利益而延续问题。
  • 修正行为:通过消除扭曲的激励或创造更强的反向激励来改变状况。

应用时,可结合两个有用的概念进行分析:“谁受益?”(调查事件中的利益相关方)和**“汉隆剃刀”**(勿轻易以恶意揣测,可优先考虑愚蠢或疏忽等更简单的解释)。

总之,希基原则揭示了一个重要现象:为解决问题而存在的实体,其利益可能与彻底解决问题相悖,从而有意或无意地阻碍进步。认识到这一点,对于分析社会、商业和官僚体系中的诸多难题具有重要意义。

2. GPT in 500 Lines of SQL (explainextended.com)

本文介绍了如何使用纯 SQL 代码(结合 PostgreSQL 的 pgvector 扩展)实现 GPT-2 大型语言模型(LLM),以挑战“SQL 不适合实现 LLM”的观点。以下是其核心内容的总结:

理论基础

LLM 本质上是一个确定性函数,它将一个文本提示作为输入,并输出一个词元列表及其对应概率,这些概率代表了提示后续可能的词。通过反复调用该函数、根据概率随机选择下一个词元,并将其追加到提示中,可以生成连贯的文本。GPT(生成式预训练变换器)是实现此类功能的主流算法。

主要实现组件

  1. 分词器

    • 采用字节对编码(BPE)算法,将文本拆分为子词单元(词元),而非单个字符或完整单词。
    • 使用递归 CTE,在 SQL 中实现了 BPE 的合并过程:从单个字节开始,反复合并最频繁的相邻词元对。
    • 示例展示了对单词 "Mississippilessly" 的分词过程。
  2. 嵌入

    • 将每个词元 ID 和其在文本中的位置,分别通过预训练好的词嵌入矩阵 (WTE) 和位置嵌入矩阵 (WPE) 映射到高维向量空间(GPT-2 为 768 维)。
    • 将词元嵌入和位置嵌入相加,得到输入向量。
  3. 注意力机制

    • 实现了多头因果自注意力机制。该步骤允许模型关注输入序列中不同位置的信息,但确保生成时是自回归的(即后面的词元不能影响前面的计算)。
    • 使用递归 CTE 和向量运算,在 SQL 中完成了以下步骤:
      • 层归一化:对输入向量进行归一化处理。
      • 查询、键、值计算:将归一化向量通过学习的线性变换投影为查询(Q)、键(K)、值(V)向量。
      • 注意力分数计算:计算查询与所有键的点积,并应用因果掩码(防止信息从未来流向过去)。
      • 加权求和:使用 Softmax 函数将注意力分数转换为权重,并对值向量进行加权求和。
      • 输出投影:将多个注意力头的输出拼接,并通过另一个线性层投影回原始维度,最后与输入进行残差连接。
  4. 前馈神经网络

    • 在每个注意力块之后,是一个简单的两层前馈网络(使用 GELU 激活函数)。
    • 该步骤同样包含层归一化、线性变换和残差连接。
  5. 模型堆叠

    • GPT-2 由 12 个相同的“块”(即上述注意力层和前馈层的组合)堆叠而成。
    • 使用递归 CTE 将数据依次流经所有块,实现深度模型的模拟。
  6. 输出与推理

    • 最终输出通过最后一个块的输出向量计算得到。
    • 通过计算输出向量与所有词嵌入向量的点积(logits),并应用 Softmax 函数(引入温度参数 temperature 以控制随机性),选择下一个词元。
    • 作者展示了如何使用这些步骤,以 “Happy New Year! I wish you” 为提示,生成后续文本。

总结

这篇文章详细展示了如何利用 PostgreSQL 的 SQL(尤其是递归 CTE 和向量运算)来模拟神经网络的关键计算步骤,从而完整实现了一个 GPT-2 模型的推理过程。虽然执行效率无法与优化过的深度学习框架相比,但它证明了 SQL 在表达复杂算法和数据转换方面的强大能力。最终,模型成功为新年祝福语生成了合理的后续文本。

3. Show HN: OK-Robot: open, modular home robot framework for pick-and-drop anywhere (ok-robot.github.io)

OK-Robot 性能分析摘要

OK-Robot 是一个开放、模块化的家庭机器人框架,专注于实现任何环境下的拾取和放置任务。该框架展示了在全新环境中的零样本泛化能力,但实际性能分析揭示了成功与失败的关键因素。

在完全陌生的家庭环境中,OK-Robot 的成功率为 58.5%。然而,失败原因呈现出长尾分布,主要失败模式包括以下三点:

  1. 语义记忆检索失败:无法从语义记忆中正确检索目标对象以导航,占失败案例的 9.3%
  2. 操作模块姿态困难:从操作模块中获取困难姿态导致任务失败,占 8.0%
  3. 硬件问题:硬件相关困难,占 7.5%

在论文的“理解 OK-Robot 性能”部分,详细分析了这些失败模式,并讨论了最频繁出现的案例,以进一步优化系统。

4. A former Gizmodo writer changed name to 'Slackbot', stayed undetected for months (www.theverge.com)

文章总结了前Gizmodo撰稿人Tom McKay在2022年离职后,通过将自己在工作沟通平台Slack上的账户伪装成官方“Slackbot”机器人,成功潜伏数月未被公司管理方发现的恶作剧事件。其核心操作包括将个人头像替换为模仿Slackbot的愤怒版本图标,并将用户名改为“Slackbot”——但通过使用Unicode字符替代原名中的字母“o”来绕过平台的同名限制。这一伪装使其账户得以逃避离职后的自动删除,并能以机器人身份向同事发送类似自动消息。文章指出,虽然部分公司会有安全措施防止此类行为,但Gizmodo的管理方可能因疏忽未察觉此伪装账户的存在。McKay的前同事对此并不意外,并暗示这与该媒体公司的管理状况有关。

5. Generative Models: What do they know? Do they know things? Let's find out (intrinsic-lora.github.io)

文章总结

本文探讨了生成模型(如自回归模型、GANs和扩散模型)在生成训练过程中隐含编码的内在场景知识,并提出一种通用方法来恢复这些知识。

核心研究问题

  1. 内在知识内容:生成模型编码了哪些内在场景属性(如法线、深度、反照率和着色)?
  2. 通用恢复框架:是否能建立一个模型无关的框架,从不同类型生成模型中恢复内在表示?
  3. 参数与数据效率:需要多少可学习参数和标记数据才能有效恢复内在知识?
  4. 质量相关性:生成模型的质量与恢复的内在图像准确性之间是否存在关联?

方法与技术

  • 核心方法:采用低秩适应(LoRA),一种轻量级、模型无关的适应技术,针对生成模型的注意力层(如VQGAN和Stable Diffusion)或仿射层(如StyleGAN)进行应用。
  • 关键创新:无需额外的任务特定解码头或层,直接利用LoRA从模型的现有表示中恢复内在图像。
  • 实现细节:LoRA参数极轻量化,例如在Stable Diffusion中,秩为2时仅需模型权重的0.04%。

主要发现

  • 广泛适用性:LoRA能成功从自回归模型、GANs和扩散模型中恢复多种内在图像(深度、法线、反照率和着色)。
  • 高效率:仅需少量标记数据(如250张图像)即可训练LoRA模块生成内在图像。
  • 质量关联:控制实验表明,生成模型的质量越高,恢复的内在图像准确性越好,证实两者之间存在正相关。

结论

本文证明生成模型隐含编码丰富的内在场景知识,且通过轻量级的LoRA方法可以高效、通用地恢复这些知识,为生成模型的内部表示学习提供了新见解。

6. Mamba: The Easy Way (jackcook.com)

Mamba: 简易解析

背景与问题

当前主流语言模型(如ChatGPT、Gemini)基于Transformer架构,其核心注意力机制存在根本缺陷:计算复杂度随序列长度呈二次方增长。这导致处理长文本(如摘要百页文档)时速度极慢。

S4模型基础

Mamba基于状态空间模型(SSM)S4,通过以下连续方程将输入 (x(t)) 映射到输出 (y(t)): [ h'(t) = \mathbf{A}h(t) + \mathbf{B}x(t) \quad ; \quad y(t) = \mathbf{C}h(t) ] 实际使用中需离散化为: [ h_t = \mathbf{\bar{A}}h_{t-1} + \mathbf{\bar{B}}x_t \quad ; \quad y_t = \mathbf{C}h_t ] S4的关键特性是具有双重等价形式

  • RNN模式(循环神经网络):适合推理,逐步计算状态
  • CNN模式(卷积神经网络):适合训练,可预计算卷积核 (\mathbf{\bar{K}}),利用并行计算加速

Mamba的核心创新

1. 选择性机制

S4的参数 (\mathbf{\bar{A}}, \mathbf{\bar{B}}, \mathbf{C}) 是固定的,而Mamba使其依赖于输入动态变化: [ h_t = s_{\mathbf{\bar{A}}}(x_t)h_{t-1} + s_{\mathbf{\bar{B}}}(x_t)x_t ] 这使模型能聚焦关键信息(如分类意图时突出"order"和"hamburger"),提升任务表现。但因此无法使用CNN模式预计算卷积核,只能采用训练较慢的RNN模式。

2. 快速并行训练

Mamba将状态更新方程 (h_t = \mathbf{\bar{A}}h_{t-1} + \mathbf{\bar{B}}x_t) 类比为前缀和扫描算法。虽序列计算看似必须顺序进行,但可利用GPU并行性,在 (O(\log n)) 时间内完成。

作者基于FlashAttention的内存优化思想(使用GPU的HBM与SRAM进行分块计算),优化了并行扫描实现,最终使Mamba训练速度超越FlashAttention-2,在长序列上优势显著。

实验结果

在语言建模、基因组和音频任务上,Mamba表现出色:

  • 语言建模:在1.25亿至1.3亿参数规模下,性能优于同等大小的Transformer模型。
  • 推理速度:得益于线性时间复杂度,处理长序列时速度显著提升。

当前状态与展望

Mamba论文在ICLR会议被拒,引发讨论。尽管在中小模型上效果突出,其在大规模模型上的性能仍需进一步验证。作为线性时间模型的代表,Mamba为解决长序列处理效率问题提供了新方向。

7. Losing two jobs in one year (jbennetcodes.medium.com)

一年内失去两份工作的经历

背景与初始冲击

2022年是压力巨大的一年。作者的家庭因房地产市场疯狂而买房失败;2022年2月24日,俄罗斯入侵乌克兰,作者的祖国,朋友和亲戚失去家园、工作和未来安全。2022年11月30日,作者在Elastic公司工作时收到裁员邮件,公司宣布裁员13%,她被包括在内。作为有20年经验的软件工程师,她曾认为好工程师不会被裁员,这给她带来巨大震惊。Elastic的裁员处理相对人性化:立即离职但保持工资和福利到12月,提供14周遣散费和6个月医疗保险。作者哭泣后开始找工作。

第二次工作与失业

通过前同事介绍,作者于2023年1月加入Coiled,一家数据工程初创公司,从事Dask相关工作。与Elastic这样的大公司不同,Coiled是小公司,方向多变,作者因Elastic裁员后缺乏自信,决定保持低调、少说话、努力工作。2023年7月,经理在1:1会议上宣布解雇她,这是第二次失业。Coiled提供6周遣散费,但找工作变得困难,因为市场因更多公司裁员(如Twitter、Google、Meta)而饱和。

健康危机与反思

在找工作期间,作者需要非危及生命的手术。术前检查发现肺部有3厘米肿块,疑似癌症,但CT扫描确认是20年前肺炎留下的疤痕组织。这一消息让她重新评估生活优先事项:两次失业变得不再重要,孩子们不会失去母亲。手术在保险覆盖内成功进行,但恢复过程漫长。

接受不完美与后续影响

失业和健康危机严重动摇作者信心,她停止写作、参加会议或公开演讲。她接受了一些公理:任何事情都可能发生、无法保护孩子免受一切、工作只是身份的一部分、不完美、变化不可避免、不孤单。朋友提供了大量帮助和鼓励。最终,作者找到新工作,有好团队和挑战性产品,重新投入工作,感觉恢复中。

总结

作者的经历突出了生活中的不确定性、身份的多重性以及支持的重要性。这不是一个英雄克服所有障碍的故事,而是一个关于挣扎、失误和接受不完美的故事。作者强调了变化不可避免,但通过接受和支持,可以重新找到方向和希望。

8. Please make your table headings sticky (btxx.org)

文章讨论了网页中大型数据表格的可用性问题,并提供了一个简单的CSS解决方案。

核心问题

  • 当网页表格包含数百行数据时,用户向下滚动后,表头会从视图中消失。
  • 这导致用户难以记住每一列数据所对应的含义,尤其是在首次查看表格时。

解决方案

  • 使用CSS的 sticky 定位特性,使表头在滚动时保持可见。
  • 实现方式是为表格的 <thead> 元素添加以下两个CSS属性:
    position: sticky;
    top: 0;
    
  • 该方法仅需少量代码,实施简单。

优势与兼容性

  • sticky 定位拥有约96%的全球浏览器支持率,属于成熟可靠的技术,而非实验性特性。
  • 它能显著提升终端用户在处理大型表格时的体验。

示例与延伸

  • 文章提供了在线代码示例(CodePen)进行演示。
  • 此外,作者还提到了另一篇相关文章《用最少的CSS实现响应式表格》,可作为进一步了解。
9. The Earth is getting greener (www.vox.com)

地球正在变得更绿

尽管面临森林砍伐、草地消失和气候变化引发的野火等环境破坏,卫星数据表明,过去四十年间地球的绿色植被覆盖面积却在显著增加。这一“全球绿化”现象不仅发生在陆地,海洋也呈现类似趋势。绿色植被的增加有助于通过光合作用吸收二氧化碳,从而部分缓解气候变化的影响。然而,这种绿化并非单纯的生态系统恢复,而是人类大规模改变环境的结果。

绿化的原因

卫星传感器通过测量不同波长的光来估算地表叶片数量,数据显示自20世纪80年代以来,全球绿色叶片面积增加了约5%,相当于覆盖一个亚马逊雨林面积的叶片量,且绿化速率在多数陆地仍在加快。主要驱动因素包括:

  • 二氧化碳浓度上升:大气中二氧化碳含量较两个世纪前增加了约50%,作为植物生长的肥料,促进了叶片生长。
  • 农业集约化与植树造林:人类在相同土地上种植更多作物,以及大规模植树(尤其在中国和印度)贡献了约三分之一的绿化。中国通过种植数百亿棵树防治土地退化,印度的农业集约化也显著提升了植被覆盖。

绿化的积极影响

更绿的地球有助于气候调节:陆地和海洋吸收了人类排放二氧化碳的一半以上,这些“碳汇”遏制了全球变暖加剧。全球绿化是陆地碳汇增长的原因之一。海洋绿化则可能与浮游植物有关,但具体机制仍待研究,美国宇航局(PACE卫星)将通过观测海洋颜色来进一步理解浮游植物群落对气候的影响。

绿化背后的问题

绿色植被的增加掩盖了深层次问题:

  • 生态多样性丧失:卫星无法区分原始雨林和单一作物种植园,两者均显示为绿色,但后者缺乏生物多样性和生态功能。
  • 工业化农业的代价:农田绿化往往以替代自然生态系统为代价,且需要大量水资源和化学药剂(如肥料、农药),长期可能碳排放大于吸收。例如,加州帝王谷通过消耗科罗拉多河水资源将沙漠变为农田,引发了水资源争端。
  • 树木种植的局限性:人工林通常树种单一,生物多样性低,且部分树木可能最终死亡。
  • 营养价值下降:二氧化碳浓度升高可能降低作物中蛋白质和矿物质的含量,加剧全球营养不良问题。

结论

全球绿化现象是人类活动改变大气、地表和海洋的直观体现,其背后隐含着生态系统退化和资源压力等复杂问题。颜色的变化不仅反映了地球的物理变化,更凸显了人类对行星规模的深远影响。

10. A modest update to Qubes OS (lwn.net)

Qubes OS 4.2.0:一次以提升可用性为重点的更新

Qubes OS 简介 Qubes OS 是一个基于 Fedora Linux 和 Xen 超级监控程序(Hypervisor)、以安全为核心的桌面 Linux 发行版。其核心安全理念是通过虚拟化技术实现隔离,使用称为“qube”的虚拟机来运行应用程序、系统服务和设备访问。这些 qube 具有不同的信任级别和持久性,旨在提供一个“合理安全”且具备“高度隐私”的开源操作系统。Qubes 通过隔离来保证安全,而非依赖应用或服务本身的绝对安全。

核心架构

  • dom0 (管理 qube):基于 Fedora,拥有直接硬件访问权限,负责管理和协调其他非特权客户域。
  • domU (客户域):基于模板(存储为 LVM 卷),分为用于运行应用程序的“应用 qube”和提供网络、USB 访问等服务的“服务 qube”(例如 sys-net, sys-firewall, sys-usb)。
  • 模板 (Templates):应用 qube 的根文件系统来源。用户需要的持久化软件应安装在模板中,否则在应用 qube 重启后会丢失。
  • 信任级别:每个 qube 都有不同的信任等级,从“不安全且不受信任”到“安全且完全受信任”。所有 qube 通过颜色边框向用户直观显示其状态和安全级别。

4.2.0 版本更新重点 此版本(发布于2023年12月)主要关注于完善用户体验和提升易用性,而非底层架构的重大变革。

  1. GUI 应用程序改进

    • 重新设计的应用菜单:现在默认启用了在 4.1 版本中作为预览的新菜单。它将应用 qube、模板 qube 和服务 qube 分开组织,并将 Qubes 工具(如全局配置和策略编辑器)独立出来,改善了过去随着 qube 数量增加而变得混乱的菜单结构。
    • 全局配置应用程序:新设计的单一设置界面,整合了文件访问、剪贴板、更新、USB 设备、URL 处理等系统级设置,提升了功能的可发现性,旨在更好地服务非技术用户。
    • “创建新 Qube” 应用程序更新:新界面更直观,提供了更多初始配置选项和设置指导。
    • Qubes 更新应用程序改进:能够后台检查更新,并定期通知运行中 qube 的更新。可以自动尝试更新七天未使用的模板,并在更新后智能地提示重启 qube(不会中断正在运行的应用)。
  2. 模板与安全更新

    • 默认模板切换:将 Fedora 和 Debian 模板的默认桌面环境从 GNOME 更换为 Xfce,以减少内存使用并解决某些 GNOME 软件包与 Qubes GUI 代理的兼容性问题。
    • SELinux 支持:在 Fedora 模板中正式添加了 SELinux 支持。虽然 Qubes 本身已通过隔离提供强大安全,但 SELinux 能为在 qube 内部运行的应用程序(如 Podman、bubblewrap)提供额外的沙箱和加固功能,并在使用 qvm-copy 跨 qube 传输文件时增强安全性。

总结 Qubes OS 4.2.0 是一次相对温和的更新,其核心价值在于通过改进图形界面、简化管理工具和增强模板功能,显著提升了系统的可用性和用户体验。对于以安全为首要目标但操作可能复杂的系统而言,提高易用性对于吸引和留住用户至关重要。此次更新体现了 Qubes 项目在完善其安全架构理想的同时,也在努力使其更易于被更广泛的用户所接受和使用。

11. How to think about software quality (2022) (www.evalapply.org)

软件质量思考指南

软件质量的本质

软件质量关乎产品在诞生、变更与消亡整个生命周期中的“体验”。优秀质量意味着在整个过程中优雅地应对变化,并让所处环境变得更好。软件产品与其他机器不同:它由概念构成,具有无限的可塑性和变异性,并且大多数软件必须随着其所服务的世界而不断改变。这种改变与软件自身改变世界的反馈循环,共同形成了不断加速的压力。

谁该为质量负责?

质量保障不应仅是“QA”团队或开发者的责任。产品生命周期中的所有职能——包括分析、产品、设计、开发、运维、销售、市场乃至CEO——都影响着产品质量。将质量责任单一化,会导致风险延迟暴露、问题叠加,最终可能导致“千刀万剐”式的缓慢衰亡。

线性工作流程的风险

传统的分析→需求→设计→开发→测试→上线的线性工作流程存在固有风险:

  1. 风险前置:分析阶段的错误会贯穿全程。
  2. 债务/风险复合增长:问题和捷径会随时间累积、放大。
  3. 反馈延迟:质量缺陷的信号在交付压力下容易被忽略,修复成本急剧上升。

不同产品类型的挑战

  • 企业级产品:关键指标是营收增长,面临高客户风险与严苛SLA。
  • 消费者产品:关键指标是用户增长,面临微小的单元经济与EULA风险。 两者都面临共同的挑战:每一次热修复、投诉、崩溃、停机都是一次“切割”,损害质量与价值。

如何破坏软件质量

以下是常见的破坏质量的做法:

  • 将软件测试误认为质量保障。
  • 让最缺乏经验的人负责日常测试。
  • 催生不良文化,例如:“这是个小功能,别耽误进度”、“测试很无聊”、“用户投诉了再修”、“谁写的这代码?”。
  • 让设计、开发和测试人员工作于他人设定的任务与优先级。
  • 建立相互指责的文化和部门竞争的激励机制。
  • 常态化各种偏差行为。

如何创造软件质量

创造质量没有单一公式,但核心在于:

  • 避免上述破坏质量的行为。
  • 构建高质量的组织系统与文化。这需要:
    • 由所有利益相关者协同共建
    • 适应组织独特的背景。
    • 与客户、合作伙伴及生态共同演化。
  • 这是一个艰难的过程,需要正确的心态、领导力和持续的整体性评估与调整。其基础是多元且挑战现状的视角

核心技能:建设性地承受痛苦

提升质量如同恢复健康体魄,过程必然伴随不适(如肌肉酸痛、抗拒即时满足)。但建设性的痛苦能带来高质量的结果。幸运的是,行业已积累了大量由眼泪、汗水乃至生命换来的研究和经验报告,可以帮助我们增强直觉。

推荐资源(用于自我探索)

  • 系统思维:《Thinking in Systems》
  • 软件复杂度:《Out of The Tar Pit》、《No Silver Bullet》、《Simple made Easy》
  • 失败研究:《How Complex Systems Fail》、《Safety Differently》
  • 协作实践:《The Mythical Man Month》、《The Checklist Manifesto》、《The Principles of Product Development Flow》
  • 个人修为:《On Being a Senior Engineer》、《Hammock Driven Development》
  • 实践哲学:《High Output Management》、《Destruction and Creation》
  • 其他:Gene Kim的播客《The Idealcast》

本文基于作者约20年专业生涯中的个人失败、错误与成功经验写成,是对当前直觉的阐述。请批判性地吸收,取其有用之处。

12. Show HN: Refractify – Optical software against myopia (refractify.io)

Refractify:用于近视预防的光学软件

背景

近视(近视为眼)不仅由遗传因素导致,也与室内时间增加或近距离屏幕工作相关。研究揭示了眼睛轴向异常增长的机制,并提出了非侵入性治疗方法,如智能眼镜和近视控制隐形眼镜。

Refractify 简介

Refractify 是全球首个在屏幕上应用近视性离焦(myopic defocus)效果的软件。临床前研究表明,它可能减缓近视进展或预防近视。该软件通过模拟纵向色差(Longitudinal Chromatic Aberration, LCA)和其他效应,使屏幕内容在视网膜上呈现为来自更远距离,从而模拟自然视觉效果。LCA 技术在计算机图形学中已用于增强深度感知,但近年来因近视预防潜力而受到研究关注。

核心功能

  • 近视性离焦模拟:在屏幕上复制当物体距离超过眼睛远点时产生的自然离焦效果。
  • 平台支持:提供浏览器扩展和桌面应用,适用于多种设备。

产品形式与可用性

1. Refractify MDL 浏览器扩展

  • 免费开源:适用于 Google Chrome、Microsoft Edge、Brave 等 Chromium 内核浏览器。
  • 移动端:可通过 Kiwi 浏览器体验(Firefox 暂不支持)。
  • 设置要求:需配置效果强度和屏幕参数。

2. Refractify MDL 桌面体验

  • 系统集成:支持 Windows 10/11,自动检测显示器尺寸和分辨率,最多支持 8 个显示器。
  • 付费模式:一次性付费,支持未来发展、测试和研究。
  • 优化功能:自动启动,提供实时近视性离焦效果。

重要注意事项

  • Refractify LLC 目标是开发医疗软件,但需进一步研究、改进和临床测试。
  • 警告:在未咨询医生或眼科专家前,勿尝试治疗或预防任何医疗条件;勿停止已批准的治疗方案。

常见问题解答要点

  • 有效性证据:树鼩实验中,近视性离焦成功预防了近视;人类使用双光隐形眼镜已显示减缓近视进展的效果。
  • 与蓝光过滤器区别:蓝光过滤器改变光谱模拟自然光;近视性离焦根据 LCA 函数模糊蓝绿光,营造远处光源外观,两者可同时使用。
  • 监管状态:尚未获得 FDA 或欧盟 MDSW 批准,但未来版本可能注册用于近视预防。
  • 专家意见:眼科医生看法不一,部分支持继续研究,部分认为近视完全由遗传决定。

未来计划

  • 订阅更新可获取新版本(包括 Linux 支持)和临床研究信息。
  • 项目欢迎捐赠以支持持续发展。

总结

Refractify 是一款创新软件,通过屏幕模拟近视性离焦效果,旨在预防或减缓近视进展。基于 LCA 技术和早期研究,它提供了非侵入性的视觉方案,但用户需注意其非医疗设备性质,并咨询专业医生。

13. Slimming Down Windows 3.1/3.11 (2002) (www.geocities.ws)

这篇文章介绍了如何精简Windows 3.1/3.11系统,使其能在内存和存储空间极其有限的旧电脑上运行。核心目标是减少不必要的系统文件,仅保留运行所需的最小文件集。

主要方法与方案:

  1. 从软盘运行

    • 使用两张1.44MB软盘即可在无硬盘、仅4MB内存的电脑上运行Windows。
    • 利用DOS的DBLSPACE(磁盘压缩)功能,可将启动文件和最小Windows文件分别放在两张压缩软盘上。
    • 过程涉及创建专用启动盘、配置系统文件(CONFIG.SYS, AUTOEXEC.BAT),并确保运行过程中正确换盘。
  2. 在内存盘上运行

    • 针对不支持FAT32的旧电脑(如只有16MB内存的386),可在内存中创建虚拟磁盘来运行Windows。
    • 将Windows精简至约5MB,置于9MB内存盘中,并留出2MB交换文件。系统运行流畅,但剩余内存可能有限。
  3. 最小系统文件清单

    • 文章列出了Windows启动和运行所必需的最小文件集,分别位于Windows目录和Windows\system目录下。
    • Windows目录最小文件总计约180KB。
    • Windows\system目录最小文件总计约1.45MB。
    • 所有必需系统文件合计约1.6MB。这不包括任何应用程序或额外驱动。
  4. 按需添加组件

    • 以上仅为裸系统。根据需求可添加:
      • 菜单组文件:如附件、游戏、网络、启动组。
      • 控制面板:用于更改设置,包含多个.cpl文件及相关程序文件。
      • 网络支持:区分DOS下启动网络和Windows下启动网络两种方式,所需文件不同。
      • 其他应用程序与驱动
  5. 存储与管理策略

    • 建议将不常用文件(如帮助文件、控制面板)压缩存储,仅在需要时解压使用,以减小运行时占用的空间。
    • 使用PKZIP等工具压缩文件,可存储在硬盘、软盘或网络驱动器上,便于复制到内存盘或软盘中运行。

总结: 这篇文章详细阐述了通过精简系统文件、利用软盘或内存盘等技术,将Windows 3.1/3.11的运行环境压缩到极致的实践方法,旨在让老旧低配电脑也能运行该系统。

14. Tell HN: Equifax free credit report dark patterns

Equifax 在提供法定免费年度信用报告时采用暗模式设计,主要体现在两个方面:

  1. 网页申请新增强制信息要求:申请 Equifax 信用报告时,被强制要求提供电子邮箱和手机号码,而其他信用机构及 Equifax 过去均通过知识验证问题来确认身份,这些信息并非必需。
  2. 电话申请流程存在故障:根据指引尝试电话申请时,在输入邮政编码后,语音系统虽能正确复述,但用户按下确认键时系统持续报错,并强制要求使用语音输入方式完成后续步骤,而录音确认也非提供报告的必要步骤。

用户已就此问题向 annualcreditreport.com 提出投诉,但未获回应。

15. Scuttlebutt social network: a decentralised platform (scuttlebutt.nz)

Scuttlebutt 去中心化社交网络概述

Scuttlebutt 是一个去中心化的社交网络平台,旨在为用户提供一种替代大型企业社交网络的自由选择。

核心特点与理念

该平台强调去中心化本地化,致力于促进本地社区的自由发展,摆脱大型公司的控制。其主要目标是赋予用户自主权,并创造一个免受大数据收集侵扰的自由空间。平台被描述为一个快速增长的去中心化社交网络,对社会具有变革潜力。

相关资源与背景

平台网站提供了获取入门信息(Get Started)的链接,并展示了其相关的客户端应用图标(如 Patchwork 和 Patchbay)。网站还收录了一系列关于 Scuttlebutt 的演讲和文章资源,以帮助用户深入了解其愿景:

  • 《The Localized but Distributed Social Network - 2019》
  • 《Scuttlebutt and a Decentralized Future - 2018》
  • 《Reinvent the Social Web - André Staltz @ FullStackFest - 2018》 网站同时提供了更多视频资料的入口。

平台定位

Scuttlebutt 定位为大型企业社交网络的替代方案,其核心价值在于通过去中心化技术实现用户自治和社区赋能。

16. Microsoft Joins the MapLibre Sponsorship Program (maplibre.org)

微软作为银级赞助商加入MapLibre赞助计划。其80,000美元的银级捐赠将用于:20%用于开发新功能,80%用于MapLibre代码库的常规维护和项目协调。微软从最初就对MapLibre组织的建设发挥了重要作用,此次加入赞助计划为双方可持续的共同未来奠定了基础。微软在消费级和企业级地图产品中均使用MapLibre GL JS。Bing Maps已在生产环境部署MapLibre GL JS,这得益于Bing Maps工程师为MapLibre贡献的性能改进。Azure Maps基于MapLibre GL JS为全球企业客户提供高质量的地图服务。我们期待微软的更多贡献,并很荣幸拥有微软作为赞助商!

17. Neat Parallel Output in Python (bernsteinbear.com)

本文介绍了如何在Python中实现整洁的并行任务输出,模仿Bazel等工具的多行状态显示效果。主要内容如下:

问题背景

使用multiprocessing进行并行任务处理时,多个进程的日志输出会交错混乱,难以阅读。例如,每个仓库(repo)的构建状态(如“Starting”、“Installing”等)在终端中混杂显示。

解决方案

通过终端控制序列共享状态字典,实现在同一组行中动态更新各任务状态:

  1. 核心机制

    • 使用multiprocessing.Manager创建共享的字典last_output_per_process存储各任务最新状态。
    • 使用锁(terminal_lock)同步对共享字典和终端输出的访问,避免输出错乱。
  2. 关键函数

    • log(): 获取锁,更新当前任务的状态,然后清屏并重绘所有任务的状态行(按顺序显示)。通过ANSI转义序列(\x1b[1A\x1b[2K)实现光标上移和行清除。
    • func(): 任务完成时,从共享字典中删除自身记录。
    • fill_output() / clean_up(): 辅助函数,用于初始化空白行和最终清理显示区域。
  3. 输出效果

    • 终端固定显示min(仓库数, CPU核数)行状态。
    • 每个任务始终占据一行,其状态行会原地更新,直到任务完成该行被移除。
    • 输出顺序由添加到字典的顺序决定,也可进行排序。

局限性

  • 仅适用于单行日志状态。多行输出可能产生干扰。
  • 如果其他地方有直接的print语句,可能会破坏显示格式。

参考资料

  • 方案灵感来源于StackOverflow用户Leedehai的终端重写技巧。
  • 完整代码示例可在提供的Gist链接中找到。
18. Meta's new LLM-based test generator is a sneak peek to the future of development (read.engineerscodex.com)

Meta 基于大语言模型的新测试生成器:开发的未来前瞻

Meta 最近发布了一篇题为“在 Meta 使用大语言模型自动改进单元测试”的论文。其核心成果在于将 LLM 集成到开发者工作流中,并推荐经验证既正确又能提升当前代码覆盖率的、完整可用的软件改进方案。这并非万能药,但为增强 LLM 实用性迈出了重要一步。与 ChatGPT 等工具的建议仍需人工验证相比,该系统直接提供经过验证的改进,降低了调试成本。

核心要点与运作机制

  • TestGen-LLM 的定位:该工具专注于改进现有人工编写的测试,而非从零生成代码。可将其视为一个负责为现有代码创建更全面测试的“初级开发者”。
  • 技术方法:采用“有保障的基于 LLM 的软件工程”方法,使用 Meta 内部私有、可能经微调的 LLM。它通过集成方法(结合 LLM、提示词和超参数)生成一组候选改进,然后筛选出最佳方案。
  • 集成与流程:TestGen-LLM 已集成至 Meta 的软件工程流程中。其生成的拉取请求需经人工审查后才能合并。
  • 过滤器确保质量:输出经过一系列严格过滤:
    1. 可构建性检查:代码能否成功构建。
    2. 执行检查:测试是否通过。
    3. 稳定性检查:测试结果是否一致(需连续 5 次通过)。
    4. 覆盖率提升检查:新测试是否真正增加了代码覆盖路径。 通过所有过滤器的测试被保证能增强现有测试套件。

关键数据与成效

  • 在 Instagram 的 Reels 和 Stories 产品评估中,75% 的生成测试用例成功构建,57% 能可靠通过,25% 有效增加了代码覆盖率。
  • TestGen-LLM 能改进其应用到的 10% 的类,且 73% 的测试改进被开发者接受并合入生产环境。
  • 在一次“测试马拉松”中,TestGen-LLM 生成测试增加的中位数代码行数为 2.5 行,但有一个测试用例覆盖了 1,326 行代码,显著揭示了被人类遗漏的代码路径。
  • 所有改进后的测试用例均覆盖了至少一个额外的边界情况(如提前返回、处理 null 值或空列表等)。

意义与启示

  • 提升效率与可靠性:该论文展示了 LLM 如何以高效方式提升开发生产力和软件可靠性。它提供了一种低风险、能节省开发者累计时间的方式,特别是在测试生成和代码审查自动建议等增量、专门化的场景中。
  • LLM 的局限与适用场景:由于上下文窗口小和依赖分散,LLM 在大型代码库中解决非样板问题的能力有限。它们需要大量后处理和过滤,其最佳使用方式是集成到工作流中(如 Copilot),而非独立的聊天机器人。
  • 超越人类视角:LLM 的价值在于能将其“思考箱”扩大,提出人类可能忽略的边界情况和代码路径,尤其在处理“未知的未知”问题上可能比传统测试更有潜力。
  • 不是“即插即用”:基础 LLM 不能直接用于要求正确性的代码生成任务。需要像 Meta 这样,基于现有代码进行接地和过滤,大部分输出可能会被丢弃。
  • 未来展望:该论文形式化了开发者可能已在使用 LLM 进行的用途。随着发展,LLM 在捕捉复杂软件系统中的 bug 方面能力将持续提升,但这最终是使软件开发更容易,还是会引发软件复杂性激增,仍有待观察。
19. Show HN: Consol3 – A 3D engine for the terminal that executes on the CPU (github.com)

Consol3: 终端3D引擎概览

核心特性

  • 纯CPU软件渲染:所有图形计算(顶点变换、矩阵运算等)完全在CPU上执行,不使用显卡
  • 终端显示输出:直接在系统控制台/终端窗口显示渲染画面
  • 零外部依赖:仅使用操作系统提供的基础功能,不依赖任何外部库(数学库、窗口管理器等)

渲染技术

1. 光栅化管线

支持完整的光栅化流程:

  • 顶点着色器:处理顶点变换、投影和背面剔除
  • 图元裁剪:对离屏顶点进行裁剪
  • 屏幕空间变换
  • 光栅化:使用重心坐标法确定三角形内像素
  • 片段着色器:决定最终像素颜色(支持纯色、纹理、光照)

功能特性

  • 支持OBJ/MD2模型加载
  • 多种光源(方向光、点光、聚光灯)
  • 纹理映射与法线贴图
  • 阴影贴图(支持多光源阴影)
  • MD2动画播放
  • 球体生成
  • 镜面高光与彩色光照

2. 光线行进(Ray Marching)

  • 使用3D体素网格表示场景
  • 从摄像机发射光线,遇到非空气体素时停止
  • 集成简单物理模拟
  • 支持元素:沙、冰、水、蒸汽、石头、熔岩、钢铁
  • 体素着色与阴影

混合渲染

支持在同一场景中同时使用光栅化和光线行进技术。

帧绘制器

提供多种终端颜色表示方案:

  1. 灰度绘制器:16级灰度
  2. 抖动灰度绘制器:通过字符抖动扩展至80级灰度
  3. 抖动绘制器:使用默认调色板,每种颜色10级深度
  4. VT转义序列绘制器:支持32位真彩色或256色索引调色板
  5. 纯文本绘制器:仅用字符亮度表示明暗(如 ·;%░≡¥▒▓█)

着色器系统

  • 实现类似GPU的可编程着色器概念
  • 支持自定义顶点和片段着色器
  • 通过类型擦除上下文在管线阶段间传递数据
  • 示例展示了纹理映射的着色器实现

构建与使用

  • 构建系统:CMake(支持Windows和Linux)
  • 生成可执行文件
    • Consol3_raster:光栅化场景演示
    • Consol3_voxel:体素与物理模拟场景
  • 基本控制
    • WASD移动/方向键控制视角
    • 鼠标/数字键控制灯光、场景选择
    • Page Up/Down切换帧绘制器

计划特性

  • SIMD加速顶点变换
  • 多像素填充优化
  • 分块(Binning)光栅化优化

发展历程

作者多年的业余项目,经历多次重构和重写,当前为最新版本。Linux端暂不支持鼠标输入(使用方向键控制视角),且仅支持部分帧绘制器。

21. Quality is a hard sell in big tech (www.pcloadletter.dev)

大型科技公司中的质量难题

作者观察到大型科技公司的产品质量呈下降趋势,具体表现为:

  • 用户界面不稳定或不直观。
  • 代码库中存在大量未清理的冗余代码。
  • 有“可接受”解决方法的 bug 从未修复。
  • 依赖包严重过时。
  • 开发体验糟糕,如构建时间长、流程易破坏。

原因分析

产品质量下降的主要原因是投资不足:

  • 缺乏质量指标。
  • 测试基础设施投入极少,且实际测试编写不足。
  • 未投资改善内部开发循环。

质量难以推销

在大型科技公司中,质量改进难以获得支持,因为:

  • 公司更关注短期股价提升的举措,如 AI 相关功能。
  • 质量改进不会立即带来股价上涨,因此难以说服管理层优先投资。
  • 即使团队内部共识认为质量改进必要,高层往往更看重发布新功能以获取关注。

“劣化”策略

文章引用了 Cory Doctorow 的“enshittification”理论:

  • 第一阶段:分配盈余给用户以锁定他们。
  • 第二阶段:转移盈余给商业客户以锁定他们。
  • 第三阶段:为股东榨取所有价值,仅保留足够价值维持用户和客户粘性。 这可能是大型科技公司的宏观策略:先吸引用户,使其依赖产品,然后推出表面功能提升股价,而非提供真实价值,同时利用用户无法轻易切换的困境。

长期影响与反思

作者质疑这种质量削减的长期可行性:

  • 大型科技产品不能持续恶化。
  • 希望小型竞争对手能挑战其主导地位,但不确定是否会发生。
  • 期待自大策略最终反噬,促进行业改变。
22. Understanding, using, and finetuning Gemma (lightning.ai)

Gemma 是 Google 最新发布的开源权重大型语言模型(LLM)。通过 Lightning AI 提供的 Studio 教程,用户可以学习如何使用 Gemma,并通过 Lit-GPT 框架进行操作。教程重点介绍了 Gemma 相较于其他 LLM 的一些独特设计选择。Lightning AI 是一个基于 PyTorch 和 PyTorch Lightning 的 AI 训练、部署和构建平台,由 William Falcon 创立,提供多种资源链接如 GitHub 和 Discord。该 Studio 旨在帮助开发者理解和应用 Gemma 模型。

23. AMD ROCm Software Blogs (rocm.blogs.amd.com)

AMD ROCm 软件博客摘要

该系列博客文章主要介绍了基于AMD Instinct GPU和ROCm平台在不同领域的应用与进展。

主要文章内容

  1. 使用 Qiskit Aer 在 AMD Instinct 上运行变分量子特征值求解器 (VQE)

    • 发布日期:2026年5月29日
    • 内容:提供了一步步指南,展示如何在搭载ROCm的AMD Instinct GPU上,利用Qiskit Aer模拟器进行GPU加速的量子化学VQE计算。
  2. ROCm 7.13:扩展硬件、工具与覆盖范围

    • 发布日期:2026年5月20日
    • 内容:介绍了ROCm 7.13版本的新特性,主要包括:扩展的硬件支持、GPU虚拟化功能、增强的开发者工具,以及TheRock模块化打包系统。
  3. 复现 AMD MLPerf Inference v6.0 提交结果

    • 发布日期:2026年4月1日
    • 内容:为潜在客户和合作伙伴提供了详细的指南,用于验证和复现AMD在MLPerf Inference v6.0基准测试中提交的结果。
  4. 利用 AMD Instinct GPU 加速器进行天气与降水预报

    • 发布日期:2026年3月19日
    • 内容:展示了如何在AMD Instinct硬件上运行混合GCM模型NeuralGCM,内容涵盖模型介绍、安装步骤、推理过程和结果绘图,应用于天气和降水预测领域。