【HN中文日报】AI 编码助手爆火!Copilot 审计漏洞、新型地理空间格式、Lisp REPL 定制... 都在这儿了!

意外富翁 · 4个月前 · News · 28 · 0

今天 Hacker News 社区聊了啥? NO.20250820

本期日报干货满满!AI 编码助手 AGENTS.md 引领新潮流,但 Copilot 却被曝审计漏洞,微软捂盖子?还有 Tidewave Web 让你在浏览器里写 Rails 和 Phoenix!想知道如何在 3D 空间玩转球形螺旋?想定制你的 Lisp REPL?更有下一代地理空间瓦片格式和 Ruby 模板引擎优化等你探索。还在等什么?快来解锁今天的科技新姿势!

Hacker News 中文精选


3D 空间中移动物体:球形螺旋路径探索

本文通过可视化方式,深入浅出地讲解了如何在 3D 空间中移动物体,特别是沿着球形螺旋路径移动物体的方法。文章从基础的 3D 坐标系讲起,逐步介绍了如何利用数学函数控制物体在 x、y 和 z 轴上的运动,最终实现复杂的球形螺旋运动。

文章首先解释了 3D 空间中物体的位置由 x、y、z 三个坐标轴决定。通过改变这三个坐标轴上的数值,可以实现物体的移动。文章用一个立方体的例子,展示了如何通过正弦和余弦函数控制物体在 x 轴和 y 轴上的振荡运动。

接着,文章将二维运动扩展到三维,介绍了如何通过组合不同的函数,创建圆形、螺旋等更复杂的路径。特别地,文章详细解释了球形螺旋路径的实现原理,即通过正弦函数和余弦函数的组合,以及对 x、y、z 坐标的巧妙控制,使物体在球面上呈现螺旋形的运动轨迹。

文章还提到了参数方程的概念,即用一个或多个参数来表示物体的位置坐标。通过改变参数的值,可以控制物体在 3D 空间中的运动轨迹。最后,作者鼓励读者发挥创造力,利用这些知识创造出各种各样的 3D 运动效果。

评论区里,有读者提到了球形螺旋在早期航海中的重要性,因为保持恒定方位角更容易。还有读者认为这篇文章适合作为儿童学习数学的入门材料,并建议可以加入更多数学概念的回顾,例如圆的方程。另外,有评论建议可以深入探讨极坐标和线性代数等相关主题。一位教师表示,这篇文章对于讲解坐标系统和几何非常有用,并推荐了一本关于参数方程创建几何图形的书籍。总的来说,评论区对文章的实用性和教育意义给予了肯定,并提出了进一步改进的建议。


OCaml 代码编辑改进:重构引擎基础

这篇文章介绍了为 OCaml 编辑器 Merlin 增加重构功能的相关工作,重点是“提取表达式到顶层”的功能,类似于 IntelliJ 等 IDE 中的重构能力。这个功能可以将选中的表达式提取到一个新的 let 绑定中,方便代码的模块化和重用。

文章详细解释了“提取表达式到顶层”的工作原理,通过几个例子展示了如何提取常量、表达式以及依赖于变量的表达式。对于非纯表达式,该功能会使用 thunk 来延迟执行,避免改变程序的语义。对于依赖于当前作用域变量的表达式,该功能会自动生成一个函数,并将这些自由变量作为参数传递。

文章还展示了一个更复杂的例子,演示了如何提取类型 pretty print 逻辑。此外,文章还讨论了如何在编辑器中支持这个新功能,介绍了 Language Server Protocol (LSP) 提供的两种扩展机制:code actioncustom requests。Merlin 团队的策略是,对于不能直接映射到标准 LSP 请求的命令,提供一个 code action,如果需要自定义交互,则提供一个 custom request。例如,“提取”功能可以通过 code action 实现基本提取,通过 custom request 实现自定义 let 绑定的名称。

总的来说,这篇文章介绍了 Merlin 在 OCaml 代码重构方面的新进展,并展望了未来 OCaml 编辑器支持的发展方向,目标是提供类似 JetBrains IDE 的编辑体验。这个新功能旨在提高 OCaml 开发者的生产力,并鼓励开发者积极尝试并报告 bug。


Tidewave Web:Rails 和 Phoenix 的浏览器内编码助手

Tidewave Web 是一款直接在浏览器中运行的编码助手,专为 Rails 和 Phoenix 框架设计,旨在提供更便捷的开发体验。它通过共享页面上下文、深度框架集成和协作浏览器测试等功能,简化了开发流程。

Tidewave Web 的核心优势在于它能直接访问 UI 状态,理解框架结构,并在实际开发环境中运行。 开发者无需频繁切换工具,避免了描述页面内容、复制堆栈跟踪等繁琐操作。它通过点击 UI 元素,就能直接映射到相应的模板、控制器和视图,无需手动追踪代码路径。同时,它还能执行代码、查询数据库、监控日志、访问文档,拥有和开发者相同的工具。

该工具目前以 Rails 和 Phoenix 的软件包形式提供,需要 GitHub Copilot 订阅或 Anthropic API 密钥。安装后,可以通过 /tidewave 路由访问。虽然目前主要支持全栈 Rails 和 Phoenix 应用,但对 React 等客户端框架的支持也在计划中。

Dashbit 团队希望通过 Tidewave 探索 AI 开发者工具的新方向,他们认为下一代 AI 工具应该深入理解软件开发的各个领域和技术。

评论区里,有开发者表达了对这类工具的疑虑,认为离开 IDE 和 CLI 工具可能会降低效率。他们提到,虽然浏览器集成有一定好处,但可能不值得为此放弃现有的开发工作流。 也有人指出,现有的工具如 Claude Code 已经可以在后台运行服务器并查看日志,Tidewave Web 可能会降低代码的可视性。

不过,Dashbit 团队的 josevalim 回应说,他们正在积极开发 React 集成,并计划支持 Python 和 JavaScript 的服务器端 Web 框架。


AGENTS.md:AI 编码助手的新指南

AGENTS.md 是一个简单的开放格式,旨在指导 AI 编码助手,已被超过 2 万个开源项目使用,可以将其视为“代理的 README”,为 AI 编码助手提供上下文和指令,帮助它们更好地完成项目工作。

AGENTS.md 文件补充了 README.md 文件,后者主要面向人类,提供快速入门、项目描述和贡献指南,而 AGENTS.md 则包含构建步骤、测试和约定等 AI 编码助手所需的额外信息,这些信息可能会使 README 文件显得杂乱,或者与人类贡献者无关。AGENTS.md 的目标是为代理提供清晰、可预测的指令位置,保持 README 的简洁,并提供精确的、以代理为中心的指导。

AGENTS.md 文件的使用方法包括:在仓库根目录创建 AGENTS.md 文件,添加有助于代理有效工作的章节,例如项目概述、构建和测试命令、代码风格指南、测试说明和安全注意事项,还可以添加提交消息或拉取请求指南、安全注意事项、大型数据集和部署步骤等额外说明。对于大型单体仓库,可以在每个子项目中放置另一个 AGENTS.md 文件,代理会自动读取目录树中最近的文件,以便每个子项目都可以提供量身定制的指令。

评论区观点

评论区中,@CharlesW 建议使用 .agents 目录结构,包含 index.md 以及其他模块化的 .md 文件,以提供更清晰的结构和上下文管理,@laweijfmvo 对专门为 AI 编写文档的必要性表示惊讶,@blinkymach12 认为 AGENTS.md 的内容最终应融入到面向人类的文档中,@spawarotti 则认为 AGENTS.md 的流行是因为人们更愿意为机器人编写文档,@stillsut 分享了他自己使用的 .agdocs 目录结构,用于存放任务规范、配置文件、开发指南和临时文件。总的来说,评论区讨论了 AGENTS.md 的必要性、替代方案以及如何更好地组织和管理 AI 编码助手的文档。


MapLibre Tile:下一代地理空间瓦片格式

本文介绍了一种名为 MapLibre Tile (MLT) 的新型矢量瓦片规范,旨在克服现有 Mapbox Vector Tile (MVT) 格式的局限性,为下一代地图渲染器奠定基础。

MVT 格式虽然被广泛采用,但其设计年代较早,无法充分利用新型地理空间数据源的优势,这些数据源的数据量正随着传感器技术和人工智能的进步而迅速增长。MLT 通过从头开始的设计,旨在解决 MVT 的不足。实验表明,在编码瓦片集上,MLT 的压缩率比 MVT 高达三倍,在某些大型瓦片上甚至超过六倍。此外,MLT 的解码速度也快达三倍,并显著提高了处理性能。MLT 还引入了新功能,并专门设计用于为下一代地图渲染器奠定基础,期望将处理完全转移到 GPU,从而克服摩尔定律的停滞。简单来说,MLT 旨在通过更高的压缩率、更快的解码速度和更强大的处理性能,来满足日益增长的地理空间数据需求,并为未来的地图渲染技术提供支持。它代表着矢量瓦片格式的一次重大飞跃,有望推动地理空间应用的发展。


探讨积木堆叠问题:无限延伸的可能性与平衡原理

本文深入探讨了经典的积木堆叠问题,即如何堆叠积木,使其在桌子边缘的水平延伸距离最大化。文章揭示了一个令人惊讶的结论:通过增加积木的数量,可以使堆叠的水平延伸距离无限增大。

文章首先提出了三个引人深思的问题:仅仅堆叠四个积木,如何使最上面的积木完全悬空于桌面之外?为什么整个堆叠结构不会倾倒?水平延伸的距离是否真的没有限制? 接着,文章详细解释了积木堆叠的平衡原理,包括力矩、平衡和质心的概念。通过对四块积木堆叠的稳定性进行分析,文章逐步展示了如何计算每块积木的位移,以确保整体结构的稳定。

文章还介绍了用于计算每块积木位移的公式,并讨论了最顶层积木的无限位移。此外,文章还探讨了对数近似方法,用于估算积木堆叠的稳定性和质心分布。最后,文章深入研究了无限积木堆叠的可能性,分析了在无限情况下可能出现的奇特结果,例如完全没有积木堆叠,或者堆叠没有超出桌子边缘。

总而言之,这篇文章通过严谨的分析和清晰的解释,揭示了积木堆叠问题中蕴含的深刻物理原理和数学概念,挑战了我们对稳定性和无限性的直觉。


Claude Code PM:基于 GitHub Issues 和 Git Worktrees 的项目管理系统

本文介绍了一个名为 Claude Code PM 的项目管理系统,它利用 GitHub Issues 和 Git worktrees 来实现并行 agent 执行,旨在提升软件开发效率和协作质量。

Claude Code PM 旨在解决传统开发中常见的痛点,例如上下文丢失、并行工作冲突、需求蔓延和进度不透明等问题。该系统通过将 PRD(产品需求文档)转化为 Epics,再分解为 GitHub Issues,最终生成可执行的代码,从而实现全流程的可追溯性。其核心优势在于能够保持工作中的持久上下文,支持并行 agent 处理独立任务,实现规范驱动开发,并在 GitHub 中提供透明的审计跟踪。与传统的单人 AI 辅助开发模式不同,Claude Code PM 强调团队协作,允许多个 Claude 实例同时处理同一项目,开发人员可以实时查看 AI 进度,并无缝地进行人机交接。该系统还提倡“No Vibe Coding”原则,要求每一行代码都必须能够追溯到明确的规范。系统架构清晰,包含 agents、commands、context、epics、prds 等目录,方便管理和维护。工作流程分为产品规划、Epic 规划、任务分解、GitHub 同步和并行执行等阶段,每个阶段都有相应的命令和工具支持。

该项目通过 GitHub Issues 作为数据库,实现了真正的团队协作、无缝的人机交接和可扩展性。它不仅仅是一个项目管理系统,更是一个协作协议,允许人类和 AI agents 在团队信任的基础设施上大规模协作。

由于没有评论内容,此处省略评论分析。


美国签证申请网站的网络端口扫描行为分析

美国签证申请网站对用户网络进行端口扫描的行为引发了技术社区的广泛关注,这其中涉及用户隐私、安全风险以及网站行为的合理性等多个层面。

文章指出,当用户访问美国签证申请网站时,网站会尝试对用户的本地网络进行端口扫描,特别是扫描127.0.0.1:8888端口。这种行为通常与设备指纹识别和反匿名性技术相关,被一些网站用于识别用户身份和防止欺诈。一些安全软件,如uMatrix,默认阻止此类跨域连接,而像uBlock Origin这样的工具也提供了阻止局域网入侵的选项。

F5公司提供的反机器人保护服务可能是造成这种端口扫描的原因之一。有评论提到,许多大型网站,包括eBay和Facebook,都采用了类似的技术。此外,该网站似乎在寻找Burp Suite等特定工具的路由。

这种行为也引发了关于浏览器权限和安全性的讨论,例如,为什么浏览器不对此类行为请求用户许可,就像请求麦克风访问权限一样。在某些欧盟国家,政府网站可能会通过扫描本地端口来连接用户的身份证读卡器,以便访问敏感信息。

评论区中,用户分享了各自的观察和应对方法,例如使用uMatrix来阻止未经授权的连接,或者启用uBlock Origin的“阻止局域网入侵”列表。也有人指出,一些扩展程序可能会过度获取用户数据访问权限,存在安全风险。

一些用户认为,这种端口扫描可能被用于恶意目的,超出设备指纹识别的范畴。另一些用户则认为,这可能是政府网站与本地软件通信的一种方式,用于数字签名等功能。

总的来说,围绕美国签证申请网站端口扫描的讨论涉及隐私、安全和技术实现的复杂问题。虽然这种做法可能出于安全或合规性考虑,但用户对其潜在风险和影响保持警惕是十分必要的。


CI 系统的复杂性与误导:现代 CI 是否过于复杂?

本文探讨了现代持续集成(CI)系统日益增长的复杂性,并提出 CI 系统与构建系统之间的界限正在模糊,甚至 CI 系统在某种程度上是多余的观点。文章认为,过于复杂的 CI 系统实际上是在重复构建系统的工作,导致逻辑碎片化和不必要的复杂性。

文章首先指出,CI 平台在功能上的进步是以复杂性为代价的。现代 CI 系统,例如 GitHub Actions,提供了强大的 YAML 配置,包括模板系统、触发器、变量、条件执行、依赖关系、Docker 环境和加密密钥等功能。此外,还有大量的第三方 Actions 可供使用。作者认为,这些功能在一定程度上是必要的,但当 CI 系统变得足够复杂时,它实际上就变成了一个构建系统。

文章进一步指出,现代构建系统,如 Bazel,也具备了远程执行和远程缓存等 CI 系统的特性。因此,作者提出了一个思想实验:如果使用 Bazel 定义一个构建系统,并通过服务器端的 Git push 钩子触发 Bazel 构建、运行测试并将结果发布到某个地方,这是否可以被认为是一个 CI 系统?作者认为,答案是肯定的。

作者的核心观点是,CI 系统不应该独立存在,而应该成为构建系统的扩展。因为构建系统比 CI 系统更通用,一个足够高级的构建系统可以完成 CI 系统所能完成的所有事情。将 CI 功能集成到构建系统中,可以避免重复劳动,简化开发流程,并提供更友好的用户体验。

文章还提到,CI 配置不可避免地会演变成复杂的 YAML,其中包含各种缓存和依赖项优化,以保持较低的执行时间和可靠性,这与构建系统非常相似。最终,开发者需要管理两个复杂的 DAG 和平台/系统,而不是一个。


Copilot 漏洞导致审计日志出错,微软却选择沉默

本文揭露了 Microsoft 365 Copilot 存在的一个严重漏洞,该漏洞允许用户在不留下审计痕迹的情况下访问文件,并详细阐述了作者发现并向微软报告此漏洞的经过。尽管微软修复了此问题,但却决定不公开披露,这给依赖审计日志的企业带来了潜在的安全和合规风险。

文章指出,通常情况下,使用 M365 Copilot 总结文件时,审计日志会记录 Copilot 的访问行为。然而,如果用户要求 Copilot 不提供文件链接,审计日志则会缺失相关记录。这种机制使得恶意内部人员可以轻易地利用 Copilot 访问敏感文件而不被发现,对企业的安全构成威胁。作者在测试审计日志功能时偶然发现了这个漏洞,表明该问题很容易被触发。

作者随后详细描述了向微软 MSRC 报告漏洞的经历,指出微软在处理过程中并未完全遵循其自身制定的流程。虽然漏洞最终得到了修复,但微软决定不发布 CVE 编号,也不向客户公开披露此事。微软的理由是该漏洞被归类为“重要”而非“严重”,因此无需发布 CVE。

作者强烈反对微软的这一决定,认为该漏洞容易被意外触发,可能导致企业的审计日志不完整,从而影响其安全和合规性。特别是对于受 HIPAA 等法规约束的组织,依赖不准确的审计日志可能会带来严重的法律风险。文章呼吁微软应该公开披露此漏洞,以便企业能够评估其潜在影响并采取相应的补救措施。

由于没有评论内容,跳过评论相关的输出。


《镜面阴影:赛博朋克选集》:探索赛博朋克文学的早期面貌

《镜面阴影:赛博朋克选集》是布鲁斯·斯特林于1986年编辑出版的一部具有里程碑意义的赛博朋克科幻小说集。该选集汇集了威廉·吉布森、汤姆·马多克斯、帕特·卡迪根、鲁迪·拉克、马克·莱德洛、詹姆斯·帕特里克·凯利、格雷格·贝尔、刘易斯·希纳、约翰·雪莉、保罗·迪·菲利波等一批作家的作品,旨在展示20世纪80年代涌现的赛博朋克运动的早期面貌。

选集中的故事探索了技术、反乌托邦社会、流行文化和身份认同等主题,这些主题后来成为赛博朋克的标志。例如,威廉·吉布森的《格恩斯巴克连续体》探讨了对未来主义的怀旧与现实之间的冲突;斯特林和吉布森合作的《红星,冬日轨道》则展现了冷战背景下太空竞赛的另一种可能性。其他故事如《莫扎特在镜面阴影中》和《蛇眼》等,也以独特的视角探索了技术对人类社会和文化的影响。

斯特林在序言中坦诚地表达了对“赛博朋克”这一标签的复杂情感。他承认标签可能带来的局限性,但也认为它们在理解文学运动的特征方面具有一定的价值。他希望通过这部选集,能够全面展示赛博朋克运动的早期发展,并为读者提供一个了解该流派的窗口。

这部选集不仅对赛博朋克文学的发展产生了深远的影响,也影响了电影、游戏等其他领域的创作。它帮助定义了赛博朋克的视觉风格和主题,并激发了人们对未来科技发展及其社会影响的思考。即使在今天,这些故事仍然具有很高的阅读价值,能够引发我们对科技、社会和人性的深刻思考。


手写时代的终结:科技进步是否意味着书写技能的衰落?

这篇文章探讨了在科技日益发展的今天,手写是否会逐渐被淘汰,以及这种转变可能带来的影响。作者认为,虽然科技的进步减少了人们手写的需求,但手写技能并不会完全消失。

文章指出,从电子邮件的普及到智能手机和人工智能的出现,科技的进步不断地改变着人们的书写习惯。在学校里,越来越多的学生开始使用电脑和iPad,手写的重要性似乎在降低。然而,作者认为,手写仍然具有其独特的价值。

手写不仅仅是一种沟通方式,更是一种技能,一种艺术,一种与个人情感和记忆相连的表达方式。手写可以帮助我们更好地理解和记忆信息,提高创造力,并培养专注力。此外,手写还可以作为一种独特的个人风格的体现。

虽然科技的进步可能会改变手写的形式和用途,但手写本身并不会消失。它可能会以新的方式存在和发展,例如在艺术创作、个人笔记、签名等领域继续发挥作用。重要的是,我们应该认识到手写的价值,并在科技时代保持对手写技能的培养和传承。

(由于没有评论内容,跳过评论相关的输出。)


CodeRabbit 漏洞利用:从简单 PR 到 RCE 以及 100 万代码仓库的写入权限

本文深入探讨了 Kudelski Security 如何在 CodeRabbit 的生产服务器上实现远程代码执行(RCE),泄露 API 令牌和密钥,潜在访问 PostgreSQL 数据库,并获得对 100 万个代码仓库(包括私有仓库)的读写权限。

文章指出,CodeRabbit 是一款 AI 代码审查工具,在 GitHub 和 GitLab 上拥有大量用户。研究人员在体验 CodeRabbit 的 Pro 计划时,发现其支持运行多种静态分析工具(如 linters 和 SAST 工具),这些工具可以通过配置文件进行配置。这一特性引起了研究人员的注意,他们开始尝试利用这些外部工具来寻找安全漏洞。

研究人员发现,通过操纵 Rubocop 的配置文件,他们可以在 CodeRabbit 的服务器上执行任意代码。具体来说,他们通过 PR 提交包含恶意 Rubocop 配置文件的代码,该文件利用 Rubocop 的 --require 选项来加载并执行远程 Ruby 代码,从而获得 RCE。

由于 CodeRabbit 使用 GitHub 应用程序来访问用户的代码仓库,因此获得 RCE 意味着可以窃取 GitHub API 令牌,从而获得对受影响仓库的读写权限。研究人员还发现,他们可以通过类似的方式访问 CodeRabbit 的 PostgreSQL 数据库。

文章强调,这些安全问题已于 2025 年 1 月被迅速修复。CodeRabbit 在得知漏洞后,立即禁用了 Rubocop,轮换了所有潜在受影响的凭据和密钥,并部署了永久性修复方案,将 Rubocop 移至安全的沙箱环境中。

总的来说,这篇文章详细描述了一个复杂的安全漏洞,展示了 AI 代码审查工具可能存在的风险,以及及时修复漏洞的重要性。它也提醒开发者在使用第三方工具时,需要保持警惕,并采取必要的安全措施。


D2 发布新功能:支持 ASCII 渲染

D2 的最新版本 (0.7.1) 引入了 ASCII 输出功能,允许开发者将图表渲染成 ASCII 格式,方便在代码注释等场景中使用。通过指定 .txt 扩展名,D2 就能自动使用 ASCII 渲染器生成图表。

文章详细介绍了 ASCII 渲染的用法,例如通过 D2 Vim 扩展可以实时预览和更新图表。ASCII 图表尤其适用于代码注释,能够更清晰地展示流程和结构。D2 默认使用 Unicode 字符集进行渲染,如果需要最大程度的兼容性,可以使用 --ascii-mode=standard 标志切换到标准 ASCII 模式。

文章也坦诚地指出了 ASCII 渲染目前还处于 alpha 阶段,存在一些局限性,例如不支持样式、可能出现间距不均匀的问题,以及无法渲染特殊文本、图像、UML 类和 SQL 表等。此外,部分形状的渲染效果也可能不尽如人意。开发者可以在 D2 Playground 上体验这一新功能。

评论区里,开发者们对 D2 的新功能表示了兴趣,同时也提出了一些问题和建议。有人分享了 D2 Playground 的链接,方便大家直接体验。有人提到了一个文本转图表的比较网站。也有人认为 D2 比 Mermaid 更好,但对网格布局的问题表示担忧,因为需要精确的像素宽度。还有人询问如何从 ASCII 图恢复到原始 D2 源码以便更新。总的来说,评论区对 D2 的 ASCII 渲染功能持积极态度,并期待其后续的改进和完善。


挑战细胞生命定义的微小微生物

本文探讨了一种新发现的微小微生物,它挑战了我们对细胞生命的传统定义。这个微生物的独特之处在于它的一些非典型特征,迫使科学家重新思考生命的构成要素。

这种微生物的发现源于一次偶然的实验,研究人员在常规研究中意外地观察到了它的存在。 它的尺寸非常小,结构也异常简单,缺乏一些通常存在于细胞中的关键组件,例如完整的细胞器。

更令人惊讶的是,这种微生物的遗传物质也十分特殊。 它的基因组非常小,只包含维持基本生存所必需的极少量基因。 这引发了一个问题:生命是否真的需要如此复杂的结构和庞大的基因组才能存在?

科学家们正在努力理解这种微生物的生存机制。 它是如何获取能量? 如何复制自身? 它的存在对我们理解地球上的生命起源和进化有何意义? 这种微生物的发现不仅挑战了现有的生物学知识,也为我们探索生命的可能性打开了新的大门。 它提示我们,生命可能比我们想象的更加多样化,存在于我们尚未探索的角落。 进一步的研究可能会彻底改变我们对生命的理解,并为未来的生物技术和医学研究带来新的灵感。

由于文章本身没有评论区,因此无法提供评论观点的分析。


.NET 应用程序的轻量级后台任务处理库:BusyBee

BusyBee 是一个高性能的 .NET 后台处理库,它基于原生通道构建,为后台任务处理提供了一个简单、可配置且可观察的解决方案,并内置了 OpenTelemetry 支持和灵活的队列管理。

BusyBee 具有以下关键特性:高性能,它使用基于 .NET 通道的内存队列来实现效率;高度可配置,支持无界或有界队列,并提供多种溢出策略,以及全局和单个任务的可配置超时;内置可观察性,提供任务执行流程日志、OpenTelemetry 追踪以及详细的指标(任务计数、执行时间、等待时间等);对开发者友好,提供流畅的配置 API、完整的依赖注入支持、全面的取消令牌支持以及丰富的任务上下文信息。

你可以通过 NuGet 包管理器安装 BusyBee:dotnet add package BusyBee

使用 BusyBee 非常简单,首先在你的依赖注入容器中注册 BusyBee,然后开始处理后台任务。你可以配置无界或有界队列,设置全局任务超时,以及调整并行任务处理的槽位池大小。BusyBee 还支持 OpenTelemetry 集成,允许你监控和分析生产环境中的任务性能。

对于错误和超时处理,你可以实现并注册自定义的 IJobFailureHandlerIJobTimeoutHandler。对于长时间运行的任务,请务必定期检查取消令牌,以确保任务可以被安全地取消。

BusyBee 鼓励开发者遵循一些最佳实践,例如保持任务的幂等性,使用适当的超时,监控任务,以及处理取消。

评论区里,有人提问 BusyBee 相对于 BackgroundService 的优势。也有人认为 BusyBee 只是对 Channels 的一层薄封装,可能更倾向于直接使用 Channels。这表明开发者在选择后台任务处理方案时,会考虑库的抽象程度和性能开销,以及是否需要更底层的控制。


《Gaussian Processes for Machine Learning》精要

本文档是关于《Gaussian Processes for Machine Learning》一书的总结,该书由 Carl Edward Rasmussen 和 Christopher K. I. Williams 撰写,并由 MIT Press 于 2006 年出版。这本书深入探讨了高斯过程在机器学习中的应用,为读者提供了关于高斯过程的全面理解。

该书首先介绍了贝叶斯建模,然后深入探讨了高斯过程在回归和分类问题中的应用。在回归部分,书中分别从权重空间和函数空间的角度阐述了高斯过程回归,并讨论了超参数的影响、决策理论以及如何结合显式基函数。分类部分则重点介绍了高斯过程分类,包括二元和多元分类的 Laplace 近似以及期望传播方法。此外,书中还包含了大量的实验,通过玩具问题、一维示例以及手写数字分类等实例,帮助读者更好地理解和应用高斯过程。

本书内容结构清晰,从基础概念到高级应用,循序渐进地引导读者理解高斯过程。书中还包含了大量的数学公式和推导,适合具有一定数学基础的读者阅读。此外,书中还提供了大量的参考文献,方便读者进一步学习和研究。总而言之,这本书是学习高斯过程在机器学习中应用的绝佳资源。


让 Ruby 比 Ruby 更快:P2 模板引擎的优化之路

本文介绍了 P2,一款使用纯 Ruby 编写 HTML 模板的引擎,其独特之处在于将模板代码编译成高效的 Ruby 代码,从而提升模板生成性能。文章详细阐述了 P2 如何通过编译原理和 AST 转换,将模板代码转化为高效的字符串拼接代码,最终实现比传统 Ruby 模板引擎更快的速度。

P2 的核心思想是将 HTML 模板表示为 Ruby Proc,例如:->(title:) { html { body { h1 title } } }。当调用 #render 方法时,P2 会自动编译并运行生成的代码。这个过程的关键在于将模板的源代码转换成一个接受 __buffer__ 参数的 Ruby 代码块,然后将 HTML 片段和动态值推送到这个 buffer 中。

P2 首先使用 Sirop gem 解析模板的源代码,将其转化为 Prism AST。然后,TagTranslator 类会遍历 AST,并将代表 HTML 标签的 CallNode 节点转换为自定义的 TagNode 节点。接下来,Sourcifier 类会将修改后的 AST 转换回 Ruby 源代码。为了处理自定义的 P2 节点类型,需要继承 Sourcifier 类并添加相应的代码。

在生成 HTML 代码时,P2 并不是立即生成代码,而是将 HTML 片段推送到一个待处理的 HTML 部件数组中。当需要刷新这些部件并生成代码时,P2 会将所有静态字符串连接成一个 buffer push,而每个动态部分都会被转义并单独推送。

P2 编译器还处理模板组合、延迟执行和扩展标签等其他部分。此外,P2 还会生成一个源代码映射,将编译后的代码行映射回原始模板代码行,这对于调试非常有用。通过这些优化,P2 成功地将模板生成性能提升到了一个新的水平。


定制你的 Lisp REPL 体验

本文介绍了如何通过定制 Common Lisp 的 REPL (Read-Eval-Print Loop) 来提升开发效率和体验,作者分享了使用 trivial-toplevel-prompttrivial-toplevel-commands 等库来定制 REPL 提示符、命令和 reader 语法的方法,以及利用 GUI 调试器进行代码调试的经验。

文章首先强调了作者对工具可移植性的追求,并表达了对自定义/包装/代理 REPL 的厌恶,认为它们重复发明轮子,且缺乏兼容性。作者提倡通过增量改进现有 REPL 来实现持久和通用的好处。

文章详细介绍了如何使用 trivial-toplevel-prompt 库来定制 REPL 提示符,使其包含进程/线程名称、求值包、命令编号、调试级别、步进和检查指示器等信息。该库具有良好的可移植性,几乎支持所有 Common Lisp 实现。

接下来,文章介绍了 trivial-toplevel-commands 库,该库允许用户以可移植的方式定义 REPL 命令。作者给出了两个示例命令:一个是用于运行 shell 命令的 :sh 命令,另一个是类似于 DOS dir 命令的目录列表命令 :dir。这些命令本质上是带有额外好处的函数,可以通过关键字调用,不需要包,并且可以使用任何语法。

文章还讨论了 reader 语法,指出 Common Lisp 强大的 reader 宏可以实现各种自定义语法,例如 shell 命令传递、内联文档和便捷的哈希表。作者建议谨慎使用 reader 宏,但认为它们非常适合个人使用和快速 REPL 记录。

最后,文章提到了 GUI 调试器,并介绍了 Ndebug、Dissect 和 trivial-gray-streams 等相关库。作者列举了 McCLIM Debugger、SLIME/Sly 和 Nyxt 调试器的一些功能,例如重启交互、回溯列表、本地变量检查和在框架中求值。

总而言之,本文为 Common Lisp 开发者提供了一份实用的 REPL 定制指南,帮助他们打造更高效、更个性化的开发环境。


使用 Emacs 进行视频剪辑:开发者的新选择

本文介绍了一位开发者如何利用 Emacs 和 ffmpeg 创建了一个简单的视频剪辑工具,展示了 Emacs 在文本编辑之外的强大功能。这个方案的核心在于利用 ffmpeg 进行繁重的处理工作,并通过大约 300 行 Emacs Lisp 代码实现视频剪辑功能。

文章作者分享了其 Emacs 配置仓库中 video-trimmer-mode 的代码链接,方便读者查看和使用。该工具的开发灵感来源于作者之前为 Ready Player Mode 添加的图形化进度条功能,旨在提供一个轻量级的视频剪辑解决方案,避免在简单剪辑任务中使用过于复杂的专业软件。作者提到自己经常需要剪辑屏幕录像,因此开发了这个工具来提高效率。这个解决方案的亮点在于它与 Emacs 的深度集成,允许用户在熟悉的文本编辑环境中完成视频剪辑,无需切换到其他应用程序。

评论区对使用 Emacs 进行视频剪辑的观点呈现多样化。

有人认为这很酷,但难以理解其必要性,质疑为何不选择更专业的视频编辑软件。他们将此举比作在妊娠测试仪上玩 Doom,虽然技术上可行,但实用性不高。

也有人认为,对于 Emacs 用户来说,这种方案非常高效,因为它避免了上下文切换,可以直接在文本环境中编辑时间码并生成视频片段。这种方式特别适合需要记录开始和结束时间,并添加注释的场景。

还有人指出,该解决方案依赖 ffmpeg,并且可能对输出格式、编码和质量做了一些假设。另一些评论则支持 Emacs 作为“操作系统”的说法,并希望类似的图形集成能够在其他操作系统上更容易实现。

总的来说,评论区既有对 Emacs 多功能性的赞赏,也有对其在视频剪辑领域实用性的质疑,但同时也肯定了其在特定工作流程中的价值。Emacs 的键盘驱动、可编程性和生态系统集成是其优势所在。


Rails Charts:使用 Apache ECharts 构建精美图表的 Rails Gem

Rails Charts 是一个 Ruby on Rails 的 Gem,它利用 Apache ECharts 库,帮助开发者在 Rails 应用中快速构建各种类型的图表,例如折线图、柱状图、饼图等等。它旨在简化图表的创建过程,只需几行代码即可生成美观且可定制的图表。

这个 Gem 的灵感来源于 Chartkick,但 Rails Charts 提供了更多的图表类型和自定义选项。安装过程包括将 Gem 添加到 Gemfile 中,然后安装 ECharts。你可以选择使用 Sprockets、Webpack/esbuild 或 Importmaps 来集成 ECharts。

Rails Charts 提供了丰富的选项来定制图表的外观和行为,例如宽度、高度、主题、CSS 类、ID 和内联样式。你还可以使用 options 属性来传递额外的 ECharts 选项,从而实现更高级的定制。

该 Gem 支持多种图表类型,包括面积图、折线图、柱状图、日历图、K 线图等等。每个图表都内置了默认配置,以简化使用。你可以在 Gem 的 GitHub 仓库中找到各种图表的示例代码,方便你快速上手。

总而言之,Rails Charts 通过集成 Apache ECharts,为 Rails 开发者提供了一个强大而灵活的图表解决方案,可以轻松地在应用中创建各种类型的交互式图表。


利用蜡烛火焰振荡制作时钟

本文探讨了如何利用三个蜡烛火焰组合产生的稳定振荡现象,将其转化为一个时钟信号源。研究发现,这种火焰振荡的频率主要取决于重力和火焰直径,大约稳定在 9.9Hz 左右。

文章首先介绍了蜡烛火焰的特性,以及蜡烛制造商如何努力消除火焰的闪烁。然而,当三个蜡烛紧密放置在一起时,会产生一种有趣的现象:火焰会开始同步振荡。这种振荡的频率非常稳定,大约为 9.9Hz,并且呈现出锯齿状的亮度变化。作者通过实验测量了火焰亮度的变化,并使用功率谱密度分析证实了其频率的稳定性。

为了将火焰的振荡转化为电信号,作者尝试了两种方法:光电晶体管和电容式火焰传感。光电晶体管可以简单地检测火焰亮度的变化,并将其转化为电流信号。而电容式火焰传感则利用了火焰中电离气体对电容的影响,通过测量电容的变化来检测火焰的振荡。作者使用 CH32V003 微控制器和 CH32fun 环境实现了电容式火焰传感,并将火焰中的一根导线作为电容传感器。

总而言之,这篇文章展示了一种新颖的利用火焰振荡作为时钟信号源的方法,并探讨了两种不同的传感技术来实现这一目标。这种方法不仅有趣,而且可能在某些特殊应用场景中具有实用价值。


Databricks 融资 K 轮,估值超 1000 亿美元

Databricks 宣布正在进行 K 轮融资,公司估值将超过 1000 亿美元。这意味着 Databricks 在数据和人工智能领域的领导地位得到了进一步的巩固。

Databricks 是一家提供数据湖仓一体化平台的公司,旨在帮助企业统一数据、分析和人工智能。其平台整合了数据仓库和数据湖的优点,提供了一个统一的平台来处理各种数据工作负载。通过此次融资,Databricks 计划继续投资于其平台,并扩展其在各个行业的应用。此次融资也反映了市场对数据和人工智能解决方案的强劲需求,以及对 Databricks 创新技术的认可。Databricks 的平台能够帮助企业更好地理解和利用他们的数据,从而做出更明智的决策,并推动业务增长。此次融资预计将加速 Databricks 的发展,并使其能够更好地服务于全球客户。


Hacker News 首页价值:流量、反馈与后续效应

本文探讨了在 Hacker News (HN) 首页获得高排名的价值,作者分享了多年来在 HN 提交大量文章的经验和观察,总结了由此带来的各种结果,以及一些不应抱有的期望。

文章指出,登上 HN 首页最直接的价值是流量,但这种流量转化率较低,主要用于品牌认知。更重要的是评论区,那里汇集了大量聪明人的反馈,作者强调认真对待这些反馈,通过互动了解评论背后的原因。此外,HN 的高排名还可能带来后续流量,例如通过新闻邮件、社交媒体等渠道的分享,增加品牌曝光。作者也提到了感恩的重要性,如果分享了他人的文章并获得成功,不妨向原作者表达感谢。

作者也提醒,不要将 HN 视为营销计划,它只是营销漏斗顶端的一部分,不能直接带来转化。同时,HN 的用户群体并非代表整个市场,其反馈也并非适用于所有人。最后,HN 的流量具有不确定性,同一篇文章可能因发布时间等因素而结果迥异。总而言之,HN 是一个有价值的平台,但需要正确认识其作用和局限性。


Futex:现代并发编程的基石

本文深入探讨了 futex(快速用户空间互斥锁)的重要性,强调了它在现代并发编程中的关键作用,并指出一些教材可能忽略了这一重要概念。

文章首先指出,尽管名称相似,但 futex 并非简单的互斥锁,而是构建高性能并发原语的基础。在 Linux 中引入 futex 之前,并发原语主要基于 System V IPC,效率低下且难以扩展。futex 的出现彻底改变了这一局面,它将锁操作与等待/唤醒任务分离,极大地提高了并发性能。作者引用了 2002 年的原始 futex 论文,其中显示在 1000 个并行任务的测试中,futex 比 sysv 锁快 20-120 倍。随后,Windows 和 macOS 也相继引入了类似机制。

文章进一步解释了 futex 的工作原理:当锁竞争激烈时,线程不应忙于轮询,而应进入睡眠状态,直到锁可用。futex 通过 wait()wake() 操作实现这一功能。wait() 允许任务阻塞,并在内核中与特定内存地址关联的列表中排队。wake() 操作则从该列表中移除线程并重新运行它们。重要的是,调用 wait() 时,调用者必须提供其认为的 futex 的值。如果该值已更改,则操作失败,这可以防止等待已经发生的唤醒。

文章还强调了构建正确的 futex 实现的挑战,特别是需要注意编译器和硬件可能执行的乱序或重叠操作。尽管如此,作者提供了一个使用 futex 构建基本互斥锁的示例,展示了如何避免不必要的系统调用。文章最后给出了 Linux 和 Mac 平台上的 futex 包装器代码示例,并建议读者在其他操作系统上进行练习。

由于没有评论内容,无法进行评论观点的总结和分析。


Halua:一款易于扩展的灵活 JavaScript 日志记录器

Halua 是一个用 JavaScript 编写的日志记录库,它主打易于扩展和灵活。它允许开发者自定义日志处理方式,并提供了多种内置的处理器。

Halua 的核心设计理念是提供一个轻量级但功能强大的日志记录工具,开发者可以根据自己的需求轻松定制。它支持不同的日志级别,比如 debug、info、warn 和 error,并且可以配置不同的处理器来处理这些日志。例如,你可以将日志输出到控制台,也可以将它们发送到服务器或保存到文件中。

Halua 的扩展性体现在其灵活的处理器机制上。开发者可以编写自己的处理器来满足特定的需求,比如格式化日志消息、过滤特定类型的日志或者将日志发送到特定的服务。此外,Halua 还提供了插件系统,允许开发者添加额外的功能,比如性能分析或错误跟踪。

总的来说,Halua 旨在为 JavaScript 开发者提供一个强大且可定制的日志记录解决方案,帮助他们更好地理解和调试他们的代码。通过其灵活的架构和丰富的扩展选项,Halua 可以适应各种不同的项目需求。


石墨烯电容器实现太赫兹波的快速、高深度调制

研究人员展示了一种利用石墨烯电容器控制太赫兹波的新方法,这种方法具有前所未有的动态范围和速度,为通信、成像和传感等领域带来了潜在的突破。这项研究标志着在太赫兹范围内运行的实用设备开发方面取得了重大进展。

太赫兹波位于微波和红外光之间,尽管在机场安检和皮肤癌检测等领域具有潜力,但由于波长短,难以有效操控。为了解决这个问题,研究人员利用超材料,设计出在特定频率下谐振的微小谐振器阵列,并将石墨烯等导电材料嵌入其中,从而实现对材料光学响应的调节。与传统方法不同,研究人员没有将石墨烯用作可变电阻来抑制谐振,而是利用石墨烯制造出超薄、可调的电容器,从而能够以更有效的方式移动谐振频率。

研究人员制造了由石墨烯制成的超小贴片,并将它们放置在超材料阵列的每个微小结构或谐振器内,这些石墨烯贴片非常小,宽度小于一微米,可用作纳米级可调电容器。通过这种方式,研究人员实现了超过四个数量级的调制深度,结合高达 30 MHz 的速度,性能显著优于许多同类调制器技术。该设计还可适用于整个太赫兹范围,并可能影响未来的许多技术。

评论区有用户提问,这项技术是否能在实验室以外的实际应用中使用。



评论 0 条

暂无评论,来种下第一颗种子。