2025-05-20

42 篇热帖

1. The Windows Subsystem for Linux is now open source (blogs.windows.com)

Today we’re very excited to announce the open-source release of the Windows Subsystem for Linux. This is the result of a multiyear effort to prepare for this, and a great closure to the first ever issue raised on the Microsoft/WSL repo:

2. DDoSecrets publishes 410 GB of heap dumps, hacked from TeleMessage (micahflee.com)

分布式拒绝服务秘密(Distributed Denial of Secrets)组织发布了从以色列公司 TeleMessage 窃取的 410 GB 堆转储数据。TeleMessage 生产 Signal、WhatsApp、Telegram 和微信的修改版本,这些版本能够集中存档消息。由于数据敏感且包含大量个人身份信息,该组织仅与记者和研究人员共享。

此事件的背景时间线如下:

  • 2025年3月:时任国家安全顾问迈克·华尔兹邀请一名记者加入一个 Signal 群组,该群组被用于讨论军事行动,引发了国会听证会。
  • 2025年5月1日:华尔兹被拍到使用 TeleMessage 的产品 TM SGNL,与特朗普政府高级官员通信。
  • 2025年5月3日:研究员公开了 TM SGNL 的源代码。
  • 2025年5月4日及5月5日:TeleMessage 遭到两次黑客攻击。
  • 2025年5月6日:对源代码和部分泄露数据的分析证明,TeleMessage 谎称其产品支持端到端加密,实际上公司可以访问明文聊天记录。
  • 2025年5月18日:详细披露了服务器的漏洞,任何人访问特定网址即可下载包含明文聊天记录等敏感信息的堆转储文件。

目前,DDoSecrets 公布的这批数据包含数千个堆转储,其中部分内容为明文消息,其他部分则包含元数据(如发送者和接收者信息、时间戳和群组名称)。该组织已从原始堆转储中提取了文本以便于研究。

4. GitHub Copilot Coding Agent (github.blog)

Backlog getting you down? Drowning in technical debt? Delegate issues to Copilot so you can focus on the creative, complex, and high-impact work that matters most. Copilot coding agent makes…

5. Have I Been Pwned 2.0 (www.troyhunt.com)

Have I Been Pwned 2.0 全面升级上线

经过长期开发,Have I Been Pwned (HIBP) 2.0 全新网站已正式上线。此次更新进行了全面重建,几乎改进了每个页面的功能,并添加了大量新特性。

核心功能更新

搜索功能优化

  • 前端搜索框是HIBP的核心功能,现在搜索结果中会随机显示彩色纸屑动画以提升用户体验,旨在以更轻松的方式呈现事实信息,而非制造恐慌。
  • 重要变更:网站移除了对用户名和电话号码的搜索支持。这是因为这类数据难以解析、无法发送通知且仅在少数泄露事件中出现。该功能仅保留在API中,以维持向后兼容性。

泄露详情页面

  • 为每个数据泄露事件创建了独立的详情页面,提供更清晰、更用户友好的信息展示。
  • 页面新增了**针对性的“事后建议”**部分,指导用户在信息泄露后应采取的具体措施,并计划与身份保护等服务提供商合作。
  • 未来将根据具体情况(如是否支持双因素认证、通行密钥等)提供更本地化的建议。

用户仪表板

  • 将此前分散的多项需要身份验证的功能(如敏感泄露查看、域名搜索、API密钥管理、窃取器日志查看等)统一整合到一个中心化仪表板中。
  • 所有功能均需通过邮箱验证后访问。未来计划支持通行密钥登录,避免每次都需要发送验证邮件。
  • 该平台将为开发需要验证邮箱的新功能(如为家人邮箱订阅通知)奠定基础。

域名搜索功能

  • 对此功能投入了大量精力进行重构。新界面提供了更简洁的已验证域名列表更清晰的搜索结果摘要
  • 新增了过滤功能,支持按邮箱地址和仅最新泄露事件进行筛选。
  • 整个仪表板作为单页应用运行,由API提供JSON数据,响应速度非常迅速
  • 域名所有权验证界面也进行了完全重写,更加简洁。

API 稳定性

  • API本身未做任何更改,此次更新不会破坏现有集成。
  • 原计划采用基于OpenAPI的新文档系统(Scalar),但因时间紧张暂未完成。目前将旧文档迁移至新网站模板,外观保持一致,未来将继续完善。

新增特性与运营改进

周边商品商店

  • 响应用户需求,HIBP推出了官方周边商品商店 (merch.haveibeenpwned.com)。
  • 所有商品均按成本价销售,团队不从中盈利,仅为社区提供趣味产品。贴纸等产品仍通过原有渠道提供。

技术实现与性能

  • 技术栈:后端运行在Microsoft Azure上,使用C#、.NET 9.0、ASP.NET Core。前端使用最新版Bootstrap、SASS和TypeScript。Cloudflare继续发挥关键作用,包括Workers、R2存储、WAF和缓存。
  • 反自动化:现已完全弃用Google reCAPTCHA全面采用Cloudflare Turnstile。该服务旨在无缝验证,挑战失败时会提供友好提示并引导用户重试。网站上线后已修复了初始的回退机制问题。
  • 性能提升:与旧网站相比,页面大小减少28%HTTP请求数减少31%。网站不包含任何跟踪或广告代码,流量统计基于Cloudflare数据。
  • AI应用:在开发过程中,团队广泛使用了ChatGPT等AI工具,在图标选择、脚本编写、CSS建议、配置调试等方面提供了高效帮助,显著提升了工作效率。

开发历程与上线情况

  • 项目始于2024年2月,品牌于2025年3月软启动,整个开发过程耗时漫长且工作量巨大。
  • 网站于周末凌晨上线,过程中出现并快速修复了少量小故障。上线后已发布了十几个新版本以持续优化。
  • 开发者Troy Hunt表示,高强度的工作甚至触发了健康警报,凸显了项目的繁重程度。

此次升级标志着HIBP从一个个人项目进化为一个更专业、更完善的服务平台,同时保留了其核心的易用性和事实导向特质。

6. Dilbert creator Scott Adams says he will die soon from same cancer as Joe Biden (www.thewrap.com)

"Dilbert" creator Scott Adams said on Monday morning that he expects to die soon from prostate cancer, the same disease that Joe Biden has

7. European Investment Bank to inject €70B in European tech (ioplus.nl)

欧洲投资银行(EIB)计划在2027年前向欧洲科技领域注入高达700亿欧元的投资,旨在缩小与美国的创新差距,加强在人工智能、军用无人机等新兴技术领域的实力,并有望撬动高达2500亿欧元的私人投资。

为此,EIB将在今年晚些时候推出名为“TechEU”的倡议,建立一个集中化的融资申请平台,以简化流程,加快决策。EIB行长纳迪亚·卡尔维诺强调,银行将采取更具风险意识的融资策略,并承诺将初创企业的融资审批时间从目前的18个月缩短至6个月,以适应快节奏的技术市场。

该计划也利用了当前的地缘政治形势。卡尔维诺认为,美国经济政策的不确定性正在吸引更多国际投资者关注欧洲市场的稳定性和潜力。EIB致力于将自身打造成稳定与创新的灯塔,并已将国防与安全纳入其投资组合,因为这些领域的投资能与技术发展产生协同效应。

通过与私人投资者共同投资,EIB旨在激发信心、分担风险,从而催化整个欧洲科技生态系统的发展。该倡议正等待欧盟27个成员国财政部长的批准,预计将于下个月进行表决。

9. Making Video Games (Without an Engine) in 2025 (noelberry.ca)

2025年不使用商业引擎制作电子游戏

作者Noel Berry分享了他作为拥有20年经验的独立游戏开发者,在2025年不依赖Unity或Unreal等商业引擎,而是采用轻量级工具和自制框架制作游戏的哲学、工作流和技术选择。

核心理念:为什么不用商业引擎?

作者认为,对于他制作的特定类型游戏而言,大型“全能”引擎过于臃肿。他只用到其一小部分功能,却经常需要重写默认实现以达到理想的效果和手感。此外,商业引擎的业务决策风险(如突然更改授权模式)、强制更新可能破坏现有项目、以及问题修复响应缓慢,都削弱了其便利性。因此,他选择完全掌控自己的开发栈:使用小型、开源的框架和库,为具体需求编写定制工具。这使他能确保项目长期可维护(甚至在二十年后仍可编译),并享受开发过程本身。

技术栈详解

1. 编程语言:C#

  • 现代C#(2025年版本)已大幅改进,支持高性能语法(如在栈上分配动态数组)和热重载,非常适合游戏开发。
  • 易用性性能之间取得良好平衡。作者以其兄弟(编程新手)能在一年内用C#独立编写Boss战为例,证明了其可及性。
  • 内置反射功能,便于快速创建游戏对象的实时检查工具。

2. 底层框架与系统

  • 窗口、输入、渲染、音频:使用 SDL3 作为跨平台抽象层,它提供了从窗口管理到GPU抽象(支持DirectX、Vulkan、Metal)的全面功能,并能部署到PC、主机等多个平台。
  • 作者在SDL3之上封装了自己的 C# 层(Foster),包含通用的渲染和输入工具,以满足个人项目的需求。
  • 音频:使用专有工具 FMOD,因其能提供动态音频控制功能,满足音频团队需求。
  • 资产加载:方法直接。小型像素游戏通常一次性加载所有资源;大型项目则在启动时注册资源,按需加载并在场景转换后释放。

3. 编辑器与工具链

  • 关卡编辑器:通常为项目定制开发,以紧密集成游戏数据。
  • UI:使用轻量级、即时模式GUI库 Dear ImGui 来构建编辑器工具界面。结合C#反射,可以轻松创建游戏对象的检查界面。
  • 对于更复杂的专业工具(如3D环境设计),会使用现成工具如 Trenchbroom

4. 移植与跨平台

  • C#的 Native-AOT 工具链已成熟,允许将C#代码直接编译为针对各主机平台的本机代码,解决了早期部署的难题。
  • SDL3 的广泛平台支持,使得基于它构建的游戏更容易移植。
  • 作者已将开发环境完全迁移到Linux,认为其更优雅、高效,并符合其使用开源工具的理念。虽然仍部分依赖微软生态(如VSCode、C#、GitHub),但Linux日常使用体验良好。

对常见疑问的回应

  • Godot:作者认为它是一个优秀的开源引擎选择,但通常不是他个人偏好的工作方式。
  • 3D游戏:他认为大型引擎对3D更有优势,但即便是3D项目(如《Celeste 64》),他也会倾向于自建轻量级框架,特别是对于风格化游戏。
  • 团队与技术栈:承认将大团队迁移到自定义工具成本高昂,但指出许多中型工作室正因规避商业引擎风险而转向自研引擎。对于小型或个人团队,自定义工作流更为可行。

总结

作者倡导一种更自由、可控的游戏开发方式:利用现代开源库和框架,针对项目具体需求构建精简工具链。这不仅是为了规避大型引擎的缺点,更是因为这种方式本身更有趣,并能带来更深层次的技术理解和创作自由度。他的最终建议是:如果这听起来有趣,就去做。

10. Finland announces migration of its rail network to international gauge (www.trenvista.net)

芬兰政府宣布将把铁路网络从俄罗斯轨距(1,524毫米)转换为国际标准轨距(1,435毫米)。这一历史性决定旨在加强与欧盟和北约的融合,改善军事机动性和区域安全,特别是在芬兰加入北约及与俄罗斯关系紧张的背景下。

该计划由交通部长卢卢·兰内提出,将于2032年左右开始建设,初期从北部奥卢附近启动,以消除芬兰与瑞典、挪威之间运输部队和货物的技术障碍。预计到2027年7月做出最终决定。

项目耗资数十亿欧元,涉及超过9,200公里的轨道,并将持续数十年。欧盟可能提供关键资金,覆盖高达50%的规划成本和30%的建设成本。此举象征着芬兰在地缘政治和战略上的转向,使其基础设施完全与欧洲接轨。

11. A simple search engine from scratch (bernsteinbear.com)

从零构建一个简易搜索引擎(基于词向量)

本文介绍了作者与Chris从零开始构建一个博客搜索引擎的实验过程,核心技术基于词嵌入(word embeddings),具体使用了预训练的word2vec模型。

核心原理与设计

  1. 词嵌入与文档表示

    • 使用word2vec将单词映射到300维向量空间,每个维度大致对应一种语义特征。
    • 文档嵌入通过对其包含的所有单词的词向量求和得到。
    • 查询也以相同方式转换为向量。
  2. 相似度度量

    • 使用余弦相似度比较查询向量与文档向量。
    • 公式:余弦相似度 = (向量点积) / (向量模长的乘积)。
    • 选择余弦相似度而非欧氏距离,因为它能更好地捕捉语义相似性,忽略文档长度的影响。

具体实现步骤

1. 词嵌入加载与预处理

  • 使用一个包含前10,000个常用词嵌入的pickle文件(12MB),格式为字典映射(单词 -> 300维浮点数向量)。
  • 提供embed_wordembed_words函数实现单词和短语的向量嵌入。
  • 文本预处理:通过normalize_text函数统一转换为小写并移除标点符号,提高匹配效果。

2. 文档索引构建

  • 遍历_posts目录下的所有Markdown文件。
  • 对每篇文章进行文本预处理,并计算其嵌入向量(所有单词向量之和)。
  • 将文档路径与对应嵌入向量存储为字典,便于后续查询。

3. 交互式搜索界面(命令行)

  • 基于Python的code.InteractiveConsole构建一个简易的命令行搜索REPL(交互式环境)。
  • 实现search函数:对查询文本进行预处理和嵌入,计算所有文档与查询的余弦相似度,返回相似度最高的前N个文档路径。

4. Web端搜索优化

为避免在Web端下载整个12MB的词嵌入文件,采用了以下优化策略:

  • 拆分数据:将词嵌入字典拆分为:
    • index.json(244KB):包含单词到其向量在文件中字节偏移量和长度的映射。
    • vecs.jsonl:按顺序存储所有单词的向量数据。
  • 按需加载:使用JavaScript的fetch和HTTP Range请求,仅下载查询中涉及单词对应的向量片段(约4KB)。
  • 文档嵌入:预先计算所有文章的嵌入向量,存储为post_embeddings.json(388KB),在Web端一次性加载。
  • 用户查询时,在客户端动态获取所需单词的向量,计算查询嵌入,再与文章嵌入比较排序。

效果评估

  • 构建了一个小型评估数据集,手动为部分文章指定关联的搜索关键词。
  • 实现compute_top_k_accuracy函数,计算在不同关键词数量下,目标文档出现在搜索结果前k位的准确率。
  • 结果显示:
    • 随着k值增加,准确率上升。
    • 使用更多关键词(增加查询信息量)能提高准确率,但边际效益递减。
    • 存在因词汇表限制导致的“未知词”问题,可能影响效果。

总结与展望

  • 该实验证明,仅需约百行代码即可构建一个基于语义的简易搜索引擎。
  • 未来改进方向包括:
    • 引入TF-IDF(词频-逆文档频率)技术,降低常见词的权重,提升稀有词对相似度计算的影响。
    • 使用更大的词向量模型以减少未知词。
  • 完整代码已开源。

完整实现可在作者GitHub仓库的search.py文件中查看。

13. Microsoft's ICC blockade: digital dependence comes at a cost (www.techzine.eu)

微软对国际刑事法院的封锁:数字依赖的代价

核心事件:2024年2月,美国对国际刑事法院(ICC)实施制裁。作为直接后果,ICC首席检察官卡里姆·汗无法访问其微软电子邮件账户,其银行账户亦被冻结。该事件导致ICC工作陷入瘫痪。冲突源于ICC此前对以色列总理发出逮捕令。

揭示的核心风险:该事件凸显了依赖美国IT服务的显著风险。任何不愿完全遵循美国地缘政治立场的实体,都必须在软件使用上准备备选方案(Plan B)。

欧洲的评估与现状

  • 欧洲政府此前曾认为使用微软服务的风险尚可接受。例如,荷兰政府于2023年10月持此立场,认为Azure、Microsoft 365等服务的优势足以抵消潜在的主权问题。
  • 然而,美国政府(特朗普时期)对欧盟及其成员国采取了更不友好的立场,地缘政治紧张局势加剧了风险。

微软的承诺与局限

  • 微软已承诺,若华盛顿要求访问欧洲公民数据,将诉诸法庭抗辩。
  • 微软强调,其主权云服务的加密和访问管理技术上可阻止欧洲以外地区的访问。
  • 但关键在于不确定性:此类承诺可能被撤销或被秘密规避。若微软在法庭败诉,仍可能被迫改变策略。

结论与启示

  • 该案例表明,将国家关键职能过度依赖于任何单一美国IT服务提供商存在隐患。例如,若荷兰政府在ASML光刻机等政策上与美国产生分歧,其公务员系统是否具备独立于微软、不受美国封锁的替代账户和通信渠道?
  • 核心教训:国家安全不能依赖于服务水平协议(SLA)的承诺。
  • 当前动向:ICC正积极寻找已丧失服务的欧洲替代品。这反映了关于欧洲数字自主权的更广泛担忧。市场上存在许多功能相似的服务,但其是否具备企业级成熟度、安全性和完全主权保障,仍是关键问题。
14. I got fooled by AI-for-science hype–here's what it taught me (www.understandingai.org)

I used AI in my plasma physics research and it didn’t go the way I expected.

15. Game theory illustrated by an animated cartoon game (ncase.me)

an interactive guide to the game theory of why & how we trust each other

16. Edit is now open source (devblogs.microsoft.com)

Edit 开源命令行文本编辑器

微软宣布推出适用于Windows的命令行文本编辑器Edit,并已开源。用户可通过GitHub仓库构建代码或安装最新版本。

基本信息

  • 编辑器类型:命令行文本编辑器,无需图形界面切换即可直接在命令行中编辑文件。
  • 开源状态:完全开源,代码托管在GitHub仓库
  • 发布计划:未来几个月内通过Windows Insider Program预览,后续将作为Windows 11内置组件发布。
  • 使用方法:在命令行输入editedit <文件名>即可启动。

主要功能特性

  1. 轻量化
    体积小于250KB,占用空间极小,适合集成到操作系统镜像。

  2. 鼠标模式支持
    作为无模式编辑器,提供文本用户界面(TUI),所有菜单选项均支持键绑定,同时兼容鼠标操作。

  3. 多文件编辑
    支持同时打开多个文件,可通过Ctrl+P或界面右下角文件列表快速切换。

  4. 查找与替换
    使用Ctrl+R或菜单中的“替换”选项,支持区分大小写匹配和正则表达式。

  5. 自动换行
    通过Alt+Z或菜单中的“自动换行”选项启用文本自动换行功能。

开发背景

微软开发Edit的主要动机是解决64位Windows系统缺乏内置命令行编辑器的问题。32位系统内置了MS-DOS编辑器,但64位系统此前没有合适的轻量级替代方案。

开发团队选择无模式编辑器设计,避免了类似vim等模态编辑器可能给新用户带来的操作复杂度(例如“如何退出vim”的常见困扰)。然而,现有无模式编辑器要么缺乏Windows官方支持,要么体积过大不适合捆绑进操作系统,因此催生了Edit的开发。

开源与反馈

编辑器现已开源,用户可自行构建或安装。相关问题和反馈可在GitHub仓库中向开发团队提出。

17. CERN gears up to ship antimatter across Europe (arstechnica.com)

A portable containment device that can be dropped on a truck.

19. Jules: An Asynchronous Coding Agent (jules.google)

Jules is an Autonomous agent that gets out of your way. It lets you focus on the coding you want to do, meanwhile picking up all the other random tasks that you rather not do.

20. Reports of Deno's Demise Have Been Greatly Exaggerated (deno.com)

Addressing recent Deno criticisms and sharing our vision for the future

21. The behavior of LLMs in hiring decisions: Systemic biases in candidate selection (davidrozado.substack.com)

Hints of discrimination and lack of principled reasoning in frontier AI systems

22. Why does the U.S. always run a trade deficit? (libertystreeteconomics.newyorkfed.org)

Persistent shortfalls in domestic savings, requiring funds from abroad to finance domestic investment spending, could be why the U.S. runs a trade deficit.

24. Kilo: A text editor in less than 1000 LOC with syntax highlight and search (github.com)

Kilo 文本编辑器

Kilo 是一个代码行数少于 1000 行(使用 cloc 统计)的轻量级文本编辑器,主要特点包括语法高亮和字符串搜索功能。

主要功能与使用方式

  • 基本操作:通过命令 kilo <filename> 启动编辑器。
  • 核心快捷键
    • CTRL-S:保存文件。
    • CTRL-Q:退出编辑器。
    • CTRL-F:在文件中查找字符串。在搜索模式下,使用方向键导航,按 ESC 退出搜索。

技术特点与设计

  • 无外部依赖:Kilo 不依赖任何库(甚至包括 curses),完全使用标准的 VT100 终端转义序列实现功能。
  • 项目状态:项目目前处于 Alpha 阶段,其开发时间很短,并复用了作者此前项目 load81linenoise 的部分代码。
  • 项目目的:作者鼓励开发者将 Kilo 作为起点,用于构建比传统 REPL(交互式解释器)风格命令行界面更高级的编辑器或 CLI 工具。

项目信息

  • 作者:Salvatore Sanfilippo(网名 antirez)。
  • 许可证:以 BSD 2 条款许可证发布。
  • 演示:项目主页提供了一个在线演示链接。
25. Show HN: Windows 98 themed website in 1 HTML file for my post punk band (corp.band)

Windows 98 风格单文件乐队网站总结

项目概述

这是一个为后朋克乐队 CORP 设计的、完全由单个 HTML 文件构成的网站,其核心设计理念是模拟 Windows 98 操作系统 的经典图形用户界面。

网站结构与功能

网站主界面模仿了 Windows 98 桌面,通过不同的图标代表各个功能模块。用户点击这些图标即可导航到相应内容。

主要功能模块:

  1. 事件
    • 展示乐队的活动日历与演出信息。
  2. 社交媒体
    • 链接到乐队的 YouTube 频道(@corp.812)。
  3. 商品
    • 列出了可购买的官方商品,包括:
      • Financial Accounting Services - $25
      • Human Resource - $15
      • Premium .mp3 - $30
      • Insider Trading Tip - $20
    • 提供了指向 Bandcamp 商店的购买链接。
  4. 音乐
    • 鼓励访客收听乐队的音乐,并附有一个动态 GIF 图。
  5. 邮件列表
    • 邀请用户加入邮件列表以获取最新消息。
  6. 预订
    • 提供了通过电子邮件联系乐队进行演出预订的说明。
    • 包含一个指向乐队电子新闻资料的链接。
  7. 回收站
    • 作为 Windows 98 界面的一部分,显示为空状态。

设计与技术特点

  • 单文件实现:整个网站仅使用一个 HTML 文件,集成了结构、样式(可能内嵌 CSS)和内容,确保了极简的部署方式。
  • 复古操作系统主题:通过图标、交互逻辑和整体视觉风格,强烈模仿 Windows 98 的界面,旨在提供怀旧和独特的用户体验。
  • 内容聚焦:作为乐队官网,涵盖了演出信息、音乐推广、商品销售、粉丝互动和商务联系等核心功能。

总结

这是一个以高度创意和极简技术实现的单页网站,巧妙地利用 Windows 98 的怀旧界面来呈现后朋克乐队 CORP 的所有关键信息与互动功能,兼具艺术性与实用性。

26. xAI's Grok 3 comes to Microsoft Azure (techcrunch.com)

Microsoft on Monday became one of the first hyperscalers to provide managed access to Grok, the AI model developed by billionaire Elon Musk's AI startup, xAI.

27. The forbidden railway: Vienna-Pyongyang (2008) (vienna-pyongyang.blogspot.com)

ABOUT ME My name is Helmut and I was born in 1980 in Graz (Austria). Trains were my hobby since childhood. My 2nd hobby is travelling. Du...

30. OpenAI Codex hands-on review (zackproser.com)

I tested Codex on real repos from day one of the research preview. It's fast but fragile — here's where it works and where it falls apart.

33. Clojuring the web application stack: Meditation One (www.evalapply.org)

本文探讨了使用Clojure构建Web应用栈的理念与实践,强调其与传统框架的根本区别:组合优于集成。作者通过哲学思考、架构图解和代码示例,阐明了Clojure Web开发的核心原则。

核心理念

  • 框架 vs. 库:传统Web框架(如Rails、Django)提供一体化解决方案,但会导致架构固化、抽象泄漏和维护负担。Clojure文化强烈偏好库组合,开发者拥有完全控制权。
  • 工业自动化的隐喻:框架是工业自动化的产物,它改变了开发者看待问题的方式,可能限制创新思维。
  • 无统一架构:Clojure生态不存在“唯一正确”的Web框架或架构,这既是挑战也是灵活性的来源。

Clojure Web栈剖析(以Ring为中心)

  • 环规范(Ring Specification):定义了Web处理的标准化接口。请求和响应均表示为不可变的哈希映射,而非对象。
  • 分层架构图
    1. 业务逻辑层:用纯Clojure编写,使用核心数据结构。
    2. Ring库层:提供HTTP解析、工具函数和中间件机制。
    3. 适配器层:如ring-jetty-adapter,负责将Java对象(Jetty/Servlet)与Ring映射互相转换。
    4. 应用服务器层:如Jetty(嵌入式模式)。
    5. 外部边界:通过公共Web服务器(如Nginx)处理SSL和静态资源。

关键机制详解

  1. 处理器(Handler)
    • 纯函数,接受请求映射,返回响应映射。
    • 多态调度器,根据URI和HTTP方法路由到具体逻辑。
  2. 中间件(Middleware)
    • 高阶函数,接受一个处理器,返回一个增强的新处理器。
    • 用于横切关注点(如会话、日志、认证),实现类似面向切面编程的效果。
    • 执行顺序至关重要,构成处理流水线。
  3. 路由器(Router)
    • Ring本身不包含路由器,需借助库(如Compojure、Reitit)。
    • 示例中使用Clojure多方法(multimethod) 实现了基础路由,展示了基于HTTP方法和URI的多态分派。

最小可行示例

文章提供了一个仅依赖ring-jetty-adapter的极简Web应用代码:

  • 一个处理函数返回包含请求信息的文本响应。
  • 阐明了如何通过run-jetty函数启动服务器。
  • 演示了如何利用工具函数(如response, not-found)和中间件来组织代码,减少重复。

现状与实践建议

  • 入门栈推荐:对于新手,建议从 Ring + Jetty + Compojure + Hiccup + next-jdbc 开始,并可集成HTMX。这是一个稳定、可满足多数需求的生产级组合。
  • “类框架”栈:生态中存在更集成的选项,如Kit、Biff、Pedestal、Duct等,它们提供了预设的库组合和约定。
  • 依赖注入:可使用Component、Integrant等库来管理应用生命周期和依赖关系。
  • 学习资源
    • 动手实践Sean Corfield的usermanager-example等示例项目。
    • 观看Eric Normand等人的实战视频教程。
    • 参考Kit或Biff等现代栈的文档。
  • 哲学反思:开发者需成为“Web栈的学生”,理解组合原理,而非仅仅套用模板。这赋予了开发者在简单性和复杂性之间做精确权衡的能力。

结论

Clojure Web开发并非逃避框架,而是采用一种函数式、组合式的方法来构建应用。通过掌握Ring规范、处理器与中间件模型、以及库组合艺术,开发者能够构建出高度定制化、可维护且符合特定需求的Web应用栈。这种控制力是以初期的学习曲线为代价的,但长期来看能带来更大的灵活性和理解深度。

34. AI's energy footprint (www.technologyreview.com)

The emissions from individual AI text, image, and video queries seem small—until you add up what the industry isn’t tracking and consider where it’s heading next.

35. Biff – a batteries-included web framework for Clojure (biffweb.com)

A Clojure web framework for solo developers.

36. llm-d, Kubernetes native distributed inference (llm-d.ai)

Introducing llm-d: Kubernetes-native distributed LLM inference with KV-cache routing, disaggregated serving, and SOTA performance per dollar. Built on vLLM.

38. FCC Chair Brendan Carr is letting ISPs merge–as long as they end DEI programs (arstechnica.com)

Verizon got FCC approval after ending DEI. Now Charter and Cox plan to merge.

39. WireGuard vanity keygen (github.com)

WireGuard vanity key generator. Contribute to axllent/wireguard-vanity-keygen development by creating an account on GitHub.

40. Microsoft Open Sources Copilot (code.visualstudio.com)

We will open source the GitHub Copilot Chat extension. It’s the next step towards making VS Code an open source AI editor.

41. Terraform MCP Server (github.com)

The Terraform MCP Server provides seamless integration with Terraform ecosystem, enabling advanced automation and interaction capabilities for Infrastructure as Code (IaC) development. - hashicorp/terraform-mcp-server

42. Hotspot: Linux `perf` GUI for performance analysis (github.com)

The Linux perf GUI for performance analysis. Contribute to KDAB/hotspot development by creating an account on GitHub.