2024-08-12
33 篇热帖
2. There Is No Antimemetics Division (2018) (qntm.org)
3. US Government wants to make it easier for you to click the 'unsubscribe' button (apnews.com)
美国政府致力于简化取消订阅流程
为保护消费者权益,美国多个联邦机构正协同推进一项名为“时间就是金钱”的广泛举措,旨在让美国人能更容易地取消不需要的会员资格和定期付款服务。该倡议涵盖了从医疗保健、健身会员到媒体订阅等多个行业,并将推出新的法规。
白宫国内政策顾问尼拉·坦登指出,企业通过繁琐文书、漫长等待时间等手段,浪费消费者的金钱和时间,并尽可能长时间地滞留资金。这些看似不便的做法并非偶然,它们具有巨大的财务影响。
具体措施包括:
- 联邦通信委员会(FCC):正在调查是否应要求通信公司,使得取消订阅或服务的过程与注册时一样简便。
- 联邦贸易委员会(FTC):已于2023年3月启动“点击即可取消”的规则制定程序,要求公司允许客户以与开始订阅同等的便利程度终止订阅。
- 劳工部及卫生与公众服务部:已要求医疗保险公司和团体健康计划改善与客户的互动,并将在未来几个月内确定更多改善消费者与医疗系统互动的机会。
此外,政府近期已实施多项相关举措:
- FTC:于2023年10月提出一项规则,禁止隐藏和虚假的“垃圾费用”,这些费用常掩盖演唱会门票、酒店房间和水电账单的真实成本。
- 运输部:于2023年4月敲定规则,要求航空公司自动为航班延误等情况提供现金退款,并更好地披露行李费或预订取消费。
- 司法部:应FTC转介,于2024年6月对软件制造商Adobe及其两名高管提起诉讼,指控其推动消费者订阅“按年付费”的月度计划,却未妥善披露第一年内取消该计划可能需要支付数百美元费用。Adobe方面则对此表示异议,认为终止费用对其全球收入影响甚微(不足总收入的0.5%),但这是其为客户提供不同成本与承诺计划选择能力的重要组成部分。
然而,一些商业倡导者对政府的整体干预措施持反对意见。美国商会高级副总裁肖恩·希瑟认为,该举措“不过是试图微观管理企业的定价结构,常常削弱企业为消费者提供不同价位选择的能力”。
4. Okay, I Like WezTerm (alexplescan.com)
WezTerm 终端配置指南
概述
WezTerm 是一款基于 Lua 配置的现代化终端,支持跨平台使用,以其高度可定制性和强大功能著称。作者从 iTerm 2 转向 WezTerm,因其配置文件基于 Lua 脚本,便于在多台机器间同步和实现复杂配置。
核心特性
Lua 配置与热重载
- 配置文件位于
~/.config/wezterm/wezterm.lua,支持模块化组织。 - 保存配置文件后自动热重载,无需重启终端,提供即时反馈。
- 内置调试覆盖层(
CTRL + SHIFT + L)可执行 Lua 代码和查看日志。
外观定制
- 颜色方案:支持 1000+ 预置主题(如
Tokyo Night),可动态切换或随机应用。 - 系统外观适配:通过 Lua 模块自动检测系统暗色/亮色模式并切换主题。
- 字体:可自定义字体、字号及连字支持(默认使用 JetBrains Mono)。
- 窗口样式:支持透明背景、模糊效果、隐藏标题栏等定制。
键绑定与功能扩展
- 支持自定义快捷键(如
Option + 方向键逐词移动、CMD + ,打开配置文件)。 - Leader 键:通过
CTRL + A激活模式,简化复杂快捷键(如分屏操作)。 - 键表:创建临时模式处理重复操作(如调整窗格大小)。
多窗口与多任务管理
- 分屏:支持水平和垂直分屏,可通过快捷键或命令面板操作。
- 窗格导航:使用 Vim 风格键位(
h/j/k/l)在窗格间切换。 - 状态栏:通过
update-status事件动态显示主机名、当前工作区等信息,支持渐变色彩。
工作区管理
- 支持以项目为单位创建独立工作区,维护各自的窗口和窗格布局。
- 提供项目选择器(
InputSelector),可快速切换或新建工作区。 - 工作区状态可通过
ShowLauncherArgs模糊搜索切换。
进阶功能
- 颜色渐变:利用
wezterm.color.gradient动态生成状态栏分段颜色。 - 模块化配置:将不同功能拆分为独立 Lua 文件(如
appearance.lua、projects.lua)。 - 环境变量控制:确保启动命令时继承正确的路径(如
PATH变量)。
总结
WezTerm 通过 Lua 配置提供了极高的灵活性,适合追求深度定制和高效工作流的用户。文章引导读者从安装、基础配置到高级功能(如工作区管理)逐步掌握 WezTerm,并鼓励探索其 API 文档以进一步个性化配置。
5. SponsorBlock – skip sponsor segments on YouTube (sponsor.ajay.app)
SponsorBlock 项目概述
核心定义
SponsorBlock 是一款开源、众包的浏览器扩展及开放API,旨在自动跳过 YouTube 视频中的赞助商插入片段。
工作原理与核心功能
- 众包数据提交:用户通过扩展程序标记视频中赞助片段出现的时间点。
- 自动跳过:扩展程序利用已收集的众包数据,在播放时自动跳过已知的赞助段落。
- 隐私保护:采用隐私保护查询系统获取和分享数据。
- 扩展分类支持:除赞助外,还支持跳过片头、片尾、订阅提醒等内容,并可使用“高光”功能直接跳转至视频亮点。
项目状态与影响
- 当前数据:已有用户提交了大量跳过片段数据。
- 累计效益:已累计为用户节省了数年的观看时间。
- 辅助项目:作者还开发了用于对抗标题党的 DeArrow 项目。
开源与社区生态
- 完全开源:源代码和数据库公开,任何人都可下载。
- 开放API:提供公开API文档,并支持自建镜像服务器。
- 社区支持:拥有Discord和Matrix聊天社区,以及丰富的社区工具和文档。
- 最佳实践:与YouTube Premium及uBlock Origin扩展搭配使用效果最佳。
运维与支持
- 全职开发:由Ajay Ramachandran构建和维护。
- 资金支持:接受捐赠以支持全职工作。
- 服务器状态:可通过
status.sponsor.ajay.app查看服务器状态。
重要信息
- 隐私政策与使用条款:项目提供了清晰的政策链接。
6. Show HN: My 70 year old grandma is learning to code and made a word game (grandmasword.com)
7. Show HN: PGlite – in-browser WASM Postgres with pgvector and live sync (pglite.dev)
PGlite:浏览器中的WASM PostgreSQL数据库
PGlite 是一个基于 WebAssembly (WASM) 的 PostgreSQL 数据库实现,可直接在浏览器中运行。它提供了完整的 Postgres 功能,并集成了实时同步和响应式数据加载能力。
核心特性
- 轻量级与可嵌入:完整的 WASM 构建体压缩后不足 3MB,便于嵌入各类 Web 应用。
- 可扩展性:支持动态加载扩展,包括 pgvector(用于向量搜索)和 PostGIS(用于地理空间数据)。
- 响应式与实时同步:内置对数据加载、同步和实时查询(live query)原语的支持,便于开发实时交互应用。
关键优势
- 本地运行:无需依赖远程数据库服务器,可在浏览器或客户端本地环境中运行完整的 Postgres 实例。
- 开发友好:通过集成工具如 database.build,允许用户借助 AI 直接在浏览器中创建和发布 Postgres 数据库。
- 即开即用:提供在线演示(playground),用户可直接体验包含 pgvector 等扩展的完整 PGlite 环境。
演示与体验
用户可通过官方提供的在线演示平台(playground)直接测试 PGlite 的功能,包括创建数据库、运行查询和使用扩展。该项目由 Supabase 支持,旨在简化浏览器端数据库应用的开发流程。
8. Blitz: A lightweight, modular, extensible web renderer (github.com)
Blitz:轻量级、模块化、可扩展的Web渲染引擎
概述
Blitz 是一个专注于渲染 HTML 和 CSS 的高度模块化引擎,采用全新设计以避免传统浏览器的臃肿架构。当前项目处于预测试(pre-alpha)阶段,核心渲染功能已具备,但仍存在诸多缺陷和未完善特性,暂不建议用于生产环境开发。
设计理念与目标
Blitz 的核心理念是仅实现基础的 HTML/CSS 渲染,将传统浏览器中的大量“额外”功能变为可选插件。其明确支持的功能包括:
- 现代 HTML 布局(Flexbox、Grid、表格、块级、内联、绝对/固定定位等)
- 高级 CSS 特性(复杂选择器、媒体查询、CSS 变量等)
- HTML 表单控件
- 通过 AccessKit 实现可访问性
- 通过自定义组件进行功能扩展
不支持的功能包括 WebRTC、WebSocket、蓝牙、本地存储等。这些功能建议在原生应用中通过独立的 Rust crate 实现,无需与渲染器耦合。
架构与组件
Blitz 采用模块化架构,由以下核心部分组成:
高级封装层
- blitz:可直接渲染 HTML/Markdown 字符串的前端,适用于文件预览,但缺乏交互能力。依赖
blitz-dom、blitz-html、blitz-shell和blitz-renderer-vello。 - dioxus-native:用于渲染 Dioxus VirtualDom 的前端,支持完整交互功能。依赖
blitz-dom、dioxus-core、blitz-shell和blitz-renderer-vello。
两者均可选使用 blitz-net 加载子资源。
核心与扩展组件
核心组件:
blitz-dom:核心 DOM 抽象,负责样式解析、布局和事件处理,不包含解析、渲染或系统集成。依赖 Stylo(CSS)、Taffy(布局)和 Parley(文本布局)。blitz-traits:提供基础类型与特质,确保各组件间可互操作而不相互依赖。
功能扩展组件:
blitz-net:网络模块,支持通过 HTTP、文件系统或数据 URI 获取资源。blitz-paint:将 DOM 树转换为绘图指令,依赖 anyrender 2D 绘图抽象。blitz-html:为blitz-dom添加 HTML 解析功能,支持 HTML5 和 XHTML。blitz-shell:提供窗口渲染能力,集成 Winit 事件循环、AccessKit 可访问性和 Muda 系统菜单。
使用与开发
项目提供多个示例,包括简单的浏览器、待办事项应用、Markdown 渲染器及与 WGPU 的集成演示。开发者可通过克隆仓库并运行对应示例进行体验。
对于希望使用最新开发版 dioxus-native 的用户,需通过 Git 直接引入并调整导入路径。该版本仍兼容 Dioxus v0.7.x 稳定版及相关生态库。
许可协议
项目采用 Apache 2.0 和 MIT 双重许可。其中 stylo_taffy 组件额外采用 MPL 2.0 许可,以便与 Servo 项目协作。所有贡献默认遵循相同的许可协议。
9. It took my savings and 14 years but I’m about to beat arthritis (www.thetimes.com)
10. How to avoid losing items? Holding pens (blog.alexwendland.com)
文章探讨了在家中丢失物品的原因,并提出了使用“Holding Pens”(持有笔)作为解决方案。
人们丢失物品的主要原因是:当被打断或需要快速响应时,往往基于临时心理状态决定物品放置位置,随后因状态短暂而遗忘。理想情况下,应为每个物品分配固定位置并始终遵守,例如钥匙只放在后裤兜、背包钩或床头柜特定格子中。然而,这种方法存在局限:一是某些物品太短暂或不重要,难以记住固定位置;二是有时时间不足,无法将物品放到指定位置(如物品在另一个房间)。
为此,文章提出了“Holding Pens”方案:在每个房间设置指定区域,用于存放无固定位置的物品。具体特征包括:
- 使用托盘(约12英寸 x 18英寸),足以容纳大多数物品。
- 侧面带有小边,防止物品掉落。
- 在每个房间都放置,使其使用便捷性与随意放置相当。
- 除非物品放入永久位置,否则总是存放在Holding Pens中。
- 需定期清理(理想每天,最多每周),避免成为长期存储区。
这一方法通过降低使用门槛和规范临时存放,帮助减少物品丢失。
11. AMD records its highest server market share in decades (www.tomshardware.com)
- 服务器市场份额创新高:2024年第二季度,AMD凭借EPYC处理器在数据中心CPU市场的份额达到24.1%,创下数十年来新高,同比增长5.6个百分点。
- 市场份额总体格局:在客户端PC整体市场(含台式机与笔记本电脑),英特尔仍以78.9%的份额保持领先,AMD份额为21.1%。
- 台式机CPU:AMD份额为23%,环比下降1%,但同比增长3.6%。
- 笔记本电脑CPU:AMD份额为20.3%,环比增长1%,同比增长3.8%。尽管笔记本电脑单位份额增长,但其收入份额(17.7%)低于单位份额,表明产品平均售价较低。
- 服务器市场深度分析:尽管英特尔在服务器CPU出货量上仍占主导(75.9%),但AMD在高端服务器市场表现突出,其产品平均售价明显高于英特尔。
- 财务数据佐证:英特尔数据中心业务收入为30亿美元,而AMD服务器业务收入为28亿美元,尽管后者出货量份额仅约四分之一。
- AMD自行计算的服务器收入份额为33.7%,同比增长6.6个百分点。
- 成功与挑战:AMD在服务器和笔记本电脑市场的增长,部分归因于其产品竞争力以及英特尔可能面临的供应限制。然而,要改变整体客户端市场的格局,AMD仍面临巨大挑战,因英特尔在企业PC销售和产能方面优势显著。
12. Go is my hammer, and everything is a nail (www.maragu.dev)
标题:Go是我的锤子,一切都是钉子
摘要:
本文作者Markus是一名独立开发者和数字产品构建者,他倡导并实践着只使用Go语言完成所有开发工作的理念。他认为,作为独立开发者,明智选择技术栈至关重要,过于复杂的技术栈会消耗精力,使开发者陷入基础设施维护,而非专注于交付价值。
作者自2016年开始使用Go,并逐渐放弃Python和JavaScript,现在几乎所有软件项目(从CLI工具、Web服务到一次性脚本)都基于Go构建。他反驳了“为具体问题选择合适工具”的传统观点,并阐述了坚持使用Go的三个核心理由:
- Go几乎能做任何事:尽管每种语言都有强弱项,但Go能够胜任广泛的开发任务(如CLI、云基础设施、HTTP服务器等),甚至可以用于游戏开发和GUI应用。作者认为语言选择很大程度上是个人偏好问题,而Go的简洁、可读性和一致性与他的构建理念相符。
- 减少上下文切换:只使用一种编程语言意味着开发者无需在不同语言的语法、编译器、IDE、工具链、社区生态和资讯流之间频繁切换。管理多个语言的生态系统会带来负担,而专注于Go能避免这种认知超载。
- 知识深度:通过将所有精力投入Go,作者能够深入探索该语言的细节、特性、历史和周边工具,达到对单一语言更精深的理解,而非对多种语言都停留在肤浅层面。
针对“是否限制职业生涯”的疑问,作者认为世界广阔、项目无限,专注于Go足以支撑其职业发展。持续使用同一语言能带来更高的生产力和专业深度。
文章最后以幽默的口吻表达了对持续用Go解决各类挑战的决心,并提及该文章引发了Hacker News和Reddit上的相关讨论。
13. Judge orders CDC to stop deleting emails of departing staff: 'likely unlawful' (www.politico.com)
14. Server Mono: A Typeface Inspired by Typewriters, Apple's SF Mono, and CLIs (servermono.com)
15. Adbfs-rootless – Mount Android phones on Linux with adb. No root required (github.com)
Adbfs-rootless 摘要
Adbfs-rootless 是 Adbfs 的一个变体,允许在不需要 root 权限的情况下通过 adb 挂载 Android 手机到 Linux 和 MacOS 系统。
Ubuntu 系统安装与使用
- 依赖项:需要安装
libfuse-dev、android-tools-adb、build-essential、git和pkg-config,使用sudo apt-get install命令。 - 克隆仓库:从 GitHub 克隆 Adbfs-rootless 仓库。
- 构建:进入目录并构建。如果使用独立的 android-sdk,可将二进制文件复制到
platform-tools目录。 - 创建挂载点:例如在主目录中创建一个挂载点。
- 挂载设备:使用
./adbfs命令挂载设备。添加-o rescan选项可在每次操作后触发媒体重新扫描。
MacOS 系统安装与使用
- 依赖项:通过 Homebrew 安装
android-platform-tools和macfuse。 - 克隆仓库:从 GitHub 克隆 Adbfs-rootless 仓库。
- 构建:进入目录并构建。
- 创建挂载点:例如在主目录中创建一个挂载点。
- 挂载设备:使用构建的工具挂载设备,可能需要允许 fuse 扩展。
故障排除
- 设备未找到错误:确保 USB 调试已启用,并使用
fusermount -u卸载挂载点后重试。 - 设备离线错误:确保 android-sdk-tools 为最新版本,允许计算机访问设备,并使用
killall -9 adb和fusermount -u后重试。
16. Postgres.new: In-browser Postgres with an AI interface (supabase.com)
Postgres.new: 浏览器端Postgres与AI接口整合
产品概述
database.build(原名postgres.new)是一个浏览器端的Postgres沙盒环境,集成AI助手功能。用户可即时创建并运行无限数量的Postgres数据库,这些数据库直接运行在浏览器中(未来将支持部署到S3)。每个数据库与大语言模型(LLM)配对,实现多种智能化功能。
核心功能
- CSV智能处理:通过拖放CSV文件自动生成表格,AI自动识别列数据类型
- 数据报告导出:生成并导出SQL查询结果为CSV报告
- 智能图表生成:用自然语言描述需求,自动生成数据可视化图表(基于Chart.js)
- ER图与迁移生成:通过AI描述数据库需求,自动生成实体关系图和SQL迁移代码
- 语义搜索支持:内置pgvector扩展,支持浏览器内向量搜索和RAG(检索增强生成)应用
技术实现
- 核心引擎PGlite:基于WASM的Postgres构建版本,可在浏览器中运行真实Postgres
- AI自主操作:AI助手拥有完全数据库访问权限,无需用户确认即可执行多步操作
- 错误自修复:当SQL执行出错时,AI能接收错误信息并自动尝试修复
- 数据持久化:支持IndexedDB和OPFS等浏览器存储方案
- 有线协议支持:通过pg-gateway库实现标准Postgres协议,允许外部客户端连接
工作流程特点
- 本地化运行:所有查询均在浏览器执行,无远程容器或代理
- 即时可用:数据库可快速创建和销毁,适合数据分析场景
- 成本极低:PGlite数据库部署到S3后,存储和读取成本显著低于传统方案
- 开发友好:支持AI驱动开发,允许试错并提供SQL迁移代码
扩展与兼容性
- 支持多种Postgres扩展(如pgvector、live扩展)
- 内置Transformers.js实现浏览器端文本嵌入生成
- 操作延迟低于0.3毫秒,适合本地Web应用状态存储
未来计划
- 实现数据库S3部署功能(初始为只读)
- 支持更多文件格式(Word、图片等)
- 数据库共享功能(通过唯一URL分享)
- 迁移到OPFS存储方案以提升性能
- 完整的数据库导出和恢复功能
开源信息
项目及相关工具均采用开源许可协议(Apache 2.0/MIT),包括PGlite核心、pg-gateway协议库、前端界面等组件。
17. Postgres.new (postgres.new)
18. China's total wind and solar capacity outstrips coal (renewablesnow.com)
Renewables Now 是一个面向全球可再生能源专业人士的领先商业新闻来源,自2009年起提供全面覆盖,包括重大项目、交易和行业趋势。网站提供多种新闻简报订阅选项,如每日氢能简报、每日新闻和每周企业PPA简报,用户可通过订阅计划获取额外文章、洞察及定制新闻和提醒。此外,网站设有高级访问服务,帮助用户及时跟踪行业动态。联系信息包括编辑、销售与广告及客户服务部门,电话号码为+359 2 80 12 630。网站还包含社区部分,并由SeeNext提供支持,设计由StudioX完成。整体而言,该平台致力于为可再生能源领域提供专业新闻和资源。
19. Generating Simpson's Paradox with Z3 (kevinlynagh.com)
生成辛普森悖论的Z3示例
本文展示了如何使用Z3定理证明器生成棒球击球率中的辛普森悖论示例。该悖论源于Pearl《Causal Inference in Statistics》中的练习:球员A的整体击球率高于队友B,但B在对左手和右手投手时击球率均高于A。
问题与Z3应用
- 作者使用Z3定义整数变量表示球员A和B对左右手投手的安打和未安打次数,约束所有计数为正。
- 通过实数变量定义整体击球率(总安打除以总打数)和分别击球率(如A对左手投手的安打除以该类总打数)。
- 添加约束条件:A整体击球率高于B(
< B A),但B对左手和右手投手击球率均高于A(< A_L B_L和< A_R B_R)。 - 运行Z3求解器生成满足约束的示例。
生成结果
Z3输出示例数据如下表:
| 球员 | 左手投手击球率 | 右手投手击球率 | 整体击球率 |
|---|---|---|---|
| A | 0.4 | 0.167 | 0.235 |
| B | 0.5 | 0.182 | 0.230 |
具体数据:
- A对左手投手:2安打/3未安打(共5打数),右手投手:2安打/10未安打(共12打数)。
- B对左手投手:1安打/1未安打(共2打数),右手投手:2安打/9未安打(共11打数)。
悖论解释
关键点在于球员面对的投手分布不均:A面对5个左投和12个右投,而B面对2个左投和11个右投。当数据按子组(左右手投手)分析时,B在各子组中表现更佳;但整体汇总时,由于A对左投打数更多(且左投击球率通常较高),A的整体平均值反而更高。这体现了辛普森悖论的核心:聚合数据与分组数据可能得出相反结论。
20. OpenBSD 7.5 via QEMU on Hetzner physical machine (no phys. access / KVM console) (hackmd.gfuzz.de)
OpenBSD 7.5 在 Hetzner 物理机上通过 QEMU 安装总结
本文介绍了在没有物理访问权限或 Hetzner 提供的 KVM 控制台的情况下,如何在一台 Hetzner 物理服务器(配置为双 SSD RAID1)上安装 OpenBSD 7.5 (amd64)。核心方法是利用 Hetzner 的 Linux 救援系统,在其上通过 QEMU 虚拟化技术启动 OpenBSD 安装镜像,并直接操作物理硬盘完成安装,从而实现对安装过程和后期维护(如救援模式)的完全控制。
硬件与网络环境
- 服务器:约35欧元/月,CPU 为 Intel Core i7-6700,内存 32GB。
- 存储:两块 500GB Crucial MX500 SSD (
/dev/sda,/dev/sdb),安装前已擦除。 - 网络:IPv4 (
136.243.110.155) 与 IPv6 (2a01:4f8:171:1129::2/64) 地址,网卡为 Intel I219-LM (em0)。
安装步骤概要
- 启用救援系统:在 Hetzner Robot 面板激活 Linux 救援系统并通过 SSH 登录。
- 准备安装镜像与工具:下载 OpenBSD 7.5 安装镜像 (
install75.iso)。 - 通过 QEMU 启动安装:
- 使用 QEMU 命令从 ISO 镜像启动,并将两个物理磁盘 (
/dev/sda,/dev/sdb) 作为虚拟磁盘暴露给虚拟机。 - 关键参数包括启用 KVM、使用宿主机 CPU、分配 2GB 内存和 4 个虚拟 CPU,并通过
-nographic选项将输出重定向到串口控制台。 - 在引导加载程序处切换至串口控制台 (
set tty com0)。
- 使用 QEMU 命令从 ISO 镜像启动,并将两个物理磁盘 (
- 在 OpenBSD 安装程序中配置:
- 进入 shell (
s) 手动创建设备节点并设置磁盘。 - 使用
fdisk写入 MBR,disklabel创建 RAID 分区标签。 - 使用
bioctl创建 RAID1 (softraid0) 镜像卷 (sd2)。 - 返回安装程序,选择
sd2作为根磁盘并使用自动布局进行安装。 - 安装完成后,关闭虚拟机并重启物理机。
- 进入 shell (
- 安装后配置:
- 通过 SSH 登录新系统。
- 使用
syspatch应用系统补丁。 - 设置加密分区:
- 修改
sd2的/home分区类型为RAID。 - 使用
bioctl在其上创建加密卷 (sd3) 并设置密码短语。 - 在
sd3上创建文件系统并挂载到/crypt。 - 修改
/etc/fstab并创建符号链接,将用户主目录指向加密卷内的目录。
- 修改
“救援模式”实现
无需 KVM 访问,可随时通过以下方式进入类似救援的环境:
- 在 Hetzner 面板启用 Linux 救援系统。
- 登录救援系统后,使用 QEMU 启动 OpenBSD 安装或实时镜像 (
cd75.iso),并将物理磁盘作为 QEMU 的驱动器。 - 或者,直接从本地磁盘启动已安装的系统进行维护。
这种方法提供了对服务器底层访问的完全自主权,适用于远程管理场景。
21. "Does astrology work? We tested the ability of 152 astrologers" (threadreaderapp.com)
22. Interstellar movie black hole implemented with Einstein's equations in C++ (twitter.com)
提供的文章内容是一条来自x.com的错误消息,表明网站出现技术问题。该错误可能与浏览器隐私相关扩展冲突有关,导致访问中断。消息以安抚语气鼓励用户不要担心,并建议通过禁用可能引起问题的隐私扩展后重试操作,以恢复正常访问。核心要点包括错误原因推测、解决建议和用户引导。
23. Firedancer: Language for 2D shmups bullet-hell patterns (firedancer-lang.com)
Firedancer 是一种用于定义 2D 弹幕射击游戏弹幕模式的专用语言,当前版本为 v0.1.3。其源代码托管在 GitHub 仓库中。
该语言的开发工具链包含三个主要层次:
- 脚本:用户编写的弹幕模式源代码。
- 虚拟汇编代码:由脚本编译生成的中间表示。
- 程序:将汇编代码组装后,用于驱动 Firedancer 虚拟机的最终可执行程序。
该工具链结构清晰,旨在为开发者提供一种专门的、分层的方式来设计和实现复杂的弹幕模式。
24. The 1986 Oldsmobile Incas Dashboard (2020) (www.thedrive.com)
1986年Oldsmobile Inca概念车概述
设计与背景 该车是1986年由Italdesign为Oldsmobile设计的概念车,体现了80年代大胆前卫的汽车设计风格。其设计灵感带有《霹雳游侠》式的未来感,与当时及如今的自动驾驶概念车内饰(如取消方向盘、配备大屏)有所不同,但同样摒弃了传统方向盘。
内饰与控制布局
- 操纵装置:采用类似飞机操纵杆的轭式转向装置(yoke),集成几乎所有车辆控制功能,包括空调、灯光、音响、巡航控制和自动变速箱操作。
- 仪表显示:大部分为数字化仪表,但保留了模拟转速表和车速表。数字式车速表在静态照片中显示为62公里/小时,暗示其可能未完成调试。
- 缺失设计:未设置空调出风口,这在玻璃座舱车型中可能导致夏季高温问题。
车身与机械设计
- 车身设计:由Italdesign操刀,整体线条简洁流畅。
- 动力系统:据称搭载位于车尾的涡轮增压Quad 4发动机,输出功率约230马力,并配备四轮驱动系统。
- 车门结构:后门采用类似特斯拉Model X的鸥翼式上掀开启方式;前门与挡风玻璃整体向前上方掀起,形成独特的进入通道。
历史与现状 该车从未量产。Oldsmobile在2004年停止运营,品牌也随之消失。通用汽车近期出售了最后一辆Oldsmobile老爷车,表明无意复兴该品牌。因此,Incas概念车仅作为80年代未来汽车设计的愿景留存。
25. Comma.ai: Refactoring for Growth (blog.comma.ai)
Comma.ai 在 2020 年确立了由研究、openpilot 和运营团队组成的“成功三角”。四年间,公司发布了两款产品、一个机器人平台、3个重大及30个次要openpilot版本、首个端到端驾驶代理,并实现了首次无脱离干预的自动驾驶行驶。
随着公司成长,其宣布进行架构重构,以更好地践行使命:在交付可销售中间产品的同时,解决自动驾驶汽车问题。Comma.ai 将自身定位为一家消费电子公司,致力于将最新AI技术以产品形式交付用户,并坚持开源开发。
新的“三角”结构如下:
- 运营团队:负责公司基础设施,包括资金、人员、物流、Comma车队及整体运维。
- 产品团队:负责产品设计与制造,涵盖硬件、运行自治代理所需的底层软件以及应用程序。
- 自治团队:负责开发自治代理软件及其所需全部基础设施。
其中,运营与产品团队合作向用户交付comma 3X设备,自治与产品团队则共同将openpilot软件部署到comma 3X上运行。
当前进展:
- Comma.ai 目前是一家以工程师为主的21人公司,总部位于加州圣迭戈,所有软硬件均在此研发与生产。
- 正在交付openpilot 0.9.7版本,其自动驾驶功能已覆盖54%的行驶里程和29%的使用时间。
- comma 3X设备销量持续增长,每台设备均能为公司带来盈利。
- 工厂正在扩大产能,目标为实现10倍设备产出。
未来方向: 公司认为大规模无人驾驶的部署仍需时日。当前,openpilot的部分自动驾驶功能正改善着全球1000万辆兼容车辆的驾驶体验,且用户数量与盈利能力持续增长,机器学习模拟技术已投入应用。未来路径清晰:
- 通过新模拟器降低自动驾驶脱离频率。
- 改进产品,使其具备更佳的购买与使用体验。
- 扩大生产规模,最终建成全自动化“熄灯工厂”。
团队扩张: 公司计划招募约5名新成员,分别支持自治算法研发、产品优化和生产规模化。相关招聘与技术挑战详情可通过其新推出的排行榜及招聘页面了解。
常见问题解答(FAQ):
- 盈利模式:通过销售硬件产品并提供可选软件订阅实现盈利,公司目前已有稳定盈利。
- 开源原因:热爱开源工作,可杜绝寻租行为。
- 关于克隆:开源生态的繁荣(如openpilot的分支)有助于扩大整体生态,只要产品优质、价格公道,公司仍能保持竞争力。
- 与传统车企合作:目前产品品质是进入更多车型的主要瓶颈,且车企能否提供优于opendbc的车辆接口尚不明确。未来openpilot可能通过Tier1供应商集成或由新制造商率先采用。
26. Approximating sum types in Python with Pydantic (blog.yossarian.net)
27. Apple Prototypes and Corporate Secrets Are for Sale Online–If You Know Where (www.wired.com)
主要发现
安全研究员Matthew Bryant在eBay上以38美元购买了一个已停产的Apple Time Capsule,意外发现其中包含2010年代欧洲Apple Stores的主要备份服务器数据,涉及服务票据、员工银行账户信息、内部文档和电子邮件。Bryant在Defcon安全会议上展示了此项研究。
研究方法
Bryant进行了一项数月的项目,通过计算机视觉分析二手电子产品列表(如eBay、Facebook Marketplace和中国闲鱼平台),以识别曾属于企业IT的设备。他构建了一个光学字符识别(OCR)系统,利用12部旧iPhone SE和Apple的Live Text功能扫描列表照片,检测库存标签、条形码或其他公司标识。系统监控新列表,当发现疑似企业设备时发送警报。
具体发现
- Time Capsule:设备底部标签显示“Property of Apple Computer, Expensed Equipment”。Bryant分析数据后通知Apple,伦敦安全办公室要求其寄回设备。
- iPhone 14原型机:开发者用内部原型机,运行特殊iOS版本,含调试功能,售价165美元。此类设备受安全研究人员追捧,但Apple仅向有限群体提供类似设备。
- Foxconn工厂Mac Mini:通过分析中国列表,Bryant发现一台标有Foxconn标签的Mac Mini,曾用于质量测试线。尽管设备有钻孔破坏,但数据存储区域可能未受损。经取证实验室恢复,硬盘包含Apple工厂测试软件、内部接口及Foxconn凭据和日志。Bryant将设备归还Apple。
公司警告与启示
研究指出,企业设备流失不可避免,强调资产管理和退役程序的重要性。对于黑客和消费者,二手市场可能出现企业秘密设备。Bryant认为,任何财富500强公司的设备最终都可能流入二手市场。
28. ChatGPT unexpectedly began speaking in a user's cloned voice during testing (arstechnica.com)
ChatGPT测试中意外使用用户克隆声音
核心问题
在测试中,ChatGPT意外地用用户克隆的声音发声,这暴露了音频生成模型的安全隐患。类似于“提示注入”攻击,用户可能通过音频指令诱导AI模仿未授权的声音。
OpenAI的防护措施
为应对此问题,OpenAI采用了独立的输出分类器来检测异常声音生成。他们声称该系统能100%捕获与系统声音的“有意义偏差”,将未授权声音生成的风险降至最低。这种防护类似于“暴力破解保护”,旨在防止GPT-4o的高级语音模式模仿任意声音。
专家观点
独立AI研究员Simon Willison认为,OpenAI的防护机制相当健全,难以被欺骗使用未授权声音。但他也指出,这种限制虽然必要,却也让模型失去了部分潜力,例如模仿多样声音、唱歌等功能。Willison预测,其他公司(如ElevenLabs)将在未来提供类似甚至更自由的语音克隆技术,用户很快就能在自己的设备上运行这些模型。
未来展望
音频合成技术正在快速发展。尽管OpenAI出于安全考虑限制了模型能力,但相关技术将不可避免地被其他来源释放。这预示着未来将面临一个“奇怪的音频世界”,其中语音克隆既带来便利也伴随风险。
29. Introduction to Golang Preemption Mechanisms (unskilled.blog)
Go 语言预抢占机制简介
预抢占是 Go 运行时(runtime)确保公平性的核心机制之一,它通过在各个 goroutine 之间分配 CPU 时间,防止某个 goroutine 长时间占用资源而导致其他 goroutine 饥饿或调度延迟。
历史背景
- Go 1.2 之前:运行时不具备预抢占能力,goroutine 必须主动让出 CPU(如通过
runtime.Gosched()或进行 I/O 操作),否则可能独占资源。 - Go 1.2(2013年):引入了同步预抢占,首次实现了强制的公平调度。
- Go 1.14(2020年):引入了异步预抢占,以解决编译器优化(如函数内联)导致紧凑循环无法被同步预抢占的问题。
预抢占的类型与实现
1. 同步预抢占
同步预抢占通过让 goroutine 在安全点主动检查并响应预抢占请求来实现。主要利用函数调用时的栈边界检查作为安全点。
- 机制:
- 当运行时决定预抢占某个 goroutine 时,它会将该 goroutine 的
stackguard0字段设置为特殊值stackPreempt(0xfffffade)。 - 在 goroutine 的下一个函数调用的序言(prologue) 阶段,编译器生成的栈边界检查代码会发现当前栈指针
SP大于这个被“污染”的stackguard0值,从而认为栈空间不足。 - 这会触发调用
runtime.morestack,最终进入runtime.newstack函数。 runtime.newstack检查stackguard0是否为stackPreempt。如果是,则调用gopreempt_m函数,该函数的行为等同于 goroutine 自身调用了runtime.Gosched(),从而让出执行权。
- 当运行时决定预抢占某个 goroutine 时,它会将该 goroutine 的
- 优点:开销极低,因为栈边界检查本身是函数调用必需的。
- 局限性:对于没有函数调用的紧凑计算循环无效,因为没有函数序言来触发检查。
2. 异步预抢占
异步预抢占用于解决同步预抢占无法处理的紧凑循环等场景,它不依赖于 goroutine 主动检查,而是通过向线程发送信号来强制中断。
- 机制:
- 发送信号:运行时函数
preemptM向运行目标 goroutine 的线程(M)发送SIGURG信号。 - 信号处理:线程的信号处理函数
sighandler捕获SIGURG信号,并调用doSigPreempt。 - 检查与注入:
doSigPreempt检查当前 goroutine 是否可被异步预抢占(wantAsyncPreempt)以及当前程序计数器(PC)是否处于异步安全点(isAsyncSafePoint)。如果条件满足,它会修改线程的上下文,将 PC 寄存器指向asyncPreempt函数,并压入原来的返回地址,从而“注入”一个函数调用。 - 执行抢占:当信号处理返回后,线程会从
asyncPreempt开始执行。该函数会保存所有寄存器状态,然后调用asyncPreempt2,最终同样通过gopreempt_m让出执行权。
- 发送信号:运行时函数
- 安全点:异步安全点的检查比同步安全点更严格,需要确保在任意指令中断后,运行时的垃圾收集器等组件能够安全地扫描和修改 goroutine 的栈。
两种机制的关系
运行时会先尝试同步预抢占(污染 stackguard0),并给予 goroutine 一小段时间(约 10 毫秒)来响应。如果在这段时间内,goroutine 因为执行紧凑循环而未能触发同步预抢占(即未进入函数序言),运行时便会升级为异步预抢占,发送 SIGURG 信号进行强制中断。
30. MVSplat: Efficient 3D Gaussian Splatting from Sparse Multi-View Images (donydchen.github.io)
MVSplat:从稀疏多视角图像高效生成3D高斯分布
概述
MVSplat是一种高效的前馈模型,能够从稀疏的多视角图像输入中,直接预测出高质量的3D高斯分布。其核心是通过平面扫描构建成本体积表示,利用跨视角特征相似性为深度估计提供精确的几何线索。该模型在仅依赖光度监督的情况下,联合学习高斯中心及其他高斯原始参数(如不透明度、协方差和颜色)。在RealEstate10K和ACID大规模基准测试中,MVSplat达到了最先进的性能,并具有最快的前馈推理速度(22 fps)。与最新技术pixelSplat相比,MVSplat的参数量减少10倍,推理速度快2倍以上,同时提供了更高的外观和几何质量以及更好的跨数据集泛化能力。
核心技术
- 多视角特征提取与交互:输入多视角图像后,首先通过一个多视角Transformer提取特征。该Transformer包含自注意力层和交叉注意力层,用于在不同视角间交换信息。
- 成本体积构建与优化:利用平面扫描技术为每个视角构建成本体积。将Transformer特征与成本体积拼接,输入到一个带有跨视角注意力的2D U-Net中,用于优化成本体积并预测每个视角的深度图。
- 3D高斯参数预测与融合:将每个视角的深度图反投影到3D空间,并通过一个简单的确定性合并操作,生成3D高斯分布的中心。高斯分布的其他参数(不透明度、协方差、颜色)与深度图联合预测。
- 新视角渲染:最后,使用溅射操作从预测的3D高斯分布中渲染出新视角的图像。
性能与优势
- 效率:前馈推理速度快(22 fps),模型参数量比pixelSplat少10倍。
- 质量:生成的3D高斯原语质量更高,能够产生更优的外观和几何重建效果。
- 泛化能力:由于成本体积捕获的是特征间的相对相似性(而非绝对尺度),因此模型具有优异的跨数据集泛化能力。例如,在仅使用室内场景数据集(RealEstate10K)训练后,可直接在物体中心场景(DTU)和户外场景(ACID)上测试并表现良好。
与现有技术对比
- 相比pixelSplat:MVSplat避免了使用数据驱动回归架构预测高斯中心,从而解决了pixelSplat在几何重建差和跨数据集泛化能力有限的问题。
- 相比MuRF:MuRF是基于前馈NeRF的最新模型,依赖3D体积和(2+1)D CNN,训练成本高昂且渲染速度相对较慢,而MVSplat更高效。
结论
MVSplat通过引入基于平面扫描的成本体积表示,成功地实现了从稀疏多视角图像高效、准确地前馈预测3D高斯分布,在推理速度、模型大小、重建质量和泛化能力方面均展现了显著优势。
31. GIL Become Optional in Python 3.13 (geekpython.in)
# Python 3.13 中的全局解释器锁(GIL)变得可选
Python 3.13 引入了一个重大的实验性新特性:**自由线程模式**,允许禁用全局解释器锁(GIL),从而支持线程更并发地运行。
## 什么是 GIL?
GIL 是 CPython 解释器使用的一种机制,它确保一次只有一个线程执行 Python 字节码。虽然这简化了内存管理,但也限制了多线程程序的并行性能。
## 如何禁用 GIL(实验性)
此功能目前为实验性。用户可以通过以下方式尝试:
1. **安装**:下载 Python 3.13 Beta 版,安装时勾选 **“free threaded binaries (experimental)”** 选项。
2. **构建配置**:使用 `--disable-gil` 选项配置 Python 构建。
3. **运行时控制**:
* 使用环境变量 `PYTHON_GIL`(设为 `0` 禁用,`1` 启用)。
* 使用命令行选项 `-X gil`(`-X gil=0` 禁用,`-X gil=1` 启用)。
```bash
# 禁用 GIL 运行
python3 -X gil=0 sample.py
# 启用 GIL 运行
python3 -X gil=1 sample.py
```
## 检查 GIL 状态
可以通过以下代码检查解释器是否构建为支持禁用 GIL,以及当前进程的 GIL 是否启用:
```python
import sysconfig
import sys
# 检查构建配置 (返回 0 表示 GIL 启用,1 表示已禁用)
print(sysconfig.get_config_var("Py_GIL_DISABLED"))
# 检查当前运行时的 GIL 状态 (返回布尔值)
print(sys._is_gil_enabled())
性能对比:有 GIL vs 无 GIL
文章通过一个计算阶乘的多线程程序 (gil.py) 进行了性能测试,对比了单线程、多线程和多进程任务的执行时间。
Python 3.12(有 GIL):
- 单线程:9.04 秒
- 多线程:8.21 秒(提升有限)
- 多进程:5.64 秒(有明显提升)
Python 3.13 Beta(无 GIL):
- 单线程:9.28 秒(略有退化)
- 多线程:4.86 秒(性能大幅提升)
- 多进程:6.14 秒(性能略有退化)
关键结论
- Python 3.13 提供了实验性支持,允许用户选择性禁用 GIL。
- 禁用 GIL 后,多线程 CPU 密集型任务的执行效率得到了显著提升(在示例中提升约 40%)。
- 该特性仍处于实验阶段,单线程和多进程任务的性能在测试中出现了轻微退化。
32. Transformer Explainer (poloclub.github.io)
Transformer Explainer 文章摘要
核心概述
Transformer是一种从根本上改变了人工智能方法的神经网络架构,于2017年在论文《Attention is All You Need》中首次提出。它已成为深度学习模型的主流架构,驱动着OpenAI的GPT、Meta的Llama和Google的Gemini等文本生成模型。除了文本,Transformer还应用于音频生成、图像识别、蛋白质结构预测甚至游戏领域,展现了其跨领域的多功能性。
核心工作原理
文本生成式Transformer模型基于下一词预测原则运行:给定用户的文本提示,预测最可能出现的下一个token(单词或子词)。其核心创新和威力在于使用自注意力机制,这使得它们能够比以往架构更有效地处理整个序列并捕获长距离依赖关系。
Transformer架构(以GPT-2 small为例)
每个文本生成式Transformer由三个关键组件构成:
1. 嵌入层
将输入文本转换为模型可理解的数值向量表示。过程包括:
- 分词:将文本拆分为token(单词或子词)。
- Token嵌入:每个token表示为768维向量,这些嵌入向量捕获语义含义。
- 位置编码:编码token在序列中的位置信息。
- 最终嵌入:将token嵌入和位置编码相加,得到同时包含语义和位置信息的最终表示。
2. Transformer块
模型的核心处理单元,由多个堆叠的块组成(GPT-2 small有12个)。每个块包含:
- 多头自注意力机制:使token能够与其他token“交流”,从不同角度捕获语法和语义关系。其计算包括:
- 生成查询、键、值(Q, K, V)矩阵。
- 将Q、K、V分割成多个头(GPT-2 small有12个头)进行并行学习。
- 进行掩码自注意力计算:通过点积、缩放、掩码(防止查看未来token)和softmax得到注意力权重,这些权重乘以值矩阵并拼接所有头的输出。
- 多层感知机层:一个前馈网络,独立处理每个token。它通过将表示投影到更高维度(768 -> 3072)再压缩回原维度来丰富模型的表征能力。
3. 输出概率
经过所有Transformer块处理后,最终输出通过一个线性层投影到词汇表大小(50,257)的空间,得到每个token的logit。通过softmax函数将这些logit转换为概率分布,用于预测下一个token。温度、top-k和top-p等超参数用于控制采样过程,平衡输出的确定性与多样性。
辅助架构特性
虽然对理解核心概念不那么关键,但以下特性对模型性能和训练至关重要:
- 层归一化:稳定训练过程,加速收敛。
- Dropout:通过随机丢弃神经元防止过拟合。
- 残差连接:通过跳跃连接缓解梯度消失问题,使深层网络训练更容易。
交互功能
Transformer Explainer提供了交互式界面,允许用户:
- 输入自定义文本序列,查看模型的处理和预测过程。
- 探索注意力权重和中间计算。
- 使用温度滑块控制预测的随机性。
- 调整top-k和top-p采样参数。
- 与注意力图交互,查看模型如何关注序列中的不同token。
实现方式
该解释器在浏览器中直接运行一个实时的GPT-2 (small) 模型。模型基于Andrej Karpathy的nanoGPT项目的PyTorch实现转换为ONNX Runtime格式。界面使用JavaScript构建,采用Svelte作为前端框架,D3.js用于创建动态可视化,数值随用户输入实时更新。
33. Firefly III: An open-source personal finance manager (github.com)
Firefly III 项目摘要
项目简介
Firefly III 是一款源自欧盟(荷兰)的免费开源个人财务管理软件。它强调数字主权,旨在帮助用户通过自托管的方式安全地管理个人财务,实现对资金的洞察与控制,摆脱对金钱的焦虑。
核心目的
该工具的核心原则是“了解资金去向,从而控制资金流向”。通过精确跟踪收入和支出,帮助用户制定预算、减少不必要的开销并增加储蓄,从而获得财务上的灵活性和安全感。
主要功能
Firefly III 提供了丰富的财务和技术功能:
- 隐私与安全:完全自托管且数据隔离,未经明确允许绝不连接外部服务器;支持双因素认证(2FA)以增强安全性。
- 财务管理:采用复式记账系统;支持预算、分类、标签、定期交易以及基于自定义规则的交易处理;提供“存钱罐”目标储蓄功能。
- 数据与报告:支持通过外部工具导入数据;提供多种收支报告、清晰的视图、便捷的导航以及丰富的数据图表;支持全球任意货币。
- 技术特性:提供覆盖几乎所有功能的 REST JSON API;提供官方 Docker 镜像。
目标用户
适用于希望追踪财务状况但拒绝将敏感财务数据上传至云端的用户。目标群体通常具备一定的技术背景,青睐开源软件,并愿意自行配置和维护自托管服务器。
部署与生态系统
- 部署方式:提供包含示例数据的在线演示站点,并支持多种安装和部署方式,包括自有服务器、Docker、Kubernetes、Softaculous、AMPPS、Cloudron、Lando 和 Yunohost。
- 生态系统:拥有活跃的周边生态,开发者可基于其 REST API 构建和集成各种第三方工具。
开源、贡献与支持
- 许可证:基于 GNU Affero 通用公共许可证 v3 (AGPLv3) 开源。
- 社区贡献:欢迎开发者参与修复 Bug、构思新功能、多语言翻译以及代码质量改进(项目集成了 Sonarcloud 代码扫描)。
- 沟通渠道:可通过邮件、GitHub Discussions、GitHub Issues、Gitter 和 Mastodon 获取技术支持或联系开发者。
- 项目赞助:作为个人副业项目,接受通过 Patreon、GitHub Sponsors、ko-fi 和 Liberapay 等渠道的资金赞助,并获得 TestMu AI 等机构的测试资源支持。