arXivLabs:与社区协作的实验性项目
arXivLabs是一个允许协作者直接在arXiv网站上开发和分享新功能的框架。参与arXivLabs的个人和组织都秉持着开放、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,并且只与遵守这些价值观的合作伙伴合作。如果你有想法可以为arXiv社区增值,那就了解更多关于arXivLabs的信息吧!
arXivLabs是一个允许协作者直接在arXiv网站上开发和分享新功能的框架。参与arXivLabs的个人和组织都秉持着开放、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,并且只与遵守这些价值观的合作伙伴合作。如果你有想法可以为arXiv社区增值,那就了解更多关于arXivLabs的信息吧!
计算机架构领域长期存在关于如何计算平均性能的争论。Hennessey和Patterson的经典著作提倡使用几何平均数,因为它具有重要的数学特性。然而,一篇新的论文质疑几何平均数的物理意义,建议使用“等时调和平均速度提升”代替。作者认为,等时调和平均数更能反映实际情况,因为它等同于顺序运行所有工作负载时的总速度提升。但作者忽略了实际应用中工作负载的时间分布并不均匀,因此其物理意义并不总是相关。文章最终认为,除非知道具体的工作负载组合和权重,否则任何单一数字的平均性能都无法完美比较机器,几何平均数由于其易于比较和普遍接受而仍然是一个不错的选择。
一位程序员分享了他内心的挣扎:天使鼓励他为乐趣而编程,魔鬼则怂恿他追求财富和成功。从孩童时期对电脑游戏的热爱到大学学位,他的编程之路始终伴随着学习和探索的乐趣。然而,受到“努力致富”观念的影响,他时常被创业的诱惑所吸引,在“兴趣”与“盈利”之间难以抉择。最终,他意识到平衡两者,避免倦怠,并根据自身情况选择何时倾听“魔鬼”的建议,才是可持续发展的关键。
arXivLabs是一个允许协作者直接在arXiv网站上开发和共享新功能的框架。参与arXivLabs的个人和组织都秉持着开放、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,并且只与遵守这些价值观的合作伙伴合作。如果你有想法可以为arXiv社区增值,请了解更多关于arXivLabs的信息。
一个复古计算项目在 NetBSD 内核中恢复了对 x87 浮点单元 (FPU) 模拟的支持,目标是那些没有硬件 FPU 的旧 486SX 处理器。该项目将原来的 MATH_EMULATE 选项带回了 NetBSD 10.x 及更高版本,并撤销并重做了提交 dfe83e0 中引入的更改(该更改从内核中删除了 FPU 模拟支持)。该项目目前仍在开发中,可能包含错误或功能不完整。 该项目实现了许多x87指令的模拟,但部分指令如`fyl2xp1`、`fxtract`、`fpatan`和`fsqrt`尚不支持。用户需自行编译内核,并承担使用风险。
本文批判了AI代码生成工具的局限性。作者认为,AI生成的代码虽然看起来像那么回事,但实际上充满了隐患。AI仅仅是基于模式预测生成代码,缺乏真正的工程思维和对运行环境的理解,导致生成的代码难以理解、难以调试,且缺乏可复用性。相比之下,模块化编程、参考优秀开源项目和文档等方式,更有助于编写高质量的代码。最终,作者指出软件工程的核心在于思考和理解,而非单纯的代码编写。
一名安全研究员发现了一个iOS系统中的严重漏洞,该漏洞允许恶意应用通过发送Darwin通知来实现拒绝服务攻击,甚至导致系统重启。攻击者无需特殊权限即可发送这些通知,利用了Darwin通知机制中缺乏发送者验证的缺陷。研究人员创建了一个名为“VeryEvilNotify”的应用,成功触发了“正在恢复”界面,导致设备无限重启。苹果已在iOS 18.3中通过引入新的权限限制机制修复了该漏洞。
OpenBSD 7.7 的安装方式取决于你的硬件架构。本文简要概述了不同架构(amd64、arm64、i386 等)的安装方法,包括从 CD、USB 或网络安装。对于双系统安装,请参考对应的 INSTALL.* 文件。此外,文档还简述了 OpenBSD 的 ports 系统,建议新手查阅相关文档。
Logchef是一个轻量级、高性能的日志分析平台,它使用ClickHouse作为后端数据库,以单二进制文件运行,提供直观的界面用于探索日志数据。它支持无模式日志探索、灵活的查询选项(包括简单的搜索语法和完整的ClickHouse SQL)、高性能查询以及基于团队的访问控制。只需一个Docker Compose命令即可快速部署,非常适合开发团队寻找一个强大且可扩展的日志管理解决方案。
本文探讨了在公司绩效评估中发生的“语境坍塌”现象,即不同部门经理对工程师的同一项工作理解和评价存在巨大差异,导致评估结果不公正,优秀工程师被低估。文章分析了导致这种现象的多种因素,包括领域盲点、技术偏见、可见性偏差、经理的游说能力、固有偏见、评分标准不一致、时间限制以及对成长和影响的重视程度不同等。文章还提出了一些解决方法,例如进行领域相关的绩效评估、进行跨部门预评估、让工程师参与绩效总结、使用标准化模板、设立专门的表彰类别、持续进行绩效评估等。最终,文章呼吁重新思考绩效评估体系的设计,建立一个更加公正、全面、能够反映工程师实际贡献的绩效评估体系,避免人才流失。
Ruby 的 Ractor 并行模型因全局锁而性能受限。文章作者深入探讨了 `object_id` 方法的性能瓶颈,该方法因历史原因及垃圾回收机制的改进而导致锁竞争。作者通过优化 `object_id` 的实现,将其从全局哈希表查找改为在对象内直接存储,显著提升了 Ractor 的性能,尤其是在 JSON 性能测试中,Ractor 版本速度提升了两倍。虽然仍存在一些挑战,如对特殊对象类型的处理,但这项工作为 Ractor 的并行化进程迈出了关键一步。
snapDOM是一款高保真DOM截图工具,由Zumly(一个用于创建流畅缩放视图过渡的框架)的动画引擎开发团队打造。它能将任何HTML元素转换为可缩放的SVG图像,完美保留样式、字体、背景、Shadow DOM内容、伪元素等。与其他流行库相比,snapDOM在处理大型或复杂DOM结构时速度显著提升,尤其在大型页面截图方面优势明显。它支持多种导出格式(SVG、PNG、JPG、WebP、canvas),并具有轻量级、无依赖性等特点,使用方便快捷,是捕捉全页面视图、模态窗口以及包含自定义字体、背景或Shadow DOM的复杂布局的理想选择。
Wii自制软件Homebrew Channel的源码库已归档,不再接受贡献。原因是其依赖的libogc库存在严重的版权问题:该库的核心部分代码涉嫌盗窃自Nintendo SDK和开源RTOS RTEMS,开发者拒绝解决该问题。这揭露了Wii自制软件社区长期以来存在的版权侵权问题,引发了对软件开发道德的反思。该项目源码现已公开发布,但开发者声明其无法保证其合法性,且只在Dolphin模拟器下测试过。
OpenBenches 数据库包含近 40,000 个长椅的经纬度信息,但如何将其转换成人类可读的地址是一个挑战。许多长椅位于公园等缺乏正式地址的地方,现有地理编码服务提供的地址信息过长或不相关。作者尝试利用多个API,并结合POI(兴趣点)信息,自动生成更简洁易懂的地址,但面临着语言、地址格式以及POI位置准确性等问题。如何平衡地址精度和易用性,并兼顾国际化,成为OpenBenches面临的难题。
Alisp是一个由一人开发的开源Lisp解释器项目,目标是实现Common Lisp标准。目前已完成大部分Common Lisp功能,并包含调试器和性能分析器等实用工具。作者使用C89编写,并采用GPL v3开源许可证。项目代码托管在Savannah,欢迎提交bug报告和建议,但暂不接受代码补丁。
本文讲述了一个使用 Rails 构建多租户应用的经验,每个租户拥有独立的 SQLite 数据库。作者起初使用传统的数据库连接管理方式,导致应用在高负载下出现连接错误。经过一番探索,作者最终采用 Rails 6+ 的 `connected_to` 方法结合自定义中间件,实现了安全高效的租户数据库切换,巧妙解决了多线程和连接池管理的难题,并分享了处理 Rack 流式响应体的技巧。这篇文章对于构建高性能、可扩展的多租户应用具有重要的参考价值。
你相信吗?从C++模板到魔法:聚会卡牌游戏,甚至连PowerPoint都能实现图灵完备!这篇文章列举了一系列令人意想不到的事物,它们竟然拥有模拟任何算法的能力。这些例子涵盖了编程语言、硬件指令集、游戏规则、甚至图像压缩技术,充分展现了图灵完备性的广泛存在,以及其在不同领域中的奇特应用。其中一些应用甚至利用了系统中的漏洞或缺陷,从而实现了意想不到的计算能力。
Elm语言的编译器提示功能,虽然鲜为人知,却是保持代码可维护性的核心。它会在代码变更可能导致其他代码需要同时修改时,抛出编译错误,提醒开发者进行必要的调整。文章以一个简单的计数器例子,演示了如何通过遵循编译器提示,逐步完善代码,最终实现“代码编译通过即工作正常”的效果。这种“跟随编译器”的开发方式,以及类型检查和穷举性检查,极大地提升了代码的可维护性。文章还扩展讨论了其他类型的提示,例如linter提示,以及如何通过自定义规则创建特定场景下的提示,最终强调了在高度可维护的代码库中,充分利用各种提示机制的重要性。
Linux内核开发者Linus Torvalds近日在邮件列表中痛批文件系统中大小写不敏感功能的实现。他认为这种功能从根本上就是错误的,并列举了大量由于实现不当导致的安全隐患。他指出,许多程序依赖于文件名的大小写敏感性进行安全检查,而大小写不敏感功能的错误实现可能绕过这些检查,造成严重的安全漏洞。他呼吁文件系统开发者放弃这种错误的功能,并强调大小写敏感性才是正确的选择。
9front操作系统发布了11091版本,该版本带来了大量更新,包括:改进的快照调度程序、新的Intel i225 2.5 GbE驱动程序、对AMD Ryzen的CPU温度支持、libc的Unicode 16.0规范化接口以及对多个架构(包括x86, amd64, arm64)的支持。此外,还包含对编译器、库和程序的诸多改进,例如AWK支持新的rc-quote格式,以及对各种程序的错误修复和性能优化。该版本提供了多种安装介质,方便用户在PC、树莓派、MNT Reform和QEMU上安装。
在 Oracle 工作四年后,作者面临失业,寻求新的职业发展道路。他拥有丰富的经验,擅长 Ruby/JavaScript 编程、产品文档撰写和开发者关系维护。目前他正积极寻找工作机会,同时提供效率咨询服务,特别是 Mac/Unix 自动化方面,并计划重新开放博客赞助。他拥有忠实的读者和良好的 Google 排名,希望利用自身技能和资源,找到理想的工作或咨询项目。
learn-c.org上线了一个免费的交互式C语言教程,无论你是编程新手还是老手,都可以在这里学习C语言。无需下载任何东西,只需点击章节即可开始学习。网站仍在建设中,欢迎贡献教程。
本文回顾了 Dolt 数据库在采用 go-mysql-server 五周年之际,其 SQL 引擎的工作原理。文章详细阐述了从 SQL 查询解析到结果输出的整个过程,包括解析、绑定、计划简化、连接探索、计划成本计算和执行等步骤。Dolt 使用左递归解析器和自底向上的动态规划策略来优化查询计划,并利用代价模型选择最佳执行方案。文章还讨论了内存管理和未来的优化方向,例如统一中间表示和减少内存抖动。
Go语言缺乏原生枚举支持?GoEnums来拯救你!它能从简单的常量声明生成全面、类型安全的枚举实现。只需一行命令,即可将简单的iota常量转换为功能丰富的枚举,支持字符串转换、验证、JSON处理、数据库集成等。GoEnums还支持自定义字段、大小写不敏感解析等高级特性,并提供详尽的文档和示例。告别枚举的繁琐编写,拥抱GoEnums带来的高效和优雅!
本文介绍了如何在裸机RISC-V系统上利用Newlib构建紧凑型C标准库。作者通过实现UART基本函数,并将其传递给Newlib,最终实现了printf功能。文章详细解释了Newlib的概念、交叉编译工具链的设置,以及UART驱动、系统调用和链接脚本的编写。最后,作者演示了如何在QEMU上运行该应用程序,并分析了调试日志。这是一个关于嵌入式系统开发的实用教程,展示了如何在资源受限的环境中使用C标准库。
HTTP Feeds 是一种轻量级的规范,使用简单的 HTTP API 实现异步事件流和数据复制。它通过轮询 HTTP GET 端点来获取按时间顺序排列的事件,这些事件以 CloudEvents 事件格式序列化,并批量返回。它支持 `lastEventId` 参数以实现无限轮询,并可用于替代 Kafka 或 RabbitMQ 等消息代理。此外,它还支持长轮询以降低延迟,并提供数据压缩和删除功能,以保持 Feed 的精简高效。
厌倦了 JSON、YAML 和 TOML 的复杂性?一位软件工程师创建了 CONL,一种极简的配置文件格式,其目标是成为配置文件的“Markdown”。CONL 易于阅读和编辑,具有类似 JSON 的数据模型,并易于实现。它支持多种数据类型,包括标量、列表和映射,并具有对多行字符串的良好支持。该作者还提供了 Rust 和 Go 的实现以及语言服务器和 Zed 扩展。
Rocal UI 是一个基于 Rust 的简洁模板引擎,它不仅可以与 Rocal 框架一起使用来创建视图,还可以在任何 Rust 项目中使用。其语法简洁易懂,支持变量嵌入、if-else 控制流和 for 循环,并能将 view!{} 宏生成的 HTML 字符串嵌套使用,如同使用部分模板一样。通过简单的 `cargo install rocal --features="cli"` 和 `rocal new -n yourapp` 命令即可快速上手。
Tilt 是一款用于简化 Kubernetes 微服务开发的工具。它自动化了从代码更改到新进程的所有步骤,包括文件监视、容器镜像构建和环境更新,让你告别繁琐的 `docker build && kubectl apply` 命令。Tilt 提供了丰富的教程和指南,支持多种编程语言,并拥有活跃的社区和完善的文档。即使是 Kubernetes 新手,也能快速上手,提升开发效率。
一个流传已久的程序员调试技巧——“橡皮鸭调试”的起源并非如人们想象的那般清晰。文章追溯了这个技巧的来源,从作者最初模糊的Bell Labs或Xerox PARC版本,到最终确认其在Pixar团队中得到广泛应用。故事中,程序员将问题解释给“橡皮鸭”(实际上是同事),在解释过程中找到解决方案。这并非简单的向同事求助,而是利用讲解过程来理清思路。虽然Xerox PARC可能是其发源地,但确切的起源仍然是一个谜,等待着进一步的挖掘。