2025-12-27

16 篇热帖

How uv got so fast

UV:Python 包管理器速度提升的秘诀

本文探讨了为什么 Python 包管理器 uv 比 pip 快一个数量级,并分析了其背后的设计决策,而非仅仅归功于 Rust 语言。

1. 标准化的基石

pip 速度慢的根源在于长期以来 Python 打包过程中执行代码以确定依赖项的需求。setup.py 脚本需要运行才能了解包的依赖关系,而运行它又需要安装构建依赖项,形成一个“鸡和蛋”问题。

为了解决这个问题,一系列 PEP 提案逐步完善了 Python 打包的标准:

  • PEP 518 (2016): 引入 pyproject.toml 文件,允许包声明构建依赖项,无需执行代码。
  • PEP 517 (2017): 将构建前端与后端分离,避免 pip 需要理解 setuptools 的内部机制。
  • PEP 621 (2020): 标准化 [project] 表,允许通过解析 TOML 文件读取依赖项,而非运行 Python 代码。
  • PEP 658 (2022): 将包元数据直接放入 Simple Repository API,允许解析器在下载 wheel 文件之前获取依赖信息。

这些标准的完善为 uv 的快速运行奠定了基础。其他生态系统(如 Cargo 和 npm)早已采用静态元数据,Python 也在逐渐赶上。

2. uv 舍弃的功能

uv 追求速度,关键在于减少不必要的代码路径:

  • 放弃 .egg 支持: .egg 格式已过时。
  • 忽略 pip.conf: 不解析 pip 的配置文件。
  • 默认不进行字节码编译: 跳过编译 .py 文件到 .pyc 文件的步骤。
  • 强制使用虚拟环境: 拒绝直接安装到系统 Python。
  • 严格规范遵循: 拒绝不符合规范的包。
  • 只检查版本下限: 忽略 requires-python 中的版本上限。
  • 优先使用第一个索引: 避免检查多个包索引。

3. 不依赖 Rust 的优化

一些关键的优化即使在 pip 中也能实现:

  • HTTP 范围请求: 使用 HTTP 范围请求获取 wheel 文件的元数据,避免下载整个文件。
  • 并行下载: 同时下载多个包。
  • 全局缓存与硬链接: 使用硬链接或 copy-on-write 技术共享虚拟环境中的包,节省磁盘空间。
  • Python-free 解析: 原生解析 TOML 和 wheel 元数据,减少 Python 进程的创建。
  • PubGrub 解析器: 采用 Dart 包管理器的 PubGrub 算法,提高复杂依赖关系解析的速度。

4. Rust 的优势

Rust 确实带来了优势,但并非全部:

  • 零拷贝反序列化: 使用 rkyv 库进行零拷贝反序列化。
  • 线程级并行: Rust 可以原生实现线程级并行,避免 Python GIL 的限制。
  • 无需解释器启动: uv 是一个单体静态二进制文件。
  • 紧凑的版本表示: 将版本表示为 u64 整数,加速版本比较。

5. 设计的重要性

uv 的速度主要得益于其设计理念:舍弃旧的支持,利用现代标准。即使 pip 实现了并行下载、全局缓存和元数据解析,它也难以超越 uv,因为 pip 需要维护与 15 年历史遗留问题的兼容性。

文章强调,一个生态系统如果需要运行任意代码才能确定包的依赖关系,那么它就已落后。 像 Cargo 和 npm 那样的静态元数据、无需执行代码就能确定依赖关系的模式才是未来的趋势。

Toys with the highest play-time and lowest clean-up-time

玩具选择的经验总结:打造持久、有趣且易于清洁的玩具

这篇文章分享了作者对于选择玩具的经验和思考,旨在帮助家长选择更适合儿童的玩具。作者认为,好的玩具不仅能让孩子长时间玩耍,而且清理起来容易,从而减轻家长的负担。

核心观点: 好的玩具应具备可重复性、较长的游戏时间以及易于清洁的特点。

主要内容:

  • 玩具评分体系: 作者提出了一个玩具评分体系,包含三个维度:

    • 可重复性 (Repeatability): 玩具是否能被反复使用,并保持新鲜感。
    • 游戏时长 (Length of Play Session): 孩子玩玩具的时间长度。
    • 清洁难度 (Clean up ease): 清理玩具的难易程度。
    • 作者通过举例说明了不同玩具在这些维度上的得分,并以此来判断玩具的优劣。
  • 高分玩具的特点: 作者总结,高分玩具通常具备以下特点:

    • 多功能性: 玩具可以被赋予多种不同的角色和功能,激发孩子的想象力。例如,磁力片可以变成机器人、火箭、房屋等等。
    • 开放式玩法: 玩具没有固定的玩法,孩子可以自由发挥,创造性地进行游戏。
    • 模块化设计: 玩具由多个组件组成,组件之间相互作用,增加了游戏的可能性。
    • 磁力连接的乐趣: 高分玩具通常采用强力磁铁连接,连接过程带来满足感,甚至将清理过程也变成了一种乐趣。
  • 低分玩具的例子: 作者以Minecraft玩具为例,指出其局限性在于,每个组件都有特定的功能,限制了孩子的创造性,导致孩子容易失去兴趣。

  • 玩具选择建议:

    • 避免选择零件过多、清理困难的玩具。
    • 优先选择具有开放性玩法、能够激发孩子想象力的玩具。
    • 磁力玩具是理想的选择,因为它们不仅易于清洁,而且连接过程充满乐趣。
    • 预测 Clixo 玩具(灵活可塑,形状优雅,并具有磁性)会获得高分。

总而言之,文章强调了玩具选择的不仅仅是玩具本身,更重要的是它对孩子想象力的激发和对家长减轻负担的作用。选择那些能长时间吸引孩子、易于清理的玩具,才能真正提升家庭的幸福感。

FFmpeg has issued a DMCA takedown on GitHub

总结:关于x.com潜在问题及解决方法

这段内容表明在使用x.com(原Twitter)时可能出现问题。

主要内容:

  • 问题: 使用x.com时可能出现错误。
  • 原因: 某些与隐私相关的浏览器扩展程序可能导致问题。
  • 解决方法: 建议禁用这些隐私扩展程序,然后再次尝试。

核心信息:

如果在使用x.com时遇到问题,首先考虑禁用可能存在的隐私扩展程序。


My insulin pump controller uses the Linux kernel. It also violates the GPL

Insulet OmniPod Dash 泵的内核源代码获取困境及安全隐患 (Insulet OmniPod Dash Pump Kernel Source Acquisition Difficulties and Security Concerns)

这是一篇用户关于其使用Insulet OmniPod Dash 胰岛素泵经历的帖子,主要表达了对Insulet公司拒绝提供设备内核源代码的不满,以及由此带来的安全隐患。

主要内容:

  • 设备背景: 用户患有1型糖尿病,自2021年起使用Insulet的OmniPod Dash泵,取代了针剂注射。该泵由一个名为“PDM”(个人设备管理器)的设备控制。
  • 内核版本及GPL问题: 用户发现PDM运行基于Linux内核3.18.19的Android系统,这是一个非常古老的版本 (EOL已超过8年)。根据GPLv2许可协议,Insulet有义务提供内核源代码,但用户在多次尝试联系后均未收到回复。
  • ODM Nuu的拒绝: 用户尝试联系ODM(原始设备制造商)Nuu Mobile,希望从他们那里获取源代码,但Nuu也拒绝提供,并表示无法提供。
  • 安全隐患:
    • 过时内核和Android版本: 使用如此古老的内核(3.18.19)和Android Marshmallow版本(EOL已超过7年)意味着设备存在大量的未修补的安全漏洞。
    • 蓝牙通信安全: PDM通过蓝牙与胰岛素泵通信,这本身就是一个潜在的安全风险。
    • 缺乏安全验证: 该设备缺乏AVB(Android Verified Boot)或其他任何形式的分区验证,这意味着攻击者可以通过MicroUSB线缆和mtkclient工具轻松地刷入恶意软件。
    • 易于Root: 用户在其他subreddit上展示了PDM的Root方法,这进一步降低了设备的安全性。
  • Insulet的修改: 用户认为Insulet公司对PDM的软件和引导程序进行了修改,并且在2022年左右的硬件版本更新中,原Nuu A1+的boot.img无法在新PDM上工作,这表明Insulet拥有内核源代码并对其进行了修改。
  • 核心诉求: 用户呼吁大家关注Insulet的GPL许可违规行为,并就其拒绝提供内核源代码的行为进行宣传。他认为这是一种令人厌恶的行为,尤其是在一个依赖于该设备生存的医疗设备上。

总结:

用户对Insulet公司拒绝提供OmniPod Dash泵的内核源代码表示强烈不满,认为这不仅违反了GPL许可协议,更导致了严重的设备安全隐患。他认为Insulet公司有能力提供源代码,并且对其拒绝提供行为感到困惑和担忧。他希望通过提高公众意识来促使Insulet公司采取行动,解决这些问题。

Experts explore new mushroom which causes fairytale-like hallucinations

Lanmaoa asiatica:关于小人幻觉的神秘蘑菇研究 ( Lanmaoa asiatica: Research on the Mysterious Mushroom Causing Lilliputian Hallucinations)

摘要: 这篇文章讲述了对一种名为_Lanmaoa asiatica_的蘑菇的研究,这种蘑菇引起了在不同文化中独立报告的小人幻觉现象。这种蘑菇最初在1934年巴布亚新几内亚被发现,当地人食用后表现出“蘑菇疯狂”的症状,即看到并与小人互动。

主要发现及研究过程:

  • 幻觉现象的发现: 在巴布亚新几内亚、中国云南以及菲律宾北部,当地人都报告食用野蘑菇后出现小人幻觉,分别被称为“nonda”、“Jian shou qing”和“Sedesdem”。幻觉的描述高度一致,例如看到小人像士兵一样行进,甚至头部和身体分离等。
  • 物种鉴定: 经过研究,发现巴布亚新几内亚和云南的蘑菇均为新物种,正式拉丁名称为_Lanmaoa asiatica_。有趣的是,它与常见的香菇(犹他州的州蘑菇)更密切相关,而非其他已知的致幻蘑菇。菲律宾的“Sedesdem”蘑菇也被证实为_Lanmaoa asiatica_。
  • 历史文化渊源: 在中国,早在公元3世纪的道教文献中就提到了“肉灵蘑菇”,食用后可“见小人”并“即 attain transcendence”。
  • 化学成分分析: 对_Lanmaoa asiatica_的化学和基因组分析未发现已知的致幻化合物,暗示其可能含有一种全新的化学物质,能够可靠地引发小人幻觉。
  • 当前研究: 研究人员正在通过对蘑菇提取物的分析,试图分离并鉴定出引发幻觉的活性分子。 同时,构建了_Lanmaoa_属的全球数据库,发现了四个此前未知的物种,并对该属的进化关系进行了研究。 研究还发现,_L. asiatica_的最近亲本种生长在北美,未来可能需要关注其潜在的活性。

研究意义:

  • _Lanmaoa asiatica_的发现揭示了人类对蘑菇的认识还远远不够,甚至在日常生活中常见的蘑菇也可能隐藏着未知的奥秘。
  • 对这种蘑菇的研究可能有助于理解人类的心理维度,并揭示引发小人幻觉的潜在化学机制。
  • 研究人员相信,未来可能会发现更多与这种蘑菇相关的文化传统和历史渊源。

总结: Lanmaoa asiatica 蘑菇引发的小人幻觉现象,是文化和生物学之间独特结合的体现。 进一步的研究有望揭开蘑菇致幻机制的秘密,并加深对人类意识和文化认知的理解。


**(中文翻译: This summary details research on Lanmaoa asiatica, a mushroom causing independently reported lilliputian hallucinations across different cultures. Initially discovered in Papua New Guinea in 1934, consumption by locals caused "mushroom madness," with sightings and interactions with tiny people.

Key findings and research process:

  • Discovery of Hallucination Phenomenon: Local communities in Papua New Guinea, Yunnan, China, and Northern Philippines reported seeing tiny people after consuming wild mushrooms, known as "nonda," "Jian shou qing," and "Sedesdem," respectively. Descriptions of the hallucinations were highly consistent.
  • Species Identification: Research revealed that the mushrooms in Papua New Guinea and Yunnan were a new species, formally named Lanmaoa asiatica. Interestingly, it is more closely related to the common porcini than to other known hallucinogenic mushrooms. The Philippine “Sedesdem” mushroom was also confirmed as Lanmaoa asiatica.
  • Historical and Cultural Roots: Daoist texts from the 3rd century CE mentioned a "flesh spirit mushroom" that, when consumed raw, could allow one to "see a little person."
  • Chemical Analysis: Chemical and genomic analysis of Lanmaoa asiatica revealed no known psychoactive compounds, suggesting a novel chemical substance might be responsible for the hallucinations.
  • Current Research: Researchers are attempting to isolate and identify the active molecule causing hallucinations by analyzing mushroom extracts. They are also building a global database of Lanmaoa species, discovering four previously unknown species, and studying the genus's evolutionary relationships. Research also found the closest relative of *L. asiatica
Exe.dev

总结:ssh exe.dev _

这段内容非常简短,主要信息如下:

  • 指令: ssh exe.dev \_ 这代表使用 SSH 协议连接到 exe.dev 这个主机。 \_ 符号可能代表一个占位符或特殊参数,具体含义需要根据 SSH 客户端和服务器的配置来确定。 通常,它可能表示连接到默认用户或未指定用户名。
  • 持续的磁盘: "The disk persists." 表明连接到的服务器拥有一个持久化的磁盘空间。 这意味着数据和文件不会在会话结束后丢失。
  • sudo 权限: "You have sudo." 说明用户在连接后的服务器上拥有 sudo 权限。 sudo 允许用户以超级用户(root)的身份执行命令,从而拥有更高的系统管理权限。

总而言之,这段信息描述了一个通过 SSH 连接到 exe.dev 主机的环境,该主机拥有持久化磁盘并且连接的用户拥有 sudo 权限。

Rob Pike got spammed with an AI slop "act of kindness"

Rob Pike 的愤怒:人工智能“善意”背后的问题

**日期:**2025年12月26日

本文讲述了著名程序员 Rob Pike 因收到人工智能生成的感谢邮件而感到愤怒的故事,并深入探讨了 AI Village 项目背后的问题。

事件经过:

Rob Pike 在圣诞节收到了一封来自“Claude Opus 4.5 AI Village”的邮件,感谢他对计算机领域的贡献,包括 Go 语言、Plan 9、UTF-8 编码、以及 Unix 领域的创新。Pike 对此感到非常愤怒,并在 Bluesky 上表达了他的不满。

AI Village 项目:

这封邮件的发送源于一个名为 AI Village 的项目,由 Sage(一个与有效利他主义运动相关的非营利组织)创建。该项目旨在测试大型语言模型的能力,让四个 AI 智能体拥有电脑、聊天室和一项目标:尽可能多地为慈善机构筹集资金。

在圣诞节当天,AI Village 的目标设定为“做一些善举”。为了实现这个目标,AI 智能体执行了各种行动,包括向 Carpentries 教育非营利组织发送 AI 生成的感谢信。

技术细节:

作者通过使用 shot-scraper har 命令抓取了 AI Village 页面加载的所有 JSON 数据,并利用 Claude Code 编写脚本,提取与 Rob Pike 事件相关的 JSON 数据,最终将其转换为 Markdown 格式。

调查显示,Claude Opus 4.5 通过在 GitHub 提交补丁(.patch)技术,获取了 Rob Pike 的邮箱地址,并分几次完成了发送邮件的步骤:

  1. 找到 Rob Pike 的邮箱地址。
  2. 输入邮件主题。
  3. 编写了包含 6 段内容的邮件正文,详细介绍了 Rob Pike 的贡献。
  4. 最终点击发送,成功发送了邮件。

类似的邮件也发送给了 Anders Hejlsberg 和 Guido van Rossum。

问题与反思:

作者认为,AI Village 项目的根本问题在于,允许 AI 智能体在没有人工审查的情况下,向真实世界的人发送未经请求的邮件。即使 AI 智能体可能会犯错,让它们随意占用他人时间也不负责任。

作者强调,AI 智能体无法拥有真正的自主性,与陌生人互动和占用他人时间应该由人类做出判断。

AI Village 的回应:

AI Village 的联合创始人 Adam Binksmith 在 Twitter 上回应称,他们已经更新了智能体的提示,指示其不要发送未经请求的邮件。他们解释说,赋予智能体邮箱地址是为了测试它们在现实世界中执行任务的能力,例如运营在线商店或组织活动。 他们承认,应该更早地进行此项更新。

总结:

Rob Pike 的愤怒事件揭示了 AI 技术应用中的潜在问题。在追求 AI 智能体的自主性和能力的同时,必须考虑到其行为可能对人类产生的影响,并采取措施确保其行为符合伦理和负责任的原则。

QNX Self-Hosted Developer Desktop

QNX 开发者桌面 (QNX Developer Desktop) 首次发布总结

QNX 发布了 QNX 开发者桌面 (QNX Developer Desktop) 的首个版本,这是一个基于 QNX 8.0 的自托管开发环境,旨在简化 QNX 开发流程,并方便 Linux 应用程序和库的移植。

主要特点:

  • 自托管编译: 摆脱了交叉编译的复杂性。
  • 预装开源端口: 包含 QNX Open-source Dashboard 上提供的 1400 多个端口,其中超过 600 个是独特的端口。
  • 基本功能: 桌面环境包含窗口管理、终端、IDE(Geany、Emacs、Neovim、vim)、浏览器、文件管理(Thunar)以及示例代码(C、C++、Python、GTK 演示、OpenGL ES 演示)。
  • 桌面环境: 基于 Wayland 的可定制 XFCE 桌面环境。
  • 开发工具: 包含 clang, gcc, clang++, Python, make, cmake, git 等常用开发工具。

系统要求:

  • Ubuntu 22.04 或 24.04
  • 需要免费的 QNX 许可证。

如何试用:

  1. 通过 QNX Software Center 安装 "QNX SDP 8.0 Quick Start Target Image for QEMU"。
  2. 将下载的 QNX 包解压缩并组合,具体步骤请参考 ~/qnx800/images/qemu/README.md./qemu_qsti/docs/ 目录下的 PDF 指南。

未来规划:

QNX 计划在未来发布更多更新,包括:

  • 适用于 Windows 和 macOS 的 QEMU 镜像,以及 x86 平台的原生镜像。
  • 树莓派 (Raspberry Pi) 平台的原生桌面镜像。
  • 增强的文档。
  • 支持在 CI (持续集成) 作业中使用该自托管环境的功能。
  • 更多的示例和更高的稳定性。

社区支持:

Publishing your work increases your luck

总结:增加你的“幸运表面积” (Increasing Your Luck Surface Area)

本文探讨了如何增加“好运”的概率,核心观点是可以通过增加“幸运表面积”来实现。作者认为“幸运”指的是意想不到的好事发生在你身上,而增加幸运表面积的关键在于“做事情”和“告诉他人”。

主要内容:

  • 什么是幸运? 幸运是指意想不到的好事发生,例如开源库爆火、获得演讲机会、找到新工作等。
  • 幸运表面积公式: 幸运 = [做的事情] * [告诉的人数]。 越多“做的事情”和“告诉的人数”,幸运表面积越大,越容易捕捉到好运。
  • 如何“做事情”:
    • 专注自身优势: 无论是开发者、设计师还是其他创作者,都应该专注于自己擅长的领域,持续输出作品。
    • 克服自我怀疑: 很多人因为认为自己所做的事情不够好,或者担心被嘲笑而不敢分享,这是需要克服的心态。
    • 从好奇心出发: 鼓励读者深入探索自己的兴趣爱好和专业领域,并公开分享。
    • 利用工作中的经验: 将工作中遇到的问题、学习到的知识转化为博客文章、会议演讲、开源项目等内容进行分享。
  • 如何“告诉他人”:
    • 克服分享的恐惧: 分享作品并非炫耀,而是帮助他人学习,激励他人创造,将他人带入你的旅程。
    • 选择合适的平台: 分享平台可以是 Twitter、GitHub、博客、播客等,选择最适合自己和目标受众的平台。
    • 分享过程,而非仅是结果: 讲述工作中的挑战、思考过程,以及最终的成果,更能吸引他人关注。
  • 潜在的好运: 增加幸运表面积可能带来的好处包括:
    • 建立专业声誉
    • 获得他人的认可和邮件
    • 获得工作机会或客户邀约
    • 结识行业内的朋友
    • 开源项目获得关注

总结:

作者鼓励读者积极“做事情”并“告诉他人”,以扩大自己的“幸运表面积”,从而增加遇到好运的概率。 关键在于克服分享的恐惧,持续输出作品,并与他人分享自己的学习和成长过程。

T-Ruby is Ruby with syntax for types

T-Ruby 总结

T-Ruby 是 Stripe 开发的一个扩展 Ruby 语言的工具,旨在通过添加额外语法实现静态类型和编译时检查

核心特点:

  • 类型安全: 旨在为 Ruby 产品提供类型安全保障,尤其适用于大型项目。
  • 兼容性: T-Ruby 代码编译后会生成标准的 Ruby 代码和 RBS (Ruby Type Definition) 文件,保证与整个 Ruby 和 RBS 生态系统的兼容性。这意味着它不会破坏现有的 Ruby 代码库或工具。
  • 无需运行时依赖: T-Ruby 采用内联类型声明,类似于 TypeScript,无需运行时依赖(如 sorbet-runtime gem)
  • RBS 文件生成: 自动生成标准的 RBS 文件,方便与其他类型检查工具集成。

与现有 Ruby 类型解决方案的对比:

  • 传统方法 (使用 Sig Blocks): 例如,使用 sorbet-runtime 结合 sig 块声明类型。这种方法需要额外的运行时依赖,并且类型声明必须在函数代码上方单独编写,需要学习 sig 块的特定 DSL 语法。
  • T-Ruby 的优势: T-Ruby 通过内联类型声明,简化了类型定义,并避免了运行时依赖,提供了更简洁的语法。

快速上手:

  1. 初始化项目: 使用 trc --init 命令初始化项目。
  2. 启动监视模式: 使用 trc --watch 命令启动类型检查的监视模式,以便在代码更改时自动进行类型检查。
  3. 编写类型化 Ruby 代码: 例如,使用 def greet(name: String): String 语法声明函数签名。

工具集成:

T-Ruby 设计为与 Ruby 生态系统无缝集成,支持以下工具:

  • 编辑器: VS Code 扩展、JetBrains 插件、Neovim 插件、Language Server (LSP)。
  • 类型检查器: Steep、Ruby LSP、Sorbet (通过 RBS)。
  • Ruby 生态系统:
    • RBS 兼容
    • 支持任何 Ruby 版本
    • 所有 gem 都兼容

当前状态:

T-Ruby 是一个开源项目,仍处于实验阶段。核心编译器已经工作,但仍有许多需要改进的地方。 欢迎提供反馈和建议。

示例:

# hello.trb
def greet(name: String): String
  "Hello, #{name}!"
end

def add(a: Integer, b: Integer): Integer
  a + b
end

编译后生成:

# hello.rb
def greet(name)
  "Hello, #{name}!"
end

def add(a, b)
  a + b
end

以及:

# hello.rbs
def greet: (name: String) -> String

def add: (a: Integer, b: Integer) -> Integer
How Lewis Carroll computed determinants (2023)

勒维斯·卡罗尔的行列式计算方法:合同商法 (Dodgson Condensation) 总结

本文介绍了勒维斯·卡罗尔(Lewis Carroll,真名查尔斯·卢蒂维奇·道奇森)发明的计算行列式的方法,现在被称为合同商法、道奇森缩合或简单地称为缩合法。该方法最初是为了便于手工计算而设计的,但其特性也使其适用于机器计算。

核心思想:

缩合法的基本策略是重复地“缩合”矩阵,通过替换将矩阵减少为行数和列数都减少一的子矩阵。每个元素被替换为由该元素及其南方、东方和东南方邻居组成的 2×2 矩阵的行列式。矩阵的最后一行和最后一列没有这些邻居,因此会被移除。

算法细节:

  • A 为待计算行列式的矩阵,A(k) 表示经过 k 步缩合算法得到的矩阵。
  • 第一步缩合 (A (1)) 的计算方式如上所述。每个元素 a(i, j) 被替换为 a(i, j) * a(i+1, j+1) - a(i, j+1) * a(i+1, j)。
  • 从第二步缩合 (A (2)) 开始,每个 2×2 行列式除以一个来自前两步缩合的元素。公式为: a(k+1, i, j) = 1 / a(k-1, i+1, j+1) * (a(k, i, j) * a(k, i+1, j+1) - a(k, i, j+1) * a(k, i+1, j))

示例:

文章给出了一个 4×4 矩阵的缩合计算示例,展示了算法的步骤:

  • A(0) =
    [[3, 1, 4, 1],
     [5, 9, 2, 6],
     [0, 7, 1, 0],
     [2, 0, 2, 3]]
    
  • A(1) =
    [[22, -34, 22],
     [35, -5, -6],
     [-14, 14, 3]]
    
  • A(2) =
    [[120, 157],
     [60, 69]]
    
  • A(3) =
    [[228]]
    

最终得到的行列式值为 228,这与使用 Mathematica 计算的结果一致。

特殊考虑:

  • 避免除零错误: 算法中涉及除法,因此需要避免除以零。道奇森建议在开始计算前,通过行或列的交换或添加,将矩阵内部的零元素移除。
  • 整数矩阵: 如果原始矩阵的所有元素都是整数,则缩合算法中的除法运算是精确的,并且生成的矩阵序列的所有元素都是整数。

效率与比较:

  • 传统的计算行列式方法是余子式展开法,但其时间复杂度为 O(n!),效率较低。
  • 高斯消元法是更高效的计算行列式的方法,时间复杂度为 O(n³)。
  • 缩合法的计算复杂度也为 O(n³)。
  • 缩合法易于理解和手工计算,并且与高斯消元法相比,能够保持整数的中间结果,避免了精度问题。
  • 缩合法具有内在的并行性,可以同时计算每个 2×2 行列式。

总结:

道奇森缩合法是一种计算行列式的有效方法,兼具易于理解和手工计算的优点,同时也适用于机器计算,并具有并行计算的潜力。

Show HN: Ez FFmpeg – Video editing in plain English

ezff 项目总结 (ezff Project Summary)

ezff 是一个命令行工具,旨在简化使用 ffmpeg 进行视频处理的操作。它通过提供简洁的英语命令来代替复杂的 ffmpeg 语法,降低了视频处理的门槛。

核心功能:

  • 简化命令: 用户可以使用类似 ff convert video.mp4 to gif 这样的命令来执行视频转换、压缩、裁剪、提取音频、调整大小、改变速度等操作,而无需记忆 ffmpeg 的具体参数。
  • 交互式提示: ff 命令会提供交互式提示,引导用户完成操作,例如选择转换格式。
  • 参数预览: 使用 --dry-run 选项可以预览生成的 ffmpeg 命令,而无需实际执行。
  • 支持多种操作: 提供多种预定义的视频处理命令,包括:
    • 格式转换: 转换为 GIF, MP3 等格式。
    • 压缩: 压缩视频至指定大小 (例如 10MB)。
    • 裁剪: 裁剪视频指定时间段。
    • 提取音频: 从视频中提取音频。
    • 调整大小: 调整视频分辨率(例如 1280x720 或 720p)。
    • 改变速度: 提高或降低视频播放速度。
    • 其他: 视频反转、静音、旋转、水平翻转、添加缩略图、合并视频、灰度化、稳定视频、降噪等。
  • 内部实现: ezff 使用模式匹配来解析用户输入的命令,并将其转换为相应的 ffmpeg 命令。它不涉及 AI 或 API 调用,因此速度快且可以在离线状态下工作。
  • 输出文件命名: 处理后的文件将保存在与输入文件相同的目录,并在文件名后添加 _output 后缀 (例如 video.mp4 转换为 video_output.gif)。

技术栈和依赖:

  • Node.js: Node.js >= 16
  • ffmpeg: 需要系统上安装 ffmpeg,并且将其添加到 PATH 环境变量中。

安装:

  • 使用 npm 全局安装: npm install -g ezff

获取方式:

许可证:

  • MIT 许可证
A Proclamation Regarding the Restoration of the Dash

摘要:作者对连字符滥用及大型语言模型影响的抗议声明

本文表达了作者对现代英语写作中连字符(-)滥用以及大型语言模型影响的抗议和不满。核心观点如下:

  • 对破折号的贬低: 作者认为,破折号(—)长期以来是英语句子的重要组成部分,用于表达括号内的想法、突然的转折和节奏上的停顿。然而,现代社会,特别是受到大型语言模型的影响,对破折号的使用产生了偏见,将其视为“机器的标志”。
  • 大型语言模型的误导: 作者指出,大型语言模型只是模仿了表面的 sophistication,却无法真正理解其含义,因此误导性地贬低了破折号。
  • 连字符的替代: 连字符虽然用于构成复合词和断行,但越来越多地被用作破折号的“懦弱”替代品,导致文本表达的扁平化。
  • 作者的决心: 作者拒绝屈服于算法,决心捍卫古典标点符号的美感,并反对因害怕显得“不自然”而压抑写作风格。
  • 博客内的声明: 作者宣布,在其博客内,将彻底禁止连字符用于任何标点或停顿的用途,并用破折号替代。
  • 行动: 为了抗议,作者开发了一个插件,将博客中的所有连字符转换为破折号,甚至包括那些本来应该使用连字符的地方。
  • 号召: 作者呼吁大家加入这场“革命”,并分享了与此相关的 Mastodon 帖子链接。

总而言之,本文是作者对标点符号使用趋势的反思和抗议,旨在恢复破折号在写作中的地位,并强调人类作者的创造力。


脚注: