2024-07-14

33 篇热帖

1. Disney's Internal Slack Breached? NullBulge Leaks 1.1 TiB of Data (hackread.com)

事件概述

黑客组织NullBulge宣称已入侵迪士尼公司,并于2024年7月12日在黑客论坛Breach Forums上泄露了1.1 TiB(约1.2 TB)的内部Slack数据。该泄露数据据称包含迪士尼开发团队使用的近1万个Slack频道的所有消息、文件、代码、未发布项目、原始图片、登录凭证及内部API链接等敏感信息。

黑客组织背景与动机

NullBulge自称为“黑客行动主义者”,其官方网站声称旨在“保护艺术家的权益并确保其作品获得公平报酬”。该组织还在X(原Twitter)平台公开宣传了此次入侵。有传言称NullBulge可能与LockBit勒索软件团伙有关联,因其疑似使用了泄露的LockBit构建器。

此次事件的背景是迪士尼近年来因未向部分艺术家和作家支付版税而受到批评和法律挑战。例如,作家Alan Dean Foster公开指出,在迪士尼收购《星球大战》和《异形》系列后,他未能收到相关小说版税。美国科幻与奇幻作家协会等组织一直在积极为这些创作者争取权益。

事件状态与关联

目前,此次数据泄露事件尚未得到独立核实。网络安全研究机构VX-Underground在推特上表示,若事件属实,入侵可能与信息窃取恶意软件有关。

此次事件并非孤立案例。就在同一天(7月12日),AT&T宣布黑客窃取了“几乎所有”客户的通话和短信记录,影响超过1.1亿用户。此外,Ticketmaster的持续数据泄露事件导致1000万张演唱会门票条形码被泄露,黑客索要800万美元赎金。

迪士尼方面正在调查此次入侵事件。

2. Houston-area residents enter sixth day without power, air conditioning (www.cnn.com)

自飓风贝里尔本周一袭击墨西哥湾沿岸以来,美国德克萨斯州东南部居民已连续第六天在断电和无空调的酷热中煎熬,该州至少已有10人因此死亡。

停电规模与影响

  • 目前德克萨斯州东南部仍有超过76万电力用户断电。
  • 酷热天气持续,热指数超过三位数(华氏度),高温警报每日发布。
  • 停电导致医院、养老院、学校、水处理厂等关键基础设施瘫痪,引发居民对主要电力公司CenterPoint Energy准备不足和该州电网稳定性的广泛不满。

居民面临的严峻困境

  • 健康与安全风险:居民被迫使用发电机,引发一氧化碳中毒危机。仅哈里斯县就收到超过200起一氧化碳中毒报警,并已有至少2人死亡。本德堡县有超过41人中毒。
  • 生活资源匮乏:冰箱内食物腐烂,许多商店关门,政府和食品银行努力向缺粮地区分发食品。135家废水处理厂离线,导致众多家庭失去饮用水。
  • 脆弱群体高危:一位71岁女性因制氧机断电死亡。依赖电力医疗设备的老年人和居民处境尤其危险。超过40家透析诊所运营受阻,十几家医院处于“内部灾难”状态。

救援与应对措施

  • 美国卫生与公众服务部宣布德州进入公共卫生紧急状态。
  • 联邦紧急事务管理署已批准对受灾家庭的财政援助。
  • 地方政府正采取措施协助居民降温,例如加尔维斯顿市用公交车提供“空调避难所”,并分发冰块和提供淋浴设施。

政治批评与企业回应

  • 德州副州长丹·帕特里克强烈批评CenterPoint Energy,认为断电持续如此之久不可接受,并要求公司对老人院等关键设施恢复供电给予更高优先级。
  • 州长格雷格·阿博特已要求对电力公司进行调查。
  • CenterPoint Energy表示在飓风登陆前九天就已开始准备,并将抢修人员从3000人增至1.2万人。公司CEO承认在与客户沟通预期方面可以做得更好。

电网问题旧事重提

  • 此次危机让人联想到2021年2月的致命寒潮停电事故。副州长帕特里克表示,电网问题是另一个正在持续处理的议题,而目前的断电主要是因树木倒塌压垮输电线所致。

居民亲历的困境

  • 孕妇Jordyn Rush因高温无法入睡,冰箱空空,且患有妊娠糖尿病,面临严重的健康风险。
  • 居民Destinee Rideaux被迫再次流离失所,白天其公寓温度高达96华氏度,不得不每晚借住朋友家。
3. Show HN: Resurrecting a dead Dune RTS game (wheybags.com)

项目目的

EmperorLauncher 是一个专为2001年RTS游戏《Emperor: Battle for Dune》开发的补丁,旨在解决其在现代系统上的兼容性问题。核心功能包括:支持高分辨率显示、恢复基于直接IP连接的在线多人游戏,以及解锁因官方服务器关闭而失效的合作战役模式。

核心技术实现

1. 进程注入与函数 Hooking

  • 启动器替换:编写替代程序接管 Game.exe 的启动流程,处理解密数据、内存映射和句柄继承。
  • DLL 注入:利用 CreateRemoteThreadLoadLibrary 技巧,将自定义补丁 DLL 注入到挂起的游戏进程中。
  • Detours 库应用:使用 detours 库修改游戏内部函数。通过逆向工程和 IDA Python 脚本,恢复了被编译器优化掉的调试日志功能,为后续的网络协议调试提供了关键支持。

2. 图形与性能修复

  • 分辨率与 UI 适配:突破 Direct3D 7 的 2048 纹理大小限制;通过无边框窗口化和黑边(Letterboxing)技术,解决非 4:3 比例下的 UI 错位和鼠标偏移问题。
  • 帧率限制:Hook IDirect3DDevice7::EndScene 方法,将帧率锁定在 60 FPS,修复了现代高帧率导致的游戏模拟速度过快及视觉特效崩溃问题。

3. 网络与多人游戏重构

  • 网络隧道:针对失效的 P2P NAT 穿透(Mangler)机制,劫持 Winsock API,将多端 P2P 连接封装为单一的客户端到服务器的隧道连接,实现仅需主机端端口映射的直接 IP 联机。
  • 自建 WOL 服务器:原 Westwood Online (WOL) 基于定制的 IRC 协议。作者编写了一个极简的 WOL/IRC 服务器实现,确保多人游戏和合作模式能脱离第三方服务器独立运行,实现长期的文化保存。

4. 安装程序与组件打包

  • 自动化补丁:逆向工程官方 v1.09 补丁程序,提取并调用其内部的 RTPatch DLL,实现游戏文件的自动提取与升级。
  • COM 组件注册:针对 WOL 共享组件(WOLAPI.DLL),采用单用户 COM 注册(Per-User TLib Registration)替代系统级注册,避免安装时需要管理员权限。
  • 启动器 UI:使用原生 Win32 API 构建启动界面,供玩家输入 IP 地址和调整基础设置。

项目意义

该项目通过深度的逆向工程、内存 Hooking 和网络协议重构,全面修复了经典老游戏的现代兼容性缺陷,不仅复活了失传的合作玩法,也为经典游戏的数字保存提供了一套完整且独立的技术方案。

4. After initially rejecting it, Apple has approved the first PC emulator for iOS (www.theverge.com)

文章摘要:

  • 事件核心:苹果公司已批准PC模拟器应用UTM SE上架其App Store,适用于iOS、iPadOS和visionOS。该应用允许用户在iPhone等设备上运行经典软件和旧式游戏,支持模拟Windows、Mac OS 9和Linux系统。
  • 背景:此前,苹果于6月拒绝了该应用的上架申请,并禁止其在欧盟第三方应用商店进行公证。开发者曾因此表示将放弃努力,因为应用体验“低于标准”。
  • 技术实现与支持:此次获批得益于AltStore团队的协助以及其他开发者的贡献,特别是某位开发者关键的QEMU TCTI实现,促成了无需即时编译(JIT-less)的版本。应用基于强大的开源模拟器QEMU构建。
  • 应用功能
    • 支持模拟x86、PPC和RISC-V处理器架构。
    • 可运行预配置的虚拟机,或允许用户从零开始自行创建配置。
    • 支持图形显示和文本终端模式。
  • 使用说明:与其他模拟器类似,该应用本身不附带操作系统。用户需自行准备或通过官方提供的指南获取Windows XP至11的镜像、预制的Linux虚拟机或Mac OS 9.2.1及DOS系统。
  • 现状:该应用现已免费提供下载。
5. Fitting an elephant with four non-zero parameters (arxiv.org)

论文摘要

本文围绕“用四个参数拟合一头大象”这一经典问题展开。该说法源自1953年恩里科·费米对戴森模型的批评,引用了约翰·冯·诺依曼的话:“用四个参数我能拟合一头大象,用五个我能让它摆动鼻子。”

论文指出,尽管此前已有多次尝试,但由于该问题本身未被严格定义,现有方法未能完全令人满意。本文旨在明确界定该问题,并基于此定义提出一种新的拟合尝试。

6. Give people something to link to (simonwillison.net)

为内容创建专属链接页面的重要性

文章核心观点是:如果你希望他人理解并讨论你的项目、想法或产品功能,就应当为其提供一个专属的、易于链接的网页。

两个典型案例对比

  1. ChatGPT Code Interpreter 的问题

    • 该功能虽强大,但缺乏明确的官方文档和专属页面。
    • OpenAI 官网甚至没有专门的帮助页面,导致用户难以找到可靠信息。
    • 作者不得不链接到自己的标签页,而非官方资源。
    • 功能命名多次变更(如 Code Interpreter → Advanced Data Analysis → Data analysis with ChatGPT),进一步增加了混乱。
  2. Boring Technology 的成功实践

    • Dan McKinley 在 2015 年提出“Boring Technology”概念,强调团队应优先选择成熟、可靠的技术。
    • 他将此概念发展为网站 boringtechnology.club,使想法易于传播和讨论。
    • 作者自己也为“baked data”、“git scraping”等概念创建了独立页面,但未绑定域名,认为这是一个遗憾。

专属链接页面的价值

  • SEO 优化:确保搜索相关关键词时,用户首先访问你的官方页面,而非第三方内容。
  • 提升沟通效率:通过链接直接提供权威解释,避免重复阐述,充分利用网络的链接特性。
  • 增强影响力:为想法或功能创建专属网页,有助于其长期传播和讨论。

作者强调,无论是产品功能、技术概念还是项目理念,都应为其构建一个明确的、可链接的网页,以促进理解与对话。

7. No reasonable expectation of privacy in one's Google location data (fourthamendment.com)

美国法院判决:用户对谷歌位置数据无合理隐私期待
美国第四巡回上诉法院在2024年“United States v. Chatrie”案中裁定(2:1),用户对其谷歌位置历史数据不享有合理的隐私期待,因此执法部门通过地理围栏令状获取此类数据不违反宪法第四修正案。

核心理由:用户自愿共享数据

  • 谷歌位置历史功能默认关闭,用户需主动完成多项步骤(如启用设备位置共享、选择加入账户设置、启用位置报告功能等)才能激活该服务。
  • 启用后,用户可随时查看、编辑、删除已收集数据,或暂停未来的数据收集,谷歌承诺尊重用户选择。
  • 约三分之一的活跃谷歌用户启用了位置历史功能,表明该服务属于用户自愿参与的范畴。

谷歌位置数据的技术特点与存储

  • 数据精度:位置历史通过GPS、Wi-Fi或移动网络持续追踪设备位置,但仅为估算值。每次记录包含位置坐标及“置信区间”(表示用户在该区间内的概率为68%)。
  • 数据存储:所有位置历史数据存储于谷歌的“传感器库”(Sensorvault),为每个设备分配唯一标识符,并用于构建聚合模型(如优化谷歌地图服务)。

地理围栏令状的兴起与谷歌的响应程序

  • 自2016年起,执法部门大量使用地理围栏令状(要求谷歌提供特定地理区域和时间段内的用户位置数据),请求量在2017-2019年增长1500%。
  • 谷歌于2018年制定三步审查程序:
    1. 第一步:谷歌根据令状筛选符合条件的用户列表,提供匿名设备ID、位置数据、置信区间等信息,并对范围过宽的请求提出异议。
    2. 第二步:执法部门可申请更广泛的位置数据(不限于原地理围栏范围),但谷歌要求其缩小目标用户范围。
    3. 第三步:执法部门确定调查相关用户后,可向谷歌申请其账户身份信息(如姓名、邮箱),谷歌同样要求缩小请求范围。

法律争议与影响

  • 该案多数意见认为,用户自愿共享位置数据且可自主控制,因此无合理隐私期待。
  • 少数派法官及法律界人士指出,该判决可能扩大执法部门利用技术进行监控的权限,引发第四修正案在新兴技术场景下适用范围的争议。
8. Show HN: I built a Jeopardy game maker with buzzer support (buzzinga.io)

Buzzinga:自定义 Jeopardy 游戏创建与托管平台

产品简介

Buzzinga 是一个一体化平台,专门用于创建和托管自定义的 Jeopardy(危险边缘)风格问答游戏。它广泛适用于游戏之夜、课堂活动和企业团建等场景,提供免费试用且无需注册。该平台已获得 Nvidia、普林斯顿大学、Adobe 和加州大学伯克利分校等知名机构专业人士的使用与信任。

核心功能

  • 自动抢答管理:玩家通过手机或设备点击抢答,系统会自动处理抢答锁定与重置,无需人工干预。
  • 轻松计分:分数随游戏进度自动更新,主持人可通过单击轻松修改或撤销任何分数。
  • 远程主机控制:主持人可使用任意设备远程控制游戏,摆脱线缆束缚,保持观众端界面整洁,并能一目了然地查看答案。
  • Pro 版高级定制:付费 Pro 版本支持自定义 Logo、图片、音频和视频,并解除玩家人数限制。

用户评价

用户反馈高度积极:软件产品经理称赞其出色的产品体验;企业培训讲师表示它完美解决了以往管理抢答和计分的压力;个人用户也成功将其用于家庭生日聚会,获得了极佳的互动效果。

常见问题与游戏设置

  • 玩家人数限制:免费版支持最多 3 名玩家,Pro 版支持无限玩家(为保证游戏体验,官方建议单局不超过 10 人)。
  • 类别数量调整:支持设置少于 6 个类别,只需将不需要的列标题和线索留空即可。
  • 批量导入数据:Pro 版支持通过下载 CSV 模板、填写后重新上传的方式,批量导入线索和答案。
  • 主持人查看答案:主持人可在另一浏览器标签页或设备上登录同一账号,在菜单中选择“Host Controller”或“Show answer”即可查看正确答案。

关联产品

开发团队还推出了 Spinorama,这是一款类似“幸运之轮”(Wheel of Fortune)风格的文字解谜游戏。它与 Buzzinga 具有同样易于操作的体验,适用于游戏之夜、课堂、老年团体和各类主持活动,同样提供免费试用且无需注册。

9. Writing a BIOS bootloader for 64-bit mode from scratch (thasso.xyz)

本文介绍了从零开始为BIOS环境编写64位引导加载程序(bootloader)的过程。核心目标是实现在传统BIOS引导机制下加载并切换到64位长模式。文章内容聚焦于x86架构的CPU初始化与模式转换技术,旨在引导读者理解引导加载程序的底层实现原理与关键步骤。

10. Trump Shot at Pennsylvania Rally (apnews.com)

特朗普在宾夕法尼亚州集会上遭枪击事件总结

事件概述

美国前总统、共和党总统候选人唐纳德·特朗普于2024年7月13日在宾夕法尼亚州巴特勒的一场竞选集会上遭遇未遂刺杀。枪击事件发生在特朗普接受共和党提名前数日,是自1981年里根遇刺以来最严重的针对美国总统或主要候选人的袭击事件,引发了对美国政治暴力的严重关切。

事件经过

  • 时间与地点:事件发生于7月13日下午6点10分后,地点为巴特勒农场展览场地。
  • 枪击发生:特朗普正在演讲时,枪声响起。特朗普本人称听到“嗖嗖声”,随即感到子弹穿过右耳上部皮肤,导致大量出血。
  • 现场反应:特朗普迅速蹲下,特勤局特工按训练规程扑上前以身体掩护他。现场一片混乱,数千名观众中传出尖叫。
  • 特朗普反应:在特勤人员护送起身时,特朗普右脸沾有血迹。他随后举拳向支持者示意,并似乎说了两次“战斗”,引发人群高呼“USA”。他最终被护送离开现场。

伤亡情况

  • 特朗普:右耳上部被子弹擦伤,经送医检查后,其竞选团队称他“状况良好”。特朗普随后飞往新泽西州。
  • 枪手:被特勤局反突击小组当场击毙。
  • 现场观众:1名男性观众死亡,2名男性观众重伤。

枪手与调查

  • 身份:联邦调查局(FBI)确认枪手为20岁的托马斯·马修·克鲁克斯,来自宾夕法尼亚州贝瑟尔帕克。
  • 武器与位置:现场发现一支AR式步枪。枪手从集会场地外一座建筑的屋顶开火,该位置距离特朗普演讲的舞台不足150米(约164码),对于一名合格射手而言,此距离足以击中人体大小的目标。
  • 安全漏洞:FBI匹兹堡办事处特工负责人表示,评估认为特勤局在枪手开火前并未察觉其位于屋顶。这一安全漏洞令人惊讶。

各方反应与后续影响

  • 政治反应
    • 拜登总统:获知事件后与特朗普通电,并在公开讲话中表示“美国没有这种暴力的容身之处”。
    • 共和党方面:部分共和党人指责拜登及其盟友此前将特朗普描述为“对民主的威胁”的言论营造了有毒的政治环境,并提及拜登7月8日对捐助者所说的“是时候把特朗普放在准星里了”的言论。
    • 其他政要:宾夕法尼亚州州长(民主党)以及特朗普副总统候选名单上的几位共和党人均发表声明,谴责暴力,表达对特朗普的关切。
  • 安全措施:国土安全部部长表示正采取一切可能措施确保竞选活动安全。特朗普的安保细节在事件后展示了罕见的武力展示,包括反突击队随行。
  • 后续活动:原定次日开始的共和党全国代表大会(在密尔沃基举行)表示将按计划进行,但预计该事件将改变大会的基调并进一步加强安保。
  • 历史背景:此次袭击事件重新引发了人们对美国深度政治极化背景下政治暴力的担忧,尤其是在距总统大选仅剩不到四个月之际。报道提及了自1968年以来多位政治人物遭遇刺杀或袭击的历史,指出特朗普作为前总统及现任候选人,享有最高级别的安保,但此次事件仍凸显了持续存在的威胁。
11. Talos: Secure, immutable, and minimal Linux OS for running Kubernetes (www.talos.dev)

Talos Linux:专为Kubernetes打造的安全、不可变、极简操作系统

Talos Linux是一款从裸机到启动Kubernetes集群只需不到一分钟的专用操作系统。其核心设计哲学是**“少即是多”**:不包含SSH、Shell和包管理器,从根本上移除了一大类传统Linux系统中无法通过配置完全规避的安全与故障风险。

核心设计对比:传统Linux vs. Talos Linux

方面 传统Linux Talos Linux
访问模型 通过SSH(端口22)进行访问,操作员获取root权限后可执行任意命令。存在密钥泄露、配置暴露或服务漏洞的风险。 无SSH、无控制台登录。唯一入口是apid(端口50000),采用基于mTLS的gRPC协议,需客户端证书。所有调用均为类型化、日志记录并基于机器配置进行授权。
可变性 根文件系统可读写,操作员可随意修改,导致运行状态与配置清单逐渐偏离。 根文件系统为只读的SquashFS镜像。升级通过写入新镜像到非活动分区并重启完成,回滚反之。运行状态即镜像哈希。
攻击面 磁盘上包含约2800个二进制文件,许多与kubelet无关(如bash, perl),但均带有CVE历史和依赖树。 仅包含少于50个启动节点必需的二进制文件(如内核、containerd、kubelet、etcd、machined)。非清单中的文件不存在于系统中。

消除的安全风险类别

Talos Linux通过不包含需要加固的组件,直接消除了以下风险:

  • 基于SSH的入侵:无SSH守护进程,无入侵目标。
  • 基于Shell的权限提升:无Shell环境。
  • 包管理器供应链攻击:无包管理器,无法在运行节点上安装软件。
  • 配置漂移:根文件系统只读,任何变更都必须通过API以声明式方式应用。
  • 持久化恶意软件和Rootkit:操作系统是临时的、驻留在内存中。重启即恢复到声明状态。
  • 未使用二进制文件中的未修补CVE:不包含未使用的二进制文件。
  • 磁盘上的凭证和密钥窃取:分区加密且由TPM密封。无Shell可供搜索。
  • 在运行节点上执行临时命令:所有变更都是通过API应用的声明式YAML。
  • 失败的升级导致系统变砖:采用原子化的A/B分区切换,失败镜像会自动回滚。

性能与规格对比

能力 传统Linux Talos Linux
用途 通用,可运行任何程序 专为Kubernetes构建
分发二进制文件数量 ~1280 (以Ubuntu 26.04为例) ~40
OS占用空间 2.5–4GB ~80MB
根文件系统 可变,基于磁盘 只读、临时、驻留内存
配置模型 命令式 + 额外的配置管理工具 声明式YAML,通过API协调
配置漂移 随时间累积 结构性不可能
更新机制 逐包更新(apt/yum/dnf) 原子化A/B镜像切换,OS与K8s同时更新
升级失败恢复 需人工干预 自动回滚
远程访问 SSH mTLS认证的gRPC API
主机Shell bash/sh/sudo
包管理器 apt/yum/dnf
SSH守护进程 openssh-server

总结与开始使用

Talos Linux追求 “更少运行、更少故障、更少防御” 。它不是从通用发行版中移除不需要的部分,而是从空白开始,只添加必要组件。

开始使用仅需两条命令即可在本地创建集群:

$ brew install siderolabs/tap/talosctl
$ talosctl cluster create

对于大规模集群管理,可使用Talos Omni(提供SaaS或自托管版本)进行配置、升级和备份。

Talos Linux符合FIPS 140-3、CIS基准、提供每个版本的软件物料清单(SBOM),并通过SOC 2 Type II认证。

12. Jelly Star – The Smallest Android 13 Smartphone (www.unihertz.com)

Jelly Star:世界最小的Android 13智能手机

Jelly Star是一款以极致小巧著称的智能手机,其机身尺寸仅与信用卡相当,配备3英寸屏幕,并搭载Android 13操作系统。

核心亮点与设计:

  • 透明美学与动态光效:采用独特的透明背板设计,提供蓝色、红色及黑色可选。内置的LED灯可随通知声、来电铃声和音乐节奏动态闪烁,颇具视觉吸引力。
  • 强劲性能配置:搭载联发科Helio G99八核6nm处理器,配合8GB运行内存和256GB存储空间,确保流畅的多任务处理和充足的存储能力。
  • 持久续航:内置2000mAh电池,结合高效芯片,旨在提供全天候的续航支持。
  • 影像能力:后置4800万像素主摄与前置800万像素镜头,旨在满足日常拍照需求。
  • 全面的功能体验
    • 运行Android 13系统,可访问海量应用。
    • 支持NFC全球LTE网络红外遥控功能。
    • 提供可编程快捷按钮,可自定义快速操作。
    • 保留3.5mm耳机孔双Nano SIM卡槽
    • 具备指纹解锁USB OTGFM收音机GPS等附加功能。

品质与认证: 该产品已通过Google认证、FCC、CE、JATE等多项国际标准认证,确保其质量与安全性。

13. Building and scaling Notion's data lake (www.notion.so)

构建与扩展Notion数据湖

背景与挑战

  • 数据增长迅速:过去三年,Notion数据因用户和内容增长扩大了10倍,每6-12个月翻一番。截至2021年初,Postgres中拥有超过200亿个“块”(Notion中所有内容的基本单元),数据量达数百TB。
  • 架构扩展:为应对增长,Postgres数据库从单实例扩展至分片架构(2021年32个物理实例,2023年增至96个实例,共480个逻辑分片)。
  • 早期数据仓库局限:2021年起采用Fivetran将Postgres WAL(写前日志)数据摄取至Snowflake,但面临以下挑战:
    1. 运维负担重:需管理480个Fivetran连接器,监控和维护成本高。
    2. 速度与成本问题:Notion工作负载以更新为主(90%的upsert为更新),而Snowflake等数据仓库针对插入优化,导致摄取缓慢且昂贵。
    3. 用例支持不足:数据转换逻辑复杂(如构建去规范化视图、权限计算需树遍历),超出标准SQL能力范围,在Snowflake中易超时。

数据湖目标

  • 建立可存储原始与处理数据的规模化仓库。
  • 实现快速、可扩展、高效且低成本的数据摄取与计算,尤其针对Notion的更新密集型数据。
  • 支持AI、搜索等需要去规范化数据的产品用例。
  • 非目标:不替代Snowflake(用于其他工作负载)、Fivetran(用于非更新密集型表)及在线低延迟场景。

核心设计决策

  1. 数据存储与湖选型:选择S3作为数据存储和湖,因其与AWS技术栈兼容、成本低且支持多种处理引擎。下游连接Snowflake、ElasticSearch等。
  2. 处理引擎:采用Spark(主要用PySpark),因其支持复杂函数、分布式处理大规模数据、可优化资源配置且开源。
  3. 摄取策略:采用混合设计——正常操作时增量摄取变更数据,偶尔全量快照用于初始化。增量摄取更快、更便宜(延迟几分钟至几小时,全量快照需10小时以上且成本翻倍)。
  4. 增量摄取流水线
    • 使用Debezium CDC连接器将Postgres变更发布至Kafka(每Postgres主机一个连接器,每个表一个Kafka主题)。
    • 选择Apache Hudi将Kafka数据写入S3(因其擅长更新密集型工作负载、开源且与Debezium集成)。
  5. 数据处理顺序:先摄取原始数据至S3建立单一事实源,再进行转换、去规范化、富化等处理,仅将清洁数据送至下游系统。

扩展与运营

  • CDC与Kafka设置:部署于AWS EKS集群,每个Kafka主题对应一个Postgres表,简化运维。
  • Hudi配置:使用Hudi Deltastreamer进行摄取,采用COPY_ON_WRITE表类型和UPSERT操作。通过分片数据(沿用Postgres分片方案)、按更新时间排序、使用布隆过滤器索引优化性能。
  • Spark数据处理:多数任务用PySpark,复杂任务用Scala Spark。通过分离大小分片、多线程并行处理提升效率。
  • 初始化流程:通过Debezium连接器、RDS导出至S3的快照、Spark作业及Deltastreamer协同,通常24小时内完成新表初始化。

成效

  • 成本节约:将多个大型Postgres数据集迁移至数据湖,2022年净节省超100万美元,后续年份节省更多。
  • 速度提升:端到端摄取时间从超过一天降至小表几分钟、大表几小时,重同步可在24小时内完成。
  • 赋能产品:为Notion AI等功能的推出提供了强大数据基础设施支持。
  • 持续优化:凭借可扩展架构,适应了数据每6-12个月翻倍的增长,并计划构建自动化框架进一步赋能团队。
15. Git-PR: patch requests over SSH (pr.pico.sh)

Git-PR:基于 SSH 的补丁请求 (Patch Requests)

项目目的

Git-PR 旨在构建极简的 Git 协作工具,使自托管像运行 SSH 服务器一样简单。它结合了邮件列表和 Pull Request (PR) 的优点,既保留了生成补丁的简单性,又具备 PR 的易用性,致力于为外部贡献者提供低摩擦的协作体验,而非构建复杂的代码托管平台。

现有协作模式的痛点

  • 电子邮件工作流:邮件客户端配置繁琐、新手门槛高,且受限于邮件协议特性(无法编辑、纯文本限制、补丁下载困难等)。
  • GitHub PR:易用且易管理,但强制在网页端审查代码,脱离了开发者习惯的本地 IDE 环境。
  • 自托管 PR 方案:需要数据库、Web 服务等重型基础设施,且外部用户需注册账号甚至 Fork 仓库,协作摩擦力大。

系统架构与部署

  • 服务端(代码所有者):仅需部署单个 Golang 二进制文件即可运行 Git 服务器。状态变更会生成静态 Web 资产,可通过简单的文件服务器进行托管。
  • 客户端(外部贡献者):仅需 SSH 密钥对和 SSH 客户端,无需注册账号。
  • 通知机制:用户通过订阅 RSS 获取补丁请求的更新动态。

核心功能与工作流

  • 全终端 SSH 交互:通过 SSH 应用处理贡献者与所有者之间的交互,所有操作均在终端内完成,使代码审查成为本地开发环境的一等公民。
  • 基于 format-patch 的协作:提交和审查均在代码层面进行。双方通过创建新 commit 并生成 patch 进行交互,无需依赖 Web 查看器进行代码块评论。
  • 集中式补丁请求:解决了同一变更发送多个 patchset 的问题,所有修改和协作都集中在一个核心的 Patch Request 中。
  • 代码内审查与强制反馈:审查者应用 patch 后,直接在代码中写入注释或修改,生成新 patch 作为“审查”发回。贡献者必须在后续补丁中解决并移除这些代码注释,否则补丁无法被合并。这种机制从根本上防止了审查意见被忽略。
16. The six dumbest ideas in computer security (2005) (www.ranum.com)

计算机安全中的六个最愚蠢观念(2005年)

本文批判性地指出,尽管计算机安全领域创新不断且投入巨大,但持续的安全问题源于一些根深蒂固的错误观念。作者将这些观念称为“反良策”,并按出现频率降序列举了六个最核心的愚蠢观念。

1. 默认允许

这是最常见且最顽固的错误观念。它意味着系统默认允许所有未被明确禁止的行为,将安全人员置于与黑客的无休止军备竞赛中。

  • 体现形式:早期防火墙仅阻止少数已知危险服务(如telnet),其余全部放行;操作系统默认允许用户点击的任何程序执行;网络核心缺乏安全分区。
  • 正确观念:应采用“默认拒绝”策略,即仅明确允许已知的安全行为。这需要更多设计和投入,但更为有效。

2. 列举恶行

该观念主张通过列举并阻止所有已知的恶意程序、漏洞和攻击来保障安全(如防病毒软件的病毒库)。

  • 根本问题:自1990年代起,互联网上的恶意内容(“恶行”)数量已远超过良性内容(“善行”)。试图追踪数量庞大且快速增长的恶意软件列表是徒劳的。
  • 正确观念:应采用“列举善行”策略。系统应只允许已知的、合法的应用程序运行,从而同时解决病毒、间谍软件和远程控制木马等问题。作者通过“人工愚昧”的日志分析法举例说明了此方法的有效性。

3. 渗透与修补

此观念指导实践者通过攻击自身系统来发现漏洞,然后修补。

  • 根本缺陷:这种方法只是通过试错来“加固”系统,并不能从根本上改善设计。它导致系统永远面临“本周漏洞”的威胁,并且随着漏洞的不断发现和修补,代码会变得越来越臃肿和难以维护。
  • 正确观念:系统应从设计之初就以安全性和可靠性为目标进行构建。优秀的工程设计(如PostFix、Qmail)能极大减少漏洞数量。单纯的渗透测试对设计根本性缺陷的系统无效。

4. 黑客很酷

社会对黑客的浪漫化描绘(如“天才少年”、“技术奇才”)实际上鼓励了黑客行为。

  • 本质:黑客行为是一个社会问题,而非技术问题。匿名的互联网环境降低了犯罪的心理门槛。
  • 对从业者的误导:安全从业者若沉迷于学习漏洞利用技巧(“黑客功夫”),其技能将很快过时,且永远处于“渗透与修补”的被动军备竞赛中。更明智的做法是学习如何设计防黑客的系统。

5. 教育用户

指望通过教育用户(例如:不要打开可疑附件)来解决安全问题,本质上是将“渗透与修补”策略应用于人。

  • 现实情况:研究表明,许多用户为了微小利益(如一块糖果)或好奇心(如名人裸照)仍会冒险。用户教育的效果有限且需要不断重复。
  • 根本解决方案:应从技术和管理层面直接消除风险源。例如,企业可以在邮件网关自动隔离或删除所有附件,仅提供安全的下载通道,从而无需教育用户如何应对危险附件。

6. 行动优于不作为

许多IT管理者倾向于盲目采用新技术,认为“行动总比等待好”。

  • 危害:早期采用不成熟的技术可能导致成本高昂的失败和安全风险。更明智的策略是等待技术成熟,借鉴他人的经验教训。
  • 核心原则:“避免做蠢事往往比做聪明事更容易。” 有时,审慎的观望和不做决策本身就是最聪明的决策。

其他次要愚蠢观念

作者还列举了几个同样有害但不那么核心的观念:

  • “我们不是目标”:所有联网系统都可能成为自动攻击(如蠕虫)的目标。
  • “只用某安全方案就能全员安全”:安全是复杂系统问题,依赖单一产品是幻想。
  • “有防火墙就不需要主机安全”/“有主机安全就不需要防火墙”:网络层和主机层安全必须结合。
  • “先上线,以后再加固”:系统上线后通常永远不会有机会进行彻底的重新设计。
  • “偶发问题无法避免”:关键系统的安全应像航空安全一样追求零容忍。

结论:计算机安全领域过于沉迷于追逐潮流,而忽视了基本常识和工程原则。安全从业者的职责是挑战这些错误的“传统智慧”,因为如果传统智慧有效,系统被攻破的比率就不会持续居高不下。

17. Nvidia Warp: Python framework for high-performance simulation and graphics code (nvidia.github.io)

Nvidia Warp 是由 NVIDIA 开发的 Python 框架,专为高性能模拟和图形计算设计。它旨在通过利用 GPU 加速,显著提升计算密集型任务(如物理模拟、数据处理和图形渲染)的性能。该框架允许开发者使用 Python 编写高效代码,并自动优化在 NVIDIA GPU 上的执行效率。

18. Dear AWS, please let me be a cloud engineer again (lucvandonkersgoed.com)

这篇文章表达了作者对AWS过度专注于生成式AI(GenAI)而逐渐忽视其传统核心云服务的担忧。

作者是一名AWS Serverless Hero和资深云工程师,他指出AWS的注意力发生了显著转变。这种转变始于2022年底ChatGPT发布期间的re:Invent大会,并在随后的一年中愈演愈烈。到了2024年,GenAI几乎主导了AWS的所有活动(如全球峰会、安全大会re:Inforce)和大部分产品发布。

作者认为,GenAI只有应用于现有业务才有价值,它依赖于坚实的产品、数据、基础设施和业务规则。他担心AWS这种对GenAI的“痴迷”传递出一个隐含信息:传统云基础设施(如数据库、可扩展架构、可维护应用)不再重要。这可能导致AWS将资源从经典基础设施项目转向GenAI,从而减缓对开发者真正依赖的服务的改进速度。

文章的核心诉求是:作者恳请AWS不要忽视其赖以成功的根基。他希望AWS继续倾听开发者的声音,解决他们在构建可靠、可扩展业务时的实际痛点,并在性能、可靠性、成本、安全、运维和可持续性等核心基础设施领域持续创新。他呼吁AWS践行其“客户至尚”的领导力原则,允许像他这样的云工程师回归其核心使命——构建和维护支撑业务的坚实产品。

19. Show HN: Kaskade – A text user interface for Kafka (github.com)

Kaskade:Apache Kafka 的文本用户界面 (TUI)

项目简介

Kaskade 是一款基于 Textualize 的 Textual 框架构建的 Apache Kafka 文本用户界面(TUI)工具,旨在通过终端提供直观的 Kafka 集群管理和消息消费体验。

核心功能

管理视图 (Admin)

  • 资源浏览:列出主题(Topics)、分区(Partitions)、消费组(Groups)及其成员。
  • 主题详情:查看消息延迟(Lag)、副本(Replicas)和记录总数等指标。
  • 主题操作:支持创建、编辑和删除主题,并支持按名称过滤主题。

消费视图 (Consumer)

  • 数据反序列化:支持 JSON、String、Integer、Long、Float、Boolean、Double、Avro 和 Protobuf 等多种数据格式。
  • 消息过滤:支持按 Key、Value、Header 和/或 Partition 进行精准过滤。
  • Schema 支持:支持 Avro 和 JSON 的 Schema Registry;同时支持脱离 Schema Registry 直接进行 Protobuf 和 Avro 反序列化。

已知局限

  • 暂不支持 Protobuf 的 Schema Registry。
  • 暂不支持运行时数据自动刷新(Runtime auto-refresh)。

安装与基础运行

  • 安装方式:可通过 brewpipx 安装,也支持使用 Docker 镜像运行。
  • 基础命令
    • 启动管理视图:kaskade admin -b <bootstrap-servers>
    • 启动消费视图:kaskade consumer -b <bootstrap-servers> -t <topic-name>

高级配置与特性

  • 集群与消费控制:支持配置多个 Bootstrap Servers(逗号分隔),并可通过 --from-beginning 参数从最早偏移量开始消费。
  • Schema Registry 集成:支持 Confluent Schema Registry 和 Apicurio Registry 的 URL 及认证配置。对于本地开发,支持直接指定 .avsc 文件(Avro)或通过 protoc 编译生成的 .desc 描述符文件(Protobuf)进行反序列化。
  • 安全与认证:全面支持 SSL 加密和 SASL_SSL 认证机制。文档提供了针对 Confluent Cloud 的完整配置示例,包括集群 API 密钥/密码以及 Schema Registry 的基本身份验证。
  • Docker 支持:提供官方 Docker 镜像(sauljabin/kaskade),可通过挂载网络(--network)在容器环境中无缝连接 Kafka 集群。
20. Show HN: I generated 70k audiobooks with OpenAI Text-to-Speech (listenly.io)

项目摘要

该项目利用OpenAI的文本转语音(TTS)模型,生成了超过70,000本公共领域有声书,使这些书籍不仅可阅读,还可聆听。

核心内容

  • 生成规模:共生成72,530本有声书,涵盖24,996位作者。
  • 示例书籍:包括《历史的教训》(威尔·杜兰特,约2小时)、亚马逊股东信(杰夫·贝索斯,约10小时)、《我的生活与工作》(亨利·福特,约8小时)等。
  • 流行有声书:列出多部作品,如《Le Roi des Étudiants》、《The Armed Forces Officer》、《The Boys' and Girls' Herodotus》等。
  • 分类书架:提供337个书架,类别包括小说、传记、历史、宗教、哲学、冒险、戏剧、儿童读物等,如美国文学、英国文学、历史小说等。
  • 流行作者:列出多位作者,如Vinceslas-Eugène Dick、Herodotus、Abraham Cahan等。

技术与应用

  • 使用最新OpenAI TTS模型将公共领域文本转换为音频,扩展了书籍的可访问性。
  • 项目旨在支持多语言和多种内容类型,通过链接可查看所有有声书、书架和作者的完整列表。
21. Annual pre-pay and marketing budgets (longform.asmartbear.com)

年度预付与营销预算

核心概念:SaaS 企业的现金流挑战

企业获取每月经常性收入(MRR)是有成本的。关键指标如下:

  • CAC:获取一个新客户的总成本(营销、销售等)。
  • ARPC:每个客户的平均月收入。
  • GPM:毛利率,即扣除交付产品所需直接成本(如支付处理、技术支持、基础设施)后的收入比例。

实际回本期(p) 的计算公式为:p = CAC / (MRR × GPM)。例如,若 CAC 为 $80,MRR 为 $10,GPM 为 67%,则回本期长达 12 个月。这意味着企业需要先垫付营销成本,等待一年才能收回,这对现金流尤其是自筹资金的企业构成巨大压力,且增长越快,现金流压力越大。

优化回本期的几种方法

  1. 降低 CAC:优化广告渠道和投放,但通常改善空间有限,且随规模扩大 CAC 往往会上升。
  2. 提高 MRR提升价格是最有效的手段之一。将月费从 $19 提高到 $39 可能不会流失一半客户,却能将回本期缩短至原三分之一。同时,优化产品定位也能支持更高定价。
  3. 提高 GPM:通过自动化等方式降低支持或基础设施成本,但降本空间有限,且属于战术优化而非战略转型。

关键转型策略:推行年度计费

这是改善现金流最有效的方法。

  • 操作方式:提供年度付费计划,并给予折扣(例如,月付 $10 的产品,年付方案为 $100/年,相当于“免费两个月”)。
  • 现金流效果:企业立即获得全年收入。例如,花费 $80 CAC,可立即收到 $120 现金。在扣除用于覆盖未来服务成本(如 $40)的预留资金后,仍有 $80 可用于新的营销投入。从现金流角度看,营销成本可循环利用,相当于拥有了“无限营销预算”,彻底改变了增长模式。
  • 附加好处:即使只有部分客户选择年付方案,也能显著改善现金流。同时,可以借此机会提高月付价格,进一步加速月付客户的现金回收。

关于年度计费的常见问题

  • 是否影响留存率? 年付客户的高留存率主要是因其本身就计划长期使用,提供此选项有助于识别高风险客户以便早期干预。
  • 客户中途取消如何退款? 可选择按比例退款、按月付标准计算差价退款、提供账户额度或不退款等不同政策。
  • 考虑取消率后的回本期? 实际回本期需根据留存率调整:实际回本期 = 名义回本期 / 留存率。例如,名义回本期 12 个月,12 个月留存率为 75%,则实际回本期约为 16 个月。
  • 公司其他开销? 年付策略主要解决 CAC 导致的现金流问题,是强大的财务工具,但并非解决所有问题的“无限预算”。

总结

文章强调,SaaS 企业应通过大胆提价强力推行年度预付方案来根本性改善现金流,而非仅专注于降本或优化传统广告。年度计费将营销支出的现金回收周期从数月缩短至几乎为零,是自筹资金企业实现快速、可持续增长的关键财务杠杆。

22. Nevada’s public employee pension fund invests passively and beats peers (2016) (www.wsj.com)
23. Firmware update hides a device’s Bluetooth fingerprint (today.ucsd.edu)

固件更新隐藏设备蓝牙指纹

背景与漏洞 移动设备(如智能手机、智能手表等)每分钟会发送大量蓝牙信标。尽管设备制造商通过随机更改MAC地址来防止追踪,但这无法掩盖由硬件制造微小缺陷导致的物理层信号失真。这些独特的硬件缺陷会形成“蓝牙指纹”,使设备仍面临被追踪的风险。加州大学圣地亚哥分校(UC San Diego)的研究团队于2022年首次发现并披露了这一漏洞。

解决方案与技术原理 针对该漏洞,研究团队在2024年提出了一种通过固件更新来完全隐藏蓝牙指纹的修复方案。该方法的核心是多层随机化技术,通过不断且随机地切换信号特征层(类似于佩戴多层隐形眼镜并随机切换以掩盖真实瞳色),使攻击者无法推断出设备的真实物理层指纹。

测试效果 研究人员在广泛用于智能设备的德州仪器CC2640芯片组上实现了该防御原型,测试结果表明:

  • 追踪难度剧增:在未修复状态下,攻击者1分钟内即可实现高精度追踪;应用该固件后,攻击者需连续观察设备超过10天才能达到同等的追踪精度。
  • 防御能力强:即使面对知晓该算法的“国家级”攻击者,防御依然有效。由于MAC地址和物理层(PHY)身份持续变化,即使攻击者近在咫尺也无法通过指纹追踪设备。

部署与未来展望

  • 易于部署:该防御方案可增量推出,仅需对至少一种广泛使用的低功耗蓝牙(BLE)芯片组进行软件修改。研究团队正积极寻求与蓝牙芯片制造商合作,以实现技术的广泛商业部署。
  • 扩展应用:研究团队认为,这种混淆方法同样适用于隐藏和防护设备的WiFi指纹。
24. Building the Bell System (www.construction-physics.com)

AT&T曾是20世纪美国最重要、规模最大的公司之一,其发展史与电话在美国的普及进程几乎完全重合。公司由电话发明者亚历山大·贝尔等人于1877年创立,凭借早期专利垄断迅速扩张,用户从1877年的600户增至1881年的10万户。为应对需求,AT&T建设了庞大基础设施,包括电话机生产、交换局和数百万英里电线。到1900年,其系统已有80万部电话和1300个交换局。

1893年关键专利到期后,AT&T面临数千家独立电话公司的竞争。为避免反垄断指控,它于1913年同意互联。通过持续技术革新——如改用铜线、埋设地下电缆、1914年利用真空管放大器建成首条跨州线路——AT&T实现了长途通话能力,并将网络扩展至全球。到1930年,其系统连接了全球91%的电话。

为支撑不断增长的通话量(从1900年每日200万次增至1975年近5亿次),AT&T长期进行巨额基础设施投资。1960-1973年间,其资本支出近700亿美元(远超同期NASA的阿波罗计划)。至1970年代,公司资产达740亿美元,员工超100万,成为全美最大雇主。

然而,AT&T也面临挑战。1970年代,它为维持利润而削减投资,导致服务故障和延误,引发公众不信任。同时,反垄断诉讼加剧,特别是与竞争对手MCI的纠纷。1982年,AT&T在司法部反垄断诉讼中败诉,被迫剥离22家本地电话公司,其垄断地位终结。

与其他技术进步(如汽车、电力)由众多公司推动不同,美国电话的普及几乎完全归功于AT&T一家。它设计制造设备、铺设线路、运营服务并持续研发,使电话从奢侈玩具变为普及服务:1925至1981年,美国每百人电话数从14部增至84部,同时跨州通话实际成本下降约98%。

25. On Building Systems That Will Fail (1991) (larch-www.lcs.mit.edu)

论构建必将失败的系统(1991年图灵奖演讲)

本文基于费尔南多·J·科巴托(Fernando J. Corbató)1991年图灵奖演讲,探讨了复杂系统设计与失败的必然性。其核心观点是:对于雄心勃勃的系统,关键问题不是“是否会失败”,而是“何时会失败”。

核心论点与案例

  • 主题:演讲聚焦于“雄心勃勃的系统”。这类系统通常规模庞大、复杂、创新性强,且往往无法按预期完美运行。
  • 案例说明
    • 体育与军事:如美式足球和军事作战,都涉及在极限条件下应对意外,完美表现罕见,“SNAFU”(情况正常,一团糟)成为常态。
    • 日常系统:以波士顿交通环岛为例,描述了一种通过激进策略和谨慎小心达成平衡的分布式控制系统。
    • 计算机实例
      1. 浮点下溢:一个物理变量计算因浮点下溢导致结果在某点突然归零,错误可能未被察觉。
      2. 根求解错误:一个研究生用迭代法求解本可用解析解处理的三次方程,且数据有误导致结果无效,其修补程序的方法也很糟糕。
    • CTSS系统事故:在兼容分时系统中,一次安全漏洞导致用户密码文件被显示给所有登录用户。原因在于系统为方便维护,临时允许系统目录多人登录,违反了初始设计中“一个目录一个用户”的假设,编辑器临时文件冲突导致了灾难。

雄心勃勃系统的特性

  • 组织结构:规模庞大,超出小团队范围。
  • 创新性:处于技术前沿,充满不确定性,导致工期常常被低估。
  • 影响:成功后往往成为基础设施,并引发持续改进的需求。

复杂性根源(系统失败的原因)

  1. 规模与管理:人员增加导致管理层级变多,上层脱离实际,下层隐瞒坏消息,沟通效率下降。
  2. 新设计领域:如塔科马海峡大桥的倒塌,是结构工程误入空气动力学领域所致。
  3. 人类使用与安全:在信息共享系统中,信任与安全的权衡极为困难(如密码机制)。隐私和安全责任分散,难以评估。
  4. 数据可靠性:存储设备虽可靠,但故障是致命的。用户易产生虚假安全感,而厂商常回避可靠性问题。
  5. 快速技术变革:如光纤替换铜缆提升效率,但也降低了网络冗余性,导致局部故障影响巨大。
  6. 人类因素:面对众多新技术,用户感到压力,依赖信息过滤,这增加了混乱和出错的可能。

开发经验:CTSS 与 Multics

  • CTSS(兼容分时系统)
    • 背景:1960年代初,批处理时代,旨在提供交互式编程。
    • 创新:简单的监督程序实现分时,需解决终端、定时器、内存保护、I/O等一系列当时无标准解决方案的问题。
    • 成功关键:能进行通用编程并运行旧批处理软件。
    • 影响:改变了计算模式,引出了在线存储、隐私、备份、远程访问和信息共享等新问题。
  • Multics系统
    • 目标:“正确”地实现分时,是MIT、贝尔实验室和通用电气的合作项目。
    • 重大创新:硬件分页/分段、保护环、多处理器设计、用PL/I实现系统。
    • 挑战:硬件全新需从头构建;PL/I语言复杂且编译器实现困难;多组织无行政主管,依赖共识决策。
    • 结果:虽成为商业产品并取得成功,但项目管理(如进度估计)困难。其理念影响了后来的UNIX系统。

结论与建议

  • 必然性:雄心勃勃的系统因复杂性和变化性,失败或缺陷几乎不可避免。
  • 应对策略
    1. 追求简单与优雅
    2. 善用隐喻以统一理解。
    3. 使用受限语言来约束设计空间。
    4. 积极进行**“假设分析”**,预见并规划错误和硬件故障的应对路径。
    5. 假定系统需要维修和修改,进行模块化设计。
    6. 在大型项目中推行团队交叉教育,提高集体韧性和洞察力。
  • 最终要点
    1. 技术演进将支持更雄心勃勃的愿景。
    2. 需从历史错误中学习,同时警惕新问题需新方案。
    3. 对雄心勃勃的系统,必须秉持防御性的设计与实施哲学:不心存侥幸,而要为必将发生的故障做好准备。
26. Johannes Hartlieb's Book of Herbs (1462) (publicdomainreview.org)

Johannes Hartlieb《草药书》(1462年)摘要

书籍概述

《草药书》(Kräuterbuch)是Johannes Hartlieb于1462年创作的作品,大量借鉴了Konrad von Megenberg一个世纪前出版的《自然之书》(Buch der Natur),后者被认为是首部用德语写的自然历史。该书还参考了Thomas of Cantimpré和Albert Magnus的草药手册,这些手册又源于阿拉伯植物手册。与前作不同,Hartlieb的版本包含160幅插图,伴随植物药用描述,被认为是德国古版书时期唯一完全插图的草药书。

内容与结构

  • 内容来源:除复制《自然之书》外,新增未知来源的章节,涉及植物和动物来源的药物。
  • 插图特点:插图虽美观但风格粗糙,生产成本高昂,可能主要用于视觉展示而非药理实践,难以准确识别物种。
  • 组织结构:每章遵循希腊哲学家Theophrastus的植物分类系统:首先命名植物,接着描述其生长位置、储存条件、对身体的影响及制备配方。

医学理论与案例

  • 理论基础:基于中世纪幽默学说和对立原理,如用凉湿的卷心菜治疗热干的头痛,或用刺荨麻摩擦止牙痛。
  • 药用示例
    • 动物使用:鹿用胡椒草拔除猎人箭矢;野生芸香喂鸟使其混乱落地,用醋恢复;致命胡萝卜用于乞丐伪装麻风病,也以醋治愈。
    • 魔法元素:书中涉及神秘学,如警告泄露马鞭草秘密会招致神怒,讨论蔓德拉草时强调保密性。

作者背景

Johannes Hartlieb生于15世纪初,服务于Duke Albrecht III宫廷,后成为Duke Sigmund of Bavaria-Munich的个人医师。他对神秘科学兴趣广泛,著作包括记忆术、月亮占卜、姓名力量研究、巫术目击记,以及《所有禁止艺术之书》(1456年),概述七种黑魔法术。此外,他创作和翻译文学作品,如亚历山大浪漫史和宫廷爱情德文版。

补充说明

文章末尾提及可能植物如西瓜或黄瓜、水莲或水毛茛,但信息不完整,可能为额外插图或未完成内容。

31. ULID: Like UUID but Sortable (2019) (github.com)

ULID:可排序的通用唯一标识符

概述

ULID(Universally Unique Lexicographically Sortable Identifier)是一种为解决UUID在多种应用场景下的不足而提出的标识符方案。它具有128位兼容性、字典序可排序性、更高的编码效率和更简洁的字符串表示。

UUID的局限性

  1. 编码效率低:UUID并非编码128位随机数的最优字符方案。
  2. v1/v2不实用:需要唯一且稳定的MAC地址,在许多环境中难以满足。
  3. v3/v5导致碎片化:需要唯一种子,且生成的ID是随机分布的,易引起数据结构碎片化。
  4. v4信息单一:仅包含随机信息,同样可能导致数据结构碎片化。

ULID核心优势

  1. 兼容性:与UUID同为128位。
  2. 高吞吐:每毫秒可生成约1.21e+24个唯一ULID。
  3. 可排序:支持字典序排序。
  4. 高效编码:采用Crockford's Base32编码,每字符5位信息,标准表示为26字符(UUID为36字符)。
  5. 安全性:不区分大小写,无特殊字符(URL安全)。
  6. 单调性:在同一毫秒内生成时,能正确处理并维持单调排序顺序。

技术规范

组成

ULID由两个部分构成,共128位:

  • 时间戳:48位,表示自Unix纪元以来的毫秒数,可用空间将持续至公元10889年。
  • 随机性:80位,尽可能使用密码学安全的随机源。

字符串表示

  • 格式ttttttttttrrrrrrrrrrrrrrrr (10字符时间戳 + 16字符随机部分)
  • 编码字符集0123456789ABCDEFGHJKMNPQRSTVWXYZ (排除I, L, O, U以避免混淆)

排序规则

  • 按从左至右的字符顺序进行字典序排序。
  • 使用默认ASCII字符集。

单调性保证

当在同一毫秒内连续生成ULID时,随机部分的最低有效位会递增(带进位),从而保证生成的ID严格递增。

  • 示例:连续调用可能生成 ...VRZ -> ...VS0
  • 限制:如果在同一毫秒内生成超过2^80个ID,导致随机部分溢出,生成过程将抛出错误。

二进制布局(16字节)

采用网络字节序(大端序):

0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      32_bit_uint_time_high                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     16_bit_uint_time_low      |       16_bit_uint_random      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       32_bit_uint_random                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       32_bit_uint_random                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

溢出处理

技术上,26字符的Base32字符串可容纳130位信息,而ULID仅需128位。因此,有效的最大ULID为 7ZZZZZZZZZZZZZZZZZZZZZZZZZ,对应纪元时间 281474976710655 (2^48 - 1)。任何实现都应拒绝解码或编码超过此值的ULID。

实现

文章列出了包括C++、C#、Go、Java、JavaScript、Python、Rust、Swift等在内的数十种编程语言的实现库,部分库还提供了二进制格式支持。

灵感来源

部分灵感来自Instagram和Firebase关于分布式系统中生成唯一ID的工程实践。

32. Gunshots reportedly fired at Donald Trump rally; walked off-stage (news.sky.com)
33. How do we make remote meetings not suck? (2018) (chelseatroy.com)

远程会议体验差的根本原因与解决方案

核心问题:并非“远程”,而是“核心会议(Caucus)”模式

远程会议体验不佳的根本原因不在于“远程”形式本身,而在于传统的“核心会议(Caucus)”模式。该模式存在系统性缺陷:奖励插话抢占发言权、惩罚倾听,且忽视了未发言团队成员的反馈。远程形式只是放大了这一系统性问题。

常见误区及无效解决方案

  1. 全员远程(One-remote all-remote):让所有人通过视频接入以平衡体验。这仅统一了网络延迟和音频体验,未解决发言权分配不均的问题。
  2. 减少远程会议,将创意讨论留至线下:假设线下会议更利于激发创意。实际上,线下核心会议同样只利于声音最大、最不受拘束的成员,排斥了潜在贡献者。
  3. 口头警告或事后批评插话者:将插话视为个体行为问题。这仅是治标不治本的“症状管理”,未改变会议奖励插话的底层激励机制,插话行为必然会复发。

解决方案:引入“主持人(Moderator)”机制

要解决核心会议的问题,必须改变激励结构,用“请求发言”和“提升他人贡献”替代“抢占发言权”。引入“主持人”角色是有效途径。

主持人的角色定位

主持人介于严格维持秩序的“主席(Chair)”和深度参与讨论的“引导者(Facilitator)”之间。主持人不参与讨论内容本身,其唯一职责是:通过保护参会者的发言机会,来赋予他们倾听的机会

主持人的关键操作

  • 议程管理:确保会前和会中所有人可见议程,以便提前准备并明确讨论方向。
  • 发言排队:通过举手或聊天工具收集发言意愿,建立发言名单,按顺序分配发言权(将“抢占”变为“给予”)。
  • 制止插话:果断打断插话者,确保发言权交还给当前发言人或名单上的下一位。
  • 主动邀请:识别并主动邀请沉默或未发言的成员表达观点,平衡参与度。
  • 时间控制:为发言和提问设定时间上限,确保会议高效推进,必要时将未完话题移至专门会议。

机制优势与长期影响

  • 打破隐性潜规则:人类社交必然存在结构规则。明确的主持规则取代了偏袒高影响力者的隐性社交规则。高话语权者可能觉得受限,但低话语权者会感到解放。
  • 现有实践印证:敏捷开发中的“迭代计划会议”和“迭代回顾会议”已天然包含主持机制(如产品经理控场),流程清晰且远程参与效果极佳。
  • 促成自我主持与文化沉淀:良好的主持示范会促使团队成员逐渐学会“自我主持(Self-moderate)”(如主动让出话语权、互相制止插话)。这不仅能减轻主持人的负担,还能在日常互动中培育出包容性的企业文化。