arXivLabs:与社区协作者一起进行实验性项目
arXivLabs是一个框架,允许协作者直接在arXiv网站上开发和分享新的功能。参与arXivLabs的个人和组织都认同并接受了arXiv关于开放性、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,并且只与遵守这些价值观的合作伙伴合作。如果你有想法能为arXiv社区增值,那就了解更多关于arXivLabs的信息吧!
arXivLabs是一个框架,允许协作者直接在arXiv网站上开发和分享新的功能。参与arXivLabs的个人和组织都认同并接受了arXiv关于开放性、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,并且只与遵守这些价值观的合作伙伴合作。如果你有想法能为arXiv社区增值,那就了解更多关于arXivLabs的信息吧!
本文作者质疑将停机问题作为NP难问题之上的典型例子,认为其不够直观且易于混淆。停机问题虽然不可判定,但验证“是”的答案却可以通过有限步骤运行程序来实现。作者提出了一个更易理解的例子:在一个无限网格上移动棋子,判断能否到达目标点。这个问题在低维度下是PSPACE完全的,维度增加后复杂度会迅速提升,最终达到ACKERMANN完全,直观地展示了远超NP问题的复杂性。
Formance 致力于重新定义开发者与资金的交互方式,将其作为一等基本类型,并与金融系统进行组合。目前,资金隐藏在许可的、供应商锁定的基础设施中,Formance 平台旨在通过提供非特定类型的基本组件来赋能产品优先的公司,使他们能够创建创新的金融应用程序。这些组件以开源包的形式提供,并可连接到您选择的金融合作伙伴。Formance 具有全球原生特性,全天候为全球企业公司提供服务,帮助他们构建和扩展金融应用程序。
本文探讨了函数式库设计的原则,特别关注可组合性和避免回调。作者认为框架难以组合、探索和测试,并限制代码结构。相比之下,库赋予开发者更多控制权,鼓励交互式探索,并支持多层抽象。文章以游戏引擎为例,展示了如何通过异步工作流和事件编程避免回调的缺点,并通过FsLab等例子说明了库的可组合性。最终,作者倡导构建可组合、易于探索的库,而非僵硬的框架。
本文讲述了作者在学习C语言过程中,关于整数类型定义的意外发现。早期C语言的整数大小在不同架构的机器上差异很大,为此,一些编译器厂商自定义了类型定义,例如Microware的types.h。后来ANSI C标准引入了stdint.h,提供了像uint32_t这样的标准类型定义,以及limits.h中定义的INT_MAX等最大值。然而,作者最近才发现stdint.h中还包含了INT8_MAX、UINT32_MAX等,可以直接用于定义特定大小整数类型的最大值和最小值,这使得代码更具可移植性,避免了因平台差异导致的错误。
本文讲述了作者从C/C++/Rust转向Haskell进行嵌入式系统开发的经历,重点介绍了Haskell在并发编程方面的优势。Haskell使用green threads和事件驱动IO,避免了传统线程模型的复杂性。通过`async`包和`STM`(软件事务内存),Haskell提供了一种更简洁、更安全的方式来处理并发任务,例如`concurrently`、`race`、`mapConcurrently`等函数,以及`TVar`、`TBQueue`等数据结构,可以轻松实现并发操作且避免常见的并发问题,例如死锁和竞态条件。
作者为了计算其17个VPS节点间的网络延迟,避免手动ping测,尝试用Nix计算节点经纬度间的物理距离来近似延迟。由于Nix缺乏三角函数,作者最终选择用纯Nix实现了sin、cos、tan、arctan和sqrt函数,并基于此实现了Haversine公式计算节点间距离及延迟。该项目避免了使用Python等外部依赖,提升了计算效率和可重复性。
本文探讨了 Kotlin 类型类在数据验证中的应用。作者以一个金融科技初创公司的用户投资组合验证系统为例,逐步讲解如何使用 Arrow Kt 库和 Kotlin 上下文接收器,构建一个基于类型类的泛型、可复用数据验证框架。文章对比了面向对象方法和类型类方法,并详细阐述了类型类在提高代码可维护性和可扩展性方面的优势,以及如何利用 Arrow 库的 `EitherNel` 类型处理验证错误。
厌倦了Spotify,我踏上了寻找完美替代品的旅程。尝试过Winamp、foobar2000、甚至自己动手搭建网页播放器,最终选择了Jellyfin。Jellyfin是一个自托管的媒体服务器,让我可以随时随地访问我的音乐库,无需依赖流媒体服务。虽然需要一些技术操作,但设置起来并不困难,即使是旧电脑也能胜任。配合手机端的客户端应用,离线收听音乐也变得轻松便捷。这不仅让我实现了数字自主,也开启了自托管其他应用的大门,例如Immich照片管理。
在ZFS文件系统启用压缩的情况下,一个256KB的零文件(使用`dd`命令创建)展现出令人费解的现象:`ls -l`显示其大小为256KB,但`ls -s`和`ls -slh`却显示其大小远小于实际大小,甚至接近于0。这是因为ZFS的高效压缩使得物理块数量极少。文章探讨了文件大小的三种度量方式:逻辑大小(字节数)、物理块数和逻辑块数,并指出POSIX标准的`st_blocks`字段并没明确规定应该报告哪种大小,导致文件在不同文件系统间移动时,`st_blocks`值可能发生变化,甚至可能导致文件大小膨胀无法适应新的文件系统。
本文探讨了数据库查询引擎中推式(push)和拉式(pull)两种模式的差异。拉式模式类似于迭代器模型,消费者驱动数据获取;而推式模式则由生产者驱动,数据主动推送给下游操作符。推式模式在处理DAG形查询计划(例如SQL中的WITH语句)方面更有效率,因为生产者可以将数据同时推送到多个下游操作符,避免了数据重复计算和不必要的缓冲。然而,拉式模式在处理某些算法(如merge join和LIMIT)时更方便。文章还讨论了缓存效率、代码简洁性以及两种模式在不同场景下的适用性,最终指出没有绝对的优劣之分,选择取决于具体需求。
Plandex是一款基于终端的AI开发工具,能够规划和执行大型编码任务,处理涉及多个步骤和数十个文件的项目。它可以直接处理高达200万个token的上下文(每个文件约10万个),并可以使用tree-sitter项目映射索引超过2000万个token的目录。Plandex支持多种模型,并具有累积差异审查沙箱、可配置的自主性、自动调试等功能,帮助开发者高效完成大型项目的开发,并能有效控制成本。
程序运行速度慢是程序员的常见痛点。本文作者总结了多年的优化经验,提出四种优化方案:1. 使用更好的算法;2. 使用更好的数据结构;3. 使用更底层的系统;4. 接受精度较低的解决方案。文章以冒泡排序和选择排序为例,详细阐述了算法选择的重要性,并强调了在选择数据结构和编程语言时需考虑实际情况。作者提醒,在进行优化之前,务必先进行严格的性能分析,避免盲目优化。
Codex是一个运行在终端的轻量级编码助手,通过OpenAI API提供ChatGPT级别的代码推理能力。它支持交互式和非交互式模式,能自动补全代码、运行代码、安装依赖、甚至生成单元测试,并提供安全沙箱机制防止恶意代码运行。用户可自定义指令和审批模式,从简单的代码解释到复杂的项目重构,Codex都能胜任。它支持多种操作系统,并已开源,开发者可以参与贡献。
Meta 的 Llama 3.3 模型虽然被宣传为开源,但其许可证却包含许多限制性条款,许多开发者可能并未完全理解。文章指出,许可证要求分发 Llama 模型或衍生产品必须显眼地标注“Built with Llama”,并以“Llama-”作为衍生模型名称的前缀。此外,许可证还包含一项“可接受使用策略”,要求开发者向用户披露其 AI 系统的已知风险,例如偏差或不准确性。作者提醒开发者仔细阅读许可证,并决定是否遵守这些条款,避免潜在的法律风险。
OpenAI发布了名为Codex CLI的本地编码代理,它可以直接在终端运行,将OpenAI的模型与本地代码和计算任务连接起来。Codex CLI允许AI编写和编辑代码,甚至执行文件移动等操作,是OpenAI构建“代理软件工程师”愿景的一小步。该工具开源且轻量级,并提供100万美元的API资助计划,用于支持软件开发项目。虽然AI编码工具有其风险,但Codex CLI为AI辅助编程提供了新的可能性。
RakuAST项目对Raku编程语言的编译器前端进行了重写和重新设计。作者通过逐个修复单元测试的方式,逐步完善了对Raku语言各种复杂语法的支持,例如私有方法、元方法和超方法调用等。然而,最大的挑战在于Raku编译过程的复杂性和代码执行顺序的依赖性,这需要作者精确地把握各个组件的编译顺序,最终提交了900多次代码更改。此外,项目还完成了编译器自举的挑战,即使用新的编译器前端编译Raku本身,这过程中需要处理循环依赖和标准库中大量高级特性的问题。整个项目历经艰辛,但也获得了来自社区成员的宝贵帮助。
MITRE 的 CVE 合同即将到期引发轩然大波,文章作者认为,这是一个改进软件安全体系的机会。当前的 CVE 系统充斥着虚假报告,价值下降。作者建议建立一套基于漏洞属性而非评分的系统,并引入专业软件工程师 (PSWE) 认证制度,对未按时准确报告漏洞的行为处以吊销证书的严厉惩罚,从而强制企业和项目积极参与漏洞报告。同时,该方案还包含了资助和培训未来 PSWEs 的机制,以解决行业准入门槛问题,最终实现软件安全和 FOSS 项目可持续发展的双赢局面。
作者回顾了UCSD p-System,一个诞生于70年代的跨平台操作系统和编译器,它通过p-machine虚拟机实现了在各种计算机(从PDP-11到Apple II)上的运行。作者分享了其在高中时期使用Apple Pascal和UCSD Pascal的经历,并计划用Rust重新构建p-machine模拟器,延续这段传奇,解决现有工具文档缺失和依赖过时编译器的问题。
本文探讨了构建可靠的、可扩展的、易于维护的LLM驱动软件的原则——12要素Agent。作者指出,现有的Agent框架在生产环境中应用不足,许多所谓的“AI Agent”实际上只是在确定性代码中加入了LLM步骤。作者提出了构建更强大的Agent的原则,强调了将小型、模块化的Agent概念整合到现有产品中的方法,避免了全盘重构的低效。这篇文章适合关注AI应用开发的工程师和创业者阅读。
ActorCore是一个用TypeScript编写的框架,它提供了一种构建有状态、AI代理、协作或本地优先应用程序的简便方法。它消除了数据库和ORM的需要,并通过将状态存储在计算引擎的同一台机器上,实现了超快的读写速度。ActorCore支持部署到Rivet、Cloudflare、Bun、Node.js等多种平台,并具有内置的低延迟事件,支持实时更新状态和广播更改。其独特的优势在于其在边缘存储数据的能力,这使得每一次交互都感觉即时。虽然目前不适合OLAP、数据湖、图数据库和高度关系型数据,但它正在不断改进,并朝着成为构建和扩展有状态无服务器应用程序的通用方式发展。
OpenAI的一篇新论文《SWE-Lancer》评估了前沿AI模型在真实软件开发任务中的表现。研究人员使用Upwork上的1400多个自由职业任务(总价值超过100万美元)作为基准,这些任务分为两类:个体贡献者任务(修复bug或构建功能)和工程经理任务(选择最佳解决方案)。结果显示,即使是表现最好的模型Claude 3.5 Sonnet也只完成了33.7%的任务,赚取了约40.3万美元。AI在选择最佳解决方案方面明显优于创建解决方案,这表明AI可能首先会在代码审查和架构决策方面辅助工程团队。该研究为衡量AI的进步提供了具体方法,有助于领导者更好地理解和预测AI的当前能力和影响。
本文探讨了当下Web应用中客户端重逻辑的趋势带来的问题:API churn。为了解决这个问题,可以使用GraphQL等更具表达能力的API,但同时也引入了安全风险,因为客户端的表达能力增强也赋予了恶意用户同样的能力。作者认为,解决这个问题的根本方法是将逻辑移回服务器端,以避免API churn与安全复杂性之间的权衡。
DVMCP是一个用于教育目的的故意设有漏洞的模型上下文协议(MCP)实现。它包含10个难度递增的挑战,展示了不同类型的漏洞和攻击向量,涵盖提示注入、工具中毒、权限过高、拉 rug 攻击、工具隐藏、间接提示注入、令牌窃取、恶意代码执行、远程访问控制和多向量攻击等。该项目旨在帮助安全研究人员、开发人员和AI安全专业人员学习MCP实现中潜在的安全问题以及如何减轻这些问题。
Krep 是一款性能优化的字符串搜索工具,旨在处理大型文件和目录时实现最大吞吐量和效率。它采用多种搜索算法和 SIMD 加速(如果可用),并以速度和简洁性为设计理念,力求在最常见的用例中实现最快搜索速度。Krep 自动选择最佳搜索算法,支持多线程搜索、内存映射 I/O、正则表达式以及递归目录搜索,并能跳过二进制文件和常见非代码目录。基准测试显示,Krep 的速度比 grep 快约 41.5 倍,比 ripgrep 略快。
这篇幽默文章用猎象的方式,巧妙地刻画了不同技术岗位人员的性格和工作方式。数学家追求严谨证明,计算机科学家遵循算法,工程师注重效率,经济学家相信金钱的力量,统计学家依赖数据……文章以诙谐的笔触,展现了不同职业的思维模式和特点,引发读者共鸣,是一篇轻松有趣的科技行业文化解读。
一位开发者创建了一个高吞吐量的Zig语言词法分析器和解析器,其速度比现有实现快2.75倍,内存使用减少2.47倍。该项目利用SIMD和SWAR技术,并通过巧妙的位操作和完美哈希函数等优化策略,实现了显著的性能提升。开发者还在持续改进,目标是将该解析器集成到Zig编译器中。
一个使用Rust构建的高性能物联网开发平台闪亮登场!它支持MQTT、WebSocket、TCP和CoAP等多种协议,并具备实时数据处理能力。Rust的内存安全和并发特性保证了平台的高效性。模块化设计方便扩展和维护,包含数据处理、协议接口、消息通知和外部API等模块。该平台适用于各种物联网应用场景,并采用Apache 2.0许可证开源。
作者Antirez受到三年前Hacker News一篇关于使用余弦相似度检测相似账号的文章启发,利用Redis 8 RC1中新加入的向量集功能,重现了这一实验。他下载了10GB的Hacker News评论数据,经过数据清洗和预处理,生成了包含用户和其词频向量的JSONL文件。随后,他利用Burrows-Delta方法,将词频向量标准化,并将其插入Redis向量集。最终,通过VSIM命令,可以快速查找具有相似写作风格的用户账号。该项目代码已开源,并提供了一个在线演示网站。
Bauplan是一个基于Python的无服务器数据平台,它通过函数即服务的方式处理大规模数据管道,并利用Git管理S3数据湖中的数据。它旨在简化云端大规模机器学习工作流、AI应用和数据转换管道的运行,无需管理任何数据基础设施。Bauplan 的主要特点包括:Python优先设计,直接操作S3中的表格,支持Git数据管理,无服务器管道,全面支持SQL,以及数据CI/CD和版本控制。它适用于运行AI应用、ML工作负载和数据管道。