分类: 开发

RubyGems.org:如何有效打击恶意软件包

2025-08-26

RubyGems.org 近期成功拦截了一批试图窃取社交媒体凭据的恶意软件包。这得益于其多层安全体系:自动化检测(静态和动态代码分析)、风险评分、追溯扫描和外部信息来源。一旦发现可疑软件包,RubyGems.org 会进行人工审核,确认恶意行为后移除并记录。最近一起事件中,RubyGems.org 在 Socket.dev 发现之前就已移除大部分恶意软件包,并积极配合后续调查,展现了其高效的安全响应能力。文章呼吁开发者积极参与安全维护,并鼓励企业支持 RubyGems.org 的安全工作。

开发

DeepWiki:你的AI编码神器

2025-08-26
DeepWiki:你的AI编码神器

DeepWiki 是一款强大的工具,能够将任何 GitHub 代码库瞬间转化为可导航的维基,从而大幅提升 AI 辅助编码效率。它支持快速和深度两种搜索模式,并能提供带源码链接的精准答案。通过 DeepWiki MCP 服务器,你可以将其集成到 Claude、Cursor 等 AI IDE 中,实现实时上下文查询。DeepWiki 不仅能帮助你快速理解代码库,还能生成代码片段、评估开源库的安全性及许可证,甚至辅助代码审查。无论是初学者还是资深开发者,DeepWiki 都能成为你高效编码的得力助手。

基于CSI的实时WiFi人体运动检测与3D可视化

2025-08-26
基于CSI的实时WiFi人体运动检测与3D可视化

这是一个名为WiFi-3D-Fusion的开源项目,它利用CSI(信道状态信息)技术,通过本地WiFi信号实时检测人体运动,并将其以3D形式可视化。该项目支持ESP32-CSI和Nexmon两种数据采集方式,并集成了先进的卷积神经网络进行人体检测和追踪,能够实现多人的识别和再识别。此外,它还具有持续学习功能,模型能够在运行过程中自动改进。该项目提供Web端和终端两种可视化方式,并支持与Person-in-WiFi-3D、NeRF²和3D Wi-Fi Scanner等项目对接。

带注释的Transformer详解:一行一行代码实现

2025-08-26

本文档提供了一个带注释的Transformer论文的逐行代码实现版本。它重新排序并删除了原始论文中的一些部分,并在整个过程中添加了注释。该文档本身就是一个可运行的notebook,包含一个完整的可用实现。代码基于PyTorch,并详细解释了Transformer的架构,包括编码器、解码器、注意力机制、位置编码等,还包含了训练过程和一个真实的例子(Multi30k德英翻译任务)。

开发

Scala捕获检查:一次失败演讲背后的技术深度

2025-08-26

本文讲述了作者在Scala Days 2025上关于捕获检查的失败演讲,以及之后对该技术的深入研究。捕获检查旨在解决值逃逸其预期作用域的问题,例如在try-with-resource模式中资源的提前关闭。Scala通过引入“捕获集”这一类型系统特性来实现捕获检查,它允许标记一个类型及其捕获的所有值。文章详细解释了捕获集、子类型化、语法糖以及捕获函数和类的机制,并探讨了类型参数中的捕获集行为。最终,作者认为捕获检查虽然涉及许多细节,但对于大多数开发者而言,它是一个几乎无需学习的特性,反而能提高Scala的安全性,并促进功能的广泛应用。

开发 捕获检查

数据结构优化带来意想不到的CPU性能提升

2025-08-26

一个处理大型数据集的程序遇到了内存和CPU性能瓶颈。最初使用单一数组存储数据,导致高达1GB的内存消耗。通过数据导向编程,将数据拆分为多个数组,节省了约200MB内存。更进一步,用字节数组替换字符串数组索引,内存消耗进一步降低。令人惊讶的是,这一改变还显著降低了CPU使用率。原因在于垃圾回收机制:处理字符串数组时,GC需要遍历所有字符串对象,而处理字节数组则无需此步骤,从而大幅减少了GC开销。

xv6-riscv-net:在RISC-V架构的xv6操作系统中实现TCP/IP网络

2025-08-26
xv6-riscv-net:在RISC-V架构的xv6操作系统中实现TCP/IP网络

这个项目将一个TCP/IP协议栈集成到基于RISC-V架构的xv6操作系统中,使其具备网络功能。它包含一个移植自用户态的microps的内核态TCP/IP协议栈、一个用于QEMU网络设备模拟的virtio-net驱动、标准的socket API以及简单的ifconfig命令。通过几条简单的命令即可构建并启动QEMU,然后配置IP地址,最终实现主机与xv6虚拟机间的ping测试以及TCP/UDP回显程序的运行测试。

开发

Linux系统间时间同步的极限:500纳秒精度挑战

2025-08-26
Linux系统间时间同步的极限:500纳秒精度挑战

本文作者尝试在局域网内多个Linux系统之间实现高精度时间同步,目标是将时钟差异控制在1微秒以内,以用于分布式追踪。经过一个月的探索,作者发现,即使使用GPS和Chrony等工具,也难以达到理想精度。GPS接收器本身存在抖动,网络延迟和非对称性也会引入数百纳秒的误差。最终,作者在大部分系统上实现了约500纳秒的同步精度,虽然未达到预期,但也足够满足其分布式追踪的需求。

开发 Chrony

macOS 命令行工具的配置文件该放在哪里?

2025-08-26
macOS 命令行工具的配置文件该放在哪里?

许多macOS命令行工具错误地将配置文件放在~/Library/Application Support目录下,这与用户预期和XDG规范相悖。文章指出,流行的库和点文件管理器都遵循XDG规范,将配置文件放在~/.config目录下。作者认为,命令行工具应遵循这一约定,以提高用户体验和一致性,只有GUI应用程序才应该使用~/Library/Application Support。

开发

算法复杂度:Big O 符号详解及应用

2025-08-25
算法复杂度:Big O 符号详解及应用

本文深入浅出地讲解了 Big O 符号,一种描述算法性能的方法。文章通过 JavaScript 函数 `sum` 的例子,比较了 O(1) 常数时间、O(log n) 对数时间、O(n) 线性时间和 O(n^2) 平方时间的差异,并用图表和代码示例展示了不同算法(如冒泡排序、二分查找)的时间复杂度。文章还探讨了如何优化代码以提高性能,例如避免在循环中使用 indexOf 函数,以及利用缓存减少冗余计算。最终,文章强调了实际测试的重要性,告诫读者不要盲目相信理论结果。

应对同步需求洪峰:一个优雅的解决方案

2025-08-25
应对同步需求洪峰:一个优雅的解决方案

当大量客户端同时发出请求时,会造成系统负载暴增,导致服务超时、重试堆积等问题。本文提出了一种通过引入随机抖动(jitter)来平滑请求到达率,从而有效缓解同步需求洪峰的方法。该方法通过计算安全窗口大小(W),将请求均匀分布在该窗口内,从而降低峰值请求率。同时,文章还讨论了如何利用服务器端提示(如Retry-After头)和速率限制等机制来进一步优化策略,最终实现系统稳定性和公平性的平衡。

开发

PEP: 一种为像素艺术设计的超高效压缩格式

2025-08-25
PEP: 一种为像素艺术设计的超高效压缩格式

PEP 是一种新颖的像素艺术图像压缩格式,专为低色像素艺术(≤16色最佳,支持高达256色)而设计。它采用“二阶局部匹配预测”压缩算法,压缩速度比 GIF、PNG 和 QOI 慢 2-10 倍,但压缩比却能达到 GIF 和 PNG 的 20-50%,甚至远超 QOI。如果你在意压缩后的图像大小,PEP 是你的不二之选。它介于 GIF 和 WEBP 之间,兼顾压缩率和速度。目前该项目仍处于实验阶段,但已提供 C 语言接口,方便开发者使用。

开发

decode-kit:轻量级TypeScript运行时数据校验库

2025-08-25
decode-kit:轻量级TypeScript运行时数据校验库

decode-kit是一个轻量级、零依赖的TypeScript库,用于校验运行时数据。它基于断言的校验方式,直接细化你的类型,无需克隆或转换,运行时开销极小。decode-kit采用快速失败策略,一旦发现第一个校验错误即停止并抛出异常,包含详细的错误信息和路径。它支持多种数据类型校验,包括字符串、数字、布尔值、数组、对象等,并提供丰富的规则配置。 其性能优于Zod等库,因为它直接断言类型,避免了数据复制,非常适合性能关键型应用。

开发 数据校验

Firefox 键盘导航增强扩展:一键点击高亮元素

2025-08-25

一个名为h43z的开发者针对Firefox浏览器键盘导航的不足,开发了一个小巧的扩展程序。该扩展程序能够在用户使用快捷键查找并高亮文本后,直接通过回车键点击高亮元素,从而提升键盘导航效率,尤其针对那些使用按钮和div而非链接进行导航的网站。该扩展通过监听键盘事件,获取选中文本的父元素并模拟点击实现。

开发

OAuth 2.0:安全地授权第三方应用访问你的数据

2025-08-25
OAuth 2.0:安全地授权第三方应用访问你的数据

OAuth 2.0 是一种授权协议,允许用户授权第三方应用访问其账户数据,无需共享密码。文章详细解释了 OAuth 2.0 的工作流程,包括用户授权、授权码获取、访问令牌交换等步骤,并强调了安全性,例如避免在 URL 中直接传递访问令牌。文章还介绍了 OAuth 2.0 中的关键术语,如资源拥有者、OAuth 客户端、授权服务器和资源服务器等,以及前端通道和后端通道的概念,并解释了 PKCE 机制在无后端应用中的作用。

开发

4.4KB的超轻量级AI代理:通过OpenRouter API执行Shell命令

2025-08-25
4.4KB的超轻量级AI代理:通过OpenRouter API执行Shell命令

一个用C语言编写的超轻量级AI代理,它与OpenRouter API通信并执行shell命令。其特点包括:直接通过AI响应执行shell命令;macOS版本仅4.4KB(GZEXE压缩),Linux版本约16KB(UPX压缩);采用滑动窗口内存管理以提高效率;支持macOS和Linux系统。该工具需要GCC编译器、curl命令行工具和OpenRouter API密钥。构建系统会自动检测平台并应用最佳压缩:macOS使用GZEXE压缩,Linux使用UPX压缩。代码已开源,无许可证限制。

开发 Shell命令

可插拔编解码器和生成存储的Provider无关CAS缓存

2025-08-25
可插拔编解码器和生成存储的Provider无关CAS缓存

cascache是一个提供者无关的Compare-And-Set (CAS)缓存,具有可插拔的编解码器和生成存储。它支持安全单键读取(无陈旧值)、可选的批量缓存(带读端验证)以及针对多副本部署的可选分布式模式。cascache使用快照生成来保证CAS安全,支持多种底层存储(如Ristretto、BigCache、Redis)和编解码器(如JSON、Msgpack、CBOR、Proto),并提供本地和分布式两种生成存储模式,以实现高性能和高可用性。

开发 CAS

SmallJS:优雅的Smalltalk-80 JavaScript 编译器

2025-08-25

SmallJS是一个免费开源的Smalltalk-80语言实现,它编译成可在现代浏览器或Node.js中运行的JavaScript代码。基于文件的架构,方便开发者在喜爱的IDE中进行开发,默认支持Visual Studio Code,并提供语法高亮和调试功能。SmallJS完全面向对象,高度可定制,并与JavaScript的类和方法名保持一致,内置了浏览器和Node.js的常用库,例如DOM操作、HTTP服务器、数据库等。此外,它还提供多个示例项目帮助开发者快速上手。

开发

API 设计的艺术:平衡易用性和灵活性

2025-08-25

本文探讨了API设计中的关键原则,强调了避免破坏用户现有代码的重要性。作者指出,好的API应该是简单易用的,但同时也需要具备长期的灵活性。文章详细阐述了API版本控制、幂等性、速率限制和分页等技术细节,并建议使用API密钥进行身份验证,以方便非专业工程师用户使用。文章最后总结道,一个优秀的产品比一个完美的API更重要,但一个糟糕的产品设计会直接导致糟糕的API。

开发

2025年Python开发者调查:数据科学主导,异步与Rust崛起

2025-08-25
2025年Python开发者调查:数据科学主导,异步与Rust崛起

2025年Python开发者调查显示,数据科学已占据Python开发领域半壁江山,Pandas和NumPy成为主流工具。尽管许多开发者仍在使用旧版Python,但新版本带来的性能提升(最高可达42%)不容忽视。Web开发领域也展现复苏迹象,FastAPI框架异军突起。Rust语言作为Python的性能补充,应用日益广泛。异步编程和多线程技术也日益重要,Python 3.14将全面支持免GIL的自由线程。调查还显示,文档是开发者学习的首选资源,AI工具的学习使用率也在快速增长。

开发

C++ std::adjacent_difference算法的巧妙设计与不足

2025-08-25

本文探讨了C++标准库中`std::adjacent_difference`算法的设计理念。该算法计算输入序列中相邻元素的差值,并复制第一个元素到输出序列。这种设计虽然保证了与`std::partial_sum`算法的对称性,如同微积分中的微分和积分互为逆运算,但同时也限制了其泛型性,因为不同类型数据的差值类型可能不同。文章进一步类比微积分中的导数和积分,解释了该算法的设计初衷,并对比了Q语言中更灵活的`deltas`函数,最终得出结论:虽然Stepanov的设计初衷良好,但其在泛型性方面有所不足,C++23中的`pairwise_transform`则提供了更灵活的解决方案。

开发

Parquet v2:升级后的性能提升与生态挑战

2025-08-25

Parquet文件格式的第二版带来了显著的性能提升,文件大小减少和读写速度加快,尤其在包含大量数值型数据的场景下。然而,由于生态系统中对v2的支持不足,许多工具仍未兼容,导致升级的收益并未完全体现。作者在实践中也遭遇了兼容性问题,最终发现v2的优势主要体现在自建系统中,第三方集成仍面临挑战。虽然Parquet v2在性能上有提升,但目前生态系统对v2的支持有限,建议在拥有完整数据处理流程控制权的情况下再升级。

开发

Rust内存文件系统性能测试:出乎意料的结果

2025-08-25

作者在Rust中开发CLI工具时,尝试使用内存文件系统来提升文件管理测试速度。尝试了vfs和rsfs两个crate,但最终发现,现代SSD和操作系统文件系统缓存的效率极高,以至于使用内存文件系统几乎没有性能提升。测试结果显示,使用内存文件系统、普通文件系统和ramdisk的测试时间都在45ms左右,这与作者的预期大相径庭。作者呼吁读者分享使用内存文件系统的性能差异案例。

终端HTTP/TCP延迟监控工具:sping

2025-08-25

sping是一个现代化的终端HTTP/TCP延迟监控工具,它结合了实时可视化、阶段计时和高级分析功能。它支持HTTP和TCP协议,能够实时显示响应时间、异常值检测和统计数据,并提供多种输出格式(交互式UI、纯文本、JSON)。用户可以自定义探测间隔、次数、阈值等参数,并选择不同的颜色主题。sping易于安装(使用pip),可生成直观的截图,方便与同事沟通和诊断网络延迟问题。

ContextForge MCP网关:统一REST、MCP和A2A的强大工具

2025-08-25
ContextForge MCP网关:统一REST、MCP和A2A的强大工具

ContextForge MCP网关是一个功能强大的网关、代理和MCP注册中心,它联合了MCP和REST服务,将发现、身份验证、速率限制、可观察性、虚拟服务器、多传输协议和可选的管理UI整合到一个简洁的端点中,供您的AI客户端使用。它作为一个完全符合MCP规范的服务器运行,可通过PyPI或Docker部署,并可通过Redis支持的联合和缓存扩展到Kubernetes上的多集群环境。该项目目前处于alpha/早期测试阶段,不建议用于生产环境。

开发 网关

Git Annex:你的数据,你的掌控

2025-08-25

Bob和Alice分别面临着数据归档和移动办公的数据管理难题。Bob拥有众多离线硬盘,使用Git Annex,他能够在一个单一目录树中管理所有文件,即使文件内容存储在离线硬盘上。Git Annex自动追踪文件位置,并能方便地访问所需文件,同时保证数据长期可访问性。Alice则利用Git Annex管理多个数据来源(例如服务器、USB驱动器),实现数据同步和版本控制,无需手动管理,高效便捷地处理数据。无论Bob还是Alice,Git Annex都为他们提供了可靠、高效的数据管理方案,解决了数据安全和访问性问题。

开发

用代码计算信用卡债务:数学在编程中的必要性?

2025-08-24
用代码计算信用卡债务:数学在编程中的必要性?

本文探讨了数学是否为程序员的必要背景知识。作者通过构建一个模拟信用卡还款的Elixir程序,展示了即使没有复杂的数学知识,也能利用简单的公式和编程技巧来解决实际问题,例如计算信用卡的复利和还款计划。程序模拟结果显示,仅仅增加最低还款比例或每月多还款少量金额,就能显著缩短还款时间并节省大量费用,凸显了理解复利和财务规划的重要性。

开发

SQLite WAL 模式下的同步性与数据持久性权衡

2025-08-24

SQLite的WAL模式(默认是journal模式)为了提高写入吞吐量,牺牲了一定的数据持久性。同步模式pragma控制fsync的调用方式,默认为NORMAL。在这种模式下,WAL文件在每个检查点之前同步,数据库文件在每个检查点完成后同步,但大多数事务期间不进行同步操作。如果持久性不是问题,NORMAL模式足以满足WAL模式下的需求。若需在每次提交时调用fsync,则应将同步模式设置为FULL,这会在每次事务提交后额外同步WAL文件,提高数据持久性,但会降低写入速度。有人质疑SurrealDB在基准测试中为了更好的结果而牺牲了数据持久性,这篇文章以此为例解释了SQLite中的相关机制。

(avi.im)

动态修改Python函数源码的危险技巧

2025-08-24

本文介绍了一种在Python运行时动态修改函数源码的技巧,这使得构建AI机器人成为可能。作者通过修改函数的`.__code__`属性,编译新的源码并将其注入到命名空间中,实现了函数功能的动态替换。这种方法在LlamaBot的ToolBot中得到了应用,ToolBot专注于工具选择而非执行,将生成的代码在同一Python环境中编译并执行,从而能够访问运行时变量,构建更强大的AI工具。虽然这种方法存在安全风险,但它展示了Python运行时的灵活性以及在构建LLM代理时分离工具选择和执行的重要性。

开发 动态代码

告别代码混乱:利用Claude Code实现协同设计

2025-08-24

作者最初使用Claude Code时,直接输入任务指令,效率低下且易出错。随着任务复杂度增加,这种方法的局限性日益明显:对话容易遗失关键信息,上下文限制导致代码质量下降。为此,作者尝试了新的方法:先让Claude Code编写计划文档,作为任务的唯一信息来源。此后,每次开始新的开发环节,都从清空对话,仅保留计划文档作为上下文开始。这个“活文档”方法,让Claude Code在实现过程中持续更新计划,解决上下文限制问题,提高代码可靠性。最终,作者不仅提高了开发效率,也提升了自身的设计能力。

1 2 17 18 19 21 23 24 25 213 214