分类: 开发

Firefox 20 年代码签名演变史:从手动到自动化

2025-02-07

本文回顾了 Mozilla 在过去 20 年中 Firefox 代码签名的演变历程。最初,签名过程极其繁琐,需要人工操作,依赖于物理机器和 USB 密钥。随着技术的进步,Mozilla 逐步实现了自动化签名,从改进脚本到构建专用签名服务器,再到采用 Taskcluster 和 Autograph 服务,最终实现了高效安全的代码签名流程。如今,Firefox 的代码签名每天进行数千次,极大地提高了软件安全性。

开发

Pantograph:一款流畅且类型安全的结构化编辑器

2025-02-07
Pantograph:一款流畅且类型安全的结构化编辑器

Pantograph 是一款革命性的结构化代码编辑器,它直接操作类型化的语法树,而不是像传统编辑器那样先解析文本再进行类型检查。通过引入树选择和“拉链编辑”的概念,Pantograph 简化了对现有程序的编辑,使程序员可以更轻松地进行复杂的代码修改,同时保持程序的类型安全。它巧妙地处理类型差异,并允许程序中存在一些错误,方便用户逐步调试。Pantograph 的设计具有语言通用性,开发者可以基于其框架定义新的编辑器。

开发

程序员的“帽子”:不同场景下的代码风格

2025-02-07

资深程序员反思了多年的编程经验,总结出五种不同的编程“帽子”:船长帽(谨慎细致,适合关键系统)、流浪汉帽(快速原型,简单实用)、麦克盖弗帽(快速验证,不拘泥于代码质量)、厨师帽(注重代码美观)和老师帽(注重代码可读性和理解性)。他认为,根据不同情境选择合适的编程风格至关重要,避免教条式的“正确方法”,才能更高效地完成任务。

开发

三维模型动态LOD技术:向虚幻引擎Nanite致敬

2025-02-07
三维模型动态LOD技术:向虚幻引擎Nanite致敬

这个项目尝试在Three.js中复现类似虚幻引擎5 Nanite的动态LOD技术。它首先将模型分割成网格单元(meshlets),然后将相邻单元分组合并,再利用meshoptimizer进行简化,最终将模型分成多个不同精细度的版本。目前该项目还处于早期阶段,后续计划改进LOD和DAG切割,并进行GPU流几何处理。这项工作参考了Nanite、多重分辨率结构、批量多三角剖分等相关技术。

开发

PropRise 诚招首席工程师:打造AI赋能的数据系统

2025-02-07
PropRise 诚招首席工程师:打造AI赋能的数据系统

快速发展的房地产数据平台 PropRise 正在寻找一位资深的创始工程师,负责设计和构建其核心数据架构。你将使用 TypeScript、Next.js、React、Postgres 和 GCP 等技术栈,处理数百万条房产记录,构建强大的数据管道和质量保证系统,并利用 AI 提高数据准确性和效率。这是一个从零开始构建系统,直接向 CTO 汇报,并拥有丰厚股权的机会,适合热衷于解决复杂问题、对 AI 和数据质量充满热情,并渴望在快速发展的初创公司中发挥关键作用的工程师。

开发

TRRE:超越正则表达式的文本处理利器

2025-02-07
TRRE:超越正则表达式的文本处理利器

TRRE 是一种实验性的正则表达式扩展,它引入了一种更直观的方式来进行文本编辑和模式匹配。不同于传统的正则表达式,TRRE 使用 `:` 符号定义转换规则,使得文本替换、插入和删除操作更加简洁。它提供了一个类似 `grep` 的命令行工具,可以高效地处理各种文本转换任务,例如替换单词、插入字符、删除字符等,甚至可以实现简单的密码加密和解密。虽然目前仍处于原型阶段,但 TRRE 展示了其在文本处理方面的巨大潜力,特别是对于复杂的文本转换任务,其性能甚至超越了 `sed`。

开发

AI赋能:个人软件开发的复兴

2025-02-07

十年来专注于为他人开发软件,作者逐渐失去热情。如今,AI的兴起使得开发满足个人需求的软件变得前所未有的容易。作者决定转向“个人软件”或“自私软件”的开发,专注于解决自身问题,并开源项目。这不仅能重燃编程热情,还能通过快速迭代和AI辅助,更高效地学习和解决问题,即使是简单的“一次性”脚本也能带来乐趣。

开发 个人软件

Inko 语言的借用检查器:堆栈分配与编译时检查的权衡

2025-02-07

Inko 语言的设计者在探索堆栈分配和借用检查的最佳方案。默认情况下,Inko 类型在堆上分配,提供灵活性但存在性能开销。为了提高性能,引入了 `inline` 修饰符以支持堆栈分配,但这也带来了新的挑战:如何在保证内存安全的前提下处理借用和移动语义。文章探讨了多种方案,包括允许字段赋值、引入唯一类型和逃逸分析,最终认为编译时借用检查是最佳方案,但实现复杂度高,短期内不会实现。目前,Inko 仍然采用不允许内联类型字段重新赋值的策略。

开发

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

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

arXivLabs是一个框架,允许协作者直接在arXiv网站上开发和分享新功能。参与arXivLabs的个人和组织都秉承着开放、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,只与遵守这些价值观的合作伙伴合作。如果你有想法可以为arXiv社区增值,请了解更多关于arXivLabs的信息。

开发

不到100MB的LLM模型:llm-smollm2插件发布

2025-02-07
不到100MB的LLM模型:llm-smollm2插件发布

作者发布了llm-smollm2插件,该插件将一个压缩的SmolLM2-135M-Instruct LLM模型打包到Python包中,大小不到100MB,可以直接通过pip安装。文章详细介绍了插件的构建过程,包括寻找合适的模型、处理llama-cpp-python库的冗余日志输出,以及打包和发布到PyPI的过程。虽然该模型能力有限,但作者认为它是学习LLM技术的好工具。

开发

基于粒子的水文侵蚀模拟:生成逼真的地形和水文系统

2025-02-07

本文介绍了一种基于粒子的水文侵蚀模拟技术,该技术能够生成具有逼真河流、湖泊等水文特征的地形。通过扩展之前的粒子水文侵蚀模型,并引入“河流地图”和“水池地图”来追踪水流和积水,该系统能够模拟河流迁移、瀑布形成、洪泛区等地理现象。该方法简单高效,且与地形紧密耦合,生成的景观具有高度的真实感,即使在实时渲染中也能保持流畅。

Kubernetes的实体-组件-系统架构:意想不到的相似性

2025-02-07

本文揭示了Kubernetes资源管理模型与游戏开发中常用的实体-组件-系统(ECS)模式之间的惊人相似性。Kubernetes对象如同ECS中的实体,拥有唯一标识符;`spec`和`status`字段则对应组件,分别代表期望状态和实际状态;而控制器、调度器和Kubelet则扮演系统的角色,负责协调期望状态和实际状态之间的差异。这种架构上的相似性使得Kubernetes的设计更清晰,也为理解其声明式特性提供了新的视角。

开发 ECS

Linux内核维护者Hector Martin退出

2025-02-07

Linux内核开发者Hector Martin宣布退出内核维护工作,并移除自己作为Apple/ARM平台维护者的身份。他表示对内核开发流程和社区管理方式失去了信心,但未来可能会以个人名义提交补丁。此举引发了对Linux内核社区管理的讨论。

Google reCAPTCHA与GDPR冲突:隐私风险与解决方案

2025-02-07

Google的reCAPTCHA技术用于识别网站访客是否为人类,但其数据收集方式与GDPR存在冲突。reCAPTCHA通过分析用户行为(如鼠标移动、按键次数等)以及收集IP地址、浏览器信息等个人数据来评估用户身份。由于未获得明确同意,网站运营商需证明其使用reCAPTCHA有正当理由,但这很难做到,因为Google对数据的具体用途不明确,用户的隐私风险难以评估。文章建议网站运营商使用更隐私友好的替代方案,并强调透明化操作、获取用户同意以及数据最小化原则的重要性。

开发

导弹软件的“零垃圾回收”策略:内存泄漏?不存在的!

2025-02-07
导弹软件的“零垃圾回收”策略:内存泄漏?不存在的!

一个开发人员讲述了导弹软件中巧妙运用“零垃圾回收”的案例。由于导弹飞行时间有限,且硬件内存充足,即使程序存在内存泄漏,也不会造成问题。工程师们计算了程序在飞行过程中可能产生的内存泄漏量,并为其增加了双倍的内存空间,以确保程序在导弹完成任务前不会崩溃。这种方法充分利用了程序运行时间的限制,巧妙地解决了内存泄漏问题,堪称“终极垃圾回收”。

开发

HTML 空格处理的混乱与可能的解决方案

2025-02-07
HTML 空格处理的混乱与可能的解决方案

本文深入探讨了HTML中空格处理的复杂性。作者通过大量示例,揭示了HTML处理空格的各种规则,包括内联元素、块级元素、`

`标签和`white-space` CSS属性的差异,以及它们如何导致难以预测的渲染结果。文章还分析了自动化格式化工具、内容管理系统和代码压缩工具在处理HTML空格时面临的挑战。作者提出了一种可能的解决方案:用引号语法区分代码空格和用户可见空格,但承认这将是一个巨大的breaking change。最后,作者建议了一些实用技巧来规避HTML空格处理带来的问题,并提出了添加一个新的HTML实体`&ncsp;`来表示不可折叠空格的想法。

开发 空格

谷歌Android XR的摄像头访问策略:像手机一样简单

2025-02-07
谷歌Android XR的摄像头访问策略:像手机一样简单

本文揭秘了谷歌Android XR系统对摄像头访问的处理策略。与手机类似,开发者可以通过用户许可访问摄像头数据,使用标准的Android Camera API(如CameraX)获取图像流。虽然可以访问前置摄像头(显示用户虚拟化身),但后置摄像头只提供重建的影像,而非原始数据流。此策略与苹果Vision Pro类似,确保Android应用能无缝移植到XR设备,并维护与手机端一致的权限申请流程。目前,Android XR仍处于预览阶段,未来可能会有调整。

Stack Overflow的AI回答实验:一场注定失败的尝试?

2025-02-07
Stack Overflow的AI回答实验:一场注定失败的尝试?

Stack Overflow计划在其平台上引入AI生成的答案,此举引发了社区强烈反弹。作者认为该实验基于一个糟糕的理念:试图用AI替代人类专家的高质量回答。这不仅会浪费时间和金钱,还会损害平台的核心价值——由专家提供的可靠答案。文章详细分析了该实验可能带来的负面影响,包括:增加审核员的工作负担,降低专家参与度,无法保证答案的准确性,以及可能导致用户流失。作者认为,该实验的潜在收益极低,而风险却非常高,最终只会适得其反,损害Stack Overflow的声誉和社区活力。

开发

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

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

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

开发

内存安全标准化:迈向更安全的软件未来

2025-02-07

数十年来,软件可信计算基(TCB)中普遍存在的内存安全漏洞导致恶意软件传播和针对关键基础设施、国家安全目标、公司和个人的破坏性攻击。本文探讨了内存安全标准化的重要性,这对于在政府和行业中推广普遍的强内存安全至关重要。近年来,一系列强大的内存安全技术(包括内存安全语言、硬件和软件保护、形式化方法和软件分隔)已经足够成熟,可以用于安全关键型用例。然而,目前缺乏通用的、与技术无关的术语或框架来规范内存安全要求。标准化将改善行业最佳实践,并有助于解决市场失灵问题,从而促进这些技术的采用。

开发

6502汇编语言入门:重温经典,成为计算机魔法师

2025-02-07

这本小电子书将带你入门6502汇编语言。6502处理器在70年代和80年代非常流行,为BBC Micro、Atari 2600、Commodore 64、Apple II和任天堂娱乐系统等著名电脑提供动力。学习汇编语言能让你深入理解计算机底层工作原理,而6502汇编语言因其简洁易懂的设计,成为学习汇编语言的绝佳选择。文中通过编写一个简单的贪吃蛇游戏,循序渐进地讲解了寄存器、标志位、指令、寻址方式以及堆栈等核心概念,并附带了在线汇编器和模拟器,方便读者实践学习。

开发

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

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

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

开发

组建你的开发“红队”:避免低级错误的秘诀

2025-02-06
组建你的开发“红队”:避免低级错误的秘诀

大多数开发团队都熟悉安全领域的“红队”,但本文作者建议,每个开发团队都应该组建一个更广泛意义上的“红队”。这支“红队”成员的角色包括:寻找设计缺陷的人(例如,避免像GitHub的广告牌设计那样出现低俗图像);使用广告拦截器的人(确保网站在广告拦截器开启的情况下也能正常运行);使用密码管理器的用户(确保网站的登录表单能够被密码管理器正确填充)。作者认为,这些看似简单的角色,能有效避免一些低级错误,让产品更完善,并最终提升用户体验。

开发 开发团队

堆内存探索器:一个强大的glibc堆调试工具

2025-02-06
堆内存探索器:一个强大的glibc堆调试工具

`explore_heap`是一个通过`LD_PRELOAD`加载的glibc堆调试工具,它允许用户交互式地检查和操作程序的堆内存。通过安装`libheap_explorer.so`并使用SIGINT信号(Ctrl+C)中断程序,用户可以进入一个REPL环境,执行分配、释放内存块,打印空闲链表、tcache、fastbin和bin列表等操作,从而帮助开发者调试内存相关的错误。目前该工具已在Arch Linux的glibc 2.41+版本上测试通过,其他现代glibc版本需要调整部分常量。

开发 堆调试

Linux内核维护者抵制Rust:一场编程语言的战争

2025-02-06
Linux内核维护者抵制Rust:一场编程语言的战争

Linux内核的Rust集成之路充满坎坷。部分内核维护者强烈抵制在内核中使用Rust,认为多语言编程会增加复杂性和风险。最近,围绕Rust驱动程序使用DMA API的讨论再次点燃战火。内核维护者Christoph Hellwig明确表示拒绝Rust代码,认为维护多语言项目很痛苦,并希望Rust开发者自行处理与C代码的接口适配。尽管Rust for Linux项目旨在通过抽象层简化集成,但Hellwig坚持认为这会增加维护负担。这一争议凸显了Linux社区内部对编程语言选择的不同立场,以及新技术融入现有庞大系统的挑战。甚至有维护者因此退出维护工作。最终结果如何,还有待观察,这将对Linux未来的发展方向产生深远影响。

开发

Go 1.24 加密库重大更新:拥抱 FIPS 140-3 标准

2025-02-06

Go 1.24 对其加密库进行了大规模重构,以实现 FIPS 140-3 标准合规性。这标志着 Go 标准库的一个重大飞跃,其纯 Go 实现的 FIPS 140-3 认证加密模块不再依赖 cgo 或系统调用。微软 Go 1.24 也做了相应更新,支持 macOS 预览版和增强 Azure Linux 支持,但其加密策略与官方 Go 版本不同,继续使用系统库。新的环境变量 GODEBUG=fips140=on 和 GOFIPS140=latest 控制 FIPS 模式。在 FIPS 兼容系统(如 Azure Linux 或 Windows)上,运行时会自动启用 FIPS 模式。

开发 FIPS 140-3

无需服务器的网页截图API:Abbey AI的幕后功臣

2025-02-06
无需服务器的网页截图API:Abbey AI的幕后功臣

Gordon Kamer开发了一个强大的网页抓取API,作为AI平台Abbey的支撑。该API可在本地运行,只需提供URL即可获取网站数据和截图。它基于Playwright,使用Docker容器,支持JavaScript执行,并具备多种安全特性,如内存限制和隔离进程。API采用多部分响应,返回JSON数据、网页内容和最多5张截图。通过API Key进行访问控制,支持自定义内存分配和截图参数。

开发

服务即软件替代品 (SaaSS): 你的计算自由的又一威胁

2025-02-06

本文探讨了“服务即软件替代品 (SaaSS)”这一概念,它指使用他人的服务替代运行你自己的程序。Richard Stallman 认为,SaaSS 剥夺了用户对计算的控制权,因为它将计算过程交由他人控制的服务器完成。这与专有软件类似,都存在着安全隐患,如数据泄露和后门等问题。作者呼吁用户拒绝 SaaSS,选择使用自由软件和运行在用户自己控制的电脑上的程序,以维护自身的计算自由。

开发 计算自由

SQLite数据库页面级浏览器:窥探数据库内部结构

2025-02-06
SQLite数据库页面级浏览器:窥探数据库内部结构

一个名为`sqlite-page-explorer`的小巧GUI应用,使用Redbean构建,允许你以SQLite数据库的页面方式逐页浏览数据。它以单一可执行文件形式提供,支持Windows、Linux、macOS等多种系统,并能让你直观地了解数据库索引、数据存储方式,以及B树结构等底层细节。虽然可能存在病毒警告,但该项目值得信赖,对于数据库开发者和学习者来说是个不错的工具。

开发 Redbean

从Scala 2.13到Scala 3:一次艰难但成功的迁移

2025-02-06
从Scala 2.13到Scala 3:一次艰难但成功的迁移

作者记录了将一个运行了四年多的多人在线手游服务器从Scala 2.13迁移到Scala 3的历程。第一次尝试以失败告终,因为Scala 3移除了宏注解和类型投影等特性,导致代码修改量巨大。一年后,作者再次尝试,通过在Scala 2代码中预先应用Scala 3语法、使用IntelliJ的代码检查工具、自定义sbt源代码生成器来生成Monocle lenses、以及巧妙地解决类型投影问题等方法,最终成功完成迁移。过程中也遇到了依赖库冲突、编译速度慢等问题,并通过fork库、利用Scala 3的Tuple.Map特性优化代码等方式解决了这些问题。这次迁移经验表明,虽然Scala 3带来了一些挑战,但其强大的元编程能力和新特性最终还是值得的。

开发
1 2 166 167 168 170 172 173 174 213 214