2024-01-18

50 篇热帖

1. Losing my son (www.fortressofdoors.com)

作者的七岁儿子尼古拉斯在接受先天性疾病治疗时发生心脏骤停,虽经抢救存活,但遭受了严重的、不可逆的脑损伤。MRI结果证实大脑广泛受损,康复无望,仅可能依靠奇迹。

儿子目前处于植物人状态,有睡眠-觉醒周期,能自主呼吸并对刺激有反射性反应,但无法有意识地行动或言语。作者夫妇将其接回家进行临终关怀,停止了人工呼吸机、静脉注射等积极医疗支持,只提供喂食管、止痛药和日常护理,且不排除其存活多年的可能。这带来了巨大的日常护理负担、经济压力和行动限制,但作者夫妇拒绝安乐死,也拒绝通过过度医疗手段延长生命。

这一悲剧促使作者做出重大人生改变:他结束了十余年的独立游戏开发职业生涯,原定于2023年底发售的游戏《Defender's Quest 2: Mists of Ruin》将转由团队同事主导完成;作者本人转而从事房地产批量评估的技术工作,以寻求更稳定的收入来支撑家庭。同时,他负责的其他项目(如GameDataCrunch.com)也已终止。

作者描述了内心的复杂感受:最初抱有希望时最痛苦,确诊后反而能接受“失去”的现实。他发现巨大的悲痛并非像想象中那样需要“艰难挣扎”,而是一种被动降临的可怕状态。他坦言自己无法持续哭泣,且认为流泪时反而是相对好受的时刻。他理解外界的关心与不知所措,并指出自己若处于他人位置也会如此。

作者强调,尽管悲伤,但他努力拥抱生活中的快乐。他批判那种以悲剧宣扬虚无主义的做法,并指出历史上儿童夭折极为普遍,而现今其遭遇在发达国家已属罕见,这本身是社会进步的体现。最后,他引用长老的话来表达面对深渊时的哲学:在绝望的边缘,若无法承受,便稍作退后,喝杯茶。

2. Which word begins with "y" and looks like an axe in this picture? (2021) (english.stackexchange.com)

该内容显示,原始网页的标题为“Which word begins with 'y' and looks like an axe in this picture? (2021)”,但页面主体并非该文章的实际内容,而是被一个安全验证页面所取代。

这是一个由Cloudflare提供的安全屏障页面(“Just a moment...”),用于在访问目标网页前进行人机验证。页面的核心结构和技术要点如下:

  • 主要目的:拦截请求,要求访客启用JavaScript和cookies,并通过Cloudflare的挑战才能继续访问。
  • 技术实现:页面包含详细的元数据(Meta标签),如字符集设置、视口配置和机器人指令(noindex,nofollow)。其核心是一个严格的内容安全策略(CSP),限制了脚本、样式、图片等资源的加载来源。
  • 用户交互:页面明确提示需要“Enable JavaScript and cookies to continue”。如果JavaScript被禁用,将显示错误信息。
  • 验证流程:页面主体部分加载了一个由Cloudflare提供的JavaScript脚本,该脚本携带大量配置参数(如_cf_chl_opt对象),用于管理和执行后续的“managed”类型挑战。该脚本在头部执行,以设置验证环境并可能发起挑战请求。
  • 元刷新:页面包含一个元刷新指令(<meta http-equiv="refresh" content="360">),设置为360秒后自动刷新,可能是超时重试机制的一部分。

总之,当前页面是一个技术性的安全拦截层,并非查询“以‘y’开头且形状像斧头的单词”这一问题的答案本身。访问者需完成Cloudflare的验证过程。

5. AlphaGeometry: An Olympiad-level AI system for geometry (deepmind.google)

AlphaGeometry:一个达到奥林匹克竞赛水平的AI几何系统

AlphaGeometry是一个能够解决复杂数何问题的AI系统,其水平接近人类国际数学奥林匹克(IMO)金牌得主。在针对30道 IMO 几何题的基准测试中,AlphaGeometry在规定的竞赛时间内解决了25道题。相比之下,此前最先进的“吴方法”解决了10道题,而人类金牌得主的平均解题数为25.9道。

该系统采用了神经符号方法,结合了神经语言模型符号演绎引擎,二者协同工作以寻找复杂几何定理的证明。语言模型能够快速识别数据中的模式,预测可能有用的新几何构造(如点、线或圆);符号演绎引擎则基于形式逻辑,使用明确规则进行严格推理。这种协作类似于“快慢思考”的结合。

为了解决训练数据缺乏的瓶颈,团队开发了一种合成数据生成方法。通过高度并行的计算,系统首先生成10亿个随机几何图,穷尽推导图中点线之间的所有关系,并反向推导出证明所需的新构造(称为“符号演绎与回溯”)。经过过滤去重,最终生成了1亿个独特训练样本,无需任何人类示范数据。

AlphaGeometry的所有解答均经过计算机验证。其输出被评价为既可靠又清晰,使用了与学生相似的经典几何规则(如角度和相似三角形),而非通过暴力的坐标代数计算。尽管IMO通常仅包含两道几何题,但AlphaGeometry仅凭几何能力就已能在2000年和2015年的IMO中达到铜牌分数线。

该项目是谷歌DeepMind与纽约大学计算机科学系合作的结果。团队已开源了AlphaGeometry的代码和模型。其长远目标是构建能跨数学领域通用、具备强大推理能力的AI系统,从而拓展人类知识的边界。

6. John Lasseter drew the BSD daemon logo (www.jacobelder.com)

文章作者回忆了在青少年时期对计算和互联网历史的浓厚兴趣,并通过MIT跳蚤市场购买了完整的4.3 BSD手册集,该手册日期为1986年4月。手册包括两个相同的索引副本,适应多用户系统需求,内容由nroff格式化的手册页组成,其中一些比现代UNIX系统中的手册页更短。每本书的封面都展示了著名的“Beastie”守护进程吉祥物,其手持三叉戟象征进程的“forking”(分叉)。在内封面,作者发现封面设计由John Lasseter在Lucasfilm有限公司完成。John Lasseter后来成为皮克斯动画工作室的知名导演,执导了《玩具总动员》、《虫虫危机》等影片;手册出版于1986年4月,而皮克斯于1986年2月从Lucasfilm分拆,因此Lasseter当时已在那里工作。虽然Lasseter不是第一个绘制BSD守护进程标志的人,但他的版本最为流行。文章还提及Hacker News上对此话题的讨论。

7. FAQ on Leaving Google (social.clawhammer.net)

离开谷歌的FAQ摘要

本文作者作为谷歌前工程总监,以FAQ形式分享被裁员的经历和感受,旨在解释事件并帮助同事理解大规模裁员。

事件背景

  • 谷歌进行了新一轮大规模裁员,作者是其中一员,被裁员工包括许多资深员工,作者在谷歌工作了18年。
  • 裁员是谷歌为节省运营成本采取的通用措施,非个人针对;作者因管理团队规模较小(35人,低于典型80+)可能被算法判定为非必要。

对谷歌的看法

  • 谷歌不是一个有意识的个体,而是由多个群体组成的公司,遵循不同流程和文化,因此对“谷歌”产生愤怒或爱恋无意义,它无情感或责任感。

个人反应与情感

  • 作者状态良好:去年谷歌文化变革后,他已预见到裁员可能性并做好心理准备,经历了悲伤阶段。
  • 情感复杂:自豪于在芝加哥建立工程办公室、感激与优秀同事合作、以及解脱于文化冲突和“金手铐”带来的压力。

未来计划

  • 作者无身份危机,拥有众多爱好和兼职事业;首要计划是休假,结束25年以上科技职业生涯后休息恢复。
  • 计划发布两篇文章:一篇回顾自己在谷歌的职业生涯,另一篇分析谷歌文化变化。

发布日期

  • 文章发布于2024年1月10日。
8. Htmx and Web Components: A Perfect Match (binaryigor.com)

Htmx 与 Web Components:完美结合

Web Components 概述

Web Components 是浏览器原生 API,用于创建可重用的自定义 HTML 元素。相比传统 SPA 框架(如 Vue、React)的组件方案,Web Components 无需框架依赖、避免框架特定复杂性、支持跨框架复用,且不依赖框架更新。其核心是通过继承 HTMLElement 类、注册自定义元素,并利用生命周期回调和属性观察器实现功能。

HTMX 简介

HTMX 是一个 JavaScript 库,允许从任意 HTML 元素发起 HTTP 请求,并直接以 HTML 片段形式更新页面。它简化了前端开发,无需 JSON 数据交换和客户端渲染,减少对复杂框架和工具的依赖。但 HTMX 本身缺乏组件化支持,难以封装可重用的 UI 逻辑。

结合方案

将 Web Components 与 HTMX 结合,可以创建框架无关、可重用且灵活的组件库。方案特点如下:

  1. 不使用 Shadow DOM:以保持与 HTMX 的兼容性,并简化样式管理。
  2. 外部配置:组件通过属性暴露内部元素(如容器、内容区),支持外部样式和 HTMX 属性注入。
  3. 采用 Tailwind CSS:简化样式实现,同时保持组件的灵活性和可配置性。

属性映射机制

通过自定义属性命名约定(如 {组件名}:{属性名})实现配置传递。例如:

<info-modal container:class="bg-black/80" content:class="bg-amber-300">

组件内部将属性映射到对应元素,支持默认属性、附加属性和类名覆盖。借助 Components.mappedAttributes 工具方法,实现通用属性处理。

实际应用示例

  1. 可确认弹窗(Confirmable Modal)

    • 结合 HTMX 的 hx-confirm 属性,通过监听 htmx:confirm 事件控制弹窗显示。
    • 用户确认后再执行原请求,实现无刷新交互。
  2. 表单容器(Form Container)

    • 封装表单通用功能(如提交控制、错误处理)。
    • 通过 HTMX 属性(如 hx-post)绑定请求,利用组件内部逻辑处理响应。
  3. 输入组件(Input With Error)

    • 支持 HTMX 验证和实时反馈。
    • 通过属性注入 HTMX 属性(如 input:hx-post),无需组件内置 HTMX 逻辑。

优势与展望

  • 白盒哲学:组件源代码简单、零依赖,鼓励复制和修改,优于黑盒依赖。
  • 灵活性:完全外部配置,可与 HTMX 无缝集成,适用于多种场景。
  • 生态潜力:此类组件库可替代传统框架特定组件,提供更通用、可维护的 UI 解决方案。

结论

Web Components 与 HTMX 的结合解决了 HTMX 缺乏组件化支持的问题,提供了创建可重用、灵活 UI 组件的有效途径。通过通用属性配置机制,组件保持框架无关性,同时充分利用 HTMX 的声明式交互能力,简化开发并提升代码可维护性。

9. WhisperSpeech – An open source text-to-speech system built by inverting Whisper (github.com)

WhisperSpeech:开源文本转语音系统

WhisperSpeech 是一个通过“逆转” OpenAI Whisper 模型构建的开源文本转语音系统。其目标是成为语音领域的 Stable Diffusion——强大、可定制且商业使用安全。

主要特性与进展

  • 开源与许可:代码采用 Apache-2.0 / MIT 许可,模型仅使用授权数据训练。
  • 当前状态:已发布英语版本(基于 LibreLight 数据集),多语言版本即将推出。
  • 最新进展
    • 2024-01-29:训练了一个微型的语义到声学模型,在英语、波兰语、法语数据集上成功实现了法语声音克隆,证明一个标记器可覆盖多种语言。
    • 2024-01-18:通过 torch.compile、KV 缓存等优化,在消费级 RTX 4090 上实现了比实时快 12 倍的推理速度;演示了句内无缝语码切换(如英波兰语混合)及一键声音克隆(如克隆丘吉尔演讲音频)。
    • 2024-01-10:发布了更小更快的语义到声学模型,提升速度且保持质量,并提供了首个克隆示例。
    • 2023-12-10:展示了早期多语言(英语、波兰语)演示,包括声音转换示例。

技术架构 系统采用两阶段的基于标记的流水线,受 AudioLM、SPEAR TTS 和 MusicGen 启发,包含三个核心模型:

  1. 语义模型 (Whisper):将语音转录为语义标记。
  2. 声学模型 (EnCodec):将波形标记化(1.5 kbps)。
  3. 声码器 (Vocos):生成高保真度音频。

社区与资源

  • 资源获取:提供预训练模型和转换后数据集的下载地址(Hugging Face),并可通过 Colab 快速开始。
  • 社区基准:收集了社区贡献的非官方速度和内存使用结果。
  • 未来路线图:收集大型情感语音数据集;在生成时引入情感和韵律条件;推动社区收集自由许可的多语言语音数据;训练最终的多语言模型。

致谢与支持 项目由 Collabora(负责代码与训练)、LAION(负责社区与数据集)、Jülich 超级计算中心(JUWELS Booster)以及 Gauss 超级计算中心(通过 John von Neumann 计算研究所 NIC 提供额外算力)支持。同时感谢社区贡献者。项目也提供相关的商业咨询服务。

10. If you can't reproduce the model then it's not open-source (twitter.com)

这篇文章是Amjad Masad在X平台(原Twitter)上发表的一个观点。核心论点是:开源AI革命尚未真正到来。

作者承认当前有许多令人印象深刻的“开放权重”模型,并感谢这些模型的发布者。但他强调,如果一个模型无法被他人完整地复现,那么它就不能被称为真正的开源。

作者通过一个类比来强化他的观点:想象一下,如果Linux操作系统只发布了可运行的二进制文件,而不公开其源代码。他暗示,仅公开模型权重,而不公开完整的训练数据、代码和流程,就如同只发布二进制文件一样,违背了开源的本质精神。

总结来说,文章的主要观点是:真正的开源AI不仅在于发布模型权重,更在于提供足够的信息让社区能够完全复现该模型。

11. Ask HN: 9-yo son wants to build a game, I'm lost. What can I do?
12. Apple's bad faith 27% tax on web purchases (twitter.com)

内容概述

提供的HTML代码是一个网页文档,用于显示X(原Twitter)平台上的一条推文,推文作者为Tim Sweeney(@TimSweeneyEpic)。内容核心是批评苹果公司对网络购买征收27%税的政策。以下从技术目的、结构和关键功能进行总结。

技术目的

该HTML页面的主要目的是渲染一条推文的展示页面,支持用户查看和分享推文内容。它通过元数据(如Open Graph标签)优化社交媒体分享和搜索引擎优化(SEO),确保页面在不同平台(如Facebook、Twitter)上正确显示预览信息。此外,页面预加载了字体和资源,以提升加载性能和用户体验。

结构

HTML文档遵循标准结构:

  • 头部(<head>:包含字符集设置(UTF-8)、视口配置、预连接链接(指向twitter资源服务器)、字体预加载(Chirp字体系列)、元标签(如主题颜色、Facebook验证、Google站点验证等)、Open Graph标签(用于定义页面标题、描述、图片和类型)、JSON-LD结构化数据(用于搜索引擎)、以及样式设置(确保页面全高显示)。
  • 身体(<body>:包含一个根元素(<div id="react-root">),用于通过JavaScript渲染动态内容。页面背景颜色设置为黑色,以匹配深色主题。

关键功能

  • 元数据管理:通过og:typeog:titleog:descriptionog:image等标签定义页面的分享信息,其中og:description包含了推文内容摘要,指出苹果引入了反竞争的27%网络购买税,破坏了价格竞争,导致开发者无法在网上提供更便宜的数字商品。
  • 性能优化:预加载字体文件(如Chirp-Regular、Chirp-Bold、Chirp-Medium)以减少延迟,预连接到外部资源域名(如abs.twimg.com、api.x.com)以加速请求。
  • 主题适配:使用prefers-color-scheme媒体查询设置深色和浅色模式下的主题颜色(分别为黑色和白色)。
  • SEO和社交集成:包含OpenSearch描述文件链接(用于浏览器搜索集成)、Facebook和Google的验证代码,以及结构化数据(JSON-LD)以增强搜索引擎可见性。
  • 移动端支持:配置了al:ios:urlal:android:url等应用链接标签,方便移动应用深度链接。

推文内容摘要

推文描述指出苹果公司首次引入了27%的网络购买税,这一政策具有反竞争性,因为它消灭了价格竞争,使得开发者在支付税费后无法通过网页渠道提供更廉价的数字商品。这反映了对苹果商业行为的批评,强调其对开发者生态和消费者选择的负面影响。

总结

该HTML代码不仅是一个技术性的网页结构,承载了推文展示功能,还通过优化元数据和性能来支持内容传播。核心信息是对苹果27%网络购买税的尖锐批评,突出了其在反竞争和价格公平性方面的争议。

13. Hospitals owned by private equity are harming patients, reports find (arstechnica.com)

私募股权收购医院对患者造成危害

根据两份独立报告,私募股权公司正日益收购全美各地的医院,而这种收购行为对患者产生了负面影响。报告共同指出,私募股权公司会偷工减料、削减服务、裁员、降低护理质量、承担大量债务并减少慈善医疗服务,从而导致医院评级下降和更多医疗错误。

报告一:针对Apollo旗下医院系统的分析

  • 金融监督组织“私募股权利益相关者项目”发布报告,深入分析了由私募股权公司Apollo全球管理公司旗下的两大医院系统Lifepoint和ScionHealth。通过这两大系统,Apollo在36个州运营着220家医院,雇用约75,000名员工。
  • 报告发现,根据Lown研究所医院指数(该指数基于健康公平性、价值和结果对医院进行排名),Apollo旗下的一些医院在各自州内排名垫底。
  • 这些医院的再入院率和政府评级也很低。美国医疗保险和医疗补助服务中心采用一星到五星的评级系统,全国平均总评为3.2星,约30%的医院评分为两星或更低。而Apollo医院的整体平均评分为2.8星,近40%的医院评分仅为两星或更低。

报告二:私立股权接管后医疗并发症风险增加

  • 另一项由哈佛大学研究人员领导、上月发表在《美国医学会杂志》上的研究发现,在私募股权公司接管医院后的最初几年,患者发生严重医疗错误和健康并发症的比率会上升。
  • 该研究分析了51家私募股权运营的医院和259家匹配的对照医院的医保理赔数据。
  • 具体发现:
    • 与对照医院的患者相比,入住私募股权所有医院的患者发生医院获得性疾病的风险增加了25%。
    • 在私募股权医院,患者跌倒事件增加了27%。
    • 中心静脉导管相关血流感染增加了38%(尽管这些医院放置的中心静脉导管比对照医院少16%)。
    • 手术部位感染率翻了一番。

这两份报告共同揭示了私募股权收购医院模式对患者护理质量和安全构成的系统性风险。

14. Notion Calendar (www.notion.so)

Notion Calendar 概述
Notion Calendar(前身为 Cron)是一款时间管理工具,旨在帮助用户更高效地管理、组织并优先安排工作与生活。其核心目标是解决传统日历工具与其他工具脱节的问题,通过将时间管理融入 Notion 生态,提供统一的时间规划方式。


主要功能与优势

  1. 与 Notion 深度集成

    • 直接在日历中关联 Notion 文档、项目时间线和任务截止日期,无需切换应用即可访问会议所需资料。
    • 支持将 Notion 数据库中的项目(如 sprint 计划截止日期)显示为日历事件,实现工作流无缝衔接。
  2. 整合工作与个人日历

    • 支持同时管理多个日历(如工作和个人),通过“自动时间阻塞”功能避免日程冲突或双重预订。
    • 提供统一视图显示所有承诺,如会议、项目截止日期及个人预约,并内置排程工具方便他人预约时间。
  3. 提升专注力设计

    • 通过电脑菜单栏快速查看当日日程和加入虚拟会议,减少上下文切换。
    • 支持命令菜单和键盘快捷键操作,简化日历管理流程。
  4. 无缝工具集成

    • 兼容 Google Calendar、Zoom、Google Meet 等常见工具,融入现有工作流。

定位与发布
Notion Calendar 旨在将时间管理维度整合到 Notion 的所有功能(如笔记、项目、任务)中。目前已正式上线,对所有用户免费开放。

15. Study: Field Drug Tests Generate Nearly 30k Bogus Arrests a Year (www.techdirt.com)

这是一个Cloudflare的挑战页面,用于网站访问验证,而非实际文章内容。页面结构包含标准HTML元素、CSS样式和JavaScript脚本,主要功能是检测并阻止自动化访问。它要求用户启用JavaScript和cookies才能继续,并显示“Just a moment...”等待消息。页面使用内容安全策略(CSP)限制资源加载,并通过Cloudflare挑战平台进行用户验证。JavaScript代码处理挑战逻辑、URL状态维护和自动刷新(每360秒)。由于是拦截页面,文章标题“Study: Field Drug Tests Generate Nearly 30k Bogus Arrests a Year”的实际内容未加载。

17. Zig Software Foundation 2024 Financial Report and Fundraiser (ziglang.org)

Zig 软件基金会 2024 年财务报告与筹款活动

总体概述

Zig 软件基金会 (ZSF) 是一个高效的 501(c)(3) 非营利组织。其核心使命是推进 Zig 项目,主要支出是直接向贡献者支付报酬。2023 年的财务数据显示,支出总额略高于收入总额,而用户活跃度在快速增长,但捐赠收入呈缓慢下降趋势,因此基金会正在发起新一轮筹款呼吁。

2023 年主要支出

2023 年总支出为 461,335.15 美元,其中 92% 直接用于支付贡献者的工时。主要支出类别如下:

支出项目 金额 说明
承包商 $308,102.61 以每小时 60 美元的价格,直接补偿为 Zig 项目工作的贡献者。
员工 $102,000.00 ZSF 唯一员工 Andrew Kelley(首席软件工程师)的薪酬。其作为董事会主席的工作为志愿服务,不获得报酬。
CI 与网站 $14,661.35 用于支持跨平台编译的测试基础设施及网站托管。
旅行 $10,847.60 用于在北美和欧洲参加会议,以扩大 Zig 的采用和影响力。
法律体系 $9,700.00 主要用于会计服务以维持免税资格,以及从商标抢注者手中夺回 Zig 在日本的商标。
税款 $8,894.66 员工需缴纳的所得税。
赞助 $6,068.43 向 Zig 所依赖的第三方项目(如 musl libc)捐款,以感谢并维持其可持续发展。
银行手续费 $1,060.50 国际汇款产生的交易费用。

2023 年主要收入

2023 年总收入为 454,491.73 美元,主要来源包括:

收入来源 金额 说明
Uber 支持合同 $184,800.00 因使用 Zig 工具链而签订的服务级别协议(SLA)。
GitHub Sponsors $145,462.88 包含众多个人和公司的定期赞助。
Bun $58,666.67 依赖 Zig 构建的 JavaScript 全栈工具的赞助。
TigerBeetle $22,000.00 依赖 Zig 构建的数据库公司的赞助。
Benevity $19,851.42 通过公司配捐计划收集的员工捐款。
Pex $15,000.00 公司赞助。
个人捐赠 $8,710.76 通过支票、every.org 等途径的个人捐款。

用户增长与项目活跃度

尽管捐赠趋势缓慢下降,但 Zig 项目的用户活动在 急剧增长

  • 新 GitHub Issues 数量每月激增。
  • GitHub Star 总数快速增长。
  • 项目的平均问题关闭时间和拉取请求处理时间在近期有所延长,这反映了活跃度增加带来的挑战。

为应对需求增长,基金会在 2023 年利用可用收入为核心团队提供了新的合同。

筹款呼吁

当前的经常性收入水平 不足以 续签所有核心团队成员的合同或提供新合同。为此,ZSF 发起恳请,希望获得更多 每月定期捐赠,以保障项目的持续发展和对贡献者的支持。

基金会针对不同群体提出了具体呼吁:

  • 公司:可通过每月捐赠在 ziglang.org 上展示标识。
  • 员工:查询所在公司是否提供慈善配捐,这可以使捐赠金额翻倍。
  • 风险投资家:资助 ZSF 加速达到 v1.0 版本,是提升其投资组合的高效方式。
  • 个人:每月 5-10 美元的捐赠可以帮助实现收入来源多元化,避免受单一来源的不当影响。

基金会强调其对资金的高效使用(92% 直接支付给贡献者),并特别推荐通过 Every.org 进行捐赠,因为该平台管理捐赠收据便捷,且不像 GitHub 那样正转向人工智能方向。

18. Queues don't fix overload (2014) (ferd.ca)

这篇文章批评了在系统过载时滥用队列(作为缓冲区)的做法,并提出了正确的处理方法。核心观点如下:

队列并非过载的解决方案

  • 队列常被误用为优化手段,以解决因应用缓慢导致的过载问题。这类似于用水槽缓冲过量水流。
  • 在短期过载时,队列可临时存储数据,但面对持续过载(如长期热点事件),队列会溢出,最终导致系统崩溃。

问题根源与不当应对

  • 开发者通常通过优化组件、购买更大服务器来应对崩溃,但这只是推迟了问题,无法解决根本的硬性限制(如数据库、API、I/O、CPU等瓶颈)。
  • 引入队列后,应用暂时变快,但会带来新问题:队列溢出丢失数据、需要异步重构、增加维护复杂度,并破坏端到端原则

正确的方法:背压与负载削减

  • 系统过载时,必须在两种策略间做出选择:
    1. 背压:阻塞输入,降低数据流入速度。
    2. 负载削减:主动丢弃部分数据。
  • 这类似于现实中的安全机制(如俱乐部门卫、水坝溢洪道),旨在实施全系统流量控制。

如何实施

  1. 识别系统真正的瓶颈(即硬性限制点)。
  2. 在该瓶颈处实施背压或负载削减机制,向源头申请数据流入许可。
  3. 这样可以定义系统明确的操作限制,避免数据无意义堆积。

正确做法的好处

  • 获得清晰的服务质量指标。
  • 设计出能处理背压或负载削减的API(支持重试或告知数据丢失)。
  • 减少紧急故障处理,提高系统可靠性。
  • 可能实现基于优先级的服务商业化。

总结

盲目使用队列是一种过早优化,它掩盖了系统设计的根本缺陷。正确的做法是直面系统的硬性限制,并通过背压或负载削减来优雅地处理过载,从而构建更健壮、可维护的系统。队列应仅作为进程间通信的机制,而非解决过载的缓冲区。

19. Flying kites deliver container-sized power generation (spectrum.ieee.org)

文章标题:风筝发电:集装箱尺寸的空中风能解决方案

核心内容摘要:

空中风能(AWE)技术作为一种新兴的风电形式,正通过风筝替代传统风力涡轮机,旨在更灵活、高效地捕获高空强风。荷兰公司Kitepower是该领域的先行者,其首个商用系统“Hawk”即将投入市场。

1. 技术原理与系统构成

  • 工作原理: Hawk系统采用“泵送”循环工作。风筝(为表面面积约60平方米的充气式翼型)通过系绳连接到地面绞盘。飞行时,风筝以“8”字形轨迹移动以最大化捕获横向风能,拉动系绳从而发电。系绳完全放出后,绞盘消耗少量能量将其收回,形成一个净能量增益的循环(全程约100秒)。
  • 系统特点: 整个系统(包括风筝、绞盘和400千瓦时电池储能单元)可装入一个标准海运集装箱,并能在24小时内部署完毕。电池对于在离网地区提供稳定电力至关重要。

2. 应用场景与市场定位

  • Hawk系统并非旨在取代大型陆上或海上风电场,而是针对传统涡轮机不便或成本过高(如依赖昂贵的柴油发电机)的离网和临时用电场景。
  • 目标客户包括: 农场、建筑工地、音乐节、人道主义救援点、偏远岛屿社区等临时微电网或远离主电网的地点。

3. 技术优势与行业背景

  • 高风源优势: Hawk可在高达350米的空中运行,相比平均塔高约100米的传统涡轮机,能利用更强、更稳定的高空风能。
  • 低环境影响: 与风电场或太阳能光伏相比,空中风能系统的材料足迹和土地占用更低,使其适用于生态敏感地区。
  • 行业发展: AWE领域发展并非一帆风顺(例如谷歌的Makani项目于2020年终止)。但行业正在推进,例如德国SkySails Power公司已在毛里求斯启用了首个全自主商业AWE系统。Kitepower目前在爱尔兰海岸对Hawk进行最终测试。

4. 未来展望

  • Kitepower视Hawk为概念验证,其下一个目标是推出100千瓦的“Falcon”系统(计划2025/2026年上市),并远期设想开发500千瓦的集装箱化风筝,其发电能力可媲美一座小型风电场,但材料使用减少高达90%。

总结: Kitepower的Hawk系统通过集装箱化、快速部署的风筝发电方案,为离网和临时用电场景提供了一种可替代柴油发电、环境友好且利用高效高空风能的创新技术选择,是空中风能走向商业化应用的重要一步。

20. Identifying Rust's collect:<Vec<_>>() memory leak footgun (blog.polybdenum.com)

Rust collect::<Vec<_>>() 内存泄漏问题总结

1. 问题现象

  • 项目背景:构建一个约三百万节点的稀疏权重图。
  • 异常表现:在构建仅 30 万节点时,进程内存已飙升至 18GB,远超预期,最终耗尽 32GB 系统内存。
  • 关键发现:内存占用高的并非节点数据本身,而是存储图边的 Vec<Vec<(u32, u32)>> 结构中,每个子 Vec容量远大于其长度

2. 排查过程

  • 初步怀疑:最初怀疑是用于缓存的“记忆化”技术导致内存爆炸,但通过日志和实验排除了此可能。
  • 缩小范围:通过实验发现,当显式调用 std::mem::drop(graph) 释放图结构后,内存会立刻回落。这表明内存被 graph 对象本身不必要地持有了。
  • 定位问题:对图中的边列表(Vec)打印其长度和容量后,发现容量是长度的数百倍。在边列表插入最终图结构前调用 shrink_to_fit() 可以解决问题。

3. 根本原因

  • collect() 的优化行为:深入 Rust 标准库源码后发现,collect() 方法在某些情况下会复用输入迭代器源 Vec 的内存分配,以提高性能。
  • 触发条件:该优化在输入迭代器是 into_iter() 且元素类型大小减小(如从 (u64, u128) 映射为 (u32, u32))时触发。新 Vec 会继承原 Vec 底层数组的内存,因此其容量会按元素大小缩减的比例反向放大。
  • 为何导致泄漏
    1. 作者的边列表计算函数内部使用高精度类型,并生成大量候选边,导致返回的 Vec 具有极大的临时容量
    2. 在将这些边转换为最终存储格式时,collect() 的复用优化使得这些冗余的大容量被直接保留在了最终存入图的 Vec 中。
    3. 由于图结构长期存在,这些被复用的、本应临时使用的巨大内存块被永久占用,随节点数量累积,最终导致内存耗尽。
  • 版本相关:此优化在 Rust 1.76(beta)中变得更为激进,是导致该“脚枪”问题的主要原因。

4. 解决方案与最佳实践

  • 临时方案:在将 Vec 存入长期数据结构前,调用 shrink_to_fit() 以释放多余的容量。
  • 推荐方案
    • 对于长度固定的列表,应使用 Box<[T]> 而非 Vec<T>Box<[T]> 是不可变长度的切片,没有容量概念,不会有多余开销,语义上也更准确。
    • 在性能极其敏感的场景,可以考虑Arena 设计模式:将所有数据存储在一个连续的大 Vec 中,只通过索引和长度对来引用子列表。这能避免内存碎片并完全规避容量问题。
  • 教训:标准库的优化可能违反程序员对类型行为的常见预期。对于存储固定长度数据,应有意识地使用最合适的数据结构(Box<[T]>),而非默认使用 Vec
21. Portable Web Documents – An Alternative to PDF Based on HTML5 (2019) (getpolarized.io)

网站安全阻止说明

用户在访问网站时被安全服务(如Cloudflare)阻止,这通常是为保护网站免受在线攻击而设置的。

阻止原因

  • 触发安全解决方案的操作可能包括:提交特定单词或短语、SQL命令,或畸形数据。

解决方法

  • 用户可以联系网站所有者,并说明访问时的具体情况。
  • 在联系时,需包含触发阻止时的操作内容,以及页面底部的Cloudflare Ray ID(唯一标识符),以便所有者调查和解决问题。
22. Examples of AI rip-offs making their way into Google News (www.404media.co)

核心问题:AI生成抄袭内容正通过谷歌新闻进行传播

调查发现,谷歌新闻正通过其排名系统提升那些利用AI快速生成并抄袭其他媒体内容的网站。谷歌方面虽致力于处理垃圾信息,但其策略并不区分文章由AI还是人类撰写,这为大量AI生成内容涌入平台提供了缺口。

具体案例:

  • 网站 Worldtimetodays.com 被列为典型。该网站充斥广告,并在24小时内发布超40篇文章,内容多由AI批量生产。
  • 其文章直接抄袭其他媒体,如Distractify和Heavy.com,甚至保留原文作者照片和水印图片,仅做细微改动(例如将“Star Wars fans”改为“war of stars fans”)。

问题根源:

  1. 系统不透明与可操纵性:谷歌新闻的排名机制是一个“黑箱”系统,但显然可被游戏和利用。
  2. 监管滞后:在消费级AI工具普及的背景下,谷歌可能尚未准备好有效监管其新闻服务,以应对几乎零成本、低质量的批量内容生产。

影响与批评:

  • 这种现象损害了内容原创性,读者无法获得经过记者实际调查和采访的高质量报道。
  • 它揭示了当前AI技术滥用可能对信息生态和新闻行业造成的冲击。
23. PostgreSQL Operations Cheat Sheet: featuring security, scaling, structure, etc. (wiki.postgresql.org)

PostgreSQL 运维速查表总结

本文是一份综合性的 PostgreSQL 运维速查表,整合了社区智慧,旨在覆盖从基础架构到高级优化的关键主题。

一、 架构

PostgreSQL 采用客户端-服务器架构。服务器核心是单线程的 postgres 进程,为每个客户端连接派生一个后端进程处理请求。主要后台进程包括写 WAL 的 walwriter、清理的 autovacuum 等。逻辑结构上,数据库集群包含多个数据库、角色和表空间。物理上,数据存储在 $PGDATA 目录下,每个关系(表、索引等)对应一组8KB大小的数据页。查询处理经过解析、重写、规划、执行等阶段。

二、 可靠性与可用性

  • 连接管理:排查连接问题需检查网络、配置、权限等。可通过 statement_timeoutidle_in_transaction_session_timeout 等参数管理会话。支持连接故障转移。
  • WAL (预写式日志):是确保数据持久性和实现恢复的基础。WAL 记录在内存中生成,顺序写入磁盘,在脏数据页写盘前必须先保证其对应的 WAL 已持久化。
  • 事务:通过 MVCC 实现高并发,读写互不阻塞。事务可见性依赖于事务快照和提交日志。需注意事务ID(XID)回卷风险,需定期 VACUUM FREEZE
  • :包括表级锁和行级锁。高并发下轻量锁可能成为瓶颈。需注意锁等待队列、长时间锁持有(如未结束的预备事务)。
  • 数据校验:可启用数据页校验和以检测 I/O 损坏。WAL 记录自带 CRC 校验。
  • 备份与恢复:支持文件系统备份、pg_dump 逻辑备份和基于 WAL 归档的持续备份与时间点恢复(PITR)。
  • 流复制:实现高可用和读扩展。主库通过 walsender 进程发送 WAL,备库通过 walreceiver 接收并应用。需管理复制槽以防止 WAL 过早清理。备库可提供只读查询(热备机),但可能因恢复冲突而取消查询。
  • 逻辑复制:基于发布/订阅模型,可选择复制特定表、行或列。支持 DML 和 TRUNCATE 操作的复制,但不复制 DDL。需注意复制标识和冲突处理。

三、 安全

  • 认证:建议对密码进行哈希(SCRAM),并避免在日志中明文记录。可结合外部服务(如 LDAP)强化认证。
  • 角色与权限:默认角色权限可继承。可使用 ALTER DEFAULT PRIVILEGES 设置对象默认权限。预定义角色(如 pg_monitor, pg_read_server_files)可授予非超级用户特定管理权限。
  • 数据隐藏:可通过安全视图和行级安全策略(RLS)实现数据隔离。

四、 可管理性

  • 内存:需合理配置 shared_bufferswork_mem 等参数,防止 OOM。过大的结果集可使用游标分页获取。
  • 存储:存储满常见于表膨胀、WAL 积压、日志文件或临时文件过多。可使用表空间限制特定对象的存储。
  • 日志与调试:可通过 log_min_duration_statement 等参数捕获慢查询。psql -E 可显示反斜杠命令背后的 SQL。
  • VACUUM:用于回收死元组空间、更新统计信息和防止 XID 回卷。分为常规清理和 VACUUM FULL。自动清理(autovacuum)是保障数据库健康运行的关键,需根据负载调整其参数。
  • 分区:用于管理超大表,可改善查询性能和维护效率。
  • 升级:主版本升级(如15升16)需要规划,可选方法包括 pg_dump/pg_restorepg_upgrade 或逻辑复制。次版本升级通常只需替换二进制并重启。

五、 应用开发

  • 数据类型:根据需求选择合适的数值、时间戳、二进制数据类型。大型对象(Large Object)存在局限,慎用。序列会产生间隙。
  • 分页与查询TABLESAMPLE 可实现快速随机采样。避免在结果集上进行 (函数()).* 操作,应使用 SELECT * FROM 函数()

六、 可扩展性与性能

  • 连接数:高并发下应使用连接池,并限制最大连接数(max_connections),因其会导致资源竞争和缓存失效。
  • 监控:利用 pg_stat_statements, pg_stat_activity 等视图监控查询和活动。plprofiler 可用于 PL/pgSQL 性能剖析。
  • 内存:启用大页(Huge Pages)可提升性能。shared_buffers 通常建议设为系统内存的25%-40%。work_mem 需根据查询复杂度谨慎设置。
  • 网络:大量短 SQL 的执行受网络延迟影响明显。
  • :利用快速路径锁机制减少轻量锁竞争。
  • HOT 更新:当更新未修改索引列且页内有足够空间时,可避免索引更新,提升性能。可通过设置 fillfactor 创造空间。
  • 表设计:列的顺序应优化存储对齐和访问效率。理解并合理使用 TOAST 机制存储大字段。
  • 索引:索引利弊需权衡。VACUUM 和可见性图对实现索引仅扫描(Index-Only Scan)至关重要。谨慎使用 ANALYZE,其采样可能导致计划不稳定。
  • 查询规划:关注成本估算、缓冲区使用、并行查询等。使用 EXPLAIN ANALYZE 分析实际执行计划。
  • WAL 与检查点:检查点是同步内存与磁盘的必要操作,但会产生 I/O 负载。可通过调整 max_wal_sizecheckpoint_timeout 来平衡性能和恢复时间。启用 WAL 压缩可减少全页写入带来的 WAL 量。
  • 数据加载COPY 命令是高效加载方式,COPY FREEZE 可避免加载后首次查询设置提示位(Hint Bits)的开销。
  • 外部数据封装器(FDW):通过 postgres_fdw 查询远程表时,需手动分析统计信息,可考虑启用远程估算和调整批量大小以优化性能。
  • 全文搜索:使用 GIN 索引时,fastupdate 机制会产生待处理列表,定期 VACUUM 可将其合并进主索引,提升查询速度。

这份速查表为 PostgreSQL 数据库的规划、部署、运维和优化提供了全面的参考点。

24. Show HN: Shadeup – A language that makes WebGPU easier (shadeup.dev)

Shadeup 语言概述

Shadeup 是一个为简化 WebGPU 着色器编写而设计的领域特定语言(DSL)。它基于 TypeScript 扩展,旨在通过抽象 WebGPU 的复杂性来减少样板代码,提升开发效率。

核心特点与优势

  • 降低入门门槛:为初学者提供低摩擦的学习环境,使其更容易接触和掌握高级图形技术。该项目开源并配有文档。
  • 专注开发体验:通过隐藏底层复杂细节,让开发者能更快地进行代码迭代,专注于创意和功能实现。
  • 统一开发流程:将 CPU(应用程序逻辑)和 GPU(着色器)代码整合在同一文件中,支持共享类型与函数,方便在两者间调用。
  • 简化的 Uniform 处理:着色器可以像闭包一样直接访问 CPU 端声明的大部分变量(如鼠标位置、标量、向量、缓冲区、纹理等),无需手动定义 Uniform。
  • 清晰的高级技术实现:核心设计哲学是剥离冗余代码,使复杂的图形算法更易于阅读和学习。
  • 广泛的功能支持:已支持包括计算着色器、缓冲区、渲染目标、纹理、附件、实例化、原子操作、间接绘制与间接计算等多种 WebGPU 特性(仍在持续开发中)。

当前状态

Shadeup 仍处于早期阶段,但已具备实现复杂效果的能力。官方文档是学习该语言及其功能的推荐起点。

25. Djgpp (www.delorie.com)

DJGPP 摘要

DJGPP 是一个完整的 32 位 C/C++ 开发系统,专为运行在 DOS 下的 Intel 80386 及以上处理器的个人电脑设计。它移植了许多 GNU 开发工具。该开发工具套件及其生成的程序均需要 80386 或更高版本的计算机才能运行。在大多数情况下,使用 DJGPP 生成的程序可以进行商业销售,无需许可费或版税。

主要资源与功能

  • 文档:提供丰富的文档,包括用户指南、操作方法集合、C 库参考、DPMI 参考以及完整的在线文档列表和 GNU 手册。
  • 帮助与支持:设有常见问题解答(FAQ)、可搜索的邮件存档、新闻组与邮件列表以及错误跟踪系统,为用户提供帮助。
  • 软件获取:用户可以通过指定渠道获取 DJGPP 软件包,并能访问其 CVS 代码库、下载文件列表及其他互联网资源。此外,还提到了一个公共访问的编译器服务。
  • 项目信息:内容涵盖了 DJGPP 版本 2 的概览、项目历史、官方针对千年虫问题的声明,以及关于其与 Windows 2000/XP 兼容性的非官方状态说明。
  • 其他工具:提及了 16 位工具以及替代的内存分配器等其他相关工具选项。
26. Linear transformers are faster after all (manifestai.com)

本文探讨了线性变压器在计算效率上的潜力与实现挑战。传统变压器因注意力机制中的指数运算而具有二次计算成本((O(t^2 d))),而线性变压器通过移除指数项,可重组为循环形式,将成本降至线性((O(t d^2)))。理论上,这应在长上下文中带来显著加速,但早期实践表明其训练速度反而更慢,导致该方法一度被认为仅具理论意义。

文章通过实验对比了四种线性变压器实现方式:

  1. 注意力公式:直接计算注意力矩阵,成本为 (O(t^2 d)),可通过FlashAttention优化。
  2. 状态公式:将计算重组为循环形式,成本为 (O(t d^2)),但循环实现在GPU上效率低下。
  3. 并行注意力:使用并行矩阵乘法实现注意力公式,通过自定义Triton内核加速。
  4. 并行状态:通过累积和并行化状态更新,成本为 (O(\log_2(t) t d^2))。

实验在H100 GPU上进行,结果显示:

  • 在小上下文(约<100k)中,并行注意力实现最快;在大上下文中,并行状态实现更优。
  • 最终提出的分块算法结合两者优势:将序列分块,块内使用注意力计算,块间通过状态更新,成本为 (O(td^2 + tcd + \log_2(t/c)(t/c)d^2)),并引入超参数 (c)(块大小)以优化性能。该算法在所有上下文规模下均表现出色,速度显著超越FlashAttention。

在线性方面,线性变压器在采样阶段具有恒定时间成本,与上下文长度无关,而传统变压器随长度线性增长,这在推理时优势明显。

然而,学习性能方面存在挑战:直接替换GPT-2的注意力层为线性变体会导致损失曲线恶化,尤其在长上下文中出现不稳定性和性能下降。这表明线性变压器在表达能力和稳定性上可能不如传统架构,尽管可通过架构调整(如门控机制)改善。未来工作将聚焦于优化其学习能力,以充分利用其速度优势。

总体而言,线性变压器通过算法优化可实现大幅速度提升,尤其在长上下文训练和采样中潜力巨大,但需进一步解决学习稳定性问题以实际应用。

27. Corporations are not to be loved (inessential.com)

个人与苹果公司的关系
作者43年前开始使用苹果电脑并以编程为职业,苹果产品对其生活和事业产生深远积极影响,甚至被家人调侃称苹果将其从“犯罪天才”的道路拯救出来。

对公司的理性认知
作者强调苹果是一家公司而非个人,无法以情感回报用户。企业本质不同于人类,即使如苹果这样对其有特殊意义的公司,也不应被投入个人情感。任何公司都可能在利益冲突时动用力量对付个人。

政策作为例证
苹果近期在美国的应用分发政策(涉及外部购买链接)被作者批评为设计笨拙且缺乏灵活性,如同“AI生成的第六根手指”般突兀。这一政策再次提醒用户:公司不具备人性特质,不值得被爱。

28. Teller: Universal secret manager, never leave your terminal to use secrets (github.com)

Teller:通用密钥管理器

Teller 是一款开源的通用密钥管理器,旨在让开发者在开发、测试和构建应用时,无需离开终端即可安全地使用各类密钥。它通过连接到任何您喜欢的保险库、密钥存储或云服务(如 Hashicorp Vault、AWS Secrets Manager、Google Secret Manager 等),来替代杂乱的自定义脚本、环境变量硬编码或配置文件,从而有效管理密钥。

核心价值与解决的问题

  • 统一管理:集中管理来自不同来源的密钥,避免在 .zshrcbash_history.env.production 文件中暴露敏感信息。
  • 安全性:避免密钥硬编码和“密钥蔓延”问题,减少安全风险。
  • 高效工作流:为开发、测试和团队协作提供简洁、安全的工作流程。

快速开始

  1. 安装:可以通过发布页面下载二进制文件,或从源码(使用 Cargo)构建安装。
  2. 配置:运行 teller new 创建 .teller.yml 配置文件。该文件使用 YAML 格式定义密钥提供商及其映射关系,支持从环境变量中动态获取路径等模板功能。
    • 配置示例
      providers:
        hashi_1:
          kind: hashicorp
          maps:
            - id: test-load
              path: /{{ get_env(name="TEST_LOAD_1", default="test") }}/users/user1
              keys:
                GITHUB_TOKEN: ==
                mg: FOO_BAR
        dot_1:
          kind: dotenv
          maps:
            - id: stg
              path: VAR_{{ get_env(name="STAGE", default="development") }}
      

主要功能

  • 运行子进程 (teller run):安全地为子进程(如 node index.js)注入密钥,无需在本地文件或历史记录中暴露密钥。
  • 检查变量 (teller env):预览 Teller 将要获取的环境变量(输出中仅显示每个值的前两个字符以保护隐私)。
  • 填充本地 Shell 环境:通过 eval "$(teller env)" 可将密钥安全地注入当前 shell 会话,适用于 .zshrc 等文件。
  • 简化 Docker 环境:结合 Docker 命令,通过 docker run --env-file <(teller env) ... 快速启动带有正确密钥的容器。
  • 扫描硬编码密钥 (teller scan):扫描代码仓库,查找与配置中保险库匹配的硬编码密钥。可集成到 CI/CD 流水线中,作为“左移”安全工具(发现密钥时返回退出码 1)。
  • 编辑敏感信息 (teller redact):实时或批量地从进程输出、日志文件中编辑(替换)敏感信息,例如 cat some.log | teller redact
  • 填充模板 (teller template):使用 Tera 模板引擎,将密钥值注入自定义配置文件模板中。
  • 提供商间数据同步 (teller copy):在不同提供商或映射之间复制/同步密钥数据,支持更新或替换操作。
  • 写入与删除 (teller put / teller delete):向支持写操作的提供商写入新密钥值或删除现有密钥。

提供商与支持

Teller 支持广泛的密钥提供商,包括 Hashicorp Vault、AWS Secrets Manager、Google Secret Manager、Consul、SSM、dotenv 文件等。完整的提供商列表和详细配置请参见其文档。

测试与代码规范

  • 测试:使用 cargo test --all --all-features 运行,需要 Docker 环境(Windows 上部分测试可能需排除)。
  • 行为规范:开发者在构建提供商时,需区分“空”数据与“未找到”的不同语义。
  • 行为准则:遵循 CNCF 行为准则。
  • 版权:版权 (c) 2024 @jondot,详见 LICENSE 文件。
29. Show HN: Privy - Open-source, privacy oriented alternative to GitHub Copilot (github.com)

Privy:注重隐私的开源 GitHub Copilot 替代方案

概述

Privy 是一款本地运行的开源代码助手,作为 GitHub Copilot 的注重隐私的替代方案。其核心特点是所有数据处理均在用户本地完成,避免代码上传至云端,保障代码隐私安全。

主要功能

  • 实时代码补全:在编码过程中提供内联智能补全建议。
  • AI 聊天助手:支持以对话形式询问代码相关问题,包括代码解释、单元测试生成、错误排查和 Bug 查找。
  • 主题式对话线程:建议使用独立线程处理不同主题的问题,以提高回答准确性。

技术要求与安装

运行前提

用户需在本地部署并运行一个大型语言模型(LLM)。推荐平台为 Ollama(强烈推荐),也实验性支持 llamafile 和 llama.cpp。

推荐模型

需分别配置用于代码补全和聊天的模型,可根据硬件能力选择不同参数规模(如 1.3b, 7b, 13b, 34b)的模型。常用推荐模型包括:

  • 代码补全:deepseek-coder 系列、codellama 系列。
  • 聊天对话:deepseek-coder-instruct、codellama-instruct、mistral 等。

安装方式

可通过以下渠道安装 VS Code 扩展:

  1. Visual Studio Code Marketplace
  2. Open VSX Registry

配置选项

在 VS Code 设置中可进行多项关键配置:

  • privy.provider:选择运行本地 LLM 的平台(默认为 Ollama,也可选择 OpenAI,但会影响隐私性)。
  • privy.providerUrl:本地 LLM 平台的地址(默认为 http://localhost:11434)。
  • privy.autocomplete.model:用于自动补全的本地模型名称。
  • privy.autocomplete.debounceWait:触发补全的等待时间(毫秒)。
  • privy.model:用于聊天的 LLM 模型,支持 DeepSeek、Mistral、CodeLLama 等,也可选择自定义模型。

使用技巧

  • 提问需具体明确:包含具体名称和期望结果,避免模糊描述。
  • 提供上下文信息:如编程语言、相关代码片段等。
  • 批判性使用结果:模型可能对不常见或过于复杂的话题给出不准确的回答。
  • 分主题使用对话线程:较短且主题集中的对话有助于获得更准确的回答。

致谢与贡献

项目灵感来源于 RubberDuck AI。项目提供了贡献指南和“Good First Issues”列表以鼓励社区参与开发。

键盘快捷键

  • 触发内联补全:Windows/Linux 为 Alt + \,Mac 为 Cmd + \
  • 开始聊天:Windows/Linux 为 Ctrl + Alt + c,Mac 为 Ctrl + Cmd + c
30. Running Open Genera 2.0 on Linux (archives.loomcom.com)

在Linux上运行Open Genera 2.0指南摘要

本文档详细介绍了在现代64位Linux系统(主要针对Ubuntu)上安装和运行Symbolics Open Genera 2.0虚拟Lisp机(VLM)的完整流程。

重要提示

文档作者指出,该指南基于2018年左右的信息编写,多年未更新,可能不适用于当前版本的Linux系统,使用者需自行承担兼容性风险。

背景介绍

Open Genera是Symbolics公司为其Lisp机开发的先进Lisp环境。90年代初,其被移植到DEC Alpha工作站。后来,开发者将生成Alpha汇编的代码修改为生成C代码,使其能在64位 Linux上通过VLM运行。需注意,Symbolics公司已解散,相关软件的版权状况复杂。

安装概览

安装过程主要包括以下关键步骤:

  1. 系统与依赖准备:在64位Linux(如Ubuntu 15.10-18.04)上创建工作目录,并安装curl等必要工具。
  2. 获取软件文件
    • 下载VLM二进制文件(分为Intel Core i7和i5版本,根据CPU选择)。
    • 下载Genera的“世界”文件(Genera-8-5-xlib-patched.vlod)、调试器及配置文件(.VLM)。
    • 下载并解压NFS文件系统(var_lib_symbolics.tar.gz)到/var/lib/symbolics,并设置正确的文件所有权。
  3. 系统配置
    • 编辑/etc/hosts文件,为VLM(192.168.2.2)和主机(192.168.2.1,别名如genera-vlm)指定IP地址和主机名。
    • 安装并配置inetutils-inetd服务以启用timedaytime协议,用于时间同步。
    • 安装并配置NFS服务器,将根目录导出给VLM访问。对于Ubuntu 17.04及以后版本,必须额外配置以启用老旧的NFSv2协议
    • 创建TAP网络接口(tap0),分配IP 192.168.2.1/24,作为主机与VLM通信的桥梁。该配置重启后失效。
  4. 启动与初始化
    • 启动VLM(./genera)。注意:Ubuntu 17.10因使用Wayland,需通过脚本借助Xephyr X服务器运行。
    • 首次启动后,使用默认用户LISP-MACHINE登录。
    • 运行Define Site定义站点,需指定站点名称、主命名空间服务器(genera)和Unix主机名(genera-vlm)。
    • 修改主机“genera”的命名空间对象,将其地址设置为INTERNET 192.168.2.2 tap0
    • 执行Save World保存一个新的工作世界文件(如Genera-8-5-working.vlod)。
    • 使用Halt Genera关闭系统,然后编辑.VLM配置文件,将genera.world指向新保存的工作世界文件。
    • 再次启动VLM,即可进入可持久化操作的环境。

实用知识

  • 关闭:使用命令Halt Genera
  • 键盘映射:说明了如何在PC键盘上映射Symbolics Lisp机的特殊修饰键。
  • 滚动操作:使用鼠标左键、中键、右键配合Shift键进行窗口滚动。
  • 开发调试:介绍了设置Who-Calls功能、查找函数以及如何通过修改Lisp函数(如RPC::USERNAME-AND-PASSWORD-VALID-P)来绕过或定制认证逻辑(例如,修改为接受特定密码“xyzzy”)。

附录:修补XLIB

如果使用的Genera-8-5.vlod文件未打补丁,需执行此步骤以修复其X11实现中的bug,否则在现代X服务器上无法运行。过程涉及在冷加载调试器中重新定义xlib:set-modifier-mapping函数为空操作,然后保存为新的世界文件(Genera-8-5-xlib-patched.vlod)。

总结

本指南提供了一个在Linux上体验经典Symbolics Lisp机环境的详尽路径,但强调其操作步骤基于过时信息,且涉及版权灰色地带,使用者需谨慎尝试。

31. The Hacker News Top books of 2023 (hnreads.com)

Hacker News 2023年度书籍榜单

榜单背景与生成方法

该榜单由 HN Reads 网站发布,基于2023年Hacker News社区中关于书籍的讨论数据生成。

数据收集与处理流程:

  1. 数据源:筛选2023年发布的、包含关键词“book”但不包含“macbook”等词汇的“Ask HN”类型故事。
  2. 信息提取:使用 OpenAI GPT-3.5 API 从故事评论中提取书籍详情(标题、作者、链接等)。
  3. 数据标准化:对书籍标题进行标准化处理(如统一拼写、去除前缀“The”),并对作者姓名进行归一化,最后进行聚合统计。

榜单主要特点

  • 技术书籍主导:榜单前列以计算机科学、编程、数学等领域的经典教科书和技术书籍为主。
  • 经典作品受捧:许多长期被视为技术必读书籍的作品排名靠前。
  • 品类多样:榜单也包含自我提升、商业管理、科幻文学等非纯技术类书籍。
  • 缺席的热门:文中提到,埃隆·马斯克的新传记和安·兰德的著作在2023年未获得足够推荐,未能进入榜单。

2023年度推荐榜:前40名

排名 书名 作者 推荐次数 首次提及ID
1 《计算机程序的构造和解释》 Harold Abelson, Gerald Jay Sussman, Julie Sussman 26 34231811
2 《数据密集型应用系统设计》 Martin Kleppmann 18 34231811
3 《哥德尔、艾舍尔、巴赫》 Douglas Hofstadter 18 34440923
4 《C程序设计语言》 Brian W. Kernighan, Dennis M. Ritchie 17 35933845
5 《人性的弱点》 Dale Carnegie 15 34310435
6 《人月神话》 Frederick P. Brooks Jr. 14 34333293
7 《怎样解题》 George Pólya 14 34441085
8 《数学分析原理》 Walter Rudin 13 34311378
9 《计算机系统要素》 Noam Nisan, Shimon Schocken 13 34412400
10 《微积分》 Michael Spivak 13 34441489
11 《编码:隐匿在计算机软硬件背后的语言》 Charles Petzold 12 34476530
12 《Crafting Interpreters》 Robert Nystrom 11 34231811
13 《人件》 Tom DeMarco, Timothy Lister 11 35930473
14 《Eloquent JavaScript》 Marijn Haverbeke 10 34412355
15 《几何原本》 Euclid 10 34440894
16 《计算机程序设计艺术》 Donald E. Knuth 10 34442163
17 《盲视》 Peter Watts 10 35054030
18 《E-Myth Revisited》 Michael E. Gerber 10 35169069
19 《程序员修炼之道》 Andrew Hunt, David Thomas 10 35966675
20 《编译原理》 Alfred V. Aho 等 10 36146877
21 《高产出管理》 Andrew S. Grove 9 34262064
22 《具体数学》 Ronald L. Graham 等 9 34441399
23 《掌控谈话》 Chris Voss 9 35171863
24 《凤凰项目》 Gene Kim, Kevin Behr, George Spafford 8 34312721
25 《电子学》 Paul Horowitz, Winfield Hill 8 34475069
26 《沙丘》 Frank Herbert 8 35053380
27 《海伯利安》 Dan Simmons 8 35054030
28 《银河系漫游指南》 Douglas Adams 8 35399641
29 《Operating Systems: Three Easy Pieces》 Remzi H. Arpaci-Dusseau, Andrea C. Arpaci-Dusseau 7 34231811
30 《Python编程快速上手》 Al Sweigart 7 34412667
31 《设计心理学》 Don Norman 7 34439374
32 《微积分入门》 Silvanus P. Thompson 7 34440860
33 《线性代数应该这样学》 Sheldon Axler 7 34440972
34 《三体》 Cixin Liu (刘慈欣) 7 34606380
35 《时间的孩子》 Adrian Tchaikovsky 7 34611775
36 《团队的五种功能障碍》 Patrick Lencioni 7 34627776
37 《鲍勃宇宙》 Dennis E. Taylor 7 35053380
38 《Founders at Work》 Jessica Livingston 7 35170064
39 《神经漫游者》 William Gibson 7 35393643
40 《设计模式》 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 7 35930659

“险些入选”榜单(第41-69名)

该部分列出了推荐次数为5或6次的书籍,共29本,包括:

  • 《禅与摩托车维修艺术》
  • 《加速》
  • 《黑客:计算机革命的英雄》
  • 《SPIN销售法》
  • 《跨越鸿沟》
  • 《钻石时代》
  • 《信息简史》
  • 《挽救计划》
  • 《代码整洁之道》
  • 《流形上的微积分》
  • 《如何解题》
  • 《线性代数导论》
  • 《非线性动力学与混沌》
  • 《流畅的Python》
  • 《雪崩》
  • 《杀人机器人日记》
  • 《万物简史》
  • 《完美主义者》
  • 《排列城市》
  • 《The Mom Test》
  • 《沉思录》
  • 《精益创业》
  • 《An Elegant Puzzle》
  • 《安德的游戏》
  • 《代码大全》
  • 《算法导论》
  • 《重构》
  • 《启示空间》
  • 《The Idea Factory》
32. Computer Engineering for Babies (2021) (computerengineeringforbabies.com)

运输时间与选项概览

  • 美国:默认使用USPS Media Mail,运输时间约为6-8个工作日。
  • 英国和加拿大:订单从当地履行中心发货,通常需2-3个工作日。
  • 荷兰、德国和比利时:订单从荷兰发货,一般需3-4个工作日。
  • 其他国家:运输时间预计在1至6周之间不等。
  • 欧盟国家:通常接近2周,采用IOSS方案,无需支付额外税费。
  • 澳大利亚:运输时间大约为两周。
  • 挪威和瑞典:运输时间通常至少需要6周。
33. Researchers confirm what we already knew: Google results are getting worse (www.theregister.com)

根据文章标题《研究人员证实:谷歌搜索结果质量在下降》,核心内容指出研究人员已证实谷歌搜索结果质量呈现下滑趋势。这一结论与许多用户的日常体验一致,进一步引发了人们对搜索引擎当前效能的讨论与关注。

34. A drought has forced authorities to further slash traffic in Panama Canal (www.westerninvestor.com)

文章总结

根据文章标题及URL路径所提供的信息,本文主要报道了干旱天气迫使巴拿马运河管理局进一步削减了运河的船舶通行量,这一情况对全球贸易造成了扰乱。

核心内容推测: 由于持续的干旱,巴拿马运河面临水位下降的挑战,这直接影响了运河的正常运营。作为应对措施,当局不得不采取限制措施,进一步减少每日通过运河的船舶数量。这种交通流量的削减,对依赖这条关键水道的全球海运和贸易链产生了显著的负面影响。

35. Cloudflare R2-Backed Nix Binary Cache on Fly.io (lgug2z.com)

在Fly.io上部署基于Cloudflare R2的Nix二进制缓存

本文介绍了如何在Fly.io上部署一个使用Cloudflare R2作为存储后端的Attic Nix二进制缓存服务器,以解决个人服务器到部分地区网络连接不佳的问题。

存储后端:Cloudflare R2

  • 使用Cloudflare R2作为存储后端,可利用其免费额度(10GB)。
  • 在Cloudflare仪表板中创建R2存储桶,并生成具有该桶读写权限的API令牌。

服务器配置

  1. 创建Attic服务器配置文件 (server.toml)
    • 设置监听地址 (listen = "[::]:8080")。
    • 使用OpenSSL生成HS256令牌密钥。
    • 配置SQLite数据库路径(例如 /data/attic.db),该文件将存储在Fly.io的持久化卷中。
    • 配置存储部分,类型为s3,指向R2端点,并填入访问密钥ID和秘密访问密钥。
    • 配置分块(chunking)和压缩(compression,使用zstd)参数。
    • 设置垃圾回收间隔(例如每12小时)。
    • 重要提示:配置文件包含敏感凭据,应使用git-cryptsopsage等工具加密。

部署流程

  1. Dockerfile
    • 基于官方镜像 ghcr.io/zhaofengli/attic:latest
    • 将配置文件复制到容器中(如 /attic/server.toml)。
    • 暴露端口8080,并以单体模式 (--mode monolithic) 启动Attic服务器。
  2. Fly.io配置 (fly.toml)
    • 创建应用并设置主区域(如 sea)。
    • 创建持久化卷:使用 fly volume create atticdata -r sea -n 1 命令创建卷,并在配置中挂载到 /data 目录,以持久化SQLite数据库。
    • 配置HTTP服务:内部端口8080,强制HTTPS,设置自动启停机器。
    • 配置并发限制(例如软硬限制为1000连接)。
    • 建议:使用 fly deploy --ha=false 部署,仅创建一台机器。内存建议至少512MB,以便在推送缓存时处理并发任务。

使用缓存

  1. 生成Attic令牌
    • 通过 fly machine exec 在已部署的机器上运行 atticadm make-token 命令生成拥有完整权限的令牌,并将其安全加密存储。
  2. 登录与推送
    • 使用生成的令牌登录缓存服务器(attic login)。
    • 创建缓存并推送系统配置(例如 attic cache create systemattic push system /run/current-system)。

配置NixOS使用私有缓存

  1. 获取缓存公钥:使用 attic cache info system 命令获取。
  2. 配置NixOS
    • 在NixOS配置中,将私有缓存URL添加到 substituters 列表,并设置其优先级(例如43)。
    • 将缓存的公钥添加到 trusted-public-keys 列表。
    • 创建包含认证信息的 netrc 文件,并建议使用 sops-nix 等工具加密管理,将其挂载到系统路径(如 /run/secrets/attic/netrc)。
    • 在配置中指定 netrc-file 的路径。

工作流程

配置完成后,NixOS机器在重建时将按优先级检查多个缓存:官方NixOS缓存(40)、公共缓存(41、42),最后是本私有缓存(43)。若所有缓存均未命中,则从源码构建。

后续展望

作者计划在未来文章中介绍如何通过GitHub Actions自动构建NixOS系统配置并推送到此私有缓存。

36. Launch HN: Talc AI (YC S23) – Test Sets for AI
37. Systemd: Enable Indefinite Service Restarts (michael.stapelberg.ch)

文章介绍了如何配置Systemd以实现服务无限重启,并解释了默认设置的局限性。

Systemd默认会在服务连续多次启动失败后放弃重启。作者认为这对服务器环境并不理想,因为服务无限重启有助于自动恢复,尤其是在服务间无循环依赖时,所有服务最终都能在暂时故障后启动。

文章提供了两种实现无限重启的方法:

  1. 为单个服务启用:创建/etc/systemd/system/restart-drop-in.conf文件,设置StartLimitIntervalSec=0Restart=alwaysRestartSec=1s。然后通过为特定服务创建符号链接来应用此配置。
  2. 更改所有服务的默认设置:创建/etc/systemd/system.conf.d/restartdefaults.conf文件,设置DefaultRestartSec=1sDefaultStartLimitIntervalSec=0

文章分析了默认设置的限制:默认DefaultRestartSec=100msDefaultStartLimitIntervalSec=10sDefaultStartLimitBurst=5,意味着服务在10秒内崩溃超过5次后,Systemd将停止重启。作者推测此默认设置可能是为了防止笔记本电脑电池快速耗尽,但认为通过调整DefaultRestartSec为更宽松的值(如5秒)即可避免此问题。文章最后提到上游正在讨论是否更改这些默认设置。

38. Ask HN: What's the best car without undesirable features?
39. Use Plaintext Email (2019) (useplaintext.email)

纯文本电子邮件使用指南 (2019)

本文介绍了互联网上两种主要的电子邮件类型:纯文本和HTML。许多技术社区强烈偏好甚至要求使用纯文本邮件。文章提供了配置指南、规范建议,并对比了纯文本相比HTML的优势。

推荐的纯文本邮件客户端

以下客户端默认以纯文本撰写邮件,无需额外配置即可正确使用:

  • TUI客户端:aerc、alpine、bower、mblaze、meli、mmh、Mutt、neatmail、NeoMutt、nmh、Sup等。
  • GUI客户端:Claws Mail、KMail、MailMate、Sylpheed等。
  • Webmail客户端:Cypht、Roundcube、SquirrelMail等。
  • Emacs客户端:Gnus、mu4e、Notmuch、Wanderlust等。

其他客户端的纯文本设置

如果你的客户端不在推荐列表中,通常可以通过设置调整:

  • 常见客户端设置:在Gmail、Thunderbird、Outlook等中,找到“撰写格式”或“消息格式”选项,改为“纯文本”。
  • 回复设置:启用“在引用文本下方回复”或类似选项以实现底部引用。
  • 文本换行:确保客户端自动在72列处换行,或使用format=flowed
  • 网络邮件提供商:如Fastmail、Proton Mail等,可在设置中关闭HTML撰写。

纯文本邮件礼仪建议

  • 避免顶部引用:回复时,将引用的原文分割,并在相关部分下方直接回复,而非将整个历史放在顶部。
  • 文本换行:邮件正文应在72列处换行,以提高可读性和易引用性。
  • 引用格式:使用>符号和空格引用原文,并保留原文的缩进。

为何纯文本优于HTML?

  • 安全性:HTML邮件常被用于网络钓鱼攻击,隐藏真实链接;纯文本URL始终可见,更安全。
  • 隐私保护:HTML邮件中的链接和图片常包含追踪标识,用于收集用户信息;纯文本无此问题。
  • 减少垃圾邮件:HTML格式易被垃圾邮件发送者利用来绕过过滤器;纯文本可大幅减少垃圾邮件。
  • 客户端漏洞:HTML渲染复杂,是邮件客户端漏洞的主要来源;纯文本更安全。
  • 可访问性:纯文本对屏幕阅读器等辅助工具更友好,HTML邮件的可访问性较差。
  • 兼容性:部分客户端(如终端环境中的)不支持HTML,纯文本邮件可被所有人正常阅读。
  • 富文本非必需:强调文本可用*星号*_下划线_等实现,图片可作为附件发送。

邮件发送软件建议

  • 自动邮件发送:若必须使用HTML,应发送multipart/alternative邮件,同时包含纯文本和HTML版本。
  • 用户撰写邮件
    • 默认提供纯文本撰写选项。
    • 自动换行纯文本邮件至72列,或使用format=flowed
    • 回复时,光标应置于引用消息下方,避免顶部引用。
    • 允许用户编辑引用内容,并以> 格式引用每行。
    • 当用户发送HTML邮件时,转换为text/plain并发送multipart/alternative邮件。
    • 显示multipart/alternative邮件时,优先提供纯文本查看选项。

如何改进建议

欢迎通过纯文本邮件(地址:~sircmpwn/public-inbox@lists.sr.ht)提交建议或客户端配置指南,也可发送补丁。相关代码位于git.sr.ht。

注:本指南以HTML呈现是因为它是参考文档,而非电子邮件。

40. Machine embroidery of light-emitting textiles with electroluminescent threads (www.science.org)

提供的文章内容无法访问,页面显示为Cloudflare安全验证页面(“Just a moment…”)。这表明链接被安全措施拦截,未能加载文章正文。

由于无法获取“Machine embroidery of light-emitting textiles with electroluminescent threads”一文的实际内容,因此无法生成相应的摘要。

41. Most STEM grads don't work in STEM jobs (www.tampabay.com)

大多数STEM(科学、技术、工程、数学)毕业生并未从事STEM相关职业。文章指出,如果不进行改革与转变,STEM专业将继续被过度推崇。文中以OpenAI的标志和Dall-E模型生成的图像作为配图,但核心论点集中在STEM教育与就业市场之间的脱节问题。此外,文中还包含《坦帕湾时报》电子报纸的订阅广告,但此内容与主题无关。

42. How Monopolists drive the power and wealth divide (www.globaljustice.org.uk)

主题分析: 当前提供的文章内容为Cloudflare安全验证页面的HTML代码,未包含实际的文章文本。因此,无法基于内容进行事实性总结。仅根据标题《垄断者如何推动权力和财富鸿沟》推测,这是一篇讨论经济与社会议题的文章,其核心可能涉及垄断企业对社会权力分配与财富不平等的负面影响。

基于标题的合理推断: 文章很可能探讨垄断组织(如大型科技公司、行业寡头)如何通过以下机制加剧社会分化:

  1. 财富集中: 垄断利润被少数股东和高管获取,导致财富向顶层集中。
  2. 议价能力失衡: 垄断企业可能压制员工工资和供应商价格,扩大内部收入差距。
  3. 政治影响力: 利用巨大财富进行政治游说或资助,塑造有利于自身的政策法规,进一步巩固其权力地位。
  4. 创新与选择受限: 抑制市场竞争,减少消费者选择,可能抑制整体经济活力和创新。

结论: 由于未能获取文章原文,以上仅为基于标题的推测性概述。摘要的具体内容需在能够访问文章实际文本后方可生成。

43. How to Design an ISA (queue.acm.org)

文章摘要:How to Design an ISA

基于提供的内容,文章标题为“How to Design an ISA”(如何设计ISA),但实际内容仅包含以下元数据信息:

  • IP地址:153.3.251.216
  • 代码标识符:RAY: a0331c8ed92911d4
  • 版权声明:Copyright © , ACM, Inc

由于内容未涉及ISA设计的具体讨论、目的、结构或关键功能,因此无法总结实质性技术细节。文章可能以元数据形式呈现,或内容不完整。

44. TextEditors.org – A website about every known software Text Editor (texteditors.org)

TextEditors.org 网站概述

网站性质与目标
TextEditors.org 是一个基于Wiki技术的社区驱动网站,自2003年5月23日上线,致力于收录和探讨所有已知的文本编辑器。该平台包容性极强,涵盖任何操作系统、平台、芯片架构或编程语言相关的文本编辑器,目标是构建网络上最全面的文本编辑器信息库。截至资料更新时,已收录超过2000个编辑器。

社区与协作
网站采用Wiki模式,允许任何人创建、修改或删除条目,旨在围绕文本编辑器相关议题建立活跃社区。内容遵循统一的格式标准,贡献者需参照现有条目规范添加信息,并注册到贡献者名单。

主要板块内容
网站内容结构清晰,主要分为以下类别:

  1. 关于文本编辑器

    • 编辑器索引与分类:包括总索引(EditorIndex)、按家族分类的列表(TextEditorFamilies)以及未分类编辑器索引。
    • 选择与对比:提供如何选择文本编辑器(PickingATextEditor)、编辑器功能对比(CategoryFeatures)、编辑器历史(EditorHistory)、编辑器能力探讨(EditorPower)等讨论。
    • 实用技巧:包含通用技巧(GeneralTipsAndTricks)、常见问题(FAQ)、投票页面(TextEditorVotingPage)以及关于软件许可(AboutLicenses)的信息。
  2. 编辑器使用

    • 涵盖使用指南、知名程序员(真实或虚构)使用的编辑器列表,以及面向初学者的编辑指南。
  3. 编辑器扩展

    • 探讨插件架构(PluginArchitectures)、宏语言能力(MacroLanguagePower)、编辑器与集成开发环境的对比(EditorsVsIDE)、调试器集成(DebuggerIntegration)、邮件集成(MailIntegration)以及十六进制编辑器(HexEditors)等功能。
  4. 编辑器编程

    • 涉及文本编辑器设计(DesigningTextEditors)、核心编程(CoreTextEditorProgramming)、宏语言编程、设计标准、测试(TestingTextEditors)、以及键盘、字体、显示器等硬件因素对编辑体验的影响。
  5. 人类语言文档处理

    • 讨论与文字处理器(WordProcessors)、桌面排版软件(DesktopPublishers)及标记语言(MarkupLanguage)的关联。
  6. 编辑器相关文化

    • 包含编辑器幽默(如EmacsHumor、ViHumor)、相关网络日志、新闻组(如comp.editors)及IRC频道等资源。
  7. 编辑器开发者与用户

    • 列出众多知名文本编辑器的作者(如Bram Moolenaar - Vim作者,Richard Stallman - GnuEmacs设计者)。
    • 展示了多位业界名人(如Linus Torvalds, Ken Thompson, Bjarne Stroustrup等)偏爱使用的编辑器。

网站维护信息
网站包含关于Wiki使用说明、格式规则、信息块标准、建议提交渠道、防垃圾信息措施、访客簿、贡献者名单、规则说明以及站点维护状态(如停机记录)等相关板块。

45. History Is Written by the Losers (2016) (scholars-stage.org)

历史常由失意者书写。文中以司马迁和修昔底德为核心,指出许多伟大历史著作皆出自政治失势者之手:司马迁因直谏遭宫刑,为完成《史记》忍辱负重;修昔底德因战败被流放,从而潜心撰写《伯罗奔尼撒战争史》。类似例子包括希罗多德被流放后著《历史》、波利比乌斯作为人质在罗马写作、约瑟夫斯记录犹太亡国等。

作者认为,失败赋予史家两样关键条件:时间动机。掌权者无暇著述,而失势精英则通过历史书写延续其思想影响力——如修昔底德借赞誉斯巴达将领布拉西达斯来弱化自身败绩,司马迁则以史笔重塑汉武帝的历史形象。历史编纂成为失意精英在现实权力受挫后进行思想斗争的领域,其评判虽非“弱者武器”,却能跨越时代产生持久影响。

46. Automatic class sorting with Prettier (2022) (tailwindcss.com)

Tailwind CSS 官方推出了 prettier-plugin-tailwindcss 插件,旨在彻底解决项目中工具类(utility classes)排序不一致的问题。该插件能自动扫描模板文件,并按照官方推荐的顺序对 class 属性中的类进行排序。

核心功能与安装

  • 作用:自动排序模板(如 HTML、JSX、Vue 等)中的 Tailwind CSS 类。
  • 安装:作为开发依赖安装 prettierprettier-plugin-tailwindcss
  • 配置:在 Prettier 配置文件(如 .prettierrc)的 plugins 数组中添加 "prettier-plugin-tailwindcss"

排序规则详解

插件排序逻辑基于 Tailwind 生成 CSS 的顺序,并遵循以下原则:

  1. 层级顺序:首先按 CSS 层级排序,顺序为:基础层 (base)组件层 (components)工具层 (utilities)
  2. 工具类内部排序
    • 基于盒模型:影响布局、高影响力的类(如 flex, p-4)在前,装饰性类(如 shadow-md, text-gray-700)在后。
    • 相关类分组:相关的工具类会尽可能放在一起(例如,所有定位、所有间距相关的类)。
    • 覆盖关系:后出现的类会覆盖先前的类,因此列表中排序靠后的类具有更高优先级。
  3. 修饰符排序
    • 状态修饰符(如 hover:, focus:):分组后排列在所有无修饰符的普通工具类之后。
    • 响应式修饰符(如 sm:, md:, lg:):按主题配置中从最小到最大的顺序(默认是从小到大),分组排列在最后。
  4. 自定义类处理:非来自 Tailwind 插件的自定义类(如第三方库的类)会被排序到最前面,以便开发者快速识别。

设计哲学与限制

  • 零配置:该插件与 Prettier 的理念一致,提供统一的、固定排序规则,不提供自定义排序顺序的选项。团队认为,消除关于类顺序的争论和格式不一致所带来的好处,远超过个人风格偏好。
  • 兼容性:插件会尊重项目的 tailwind.config.js 及已安装的任何 Tailwind 插件,但核心排序逻辑不可更改。
  • 工作环境:作为标准 Prettier 插件,它可在所有支持 Prettier 的编辑器、IDE 和命令行中无缝使用。
47. Benchmarking Postgres Vector Search Approaches: Pgvector vs. Lantern (tembo.io)

PostgreSQL向量搜索方案基准测试对比:Pgvector vs. Lantern

本文是一篇针对PostgreSQL数据库中向量搜索(Vector Search)实现方案的技术基准测试报告,主要聚焦于对比两种流行的扩展工具:PgvectorLantern

核心内容概述如下:

  • 目的:通过基准测试,评估并比较Pgvector和Lantern在处理相似性搜索等向量查询任务时的性能、功能及适用场景。
  • 对比主体
    • Pgvector:PostgreSQL最广泛使用的开源向量相似性搜索扩展,支持近似最近邻(ANN)搜索。
    • Lantern:另一个为PostgreSQL设计的向量搜索扩展,通常强调高性能和易用性。
  • 关键对比维度(推断自标题及常规基准测试内容):文章可能涵盖了以下方面的测试:
    • 查询性能(如QPS、延迟)
    • 索引构建速度与资源消耗
    • 内存使用效率
    • 不同维度向量和数据集规模下的表现
    • 功能集成(如SQL语法兼容性、混合查询支持)
    • 部署与维护的复杂度
  • 技术背景:基准测试旨在为开发者和架构师在选择基于PostgreSQL的向量数据库或检索方案时,提供客观的数据参考。

文章版权信息显示为 © 2026 Tembo Data Systems,并注明该公司已通过 SOC 2 Type II 认证。

50. Ask HN: What is the state of art approximate k-NN search algorithm today?