分类: 开发

arXivLabs:与社区协作者合作的实验项目

2025-02-03
arXivLabs:与社区协作者合作的实验项目

arXivLabs是一个框架,允许合作者直接在arXiv网站上开发和分享新的arXiv功能。参与arXivLabs的个人和组织都认同并接受了我们关于开放性、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,并且只与遵守这些价值观的合作伙伴合作。 有一个能为arXiv社区增值的项目创意?了解更多关于arXivLabs的信息。

开发

逆向工程苹果的 typedstream 格式:iMessage 导出器的内部机制

2025-02-03

本文深入探讨了 iMessage-exporter 项目逆向工程苹果私有二进制序列化协议 typedstream 的过程。typedstream 用于存储 iMessage 数据,其格式未公开,且苹果官方文档中没有描述。作者通过分析 iMessage 数据库中存储消息正文的 BLOB 数据,发现了 typedstream 的一些模式,例如 0x84 表示数据块的开始,后续字节表示数据块长度,0x86 表示数据块的结束等。通过识别这些模式,作者成功地将 typedstream 数据反序列化,实现了跨平台访问 iMessage 数据。

Python 的 JIT 装饰器:三种实现策略详解

2025-02-03

本文深入探讨了 Python 中流行的 JIT 装饰器模式,特别是 JAX 和 Triton 库中的应用。作者通过一个简化的示例,从零开始实现了三种 JIT 装饰器:基于 AST 的、基于字节码的和基于追踪的。基于 AST 的方法直接处理抽象语法树;基于字节码的方法利用 Python 的字节码解释器;基于追踪的方法则通过运行时追踪函数执行来构建表达式 IR。文章详细比较了这三种方法的优缺点,并以 JAX 和 Numba 为例,阐述了它们在实际应用中的策略。

开发

用C语言编写WebAssembly虚拟机:一个六个月的个人项目总结

2025-02-03

作者耗时六个月,利用业余时间用C语言编写了一个WebAssembly虚拟机“Semblance”。这个项目帮助作者摆脱了之前频繁更换小项目的低效状态,并让他深入学习了WebAssembly核心规范。文章详细介绍了项目的架构,包括模块解码、导入解析、模块实例化和指令执行等步骤,并分享了作者在项目中遇到的挑战和收获,最终成功运行了一个简单的“Hello, World!”程序。这个项目不仅提升了作者的技能,也让他对WebAssembly有了更深入的理解,为未来参与工业级运行时贡献打下基础。

开发

Ruby线程争用:并非你想象中的“混战”

2025-02-03

长期以来,我对Ruby中的“线程争用”存在误解。实际上,Ruby线程并非无序竞争,而是井然有序地排队等待获取全局虚拟机锁(GVL)。每个线程获取GVL后执行代码,直到释放GVL或被强制收回。这取决于线程I/O操作或运行时间是否超过线程量子(默认100ms)。理解这一点对于优化多线程应用至关重要,特别是避免CPU密集型线程阻塞I/O密集型线程,导致尾部延迟增加。降低CPU密集型线程优先级或缩短线程量子可以缓解这个问题,但受限于10ms的最小时间片。

开发 GVL

YouTube频道被删:独立开发者遭遇“误伤”

2025-02-03
YouTube频道被删:独立开发者遭遇“误伤”

独立开发者Sinevibes的YouTube频道因“垃圾邮件和欺骗性政策”被删除,引发争议。Sinevibes表示,其频道仅发布原创产品的演示视频,从未发布其他内容,此次删除令人费解。此事件凸显了平台算法误判对内容创作者的影响,也引发了对平台审核机制的讨论。

开发

Dart宏项目被砍:专注是关键

2025-02-03
Dart宏项目被砍:专注是关键

Google Dart团队宣布放弃宏(Macros)项目,该项目旨在简化Flutter和Dart开发中重复代码的编写。由于性能目标无法实现且多年的原型设计未能带来足够的回报,Google决定将宏分解成更小的功能。作者,曾领导Flutter和Dart团队的资深人士,将此举与Steve Jobs的“说‘不’才能腾出空间说‘是’”的理念联系起来,认为专注是成功的关键,并对Dart团队未来发展充满期待。

开发

Ubuntu 开发团队迁移至 Matrix 实时通信平台

2025-02-03
Ubuntu 开发团队迁移至 Matrix 实时通信平台

Ubuntu 开发团队宣布从 2025 年 3 月起将主要实时通信平台从 IRC 迁移至 Matrix。此举旨在提高沟通效率,避免信息碎片化,并吸引更多新开发者。虽然 IRC 依然流行,但其功能相对简陋,难以满足新一代开发者的需求。Matrix 拥有更丰富的功能,例如讨论历史记录、搜索和离线消息等,并已成为许多 Ubuntu 团队、社区和开源项目的常用平台。此迁移仅影响开发团队内部沟通,最终用户无需担心。

开发

轻量级持久化执行:DBOS Transact 开源库

2025-02-03
轻量级持久化执行:DBOS Transact 开源库

传统的持久化执行依赖外部协调器,例如AWS Step Functions,这增加了开发和部署的复杂性。DBOS Transact是一个轻量级的开源库,它将持久化执行集成到程序本身,无需外部协调器。它通过在Postgres数据库中持久化程序的执行状态来实现持久化执行,即使程序崩溃或重启,也能自动恢复到中断的地方。DBOS Transact还提供了其他功能,例如持久化休眠、持久化消息传递和持久化队列,进一步简化了可靠状态程序的开发。

开发 DBOS Transact

Docker Compose 安全秘钥管理最佳实践

2025-02-03
Docker Compose 安全秘钥管理最佳实践

本文探讨了在现代 Docker Compose 部署中管理密钥的最佳实践,并讨论了常见的陷阱。文章从基本方法逐步构建到更安全的配置,涵盖了使用环境变量、文件以及 Docker Compose 的 secrets 功能等方法,并强调了控制密钥访问权限的重要性。作者还建议避免将密钥硬编码到配置文件中,并使用诸如 Phase 之类的工具来简化密钥管理流程,最终目标是提升安全性并避免安全事故。

用Shader打造复古网页3D效果:抖动、色彩量化和像素化

2025-02-03
用Shader打造复古网页3D效果:抖动、色彩量化和像素化

作者花了几个月时间构建个人网站,并加入了3D元素来展示其着色器和WebGL技能。文章深入探讨了后期处理在提升3D场景视觉效果中的关键作用,特别是复古风格效果的实现,包括抖动、色彩量化和像素化等技术。文章讲解了不同类型的抖动技术(白噪声抖动、有序抖动和蓝噪声抖动),以及如何通过着色器实现这些效果。此外,文章还介绍了色彩量化技术,允许自定义调色板,并最终结合像素化和模拟CRT显示器的效果,创造出令人惊艳的复古风格3D网页效果。

开发

NSDI 24:面向 SLO 目标的微服务资源管理的实用双层方法

2025-02-03

USENIX 致力于开放获取其活动中提出的研究成果。在活动开始后,论文和会议记录将免费提供给所有人。活动结束后发布的任何视频、音频和/或幻灯片也都是免费且开放的。这项研究论文《Autothrottle:面向 SLO 目标的微服务资源管理的实用双层方法》由 Zibo Wang 等人发表在 2024 年的 NSDI 大会上,文章介绍了一种名为 Autothrottle 的实用双层方法,用于管理面向 SLO 目标的微服务资源。该论文以及相关的视频和幻灯片已公开发布。

开发 SLO

全局变量并非洪水猛兽:一个意外的bug引发的思考

2025-02-03

本文通过一个简单的计数器例子,展示了避免使用全局变量反而导致bug的情况。作者指出,问题并非全局变量本身,而是数据访问的隐蔽性——“远程作用”。文章分析了不同类型的变量,并探讨了在特定场景下合理使用全局变量的方法,例如封装成函数或只允许追加操作的类型,从而避免“远程作用”带来的问题。

HYTRADBOI:一场异步数据库与编程语言盛会

2025-02-02

HYTRADBOI 是一场别开生面的在线会议,聚焦数据库和编程语言的交叉领域。所有演讲提前录制并配有字幕,采用异步在线聊天室形式进行,打破时间和地域限制。参会者可在任何时间地点观看演讲,参与讨论。众多专家盛赞其独特的异步模式,以及演讲内容的深度和前瞻性,使其成为一次难忘的技术盛宴。

开发 异步会议

Garmin 数据解析神器:GarminDb

2025-02-02
Garmin 数据解析神器:GarminDb

GarminDb 是一个强大的 Python 脚本集合,用于解析 Garmin Connect 的健康数据并将其存储到 SQLite 数据库中。它能够自动下载并导入每日监控数据(心率、活动、爬升/下降、压力和强度分钟数)、睡眠、体重、静息心率等信息。此外,它还能汇总数据,生成日报表、周报表、月报表和年报表,并支持通过命令行或 Jupyter Notebook 绘制图表。该项目还提供插件机制,方便扩展数据类型。总之,GarminDb 是一个功能全面、易于使用的 Garmin 数据管理工具,让你的健康数据分析更加便捷高效。

开发

敏捷项目管理中有效的利益相关者参与

2025-02-02

在快节奏的敏捷项目中,保持利益相关者的参与至关重要。本文探讨了如何在敏捷环境中有效地参与利益相关者,包括利用利益相关者地图、数字化工具以及在远程或受限环境中保持参与度的方法。文章强调了项目经理和业务分析师在促进沟通、协调目标和管理期望方面的关键作用,并介绍了诸如MoSCoW和Kano等优先级框架以及Jira和Trello等工具的实践应用。通过有效的利益相关者参与,企业可以确保项目交付满足期望,并最终实现敏捷方法的价值。

arXivLabs:与社区协作者共建arXiv新功能

2025-02-02
arXivLabs:与社区协作者共建arXiv新功能

arXivLabs是一个实验性项目,允许合作者直接在arXiv网站上开发和分享新功能。参与者都认同arXiv的开放、社区、卓越和用户数据隐私的价值观。你有提升arXiv社区价值的想法吗?了解更多关于arXivLabs的信息。

开发

MuPDF 命令行工具 mutool:PDF 文件的多功能瑞士军刀

2025-02-02

mutool 是一个基于 MuPDF 库的强大命令行工具,它提供了一套丰富的子命令,可以对 PDF 文件执行各种操作,例如:将 PDF 页面转换为 PNG 图片、提取文本内容、合并多个 PDF 文件、提取嵌入的图像和字体等。其功能涵盖了 PDF 文件处理的各个方面,堪称 PDF 文件处理的瑞士军刀。无论是处理简单的转换任务,还是执行复杂的 PDF 操作,mutool 都能胜任。

开发 PDF处理 MuPDF

Python 协议:静态鸭子类型与继承的优雅进化

2025-02-02
Python 协议:静态鸭子类型与继承的优雅进化

Python 的继承机制一直以来都很有趣。传统上,Python 使用基于类型的继承,类似 Java。但鸭子类型(通过魔术方法实现)的灵活性有限。PEP 544 引入了协议(Protocol),允许定义结构化子类型,即静态鸭子类型。通过继承 Protocol 类,开发者可以声明一组方法,任何实现了这些方法的类都将被视为该协议的实例,解决了传统鸭子类型在扩展性上的不足,使代码更清晰,更易于维护。

开发 鸭子类型

跨平台网络流量监控工具Sniffnet:开源、免费且功能强大

2025-02-02
跨平台网络流量监控工具Sniffnet:开源、免费且功能强大

Sniffnet是一款免费开源的跨平台网络流量监控工具,支持多种操作系统和语言。它提供直观的界面,允许用户轻松监控网络流量,查看实时图表,导出PCAP文件,识别服务和协议等。Sniffnet也支持自定义主题、通知和过滤器,并提供详尽的Wiki文档。虽然部分旧系统可能需要设置环境变量来切换渲染器,但总体而言,Sniffnet是一款功能强大且易于使用的工具。

开发

Lume:轻量级 macOS/Linux 虚拟机管理工具

2025-02-02
Lume:轻量级 macOS/Linux 虚拟机管理工具

Lume 是一款轻量级的命令行界面和本地 API 服务器,用于在 Apple Silicon 上以接近原生性能创建、运行和管理 macOS 和 Linux 虚拟机 (VM),它利用 Apple 的 Virtualization.Framework。只需一步即可运行预构建的 macOS 镜像,并提供丰富的命令行工具来管理虚拟机,包括创建、运行、列出、获取信息、设置、停止、删除、拉取镜像、克隆以及管理镜像缓存等功能。Lume 还提供了一个本地 HTTP API 服务器,方便自动化管理虚拟机。

开发

OmiAI:一款智能的TypeScript AI SDK

2025-02-02
OmiAI:一款智能的TypeScript AI SDK

OmiAI是一个基于TypeScript的AI SDK,它能根据提示自动选择一系列精选模型中最佳的模型。它内置了类似o3的推理功能、精选工具、互联网访问和几乎所有媒体类型的全多模态支持。OmiAI的目标是成为你使用大型语言模型的最终框架,让你感觉就像使用一个擅长所有任务的LLM一样。它支持多种模型,自动选择最佳模型,自动链接模型以完成复杂任务,并具有内置推理、工具调用、多模态支持和实时互联网访问等功能。

开发 AI SDK

Lua音调和谐库Modest:优雅的音乐编程

2025-02-02
Lua音调和谐库Modest:优雅的音乐编程

Modest是一个强大的Lua音乐和谐库,提供Chord、Note和Interval对象,支持从简单大小调到复杂爵士和弦的广泛和弦类型。它能解析各种和弦符号,进行转调,并检索单个音符。Modest易于安装,支持Lua 5.4和LuaJIT,并避免全局变量污染。其核心功能包括和弦识别、转调、音符提取以及各种音程计算,为音乐软件开发提供了高效便捷的工具。

开发

Caffeine缓存库深度解析:Window TinyLFU策略及高效实现

2025-02-02

本文深入探讨了高性能缓存库Caffeine的内部机制,特别是其独特的Window TinyLFU缓存淘汰策略。文章详细解释了Window TinyLFU如何结合频率和近期访问信息,并通过CountMinSketch数据结构高效地估计访问频率。此外,文章还分析了Caffeine中基于有序队列和分层定时轮的到期机制,以及其自适应缓存策略如何通过爬山算法动态调整缓存配置,最终实现高性能缓存管理。

Qodo Merge 1.0:AI 代码审查助手进化之路

2025-02-02
Qodo Merge 1.0:AI 代码审查助手进化之路

Qodo Merge 1.0 作为一款 AI 代码审查工具,在一年多的发展中,解决了 AI 辅助编码中固有的挑战。新版本重点关注问题模式,优先处理错误、安全漏洞和可维护性等关键问题;动态学习功能通过分析已接受的建议来改进未来的建议;实时工单上下文功能将工单要求无缝集成到代码审查中;`/implement` 命令可将代码审查讨论和反馈转化为可操作的代码更改。Qodo Merge 1.0 使代码审查过程更精确、更具适应性和效率。

开发

战胜左递归:一个C++反汇编器的语法修正之旅

2025-02-02

本文讲述了作者在重写RizinOrg的C++反汇编器rz-libdemangle的过程中,如何解决上下文无关文法(CFG)中左递归和互斥左递归的问题。文章首先解释了左递归和互斥左递归的概念,并通过简单的例子和状态图演示了如何将左递归文法转换为右递归文法,避免无限递归。随后,作者分享了其在Itanium ABI反汇编器中遇到的实际问题,展示了复杂的左递归和互斥左递归的语法,以及如何使用宏定义和巧妙的语法转换来解决这些问题,最终避免了栈溢出错误。

开发 左递归

PL/Rust:在PostgreSQL中使用Rust编写高性能函数

2025-02-02
PL/Rust:在PostgreSQL中使用Rust编写高性能函数

PL/Rust是一个可加载的程序语言,允许开发者使用Rust语言编写PostgreSQL函数,并将其编译成原生机器码,而非解释执行。这使得PL/Rust函数拥有极高的性能,并能充分利用Rust庞大的生态系统和编译时安全保障。PL/Rust支持PostgreSQL的服务器编程接口(SPI),包括动态查询、预处理语句和游标,并提供对大多数PostgreSQL内置数据类型的安全Rust类型。在x86_64和aarch64 Linux系统上,PL/Rust可以作为“受信任的”程序语言,其他系统则为“不受信任的”。该项目提供详细的文档和安装指南,以及用于跨编译的支持。

开发 PL/Rust

SQL的生死之战:卡内基梅隆大学数据库研究组研讨会

2025-02-02
SQL的生死之战:卡内基梅隆大学数据库研究组研讨会

卡内基梅隆大学数据库研究组举办了一系列研讨会“SQL的生死之战”,探讨如何改进SQL或用更优方案替代它。研讨会以线上形式进行,邀请了众多专家,涵盖了提升SQL速度和探索替代方案两个方向,例如TypeScript存储过程、新型查询语言PRQL和OxQL等。这是一个关于数据库未来走向的引人入胜的讨论,值得关注。

开发

Mill 使用 Github Actions 构建跨平台原生二进制文件

2025-02-02

Mill 项目利用 Github Actions 在不同平台(Mac、Windows、Linux)构建原生二进制文件,并将其上传到 Maven Central。通过巧妙的配置,它实现了 JVM 兼容的通用构件和特定平台的原生二进制构件的分离发布,保证了跨平台兼容性,并通过自定义 `artifactName` 和 `jar` 任务,生成带有操作系统和 CPU 架构后缀的特定版本文件,方便用户根据自身环境选择合适的执行文件。

指针的复杂性:LLVM 优化器中的细微错误

2025-02-02

本文探讨了编译器中间表示 (IR) 的精确语义的重要性,特别是对于像 C、C++ 和 Rust 这样的允许不安全指针操作的语言。作者通过三个看似合理的 LLVM 编译器优化步骤,展示了如何导致最终程序行为与初始程序行为不一致的错误。问题的根源在于指针的“出处”(provenance),即指针不仅仅是内存地址,还包含其计算方式的信息。这需要更精确的 LLVM IR 规范,包括未定义行为 (UB) 的精确定义。作者认为,将编译器 IR 视为独立的编程语言,并对其进行严格规范,是解决此类问题的关键。

开发 指针语义
1 2 170 171 172 174 176 177 178 213 214