2024-03-20

36 篇热帖

3. Rive Renderer for real-time vector graphics is now open source (rive.app)

Rive渲染器宣布开源

Rive宣布其专有的Rive渲染器正式开源,适用于所有平台。该渲染器专为Rive内容、动画和运行时设计,能够以前所未有的高性能渲染大量矢量图形。Rive渲染器支持全屏矢量图形和清晰文本显示,并保证在120fps下流畅动画与高质量抗锯齿。

开源原因与背景

  • 限制与挑战:Rive最初依赖Skia等开源方案,但这种“自带渲染器”架构导致跨平台功能不一致,限制了产品创新和功能扩展。
  • 统一需求:一个统一的渲染器能确保新功能(如模糊、阴影、光效、锥形描边等)在所有支持平台上可靠实现。

技术特点

  • 几何简化与三角形细分:Rive渲染器采用新颖的几何简化方法,将抗锯齿矢量路径转换为独特的三角形片段,利用GPU的三角形光栅化管线高性能渲染贝塞尔曲线。
  • 跨平台支持:目前已集成至iOS、Android、Web、Unity和Unreal运行时,更多平台集成即将推出。

使用建议

  • 用户可继续使用第三方渲染器,但Rive推荐采用Rive渲染器以获得最佳性能和专属功能。开源代码已发布在GitHub上。
4. HIV in cell culture can be completely eliminated using CRISPR-Cas gene editing [pdf] (www.escmid.org)
5. Michel Talagrand wins Abel Prize for work wrangling randomness (www.quantamagazine.org)

米歇尔·塔拉格朗获阿贝尔奖:驾驭随机性的数学家

获奖与个人背景

  • 奖项:法国概率论学家米歇尔·塔拉格朗因对随机过程的深刻研究获2024年阿贝尔奖(挪威国王颁发,奖金约70万美元)。
  • 个人经历:童年因视网膜脱落几近失明,住院期间父亲(数学教授)教授数学,培养其抽象思维能力。曾就读于里昂,后加入法国国家科学研究中心至退休。
  • 学术起步:初期研究高维几何空间,后转向概率论,将几何直觉应用于概率问题。

核心学术贡献

1. 高斯分布与极端事件估计

  • 针对呈高斯分布(钟形曲线)的随机过程,推导出一系列严格不等式,为极端结果设定上下界。
  • 应用示例:估算河流最高水位、最大地震强度等实际问题中的风险。

2. 通用链法

  • 历时15年发展的技术,通过构建与随机过程相关的高维几何空间,从几何结构中提取极值信息。
  • 广泛应用于高维数据分析(如蛋白质结构比较),可评估降维过程中引入的误差上限。

3. 测度集中现象

  • 发现随机事件在聚合后呈现确定性行为(如抛硬币次数越多,结果越接近期望值)。
  • 提出浓度不等式,量化这种“随机性抵消”现象,并证明其在多领域的普遍性。
  • 应用:组合优化(如装箱问题)、统计、物理和计算机科学。

4. 自旋玻璃理论

  • 解决自旋玻璃自由能的关键猜想,为数学化描述该无序磁性系统奠定基础。

学术影响与评价

  • 领域改变:其工作被视为连接概率论与几何学的桥梁,为现实世界随机现象建模提供核心工具(如“阿贝尔奖委员会主席称其‘工具箱’被广泛使用”)。
  • 方法特点:注重从复杂问题中提取可复用的普遍原理,证明过程追求简洁(如某不等式仅一页证明)。
  • 教育贡献:晚年撰写教材(包括自旋玻璃和量子场论),推动跨学科知识传播。

治学理念

  • 强调深度理解简单问题,通过长时间思考提炼本质,认为“下一代可基于此取得进展”。
  • 个人生活:与统计学家妻子相识三天后求婚;计划用部分奖金设立青年研究者奖项。

总结:塔拉格朗通过融合几何与概率论,发展出分析随机过程的系统性工具,解决了从极值估计到测度集中等核心问题,其成果深刻影响了数学、物理、统计及工程领域。

6. Study puts fermented foods, not fire, as pivotal moment in human brain growth (plantbasednews.org)

研究:发酵食品,而非用火,是人类大脑增长的关键

一项新研究提出,发酵食品可能推动了人类大脑的进化,而非此前普遍认为的烹饪用火。

人类大脑大约在250万年前开始显著增大。传统观点认为,火的使用和烹饪发明使祖先能获得充足营养,从而驱动了这一进化。但新研究指出,考古证据表明,人类大脑开始扩张的时间比用火证据早了多达100万年。

大脑运作需要大量热量。研究者因此认为,存在另一种更早的饮食变化促成了大脑生长。他们推测,对祖先而言易于获取的发酵食品是关键因素。

“外部发酵假说”

研究提出了“外部发酵假说”。食物虽可在肠道内发酵,但研究者认为,祖先食用的很可能是已预先发酵过的食物。

研究表明,发酵能让人体更易吸收宏量和微量营养素,并提高碳水化合物和蛋白质的消化率。

支持这一假说的一个事实是,人类的大肠相对于其他灵长类动物更短小。这表明我们的祖先食用的是经过发酵部分分解的食物。研究者解释:“只有当祖先能利用营养更密集、更易消化的食物来源时,较小的肠道尺寸才可能进化。”这样,消化所需的能量减少,从而可将更多能量用于大脑发展。

偶然的发现

祖先可能并非有意为健康而选择发酵食品,而是偶然所得。研究推测,早期人类可能将食物储存在固定地点,间歇性地取用并添加。这种重复使用同一储存点的方式,可能无意中形成了一个稳定的微生物生态系统,从而促进了发酵。

“这不一定是有意为之,”该研究合著者、哈佛大学人类进化生物学助理教授艾琳·赫希特告诉《哈佛校刊》,“它可能只是储存食物带来的意外副作用。也许随着时间推移,某些传统或习惯促进了发酵实践,使其变得更稳定或可靠。”

对现代健康的启示

该研究的主要作者、艾克斯-马赛大学的研究员凯瑟琳·布莱恩特认为,“外部发酵假说”也可能影响对现代饮食的研究。

她表示:“该假说为我们科学家探索发酵食品在人类健康和维持健康肠道微生物组中的作用提供了更多理由。近年来已有多项研究将肠道微生物组与身体健康乃至心理健康联系起来。”

事实上,泡菜和豆豉等发酵食品因其对肠道健康的益处而日益流行。肠道健康专家蒂姆·斯佩克特教授建议每天食用少量发酵食品,以促进肠道微生物组的多样性。

8. People hate the idea of car-free cities until they live in one (www.wired.com)

无车城市的推行:从反对到接纳的转变

问题背景

2016年,伦敦面临严重的空气污染问题,超过200万居民(约占人口四分之一)居住在空气质量未达标区域,这些区域内还坐落着近500所学校。空气污染每年导致多达3.6万人过早死亡,其中交通污染占城市碳排放量的四分之三。

政策措施与成效

伦敦采取多种策略减少机动车数量:

  • 对高污染车辆征收费用
  • 对进入市中心的车辆收费
  • 改造住宅区道路布局,通过单向系统、路桩和花盆等设施创建“低交通社区”
  • 推广自行车和公共交通使用

成效显著:

  • 碳排放量下降
  • 二氧化氮超标区域居民减少94%
  • 南伦敦兰贝斯区每天减少2.5万次汽车出行
  • 自行车、步行和滑板车使用量增加40%

其他欧洲城市如卢布尔雅那、奥斯陆和赫尔辛基也通过类似政策大幅减少碳排放和空气污染,赫尔辛基甚至实现全年零交通死亡。

实施挑战

尽管效果明显,这些政策面临巨大阻力:

  • 强烈反对:伦敦规划者和政客收到死亡威胁,个人信息被公开
  • 文化冲突:汽车被视为自由、独立和成功的象征,减少用车被视为对个人自由的侵犯
  • 公平性质疑:担心低交通区会导致房价上涨,将经济困难群体推向交通繁忙的道路

成功关键因素

研究表明有效策略需要:

  1. 胡萝卜加大棒:既要限制开车,也要提供便捷的替代交通方案
  2. 自下而上参与:巴塞罗那“超级街区”项目通过居民全程参与设计获得广泛支持
  3. 解决实际需求:确保紧急服务、商业配送等“最后一公里”交通需求得到满足
  4. 时间检验:居民对低交通社区的支持度随时间增加

长期效果

一旦实施,无车化措施很少被逆转:

  • 哥本哈根自1970年代开始推行,现被评为全球最宜居城市之一
  • 伦敦130个低交通社区中100个已永久保留
  • 居民普遍在政策实施一两年后表示“这是我们做过的最好的决定”

这些案例表明,尽管初期面临激烈反对,但经过时间检验,减少城市汽车使用的政策能够改善空气质量、降低碳排放、提升生活品质,并逐渐获得居民认可。

9. Lego price per part over the years (brickinsights.com)

文章探讨了乐高套装“零件单价”(PPP)指标的有效性及计算方法。

背景与质疑 Brick Insights 平台于2018年引入PPP指标,旨在帮助用户从自由拼搭(MOC)角度评估套装的价值。然而,读者 Jared Hinton 指出,平台显示的年均PPP(超过20美分/零件)似乎过高,与大多数套装的实际表现不符,他怀疑是否因为纳入了零件单价通常更高的得宝(Duplo)系列而导致平均值被拉高。

关键回应与调整 作者认可了这一质疑,并指出这是需要重新审视计算方法的时机。为此进行了两项关键调整:

  1. 数据范围澄清:文章引用的类别数据均来源于Brickset,明确了数据来源。
  2. 通货膨胀调整:为确保跨年度数据的可比性,文中所有零件单价数据均根据通货膨胀率进行了修正。这是此次审查后新增的方法,此前的计算未考虑此因素。

总结 文章的核心在于回应关于PPP计算准确性的合理质疑,并宣布了为提高指标可比性而采取的改进措施(通货膨胀调整),同时明确了所用套装的分类数据来源。它并未提供最终的调整后结果或具体数值分析。

10. Long Covid brain fog may be due to damaged blood vessels in the brain (www.sciencenews.org)

长期新冠患者的脑雾症状可能与脑血管损伤有关。研究发现,出现脑雾的长期新冠患者存在血脑屏障破坏,导致血液中的物质渗漏进入脑组织。

《自然·神经科学》2月22日发表的研究显示,对32名参与者进行MRI扫描后,向10名已康复者、22名长期新冠患者(其中一半有脑雾症状)的血液中注射造影剂。结果发现:已康复者和无脑雾的长期新冠患者,造影剂基本停留在血管内;而在11名有脑雾症状的患者中,有8人的造影剂明显从血管渗漏进入脑组织,尤其在颞叶等负责语言、记忆、情绪和视觉的区域出现聚集。

该研究首次证实长期新冠患者可能存在血脑屏障破坏,这为脑雾症状提供了生物学依据。研究团队指出,血脑屏障由紧密排列的细胞构成,正常情况下能阻挡血液中的有害物质进入大脑;一旦屏障受损,血液中的病毒、细胞等物质可能进入脑组织并引发问题。

研究人员借鉴了重复性脑损伤的研究思路,因该类患者也常出现脑雾症状,且已知创伤性脑损伤可破坏血脑屏障。此前已有细胞和动物实验证实SARS-CoV-2病毒可损害血脑屏障成分,COVID-19死亡病例的尸检也观察到屏障破坏,但长期感染后该损伤是否持续尚不明确。本研究为此提供了直接证据。

该发现不仅有助于理解脑雾的病理机制,也为潜在治疗提供了方向,例如通过干预延缓或逆转血脑屏障破坏。

11. Regex character "$" doesn't mean "end-of-string" (sethmlarson.dev)

正则表达式 $ 字符并非总是匹配“字符串结尾”

核心发现

  • 在多数正则表达式实现中,$ 通常被认为是“字符串结尾”的匹配符,与 ^(字符串开头)相对应。
  • 但在 Python 的 re 模块中(多行模式关闭时),$ 不仅能匹配字符串的真实结尾,还能匹配字符串结尾之前的换行符(\n。这意味着它可能匹配到一个实际后面还有换行符的行尾位置。
  • 这种行为因编程语言和平台而异,且与多行模式(re.MULTILINE)的设置密切相关。

$\Z\z 的区别

  • $:在多行模式开启时,匹配每一行的结尾(即每个换行符之前)。在多行模式关闭时,其行为因语言而异(如 Python 会额外匹配末尾换行符前的位置)。
  • \Z:始终匹配字符串的绝对结尾忽略末尾的换行符。在某些语言中,如果字符串以换行符结尾,\Z 会匹配在那个换行符之前。
  • \z(小写):严格匹配字符串的绝对结尾,不匹配任何其他位置(包括换行符前)。这是最精确的“字符串结尾”匹配符。

跨平台行为比较(针对字符串 "cat\n" 的匹配)

文章通过表格比较了多种语言/运行时(PHP, ECMAScript, Python, Golang, Java, .NET, Rust)的行为:

  • 使用 $ 且开启多行模式:所有平台均匹配成功 ✅。
  • 使用 $ 但关闭多行模式:行为不一致。在 PHP、Python、Java、.NET 中匹配成功,而在 ECMAScript、Golang、Rust 中匹配失败
  • 使用 \z:在大多数语言中匹配失败 ❌(因为它严格匹配字符串末尾,而 "cat\n" 的末尾是换行符之后)。Python 在 3.14 版本之前不支持此语法。
  • 使用 \Z:行为多样。在 PHP、Java、.NET 中匹配成功;在 Python 中匹配失败;在 ECMAScript、Golang、Rust 中是无效语法或不支持

关键结论与实用建议

  1. 如果允许匹配末尾换行符:使用 $ 并开启多行模式跨平台最一致可靠的方法。
  2. 如果需要严格匹配字符串的绝对结尾,且不想匹配任何换行符
    • 首选 \z,因为它在大多数现代语言(Java 8+, .NET 7.0+, Rust 等)中能准确匹配字符串末尾,不受换行符影响。
    • 注意语言差异
      • Python 中(3.14 版本之前不支持 \z),需要使用 \Z 或其他变通方法(如 $(?!\n))。
      • ECMAScript 中,应使用 $ 且不开启多行模式
      • PHP、Java、.NET 中,\z\Z 都能匹配无换行符的字符串结尾,但 \Z 也会匹配末尾换行符前的位置,而 \z 更严格。

总结:正则表达式的行尾匹配行为存在显著的平台差异。开发者在需要精确控制匹配位置时,必须查阅所用语言的具体文档,并针对字符串可能包含末尾换行符的情况进行测试。

12. What does Alan Kay think about LLMs? (www.quora.com)

文章内容显示错误信息:“Something went wrong. Wait a moment and try again. Try again”。这表明在尝试加载关于艾伦·凯(Alan Kay)对大型语言模型(LLMs)看法的文章时遇到了技术问题,无法访问实际内容,仅提示用户稍后重试。

13. Lcl.host: fast, easy HTTPS in your local dev environment (anchor.dev)
14. The New Inflection (inflection.ai)

文章核心摘要

Inflection 公司宣布战略重心与高层人事的重大转变,从直接面向消费者的个人AI(Pi)转向为商业客户提供定制化生成式AI模型的AI工作室业务。

1. 战略转型与业务聚焦

  • 新方向:公司将专注于其AI工作室业务,为企业客户定制、测试和调优生成式AI模型。
  • 技术基础:Inflection 在训练和优化大型AI模型方面的成功经验,使其具备为企业提供AI平台服务的能力。
  • 平台扩展:其核心模型 Inflection-2.5 将在 Microsoft Azure 上托管,并计划在未来登陆其他云平台,以便开发者广泛使用。API访问权限即将开放。

2. 关键人事变动

  • 创始人离任:两位联合创始人 Mustafa SuleymanKarén Simonyan 将离开公司,前往 Microsoft 组建新的AI部门(Microsoft AI),该部门将整合微软的消费者AI工作、Copilot、Bing和Edge等业务。
  • 新任CEO:公司任命 Sean White 为新任首席执行官。他拥有数十年的技术、研究和商业前沿经验,将领导Inflection进入新时代。
  • 董事会延续:第三位联合创始人 Reid Hoffman 将继续留任董事会,并致力于推动“为每个人创建个人智能”的愿景。

3. 对现有产品(Pi)的承诺

  • 个人AI产品 Pi 的服务将 不会立即发生改变
  • 公司承诺保障用户未来继续获得优质的AI体验。
  • 现有的 隐私和数据保护政策维持不变,未经用户明确同意,不会与任何第三方共享数据。
15. Indonesia's e-bike shops are building their own batteries (restofworld.org)

印度尼西亚电动自行车市场催生了大量自制电池的作坊。由于该国缺乏电池制造相关法规,加之电动两轮车(E2W)市场在2023年政府补贴政策推动下迅猛增长,本地兴起了一个由手工艺人和小型商家组成的DIY电池组装行业。这些自制电池通常使用从LG、松下等公司采购的18650锂离子电芯,通过镍带焊接组装,并配备电池管理系统。它们往往比品牌原装电池更便宜且续航更长,例如有用户用1300万印尼盾的自制电池替代了1700万印尼盾的原装电池,并将续航从100公里提升至150公里。

然而,这一市场存在显著的安全隐患。专家指出,如果电芯的放电倍率等参数不匹配,或电池组内部容量不一致,可能导致电池突然失效、过热甚至引发事故。此外,各电动车品牌电池规格不一(超过20种尺寸),缺乏统一标准,也加剧了兼容性和安全风险。

尽管如此,自制电池因成本优势和定制灵活性而广受欢迎,在线上平台和本地社群中交易活跃。这种趋势已引起正规电池产业和电池交换服务商的担忧,他们认为这可能影响电池交换模式的推广,并呼吁行业建立安全规范。目前,印尼正通过国有企业联盟推动电池标准化和本土化生产,但自制电池市场仍持续发展。

16. Intel 8080 emulator. 19th IOCCC. Best of Show (nanochess.org)

Intel 8080 模拟器总结

项目简介

这是一个在第19届IOCCC(国际C代码混乱大赛)中获得最佳展示奖的获奖作品。其核心是一个用约2000个字符的C语言编写的Intel 8080处理器模拟器。该模拟器不仅模拟了完整的8080 CPU,还额外支持了CP/M操作系统的运行环境,包括电传打字机和磁盘控制器,旨在重现1975年左右的个人计算机革命初期环境。

工作原理

  • 内存与寄存器:数组 l 用作64K内存,通过文件 C 加载启动镜像进行初始化。程序计数器由指针 c 表示。CPU寄存器(B, C, D, E, H, L, 标志位, A/累加器)存储在数组 o 的特定位置。
  • 执行循环:主循环读取操作码,通过一系列复杂的三元运算符将其解码并分派到对应指令的执行逻辑中。
  • 外围设备操作:通过特定指令与虚拟外设交互,例如:
    • DB 00/DB 01 读取键盘输入。
    • D3 xx 输出字符到控制台。
    • ED ED 02/ED ED 03 读写虚拟磁盘扇区。 磁盘驱动器的最大虚拟容量可达1GB,但CP/M操作系统本身仅支持最多8MB。

编译与使用

  1. 编译:在兼容*NIX的系统上,使用命令 cc toledo2.c -o toledo2 进行编译。
  2. 运行基础BASIC
    • 下载提供的 c_basic.bin 文件并重命名为 C
    • 运行模拟器,即可进入公共域的Palo Alto Tiny BASIC解释器环境。
  3. 运行完整CP/M系统
    • 从指定ZIP包中提取 CPM64.COM 文件,并复制为 AB(代表两个虚拟磁盘驱动器)。
    • 将提供的 c_bios.bin 重命名为 C
    • 运行模拟器,即进入CP/M系统。A> 驱动器下预置了 HALT.COM(关闭模拟器)和 IMPORT.COM(导入新文件)。
    • 可通过 IMPORT 命令从宿主机向虚拟磁盘导入其他CP/M软件(如各种语言、电子表格、游戏、工具等)。

背景与相关说明

  • Intel 8080:1974年由Federico Faggin和Masatoshi Shima创造,是Zilog Z80的前身,对微型计算机的兴起影响深远。它功能相对简单,没有Z80的扩展寄存器和指令。
  • CP/M简介:一种早期的操作系统,类似于MS-DOS。提供基本的文件管理和控制台命令(如DIR, TYPE, ERA)。
  • 移植性:模拟器最初利用了C语言中整数指针转换的语法漏洞。由于现代64位编译器不允许此操作(指针与int长度不匹配),作者已将代码更新为使用 FILE * 类型以确保兼容性。在某些平台(如旧版*NIX)可能需要调整终端设置(如stty参数)。
  • 项目备注:代码风格高度混乱,使用了极少的关键字,并利用大括号进行“注释”,是IOCCC精神的典型体现。作者自述开发于约2004年,并于2024年更新了代码。
17. New algorithm unlocks high-resolution insights for computer vision (news.mit.edu)

新算法为计算机视觉解锁高分辨率洞察力

MIT研究人员开发了一种名为FeatUp的系统,能够在不牺牲速度或质量的前提下,让计算机视觉算法同时捕获图像的高级语义信息和原始分辨率级别的精细细节。

核心问题

现代深度学习模型在处理图像时,会将图像划分为小块(通常为16-32像素)来提取“特征”。这种聚合处理虽然能高效理解场景的高层语义,但会严重损失像素级的精细分辨率,类似于人凭记忆速写场景时无法描绘所有细节。

FeatUp的解决方案

FeatUp通过一种创新的图像抖动与混合技术来解决此问题:

  1. 工作原理:算法会对输入图像进行微小扰动(如左右平移几个像素),并观察模型对这些变化的特征响应。
  2. 特征融合:通过分析数百个因扰动产生的略有不同的低分辨率特征图,算法能够“推断”并重建出一个单一、清晰、高分辨率的特征图。其核心思想是学习一个能将低分辨率特征优化到高分辨率的映射,该映射需与所有抖动后的图像特征保持一致。
  3. 关键技术突破:团队开发了一种高效的联合双边上采样自定义网络层,其速度比PyTorch中的朴素实现快100倍以上,是实现高分辨率特征重建的关键。

应用与效果

FeatUp的应用广泛,能显著提升多项计算机视觉任务的性能:

  • 提升模型可解释性:例如,在肺癌检测中,应用FeatUp后能将肿瘤定位的细节清晰度提高16-32倍,使类激活图等解释方法更精确。
  • 改善下游任务
    • 目标检测与语义分割:提供更精确的像素级特征,提升分割和分类精度。
    • 深度估计:生成更准确的高分辨率深度图。
    • 小物体检测:在复杂场景(如自动驾驶道路)中,能精准定位交通锥、反射器等微小物体,而低分辨率特征往往无法做到。
  • 增强可靠性:对于自动驾驶等时间敏感任务,能将模糊的猜测转变为精确的定位,提升系统的可靠性和可信度。

未来展望

研究团队希望FeatUp能像数据增强一样,成为深度学习领域的基础工具。他们致力于让该方法被研究界及更广泛领域采用,使模型能以更高细节感知世界,而无需承担传统高分辨率处理带来的高昂计算成本。

研究团队

该研究由MIT和加州大学伯克利分校的研究人员领导,将在国际学习表征会议上发表。

18. Retina – eBPF distributed networking observability tool for Kubernetes (github.com)

Retina:面向Kubernetes的eBPF分布式网络可观测性工具

概述

Retina 是一个云无关、开源的 Kubernetes 网络可观测性平台。它作为一个集中化枢纽,用于监控应用程序健康状况、网络健康和安全性,并为集群网络管理员、安全管理员及 DevOps 工程师提供可操作的洞察,以应对 DevOps、SecOps 和合规性等使用场景。

Retina 支持收集可定制的遥测数据,并能将这些数据导出到多种存储选项(如 Prometheus、Azure Monitor 及其他供应商),同时可以通过多种方式(如 Grafana、Azure Log Analytics 及其他供应商)进行可视化。

主要特点

  • 基于eBPF:为 Kubernetes 工作负载提供网络可观测性。
  • 按需且可配置:支持按需调查和持续监控。
  • 行业标准指标:提供可操作的、符合行业标准的 Prometheus 指标。
  • 高效数据包捕获:支持流式数据包捕获,便于深入分析。
  • 云与操作系统无关:支持多种操作系统(如 Linux、Windows、Azure Linux)。

核心功能

Retina 包含两大主要功能:

1. 指标(Metrics)

  • 快速安装:可通过 Helm 图表从 GHCR 安装。安装后需配置 Prometheus 和 Grafana 以收集和可视化指标。
    VERSION=$( curl -sL https://api.github.com/repos/microsoft/retina/releases/latest | jq -r .name)
    helm upgrade --install retina oci://ghcr.io/microsoft/retina/charts/retina \
        --version $VERSION \
        --set image.tag=$VERSION \
        --set operator.tag=$VERSION \
        --set logLevel=info \
        --set enabledPlugin_linux="\[dropreason\,packetforward\,linuxutil\,dns\]"
    
  • 可启用多种插件(如 dropreason, packetforward, dns, packetparser)来收集不同维度的指标。

2. 捕获(Captures)

捕获功能用于深度网络流量分析,有两种主要使用方式:

  • 通过 CLI 使用
    • 推荐通过 Krew 安装 Retina CLI:kubectl krew install retina
    • 安装后,可通过 kubectl retina 命令使用,支持创建捕获等操作。
      kubectl retina capture create --pod-selectors <app=my-app>
      
  • 通过 CRD 使用
    • 使用 Helm 安装 Retina(需启用 operator 相关设置)。
    • 安装后,可通过自定义资源(CRD)定义和管理捕获任务。

已知限制

  • 高性能节点性能问题:在拥有 32 个及以上 CPU 核心且网络负载较高的节点上,使用高级指标(含 packetparser 插件)时可能存在性能问题。建议在大型节点上从基础指标模式开始。
  • Windows 支持:不再支持 Windows Server 2019 节点,需使用 Windows Server 2022。

社区与贡献

  • 项目欢迎贡献和建议,贡献者需同意贡献者许可协议(CLA)。
  • 遵循微软开源行为准则。
  • 项目提供定期的公开社区会议。
  • 已发布到 GHCR 的 Retina 镜像经过密码学签名,可使用 cosign 工具进行验证。

许可与联系

  • 项目采用开源许可证(详见 LICENSE 文件)。
  • 对于错误或功能请求,可在 GitHub 提交 Issue。
  • 安全或漏洞问题请参阅 SECURITY.md
  • 其他沟通可通过电子邮件联系维护者:retina@microsoft.com
19. Bug hunting in Btrfs (tavianator.com)

Bug猎杀:Btrfs中的竞态条件

本文记录了作者在实现bfs工具的多线程stat()调用时,发现并定位一个Btrfs文件系统深层bug的过程。

问题发现 作者运行基准测试时,遇到EUCLEAN (Structure needs cleaning) 错误,通常指示文件系统损坏。dmesg显示“corrupted node”日志,但随后运行btrfs checkbtrfs scrub均未发现错误,相关文件也完好无损。作者发现能以约10%的概率在大型目录树上并行执行stat()调用时复现此错误。此前,Linus Torvalds也遇到过相同问题。初步讨论指向extent_buffer(用于元数据I/O的缓冲区)的内存分配和管理,怀疑是近期从struct page转换为struct folio以及竞态处理代码改动中引入了bug。然而,调试日志显示引用计数均正确,但内存内容却包含垃圾数据,而磁盘上的块本身完好。

定位尝试

  1. Git Bisect:作者尝试使用git bisect定位,但在真实机器上操作时引发了真实的磁盘损坏,被迫中止。
  2. 虚拟机复现:通过将虚拟机配置为多磁盘dm-crypt全盘加密并组建Btrfs RAID 0阵列,作者最终在虚拟机中复现了该问题,尽管复现率较低(约30次)。

根因分析 通过分析添加了调试补丁后的跟踪日志,作者发现关键线索:同一个extent_buffer被连续读取了两次。深入read_extent_buffer_pages()函数的锁定协议后,发现了核心竞态条件。

该函数使用EXTENT_BUFFER_READINGEXTENT_BUFFER_UPTODATE两个标志位协调读取。问题在于两个检查操作之间存在时间窗口:

  1. 线程A启动读取,完成后设置UPTODATE位,并清除READING位。
  2. 在线程A清除READING位之后,线程B才去检查UPTODATE位,发现未设置(因为检查发生在清除READING之后,但此时UPTODATE已设置但线程B尚未检查),于是线程B错误地启动了一次新的、不必要的I/O读取。
  3. 更严重的是,线程C在之后检查UPTODATE位时发现已设置,便直接返回并访问缓冲区,但此时由线程B发起的读取I/O可能仍在进行中,导致数据竞争

解决方案 修复方法是在设置READING标志位后,再次检查UPTODATE标志位(双重检查锁定)。这确保了在启动新I/O前,能及时发现缓冲区已被其他线程更新的情况,避免了冗余且有害的I/O操作。作者提交了补丁,修复后问题消失。

为何可观测 通常,这种竞态导致的“读旧数据”可能无害。但由于作者系统使用了dm-crypt全盘加密,问题变得显而易见。加密读取过程是先将加密数据读入内存,再原地解密。当竞态发生时,一个线程可能看到解密后的有效元数据,而另一个线程可能看到正在解密过程中的、看似随机的加密字节,从而导致Btrfs的校验失败,报出随机的“corrupted”错误。日志甚至记录到同一数据块在极短时间内从“内部节点”变为“叶子节点”,块号也从随机数变为正常值,直观展示了数据在解密过程中被“逐步填充”的现象。

20. Show HN: macOS Reminder Sync for Obsidian Tasks (turquoisehexagon.co.uk)

ReminderSync for Obsidian Tasks 摘要

ReminderSync 是一款用于将 macOS 提醒事项应用(Reminders.app)与 Obsidian 任务(Tasks)进行双向同步的工具。其主要特点与运作规则如下:

功能与支持

  • 元数据兼容:支持 Obsidian Tasks 插件使用的元数据格式,包括 Emoji 和 Dataview 两种格式。
  • 跨平台使用:同步后的任务会出现在 iPhone 的提醒事项中(通过 iCloud 同步),可在移动端管理。
  • 语音创建:支持通过 Siri 在同步的提醒列表中创建提醒,该提醒会自动转换为 Obsidian 仓库中的任务。
  • 免费可用:免费用户可手动随时同步,自动同步每6小时一次。无需购买专业版。

核心同步规则

  • 从 Obsidian 到 Reminders:仓库中的任务会生成对应的提醒事项。删除任务,对应提醒将被删除。
  • 从 Reminders 到 Obsidian:在同步的提醒列表中创建的新提醒,会在 Obsidian 的指定笔记(ReminderSync Inbox)中生成对应的任务。
  • 编辑行为
    • 编辑 Obsidian 中的任务:下次同步时,旧提醒会被删除,并创建一个包含新文本的新提醒。
    • 编辑提醒事项:不推荐。这会导致基于原始任务创建一个新提醒,同时基于编辑后的提醒创建一个新任务。
  • 删除行为
    • 删除 Obsidian 中的任务:对应的同步提醒将被删除。
    • 删除提醒事项:可在设置中启用关联任务删除功能。
  • 完成状态同步
    • 在 Obsidian 中完成任务:下次同步时,对应提醒的完成状态会更新。
    • 在 Reminders 中完成提醒(当 ReminderSync 运行时):对应 Obsidian 任务会立即标记为完成。

其他说明

  • 无 Obsidian 强制依赖:ReminderSync 直接操作 Markdown 文件,仅需遵循 Obsidian Tasks 插件定义的元数据格式,理论上可用于任何 Markdown 编辑器。
  • 支持咨询服务:开发者(Turquoise Hexagon)提供应用开发相关的咨询服务。
21. So you think you want to write a deterministic hypervisor? (antithesis.com)

确定性 hypervisor:Antithesis 测试平台的核心引擎

文章介绍了 Antithesis 平台的核心组件——一个用于软件测试的确定性 hypervisor(名为“Determinator”),旨在解决大型分布式系统测试中难以复现 bug 的根本性问题。

核心目标与重要性

  • 定义:确定性算法指给定相同输入,程序不仅输出相同,且底层机器状态序列完全一致,包括所有隐式副作用。
  • 价值:在软件测试中,确定性带来可复现性。它使工程师能可靠地复现、探索和修复那些难以捕捉的 bug,避免了“无法重现”的困境,并支持时间旅行调试破坏性分析(如安全地修改系统状态进行实验)。
  • 应用场景:Antithesis 平台专注于端到端测试,在一个模拟真实世界复杂性的环境中,将用户软件的完整部署置于成千上万种罕见状况下进行测试。确定性 hypervisor 为此类复杂测试提供了可复现的基础。

Determinator 的工作原理

  • 整体环境:它模拟一台或多台计算机,将用户软件的全部组件(如容器化应用)运行在一个统一的、受控的“盒子”内。确定性单位是整个互联系统的状态,而非单个进程,这减少了测试中对复杂 mock 的需求。
  • 确定性边界:所有客户软件在 hypervisor 内部运行,看到的是线性历史。外部的 Antithesis 工具则能查看所有可能执行路径组成的树,并以此选择新的输入或重放历史路径进行深入分析。
  • 基础与挑战:该项目基于开源 FreeBSD bhyve hypervisor 进行改造。核心挑战在于现代硬件和软件栈中存在大量非确定性行为。开发工作主要围绕识别、隔离或规避这些行为,并确保所有 guest 访问的时间源都返回由 hypervisor 计算的虚拟时间值
  • 主要技术挑战与解决方案
    1. 时间确定性:现代 CPU 的流水线、缓存、多核并发等因素导致运行时间不可预测。他们必须隐藏所有真实时间信息,将 guest 的时钟与指令执行量等确定性状态绑定。实现中需要克服 CPU 性能监控计数器(PMC)的微小非确定性以及中断处理延迟的变异。
    2. 并行处理:真正的并行核心操作会引入交织的非确定性。他们的策略是隔离核心:每个确定性 hypervisor 实例仅使用一个物理 CPU 核心。通过在多核服务器上同时启动多个独立的 hypervisor 实例来并行探索不同的状态空间,从而提高整体吞吐量。
    3. 确定性 I/O:为保持整个环境的确定性,网络、存储等均被抽象和模拟。他们利用 CPU 的 VMCALL 指令实现了 guest 与 host 之间的确定性通信通道,用于注入控制指令(如随机数种子)和输出日志等数据。该通道的调用点也成为外部工具进行状态探索的分支点

定位与展望

  • 确定性 hypervisor 是 Antithesis 平台的关键后端组件,但只是其众多创新中的一块。它专为平台需求设计,强调吞吐量高于延迟,支持状态探索和时间旅行调试。
  • 文章作者强调,这只是他们“变革软件测试与模拟”宏大计划的起点,未来将披露更多细节。
22. EFF: Tell Congress: We Can't Afford More Bad Patents (act.eff.org)

文章核心:反对PREVAIL法案,保护公众挑战专利的权利

问题背景
美国参议院正在审议《PREVAIL法案》(S. 2220),该法案将大幅限制公众对本不应被授予的专利提出挑战的权利。这可能导致更多“坏专利”得到保留,并助长专利钓鱼者(patent trolls)的行为。

专利钓鱼者的危害
专利钓鱼者是指那些自身无产品或服务、仅通过专利侵权索赔牟利的公司。它们已对美国经济造成数十亿美元损失,对小型企业尤其具有破坏性,一封侵权索赔信可能导致企业破产。

法案的具体影响

  • 《PREVAIL法案》将削弱对专利钓鱼者的现有保护措施,可能禁止EFF(电子前沿基金会)等组织对某些专利提起法律挑战。
  • 该法案被视为误导性政策,EFF强烈反对,并认为它会加剧专利滥用问题。

最新进展

  • 2023年11月21日,参议院司法委员会以11-10的投票结果通过了《PREVAIL法案》。
  • EFF表示将继续反对此法案,并呼吁公众在法案进入下一阶段投票时,敦促国会成员投反对票。

呼吁行动
EFF号召公众联系国会代表,表达对《PREVAIL法案》的反对,以保护创新环境和经济公平。

23. I Improved My Rust Compile Times (benw.is)

文章总结

主题与目的

  • 标题:I Improved My Rust Compile Times(我改善了我的Rust编译时间)
  • 核心主题:文章旨在探讨如何优化或改善Rust编程语言的编译时间,这通常涉及技术性调整,如编译器配置、代码结构优化或工具使用。

内容状态

  • 加载中:文章内容显示为“Loading...”,表明页面可能未完全加载或内容暂时不可用,因此未提供具体细节、技术方法或实践步骤。
  • 缺失信息:由于内容未加载,无法总结改善Rust编译时间的具体策略、工具(如Cargo特性、编译器标志)、代码示例或性能数据。

元信息与构建细节

  • 作者与版权:© 2026 Ben Wishovich,暗示文章由Ben Wishovich撰写,版权信息指向2026年。
  • 技术栈:使用Leptos框架构建,Leptos是一个现代Web开发框架,可能用于文章网站或相关应用。
  • 设计来源:设计由Underscorefunk Design提供,链接至其官方网站。

总体评估

  • 文章预期为技术性内容,聚焦于Rust编译时间优化,但当前状态限制了信息获取。仅基于标题,可推测主题涉及软件开发性能改进,但无实质细节支持进一步分析。
24. Users ditch Glassdoor, stunned by site adding real names without consent (arstechnica.com)

Glassdoor用户因未同意添加真实姓名而弃用该平台

Glassdoor作为员工匿名评价雇主的平台,近期在未获用户同意的情况下,在用户个人资料中添加真实姓名,引发用户震惊与抵制。一位化名Monica的用户发现,在她联系客服请求删除信息后,客服反而将她提供的真实姓名添加到其个人资料中,尽管她明确拒绝同意存储姓名。

政策变化根源

Glassdoor过去允许用户匿名注册,但2021年收购职业社交应用Fishbowl并于2023年整合后,服务条款变更,要求所有用户进行身份验证。尽管用户仍可选择匿名展示,但平台现已要求存储所有用户的真实姓名,并可能通过公共来源核实并更新用户资料(如纠正错误信息)。

用户担忧与风险

  1. 匿名性丧失:EFF律师Aaron Mackey指出,真实姓名存储大大增加了用户评论与其身份关联的风险,尤其当数据被传唤或泄露时。
  2. 数据安全风险:用户担心数据泄露或软件漏洞可能导致评论与真实身份关联,危及用户职业安全。
  3. 隐私矛盾:Glassdoor的隐私政策允许用户撤回同意,但实际操作中并未提供撤销姓名存储的选项,仅建议删除账户。
  4. 信息不准确:用户Josh Simmons发现Glassdoor自动更新了其资料中的错误信息(如雇主名称和所在地),且未通知用户。

用户反应

  • Monica最终选择删除账户并申请数据擦除,但指出删除账户仅停用账户,仍需主动申请才能清除姓名数据。
  • 多位用户表示考虑弃用Glassdoor,平台承诺的匿名性已名存实亡。

Glassdoor回应

  • Glassdoor声称支持匿名言论自由,并在法庭上积极为用户身份保密辩护。
  • 平台表示用户仍可选择匿名或部分披露信息,且数据整合是为提供统一服务体验。
  • 但实际案例中,客服和管理层均拒绝撤销已添加的姓名,仅提供删除账户选项。

潜在影响

此政策转变可能削弱Glassdoor作为匿名举报平台的核心价值,使员工因担心报复而不敢坦诚评价工作环境、薪酬或不当行为。尽管Glassdoor承诺继续捍卫用户匿名权,但与Fishbowl的数据整合已带来新的隐私风险。

25. Natural language instructions induce generalization in networks of neurons (www.nature.com)

本文探讨自然语言指令如何诱导神经元网络中的泛化能力。人类能通过语言指令快速执行新任务,并能用语言描述任务解决方案,但其计算原理尚不明确。研究训练了一个传感器运动循环神经网络(sensorimotor-RNN),使用预训练的语言模型(如GPT、BERT、SBERT、CLIP)嵌入任务指令,并在50个心理物理学任务上进行测试。

核心发现:

  1. 泛化性能:最佳模型SBERTNET (L)利用句子级语义嵌入,在未见任务上达到83%的平均准确率,接近手工编码任务结构的控制模型(88%)。相比之下,仅使用词频统计(BoW)或基于下一词预测的GPT模型泛化能力较弱。
  2. 表示结构:成功泛化的模型在指令嵌入和传感器运动活动之间共享表示几何结构。这种结构捕捉了任务子组件(如“正向/反向”任务轴),允许在新场景中组合已练习的技能。CCGP分析显示,表示结构与零样本泛化性能强相关。
  3. 神经元调谐:单个神经元会根据指令语义调节其调谐特性。例如,在“执行”任务中,某些神经元的方向选择性会根据“正向/反向”指令切换π,即使在未训练任务上也能实现。
  4. 语言生成:模型能够逆向映射,仅基于传感器运动活动生成对未见任务的语言描述。生成的指令能有效指导其他网络执行任务,体现了语言作为可解释沟通媒介的优势。
  5. 语言模型作用:句子级语义预训练(如SBERT)比单纯词级预测(如GPT)更有利于泛化。模型大小并非决定因素,CLIP和BERT虽参数较少,但性能优于大型GPT模型。

方法与模型:

  • 传感器运动-RNN处理感觉输入和任务信息,输出运动响应。
  • 语言指令通过预训练Transformer嵌入为64维向量。
  • 任务分为5组,包括决策、匹配等,测试了指令交换、任务家族留出等泛化条件。
  • 引入语言生产网络,将传感器运动状态解码为自然语言指令。

讨论与意义: 研究为语言引导感觉运动泛化提供了可测试的神经预测:1)语言与传感器运动区域应共享任务相关结构;2)神经元应根据指令语义动态调谐;3)语言处理层次结构应受具身过程塑造。模型挑战了“更大模型更好”的观点,强调语义结构的重要性。研究为理解人类语言能力的计算基础及构建能解释指令的AI系统提供了新见解。

26. Multiple Stability AI researchers are departing, CEO says (twitter.com)

由于提供的文章内容仅为网站错误提示信息,无实际新闻内容可供总结,因此无法生成文章摘要。建议检查链接或提供完整的文章文本。

27. First beta of Nintendo Switch emulator Suyu goes live (overkill.wtf)

Suyu 模拟器首个公测版发布

Suyu 是一个新的 Nintendo Switch 模拟器,今天进入公共测试阶段。它基于 Yuzu 的源代码,是 Yuzu 模拟器的后续项目之一。与 Yuzu 相比,Suyu 在操作上有所不同:要求用户从破解的 Switch 中转储 title.keys 和固件,而不仅仅是 prod.keys。开发者团队强调这是一个非营利项目,没有 Patreon,且不鼓励盗版行为。

更新日志主要改进

  • 全面品牌重塑,生成 ICNS 图标。
  • 错误处理优化。
  • Qlaunch 初始集成(存在 bug,需要进一步测试,要求 V17.0.0 或更新版本固件)。
  • 使用 GitLab CI 实现自动化构建。
  • 要求用户自行提供所有密钥和固件。
  • 改进的 Addons 管理器。
  • 修复各种崩溃问题。
  • 初始支持 MacOS(实验性版本)。
  • 修复 AMD 设备的视频播放问题。
  • 在 AMD 专有驱动程序上启用更多功能。
  • 重新实现多人游戏 API。
  • 移除所有遥测功能。
  • 新增 UI 选项和改进。
  • 用户生活质量 (QOL) 变化。

支持平台与兼容性

Suyu 支持多个平台,包括 Linux、Windows、Android,并提供实验性的 MacOS 版本。它兼容 Steam Deck,用户可以安装在 Valve 的掌上设备上运行 Switch 游戏。文章中还提供了在 Steam Deck 上安装 Suyu 的指南。

28. Let's create a Tree-sitter grammar (www.jonashietala.se)

本文详细介绍了为 Djot 标记语言创建 Tree-sitter 语法的过程,涵盖了从基础构建到高级功能的完整步骤。

核心目标与基础语法

文章旨在为一个 Djot 的子集创建 Tree-sitter 语法,支持段落、Div、代码块和强调。初始的 grammar.js 文件定义了基本规则,能够解析简单的结构,但存在功能缺失,如支持不定数量冒号的 Div 标记以及自动关闭嵌套块。

外部扫描器的引入与复杂性

为了处理更复杂的解析逻辑(如可变数量的 Div 标记和自动关闭),文章引入了外部扫描器src/scanner.c)。这是 Tree-sitter 生成的 C 解析器中的自定义代码,用于实现自定义词法分析逻辑。

  • 关闭段落:首先实现了一个简单的外部扫描器,用于在遇到 Div 标记(:::)时提前关闭段落。通过创建零宽度的 _close_paragraph 标记来实现。
  • 管理嵌套状态:为了处理嵌套的 Div,扫描器需要维护状态。文章引入了一个来跟踪当前打开的块(如 Div 及其冒号数量)。扫描器需要实现序列化/反序列化函数以支持 Tree-sitter 的回溯。
  • 关闭逻辑:当遇到一个 Div 标记时,扫描器会检查栈中是否有匹配的标记。如果有,则可能需要输出多个 _block_close 标记来关闭嵌套的 Div,最后输出 _div_marker_end。为此,在扫描器结构中增加了 blocks_to_closedelayed_token 等状态变量来管理延迟输出的标记。

处理语法冲突

文章指出 Tree-sitter 在某些情况下(如字符串和正则表达式之间的冲突)可能无法自动识别冲突。为解决单个下划线导致解析错误的问题,需要手动在 grammar.jsconflicts 字段中声明冲突(例如 $.emphasis$._fallback),并使用 prec.dynamic 来设置优先级。

测试与验证

使用 Tree-sitter 内置的测试框架,在 test/corpus/syntax.txt 文件中编写测试用例,通过 tree-sitter test 命令运行,以确保语法规则按预期工作。

实际应用与集成

文章展示了如何将开发完成的语法用于实际场景:

  1. 语法高亮:通过 highlights.scm 查询文件定义高亮规则。
  2. 语言注入:通过 injections.scm 查询文件,实现代码块内根据指定语言进行语法高亮。
  3. Neovim 集成
    • 安装自定义语法:通过配置 parser_config 并在 package.json 中指定。
    • 使用 :TSPlaygroundToggle:Inspect 进行调试。
    • 配置 textobjects.scm 以支持基于语法的文本对象选择和跳转(如将代码块视为函数)。
  4. 嵌入 Rust 程序:使用 tree-sitter-highlight 库将语法集成到 Rust 编写的静态网站生成器中。过程中遇到了创建 HighlightConfiguration、处理语言注入回调以及生成正确 HTML 类属性的挑战。

结论与复杂性认知

作者总结道,编写基础语法相对简单,但处理边缘情况(如外部扫描器中的多重冲突规则)会迅速变得复杂。文中的完整语法代码已托管在 Codeberg 上。

29. Ask HN: How did you get yourself out of a rut?
30. Implementing Vertical Form Controls (webkit.org)

Safari 17.4 实现垂直书写模式表单控件

Safari 17.4 为其在 macOS、iOS、iPadOS 和 visionOS 上的表单控件元素添加了垂直书写模式支持。

背景与应用

垂直文本方向常见于东亚语言(如中文、日文、韩文),其书写和阅读顺序为从上到下,行流方向从右向左。传统蒙古文等文字也采用垂直书写,但行流方向从左向右。此前,尽管 CSS 的 writing-mode 属性已支持垂直文本,但浏览器对表单控件的 vertical-lrvertical-rl 值支持并不一致。作为 Interop 2023 的一部分,业界致力于推动表单控件对垂直书写模式的支持,Safari 17.4 实现了这一功能。

使用方法

通过 CSS 的 writing-mode 属性即可应用。对于 CJK 语言常见的从右向左流式方向,使用 writing-mode: vertical-rl;对于从左向右流式方向,则使用 writing-mode: vertical-rl。可将其应用于 buttontextareaprogressmeterinputselect 等元素。WebKit 承诺未来也将支持新的控件(如 input type="checkbox" switch)。

重要提示

所有浏览器中,与表单控件相关的弹出式用户界面(例如 <select> 的菜单或 <input type="color"> 的颜色选择器)仍会以水平方式显示。

技术实现细节

在 WebKit 中为超过 10 种不同类型的表单控件添加垂直书写模式支持是一项庞大的工程,主要涉及以下方面:

  1. 样式(Style):WebKit 的用户代理样式表原来大量使用 widthheight 等物理属性。为支持垂直书写模式,已将这些属性更新为使用 inline-sizeblock-size 等逻辑属性。

  2. 布局(Layout):表单控件广泛使用自定义布局代码。虽然接口设计支持逻辑属性,但实现通常假设为水平书写模式。开发团队更新了计算逻辑宽度的方法,以确保考虑书写模式。此外,用于使复选框、单选按钮等控件与文本对齐的基线调整逻辑也进行了更新,在垂直书写模式下使用中心基线。

  3. 渲染(Rendering)

    • 在 macOS 上,WebKit 表单控件需匹配操作系统外观。由于 macOS 系统本身不支持垂直书写模式,部分控件(如 <progress>)在获取系统图像后直接进行旋转以实现垂直渲染。
    • 对于因阴影等细节而无法简单旋转的控件(如 <select>),则采用了自定义的后备渲染方案。
    • 对于已在 WebKit 中自定义绘制的控件,已更新为使用逻辑坐标而非物理坐标。此方法在 iOS 渲染代码及 macOS 上 <select multiple> 列表框的重写中得到应用。
    • 复选框和单选按钮等“字形类”控件在任何书写模式下外观相同,因此无需进行渲染更改。

WebKit 致力于持续改善其引擎的国际化支持。Safari 17.4 新增的垂直书写模式表单控件支持旨在赋能开发者,为其本地及全球社区创建最佳内容。

32. Show HN: jnv: interactive JSON filter using jq (github.com)

jnv 是一款交互式 JSON 查看器与 jq 过滤器编辑器,旨在方便用户导航和过滤 JSON 数据。它受到 jidjiq 的启发,并内置了 jaq 来执行 jq 过滤,使用户无需自行准备 jq。

主要功能

  • 交互式界面:结合了 JSON 结构查看器和可编辑的 jq 过滤器输入框。
  • 语法高亮:对 JSON 数据进行语法高亮显示。
  • 内置 jq 执行:使用 jaq 库应用过滤器,开箱即用。
  • 高度可配置:通过 TOML 配置文件定制 UI 外观、行为、键位绑定、提示信息、编辑器模式等。
  • 多种格式支持:可处理单个 JSON 文件、标准输入,以及可被 StreamDeserializer 反序列化的多个 JSON 结构(如 JSON Lines)。
  • 过滤器自动补全:支持对身份、对象标识符-索引和数组索引进行补全。
  • 过滤器评估提示:提供提示消息以评估当前过滤器。

安装方式 支持多种包管理器和环境:

  • macOS:通过 brew install ynqa/tap/jnv 或 MacPorts。
  • 跨平台:通过 Nix/NixOS、conda-forge(pixi global install jnvconda install jnv)。
  • Docker:可构建并运行容器镜像。
  • Rust:通过 cargo install jnv

基本使用

  • 从文件读取:jnv data.json
  • 从标准输入读取:cat data.json | jnv
  • 退出时将当前结果写入标准输出(仅限 Unix):cat data.json | jnv --write-to-stdout | some-command

主要配置项 配置文件(默认路径因系统而异)支持以下主要配置类别:

  • 编辑器:设置编辑模式(插入/覆盖)、光标样式、前缀字符、词边界字符等。
  • JSON 查看器:控制缩进、括号样式、键值颜色、选中项样式以及内容溢出处理方式。
  • 自动补全:设置候选加载分块大小和补全列表 UI(行数、光标样式)。
  • 键位绑定:全面自定义应用、编辑器模式和 JSON 查看器模式下的快捷键。
  • 反应控制:设置查询防抖、窗口大小调整防抖和加载动画的持续时间。

键位映射概览

  • 全局Ctrl+C 退出,Ctrl+Q 复制过滤器,Ctrl+O 复制 JSON,Shift+↑/↓ 切换模式。
  • 编辑器模式:支持光标移动、删除、词操作,并按 Tab 触发自动补全。
  • JSON 查看器模式:支持上下滚动、跳转首尾、折叠/展开节点。
33. The Mechanics of Proof (hrmacbeth.github.io)

《证明的机制》内容概要

本书是一本指导如何撰写严谨数学证明的教科书,专为大学初级水平(福特汉姆大学Math 2001课程)设计。书中所有示例和练习均与形式化编程语言Lean的代码相结合,相关代码可通过GitHub仓库获取并本地运行或云端使用。

核心结构与主题

全书共10章,循序渐进地涵盖数学证明的基本方法和关键概念:

  • 第1章:计算证明 — 涵盖等式的证明方法,介绍Lean中的等式证明技巧,并扩展到不等式的证明。
  • 第2章:结构化证明 — 讲解中间步骤、引理的使用,处理“或”“且”逻辑以及存在性证明。
  • 第3章:奇偶性与可除性 — 定义奇偶性和可除性,引入模运算理论与计算,并介绍贝祖等式。
  • 第4章:结构化证明 II — 深入探讨“对所有”与蕴含、“当且仅当”、“存在唯一”等逻辑结构,以及反证法。
  • 第5章:逻辑 — 研究逻辑等价、排中律以及否定式的标准形式。
  • 第6章:归纳法 — 介绍数学归纳法,涵盖递推关系、两步归纳、强归纳法,并应用于帕斯卡三角、除法算法和欧几里得算法。
  • 第7章:数论 — 包括素数无穷多的证明、高斯引理和欧几里得引理,以及√2是无理数的证明。
  • 第8章:函数 — 探讨函数的单射、满射、双射性质,以及函数的复合与积类型。
  • 第9章:集合 — 介绍集合的基本概念、集合运算以及集合的类型。
  • 第10章:关系 — 讨论关系的自反性、对称性、反对称性和传递性,并重点讲解等价关系。

附录与资源

附录部分提供了Lean策略索引以及从本书过渡到主流Lean环境的指导,帮助读者进一步学习形式化验证工具。

本书通过结合传统数学证明教学与Lean编程实践,旨在培养读者严格的证明思维和计算验证能力。

34. FlipperZero: Our Response to the Canadian Government (blog.flipper.net)

Flipper Zero:对加拿大政府禁令的回应

背景

加拿大创新、科学和工业部长在2024年2月8日的全国打击汽车盗窃峰会上宣布,计划禁止Flipper Zero设备,声称该设备被用于通过无钥匙进入系统盗窃汽车。Flipper Zero团队认为这一说法不实,并指出此类禁令有害于安全和技术进步。

无钥匙进入系统与汽车盗窃的实际原理

  • 无钥匙进入系统工作原理:汽车通过检测附近钥匙扣的信号自动解锁和启动引擎。
  • 盗贼的盗窃手段:盗贼使用无线电中继器(需两个设备,攻击距离可达1公里)在汽车和钥匙扣之间建立信号中继,欺骗汽车认为钥匙扣在附近,从而解锁和启动车辆。这类设备价格昂贵(5000至14000欧元),且天线体积较大。

Flipper Zero的局限性

  • 无法用于偷车:Flipper Zero不具备作为中继器所需的四个无线电模块,其功能有限,无法攻击无钥匙进入系统。
  • 加密问题:现代汽车钥匙使用滚动代码加密,每次按键生成唯一编码,简单截获和重放信号无法破解。Flipper Zero虽能接收和解码无线电信号,但无法破解加密。
  • 历史漏洞对比:即使使用静态代码的旧车型(已停产约20年)存在漏洞,攻击也可通过简单硬件(如连接至电脑麦克风输入的电线)实现,而非必须使用Flipper Zero。

禁令的无效性与危害

  • 安全问题根源:汽车盗窃问题在于车辆安全设计薄弱,而非工具本身。禁令无法修复不安全的系统,反而会阻碍创新和进步。
  • 历史教训
    • HTTP到HTTPS的演进:通过加密解决数据拦截问题,而非禁止网络设备。
    • 信用卡从磁条到芯片的升级:通过技术升级解决克隆问题,而非禁止相关工具。
  • 安全 through obscurity的失败:依赖隐藏系统设计的安全性不可靠,一旦设计暴露,漏洞即显现(如酒店锁漏洞、GSM加密算法泄露)。

呼吁行动

  • Flipper Zero团队呼吁加拿大政府撤销禁令,并请公众签署请愿书。
  • 鼓励加拿大公民联系国会议员或政党代表,分享相关信息。
  • 加拿大维修联盟等组织也反对禁令,认为简单禁止对理解设备功能和益处有害。

结论

禁止Flipper Zero等通用工具无法解决汽车盗窃问题,反而会损害技术创新和安全教育。真正解决方案是修复车辆安全漏洞,而非惩罚工具使用者。

35. Stardew Valley 1.6 Changelog (www.stardewvalley.net)

《星露谷物语》1.6版本更新日志摘要

新内容与功能

  • 新节日与活动:春季新增为期三天的沙漠节;两个小型钓鱼节(鳟鱼大赛和鱿鱼节);夏季新增环境事件。
  • 掌握系统:新增区域,提供强力增益与物品。
  • 新农场类型:草甸农场,拥有动物喜爱的蓝色草,初始配有鸡舍和2只鸡。
  • NPC对话扩充:大量新对话,包括动态对话、婚礼特定对话、补全缺失对话等。
  • 宠物系统:满心后可拥有更多宠物;宠物会赠送礼物。
  • 地图改进:新增姜岛地图;世界地图实时显示玩家位置(多人模式下可见其他玩家)。
  • 新物品与机制:新增金鹦鹉(寻找金色核桃)、完美豁免书、奖品机、书商、神秘盒子、大型树木任务线、4种新作物、4种新房屋装修、大量新物品(如大箱子、干燥机、诱饵机、高级熔炉等)、7种饰品、25顶新帽子、280件新家具等。
  • 其他:NPC新增冬季服装;节日每两年更新;新增宪兵变体;宠物碗可建造;农场电脑可跨区域使用;新增骷髅洞穴困难模式开关;新增成就。

视觉改进

  • 地图与环境细节提升:如新增瀑布、季节装饰、路径石等。
  • 世界地图重绘,更贴合游戏内场景。
  • 物品颜色(果冻、腌菜等)基于原料变化。
  • 照明系统调整:冬季夜晚提前一小时;室内照明平滑过渡;移除画质选项,固定为超高。

多人游戏改进

  • PC平台最多支持8人游戏。
  • 性能与稳定性优化:Steam玩家使用Steam多人验证;大数据包压缩;需相同构建版本才能加入。

平衡性调整

  • 物品与经济:调整多种物品售价与配方所需技能等级;限制部分商店库存;建筑小屋无需材料。
  • 战斗与技能:调整武器伤害、暴击、炸弹范围;修改技能经验值获取;被击晕惩罚改为按金钱比例计算。
  • 机器与耕作:虫箱需更低钓鱼等级;织布机产量提升;鱼塘有几率产出额外鱼子;作物仙子事件重平衡;杂草不再摧毁文物点。
  • NPC与事件:配偶婚后有7天蜜月期;每日怪物任务数量增加;采集与钓鱼部分经验值互换。

生活质量改善

  • 性能与交互:NPC会推开箱子而非破坏;工具操作优化(如浇水/锄头可平移);可推动物品移动装满的箱子;建筑内可铺设地板。
  • UI/UX优化:更清晰的进度提示;商店购买延迟防误点;菜单操作逻辑改进;动物标签页;读档加速;男性农民婚礼日可自选服装。
  • 游戏逻辑:矿车解锁状态与过场动画同步;修复多个可卡位点;调整随机化算法。

Bug修复概览 修复了包括钓鱼、增益、节日、物品、战斗、控制器、UI、NPC对话、多人游戏、显示本地化、画面表现、模组兼容性等在内的数百项错误。例如:修复了钓鱼时宝藏出现在大量增益下的崩溃;修复了NPC接受电影邀请时无自定义对话;修复了多人游戏中农场帮工的多项同步与显示问题;修复了多种模组下的崩溃与兼容性问题。

其他更改

  • 冒险家协会营业至凌晨2点。
  • 性别限制服装现可跨性别穿着。
  • 多项本地化文本与格式修正。
  • 新增西里尔文精灵字体与部分翻译的像素艺术文字。
36. Focus by Automation (myme.no)

通过自动化实现专注

自动化的核心目的

作者引用John D. Cook的观点,强调自动化的真正价值在于节省心智能量,而非单纯节省时间或按键。这里的“自动化”是广义的,包括通过学习、练习和优化工作流程,将常见任务转化为无需过度思考的“本能”操作,从而在专注工作(进入“心流”状态)时减少认知负担。

专注的重要性与挑战

  • 编程需要高度专注:构建复杂心智模型如同搭纸牌屋,极易被中断破坏。
  • 干扰是专注的主要敌人:干扰形式多样,包括:
    • 外部干扰:会议、同事打扰、通知。
    • 内部干扰:冲动想法、拖延。
    • 前提条件缺失:目标模糊、技术债务。
    • 长反馈循环:交接困难、测试繁琐。
    • 生理需求:如饥饿。
  • 隐蔽干扰:除了明显中断,许多细微不便(如繁琐的工具操作)也会累积,消耗心智资源,降低生产力。

组织工具的策略

  • 作者推崇 GTD(完成工作)Zettelkasten(卡片盒笔记法) 等方法,并强调深度整合工具(如使用 Emacs 的 Org Mode 和 Org-roam 进行笔记、任务管理和知识图谱构建)的重要性。
  • 工具的理想状态是无缝融入工作流程,几乎不被使用者察觉,从而最小化其带来的额外认知负荷。

精通工具的价值

  • 降低认知负荷:熟练掌握工具(如编程语言、编辑器、API)能让大脑专注于问题本身,而非工具操作。
  • 练习与自动化:通过重复练习,将技能内化为“肌肉记忆”。例如:
    • 提升打字速度:虽非核心,但能加速代码测试与迭代。
    • 掌握编辑器快捷键(如Vim模式):高效的文本操作(如单词删除、段落修改)能显著减少“微干扰”,使操作自动化。
    • 学习Shell键绑定(如Readline):在命令行中高效导航和编辑,避免操作卡顿。
  • 技能迁移性:许多基础技能(如文本编辑效率)在不同环境和工具中具有通用性,投资回报高。
  • 平衡广度与深度:无需成为所有领域的专家,但应建立广泛的基础直觉,以便选择合适工具。精通少数关键工具并围绕它们构建工作流至关重要。

优化大脑资源

  • 大脑是最终瓶颈:学习和解题都消耗大量心智能量。自动化与精通工具的目的,是将常规任务从意识层面剥离,释放更多脑力用于创造性思考和解决复杂问题。
  • 明智投资学习:在非高压时期系统性学习和优化工作流,避免在项目关键时刻尝试全新技术。成熟开发者懂得何时投入以实现长期效率收益。
  • 最终目标:通过自动化外围任务和精通核心工具,保持专注,更从容地应对挑战,并在干扰后更快恢复状态。