分类: 开发

GPU Kill: 一款跨平台GPU管理CLI工具

2025-09-21
GPU Kill: 一款跨平台GPU管理CLI工具

GPU Kill 是一款命令行工具,用于跨 NVIDIA、AMD、Intel 和 Apple Silicon 系统管理 GPU。它可以轻松监控、控制和保护你的 GPU 基础设施。其功能包括实时监控 GPU 使用情况、终止卡住的进程、检测加密矿工和可疑活动、实施策略以防止资源滥用、提供 Web 界面用于集群监控、远程管理多个服务器上的 GPU 以及与 AI 助手集成。该工具支持 Linux、macOS 和 Windows 系统,并提供易于使用的命令行界面和 Web 仪表盘。

开发 GPU管理

极简C99 JSON解析库:零内存分配,仅150行代码

2025-09-21
极简C99 JSON解析库:零内存分配,仅150行代码

一个仅150行C99代码的微型JSON解析库闪亮登场!它采用零内存分配策略,状态极简,并提供包含行号和列号的错误信息。该库不包含数字和字符串解析功能,开发者需自行处理,例如使用`strtod`、`atoi`或Unicode代理对处理。示例代码展示了如何将JSON字符串解析到矩形结构体中。该项目开源且免费,采用公共领域许可证。

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

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

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

开发

微软的DXGI调试:我的游戏意外上了黑名单

2025-09-21
微软的DXGI调试:我的游戏意外上了黑名单

Space Station 14游戏开发者在将游戏移植到ARM64架构的Windows系统时遭遇了离奇的崩溃问题。调试过程中,开发者发现问题源于微软的DXGI模块中一个针对窗口化游戏的优化功能,该功能会强制启用“flip”模式,但在特定情况下(游戏名为SS14.Loader.exe)会导致与GetDC()函数相关的非法指令异常。最终发现,微软在ARM64平台上针对DXGI的此优化功能存在bug,并且该功能只在特定程序名称的游戏上启用,而Space Station 14意外地被包含在了这个名单中。开发者推测,由于ARM64平台原生游戏数量较少,此bug可能未被发现。目前,该开发者已将问题反馈给微软,并暂时推迟了Windows ARM64版本的发布。

Vec: C语言的高效动态数组

2025-09-21
Vec: C语言的高效动态数组

Vec是一个为C语言设计的通用型、快速、防泄漏的动态数组。它采用连续内存存储,几何级增长(×2),实现均摊O(1)的插入效率,并提供类似面向对象风格的API。Vec默认开启防御机制:分配前检查溢出,边界检查访问器,以及针对空/收缩/销毁的明确行为定义。其设计目标是兼顾性能和安全性,并提供简洁易用的接口。

开发

开源软件供应链安全:半个世纪的挑战与应对

2025-09-21

从1974年Honeywell Multics系统安全审查报告中关于“后门”的担忧,到2024年针对Debian系统的XZ攻击,开源软件供应链安全问题持续困扰着我们。本文探讨了这个问题的复杂性,它不仅仅是依赖关系图那么简单,还涉及软件构建、分发过程中的各个环节以及人员因素。文章提出了多种解决方案,包括软件认证、可复现构建、快速发现和修复漏洞,以及使用更安全的编程语言,并强调了开源项目资金支持的重要性,因为资金不足会导致项目被恶意控制。XZ攻击就是一个警示:看似简单的“免费帮助”可能隐藏着巨大的风险。

开发 XZ攻击

一位程序员的无奈:告别函数式编程

2025-09-21

一位程序员因为同事不理解其编写的函数式编程代码而被经理勒令禁止使用函数式编程。为了保住饭碗,他不得不放弃优雅的函数式风格,改用命令式编程来实现一个简单的功能:列出员工的同事。然而,即使努力避免函数式编程的特性,他也发现很难完全摆脱,最终还是在代码审查时遇到了新的挑战,不得不向经理求助。这个故事幽默地展现了职场中技术决策的无奈与程序员的困境。

开发

Bluefin LTS和GDX正式发布:开源AI工作站的崛起

2025-09-21
Bluefin LTS和GDX正式发布:开源AI工作站的崛起

经过九个月的开发,Bluefin LTS(长期支持版)和Bluefin GDX(AI工作站版)正式发布。Bluefin LTS基于CentOS Stream 10,提供稳定的GNOME 48桌面和长期支持,并可选配硬件启用分支(lts-hwe)以获得更新的内核。Bluefin GDX则面向AI/ML专业人士,集成Nvidia驱动和CUDA,并与Red Hat合作开发开源AI/ML工具。两个版本都拥有改进的安装体验和安全启动支持,旨在为用户提供更稳定、高效的桌面体验。

PostgreSQL 18 Beta: UUIDv7 的加持,数据库主键新选择

2025-09-21
PostgreSQL 18 Beta: UUIDv7 的加持,数据库主键新选择

PostgreSQL 18 Beta 版本发布,其中最受期待的功能之一是原生支持 UUIDv7。UUIDv7 是一种基于时间戳的 UUID 变体,它解决了传统 UUID 在数据库中排序和索引局部性问题。 它结合了全局唯一性和时间排序的优点,使其成为数据库主键的理想选择,特别是在需要高性能和可扩展性的分布式数据库环境中。PostgreSQL 18 还包含其他性能改进,例如异步 I/O 和索引优化。

开发

macOS APFS 磁盘修复工具的顽固Bug

2025-09-21
macOS APFS 磁盘修复工具的顽固Bug

macOS Monterey 12.0.1 的磁盘工具在修复 APFS 磁盘时仍然存在长期存在的卸载卷或容器失败问题。本文提供了解决方案,包括在恢复模式下使用磁盘工具,或直接使用命令行工具 `fsck_apfs` 来检查和修复 APFS 卷和容器。文章详细介绍了 `fsck_apfs` 的使用方法,包括检查和修复选项,以及如何处理加密卷。

模型校准:避免过度简化与数据稀疏性作斗争

2025-09-21
模型校准:避免过度简化与数据稀疏性作斗争

本文探讨了模型校准中常见问题:由于校准数据集远小于原始训练集,导致等距回归算法过度简化概率分布,损失模型的精细度。文章分析了这种“数据稀疏性导致的扁平化”现象,并提出了多种诊断方法来区分由噪声引起的合理简化和由数据限制引起的过度简化。最后,介绍了Calibre包,该包通过放松等距约束或使用平滑单调模型,在保持校准效果的同时,尽可能保留原始模型的区分能力。

AI 编码:专家增强剂,而非替代者

2025-09-21

AI在编码领域的应用远未达到取代程序员的地步,反而更像是资深程序员的效率增强工具。AI擅长处理样板代码、自动化重复性工作和快速迭代,但其在代码审查、架构设计、代码质量和安全方面存在不足。因此,当前更有效的组合是“资深程序员+AI”,而非最初设想的“初级程序员+AI”。AI的最佳应用场景在于快速原型设计、自动化日常任务、跨学科工作和简单的功能测试。虽然AI在编码领域潜力巨大,但目前仍需人工仔细检查其生成的代码,期望值应与现实相符。

开发

AI代码的“清洁工”经济崛起

2025-09-21

随着AI辅助编程的普及,“vibe coding”带来的代码混乱问题日益突出。AI生成的代码虽然高效,但常常缺乏架构性、安全性,以及系统上下文理解,导致大量的代码重构需求。一个新的职业应运而生——AI代码清洁工,他们专门修复AI生成的低质量代码,并因此获得高额报酬。市场调研显示,大部分企业软件工程师将在2028年使用AI代码助手,这预示着AI代码清理市场将迎来巨大发展机遇。未来,软件开发将变成AI负责初始实现,人类负责架构、测试和清理的模式,而精通AI代码清理的工程师将成为炙手可热的人才。

开发

基于GPU的并行化RNN:minGRU和minLSTM的CUDA实现

2025-09-21

这篇博文描述了一个加州理工学院CS179课程的最终项目,该项目旨在验证Feng等人在论文“Were RNNs All We Needed?”中提出的观点:通过简化LSTM和GRU,其递归可以利用并行扫描算法进行加速。作者实现了简化的minGRU和minLSTM模型,并使用CUDA实现了并行扫描算法。实验结果表明,对于长序列,GPU实现比CPU实现快得多,验证了论文的结论。然而,对于短序列,CUDA核函数的启动开销抵消了部分性能提升。项目还对GPU内核进行了性能分析,发现最终的投影层是主要的瓶颈。

开发

静态类型游戏脚本语言中的异构数据处理难题

2025-09-21

作者在开发一款静态类型游戏脚本语言时,遇到了处理异构数据的难题。文章探讨了多种编程语言中解决此问题的方案,包括null、变体类型、未标记联合、和类型、子类型等。作者最终选择了一种类似Pascal变体记录的方案,在简洁的语法和运行时类型检查之间取得平衡,避免了复杂的流程类型系统,使得语言更易于理解和使用。这是一种在静态类型安全和易用性之间权衡的巧妙设计,为游戏开发提供了更便捷的脚本语言方案。

开发

过度工程的边缘案例库:npm 包的膨胀问题

2025-09-21

本文探讨了 npm 生态系统中过度工程的库泛滥的问题。许多库优先处理极少遇到的边缘情况,导致依赖树过于庞大,例如 `is-number` 库处理各种类型的数字输入,而实际应用中只需处理 `number` 类型即可。作者建议库应该专注于常见用例,并对输入类型做出合理的假设,将边缘情况的处理留给需要它们的项目。这不仅可以简化代码,还能提高性能,减少不必要的依赖。

开发

高效扩充语言词汇的算法难题

2025-09-21

学习一门外语,高效扩充词汇量至关重要。本文探讨了如何选择书籍以最大化词汇学习效率的问题。单本书籍选择相对简单,但选择多本书籍以覆盖更多词汇则变成了一个NP难问题,这意味着精确求解的计算时间会随着书籍数量呈指数增长。幸运的是,这个问题属于子模问题,可以使用近似算法在一定精度范围内找到较优解。文章介绍了贪婪算法及其改进方法,并推荐了高效的Python库submodlib。

开发 词汇学习

一位微软员工与Raymond Chen的传奇故事:预处理器与BitLocker错误信息

2025-09-21
一位微软员工与Raymond Chen的传奇故事:预处理器与BitLocker错误信息

2009年,一位年轻的微软BitLocker开发者为了改进BitLocker的错误信息,寻求在.mc文件中引用C++常量值的方法。他向公司内部邮件列表求助,收到了Raymond Chen简短但有效的回复:使用预处理器。然而,由于害怕破坏复杂的Windows构建系统,这位开发者最终放弃了这个方法。多年后,他回想起这段经历,感慨于微软内部工具的不足,以及自己对复杂构建系统的回避。

开发 Raymond Chen

Bazel缓存、远程执行和glibc版本不兼容导致生产环境崩溃

2025-09-21
Bazel缓存、远程执行和glibc版本不兼容导致生产环境崩溃

本文讲述了一个由于Bazel缓存、远程执行和不同环境中glibc版本差异导致生产环境崩溃的案例。开发人员在本地构建和测试通过后,CI系统利用缓存构建发布版本,但在生产环境部署时却因缺少'GLIBC_2.28'版本而崩溃。文章分析了glibc版本差异如何破坏构建可重复性,并提出了几种解决方案:一种临时方案是捕获本地和远程glibc版本,选择较高版本作为C++工具链输入;更完善的方案是限制对Action缓存的写入,强制构建操作始终在远程执行器上运行;最终的解决方案是使用sysroots,在所有环境中安装多个glibc版本,并明确指定使用哪个版本。文章强调了保证构建可重复性的重要性,并建议根据实际情况选择合适的解决方案。

开发

从单核到多核:macOS 并行处理的演进史

2025-09-20
从单核到多核:macOS 并行处理的演进史

1984年的初代Mac仅配有一个8MHz的摩托罗拉68000处理器,一次只能运行一个应用程序。如今,Mac拥有多核心CPU,轻松运行多个大型应用程序,同时还能进行Time Machine备份和其他后台任务。这篇文章回顾了macOS并行处理能力的演进历程,从最初的单任务处理,到Switcher、MultiFinder的出现,再到Mac OS X引入的抢占式多任务处理和多线程技术,以及Grand Central Dispatch(GCD)的优化,最终实现了对多达32个CPU核心的高效利用。这展现了苹果在提升macOS性能方面持续的努力和创新。

用Haskell解开25块木块难题:第一部分

2025-09-20

作者收到一个由25块相同木块组成的复杂3D拼图,尝试后发现难以解决,于是决定借助Haskell编程语言的力量。本文是两篇系列文章中的第一篇,主要介绍了问题的建模过程。作者将空间建模成一个三维网格,用向量表示位置,并定义了表示单个木块及其在空间中摆放方式的的数据结构。文章详细描述了如何使用线性代数和Haskell的特性来表示木块的旋转和平移,并生成所有可能的摆放方式的候选列表。最终,文章留下了一个悬念,如何在众多候选方案中找到正确的解法,并将这个问题留到第二部分解决。

开发 3D拼图

Linux内核性能优化:可重启序列的改进

2025-09-20

Linux内核中的可重启序列功能旨在提升多线程应用的性能,但其使用一直比较小众。随着该功能与内核新特性结合,其应用范围日益扩大,也暴露出一些问题。最近,开发者Thomas Gleixner对可重启序列代码进行了改进,解决了性能瓶颈和一些历史遗留问题,提高了效率。部分改进可能导致用户空间的ABI变化,需要进一步测试以确保兼容性。

Azure LLM模型质量下降之谜

2025-09-20
Azure LLM模型质量下降之谜

一位开发者在使用Azure的LLM和音频模型构建产品时,发现同一模型在数月内性能持续下降,准确性越来越差。即使使用相同的系统提示和消息,GPT-4o-mini和GPT-5-mini/nano模型的响应也越来越不准确,GPT-5甚至比GPT-4o-mini更慢。开发者怀疑微软为了推广新模型而故意降低旧模型的质量,这种策略损害了用户体验,并可能导致开发者转向其他平台。

开发

大量NPM包被移除:开发者需注意

2025-09-20
大量NPM包被移除:开发者需注意

近日,大量npm包被从npm仓库移除,涉及React、Angular、NativeScript等多个框架的组件和工具。受影响的包数量众多,其中一些包已被移除,另一些则版本被修复。此事件提醒开发者注意依赖包的维护和安全性,建议及时检查项目依赖并采取相应措施,避免项目受到影响。这可能是由于安全问题、维护问题或其他原因导致的。

开发 包移除

别再用GitHub托管你的开源项目了!

2025-09-20

本文揭露了GitHub(微软旗下)的诸多问题:作为专有平台,它限制用户控制,依赖中心化模型,并通过遥测数据追踪用户行为;其功能如GitHub Actions、Copilot和Codespaces也造成了供应商锁定。更严重的是,微软与美国政府及以色列军方的合作,使其卷入争议项目,例如为ICE提供云服务和为以色列军队提供AI技术,引发了内部员工抗议。作者呼吁开源项目迁移至自托管方案,例如Forgejo或Sourcehut,以维护开源精神和独立性。

开发

C++安全子集提案被弃:内存安全之争再起

2025-09-20
C++安全子集提案被弃:内存安全之争再起

C++标准委员会放弃了一个创建严格安全子集的详细提案,尽管对内存安全性的担忧持续存在。该提案的共同作者Sean Baxter表示,委员会不支持Rust的安全模型,更倾向于“Profiles”方案。Profiles方案虽然得到Bjarne Stroustrup等人的支持,但其可行性也受到质疑,甚至可能无法在C++26中实现。 这一决定引发争议,一些开发者认为转向Rust或其他更安全的语言(如Google的Carbon)可能是更好的选择。

开发

Systemd 服务单元限制导致守护进程启动失败

2025-09-20

Linux系统管理员常遇到守护进程在正常系统配置下无法启动,但手动以root身份运行却能正常工作的问题。传统原因包括环境变量$PATH设置不完整以及SELinux或AppArmor限制。如今,systemd服务单元限制成为越来越普遍的原因,它会在systemd.exec中设置各种保护指令,例如ProtectHome和PrivateTmp,导致权限被拒或文件找不到等错误,甚至可能导致间接的故障,例如阻止DNS查询。解决方法是移除systemd服务文件中的限制进行测试,但未来一些守护进程可能依赖这些限制,增加调试难度。

开发 守护进程

系统调用:比你想象中更昂贵

2025-09-20
系统调用:比你想象中更昂贵

本文深入探讨了Linux系统调用背后的性能开销,它不仅仅是简单的内核函数调用。系统调用会中断CPU的微架构优化,例如指令流水线和分支预测,导致性能损失远大于代码层面体现的开销。文章分析了内核代码,解释了各种软件和硬件层面缓解措施对性能的影响,并提出了多种优化策略,例如使用vDSO,缓存值,优化I/O,批量操作以及将工作推入内核等,以减少系统调用的次数,从而提升软件性能。

开发

超高速贝塞尔曲线缓动函数库:C++实现

2025-09-20

本文介绍了一个用C++20编写的单头文件库,它将三次贝塞尔曲线直接表示为缓动函数,从而提高动画性能。该库通过`EasingCubicBezier`模板类实现,支持PRECISE(高精度)和FAST(高性能)两种模式。性能测试表明,该方法比Blender算法以及基于牛顿-拉夫森法的数值解法速度更快,稳定性更高,特别是在实时动画系统中具有显著优势,因为它避免了运行时求解三次多项式方程的开销。

开发

GitHub Actions 将弃用 Node.js 20,迁移至 Node.js 24

2025-09-20
GitHub Actions 将弃用 Node.js 20,迁移至 Node.js 24

GitHub Actions 宣布将于2026年4月停止支持 Node.js 20,并计划在2025年秋季将所有 Actions 迁移到 Node.js 24。目前最新的 GitHub runner 版本已支持 Node.js 24,用户可以通过设置环境变量提前测试。从2026年3月4日开始,Node.js 24 将成为默认版本,但用户可以通过设置环境变量临时继续使用 Node.js 20,直到夏季该版本完全移除。需要注意的是,Node.js 24 不兼容 macOS 13.4 及以下版本,也不支持 ARM32 架构的 self-hosted runners。

开发
1 2 4 6 7 8 9 213 214