分类: 开发

顽固的Feed阅读器导致网站中断

2024-12-22

一位博主遭遇了网站无法访问的困扰,追踪后发现并非运营商或主机问题,而是某些Feed阅读器程序的异常行为。这些程序无视最佳实践,持续发送无条件请求,即使收到429错误码(请求过多)也不停止,最终导致服务器自我保护性地停止响应。博主无奈之下,只能通过博客文章呼吁用户检查自己的Feed阅读器,并提供了一个名为“Feed阅读器评分”的工具,用于分析阅读器的行为,以期解决这个问题。

陶哲轩最新论文:深入探究GUE及其子矩阵特征值分布

2024-12-22

著名数学家陶哲轩最新上传至arXiv的论文,深入研究了高斯酉系综(GUE)及其子矩阵特征值在固定指标下的分布。论文运用行列式过程和精细的分析技巧,获得了关于特征值间隙的若干估计,解决了先前文献中未曾解答的问题,为后续研究GUE边界条件下的“蜂巢”的极限行为奠定了基础。该研究对理解随机矩阵模型以及相关领域具有重要意义。

以太坊链上升级信号EIP提案:社区共识驱动升级

2024-12-22

该提案提出了一种链上机制,允许以太坊客户端通过在区块的extraData字段中嵌入“投票”指示器来表明其对协议升级的意愿。只有当特定时间窗口内足够多的区块发出“支持”升级的信号时,未来的分叉激活区块才会生效。这改变了以往由以太坊基金会单方面决定升级的方式,转而由网络参与者共同决定,提高了去中心化程度,并降低了中心化风险。

开发 协议升级

物联网项目中最小化WiFi功耗

2024-12-22

PetDrifts项目初期,其基于ESP32 C3的物联网设备电池续航能力差,仅能维持一天。经分析发现,每15分钟一次的HTTP POST请求导致功耗峰值飙升。为解决此问题,作者尝试了两种方法:一是将TCP改为UDP协议,减少网络开销;二是采用MQTT协议,利用持久连接降低功耗。虽然有所改善,但仍未达到预期效果,最终选择蓝牙MCU以获得更长的电池续航时间。

开发 功耗优化

基于SQLite的键值存储库:支持类似JS的对象操作和自动JSON序列化

2024-12-22

GitHub 上开源了一个基于 SQLite 的键值存储库,它允许像操作 JavaScript 对象一样操作数据,并自动进行 JSON 序列化。该库提供了一个名为 `createDatabaseClient` 的函数,该函数创建了具有独立读取器(`rdr`)和写入器(`wtr`)的并行客户端。写入器使用代理来实现部分 JSON 更新,而读取器返回普通的 JavaScript 对象。该库还包含全面的测试用例,涵盖了基本 CRUD 操作、嵌套更新、删除以及数组操作等功能。

Nix Home Manager:dotfiles 管理指南

2024-12-22

本文深入探讨了 Nix Home Manager 在 dotfiles 管理方面的优势和技巧。作者首先介绍了 Nix 和 Home Manager 的学习曲线,并建议循序渐进地学习其功能。文章详细讲解了 Home Manager 的几种用法,包括软件安装、声明式程序和服务配置,以及 dotfiles 管理。重点介绍了 `mkOutOfStoreSymlink` 函数,该函数能够创建指向 dotfiles 的符号链接,允许用户修改 dotfiles 而无需重新构建整个系统。作者还提供了一个自定义模块的示例,方便用户在可变和不可变配置之间切换。最后,作者将 Home Manager 与其他 dotfiles 管理工具进行了比较,并强调了 Home Manager 在可复现性方面的优势。

开发 Home Manager

GCC构建失败:一场由sbuild重构引发的悬疑调试

2024-12-22

Debian GCC构建在sbuild重构后神秘失败。调查团队历经六个阶段,最终揭开谜底:sbuild的新版初始化程序与D语言的单元测试发生冲突,导致测试程序意外终止自身进程组,从而中断构建。罪魁祸首是D语言单元测试中将-2作为进程ID的特殊值,导致其发送SIGTERM信号到错误的进程组。更换回旧版初始化程序或修改测试代码即可解决问题。

开发 sbuild

NeXT遗产:OS X的幕后功臣

2024-12-22

本文讲述了NeXT公司及其操作系统NeXTSTEP对苹果OS X和iOS系统深远的影响。NeXTSTEP基于UNIX,带来了保护内存、抢占式多任务和守护进程等关键特性,提升了系统稳定性和效率。它还引入了Objective-C编程语言和Cocoa框架,简化了软件开发,并催生了Interface Builder等强大的开发工具。此外,NeXTSTEP的Display PostScript技术为OS X的Quartz图形系统奠定了基础。这些技术至今仍是苹果设备的核心,体现了NeXT公司对现代计算机技术的巨大贡献。

开发 OS X NeXTSTEP

会议增多是部署缓慢的必然结果?

2024-12-22

程序员常抱怨会议过多影响效率。但软件设计大师Kent Beck提出一个颠覆性观点:会议并非效率的敌人,而是应对缓慢部署的无奈之举。Facebook的经验表明,部署频率提高能有效解决问题。当部署速度跟不上代码变更速度时,为了降低风险,组织会增加会议、审核等流程,最终导致效率下降。与其减少会议,不如提升部署能力,例如缩短部署周期或提高每次部署的代码质量。这篇文章以独特的逆向因果关系思维,引发我们对软件开发效率的深入思考。

F# 错误处理的改进方案:FaultReport

2024-12-22

本文探讨了 F# 中 Result 类型在错误处理方面的不足,例如缺乏错误类型一致性以及使用字符串作为错误类型导致的诸多问题。作者提出了一个名为 FaultReport 的替代方案,它通过定义 IFault 接口规范化错误类型,并使用 Report<'Pass', 'Fail> 类型来表示操作结果,其中 'Fail 必须实现 IFault 接口。这使得错误处理更加一致和类型安全,避免了使用字符串作为错误类型带来的不便。FaultReport 还提供了 Report.generalize 函数进行向上转型以及 FailAs 活动模式进行向下转型,方便了不同错误类型的处理。作者认为,虽然替换 FSharp.Core 中的 Result 需要较大代价,但 FaultReport 的设计理念对于改进 F# 的错误处理机制具有重要意义。

开发 Result

GitHub 助手:用自然语言探索 GitHub 仓库

2024-12-22

GitHub 助手是一个概念验证项目,允许用户使用自然语言查询 GitHub 代码库。该项目使用 Relta 库和 assistant-ui 构建,用户可以通过自然语言提问,系统将返回相关的GitHub仓库信息。目前 Relta 子模块未开源,但可通过联系开发者获取。该项目需要 Python 3.9+、npm 和 Git 等环境,并需要配置 OpenAI API 密钥和数据库连接 URI。

开发

AWS首席架构师招募Rosetta 2创造者加入Lean FRO项目

2024-12-22

AWS高级首席应用科学家兼Lean FRO(非营利组织)首席架构师Leonardo de Moura宣布Cameron Zwarich加入Lean FRO团队。Zwarich是Rosetta 2的创造者,拥有超过15年苹果公司低层系统软件开发经验,他将专注于改进Lean的代码生成器,这将对Lean生态系统产生重大影响。

开发

一位工程师的变革:公开透明的CHANGELOG实践

2024-12-22

一位AWS工程师Daniel Doubrovkine分享了他坚持记录工作日志(CHANGELOG)的经验。他将每周工作内容公开记录,让同事和管理者都能随时了解他的工作进展。这一实践带来了诸多益处:提高了1对1会议效率,帮助新员工快速融入团队,方便查找资料,提升了自我反思能力,并赢得了同事的信任。他建议大家尝试这种方法,并分享了其简单的记录方法以及一段Ruby代码用于生成年度目录。

开发 CHANGELOG

Blender 导入 USD 场景速度慢的奇特案例

2024-12-22

一位开发者在使用Blender导入USD场景时,遇到了导入速度极慢的问题。通过性能分析,他发现瓶颈在于Blender内部的ID排序函数`id_sort_by_name`。该函数原本预期为O(N)复杂度,但由于USD文件中的命名方式导致其退化为O(N^2)复杂度。开发者通过修改命名方式和优化排序算法,成功将导入时间从4分40秒缩短到8秒(对于较小的文件)。然而,他发现问题根源在于Blender对ID的排序要求,并提出了使用Trie树或哈希表等数据结构来替代当前的链表结构的建议。

开发 USD

Python工具cqd:彩色显示对象属性

2024-12-22

cqd是一个轻量级的Python工具,它以彩色方式显示对象的属性,方便开发者在开发和调试过程中检查对象。它使用颜色区分了dunder方法(蓝色)、受保护属性(黄色)和公共属性(绿色),例如,可以方便地查看Hugging Face分词器的属性。安装方便,只需使用pip install cqd即可。使用时,导入cqd函数并调用cqd(your_object)即可。

开发 对象属性

Java JEP 483:提前类加载和链接提升启动速度

2024-12-22

JEP 483通过在HotSpot JVM启动时预先加载和链接应用程序类来显著缩短启动时间。它通过监控应用程序的一次运行,并将所有类的加载和链接形式存储在缓存中,从而在后续运行中重用。此功能无需修改应用程序代码,对大型服务器应用程序启动速度提升显著,例如Spring PetClinic的启动时间缩短了42%。虽然目前缓存创建过程为两步,未来版本将简化为一步,并支持更灵活的训练运行配置。

开发

Meta大规模将Java代码迁移至Kotlin:攻克百万级代码转换难题

2024-12-22

Meta公司历时数年,将庞大的Android代码库从Java迁移到Kotlin。这篇文章详细介绍了Meta如何通过构建名为Kotlinator的自动化工具,克服了构建速度慢、代码检查不足等挑战,最终实现了超过一半代码的转换。Kotlinator包含多个阶段,包括预处理、使用无头模式的J2K转换、后处理和错误修复等。Meta还与JetBrains合作改进J2K,并开源部分转换步骤,以促进社区协作。文章重点阐述了如何处理空安全问题,以及在转换过程中遇到的各种代码问题和解决方案。

开发

隔墙对话改变程序员人生轨迹

2024-12-21

1983年,一位程序员在大型国防承包商工作,计划攻读化学博士学位。一次偶然的机会,他和隔壁“微型计算机小组”的经理(一位技术爱好者)隔墙聊天,并被邀请参加一个关于Apple II的会议。会上,他临危受命,用一周时间用6502汇编语言编写了一个VT-100终端模拟器,成功解决了公司总裁在家读取邮件的需求。这次经历不仅改变了他职业生涯的方向,让他加入了微型计算机小组,成为公司唯一一位个人电脑程序员,也让他最终创办了自己的公司。多年后,他回忆起这段经历,感慨人际交往和偶然机遇对人生的影响。

开发

软件设计哲学:简化复杂性

2024-12-21

本文总结了《软件设计哲学》一书中的三个核心思想:零容忍复杂性、组件大小并非模块化的唯一标准以及异常处理的复杂性。作者指出,复杂性并非源于单一错误,而是累积的结果。文中通过订单处理系统和用户注册流程的例子,阐述了如何避免重复代码,以及如何在组件大小和模块化之间取得平衡。此外,作者还介绍了三种减少异常处理复杂性的方法:消除错误、屏蔽异常和异常聚合,并以文件处理为例进行了说明。总而言之,这本书强调了在软件设计中持续简化复杂性的重要性。

开发

数组枚举:一种提升数据处理效率的新型数据结构

2024-12-21

本文介绍了一种名为“数组枚举”(EoA)的数据结构,它与常用的“结构体数组”(SoA)类似,但将枚举类型作为数据结构的核心。EoA 通过将多个枚举值打包成一个数组,并使用单个标签标识整个数组的类型,从而减少了内存占用和分支预测开销,提升了数据处理效率,尤其适合 SIMD 优化。文章以数据库系统 TigerBeetle 为例,解释了 EoA 如何在批量处理中发挥作用,有效地分离控制平面和数据平面,从而实现更高的性能。

开发 EoA SIMD优化

Yakari:交互式命令构建工具,简化复杂命令行

2024-12-21

Yakari是一个交互式命令构建工具,旨在简化复杂的命令行界面。它通过逐步引导用户构建命令,让用户无需记忆复杂的命令语法,就能轻松运行命令。Yakari支持多种参数类型,并提供上下文帮助和命令历史记录功能,极大提升了命令行操作的易用性。用户可以通过简单的快捷键操作完成命令的构建和执行,即使是复杂的命令也能轻松上手。

开发

Go语言迭代器:高效处理分页API

2024-12-21

本文介绍了如何使用Go 1.23引入的迭代器特性来高效处理分页API。作者以GitHub API为例,演示了如何编写一个自定义迭代器来抽象分页逻辑,使代码更易读、复用。文章重点讲解了迭代器的实现和测试方法,包括使用mock对象模拟API调用和使用pull迭代器进行测试,确保迭代器返回预期结果。通过迭代器,开发者可以将分页逻辑与业务逻辑分离,提高代码的可维护性和可读性。

开发 分页API

持续交付流水线宣言:构建更优软件交付流程

2024-12-21

现代软件团队迫切需要更完善的持续交付流水线管理工具。当前的流水线生态系统支离破碎、僵化且低效。这份宣言倡导以代码为中心、开发人员友好的流水线,旨在应对现代工程工作流程的复杂性。它强调单一事实来源、可重用且类型安全的组件、动态灵活的流水线、透明可视化的调试能力,以及应对变化和快速反馈机制,最终目标是提升效率,加快交付速度。

开发

Rivet:基于Actor模型的实时应用运行和扩展平台

2024-12-21

Rivet是一个使用Actor模型构建和扩展实时应用程序的平台。它具有内置的RPC、状态和事件功能,简化了现代应用的开发。Rivet支持自动扩展、边缘网络部署,并提供内置监控和数据本地化功能。底层技术栈包括Rust、FoundationDB、V8 isolates和Deno runtime,保证了性能和效率。Rivet适用于协作应用、本地优先应用、AI代理、游戏服务器等多种场景。

SingleFile:将网页完整保存为单个HTML文件

2024-12-21

SingleFile 是一款强大的浏览器扩展程序和命令行工具,能够将完整的网页内容保存为单个HTML文件。它支持 Chrome、Firefox、Edge 等主流浏览器,并提供便捷的页面保存、多标签页处理、内容注释等功能,甚至可以将保存的页面上传至 Google Drive 或 GitHub。SingleFile 还支持自定义快捷键和丰富的选项设置,方便用户根据自身需求进行个性化定制。

开发 网页保存

高效德语学习:Anki 是答案吗?

2024-12-21

一位在德国生活了近八年却仍未掌握德语的工程师,分享了他使用Anki学习德语的经验。他尝试使用Anki的间隔重复技术来高效学习词汇,每天只学习10个新单词,目标是一年学习3600个单词达到C1水平。他选择了AnkiWeb上一个按频率排序的德语词汇库,并自己添加了语音例句。文章最后,他邀请读者分享使用Anki学习德语的经验和技巧。

开发 德语学习

告别C字符串漏洞:一种更安全的字符串处理方法

2024-12-21

厌倦了C字符串的漏洞和不安全性?本文介绍了一种巧妙的替代方案:自定义字符串结构体`struct str`,它包含数据指针和长度,避免了空字符结尾带来的风险。作者在裸机环境下六个月的实践证明,这种方法有效地避免了缓冲区溢出等错误。虽然使用宏`STR`略显冗长,但带来的安全性和可读性提升远大于此。编译器优化也使得性能损耗可以忽略不计,为追求代码安全性的开发者提供了新的思路。

开发

AI代码审查机器人如何学会“闭嘴”

2024-12-21

Greptile公司开发的AI代码审查机器人最初因评论过多而饱受诟病。为了解决这个问题,他们尝试了多种方法,包括改进提示词、让LLM自我评估评论质量,但都收效甚微。最终,他们通过将团队以往的评论向量化,并利用向量数据库进行聚类分析,成功过滤掉与大量被否定评论相似的“无用”评论。这一方法将开发者处理评论的比例从19%提升至55%以上,有效降低了LLM产生的噪音。

开发

字幕编辑器Aegisub 3.4.0版本发布

2024-12-21

Aegisub 3.4.0版本正式发布!这是一个免费、跨平台、开源的字幕编辑器,它使得将字幕与音频同步变得快速简便,并提供许多强大的样式工具,包括内置的实时视频预览功能。无论你是资深字幕组成员还是字幕制作新手,Aegisub都能满足你的需求。

分布式一致性算法Raft详解:从入门到实现

2024-12-21

本文是关于Raft分布式一致性算法的系列文章的第一篇,介绍了Raft算法的基本概念和架构。Raft算法用于解决在多个服务器上复制确定性状态机的问题,确保即使部分服务器崩溃,服务也能保持可用性。文章解释了Raft的核心组件,包括状态机、日志、一致性模块,以及领导者和跟随者角色,并阐述了客户端与Raft集群的交互方式。此外,文章还讨论了Raft的容错能力和CAP定理,以及选择Go语言作为实现语言的原因。后续文章将深入探讨Raft算法的实现细节。

← 前页 1 3 4 5 6 7 8 9