2024-04-06

22 篇热帖

1. Asus refunds Zenfone buyer for failing to provide bootloader unlock tools (www.androidauthority.com)

事件概述
英国一名华硕Zenfone用户(化名Timothy)因华硕未能兑现提供bootloader解锁工具的承诺,向英国小额索赔法院提起诉讼并胜诉。华硕向该用户全额退还手机费用(700英镑)及诉讼费(70英镑),总计770英镑(约973美元)。此案例为类似用户通过法律途径寻求赔偿提供了参考。

背景信息

  • bootloader解锁的重要性:解锁bootloader允许用户深度控制手机系统,可卸载原厂软件并安装其他Android版本。由于华硕的软件支持周期仅两年(行业中最短之一),技术型用户依赖解锁工具延长手机使用寿命。
  • 华硕的承诺与变化:华硕此前承诺提供解锁工具,但去年5月突然禁用该工具,并拒绝提供解锁所需代码。公司随后删除相关论坛帖子,并以“工具维护”或“合规整改”为由搪塞,未说明恢复时间。

案例影响

  1. 先例意义:用户通过法律维权成功获赔,表明针对华硕违反承诺的行为,诉讼可能是一种有效解决途径。
  2. 华硕的回应:截至文章发布时,华硕未公开回应此事。由于公司总部位于台湾,外界暂时难以获得其官方立场。

总结
此事件反映了华硕在软件支持政策上的争议,以及用户通过法律手段维护权益的可能性。类似情况的用户可参考本案,但需结合本地法律法规评估诉讼可行性。

3. SearXNG is a free internet metasearch engine (github.com)

SearXNG:免费的互联网元搜索引擎

SearXNG 是一个元搜索引擎,其核心特点是不追踪、不分析用户

主要信息

  • 安装与配置:需参考官方提供的安装指南配置指南进行部署与调整。
  • 社区支持:用户可通过Matrix平台的 #searxng:matrix.org 频道进行提问和交流。
  • 参与贡献:项目接受社区贡献,具体规则详见CONTRIBUTING文件。
  • 开源许可:该项目采用 GNU Affero 通用公共许可证(AGPL-3.0) 授权。
4. World_sim: LLM prompted to act as a sentient CLI universe simulator (worldsim.nousresearch.com)

World_sim 是一个基于大型语言模型(LLM)的高感知命令行界面(CLI)宇宙模拟器。其主要目的是通过自然语言提示,利用 LLM 构建、探索和互动一个虚拟现实的潜在空间。用户可以在命令行环境下,输入指令来模拟宇宙中的各种实体、事件或者交互情景,LLM 会根据这些输入生成现实世界的各类可能性和动态结果。该项目旨在探究现实的潜在空间,通过模型的推理能力实现对复杂世界的模拟和自洽探索。

6. Loki: An open-source tool for fact verification (github.com)

Loki:开源事实核查工具

Loki 是一款为自动化事实核查流程设计的开源解决方案。它提供了一个完整的处理流水线,能够将长文本分解为独立声明,评估其核查价值,生成证据搜索查询,爬取相关证据,并最终验证这些声明。该工具对记者、研究人员及任何关注信息真实性的用户尤为实用。

核心功能与流程

Loki 的核心功能是实现事实核查的自动化流水线,主要包括以下步骤:

  1. 声明提取:将输入的长文本分解为多个独立的、可核查的声明。
  2. 价值评估:判断分解出的声明是否值得进行事实核查。
  3. 查询生成:为需要核查的声明自动生成用于搜索引擎的查询语句。
  4. 证据检索:根据生成的查询,自动爬取相关的网页作为证据。
  5. 事实验证:综合收集的证据,对原始声明的真实性做出最终判断。

安装与配置

Loki 提供了两种主要的安装方式:

  • 使用 Poetry 安装:推荐方式,需先安装 Poetry,然后在项目目录执行 poetry install
  • 使用 pip 安装:需创建 Python 3.9 或更高版本的环境,然后执行 pip install -r requirements.txt

安装后需要配置必要的 API 密钥(如用于证据检索的 SERPER_API_KEY 和用于核心任务的 OPENAI_API_KEY)。可以通过导出环境变量或使用 YAML 配置文件的方式进行设置。

使用方法

Loki 可以通过多种方式使用:

作为 Python 库使用 导入 FactCheck 类,创建实例并调用 check_response 方法,传入待核查的文本即可获得结果。

from factcheck import FactCheck
factcheck_instance = FactCheck()
text = "Your text here"
results = factcheck_instance.check_response(text)
print(results)

作为 Web 应用使用 通过运行 python webapp.py --api_config demo_data/api_config.yaml 命令启动一个 Web 应用。

多模态输入支持 Loki 支持多种输入模态,通过命令行工具 (-m) 指定:

  • string:直接输入字符串。
  • text:输入文本文件路径。
  • speech:输入音频文件路径。
  • image:输入图片文件路径。
  • video:输入视频文件路径。

其他信息

  • 高级用法与定制:更详细的定制和使用说明请参考项目的用户指南。
  • 在线服务:项目提供在线服务供试用。
  • 项目参与:欢迎社区参与贡献,具体指南可参考项目的贡献指南。
  • 保持更新:可通过订阅项目通讯或加入 Discord 社区获取最新动态。
7. NASA spacecraft films crazy vortex while flying through sun's atmosphere (mashable.com)

NASA帕克太阳探测器拍摄到太阳大气层中的罕见涡旋现象

核心发现
NASA的帕克太阳探测器(Parker Solar Probe)在穿越太阳外层大气(日冕)时,拍摄到前所未见的“涡旋状结构”。该影像由探测器上的广角成像仪(WISPR)拍摄,揭示了太阳活动中的剧烈相互作用。

科学解释
研究人员推测,这一现象由日冕物质抛射(CME)太阳风相互作用引发。CME是太阳向外喷射大量高温等离子体的爆发性事件,而太阳风是太阳持续释放的带电粒子流。这种相互作用产生了名为“开尔文-亥姆霍兹不稳定性(KHI)”的涡旋结构,通常在流体或等离子体速度剪切区域形成。

研究意义
该发现发表于《天体物理学杂志》,为理解CME的传播及其与太阳风的相互作用提供了新视角。CME对地球空间天气具有重要影响:

  • 可能威胁卫星安全
  • 干扰通信与导航系统
  • 破坏地面电力基础设施
    例如,1989年3月的一次强烈CME曾导致加拿大魁北克省电网崩溃,造成数百万用户停电12小时。

探测器技术特点
帕克太阳探测器是迄今最接近太阳的航天器,通过特殊设计抵御极端环境:

  • 前部配备4.5英寸厚的碳复合材料热盾,可承受约2500华氏度高温
  • 热盾后方仪器舱保持适宜温度
  • 今年将达到43万英里/小时的峰值速度

未来任务
探测器将继续深入日冕进行探测,其直接观测数据有望提升空间天气预测能力,帮助人类应对太阳活动对地球技术系统造成的潜在威胁。

8. Autonomous Overhead Powerline Recharging for Uninterrupted Drone Operations [video] (www.youtube.com)

自主架空电力线充电无人机系统概述

该研究(ICRA 2024)展示了一个完全自主的自充电无人机系统,其核心目标是实现无人机在电力线附近的长时间、不间断持续作业

系统目的与优势

系统旨在解决传统无人机因电池容量限制而需要频繁中断任务、返回地面充电站的痛点。通过直接从附近的架空电力线获取能量进行充电,该系统显著延长了无人机的单次任务时间,从而支持持续不断的长期作业,例如对电力线路、基础设施的巡检与监测。

核心技术与构成

  1. 自主化操作:整个系统,包括在电力线上降落、对接充电以及充电完成后的再次起飞,均设计为完全自主,无需人工干预。
  2. 机载充电装备:无人机搭载了一个鲁棒的机载充电系统(具体技术细节如对接机构、能量转换模块等在标题中未详述,但强调了其“鲁棒”特性),用于安全、高效地完成与电力线的物理接触与能量传输。
  3. 近电力线环境作业:系统专为在架空电力线附近的复杂电磁与物理环境中可靠运行而设计。

总结

总而言之,这项研究提出并实现了一种创新的无人机能源补给方案,它将无人机的充电过程从固定的地面站点转移到了任务现场附近的电力线上,通过全自主的对接与充电流程,为需要长时间滞空的任务提供了一种可能不间断运行的解决方案。

9. Apple Updates App Store Guidelines to Permit Game Emulators, EU Music App Links (www.macrumors.com)

Apple于今日更新了其《App Store审核指南》,主要内容包括两方面:

1. 遵守欧盟反垄断要求,调整音乐流媒体应用规则

  • 背景:欧盟委员会于今年3月对苹果处以20亿美元罚款,认定其行为构成反竞争,要求苹果移除《App Store》规则中的“反引导条款”。
  • 新规内容:在欧洲经济区内,音乐流媒体应用(如Spotify)现可使用“音乐流媒体服务权限”,在应用内包含链接或购买按钮,将用户引导至开发者网站,以告知用户其他购买数字音乐内容或服务的方式。应用也可邀请用户提供邮箱,以便发送此类网站链接。
  • 限制:该权限仅适用于特定地区的iOS或iPadOS App Store。在其他所有地区,音乐流媒体应用及其元数据仍不得包含任何引导用户使用非App内购机制的按钮、外部链接或其他行动号召。
  • 苹果态度:苹果虽遵守裁决,但计划上诉,并指责Spotify操纵欧盟委员会以重写规则,目的是免费利用苹果的技术和平台获利。

2. 全球范围内正式允许复古游戏机模拟器应用

  • 新规内容:在审核指南4.7条款中,苹果新增允许复古游戏机模拟器应用提供游戏下载功能。该条款原本已允许HTML5小程序/小游戏、流式游戏、聊天机器人及插件。
  • 开发者责任:开发者需对应用中提供的所有此类软件负责,确保其符合审核指南及所有适用法律。
  • 背景:此前,游戏模拟器应用常通过隐藏功能上架,但从未被明确允许。此次更新后,该规则在全球范围内生效。

总结:本次指南更新主要针对欧盟监管压力做出部分妥协,允许区内音乐流媒体应用引导外部购买;同时,在全球范围内正式为复古游戏机模拟器应用开辟了合法空间。

10. Fortran on WebAssembly (gws.phd)

Fortran on WebAssembly 技术摘要

本文详述了如何将现代 Fortran 代码编译为 WebAssembly,使其能够在浏览器中运行,特别是为了利用 BLAS 和 LAPACK 等成熟的数值计算库。

核心问题与目标

  • 背景:Fortran 是历史悠久、在科学计算领域广泛使用的编程语言。将其编译为 WebAssembly 可将现有高性能数值库直接带入浏览器环境,无需用 JavaScript 或 Rust 重写。
  • 目标:编译使用 BLAS/LAPACK 例程的现代 Fortran 代码,并在浏览器或 Node.js 中执行。文中以一个手写数字分类器和多项式插值作为最终应用演示。

现有方法评估

文章评估了2024年几种可用的 Fortran-to-WebAssembly 编译方案:

  • f2c:仅支持旧式 Fortran 77,输出 C 代码再编译,效果不佳。
  • LFortran:新兴编译器,可直接编译到 WebAssembly,但尚处于 alpha 阶段,功能支持不完全。
  • Dragonegg:早期可行方案,但依赖过旧的 GCC/LLVM 版本,且需要复杂的预处理。
  • Classic Flang:不支持 32 位 WebAssembly 目标。
  • LLVM Flang (flang-new):活跃开发的现代 Fortran 前端,被选为本文的基础方案。

实现方案:修补 LLVM Flang

  1. 目标三元组支持flang-new 编译器默认不支持 wasm32-unknown-emscripten 目标。通过修补 flang/lib/Optimizer/CodeGen/Target.cpp 文件,添加了该目标的基本实现(主要是复杂类型的传参和返回规则),使编译器能够输出 WebAssembly 对象文件。
  2. Fortran 运行时库:为了支持诸如 PRINT 等操作,需要单独编译 LLVM 的 Fortran 运行时库(C++ 编写)。使用 Emscripten 工具链将其编译为静态库 libFortranRuntime.a
  3. 关键修补:数据类型大小问题:在跨平台编译(宿主机 x86_64,目标机 wasm32)时,编译器内部关于 longunsigned long 数据类型大小的假设出错,导致 Fortran 代码与运行时库之间的函数签名不匹配。解决方案:通过一个 hack,强制将 long 类型的大小在编译器内部硬编码为 4 字节(对应 wasm32),同时将 malloc 等内存分配函数的参数也改为 32 位整数。

成果与应用

  1. 编译与运行
    • 修补后的 flang-new 能将简单的 Fortran 子例程编译为 WebAssembly。
    • 通过 Emscripten 将 WebAssembly 对象与运行时库链接,可在 Node.js 或浏览器中成功调用 Fortran 函数。
  2. 编译数值库
    • BLAS:成功编译了参考实现(Fortran 90)为 WebAssembly 静态库,并通过一个矩阵向量乘法的示例验证了正确性。
    • LAPACK:同样成功编译了参考实现为静态库。
  3. 交互式演示
    • 手写数字识别器:一个在浏览器中运行的多层感知器神经网络,其核心计算依赖于编译为 WebAssembly 的 BLAS 例程 (DGEMV)。
    • 多项式插值:一个在浏览器中运行的插值计算演示,其核心计算使用了编译为 WebAssembly 的 LAPACK 例程 (DGELS)。

总结与展望

  • 方法价值:该方案避免了重写现有 Fortran 数值库,能够直接将 BLAS、LAPACK 等经过长期验证的工具带到 Web 平台。
  • 当前局限:解决方案依赖于对 LLVM 源代码的硬编码修补,无法直接贡献上游。问题根源在于 LLVM 内部对交叉编译时数据类型大小的假设。
  • 呼吁帮助:作者希望有经验的编译器开发者能协助提供一个更通用的、可被上游接受的解决方案,以实现 flang-new 官方支持 WebAssembly 目标。
11. PiVPN v4.6.0: The End (github.com)

PiVPN v4.6.0:项目终止公告

停止维护声明 PiVPN 发布其最终官方版本 v4.6.0,项目正式终止。所有代码仓库将被设置为只读的归档状态,不再进行后续维护。

项目终止原因

  1. 创始人与维护者已转向其他生活目标。
  2. 维护者的投入度下降,维持项目的意愿已不如前。
  3. 项目最初的使命(使 OpenVPN/WireGuard 在树莓派等设备上易于安装)已基本完成。
  4. 存在其他更优秀的同类工具。

项目历史与致谢 PiVPN 项目最初由 @0-kaladin 和 @redfast00 创建,后由当前维护者接手,并得到 @orazioedoardo 的重要支持。维护者对包括 @orazioedoardo 在内的所有 84 位贡献者表达了感谢,并称项目是许多人接触 Linux 和开源的起点。

项目后续状态

  • 代码仓库:将由现任维护者继续保有所有权,但不会转让给他人。维护者明确表示不接受接手请求,建议有意向者自行 fork 项目继续开发。
  • 网站与文档:pivpn.io 域名及 GitHub 托管的文档将在 @0-kaladin 支付相关费用期间保持可访问。维护者将进行少量提交以更新文档说明项目状态,但不会进行功能更新。
  • 安装重定向:维护者将在力所能及的情况下保持安装脚本的重定向可用。

v4.6.0 版本更新内容

  • 新功能
    • 添加了在无人值守安装中使用 Pi-hole 的选项。
  • 缺陷修复与重构
    • 更新了子网生成与客户端创建逻辑。
    • 核心重构:允许使用任意子网和子网掩码。
    • 脚本修复:防止添加的客户端数量超过子网容量限制。
    • 脚本修复:正确移除 IPv6 地址四组数中的前导零。
    • 核心重构:采用新的概率性子网生成方法,并在失败时回退至其他 RFC1918 子网。

完整变更日志:v4.5.0...v4.6.0

12. C++ Insights – See your source code with the eyes of a compiler (github.com)

C++ Insights 简介

C++ Insights 是一个基于 Clang 的源码到源码转换工具,其目标是将 C++ 代码中通常在编译器内部隐式发生的操作显性化,帮助开发者理解编译器在幕后所做的“魔法”。

核心功能与目的

  • 源码转换:它将用户编写的 C++ 代码转换为更接近编译器内部理解形式的等效 C++ 代码。
  • 揭示隐式行为:例如,它会显示编译器自动生成的特殊成员函数(如默认构造函数、拷贝构造函数、赋值运算符)、隐式的类型转换(如向上转型)、autodecltype 的推导类型、lambda 表达式、范围 for 循环、结构化绑定等的内部展开形式。
  • 输出可编译代码:其输出目标是可编译的 C++ 代码(尽管并非所有情况都能做到)。
  • 与 AST Dump 和汇编输出的区别:与 Clang 的 AST dump(抽象语法树)或 Compiler Explorer 生成的汇编代码不同,C++ Insights 的输出仍是 C++ 代码,对开发者更为友好,便于理解和教学。

构建方法

可以通过多种方式构建 C++ Insights:

  1. 在 Clang 源码树外构建
    • 前提:系统已安装 Clang。
    • 步骤:克隆 cppinsights 仓库,使用 CMake 和 Ninja 进行编译。
    git clone https://github.com/andreasfertig/cppinsights.git
    mkdir build && cd build
    cmake -G"Ninja" ../cppinsights
    ninja
    
  2. 在 Clang 源码树内构建
    • 使用 LLVM 的 LLVM_EXTERNAL_PROJECTS 选项。
    git clone https://github.com/llvm/llvm-project.git
    git clone https://github.com/andreasfertig/cppinsights.git
    mkdir build && cd build
    cmake -G Ninja -DLLVM_EXTERNAL_PROJECTS=cppinsights -DLLVM_EXTERNAL_CPPINSIGHTS_SOURCE_DIR=<路径> ../llvm-project/llvm
    ninja
    
  3. 特定平台支持
    • Windows:参考 Readme_Windows.md
    • Arch Linux:需指定额外标志以避免库冲突。
    • macOS ARM:配置时需指定架构 -DCMAKE_OSX_ARCHITECTURES=arm64

使用方式

基本命令

insights <你的C++文件> -- -std=c++17

处理系统包含路径问题: 由于工具使用的系统包含路径可能与当前环境不匹配,可使用提供的脚本 scripts/getinclude.py 来获取当前环境的路径并传递给工具。

insights <你的C++文件> -- -std=c++17 `./scripts/getinclude.py`

自定义 GCC 工具链: 若使用非默认路径的自定义 GCC 构建,可通过 --gcc-toolchain 选项指定路径。

./cppinsights Insights.cpp -- --gcc-toolchain=${GCC安装路径} -std=c++20

生态系统与支持

  • 在线版本:可直接在 cppinsights.io 使用。
  • IDE 集成:提供了 Vim、Neovim、Visual Studio Code 的插件/扩展。
  • 包管理:可通过 Homebrew (macOS) 安装。
  • 容器化:提供 Docker 镜像以便快速使用。
  • 教学资源:作者在 YouTube 频道定期发布使用该工具讲解 C++ 构造的视频。

参与和贡献

  • 可通过 GitHub Issues 报告错误或提交功能请求。
  • 欢迎通过 Pull Requests 贡献代码。
  • 也接受通过 GitHub Sponsors 或 Patreon 的财务支持。
13. What I think about when I edit (2019) (evaparish.com)

关于编辑写作的思考 (2019) 核心要点总结

本文作者分享了其长期积累的编辑写作哲学与具体技巧,适用于多种文体(如技术文档、邮件、小说等),旨在帮助写作者更清晰、准确、高效地表达。

核心编辑原则

  1. 明确表达意图:动笔前,花时间写下(或思考)你的核心论点、目标读者和写作目的。在写作和编辑过程中不断对照,确保内容紧扣初衷。
  2. 适度重复:在文章开头和结尾重申核心观点,帮助读者抓住重点。在语言层面,避免使用模糊的指示代词(如“这个”、“那个”),而应使用带具体名词的短语来指代,使指代关系更清晰。
  3. 力求简洁
    • 删除冗余词语,直奔主题。例如,将“You should save the file”简化为“Save the file”。
    • 用更简洁的结构替代“of”或“for”短语(如将“the manager of the team responsible for marketing”改为“the marketing team’s manager”)。
    • 拆分长句,使用逗号等标点合理断句,以提高可读性。
  4. 消除被动语态:主动语态能更清晰地说明动作的执行者,使句子更直接、有力。例如,将“The building was evacuated”改为“The employees evacuated the building”。
  5. 慎用副词:尝试用更精确的动词或描述来取代副词,使表达更具体、有力。避免用副词作为模糊或不自信的修饰(如“基本上”、“本质上”)。
  6. 不假设读者知情
    • 首次出现的缩写必须给出全称
    • 对专业概念进行简要解释。
    • 提供进一步阅读的链接。
  7. 注意语气一致:决定使用口语化还是正式的语气,并全文保持一致,避免混淆读者。
  8. 避免行话和陈词滥调:使用清晰、直白的语言表达本意。行话和陈腐的比喻(如“挑大梁”、“触地得分”)可能疏远不熟悉这些说法的读者。
  9. 善用留白
    • 将长段落分解为多个短段落。
    • 使用有意义的小标题组织文章结构。
    • 用列表、表格和粗体字来突出关键信息,方便读者快速浏览和抓取重点。

总结

作者的编辑哲学可归结为两个核心信条:

  1. 准确表达本意:这意味着不依赖副词、行话、陈词滥调或模糊修饰。
  2. 删除一切不必要的词

遵循这些原则能帮助作者更有效地写作和编辑,并鼓励写作者在实践中有意识地运用语言,而非机械地遵循规则。

14. A History of Source Control Systems: SCCS and RCS (experimentalworks.net)

源代码控制系统历史:SCCS 与 RCS 概述

背景与总览

源代码管理系统(SCM)在软件开发中至关重要,其历史可追溯到1970年代。本文聚焦于最初两个具有重要影响力的系统:SCCS(1973年)与RCS(1982年)。它们均为本地单文件版本控制系统,奠定了现代版本控制的基础概念。

一、SCCS(1973年):首个版本控制系统

  • 诞生背景:1970年代,随着视频终端和分时操作系统的普及,程序员从穿孔卡片转向磁盘文件编辑,源代码管理成为需求。Marc Rochkind 于1972年在SNOBOL中为IBM System/370开发了首个版本控制系统,1973年用C语言为UNIX重写,即SCCS。
  • 核心机制
    • 使用交错增量(Interleaved Deltas) 存储版本差异,将变更信息(如插入、删除)与原始行交织在文本文件中,便于追踪行级变更。
    • 通过锁定机制确保单用户写入:文件在检出编辑时变为可写,其他用户无法同时编辑,未提供合并功能。
    • 用户通过sccs delta等命令提交变更,存储差异和元数据(如注释、日期)。
  • 局限性
    • 本地仅限:无网络协作功能,依赖共享时间共享机器。
    • 单文件管理:无跨文件仓库或原子提交概念。
    • 存储效率低:交错增量需读取全部历史版本才能检出特定版本。
  • 使用示例:创建文件(sccs create -n main.c)、检出编辑(sccs get -e main.c)、提交变更(sccs delta main.c)。
  • 影响:尽管如今少用,但其增量存储、提交注释、版本ID扩展等概念被后续系统继承。

二、RCS(1982年):改进与优化

  • 诞生:1982年由Walter Tichy在普渡大学开发,旨在改进SCCS。
  • 核心创新
    • 反向分离增量:最新版本存储完整文件,旧版本存储反向差异(从新版本向旧版本生成增量链),显著加快最新版本检出速度。
    • 改进用户体验:支持直接操作检出文件或版本文件,比SCCS更直观。
    • 锁定优化:允许普通用户突破锁定,并向锁持有者发送通知(SCCS需特权用户解锁且无记录)。
  • 与SCCS对比
    • 优势:最新版本检出更快;锁定管理更灵活。
    • 劣势:旧版本检出较慢;初始版本缺少SCCS已有的校验和、分支、标签功能(后续版本逐步添加)。
  • 使用示例:锁定检出(co -l main.c)、编辑后提交(ci -l main.c)、解锁(co -u main.c)。
  • 存储格式:文件以,v为后缀,二进制数据可能压缩存储。

三、实施与遗产

  • SCCS实现
    • 原始版本为专有软件,后续有BSD和GNU重新实现(如CSSC)。
    • 影响深远,增量存储、提交消息等概念成为行业标准。
  • RCS实现
    • 早期在BSD发行,后转为GPL许可,成为GNU项目一部分。
    • 文件格式被CVS、Perforce等系统沿用;关键词扩展(如$Id$)被广泛采用;分离增量技术影响了Git、Mercurial等现代系统。

四、作者补充(来自Marc Rochkind邮件)

  • SCCS最初无sccs命令,而是直接使用getdelta等子命令。
  • 在UNIX中,SCCS依赖ed编辑器,并借助diff生成增量。
  • SCCS最初仅在小范围使用,随Programmer's Workbench推广才广泛普及。

结论

SCCS和RCS作为早期版本控制系统,奠定了本地单文件版本管理的技术基础。SCCS首创增量存储和锁定机制,RCS通过反向增量优化了性能并提升用户体验。它们的概念和设计持续影响后续版本控制系统的发展,为集中式与分布式系统演进铺平道路。

15. For twenty years, PostSecret has broadcast suburban America’s hidden truths (hazlitt.net)

PostSecret:二十年广播美国郊区隐藏真相

项目起源与创始人背景

Frank Warren 在2004年于马里兰州创建了PostSecret项目。当时他经营医疗文件递送业务,生活看似稳定,但内心渴望寻找冒险与表达的出口。他童年时与母亲通过明信片交流的经历,以及后来在自杀预防热线担任志愿者的经验,都深刻影响了他对秘密、沟通与疗愈的理解。

项目运作方式

  • 初始阶段:Frank在华盛顿特区分发了3000张自寄明信片,邀请陌生人匿名写下秘密并寄回。
  • 网站上线:随着回信增多,他于2005年创建PostSecret网站,每周日更新由匿名用户创作的明信片图片。网站设计简洁,以黑色背景衬托秘密,无广告。
  • 秘密筛选:Frank依靠直觉选择秘密,注重新颖性、表达方式以及情绪多样性(虽以黑暗秘密为主,但会加入轻松内容)。他保留了所有收到的明信片,部分已借给博物馆展览。

秘密的性质与影响

  • 内容范围:秘密涵盖不忠、渴望、虐待、性探索、恐惧等,反映了普遍的人性复杂面。近期秘密多围绕关系不满与孤独。
  • 心理与文化意义:秘密与羞耻、恐惧、文化禁忌紧密相关。PostSecret为人们提供了安全的匿名披露渠道,类似心理治疗或宗教告解的宣泄功能。
  • 个人案例
    • Casey:通过明信片表达对朋友的失望,反映了因家庭压抑而产生的愤怒。
    • V.:承认不孕带来的解脱感(因不必停药),秘密被公开后促使她与丈夫沟通并最终领养孩子。
    • Carl:简短写下赌博毁掉婚姻,后澄清是配偶而非自己的赌博问题,展示了秘密的模糊性与观众的主观解读。

争议与反思

  • 批评观点:有评论认为Frank间接从他人创伤中获利,且匿名分享可能无法真正解决秘密持有者的问题,秘密在互联网中可能再次被隐藏。
  • Frank的回应:他未通过网站直接盈利,收入主要来自书籍版税和演讲。他强调项目旨在鼓励人们采取行动、重新审视秘密,但无法保证疗愈效果。
  • 现场活动:Frank曾举办大型分享活动,参与者公开分享秘密。这种形式虽有 catharsis(宣泄)作用,但也被质疑是否可能导致“不当的脆弱性”。

项目在数字时代的角色

PostSecret诞生于互联网早期,为郊区居民(尤其青少年)提供了窥见他人生活、缓解压抑的窗口。它记录了美国社会中通常被隐藏的欲望、恐惧与矛盾,成为某种“人类本性剖面图”。然而,其匿名性也引发了真实性、伦理影响与持久意义的持续讨论。

结论

PostSecret超越了单纯的艺术或社会学项目,成为集体心理的镜像。它揭示了秘密如何塑造个人与社会,以及在数字化时代,匿名披露的复杂后果——既可能带来释放,也可能陷入新的沉默。

16. Schedule-Free Learning – A New Way to Train (github.com)

Schedule-Free Learning:一种无需预设训练计划的新型训练方法

核心概念
Schedule-Free Learning 提出了一种新的优化器方法,其核心优势是无需预先指定学习率衰减计划或训练步数,能够实现更快或至少匹配当前最佳计划调度(如余弦衰减、线性衰减)的训练效果。

关键特性

  • 无需调度:消除了学习率衰减调度的需求,但仍能达到或超过传统调度方法的性能。
  • 低内存开销:仅需存储两个序列(可实时计算第三个),内存需求与基础优化器相同(参数缓冲区 + 动量)。
  • 兼容性强:提供 SGD、AdamW、RAdam 等优化器的免调度版本,以及可包装任意优化器的实验性 ScheduleFreeWrapper

方法原理
方法通过插值与平均的组合替代传统动量。以梯度下降为例,更新过程涉及三个序列:

  • $y_t$:用于梯度计算的位置(插值结果)。
  • $z_t$:主迭代序列(对应基础优化器的更新)。
  • $x_t$:用于测试/验证损失评估的序列(平均结果)。

更新公式为: $$y_{t} = (1-\beta)z_{t} + \beta x_{t}$$ $$z_{t+1} = z_{t} - \gamma \nabla f(y_{t})$$ $$x_{t+1} = \left(1-\frac{1}{t+1}\right)x_{t} + \frac{1}{t+1}z_{t+1}$$

其中 $\beta$ 为插值参数(默认 0.9),评估测试损失应使用 $x_t$ 序列。

实现与使用

  • PyTorch 实现:通过 pip install schedulefree 安装,提供 SGDScheduleFreeAdamWScheduleFreeRAdamScheduleFree 等优化器。
  • 训练/评估切换:由于使用不同序列进行梯度计算和评估,需在训练时调用 optimizer.train(),评估时调用 optimizer.eval()
  • 检查点保存:保存时优化器需处于评估模式。
  • 包装器版本ScheduleFreeWrapper 可包装任意优化器,并支持在 $y$ 点计算权重衰减(通过 weight_decay_at_y 参数)。

注意事项

  1. BatchNorm 兼容性:使用 BatchNorm 的模型需在评估前通过前向传播更新缓存统计量。
  2. 参数调优:$\beta$ 值可能需要根据训练长度调整(例如对于长训练可尝试 0.95 或 0.98)。
  3. 学习率调整
    • SGD:建议使用比经典速率高 10-50 倍的学习率。
    • AdamW:建议使用比调度方法高 1-10 倍的学习率。
  4. 学习率预热:推荐使用 warmup_steps 参数进行预热。
  5. 混合精度训练:若参数缓存为 fp16,需手动更新缓存以确保评估使用正确的 $x$ 序列。

相关研究

  • 方法可视为原始平均($\beta=1$)与 Polyak-Ruppert 平均($\beta=0$)之间的插值,兼具两者的优势。
  • 与 Nesterov 加速方法、随机权重平均(SWA)、循环学习率调度等既有方法相关,但提供了更完整的训练时间-性能权衡前沿,且无需额外调度或内存开销。
  • 可与 Lookahead 优化器等结合使用以进一步提升性能。

示例与许可

  • 提供 MNIST 图像分类示例。
  • 项目采用许可证文件指定的许可。

总结
Schedule-Free Learning 是一种革新性的训练方法,通过优化器内部机制的调整,摆脱了对学习率调度的依赖,简化了训练流程,同时保持了与现有最佳实践相当或更优的性能。其实现已开源,易于集成到 PyTorch 项目中。

17. NIST researchers use cellphone compass to measure glucose (www.nist.gov)

文章摘要

美国国家标准与技术研究院(NIST)的研究人员开发了一种新技术,利用智能手机内置的磁力计(指南针)来高精度测量液体样本中的葡萄糖浓度,为糖尿病监测提供了潜在的新方法。

技术原理: 该技术将智能手机与一个装有待测溶液的微型容器以及一条特制的“智能”水凝胶条夹在一起。这种水凝胶是多孔材料,内部嵌入了微小的磁性颗粒,并被设计成在接触特定物质(如葡萄糖或酸碱度变化)时会发生膨胀或收缩。当水凝胶形态变化时,其中的磁性颗粒与手机磁力计的距离随之改变,导致磁力计检测到的磁场强度发生相应变化。通过测量这种磁场变化,即可反推出溶液中葡萄糖等物质的浓度。研究人员通过堆叠两种对不同物质(如葡萄糖和pH值)有不同响应速度的水凝胶层,放大了运动信号,提高了检测的灵敏度。

应用前景与优势:

  1. 高灵敏度: 概念验证实验已能检测到微摩尔量级的葡萄糖浓度,虽高于家用血糖仪通常所需的灵敏度,但未来有望实现唾液等低浓度样本的检测。
  2. 多功能性: 该技术原理可扩展至测量其他生物标志物,如特定DNA链、蛋白质或参与免疫反应的组胺(目标达到纳摩尔量级灵敏度),以及检测环境毒素。
  3. 低成本与便捷: 除手机外,无需额外的电子设备或电源,无需对样本进行特殊处理,可在资源有限的环境中使用。例如,其测量pH值的能力可媲美昂贵的台式仪器,但成本极低,适用于家庭酿造、环境水质现场检测等场景。

研究现状与未来方向: 该研究成果已发表于《自然·通讯》。目前,该技术仍处于概念验证阶段。要实现商业化应用,未来需解决两个主要挑战:一是开发能够批量生产且具有长保质期的水凝胶测试条;二是优化水凝胶设计,加快其对目标物质的响应速度以缩短测量时间。如能实现更高的灵敏度(如纳摩尔级),将能大幅简化某些需要收集大量样本且依赖复杂实验室分析的医学检测流程(如尿液组胺检测),使其变得更加便捷。

18. AI and the Problem of Knowledge Collapse (arxiv.org)

AI与知识崩塌问题:摘要

核心问题

人工智能在处理大量数据、生成新见解和提高生产力方面具有巨大潜力,但其广泛采用可能带来意外后果。本文探讨了AI如何通过降低特定知识获取成本,反而可能损害公众理解。

知识崩塌的定义

  • 产生机制:大型语言模型(LLM)虽然基于海量多样数据训练,但自然生成偏向数据分布“中心”的输出。这种倾向通常有用,但对递归AI系统的过度依赖可能导致“知识崩塌”。
  • 影响:知识崩塌可能损害创新和人类理解与文化的丰富性,因为AI输出趋向同质化。

人类与AI的关键区别

  • AI模型无法自主选择训练数据,而人类可以战略性地寻求多样化的知识形式,前提是他们认为这些知识有价值。

研究模型与发现

  • 简单模型:作者构建了一个模型,其中学习者或创新者社区可选择使用传统方法或依赖折扣的AI辅助过程。
  • 崩塌条件:模型识别了知识崩塌发生的特定条件。
  • 定量结果:在默认模型中,对AI生成内容施加20%的折扣,会导致公众信念比无折扣时更偏离真相2.3倍。

经验衡量方法

  • 提供了一个理论框架来衡量LLM输出的分布,并通过具体例子比较不同模型和提示风格下输出的多样性,以验证理论。

未来研究方向

  • 基于结果,作者考虑进一步研究来对抗知识崩塌,例如探索如何激励人类保持知识多样性或优化AI训练过程。
19. Breakthrough drug trial saw cancer vanish in every patient (2022) (www.euronews.com)

直肠癌免疫治疗突破性试验成果摘要

试验核心成果

2022年发表于《新英格兰医学杂志》的一项小型临床试验显示,12名错配修复缺陷型直肠癌患者在接受实验性免疫药物dostarlimab治疗后,肿瘤全部消失。该研究由纽约纪念斯隆-凯特琳癌症中心主导,患者每三周接受一次dostarlimab治疗,持续六个月。原计划后续进行化疗、放疗和手术,但所有患者仅通过免疫疗法即实现临床完全缓解,且在长达两年的随访中癌症未复发

首创性与历史意义

  • 医学史首次:研究者路易斯·迪亚兹博士表示,这是首次在所有参与患者中实现癌症完全消失的试验。
  • 治疗范式创新:该疗法避免了传统治疗的放疗、手术和化疗,使患者得以保留正常身体功能,显著提升生活质量。

作用机制解析

  • 针对特定突变:试验聚焦于错配修复缺陷型直肠癌,此类癌症因基因突变积累对常规化疗反应较差。
  • 免疫检查点抑制剂原理:dostarlimab作为免疫检查点抑制剂,通过阻断免疫细胞上的“制动信号”,解除免疫系统抑制状态。由于MMRd癌细胞突变数量多、形态异常,解除抑制的免疫细胞能更强力地识别并攻击肿瘤。

研究局限与展望

  • 谨慎乐观态度:未参与该研究的专家汉娜·萨诺夫博士指出,尽管结果令人鼓舞,但该疗法尚不能替代现有治愈性方案。小型单中心研究的结果能否推广至更广泛的直肠癌人群仍待验证。
  • 后续研究方向
    1. 试验持续招募患者并扩大规模
    2. 探索该疗法在胃癌、前列腺癌、胰腺癌等其他癌症中的应用潜力
    3. 未来需开展纳入不同年龄、合并症和肿瘤负荷患者的异质性研究

注:本摘要严格依据原文内容撰写,涵盖试验设计、关键结果、机制解释及学术评价,未包含任何主观评价或延伸信息。

20. Anti-crime humps in medieval Venice (www.visitvenezia.eu)

威尼斯街头巷尾常见的一些突出的灰浆包块,被称为“gobbe”或“pissotte”,是中世纪时期富有创造性的城市设施。这些凸起,约有上百处,通常位于小巷拐角处,包括教堂转角,多用灰浆、伊斯特里亚石或者锻铁制成,被称为“antibandito humps”(防盗包)或“pissotte”。

它们的主要功能是治安防范。中世纪的威尼斯没有公共照明,夜间行人易遭埋伏或抢劫,犯罪分子常常藏身于昏暗街角。为了减少夜间杀人抢劫事件,这些防盗包被广泛设置,阻止罪犯藏身,也间接保护了市民安全。同时,威尼斯诞生了“codega”职业,即夜间为行人举灯照路的佣人。

此外,这些凸起也防止了市民在街角随地小便。其倾斜表面会使尿液溅回裤腿和鞋上,起到“尿尿克星”(pissabraghe)的作用,维护了公共卫生和市容。因此,这些看似随意的包块实际集防盗、卫生、公众教化等多重功能于一体,是威尼斯城市历史及其社会治理智慧的象征,至今仍作为历史遗迹广为流传。

22. Fear makes you a worse programmer (2014) (jvns.ca)

恐惧使你成为更差的程序员 (2014)

文章探讨了恐惧如何损害编程能力,并区分了有益的谨慎阻碍工作的恐惧之间的界限。主要观点如下:

恐惧的负面影响

当程序员感到害怕时,会变得过于保守,拒绝进行必要的代码改动或优化。例如,担心“万一搞坏了怎么办?”可能导致软件质量下降,甚至无法部署已测试的代码,只能勉强维持现状,无法实现显著改进。

通过工具和流程减少恐惧

工具与流程能有效降低恐惧:

  • 版本控制:允许安全地修改代码,无需担心丢失旧版本。
  • 测试:建立信心,使开发者敢于修改代码(如《Working Effectively with Legacy Code》一书强调测试是应对遗留代码恐惧的关键)。
  • 其他措施:包括允许试错的QA环境、分阶段部署、轻松回滚的能力、专职QA团队以及异常监控工具等。

恐惧惩罚的文化加剧恐惧

即使工具先进,犯错后的反应至关重要。无责复盘(blameless postmortems)关注事件本身而非个人责任,能减少对犯错的恐惧。若因故障而指责员工,将导致他们未来更害怕改动,最终损害软件质量。

非理性恐惧的传播

某些恐惧是非理性的,但仍可能影响团队。例如,一次部署故障后,即使原因已查明并修复,开发者可能仍会对后续部署感到焦虑。这种恐惧可能持续,直到多次成功经历后才逐渐消退。

结论

作者指出,在大型软件系统工作中恐惧难以避免,但通过更好的工具、无责文化以及逐步积累成功经验,可以减轻这种恐惧,从而提升编程工作的质量和效率。文章还推荐了相关资源,如Ryan Kennedy的“Fear Driven Development”演讲。