2024-01-28

50 篇热帖

1. In Loving Memory of Square Checkbox (tonsky.me)

方形单选框的终结:从设计传统到设计革命

方形单选框曾是用户界面设计中的基本元素,其特征为方形外观复选标记,允许用户同时选择多个选项。长期以来,它与圆形单选按钮形成功能区分:前者用于多选,后者用于单选。

历史演变与设计传统

  • 操作系统中的持续传统:从Mac OS 7.5(1994)到macOS Sonoma(2023),从Windows 95(1995)到Windows 11(2021),各大操作系统供应商一直遵循方形为单选框、圆形为单选按钮的视觉惯例。
  • 早期标准化:这一区分在1990年代初期已成型,如Turbo Pascal 7.0(1992)和Norton Commander 5(1993)中的界面所示。
  • 短暂的混乱:1986年Apple System 3曾使用圆角矩形,但很快回归圆形单选按钮与方形单选框的规范。

网络时代的挑战与混乱

随着Web技术(CSS、Flash、JavaScript)的发展,许多网站和应用开始忽视或扭曲传统设计规范

  • 视觉混淆:例如,Twitter(2024)在单选按钮中使用复选标记;Yandex Maps(2024)出现方形单选按钮。
  • 功能模糊:Telegram macOS版(2024)引入圆形单选框;在Yandex Maps和Telegram Web中,单选与多选控件外观难以区分,导致用户困惑。

传统的终结:苹果的转折点

  • 苹果的突破:苹果在visionOS中首次采用圆形单选框,打破了其自身长达四十年的设计传统。
  • 象征意义:这一变化被文章作者视为方形单选框时代结束的标志,预示着该设计规范的全面衰落。
  • 用户习惯的变迁:年轻用户更倾向于使用开关切换等新型控件,进一步削弱了传统单选框的使用场景。

结论

方形单选框的设计传统源于其直观的功能区分作用,并在操作系统历史中得到长期巩固。然而,在Web设计自由化与新技术的冲击下,这一传统逐渐瓦解。苹果在visionOS中的设计决策标志着该规范的正式终结,反映了用户界面设计中实用性与创新性的持续博弈。

3. Implementing a ChatGPT-like LLM from scratch, step by step (github.com)

从零实现类ChatGPT大型语言模型

本文档是书籍《从零构建大型语言模型》的官方代码仓库,旨在通过逐步编码的方式,从内部理解并构建一个功能性的类GPT大型语言模型。书中指导读者从头开始创建自己的LLM,所采用的教学方法模拟了开发ChatGPT等大规模基础模型的实践流程。此外,代码仓库也包含了加载大型预训练模型权重以进行微调的内容。

核心内容与结构

本书内容循序渐进,涵盖LLM开发的关键阶段:

  1. 理解LLM:概念介绍。
  2. 处理文本数据:数据加载与处理。
  3. 编码注意力机制:实现核心的Transformer组件。
  4. 从零实现GPT模型:搭建模型结构。
  5. 在无标签数据上预训练:训练基础语言能力。
  6. 针对文本分类进行微调:将模型适配特定任务。
  7. 针对遵循指令进行微调:提升模型的指令跟随与对话能力。

代码仓库按书籍章节组织,每个章节包含主要代码笔记本、可选的汇总脚本、练习题解答以及丰富的补充材料。

先决条件与硬件要求

  • 主要先决条件:扎实的Python编程基础。具备深度神经网络知识会有所帮助。
  • 技术栈:代码使用PyTorch从零实现,不依赖外部LLM库。附录A提供了PyTorch简介。
  • 硬件:主要章节的代码设计为可在常规笔记本电脑上运行,并在可用时自动使用GPU,无需特殊硬件。

扩展资源与附加材料

  • 配套视频课程:约17小时,按书的结构逐章讲解编码过程。
  • 续作:《从零构建推理模型》,作为本书延续,专注于提升模型的推理能力。
  • 练习与测验:每章包含练习,解答见附录C。另有170页PDF测验题供读者自我评估。
  • 丰富的附加材料:仓库内多个文件夹提供了大量可选内容,包括但不限于:
    • 设置指南:Python环境、Docker配置。
    • 技术深入:BPE分词器、多种注意力机制变体(分组查询、滑动窗口等)、KV缓存、专家混合模型分析。
    • 训练优化:超参数优化、PyTorch性能技巧、分布式训练。
    • 模型扩展:将GPT转换为Llama架构,以及从零实现Llama 3.2、Qwen3、Gemma 3等多种LLM架构。
    • 应用与评估:构建交互界面、使用Ollama评估、生成偏好数据集、直接偏好优化等。

代码获取与反馈

可通过克隆GitHub仓库或下载ZIP包获取代码。欢迎通过Manning论坛或GitHub讨论区提供反馈和问题。由于代码需与印刷书籍保持一致,暂不接受可能改变主要章节内容的代码贡献。

4. I looked through attacks in my access logs (nishtahir.com)

访问日志中的网络攻击分析摘要

作者在自托管服务器的访问日志中发现了大量恶意流量。这些攻击主要旨在探测和利用系统漏洞、窃取凭证或植入恶意软件。文章详细分析了几类典型攻击模式。

1. 凭证与配置发现攻击

这是最常见的攻击类型,主要通过目录遍历尝试访问包含敏感信息的文件。

  • 主要目标:攻击者频繁尝试访问 .env 文件,该文件通常存储应用程序密钥、数据库凭证等。其他目标还包括 AWS 凭证文件 (.aws/credentials)、Git 配置文件 (.git/config) 以及备份或配置文件。
  • 其他探测:攻击者还会猜测并访问常见目录,如 /old//backup//temp/ 等,以及 Jenkins (/hudson)、Spring Boot Actuator (/actuator/gateway/routes) 等管理工具的路径。
  • 用户代理特征:部分攻击的用户代理字符串中将 “Mozilla” 错误拼写为 “Mozlila”,这可能源自某个被广泛复制使用的恶意工具。

2. Shellshock 漏洞利用 (CVE-2014-6271)

攻击者尝试利用 Shellshock 漏洞,该漏洞影响处理 CGI 脚本的 Bash。

  • 攻击机制:攻击者在 HTTP 请求的用户代理字段中注入特殊构造的字符串 () { ignored; }; echo Content-Type: text/html; echo ; /bin/cat /etc/passwd。如果服务器使用易受攻击的 Bash 版本处理 CGI 脚本,这段代码将被解释为函数并执行,导致攻击者能够运行任意命令(如读取 /etc/passwd 文件)。
  • 探测方式:攻击者会尝试多个常见的 CGI 脚本路径,如 /cgi-bin/status/test.cgi 等,以寻找存在漏洞的端点。

3. LuCI 注入攻击 (针对 OpenWRT 路由器)

此类攻击针对 OpenWRT 路由器的 LuCI Web 界面。

  • 攻击载荷:攻击者向 CGI 接口发送包含 URL 编码的命令注入请求。解码后的命令尝试进入 /tmp 目录,清除文件,从远程服务器下载一个名为 tenda.sh 的脚本并执行。
  • 恶意软件行为:作者下载该脚本分析发现,其目的是根据设备的 CPU 架构(如 MIPS、ARM、x86 等)下载对应的恶意二进制文件并执行。这些二进制文件被用于自复制传播。
  • 恶意软件分析:其中一个二进制文件经 UPX 加壳。解包后分析发现,它内置了用于扫描本地网络中特定设备的指令。例如,它使用 SSDP/M-SEARCH 协议寻找支持 DIAL 协议的设备(如特定型号的华为路由器),并尝试利用已知漏洞进行注入和感染。该行为与 Mirai 僵尸网络的活动特征相符。

4. Zyxel 注入攻击

此类攻击针对 Zyxel 设备中的 zhttpd 漏洞。

  • 攻击载荷:攻击者在 URL 中嵌入 shell 命令,利用 ${IFS} 作为空格分隔符。命令同样用于清除文件、下载并执行针对 MIPS 架构的恶意程序。
  • 恶意软件分析:该二进制文件未加壳。其内部字符串显示,它不仅包含与前述攻击相同的 DIAL 协议扫描代码,还包含针对其他品牌路由器(如 LBlink)的漏洞利用代码,利用其未经认证的管理接口进行命令注入。这表明该恶意软件是一个具备多种漏洞利用能力的僵尸网络代理,可能同时属于 Mirai 和 Linux Medusa 僵尸网络。

结论

作者指出,这些日志仅展示了冰山一角。互联网上持续存在针对暴露服务的自动化扫描和攻击。文章强调了保持设备(尤其是物联网设备)固件更新、最小化公共互联网暴露面、以及在必要时通过 VLAN 进行网络隔离的重要性。

6. Ruby's exceptional creatures (www.exceptionalcreatures.com)

文章《Ruby的非凡生物》通过隐喻手法,将开发中遇到的错误和异常比作“非凡生物”。文章指出,虽然开发阶段错误常见且易于修复,但真正的挑战在于隐藏在深层代码和测试未覆盖之处的异常。开发者需要通过调试、异常救援、编写测试等方式设防,但测试的覆盖范围有限,异常往往潜伏在未知路径中,可能引发不可预见的问题。面对这些“生物”,开发者应通过知识和理性来识别它们的藏身之处并阻止其破坏,最终成为能够应对Ruby中复杂异常的卓越开发者。

8. Variable Fonts (v-fonts.com)

Variable Fonts 内容摘要

该网页展示了多种可变字体的样本与技术信息,并首先提示用户:为完整体验可变字体的动态变化特性,需使用支持OpenType字体变化技术的浏览器(如最新版Chrome),否则仅能显示静态字体。

核心概念与特性

可变字体是一种支持通过连续轴值(如字重、宽度、倾斜度等)来动态调整样式的现代字体技术,无需加载多个独立字体文件。

展示字体示例

网页列出了数十种可变字体,涵盖了衬线、无衬线、装饰、等宽等多种风格。每个示例通常包含:

  • 字体名称:如 HEX Franklin Variable、Exposure VAR、Graveur Variable、Roboto Flex、Helvetica Now Variable 等。
  • 字符展示:显示大写/小写字母、数字,部分字体额外包含希腊字母和西里尔字母。
  • 设计特点:部分字体附有简要描述,例如:
    • Exposure VAR:模拟不同摄影曝光度或墨迹扩散效果的衬线体。
    • Roboto Flex:谷歌Roboto字体的可变版本,提供丰富参数调整选项。
    • Helvetica Now Variable:Monotype旗下Helvetica Now系列的可变版本。
    • Extendomatic Variable:具有几何风格连接草书字体,可调整字母间距并添加装饰线。
    • GT Maru VF:灵感源自日式标牌和雕刻字的圆体无衬线字型。
    • Immortel VAR:包含多款衬线体变体,设计为可互换且不改变文本排版。
    • Caraque VF:可随字重变化而自我填充、变形的圆体无衬线字型。
    • Belarius Var:衬线可伸缩,能在无衬线与板岩风格间变化的字体。
  • 元数据:包括标签(描述风格与技术特性)、设计者、发布者、支持字符集、发布日期、许可证类型(商业/开源/试用)及信息链接。

关键技术标签

展示的字体常带有如下技术标签,反映了可变字体的设计特性:

  • Multiplexed:字形设计保证不同样式变化时文本宽度保持不变。
  • Feature variations:支持通过OpenType特性访问字形变体。
  • Optical sizes:针对不同字号优化设计。
  • Variable posture/weight/width:支持倾斜度、字重、宽度等轴的变化。
  • Retractable serifs:衬线可伸缩变化。

其他信息

  • 部分字体支持多语言字符(拉丁、希腊、西里尔、越南文等)。
  • 许可证类型多样,包括开源(如 Roboto Flex, Golos VF)、商业付费和试用版。

该网页通过具体实例展示了可变字体技术的多样性、设计创意及其在丰富数字排版方面的潜力。

9. Appearances of MIT in Anime (anime.mit.edu)

MIT在日本动漫中的出现概览

科学幻想一直是日本动漫的主要流派之一,自“漫画之神”手冢治虫时代起就已存在。由于许多动漫作品聚焦于虚构科技,麻省理工学院(MIT)在动漫中偶尔被提及并不令人意外。MIT通常被用作“非日本的先进科技来源”的代表,其他美国大学在动漫中很少出现,而MIT的提及却相当频繁和广泛。这主要归因于MIT在先进科技和科学教育领域已成为一个全球公认的知名品牌。

以下列举了MIT在各类动漫作品中的具体出现实例:

  • 《玲音》(Serial Experiments Lain):MIT前副校长兼教务长万尼瓦尔·布什在第九集中扮演重要角色。作品中的“东微积分骑士团”可能受到MIT“Lambda微积分骑士团”的启发,但这也可能源于黑客文化中一个酷炫短语的独立创作。
  • 《机动战舰》(Martian Successor Nadesico):角色“宇王-P”声称曾七次申请MIT但未成功,并表示将战舰电脑“Omoikane”的虚拟现实界面设计得像MIT的图书馆。
  • 《新世纪福音战士:Air/真心为你》(The End of Evangelion):攻击NERV总部的五台“MAGI”超级计算机系统中,有一台位于马萨诸塞州(文中暗示此时代MIT可能已不存在)。
  • 《机动警察》剧场版1(Patlabor: The Movie):制造Labor病毒的作者E. Hoba是MIT毕业生。
  • 《不可思议的游戏》(Ayashi no Ceres):角色亚历山大·豪厄尔是MIT毕业生。
  • 《泡泡糖危机》(Bubblegum Crisis):第七集中,薇雪同意保护的对象是一名MIT医学博士毕业生。
  • 《魔法少女Pretty Sammy》:在《天地无用!》系列相关故事线中,角色鹫羽在11岁时就从MIT毕业。
  • 《绝对冲击!Paniponi Dash》:11岁从美国来的天才教师兼机器人专家丽贝卡·宫本曾就读于MIT。
  • 《花右京女仆队》(Hanaukyo Maid Team):第13集中,角色新平就读于一所顶尖大学,画面明显描绘了MIT的“Great Court”。
  • 《护士小南子》(Amazing Nurse Nanako):第四集出现了“恭士博士”,被称为“MIT历史上最年轻的外国留学生”。
  • 《摇滚新乐团》(BECK):最后一集,乐队“Heroes”(明显是The Pillows乐队的致敬乐队)的一名成员是MIT校友。
  • 《我的女神》(A! My Goddess):角色和其前辈就读于猫神工业大学,但他们Cosplay了其他学校(标志类似MIT)的啦啦队员。
  • 《我的性骚扰》(Boku no Sexual Harassment):第二集中,有角色曾去过MIT,剧情设定在波士顿。
  • 《现视研》(Genshiken):角色大野加奈子在波士顿地区参加动漫社团的经历被联想为可能与MIT有关。
  • 《假面男仆》(Kamen no Maid Guy):第二集中,角色吹雪解释MIT是“世界精英的聚集地!也可以称为数学的巅峰”。
  • 《真实之泪》(Real Drive):第10集(设定在2061年),一个名为伊莱莎的人工智能来自MIT。
  • 《龙与虎》(Toradora!):学生会长狩野樱前往美国一所大学(暗示是MIT)深造以实现宇航员梦想,并收到来自MIT 5号楼的明信片。
  • 《高达SEED》:角色乔治·格伦是大西洋联邦航空航天局的神童工程师,年仅17岁就获得了MIT博士学位。
  • 《Q.E.D. 证明终了》(Q.E.D.):漫画(尚未动画化)的主角凑斗聪在15岁时从MIT毕业。
  • 《侵略!乌贼娘》(Shinryaku! Ika Musume):四位MIT毕业生(辛迪、克拉克、哈里斯和马丁)致力于研究外星生物。
  • 《诈欺游戏》(Liar Game):主角秋山提到一位MIT教授发明的独特电路,但后来承认这是虚构的。

文章最后呼吁,如果读者知道其他动漫中出现MIT的情节,可以联系指定邮箱提供信息。

13. Remote work won, don't let anyone gaslight you to believe otherwise (www.hottakes.space)

远程工作已成定局,无人能否认

远程工作已取得胜利,并成为大多数人口生活中的正常组成部分。其普及程度自2020年以来保持稳定,并将持续增长。

核心数据与事实

  • 普及率与偏好:自2020年以来,美国超过 25% 的员工以一种持久的方式进行远程工作。更引人注目的是,68% 的员工希望完全远程办公。城市地区远程工作比例更高,因其工作岗位性质所致。
  • 权威机构认可:高盛经济学家认为,远程工作“可能是疫情最持久的经济遗产”。会议委员会(The Conference Board)领导黛安娜·斯科特也表示“这场战斗已经结束”。
  • 学术研究佐证:2023年12月发布的一项针对标普500公司的研究发现,返回办公室(RTO)命令的主要动机是管理层为重新确立控制权、并将公司表现不佳归咎于员工。研究显示,RTO命令显著降低了员工的工作满意度,但并未对财务绩效或公司价值产生显著的积极影响。这实质上是另一种形式的裁员。

对反对者的分析

文章认为,反对远程工作潮流的主要有三类人:

  1. 糟糕的管理者:缺乏现代管理技能,试图通过强制手段(如RTO命令)来控制员工,这反而会导致人才流失。
  2. 商业地产持有者:他们的利益与办公室需求的回归直接挂钩。文章批评了一些商业地产持有者通过施压要求公司强制员工返回办公室的做法,认为这“非常不美国”,且他们并非真正关心当地社区,只关心自身资产价值。
  3. 部分中层管理者:文章指责其中一些人“憎恨自己的生活”,并希望同事每天承受数小时的通勤之苦。

远程工作的不可逆性

作者强调,日常通勤前往办公室对于有能力的人才而言不会回来。这就像“相信圣诞老人存在,后来发现他是假的”一样,一旦魔咒被打破便无法回到过去。高效的团队如今能更纯粹地将时间用于工作本身。

对未来的展望与警告

  • 城市中心用途转变:无休止的“隔间农场”不是任何事物的最终状态,办公空间可以被重新用于购物、社交、娱乐、住宅或尚未想到的创新概念。
  • 识别危险信号:对于投资者、员工或客户而言,任何强制推行RTO的公司都是一个巨大的危险信号,表明他们要么不懂管理,要么在对市场说谎,要么憎恨自己的员工。
  • 核心结论远程工作已经获胜。 不应被任何人(无论是无能的老板、商业地产持有者,还是部分中层管理者)的言论所误导,认为历史会倒退。疫情让我们提前获得了这个不可避免的未来趋势,我们应牢牢抓住它。
14. In major gaffe, hacked Microsoft test account was assigned admin privileges (arstechnica.com)

事件概述

近期,黑客组织入侵了微软的网络,并长时间监控高管的电子邮件。其根本原因在于微软的一个老旧测试账户被错误地配置了管理员权限,且未启用多因素认证,构成了一个重大的安全配置失误。

关键细节

  1. 攻击入口:黑客组织“Midnight Blizzard”(即APT29,被认为与俄罗斯情报机构有关)利用密码喷洒技术,攻破了一个“遗留的非生产性测试租户账户”。该账户密码较弱且没有多因素认证保护。
  2. 权限提升:这是一个严重的配置错误。该测试账户拥有管理员权限,使得黑客能够滥用OAuth授权协议,创建一个恶意应用程序,并授予它访问所有Office 365邮箱的“full_access_as_app”角色权限。
  3. 安全原则违背:此举严重违反了最小权限原则。一个遗留的测试账户不应具备如此高级别的生产环境管理员权限,这削弱了安全限制本应提供的防护。
  4. 攻击隐蔽性:黑客使用住宅代理网络进行攻击,将流量路由通过大量合法用户也使用的IP地址,使得传统的基于威胁指标(IOC)的检测变得极其困难。
  5. 影响范围扩大:除了微软自身,调查还发现其他组织也遭到了同一黑客组织的攻击,例如惠普企业在5月已被入侵,直到12月才被发现并控制。
  6. 公司回应:微软在后续更新中披露了这些技术细节,但拒绝解释该测试账户最初为何被如此配置,以及为何在成为遗留账户后仍保留着危险权限。

核心问题

此次安全事件的核心是一个基础的、重大的配置失误:将一个无保护的老旧测试账户赋予了对整个邮箱服务的管理员访问权限。这为攻击者提供了完美的跳板,使其能够通过滥用标准协议(OAuth)来扩大访问权限并保持持久性。

15. Why good content gets posted on the wrong platform? (danluu.com)

为何优质内容常被发布在“错误”平台?

当人们在Mastodon、Twitter、Threads等平台发布受欢迎的长线程或视频时,常会看到类似“为何不写成博客文章?”或“这更适合做成博客”的评论。这类批评甚至带有较强情绪,如认为在社交平台发布长线程是“愚蠢”或“浪费能量”。

文章以用户Foone为例,其10个热门Twitter线程中9个均遭此类批评。然而,许多内容若非借助这些“非理想”平台,可能根本不会被创作出来。

人们选择社交平台发布的四大原因

1. 更高的互动与曝光

  • 短内容平台(如Twitter、Instagram)占据用户大量时间,其估值远高于长文平台(如Medium)。
  • Substack虽为热门长文平台,但估值与短内容巨头相比微不足道。
  • 长文创作者常依赖短平台引流,因此会持续产出短内容以维持互动。

2. 社交圈层与习惯

  • 许多人会使用身边朋友聚集的平台。
  • 年代差异显著:年轻一代更倾向于从视频创作起步,而非传统博客。

3. 更低的心理摩擦

  • 关键不在于发布步骤繁琐与否,而在于创作与发布的情感障碍
  • 社交平台允许以短片段逐步构建内容,对许多人(尤其是ADHD患者)而言心理门槛更低。
  • 例如Foone坦言因ADHD无法专注完成长文,但能完成零散线程,否则将毫无产出。

4. 更好的变现能力

  • 视频平台的变现能力远超文本平台,使一些深度内容得以生存。
  • 例如汽车评测类视频创作者Alex Dykes的深度远超传统汽车杂志,且可持续经营;科技博主Lucy Wang的YouTube收入已超过其在AWS的工资。
  • 若依赖文本,即使流量很高,也往往难以获得相当收益(如作者的博客收入仅够支付房租)。

结论

尽管许多人更偏好文本形式,但现实是:若要求所有内容都必须以长文或视频形式呈现,许多内容将根本不会被创作。当前总结工具尚不完善,读者只能接受内容原本的形态。

附录部分指出,部分批评可能仅是情绪宣泄,并非基于理性理由。

16. Try to make sudo less vulnerable to Rowhammer attacks (github.com)

sudoers 解析器中的代码修改旨在通过替换对特定值 UNSPEC 的直接检查,转而使用宏 SPECIFIED 来判断匹配结果是否已明确指定,从而降低 sudo 受到 Rowhammer 硬件攻击的风险。Rowhammer 攻击可通过频繁内存访问引发位翻转,可能改变存储的值,从而影响权限检查逻辑。此次变更涉及多个关键匹配函数:

  • user_matches, userlist_matches:处理用户身份匹配。
  • runas_userlist_matches, runas_grouplist_matches:处理以其他用户或组身份运行时的匹配。
  • hostlist_matches_int, host_matches:处理主机名匹配。
  • cmndlist_matches, cmnd_matches, cmnd_matches_all:处理命令匹配。

所有修改均将类似 if (rc != UNSPEC)if (matched != UNSPEC) 的条件判断,改为 if (SPECIFIED(rc))if (SPECIFIED(matched))。这确保了只有在匹配结果被明确设置为 ALLOWDENY 时才进行处理,避免了因内存位意外翻转导致 UNSPEC 值被误读为有效授权,从而增强了sudo在面对此类硬件故障攻击时的稳健性。

19. Fck-nat: The (f)easible (C)ost (k)onfigurable NAT (fck-nat.dev)

fck-nat:经济高效、可配置的 NAT 解决方案

项目简介

fck-nat 是一个基于 Amazon Linux 2023 构建的经济高效、可配置的 NAT 解决方案,提供预构建的 ARM64 和 x86_64 AMI。其主要目标是降低使用 AWS 托管 NAT 网关的高昂成本,同时为用户提供可定制的 NAT 实例部署选项。

成本优势

与 AWS 托管 NAT 网关相比,fck-nat 具有显著的成本优势:

  • 按小时计费:托管 NAT 网关每小时 $0.045,而基于 t4g.nano 实例的 fck-nat 每小时仅 $0.0042,成本降低约 90%。
  • 按流量计费:托管 NAT 网关每 GB 数据收取 $0.045,fck-nat 不收取任何数据传输费用。
  • 闲置成本:fck-nat 在闲置状态下的成本仅为托管 NAT 网关的 10%,实际使用中节省更多。

与 AWS NAT 实例的对比

AWS 官方 NAT 实例 AMI 自 2018 年起未更新,仍基于已停止支持的 Amazon Linux 1,且不支持 ARM 架构,无法利用 EC2 中更具成本效益的实例类型。fck-nat 基于最新的 Amazon Linux 2023,并提供 ARM 支持,解决了这些问题。

适用场景与限制

fck-nat 适用于大多数 NAT 使用场景,支持高达 5Gbps 的突发流量,这与 EC2 实例的互联网出站带宽限制相匹配。但在以下情况下,托管 NAT 网关可能更合适:

  • 需要超过 5Gbps 的带宽(若 AWS 取消带宽限制,fck-nat 可支持高达 25Gbps)。
  • 工作负载要求 99.999%(五个九)的高可用性,因为 fck-nat 虽支持高可用模式,但并非完全免受中断影响。

使用方式

fck-nat 提供多种部署方式,遵循“开箱即用,但可定制”的原则:

  1. 获取公共 AMI:在多数 AWS 区域提供基于 Amazon Linux 2023 的公共 AMI(arm64 和 x86_64)。
  2. 自定义构建 AMI:使用 Packer 工具,通过修改变量配置文件(.pkrvars.hcl)构建符合特定需求的 AMI。
  3. 从 RPM 安装:可从发布页面获取 RPM 包,在现有 AMI 上安装 fck-nat。

部署要求

部署 fck-nat 实例时,需完成以下配置:

  • 为实例配置安全组。
  • 禁用实例的源/目标地址检查。
  • 更新 VPC 路由表,将流量定向至 fck-nat 实例。

fck-nat 旨在简化自定义 NAT 实例的部署,同时提供灵活的配置选项,帮助用户以更低成本实现网络需求。

21. Harvesting electricity from high-voltage transmission lines using fences (hackaday.com)

从高压输电线通过围栏收集电力的实验摘要

实验背景与目的

[Double M Innovations] YouTube频道针对230 kV高压输电线进行了实验,测试利用普通围栏从输电线感应收集电力的可行性。

实验设置与过程

  • 设备:使用88 µF、1200 V的电容器、全桥整流器,以及73米(240英尺)同轴电缆。
  • 布置:同轴电缆被架设在高度约1.2米(4英尺)的围栏位置,确保不接触地面。电缆一端连接全桥整流器,另一端(AC侧)通过金属桩接地。
  • 操作:通过整流器将感应电流转换为直流电,为电容器充电。

实验结果

  • 整流器AC侧电压超过1000 VAC(万用表超出量程),电容器缓慢充电至约1000 V后停止实验。
  • 最终测量电压为907 VDC,基于电容器容量和电压,收集能量约为36.2焦耳。

能量潜力与安全提示

  • 实验表明,高压输电线下长距离围栏可收集显著能量。若不以收集能量为目的,建议将围栏接地以避免电击风险。

法律考虑

  • 在围栏上存储感应耦合电力的合法性未定,建议咨询当地能源公司以符合法规。

注:本文摘要基于原文内容,未添加个人观点或额外信息。

22. Over 2k shell companies have directors aged 123 years or older (fortune.com)

文章摘要:穆迪分析揭示空壳公司潜在风险

穆迪分析的一项研究发现,与空壳公司相关的“风险警示”多达2100万条,这些公司可能被用于金融犯罪。研究揭示了七种关键风险行为,并指出尽管全球新规旨在提高透明度,但洗钱问题依然严重。

主要发现与风险特征

  1. 年龄异常的董事:超过2200家公司拥有123岁或以上的董事,其中一名董事年龄竟达942岁(11世纪出生)。同时,存在数千名5岁以下的董事。
  2. 其他高风险行为:包括批量注册、公司处于休眠状态、循环持股、司法管辖区风险、异常最终受益权和财务异常。
  3. 具体案例
    • 一家中国纺织服装制造商报告2019年营收超20亿美元,但仅有1名员工
    • 约22,000家实体的注册地址位于埃及金字塔
    • 一人身兼5,751个职位,遍布2,883家不同实体。
  4. 地域风险分布
    • 英国的空壳公司风险数量最高,近500万条警示。
    • 美国注册公司的财务异常相关警示最多,超125万条。
    • 巴拿马是热点地区,47%的公司引发警报,但匿名注册数量在“巴拿马文件”调查后减半。
  5. 总体规模:研究分析了约4.72亿家公司。据估计,全球每年洗钱金额高达1.6万亿美元

背景与意义

穆迪分析指出,空壳公司虽可能有合法用途,但其不透明性常被用于隐藏非法金融活动。识别上述差异有助于调查人员和分析师更好地调查欺诈行为。该研究旨在帮助组织理解复杂的股权结构并检测有风险的企业关系。

23. Show HN: Apple II clock using interrupts from physical pendulum clock (github.com)

本文作者受Commodore PET时钟项目启发,为无实时时钟的Apple II Plus克隆机制作了一个数字时钟,创新性地使用祖传摆钟作为物理时间基准,并通过电感式接近传感器将其摆动转化为计算机可识别的中断信号。

核心思路与硬件设计

由于Apple II缺乏实时时钟(RTC)模块,作者利用悬挂于电脑后方的祖传摆钟作为时间基准。摆钟本身就是天然的振荡器,且数十年来计时精准。为避免修改祖传物品,作者采用非接触式检测方案。

他选用电感式接近传感器(一种微型金属探测器)来检测摆锤的摆动。摆锤带有磁性(含铁),符合传感器检测需求。传感器选择NPN型(输出低电平有效)和常开(NO)模式,当摆锤经过时输出一个干净的方波脉冲信号。

信号处理与中断生成

直接连接传感器面临挑战:

  • IRQ中断(电平触发):会导致中断服务程序在传感器检测期间被重复调用。
  • NMI中断(边沿触发):更理想,但无法禁用,且Apple II ROM默认将NMI指向系统监控程序,无法在程序加载前安全使用。

作者通过硬件门控方案解决此问题:

  1. 利用Apple II游戏端口的Annunciator引脚(可软件控制高低电平)作为使能信号。
  2. 使用74LS367三态缓冲器构建门控电路:仅当Annunciator引脚输出低电平时,传感器信号才能通过并触发IRQ中断;否则输出高阻态,屏蔽中断。
  3. 安装时,Annunciator 2/3默认为高电平(门控关闭),程序启动后将其设为低电平以启用中断。

传感器在5V电压下工作正常,但检测距离缩短至几毫米,对摆钟的稳定摆动轨迹足够。

软件实现与时钟逻辑

代码用6502汇编编写,关键逻辑包括:

  • 中断向量修改:将IRQ处理程序指向自定义中断服务例程。
  • 计时处理:中断服务程序中累加摆锤摆动次数。作者发现每分钟对应约95次摆动(存在微小漂移),基于此计算分钟和小时。
  • 时间存储:使用BCD码存储时间,便于直接显示(利用6502的十进制模式)。
  • 屏幕显示:将时间各位数字作为位图索引,逐像素绘制到Apple II屏幕内存。
  • 交互功能:主循环监听键盘,按H/M键可调整小时/分钟,其他键退出。

工作流程与调试

作者最初使用Apple II原生汇编器Merlin开发,后为提高效率转向混合工作流:

  1. 在笔记本上编写代码。
  2. 通过FTDI板与RS-232软件协议将代码传输至Apple II(利用游戏端口的开关引脚模拟串口接收)。
  3. 使用简化的Xmodem协议传输,代码加载至$6000地址执行,支持快速迭代测试。

结果与思考

该项目成功将物理摆钟与数字计算机连接,实现了复古技术的创造性融合。时钟会随时间微漂移,但作者主要目标在于实现过程而非精准计时。项目展示了通过传感器和巧妙硬件设计为缺乏RTC的旧式计算机添加计时功能的可行方案。

24. Breaking SecuROM 7 – A Dissection (lostfilearchives.github.io)

《破解 SecuROM 7:技术解析》摘要

本文档是 ARTeam 团队(AnonymouS、Human、deroko)于2007/2008年发布的逆向工程白皮书,详细拆解了 SecuROM 7 版本(特别是7.30.0014)的多层保护机制,并展示了如何通过逆向工程技术破解其DRM(数字版权管理)。以下为关键内容摘要:


核心目标与挑战

  • 定位OEP(原始入口点):SecuROM 会将原始可执行文件代码与自身保护层“缝合”。破解的首要任务是定位被保护程序的真实入口点(OEP)。
  • 绕过反调试与反分析:SecuROM 集成了多种反调试、反跟踪和内存完整性检查技术。
  • 破解反内存转储:SecuROM 故意损坏内存映像或设置陷阱,阻止调试器或转储工具提取完整的可执行文件内存映像。
  • 修复代码混淆与重定向:代码被切片(Splicing)、加密(Crypting)、虚拟机化(VM),并大量使用API调用重定向,增加分析和修复难度。

关键技术方法与工具

  1. 定位 OEP 的通用方法

    • 异常处理跟踪:利用调试器(如 OllyDbg)跟踪 SecuROM 触发的多次结构化异常处理(SEH)。
    • API 断点:在关键 API(如 VirtualProtect, ReleaseMutex, GetProcAddress, LoadLibraryA, ExitProcess)上设置条件断点或硬件执行断点,跟踪执行流返回到被保护代码区域。
    • 内存区域断点:在代码段(.text)设置硬件断点,等待程序跳回 OEP 区域。
    • 特定模式搜索:在内存中搜索特定字节序列(如 C9 87 3C 24)定位 OEP 附近的代码结构。
    • 工具辅助:使用 OEPFind 工具(Human)自动化定位 OEP 过程。
  2. 绕过反调试机制

    • 检测与修补:识别并修补基于 PEB_LDR_DATA 标志位、ZwQueryObjectNtQuerySystemInformation 等的反调试检测代码。常见方法是修改比较指令(CMP)或跳转指令(JNZ)。
    • 隐藏调试器:使用插件(如 HideOD for OllyDbg)或修改调试器自身特性(如 SoftICE 的服务名)来规避检测。
    • 异常处理篡改:修改 UnhandledExceptionFilter 等异常处理链。
  3. 破解反内存转储

    • 修复内存节属性:在转储前,手动将 .securom 等保护节的内存访问权限恢复为“完全访问”(Full Access)。否则,转储工具会因权限错误失败。
    • 修正入口点(EP):修改 PE 头中的 AddressOfEntryPoint 为转储时的 OEP 值,防止使用原始 EP 作为反制手段。
    • 修复内存线性区域:解决如 d3dx9_30.dll 等加载基址冲突导致的内存区域不连续问题(使用内存重定位工具如 Rebaser)。
  4. 修复代码混淆与重定向

    • 代码拼接(Splicing)修复:SecuROM 会将原始函数代码片段(Splices)移至堆或其他内存区域,原处仅留 jmp dword ptr[] 跳转。需记录跳转目标地址(使用日志工具如 srom_logger + vmtrace.dll),并编写工具(如 sfixer)将分散的代码片段恢复到原函数位置。
    • API 重定向修复:识别被重定向的关键 API 调用(如 GetProcAddress, LoadLibraryA),将其调用目标指向转储后内存中的正确地址。使用导入表修复工具(如 ImpRec)或手动修改 IAT(导入地址表)。
    • CRC校验修复:使用专用脚本(如 Human 的 Securom 7.x CRC Check Fixer)自动定位内存或寄存器中的 CRC 校验计算代码,将其结果硬编码或用 NOP 指令填充,破坏校验逻辑。
    • 虚拟机(VM)代码识别:识别并处理被 SecuROM VM 解释器执行的代码段。修复通常涉及定位 vm_exit 或跟踪 API 调用何时源自原始代码段。
  5. 处理特定反破解机制(Anti-Dump Tricks)

    • 环境绑定检测:修复依赖特定运行时环境的检查:
      • GetCurrentProcessId / GetVersion / GetComputerNameA / GetUserNameA:在转储文件中硬编码原始进程的 PID、操作系统版本、计算机名、用户名等值。
      • CPUID:修改 and eax, 0FFFFFFDFh 指令为 mov eax, <原始CPUID值>
      • ResetEvent:直接返回成功值(如 mov eax, 1)。
      • RtlGetLastWin32Error:直接返回 1 或 NOP 调用。
      • GetSystemInfo:硬编码原始进程的 SYSTEM_INFO 结构数据。
    • DLL 版本检查:修复基于 advapi32.dllkernel32.dll PE 头特定偏移值(如 SizeOfImage, 时间戳、校验和)的检查,通过硬编码计算结果。
    • TLS(线程本地存储)索引检查:修复对特定 TLS 索引(如 0x0F)值的依赖,使用在原始进程中获取的值。
  6. 转储与重建

    • 内存转储:使用调试器插件(如 OllyDump)或自定义工具(如 deroko 的 sromd.asm)转储内存映像,确保包含所有相关内存区域(代码、数据、堆、.securom 节等)。
    • PE 修复:使用 PE 编辑工具(如 CFF Explorer, WinHex):
      • 添加包含转储内存区域的新节。
      • 修正节表中的虚拟地址(VA)和大小。
      • 重建导入表(IAT)。
      • 修复 PE 头的其他关键字段(如 SizeOfImage, AddressOfEntryPoint)。
    • 代码注入修复:有时需要在转储文件中注入一小段补丁代码(Loader)来执行必要的初始化修复(如覆盖 EP 和 ImageSize 值)。

主要作者贡献

  • AnonymouS (第一篇 & 第四篇)
    • 详细记录了突破 SecuROM 7.30.0014 的反调试、定位 OEP、修复 .securom 节权限的步骤。
    • 揭示了基础 API 重定向、代码拼接(Splicing)、高级 API 重定向和虚拟机保护层的存在与基本机制。
    • 强调了代码中的“彩蛋”(开发者注释)。
  • Human (第二篇)
    • 提供了针对《生化危机4》的完整实战破解流程。
    • 详细说明了内存重定位、使用 OEPFind 工具、修复多种反破解 API 的具体内存补丁技术(含二进制补丁示例)。
    • 开发并分享了关键脚本:CRC校验修复器、跳转桥/加密代码修复器、CPUID修复器。
  • deroko (第三篇)
    • 介绍了使用日志工具(srom_logger + vmtrace.dll)记录 jmp dword ptr[] 重定向和代码片段位置的方法。
    • 提出了优化转储文件大小的技术(通过修复代码片段而非保留完整虚拟内存区域)。
    • 详细解析了隐藏在虚拟机解释器内部和原始代码中的多重反破解机制及其修复方案。
    • 展示了自定义转储器 (sromd.asm) 和代码片段修复器 (sfixer) 的工作原理。

结论与意义

  • 技术性:白皮书深入剖析了 SecuROM 7 的多层保护架构(缝合、反调试、反转储、代码混淆/虚拟化、环境绑定),展示了高级逆向工程技术的综合应用。
  • 工具与方法:提供了大量具体的调试技巧、内存分析模式、修复脚本和辅助工具,是逆向工程领域的宝贵参考资料。
  • 历史价值:虽然针对的是十多年前的特定保护版本,但其核心思想和对抗方法(如跟踪执行流、内存修复、环境伪造)在分析现代软件保护时仍具参考价值。
  • 声明:作者强调文档目的是分享知识、提升逆向工程技能,不鼓励非法分发破解软件。所有工具和代码仅供学习研究使用。

归档注:文中提及的工具和脚本可通过索引或冷存储获取。技术细节已过时,现代反编译工具(如 IDA Pro, Ghidra)可能提供更高效的方法。

25. Teletext on a BBC Computer in 2024 (linuxjedi.co.uk)

本文介绍了作者如何在2024年使一个已在英国停播多年的Teletext系统在BBC Micro/Master电脑上重新运行起来。

Teletext技术简介 Teletext是一种利用电视信号隐藏黑边传输的低带宽文本标准。它使用特定字体,除了标准字符外,还包含可通过2×3网格开关像素块组成的粗糙图形字符。每个字符可设置前景色、背景色及闪烁模式。这种模式在BBC电脑上因仅存储字符数据而比图形模式更节省内存、渲染更快。

搭建Teletext发射器(基于树莓派)

  1. 硬件准备:使用树莓派3A+,通过其3.5mm接口输出复合视频。作者测试了不同标准的线缆,确认了正确的接口定义(红色用于视频,黄色用于音频)。
  2. 系统与软件配置
    • 安装Raspbian Lite系统,修改config.txt以启用PAL复合视频输出。
    • 通过脚本安装vbit2软件,该软件可从网络获取实时更新的Teletext数据(如CEEFAX新闻、天气)并生成信号。
    • 配置vbit2服务为开机自启。
    • 优化启动画面:隐藏系统日志,使用fbi工具在开机时显示一张测试卡图片,使TV在按下Teletext键前显示更美观。

通过射频适配电视接收 由于模拟电视广播已停止,作者使用了一个射频调制器,将树莓派的复合视频信号转换到特定的UHF频道(如69频道)。电视通过自动搜台即可锁定该频道并接收信号。连接后,在电视上按下Teletext键成功加载了页面。

连接BBC电脑端

  1. 硬件与ROM:使用Morley Electronics生产的Teletext调制解调器适配器。该设备通过BBC电脑的用户端口通信并由辅助端口供电,支持数字调谐。作者找到了对应的ROM并刷入Master 128的ROM卡带,同时制作了功能键条以辅助操作。
  2. 故障排除:初始连接时设备无法被识别(“No Unit”)。作者分析电路板后,怀疑数字调谐器芯片或其电路导致I2C总线故障。在断开12V电源后设备能被识别,证实了问题所在。通过更换为功能正常的适配器解决了此问题。
  3. 使用:加载ROM中的软件后,通过特定快捷键调出调谐菜单,将设备调谐到与树莓派发射频率对应的频道(如21频道)。成功后,即可在BBC电脑上浏览Teletext内容,如通过输入页码“401”查看未来24小时天气预报。

整体工作流程总结 整个系统的数据流为:树莓派获取网络上的实时Teletext数据流 → 通过vbit2软件生成信号并以复合视频形式输出 → 射频调制器将信号调制到UHF广播频率 → Morley Teletext适配器从该频率接收并解码信号 → BBC电脑利用其内置的Teletext模式和适配器ROM将数据渲染显示。作者成功复现了这一经典系统的端到端工作流程。

27. Scale of methane leaks from fossil fuel production and landfills exposed (news.sky.com)
28. The Invention of a New Pasta Shape (2021) (kottke.org)

2021年,播客主持人Dan Pashman历时三年,成功发明了一种新的意大利面形状——cascatelli。这一形状由他与制造商Sfoglini合作设计,旨在优化面条的三个关键特质:

  1. 酱汁附着力:最大化酱汁附着量。
  2. 叉取便利性:便于用叉子卷起或叉起。
  3. 咬合口感:提升牙齿咬入时的满足感。

Pashman通过其播客《The Sporkful》的5集系列节目及Instagram记录了整个研发过程。该产品最初由Sfoglini销售,但文章发布时已几乎售罄,仅剩5磅大容量包装可购。

29. Solar is a market for (financial) lemons (pluralistic.net)

美国屋顶太阳能市场:一个被金融扭曲的“柠檬市场”

核心论点

文章指出,美国屋顶太阳能行业本应是清洁、有韧性的分布式能源的未来,但由于过度依赖华尔街金融机制,该行业已沦为一个“柠檬市场”——充斥着劣质产品、欺诈和金融化风险,给房主和整个能源转型带来了严重问题。

市场机制与“对齐问题”

  • 市场的优势与缺陷:市场能高效调动资本、协调大量陌生人合作,但容易出现“奖励黑客”(reward hacking)行为——即系统为了最大化利润,可能彻底背离最初的目标。
  • 类比AI与公司:这种“对齐问题”不仅存在于人工智能,也存在于资本主义中。作者将大型企业和市场称为“慢速AI”(Slow AI),它们像追求利润的实体,常常为了逐利而破坏原有目标。
  • 太阳能案例:政府希望通过补贴(税收抵免、现金等)刺激市场来推广太阳能,但华尔街抓住了这些补贴机会,通过金融工程最大化利润,而非真正推进可靠的太阳能普及。

问题的具体表现

  1. 金融化与欺诈销售

    • 太阳能公司派出大量销售人员,采用高压、欺骗性话术,特别是针对老年人等弱势群体。
    • 推销带有“超低初始利率”但后期会大幅上涨的贷款,并将房产作为抵押(留置权),导致房主面临债务飙升和失去房屋的风险。
    • 很多安装的太阳能系统容量不足,导致房主在偿还贷款的同时还要支付高昂的电费。
  2. 与次贷危机的相似性

    • 这种模式与2008年次贷危机中掠夺性贷款的做法高度相似:都是向没有偿还能力的人推销复杂的金融产品。
    • 将这些贷款捆绑成“抵押贷款债务债券”等金融衍生品出售给养老基金和散户投资者,创造了对更多安装(即使质量低下)的永不满足的需求,从而加剧了欺诈。
  3. 市场的“奖励黑客”行为

    • 金融部门专注于用最少的实体工作(如安装优质太阳能板)来实现资本增值。大量政府补贴被各种“垃圾费用”和金融手段吞噬,有时甚至超过补贴总额。
    • 太阳能公司还通过“有约束力的仲裁豁免”条款,剥夺房主的诉讼权,确保争议在由公司付费的仲裁人那里解决,进一步损害房主权益。

现状与后果

  • 目前,许多美国房主发现自己的电费因太阳能系统而上升,而为他们提供系统的大型金融化太阳能公司正濒临破产。
  • 由此产生的债券是潜在的金融炸弹,可能引发系统性风险。
  • 行业巨头GoodLeap的创始人因依靠此类模式积累了巨额财富。

结论与替代方案

  • 问题根源:市场并非推广太阳能等公共产品的可靠工具,其固有的逐利性会催生欺诈和金融操纵。
  • 更优方案:作者主张,如果政府愿意花费数十亿美元激励屋顶太阳能,不如直接投入资金安装屋顶太阳能系统,避免将决策权交给擅长“奖励黑客”的“慢速AI”(市场)。
  • 可行性支持:文章引用研究指出,理论上只需捕获地球表面接收太阳能的0.4%,就足以满足全球能源需求,关键在于正确的实施路径,而非依赖扭曲的市场机制。
30. Open Source Rewrite of Civilization 1 Source Code – OpenCiv1 Project (forums.civfanatics.com)

本文总结了《文明1》Windows版本相对于DOS版本存在的主要问题与差异,主要涉及游戏机制、功能、音频、图形和系统显示方面。

主要问题与差异:

  1. 保存逻辑缺陷:在回合中仍有单位拥有移动力时保存游戏,重新加载后所有单位将恢复全部移动力。DOS版仅在手动转移至自动存档位时触发此问题,而Windows版每次保存均会出现。

  2. 界面功能变更:原DOS版中集成在城市界面内的许多功能,在Windows版中被移至外部的Windows菜单栏。多数用户更倾向于DOS版在同一屏幕内完成所有操作的设计。

  3. 音频播放问题

    • 标题屏幕和开场动画共用相同的背景音乐,并且会中断大部分开场音乐,导致大部分开场动画处于静音状态。
    • 外交时播放的特定文明音乐会在外交界面打开时立即停止,而DOS版则会持续播放。此外,若不经过修改,这些音轨长度非常短。
  4. 存档文件差异:Windows版的存档文件不保存单位名称,因此无法创建包含自定义单位名称的剧本,而DOS版则支持此功能。

  5. 动画缺失:Windows版缺少输水道、空中花园等城市界面水景的动画。仅在256色模式下存在动画海岸线和河流。

  6. 幸福度模型与显示差异

    • Windows版采用了版本3补丁的幸福度模型,引入了“极度不快乐市民”的概念。
    • 在DOS版的城市界面中,此类市民会显示为红色以示区分。
    • 在Windows版中,则缺乏任何视觉提示来区分“极度不快乐市民”与“普通不快乐市民”。
  7. 图形风格偏好:地形和单位图形/配色方案属于主观偏好。部分用户更欣赏DOS版的风格,例如Windows版城市界面选用的酒红色和黄色被部分用户认为观感不佳。这些风格差异理论上可作为可选项提供。

结论:文章指出,尽管OpenCiv1项目在游戏核心机制上可能非常接近原版,但Windows版本在用户界面、音频播放、存档功能和视觉提示等方面存在诸多上述问题,与DOS版的体验有显著差距。

33. LoMA: Lossless Compressed Memory Attention (arxiv.org)

LoMA:无损压缩内存注意力机制

核心问题 大型语言模型在处理长上下文时,面临GPU内存需求高和计算资源消耗大的限制。传统的解决方案——对Transformer模型的键值缓存进行稀疏化处理——虽能缓解资源压力,但不可避免地会导致信息损失。

提出方案:LoMA 本文提出了无损压缩内存注意力机制,这是一种能够实现KV缓存无损压缩的新方法,从而在自回归生成过程中减少内存和计算需求。

关键技术与特性

  1. 无损压缩:与信息有损的稀疏化方法不同,LoMA旨在实现无损的KV缓存压缩。
  2. 集成式处理:该方法结合了专门的训练/微调流程以及为压缩上下文优化的自回归生成算法。
  3. 压缩机制:每生成 tc 个token后,对KV缓存进行一次压缩。压缩比为 c,目标压缩长度为 t。该压缩过程在单次推理传递中完成,无需依赖辅助模型。
  4. 训练方案:设计了一种高效的训练方案,通过特定的输入、注意力掩码和位置标识符,使模型具备这种压缩能力。

实验结果 实验验证表明,LoMA通过实现无损KV缓存压缩,能显著降低计算消耗和内存使用

34. C_std: Implementation of C++ standard libraries in C (github.com)

项目概述
C_std 是一个使用纯 C17 语言重新实现 C++ 标准库及 Python 风格工具的项目,旨在为 C 开发者提供丰富、高效且跨平台的构建模块,无需依赖 C++ 或离开 C 生态系统。

核心特点

  • 零内存泄漏:所有模块、测试和示例均通过 Valgrind 严格验证。
  • 跨平台支持:兼容 Windows(MSVC/MinGW)和 Linux(GCC/Clang),通过统一的 API 实现 POSIX/Win32 后端抽象。
  • 纯 C17 实现:不使用 C++,仅依赖标准 C 和轻量平台适配层。
  • 模块丰富:提供 40+ 模块,涵盖容器、算法、字符串处理、JSON/XML/CSV/INI 解析、网络通信(TCP/UDP/HTTP)、加密、多精度数学计算、图形绘制等。
  • 熟悉 API 设计:接口风格借鉴 C++ STL(如 vector、map、unique_ptr)和 Python 标准库(如 random、statistics、json)。
  • 高效与可预测:采用优化数据结构(如动态数组内存池、O(1) 哈希表、O(log n) 有序映射),并提供清晰的内存所有权规则。
  • 全面测试:每个模块包含详细测试套件和可运行示例,输出结果均从实际运行中捕获。
  • CMake 构建系统:支持整体构建、单模块构建或单独编译示例,兼容 GCC、Clang 和 MSVC。

主要模块分类

  1. 容器:包括动态数组(vector)、链表(list)、队列(queue)、栈(stack)、哈希表(hashmap)、有序映射(map)、智能指针(uniqueptr)等。
  2. 算法与数值计算:提供排序、搜索、统计、随机数生成、多精度整数(bigint)和浮点数(bigfloat)、矩阵运算等。
  3. 文本、数据与 I/O:支持 JSON/XML/CSV/INI 解析与生成、正则表达式、命令行解析、日志记录、文件读写等。
  4. 时间与日期:包括时间测量和日历操作。
  5. 系统与并发:提供系统信息获取、多线程、互斥锁、线程池、串口通信等。
  6. 安全:包含哈希、加密解密、JWT 生成与验证等功能。
  7. 网络与数据库:支持 TCP/UDP 套接字、HTTP 客户端/服务器、PostgreSQL 客户端(可选)。
  8. 图形:提供二维绘图(plot)和基于 raylib 的 turtle 图形绘制。
  9. 测试:内置轻量级单元测试框架。

构建与依赖

  • 构建工具:需 CMake ≥ 3.15 和 C17 编译器(GCC/Clang/MSVC)。
  • 第三方依赖:OpenSSL、raylib、GMP、MPFR 为必需库;libpq(PostgreSQL)为可选。文章详细说明了在 Windows(MSYS2)、Debian/Ubuntu 和 Fedora 上的依赖安装方法。
  • 构建命令:可通过 CMake 配置和编译整个项目,或单独构建模块与示例。支持通过选项控制是否编译主演示程序和示例。

示例代码
文章包含多个模块的快速示例,如:

  • 使用 vector 动态数组求和。
  • 解析并打印 JSON 数据。
  • 创建和导出 CSV 文件。
  • 读取 INI 配置文件。
  • 生成确定性随机数。
  • 计算字符串的 SHA-256 哈希。
  • 创建线程和线程池并行执行任务。
  • 绑定 UDP/TCP 套接字。
  • 序列化 HTTP 响应。
  • 绘制图表并保存为 PNG。
  • 使用 turtle 图形绘制嵌套正方形。

文档与许可

  • 每个模块附带独立的 README.md,包含完整的 API 参考和可运行示例。
  • 项目采用 ISC 开源许可证,欢迎贡献代码、性能优化或缺陷修复。
36. A Historical Tour of Silicon Valley (2010) (www.scaruffi.com)

本文是《硅谷历史》一书的附录,以图文并茂的形式按时间顺序记录了硅谷地区对高科技产业发展有重要贡献的组织所在地。内容主要分为以下几个部分:

  1. 早期教育与无线电技术(19世纪末至20世纪20年代):包括伯克利分校、斯坦福大学等早期建筑,以及世界上第一个广播电台(1909年)、李·德雷福斯特工作的联邦电报公司实验室(1911年)和费洛·法恩斯沃斯发明电视的实验室(1927年)。

  2. 电子与半导体时代(20世纪30年代至60年代):涵盖了惠普创始车库(1937年)、Ampex(1944年)、Varian(1948年)、IBM实验室(1952年,研发了RAMAC)、肖克利晶体管实验室(1956年)、NASA艾姆斯研究中心(1958年)以及发明集成电路的仙童半导体(1959年)。同期还出现了IBM阿尔马登研究中心和斯坦福人工智能实验室。

  3. 计算机与生物科技兴起(20世纪60年代至80年代):包括英特尔创立地(1968年)、风险投资公司聚集地(1969年)、施乐帕克研究中心(1970年)、雅达利(1972年)、基因泰克(1976年)、甲骨文前身(1977年)、3Com(1979年)、SUN(1982年)、思科(1984年)等。

  4. 互联网与数字革命(20世纪90年代至2000年代):记录了网景、雅虎、Hotmail、eBay、谷歌、Facebook、YouTube、Twitter等互联网公司的初创地点或早期办公室。还提到了一些硬件、软件和生物科技公司,如易安信、VMware、特斯拉等。

  5. 当代地标与机构:包括计算机历史博物馆、Y Combinator孵化器、Singularity大学等。

文章指出,由于照片主要拍摄于2010年,多数建筑已非原始面貌。文中所列地址大多为各公司或技术的诞生地,部分原址已被拆除或改建。整体而言,这篇文章提供了一幅硅谷高科技产业地理与历史演变的直观图谱。

37. I'm sorry, but omnidirectional treadmills can't work and here's why (james.darpinian.com)

全向跑步机无法实现自然运动的原因

核心问题:前庭系统的限制

全向跑步机(如迪士尼设计的创意型号)在机械上能移动用户的脚步,但无法实现自然的全向运动体验。根本原因在于人类的前庭系统(位于内耳),它负责检测平衡和加速。前庭系统包含类似加速度计的传感器,能感知速度变化(加速度),而非绝对速度。当用户在跑步机上改变方向时,大脑期望检测到加速度信号,但由于实际速度为零,信号缺失会导致感觉失真、平衡丧失甚至摔倒。

健身房跑步机的对比

普通健身房跑步机在直线恒速下运行良好,因为加速度变化小且渐进,用户感知不到差异。但全向跑步机需支持频繁的方向和速度变化(如游戏中的突然转向),这与前庭系统的预期冲突,产生不自然感觉。

现有解决方案的局限性

  1. 安全带:防止摔倒但限制运动自由,无法模拟自然行走。
  2. 扩大尺寸:通过缓慢调整回中心可能减少干扰,但需要极大尺寸(如房屋大小),成本高昂、维护复杂,且仍无法完全匹配前庭系统敏感度。
  3. 前庭电刺激:通过电流控制平衡感,但控制粗糙,可能导致晕动症或平衡丧失;还需协调其他感官(如肢体运动和内脏感觉),否则会引发不适。

结论与替代方案

全向跑步机无法模拟自然的全向运动,物理定律和人类感知的限制使其难以突破。作为小众健身设备,它们可能用于非自然运动训练,但无法实现“全息甲板”式的沉浸体验。未来真正的解决方案可能需要脑接口技术(如《黑客帝国》),但届时跑步机将不再必要。目前,VR技术已采用其他方法(如重定向行走、传送门)来创造空间错觉,可能更实用。

39. In case you missed it: America got much bigger continental shelf (bigthink.com)
46. Vectorizing Unicode conversions on real RISC-V hardware (camel-cdr.github.io)

本文详细介绍了在真实RISC-V硬件上利用其向量扩展(RVV)优化UTF-8到UTF-16转换的方法,并展示了显著的性能提升。核心内容总结如下:

主旨与背景 文章的核心目标是开发一个高性能的、经过验证的UTF-8到UTF-16转换实现,并计划将其贡献给被广泛使用的simdutf库。UTF-8和UTF-16是两种常见的Unicode编码,转换操作在众多系统中频繁发生,存在优化空间。RISC-V的向量扩展通过提供宽向量寄存器和对多个数据元素的并行操作,为实现性能突破提供了可能。

RISC-V向量扩展基础 RVV包含32个宽度为VLEN(≥128位)的向量寄存器,可配置为不同宽度的元素(8/16/32/64位)。其关键特性包括:

  • vsetvl指令:根据元素宽度和长度乘数(LMUL)动态设置处理的向量长度,实现对不同VLEN硬件的兼容。
  • 长度乘数(LMUL):允许将多个向量寄存器分组使用(如m8表示使用4个寄存器组),等效于增加可用寄存器宽度和循环展开,提升吞吐量。
  • 丰富的指令集:包括加载/存储、算术逻辑、规约、置换(如vslide, vmerge, vcompress, vrgather)等,用于数据重排和并行计算。

实现策略 作者首先专注于通用的UTF-8到UTF-32转换,再将其转换为UTF-16。主要步骤如下:

  1. 处理可变长度字符:UTF-8字符长度为1-4字节,转换的核心难点在于处理这种变长性。文中评估了使用vdecompressvcompress等方法,最终选择了一种基于前瞻读取vcompress的混合策略。
  2. 提取与组合:通过向量滑动(vslide1down)和掩码压缩(vcompress),将输入字节流分离为各个字符的第1、2、3、4个字节。
  3. 移除前缀:移除UTF-8的引导位和延续位前缀,仅保留有效负载数据。
  4. 组装码点:通过有符号乘加等向量操作,将分离的有效字节组合成完整的Unicode码点(UTF-32形式)。
  5. 验证:采用了基于查找表(LUT)的向量化UTF-8验证方法。使用vrgather指令进行高效的4位索引查找,检测无效序列。

性能优化(快速路径) 为了进一步提升速度,代码针对常见输入模式设置了快速路径,避免执行完整的通用转换流程:

  • 纯ASCII:如果数据块全部是ASCII字符(单字节),则直接零扩展并存储为16/32位整数,跳过复杂的解码和验证。
  • 仅1-2字节字符:如果字符码点均在U+0000至U+FFFF范围内(对应1-2字节UTF-8),则采用简化的组合逻辑。
  • 仅1-3字节字符:类似地,针对码点在U+0000至U+FFFF范围内的字符(1-3字节UTF-8)进行优化处理。

硬件基准与性能结果 开发在模拟器中进行,并在真实硬件上测试,包括:

  • Kendryte K230 (C908核心):VLEN=128位,顺序执行。
  • BananaPi BPI-F3 (X60核心):VLEN=256位,顺序执行,性能更强。
  • Milk-V Pioneer (C920核心):VLEN=128位,乱序执行,更高频率。

使用多种语言文本进行测试,结果显示:

  • 在排除纯ASCII(Latin)的密集文本测试中,C920平均获得约3倍加速,C908获得约3.5倍加速。
  • 在更贴近实际的(如维基百科)结构化文本测试中,平均加速比分别达到3.6倍和4.0倍。
  • 对于ASCII输入,加速比分别达到11倍和8倍。

指令可移植性思考 文章指出,置换类指令(如vrgathervcompress)在不同RVV实现中的性能表现差异较大。作者建议为常见的4位查找表操作考虑专用指令,以改善未来硬件的性能可移植性。

结论 通过充分利用RISC-V向量扩展,本文成功将UTF-8到UTF-16转换的性能在真实硬件上提升了数倍。该实现已合并至simdutf库,有助于缩小RISC-V与其他架构在关键文本处理任务上的性能差距,并展示了RVV在系统软件优化中的强大潜力。

48. The 100MHz 6502 (2022) (www.e-basteln.de)

65F02:100MHz的6502兼容处理器

这是一个在FPGA上重新实现65C02处理器的项目,旨在为20世纪70-80年代的6502/65C02计算机和游戏机提供高达100MHz的加速器升级方案。

核心概念

  • 技术基础:使用Arlet Ottens开发的6502 FPGA核心,并由Ed Spittles和David Banks扩展以支持65C02操作码。
  • 硬件实现:将CPU核心集成到Spartan-6 FPGA中,配以64KB片上RAM,制作成与40针双列直插封装(DIP)完全兼容的电路板,可直接插入原6502/65C02的CPU插座。
  • 工作原理
    • 上电时,65F02会将主机的全部RAM和ROM内容(I/O区域除外)拷贝到片上RAM。
    • CPU核心在内部以100MHz运行,通过内部总线访问片上内存进行高速计算。
    • 当需要访问I/O地址时,内部CPU暂停,启动与外部主机时钟同步的外部总线周期,以保证与原始外围设备的兼容性。
    • 通过微型拨码开关可选择最多16种不同的内存映射配置,以适配不同的主机系统。

支持的主机系统

国际象棋计算机

项目最初聚焦于Mephisto系列,现已扩展到多个型号:

  • 已支持:包括Mephisto MM II、MM IV、MM V、Polgar、Milano、Rebell 5.0,Novag Constellation Forte A/B,Chafitz ARB,以及大多数Conchess型号(Victoria除外)。
  • 待支持列表:包括Fidelity、Novag Super Constellation、SciSys Turbostar等型号,但受限于FPGA资源,可能无法添加更多支持。

微型计算机

目前支持两类经典1977年“三位一体”家用电脑:

  • Apple II:包括II plus和europlus,尽管早期型号设计复杂,但65F02通过更宽容的总线时序实现了兼容。语言卡支持仍在开发中。
  • Commodore PET/CBM:支持到8032型号,采用“规范”设计,同一内存映射适用于PET 2001至8032系列。
  • 其他可能性:如Acorn BBC Micro、Atari 400/800和Commodore C64,但需要硬件适配帮助。
  • 重要注意事项:对于家用电脑,扩展内存、时序敏感的外设(如软驱)或某些软件(如动作游戏)可能无法完全兼容或适于加速。65F02提供可选硬件开关,可禁用加速功能,恢复原始速度以保证完全兼容。

项目状态

  • 性质:这是一个业余爱好项目,目前无商业计划。
  • 测试与反馈:多个小尺寸电路板已组装完成,并在多种主机(包括使用TTL/CMOS逻辑、时钟频率1-5MHz、使用中断信号的系统)上测试成功。在国际象棋计算机社区中,它显著提升了老机器的棋力。
  • 技术挑战(2024年7月更新):由于FPGA资源接近极限,添加更多内存映射选项会导致合成逻辑电路速度下降,无法可靠维持100MHz运行。因此,当前版本的65F02板卡很可能无法再大幅扩展对更多计算机的支持。作者正在研究双启动配置等技术选项来应对资源限制。
49. OBS merges AV1 support for WebRTC (github.com)

OBS 的 WHIP 输出模块现已支持 AV1 视频编码用于 WebRTC 传输。本次更新的核心是引入了对编码器的运行时检测与自适应打包逻辑。

主要代码变更包括:

  1. 编码器类型检测:在 WHIPOutput::Start() 函数中,新增逻辑以获取当前视频编码器。通过比较编码器名称是否为 "av1",设置类成员 is_av1 标志。
  2. 自适应轨道配置ConfigureVideoTrack() 函数被修改,以根据 is_av1 标志动态选择编码描述和 RTP 打包器:
    • 若为 AV1 编码,则使用 addAV1Codec 添加编解码器描述,并创建 AV1RtpPacketizer 进行数据包化。
    • 否则,保持原有的 H.264 支持,使用 addH264CodecH264RtpPacketizer
  3. 输出信息注册:在 register_whip_output() 函数中,encoded_video_codecs 字段从 "h264" 更新为 "h264;av1",正式声明支持 AV1 编解码器。

总结:此次更新通过条件化处理,使得 OBS 的 WHIP 输出功能能够同时兼容 H.264 和 AV1 视频编码,用户无需手动配置即可根据所选编码器自动使用对应的 WebRTC 数据包化方案。

50. Skip Microsoft Acct. Sign-In in Win 11 Home? It Skips Protecting Your Data Key (www.g1a55er.net)

文章摘要

核心问题

Windows 11 家庭版 中,若通过非官方技巧在初始设置时跳过微软账户登录,仅创建本地账户,系统虽然会显示“设备加密”已开启,但实际上加密密钥以明文形式(“清除密钥”)存储在硬盘上,处于未受保护状态。这相当于将保险柜密码直接写在保险柜旁边,设备一旦丢失,数据极易被他人解密访问。

问题根源

  • Windows 11 家庭版的“设备加密”功能在本地账户设置下会自动初始化加密,但不会自动创建受 TPM 保护的密钥,而是使加密处于类似“BitLocker 暂停”的状态。
  • 此状态下,虽然数据已被加密,但解密密钥未受保护,任何人获取硬盘都可轻易读取数据。
  • 微软官方文档有相关说明,但系统界面中仅在“设置”>“隐私与安全性”>“设备加密”深处显示一个黄色警告条,提示需登录微软账户完成加密,容易被用户忽略。

解决方案

用户需通过管理员命令行工具 manage-bde 手动启用保护:

  1. 检查状态:运行 manage-bde -status。若显示“保护状态:关闭”且“密钥保护程序:未找到”,则表明处于不安全状态。
  2. 添加保护程序:例如,添加 TPM 保护:manage-bde C: -protectors -add -tpm。同时建议添加恢复密钥:manage-bde C: -protectors -add -recoverypassword
  3. 启用保护:运行 manage-bde -on C: 以启用已添加的密钥保护。
  4. 验证结果:再次运行 manage-bde -status,确认“保护状态”变为“保护已开启”。

作者批评与结论

  • 作者认为此行为是微软产品策略导致:强制用户使用微软账户以绑定其服务,因此未优化本地账户的设置流程,将“密钥备份”与“账户类型”选择悄然绑定。
  • 完整 BitLocker 功能仅在 Windows 专业版等更高级版本提供,作者认为磁盘加密应为现代设备标配,批评微软的产品区分策略。
  • 最终建议:所有在 Windows 11 家庭版上使用本地账户安装的用户,都应主动检查并手动启用驱动器保护,因为默认设置可能存在严重的安全隐患。