Linux vs. OpenBSD: 一个简单的套接字测试引发的性能差异
一个简单的C程序,创建线程并打开256个套接字,在Linux和OpenBSD系统上展现出惊人的性能差异。在Linux上,运行时间在17到26毫秒之间波动;而在OpenBSD上,运行时间却低至2到6毫秒。更令人惊讶的是,OpenBSD在初始测试中甚至因为“太多打开的文件”而报错,这暗示了系统资源管理方面的差异。文章作者表示,这与网络代码无关,并期待找到一个Linux系统能够在该测试中胜过OpenBSD。
一个简单的C程序,创建线程并打开256个套接字,在Linux和OpenBSD系统上展现出惊人的性能差异。在Linux上,运行时间在17到26毫秒之间波动;而在OpenBSD上,运行时间却低至2到6毫秒。更令人惊讶的是,OpenBSD在初始测试中甚至因为“太多打开的文件”而报错,这暗示了系统资源管理方面的差异。文章作者表示,这与网络代码无关,并期待找到一个Linux系统能够在该测试中胜过OpenBSD。
一位iOS开发者因PureGym健身房APP糟糕的用户体验(每次签到需要47秒!)而苦不堪言。他发现健身房的API安全漏洞百出,8年不变的PIN码竟然比每分钟更新的二维码更安全。于是,他利用mitmproxy抓包分析,并结合PassKit开发了一个Apple Wallet通行证,将签到时间缩短到3秒。文章详细讲述了整个过程,包括逆向工程、证书签发、Swift后端开发等,最终实现了在Apple Watch上3秒签到的目标,并附带了Home Assistant集成功能。这是一个充满幽默和技术细节的个人项目,也反映了用户体验的重要性。
长期以来,大型文件一直是 Git 的痛点。Git LFS 作为一种解决方案,却带来了新的复杂性和成本。然而,Git 本身正在逐步解决这个问题。最新的 Git 版本引入了部分克隆功能,它与 Git LFS 提供相同的好处,例如快速克隆和小型检出,但无需额外的工具或服务器端成本。更令人兴奋的是,Git 的大型对象承诺者功能正在开发中,未来有望彻底取代 Git LFS,让大型文件管理更加便捷高效,无需再为大型文件而烦恼。
作者學習日語時,先背誦漢字的意義和寫法,後來才學習發音,取得了巨大成功。然而,多年後,他卻發現自己忘記了如何手寫大多數漢字。這種現象在日本和中國很普遍,甚至有專門的術語「ワープロ馬鹿」(word-processor idiot)。作者探討了大腦處理閱讀和書寫的兩種不同途徑,並結合自身患有「影像思維缺失症」(aphantasia)的經歷,分析了這種「漢字失寫症」背後的認知科學機制,認為這與大腦的「逐字記憶」和「概要記憶」兩種機制有關。
作者通过多年软件工程师面试经验,指出优秀工程师的关键在于构建和维护清晰的思维模型。虽然大型语言模型(LLM)能编写代码并进行修改,但它们无法像人类一样维护清晰的思维模型,容易混淆上下文、出现偏差和幻觉,导致无法迭代解决复杂问题。作者认为,LLM目前更适合作为辅助工具,而非取代软件工程师。
浏览器内置的XSLT处理器(版本1.0,标准化于1999年)已过时,且存在安全风险。现代web开发已转向JavaScript和JSON等技术,XSLT的使用率大幅下降。维护老旧的XSLT库(如Chromium中的libxslt)耗费大量资源,却容易遭受内存安全漏洞攻击,带来安全隐患。建议弃用浏览器中的XSLT标准,以降低安全风险并优化资源分配,不会对开发者造成实际影响。
本文作者通过模拟和可视化的方法,深入探索了中心极限定理(CLT)。文章首先回顾了CLT的基本概念和假设,然后通过R语言模拟了从不同分布(均匀、正态、二项、β、指数、χ²)中抽取样本,并计算样本均值。结果显示,随着样本数量的增加,样本均值的分布逐渐逼近正态分布,验证了CLT。文章还探讨了在实际应用中,由于样本量有限和总体方差未知,使用t分布而非正态分布进行置信区间计算的必要性,并通过模拟比较了不同样本量下置信区间覆盖率的差异。最后,文章通过动画展示了不同分布的样本均值分布随着样本量增加而趋于正态分布的过程。
许多游戏在 MacBook 带刘海的屏幕上渲染错误。这是因为游戏获取屏幕分辨率的方式(CGDisplayCopyAllDisplayModes)返回包含刘海区域在内的分辨率,导致游戏画面被压缩变形。文章分析了屏幕不同区域(完整屏幕、安全区域、AppKit 全屏区域)的区别,并提供了一种筛选分辨率的解决方案,但最终指出问题根源在于 Apple 的 API 设计。文章还列举了受影响的游戏和 Apple 可以采取的改进措施,例如更新 HIG、改进 CGDisplayMode 或创建新的游戏专用 API。
一款名为“What the Fork”的跨平台工具可以可视化任何构建系统的构建过程,帮助开发者识别并解决构建瓶颈。它通过监控系统调用来追踪进程的启动和终止,生成包含进程时间线、命令和参数等信息的交互式可视化界面。文章作者通过多个项目的构建过程示例展示了该工具的强大功能,例如识别缺乏并行性、冗余操作等问题,从而帮助开发者优化构建效率,特别是在CI构建中效果显著。
厌倦了Linux终端里Ctrl+Shift+C/V的复制粘贴?好消息!到2025年底,大部分Linux应用将原生支持古老的“复制”和“粘贴”按键码。这得益于可编程键盘的兴起和GTK、QT等软件工具包对这些按键码的支持。一些终端模拟器如Alacritty、Foot和Wezterm已经支持,而Gnome Terminal和Konsole预计在年底更新后也将支持。这将彻底改变Linux用户的复制粘贴体验,让操作更便捷高效。
Ghostty 终端模拟器的 GTK 版本进行了全面重写,这次重写完全拥抱了 Zig 的 GObject 类型系统,并使用 Valgrind 进行了全面的内存检查。这带来了更丰富的功能、更高的稳定性和更好的可维护性。重写过程中,成功地解决了之前由于避开 GObject 类型系统而导致的内存管理问题,并通过使用 GObject 的属性变化通知系统简化了配置重载等任务。Valgrind 检查发现了少量内存问题,大部分与 C API 交互相关,这证明了 Zig 的内存安全特性在大型复杂项目中的有效性。
EmbedPDF 是一款框架无关的 MIT 许可的开源 JavaScript PDF 阅读器,可轻松集成到任何 JavaScript 项目中,无论是 React、Vue、Svelte、Preact 还是原生 JS。它提供流畅的现代阅读体验和简洁的开发者 API,支持注释(高亮、粘性便签、自由文本、墨水)、真正的内容移除、搜索、文本选择、缩放、旋转以及虚拟滚动等功能。此外,它还具有可扩展的架构和可 tree-shaking 的插件。项目已开源,欢迎贡献!
本文讲述了作者如何结合使用 Jujutsu 和 Radicle 来实现近乎无分支的版本控制工作流。Jujutsu 作为一个在 Git 之上的透明层,使用 change ID 来管理变更,简化了 Git 的复杂操作,如 rebase 和 squash。Radicle 则利用 Git 的存储和协议,提供安全可靠的代码协作平台。作者详细介绍了其 `.git/config` 和 `.jj/config` 配置,以及如何使用 `jj new`, `jj edit`, `jj squash`, `jj rebase` 等命令来创建、编辑、合并和重排变更,并通过 Radicle 的 patch 机制实现高效的代码贡献和维护,最终摆脱了繁琐的分支管理,提升了开发效率。
谷歌工程师数年来致力于为Linux内核开发地址空间隔离(ASI)技术,以应对不断增长的CPU推测性执行漏洞。早期,ASI导致I/O吞吐量下降70%,阻碍了其发展。如今,I/O开销已降至13%。谷歌工程师Brendan Jackman重新启动了ASI的Linux内核集成工作,并提出了解决页面缓存性能问题的方案。虽然仍存在一些性能瓶颈,例如上下文切换和页面复制等,但目前的进展已显著改善,为ASI成为主流CPU漏洞解决方案带来了希望。
Org-social是一个基于Org模式文件的去中心化社交网络,它通过HTTP协议运行。用户只需创建一个名为social.org的Org模式文件,添加个人信息和博文,然后上传到Web服务器即可。它简单易用,无需注册和数据库,充分利用Org模式的特性,支持回复、提及用户、创建投票等功能,并兼容各种文本编辑器。其核心价值在于简单性、易访问性、去中心化和对Org模式理念的遵循。
Arch Linux的ArchWiki以其高质量文档闻名Linux社区。DebConf25上,ArchWiki维护者分享了其成功的经验,包括内容策略、贡献指南和社区管理。ArchWiki使用MediaWiki,其优势在于全面、高质量和最新的内容,但同时也面临着MediaWiki标记语言复杂、贡献门槛高等挑战。未来,ArchWiki计划改进社区参与、开发更多编辑工具,并谨慎利用AI技术,以应对AI生成内容和爬虫带来的威胁。此次分享也激励了Debian项目对其维基进行改版,采用了MediaWiki。
作者曾梦想在iPhone上单手编程,如今借助三款应用实现了这个目标。他放弃了Pythonista,转而使用Secure Shellfish(带离线文件夹同步功能)、Textastic(代码编辑器)和Working Copy(Git客户端)组合,在VPS上运行代码。这套方案虽然成本较高(约57欧元一次性购买+VPS月费),但让他摆脱了社交媒体的诱惑,专注于编码,享受单手编程的乐趣。
作者在过去500天里坚持使用Math Academy进行每日数学练习,并分享了他的经验。起初是为了学习AI相关的数学知识,他发现自己数学基础薄弱,甚至从最低级别课程开始学习。通过坚持不懈的努力和一些策略调整(例如,每天固定时间学习、利用碎片时间、公开分享学习进度等),他完成了多个基础课程,并正在学习微积分和线性代数等更高级的知识。这个过程不仅提升了他的数学能力,也培养了他的学习习惯和毅力,甚至影响到了他生活的其他方面。
Debian 13发布了!这篇文章提供了一些技巧,帮助你充分利用新的Debian桌面系统。文章涵盖了启用额外软件仓库(包括非自由软件)、配置PATH环境变量以方便使用系统命令、加入系统用户组以简化管理、使用Cloudflare DNS加速网络浏览、切换到本地镜像加速软件包下载、启用Snap和Flatpak以访问更多软件、安装GNOME软件中心以及使用Synaptic管理软件包等方面。通过这些步骤,你可以显著提升Debian系统的易用性和效率。
Debian 13 “Trixie”正式发布,带来了众多改进。最显著的变化是放弃对32位x86架构的支持,转而支持RISC-V架构,并升级至Linux内核6.12。此外,Trixie更新了编程语言版本(Python 3.13、PHP 8.4等),改进软件包管理工具Apt,增强了安全性(支持CET、PAC、BTI等),并提升了GNOME和KDE桌面环境的性能和用户体验。虽然Go和Rust生态系统的安全支持有限,但整体而言,Trixie是一个稳定、安全且功能强大的发行版。
本文介绍了如何使用有限状态机(FSM)作为数据结构来表示有序集合和映射,并展示了如何利用Rust的fst库构建高效的索引。文章深入探讨了FSM的构建过程,包括Trie和FSA的构造,以及如何处理大量数据(例如,对来自2015年7月公共爬取存档的16亿个URL进行索引)。此外,文章还介绍了内存映射、与正则表达式的自动机交集、基于Levenshtein距离的模糊搜索以及流式集合操作等技术。
一款名为“隐私基础设施”的全新工具包,旨在解决智能眼镜应用中日益严重的隐私问题。该工具包通过在相机和应用之间插入一个实时隐私过滤器,自动确保合规性。它能够匿名化非同意者的面部信息(可配置模糊或实心椭圆遮罩),管理同意(例如,检测“我同意被拍摄”等语音同意并记住它),并以720p 30fps的速率进行实时处理。整个过程完全离线,不依赖云端。该工具包使用FFmpeg、OpenCV、Faster Whisper和Phi-3.5 Mini等技术构建,并提供易于使用的相机替换、RTMP输入/多种输出格式以及HTTP API控制等功能,适用于各种基于相机的应用,例如AI助手、社交应用和企业级应用等。
一位资深程序员兼作家,在AI技术飞速发展的背景下,面临着职业身份的巨大挑战。他擅长清晰地解释技术概念,其著作获得了众多好评。然而,AI的兴起使得他赖以生存的技能——技术写作,面临被取代的风险。尽管AI在技术解释方面已初具规模,但他依然保有其独特的写作风格,并对AI是否会完全取代人类作家抱有疑问。他目前正计划撰写一本新书,并利用AI辅助理解相关技术,但他同时也对未来充满迷茫,思考着AI时代自身价值的定位。
Nyxt是一款非同寻常的浏览器,它将Emacs的理念融入其中,打造了一个高度可定制、键盘驱动的Web体验。由Common Lisp编写,Nyxt优先考虑Linux用户,并鼓励开发者对其进行扩展。虽然最初受Emacs启发,但Nyxt独立于Emacs运行,并支持vi和CUA按键绑定。当前版本3.x使用WebKitGTK渲染引擎,即将推出的4.0版本将支持Electron,以提升性能并扩展到macOS和Windows。Nyxt以其极简的界面和强大的自定义功能吸引着追求极致效率的开发者,但其较高的学习曲线和有限的社区资源也构成一定的挑战。
《10 PRINT》一书以一行简单的Commodore 64 BASIC程序为核心,探讨了创意计算和计算机程序在文化中的存在方式。作者们将代码视为一种文本,分析了这行代码的创作、目的、假设等,并探讨了计算和艺术中的随机性和规律性、迷宫在文化中的象征意义以及Commodore 64计算机的影响。本书还展示了由程序生成的封面设计,现已被纽约公共图书馆和古腾堡计划采用。
本文作者深入探讨了OCaml编程语言,从语言特性、生态系统到社区文化,全方位展现其魅力。作者强调OCaml兼具学术研究和工业应用的优势,其强大的静态类型系统、多范式编程支持以及不断发展的生态系统使其成为构建各种项目(从个人项目到工业级应用)的理想选择。文章还驳斥了一些关于OCaml的常见误解,并展望了其未来发展方向。
Convo-Lang 是一种开源的 AI 原生编程语言和生态系统,专为构建大型语言模型 (LLM) 的强大、结构化提示和代理工作流程而设计,支持 GPT-4、Claude、Llama 等模型。它使用类似自然语言的语法,但增加了结构、状态和变量,简化了 LLM 应用的构建、测试和维护。Convo-Lang 支持多模型切换,方便连接知识库,并提供自定义推理算法,使得构建复杂的 AI 应用变得更加容易。
ForgeFed 是一种用于软件 forge 和代码协作工具的联合协议,旨在打破大型中心化平台的垄断。它基于 ActivityPub 协议,允许不同的代码托管网站、问题追踪器和代码审查应用等互操作。这意味着你可以将代码托管在任何地方,同时仍然能够与其他平台上的项目进行交互,而无需在每个平台上都创建账户。ForgeFed 将权力交还给用户,创建一个自由、连接且安全的协作网络,不受单一公司政策或平台关闭的影响。
作者发布了一个名为XR2000的编程挑战,它结合了一个引人入胜的科幻故事背景。这个挑战主要关注二进制协议和一些密码学内容,灵感来自TIS-100、Space Traders和Protohackers等游戏和挑战。XR2000目前处于第一阶段,未来可能根据反响继续扩展故事和增加更多低级/汇编技术。参与者可以通过`nc clearsky.dev 29438`连接到挑战。
YAMS是一个基于内容寻址存储的持久化记忆系统,旨在为大型语言模型(LLM)和应用程序提供高效的存储和检索功能。它支持去重、语义搜索和全文索引,并具有版本控制、崩溃恢复等特性。YAMS 通过SHA-256 哈希确保数据完整性,并使用 Zstandard 和 LZMA 压缩算法。它提供了命令行界面(CLI)和一个MCP服务器用于与Claude Desktop等客户端集成。YAMS 支持Linux和macOS平台,并可通过Docker和Homebrew安装。