2024-06-25

43 篇热帖

1. Microsoft breached antitrust rules by bundling Teams and Office, EU says (apnews.com)

欧盟指控微软违反反垄断规则

  • 指控核心:欧盟委员会初步认定,微软通过将其Teams通讯软件与Office 365等办公软件套件捆绑销售,构成“可能滥用市场支配地位”的行为。
  • 涉嫌限制竞争:欧盟认为,微软在销售办公软件时未提供选择是否包含Teams的选项,使Teams获得了“分销优势”。同时,微软限制其他通讯软件与自家软件的互操作性,可能进一步扩大了这一优势。
  • 调查背景:该调查始于2023年7月,源于Slack(隶属Salesforce)和Alfaview等竞争对手的投诉。欧盟强调,维护远程通讯市场的竞争对促进创新至关重要。
  • 微软的调整:微软已于2023年针对欧洲客户推出不含Teams的办公软件套件选项,并于2024年4月扩展至全球市场。但欧盟认为,这些措施不足以消除其竞争担忧。
  • 潜在后果:微软需正式回应欧盟的指控。若最终裁定违规,可能面临高达其全球年收入10%的罚款,或被强制采取措施纠正行为。
  • 各方反应:微软表示将继续与欧盟协商以解决剩余问题。Salesforce则称欧盟的立场是“对客户选择权的胜利”,呼吁采取迅速有效的补救措施。
2. Microsoft removes documentation for switching to a local account in Windows 11 (arstechnica.com)

背景与争议:Windows 11家庭版和专业版默认要求用户在初始设置时使用微软账户登录。使用微软账户对于OneDrive、GamePass或Microsoft 365等微软服务用户有一定好处,但对于不使用这些服务的用户,可能会频繁收到相关广告和提醒。传统上,用户仍可选择使用本地账户,但这需要超越常规设置的知识。

官方文档的变更:微软近期在一项虽小但令人不快的改动中,进一步限制了用户选择本地账户的空间。具体而言,微软官方支持页面(指导用户如何从本地账户登录到微软账户)中,关于“将微软账户切换回本地账户”的说明已被移除。根据Tom‘s Hardware和互联网档案馆的记录,这些说明在2024年6月17日左右消失。目前,该页面仅保留了将本地账户切换到微软账户的指南。

用户现有的变通方案:尽管官方文档已被删除,但在当前广泛使用的Windows 11 23H2版本以及已在Copilot+ PC上推出、秋季将向所有用户推送的Windows 11 24H2版本中,大多数创建本地账户的变通方法仍然有效。其中最简单的方法是在新电脑的初始设置(OOBE)过程中,按Shift+F10打开命令提示符,输入OOBE\BYPASSNRO命令,然后重启设备。重启后,在连接Wi-Fi的步骤中选择“我没有Internet连接”选项,即可继续设置本地账户。

3. Local First, Forever (tonsky.me)

本地优先,永恒存在

本文探讨了“本地优先”软件在数据同步方面的挑战,并提出利用现有文件同步服务(如Dropbox)作为解决方案的创新思路。

什么是“本地优先”?

本地优先软件的核心特征是:

  1. 数据主要存储在用户本地设备
  2. 允许偶尔联网进行同步、备份或获取数据
  3. 与纯离线软件或依赖持续联网的云软件有本质区别

这种模式的愿景是将数据控制权交还用户,但现实挑战在于:即使软件本身可离线运行,跨设备同步仍需要服务器支持。

核心问题

当开发公司倒闭时,其提供的同步服务将停止运作。尽管用户仍可本地使用软件,但跨设备同步能力丧失,形成“永久软件但同步失效”的困境。

解决方案:利用通用文件同步服务

作者提出以Dropbox、iCloud Drive、OneDrive等广泛使用的文件同步服务作为底层同步层,理由包括:

  • 持久性:这些服务很可能比单个软件公司存活更久
  • 互操作性:多厂商实现,避免供应商锁定
  • 普及性:用户已广泛采用,无需额外学习成本

技术实现方案

版本1:朴素同步

  • 将应用状态保存为单个文件,通过同步服务自动同步
  • 问题:多设备同时编辑会产生冲突文件
  • 解决:使用CRDT(无冲突复制数据类型),可自动合并冲突状态

版本2:客户端独立文件

  • 每个设备使用独立的状态文件
  • 监听其他设备文件变化并合并
  • 优势:避免同步服务层面的文件冲突
  • 关键:依赖CRDT实现数据层面的冲突解决

版本3:操作日志方式

  • 适用于操作型CRDT
  • 每个设备写入独立的追加式操作日志文件
  • 优化:将日志分块,减少同步服务的传输负担
  • 扩展:理论上可支持操作转换等更复杂机制

优势与局限

优势

  • 利用现有基础设施,实现零成本同步
  • 确保用户数据在任何情况下都能长期可访问
  • 简单可靠,足够满足非实时同步需求(如照片同步)

局限

  • 非实时同步,存在延迟
  • 同步粒度和效率受文件同步服务限制
  • 需要应用自行处理CRDT合并逻辑

实际应用前景

作者认为这种方案特别适合:

  • 个人笔记工具(如Obsidian)
  • 照片管理等不需要实时同步的应用
  • 任何希望实现“自带云存储,永久同步”的软件

最后指出,这种模式真正实现了“本地优先”的初衷:用户拥有数据,软件永续可用,同步不依赖特定厂商。

4. Show HN: I built a JavaScript-powered flipdisc display (flipdisc.io)

JavaScript驱动的flipdisc显示项目摘要

项目概述

作者构建了一个基于JavaScript的flipdisc(翻转点)显示墙,作为办公室的交互式墙面艺术。选择flipdisc技术是因为其高可读性、长寿命、25-60fps的刷新率,以及独特的“雨滴声”音效。项目旨在探索代码可视化的新方式。

硬件构建

  • 显示面板:使用9块Alfazeta面板(3×3网格),总计84×42个翻转点。每块面板包含2个28×7子面板,搭载ATMEGA128微控制器。
  • 供电:需要24V 1A/面板,总功率约9A,采用Meanwell 24V 10A电源。
  • 框架:使用80/20铝型材搭建,强调面板和翻转点的脆弱性需小心组装。
  • 布线:采用RS485通信,每列串联后整体连接。推荐使用Wago接线端子和压线钳。
  • 处理单元:因集成机器学习(语音、视频、图像处理),选用Nvidia Orin Nano开发板,搭配摄像头和音频模块。树莓派可能因帧率受限而不适用。

软件设计

  • 通信协议:基于RS485,数据帧格式为0x80(起始)→ 0x83(刷新)/0x84(缓冲)→地址→图像数据→0x8F(结束)。图像数据仅为0/1状态,采用RLE压缩。
  • Node.js库:开发了flipdisc库,支持Alfazeta和Hanover面板,可通过Canvas实例直接发送数据。
  • 渲染与交互
    • 渲染:使用PIXI(2D)、Three.js(3D)、Matter.js(物理引擎)和GSAP(动画)。
    • 交互:集成Google MediaPipe实现手势识别,通过ZeroMQ IPC与Python脚本通信。
  • 场景系统:支持自定义可视化场景(如RSS阅读器、Spotify客户端、天气应用),场景可通过REST API管理,实时数据通过WebSocket传输。
  • 接口:使用Expo构建控制应用,支持播放控制、队列管理、实时预览和自由绘图。

设计考虑

  • 字体:采用3×5、4×5等微小像素字体,平衡可读性与信息密度。
  • 图像处理:混合使用Floyd-Steinberg和Bayer 4×4抖动算法,前者适合图像,后者适合UI元素。
  • 创意约束:低分辨率(42×84)激发了设计创造力,类似于早期像素游戏设计。

未来方向

计划集成多模态AI接口,但需等待下一代模型发布。作者希望flipdisc技术能更普及于爱好者群体。

开源资源

6. Windows 11 is now enabling OneDrive folder backup without asking permission (www.neowin.net)
8. Waymo One is now open to everyone in San Francisco (waymo.com)

Waymo One 现已向旧金山所有用户开放

服务全面开放

自即日起,任何人均可通过 Waymo One 应用在旧金山叫车,提供全天候、覆盖全城的自动驾驶出行服务。此前 Waymo 已在旧金山运营多年,逐步扩大服务规模,目前每周提供数万次行程。

广泛应用与社区影响

  • 支持本地经济:约 30% 的行程用于前往本地企业(餐厅、酒吧、咖啡馆、博物馆等)。
  • 医疗出行:超过半数乘客曾使用 Waymo 前往或离开医疗预约,看重其提供的私人空间。
  • 多模式接驳:36% 的乘客将 Waymo 用于连接其他公共交通(如 BART、Muni)。
  • 特殊用途:包括婚礼接送、游客观光等,已为近 30 万用户(占城市人口四分之一以上)提供服务。

环保与可持续性

  • 车队全部采用电动车,能源 100% 来自旧金山的 CleanPowerSF 可再生能源计划。
  • 自 2023 年 8 月商业化运营以来,已减少约 57 万千克碳排放。
  • 53% 的旧金山用户认为 Waymo 帮助他们实现了更环保的出行。

安全性能与行业合作

  • 安全记录:在旧金山运营的 380 万英里自动驾驶里程中,与人类司机相比,Waymo 驾驶系统减少了 17 起受伤事故和 12 起需警方报告的事故。
  • 技术优势:研究表明 Waymo 驾驶系统在避免高严重性碰撞方面优于人类司机,保险索赔和伤害报告率更低。
  • 社会合作:与反酒驾组织(MADD)等机构合作,致力于减少因酒驾、分心驾驶等导致的道路事故。

包容性与用户体验

  • 应用及车载功能支持西班牙语和中文,提升多元用户和游客的体验。
  • 超过半数乘客表示 Waymo 提升了出行中的安全感,尤其为少数群体(如跨性别者)提供了更安心的交通选择。

未来展望

Waymo 致力于与地方政府、急救部门及道路安全倡导者合作,持续安全、负责任地扩展服务,推动旧金山在技术创新与可持续出行方面保持领先。

9. Show HN: From dotenv to dotenvx – better config management (dotenvx.com)

dotenv 的成就与问题

dotenv 作为广泛使用的环境变量管理工具,通过单行代码、单一文件和简单配置提升了开发效率与安全性。经过11年发展,已成为依赖量极高的开源项目之一。

然而 dotenv 存在三个主要问题:

  1. .env 文件泄露风险:若意外提交敏感信息,将造成严重安全问题
  2. 多环境管理复杂:难以灵活切换不同环境的配置
  3. 跨平台行为不一致:不同语言/框架的实现存在差异

dotenvx 的解决方案

dotenvx 作为下一代配置管理工具,针对上述问题提供了全新解决方案:

跨平台一致性

通过 dotenvx run -- your-cmd 命令,可在任何语言、框架和平台中以相同方式注入环境变量。支持 npm、brew、curl、docker、windows 等多种安装方式,确保解析引擎、变量扩展等行为完全一致。

多环境管理

使用 -f 参数加载特定环境文件,支持多文件组合:

dotenvx run -f .env.production -- node your-app
dotenvx run -f .env.local -f .env -- node your-app

该功能直接解决多环境配置管理难题,提供灵活的环境切换方案。

加密机制

这是最具突破性的功能。运行 dotenvx encrypt 命令即可加密 .env 文件:

  • 使用与比特币相同的公钥加密技术
  • 生成 DOTENV_PUBLIC_KEY(加密密钥)和 DOTENV_PRIVATE_KEY(解密密钥)
  • 加密后的文件即使泄露也无法直接读取,需私钥才能解密
  • 特别适合开源项目:贡献者可添加配置而无法解密现有敏感信息

1.0.0 版本发布

dotenvx 1.0.0 正式发布,标志着配置管理进入新阶段,为开发者提供了更安全、灵活且跨平台一致的配置管理方案。

12. iDOS 3 Rejected by Apple (litchie.com)

iDOS 3 被苹果拒绝的始末

本文是iDOS应用开发者就其应用在苹果App Store审核过程中遭遇阻碍的经历与更新记录。

重新提交与初步拒绝

由于iDOS用户和苹果近期在欧盟政策变化的提醒,开发者决定重新提交iDOS应用。但发现iDOS 2已被苹果列入黑名单,无法再以该名称提交,因此被迫使用新标题“iDOS 3”提交。

提交最初因与iDOS 2相同而被拒。在开发者解释无法继续使用iDOS 2后,苹果再次以“设计垃圾邮件”为由拒绝,声称近期有许多设计完全相同的提交。开发者对苹果无法根据账户历史区分原创与模仿者感到不解,认为这是一种侮辱,并需反复解释。

漫长的审核与模糊的标准

开发者对等待的用户表示乐观,并承诺若通过将发布更新。然而,审核过程漫长:

  • 2024年5月8日更新:应用审核中但需要更多时间。
  • 2024年6月15日更新:两个月后接到苹果电话。苹果决定iDOS不属于复古游戏机,因此新规则不适用。苹果建议修改后重新提交,但当被问及应做何修改以及“复古游戏机”的定义时,苹果无法给出具体指导,仅给出“见到即知”的模糊回应。
  • 2024年7月14日更新:得知UTM应用获批后,开发者基于此前相同的拒绝理由(iDOS不是复古游戏机模拟器)重新提交iDOS,但很快被拒。苹果引用指南4.7,称仅复古游戏机模拟器才合适。
  • 2024年7月16日更新:向App审核委员会的上诉被驳回。苹果重申iDOS提供模拟器功能但未专门模拟复古游戏机,因此不符合指南4.7。关于UTM获批而iDOS被拒的差异,苹果建议开发者通过“举报应用”表格报告其他应用的信任与安全问题。开发者认为此建议荒谬,称自己对运行模拟器的信任与安全毫无担忧。

核心问题

整个事件凸显了苹果应用审核指南(特别是指南4.7)的解释不一致和标准模糊。开发者反复遭遇不明确的拒绝理由,且苹果无法提供明确的修改指导,导致iDOS持续无法上架,而其他类似应用(如UTM)却能获批。

13. Testing AMD's Giant MI300X (chipsandcheese.com)

AMD MI300X 测试总结

硬件架构与设计优势

AMD Radeon Instinct MI300X 采用创新的 3D 芯片堆叠设计,将 8 个计算单元(XCD)垂直堆叠在 4 个 I/O 芯片上,再置于中介层上,形成三层结构。其关键硬件规格包括:

  • 缓存系统:三级缓存设计,包含 32 KB L1、4 MB L2 和高达 256 MB 的 Infinity Cache。Infinity Cache 基于 RDNA 2 架构引入,为 CDNA 3 带来显著的缓存容量和带宽优势。
  • 内存带宽:配备 8 个 HBM3 堆栈,理论内存带宽达 5.3 TB/s,容量 192 GB。
  • 计算单元:每个计算单元包含 38 个 CDNA 3 计算单元和 4 MB L2 缓存。

性能对比(与 NVIDIA H100 PCIe)

测试主要与 H100 PCIe 版本对比(注:H100 SXM5 版本带宽更高,达 3.35 TB/s,但大部分测试未使用)。

缓存与延迟

  • L1/L2 缓存:MI300X 的 L2 延迟(4 MB)低于 H100 的远端 L2 分区(H100 L2 分为两个 25 MB 部分,远端访问延迟高于 MI300X 的 Infinity Cache)。MI300X 的 L1 带宽远超 H100 PCIe。
  • Infinity Cache:延迟约 218 ns,低于 VRAM 访问。容量(256 MB)和带宽均大幅领先 H100 PCIe(H100 仅有约 50 MB L2 缓存)。
  • VRAM 延迟:单线程测试中 H100 略优,但 MI300X 通过多工作组分配可减少 TLB 缺失,使 VRAM 延迟接近 H100。

带宽表现

  • L1/L2 带宽:MI300X 的 L1 缓存带宽达数十 TB/s,L2 带宽甚至接近 H100 的 L1 带宽水平。
  • Infinity Cache 带宽:实测约 11.9 TB/s,远超 H100 PCIe 的 L2 带宽(约 4 倍以上)。
  • 本地内存带宽:MI300X 的共享内存带宽高于 H100。
  • PCIe 带宽:MI300X 支持 PCIe 5.0,主机-设备数据传输带宽显著领先。

计算与应用性能

  • 算术运算:在 FP32、FP64、INT16 等测试中,MI300X 的计算吞吐量大幅超越 H100 PCIe(例如 FP64 性能接近 3 倍)。
  • 科学计算:在流体模拟(FluidX3D)和引力势计算(CGP)中,MI300X 性能领先 1.86 倍至 3 倍。
  • 机器学习推理
    • 在 vLLM + Mistral 7B 模型上,MI300X 推理延迟比 H100 PCIe 低约 16%。
    • 在 Mixtral 8-7B 和 LLaMA3-70B 等大型模型上,单块 MI300X 的吞吐量可媲美甚至超过双卡 H100 SXM5(尤其是得益于更大的显存容量和带宽)。
    • 启用 KV 缓存后,推理吞吐量可提升数十倍。

软件生态挑战

尽管硬件领先,AMD 的 ROCm 软件栈仍存在不足

  • 兼容性与优化:ROCm 对消费级 GPU/APU 支持有限,不像 CUDA 那样普及。开发者适配意愿低,导致库和工具优化不足。
  • 关键库支持:如 FlashAttention 等主流机器学习库尚未对 CDNA 3 优化,影响大模型推理效率。
  • 未来规划:AMD 计划通过 SPIR-V 中间表示扩展 ROCm 兼容性,未来将覆盖更多 AMD 设备。

测试方法与说明

  • 独立测试:AMD 未直接参与测试,仅确认结果可复现。
  • 测试平台:Hot Aisle 提供双路 AMD EPYC 9754 系统,每颗 CPU 连接 4 块 MI300X。
  • 优化协助:Eliovp 和 Nscale 协助优化 LLM 测试。

结论

MI300X 是 AMD 在计算 GPU 领域的重大硬件突破,其芯片堆叠设计、缓存架构和带宽优势使其在多数测试中超越 H100 PCIe。然而,软件生态的成熟度仍是关键瓶颈。若 ROCm 能实现类似 CUDA 的普及性和优化水平,AMD 有望成为 NVIDIA 在 AI 和高性能计算市场的有力竞争者。

16. Round Rects Are Everywhere (www.folklore.org)

Bill Atkinson 向同事演示了他在 QuickDraw(当时称 LisaGraf)中实现的快速绘制椭圆和圆的创新算法。由于当时 Macintosh 的 68000 处理器不支持浮点运算,Bill 巧妙地利用奇数序列求和为完全平方数的数学原理,仅通过加减法(甚至避免了相对较慢的乘除法)就高效地实现了圆形绘制,演示中屏幕上快速充满了随机大小的椭圆。

然而,史蒂夫·乔布斯对此并不完全满意,他追问能否绘制圆角矩形。Bill 最初认为这很难实现且并非必需,显得有些不快。乔布斯随即强调“圆角矩形无处不在”,并让 Bill 观察会议室内的白板、桌椅乃至窗外的标志牌,甚至带他到街区寻找实例,最终以一个带圆角的禁停标志说服了 Bill。

Bill 回家后攻克了难题,次日下午便带着演示成果返回。他成功实现了以接近普通矩形速度绘制圆角矩形的功能,并将这一新图元命名为“RoundRects”。随后几个月,圆角矩形逐渐融入用户界面的各个部分,最终成为系统中不可或缺的基础元素。

17. Show HN: Triplit – Open-source syncing database that runs on server and client (github.com)

Triplit:开源全栈同步数据库概述

核心功能

Triplit 是一个开源数据库,能在服务器和浏览器之间实时同步数据。它作为 TypeScript 包提供,可集成到应用中,负责在服务器端存储数据并智能地将查询同步至客户端,被称为"全栈数据库"。

主要特性

  • 🔄 实时同步:支持增量更新和属性级冲突解决。
  • 🏠 本地缓存:由完整的客户端数据库驱动。
  • 💽 持久化存储:配备管理仪表盘的服务器端存储。
  • 🔌 可插拔存储提供者:支持 SQLite、IndexedDB、LevelDB、内存等。
  • 😃 乐观更新:使交互响应快速。
  • 🔗 关系查询:支持复杂数据模型。
  • 🛫 离线模式:具备自动重连和一致性保证。
  • 🔙 回滚与重试:失败更新的管理。
  • 🗂️ 类型安全:提供数据模式(Schema)和 TypeScript 自动补全。
  • 🔐 授权控制:在服务器端对读写操作强制执行。
  • 🤝 协作/多人支持:基于 CRDT 技术。
  • 🏎️ 低延迟:使用差量补丁最小化网络流量。
  • 📝 简洁 API:支持原生 JavaScript 和 React 中的数据查询与变更。
  • 完全开源

项目架构 (Monorepo)

Triplit 的代码库 (triplit/packages) 包含以下模块:

  • TriplitDB:可在任何 JS 环境(浏览器、Node.js、Deno、React Native 等)运行,提供表达式丰富、快速且支持实时更新的查询,同时维护网络多写入者间的一致性。
  • Client:浏览器端库,用于与本地和远程 TriplitDB 交互。
  • CLI:命令行工具,提供项目脚手架、全栈开发环境启动、服务器迁移等功能。
  • ReactSvelte:对应框架的客户端绑定库。
  • Console:用于查看和操作 Triplit 项目数据、管理模式的应用。
  • ServerServer-core:用于客户端间数据同步的 Node 服务器及与协议无关的服务器构建库。
  • DocsTypesUI:文档、共享类型定义及前端共享 UI 组件。

快速入门指南

  1. 创建新项目
    npm create triplit-app@latest my-app
    
  2. 在现有项目中添加依赖
    npm install --save-dev @triplit/cli
    npm run triplit init
    
  3. 定义数据模式 (my-app/triplit/schema.ts):
    import { Schema as S, ClientSchema } from '@triplit/client';
    export const schema = {
      todos: {
        schema: S.Schema({
          id: S.Id(),
          text: S.String(),
          completed: S.Boolean({ default: false }),
        }),
      },
    } satisfies ClientSchema;
    
  4. 启动开发同步服务器,并将输出的环境变量(如服务器 URL 和令牌)添加到应用的 .env 文件。
  5. 在应用中定义查询(以 React 为例):
    • 初始化 TriplitClient
    • 使用 useQuery 钩子获取并渲染数据,通过客户端方法进行数据变更。
  6. 启动应用,在另一个浏览器标签页中打开,即可观察到数据的实时同步。

更多资源

  • 完整入门指南和分步教程可在官方文档中找到。
  • 开发团队通过 Discord 提供支持,也可在 Twitter/X 上关注其最新公告。
18. MTV news website goes dark, archives pulled offline (variety.com)

MTV新闻网站(MTVNews.com)已停止运营,其超过二十年的在线内容已被彻底移除,无法再访问。其姐妹网站CMT.com的类似内容也遭遇了相同命运。

网站关闭与内容损失

  • 该网站内容的下架发生在2023年,当时母公司Paramount Global因财务困境关闭了MTV新闻部门。目前访问相关网址会被重定向至MTV主站。
  • 被移除的内容涵盖了自1996年网站上线以来积累的大量音乐新闻报道,包括数千篇文章和对众多知名艺术家的采访。
  • 其中最具历史价值的部分是MTV新闻庞大的嘻哈相关档案,尤其是自2000年代起运营近十年的每周专栏“Mixtape Mondays”,该专栏采访了许多职业生涯早期的艺术家和制作人。

前工作人员的反应

  • 多位前MTV新闻编辑在社交媒体上对此表示震惊和愤怒。前音乐编辑Patrick Hosken称自己八年的职业生涯痕迹“消失得无影无踪”。前娱乐总监Crystal Bell表示“几十年的音乐历史消失了”,并指出其中包含早期的K-pop报道。《滚石》杂志资深作家Brian Hiatt评论称此举是“耻辱”,并质问为何让几十年的流行文化历史研究材料消失。

行业背景与现状

  • 早在2023年5月,Paramount Global就已对MTV新闻部门进行大规模裁员和缩编,最终将其关闭,这是该公司更大规模裁员计划的一部分。
  • 上周,Paramount Global旗下的CMT网站也移除了其多年积累的乡村音乐新闻资料库。
  • 截至报道时,MTV方面未对此事作出回应。尽管有观点认为这些内容可能通过Wayback Machine等网络存档服务访问,但据资深记者反映,早期的MTV新闻文章在该服务上也无法找到。

历史回顾

  • MTV新闻部门始于80年代末由Kurt Loder主持的节目《The Week in Rock》,他成为MTV的首位新闻主播。
20. Show HN: Glasskube – Open Source Kubernetes Package Manager, alternative to Helm (github.com)

Glasskube:开源Kubernetes包管理器

Glasskube 是一个开源的Kubernetes包管理器,旨在成为Helm的替代品,其设计灵感来源于Homebrew和npm的简洁性。它通过提供用户界面(UI)、命令行界面(CLI)或GitOps集成,使部署、更新和配置Kubernetes包的速度比传统工具(如Helm或Kustomize)快20倍。

核心特点

  • 多交互方式:支持通过UI、CLI或GitOps直接部署,UI中所有包集中展示,无需手动搜索Helm仓库。
  • 类型安全配置:支持通过UI或交互式CLI问卷进行类型安全的配置值输入,并可从其他包、ConfigMap或Secret中注入值。
  • 依赖管理:包具有依赖感知能力,可被多个包引用并自动部署到正确的命名空间。
  • 安全更新:提供一键预览和执行更新的功能,所有更新均经过测试套件预测试。
  • 社区互动:支持在GitHub或UI内对Kubernetes包进行讨论和点赞。
  • GitOps集成:所有包均为自定义资源(Custom Resources),支持通过GitOps管理,并正在集成Renovate。
  • 多仓库支持:支持使用多个仓库及发布私有包,便于企业管理内部服务。

快速入门

支持的包

Glasskube已支持多种常见包,包括:

  • Kubernetes Dashboard
  • cert-manager
  • Ingress-NGINX Controller
  • Kube Prometheus Stack
  • Cloud Native PG 完整包列表可在 glasskube.dev/packages 查看。

架构设计

Glasskube的架构涉及以下流程:

  1. 用户通过UI或CLI发起安装请求。
  2. 客户端验证包后,在Kubernetes API中创建 Package 自定义资源。
  3. PackageController 协调资源,创建 PackageInfo(如不存在)。
  4. PackageInfoController 从仓库更新包清单,并更新 PackageInfo
  5. PackageController 根据最终清单部署包到集群。
  6. 包状态返回给客户端。

支持与贡献

  • 帮助与反馈:可通过Discord寻求支持,或通过GitHub提交问题或功能请求。
  • 相关项目:Glasskube Apps Operator (glasskube/operator)。
  • 贡献指南:欢迎尝试Beta版本、报告问题或提出建议,详见贡献指南。

许可与社区

  • Glasskube采用 Apache 2.0 许可证
  • 项目感谢所有贡献者的支持。
21. Wave activity on Titan strong enough to erode the coastlines of lakes and seas (phys.org)
23. Ask HN: Those of you who've left the SWE world, what did you transition into?
25. Researchers run high-performing LLM on the energy needed to power a lightbulb (news.ucsc.edu)

研究摘要:超低能耗大语言模型取得突破

  • 核心问题:传统大语言模型(如ChatGPT)依赖巨大的矩阵运算,导致极高的能源消耗(日均成本可达数十万美元)和碳排放。
  • 研究目标:消除运行LLM中最耗能的计算部分——矩阵乘法,同时保持模型性能。
  • 关键技术方案
    1. 算法革新:摒弃矩阵乘法,将矩阵内的数值强制限定为三元值(-1, 0, 1),从而使计算从复杂的乘法降维为简单的加法。该方法改进了微软相关研究,不仅去除了矩阵乘法,还开源了模型。
    2. 计算优化:通过叠加矩阵并仅执行关键运算,显著减少计算量。同时,引入基于时间的训练方法,使网络拥有“记忆”能力,确保了在简化计算后模型性能不降。
  • 硬件定制
    1. 初步优化:在通用GPU上运行新算法,已实现内存消耗降低10倍,速度提升25%。
    2. 专用硬件:为充分发挥节能潜力,研究团队设计了定制硬件(基于FPGA原型),针对三元运算进行优化,规避了传统GPU为矩阵乘法优化的设计。
  • 显著成果
    • 能效飞跃:在定制硬件上,仅需13瓦功率即可运行一个十亿参数级的模型,相当于一个灯泡的能耗,效率是典型GPU硬件的50倍以上
    • 性能持平:该开源模型在性能上达到了Meta的Llama等最先进模型的同等水平。
    • 实用意义:该技术为在智能手机等内存有限的设备上全功能运行LLM提供了可能路径。
  • 未来展望:研究人员相信现有成果只是起点,进一步优化可实现更高能效,并认为该技术能有效提升整个数据中心的计算资源利用效率。
28. Producing fuels from 1,500 degrees of solar heat (www.thechemicalengineer.com)

德国启动全球首座太阳能热燃料工业工厂

全球首座利用太阳能热生产燃料的工业工厂 DAWN 已在德国投入运营。该项目由 Synhelion 公司(苏黎世联邦理工学院衍生企业)开发,其核心是利用大规模镜面阵列将太阳光聚焦于塔顶,产生超过 1,500°C 的高温工艺热,从而生产更清洁的燃料,应用于飞机、船舶、汽车,并可用于低碳水泥生产。

核心技术流程

该技术主要包括四个关键环节:

  1. 太阳能采集:通过追踪太阳的定日镜,将阳光反射并聚焦到塔顶的太阳能接收器。
  2. 高温热产生:接收器加热闭合回路中的气体传热介质,生成高温工艺热。
  3. 合成气生产:高温驱动热化学反应器,在催化剂作用下将二氧化碳、水蒸气和来自生物废弃物的甲烷转化为 合成气(一氧化碳和氢气的混合物)。
  4. 燃料合成:合成气通过 费托合成工艺 转化为合成原油,随后可进一步精炼为航空煤油、船用柴油或甲醇、车用汽油等。

此外,系统集成了 热能存储装置,可在无日照时释放能量,实现工厂24小时不间断运行。

生产规模与成本目标

  • 当前:DAWN工厂计划于年内投产,年产燃料数千升。
  • 中期:计划于2025年在西班牙建造一座更大规模的工厂,将年产量提升至约 1,000吨
  • 长期愿景:目标是在十年内实现 年产100万吨 燃料,并从2033年起将生产成本降至约 每升1美元

项目合作与意义

该项目与 德国航空航天中心(DLR)亚琛大学太阳能研究所 合作开发。潜在客户包括 汉莎航空瑞士国际航空。工程公司 Wood 协助了技术放大与工厂建设。 同时,Synhelion正与 水泥公司Cemex 合作,探索利用该技术为水泥生产提供低碳热源。双方已于2023年在类似工厂的持续条件下,成功使用太阳能热生产了水泥熟料。

德国联邦数字与交通部国务秘书认为,该技术是实现交通运输领域气候目标、减少二氧化碳排放的重要创新。Synhelion公司首席执行官称DAWN工厂的落成标志着“太阳能燃料时代的开端”。

30. Language models on the command line (simonwillison.net)

文章总结:

本文介绍了通过命令行访问大语言模型的工具 LLM 及其多种应用场景。主要内容如下:

1. 工具概述与安装 LLM 是一个 Python 命令行工具,用于直接从终端运行大语言模型提示。可通过 pipxpipbrew 安装。安装后,需配置 OpenAI 密钥或通过插件接入其他提供商(包括本地模型)。

2. 基础用法

  • 运行简单提示,输出可实时显示或重定向到文件。
  • 使用 -c 选项进行连续对话。

3. 插件系统 通过插件支持多种模型:

  • 例如 llm-claude-3 插件可访问 Anthropic Claude 3 系列模型(如 Haiku、Opus)。
  • 插件目录提供数十个远程 API 和本地模型的插件。

4. 日志与数据库

  • 所有提示和响应均记录在 SQLite 数据库中。
  • 可通过 llm logs path 查看数据库路径,并用 Datasette 浏览和分析记录。
  • Datasette 支持分面、搜索和过滤,方便查看模型使用情况。

5. 本地模型运行

  • 通过插件如 llm-gpt4all 运行本地模型(如 Mistral-7B)。
  • 使用 llm chat 命令保持模型在内存中,提高效率。
  • 支持通过 Ollama 服务器或 Llamafile(如 LLaVA)运行本地模型。

6. 脚本集成与自动化

  • 可编写脚本(如 Bash)将 LLM 集成到自动化流程中。
  • 示例:通过 Hacker News API 获取讨论内容,用模型进行总结。
  • 结合 shot-scraper 工具抓取网页内容(如 Google 搜索结果),实现简单的 RAG(检索增强生成)。

7. 嵌入与向量搜索

  • LLM 支持嵌入模型,用于计算、存储和搜索文本嵌入。
  • llm embed-multi 命令可批量生成嵌入并存入数据库。
  • 示例:对博客书签批量生成嵌入,使用 llm similar 进行语义搜索。
  • 可在此基础上构建 RAG 系统,将相似文档作为上下文提示。

8. 高级功能

  • 支持通过配置接入 OpenAI 兼容的 API 端点。
  • 提供 Python API(尚未稳定)。
  • 可使用模板保存和复用参数化提示。
  • 支持通过管道输入内容(如文件内容)给模型。

9. 个人生产力与项目背景 作者强调文档和单元测试对管理多个项目的重要性,并提到 LLM 的构建基于其对 LLM API、Python CLI 和插件系统的经验。

31. Denver gave homeless people $1k/mth. Year later, nearly half had housing (www.businessinsider.com)

丹佛基本收入项目一年成果总结

项目概述

丹佛基本收入项目是一项为期一年的试点计划,旨在通过直接现金援助帮助无家可归者。项目始于2022年秋季,覆盖了超过800名科罗拉多州的无家可归者。参与者被随机分为三组:

  • 第一组:每月获得1000美元,持续一年。
  • 第二组:先获得6500美元一次性款项,之后每月获得500美元。
  • 第三组(对照组):每月获得50美元。

所有现金援助均无任何附加条件,参与者可自由支配。

主要发现(基于10个月的自我报告调查)

  1. 住房状况改善

    • 项目开始时,仅有6%(试验组)和12%(对照组)的参与者表示住在自己的房屋或公寓中。
    • 10个月后,三个组别中均有约45%的参与者报告拥有了自己的住所,显示出住房状况的显著改善。
  2. 结果相似性

    • 研究的一个关键发现是,接收更高额度现金的两个试验组与仅接收50美元的对照组在主要结果上并无显著差异。这表明,单纯增加现金金额并未带来更优的成果。
  3. 财务与生活改善

    • 参与者普遍将资金用于交通、食物、衣物、房租、健康保险和偿还债务等即时和常规开支。
    • 他们报告财务稳定性增强,对紧急财务援助的依赖减少。
    • 部分参与者(特别是获得一次性款项或每月1000美元的组别)报告全职工作的比例有所增加,而对照组则略有下降。
  4. 公共服务使用与节省

    • 参与者使用急诊室、医院、临时收容所和监狱的时间较项目前有所减少。
    • 据估计,此减少为城市节省了约589,214美元的公共服务支出,但这仅占项目940万美元总资金的一小部分。
  5. 心理健康与压力

    • 在项目的10个月时,所有组别的参与者在评估心理压力的Kessler 10测试中平均得分均高于项目开始时,表明压力水平上升。
    • 然而,获得每月1000美元的组和对照组报告花在休闲活动(如与家人朋友相处)上的时间有所增加。
  6. 长期不确定性

    • 项目结束后,部分参与者(如案例中的Jarun Laws)重新陷入无家可归的状态,凸显了长期效果的不可持续性
    • 许多家庭对援助结束后支付账单感到焦虑,并担心可能失去住房。

个人案例

  • Jarun Laws:项目帮助他获得临时公寓、改善亲子关系并找到更好工作,但援助结束后不得不重返车内生活。
  • Moriah Rodriguez:用资金修理卡车、送孩子上学、支付日常开支,并最终获得了终身公共住房券,使她能专注于子女的教育和心理健康。
  • Dia Broncucia与Justin Searls:利用资金负担了公寓、新车、家具和心理健康资源,从临时收容所转入了稳定住所。

结论与展望

丹佛基本收入项目展示了无条件现金援助在短期内改善无家可归者住房、财务稳定性和生活质量的潜力。然而,项目结果并未证明更高金额的援助能产生更显著的效果,且其长期影响仍不确定。

该项目是美国越来越多城市尝试通过基本收入试点应对贫困趋势的一部分。丹佛项目组织者希望将项目延长至第三年,并继续筹款,以观察试验组与对照组之间是否会随时间产生更明显的差异。尽管存在局限性,但支持者认为,以更低成本帮助人们稳定住房并获得更好长期结果的模式值得进一步探索和推广。

32. Researchers invent 100% biodegradable 'barley plastic' (phys.org)
34. The First Hedge Fund (commoncog.com)

A.W. Jones:世界首只对冲基金的创立与遗产

创始人背景 A.W. Jones由阿尔弗雷德·温斯洛·琼斯(Alfred Winslow Jones)于1949年创立,是全球公认的首只对冲基金。琼斯出身于富裕家庭,拥有哈佛大学学位,职业生涯历经外交官、马克思主义者、社会学家、记者等多重身份,却在49岁时因家庭经济压力转向华尔街。他缺乏专业投资经验,却凭借观察力与创新思维重塑了投资管理行业。

投资策略创新 琼斯改进了当时主流的“买入持有”策略,引入两大核心机制:

  1. 多空结合:在牛市中全仓投资并加杠杆买入股票;在熊市中通过卖空部分股票对冲风险,形成“对冲”结构。
  2. 风险量化:提出“速度”概念,衡量个股相对于标普500指数的波动性,以更精准地对冲市场风险(即区分“alpha”选股收益与“beta”市场收益)。尽管当时缺乏计算机支持,他通过手工计算实现近似风险管理。

基金结构与管理革新

  • 激励机制:设计“模拟组合”系统,让经纪人提交选股建议,并根据其“选股能力”而非市场波动支付佣金。
  • 分权管理:赋予基金经理自主权,按业绩分配管理费,形成早期“多策略”对冲基金雏形。
  • 利益绑定:要求合伙人投入自有资金,确保其与基金风险共担。

监管规避与扩张 琼斯通过将基金定位为“私募”、避免公开宣传、控制投资者人数(低于99人)等方式,规避了当时对杠杆和卖空的严格监管。1961年设立第二只基金以进一步规避投资者上限。

兴衰与行业影响

  • 早期成功:前20年累计回报近5000%,因风险对冲策略在牛熊市中表现稳健。
  • 后期挑战:随着规模扩大,基金经理逐渐偏离对冲原则,过度追求杠杆收益。1969年股市下跌25%期间,基金亏损35%,暴露了激进策略的风险。
  • 人才流失:核心经理离职创办同类基金,推动对冲基金行业扩散。
  • 遗产延续:琼斯被公认为对冲基金之父,其多空对冲、风险管理与基金结构理念成为行业基石。其家族基金至今仍以“基金中的基金”形式运作。2008年,琼斯入选对冲基金经理名人堂。

总结 A.W. Jones通过非传统背景与创新思维,将对冲基金从概念转化为实践,奠定了现代对冲基金的运作范式。尽管后期因策略执行问题遭遇挫折,其核心思想——风险对冲、绩效激励与结构设计——仍深刻影响着全球资产管理行业。

35. Komorebi: Tiling Window Management for Windows (github.com)

Komorebi:Windows平铺窗口管理器

概述

Komorebi是一款为Windows 10及以上系统设计的平铺窗口管理器,作为微软桌面窗口管理器(DWM)的扩展。它允许用户通过命令行界面(CLI)控制应用程序窗口、虚拟工作区和显示器,并可与第三方软件(如whkd和AutoHotKey)结合以设置自定义键盘快捷键。Komorebi旨在默认情况下对操作系统和桌面环境进行最小限度的修改,用户可通过配置文件自行定制。

许可证与使用

  • 个人使用:基于Komorebi 2.0.0许可证(PolyForm Strict 1.0.0的分支),允许个人自由使用(包括个人修改),但禁止重新分发或基于此创建衍生作品(硬分叉)。禁止任何商业用途(例如在工作中使用)。
  • 商业使用:提供专用的“个人商业使用许可证”,为付费订阅用户添加商业使用权。所有其他Komorebi许可证条款继续适用。
  • 学生与MDM设备:使用移动设备管理(MDM)注册设备的学生仍受Komorebi许可证约束,可通过邮件申请移除企业用户启动画面。
  • 教育源代码:软件为教育源代码项目,鼓励用户在具备财务能力时向慈善机构捐赠。

社区与支持

  • 提供Discord服务器用于讨论、帮助和问题排查。
  • YouTube频道发布开发视频、功能预览和发布概述。
  • Awesome List展示生态系统中的相关项目。
  • 可通过GitHub Sponsors、Ko-fi或比特币捐赠赞助项目。

安装与对比

  • 提供详细安装指南,支持通过scoop、winget或从源代码构建。
  • 社区成员制作了视频,对比Windows 11默认窗口管理、Fancy Zones与Komorebi的差异。

技术集成与事件订阅

Komorebi支持通过以下方式订阅窗口管理器事件和消息:

  1. 命名管道(Named Pipes):创建命名管道后,使用komorebic subscribe-pipe命令接收JSON格式的事件通知。
  2. Unix域套接字(Unix Domain Sockets):在指定目录创建套接字,使用komorebic subscribe-socket命令。
  3. Rust客户端:通过komorebi-client crate在Rust代码中订阅事件。
  4. TCP通信:可通过--tcp-port=N标志暴露TCP监听器,允许发送SocketMessage进行控制。

可通过komorebic notification-schemakomorebic socket-schema命令生成事件通知和套接字消息的JSON Schema。

调试与状态管理

  • 日志记录于%LOCALAPPDATA%/komorebi/komorebi.log
  • 使用komorebic state命令查询窗口管理器当前状态。
  • 使用komorebic restore-windows命令恢复隐藏的窗口。
  • 支持死锁检测(需编译时启用--features deadlock_detection)。

开发指南

  • 代码贡献需遵循贡献指南(CONTRIBUTING.md)。
  • 提交规范:需使用Commitizen格式化提交信息,运行clippy和fmt检查。
  • PR要求:每个PR仅包含单一功能或错误修复;代码库结构重构需事先批准;禁止引入用户界面破坏性变更(如komorebic命令、JSON配置架构等)。
  • IntelliJ用户需配置宏展开和实验性功能以支持代码补全和导航。

致谢

感谢项目命名与支持的妻子、开源社区贡献者、先驱项目nog、合作项目GlazeWM以及协助实现虚拟桌面隐藏功能的开发者。

38. It's getting harder to die (www.plough.com)

本文探讨现代医疗技术如何使临终过程复杂化,并提出关于临终决策的建议。作者作为临床医生与伦理学家,建议在可能的情况下,选择低技术、居家环境度过最后时光,注重维系亲密关系。

文章指出,西方常见的死亡模式包括:癌症复发、慢性疾病反复发作直至终末期、以及高龄积累性衰老。针对不同情况,应提前规划,例如考虑临终关怀或制定疾病恶化的应急预案。

作者列举了医院中常见的生命支持手段,包括心肺复苏(成功率低且可能导致肋骨骨折或脑损伤)、血液透析(需长期进行且过程辛苦)、人工营养与水合(适用于治疗期,但对晚期痴呆患者可能利大于弊)、化疗(并非总是有效,且可能严重影响生活质量)以及器官移植(术后需长期抑制免疫,可能伴随新健康问题)。这些干预虽可延长生命,但也可能带来负担。

文章强调,患者有权拒绝或撤除生命维持治疗,这既合法也符合伦理——撤除设备并非“杀人”,而是允许潜在疾病自然进展。但情感上,撤除长期使用的设备可能比一开始就拒绝更令人痛苦。

如何判断是否应该停止治疗?作者认为单纯以年龄划线过于简单,引入了“衰弱风险评估”概念。若65岁以上老人符合以下三项或更多标准,则被视为“衰弱”:非自愿体重下降、持续 exhaustion、肌肉力量下降、行走缓慢、体力活动减少。衰弱程度越高,从重大医疗干预中恢复的可能性越低。

最后,作者呼吁通过开放、诚实的对话(与家人、医疗人员及社区)提前为临终做好准备,强调“如何生活,便如何死亡”的古老智慧,并指出在某些情况下,为更有尊严的临终,可能需要跳出日常医疗化的思维模式。

39. The case for not sanitising fairy tales (www.plough.com)

文章《The case for not sanitising fairy tales》论述了不应过度净化经典童话故事的观点,主张保留其原始黑暗元素的重要性。

核心论点: 经典童话原本包含暴力、罪恶和死亡等黑暗主题,但当代版本(如迪士尼改编)常将其删减或美化。这种净化可能剥夺了儿童通过故事学习处理恐惧、认识世界复杂性的机会。

主要论据:

  1. 童话的原始黑暗性:格林兄弟和安徒生的原版故事包含残酷情节(如《灰姑娘》中继姐妹自残、《小美人鱼》的悲剧结局)。这些黑暗元素是故事真实反映世界的一部分。
  2. 过度保护的弊端:当代社会一方面让孩子参与应对现实暴力的演练,另一方面却认为他们无法承受童话中的黑暗,这形成矛盾。童话提供了一个安全的空间,让孩子通过英雄的旅程练习克服恐惧。
  3. 童话的真正价值:童话严肃对待善与恶,结局通常是正义最终胜利(“永远幸福”)。这并非不切实际,而是提供了一种“艰难赢得的希望”,教导孩子恶龙虽存在,但终将被降服。
  4. 两种极端问题
    • 过度净化:只留下恶龙,移除了圣乔治,导致孩子无法获得战胜恐惧的希望。
    • 绝对黑暗:一些现代作品(如某些反乌托邦文学)只展现绝望,抹杀了善恶对决和希望,同样未讲述完整真相。
  5. 故事与希望的关系:人类通过故事理解世界。剥夺孩子充满希望的故事,会使他们陷入焦虑或绝望。童话的“永远幸福”结局往往需要一种永恒的视角(如信仰或永生)才能被理解,它指向一种超越当下黑暗的终极希望。

结论: 作者呼吁提供更真实的故事,这些故事既不掩盖世界的黑暗,也不放弃希望的承诺。经典童话正是这样的故事,它们帮助孩子在恐惧中找到方向,并相信最终的胜利。

40. Twonkie: A USB-PD sniffer/injector/sink based on Google's Twinkie open hardware (github.com)

Twonkie:基于Google Twinkie的USB-PD分析工具

项目核心

Twonkie是一个开源的USB-PD(USB Power Delivery)分析工具,集成了嗅探器、注入器和接收器功能。它基于Google的Twinkie项目重新设计,旨在降低自制门槛,使其更适合爱好者通过低成本方式制作。

与原始Twinkie的区别

  • 制造优化:原始Twinkie采用六层PCB和BGA/晶圆级元件,难以自制。Twonkie改用四层PCB,兼容OSHPark等廉价打样服务,并优先使用有引脚元件以简化焊接(主控可选QFN封装)。
  • 设计挑战:使用0402尺寸被动元件和非常规USB-C连接器安装方式(将90°连接器作为1.6mm跨接安装),虽增加焊接难度,但提升了结构稳定性。
  • 硬件改进
    • 新增引导按钮(除USB_ID引脚外)。
    • 采用INA237电流/电压监控芯片,支持USB-PD扩展功率范围(EPR),最高可耐受48V电压。
    • 微控制器引脚重新布局以优化布线,需使用专用固件。
  • 版本演进
    • v1.0基于INA260芯片。
    • v2.0升级为INA237芯片,为EPR提供硬件支持。

硬件规格与获取

  • PCB尺寸为1英寸×1英寸,OSHPark打样3片约10美元。
  • 设计文件(含v2.0 Gerber文件)已开源,可通过OSHPark或自行选择PCB厂商生产。

组装与固件指南

  • 元件采购:建议从DigiKey等供应商订购,需额外准备USB-C连接器和0402被动元件(易丢失)。
  • 固件:提供预编译二进制文件和源码,需根据说明进行编译和烧录。
  • 替代元件建议
    • INA237可替换为INA228或INA238。
    • 微控制器可选STM32F072CBT(TQFP)或CBU(QFN),亦可使用64KB闪存的STM32F072C8(仅支持嗅探功能)。
    • USB-C连接器需选择垂直安装、引脚完整且无突出金属固定的型号。

新手注意事项

  • 项目涉及精细间距表面贴装焊接,不建议初学者尝试。
  • 电路图中标注了元件编号和采购编号,可参考BOM列表采购。
  • 熟悉USB-PD协议及原始项目文档有助于理解设计。

相关项目与许可

  • 硬件设计采用CC BY 4.0许可。
  • 固件源码采用BSD 3-Clause许可。
  • 类似项目包括Greg Davill的PD-sniffer和XenGi的改进版(采用0.8mm PCB和标准跨接安装连接器)。

待办事项

  • 将Twinkie支持整合至sigrok/PulseView。
  • 发布v2.0实物照片。
41. How GCC and Clang handle statically known undefined behaviour (diekmann.uk)

GCC与Clang处理静态已知未定义行为的方式

未定义行为(UB)简介

  • C语言中,当代码的行为未由语言规范定义时,称为未定义行为(UB)。
  • 编译器在遇到UB时可任意处理,导致程序行为不可预测,且可能引发安全漏洞。
  • 常见UB示例:数组越界访问、整数溢出、除零错误、空指针解引用。

编译器如何利用UB进行优化

编译器会基于“程序无UB”的假设进行优化。例如,在 int x = y/z; 中,编译器可能假定 z ≠ 0,从而优化相关代码。

静态已知UB的处理实验

作者通过实验对比GCC(v14.1)和Clang(v18.1)在编译时已知存在UB时的行为差异。

1. 常量除零

int main(int argc) {
    int ub = argc / 0;
    return ub;
}
  • GCC:编译为 ud2(非法指令,导致程序崩溃)。
  • Clang:编译为直接返回(ret),忽略除零操作。
  • 两者均会发出编译警告。

2. 变量除零(静态可推知)

int main(int argc) {
    int i = 0;
    int ub = argc / i;
    return ub;
}
  • 编译结果与常量除零相同,但不再发出警告(即使开启 -Wall)。

3. 添加UB前后的代码

int main(int argc) {
    int i = 0;
    printf("before");
    int ub = argc / i;
    printf("%d", ub);
    return ub;
}
  • GCC:编译第一个 printfud2,程序在UB点崩溃。
  • Clang:编译两个 printf,移除除零操作。
  • 说明:UB的存在使编译器对前后代码的处理均无保证。

4. 未使用的UB代码

int main(int argc) {
    int i = 0;
    int ub = argc / i; // UB未被使用
    return 1;
}
  • GCC和Clang:均通过死代码消除移除了除零操作。
  • 注意:此行为无保证,其他编译器或版本可能选择崩溃或执行其他操作。

5. “毒值”(Poison Value)的处理

int main(int argc) {
    int i = 0;
    int ub = *(int*)i; // 空指针解引用
    int p = ub | 1;    // 位或操作
    printf("print");
    if (p) {
        printf("%d", ub);
    }
    return 1;
}
  • Clang:编译两个 printf,因 p 恒为真(ub|1 必非零),移除条件判断。
  • GCC:在解引用处生成 ud2,程序崩溃。
  • 原理:LLVM中,UB产生的值可能为“毒值”,但与常量操作时可能产生确定值(如 poison | 1 恒为真),从而允许优化。

关键问题解析

  1. 为何不总警告UB?

    • 警告可能过多且包含误报。
    • 难以判断开发者是否需要此类警告(如死代码中的UB通常无需警告)。
  2. 为何处理方式不同(如不直接崩溃)?

    • LLVM采用“毒值”模型:UB产生的值未必立即导致后续代码失效,允许更多优化。
    • 目标是在不引发灾难性后果的前提下,让尽可能多的程序运行。

结论:编译器哲学差异

  • GCC:相对保守,倾向于在已知UB处插入崩溃指令(如 ud2),使问题显性化。
  • Clang:更为宽松,在可能时继续编译,避免直接崩溃,期望匹配开发者对未觉察UB的预期。
  • 两种方式均合理,选择取决于编译器开发者与用户的偏好。

重要说明

  • 本文示例为特选案例,旨在展示处理UB的理念差异。
  • 实际行为可能随编译器版本、优化级别等因素变化。
  • 编程中应始终避免未定义行为。
42. Show HN: Qq: like jq, but can transcode between many formats (github.com)

qq 工具介绍

qq 是一个受 jq 启发的多格式转码器和查询工具,它使用 jq 语法,能够在不依赖多种专用工具的情况下,查询和转换不同配置与数据格式。

支持的格式

  • 可读写格式:JSON、YAML/YML、TOML、XML、HCL/TF、CSV、TSV、INI、Properties、Gron、HTML、JSONL/NDJSON/JSONLines、JSONC、Parquet、MessagePack/MPK、CBOR、Avro、Base64/B64、TXT/Text。
  • 只读格式:Proto、.env。

核心功能

  1. 格式转码:支持在任何输入和输出格式之间进行转码。可通过 -i/--input-o/--output 显式指定格式,或由 qq 根据文件扩展名自动检测。
  2. 查询构建:提供交互模式 (--interactive),支持自动补全和实时渲染预览,方便构建查询。
  3. 流式与聚合模式
    • --stream 模式(与 jq 类似)支持内存高效处理大文件,适用于 JSON、YAML、CSV 等多种格式。
    • --slurp (-s) 模式可将多个输入读入一个数组进行处理。
  4. 退出状态查询:使用 -e/--exit-status 标志,可根据查询结果(如布尔值)设置命令退出状态,便于在条件语句中使用。
  5. Git 集成:可通过配置 git/configgit/attributes,利用 qq 进行更清晰的配置文件差异比较。

使用示例

  • 格式转换
    # YAML → JSON
    qq '.' config.yaml -o json
    # CSV → Parquet
    qq '.' data.csv -o parquet
    # 管道传输格式
    cat file.msgpack | qq -i msgpack -o yaml
    
  • 查询与处理
    # 从网站获取 HTML 并查询
    curl motherfuckingwebsite.com | qq -i html '.html.body.ul.li[0]'
    # 流模式处理大文件
    qq --stream 'select(length == 2)' large.json
    

安装方式

  • Homebrewbrew install jfryy/tap/qq
  • AUR:在 Arch Linux 上通过 AUR 安装。
  • 源码编译:需要 Go >= 1.22.4,可从发布页面下载。
  • Docker
    docker pull jfryy/qq
    echo '{"foo":"bar"}' | docker run -i jfryy/qq '.foo = "bazz"' -o tf
    

项目背景与致谢

qq 的灵感来源于 fq 和 jq。它旨在成为一个终端或脚本中实用的工具,用于大多数结构化格式的交互,并使用 jq 的强大功能实现配置格式间的相互转码。项目特别感谢以下项目:gojq(查询引擎)、fq(二进制格式查询)、jq、gron、yq、goccy 和 go-toml。

43. What's up Python? Django get background tasks, a new REPL, bye bye gunicorn (www.bitecode.dev)

Python技术动态摘要

Django 内置后台任务

Django 正在推进现代化,其增强提案 DEP 14 提议为框架加入内置的后台任务系统。目前,Python 处理后台任务通常依赖 Celery、Dramatiq 等第三方库,过程复杂且存在诸多限制。Django 计划集成现有项目 django-tasks,旨在提供开箱即用的解决方案,支持多队列、多后端、任务优先级及结果存储。用户可在设置中配置后端(如 ImmediateBackend 用于测试,DatabaseBackend 用于生产),并通过装饰器定义任务函数,在视图中调度执行。

该提案源自 Wagtail 社区。当前版本功能尚基础,仅提供数据库后端,存在缺少定时任务(cron)、任务结果获取不便、错误处理与调试机制不完善等问题,且对任务持久化、重试等复杂场景支持有限。但社区认为这是解决 Django 长期痛点(如需谨慎处理 ORM 对象、数据库锁等)的重要一步,未来可能会集成 Redis 等更高效的后端。

新型轻量级 Python REPL

VS Code 团队推出一款全新的 Python REPL(交互式解释器)。用户通过在设置中启用 python.REPL.sendToNativeREPL 并选择代码行按 Shift+Enter 即可启动。该 REPL 具备虚拟环境集成、多行编辑、代码高亮、自动补全及智能提示等功能。其主要优势在于无需在虚拟环境中安装任何依赖,比 JupyterLab 更轻量,适合快速的代码探索。尽管功能尚不完善(例如缺少内联绘图和便捷的快捷操作),但为不需要完整 Notebook 环境的用户提供了更简洁的选择。

Uvicorn 支持多进程,淘汰 Gunicorn

Uvicorn 发布 0.30 版本,新增了多进程管理器功能。这使得它能够独立处理生产环境中 ASGI 框架(如 FastAPI)的请求,不再需要以前的 Gunicorn 作为进程管理器的架构(即 Gunicorn 管理 Uvicorn)。新版本可通过 --workers 参数启动多个工作进程,支持自动重载,并可集成 uvloop 以提升性能。这一变化简化了部署栈,使 Uvicorn 有望成为更通用的 ASGI 服务器选择。

PyPI 暂时屏蔽 Outlook 邮箱注册

为应对持续的大规模机器人账号注册攻击,Python 包索引 (PyPI) 的基础设施团队宣布,暂时禁止使用 Outlook.com 和 Hotmail.com 域名注册新账户或将其关联为辅助邮箱。PyPI 近期观测到此类攻击活动频繁,且均大量使用上述邮箱服务。此举旨在加强平台安全,但会给使用这些邮箱的合法用户带来不便。PyPI 团队表示,此限制并非永久性,待其拥有更强大的应对工具和容量后可能会取消。