2025-10-26

35 篇热帖

1. 987654321 / 123456789 (www.johndcook.com)

数学观察:不同进制中数字顺序比率的规律

  • 十进制现象:在十进制中,数字降序排列(987654321)除以升序排列(123456789)的比率非常接近8,精确值为8.0000000729。
  • 其他进制示例
    • 六进制:数字降序(54321₆)除以升序(12345₆)的比率约为4.00268,接近整数4。
    • 十六进制:降序数字(0xFEDCBA987654321)除以升序数字(0x123456789ABCDEF)的结果为14(因浮点精度限制显示为整数,实际接近14)。
  • 通用定义与公式
    • 对于基数b(b > 2),定义:
      • num(b):将数字b-1, b-2, ..., 1降序连接形成的数字。
      • denom(b):将数字1, 2, ..., b-1升序连接形成的数字。
    • 比率满足:num(b) / denom(b) ≈ b - 2,且余数为 b - 1。具体来说,num(b) // denom(b) = b - 2num(b) % denom(b) = b - 1
  • Python验证:通过Python代码(使用lambda函数和循环)验证了公式对b从3到1000均成立。代码简洁地展示了num(b)denom(b)的计算及断言。
  • 浮点精度问题:以b=16为例,比率理论上为14 + 1/16⁻¹⁴(即接近14但有小数部分),但因浮点数精度限制(53位),Python返回精确整数14,无小数部分。
  • 背景与补充
    • 观察源自Mastodon和Fermat's Library,被认为是古老现象。
    • 作者优先使用计算演示而非数学证明,因证明繁琐而程序简洁,且程序与证明互补:程序通过细节显式化填补证明可能遗漏的缺陷。
2. A worker fell into a nuclear reactor pool (www.nrc.gov)

NRC事件报告摘要 (2025年10月21-22日)

本报告记录了美国核管理委员会(NRC)在2025年10月21日至22日期间收到的三起事件。

1. 事件 58001:丢失含氚出口标志

  • 报告方: 科罗拉多州卫生部(协议州报告)
  • 持牌单位: Terracina Apartments,位于科罗拉多州布鲁姆菲尔德
  • 事件详情: 持牌单位报告丢失了三个出口标志。每个标志含有7.03居里(Ci)的氚(H-3),总活度为21.09居里。
  • 事件等级: 材料事件报告,涉及“低于IAEA 3类”的放射性物质。此类源极不可能导致永久性伤害,但若管理不善,接触或靠近较长时间可能造成临时伤害。
  • 应急分类: 非紧急事件。
  • 状态: 已报告至NRC。

2. 事件 57998:帕利塞德斯核电站(Palisades)场外通知

  • 设施: 密歇根州帕利塞德斯核电站(1号机组,已停堆)
  • 事件详情: 电站化学监测发现,联氨排放物超过了《国家污染物排放消除系统》(NPDES)许可证限值。因此,需要通知密歇根州环境、大湖与能源部。
  • NRC关联: 该事件未超过任何NRC法规或报告标准。本次通知仅作为因通知另一政府机构而需进行的4小时非紧急报告(依据10 CFR 50.72(b)(2)(xi))。
  • 影响: 对公众或电站人员健康安全无影响。
  • 应急分类: 非紧急事件。
  • 状态: NRC驻地检查员已获通知。

3. 事件 58002:克林顿核电站(Clinton)手动反应堆停堆

  • 设施: 伊利诺伊州克林顿核电站(1号机组)
  • 事件详情: 反应堆在86%功率运行时,因汽轮机电液控制(EHC)油系统储油罐液位低(由加热器舱内泄漏引发)而手动触发紧急停堆(SCRAM)。停堆后所有系统响应正常。因反应堆在临界状态下保护系统动作,依据10 CFR 50.72(b)(2)(iv)(B)进行4小时非紧急报告。
  • 后续操作: 运营人员已按规程将电站稳定在热停堆模式(模式3),并利用独立的EHC油系统通过旁路阀向主冷凝器排放蒸汽以排出衰变热。
  • 影响: 对公众或人员健康安全无影响。
  • 应急分类: 非紧急事件。
  • 状态: NRC驻地检查员已获通知。

报告整体总结: 所有三起事件均被归类为非紧急事件。事件涉及范围包括丢失小型放射性源、非放射性污染物排放超标通知,以及核电站因常规设备问题导致的手动停堆。事件报告中均强调未对公众健康安全或工作人员安全构成直接风险,且相关监管机构已按要求获得通知。

3. You already have a Git server (maurycyz.com)

内容介绍了如何利用现有Git仓库作为服务器。通过SSH访问,可以使用git clone ssh://username@hostname/path/to/repo克隆远程仓库。默认情况下,Git禁止推送到当前检出的分支,但可以在远程服务器上运行git config receive.denyCurrentBranch updateInstead来配置允许这样做,从而避免SSH延迟或复制错误。Git还支持在接收推送时执行脚本,例如通过设置post-update钩子来运行站点生成器,脚本输出会返回到本地终端。作者将此应用于博客生成,实现本地编辑和推送。此外,Git默认提供备份功能,确保数据在服务器和本地都有副本,增强了安全性。

4. Let's Help NetBSD Cross the Finish Line Before 2025 Ends (mail-index.netbsd.org)

NetBSD 2025年募捐倡议

NetBSD社区成员Jay Patel于2025年10月26日向NetBSD用户邮件列表发布公开信,呼吁社区在年底前帮助NetBSD基金会完成年度筹款目标。

筹款现状与目标

  • 当前已筹集金额:10,738美元
  • 年度目标金额:50,000美元
  • 缺口金额:39,262美元
  • 时间紧迫:需在2025年结束前完成筹款

捐款用途

捐款将直接支持以下关键项目:

  1. RISC-V架构支持:将NetBSD扩展到新型开源硬件架构
  2. Wi-Fi网络栈现代化:大规模改进无线网络栈,提升NetBSD在笔记本电脑和嵌入式设备上的实用性

NetBSD的价值与意义

  • 技术生态系统重要组成部分:NetBSD不仅是操作系统,更是整个技术生态的关键组成
  • 可持续发展力量:在设备计划性淘汰的时代,NetBSD通过支持从新到旧的大量硬件平台,减少电子垃圾
  • 旧设备再利用:将原本可能被丢弃的旧笔记本电脑和单板计算机转变为防火墙、文件服务器或复古游戏机等实用设备

行动呼吁

  • 通过NetBSD官网进行年末捐款:https://netbsd.org/donations/
  • 已捐款者可通过分享邮件或在社交媒体上使用标签 #WhyIRunNetBSD 说明支持NetBSD的原因来提供帮助
5. I'm drowning in AI features I never asked for and I hate it (www.makeuseof.com)

过度泛滥的AI功能:正在摧毁产品与互联网

本文批评了当前科技行业过度追捧AI功能的趋势,认为这并未提升产品质量,反而带来了诸多负面影响。作者以自身使用体验为例,指出AI功能正在从三个方面破坏数字体验。

一、AI功能正在损害产品质量

  • 核心问题:科技公司不再专注于打磨核心体验,而是强行添加AI功能以追赶潮流。
  • 具体案例
    • Google Gemini:取代了原有助手,导致基础命令响应变慢、可靠性下降。
    • Apple Siri:结合Apple Intelligence后,体验不升反降。
    • Microsoft Copilot:在Windows中无处不在,感觉像是强行推销的广告,而非实用功能。
    • Arc浏览器:其继任者Dia因全面转向AI而失去了原有特色。
  • 本质:添加AI功能已成为企业的营销清单项目,而非为了真正改善用户体验。

二、互联网内容生态因AI而恶化

  • 真实性丧失:“互联网已死”理论正逐渐成为现实,大量内容由AI生成而非真人创作。
  • 各平台现状
    • X(原Twitter):充斥着由AI生成、用于获取流量的机械式帖子和回复。
    • Instagram/YouTube:充满AI生成的重复性脚本。
    • Reddit:讨论帖更像AI生成的摘要。
    • Google搜索:新增的AI概述功能常出现事实错误,被包装成升级实则是倒退。
  • 结果:互联网原本充满人性的、不可预测的趣味性,正被同质化、为病毒式传播而优化的AI内容所取代。

三、AI的构建过程存在严重伦理问题

  • 训练数据问题
    • 无偿使用创作:AI模型通过抓取互联网上的书籍、文章、图像、视频等进行训练,未经原作者许可,也未给予补偿。
    • 影响创作者:写作者、艺术家、摄影师的风格和作品被AI工具模仿,却无法从中获利。
  • 用户数据问题
    • 持续收集数据:用户的每一次提示、查询和互动都被记录,用于优化未来模型。
    • 构建心理画像:用户与AI的深度对话(如分享想法、困扰)被用于构建精准的心理档案,数据收集深度远超传统广告。
  • 恶性循环:与AI生成内容的互动(如观看视频)会为上传者带来收益,而非为被学习的原作者,系统奖励错误的一方,同时利用用户数据进一步训练自身。

总结

作者认为,生成式AI和大语言模型本身可以是出色的工具,但被错误地视为每个产品的核心,而非辅助功能。希望企业能回归产品本质,专注于打造真正为用户服务的良好体验,而非盲目堆砌AI功能以显得创新。

6. The Linux Boot Process: From Power Button to Kernel (www.0xkato.xyz)

Linux 启动过程:从电源按钮到内核

Linux 系统的启动过程是一个精细的硬件与软件协作流程,从按下电源按钮开始,到内核首次运行 C 代码为止。该过程主要分为三个阶段:固件与引导加载程序的初始化、CPU 从实模式到 64 位长模式的切换、以及内核的解压与执行。

第一部分:从电源按钮到内核首行代码

  1. CPU 重置与初始模式:电源稳定后,CPU 重置为实模式,并跳转至复位向量地址 0xFFFFFFF0。该地址存放一条远跳转指令,将控制权移交至主板固件。
  2. 固件(BIOS/UEFI)
    • BIOS:执行上电自检(POST),按启动顺序查找可引导设备。若设备首扇区以 0x55AA 结尾,则将其加载到内存地址 0x7C00 并执行。
    • UEFI:作为现代替代方案,直接理解文件系统,可加载更大的引导程序。
  3. 引导加载程序(如 GRUB):负责将 Linux 内核加载到内存。内核文件包含一个实模式设置程序和一个压缩的内核映像。GRUB 同时填充设置头,提供内核位置、命令行、initrd 等关键信息,然后跳转至设置程序。
  4. 设置程序的工作
    • 初始化段寄存器、栈和BSS 段(清零全局变量区)。
    • 可选地初始化串口以输出早期调试信息。
    • 通过 e820 等接口查询可用内存布局。
    • 完成后,调用首个 C 函数 main,仍处于实模式。

第二部分:离开实模式,经由保护模式进入 64 位长模式

  1. 切换到保护模式(32 位)
    • 禁用中断和旧的 PIC 芯片。
    • 开启 A20 地址线以访问超过 1MB 的内存。
    • 加载临时的全局描述符表中断描述符表
    • 设置控制寄存器 CR0 的 PE 位并执行远跳转,正式进入 32 位保护模式。
  2. 准备进入长模式(64 位)
    • 启用 PAE(物理地址扩展)。
    • 构建最小化的页表,建立低内存区域的恒等映射(虚拟地址 = 物理地址)。
    • 将页表地址写入控制寄存器 CR3。
    • EFER 寄存器中设置 LME 位(启用长模式),然后通过远返回跳入 64 位代码段。

第三部分:解压内核、地址重定位与 kASLR

  1. 64 位存根程序
    • 确定自身运行地址,若可能与内核解压目标冲突则先复制自身到安全位置。
    • 清零 BSS 段,加载针对页面错误和 NMI 的临时中断处理程序。
    • 为即将操作的内核区域、启动参数页等建立恒等映射。
  2. 解压内核
    • 函数 extract_kernel 负责解压,支持多种算法(如 gzip、xz 等)。
    • 解压后,根据内核的 ELF 格式信息将各节复制到正确地址。
    • 若加载地址与编译地址不同,则应用重定位条目修正地址引用。
    • 完成后跳转到内核真正的入口点 start_kernel,正式开始内核初始化。
  3. 内核地址空间布局随机化
    • 如果启用 kASLR,解压器会在启动时随机选择内核的物理和虚拟基地址。
    • 随机选择基于固件内存映射、避免与引导组件冲突,并利用硬件随机源等早期熵源。
    • 目的是增加攻击者预测内核地址的难度,可通过 nokaslr 内核参数禁用。

关键术语速览

  • 实模式:CPU 初始的 16 位模式,内存寻址由段和偏移组成。
  • 保护模式:32 位模式,引入 GDT、IDT,支持内存保护。
  • 长模式:x86_64 的 64 位模式,需启用分页和设置 LME 位。
  • 分页:虚拟地址到物理地址的转换机制,使用页表。
  • GDT/IDT:定义内存段和中断处理程序的表。
  • 控制寄存器:CR0 控制保护模式,CR3 存放页表地址,CR4 启用扩展特性。
  • kASLR:内核地址空间布局随机化,安全增强特性。

整个启动过程通过严格控制中断、精心构建最小数据结构和逐步切换 CPU 模式,确保系统稳定地从硬件加电过渡到功能完整的 64 位 Linux 内核环境。

7. Pico-Banana-400k (github.com)

Pico-Banana-400K 数据集摘要

概述

Pico-Banana-400K 是一个大规模的文本引导图像编辑数据集,包含约 40万个文本-图像-编辑三元组,旨在推动相关领域的研究。

核心特性

  • 数据规模:总计约40万样本,包括:
    • 约25.7万 单轮文本-图像-编辑三元组(用于监督微调,SFT)。
    • 约5.6万 单轮文本-图像(正样本)-图像(负样本)-编辑样本(用于偏好学习)。
    • 约7.2万 多轮文本-图像-编辑序列(用于多轮编辑应用)。
  • 数据来源:原始图像来自 Open Images
  • 编辑操作:涵盖 35种 编辑类型,分布于 8个语义类别
  • 图像分辨率:512–1024像素。
  • 技术流水线
    • 指令生成:使用 Gemini-2.5-Flash 生成自然语言编辑指令。
    • 图像编辑:由 Nano-Banana 模型执行编辑。
    • 质量评估:通过 Gemini-2.5-Pro 进行自动化评估,依据指令遵循度(40%)、编辑真实性(25%)、内容保持度(20%)和技术质量(15%),仅保留高于阈值(约0.7)的成功编辑样本。

数据集构建

采用两阶段多模态生成流水线:

  1. 指令生成:基于 Open Images 样本,由 Gemini-2.5-Flash 生成简洁的编辑指令。
  2. 编辑与自评估:Nano-Banana 模型执行编辑,Gemini-2.5-Pro 对结果进行自动化评估和质量筛选。低于质量阈值的约5.6万样本作为失败案例被保留,用于鲁棒性提升和偏好学习。

数据集构成与统计

类别分布

类别 描述 占比
对象级语义 添加、删除、替换或移动物体 35%
场景构成与多主体 上下文和环境变换 20%
以人为中心 涉及服装、表情或外貌的编辑 18%
风格化 领域和艺术风格迁移 10%
文本与符号 涉及可见文本、标志或符号的编辑 8%
像素与光度 亮度、对比度和色调调整 5%
比例与透视 缩放、视角或构图变化 2%
空间/布局 扩展画布、构图或画外延伸 2%

数据内容

  • 指令生成:由 Gemini 和 Qwen-2.5-Instruct-7B 生成,简洁且基于图像内容。
  • 编辑覆盖:涵盖35种编辑类型和8个语义类别。
  • 图像多样性:包含人类、物体、文本丰富场景等。

应用场景

该数据集可用于训练和评估文本引导的图像编辑模型,支持单步编辑、多轮对话式编辑以及基于奖励的训练范式。

下载指南

数据集托管在 Apple 公共 CDN 上。用户需通过提供的清单文件下载各组成部分(单轮、多轮和偏好数据)。源图像无法直接提供,用户需根据链接自行从 Open Images 或 Flickr 下载原始图像,并利用提供的脚本进行映射。详细的下载步骤和代码链接见原始说明。

许可证

Pico-Banana-400K 数据集遵循 CC BY-NC-ND 4.0 许可,允许研究和非商业用途,禁止商业使用和衍生品再分发。源图像遵循 Open Images 的 CC BY 2.0 许可。

引用

若在研究中使用该数据集,请按指定格式引用。

8. Movie posters from Ghana in the 1980s and 90s (www.utterlyinteresting.com)

加纳手绘电影海报概述

起源与背景 20世纪80至90年代,加纳的观影方式依赖于流动影院,使用录像带在开放场地播放进口电影。由于缺乏原版宣传材料,影院运营商雇佣当地艺术家,仅凭电影名称、口头描述或低质量的VHS封面作参考,即兴创作宣传海报。

材料与创作特点

  • 画布:艺术家使用缝合、上底漆的旧面粉袋作画,因其耐用、便携且可重复使用。
  • 风格:海报完全脱离电影原貌,风格夸张、血腥、色彩鲜艳且充满想象力。角色常被描绘得肌肉膨胀、拥有超现实武器或额外肢体,场景必含爆炸、流血等元素。
  • 目的:核心目标是吸引观众注意力,而非呈现电影真实内容,因此艺术自由度极高。

代表作品与艺术家

  • 经典例子:《终结者2》中主角骑水上摩托;《洛奇4》中拳击手手持冲锋枪并拳击燃烧的敌人;《铁血战士》中的外星生物被画成喷火多头巨人。
  • 知名艺术家:乔·门萨、Heavy J、Stoger 等因其独特风格成为该领域的标志性人物。

艺术价值与全球影响

  • 这类海报最初是临时宣传工具,后被视为“局外艺术”和融合波普文化与民间传说的视觉叙事。
  • 21世纪初,国际收藏家和画廊(如纽约、伦敦)开始关注并展出这些作品,使其成为具有收藏价值的艺术品,被评价为“非洲的地下漫画艺术”。
  • 它们代表了在资源有限环境下展现出的非凡创造力与文化适应性,成为全球流行文化被本地化再诠释的典型案例。

总结意义 加纳手绘电影海报是低成本、高视觉冲击力的草根艺术,体现了幽默、韧性与原始创意。在数字化时代,其手工、不完美的特质显得尤为独特,持续影响着设计师、电影人和艺术爱好者。

9. We do not have sufficient links to the UK for Online Safety Act to be applicable (libera.chat)

关于《在线安全法》适用性的法律评估结论

核心结论

Libera.Chat 的法律顾问认为,该服务可以合理主张与英国缺乏足够的关联性,因此英国的《在线安全法》不适用。即使英国通信管理局(Ofcom)认为其属于监管范围,被强制执行的风险也较低。Libera.Chat 将继续监测英国用户规模,并维持现有的安全措施,没有计划引入身份验证要求

背景与必要性

  • Libera.Chat 是位于瑞典的非营利组织,运营 IRC 网络。
  • 尽管在英国设有少量服务器(可迁移),其银行、支付均依赖瑞典。
  • 一些在线社区已选择完全屏蔽英国 IP 地址以规避 OSA,但这会导致英国用户无法访问。
  • Libera.Chat 寻求法律意见是为了避免采取此类极端措施,确保英国用户仍能参与自由软件社区。

OSA 的适用条件分析

OSA 适用于提供“受监管服务”且“与英国有关联”的在线服务提供商。

1. 提供受监管服务

Libera.Chat 属于“用户对用户服务”,允许用户生成内容被其他用户接触到,因此符合受监管服务的定义

2. 与英国的关联性

关联性需满足以下任一条件:

  • 拥有“显著数量”的英国用户
    • “显著性”应相对于英国在线人口总量而非服务总用户数衡量。
    • 根据内部估算,Libera.Chat 的英国用户规模远低于 Ofcom 此前监管行动中暗示的“显著”阈值。
    • 英国员工若不作为用户使用服务,则不计入英国用户数。
  • 英国用户是“目标市场”
    • Libera.Chat 的目标市场是使用 IRC 平台讨论自由软件及同类项目的用户,并非专门针对英国。
    • 虽以英语为主,但未在英国进行推广或定制化。
  • 可能对英国个人造成重大伤害的实质风险
    • Libera.Chat 积极阻止垃圾信息、恶意软件、暴力煽动、人肉搜索、诽谤及 CSAM 分发。
    • 虽支持通过 DCC 进行点对点文件传输,但不属于典型的文件托管服务。
    • 因此,不存在针对英国用户的异常重大伤害风险

若 OSA 仍被认定适用的风险

  • Ofcom 当前优先级是针对文件和图像托管服务(涉及 CSAM 风险),而非 IRC 服务。
  • Ofcom 很可能在采取行动前先接触 Libera.Chat 沟通问题。
  • Libera.Chat 表示愿意与监管机构善意沟通,但认为其现有内容安全措施已足够。

关于身份验证的立场

  • 无计划要求用户提供身份证明,并将尽一切合理措施避免。
  • 理由:要求身份验证对隐私的潜在危害(如数据泄露风险)远大于不要求可能带来的实际危害。
  • 若未来出现强制身份验证的立法,将根据具体情况评估,但希望公众持续抵制此类过度监管。

后续行动

Libera.Chat 将整理类似风险评估的声明,以备 Ofcom 联系时使用。

10. California invests in battery energy storage, leaving rolling blackouts behind (www.latimes.com)

加州通过大力发展电池储能系统,显著改善了电网稳定性,已连续数年未发布轮流停电或节能紧急警报。以下是文章核心要点:

电网可靠性转折点

  • 加州独立系统运营商自2022年起未再发布Flex Alerts(紧急节电呼吁),结束了数十年夏季频繁停电的局面。
  • 电池储能系统成为关键因素:电池容量在六年内增长超3000%,从2020年的500兆瓦增至2024年的1.57万兆瓦以上。
  • 傍晚太阳能发电停止后,电池可将储存的太阳能释放至电网,应对用电高峰。

投资与效益

  • 加州累计新增超2.6万兆瓦发电与储能容量,电网韧性大幅提升。
  • 电池储能帮助降低对化石燃料的依赖,支持该州2045年碳中和目标。
  • 相比老化燃气电厂,电池储能在高温天气下表现更稳定(燃气电厂在高温下效率下降)。

技术挑战与发展

  • 当前主流锂离子电池储能时长约4-6小时,尚需燃气电厂补充缺口。
  • 长时储能技术(如铁空气电池、液流电池)成本正逐渐接近燃气电厂,且电池成本持续下降。
  • 电池储能亦面临安全隐患(如2024年莫斯兰德大型电池火灾),需多元化技术布局。

政策与市场背景

  • 特朗普政府支持化石燃料,但美国电池制造业因关税政策获得发展机遇(如Sparkz公司利用国内供应链获税收优惠)。
  • 加州与得州竞争全美电池储能领先地位,得州电池容量亦大幅增长。
  • 加州正加速审批大型清洁能源项目(如Darden太阳能储能农场),推动电网现代化。

未来方向

  • 电网基础设施需进一步升级,许可流程仍待优化。
  • 2024年加州近60%发电量来自可再生能源,2025年电网日均实现超7小时100%清洁供电。
  • 电池储能被视为替代燃气电厂的关键方案,但需持续技术创新与安全规范。
11. What If Tariffs? (www.swatch.com)

斯沃琪(Swatch)官网的页面结构包含以下主要模块和功能:

  • 导航栏:提供客户服务、品牌理念(Swatch Rebels For Good)和门店查找的入口。
  • 地区与语言选择:用户可切换不同国家/地区(包括欧洲、美洲、中东非洲及亚太区域)及语言(如德语、法语、意大利语、英语、中文等)。
  • 产品分类:网站设有新到货品、手表系列(如Royal Pop、MoonSwatch、Scuba Fifty Fathoms等)、手表查找工具(Swatch Finder)以及品牌世界(Our World)等板块。
  • 内容布局:页面以轮播图或图文区块展示产品及活动,部分区域突出特定系列(如MoonSwatch)。
  • 底部信息:包含客户服务、品牌倡议和门店查找的重复链接,便于用户快速访问。

整体页面设计注重多语言和地区适配,通过清晰的导航和产品分类帮助用户浏览及选购手表产品。

12. How ancient people saw themselves (worldhistory.substack.com)

现代人难以理解古代日常物品所代表的时间投入。在现代世界,从袜子到自行车等物品可以迅速从商店获得,且生产过程被隐藏,只需少量金钱和短时间即可拥有。相反,在古代,人们需自行生产物品,耗时更长。例如,准备一顿饭需要数小时生火、研磨食材和烹饪,而非现代的几分钟微波加热。这种差异反映了古代文化中物品制作与维护的集体努力和时间成本,与现代即时满足形成鲜明对比。

13. D2: Diagram Scripting Language (d2lang.com)

D2 图表脚本语言摘要

D2 是一个声明式图表脚本语言,专为将文本描述转换为图表图像而设计。它代表“Declarative Diagramming”(声明式图表),核心思想是用户只需描述想要绘制的图表内容,D2 便会自动生成对应的可视化输出。

核心特点

  • 声明式语法:用户通过编写文本代码来定义图表元素和关系,D2 处理渲染过程,无需手动绘制。
  • CLI 工具:可通过命令行界面(CLI)运行 D2 文件,例如创建 input.d2 文件并执行命令来生成图表。
  • 观察模式:支持 CLI 观察模式,允许用户实时编辑文本并自动更新图表,提升开发效率。

学习与使用

  • 快速上手:Getting Started 部分仅需约2分钟,适合快速入门。
  • 完整导览:整个学习导览可在5-10分钟内完成,完成后提供可下载的备忘单,方便参考。
  • 交互体验:D2 代码片段可在官方 Playground 中直接打开和修改,便于实验和调试;但涉及导入(imports)的片段可能无法直接交互。

D2 旨在简化图表创建流程,适用于需要快速生成技术图表或流程图的场景。

14. Myanmar military shuts down a major cybercrime center, detains over 2k people (apnews.com)

缅甸军方关闭主要网络诈骗中心并拘留逾两千人

事件概述 缅甸军方于近期在靠近泰国边境的克伦邦妙瓦底郊区,突袭并关闭了名为“KK Park”的主要网络诈骗中心。此次行动中,军方拘留了2,198人,并查获了包括30套星链卫星互联网终端在内的大量设备。

诈骗中心运作模式 缅甸因庇护针对全球受害者的网络诈骗活动而闻名。这些诈骗中心通常通过浪漫骗局或虚假投资方案骗取受害者信任。它们以提供合法工作为诱饵招募来自其他国家的人员,随后扣押其人员并强迫其从事犯罪活动。

行动细节与地点 据缅甸官方报纸《缅甸之光》报道,此次突袭是缅甸军方自9月初开始的打击网络欺诈、非法赌博和跨境网络犯罪行动的一部分。KK Park位于克伦邦妙瓦底郊外,该地区仅名义上处于军政府控制之下,同时受克伦族民兵的影响。

责任争议 缅甸军政府发言人指控,反对军方统治的武装民族组织“克伦民族联盟”高层与KK Park的诈骗项目有关。但“克伦民族联盟”否认参与任何诈骗活动。

装备与法律背景 查获的星链终端设备隶属埃隆·马斯克的SpaceX公司,目前星链在缅甸没有合法运营许可,但至少有数百个终端被走私进入该国。星链的使用政策明确禁止欺诈、欺骗等行为。

背景与前例 此次行动是缅甸近期多次打击网络诈骗行动的一部分。今年2月,在中国施压下,泰缅政府曾与控制缅甸边境地区的民族武装组织合作,从诈骗园区解救了数千名被贩卖人员。此外,上周美国和英国也对柬埔寨一个主要网络诈骗团伙及其头目实施了制裁。

15. Clojure Land – Discover open-source Clojure libraries and frameworks (clojure.land)

Clojure Land 是一个专注于发现开源 Clojure 库和框架的资源,涵盖多个技术领域。以下是一些关键项目和类别:

  • 开发工具:包括基于 Emacs 的交互式开发环境、代码格式化工具,以及 Editor Code Assistant (ECA) 提供的 AI 编程能力,支持编辑器无关的配对编程。
  • 数据结构与数据库:提供快速 B-tree 持久排序集用于 Clojure/Script,不可变 SQL 数据库支持应用开发、时间旅行报告和数据合规性,以及简单快速的 Datalog 数据库。
  • 类型系统与 DSL:具有 Lean4 兼容内核的依赖类型 Clojure DSL,用于增强类型安全。
  • Web 开发:包括纯 Clojure 的 GraphQL 实现、将 Lacinia GraphQL 暴露为 Pedestal 端点、ClojureScript WebComponents 库,以及 BareDOM 轻量级 UI 组件,基于网络标准如 Custom Elements 和 Shadow DOM。
  • 模板与前端:受 Django 启发的快速模板系统,用于 Clojure。
  • 配置管理:支持用户别名和基于 deps.edn 项目的 Clojure CLI 配置。
  • HTTP 与网络:零依赖 Clojure 库用于解析和生成结构化字段值(RFC 9651/8941)。
  • AI 与 LLM 集成:提供类型安全的 LLM 输出支持纯文本模型,以及统一的 LLM API 和代理运行时,适用于 Clojure、ClojureScript 和未来 Clojure Dart。
  • 统计与数据科学:Clojure 与 R 之间的统计桥接工具。
  • 轻量级方言:ClojureScript 的轻量级方言,用于简化开发。

这些库和框架共同展示了 Clojure 生态系统的多样性和功能性,支持从数据管理、Web 开发到 AI 集成的广泛应用场景。

16. PCB Edge USB C Connector Library (github.com)

PCB边缘USB C连接器库概述

本项目提供了一套利用PCB自身作为USB C母口连接器的封装库,适用于KiCAD和EasyEDA,包含10针、14针和24针三种版本。该连接器为母口端口,需配合标准USB C线缆(公头)使用。

核心设计与要求

  • PCB厚度:必须为0.6mm或0.8mm,以确保连接器物理结构正常。
  • 设计优化:在符合规范与可制造性之间取得平衡。例如,采用狗骨形切口优化插头尖端尺寸并提供支撑;插槽宽度考虑了PCB边缘加工公差;丝印层可保护插头内细小的接地针脚。
  • 增强建议:在PCB两侧添加薄金属层,使丝印区域厚度达到1.2mm,可更好地支撑和强化连接器。

主要应用场景

  • 低频使用端口:如MCU调试接口。
  • 极薄设备:需要将PCB做到极薄且USB接口使用频率不高的场合,例如USB供电的电子名片、廉价玩具或微型USB PCB手电筒。

重要局限性与可靠性说明

  • 非高可靠性连接器:该设计牺牲了标准USB C连接器高达万次以上的插拔寿命。使用ENIG表面处理时,仅能承受数十至数百次插拔,之后可能出现走线磨损或脱落。硬金处理可能稍好,但内部卡扣也会磨损PCB基材,导致线缆无法稳固卡住。
  • 严禁用于关键接口:不可用于主电池充电等需要频繁插拔或重要的接口。

测试结果摘要

  • 接触磨损:经过100次无电插拔及数次带载(6V/5A,20V/1.5A)插拔后,接触点出现明显磨损。
  • 卡扣磨损:110次插拔后,卡扣明显磨损,线缆易于拔出。磨损可能使卡扣触及PCB内部接地平面,建议避免在卡扣边缘附近设置电源平面。
  • 机械强度:上下方向移动度较大(无金属壳及加厚处理时)。对0.6mm厚PCB施加0.1Nm扭矩即可使连接器断裂,但顶层完好时端口仍可继续使用(可能需要翻转线缆)。
  • 热性能:经过100次插拔后,在5A负载下进行15分钟热浸泡测试,温升约30-40°C。断开负载连接时未见走线显著发热。

导入方法

  • KiCAD:下载ZIP文件,通过插件和内容管理器(PCM)的“从文件安装”功能导入。
  • EasyEDA Pro:导入.elibz文件,或在公共库中搜索“PCBTypeC_10P”或“PCBTypeC_14P”。
  • 其他EDA工具(如Altium):可支持导入KiCAD封装。EasyEDA也支持导出至Altium和PADS格式。导入后建议与KiCAD或EasyEDA中的原始封装进行核对。
17. Feed the bots (maurycyz.com)

本文主要介绍了作者为应对恶意LLM爬虫而设置动态垃圾迷宫的经历,分析了常见防御措施的局限性,并提出了低成本的应对方案。

背景与发现

作者于2025年8月至2026年1月期间,通过设置动态生成的无意义迷宫来捕捉LLM爬虫。结果发现,虽然99.9%的服务器流量来自这些爬虫,但总请求量并未增加。这表明爬虫原本就存在,陷阱只是使其更易于识别。

LLM爬虫的特性

这些爬虫并非普通索引机器人,而是专为训练LLM收集数据的工具。与搜索引擎不同,LLM公司从网站内容中获利,因此其爬虫行为具有攻击性:

  • 无视robots.txt规则
  • 被屏蔽时伪装成浏览器
  • 被禁止后频繁更换IP地址
  • 持续高频率请求(每天每秒多次请求)

传统防御措施的局限性

作者尝试了多种常见防御方法,均存在不足:

  1. 直接封禁:LLM公司拥有大量IP资源,可轻松绕过

  2. 速率限制:同样因IP轮换而失效

  3. 访问墙措施(登录墙、付费墙、验证码等):

    • 影响正常用户体验
    • LLM公司可购买账号或利用AI浏览器绕过
    • 工作量证明难以对抗大公司的计算资源
    • 付费墙虽能补偿作者,但作者不支持LLM行业
  4. Gzip炸弹

    • 压缩比有限(约1000:1)
    • 无法有效阻止智能爬虫
  5. 404错误伪装

    • 无法欺骗爬虫(它们会通过其他链接确认页面存在)

有效解决方案:动态垃圾内容

作者最终采用动态生成无意义内容的方案,具有以下优势:

资源消耗低

  • CPU消耗:每个请求约60微秒
  • 内存占用:仅约1.2MB
  • 无磁盘IO操作
  • 不涉及数据库或复杂JavaScript

维护简单

  • 无需更新规则或黑名单
  • 爬虫自动消耗在这些垃圾内容中

带宽成本可控

  • 相比提供真实内容(特别是大图片),垃圾内容显著降低带宽消耗
  • 示例计算:平均100KB文件大小,每秒20请求,月消耗约5TB带宽

结论

作者认为,对于资源有限的网站运营者,向LLM爬虫提供动态生成的垃圾内容是最经济有效的防御策略。这种方法无需复杂基础设施,能有效消耗爬虫资源,同时保护真实内容不被恶意抓取。

18. The Journey Before main() (amit.prasad.me)

程序启动之旅:从内核到main()之前发生了什么

本文探讨了在Linux系统上,从用户请求运行一个程序到该程序的main函数开始执行之间,操作系统内核和运行时环境所经历的一系列关键步骤。

1. 启动的起点:execve系统调用

  • 程序的运行始于execve系统调用,它由用户空间(如Shell或高级语言库)发出。
  • execve接收三个参数:可执行文件路径(filename)、命令行参数数组(argv)和环境变量数组(envp)。
  • 如果可执行文件以#!(shebang)开头,内核会使用指定的解释器(如/bin/bash/usr/bin/python3)来运行该程序。

2. 可执行文件格式:ELF

  • Linux系统使用ELF(Executable and Linkable Format)作为主要的可执行文件格式。
  • ELF文件包含一个头部(Header),其中包含“魔数”(标识文件为ELF)、类型(如可执行文件)、目标机器架构(如RISC-V)、入口点地址(Entry point address) 等元数据。
  • 文件由多个节(Sections)组成,最重要的包括:
    • .text:包含程序机器代码。
    • .data:存储已初始化的全局和静态变量。
    • .bss:为未初始化的全局和静态变量预留空间。
    • .plt(过程链接表)和.got(全局偏移表):支持动态链接,使得程序可以调用共享库(如libc)中的函数。
    • .symtab(符号表)和.strtab(字符串表):存储函数和变量名等调试信息。
  • 动态链接的程序会依赖共享库(如libc)。内核需要加载这些共享库,并将它们映射到进程的地址空间。

3. 内核的加载与准备工作

内核在加载程序时会执行以下关键任务:

  • 加载ELF段:遍历ELF文件的程序头(Program Headers),将标记为可加载(loadable)的段(如代码段、数据段)映射到进程的虚拟地址空间。
  • 设置地址空间布局随机化(ASLR):为了安全,内核会随机化加载地址和栈的位置。
  • 设置非可执行(NX)位:标记某些内存区域(如栈)为不可执行,以防止代码注入攻击。
  • 加载动态链接器:内核加载ELF文件中PT_INTERP段指定的动态链接器(如ld-linux.so),它将负责后续的动态链接工作。
  • 初始化用户栈:内核在进程地址空间的高位设置栈空间。栈从高地址向低地址增长。
  • 填充初始栈内容:栈在程序开始前并非空,它包含以下信息:
    1. argc(参数个数)。
    2. argv(参数字符串指针数组)。
    3. envp(环境变量字符串指针数组)。
    4. ELF辅助向量(auxv):一组键值对,传递系统信息给程序。关键信息包括:
      • AT_PAGESZ:内存页大小(如4096字节),被内存分配器(如malloc)用于优化管理。
      • AT_ENTRY:程序的真实入口点地址(即_start函数地址)。
      • 还有其它如AT_HWCAP(硬件能力)、AT_PHDR(程序头表地址)等。
  • 设置程序计数器:最终,内核将CPU的程序计数器设置为ELF头部指定的入口点地址

4. 入口点:_start函数与运行时初始化

  • 内核跳转到的入口点通常是链接器提供的_start函数(由libc如musl或glibc实现),而不是用户的main函数。
  • _start函数是程序执行的真正起点,它负责初始化语言运行时环境,然后才调用用户的main函数。
  • 初始化工作包括:
    • 设置全局构造函数。
    • 初始化线程本地存储(TLS)。
    • 其他语言特定的初始化(例如,Rust的std::rt::lang_start)。
  • 对于一个简单的C程序,流程可能是:_start -> __libc_start_main -> 用户的main(argc, argv)
  • 对于Rust,流程是:_start -> std::rt::lang_start -> 用户的main()

5. 总结:完整启动序列

  1. 用户程序请求执行一个二进制文件。
  2. 内核通过execve接收请求,解析ELF文件。
  3. 内核将程序代码和数据加载到内存,创建虚拟地址空间,并初始化用户栈(包含参数、环境变量和辅助向量)。
  4. 内核将执行权限交给动态链接器(如果有)或程序的_start入口点。
  5. _start函数(libc的一部分)初始化C/C++运行时环境(如设置堆栈、初始化全局对象等)。
  6. 运行时环境最终调用程序员编写的main函数,程序正式开始执行。

整个过程中,内核负责低级的内存管理和硬件交互,而_start和语言运行时则负责将执行上下文安全地转换到高级语言的语义环境中。

19. Rock Tumbler Instructions (rocktumbler.com)

岩石滚磨机使用指南摘要

目的: 本文档旨在提供一套经过长期验证的、将粗糙岩石转变为光滑闪亮滚磨石的详细流程和关键规则。

一、适用材料

该流程适用于具备以下特性的岩石:

  • 质量: 可接受抛光。
  • 硬度: 莫氏硬度在6至7之间。
  • 尺寸: 直径在3/8英寸至1.5英寸之间。

常见适用岩石包括:

  • 玉髓类: 玛瑙、血石、红玉髓、绿玉髓、碧玉、燧石、硅化木等。
  • 石英类: 紫水晶、东陵石、黄水晶、乳石英、水晶、粉晶、烟晶、虎睛石等。
  • 其他岩类: 安山岩、玄武岩、闪长岩、辉长岩、花岗岩、穆卡石、均密石英岩、石英岩、绿帘花岗岩等。

二、核心“黄金规则”

  1. 输入决定输出: 使用优质、无裂缝、无孔隙的原料是获得高品质成品的关键。在选购原料时,应选择提供清晰照片和描述的可靠供应商。
  2. 避免污染: 不同步骤使用的磨料颗粒粗细不同。必须彻底清洁岩石、滚筒及工具,以防粗颗粒磨料混入后续步骤,刮伤岩石。同时,避免混入质地疏松或易碎裂的岩石,以免其产生的碎屑污染整个批次。
  3. 好结果需要时间: 耐心是关键。若在粗磨阶段后岩石形状仍不理想,应重复该步骤。每一步之间都需花费时间进行彻底清洁。

三、四步滚磨流程

准备工作:

  • 检查原料: 丢弃有孔隙或裂缝的岩石。可在滚筒中混合不同尺寸的岩石(如1/4英寸至1.5英寸)以提高研磨效率。若小尺寸岩石不足,可添加陶瓷研磨介质作为填充物和缓冲剂。
  • 装填滚筒: 确保滚筒彻底清洁。将岩石装填至滚筒容量的1/2至2/3为宜。混合大小不一的岩石可增加接触点,提升研磨效果。

具体步骤:

  • 第一步:粗磨
    • 磨料: 每磅岩石加入约两平汤匙的粗磨料(如60/90目碳化硅)。
    • 加水: 加至水面略低于岩石顶部。
    • 运行时间: 约7天。
    • 后处理: 在塑料容器上方用筛网彻底冲洗岩石和滚筒,切勿将磨料残渣冲入下水道。检查岩石形状,通常可重复此步骤以获得更佳形态。
  • 第二步:中磨
    • 清洁: 极其重要,必须清除所有第一步的磨料残留。
    • 补充: 因岩石尺寸减小,需添加陶瓷介质或需继续研磨的旧石,使滚筒装填量恢复至1/2至2/3。
    • 磨料: 每磅材料加入两平汤匙中磨料(如110/220目或150/220目碳化硅)。
    • 运行时间: 约7天。
    • 后处理: 彻底清洁。此时岩石应表面光滑呈磨砂状。
  • 第三步:细磨/预抛光
    • 磨料: 每磅材料加入两平汤匙细磨料(如600目碳化硅)。
    • 运行时间: 约7天。
    • 后处理: 彻底清洁。岩石应极其光滑,部分可能已显现微弱光泽。
  • 第四步:抛光
    • 清洁: 确保绝对清洁,建议使用专用抛光滚筒。
    • 抛光剂: 每磅材料加入两平汤匙抛光剂(如TXP氧化铝粉)。
    • 运行时间: 约7天。
    • 后处理: 清洗后岩石应明亮有光泽。

四、辅助步骤与建议

  • 润色(可选): 若抛光后光泽不佳或有雾感,可用肥皂水(如半汤匙刨丝的原味象牙皂兑温水)滚磨约1小时进行增亮处理。
  • 记录保存: 强烈建议记录每次滚磨的材料、开始日期、所用磨料、结束日期及结果观察,以便重复成功经验并改进不足。
  • 安全提示: 操作时佩戴护目镜。始终在容器内冲洗岩石,避免磨料堵塞管道。
20. Advent of Code 2025: Number of puzzles reduce from 25 to 12 for the first time (adventofcode.com)

Advent of Code 2025 摘要

主要变化

Advent of Code 2025 首次将谜题数量从 25 个减少到 12 个。活动仍从 12 月 1 日开始,每天发布一个谜题,持续至 12 月中旬。这一变化旨在减少作者 Eric Wastl 的时间投入,因为他每年需要大量免费时间来维护活动和构建谜题。

活动概述

Advent of Code 是一个编程谜题日历,适用于各种技能水平的参与者,可以用任何编程语言解决。它常用于面试准备、公司培训、大学课程、练习问题、速度竞赛或相互挑战。参与无需计算机科学背景,只需基础编程知识和问题解决技能;所有谜题都可在十年旧硬件上 15 秒内完成。

支持与参与

参与者可通过分享活动间接支持,或通过 AoC++ 直接支持。如果遇到困难,建议检查示例、重新阅读描述、构建测试案例、寻求朋友帮助或在 subreddit 上询问提示。

其他变更

  • 全球排行榜移除:由于造成过大压力、基础设施负担和不当竞争(如 DDoS 攻击),全球排行榜被移除。但参与者可共享私人排行榜的只读视图。
  • 私人排行榜规则:由运行者自行设定,可能包括运行时间限制、编程语言、开放时间等规则。
  • AI 使用建议:不建议使用 AI 解决谜题,因为谜题设计针对人类解决体验。
  • 内容政策:请勿复制或再分配 Advent of Code 的部分内容,如谜题文本或输入数据。

认证与功能

Advent of Code 使用 OAuth 认证,通过其他服务(如 Reddit、GitHub)确认身份,不直接收集用户凭证。网站提供高对比度样式表支持。谜题难度随事件进展而变化,通常后期更难,但具体难度因个人技能而异。

学分与法律信息

谜题、代码和设计由 Eric Wastl 负责。测试由 Ben Lucek、JP Burke、Aneurysm9 和 Andrew Skalski 完成;社区经理为 Danielle Lucek 和 Aneurysm9。Advent of Code 是美国注册商标,设计元素和概念为专有财产,未经书面同意不得复制或使用。参与者可链接或引用谜题用于讨论、课程或代码等场景。

总结

2025 年活动通过减少谜题数量简化了参与,同时移除了全球排行榜以改善体验。Advent of Code 继续作为一个免费、开放且有趣的编程挑战平台,鼓励个人学习和社区互动。

21. An Update on TinyKVM (fwsgonzo.medium.com)

TinyKVM 更新摘要

核心概述:TinyKVM 于2025年2月开源,原设计专注于纯计算场景。近期更新扩展了其功能,增加了对运行未修改可执行文件(如 Deno、Python WSGI)的有限支持,并引入了新的远程过程调用机制和虚拟机快照功能。

1. 支持运行未修改可执行文件

  • 技术路径:通过实施系统调用模拟来实现,但故意采用最简化的模拟策略。
  • 系统调用数量:目前仅模拟约50个系统调用,远少于 gVisor 的约200个。
  • 关键方法:尽量避免访问共享的 Linux 内核,仅在允许和适当时提供经过清理的访问。例如,ioctl 操作仅支持设置/获取非阻塞模式和读取可用字节数。这种极简的系统调用接口已能成功运行多种复杂运行时。
  • 安全建议:程序对失败的系统调用或可疑返回值有较好的容忍度。建议在生产环境中将 Jailer 与 TinyKVM 结合使用。

2. 每请求隔离与性能

  • 概念:每个请求都在一个独立的、状态隔离的虚拟机中处理,请求完成后重置。
  • 实现:TinyKVM 提供两种重置模式以维持低内存占用:
    1. 直接页面重写:将 VM fork 中所有被修改的页面恢复至原始内容,保留页表和 TLB。此模式最快,但会保留内存占用。
    2. 完全重置:当工作内存超过限制或发生异常时触发,重置整个 VM 及其页表。
  • 性能对比(Deno 页面渲染基准测试)
    • TinyKVM 的每请求隔离在 p90+ 延迟上表现优于原生运行(原生未做每请求隔离)。
    • 原生运行在 p50 延迟上更优。
    • 结论:TinyKVM 在实现每请求隔离的同时,性能接近原生水平。

3. 新型远程过程调用机制

  • 核心思想:允许两个加载在同一地址空间的二进制文件(ABI 或 FFI 兼容)直接调用对方的函数,实现零拷贝的对象图传递。
  • 实现机制:通过陷阱捕获远距离跳转并切换关键寄存器(如线程指针 FSBASE)。
  • 沙箱完整性保障
    1. 直接恢复:远程 VM 直接使用调用者的地址空间恢复执行(远程 VM “权限更高”)。
    2. 即时映射:在执行页错误时映射远程 VM,函数调用完成后取消映射。
  • 应用场景:为每请求隔离环境提供有限的持久化能力。持久化程序可注册可调用的函数,允许请求处理程序直接、无调度器依赖地调用。
  • 性能:执行安全调用的开销约为 2 微秒。调用期间调用者 VM 必须暂停以确保安全。

4. 虚拟机快照

  • 功能:可将 VM 状态保存至单个文件,并能在其他位置快速恢复。
  • 实现:将所有物理内存备份到一个文件中,并附加 VM 状态及用户自定义段。
  • 示例(Deno “Hello World”)
    • 初始 RSS:192 MiB。
    • 快照文件大小:135 MiB(逻辑大小 2.4 GiB)。
    • 从快照启动 32 个 VM fork 后的 RSS:50 MiB。
    • 页面缓存预热时的启动时间:0.7 毫秒。从冷磁盘加载预计约 20 毫秒。
  • 未来方向:计划通过记录并预加载请求实际访问的页面,以及优化缓存策略,进一步提升冷启动速度。

相关工具

  • KVM Server:已成为 TinyKVM 服务器的事实标准 CLI 工具。
  • Jailer:用于生产环境安全加固。
22. Lenses in Julia (juliaobjects.github.io)

Julia中的透镜

Accessors.jl库围绕**透镜(lenses)**构建,透镜用于访问或替换复杂对象中深度嵌套的部分。通过示例展示其使用:

  • 创建透镜:使用宏@optic(如@optic _.a)或直接构造(如opcompose(PropertyLens(:a), IndexLens(1)))。
  • 操作对象:透镜支持lens(obj)(访问值)、set(obj, lens, val)(创建更新副本,不改变原对象)和modify(func, obj, lens)(应用函数修改值)。

透镜可以是任意类型,但需实现两个接口:

  • lens(obj):获取值。
  • Accessors.set(obj, lens, val):设置值。

透镜操作必须满足三个透镜法则

  1. 设置后获取lens(set(obj, lens, val)) ≅ val(设置的值可正确获取)。
  2. 设置不变set(obj, lens, lens(obj)) ≅ obj(设置原值不改变对象)。
  3. 最后设置优先set(set(obj, lens, val1), lens, val2) ≅ set(obj, lens, val2)(多次设置以最后一次为准)。

其中表示适当的相等性(如=====isequal),具体取决于上下文(如浮点数需用isequal处理NaN)。

透镜可通过opcompose(注意顺序)组合,以构建更复杂的访问路径。相关函数包括@opticsetmodify

23. Formal Reasoning [pdf] (cs.ru.nl)

形式推理 课程讲义摘要

1. 命题逻辑

介绍命题逻辑作为形式语言,用于精确地表示和推理陈述。定义了原子命题、连接词(¬, ∧, ∨, →, ↔)及其真值表。引入了模型(对原子命题的真值赋值)、逻辑真(在所有模型下为真)、逻辑等价和逻辑后承等概念。

2. 谓词逻辑

扩展命题逻辑,引入谓词、常量、量词(∀, ∃)和域,以描述对象及其关系。定义了语言语法、结构(域及解释)和解释(将符号映射到结构中的对象)。讨论了公式在结构和解释下的真值确定,以及逻辑真、逻辑后承和逻辑等价的概念。简要介绍了带等词的谓词逻辑。

3. 离散数学

涵盖与自然数相关的主题。

  • 图论:介绍图、顶点、边、路径、连通性、子图、环、树、平面图。讨论欧拉路径/回路、哈密顿路径/回路、顶点着色、色数以及图同构。
  • 递归:通过汉诺塔、乘法、幂运算和二叉树绘制等例子说明递归定义和递归程序。
  • 归纳法:作为一种证明技术,分为基础情况和归纳步骤,用于证明对所有自然数成立的命题。示例包括求和公式与组合恒等式。
  • 组合数学:介绍帕斯卡三角形、二项式系数及其递归定义、牛顿二项式定理。讨论从n个对象中选取k个对象的四种情况(有序/无序,可/不可重复)。介绍第二类斯特林数(集合划分数)、贝尔数以及集合划分的概念。

4. 语言

将语言定义为字符串的集合。

  • 正则语言:可用正则表达式描述的语言,支持连接、并集和克林星号操作。
  • 上下文无关文法:通过产生式规则从开始符号生成语言的文法。讨论了λ规则消除、链规则消除和无用符号消除等文法变换。
  • 右线性文法:上下文无关文法的一种特例,其产生的语言类恰好是正则语言。这建立了正则语言与右线性文法之间的等价性。

5. 自动机

  • 确定性有限自动机:由状态、输入字母表、转移函数、初始状态和接受状态定义。识别的语言是正则语言。
  • 非确定性有限自动机:允许对每个输入符号有多个或零个转移,以及λ转移。与DFA识别相同的语言类。
  • 关键定理:DFA、NFA、右线性文法和正则表达式这四种形式化方法描述的语言类相同,即正则语言类。上下文无关语言类比正则语言类更大。

6. 模态逻辑

扩展经典逻辑以表达“必然”(□)和“可能”(♢)等概念。其解释随应用领域而变(如认识论逻辑、时序逻辑)。

  • 公理系统:定义了不同强度的模态逻辑系统(如K, KD, KT, S4, S5),每个系统包含一组特定的公理模式(如K, T, B, 4, 5)。
  • 克里普克语义:基于可能世界和可达关系的模型论语义。公式在某个世界中为真,取决于其在当前世界及其所有可达世界中的真值。
  • 线性时序逻辑:一种模态逻辑,其可能世界模型为线性时间序列。引入算子G(全局)、F(未来)、X(下一个)、U(直到)、W(弱直到)和R(释放),用于描述系统随时间演变的性质,常用于模型检验。
24. Project Amplify: Powered footwear for running and walking (about.nike.com)

Project Amplify:动力驱动的步行与跑步运动鞋

耐克推出 Project Amplify——全球首款动力驱动的步行与跑步运动鞋系统,旨在帮助日常运动者以更少的努力实现更快、更远的移动。该系统通过增强小腿与脚踝的自然运动,突破现有认知,为任何想要移动的人提供无与伦比的动力支持,为跑步、慢跑和步行开创全新未来。

核心技术与设计

  • 动力系统构成:基于耐克运动研究实验室的运动算法,第一代产品由轻量化强力电机、传动带和可充电电池组构成,与碳板跑鞋无缝整合,可搭配动力系统使用,也可单独作为普通跑鞋穿着。
  • 设计目标:帮助日常运动者更频繁、更长时间地进行步行或跑步,增加运动乐趣,例如延长步行通勤距离,或让跑步多坚持一两英里。
  • 适用人群:主要面向配速在每英里10至12分钟的普通运动者,而非追求竞技速度的专业跑者。其作用类似于“第二副小腿肌肉”,为日常移动提供额外动力。

性能与测试反馈

  • 用户体验:运动员测试反馈显示,该系统感觉像是身体的一部分,能让上坡行走或跑步如同在平地上移动。部分使用者配速从每英里12分钟提升至10分钟。
  • 测试规模:经过多年户外及实验室测试,超过400名运动员参与,累计完成超过240万步(相当于绕实验室200米跑道跑12,000圈),经历了九次以上硬件迭代,不断优化系统各部件。

项目定位与发展

  • 创新背景:该项目是耐克本月公布的四项重大技术进步之一,其他创新涵盖Air服装、高级散热及运动科学,体现品牌以运动员为中心的承诺。
  • 发展现状:目前Project Amplify仍处于测试阶段,耐克正结合艺术与科学推动产品达到性能标准,计划在未来几年内面向大众市场发布。
  • 愿景阐述:耐克创新副总裁Michael Donaghu表示,该项目源于一个核心问题:“如何帮助运动员以更少的能量、更多的乐趣移动得更快更远?” 其本质是为步伐注入额外动力,让用户实现超出预期的“更多”。

耐克始终秉持“凡有身体,即是运动员”的理念,Project Amplify继承了品牌通过创新推动运动进步的传统,是继创始人比尔·鲍尔曼发明华夫底跑鞋后,在增强运动表现领域的又一次大胆迈进。

25. Show HN: Diagram as code tool with draggable customizations (github.com)

oxdraw 图表工具概述

oxdraw 旨在通过声明式、可复现的语法,简化高质量图表的创建与维护。图表使用 Mermaid 语法编写,同时提供 Web 界面供用户精细调整节点位置、连接路径、颜色和其他样式。任何通过界面进行的视觉修改都会以声明式代码的形式自动保存回源文件,确保图表保持确定性并支持版本控制。

除了常规图表,oxdraw 还支持直接在图表中嵌入图像,并能查看代码库的代码地图,其中节点可以链接到具体的代码段。所有样式修改都以注释形式保存在 Mermaid 文件中,从而保持与 Mermaid 生态其他工具的兼容性。

该项目的愿景是结合代码生成图表(如 Mermaid)的优势与图形编辑器(如 Lucidchart)的自定义灵活性。

核心组件与安装

项目仓库由以下部分构成:

  • Rust CLI:用于将 .mmd 文件编译为图像。
  • 基于 React 的 Web 界面:用于交互式编辑。
  • AI 与静态分析算法:用于自动生成代码地图。

可以通过 Cargo 安装:

cargo install oxdraw

主要功能与使用

  1. 渲染图表

    oxdraw --input flow.mmd
    
  2. 启动交互式编辑器

    oxdraw --input flow.mmd --edit
    

    编辑器功能丰富,包括:

    • 拖拽节点:更新位置,支持网格对齐和实时参考线。
    • 调整连接路径:拖拽边控制点或标签来重塑路径,双击边可插入新控制点,双击控制点可删除手动路径。
    • 移动子图:拖拽子图容器可整体移动其所有成员节点。
    • 样式定制:为单独节点/边设置填充、描边、文本颜色,以及边线类型(实线/虚线)、箭头方向等。
    • 源码同步:源码面板自动同步并保存对 Mermaid 文件的修改。
  3. 图表分享

    • 导出为图像(PNG 或 SVG)。
    • 通过 URL 分享:通过静态网站上的“分享”按钮,将图表数据保存在 URL 的哈希片段中,便于他人查看和编辑。
  4. AI 生成代码地图与映射文档

    • 生成代码地图:可视化代码库结构,节点映射到代码段。
      oxdraw --code-map ./ --gemini YOUR_API_KEY
      
    • 生成“编码文档”:创建包含嵌入映射元数据的 Markdown 文档,文档中的标题、段落和内联代码可以点击并跳转到代码库。
      oxdraw --codedown ./ --gemini YOUR_API_KEY
      
    • 增强现有 Markdown 文件:为已有文档添加代码映射。
      oxdraw --augment-markdown docs/notes.md --repo-path . --gemini YOUR_API_KEY
      
      以上 AI 功能支持通过 --gemini 指定 API 密钥,也可使用 --no-ai 进行静态分析生成。
  5. 图表绘制算法: 算法在路径布局上存在多种权衡(如平滑线条与清晰直角、避免重叠与减少路径长度、减少折点等)。当前实现允许通过删除关系、移动节点来观察算法如何重新计算布局,并计划未来提供更多偏好变体。

CLI 标志汇总

CLI 提供了丰富的命令行选项,涵盖输入输出控制(-i, -o)、输出格式与缩放(--png, --scale)、编辑器设置(--edit, --serve-host, --serve-port)、背景色、AI 相关参数(--api-key, --model, --gemini, --prompt)以及代码地图/编码文档生成(--code-map, --codedown, --codedown-style, --augment-markdown)等功能。

社区与集成

项目欢迎用户反馈和贡献,已有多个相关集成项目:

  • Typst-Oxdraw:将 oxdraw 图表集成到 Typst 文档中。
  • Asciidoctor:支持 oxdraw。
  • oxmap:一个 TUI 工具,使用 oxdraw 的库生成流程图。
26. Show HN: Shadcn/UI theme editor – Design and share Shadcn themes (shadcnthemer.com)

主题编辑器:Shadcn/UI 主题设计工具

这是一个用于 shadcn/ui 的可视化主题编辑器,主要功能包括:

  • 创建与定制主题:提供直观的界面,让用户能够轻松创建和自定义主题。
  • 构建颜色调色板:用户可以使用其内置的工具设计和调整完整的颜色调色板。
  • 分享主题:支持将设计好的主题导出或分享给其他开发者。

该工具的网站(ShadcnThemer.com)提供了指向其 GitHub 代码库的链接,以及服务条款、隐私政策和联系信息等标准内容。

27. How programs get run: ELF binaries (2015) (lwn.net)

本文详细介绍了 Linux 内核加载和执行 ELF (可执行与可链接格式) 二进制文件的过程,这是现代 Linux 系统的主要二进制格式。整个流程由 execve() 系统调用触发,核心处理函数是 fs/binfmt_elf.c 中的 load_elf_binary()

ELF 格式与内核关注点 ELF 可执行文件包含一个程序头表,内核主要关注其中三种条目:

  1. PT_LOAD:描述程序运行所需的内存区域(代码、数据段及BSS段长度)。
  2. PT_INTERP:指定运行时链接器(如 /lib64/ld-linux-x86-64.so.2),用于动态链接。
  3. PT_GNU_STACK:指示栈是否应被设置为可执行。

加载与执行流程 load_elf_binary() 函数执行以下关键步骤:

  1. 验证与准备:检查 ELF 头,读取完整的程序头,并循环检查 PT_INTERPPT_GNU_STACK 条目。
  2. 清理旧程序状态:调用 flush_old_exec(),终止旧线程、释放旧内存映射、更新进程个性(personality)等。
  3. 初始化新程序状态:调用 setup_new_exec(),设置进程通信名称、重置信号处理器、关闭标记为 O_CLOEXEC 的文件描述符等。
  4. 建立新内存布局
    • 调用 setup_arg_pages() 初始化内存跟踪结构并应用栈的随机偏移以防范栈溢出攻击。
    • 遍历所有 PT_LOAD 段,将其映射到进程地址空间。
    • 为 BSS 段分配并清零页面。
    • 映射特殊页面,如 vDSO(通过 arch_setup_additional_pages())以及可能用于兼容性的零地址页。
  5. 设置凭证:调用 install_exec_creds() 更新进程凭证,并通知 Linux 安全模块。
  6. 填充栈信息:调用 create_elf_tables() 向栈中添加以下内容(从低地址到高地址):
    • argc(参数计数)。
    • argv 指针数组(以 NULL 结尾)。
    • 环境变量 environ 指针数组(以 NULL 结尾)。
    • ELF 辅助向量auxv),一系列 (id, value) 对,向用户空间传递程序执行环境的关键信息,例如 AT_ENTRY(程序入口点)、AT_RANDOM(随机数据种子)、AT_PLATFORM(平台字符串)和 AT_SYSINFO_EHDR(vDSO 页地址)等。栈顶还包含程序文件名。
  7. 启动新程序:通过修改内核栈上保存的用户空间寄存器(pt_regs),将指令指针设置为程序入口点(或动态链接器入口),栈指针设置为新的栈顶,然后从 execve() 返回。至此,进程内存已完全映射,执行将转移到新程序。

动态链接程序的处理 对于动态链接的程序,内核会根据 PT_INTERP 加载指定的运行时链接器(ELF 解释器)到内存,并将程序入口点设置为解释器的入口。当 execve() 返回时,解释器首先运行,负责加载所需的共享库、解析符号,最终跳转到用户程序真正的 AT_ENTRY 地址开始执行。

兼容性支持 内核通过 compat_binfmt_elf.c(在配置 CONFIG_COMPAT_BINFMT_ELF 时包含)支持 32 位(x86_32 和 x32 ABI)二进制文件。该文件通过预处理器宏重定向 binfmt_elf.c 中的部分函数和值(如架构检查、线程人格设置、vDSO 设置和启动线程函数),使其适用于 32 位环境。

总结 execve() 是程序执行的门户,其核心的 ELF 处理器展示了内核如何清理旧程序、为新程序建立全新的内存和执行环境,并最终通过修改寄存器状态完成上下文切换。尽管 ELF 格式复杂,但内核只需理解如何将段加载到内存并调用用户空间的运行时链接器,即可完成程序的启动。

28. AI, Wikipedia, and uncorrected machine translations of vulnerable languages (www.technologyreview.com)

文章总结:AI、维基百科与脆弱语言的未修正机器翻译

本文揭示了小型语言版本维基百科因滥用AI机器翻译而产生的严重问题,并探讨了其对语言保护和AI训练的恶性循环影响。

核心问题:错误翻译的恶性循环

  • 格陵兰语维基百科案例:管理者肯尼斯·韦尔发现,该版本几乎全部内容由非母语者撰写,大量文章是未经修正的机器翻译,充满语法错误、无意义词汇和事实错误(如称加拿大仅41人)。AI翻译对格陵兰语等黏着语表现极差。
  • 全球普遍现象:非洲、因纽特语等小型语言维基百科中,40%-60%或更多文章是未修正的机器翻译。这些错误内容被AI系统用作训练数据,导致翻译质量持续下降,形成“垃圾进,垃圾出”的循环。

问题根源与技术困境

  • AI依赖网络文本:机器翻译模型从互联网抓取数据学习语言,维基百科常是濒危语言最主要的在线文本源。错误内容会污染训练数据,使AI翻译更不可靠。
  • 翻译工具局限:谷歌翻译、ChatGPT等对资源稀缺语言的翻译质量较低,常出现基础词汇误译(如将富拉语“一月”译为“六月”)。维基百科的“内容翻译”工具同样受此影响。
  • 社区管理乏力:许多小型语言维基缺乏活跃的本地编辑者社区,错误内容无人修正。使用者常抱有“大维基傲慢”,误以为会有人修正其错误翻译。

社会影响与文化伤害

  • 语言保存危机:错误内容会误导学习者,如亚马逊上出现大量基于错误AI翻译的濒危语言学习书籍,反而阻碍语言传承。
  • 文化失真:如夏威夷语维基百科中大量不可读内容,扭曲了语言的真实面貌,被视为文化挪用,挫败语言复兴努力。
  • 实际危害:富拉语维基百科中错误翻译的农业信息可能误导农民,造成经济损失。

解决方案与不同结局

  • 负责任的实践案例:伊纳里萨米语维基百科坚持由母语者编写审核所有文章,注重质量而非数量,成功将维基整合到学校课程中,成为语言保存的工具。
  • 失败案例与关闭:格陵兰语维基百科因问题严重,管理者申请关闭,将剩余文章移至孵化器。委员会指出AI工具产生了“常误导语言的无意义内容”。
  • 紧迫的竞赛:专家呼吁加速创建高质量语言内容,为AI提供良好训练数据,以打破恶性循环。然而,许多语言已深陷错误循环,未来堪忧。

结论

AI技术的普及在未受严格管理的情况下,正在加速脆弱语言的数字化衰退。维基百科作为关键语言资源,其内容质量直接影响语言生存和AI技术的发展。解决需要母语者社区的积极参与、技术工具的谨慎使用以及更透明的数据治理。

29. GenAI Image Editing Showdown (genai-showdown.specr.net)

GenAI 图像编辑对比

该内容聚焦于针对前沿生成式图像模型的对比评测。其核心是通过特定的文本提示(prompts)和挑战性任务来评估不同模型,尤其强调模型对输入提示的遵循程度(adherence)。

主要内容与目的:

  • 对比对象:各种当前先进的生成式AI图像模型。
  • 评测方法:使用特定的、可能具有挑战性的提示词作为输入,引导模型生成或编辑图像。
  • 核心指标:重点考察模型生成的图像在多大程度上严格符合并执行了提示词的要求,即对指令的准确理解和忠实呈现。
  • 展示形式:通过对比图像(可参考提供的预览图 genai-showdown.specr.net/og-image.jpg)直观展示不同模型在同一提示下的输出结果差异。

该研究旨在揭示各模型在理解复杂、精确指令方面的性能差异,为评估生成式AI的实用性和可靠性提供具体参考。

31. Asbestosis (diamondgeezer.blogspot.com)
  • 纪念碑概况:一座为纪念石棉受害者设立的纪念碑于2022年4月在巴金(Barking)市中心广场揭幕,材质为抛光蓝珍珠花岗岩。铭文写道:“铭记因接触石棉而失去生命的人”以及“铭记逝者,为生者而战”。

  • 历史背景:巴金地区石棉相关死亡率很高。主因是1913年在此建立的Cape Asbestos石棉工厂,该厂将南非矿石运至此地加工。工人缺乏防护,导致大量工人在多年后死于慢性呼吸系统疾病。工厂周围污染严重,附近学校操场曾布满石棉粉尘,间皮瘤在该区一度被称为“巴金咳嗽”。

  • 遗留问题:工厂于1968年关闭,原址建成了Harts Lane住宅区。由于土地可能受石棉污染,加上现有建筑老化、包层易燃,拆除和修复工作因成本过高而难以进行。

  • 个人联系:作者的外祖父曾在沃特福德(Watford)的另一家Cape Asbestos工厂工作多年,最终因石棉相关疾病早逝(67岁)。其家庭曾试图确认石棉病为死因但未成功。如今,该工厂旧址已变为商业园区。

  • 核心意义:该纪念碑旨在缅怀逝者,同时强调为改善工人工作条件、维护权益而斗争的重要性。文章通过历史案例和个人经历,突出了职业安全法规和健康保障的必要性,并对当前仍受影响的家庭表达了关切。

32. NewPipe Is Turning 10 (newpipe.net)

NewPipe 十周年回顾与展望

项目里程碑

  • NewPipe 本月迎来十周年,从“新建项目”成长为拥有协会、维护团队、大量贡献者和数百万用户的知名开源项目。
  • 五周年时曾发布博文,当时正值新冠疫情第二波初期,团队坚持开发未受阻碍。

过去五年重要进展

  • 协会成立:团队成员成立了德国非营利组织 NewPipe e.V.,旨在支持 NewPipe 及类似项目,并管理捐赠资金。
  • 应用重构:启动应用重写计划,设计新的提取器架构与播放器(NewPlayer)。
  • 协会扩展:协会功能超出资金管理范畴,2024年雇佣 @Profpatsch 和 Schabi 兼职参与 NewPipe 重构工作,建立了招聘体系,提升项目稳定性与开发连续性。

当前开发状态

  • 应用仍处于重写阶段,存在大量待解决的问题,欢迎新贡献者加入。
  • Profpatsch 与 Isira Seneviratne、Stypox 等业余开发者持续投入重构工作。

未来展望

积极方面

  • 完成重构后,NewPipe 将以全新界面和代码结构亮相,支持 Kotlin 与 Compose,为后续项目奠定基础。
  • 计划与视频创作者沟通 NewPipe 对其收入的影响,并探索 YouTube/Google 之外的发展路径。

挑战与应对

  • 代码与团队挑战:代码库老化需持续重构,核心成员逐渐步入职场,依赖新贡献者与协会机制维持运营。
  • 主要威胁来自 Google
    • 过去几年 Google 持续尝试从法律和技术层面打击类似项目,但目前未成功。
    • 最新挑战是 Google 限制通过 F-Droid 等替代商店分发应用,增加开发难度。
    • 团队有信心通过创新方案应对此类技术障碍,但急需社区支持。

团队结语

  • 尽管面临挑战,团队强调不会停止开发,已有解决方案在推进,重构速度持续提升。
  • 坚信项目未来将“飞向无限与远方”。
  • 署名包括 NewPipe 核心团队成员(Aayush Gupta、Schabi、Stypox 等)及众多贡献者。
33. Apple Reportedly Moving Ahead with Ads in Maps App (www.macrumors.com)

苹果计划在地图应用中引入广告

据彭博社Mark Gurman报道,苹果地图应用最快可能于明年开始整合广告功能。在最新的“Power On”通讯中,Gurman表示,苹果在iOS系统中增加广告的计划“正获得动力”,而地图应用将成为下一个目标。该计划将允许餐厅和其他企业付费,使其信息在搜索结果中更突出地展示。

该系统据称类似于App Store中的“搜索广告”,即开发者付费使其软件在相关查询的推广位置中显示。苹果的方案据报道将利用AI来提供相关且有用的结果,并提供比谷歌等公司类似服务更好的界面。Gurman警告称,此举可能引发一定程度的消费者反弹。

其他相关资讯

  • watchOS 27新表盘:苹果正在为watchOS 27(内部代号“Orchid”)测试多个新表盘,其中包括对现有Apple Watch Ultra表盘的“简化版本”,未来可能应用于标准Series型号。
  • iOS 27自定义通行证功能:iOS 27将推出一项名为“创建通行证”的功能,允许用户通过扫描电影票、音乐会门票或健身房会员卡等物品来生成数字通行证,存放在钱包App中。
  • 苹果探索美国本土芯片制造:据报道,苹果已与英特尔和三星就在美国本土为其设备制造主处理器进行了“探索性”谈判。苹果正与英特尔讨论使用其代工服务,同时其高管已访问了位于得克萨斯州、同样将生产先进芯片的在建三星工厂。
34. The x86 Interrupt List, aka “Ralf Brown's Interrupt List” (2018) (www.cs.cmu.edu)

x86中断列表相关工具摘要

本文介绍了与x86中断列表(Ralf Brown's Interrupt List)相关的一系列编程库、应用程序及实用工具。

编程库

  • SPAWNO:一个用于替换C运行时库中spawn..()函数的交换程序。它能将程序交换到磁盘、EMS、XMS或扩展内存,执行子程序时内存占用少于300字节。兼容16位C编译器(如Turbo/Borland C、MS C v6/7)或Turbo Pascal。
  • AMISLIB:一个函数库,用于用汇编语言编写可自行加载、可卸载的TSR程序。这些TSR能自动避免冲突,并可按任意顺序卸载。符合AMIS v3.5规范。
  • DV-GLUE:一个函数库,用于利用DESQview API及部分QEMM私有API。提供完整源代码(主要为汇编)及六种主要内存模型的预编译库。

应用程序

  • RBcomm:一个小型、快速且支持DESQview的终端程序,具备VT100/VT52/ANSI和AVATAR模拟、无缝Zmodem下载、键盘宏、回滚等功能,仅需64K内存。
  • RBPCI:包含PCICFG程序,用于显示计算机中PCI总线设备的详细信息。设备特定数据存储在可编辑的文本文件中,便于更新。
  • DVdevload:用于在DESQview窗口中加载设备驱动程序的程序。相比DESQview v2.40+内置的等效程序,它占用内存更少,并包含一个小型TSR以解决与4DOS/NDOS shell的兼容性问题。
  • DVPtame:用于修改DESQview程序信息文件(*.DVP),以限制程序在DESQview分配CPU时间前可以轮询键盘的次数。
  • RBdualVGA:一组用于在单台PC中使用两块彩色SuperVGA卡的程序。包含用于切换显示和闲置时熄灭两个屏幕的TSR。
  • RBkeyswap:一个小型TSR,用于交换CapsLock与左侧Ctrl键,以及Esc与反引号/波浪号键。在UMB中仅占用64字节。
  • RBspeed:通过命令行设置采用Intel Neptune主板芯片组的计算机速度。

过时程序

  • SPTURBO:一个简单的IDE,用于从Borland的Sprint文字处理器中使用Borland的Turbo编译器。
  • DVKPOLL:一个小型共享程序,用于限制在DESQview下程序可进行的键盘轮询次数。

他人编写的程序

提供了针对Epsilon的EEL代码以及VT100相关文本文件和兼容性检查工具的链接。

35. Writing a RISC-V Emulator in Rust (book.rvemu.app)

用 Rust 编写 RISC-V 模拟器

这是一个从头开始使用 Rust 语言构建 64 位 RISC-V 模拟器的教学书籍项目。完成项目后,所构建的模拟器将能够运行 xv6(一个简单的类 Unix 操作系统)。通过构建模拟器的过程,读者可以学习计算机体系结构的基础知识。

项目状态与代码来源

  • 本项目仍在进行中,内容可能发生较大变化。
  • 书中使用的源代码托管于 GitHub 仓库 d0iasm/rvemu-for-book

核心内容概览

本书内容主要围绕两个章节展开,分别阐述了运行 xv6 所需实现的硬件组件和指令集。

第 1 章:所需实现的硬件组件

本章介绍了为运行 xv6 必须构建的各类硬件模块,主要包括:

  • 核心处理器与总线:包含两条指令的 CPU、内存及系统总线。
  • 控制与特权架构:控制和状态寄存器、特权架构、异常处理机制。
  • 外围设备与中断:平台级中断控制器、核心本地中断器、通用异步收发器、中断系统、Virtio 设备。
  • 内存管理:虚拟内存系统。

第 2 章:所需实现的指令集架构

本章列出了为支持 xv6 运行所需实现的指令集:

  • 基础指令集:RV64I 基础整数指令集。
  • 标准扩展:用于整数乘除法的“M”标准扩展,以及用于原子操作的“A”标准扩展。

项目成果 完成本书的学习并实现所述模拟器后,最终目标是能够在自制的 RISC-V 模拟器上成功运行 xv6 操作系统。

联系方式 作者为 @d0iasm,可通过 Twitter 或 GitHub Issues 进行联系与提问。