2024-07-07

24 篇热帖

1. YouTube embeds are heavy and it’s fixable (frontendmasters.com)

YouTube 嵌入性能优化方案总结

核心问题

YouTube 默认的 <iframe> 嵌入方式性能极差:

  • 体积巨大:单次嵌入约 1.3MB,产生 32 个请求。
  • 资源不共享:多个嵌入的资源是线性增长的(2个嵌入约2.4MB,3个约3.6MB),造成巨大浪费。
  • 影响环境:如此大的数据传输量带来了不必要的能源消耗和碳排放。

功能与体验

尽管占用资源巨大,标准嵌入提供的核心功能却很简单:

  1. 显示视频封面图。
  2. 显示视频标题。
  3. 显示一个播放按钮,点击后播放视频。

作者质疑为何需要如此庞大的资源来实现如此简单的功能,并对 YouTube 内部关于“更轻量嵌入会降低用户参与度”的测试结果表示怀疑,呼吁其公开方法和数据。

解决方案

推荐使用开源 Web Component lite-youtube-embed 来替代标准嵌入。

  • 显著减负:体积约为 100KB,并且支持多个组件间共享资源
  • 功能无损:提供与默认嵌入完全相同的外观和交互(封面、标题、播放按钮)。
  • 性能提升:官方称其渲染速度比标准嵌入快约 224 倍

使用方法

  1. 引入资源:通过 CDN 异步加载 JavaScript 和 CSS。
  2. 使用组件:在 HTML 中使用 <lite-youtube> 标签,并设置 videoid 属性。可以在标签内设置 background-image 属性以确保在 JS 加载完成前显示正确的封面。
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/lite-youtube-embed/0.3.2/lite-yt-embed.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lite-youtube-embed/0.3.2/lite-yt-embed.css">

<lite-youtube videoid="ogfYd705cRs" style="background-image: url('https://i.ytimg.com/vi/ogfYd705cRs/hqdefault.jpg');">
  <a href="https://youtube.com/watch?v=ogfYd705cRs" class="lty-playbtn" title="Play Video">
    <span class="lyt-visually-hidden">Play Video</span>
  </a>
</lite-youtube>

其他替代方案

文章还列举了其他同类 Web Component 项目,如:

  • 带有 Shadow DOM 的版本。
  • Raymond Camden、Adrian Roselli 个人编写的组件。
  • Mux 提供的 <youtube-video> 组件(DOM API 与 <video> 一致)。
  • 适用于 React 和 Next.js 的移植版本。
2. First anode-free sodium solid-state battery (pme.uchicago.edu)

首个无负极钠固态电池

研究突破

芝加哥大学与加州大学圣地亚哥分校的合作团队成功研发出全球首个无负极钠固态电池。该成果发表于《Nature Energy》,首次将“钠”、“固态”和“无负极”三大概念成功结合,并实现了数百次循环的稳定充放电。

研究目的与意义

该研究旨在为电动汽车和电网储能提供低成本、快充且大容量的电池方案。锂资源稀缺、分布集中且开采破坏环境,导致电池成本高昂并制约全球脱碳进程。相比之下,钠资源丰富且提取更环保。该电池的开发有助于填补清洁能源转型中的电池规模化缺口。

技术架构与核心创新

  • 无负极设计:去除了传统电池的阳极,将碱金属离子直接电化学沉积在集流体上。此设计提高了电池电压和能量密度,并大幅降低了成本。
  • 界面接触难题的解决:无负极固态电池面临固态电解质与集流体接触不良的挑战(液态电解质虽接触好但会消耗活性物质)。团队创新性地提出“让集流体包围电解质”的架构,而非传统的电解质包围集流体。
  • 铝粉集流体:采用可像液体般流动的铝粉制作集流体。在电池组装时,铝粉在高压下致密化形成固体集流体,同时与固态电解质保持类似液体的完美物理接触,从而实现低成本与高效的循环性能。

性能与前景

该新型钠电池架构展现出优异的稳定循环性能,证明了钠固态电池不仅可行,在某些情况下甚至优于锂电池版本。研究团队已为此技术申请专利,这一突破打破了钠固态电池属于“遥远未来技术”的固有认知,有望加速钠基电池在可再生能源存储领域的商业化应用,推动清洁、廉价的多元化能源存储未来。

3. How to think in writing (www.henrikkarlsson.xyz)

本文探讨了写作作为深度思考工具的价值,强调写作不仅表达思想,更能塑造和完善思维。作者结合个人经验与哲学观点,阐述如何通过特定写作方法实现思维的精确化与深化。

核心观点

  • 写作固化思维:将流动的想法转化为文字,使其变得具体、清晰,从而便于审视和修正。若不写作,对复杂问题的认知往往停留在模糊状态。
  • 提出假设的重要性:写作时需明确表达观点,即使基于有限信息。这类似于数学中的“提出猜想”,目的是暴露认知弱点,引导反馈与修正。
  • 解释与反例的检验:将观点展开为具体解释(即“延伸论证”),能增加批判的靶点;通过反例(包括局部与全局反例)验证前提,要么完善解释,要么推翻结论。
  • 发现深层问题:写作过程中,表面的错误易被察觉,但深层的认知漏洞往往通过直觉(如身体紧张感)显现,需耐心挖掘才能突破现有理解。

实践方法

  1. 具体化:避免模糊表述,用明确、肯定的语言陈述观点。
  2. 展开论证:列出支持观点的前提,追问“为什么”,形成推理链条。
  3. 引入反例:寻找与自身观点相反的实例,检验前提是否成立。
  4. 情感线索:重视写作时产生的不适感,可能是发现深层矛盾的关键。

示例

作者以子女教育决策为例:最初结论为“避免传统学校”,通过写作延伸论证,列出“社交化重要性”等前提;查阅研究后发现部分前提不成立,最终修正为“选择自主学习环境”。这一过程体现了写作如何驱动认知迭代。

总结

写作的本质是思维训练:通过固化、检验、推翻与重建,推动认知进化。它要求作者具备勇气暴露无知,并以严谨态度批判自身观点,最终在思维的裂缝中寻找新的光芒。

4. A reawakening of systems programming meetups (notes.eatonphil.com)

近年来,全球多个城市涌现了高质量的系统编程社区活动,如慕尼黑数据库聚会、柏林系统小组、旧金山分布式系统聚会、纽约系统聚会和班加罗尔系统聚会等。这些活动与疫情前以产品推销为主的会议形成鲜明对比,反映了技术社区活动的质量复兴。

作者回顾了疫情前参加技术聚会的失望经历:许多活动沦为初创公司的产品推销会,即便像纽约Haskell用户组等专业团体,也因门槛过高而难以吸引广泛参与者。疫情期间,仅存的两个优质活动(纽约Linux用户组和Papers We Love NYC)也基本停办。

战后,作者尝试参加Rust和Go聚会,但仍感失望。直到2023年底,慕尼黑工业大学研究生Georg Kreuzmayr发起的数据库俱乐部TUMuchData激发了作者的行动力。随后,在Justin Jaffray的支持下,作者在曼哈顿创办了非正式的NYC系统咖啡俱乐部,吸引了系统编程领域的从业者。

随后,作者与Angelo Saraceno合作成立了NYC Systems聚会,确立了核心原则:语言与框架无关、聚焦工程挑战而非产品推广。虽然寻找赞助场地(最终由Trail of Bits提供)和合适演讲者面临挑战,但通过社交媒体定向邀约演讲者,以及用Google表单管理邮件列表和报名,活动逐渐步入正轨。

NYC Systems的成功产生了广泛网络效应:慕尼黑数据库聚会、柏林系统小组、旧金山分布式系统聚会和班加罗尔系统聚会相继成立。活动通常采用提前公布日程、定向邀请演讲者、限额报名并发布演讲视频的模式。

作者为有意组织类似活动者提出建议:

  1. 寻找赞助公司时,应保持原则,避免过度妥协;
  2. 引导演讲者讲述具体的工程挑战和解决方案,而非泛泛而谈;
  3. 主动在社交媒体和行业内挖掘潜在演讲者;
  4. 与其他组织者保持交流,分享经验。

这些聚会通过聚焦技术深度而非商业推广,成功吸引了包括技术创始人、资深开发者、研究生等在内的多元参与者。

5. Mongo but on Postgres and with strong consistency benefits (github.com)

Pongo:基于PostgreSQL的MongoDB风格数据库

概述

Pongo是一个允许开发者在PostgreSQL数据库上使用MongoDB风格API的工具。它通过利用PostgreSQL的JSONB支持,将文档数据存储为二进制JSON格式,从而获得性能提升和存储效率。Pongo旨在提供MongoDB的使用体验,同时继承PostgreSQL的强一致性(ACID合规性)等优势。

安装与使用

通过npm安装Pongo:

npm install @event-driven-io/pongo pg @types/pg

支持两种使用方式:

  1. Pongo原生语法:使用pongoClient进行显式类型操作。
  2. MongoDB兼容Shim:通过@event-driven-io/pongo/shim导入类似MongoDB的MongoClient接口。

两种方式都提供完整的CRUD操作(插入、更新、删除、查询),语法与MongoDB高度相似,便于开发者迁移和上手。

工作原理

Pongo将PostgreSQL作为文档数据库,核心是利用JSONB类型。每个集合对应一个PostgreSQL表,表结构包含以下字段:

  • _id:主键,存储文档ID。
  • data:JSONB类型,存储文档数据。
  • metadata_version_partition等:用于支持版本控制、分区等高级功能。

Pongo将MongoDB的API调用翻译成对应的PostgreSQL原生SQL查询。例如,$push操作会被转换为使用jsonb_set和数组连接的UPDATE语句;嵌套数组查询会使用jsonb_path_exists函数。

为什么选择Pongo?

  • 强一致性:受益于PostgreSQL的ACID事务支持。
  • 性能优势:JSONB的二进制存储和索引(如GIN索引)提供更快的读写性能。
  • 生态集成:无缝对接PostgreSQL生态,包括云服务(Supabase、Vercel Postgres等)和高级功能(分区、逻辑复制)。
  • 开发体验:提供比原始PostgreSQL JSON查询更友好的MongoDB式API,简化嵌套数据管理。
  • 许可证友好:规避MongoDB的许可证问题。

与其他工具的区别

  • 与MongoDB:Pongo并非替换MongoDB,而是提供类似API的替代方案,强调在PostgreSQL上实现文档操作。
  • 与FerretDB:FerretDB通过代理实现MongoDB协议兼容,需要运行额外服务;Pongo直接在应用层将API转换为SQL,更易于与现有PostgreSQL连接池集成,但不支持MongoDB原生网络协议工具。
  • 与ORM:Pongo专注于文档数据的高效处理,而非通用ORM。它弥补了传统ORM在复杂JSON查询方面的不足。

当前状态与支持

Pongo是一个新兴项目,核心功能可用但尚未实现100%的MongoDB兼容。项目开源,鼓励社区通过提交问题、拉取请求或赞助来支持其发展。已采用贡献者公约以规范社区行为。

总结

Pongo结合了MongoDB的开发便捷性与PostgreSQL的强一致性、性能及生态优势,适合希望在PostgreSQL基础设施上管理文档数据并避免MongoDB相关问题的项目。

6. Why privacy is important, and having "nothing to hide" is irrelevant (2016) (robindoherty.com)

文章核心观点总结

隐私是一项基本权利,而非仅针对有秘密者

  • 隐私权是表达自由、结社自由和集会自由的基础,这些是民主社会的基石。
  • "我没什么可隐藏"的论点类似于"我无话可说所以不在乎言论自由",是对隐私辩论的误导性框架。

隐私丧失直接导致自由受限

  • 表达自由受威胁:网络监控使人因担心被监视而自我审查,避免研究特定话题,导致思想趋同。
  • 结社与集会自由受威胁:通信和位置追踪使人避免接触"敏感"人群或参与抗议活动,削弱社会变革潜力。
  • 寒蝉效应:个人自我审查行为逐渐累积,最终抑制社会整体的行动主义、新闻报道和政治异议等关键民主活动。历史案例(如澳大利亚1967年原住民权利公投)表明,自由表达推动了社会进步。

数据聚合与大规模监控的危险

  • 单独无害的数据(如位置、联系人、网络活动)聚合后可形成揭示政治倾向、信仰甚至未知个人特征的详细档案,且可能被误判。
  • 情报机构拥有庞大预算和先进分析技术,使监控更具侵入性。澳大利亚数据保留法要求存储全民的通讯元数据,曾有读者仅用部分数据即可定位个人住址。

滥用风险与渐进侵蚀

  • 大规模监控数据库易被滥用:历史上东德斯塔西利用档案迫害异议者,而现代系统更高效;当前授权访问数据的人员可能因好奇心、道德失范或社会工程攻击而泄露信息,对弱势群体(如家暴受害者)构成直接威胁。
  • 隐私并非突然消失,而是通过不断引入新监控系统逐渐侵蚀,最终可能导致自由社会的根基崩塌。

呼吁行动

  • 技术从业者可参与"Hack for Privacy"等组织对抗监控。
  • 公众应传播隐私意识,通过加密等技术保护个人数据,增加大规模监控的成本。
  • 警惕国际协定(如跨太平洋伙伴关系协定)对隐私权的潜在威胁。
7. Show HN: Execute JavaScript in a WebAssembly QuickJS sandbox (github.com)

文章摘要:在WebAssembly QuickJS沙箱中执行JavaScript

本文介绍了一个TypeScript包,它利用编译为WebAssembly的轻量级QuickJS引擎,在安全隔离的沙箱环境中执行JavaScript和TypeScript代码,特别适用于运行不受信任的代码。

核心特性

  • 安全性:在隔离环境中安全运行代码。
  • Node.js基础模块:支持常用标准Node.js模块。
  • 虚拟文件系统:可挂载虚拟文件系统。
  • 自定义模块:支持挂载自定义Node模块。
  • Fetch客户端:可注入Fetch客户端进行HTTP(S)请求。
  • 测试工具:内置测试运行器和基于Chai的断言库。
  • 高性能:得益于QuickJS引擎的轻量与高效。
  • 易集成:可轻松集成到现有TypeScript项目中,提供用户友好的API。

基本用法

包通过loadQuickJs加载QuickJS引擎(推荐只执行一次),并使用SandboxOptions配置沙箱选项(如允许Fetch、挂载文件系统、设置环境变量)。随后,通过runSandboxed函数在沙箱中评估代码。示例展示了如何在沙箱内使用path.join、访问环境变量、调用fetch,并最终返回执行结果。

技术基础与许可

该包基于quickjs-emscriptenquickjs-emscripten-syncmemfsChai构建,开发中使用了Bun、Biome、Hono等工具。项目采用MIT许可证。

8. Kivy – a cross platform Python UI framework (kivy.org)

Kivy 是一个跨平台的 Python 用户界面(UI)框架,具有以下核心特点:

  • 开源许可:基于 MIT 许可证发布,完全免费使用。
  • 专业维护:由专业团队开发、支持和维护。
  • 广泛应用:被众多企业和个人日常用于各类项目开发。

该框架专注于跨平台 UI 开发,为 Python 开发者提供了一套高效且免费的工具。

9. Why Italy Fell Out of Love with Cilantro (www.atlasobscura.com)

意大利与芫荽(香菜)的疏离:一段被遗忘的烹饪史

在古罗马时期,芫荽(又称 coriander)曾是意大利烹饪的核心。五世纪罗马食谱《Apicius》中,约18%的菜肴使用了芫荽的种子或叶子,用于酱汁、沙拉、烤肉和调味饮品。罗马人称其为 coriandrum,该植物在意大利本地广泛种植,同时因需求旺盛也从埃及等地进口,从贵族到平民各阶层都食用它,甚至用于医药和食物防腐。

然而,到1891年出版的《现代意大利烹饪基石》——佩莱格里诺·阿尔图西的《厨房里的科学与饮食的艺术》中,芫荽叶已从近800个食谱中消失,仅种子出现在四种甜点里。作者甚至警告读者警惕用廉价芫荽种子掺假的肉桂粉,这表明芫荽在19世纪末意大利虽存在但已边缘化。

锡耶纳大学的烹饪历史学家卡里玛·莫耶尔-诺基指出,芫荽使用锐减始于罗马帝国衰落之后。日耳曼部落(如西哥特人)缺乏使用芫荽的传统,随着帝国文化吸收这些影响,芫荽逐渐过时。同时,芫荽因本地易得而缺乏稀有香料的象征地位。中世纪时,意大利人将香料分为“甜味”和“浓烈”两类,芫荽被归入后者(如胡椒),使用频率降低;其叶子更因风味与当时流行的玫瑰水等进口食材冲突而彻底失宠,甚至被16世纪的植物学家形容为“臭虫气味”。

文艺复兴后,法国饮食文化崛起,取代了意大利的烹饪领导地位。法国厨师摒弃了意大利传统的复合香料酱,偏好新鲜香草和精准食材搭配。意大利厨师追随法国风潮,在19世纪民族国家统一时形成的现代意大利烹饪中,芫荽未被复兴,反而被彻底边缘化。

如今,芫荽在意大利极为有限:部分地区的 porchetta(烤猪肉)仍使用芫荽种子调味,但叶子基本消失,需要特殊渠道或自己种植。现代意大利人视芫荽为“外来成分”,它不符合意大利自我表达的“烹饪语法”。有趣的是,其他香草如罗勒虽源自亚洲,却被视为意大利象征;而芫荽虽有千年本土历史,却成了身份区分的“文化标记”。

文章最后指出,许多国家将外来食材融入自身文化,但意大利的芫荽故事表明,反之亦然:一种食材可能因历史、文化变迁而淡出记忆,即便它曾深深扎根于该国的饮食传统中。

10. Guide to attending a space launch in person (countdowntoignition.com)

亲自观看太空发射指南摘要

本指南旨在帮助航天爱好者规划行程、选择发射场并做好现场观看太空发射的全面准备。

全球主要发射场指南

文章梳理了全球活跃发射场的交通、观测点及门票政策:

  • 美国:肯尼迪航天中心/卡纳维拉尔角是首选,提供官方观测区(需购票)及公共海滩等免费点;SpaceX星港和范登堡空军基地有特定公共观测区;蓝色起源发射场不对外开放。
  • 亚洲与大洋洲:日本种子岛和内之浦提供抽签或公共观测点;印度萨蒂什·达万需免费申请通行证;中国四大发射场通常仅限本国公民参观;新西兰Rocket Lab发射场不对外开放。
  • 欧洲及其他:圭亚那航天中心需提前在线免费预约;俄罗斯发射场因战争不建议前往;英国新建发射场政策尚不明确。

发射计划与常见火箭

  • 主流火箭:当前发射频率最高的是SpaceX猎鹰9号,其次为中国长征系列和Rocket Lab电子号等。
  • 应对推迟:发射极易因天气或机械故障推迟。强烈建议制定备用行程计划,并了解门票在推迟时的改期或失效政策。发射窗口仅为预估,需做好长时间等待的准备。

现场体验与物资准备

  • 典型流程:需提前数小时抵达,经安检后乘接驳车前往观测区。等待时间长,发射瞬间震撼,结束后需面对交通拥堵。
  • 必备物品:建议自备饮用水、充电宝、望远镜、折叠椅、手机三脚架、防晒霜及雨具,现场物价较高。
  • 摄影建议:现场摄影难度较大,建议参考专业摄影师的长焦拍摄技巧。

替代方案与扩展信息

  • 线上直播:可通过spacetv.net或NASA、SpaceX、ESA等官方渠道观看高清直播。
  • 发射类型:科普了轨道、亚轨道、空射和海射的区别,以及载人与无人发射的差异。
  • 其他资源:推荐通过特定网站肉眼观测国际空间站;指出发射数据主要源自Launch Library 2 API;推荐了Reddit等交流社区,以及《The Case for Space》、《阿波罗13号》和《火星救援》等相关书籍。
11. Ask HN: Where are the good resources for learning audio processing?

关于音频处理的学习资源,讨论中主要提及以下方面:

核心学习路径与研究文献

  • 建议首先学习搜索和阅读研究文献,认为这是超越浅层实践的关键。
  • 推荐关注MTG Barcelona(巴塞罗那音乐技术小组)的出版物,其研究涉及时间-频率变换、谐波器和时间拉伸等,可搜索Jordi Bonada、Alex Loscos等人的论文。
  • 早期研究(如1990年代)可能很有价值,可检索DAFX、ICMC、IEEE Mohonk、ACM Multimedia、JAES等会议论文,关键词包括“WSOLA”、“Lent’s algorithm”。
  • 可查阅musicdsp邮件列表的历史存档,其中讨论过多种音高变换算法。也可研究Creative Labs、Eventide、Antares等公司的已失效专利。

推荐书籍与教材

  • 《DAFX - Digital Audio Effects》(第二版,Udo Zölzer编)是不错的参考书,尽管示例使用MATLAB。
  • 《Understanding Digital Signal Processing》(Richard Lyons著)是全面的DSP入门书,但部分解释可能较为简略。
  • 可补充阅读OppenheimManolakis的经典DSP教材以加深理解。
  • Will Pirkle的书籍包含大量有用信息和代码,适合入门,但需注意音频编程要求高,音频线程中需避免锁和内存分配。

实践工具与实验方法

  • LabView可作为计算引擎进行实验,优势在于提供系统级图表。
  • GNU Radio易于处理音频I/O,可跨平台构建流图(flow graphs)并执行。
  • 有人建议使用带麦克风的微控制器开发板(如STM32 Discovery系列)进行从音频接收到DSP处理再到输出的实践,但此建议存在争议,被质疑对理解音高变换算法帮助有限。
  • 在普通笔记本电脑上利用各操作系统丰富的底层音频处理库进行实验是可行的替代方案。

行业标准与开源库参考

  • Zynaptiq公司的Elastique是业界标准的时间拉伸库(非开源),被Ableton、FL Studio等采用。
  • Rubberband库是可查看源码的时间拉伸/音高偏移算法实现,也被Reaper数字音频工作站使用。可下载Reaper试用版聆听不同参数设置的效果。
  • Airwindows插件虽开源,但代码质量差(如魔术数字、简短变量名、可读性差、项目结构奇怪),不适合作为学习DSP的资源。

经典效果器与聆听实践

  • 在尝试编写自己的实现前,应花时间体验现有实现,以明确个人喜好和行业基准。经典效果器包括Eventide H3000、iZotope Vocal Synth、TC Voice Live、Antares Harmony Engine、Soundtoys Little Alterboy等。
  • 许多现有效果器在低频表现或响应速度上可能存在不足(需外部包络处理),了解这些能为开发提供方向。

学习环境与社群建议

  • CCRMA(斯坦福大学计算机音乐与声学研究中心)被强烈推荐,因其是FM合成的发源地,拥有顶尖的项目。
  • JUCE开发者大会等行业活动是接触VST插件开发者的好机会。
  • 有人强调音频领域“一半是艺术,一半是科学”,建议寻找有经验的人指导,或参加大学公开课。
12. Fabric is an open-source framework for augmenting humans using AI (github.com)

Fabric 开源框架摘要

核心定义与目的 Fabric 是一个开源框架,旨在通过 AI 增强人类能力。其核心观点是:当前 AI 的主要问题不是能力不足,而是集成困难。为此,它专注于组织和整理 AI 的基本单元——提示词(Prompts),并称之为“模式”(Patterns),以便用户将重要的 AI 解决方案集成到日常工作和工具中。

主要特点与功能

  1. 模式管理:将提示词按真实世界任务进行组织、创建和收集,便于在命令行或各类工具中复用。
  2. 广泛兼容:支持众多 AI 提供商,包括 OpenAI、Anthropic(Claude)、Google Gemini、Ollama(本地模型)、Azure OpenAI、Amazon Bedrock 等主流服务及多个兼容 OpenAI 的提供商。
  3. 多功能命令行工具:提供丰富的命令行选项,用于选择模式、设置模型参数(温度、top_p等)、处理输入(如 YouTube 视频、网页、剪贴板内容)及控制输出(流式、文件输出、复制到剪贴板)。
  4. REST API 服务器:内置 HTTP 服务器,暴露核心功能,便于程序化调用,并支持 Ollama 兼容模式。
  5. 提示词策略:集成了“思维链”、“草稿链”等多种推理策略,可通过 --strategy 参数应用,以优化不同任务的思考过程。
  6. 自定义模式:用户可创建私人模式,与内置模式分开存储,避免更新时被覆盖。
  7. 辅助工具:包含 to_pdf(LaTeX 转 PDF)、code2context(生成代码上下文)、generate_changelog(生成更新日志)等工具,增强工作流集成。
  8. 国际化与可扩展性:支持多语言界面,提供 Shell 补全脚本,并可通过插件和扩展增强功能。

安装与使用

  • 安装方式多样:提供一键脚本、包管理器(Homebrew, Scoop, AUR)、从源码编译(Go 语言)及 Docker 镜像。
  • 基本使用:通过 fabric --pattern <模式名> 配合管道输入(如 pbpaste |)执行任务,支持流式输出、变量设置、模型选择等。
  • 环境配置:首次使用需运行 fabric --setup 进行配置,包括设置 AI 供应商的 API 密钥。

更新与发展 框架自 2025 年末起快速迭代,近期主要更新包括:

  • 支持更多 AI 模型与供应商(如 Claude Opus 4.7、OpenAI Codex、Azure AI Gateway、GitHub Models、Venice AI 等)。
  • 完善国际化,支持德语、法语、中文等多种语言。
  • 增加新平台支持(如 Linux ARM、Windows ARM)。
  • 增强 API 文档(Swagger UI)和网页抓取工具(Jina AI)。
  • 引入交互式 HTML 概念图生成等新模式。

核心理念 Fabric 倡导 AI 是“人类创造力的放大器”,旨在通过技术帮助人类繁荣。其方法论是将复杂问题分解为组件,并分别应用 AI 处理,同时致力于解决提示词的发现、管理与版本控制难题。

社区与支持 该项目由核心贡献者与社区共同维护,提供 Web 界面作为图形化替代方案,并欢迎通过赞助支持其发展。

13. Show HN: Bash Dungeon – An educational dungeon crawler in the shell (github.com)

Bash Dungeon:终端地牢探险游戏摘要

游戏简介

Bash Dungeon 是一款使用 Bash 命令行界面运行的地牢探险游戏。其核心创意是将目录结构作为游戏中的地牢关卡,玩家通过执行基础的Shell命令(如 cdlscat)在“地牢”中移动、查看和互动。

该游戏的灵感来源于 Dungeons And DirectoriesBash Crawl。其主要设计目的是以有趣和互动的方式,帮助新用户学习和熟悉Shell命令

安装与运行

目前,游戏提供了三种主要的运行方式:

  1. 在线体验 (GitPod)

    • 用户需要注册一个免费的 GitPod 账户。
    • 通过提供的专用链接(Bash Dungeon GitPod)即可在云端开发环境中运行游戏。
  2. 使用 Docker

    • 前提:本地安装 Docker。
    • 拉取游戏镜像:docker pull wolandark/bash-dungeon
    • 启动容器:docker run -it wolandark/bash-dungeon
  3. 本地运行

    • 从代码仓库克隆项目。
    • 使用 cd 命令进入游戏目录。
    • 在游戏目录内,通过 cat 命令阅读“羊皮卷”(parchment)来开始游戏并获取指引。

基本玩法

玩家只需掌握三个基础命令即可开始探索:

  • cd:用于在不同目录(房间)之间移动。
  • ls:用于查看当前目录(房间)下的文件(物品、线索或出口)。
  • cat:用于查看文件内容(例如阅读羊皮卷或获取故事信息)。

文中给出的初始操作示例:

cd bash-dungeon
ls
cd Enter
ls
cat parchment

社区参与

该游戏仍处于开发中(WIP) 状态。作者欢迎社区参与:

  • 讨论与想法:鼓励用户开启新的讨论来分享点子。
  • 问题反馈:若发现错误或问题,可提交 issue。
  • 代码贡献:提交 Pull Request 时,建议遵循 Conventional Commits 规范。
15. Show HN: BeaconDB – An Alternative to Mozilla Location Services (beacondb.net)

BeaconDB 是一个开源、注重隐私的定位服务数据库,旨在替代 Mozilla Location Services。

核心特点:

  • 道德数据收集:仅通过用户主动选择(opt-in)的方式收集数据。
  • 隐私友好:发布的数据经过模糊处理,以保护信号发射器(如 Wi-Fi 热点)和贡献者的隐私。
  • 抗滥用:更新现有数据需要物理范围内的验证信息。

如何贡献数据: 用户可以通过以下手机应用提交数据以扩展覆盖范围:

  1. NeoStumbler:用户友好的应用,在设置中选择 beaconDB 端点即可。
  2. Tower Collector:收集蜂窝基站数据的成熟应用,最新版本默认上传至 beaconDB。
  3. Network Survey:功能全面的本地数据收集工具,需在设置中启用 beaconDB 上传。

提交的数据将被聚合并通过 API 提供。未来计划发布模糊处理后的公共数据转储。

如何使用: 项目目前处于实验阶段,可能不准确。如果无法通过 Wi-Fi 定位,会回退使用来自 MLS 的蜂窝基站数据或基于 IP 的估算。提交的数据需等待至少5分钟才可用。

客户端配置:

  • microG:在 Android 的 microG 设置中,可将 beaconDB 选为在线位置服务。
  • geoclue:在 Linux 中,可通过修改配置文件将 beaconDB 设为 Wi-Fi 定位数据的来源 URL。
  • Firefox:可通过 about:config 修改设置,或使用 geoclue 后端。

开发者信息:

  • 提供了一个与 MLS/Ichnaea API 兼容的端点 (/v1/geolocate),使用时需设置用户代理标识。
  • 源代码和问题追踪器位于 Codeberg,并提供 Grafana 监控面板和 Mastodon/Bluesky 更新渠道。

项目资源:

  • 源代码托管在 Codeberg。
  • 提供服务监控仪表板、更新公告渠道、Matrix 讨论室及捐赠链接。
16. Malloc broke Serenity's JPGLoader, or: how to win the lottery (2021) (sin-ack.github.io)

在SerenityOS中,作者调查了一个JPG图片颜色显示错误(红色和蓝色通道互换)的bug。最初以为是简单的RGB与BGR颜色顺序混淆,但更改代码中的颜色参数顺序后,图片虽能正常显示,问题却并未解决。

为了找出根本原因,作者使用git bisect在近1000个提交中进行排查。由于该项目拥有自己的标准库AK,任何对AK的修改都会触发整个操作系统(约3400个文件)的完全重新编译,导致调试过程非常耗时。

最终定位到引入问题的提交:f89e8fb7,其内容是实现了malloc_good_size()函数并将其用于VectorHashTable的容量优化。令人意外的是,问题源头并非直接的颜色处理代码,而是HashTable的容量计算方式变化所引发的。

深入分析发现,SerenityOS的JPGLoader存在一个设计缺陷:它将本应有序存储的JPG图像组件(Y, Cb, Cr)错误地存放在了HashTable中。迭代HashTable时,元素的返回顺序是不确定的,这通常会导致处理顺序错乱。然而,在malloc_good_size()引入之前,系统恰好满足了一种“巧合”:特定的哈希函数(int_hash)和HashTable的桶数量,使得组件被迭代时刚好能按正确的顺序(Y, Cb, Cr)被访问,从而掩盖了这个错误。

malloc_good_size()优化了内存分配后,HashTable的桶数量发生了变化,打破了原有的“巧合”,组件的迭代顺序变得随机且错误,导致霍夫曼解码流读取顺序异常,最终使得图片的红蓝通道互换。

根本原因与修复: 问题的根源在于JPGLoader错误地使用了无序容器(HashTable)来存储和处理需要严格顺序的数据。修复方法(提交a10ad24c)是重构JPGLoader,使其采用确定性的方式(例如使用数组或有序列表)来遍历组件,从而彻底消除了对哈希迭代顺序的隐式依赖。

这个案例说明,一个看似简单的显示错误,其背后可能隐藏着深层次的设计问题,并且可以被偶然的运行时条件长期掩盖。

17. Inline previous result in Emacs Lisp (xenodium.com)

背景与动机

在 Emacs Lisp 开发中,Edebug 是理解和定制 Emacs 的重要调试工具。然而,默认情况下 Edebug 会将前一个表达式的求值结果显示在窗口底部的 minibuffer(迷你缓冲区)中。这导致开发者在单步调试时,视线需要在代码和 minibuffer 之间频繁跳转,影响了调试体验。

目标

将 Edebug 的调试结果直接内联(inline)显示在代码的当前光标位置,以最小化视线移动。

源码定位

通过分析按键绑定(使用 helpful-key)以及在 edebug.el 源码中搜索 "Result:" 字符串,作者定位到了负责计算和显示结果的两个核心函数:

  • edebug-compute-previous-result:负责计算并拼接结果字符串。
  • edebug-previous-result:负责调用 message 函数将结果输出到 minibuffer。

实现方案

由于原函数未提供配置选项,作者利用 Emacs 的 advice-add 机制(Monkey Patch)对这两个函数进行了拦截与重写:

  1. 优化结果计算:通过 advice 重写 edebug-compute-previous-result,去除了默认的 "Result:" 前缀以及不常用的格式化输出(eval-expression-print-format),仅保留纯粹的结果字符串。
  2. 实现内联渲染:通过 advice 重写 edebug-previous-result,引入了 eros(Evaluation Result OverlayS for Emacs Lisp)包。使用 eroseros--make-result-overlay 函数替换原有的 message 函数,将结果以 Overlay 的形式直接渲染在当前光标(point)位置。

总结

该技术方案通过 Emacs 的 advice 机制结合 eros 包,成功实现了 Edebug 调试结果的内联显示。尽管代码中调用了私有函数,但该修改随时可以通过 advice-remove 轻松撤销。此方案在保持系统灵活性的同时,显著改善了 Emacs Lisp 开发者的调试视觉体验。

18. Against the burden of knowledge (www.theseedsofscience.pub)

《Against the burden of knowledge》文章总结

核心背景

文章探讨了研发投入(R&D)大幅增加但生产力增长率停滞的现象(即“创意是否越来越难找”)。针对这一问题,作者重点分析并反驳了“知识负担”(burden of knowledge)假说。

“知识负担”假说及其证据

该假说认为,随着人类知识的积累,新研究者必须花费更多时间学习已有知识才能触及前沿,从而导致创新变难。支持该假说的经验证据包括:

  • 学术作者和诺贝尔奖得主取得突破的平均年龄不断上升。
  • 论文和专利越来越多地由大型团队合作完成,以应对知识细分。
  • 研究者跨领域贡献减少,专业化程度不断加深。

对“知识负担”假说的反驳

作者从三个维度反驳了该假说,认为其不足以解释研发投入与生产力增长的脱节:

1. 科学史中的知识替代效应

知识并非单纯线性累积,新发现往往会完全取代旧知识,从而消除旧有的“知识负担”。例如,哥白尼的日心说取代了繁琐的托勒密地心说(本轮模型),以及符号代数取代几何、化学取代炼金术。科学进步通常不需要掌握所有过往知识,教育投资成本未必持续增加。

2. 专业化与工具贸易加速创新

面对知识积累,现代研究者通过专业化和使用复杂工具(如个人电脑、超级计算机、电子显微镜)来应对。研究者无需掌握工具背后的所有深层知识,只需作为用户。这种基于专业化和贸易的分工不仅没有拖累创新,反而通过利用积累的知识成果加速了科学发现与技术进步。

3. 学术体制衰退的替代解释

研究者老龄化、团队规模扩大和领域窄化等现象,同样可以用“学术体制衰退”来解释。当前学术界存在规避风险的资助和审查机制、偏好渐进式研究、以及排他性导致的高门槛等问题。与“知识负担”这一被视为不可避免的进步代价不同,体制衰退是可以通过“元科学”(metascience)和重新设计学术机构来解决的。

结论

尽管“知识负担”假说具有直观的逻辑并得到部分经验数据的支持,但新领域的开辟和新工具的应用有效抵消了这一负担。无论从理论还是经验来看,“知识负担”都不太可能是导致研发投入增加而生产力增长停滞的主要原因。

19. "Out of Band" network management is not trivial (utcc.utoronto.ca)

这篇文章介绍了作者针对网站(个人博客及关联的CSpace维基)采取的一种“带外”网络安全管理措施,主要用于防御滥用性网络爬虫。其核心机制是通过分析HTTP请求头中的“Sec-CH-UA-*”系列(用户代理客户端提示)信息,来识别并阻断可疑的爬虫访问。

作者指出,由于存在大量使用伪造用户代理(User-Agent)的恶意爬虫(部分目的是为大型语言模型收集数据),系统会对那些声称是正常浏览器(如Chrome)但发送的Sec-CH-UA-*头部信息存在矛盾或异常的请求进行拦截。这些可疑的异常情况包括:

  1. 在理应支持且被要求发送这些头部的Chrome版本中缺失相关头部(例如,用户使用了禁用这些头部的隐私扩展)。
  2. Sec-CH-UA-Platform头部的值与用户代理字符串中声明的平台不符。
  3. Sec-CH-UA头部中声明的品牌(如Chromium)版本与用户代理字符串中的版本信息不匹配。
  4. Sec-CH-UA头部表明请求来自无头模式的Chrome,而无头模式常被爬虫滥用。

作者强调,这种管理方式并非无差别的封锁,而是为了应对持续的爬虫滥用问题。如果正常用户被误拦,可以通过指定邮箱联系作者并提供详细的浏览器和用户代理信息。但对于那些故意模仿主流浏览器用户代理的爬虫软件,作者表示不再提供豁免。

用户可以通过Chrome的开发者工具检查自己浏览器发送的Sec-CH-UA-*头部,以确认是否可能触发该安全策略。此措施本质上是在网络管理中,利用浏览器提供的标准化技术规范(User Hints)作为一项额外的验证和识别层,来区分合法流量与恶意自动化流量。

20. Scientists re-emerge after a year in Mars simulation project (www.dw.com)
21. From the Transistor to the Web Browser, a rough outline for a 12 week course (github.com)

从晶体管到Web浏览器:12周课程大纲概要

本课程旨在通过一系列构建在相互关联的实践项目,帮助学员从第一性原理理解现代计算机全栈。课程时长为12周,主要使用软件模拟(如Verilator)来替代部分真实硬件需求,以提高可及性。

第1部分:引言:跨过晶体管(0.5周)

  • 核心概念:理解FPGA由晶体管构成,集成电路是晶体管的可靠封装。初步了解现场可编程门阵列(FPGA)的构建模块(如查找表LUT)。
  • 方法:理论简介后,采用软件仿真(如Verilator)进行后续所有项目,确保课程可在任何计算机上运行。

第2部分:启动:硬件使用什么语言?(0.5周)

  • 实践项目
    1. LED闪烁:在Verilog中编写第一个模拟程序,设置仿真环境。
    2. 构建UART:通过复制一个通用异步收发器(UART)来学习Verilog,引入内存映射IO(MMIO)概念,并编写串口回显测试程序。

第3部分:处理器:到底什么是处理器?(3周)

  • 实践项目
    1. 编写汇编器:使用Python编写,将ARM汇编转换为二进制。
    2. 构建ARM7 CPU:用Verilog实现一个可模拟和综合的、具有简单流水线的CPU。
    3. 编写引导ROM:使用汇编语言,创建允许通过串口将代码下载到RAM的初始程序。

第4部分:编译器:一门“高级”语言(3周)

  • 实践项目
    1. 构建C编译器:使用Haskell编写,实现解析器,输出ARM汇编。
    2. 构建链接器:使用Python编写,生成ELF格式文件。
    3. libc与内存分配:用C实现基础库(如memcpy, printf)和堆管理器(malloc)。
    4. 构建以太网控制器:用Verilog编写,设计MMIO接口与物理层芯片(PHY)通信。
    5. 编写引导加载程序:用C编写,实现通过UDP网络协议启动内核。

第5部分:操作系统:我们视为理所当然的软件(3周)

  • 实践项目
    1. 构建MMU:用Verilog实现ARM9风格的内存管理单元,解释TLB等概念。
    2. 构建操作系统:用C编写一个类UNIX系统,支持用户空间线程、基本系统调用(open, fork, mmap等)。
    3. SD卡驱动与FAT文件系统:分别用Verilog和C实现SD卡通信驱动和FAT文件系统。
    4. 首个用户空间程序:实现init、shell、文件下载、cat、ls、rm等实用工具。

第6部分:浏览器:接入网络(1周)

  • 实践项目
    1. 构建TCP协议栈:用C在内核中实现,集成以太网驱动并添加网络相关系统调用。
    2. telnetd服务:用C编写,演示多进程能力,允许多个用户通过Telnet连接。
    3. 动态链接:用C实现一个节省空间的动态链接器。
    4. 文本模式Web浏览器:用C编写一个基于终端(ANSI)的浏览器,并动态链接以保持灵活性。

第7部分:物理:在真实硬件上运行(1周)

  • 实践项目
    1. 与FPGA通信:编写C代码,通过USB微控制器实现JTAG协议位摇摆。
    2. 构建FPGA开发板:涉及电路板设计、FPGA回流焊、以及包含时钟、串口、以太网口等外设的硬件组装。
    3. 硬件启动:将Verilog设计编译并下载到实际构建的FPGA开发板上。

课程通过这种循序渐进的方式,引导学员完成从最底层的硬件描述到顶层网络应用的完整堆栈构建,最终目标是实现一个能在自制硬件上运行并访问Web的文本浏览器。

22. A Few Notes on the Culture by Iain M Banks (theculture.adactio.com)

《文明》(The Culture)世界观设定摘要

背景与政府 “文明”是一个由七至八个人形物种组成的星际联邦,拥有约九千年历史。太空环境的自给自足特性削弱了传统国家或企业的控制力,使得太空社会必然走向“内部社会主义,外部无政府主义”的形态,飞船与栖息地的独立与叛乱比在行星表面更容易实现。

经济与技术 “文明”实行高度发达的计划经济,摒弃了盲目且残酷的市场机制。社会高度自动化,人类与人工智能(AI)和谐共存,没有任何人类或机器遭到剥削。低级机器负责基础生产,而人类和高级AI则从事充满智力挑战且令人享受的监督与创造性工作。

哲学与生活方式 社会秉持理性、怀疑和唯物主义,认为生命的意义由个体自我创造,教育的核心是让人们认识到自身的幸运并维持这种乌托邦。公民通过基因改造拥有更高的智力、健康的体魄以及自主控制生理机能(如自由改变性别、通过“药物腺体”调节情绪)的能力,寿命长达350至400岁。死亡被视为自然规律,最常见的葬礼是将遗体送入恒星核心。

旅行与栖息地 星际飞船具备独立意识(“心智”),其中通用系统飞行器(GSV)是代表整个文明技术与信息的巨型飞船。极少数人居住在行星上,大多数居民生活在小行星或巨型人造栖息地“轨道环”(Orbitals)中。轨道环通过自转产生重力与昼夜交替,具有极高的物质利用率和生态友好性。

法律与政治 社会没有传统法律,依靠“礼貌”、社会排斥和舆论来维持秩序。最严重的罪行是谋杀,惩罚是分配一个“巴掌无人机”(slap-drone)进行终身监视。政治决策通过全民公投进行,权力高度分散,渴望权力者往往无法掌权,社会呈现出长期的和平与稳定。

身份、命名与宇宙学 家庭结构松散多元,命名系统包含出生星系、轨道环、给定名、选择名、家族名和庄园名等详细信息。在虚构的宇宙学模型中,宇宙被描绘为类似洋葱或甜甜圈的多重膨胀结构,星舰通过穿越不同宇宙层之间的“能量网格”(Energy Grid)来实现超空间航行。

24. Show HN: I made an open source Mailchimp RSS-to-Email alternative (github.com)

项目概述

rss2newsletter 是一个开源工具,旨在替代 Mailchimp 的 RSS-to-Email 功能,将 RSS/Atom 订阅源自动转换为电子邮件新闻通讯。该项目强调极简、免费和低成本,通过集成 listmonk 和 Amazon SES 发送邮件,可显著降低每月电子邮件营销费用(根据发送量,可能节省数十至数千美元)。

主要功能和优势

  • 自动化转换:支持任意 RSS/Atom 源(如博客、社交媒体、新闻网站),自动抓取内容并生成新闻通讯。
  • 内容增强:利用网站 OpenGraph 元数据自动获取内容图像,提升邮件吸引力。
  • 便携轻量:系统要求低,可在任何计算机上 24/7 全能力运行,无最低硬件限制。
  • 集成方案:与 listmonk 服务器结合使用,listmonk 作为单一二进制文件支持 Amazon SES 等邮件服务商。
  • 成本效益:完全免费开源,替代 Mailchimp 等专有解决方案,大幅降低运营成本。

入门指南

  1. 安装 listmonk:下载 listmonk 服务器二进制文件,一键启动并配置邮件服务商(如 Amazon SES)。
  2. 安装 rss2newsletter
    • 通过 pip3 命令安装:pip3 install rss2newsletter
    • 或克隆 Git 仓库并运行 install.sh 脚本(需 Python 环境)。
  3. 配置和使用
    • 创建配置文件(默认为 rss2newsletter.conf)和设计电子邮件模板。
    • 运行 rss2newsletter 命令启动活动和发送邮件。
    • 使用示例:rss2newsletter --help 查看帮助选项。

使用场景与注意事项

  • 适用于个人博客、团队内容更新、新闻订阅等,建议仅发送高质量、非垃圾邮件内容。
  • 项目采用 AGPL 许可证(Copyright (C) 2024 Elliot Killick),选择 copyleft 许可证以应对专有电子邮件营销解决方案的垄断;如有企业需求,可联系作者协商替代许可。

支持作者

  • 可通过作者提供的附属链接(如 BuyVM VPS 服务)支持项目开发。