2024-07-06

26 篇热帖

1. Tao Te Ching translated by Ursula Le Guin (1997) (github.com)

《道德经》厄休拉·勒古恩英译本概要

译本性质

该版本是作者厄休拉·勒古恩基于保罗·卡鲁斯1898年译本的英文“再创作”(rendition)或“转译”。勒古恩本人不懂中文,其翻译是融合其他译本、个人解读及诗歌化表达的产物,旨在传达老子思想的精髓与神韵。

核心思想

译本围绕几个核心概念展开:

  • :万物本源与运行规律,无形无名,先于天地而生,自然无为。如首章所述,“道可道,非常道;名可名,非常名”。
  • 无为:非消极不为,而是不妄为、不强求,顺应自然地行动。强调“无为而无不为”。
  • :道的体现与运用,是内在的自然力量。如第51章所述,道生之,德畜之。
  • 自然:事物本然的状态,道本身即是“自然”(自己如此)。
  • 对立统一与转化:如美丑、有无、难易等相反相成的概念相互依存并转化。

主要内容主题

  1. 治国与领导:主张无为而治,减少干预、法令与机巧,使民众自然淳朴(如第57章)。理想的领导者“功成事遂,百姓皆谓我自然”(第17章)。
  2. 修身与处世:提倡守柔、谦下、知足、寡欲。如“上善若水”(第8章),以柔克刚。强调摒弃过度知识与欲望,保持内心虚静。
  3. 战争与和平:明确反战,视兵器为“不祥之器”,胜利亦应用丧礼仪式对待(第31章)。认为用兵逞强会导致衰败(第30章)。
  4. 理想社会:描绘了小国寡民、自给自足、安居乐俗、无争无求的图景(第80章)。

翻译与注释特点

  • 语言风格:译文为自由诗体,语言简洁、现代、富有诗意和节奏感,试图传达原文的韵律与意境。
  • 勒古恩的注释:这是译本的重要组成部分。她经常:
    • 阐释自己对章节的理解与解读。
    • 将道家思想与西方哲学、文化(如无政府主义、生态思想)进行对比。
    • 对传统解读提出个人见解,有时会指出某些句子可能是后人掺入。
    • 坦诚翻译中的难点与个人选择。
  • 关键概念解读:例如,她将“玄同”(第56章)解释为超越亲疏、利害、贵贱之别的深邃同一性;将“婴儿”意象(如第55章)理解为永恒本源的象征。

译本价值

勒古恩的译本并非严格学术翻译,而是一种文学性、个人化的再诠释。它以其清晰的诗歌语言、深刻的现代注释,成功地将古老智慧呈现给英语世界读者,尤其注重道家思想的自然观、反专制倾向及其与现代性的对话。

2. Starcraft (A History in Two Acts) (www.filfre.net)

《星际争霸》历史概述

第一幕:作为游戏的《星际争霸》

暴雪娱乐在《魔兽争霸》成功后尝试了多个项目,但在1996年E3展上,早期版本的《星际争霸》因酷似“太空兽人”而遭媒体嘲笑。这次挫折促使暴雪彻底改变经营策略:砍掉大量项目,仅保留《暗黑破坏神》和《星际争霸》,并对后者进行从团队、设计到美术的全面重启。

开发过程漫长而艰苦,暴雪秉持“完成即发行”的原则,注重品质而非赶工。游戏的核心创新在于三个完全不对称的种族:人类(Terran)、虫族(Zerg)和神族(Protoss),它们拥有截然不同的单位、能力和战术风格,彻底颠覆了此前即时战略游戏中阵营镜像对称的传统。

单人战役通过30个任务依次体验三个种族的故事,辅以精心制作的过场动画和配音,叙事质量显著超越同期作品。多人模式则借助**战网(Battle.net)**服务,并通过内部专家Rob Pardo的反复测试与平衡调整,确保竞技公平性。游戏于1998年3月发行后迅速获得商业与口碑成功,全球销量近千万,并成为战网最热门游戏之一。

第二幕:电竞与韩国

《星际争霸》的平衡性、快节奏(每局约30分钟)和高观赏性为其成为电竞项目奠定了基础。而其在韩国爆发式增长则与特定历史背景密切相关:

  • 经济危机:1997年亚洲金融危机导致大量失业,催生了大量廉价的“PC房”(网吧)。
  • 网络基础:政府先前建设的电信设施使PC房能提供高速稳定的网络环境。
  • 青年聚集:失业年轻人将PC房作为廉价社交娱乐中心,《星际争霸》在此迅速风靡。

1999年,制作人黄兴俊在电视台尝试转播《星际争霸》比赛,获得热烈反响。他随后创办了全球首个专业游戏电视频道OnGameNet,并建立职业联赛体系。顶级选手成为国民偶像,比赛观众规模甚至一度超过传统体育赛事。电竞产业随之专业化,俱乐部、赞助商和高额奖金纷纷涌现。

然而,2010年爆出了选手收受贿赂、操纵比赛的丑闻,重创了行业信誉。同年,《星际争霸II:自由之翼》发布,但许多玩家因不愿重头学习新作而坚守初代,或转投其他游戏(如《英雄联盟》)。至2015年,韩国《星际争霸》职业场景已大幅衰落。

尽管如此,电竞作为整体在韩国并未消亡,《英雄联盟》继承了其观众规模。而电竞也如同韩流文化一样,从亚洲辐射至全球,成为现代流行文化的重要组成部分。

来源:本文基于《星际争霸》相关书籍、早期游戏杂志、学术期刊、纪录片及线上资料综合整理。游戏及其资料片现可于暴雪官网免费获取。

3. Teaching general problem-solving skills is not a substitute for teaching math [pdf] (2010) (www.ams.org)

本文核心论点:教授通用问题解决技能不能替代,也不应作为教授数学的有效补充。 研究证据表明,数学问题解决能力源于领域特定知识的积累,而非可迁移的通用策略。

主要论据与内容

1. 对教授通用问题解决策略的批判

  • 缺乏实证支持: 尽管波利亚等人提倡教授如“类比思考”或“简化问题”等通用策略,但过去半个世纪以来,没有系统的随机对照实验证据表明教授此类策略能提升学习者的数学问题解决能力。
  • 误解问题解决的本质: 一些“改革”课程错误地认为,教授通用问题解决技能可以淡化甚至取代具体数学内容的教学,这是一种对认知科学的误解。

2. 数学专长来源于领域特定知识

  • 德格鲁特的象棋研究启示: 象棋大师的卓越能力并非源于通用的“象棋策略”,而是因为他们在长期训练中记忆并识别了数以万计的棋盘配置及对应的最优走法。这表明专家的优势在于其庞大的领域特定知识库
  • 推广至数学领域: 这一发现已被复制到数学等其他领域。有效的数学问题解决者拥有大量存储在长期记忆中的图式,这些图式将问题类型与解决方案程序紧密关联。因此,数学技能是领域特定的,不存在独立于内容的通用解题策略。
  • 手段-目的分析法的局限: 学习者面对新问题时通常自动采用“手段-目的分析法”来缩小差距。此策略不可教也不需教,但它在学习新知识时效率低下,会给认知负荷带来不必要的压力。

3. 有效的数学教学方法:基于例题的学习

  • “例题效应”的强证据: 大量随机对照实验表明,对于数学新手而言,研习例题比直接进行问题解决练习更能促进学习。研习例题是一种直接、明确的教学方式。
  • 降低认知负荷: 研习例题(尤其是与解决类似问题交替进行)能有效减少工作记忆中用于通用搜索策略的负荷,从而促进知识向长期记忆的转化。
  • 明确指导的重要性: 最小指导的教学法(如纯发现学习、探究式学习)在数学等复杂学科中往往效果不佳,会导致学习收效甚微。明确、直接的教学对于构建稳固的领域知识图式至关重要。

结论

培养数学问题解决者的有效途径,不是传授模糊的通用策略,而是通过直接教学(特别是研习大量例题)帮助他们积累和建构丰富的领域特定数学知识与图式。教学应聚焦于数学内容本身,而非将其降格为通用技能的附属品。

4. PostgreSQL and UUID as Primary Key (maciejwalkowiak.com)

PostgreSQL中高效使用UUID作为主键的指南

UUID(通用唯一标识符)常被用作数据库表的主键,因其易于生成、在分布式系统中共享方便,并保证唯一性。然而,UUID的尺寸可能影响性能,本文重点探讨如何在PostgreSQL中高效使用UUID作为主键,而非讨论其是否适合作为键。

PostgreSQL数据类型选择

  • UUID可存储为字符串,但PostgreSQL提供了专门的uuid数据类型,而非使用text类型。
  • uuid类型占用16字节,而text类型有1-4字节的额外开销加上字符串本身。这在大型表中会导致显著差异。
  • 实验对比:插入1000万行后,使用text类型的表和索引大小分别比uuid类型大约54%和85%。text类型使用更多存储页面,增加磁盘I/O和内存压力。

B-tree索引与UUID版本

  • 主键默认使用B-tree索引,该索引对有序值(如自增列)更高效。
  • 随机UUID(如v4)不适合B-tree索引,而时间排序的UUID v7(基于时间生成)更适合,因值持续增长。
  • 在Java中,可通过第三方库(如java-uuid-generator)生成UUID v7。

性能影响

  • 插入性能测试显示,使用UUID v7比UUID v4快约2倍,与text类型相比也更优。
  • 实验通过批量插入10000行并重复10轮测量时间,UUID v7的插入时间稳定且更低。
  • 对于大型数据集或高流量应用,优化可显著提升性能;但对于小数据集(如数百行),差异可能不明显。

总结与建议

  • 如果可能,优先考虑其他键类型(如TSID),但若必须使用UUID,应选择uuid数据类型和时间排序的版本(如UUID v7)。
  • 优化在大数据集和高流量场景中尤为重要,因主键变更成本高。PostgreSQL 17预计原生支持UUID v7。
  • 注意事项:本文基于学习经验,实际性能可能因环境而异。对于小型应用,优化收益有限,但提前规划可避免未来问题。
5. Properly testing concurrent data structures (matklad.github.io)

本文探讨了如何有效测试并发数据结构,旨在解决传统多线程测试因依赖系统时序而导致的不可复现、难以调试及无法最小化失败用例的问题。文章受 Rust loom 库启发,通过从零构建测试模型,推导并实现了并发测试的核心机制。

核心机制:受管线程(Managed Threads)

为精确控制线程交错并消除非确定性,文章设计了“受管线程”API:

  1. 原子操作插桩:封装标准原子类型(如 AtomicU32),在 loadstore 前后插入 pause() 函数,强制线程在原子操作间挂起。
  2. 严格的线程同步:利用 thread_local! 传递共享上下文,结合 Mutex 与条件变量(Condvar)实现控制线程与受管线程的同步。确保任意时刻仅有一个线程运行,彻底消除未受管的并发竞争。
  3. 任务提交:通过通道(Channel),控制线程可向受管线程发送并执行闭包,精确控制并发状态机的每一步演进。

结合 PBT 与用例最小化

文章将并发系统抽象为状态机,并结合基于属性的测试(PBT):

  • 随机调度与模型比对:在测试循环中,随机选择受管线程进行恢复(unpause)或提交操作,并将并发执行结果与顺序执行的参考模型进行等价性断言。
  • 自动最小化(Shrinking):利用基于有限熵(随机字节切片)的伪随机数生成器(PRNG)。当测试失败时,框架通过缩短随机字节切片来减少测试步骤,使复杂的并发失败用例自动最小化为最短、可确定性复现的线程交错序列。

扩展:穷举测试

除随机 PBT 外,文章展示了结合穷举生成器(如 exhaustigen),在限定操作次数内遍历所有可能的线程交错。该方法能在修复缺陷后,为有限操作范围内的并发逻辑提供严格的正确性证明。

7. DuckDB Community Extensions (duckdb.org)

DuckDB 社区扩展库概览

核心摘要: DuckDB 扩展现可通过社区扩展库发布。新机制使用户能使用 INSTALL extension_name FROM community 语法便捷安装扩展,同时让扩展开发者摆脱编译和分发负担。

设计理念与扩展机制

DuckDB 的核心设计目标之一是保持简单性,即系统依赖少、体积极小,以适配 WebAssembly 等资源受限环境。这与用户对高级功能(如空间分析、向量索引、数据库连接等)的需求存在冲突。

为平衡此矛盾,DuckDB 提供了强大的扩展机制,允许用户动态添加新功能(如注册新函数、支持新文件格式、处理新网络协议等)。许多核心功能(如 Parquet/JSON 读取器、HTTPS/S3 连接器)均基于此机制实现。该机制避免了将所有功能捆绑到单一二进制文件中,实现了按需加载。

用户体验:简化安装与使用

此前,DuckDB 已通过中心化仓库简化扩展发现与安装。用户可通过 SQL 命令轻松安装并加载扩展,例如:

INSTALL spatial; -- 仅需执行一次
LOAD spatial;    -- 每次使用时加载

系统会自动下载与当前操作系统及CPU架构匹配的扩展二进制文件。该机制已被广泛使用,每周下载量约600万次,数据传输量达40TB

社区扩展库进一步提升了体验。以 h3 扩展(用于地理空间数据的层次化六边形索引)为例,用户现在可直接从社区仓库安装:

INSTALL h3 FROM community;
LOAD h3;

加载时会自动验证扩展签名,确保平台兼容性并确认来源可信。扩展已针对 Linux、macOS、Windows 和 WebAssembly 构建和分发,支持 DuckDB 1.0.0 及以上版本。

开发者体验:简化发布流程

此前,第三方扩展发布需开发者自行为多平台构建,并无法使用官方签名,迫使用户禁用签名检查(存在安全隐患)。

社区扩展库极大简化了此过程。开发者只需:

  1. 提交元数据文件(如 description.yml),包含扩展名称、描述、版本、仓库信息等。
  2. CI 自动构建、测试扩展(遵循标准模板)。
  3. 等待维护者审核及构建流程完成。

库负责多平台编译、签名及分发,开发者无需处理底层细节。

已发布扩展示例

仓库已包含多个扩展,展示其可行性:

  • crypto:提供加密哈希函数和 HMAC。
  • h3:实现地理空间数据的层次化六边形索引。
  • lindel:实现线性化/反线性化(Z-Order、Hilbert、Morton 曲线)。
  • prql:允许在 DuckDB 中直接运行 PRQL 命令。
  • scrooge:提供金融数据的聚合函数和数据扫描器。
  • shellfs:允许将 Shell 命令用于输入和输出。

安全说明与未来展望

注意: DuckDB 基金会和实验室不审查社区扩展代码,因此无法保证其安全性。用户可通过以下设置显式禁用社区扩展加载:

SET allow_community_extensions = false;

未来,DuckDB 将持续扩展仓库内容。开发者可参考已发布扩展的源代码学习打包方法,并通过 Pull Request 贡献自己的扩展。社区扩展生态是 DuckDB 发展的下一个关键步骤。

8. Copy and Paste context menu entries sometimes disabled when they should not be (bugzilla.mozilla.org)
## 摘要:Firefox 复制粘贴上下文菜单项有时被错误禁用

### 问题概述
Firefox 浏览器在特定情况下,右键菜单中的“复制”和“粘贴”选项会错误地显示为禁用状态,即使用户已选中文本或剪贴板中有内容。此问题影响 Windows、Linux 和 macOS 平台。

### 问题背景
- **相关 Bug**:此问题由 Bug 1732358(启用 Fission 多进程架构)引入。
- **复现条件**:操作常出现在 Google 搜索输入框等输入字段的上下文菜单中,或在页面通过“前进/后退”按钮导航、从后台缓存恢复时。
- **临时解决方案**:用户发现点击地址栏、切换标签页或使用快捷键(如 Ctrl+C)可以临时恢复菜单功能。

### 根本原因分析
1. **焦点管理同步问题**:当页面进入或退出后台缓存(BFCache)时,不同进程(内容进程与父进程)对“活跃浏览上下文”(active browsing context)状态的更新存在竞争条件。
2. **具体流程**:
   - 成功情况下:即将隐藏的页面发送 `WindowHidden()` 清除活跃上下文,即将显示的页面发送 `WindowRaised()` 设置活跃上下文。
   - 失败情况下:这两个操作的顺序颠倒,导致父进程中的活跃上下文状态不同步。
3. **影响**:上下文菜单的启用状态检查依赖于正确的活跃浏览上下文,状态不一致导致菜单项被错误禁用。

### 问题调试与修复
- **团队定位**:开发者通过调试发现,当页面进入 BFCache 时,它会错误地更新父进程的活跃浏览上下文,而即将显示的页面也会执行此操作,两者冲突。
- **解决方案**:修改页面进入 BFCache 时的行为,避免其向父进程发送更新活跃浏览上下文的请求,因为即将显示的页面会正确执行此操作。此修复仅适用于启用 `BFCacheInParent` 的场景。
- **相关改动**:由开发者 sefeng 提交补丁,旨在消除更新操作的歧义性。

### 影响与验证
- **受影响版本**:Firefox 多个版本(从约 120 版本开始出现)。
- **修复版本**:修复已合并到 Firefox 131 版本,并移植到 Beta、ESR 128 和 ESR 115 分支。
- **验证状态**:QA 团队已在 Windows、Linux 和 macOS 上验证修复有效。
- **发布说明**:修复已记录在 Firefox 130 的发布说明中,内容为:“修复了复制和粘贴上下文菜单项有时未按预期启用的问题。”

### 补充信息
- **用户反馈**:问题导致许多重复的 Bug 报告,影响核心用户体验。
- **额外说明**:尽管问题与某些浏览器扩展(如 uBlock Origin)无关,但禁用所有扩展仍无法完全解决。
9. How to implement a hash table in C (2021) (benhoyt.com)

本文旨在讲解如何在C语言中从零实现一个简单的哈希表数据结构,并简要对比了线性查找与二分查找的适用场景。

查找算法对比

  • 线性查找:实现简单,适合数据量极少(约20至30个以内)的场景。
  • 二分查找:查找效率高($O(\log n)$),但要求数组保持有序,导致插入操作成本较高($O(n)$)。

哈希表核心设计

  • 哈希函数:采用64位 FNV-1a 算法,将字符串键映射为数组索引,兼顾简单与高效。
  • 冲突处理:使用线性探测(Linear Probing) 解决哈希冲突。相比传统的链表法,线性探测的数据在内存中更连续,对现代CPU缓存更友好。
  • 动态扩容:当哈希表元素数量达到当前容量的一半时,自动分配两倍大小的新数组,并将原有元素重新哈希迁移,以防止冲突率过高导致性能退化。

C语言实现细节

  • API 设计:提供创建、销毁、获取、设置、获取长度以及基于迭代器的遍历功能。为简化设计,未实现删除操作(线性探测的删除逻辑较复杂),且规定存储的值(Value)不能为 NULL。
  • 内存管理:插入新键时,内部自动分配并复制键(Key)的内存,销毁时统一释放;值(Value)的指针生命周期由调用者自行管理。底层数组使用 calloc 初始化,确保空槽的键指针为 NULL。
  • 高效索引:强制哈希表容量始终为2的幂,通过位运算 hash & (capacity - 1) 替代耗时的取模运算,提升索引计算效率。

评估与讨论

  • 定位与性能:该实现代码约200行,主要作为教学示例,不建议未经充分边界测试直接用于生产环境。初步对比显示,其插入速度比Go语言内置 map 快约40%,查找速度慢约50%。
  • 优化方向:未来可通过减少内存分配(如使用 bump allocator)、短字符串内联存储、调整扩容因子以及补充删除功能,进一步提升其在实际项目中的性能与实用性。
11. The Invention of Zero (www.themarginalian.org)

零的发明:从无到有,重塑世界

“零”这一概念的诞生与发展,是人类意识史上的重大范式转变。它起源于古代美索不达米亚的苏美尔文明(今伊拉克),并在古印度获得符号形式,最终经由阿拉伯世界传播,深刻塑造了数学、科学乃至整个现代文明。其旅程不仅是数学符号的演变,更是一场跨文化的思想融合。

起源:苏美尔的“位置分隔符”

  • 实用需求:约五千年前,苏美尔人使用60进制(六十进制)等混合计数系统,导致计数和记录日益复杂混乱。
  • 概念萌芽:为在书写(湿泥板上的楔形文字)中清晰分隔不同的数位列,他们开始用特定的楔形符号(如两个斜楔或三个钩状标记)来表示“该列无物”。这标志着作为“位置”概念的零的首次出现,尽管它尚未成为一个独立的数字。
  • 意义:此发明源于解决实际计数问题的“精神工程”,是抽象思维的一大飞跃。

传播与深化:希腊的“无限”与“虚无”之争

  • 零的种子随历史向东传播。古希腊数学家阿基米德在研究大数命名系统(如“万”)和“无限”概念时,为“无”或“零”概念的必然性奠定了基础。他帮助人们“具体地思考极大之物”,从而反衬出对“虚无”进行命名的需要。
  • 然而,古希腊人虽感知到零的“幽灵般存在”,却始终没有为其命名。他们纠结于“名称赋予存在”与“零并非一物,而是无物”之间的悖论。

形式确立:印度的符号化与哲学思考

  • 符号诞生:零作为书面符号的确切证据出现在公元876年的印度石碑上,记录为“27°”和“5°”中的“°”。更早的铜板记载存在但真伪难辨。
  • 概念关键:数学家阿耶波多的计数系统虽未直接使用零符号,但他用“kha”一词表示“位置”。这个词后来成为印度表示零的常用词之一,标志着从“空位”到“表示空位的数字”的认知转变。
  • 核心问题:在印度,零的本质被深刻探讨:它是标志着“空无”的符号,还是一个代表“空无”的数字?后者将其提升到与其他数字平等的地位。

影响与渗透:塑造现代世界

  • 跨文化融合:零的概念经由苏美尔、希腊、印度、阿拉伯等文明的交流与传递,最终成为现代数学的基石。阿拉伯世界在其中起到了关键的桥梁和催化作用。
  • 深远影响
    • 数学与科学:零是位值制和现代算术的核心,没有它,精密科学、工程和计算机技术(二进制的0与1)将无从谈起。
    • 哲学与文化:零引发了关于“无限”、“虚无”以及数学是“被发现”还是“被发明”的永恒哲学辩论。它渗透进文学(如莎士比亚《李尔王》中称其为“没有数字的O”)和日常思维。
    • 人类自我认知:它迫使人类反思自身在宇宙中的位置——“我们是造物还是创造者?”

总结

零的历程,始于解决泥板上数列混淆的实际需求,途经古希腊关于“无限”与“虚无”的思辨,在古印度完成从“空位”到“数字”的关键一跃,最终通过阿拉伯世界传播至全球。它不仅是数学史上的里程碑,更是一个抽象概念如何从具体观察中衍生、被赋予符号、并最终重塑人类认知与现实的完美例证。正如数学家罗伯特·卡普兰所言:“透过零,你能看见世界。”

13. Build and train GPT-2 from scratch using PyTorch (differ.blog)

本文介绍了如何使用 PyTorch 从零开始构建和训练 GPT-2 语言模型,旨在通过预测序列中的下一个词来生成类似人类的文本。项目使用 Taylor Swift 和 Ed Sheeran 的歌曲歌词作为训练数据集,整体分为两部分:第一部分涵盖语言建模的基础知识,第二部分将深入实现完整的 GPT-2 架构。

核心构建步骤

1. 构建自定义分词器 (Tokenizer)

语言模型通过数字序列(Tokens)处理文本。文章首先构建了一个字符级(character-level)分词器,提取文本数据中的所有唯一字符,将其映射为词汇表中的索引位置,从而将原始文本转换为 Token 张量。

2. 构建数据加载器 (Data Loader)

定义数据输入模型的维度和批次大小。通过自定义的 get_batch 函数生成训练和评估批次。为了实现下一个词的预测任务,输入 x 和目标输出 y 之间存在一个 Token 的偏移(即 yx 向后偏移一个字符),使模型能够根据前 n 个 Token 预测第 n+1 个 Token。

3. 训练基础语言模型

在引入完整的 GPT-2 架构前,文章先构建并训练了一个简单的 Bi-Gram 模型。

  • 模型结构:仅使用嵌入层(Embedding layer)和 Softmax 层进行 Token 生成,暂时忽略复杂的解码器模块。初始嵌入维度 d_model 设置为等于词汇表大小 vocab_size
  • 模型训练:采用 AdamW 优化器(学习率为 0.001)进行训练。
  • 训练效果:训练后损失值显著下降。虽然由于缺乏深层神经网络,生成的文本语义尚不连贯,但模型已经成功学习到了歌曲的排版格式和换行规律。

项目规划

该项目采用循序渐进的教学方式,将所有代码集中在一个 Python 文件中。通过从基础的字符分词和简单嵌入模型入手,帮助读者直观理解语言模型的核心机制,为后续第二部分实现包含多层解码器的完整 GPT-2 架构奠定坚实基础。

14. Let's stop counting centuries (dynomight.net)

主要观点总结

问题核心

  • 引用Steven Pinker《Enlightenment Now》中的句子,说明使用“世纪”(如“18世纪”)表示时间容易造成混淆,因为“计数世纪”与常规日期交互不匹配(例如“18世纪”实际始于1701年,但人们更熟悉具体年份如1776年)。
  • 通过实验展示:当句子改用“1700s”替代“18世纪”时,更容易理解事件(如美国革命)的时间顺序。

解决方案建议

  • 避免使用“世纪”表述,改为“1700s”等格式。这样更直观、简洁,且减少歧义。
  • 技术差异上,“18世纪”指1701-1800年,“1700s”指1700-1799年;但若差异关键,应明确写出具体日期范围,因大多数人可能不清楚计数世纪的精确定义。

语言演变与采用

  • 类比代词“they”用于单数未知性别的演变:语言可通过逐渐在正式场合使用更清晰表达而进化。鼓励在能轻松切换时,采用“1700s”等说法。
  • 正式写作(如法律文书)可暂保留“世纪”表述,但推动日常使用更直观表达。

处理模糊性问题

  • “the 2000s”可能指十年(2000-2009)、世纪(2000-2099)或千年(2000-2999)。提出约定:尾随零表示范围,如“1490s”指1490-1499,“1500s”指1500-1599。
  • 对于模糊十年(如1800-1809),建议使用通配符格式如“the 180*s”或手动写出范围,避免使用“the 181st century”等复杂表述。

注意事项

  • 人们通常能直观理解上述约定,除非在上下文中同时使用不同范围(如“the 1790s”和“the 1800s”),此时应明确写出日期。
  • 对于2001-2100年,可使用“the 21st century”,因人们常将其理解为当前世纪;但未来需谨慎。
  • 无法完美指代2000-2009年,建议直接指定范围。
15. Amazon is bricking $2,350 Astro robots 10 months after release (arstechnica.com)

亚马逊停售Astro商业机器人,发布仅10个月后即宣布停产

亚马逊宣布将于2024年9月25日停止所有Astro for Business机器人的服务。该产品于2023年11月推出,售价2350美元,主要面向中小型企业作为安防巡逻设备。产品停用后,用户数据将被删除,但已录制的视频在Ring应用中的存储期仍将保留。

主要变动与退款方案

  • 订阅服务即刻免费:自本周起,用户无需继续支付Astro Secure或Ring Protect Pro等关联订阅费用。
  • 全额退款与补偿:亚马逊将向客户退还2350美元购买费用,并额外提供300美元亚马逊礼品卡,同时返还预付的未使用订阅费。
  • 设备回收计划:亚马逊建议用户通过其回收计划处理设备,并承担相关费用。

产品背景与功能

Astro最初于2021年9月作为家用机器人发布,但仅限受邀用户以1600美元购买。商业版转向中小企业市场后,具备自主巡逻、高清夜视、小物件运输等功能,支持Alexa语音控制。然而,亚马逊未透露具体销售数量。

家用版仍处开发中

亚马逊表示,停止商业版是为了集中资源开发家用版Astro。但该版本自2021年宣布以来,至今仍未面向公众发售。内部文件显示,亚马逊计划为Astro集成生成式AI技术和更智能的对话界面,可能通过付费版Alexa实现。然而,该项目开发已超过两年半,涉及超过800名员工,且面临领导层变动和部门裁员,其前景存在不确定性。

产品困境与市场挑战

Astro商业版的迅速停产反映出亚马逊在消费硬件领域的持续挑战。该产品已加入亚马逊失败产品的行列,如Fire Phone、Dash按钮等。与此同时,亚马逊正致力于让Alexa在2024年实现突破,但分析师警告,若付费订阅计划未能成功,Alexa可能面临投资缩减。

尽管家用版Astro仍在开发中,但商业版的突然退市可能影响消费者对未来产品的信任度。

17. Anxious Generation – How Safetyism and Social Media Are Damaging the Kids (matija.eu)

《焦虑一代》一书探讨了作者乔纳森·海特提出的“大重塑”概念,认为两种社会力量共同导致年轻一代心理健康问题激增。

核心观点:社交媒体与“直升机育儿” 书中区分了普通电脑使用与社交媒体的负面影响。社交媒体利用社交验证循环,让青少年(尤其是女孩)陷入持续寻求认同的困境,这与2010年代后心理健康疾病发病率上升的统计数据相吻合。研究甚至表明,手机的存在(无论是否使用)会降低学生的认知表现。

与此同时,“直升机育儿”模式大幅推迟了孩子独立行事的年龄(如独自外出),并过度移除成长中的风险与挑战,导致孩子缺乏应对现实的能力。这种对线下活动的严格管控与线上活动的放任形成对比,形成了“基于手机的童年”:孩子更倾向于通过手机社交,而非在现实互动中学习生活技能。

解决方案建议 作者提出通过“从童年到成年的阶梯”重建成长路径,例如设定各年龄段应承担的责任和独立权限,并建议将社交媒体的使用年龄推迟至16岁,以扭转当前过度保护与数字沉迷并存的局面。

18. Jqjq: Jq Implementation of Jq (github.com)

jqjq:用 jq 实现的 jq 解释器

jqjq 是一个使用 jq 语言自身实现的 jq 解释器。该项目最初源于为 fq 工具研究如何在 jq 中编写格式解码器,过程中涉及了一些抽象语法树(AST)操作,最终从一个玩笑发展成一个兼具趣味性与教育意义的项目。它也展示了 jq 作为一种表达能力强、功能完备且简洁的语言的特性。

使用方式

jqjq 可以在多种 jq 实现上运行,包括:

  • jq(1.8 或更高版本)
  • gojq
  • jaq
  • jqjq 自身

主要通过命令行使用,提供包装器脚本 ./jqjq,支持多种模式:

  1. 直接执行 jq 表达式:例如 ./jqjq -n 'def f: 1,8; [f,f] | map(.+105) | implode' 输出 "jqjq"
  2. 作为 jq 的库使用:通过 include "jqjq" 在 jq 中调用 eval 函数来动态执行表达式。
  3. REPL 模式:使用 --repl 参数启动交互式环境。
  4. 切换后端:通过 --jq 参数指定使用 gojqjaq 作为底层执行引擎。
  5. 运行测试:提供 make test 等命令来运行其自身的测试套件。

它还支持一些高级功能,例如将 jqjq 自身作为字符串求值(eval),以及将 eval 的输出用作赋值路径。

技术实现与设计

jqjq 采用了经典的解释器设计流程:词法分析(Lex)、语法分析(Parse)和求值(Eval)。

  1. 词法分析(Lex)

    • 将输入字符串转换为标记(token)数组。
    • 通过按优先级顺序匹配正则表达式来正确处理不同长度的词素(如先匹配 += 再匹配 +)。
    • 内置栈结构用于正确处理括号平衡和字符串插值中的语法。
    • 可通过 ./jqjq --lex '...' 查看标记化结果。
  2. 语法分析(Parse)

    • 接收标记数组,使用带回溯的左到右(LR)解析器和优先级攀升技术来处理中缀运算符,避免陷入无限循环。
    • 采用与 gojq 相同的 AST 设计。
    • 可通过 ./jqjq --parse '...' 查看抽象语法树。
  3. 求值(Eval)

    • 遍历 AST 进行求值,同时维护当前路径环境
    • 路径用于追踪在输入数据中的位置(如 path(.a[1]) 得到 ["a", 1]),这对于实现赋值至关重要。当操作产生新值而无法追踪路径时,路径会被设为 [null]
    • 环境是一个包含当前函数和绑定的对象。函数键为 <名称>/<元数>,值为函数 AST;绑定键为 $<名称>/0,值为包含普通 jq 值的对象。

功能覆盖与现状

jqjq 实现了 jq 的大部分核心功能,包括:

  • 标量字面量、字符串插值、对象和数组字面量。
  • 运算符(算术、比较、逗号、管道等)。
  • 控制结构(if-then-elsereduceforeachtry-catch)。
  • 函数定义、递归、绑定和解构。
  • 丰富的内置函数库(如 map, select, path, getpath 等)。
  • 大部分 CLI 选项。
  • 一些非标准选项,如 --jq, --repl, --lex, --parse

当前状态:项目仍在发展中,已知存在一些问题、待办事项和局限性,例如错误信息不完善、环境传递效率不高、某些运算符结合性处理、路径追踪逻辑需优化,以及与 gojq 等实现的 AST 差异等。针对 jq 官方测试套件(jq.test),基于 stedolan 的 jq 实现,jqjq 能通过 312/469 项测试,但不同实现间可能存在因错误消息或特性支持不同而导致的差异。

致谢与许可

该项目由 Mattias Wadman 开发,并基于 MIT 许可证发布。文中感谢了 stedolan(jq 作者)、pkoppsteinitchynygojq 作者,提供了大量参考和修复)、Michael Färberjaq 作者,引入了优先级攀升技术)以及 Thalia Archibald 的多项贡献。

19. Crystal Fragment Turns Everything You See into 8-Bit Pixel Art (www.yankodesign.com)

水晶碎片将所见景象转化为8位像素艺术

产品概述

Pixel Mirror 是一款可穿戴水晶设备,能将用户所看到的景象转换成8位像素艺术风格。它由日本材料设计师兼工程博士 Hakusi Katei(别名 Monoli)开发,旨在满足人们对像素风格的情感连接,这种风格让人联想到早期计算机和视频游戏图形,并模糊了模拟与数字之间的界限。

设计与功能

  • 材质与颜色:由浅色透明水晶制成,提供森林绿、灰色和无色变体。
  • 适用环境:专为明亮环境设计。
  • 尺寸:16mm x 16mm x 10mm,小巧轻便,可作为项链吊坠佩戴。
  • 制作方式:所有棱镜均为手工制作,由于天然石头的抛光特性,像素块并非完美方形,而是根据石材条件定制。
  • 核心功能:无论距离和移动如何,它都能降低所见景象的分辨率,生成像素艺术效果。

实用性

  • 潜在应用:尽管一些人可能视其为噱头性穿戴设备,但对艺术家和画家具有实用价值,因为它能通过棱镜立即提供场景的简化色块,便于艺术创作。
  • 情感价值:重新点燃对像素化风格的记忆,连接早期数字美学。

未来产品

Monoli 正在开发 Pixel Window,艺术家描述为“镜头无需电力就能将场景变成我的世界风格”,进一步扩展像素艺术的应用。

销售信息

Pixel Mirror 目前在日本销售,售价为 ¥19,800(约 120 美元)。日本以外的用户需关注 Monoli 的推文以获取国际可用性信息。

20. Research into homeopathy: data falsification, fabrication and manipulation (www.skeptic.org.uk)

文章摘要:顺势疗法研究中的数据伪造、编造与操纵

文章围绕顺势疗法研究的科学性争议展开,重点揭露了迈克尔·弗拉斯(Michael Frass)教授团队一项阳性结果研究中的学术不端行为,并批判了该领域普遍存在的研究扭曲现象。

核心背景与争议

  • 顺势疗法的科学定位:作者指出,顺势疗法被广泛认为是安慰剂疗法,其基本原理违背科学常识,制剂通常不含活性成分,且临床试验证据普遍消极。英国、法国乃至其发源地德国(德国医学大会决议)均明确认为它不符合理性医学和伦理要求。
  • 阳性研究的存在:尽管总体证据负面,但确实存在部分研究声称顺势疗法有效。传统解释是这些研究方法学不严谨(如非随机、非双盲)。然而,弗拉斯等人2020年发表的一项研究曾对此提出挑战。

弗拉斯研究及其疑点

  • 研究声称:该研究为随机、安慰剂对照、双盲试验,发表于知名期刊《The Oncologist》,显示顺势疗法作为辅助治疗可改善肺癌患者生活质量并显著延长生存期。论文由维也纳医学院知名专家团队发表。
  • 初步质疑:作者因弗拉斯过往发表的12项顺势疗法研究均为阳性结果而持怀疑态度。独立分析者(诺伯特·奥斯特和维克多·韦斯豪普尔)很快指出研究存在多处不一致。
  • 调查与确认:质疑促使期刊和维也纳医学院收到投诉,案件转交奥地利科研诚信机构。经过长达三年多的复杂调查(包括原始文件现场审查),机构最终确认存在数据伪造、编造和操纵,并认定其违反科研诚信。

调查后续与期刊反应

  • 机构建议:调查委员会建议涉事大学追究责任,并紧急要求期刊撤回该论文
  • 期刊处理滞后:尽管建议已发出数月,《The Oncologist》仅在论文页面添加了“关注声明”,提醒读者研究结果可能不可靠,但至今未正式撤稿。这可能导致脆弱的癌症患者继续受虚假结果误导。

根本问题与批判

  • 顺势疗法研究的核心问题:作者将弗拉斯案例视为该领域(及补充替代医学)系统性问题的缩影。不同于常规医学中常见的经济利益驱动,替代医学研究常受意识形态驱动——研究者主要动机是证明偏好的疗法有效,而非客观验证假说。
  • 滥用研究的后果:这种“证明而非检验”的心态导致研究被滥用,使得像弗拉斯这样的研究者能持续发表阳性结果。作者提及自己统计的“替代医学名人堂”(含24位伪科学家,其中6位专攻顺势疗法研究)即是一例。
  • 损害与建议:科学欺诈造成严重损害,甚至可能缩短患者生命。作者呼吁采取措施遏制此现象,具体建议包括:禁止像弗拉斯这类持续产出不可信结果的研究者获得公共研究资助,以遏制伪科学研究。
21. YouTube's eraser tool removes copyrighted music without impacting other audio (techcrunch.com)

YouTube推出AI驱动的擦除工具,帮助创作者移除版权音乐

2024年7月4日,YouTube发布了一款更新的擦除工具,旨在让创作者能够轻松移除视频中的版权音乐,同时完整保留对话、音效等其他音频。

YouTube首席执行官尼尔·莫汉宣布了此工具,称其为“擦除歌曲”工具。该工具允许创作者移除被声明版权的音乐,而不影响视频的其他部分。

此前,该工具已进行了一段时间的测试,但移除歌曲的准确性不足。新版本采用了人工智能算法,能够更精准地检测并移除特定的版权歌曲。

不过,YouTube也提醒创作者,在某些情况下(例如歌曲难以分离时),该算法可能无法成功移除。若擦除不成功,创作者可以尝试其他编辑方法,例如静音被声明的片段剪掉被声明的片段

一旦创作者成功编辑视频,YouTube的内容ID系统将自动移除针对该视频的版权声明。

23. RadioSide turns your spare device into a radio (radioside.com)

RadioSide 应用摘要

RadioSide 是一项服务或应用,旨在将用户的闲置设备转变为功能齐全的收音机。根据更新公告,该收音机已迁移到新版本 /v1,用户需更新书签和设备以访问最新功能。

核心功能

  • 设备转化:利用备用设备播放电台广播。
  • 界面控制:提供标准收音机操作按钮,包括电源开关(POWER)、音量调节(▲/▼)、频道切换(DIR)、静音(MUTE)、数字输入(0-9)、保存(SAVE)、加载(LOAD)、删除(DEL)、随机播放(RND)等。
  • 全屏模式:支持全屏显示(FULL SCR)以优化体验。

更新详情

  • 版本迁移:收音机已从旧版过渡到 /v1,官方网址更新为 https://radioside.com/v1
  • 用户行动:建议用户更新浏览器书签和设备设置,以确保顺利访问。
  • 数据保留:所有已保存的电台均完整保留,无需担心数据丢失。

总结 RadioSide 通过简单界面将闲置设备转化为实用收音机,最新版本更新提升了稳定性。用户应尽快适配新版本以享受持续服务。

24. Rogers networks reliability and resiliency assessment after 2022-07-08 outage (crtc.gc.ca)

Rogers 2022年7月网络中断可靠性与弹性评估总结

中断概述与根本原因

2022年7月8日,Rogers因IP核心网络故障导致全国性服务中断,影响超1200万用户。根本原因为网络升级时的配置错误:员工移除了分发路由器的访问控制列表(ACL)过滤器,引发IP路由信息洪泛。由于核心路由器缺乏过载保护,导致其迅速崩溃。此外,变更管理流程存在缺陷,风险评估算法错误地将该操作降级为“低风险”,免除了必要的严格审查和实验室测试。

网络架构与恢复延迟因素

Rogers的有线和无线网络共享同一IP核心网络,虽符合Tier 1标准,但导致单点故障引发全网瘫痪。网络恢复被严重延迟,原因包括:

  1. 管理网络缺陷:管理网络依赖故障的IP核心网,且缺乏第三方备用连接,导致远程排障受阻。
  2. 通信中断:员工依赖自家网络沟通,中断初期无法有效协作。
  3. 信息获取滞后:初期无法获取错误日志,且维护窗口内存在多次变更,导致根因误诊。

Rogers的改进措施

评估认为Rogers的整改措施足以提升网络弹性:

  • 架构优化:部署防路由洪泛保护;建立独立的管理网络并引入第三方备用连接;推进无线与有线网络IP核心的分离(进行中)。
  • 流程改进:更新变更管理的风险评估算法,增加自动化和实验室测试;完善事件管理指南,引入配置自动回滚机制,并为关键员工配备第三方备用通信工具。

对Rogers及行业的建议

报告建议Rogers全面测试紧急漫游、深化根因分析、严格配置变更测试、扩大演练、制度化经验学习,并在中断时指导用户拨打911。

针对电信行业,报告总结了关键经验:

  • 实施路由器过载保护,物理与逻辑分离管理网络。
  • 确保关键站点具备第三方备用连接和员工备用通信手段。
  • 强化配置变更审计与实验室测试,控制单一维护窗口内的变更数量。

面对网络云化、虚拟化等演进趋势,建议运营商探索低轨卫星备用连接、跟进3GPP灾难漫游标准、利用OTT应用和动态SIM技术作为应急通信替代方案,并建立事件响应KPI与常态化演练机制,以全面提升网络韧性。

26. Preserving a floppy disk with a logic analyzer and a serial cable (www.chzsoft.de)

保存软盘:使用逻辑分析仪和串行电缆

目的

作者旨在使用逻辑分析仪(如Saleae Logic 8)和串行电缆捕获3.5英寸软盘的底层磁通变化数据,实现忠实保存,替代专用设备如Kryoflux。

软盘驱动器接口原理

  • 软盘驱动器接口低级:读取时,磁盘旋转后输出磁通变化脉冲(仅下降沿相关),而非直接字节数据。
  • 数据需编码:如MFM(改进频率调制)编码,用于数据位、时钟恢复和扇区标记。示例基于IBM PC和Atari ST的MFM编码,但捕获在原始磁通级别进行,适用于所有编码。
  • 关键信号:读数据线(脉冲间隔4µs、6µs或8µs)、索引信号(每转一圈脉冲,用于确定转圈时间)、写门信号(保持高电平非活跃)、侧选择信号(选择磁盘面)。
  • 轨道控制:通过步进脉冲和方向信号移动磁头,轨道0信号指示磁头在外轨道。

硬件设置

  • 逻辑分析仪连接:连接到驱动器引脚,输出信号(如读数据、索引)需上拉电阻。配置驱动器为选择B,拉低驱动选择B和马达启用B线。
  • 串行电缆控制:使用USB串行电缆(如FTDI)的控制线:RTS控制方向、DTR控制侧选择、TX作为步进信号(发送0xff字节产生脉冲)、CTS读取轨道0状态。GND接地。

软件自动化

  • 使用Python脚本自动化:通过pyserial模块控制串行端口,通过Saleae Python API控制逻辑分析仪。
  • 流程:逐步驱动磁头(两侧),捕获每个轨道数据,基于索引信号裁剪为一圈数据,计算磁通变化时间间隔。
  • 配置Saleae通过设置文件,因API不暴露所有设置。

数据保存格式

  • 导出为Supercard Pro (.scp)文件格式:文档齐全,被模拟器等应用支持,存储磁通变化时间。
  • 脚本生成.scp文件,包含正确头部。

测试结果

  • 测试一个软盘:生成约14MB的.scp文件(磁盘容量720KB),显示底层信息丰富。
  • 使用HxCFloppyEmulator软件解码:成功解码所有1440个扇区,无错误,证明设置有效。
  • 数据可显示驱动器特性:如轨道0的磁通时间显示原始驱动器抖动,而FAT扇区被不同驱动器重写,实现“驱动器指纹”。

改进点

  • 速度慢:约10秒每轨道,全盘约800秒,主要耗时在Saleae数据捕获和导出,可优化。
  • 保存多个转数:为缺陷或复制保护磁盘,需保存多转数据,.scp格式支持,脚本可扩展。
  • 马达控制:当前马达总开启,需切换电源换盘;可通过串行电缆输出引脚控制马达启用信号,但pyserial可能不支持设置。

代码资源