2024-12-02
30 篇热帖
2. Ask HN: How can I grow as an engineer without good seniors to learn from?
3. Show HN: Markwhen: Markdown for Timelines (markwhen.com)
Markwhen:用于时间线的 Markdown 语法
核心概念 Markwhen 是一种语法和工具,旨在让用户能够使用类似 Markdown 的简洁文本格式来创建和可视化时间线。其设计目标是将复杂的时间线数据转化为易于编写、阅读和理解的纯文本。
输入与输出
- 输入:用户使用 Markwhen 语法编写文本。该语法通常包含事件描述、开始/结束日期、标签或分类等信息。这种输入方式使得在版本控制系统中跟踪时间线变化、与他人协作编辑变得非常简单。
- 输出:工具将编写的 Markwhen 文本解析并转换为可视化的时间线视图。输出可以是交互式的网页时间线,也可以是静态的图像或图表。
主要特点与优势
- 简洁直观:采用轻量级的标记语言,学习成本低,编写效率高。
- 纯文本基础:作为纯文本,便于在各种编辑器中编写,易于存储、搜索和版本管理。
- 可视化输出:将结构化文本自动转化为直观的时间线图表,有助于理解事件序列和持续时间。
- 灵活性:适用于规划项目里程碑、展示历史事件、安排日程等多种需要时间轴展示的场景。
应用场景 该工具特别适合需要将文本描述的时间信息快速转化为可视化图表的场景,例如:
- 项目规划:清晰展示任务、阶段和截止日期。
- 历史叙事:将历史事件按时间顺序可视化。
- 个人日程管理:规划和回顾个人或团队的活动安排。
4. Sitters and Standers (pudding.cool)
标题:Sitters and Standers
作者:Alvin Chang
本文可能探讨了与“坐着的人”和“站着的人”相关的话题。根据标题推测,内容或聚焦于人们在不同场景(如工作、休闲、交通)中对坐与站的选择,并可能涉及这些行为背后的健康、社会习惯或文化因素。作者提到提供了一个视频故事版本,表明报道可能包含视觉化元素以更生动地呈现主题。核心信息可能在于比较两种行为状态的差异或影响,具体细节需通过链接访问完整内容。
5. Hiroshi Nagai: Japan's Sun-Drenched Americana (www.tokyocowboy.co)
长尾宏(Hiroshi Nagai)1947年出生于德岛乡间,以其高产的波普风格绘画而闻名,这些画作在20世纪70年代末和80年代日本的“城市流行”(City Pop)音乐运动中构成了视觉背景。他自幼受父亲绘制油画影响,对艺术产生热情。青年时期移居东京,希望进入艺术学校但未被录取。为谋生,他最初为一位东京艺术家担任布景装饰师,随着声誉渐起,最终转向插画创作。
他的艺术风格深受美国波普艺术概念及大卫·霍克尼等英国波普艺术家的影响,专注于描绘想象中的20世纪50年代美国风情。在吸收了早期波普艺术家作品中深蓝色的天空、悠闲的海滨景色和静谧的夜间都市景观后,长尾宏在20世纪70年代末逐渐形成了自己的风格。他的作品在1980年左右开始在日本获得关注,这恰逢“城市流行”音乐的兴起。
“城市流行”在日本被大致定义为具有“都市感”的音乐,大量借鉴了20世纪60年代美国南加州的“软流行”和“阳光流行”风格。这些音乐风格类似于背景音乐,是美国战后经济繁荣的象征,因此与80年代日本蓬勃发展的经济氛围自然契合。
长尾宏笔下的加州城市景观和悠闲的泳池场景因此与“城市流行”音乐的声音完美融合。在整个80年代,他成为“城市流行”专辑封面设计的常客,他的艺术风格可以说是塑造该运动整体美学的最大贡献者之一。
长尾宏至今仍在进行创作,他的版画近来被“蒸汽波”(vaporwave)等现代运动所借鉴。这类现代美学建立在怀旧基调之上,并深深植根于日本已逝的泡沫经济时代。这体现了风格的循环性:现代运动如此大量地借鉴长尾宏的作品,而长尾宏本人当初也是在改编更早的、已然消逝的20世纪50年代美学。
6. Every board game rulebook is awful [pdf] (drive.google.com)
根据提供的内容,这是一个用于在线查看名为“EveryRulebookIsAwful_DRJ_v1.0.pdf”的PDF文件的Google云端硬盘页面。页面本身不包含PDF文件的实际文本内容,仅显示了文件查看器界面、元数据以及加载相关的脚本和样式信息。
从文件元数据可知:
- 文件名:
EveryRulebookIsAwful_DRJ_v1.0.pdf - 文件类型:
application/pdf - 所有者:
deanrayj@gmail.com - 页面标题:
Every board game rulebook is awful [pdf]
由于提供的材料是HTML页面源代码而非PDF文档内容,因此无法对文章的具体论点、结构或细节进行摘要。基于文件名和页面标题推断,该PDF文档可能是一篇批评桌游规则手册普遍设计拙劣的文章。
7. 'Brain rot' named Oxford Word of the Year 2024 (corp.oup.com)
牛津2024年度词汇:“Brain rot”
牛津大学出版社宣布,经超过3.7万名公众投票并结合专家审议,“brain rot”(脑腐)被选为2024年度词汇。
定义与起源
- 定义:指因过度消费被认为琐碎或无挑战性的内容(如今尤指在线内容),而导致个人精神或智力状态的假想性退化;亦指可能导致这种退化的事物。
- 历史起源:该词最早记录于1854年亨利·戴维·梭罗的著作《瓦尔登湖》中。梭罗批评社会倾向于贬低复杂观念而偏好简单观念,并视此为精神与智力努力普遍衰退的迹象。
当选原因与流行背景
- 使用激增:该词在2023年至2024年间使用频率增长了230%。
- 反映社会关切:它捕捉了人们对过度消费低质量网络内容(尤其在社会媒体上)所产生影响的日益增长的担忧。
- 数字时代的新意义:
- 内容与后果的双重指代:既指社会媒体和互联网上的低质量、低价值内容,也指消费此类内容对个人或社会可能产生的负面影响。
- 与网络文化的紧密关联:常以幽默或自嘲方式使用,与特定流行内容紧密相连,如亚历克谢·格拉西莫夫的《Skibidi Toilet》系列视频和“only in Ohio”梗图。
- 衍生“脑腐语言”:催生了如“skibidi”(指无意义的事物)和“Ohio”(指令人尴尬或怪异的事物)等源于网络流行文化、并向线下现实世界扩散的新词汇。
广泛讨论与影响
- 起初流行:该词最初在社交媒体平台(尤其是TikTok的Z世代和Alpha世代群体)中获得关注。
- 进入主流:如今在主流新闻中得到更广泛使用,社会上关于过度消费此类内容可能对心理健康(尤其对儿童和年轻人)产生负面影响的严肃讨论也正在兴起。
牛津语言总裁的点评
牛津语言总裁卡斯帕·格拉斯沃指出,过去二十年的年度词汇反映了社会对虚拟生活演变、网络文化渗透的日益关注。“脑腐”触及了虚拟生活的一个被感知的危险以及我们如何利用闲暇时间。值得注意的是,该词被Z世代和Alpha世代(这些内容的主要使用者和创造者群体)所采纳,他们通过被指会导致“脑腐”的社交媒体渠道传播了这个表达,这体现了年轻一代对其所继承的社交媒体有害影响的一种俏皮的自我意识。
8. Programming the C64 with Visual Studio Code (retrogamecoders.com)
文章摘要
本文介绍了如何使用微软 Visual Studio Code(VS Code)跨平台开发 Commodore 64 程序,支持 BASIC、汇编语言和 C 语言。文章指出,传统的 C64 开发工具(如 CBM PRG Studio)主要为 Windows 设计,而通过 VS64 扩展,开发者可以在 macOS、Windows 和 Linux 上获得现代化的编程体验。
核心内容:
- VS64 扩展简介:VS64 是一个免费的 Visual Studio Code 扩展,为 C64 编程提供语法高亮、工具链集成和项目管理功能。可通过 VS Code 的扩展市场搜索安装。
- 环境配置:安装后,扩展提供设置向导,用于配置所需的编译工具。主要配置包括:
- 汇编器:支持 ACME 和 Kick Assembler。需单独下载安装。
- C/C++ 编译器:支持 CC65 和 LLVM-MOS。需单独下载安装。
- 模拟器/调试器:支持 VICE Commodore 64 模拟器,用于代码的调试和运行。
- BASIC 支持:无需额外安装,直接支持 Commodore BASIC V2 和 Simon's BASIC。
- BASIC 编程增强功能:VS64 为 BASIC 开发提供了超越原生 C64 环境的特性,包括:
- 支持标签代替行号(代码中可读性更高,转换时自动分配行号)。
- 自动编号、代码压缩、行号重排序、移除 REM 语句等编辑工具。
- 丰富的 PETSCII 控制字符支持,通过类似
{clr},{green}的助记符在字符串中嵌入屏幕控制命令。
- 项目创建与示例:可以通过命令面板快速创建针对特定汇编器(如 Kick Assembler)的项目。文章末尾提供了一个 Kick Assembler 的汇编代码示例,并演示了如何利用 VS64 一键编译并使用 VICE 模拟器运行调试。
- 资源打包:VS64 能够捆绑二进制资源(如精灵、字符集、SID 音乐文件),供程序调用,但此功能需要 Python 3 环境。
结论:VS64 扩展为 Commodore 64 编程提供了一个强大、免费且跨平台的现代开发环境,整合了代码编辑、编译、调试和资源管理,降低了在多操作系统上进行复古计算机开发的门槛。
9. Procedural knowledge in pretraining drives reasoning in large language models (arxiv.org)
文章摘要:预训练中的程序性知识驱动大语言模型的推理
文章标题: 预训练中的程序性知识驱动大语言模型的推理
核心内容总结:
本文通过分析大型语言模型的预训练数据,探究其执行推理任务时采用的泛化策略。研究旨在解决LLM能力表现中“通用问题解决能力”与“推理缺陷”并存的矛盾,并克服传统训练-测试集分离方法在海量数据下的应用限制。
研究方法: 研究针对两个不同规模(7B和35B)的LLM,分析了其2.5B个预训练词元。通过识别对三个简单数学推理任务的模型输出产生影响的文档,并将此与影响事实性问题回答的数据进行对比,来揭示模型的泛化机制。
主要发现:
- 数据依赖差异:对于不同的事实性问题,模型主要依赖几乎不重叠的、独特的数据集。
- 程序性知识的体现:对于同一推理任务内的不同问题,模型却常常依赖相似的数据文档。这表明模型利用了文档中蕴含的程序性知识。
- 答案在数据中的呈现方式不同:
- 对于事实性问题,答案本身经常出现在最具影响力的数据文档中。
- 对于推理问题,答案本身(包括中间推理步骤的答案)通常不会作为高影响力内容出现。
- 定性分析:对推理任务排名靠前的文档进行分析,证实这些文档通常包含程序性知识,例如展示如何使用公式或代码来推导解决方案。
结论: 研究表明,LLM的推理方式并非简单的信息检索。相反,它更像是一种可泛化的策略:模型从执行类似推理过程的文档中综合提取程序性知识,并将其应用于解决新的推理问题。这揭示了LLM内部推理机制的一种重要模式。
10. What Will Enter the Public Domain in 2025? (publicdomainreview.org)
2025年进入公共领域的作品
每年1月1日,新一批作品进入公共领域,可免费享受、分享和重新用于任何目的。由于全球版权法差异,公共领域没有统一标准,文章聚焦三个主要规则:
- 作者去世后70年的国家(如英国、俄罗斯、欧盟和南美大部分地区):2025年进入公共领域的是1954年去世的作者的作品。
- 作者去世后50年的国家(如新西兰、非洲和亚洲大部分地区):进入公共领域的是1974年去世的作者的作品。
- 美国:进入公共领域的是1929年出版的电影和书籍(包括其中的艺术作品)。
文章还提到一个倒计时式日历,在12月期间每天揭示2025年的亮点作品。到1月1日公共领域日,所有作品将被公布,并会发布特别博客文章。用户也可以访问提供的链接直接探索新作品。
11. Kenya and "the decline of the greatest coffee" (2021) (christopherferan.com)
肯尼亚咖啡因其致密饱满、酸质明亮、风味强烈且常带有醋栗或番茄般独特香气而备受推崇,但近年来其品质出现下降,引起业界关注。
核心问题:殖民遗留的出口体系是根本原因 作者认为,品质下降并非主要源于品种(如Ruiru 11、Batian)替代SL-28/SL-34,而是植根于肯尼亚独特且僵化的咖啡出口体系。该体系是殖民时代的遗留产物,本质上是剥削性的:
- 流程冗长,生产者被边缘化:生产者(尤其是小农)无法直接出口。咖啡需经合作社/协会处理后,通过干磨厂、营销代理(常与出口商关联)和拍卖系统等多个环节才能出售。整个过程缺乏透明度,生产者收益微薄。
- 付款延迟,成本高昂:从采摘到获得付款常需等待半年以上。生产者在此期间需以极高利率(常超20%)借贷维持生活和生产,进一步侵蚀利润。合作社常扣除高额费用,导致生产者实际所得远低于生产成本。
- 系统性不公与效率低下:该体系由少数营销代理和出口商主导,限制了自由竞争。生产者缺乏动力进行精细化管理,因为其努力很难转化为直接经济回报。
品质下降的直接表现与技术性原因 随着肯尼亚咖啡总产量大幅下降(从1980年代高峰期的约12.9万吨降至目前约4万吨),传统的加工工艺也发生了改变:
- “二次水洗”/“二次发酵”工艺的弃用:这种肯尼亚标志性的工艺(干发酵后清洗并浸泡)最初是为应对高产量下干燥空间不足而设计的缓冲方案。它意外地创造了独特的明亮酸质和风味。但由于产量下降,干燥空间不再紧张,加之该工艺耗时耗力增加成本,许多工厂已不再执行。省略此步骤可能导致咖啡风味强度下降。
- 干燥与仓储环节的简化:为加快周转,咖啡可能被快速干燥而缺少必要的“静置”阶段来均匀水分。此外,带壳豆在拍卖和出口前很早就被去壳存放在无气候控制的仓库中,容易导致风味衰退。
- 小批次合并:为提高磨坊效率,小批次咖啡常被合并成大批次进行处理和销售,这掩盖了个体生产者的努力和咖啡的微域特色。
历史根源与未来展望 历史研究表明,当前不平等的体系源于殖民时期。英国定居者通过政策确保自身利益,并刻意将小农咖啡混合处理,抹杀其个体价值,从而打击其提升质量的积极性。
尽管存在一些改革提案(如2021年《咖啡法案》),但作者认为,除非能让生产者获得更公平、更即时的经济回报(例如在出口商接管时即付款),否则肯尼亚咖啡生产者缺乏动力去维护曾经享誉世界的品质。体系的根本变革是解决“为何要费心”这一问题的关键。
12. Gene behind orange fur in cats found at last (www.science.org)
该内容是一个HTML页面,用于显示Cloudflare安全挑战。页面标题为“Just a moment...”,旨在要求用户启用JavaScript和cookies以继续访问网站。结构上,页面包含CSS样式、JavaScript脚本和元标签,其中JavaScript代码执行客户端验证,通过Cloudflare挑战平台进行安全检查。关键功能是防止自动访问或机器人操作,确保只有启用脚本的用户能继续浏览。实际文章内容(关于猫橙色毛皮基因的发现)未在当前提供的HTML中显示。
13. How to Study Mathematics (2017) (www.math.uh.edu)
如何学习大学数学(2017)
本文旨在帮助学生从高中数学的学习模式过渡到大学数学,通过描述一系列策略来提升学习效率。文章主要围绕以下方面展开:
一、大学数学与高中数学的区别
大学数学与高中数学的关键差异在于对理论的强调以及解题技巧的综合性。
- 理论层面:大学数学注重定义、定理的精确陈述及证明过程,而高中多侧重于算法和操作技巧的应用。
- 技巧层面:高中通常一次只学习一种解题方法,而大学数学往往提供多种方法解决同一类问题,学生需要自主选择合适的技巧,培养判断能力。
二、如何学习定义
理解定义是掌握数学理论的基础,建议通过以下步骤:
- 理解定义内容:仔细阅读,注意逻辑结构关键词(如“且”“或”“对所有”等)。
- 通过例子确定定义范围:自行构造符合定义的正面例子和不满足定义的反例,并加以验证。
- 精确记忆定义措辞:定义的精确表述对证明和应用至关重要。
三、如何学习定理、命题、引理与推论
- 定理:重要结果,证明较复杂。
- 命题:较小的结果,常连接不同定义。
- 引理:用于简化定理证明的技术性结果。
- 推论:定理的直接推论或特例。 学习方法类似定义:
- 理解定理陈述,明确假设与结论。
- 通过例子理解定理应用。
- 分析假设条件的作用(可构造反例说明若省略假设则结论可能不成立)。
- 准确记忆定理陈述,但无需死记证明,应理解证明逻辑。
四、如何构建知识体系
数学是统一的学科,需将各部分联系起来:
- 逆向梳理法:从重要定理出发,追溯其证明所依赖的先前结果,直至基本定义,形成逻辑关系图。
- 定义-定理大纲:按逻辑顺序整理所有定义、定理及证明概要,作为复习和参考工具。
五、如何理解证明
证明是数学有效性的最终检验,理解方法包括:
- 明确定理内容(假设与结论)。
- 概述证明策略(如直接法、反证法、数学归纳法等)。
- 逐步填充细节,补全省略的计算或逻辑步骤,确保每一步合理。
六、为何需要学习证明?
- 对于数学专业:证明是数学的核心,训练逻辑思维并带来美学享受。
- 对于非数学专业:深入理解证明有助于掌握定理前提,避免误用;提升将抽象数学概念应用于其他领域的能力。证明体现了数学结论的不可动摇性,是培养严谨思维的重要方式。
七、如何发展解题技巧
- 阅读相关定理与示例,了解通用解题模式。
- 练习足够数量的题目以熟练掌握单一技巧。
- 对同一问题尝试多种解法,拓宽思路。
- 混合练习不同章节的题目,培养判断应选用何种技巧的能力。
八、其他学习建议
- 及时复习:课后整理笔记,补充定义、定理,澄清疑问。
- 保持进度:数学学习需持续投入,临时抱佛脚效果有限。
- 保证休息:充足的睡眠和清醒的头脑比临时记忆更有效。
14. Category Theory in Programming (docs.racket-lang.org)
编程中的范畴论
本文是一篇面向Racket程序员的教程,旨在介绍范畴论的基本概念及其在编程中的应用。教程的目标是将数学中的抽象结构——范畴论——与软件开发实践相结合,帮助程序员从新的视角理解计算系统,并丰富其工具箱,以改进问题解决和系统设计。
目标与受众
- 目标读者:Racket程序员,尤其是对计算系统背后的数学原理感到好奇的人。
- 核心目的:通过范畴论的镜头重新解释熟悉的编程概念,甚至直接借用范畴论的构造来描述抽象思想,从而桥接数学与编程之间的鸿沟。
范畴论简介
范畴论是数学的一个分支,专注于抽象结构和关系。尽管初看起来深奥,但其原则与编程中的概念和模式紧密相连。教程旨在展示如何将这些抽象思想映射到编程构造中,为读者提供一个可扩展的基础。
学习范畴论的好处
- 抽象与泛化能力:范畴论允许程序员超越特定编程语言、问题或系统的细节,揭示不同领域间共同的底层结构。
- 应用已有理论:通过识别系统与范畴论构造之间的联系,可以利用现有的范畴论结果和结构来扩展和改进系统设计,应用成熟的技术来优化和延伸工作。
主要内容与结构
教程将逐步探索范畴论的核心概念,并展示如何在Racket中表示它们。涵盖的主题包括:
- 范畴:对象、态射、范畴类型(如离散范畴、单对象范畴等),以及如何将范畴映射到编程中(例如自然数、列表、字符串等范畴)。
- 函子:包括常值函子、对偶函子、幂集函子、Hom函子等,以及如何用函子建模如有限自动机等结构。
- 自然变换:组合、交换律,以及Yoneda引理和通用元素。
- 高阶范畴:2-范畴、严格幺半范畴、字符串图等。
- 其他高级主题:如极限、笛卡尔闭范畴、类型lambda演算、伴随、单子、Kan扩张、拓扑斯等。
教程不旨在 exhaustive 覆盖范畴论,而是聚焦于将这些概念转化为编程实践。
学习建议与资源
- 鼓励读者以开放的心态探索材料,并思考如何将这些概念应用于或扩展到自己的编程工作中。
- 提供了进一步学习的参考资源,包括书籍(如《Category Theory for Computing Science》)和YouTube频道(如TheCatsters)。
结语
本教程是一次探索、质疑和发现的邀请,作为数学与编程交叉领域的起点,旨在激发读者深入这两个领域,建立新的联系,从而增强编程能力。
15. Ask HN: Who needs help this holidays?
16. Researchers use AI to turn sound recordings into street images (news.utexas.edu)
研究概述 得克萨斯大学奥斯汀分校的研究团队利用生成式人工智能,成功将音频录音转换为街道图像。这项技术展示了机器复制人类在听觉和视觉环境感知之间关联的能力。
研究方法与数据 研究团队发表在《计算机、环境与城市系统》期刊上的论文介绍,他们训练了一个“声音景观到图像”的AI模型。训练数据来源于北美、亚洲和欧洲城市的YouTube视频和音频。他们从不同地点创建了10秒音频剪辑与对应静止图像配对的数据集,用于训练模型从音频输入生成高分辨率图像。
评估与结果 研究人员使用100个音频剪辑,将AI生成的图像与真实照片进行对比,评估方式包括计算机评估和人类判断。
- 计算机评估:比较了生成图像与真实图像中绿化、建筑和天空的相对比例。结果显示,两者在天空和绿化比例上具有强相关性,建筑比例的相关性稍弱。
- 人类评估:参与者需要从三个生成的图像中,正确匹配一个与音频样本对应的图像,平均准确率达到80%。
生成图像的特点 生成的图像不仅基本符合场景比例,还常常能保持真实图像中的建筑风格、物体间距,并准确反映了声音录制时的天气(晴天、多云)或时间(白天、夜晚)条件。研究指出,照明信息可能源于声音景观中的活动变化,例如交通声或夜间昆虫鸣叫可以提示时间。
研究意义 该研究传统上被视为人类独有的能力——即通过声音想象场景。利用先进AI技术(包括大语言模型的支持)的研究表明,机器具有逼近这种人类感官体验的潜力。这不仅意味着AI可以超越对物理环境的识别,还可能有助于丰富我们对不同地方人类主观体验的理解。
17. 1/0 = 0 (2018) (www.hillelwayne.com)
这篇文章(发表于2018年)主要回应了对某些编程语言(如Pony)中“定义除以零的结果为0”的批评,从数学上论证了“1/0 = 0”这一定义的一致性与合理性。
核心论点
作者认为,在数学上,为除法操作扩展定义,将除以零的结果指定为某个特定实数(如0),是逻辑上自洽的,不会导致矛盾。这种做法在定理证明器(如Isabelle, Lean, Coq)中有所采用,主要是为了形式化处理的方便。
数学背景与论证
- 域(Field)的性质:标准数学体系(如实数域)中,乘法逆元仅对非零元素存在,因此“除以零”在常规除法(定义为乘以乘法逆元)下是未定义的。
- 除法定义的自由性:由于标准定义未覆盖除零情况,我们可以额外规定“x/0 = C”(C为某个常数)。只要这个扩展与已有的公理不冲突,整个系统就是一致的(sound),即不会从中推导出错误的结论。
- 一致性证明:作者分析了“证明1/0=1会导致1=0”的常见反驳。他指出,这类证明都隐含地错误假设了0存在乘法逆元,或者错误应用了仅在除数非零时才成立的除法定理。在定义了“x/0=0”的系统中,这些定理的适用条件并未改变,因此这些反驳无效。
- 特定定义的优势:作者特别指出,将1/0定义为0,可以强化某些定理(例如使定理
a*(b/c) = b*(a/c)在c=0时依然成立),从而简化形式化证明。这是其被一些证明辅助工具采用的主要原因。
回应反对意见
- “这违反直觉/难看”:作者承认,但指出数学扩展有时会失去直观性(如将自然数的乘法扩展到有理数)。
- “会导致隐藏的编程错误”:作者区分了数学一致性与编程实践。本文仅论证数学上的可行性,但在实际编程中,作者个人更倾向于将除零视为运行时错误,因为安全性和可预测性更重要。
- “极限论证”:有反对者用极限(如
lim(x->0) sin(x)/x)来反驳。作者指出,这类论证混淆了函数极限与函数在特定点的取值。当函数在该点有定义时,极限值不一定等于函数值。
结论
文章最终强调:
- 数学上:定义“1/0 = 0”是逻辑一致的,是一个合法的数学约定,并非“数学错误”。多位计算机逻辑领域的专家(包括图灵奖得主)支持这一观点。
- 实践上:这不应成为嘲笑某个编程语言设计选择的理由。编程语言的设计需权衡数学纯粹性、安全性、实用性和上下文环境。
- 作者立场:尽管在形式数学中可行,但作为程序员,作者在实际编码中更倾向于将除零当作错误来处理。
文章最初是为了回应一次关于Pony语言的网络争论,旨在澄清数学事实,并呼吁程序员之间相互尊重。
18. Show HN: SeekStorm – open-source sub-millisecond search in Rust (github.com)
SeekStorm:亚毫秒级开源Rust搜索库摘要
SeekStorm 是一款基于 Rust 的开源高性能搜索库,致力于提供亚毫秒级的向量与词法混合搜索能力。其设计核心是将原生向量搜索和关键词搜索引擎集成在单一系统中,通过智能查询规划器融合结果,为用户提供统一的搜索体验。
核心架构与性能
- 双原生引擎架构:SeekStorm 并非将向量搜索作为词法搜索的附加层,而是实现了两种独立的、原生的一级索引架构:针对词法相关性优化的倒排索引,以及针对向量相似度优化的近似最近邻索引。查询规划器可自动选择或结合使用这两种引擎。
- 卓越性能:实现快速分片索引(35K 文档/秒)与搜索,大幅降低延迟(词法搜索查询延迟快7倍,尾部延迟P99快17倍)。支持十亿级索引规模,可在单台普通服务器上处理数千并发查询,无需依赖集群或专用硬件。
- 内存与平台支持:索引可存储于内存或内存映射文件。支持跨平台(Windows, Linux, macOS),并为 x86-64 和 AArch64 架构提供 SIMD 硬件加速。
主要功能特性
- 混合搜索:提供纯词法、纯向量及混合搜索模式。混合搜索在查询规划器层面融合结果(如使用倒数排名融合RRF),以结合精确匹配与语义理解的优势。
- 向量搜索:支持多向量索引、集成推理(使用Model2Vec生成嵌入)或导入外部嵌入。提供多种精度(F32, I8)、相似度度量(余弦、点积、欧氏距离)、量化方案(TurboQuant、标量量化)以及 SIMD 加速。
- 词法搜索:支持 BM25F 评分、多语言分词与词干提取、N-gram 索引、拼写纠错、查询自动补全、同义词等功能。
- 丰富查询与结果处理:支持布尔查询(AND, OR, NOT, 短语)、分面搜索(字符串与数值范围)、地理邻近搜索与过滤、按任意字段排序、结果高亮(KWIC)。
- 索引管理:支持实时增量索引、无限字段与索引规模、文档压缩存储(ZStandard)、多种数据类型(数值、文本、时间戳、布尔、JSON、二进制、向量)。
- 多租户服务器:提供 RESTful API、CORS 支持、API 密钥管理、可嵌入的 Web UI 与 Web 服务器。支持从 CSV、JSON、NDJSON、PDF 等多种格式导入数据。
技术栈与选择理由
- 为何使用 Rust:SeekStorm 从 C# 移植到 Rust,获得了 2-4 倍的性能提升,消除了 JIT 编译的冷启动成本和垃圾回收带来的延迟不稳定问题,并减少了内存占用。
- 关键词搜索与向量搜索的互补:文章强调关键词搜索在精确匹配、速度、成本和语言无关性方面的优势,而向量搜索擅长语义理解。两者结合构成更强大的混合搜索方案。
使用与演示
- 作为库使用:提供了详细的 Rust 代码示例,涵盖索引创建、文档索引、搜索执行等操作。
- 作为服务器使用:可快速构建搜索引擎,文章以索引和搜索 Wikipedia 语料库及本地 PDF 文件为例进行了步骤演示。
- 基准测试:在公开基准测试中展示了竞争力的性能,并提供了在 SIFT1M 等数据集上的向量搜索召回率与延迟数据。
SeekStorm 是一个功能全面、性能卓越的开源搜索解决方案,适用于需要低延迟、高吞吐量且同时需要精确关键词匹配与语义理解能力的各类搜索应用。
19. Training myself to run farther with Strava's API and an IoT dog feeder of M&Ms (www.mayer.cool)
本文介绍了作者利用物联网狗粮分配器和Strava API创建一套自我激励系统,以培养长跑习惯的过程与思考。
项目概要
作者购买了一个可通过Python控制的物联网狗粮分配器,内装M&Ms巧克力豆。他编写脚本,通过Strava API检测跑步距离是否达标,达标则触发分配器发放奖励。该方法极为有效,不仅帮他养成了定期长跑习惯,还完成了半程马拉松,最终在停止奖励后仍保持了跑步习惯。
动机
作者意识到成年后时间被各类琐事占据,需要将跑步可持续地融入生活。由于对跑步本身缺乏热情,他借鉴在动物园观察到的“目标训练”法(通过即时奖励强化行为),决定用经典条件反射原理来训练自己,将长跑与正向刺激(获得巧克力)建立关联。
技术实现
- 物联网设备控制:选用基于Tuya平台的狗粮分配器,通过
tinytuya库实现控制。该库支持云端和本地控制,作者最终采用本地局域网通信。 - 跑步数据获取:使用
stravalib库接入Strava API。由于认证采用OAuth且令牌有效期短,作者用Flask搭建了简易Web服务器处理授权流程。 - 主程序逻辑:
- 当用户访问授权链接并完成Strava登录后,脚本获取最新跑步数据。
- 检查本次跑步距离是否达到预设阈值(如4英里)。
- 通过
pickle文件记录上次奖励对应的跑步时间,避免重复奖励。 - 若条件满足,则向狗粮分配器发送指令,发放M&Ms。
效果与思考
- 习惯养成:重复的“跑步-奖励”循环帮助作者建立了跑步习惯,最终即使不再使用奖励系统,习惯依然延续。
- 心理机制分析:作者认为,大脑倾向于即时满足,而跑步的长期益处(如健康)难以产生即时激励。添加一个象征性的即时奖励,有助于在潜意识的“成本效益分析”中提升跑步的吸引力,从而对抗其他分散注意力的诱惑。
结果与展望
实验期间,作者主要进行3-4英里的日常跑步,并在周末尝试更长距离,最终成功完成半程马拉松。未来他计划维持适度的长跑频率并提升速度,并考虑将该激励模式应用于其他目标,如学习新技能或推进副业。
文章最后强调,该方法的关键在于利用行为科学原理,为符合长期目标的行为创造即时的正向关联,从而在充满即时诱惑的环境中建立健康习惯。
20. When was the famous "sudo warning" introduced? (2019) (retrocomputing.stackexchange.com)
根据提供的页面标题和URL路径,可以推断这是一篇发表在Stack Exchange的“Retrocomputing”(复古计算)板块的问答帖子,标题为:“著名的'sudo警告'是何时引入的?在什么背景下?由谁引入?(2019年)”。
该文章的核心目的是探讨一个与sudo命令相关的著名警告信息的历史。由于提供的HTML内容实际是Cloudflare的安全挑战页面(用于验证用户访问,而非原始文章内容),因此无法获取文章中具体描述的警告信息文本、引入的确切版本、历史背景或相关人物的详细信息。
基于标题的合理推断:
- 主题对象:讨论的焦点是
sudo命令在执行过程中产生的一条特定、著名的警告信息。 - 核心问题:问题询问该警告被引入到
sudo代码中的具体时间、当时的技术或社会背景、以及相关的开发者或组织。 - 时间线索:标题末尾的“(2019年)”可能表示该问题是在2019年提出的,或者答案中提及的关键事件发生在2019年前后。
- 上下文:发布在“Retrocomputing”板块,表明该警告可能与较旧版本的系统或软件相关,或者其历史引发了技术社区的兴趣。
总结:该文章旨在调查并记录sudo工具中一条广为人知的警告信息的起源细节,包括其引入时间、设计意图以及相关的开发者信息,属于一个技术考古类问题。
21. UK: Proposed amendment to legal presumption about the reliability of computers (www.postofficescandal.uk)
英国:关于推翻计算机可靠性法律推定的修正案提案
核心议题
英国《数据(使用与访问)法案》正在上议院审议,一项关键的拟议修正案旨在推翻一项长期存在且备受批评的法律推定。该推定假定,如果一台“机械仪器”(被解释为包括计算机网络)在用户看来运行正常,则其在相关时间点实际上运行正常。
问题背景与批评
- 传统推定:在涉及数字证据的法律程序中,传统上推定计算机系统是可靠的,除非有相反证据。这实际上将证明系统存在故障的责任转移给了被告方,导致取证和辩护极其困难。
- 长期批评:大律师 Stephen Mason 十多年来一直指出此推定存在根本缺陷。他认为这会导致司法不公,因为它预先假设了数字证据的准确性。
- 相关丑闻影响:尽管该推定未直接在邮局“地平线”IT丑闻的诉讼中被援引,但其逻辑被认为普遍性地影响了相关司法环境。该案中,数百名邮政分局长因可疑的计算机账目数据被错误定罪或追偿。
- 支持力量:包括议员 James Arbuthnot 勋爵在内的多位有影响力的人士,长期致力于为受丑闻影响者争取权益,并推动法律改革。
拟议修正案的核心内容
由 Arbuthnot 勋爵等人提出的修正案,旨在以新的框架取代旧有推定。其核心规定是,由计算机、设备或计算机系统产生或衍生的电子证据,仅在以下情况下可被采纳为证据:
- 该电子证据及产生该证据的系统的可靠性未受质疑;
- 法院确信该系统的可靠性不能被合理质疑;
- 法院确信该电子证据来自一个可靠的系统。
新框架的关键要素
- 举证责任:修正案明确规定,任何诉讼中一方寻求依赖的电子证据,另一方均可就其可采性提出质疑。
- 评估可靠性的标准:当法院需要评估一个系统是否可靠时(针对上述第3种情况),可以考虑以下因素:
- 系统的运行指令或规则;
- 为确保系统数据完整性所采取的措施;
- 为防止未授权访问和使用所采取的措施;
- 系统所用硬件和软件的安全性;
- 系统控制者或操作者为监控和评估系统可靠性所采取的措施,包括修复错误和应对意外结果的步骤,以及由独立机构进行审计的频率和程度;
- 监管或监督机构对系统可靠性的评估;
- 适用于该系统的任何方案或行业标准的规定。
- 定义:修正案对“计算机”、“设备”和“电子证据”等关键术语给出了明确的法律定义,涵盖范围广泛。
修正案的目标与预期影响
- 目标:明确推翻“计算机证据总是可靠”的旧有法律假设。
- 预期影响:赋予法院权力,在庭审中直接向提交计算机证据的一方质询其可靠性。这有助于纠正类似“地平线”丑闻中因盲目相信计算机系统输出而导致的司法错误,促使证据提交方(如政府机构或公司)承担更多证明其系统稳健性的责任。
22. Thinking in Actors – Challenging your software modelling to be simpler (jeremycarterau.substack.com)
23. Star Citizen crowdfunding passes $750M (robertsspaceindustries.com)
《星际公民》众筹金额已超过7.5亿美元。该项目是众筹开发模式,所有筹得资金均直接用于游戏开发。随着筹款数额的增加,项目解锁了大量延伸目标,这些目标旨在奖励早期支持者并实现游戏的完整愿景。
自2012年12月众筹启动以来,随着金额达到各个里程碑(从250万美元到6500万美元),游戏不断解锁新内容。这些解锁内容主要涵盖以下几个方面:
- 新增舰船与舰船类别:包括角斗士、星舰客、报复者、弯刀、海怪侦察舰、班努商人、奥利安、探勘者、克拉克探索舰、赫拉尔德信使舰、海妖、月神、英仙座、先锋战斗机、徘徊者、星际客机、依赖者等数十种可飞行舰船,以及巡洋舰、护卫舰、战列巡洋舰等新舰船类别。
- 游戏系统与功能扩展:解锁了舰船定制、驾驶舱装饰、舰船接舷战、增强型接舷选项(近战、零重力等)、公共交通运输系统、太空站管理、行星地面作战、打捞机制、程序生成技术研究团队、增强型舰船模块化等众多系统。
- 《42中队》内容扩充:任务数量从最初的30个逐步增加,最终目标包含丰富剧情和超过50个任务,并引入了名人配音、专业动捕和面部捕捉技术。
- 宇宙与世界观扩充:游戏内星系数量从初始目标持续增加,最终将超过100个星系。同时解锁了多个独特的外星种族及其语言(班努、希安、范杜尔),并添加了多个具体的星系设定,丰富了宇宙背景。
- 技术与基础设施升级:筹款用于建设专业的动捕工作室、音效工作室,扩大开发团队办公空间,以及增强游戏的Alpha测试规模和基础设施。
- 玩家体验增强:包括Oculus Rift支持、移动设备伴侣应用、增强的AI角色活动、星图系统、宠物系统、以及众多游戏内装备和物品,如机动装甲、扫描软件、引擎调校套件等。
- 社区与周边内容:包括定期社区更新、网络广播、开发者问答、纪录片制作,以及为早期支持者提供的专属奖励,如独占星系、舰船皮肤和额外游戏货币。
这些解锁的延伸目标系统性地展示了《星际公民》如何利用众筹资金,逐步将其打造为一个规模庞大、细节丰富的太空模拟游戏。
24. Demystifying Git Submodules (www.cyberdemon.org)
Git子模块详解:原理、问题与解决方案
Git子模块允许将一个仓库嵌入另一个仓库。每个外部仓库的提交总是明确指向子模块的特定提交,这是通过外部提交 → 树对象 → 子模块提交的链接实现的。
核心概念与关键特性
- 子模块固定于特定提交:与包管理器的模糊版本不同,子模块必须精确指向一个提交。
- 子模块不会自动更新:克隆或拉取主仓库时,Git不会自动下载或更新子模块内容。
常见困惑场景
作者以一个“不理解子模块的用户”的经历说明典型问题:
- 执行
git pull后,子模块目录在git status中显示为已修改。 git diff显示子模块提交指针的更改(从新提交变为旧提交)。git reset --hard无法消除该差异,导致困惑。
Git追踪子模块的原理
Git通过一种特殊方式实现子模块:在主仓库的树对象中,子模块条目类型为160000 commit(而非普通的树或文件),直接存储子模块的提交SHA。这解释了为什么 git diff 会显示子模块指针的变化——它比较的是工作树中的子模块指针与主仓库最新提交中的指针。
如何更新子模块
- 手动进入子模块目录并检出目标提交(如
git checkout <commit-sha>)。 - 使用
git submodule update命令:- 初始化并更新:
git submodule update --init - 递归更新嵌套子模块:
git submodule update --recursive - 组合命令:
git submodule update --init --recursive
- 初始化并更新:
- 自动更新配置(Git 2.14+):设置
git config submodule.recurse true可使子模块在git pull或git checkout时自动更新(但克隆时仍需--recursive或手动初始化)。
添加与修改子模块
- 添加子模块:使用
git submodule add <仓库URL> <路径>。这会更新.gitmodules文件、下载子模块并指向其最新提交。 - 修改子模块内容:
- 进入子模块目录,进行更改并提交推送。
- 返回主仓库,更新子模块指针:
- 方法一:在主仓库中进入子模块目录执行
git pull,然后提交指针更改。 - 方法二:在主仓库使用
git submodule update --remote -- <子模块名>(默认跟踪主分支,可通过.gitmodules的branch项配置其他分支)。
- 方法一:在主仓库中进入子模块目录执行
.gitmodules 文件
该文件记录子模块的基本信息(如URL),以普通文件形式被Git追踪。示例:
[submodule "library"]
path = library
url = https://github.com/dmazin/library.git
branch = staging # 可选:指定跟踪的分支
总结
理解子模块的关键在于:主仓库提交通过指针精确锁定子模块版本,且更新子模块需要显式操作。掌握 git submodule update 系列命令及配置选项,即可有效管理子模块。
25. The Rock VX Gas Canister Build (2022) (www.therpf.com)
《The Rock VX Gas Canister Build (2022)》制作总结
作者Will分享了自己制作电影《勇闯夺命岛》中VX毒气罐道具的过程,特别感谢了社区成员Nitrox提供的参考与帮助。
珍珠串制作
- 材料:使用40毫米中空玻璃珠(共50颗,分5串),内部注入香蕉船芦荟凝胶模拟电影中的绿色液体;珠间以带铁环的橡胶垫圈隔开,并用红色磁力线连接(主要为装饰)。
- 工艺:作者尝试了五种方法,最终选用单丝钓鱼线串珠。通过注射器向每颗珠子注入凝胶,过程中需边填充边穿线,因玻璃珠易碎,共损坏约12颗。完成后需在每个垫圈上焊接四根磁力线,工序繁琐。最后用环氧树脂固定电气连接件。
罐体制作
- 盖子:使用SmoothCast 300树脂、激光切割亚克力和黄铜制作,以增强承重能力(需悬挂珍珠串)。内置简化版降压转换器与装饰性线路。
- 主体:以PLA 3D打印部件为基础,配合铝棒作为立柱加固;底座由多层1/4英寸亚克力堆叠而成。
- 中心导引芯片支架:采用黄铜管与车床切割沟槽的PVC制作,并设计可拆卸卡扣。芯片本身为较接近原版的替代品。
外部存储箱
- 为旧坦克炮弹壳喷涂改造而成,文中未展开详述。
完成与感受
- 整个制作过程耗时较长但充满乐趣,作者最终实现了将珍珠串从罐中取出时发出清脆碰撞声的效果。更多制作图片可查阅作者Instagram账号(@aplancomestogether)。
本文重点介绍了道具的材料选择、工艺挑战与解决方案,体现了社区互助与手工制作的细节。
26. The zoology and biochemistry of xenomorphs from the Alien franchise (jgeekstudies.org)
异形系列电影中异形的动物学与生物化学
分类学
基于形态特征(无基因组数据),尝试对异形进行假想分类:
- 界:动物界(多细胞结构)。
- 门:节肢动物门(具有外骨骼、分节体躯等特征)。
- 纲:螯肢亚纲(肢体与口部结构类似蛛形纲,尾部类似蝎尾)。
- 目:新建 Xenomorpha目,以容纳其独特外星起源和形态。
- 科:Xenomorphidae科,包含电影中描绘的不同变异体(如狗异形、新变体)。
- 属:Xenomorphus属,统一其外骨骼、蝎尾、酸性血液等核心特征。
- 种:Xenomorphus extraterrestris,强调其外星起源。
形态特征
异形被视为多极端环境生物,能在从星际空间到高温熔炉等严酷环境中生存。
- 外骨骼:可能由几丁质和耐腐蚀有机化合物(如聚四氟乙烯)构成,提供防护并抵抗自身酸性血液。
- 头胸复合体:类似蛛形纲的头胸部,保护感觉器官,背部管状结构可能为化学感受器或呼吸系统(类似书肺)。
- 螯肢:透明、中空,可能含毒腺;同时具备类似海鳗的内颌结构。
- 分节四肢:类似镰刀的趾爪,提供灵活性与力量,便于在多种环境中狩猎和移动(类似螳螂虾)。
- 蝎状尾:带尾刺(蜇针),用于攻防,但未提及含毒。
- 外星产卵器:仅女王异形拥有,用于将胚胎植入宿主,结构类似某些黄蜂的产卵器。
生化特性
酸性血淋巴
- 成分假说:可能含有硫代酸和卤代酸(如氢氟酸、盐酸等),或超级酸(如HF·SbF5)的混合物,pH值可能接近0。
- 功能:作为防御机制,且可能充当“生物电池”,通过化学反应产生生物电能,取代传统呼吸和消化。
外骨骼抗性
- 外骨骼可能含有螯合剂等分子抑制剂,或直接由聚四氟乙烯等耐腐蚀材料构成,以抵御自身酸性血液。
荧光颜色
- 血液的荧光黄绿色可能源于多环芳烃或荧光素-荧光素酶类似的生物发光系统,其分子结构在强酸性环境中保持稳定。
寄生行为
异形生命周期展现出寄生特性:
- 抱脸体植入胚胎于宿主体内。
- 胸爆体从宿主体内破胸而出。
- 其“黑水”种子能跨越物种屏障感染多种动物形生命体。
- 现实类比:与寄生蜂(如宝石蜂、长尾姬蜂)和操纵宿主行为的寄生真菌(如蛇虫草属)策略相似。
其他
- 本文分类体系为虚构,不遵循《国际动物命名法规》。
- 文章写作过程中使用了AI工具(ChatGPT)优化文风,但作者对最终内容负责。
27. Bicameral, Not Homoiconic (parentheticallyspeaking.org)
本文对编程语言中广泛讨论的“同像性”概念提出质疑,并提出了“二院制语法”这一更精确、更实用的概念来描述类似Lisp的语言的真正优势。
对“同像性”的批判:
- 弱同像性:指代码可以表示为语言中的数据。但任何拥有字符串类型的语言都能将程序表示为字符串并进行操作,因此这个定义过于宽泛,无法区分语言特性。
- 强同像性:通常与
eval函数关联,即能将数据当作代码执行。然而,eval功能存在于许多非Lisp语言中(如Python、JavaScript),其本身复杂、难用且不利于静态分析,因此也不是Lisp的独有特性。
解析流水线与二院制语法:
- 传统(一院制)流水线:字符流 -> 词法分析器(生成词法单元流) -> 语法分析器(生成抽象语法树)。
- 二院制类比:借鉴两院制立法机构的模式。下议院(粗糙筛选)对应“读取器”,上议院(精细审查)对应“解析器”。
- 二院制语法:引入一个中间步骤。字符流首先经过扫描器生成词法单元,然后由读取器处理。读取器的作用是确保形式良好,即检查基本的结构正确性(如括号匹配、标签闭合),并将其转化为树形结构(如列表或AST)。这个树形结构再交给解析器,由其根据具体语言的语义规则进行有效性验证,最终生成完整的抽象语法树。XML、JSON以及Lisp的S表达式都是二院制语法的实例。
二院制语法的优势:
- 关注点分离:将基础结构检查(读取器)与语义验证(解析器)分开。
- 降低复杂度:读取器处理上下文无关的结构,相对简单;解析器可以专注于更复杂的语义规则。
- 简化工具链:基于树结构的中间表示,使得编写语法分析器、编辑器支持(如缩进、高亮、导航)和程序生成工具变得更加容易。
- 可复用性:相同的二院制基础(如S表达式或JSON)可以支持多种不同的上层语言,共享读取器实现。
对Lisp的重新认识:
- Lisp家族(Common Lisp, Scheme, Racket, Clojure等)的共同点是其语法哲学,即采用二院制语法,而非某个具体实现。
read操作(读取器)不等于解析器。它只负责形式良好的检查,不处理语言的完整语法规则。- 宏系统并非必须依赖二院制语法,但二院制语法(特别是形式良好的中间层)为构建强大、易用的宏系统提供了理想的基础设施。
对其他语言的启示:
- 设计新语言时,建议从二院制语法开始。这样可以快速进入语义设计等核心问题,避免陷入复杂的语法设计中。
- 语法是一种视图:应将抽象语法树视为核心“模型”,而各种具体语法(包括二院制语法、传统语法等)都只是该模型的不同“视图”或表现形式。先定义好模型,再设计不同的视图。
- 这种方法能产出一个优秀的中间表示(二院制语法),非常适合程序生成、工具集成等场景,同时也能结束无休止的“语法之争”。
28. Francis Crick's "Central Dogma" was misunderstood (www.asimov.press)
中心法则:被误解的核心概念
克里克在1956年提出的“中心法则”是理解细胞信息流的关键,但其核心观点常被简化为“DNA → RNA → 蛋白质”这一公式。这一简化版本源自沃森1965年的教科书,但与克里克原始构想存在根本性偏差。
克里克的原始构想
克里克认识到细胞中至少存在四种信息转移:
- 已观察到的转移:DNA→DNA(复制)、DNA→RNA(转录)、RNA→蛋白质(翻译)、RNA→RNA(某些病毒复制机制)。
- 理论可能但实验未证实的转移:DNA→蛋白质(直接合成)、RNA→DNA(逆转录,克里克当时认为化学上可行但无生物学功能)。
- 被认为不可能发生的转移:蛋白质→蛋白质、蛋白质→RNA,以及最核心的——蛋白质→DNA。
因此,克里克中心法则的精髓是一个否定性陈述:“信息一旦进入蛋白质,便无法再流出。” 这意味着核酸中的信息可以流向蛋白质,但反之则不行。这也隐含了一个进化推论:生物体后天获得的性状无法通过蛋白质改变DNA序列传递给后代。
命名的争议与误解的根源
克里克将这一假说命名为“教条”引发了同行的批评(如莫诺指出其用词不当)。克里克后来解释,他使用此词是取其“宏伟假说”之意,尽管缺乏直接实验证据,并承认“中心假说”更准确。误解的主要来源在于:
- 沃森的简化版本忽略了克里克构想中对不可能转移的限定。
- “教条”一词的字面意义与科学可证伪性相悖,造成了混淆。
科学进展的澄清而非推翻
后续发现,如逆转录酶(RNA→DNA),并未违背中心法则。克里克本人早在1964年就指出,中心法则不排除RNA到DNA的信息流,其核心是禁止蛋白质到核酸的信息流。1970年《自然》杂志称“中心法则被逆转”时,克里克公开反驳澄清。
其他潜在“例外”经审视后均未违反中心法则:
- 朊病毒:通过蛋白质构象传播病理形状,不改变氨基酸序列或DNA信息。
- 表观遗传:涉及DNA甲基化等基因表达调控,可跨代影响,但属临时性修饰,不改变DNA序列本身,且多数会在生殖细胞中重置。
中心法则的现代意义
克里克认为DNA并非细胞信息的唯一载体(如tRNA、核糖体、激活酶等也定义遗传密码)。但其核心原则依然成立:蛋白质不能作为模板逆向重写核酸信息。
作者通过一个思想实验(利用基因编辑工具根据环境底物改变DNA)说明,虽然技术上或可设想突破中心法则,但进化并未采取此路径,因为持续改变DNA是缓慢且高风险的方式。生物体通过基因调控表达系统(如条件性表达不同酶的基因)来应对环境变化,这是一种更经济、灵活的进化解决方案。
结论
理解中心法则的精确内涵,不仅关乎蛋白质合成的机制,更揭示了生物变异与自然选择的深层基础。即便未来发现违背中心法则的生命形式,也不会动摇现代分子生物学的根基,因为克里克的“中心法则”本质上是一个关于生命信息流基本规则的强大假说,而非不可挑战的教条。
29. PostgreSQL High Availability Solutions – Part 1: Jepsen Test and Patroni (www.binwang.me)
文章摘要
本文介绍了使用Jepsen工具对流行的PostgreSQL高可用解决方案Patroni进行一致性测试的初步结果。作者因CockroachDB的许可和遥测政策变更,转而评估基于原生PostgreSQL的高可用方案。
测试背景与设置
- 工具:采用分布式系统一致性测试框架Jepsen,通过模拟查询和引入故障(如节点崩溃、网络延迟)来验证系统正确性。
- 环境:使用Vagrant创建了一个3节点的虚拟机集群,并在其上部署了Kubernetes(k3s)。测试代码(jepsen-postgres-ha)设计为支持任何可通过Kubernetes清单定义的高可用方案。
- 测试对象:Patroni(v4.0.3)搭配PostgreSQL 16。测试中优先配置了强一致性,开启了
synchronous_mode和synchronous_mode_strict。
主要测试发现
1. 成功复现一个已知的“读已提交”隔离级别违反问题
这是一个源于PostgreSQL复制机制的根本性缺陷。在同步复制下,理论上事务应在副本确认后才算提交。但在特定场景下(例如,客户端在发送COMMIT命令后但复制完成前中断连接),PostgreSQL主节点仍会认为该事务已提交并使其对其他事务可见。若此时发生主节点故障转移到未完成复制的副本,数据就会从客户端视角丢失。
- 问题本质:不仅违反了线性一致性,也违反了基本的“读已提交”隔离级别(因为读取了未提交的数据)。
- 测试挑战:重现此问题需要精确控制时序。作者通过调整Jepsen工作负载(如单键操作、降低事务复杂度)和引入特定故障组合(持续的网络延迟 + 周期性杀死主节点)来增加触发概率。最终在多次运行测试后成功复现。
2. 发现集群在仅丢失一个节点后无法自动恢复
在3节点集群中,即使仅丢失1个节点,Patroni集群也可能无法自动恢复。
- 现象:测试初期,集群能在主节点被杀死后自动故障转移并恢复服务。但随着测试进行,集群逐渐只能在所有节点都可用时才能恢复。在仅有2个节点存活时,集群无法恢复工作。
- 原因:这与Patroni的配置行为有关。
synchronous_node_count参数在可用节点不足时会被自动降低,而synchronous_mode_strict的目标是保证数据写入至少两个节点。这导致系统容忍节点丢失的能力有限,且故障转移逻辑在某些情况下未能有效实施。测试表明,即使使用quorum同步模式,问题依然存在。
测试方法的挑战
- 重现连接中断问题需要客户端在提交后主动断开连接,这在Jepsen标准故障注入中不易实现,需要定制代码。
- 原始Jepsen故障套件随机性强,为提高特定故障场景的复现率,作者将故障组合调整为持续的网络慢速配合周期性的主节点杀戮。
- 测试环境(VM + Kubernetes)引入了额外复杂性,如需调整网络接口名称等。
其他发现与后续计划
- 小问题:Patroni的Kubernetes Pod标签(显示角色)有时不准确。
- 改进建议:理论上,基于Quorum的系统可通过设置合适的读写节点数(Vw + Vr > V)来维持一致性。但Patroni的实现(自动调整同步节点数)可能限制了其容忍节点丢失的能力。
- 后续计划:作者计划测试基于DRBD(块设备级复制)的PostgreSQL高可用方案,以避免PostgreSQL复制层的已知缺陷。
本文通过实际测试验证了Patroni在极端场景下的已知问题和一个严重的可用性问题,强调了对高可用解决方案进行严格一致性测试的重要性。
30. KlongPy: High-Performance Array Programming in Python (github.com)
KlongPy:Python中的高性能数组编程
KlongPy是Klong数组语言的Python适配版本,提供高性能向量化操作,强调与Python生态系统的无缝集成,同时保持Klong语言的简洁性。
核心特性
- 后端支持:默认使用NumPy,可选PyTorch后端(支持CPU、CUDA和Apple MPS)。
- 自动微分:启用PyTorch时支持自动微分,否则默认使用数值微分。
- 语法简洁:梯度计算仅需少量代码(如
f:>x),对比传统Python代码大幅简化。 - 集成能力:内置IPC、DuckDB数据库工具、Web/WebSocket支持等。
主要优势
- 面向量化和交易者:用数组语言优化投资组合,例如计算夏普比率梯度。
- 面向机器学习研究:以纯数组表示法编写神经网络,训练代码更简洁。
- 面向科学家:直接表达数学公式,如计算多变量函数梯度。
安装方式
- 基础版本:
pip install "klongpy[repl]" - 启用PyTorch:
pip install "klongpy[torch]" - 全功能安装:
pip install "klongpy[all]"
语法示例
- 梯度下降:
s::s-(0.1*f:>s)(2行实现) - 数组操作:
+/a(求和)、+\a(累加和) - 多参数梯度:
loss:>[w b]
性能表现
- NumPy后端在CPU上元素操作更快,PyTorch在扫描操作(如
cumsum)上有显著优势。 - 内置表达式编译器,将Klong AST转换为后端中立的IR,编译后缓存以提高后续执行效率。
应用场景
- 量化金融:自优化交易策略、风险模型、组合优化。
- 机器学习:神经网络、梯度下降、优化算法。
- 科学计算:物理模拟、数值方法、数据分析。
- 时间序列分析:信号处理、特征工程、流数据处理。
技术背景
KlongPy继承自APL家族(APL→J→K/Q→Klong),结合Python生态系统和PyTorch的自动微分功能,使梯度成为语言的一等公民。
未来方向
- 扩展PyTorch后端覆盖范围。
- 增加内置工具和集成。
- 改进错误消息和调试支持。
完整文档:https://klongpy.org