Swift 容器插件:一键构建和发布容器镜像
Swift 容器插件简化了使用 Swift Package Manager 构建和发布 Swift 服务器容器镜像的过程。只需几行命令,即可将你的 Swift 应用程序打包成容器镜像并上传到容器注册表,然后在任何支持容器的云平台或本地运行。该插件支持 macOS 和 Linux,需要 Swift 6.0 或更高版本。
Swift 容器插件简化了使用 Swift Package Manager 构建和发布 Swift 服务器容器镜像的过程。只需几行命令,即可将你的 Swift 应用程序打包成容器镜像并上传到容器注册表,然后在任何支持容器的云平台或本地运行。该插件支持 macOS 和 Linux,需要 Swift 6.0 或更高版本。
Emacs 和 bash 在启动时查找配置文件时,需要遍历 PATH 环境变量中的每个目录,逐一检查目标文件是否存在,效率低下。这篇文章探讨了这种低效的查找机制,并以 strace 工具跟踪 Emacs 和 bash 的系统调用,展示了大量的 fstatat 调用。作者认为,这种查找方式应该由操作系统或文件系统直接提供更优化的解决方案,例如类似于数据库查询的方式,直接返回符合条件的文件,而不是逐一尝试。作者还提到 Python 的实现相对更高效,但也存在不足。最终,作者提出了一种改进方案:将所有可能的文件名和目录列表直接提供给操作系统,以减少系统调用次数和网络请求次数。
微软最近更新的Visual Studio Code C/C++扩展程序不再兼容VS Codium和Cursor等衍生产品,引发开发者不满。此举被指责为反竞争行为,因为微软限制了其扩展程序在非微软产品中的使用,同时推出自家的AI代码助手Copilot。一些开发者已向美国联邦贸易委员会举报微软不正当竞争,指控其捆绑销售Copilot并封杀竞争对手,意图锁定用户在其AI生态系统中。Cursor公司则表示正在转向开源替代方案。
博主Ryan West分享了他如何自动化博客写作和发布流程的经验。他利用Obsidian进行个人知识管理(PKM),将高质量信息整理到Zotero,再通过Obsidian进行整合和创作。他使用Hugo生成静态网站,并通过自定义脚本和cron job实现了自动化部署到GitHub,几分钟内就能将Obsidian中的Markdown文章发布到网站。他还使用了giscus作为评论系统,利用GitHub Discussions功能,实现了类似Reddit的评论体验。
arXivLabs是一个平台,允许合作者直接在arXiv网站上开发和分享新功能。参与者都认同arXiv的开放、社区、卓越和用户数据隐私的价值观。你有让arXiv社区受益的创意吗?了解更多关于arXivLabs的信息。
Infat 是一款强大的 macOS 原生命令行工具,用于声明式地管理文件类型和 URL 方案关联。告别繁琐的子菜单设置默认浏览器或图片查看器,只需设置一次规则,即可永久生效。Infat 支持列出指定文件扩展名或 URL 方案的关联应用,设置默认应用,并从 TOML 配置文件加载关联信息。它简洁易用,适用于普通用户和管理员。
Zev 是一款基于 OpenAI API 的工具,它允许你使用自然语言来查找或回忆终端命令。例如,你可以输入“显示所有正在运行的 Python 进程”来查找相应的命令。Zev 支持多种操作,包括文件操作、系统信息查看、网络命令和 Git 操作等。你也可以选择使用 Ollama 作为本地替代方案,从而避免依赖 OpenAI API。该项目开源,欢迎贡献。
arXivLabs是一个实验性项目,允许协作者直接在arXiv网站上开发和分享新功能。参与者必须遵守arXiv的开放性、社区性、卓越性和用户数据隐私等核心价值观。如果你有提升arXiv社区价值的想法,欢迎了解arXivLabs。
本文介绍了一种基于领域特定语言(DSL)的本地优先Web应用高效搜索系统。该系统利用TypeScript和解析器组合器构建了一个强大的、易于维护和扩展的搜索引擎。通过定义Issue接口和解析器,系统能够解析DSL查询,生成抽象语法树(AST),并最终生成用于过滤数据的谓词函数。性能测试表明,该系统能够高效处理百万级数据。文章还探讨了索引、查询优化和缓存等提高性能的方法。
本文探讨了单指令多数据流(SIMD)架构的固有缺陷,例如固定寄存器宽度导致的可扩展性问题、流水线处理带来的性能瓶颈以及尾部处理的额外开销。这些缺陷限制了SIMD在处理大规模数据时的效率。文章对比了SIMD与向量处理器(例如Cray-1、RISC-V RVV和ARM SVE)的差异,后者通过灵活的向量长度和硬件级尾部处理解决了SIMD的不足。同时,文章还介绍了其他一些替代方案,例如虚拟向量方法(VVM),为提高数据处理性能提供了新的思路。
MotherDuck发布了Instant SQL,一种全新的SQL编写方式,它能够在您键入时实时更新结果集,从而加快查询构建和调试速度,无需等待,也无需点击运行按钮。Instant SQL解决了SQL编写过于繁琐和缓慢的问题,它通过实时预览结果、实时调试CTE以及分解复杂的列表达式等功能,极大地提升了开发效率。此外,Instant SQL还支持DuckDB能够查询的所有数据源,并与AI辅助功能无缝集成,提供实时编辑建议。这项技术突破依赖于DuckDB的高性能、AST解析能力、精准的游标映射和智能缓存系统等关键技术的完美结合。
Colanode是一个开源的、本地优先的协同工作空间,你可以自托管它。它提供实时聊天、富文本页面编辑、可定制数据库、文件管理等功能,类似Notion,但更注重数据隐私和控制。所有更改先保存到本地SQLite数据库,再同步到服务器,即使离线也能继续工作。它使用CRDT技术实现多人实时协作,并提供免费的云端服务器(Beta版)。
作者在处理开源软件时,注意到GPLv2许可证声明中包含一个实体地址而非网址,感到好奇。这引发了他对1991年互联网不普及时代软件分发的思考,以及人们如何通过邮寄获取GPL许可证全文。作者决定亲身尝试,写信到该地址索要GPLv2许可证,最终收到回复,但收到的却是GPLv3版本。这次经历充满了怀旧情怀,也展现了不同时代信息获取方式的差异。
本教程教你如何使用Fedify框架构建一个小型、符合ActivityPub协议的去中心化微博,类似于Mastodon或Misskey。无需TypeScript、JSX或ActivityPub的预备知识,教程将循序渐进地指导你完成账户创建、数据库设置、与其他服务器交互(包括Mastodon)以及实现关注、发帖等功能。教程中包含了详细的代码示例和步骤,以及对TypeScript和JSX的简要介绍。最终,你将拥有一个能与Fediverse互联的个人微型博客。
一家专注于移动归因的科技公司正在招聘一位高级后端工程师。理想候选人需要有丰富的Ruby(Rails/Sinatra)和Go经验,熟悉Kubernetes,并能胜任高吞吐量分布式系统的开发和维护。工作地点灵活,团队小而精,崇尚远程协作。
一位资深开发者分享了他从传统文本编辑器转向Vim的经历。起初,Vim 的快捷键让他感到困惑,但他逐渐发现Vim的“语言”——一种基于快捷键的编辑逻辑,能够极大地提高效率。通过学习Vim的运动模式和命令,他能够精确、快速地编辑文本,甚至将这种效率提升扩展到其他领域,如写作和网络浏览。作者认为,虽然学习曲线陡峭,但掌握Vim的回报巨大,值得开发者尝试。
Qodo,一家NVIDIA Inception计划成员公司,开发了一个多智能体代码完整性平台,利用AI驱动代码编写、测试和审查,从而提升软件质量工作流程的自动化程度。Qodo的核心在于其深度上下文感知的AI代理,这些代理基于先进的检索增强生成(RAG)技术,并利用在NVIDIA DGX上训练的先进代码嵌入模型,理解代码的意图、模式和更广泛的结构,从而生成更准确的代码建议、可靠的测试和有见地的代码审查。为实现这一点,Qodo构建了一个强大的管道来持续维护最新的索引,并使用语言特定的静态分析技术对大型代码文件进行分块,避免因代码片段无效或不完整而影响LLM性能。在与NVIDIA的合作案例中,Qodo的解决方案显著提高了NVIDIA内部RAG系统(Genie)的代码搜索准确性,最终集成到NVIDIA的内部Slack系统中,为开发者提供更准确、详细的代码信息。
作者是一位程序员,他反复尝试使用Linux和纸笔来摆脱对科技巨头的不适感,因为这些公司的不道德行为让他不安。尽管他意识到这只是杯水车薪,但他仍试图通过使用自由软件和减少电脑使用来减少参与其中。然而,他最终承认,便利性的诱惑难以抗拒,只有政府的强力监管才能真正改变现状。
CocoIndex是一个全球首个开源引擎,支持自定义转换逻辑和增量更新,专注于数据索引。它允许用户声明转换规则,CocoIndex会创建和维护索引,并在源数据更新时保持派生索引的最新状态,计算量和更改最小。CocoIndex提供文档、快速入门指南和视频教程,支持Python库安装及Docker Compose启动Postgres数据库。通过定义索引流程,例如将文本分割成块并嵌入向量,然后导出到向量索引中,用户可以轻松地索引数据。CocoIndex还提供示例和演示,并欢迎社区贡献代码、文档更新、问题报告、功能请求和讨论。
一位开发者发布了名为TacOS的开源操作系统,其内核使用C语言和汇编语言编写。TacOS是一个类Unix内核,能够运行DOOM以及其他一些小型用户空间程序。它包含虚拟文件系统(VFS)、调度器、TempFS、设备驱动、上下文切换、虚拟内存管理、物理页面帧分配等功能,并移植了DOOM游戏。该系统可在实际硬件(已在开发者的笔记本电脑上测试)和QEMU模拟器上运行。虽然TacOS目前仍处于早期阶段,存在已知漏洞,但它是一个令人印象深刻的业余项目。
CubeCL是一个令人兴奋的Rust语言扩展,它允许开发者使用Rust编写GPU计算内核,并利用零成本抽象来开发可维护、灵活和高效的计算内核。它支持多种GPU运行时环境,包括WGPU、CUDA和ROCm/HIP,并计划支持CPU运行时。CubeCL的核心功能包括自动向量化、编译时计算和自动调整,这些功能极大地简化了高性能内核的编写和跨平台移植。通过独特的两步过程(解析和扩展),CubeCL实现了编译时优化和灵活的Rust集成。目前,CubeCL正处于alpha阶段,但其潜力巨大,有望成为Rust高性能计算领域的重要组成部分。
MCPEngine 是一个开源的 Model Context Protocol (MCP) 实现,它允许大型语言模型 (LLM) 调用外部工具。文章介绍了如何在 AWS Lambda 上构建三个不同复杂度的 MCP 服务器:无状态的、有状态的以及带有 Google SSO 身份验证的。MCPEngine 支持可流式传输的 HTTP 和 SSE,并提供对身份验证、打包等功能的一流支持,使其能够轻松构建和部署生产级的 MCP 服务器。这篇文章通过详细的步骤和代码示例,展示了如何在无服务器环境中安全可靠地运行 MCP 工具。
YAGNI(你不会需要它)原则告诫我们避免过度工程和过早添加功能。但作者提出一个例外:YAGRI(你将会读取它)。这意味着不要只存储满足当前产品规格所需的最小数据,还应存储未来可能用到的数据,例如时间戳和上下文元数据。这在处理用户删除数据时尤其重要。仅仅删除数据库行是不够的,还应记录谁删除了数据、如何删除、何时删除以及为什么删除。作者建议在几乎所有表中存储created_at、updated_at、deleted_at、created_by等字段,以及CRUD操作使用的权限。虽然并非所有存储的字段都会被用到,但即使只有一个字段能避免未来调试问题或满足老板的突发需求,也值得付出额外努力。维护数据是工程师最重要的工作之一。
Index是一个最先进的开源浏览器代理,能够自主执行复杂的网络任务。它支持多种大型语言模型(LLM),例如Anthropic的Claude和OpenAI的模型。用户可以通过简单的提示(例如“访问ycombinator.com,总结W25批次的前三家公司,并在Google Sheets中创建新的电子表格”)来指挥Index完成任务。Index还提供服务器端API、交互式CLI以及浏览器状态持久化等功能,方便用户在生产环境和本地开发中使用。其强大的功能和易用性使其成为处理网页数据自动化和复杂网络交互的理想工具。
这个GitHub仓库包含了Apache Lucene的多个示例,并附带详细的Markdown注释。每个示例都是自包含的,可以直接运行,方便学习者通过阅读代码、调试运行或在线文档(https://msfroh.github.io/lucene-university/docs/SimpleSearch.html)三种方式学习Lucene。仓库使用Lucene 10,需要JDK 21或更高版本。欢迎贡献代码!
C++26 将对 constexpr 的支持提升到一个新的高度!即将到来的特性包括:从 void* 的 constexpr 转换,允许在编译时进行更灵活的内存操作;constexpr placement new,使得在常量表达式中进行对象放置成为可能;以及 constexpr 结构化绑定,允许在编译时使用结构化绑定。这些改进将极大地扩展 constexpr 的应用范围,并为标准库提供更强大的编译时功能。
作者分享了AI辅助编程带来的焦虑:虽然AI极大提升了编程效率,但同时也降低了编程的乐趣。以往那种专注编码、沉浸“心流”状态的快乐体验正在消失,取而代之的是更被动、更像“策展人”式的开发流程。作者担忧,如果这种趋势持续,程序员可能会变得高产却缺乏成就感。文章最后提出,或许我们需要重新定义AI时代程序员的快乐来源,有意识地保留一些手工编码的时间,以保持工作的乐趣和创造力。
本文介绍了一个名为Spring83的实验性在线互动协议,旨在探索新的在线互动方式。该协议并非面向用户,而是邀请参与者共同探索和研究。目前已有数个不同语言的客户端和服务器端实现,作者鼓励更多开发者参与其中,共同完善和发展这个开放的项目。
本文介绍了如何在 Common Lisp 中使用实时编码技术开发图形程序,以 Boids 算法为例。Common Lisp 强大的重新编译功能允许在程序运行时修改代码并立即生效,无需重启。作者使用 Sketch 图形框架,逐步实现了 Boids 算法,并展示了实时编码带来的高效开发体验。通过修改代码并实时查看效果,作者完成了 Boids 算法的核心部分,包括避让、凝聚和对齐三个规则,最终实现了一个可以跟随鼠标的 Boids 模拟。实时编码极大地提高了开发效率和互动性。
本文是ClickHouse数据库系列文章的第二部分,重点探讨了高负载下的读性能优化。作者指出,读写操作无法完全分离,频繁数据插入会影响读取效率。文章深入分析了不同类型流量(实时、长查询、回填)的处理方法,以及查询设计技巧(例如排序键设计、过滤器运用、`max_threads`设置等)。此外,文章还涵盖了ClickHouse集群监控、错误处理、 materialized view 管理和常见问题排查等方面,并分享了在Tinybird平台上的实践经验。