2024-08-18

29 篇热帖

1. Magic Wormhole: get things from one computer to another, safely (github.com)

Magic Wormhole:安全跨计算机传输文件

核心功能

Magic Wormhole 提供了一个命令行工具 wormhole,用于在计算机之间安全传输任意大小的文件、目录或短文本。它通过生成简短、易读的“虫洞代码”来标识传输两端,发送方生成代码,接收方输入相同代码即可建立连接。

工作原理

  • 代码特点:代码由发音清晰的单词列表组成,简短且人类易读(例如“7-guitarist-revenge”)。
  • 便捷性:接收端支持 Tab 补全,通常只需输入代码的前几个字符。
  • 安全性:代码为一次性使用,无需记忆,确保传输临时性和隐私性。

技术细节

  • 服务器依赖:程序依赖两个独立服务器——邮箱服务器(用于中继代码)和传输中继(用于数据传输),其源代码分别托管在不同仓库。
  • 兼容性:库兼容 Python 3.10 至 3.12 版本。
  • 许可证:采用 MIT 许可证,详见项目中的 LICENSE 文件。

安装与使用

  • 系统支持:许多操作系统已内置 Magic Wormhole 软件包。
  • 手动安装:如需独立安装,可参考官方文档(安装指南 或项目 docs/ 子目录)。
  • 进一步资源:完整文档可通过 Read the Docs 访问,另有 PyCon 2016 演示的幻灯片和视频。
2. Mpv – A free, open-source, and cross-platform media player (mpv.io)

mpv – 免费、开源且跨平台的媒体播放器概述

mpv 是一款免费、开源且跨平台的命令行媒体播放器。它支持多种媒体文件格式、音视频编解码器和字幕类型。

主要特性包括:

  • 脚本功能强大:通过脚本可扩展播放器功能,社区维护着大量用户脚本。
  • 屏幕控制器:播放界面简洁,提供基础视频控制功能的微型控制器。
  • 高质量视频输出:基于 OpenGL、Vulkan 和 D3D11 的输出,支持高品质缩放算法、色彩管理、帧同步、插帧、HDR 等功能。
  • GPU 视频解码:跨平台支持硬件解码 API,可运行时按需启用。
  • 可嵌入性:提供简洁的 C API,便于将 mpv 作为库集成到其他应用中。
  • 活跃开发:项目持续进行代码重构、优化和功能增强,鼓励用户贡献代码或提出功能请求。
3. Dasel: Select, put and delete data from JSON, TOML, YAML, XML and CSV (github.com)

Dasel(Data-Select)是一个用于查询、修改和转换数据结构的命令行工具与库,支持JSON、YAML、TOML、XML、CSV、HCL、INI、KDL等格式。它提供统一的语法遍历和更新数据,适用于开发、运维和数据处理任务。

核心功能

  • 多格式支持:兼容JSON、YAML、TOML、XML、CSV、HCL、INI、KDL等常见数据格式。
  • 统一查询语法:使用相同的选取器访问不同格式的数据。
  • 查询与搜索:通过直观语法提取值、列表或结构。
  • 原地修改:直接在文件中更新、插入或删除值。
  • 格式转换:支持在不同数据格式之间无缝转换(如JSON转YAML)。
  • 脚本友好:适合在Shell脚本和流水线中集成。
  • 库支持:可导入Go项目使用。

安装方法

  • Homebrew(macOS/Linux)brew install dasel
  • Go Installgo install github.com/tomwright/dasel/v3/cmd/dasel@master
  • 预构建二进制文件:从GitHub Releases页面下载Linux、macOS或Windows版本。
  • 其他安装选项详见官方文档。

Shell补全与帮助

  • 支持Bash、Zsh、Fish、PowerShell的Tab补全,可通过命令生成并加载补全脚本。
  • 可生成Man手册页(dasel man)。

基本用法示例

  • 选择值echo '{"foo":{"bar":"baz"}}' | dasel -i json 'foo.bar' 输出 "baz"
  • 修改值:通过赋值操作更新数据,如 foo.bar = "bong",使用 --root 可输出完整文档。
  • 基于条件更新:如将数组每个元素翻倍:each($this = $this*2)
  • 格式转换cat data.json | dasel -i json -o yaml
  • 递归搜索..bar 查找所有嵌套对象中的 bar 键。
  • 条件搜索search(bar == "baz") 查找匹配条件的值。

文档与许可

  • 完整文档提供于 daseldocs.tomwright.me。
  • 项目采用MIT许可证,欢迎贡献。
4. Notris: A Tetris clone for the PlayStation 1 (github.com)

本文是一篇关于在2024年为PlayStation 1(PS1)开发一款名为《Notris》的俄罗斯方块克隆游戏的开发记录。

项目动机与背景 作者偶然获得了一台珍贵的黑色PlayStation 1(Net Yaroze版),这是一台能够运行自制游戏的特殊主机。这激发了他探索在真实PS1硬件上使用C语言开发游戏的兴趣,旨在体验90年代经典的开发方式,但采用了现代的开源工具链。

技术选型与准备 作者选择了开源的PSNoobSDK作为开发库,因其文档完善、设置简单且无版权风险。开发过程分为三个阶段:

  1. 原型阶段:使用JavaScript在Web端快速实现游戏核心逻辑,确保设计正确。
  2. C语言移植:将JS原型移植到C语言,并使用SDL2库在PC(MacOS)上编译运行,以熟悉C语言并实现快速调试。
  3. PS1适配:将游戏适配到PS1平台,主要解决内存管理(PS1的malloc不可靠)和图形管道等特定于平台的问题。

PS1图形系统详解 文章深入解释了PS1的图形渲染原理:

  • VRAM:一个1024x512的16位像素画布,用于存储帧缓冲区和纹理。
  • 双缓冲渲染:使用两个帧缓冲区交替进行绘制和显示,目标帧率通常为30fps。
  • GPU工作方式:PS1的GPU接收二维的图形“包”(命令列表),不进行3D变换(由GTE协处理器负责)。它通过一个排序表来管理绘制顺序,以实现画家算法(后绘制的覆盖先绘制的,无Z缓冲)。文章给出了典型的帧循环伪代码,并解释了相关API的使用。

游戏实现细节

  • 资源管理:使用RenderContext结构体管理两个RenderBuffer,每个缓冲区包含显示/绘制环境、排序表和图元缓冲区。
  • 文本显示:由于PS1无内置字体系统,作者自制了TIM格式的字体纹理,并通过映射纹理到四边形来渲染文本。
  • UI与方块设计:为游戏界面(如游戏框和俄罗斯方块)设计了具有立体感的视觉样式。方块旋转采用硬编码的位图数组表示(ShapeBits),而非实时计算,以获得更好的视觉效果。
  • 随机数种子:由于PS1没有实时时钟,通过检测标题画面时玩家按下“开始”键的时刻来生成随机数种子。
  • 标题画面:使用静态变量实现一个标题文字逐渐“溶解”显示的动画效果。
  • 开机Logo:解释了如何通过提供从光盘ISO中提取的授权数据文件,来显示标准的PlayStation开机动画。

构建与运行 作者在刻录CD-R光盘真机运行时遇到了挑战,最终通过使用高质量的JVC Taiyo Yuden刻录盘和一台改装过(可读取CD-R)的灰色PlayStation主机成功。游戏最终在真实PS1硬件上顺利启动并运行。

总结 作者通过这个项目,不仅成功地用C语言为PS1开发了一款完整可玩的自制游戏,还深入理解了PS1的底层硬件和图形系统,并享受到了克服低级编程挑战所带来的成就感。

7. Are you better than a language model at predicting the next word? (joel.tools)

这篇文章探讨了人类与语言模型在预测下一个词这一核心任务上的能力对比。它指出,尽管现有许多基准测试衡量语言模型在人类任务上的表现,但文章的核心问题是:人类自身在预测下一个词这项语言模型的典型任务上,表现如何? 文章旨在引发读者对这一对比的思考。

8. Postmortem of my 9 year journey at Google (tinystruggles.com)

作者在谷歌9年职业生涯回顾总结

职业历程概览

作者于2015年以实习身份加入谷歌伦敦,后在都柏林全职加入,历经Bigtable、Persistent Disk和GCE虚拟机等多个核心产品团队。从L3工程师起步,在9年内快速晋升至L6(高级工程师),并曾担任技术负责人和团队经理。

加入谷歌的初衷

作者被谷歌顶尖的工程技术、国际化的工作环境、优厚的薪资福利以及学习机会所吸引。最初计划将谷歌作为未来创业的“跳板”,积累技能与资金。

核心收获与成就

  • 技术能力:深入掌握分布式系统(如Bigtable、Persistent Disk),提升了危机处理和调试能力。
  • 职业发展:晋升迅速(例如9个月内从L3升至L4),最终达到L6职级,获得了高薪和股权回报。
  • 领导力:从个人贡献者转型为管理者,独立组建团队并负责多个关键项目。
  • 生活方式:享受了谷歌全面的福利(如健身房、按摩、餐食等),并有机会通过60%-80%工作时间制度平衡生活。
  • 人际关系:建立了广泛的工作网络,结识了优秀的同事。

离开谷歌的主要原因

  1. 职业天花板:L7职位偏重政治而非工程,本地管理岗名额有限,晋升路径受阻。
  2. 兴趣转移:对谷歌技术的“迷恋感”减退,行业技术差距缩小,实际工作内容未能持续激发热情。
  3. 公司环境变化:预算削减、裁员、人才向低成本地区转移、安全合规开销增加,影响了工作体验和本地发展机会。
  4. 文化挑战:美国中心主义使得非美国员工易感孤立;SRE的7×24小时待命和高压运维对作者性格(偏乐观和创造型)不匹配。
  5. 认知负荷过高:谷歌内部系统庞杂,新员工需长时间熟悉,团队间关系复杂,决策效率受影响。
  6. 管理支持不足:高层管理者常因工作过载而缺乏反馈与指导,团队扩张承诺多次落空。

经验教训与反思

  • 积极方面:自主权充足、推动了工作生活平衡、财务目标超额完成、提升了软技能并积累了管理经验。
  • 改进空间:作者认为应更早离开SRE岗位、更积极申请调岗或 site、更多利用公司教育资源(如斯坦福在线课程)。

未来计划

作者计划进行至少6个月的休假,用于探索、放松和学习新方向,寻找更符合个人兴趣和价值观的职业路径。

关键时间线摘要

  • 2015:伦敦应用引擎SRE实习
  • 2015-2019:都柏林Bigtable SRE,快速晋升至L5并担任技术负责人
  • 2019-2022:Persistent Disk SRE,组建HyperDisk团队并升至L6,后转型为经理
  • 2022-2024:GCE虚拟机开发部门,从个人贡献者转为管理6人团队,主导内部项目成功

总结:作者在谷歌获得了卓越的技术成长、财务回报和领导力锻炼,但随着职业发展瓶颈、公司文化变化以及个人兴趣转移,最终选择离开,开启新的探索阶段。这段经历体现了大型科技公司中个体在技术、管理、文化之间的权衡与成长。

9. Blockbuster Video VHS insert template (github.com)

这是一个可编辑的Inkscape模板,用于制作Blockbuster Video VHS塑料盒的插入卡。该模板并非力求还原某一特定时期的精确设计,而是旨在捕捉上世纪80年代末至90年代期间Blockbuster盒体设计的整体风格。

主要可编辑元素与字体说明

  • 模板中的可修改字段主要使用 Liberation SansLiberation Sans Narrow 字体。若无这两款字体,可使用类似的无衬线字体替代。
  • 背部简介区域通常使用 Nimbus Mono PS 等等宽字体(类似打字机风格)。但根据时期不同,有时也会使用无衬线字体,或后期改为直接显示影片信息。
  • “BLOCKBUSTER VIDEO”标志使用 ITC Machine Std 字体,条形码使用 Libre Barcode 128 字体。模板已将这些元素分离到独立图层,并提供了“预渲染”的替代图层,因此无需安装相应字体。
  • 模板还包含后期更简洁的“BLOCKBUSTER”标志的备用图层。

条形码格式解析 条形码的格式随年代变化,当前模板所示格式含义如下:

  • 33:租赁类别码(也可能用于其他服务或商品)。
  • 55740:门店的5位数字编号。
  • 809656:Blockbuster内部用于标识特定片名的编号。
  • 003:该片名在该门店的副本序列号(例如,若门店有10份副本,序列号即为001至010)。
  • “Rent Code”含义不明,已观察到的代码有“B”、“N”、“T”。

其他设计细节

  • “FOX 2000306”是特定片名的片厂目录号(例如模板中对应《搏击俱乐部》)。
  • 标题区可只显示片名,也可能包含额外信息,常见格式如“《搏击俱乐部》-1999-布拉德·皮特”,或标注“新片-《搏击俱乐部》”。
  • 分级标识(如“R”级)有时会加粗,有时则不加。
  • 模板中包含一个隐藏图层,用于指示书脊位置及其与各元素的对齐关系。书脊部分的条形码设计上会延伸至背面。
  • 为获得更真实的体验,可在打印前将“条形码”和“可填写文本”图层整体组合,并相对于基础设计进行随机位移。
  • Blockbuster也曾将VHS盒用于SNES和世嘉创世纪卡带的发行。此类情况下,类别会显示为“GAMES SNES”或“GAMES GENESIS”,分级为“N/A”,且标题通常带有“SNES-”或“GENESIS-”前缀。

模板来源与授权 该模板由 Ryan Finnie 复制创作。针对已消亡公司设计的半复制品,其法律地位尚不明确,但本模板以 CC-BY-SA 4.0国际 许可证发布。作者还分享了一段个人经历:模板中描绘的威斯康星州绿湾门店地址承载着他愉快的回忆,他曾在1995年参加该店举办的第二届Blockbuster世界电子游戏锦标赛,并在《超级大金刚》比赛卡带项目中获得任天堂部门的第二名。

辅助信息 关于Blockbuster破产(2010年)时的门店地址和编号列表,可参考相关的破产文件。若需查询特定门店的电话号码,则需进行额外搜索。

10. Getting back into C programming for CP/M (kevinboone.me)

文章总结了作者在CP/M系统上使用40年前的Aztec C编译器进行C语言编程的经验与挑战。核心内容包括:

1. 开发背景与动机

  • 作者出于怀旧和兴趣,重新投身CP/M编程,甚至购置了真实的Z80硬件。
  • 他认为使用现代交叉编译器对CP/M开发而言是“作弊”,倾向于使用CP/M原生工具链,以保持代码在原始系统上的可维护性。

2. Aztec C编译器特点

  • 工具链:编译器、汇编器和链接器体积均约20KB,输出8080汇编代码(兼容Z80但未利用其增强特性)。
  • 语言规范:遵循K&R语法,而非ANSI C。函数声明、变量作用域等与现代实践不同(如变量必须在块开头声明,不支持const)。
  • 数据类型
    • int为16位,long为32位,指针为16位。
    • 浮点运算由CPU模拟,性能较低。
  • 标准库:功能有限,缺少现代库中的基础函数(如strdup),需自行实现。

3. CP/M编程特有挑战

  • 命令行处理:参数全大写,通配符(如*.txt)需手动扩展。
  • 重定向:通过编译器库支持输出重定向,但仅适用于标准I/O函数。
  • 系统接口:需直接调用BDOS/BIOS实现文件枚举等高级功能,涉及文件控制块(FCB)和DMA缓冲区操作。
  • 内存管理:堆栈空间有限,自动变量过大可能异常;malloc需严格检查返回值。

4. 性能优化与测试

  • 效率敏感:Z80 CPU性能低,需手动优化(如避免重复计算strlen,用一维索引遍历二维数组)。
  • 测试策略
    • 强调在真实硬件上测试,因模拟器运行过快易掩盖性能问题。
    • 借助现代工具(如GCC、Valgrind)进行部分编译检查和内存调试。

5. 总结

  • 使用古董编译器开发CP/M软件接近于汇编级编程,需深入理解平台细节并自行优化。
  • 虽然工具受限且效率挑战大,但这一过程被视为保持复古技术活力的重要实践。

:作者后续转向使用Hi-Tech C编译器以更好地利用Z80指令集。

13. pg_duckdb: Splicing Duck and Elephant DNA (motherduck.com)

文章标题:pg_duckdb:融合鸭象基因

核心内容摘要:

pg_duckdb 是一个开源的 PostgreSQL 扩展,它将 DuckDB 的高性能分析引擎嵌入到 PostgreSQL 中,旨在让广受欢迎的事务型数据库 PostgreSQL 具备强大的分析查询能力。

1. 问题与解决方案

  • PostgreSQL 的局限: PostgreSQL 在事务处理和单行操作上表现出色,但在处理需要扫描大量数据的分析查询时性能较差。
  • DuckDB 的优势: DuckDB 是一个嵌入式 OLAP 数据库,采用向量化查询引擎,能高效地批量处理数据,专为分析场景优化。
  • 解决方案: pg_duckdb 将两者结合,允许用户在不离开 PostgreSQL 环境的情况下,直接利用 DuckDB 引擎加速分析查询。

2. 项目概况与联盟

  • 开源与许可: 该项目以 MIT 许可证完全开源,知识产权归 DuckDB 基金会所有,确保其开源性。
  • 合作联盟: 为克服技术挑战,一个由多家公司组成的联盟共同推进项目,各方贡献独特技能:
    • DuckDB Labs: 负责修改 DuckDB 内核以实现与 PostgreSQL 的无缝集成。
    • MotherDuck: 提供云端 DuckDB 运行经验,优化扩展在 PostgreSQL 内的运行。
    • Hydra: 项目发起者,贡献构建 PostgreSQL 扩展和存储的知识。
    • Neon: 提供生产环境经验和存储对接支持。
    • Microsoft: 贡献其深厚的 PostgreSQL 专业知识。

3. MotherDuck 的动机与集成

  • 生态支持: 推动 DuckDB 生态普及,让更多 PostgreSQL 用户接触并使用 DuckDB。
  • 无缝云端扩展: 扩展支持直接查询存储在 MotherDuck 云服务中的数据,并能实现本地 PostgreSQL 数据与云端数据的联合查询。系统会自动决定最优执行位置。
  • 数据卸载与协作: 用户可轻松将 PostgreSQL 数据写入 MotherDuck 进行分析,无需复杂的导出导入流程,从而将分析负载卸载到云端,同时保持查询语法不变。

4. 技术特点与路线图

  • 当前能力: 扩展已可用于查询数据湖、对 PostgreSQL 数据进行分析以及将数据存储在本地 DuckDB 数据库。
  • 未来关键功能:
    • 无缝的 MotherDuck 支持。
    • PostgreSQL 原生存储支持,以融入现有备份与复制。
    • 完整的 PostgreSQL 数据类型和函数兼容。
    • 语义兼容性(如精确处理、JSON 处理等)。
    • 增强的数据湖(如 Iceberg, Delta Lake)集成能力。

5. 开源策略 项目选择早期公开、透明开发,设有公开路线图,并欢迎社区贡献、反馈和建议,旨在通过开放协作解决复杂的技术挑战。

14. Alien – CUDA-powered artificial life simulation program (github.com)

ALIEN (Artificial LIfe ENvironment) 是一款基于CUDA的2D粒子引擎人工生命模拟工具,专为柔体和流体的大规模实时模拟而优化。该项目旨在探索生物进化和系统复杂性增长的条件,同时提供用户友好且具游戏化体验的现代界面。

核心机制与主要功能

  • 物理与图形引擎:模拟完全在GPU上通过CUDA运行,支持柔体/刚体力学、流体、热耗散和损伤等物理特性。利用OpenGL与CUDA互操作进行实时渲染,支持用户在模拟运行时进行实时交互。
  • 人工生命引擎:多细胞生物被模拟为粒子网络,其高级功能(如传感器、肌肉、武器等)由神经网络编排控制。支持遗传系统、细胞级后代构建、自定义细胞类型以及空间变化的模拟参数。
  • 编辑与网络工具:提供粒子图形编辑器、基因编辑器、几何/自由绘图工具及批量操作功能。内置网络浏览器,支持模拟文件的上传、下载和星级评分。

应用场景

  • 娱乐与探索:提供类似游戏的体验,用户可观察自我复制机器的进化,或通过鼠标与海量机器进行物理交互。
  • 学术研究:用于研究简单组件如何涌现复杂性或生命结构、生态系统如何适应环境变化,以及探索开放式进化的条件。
  • 生成艺术:利用进化作为创造力,生成新颖的形态和行为。

技术架构与系统要求

  • 硬件与系统:需配备计算能力(Compute Capability)6.0及以上的NVIDIA显卡。安装路径及系统用户名必须为纯英文,确保程序拥有目录写入权限,并在多显卡环境中正确配置高性能独立显卡。
  • 源码构建:基于CMake和vcpkg自动化构建,依赖CUDA Toolkit 11.2+及兼容的C++工具链(如GCC 9.x+或MSVC v142+)。
  • 命令行界面 (CLI):提供无GUI的CLI工具,接收模拟文件与时间步参数,输出结果文件与CSV统计数据,适用于性能测试和自动化批量评估。

开源与许可

项目主要由Christian Heinemann开发维护,采用 BSD 3-Clause 许可证。欢迎社区通过GitHub参与提交模拟内容、修复Bug、优化代码或完善文档。项目底层依赖Dear ImGui、Boost、GLFW、cereal等众多外部开源库。

15. On Being a Senior Engineer (2012) (www.kitchensoap.com)

这篇文章探讨了“高级工程师”的真正含义,强调其核心并非单纯的技术资历或头衔,而是表现为一种“工程成熟度”。作者指出,Web运维领域尚属年轻,许多被冠以“高级”头衔的工程师可能在行为上并不成熟。

成熟工程师的核心特质:

  1. 主动寻求并善于处理批评:成熟工程师会主动寻求对其设计的建设性批评,因为他们明白任何产出都离不开团队协作和同行评审。他们能区分对工作的批评和对个人的攻击,并鼓励对工作成果进行严格审视。
  2. 重视人际感知与合作:技术能力固然重要,但没人愿意与一个难以合作的人共事。成熟工程师具有自我意识,懂得如何有效沟通,努力成为团队中大家都愿意合作的对象。
  3. 勇于估算并承担责任:他们不回避对项目做出估算和承诺,理解这是商业运作和团队协作的必要部分,并愿意在不确定性中工作。
  4. 具备前瞻性思维:在完成工作时,他们会思考代码的寿命、资源消耗、可维护性和可扩展性。
  5. 乐于完成“乏味”但必要的工作:他们明白并非所有任务都光鲜,愿意处理那些看似琐碎但至关重要的事务,并能高效完成。
  6. 提升团队整体水平:成熟工程师有“慷慨精神”,通过辅导和帮助他人来提升整个团队的技能,而不是独自埋头苦干。
  7. 实践“赞助”而非仅“指导”:尤其在支持代表性不足群体时,他们理解提供机会和展示度(如推荐领导项目、在会议中发言、撰写博客等)比单纯给出建议更重要。
  8. 明确权衡取舍:他们清楚工程决策存在于一个连续谱系中,不存在完美的解决方案。他们在决策初期就明确指出各种取舍(如最优性与脆弱性、效率与彻底性),并坦然接受这些局限性。
  9. 摒弃“掩护式工程”:成熟工程师勇于承担自己的责任,不会在出现问题时急于推卸责任给他人或外部条件。
  10. 具备同理心:他们能够理解不同角色(如设计、产品、运维、商业等)的目标和视角,并将其纳入自己的工作考量中。
  11. 不空发抱怨,而是提出解决方案:他们基于证据表达判断,并伴随着问题的潜在解决方案。
  12. 意识到认知偏见:成熟工程师对自我服务偏见、基本归因错误、后视偏见、结果偏见和计划谬误等认知偏见有一定认识,并努力克服其影响。
  13. 关注他人的感受:他们明白人们对技术的情感和信心同样重要(甚至更重要),即使这些感受看似非理性。在推广一项技术时,需要考虑团队的舒适度和过往经验。

与新手和专家的区别: 文章引用了德雷福斯模型来描述技能习得的不同阶段:

  • 新手:严格遵守规则,情境感知有限。
  • 专家:不再依赖规则,具有对情境的直觉把握,仅在新颖情况下才使用分析方法。成熟工程师更接近专家,具备基于经验的、整体的、直觉的理解。

核心观点总结: “高级”或“成熟”的工程师是一个综合素质的体现。它超越了技术专长,更强调成熟的工作方式、团队协作精神、对复杂性的坦然接受、以及帮助他人和项目成功(而非个人荣誉)的倾向。这一定义对于正在快速发展的Web工程领域尤为重要,有助于行业形成真正的工程学科规范。作者最后感慨,能与许多这样的成熟工程师共事是一种幸事,这也推动着他自身不断成熟。

16. A road safety plan that will lead to cars communicating with each other (www.engadget.com)

V2X道路安全计划总结

美国交通部发布全国道路安全计划,旨在通过广泛部署车辆到一切(V2X)技术,实现汽车相互通信,以减少道路事故死亡人数至零。2023年,美国估计有40,990人死于机动车事故。

V2X技术概述

  • V2X技术使车辆能够与车辆、行人、骑自行车者、其他道路使用者及路边基础设施通信。
  • 通信内容包括位置、速度、道路条件等信息,尤其适用于能见度差的情况(如拐角处、浓雾中)。
  • 安全倡导者声称,该技术可防止数十万次碰撞,并减轻碰撞影响。

计划目标与时间表

  • 长期目标(2036年)
    • 在国家高速公路上全面部署V2X。
    • 前75个大都市区85%的信号交叉口启用V2X。
    • 推出20款V2X功能的车型。
  • 短期目标(2028年)
    • 在国家高速公路上安装V2X覆盖20%。
    • 主要大都市区25%的信号交叉口启用V2X。

实施挑战与支持

  • 挑战
    • 需要多利益相关者参与,包括联邦通信委员会(确定频谱分配规则)、汽车制造商供应商、货运运营商和应用开发者。
    • 网络安全和成本覆盖是主要关切;但联邦公路管理局已宣布近6000万美元的V2X相关拨款。
  • 支持
    • 交通部长皮特·布蒂吉格称此为关键里程碑,有潜力拯救生命并改变旅行方式。
    • 国家运输安全委员会主席珍妮弗·霍门迪表示,该计划可防止多达615,000次碰撞,并呼吁实现V2X的救命潜力。

历史背景

  • V2X并非新概念,自1995年以来一直被倡导,与自动驾驶技术发展相关。
  • 汽车制造商如奥迪、丰田、大众已长期研究V2X技术。
  • 奥巴马政府曾试图强制新车具备车辆到车辆(V2V)通信,但特朗普政府取消该计划。
  • 部署因“监管不确定性”而放缓,汽车创新联盟总裁称此部署计划为“重置按钮”和关键拼图。
17. CSS adds vertical centering in 2024 (build-your-own.org)

CSS 在2024年新增垂直居中能力

核心进展

CSS的align-content属性现在可以在**默认布局(flow layout)**中生效,仅需一个CSS属性即可实现垂直居中。

浏览器支持:

  • Chrome: 123
  • Firefox: 125
  • Safari: 17.4

新方法的优势

传统CSS垂直居中通常需要切换到Flexbox或Grid布局。2024年的改进允许在默认布局中直接使用align-content,带来以下好处:

  1. 无需使用Flexbox或Grid,仅需一个CSS属性即可对齐。
  2. 内容不再需要用额外的<div>包裹。

对比示例:

  • 传统Grid方式(需要容器包装):
    <div style="display: grid; align-content: center;">
      <div>包含多个节点的内容</div>  <!-- 需要额外包装 -->
    </div>
    
  • 新方式(无需包装):
    <div style="align-content: center;">
      包含<em>多个</em>节点的内容。
    </div>
    

历史上的垂直居中方法

文章回顾了过去几十年中实现垂直居中的多种方法,每种方法都有其复杂性和局限性:

  1. 表格单元格法:使用display: table-cellvertical-align: middle,但需要额外的表格容器。
  2. 绝对定位法:结合position: absolute; top: 50%; transform: translateY(-50%),逻辑复杂。
  3. 行内内容法:利用伪元素::beforevertical-align: middle,可能产生布局干扰。
  4. 单行Flexbox:使用display: flex; align-items: center
  5. 多行Flexbox:使用display: flex; flex-flow: row wrap; align-content: center
  6. Grid内容对齐:使用display: grid; align-content: center
  7. Grid单元格对齐:使用display: grid; align-items: center
  8. 自动外边距法:在Flexbox或Grid中使用margin-block: auto

新的align-content方法被视为最简洁直接的方案(五星推荐)。

关于CSS对齐属性的说明

  • 轴向术语align-*通常控制垂直(块轴)对齐,justify-*通常控制水平(行内轴)对齐。这些术语与书写模式相关。
  • 属性区别
    • align-content/justify-content 控制内容组(如Flexbox的行、Grid的轨道)的对齐。
    • align-items/justify-items 控制单个子项在其对齐容器内的对齐。
  • 命名混乱:CSS中“align”和“justify”的用法与通常语义不同,且不同布局模式下行为不一致。

CSS设计的复杂性

文章指出CSS的设计缺乏统一愿景,导致属性众多且行为不直观,经常存在多种方式实现同一目标但缺少“正确”方式的情况。相比之下,一些其他软件(如LibreOffice)采用了更正交、可组合的设计范式。

结论:CSS的学习曲线依然陡峭,但新属性align-content为垂直居中这一常见需求提供了更简洁、更合理的解决方案。

18. Low level of Magnesium linked to disease-causing DNA damage (newatlas.com)

研究概述
澳大利亚南澳大学(UniSA)研究人员分析了172名中年人的血液样本,发现低镁水平(低于18mg/L)与高水平同型半胱氨酸(homocysteine)显著相关。同型半胱氨酸具有基因毒性,可损伤人体DNA,增加疾病风险。

关键发现

  • 低镁与DNA损伤:研究显示,即使调整性别和年龄因素,低镁水平仍与DNA损伤增加直接相关。
  • 镁与其他营养素关系:高镁水平与叶酸和维生素B12水平正相关;低镁则常伴随叶酸和维生素B12缺乏,加剧同型半胱氨酸的毒性。
  • 健康风险:低镁与高同型半胱氨酸的组合可能提升胃肠道疾病、多种癌症、糖尿病以及阿尔茨海默病和帕金森病的患病概率。

镁的生理作用

  • 镁是人体第四大丰富矿物质,参与DNA和RNA的健康合成,并作为300多种酶系统的辅助因子,调控血压、血糖、神经功能等。
  • 镁缺乏可能削弱细胞能量产生,加速组织衰老。此前研究还将充足镁水平与更大脑容量联系起来。

摄入建议

  • 推荐剂量:低于300mg/天被视为低摄入;美国FDA建议31岁以上成人每日摄入420mg。
  • 食物来源:通过饮食或补充剂易达到需求,例如:
    • 南瓜籽(1盎司/156mg)、奇亚籽(1盎司/111mg)、杏仁(1盎司/80mg)。
    • 其他来源包括菠菜、腰果、花生和豆奶。

研究出处
该成果发表于《欧洲营养学杂志》,由南澳大学团队主导。

20. Flaw has Microsoft Authenticator overwriting MFA accounts, locking users out (www.csoonline.com)

微软认证器应用存在覆盖账户缺陷,导致用户被锁定

核心问题

微软认证器(Microsoft Authenticator)在用户通过二维码扫描添加新多因素认证(MFA)账户时,经常覆盖已有账户。这是由于该应用仅使用用户名(通常为邮箱地址) 作为账户唯一标识符。当多个服务使用相同邮箱作为用户名时,后添加的账户会覆盖先前的账户,导致用户被锁定出原有服务。

与其他认证器的对比

  • 谷歌认证器等其他主流应用:会结合账户标签(label)服务发行者(issuer,如银行、公司名称) 生成唯一标识,避免冲突。
  • 微软认证器:仅使用标签字段,忽略发行者信息,导致同一邮箱的账户发生覆盖冲突。

问题影响

  1. 用户被锁定:覆盖发生后,用户可能无法访问被覆盖的服务,甚至影响新添加的服务。
  2. 隐蔽性:用户通常不会立即发现问题,可能在数周或数月后尝试使用被覆盖服务时才察觉。
  3. 责任误判:用户和IT部门往往认为是服务提供商的问题,导致企业IT支持资源浪费在排查非自身原因的故障上。

微软的回应与争议

  • 微软承认该行为存在,但声称这是设计特性而非缺陷
  • 微软将责任归咎于用户或服务提供商,称一些服务未在二维码数据中正确包含发行者信息。
  • 应用中的警告信息存在误导性:提示用户“除非自己发起来自信任来源的操作,否则可能被锁定”,实际上未提供避免覆盖的选项

行业反应与测试

  • 安全专家和IT顾问多次重现该问题,批评这是明显的设计缺陷
  • 澳大利亚IT顾问Brett Randall测试了14款其他认证器应用(包括谷歌、Okta、Duo Mobile等),均未出现相同覆盖问题
  • 专家质疑微软未修复的原因:认证器为免费产品,不产生直接收益,且可能是安全工程师与用户体验脱节所致。

历史与现状

  • 该问题至少从2016年微软认证器发布时就已存在,用户投诉可追溯至2020年。
  • 微软在最新声明中暗示可能在未来更新中改进,但未提供具体时间表。

临时解决方案

  1. 使用其他认证器应用:如谷歌认证器、Okta等。
  2. 手动输入密钥:避免使用二维码扫描功能,手动输入服务提供的密钥。
  3. 企业层面:建议IT部门评估认证器选择,并告知用户风险。

总结

该设计缺陷导致微软认证器在特定场景下破坏账户唯一性,引发安全隐患和可用性问题。尽管长期存在用户投诉,微软仍未彻底修复,引发行业对其安全产品可靠性的质疑。

21. The secret lives of snowblowers (lcamtuf.substack.com)

文章核心内容概述

本文通过作者从使用铲雪到拥有多种专业除雪设备的经历,深入剖析了民用除雪机中蕴含的工程设计原理,并揭示了其背后令人意想不到的技术复杂性。

除雪机的设计演进与工作原理

文章详细比较了三种主要除雪机类型,并用图解说明了它们的核心机械结构:

  1. 电动雪铲:作为原型设备,它使用一个注射成型的双刃螺旋叶片(转速约2000 RPM)来切削、运送并抛射雪花。其中心段较平以抛雪,边缘弯曲以减少振动并压实雪花。其主要缺点是雪只能被抛向操作者前方,灵活性差。

  2. 单级除雪机:为解决方向问题,增加了可调节的溜槽挡板来控制抛雪方向和角度。同时,其螺旋叶片中心段变窄以匹配出雪口,外缘螺旋更显著以防止堵塞。然而,其根本缺陷在于高速旋转带来的低扭矩,在面对湿雪或冰块时可能动力不足,甚至“爬雪”而非切碎。

  3. 双级除雪机:这是更先进的设计,通过蜗轮蜗杆变速箱将螺旋叶片的转速降低、扭矩提升约十倍。其工作分为两级:

    • 第一级:低速高扭矩的螺旋叶片(常带锯齿)负责切碎冰雪并向中心输送。
    • 第二级:一个高速旋转的叶轮(带3-4个加强叶片)负责将碎雪强力抛出。 这种设计也带来了高扭矩可能损坏传动系统的风险,因此常使用脆性合金制成的保险销作为保护。

自推进系统的工程方案

大型除雪机很重(50-270磅),因此需要自推进系统。引擎通常以恒定转速运行,但前进速度需可调。为此,文章介绍了两种传动技术:

  • 摩擦盘传动:通过一个橡胶轮在旋转金属盘上的不同位置滑动来改变输出转速,结构简单、成本低,但橡胶轮会磨损。移动过中心还可实现倒车。
  • 静液压传动:使用带可调斜盘的泵产生可变流量液压油驱动液压马达,理论上免维护,但故障维修成本高昂。

总结

作者认为,除雪机这一常见的家用工具,其设计中意外地包含了丰富的工程智慧,从分级抛雪原理到精密的传动解决方案,都体现了对特定工作场景的深入思考。尽管市场营销和品牌争论有时掩盖了这些技术细节。

22. DifuzCam: Replacing Camera Lens with a Mask and a Diffusion Model (arxiv.org)

文章标题:DifuzCam:用掩模和扩散模型替代相机镜头

核心内容摘要:

本文提出了一种名为DifuzCam的新型无镜头扁平相机成像技术。其核心创新在于使用一个掩模和一个预训练的扩散模型来替代传统的相机镜头,从而显著减小相机的尺寸和重量。

该技术针对的主要问题是:现有无镜头相机从原始传感器测量值中重建图像的质量通常不尽如人意。为解决此问题,作者提出了一套新的图像重建方法,该方法整合了:

  1. 一个预训练的扩散模型(具备强大的图像生成先验知识)。
  2. 一个控制网络,用于引导扩散过程。
  3. 一个学习到的可分离变换

通过这种方式构建的原型相机,在图像质量与感知质量方面均达到了先进水平。此外,该系统还能利用对拍摄场景的文本描述来进一步增强重建效果,展示了其多模态融合的能力。

文章最后指出,这种利用预训练扩散模型强大能力进行重建的方法,不仅适用于DifuzCam原型,也有潜力用于其他成像系统以提升其重建结果。

24. Uniqueness Bias: Why it matters, how to curb it (arxiv.org)

独特性偏见:为何重要及如何抑制

本文探讨了“独特性偏见”,这是一种行为偏见,定义为决策者倾向于将自己的决策视为独一无二。研究首次将独特性偏见与现实世界项目投资决策的预测准确性和绩效相关联。传统上,项目常被框定为独特事件,但本文质疑这种框架,假设它可能导致项目绩效不佳。

通过分析219个项目的样本进行测试,研究发现感知的独特性在统计上高度显著与绩效不佳相关。这意味着,当决策者认为其项目独一无二时,更容易出现预测失误和绩效下降。

为缓解独特性偏见,研究建议采用丹尼尔·卡尼曼所称的“决策卫生”方法。具体策略包括:

  • 参考类预测:基于类似历史项目的基准数据进行预测,而非孤立思考。
  • 事前验尸:在项目启动前假设失败情景,识别潜在风险。
  • 基于相似性的预测:通过比较与当前项目相似的过往案例来优化决策。
  • 噪音审计:评估决策过程中的随机变异,以减少不一致性。

这些方法旨在帮助决策者克服将项目视为独特的倾向,从而提升预测准确性和项目绩效。

25. How to get from high school math to cutting-edge ML/AI (www.justinmath.com)

本文提供了一个从高中数学水平到掌握前沿机器学习/人工智能的四阶段学习路线图。

第一阶段:基础数学 这是最关键的基础阶段,涵盖支撑机器学习的高中和大学数学,包括代数、单变量微积分、线性代数、概率与统计,以及少量多变量微积分。重点在于识别并掌握机器学习中必需的具体主题(例如梯度计算、多变量链式法则),而非学习所有数学内容。可以使用Khan Academy、MIT开放课程等免费资源,但自行整合可能效率较低,容易迷失。

第二阶段:经典机器学习 在掌握数学基础后,开始动手编程实现从线性回归到小型多层神经网络等基本模型的简化版本。理解这些经典模型中的模式(如损失函数)是阅读现代论文时形成直觉的关键。推荐资源包括作者编写的《算法与机器学习导论》教科书,以及Andrew Ng在Coursera上的《机器学习专项课程》。此阶段必须注重实践(做练习和项目)。

第三阶段:深度学习 此阶段学习具有许多参数的多层神经网络,其架构根据特定任务定制。推荐资源为Simon J. D. Prince的免费教科书《理解深度学习》以及Jeremy Howard在Fast.AI上的《面向程序员的实用深度学习》课程。建议先通过教科书打好基础,再通过课程项目进行整合和实践。

第四阶段:前沿机器学习 这是最终目的地,涉及Transformer、大型语言模型、扩散模型等最新成果。在该领域,成熟的学习材料较少,需要阅读研究论文、博客文章和视频等零散资源。建议采用自下而上的方法:首先通过文献检索,收集从领域基础到最新研究的关键资料(如Andrej Karpathy的“神经网络:从零到英雄”系列),逐步深入,而不是直接尝试理解最新的论文。

补充说明

  • 软件工程技能:本路线图假设读者已具备软件开发基础。若不具备,则需先学习典型的数据结构与算法(如排序、图遍历),并可随时在实践中学习版本控制、使用数据库/GPU及ML框架等具体技能。
  • 数学程度:深度学习所需的数学属于本科级别。关于“需要学多少数学”的争论,答案介于“完全不需要”和“需要全部”之间,具体取决于目标(使用现有模型 vs. 开发新模型)。
  • 保持动力:面对庞大的知识体系,可以通过阅读前沿文章、试玩新模型等方式保持好奇心和兴趣,但必须明确,能力的提升依赖于“刻意练习”,而兴趣是驱动练习的动力。应在两者间取得平衡。
28. Bug squash: An underrated interview question (blog.jez.io)

Bug Squash面试:被低估的高效面试方法

核心概念

Bug Squash面试提供一个候选人未见过的代码仓库,要求其找出并修复一个特定bug(表现X,期望Y)。此方法因其高信噪比而被认为是最有效的软件工程面试形式之一。

主要优点

反映实际工作

  • 模拟日常开发中频繁遇到的任务:深入陌生代码解决问题。
  • 而非编写不常用的算法(如回文判断)。

候选人体验佳

  • 类似解谜游戏,调试成功能带来成就感。
  • 候选人可自我评估进度,结果更公平,避免传统面试中“答非所问”的挫败感。

适用性强

  • 对高流动性公司尤为重要,因大部分代码对工程师而言是陌生的。
  • 充分展示资深候选人的工具熟练度(如使用strace、mitmproxy等)。

评估真实能力

  • 防作弊:即使预先知道bug,仅机械修复也会失败。
  • 重点评估可重复的调试方法论:是否建立假设、系统性地验证,以及是否构建代码库心智模型。

技能匹配度高

  • 承认软件开发中大量时间用于阅读和理解现有代码。
  • 无需像LeetCode那样专门练习,技能与日常工作实践直接相关。

主要挑战

问题设计复杂

  • 需校准bug难度:避免过难(1小时无进展)或过易(5分钟解决)。
  • 通常需为每个项目准备多个bug,以区分优秀与普通候选人。

实施成本高

  • 需为每种支持的语言(如JS、Python、Java、C++等)准备独立问题。
  • 项目需支持多平台(至少包括Windows、macOS、Linux)。

环境一致性问题

  • 项目构建和测试需简便,考虑候选人设备性能差异。
  • 可能需要准备面试用笔记本电脑,并预装多种开发工具。

维护需求

  • 代码库会随时间因依赖更新而“腐化”,需定期维护。
  • 需确保候选人能安装项目依赖,可提供预备沙盒环境供提前配置。

定位与建议

  • 非全能面试:通过此面试不意味着直接录用。
  • 综合评估的一部分:应与LeetCode问题、经验目标访谈、架构设计等传统形式结合,形成平衡的面试流程。
  • 核心价值:测试日常工作中至关重要但传统面试常忽略的技能——在陌生代码中系统性地调试和解决问题。

此面试形式因其实际性、公平性和趣味性,值得更广泛地推广使用。