瞬息万变的策略:一位程序员的电脑使用哲学

2025-05-13

本文作者是一位程序员,他分享了他独特的电脑使用习惯,核心思想是“瞬息万变”策略:所有事物要么被有组织地永久保存,要么被严格地视为临时数据。他从关闭持久化Shell历史记录、定期清理GUI桌面、频繁关闭浏览器等方面阐述了这一策略,并解释了其背后的原因和益处,例如提高效率、增强组织性、减少数据冗余等。他还讨论了公司记录管理、自动化操作系统设置等相关实践,并指出该策略并非绝对适用,例如电子邮件和浏览器历史记录因其特殊性而例外。

阅读更多
开发 编程习惯

协程哲学:一段编程人生的思考

2025-03-27

本文作者从个人经历出发,探讨了协程的哲学意义。从最初在C语言中用预处理器模拟协程,到如今C++20原生支持协程,作者分享了他对协程的理解和应用技巧,并对比了协程与状态机、线程的优劣。他认为协程让代码结构更灵活,易于调试和清理,尤其适用于处理顺序相关的任务,如网络协议和数据流处理。作者还深入探讨了协程的不同实现方式,以及如何结合队列和预过滤器优化协程的使用,并展望了协程的未来发展趋势。

阅读更多
开发

PuTTY 图标演变史:从手绘到SVG

2025-03-12

本文讲述了PuTTY工具图标从1990年代手绘到如今SVG矢量图的演变历程。作者最初使用MSVC图标编辑器手工绘制32x32像素的图标,受限于当时的16色调色板和显示技术。随着时间的推移,为了适应更高分辨率的显示和不同工具的需求,作者不断改进,最终开发了可以自动生成多种尺寸和格式图标的脚本,并最终完成了SVG版本的图标,实现了真正的可缩放性。这些图标的设计理念简单明了,体现了PuTTY“可靠的复古风格”,并沿用至今。

阅读更多
开发 PuTTY

彻底分离关注点:重构Bug追踪器

2025-03-10

作者在长期使用各种Bug追踪器后,发现其数据表示存在根本性缺陷,导致许多困扰。文章列举了三个典型问题:统一的“修复版本”字段混淆了事实与计划;状态和解决方案字段的二元化模糊了代码现状与未来意图;将Bug列表等同于待办事项列表,导致非Bug任务的处理变得笨拙。作者提出了一种“关注点分离”的原则,建议将Bug追踪器的数据分为事实表和计划表,分别记录客观存在的Bug信息和修复计划。事实表记录Bug的存在、版本、严重程度等客观信息,计划表记录修复计划、时间安排和主观优先级等。这种分离使得Bug追踪更加清晰高效,并能更好地适应不同类型的项目,甚至可以完全去除计划表,只关注Bug本身。

阅读更多
开发 Bug追踪器

抛弃代码托管平台:一位资深程序员的独立之路

2025-03-05

资深程序员Simon Tatham多年来一直坚持使用独立的Git仓库托管其开源项目,拒绝使用GitHub、GitLab等代码托管平台。他详细阐述了这种选择的理由:首先,他更信任自己控制的服务器,而非大型公司;其次,大型平台过于臃肿,维护成本高;再次,强制用户注册账户增加了额外负担;最后,他更偏好自主选择工作流程,而非被平台限制。他更喜欢通过邮件接收补丁,并详细介绍了其偏好的补丁提交方式,包括git仓库URL、增量git bundle以及其他方法,并说明了其原因。虽然承认这种方式的透明度较低,但他目前仍未找到更好的平衡点。

阅读更多
开发

深入浅出异或运算:从布尔逻辑到密码学

2025-02-18

本文深入探讨了计算机科学中看似简单的异或 (XOR) 运算符。作者从布尔逻辑中的XOR运算开始,逐步扩展到整数的位运算,并探讨了XOR在密码学、像素图形、游戏理论以及有限域等领域的应用。文章以生动的故事性和丰富的例子,解释了XOR的各种特性和用途,例如在密码学中作为简单的加密方式,在像素图形中实现可逆的绘制和擦除,以及在Nim游戏中确定最佳策略。最后,文章还介绍了XOR与集合的 symmetric difference、指数为2的群、Nim-sum、GF(2) 有限域以及CRC校验和等数学概念的联系,展现了XOR运算符的深层数学内涵和广泛的应用场景。

阅读更多
开发 异或运算

无限机器

2024-07-30

这篇文章探讨了如果计算机能够以无限快的速度运行,计算领域会是什么样子。作者构想了无限机器的内存布局、时钟机制、指令集、操作系统、编程语言以及网络和密码学。文章探讨了在无限机器上处理中断、进程间通信和多进程操作系统的可能性,并分析了无限速度对传统密码学技术的影响。作者还提出了在无限机器上构建安全密码系统,特别是公钥密码系统的挑战。

阅读更多
未分类 无限计算

计数B树

2024-05-22

本文介绍了计数B树,它是在传统B树基础上进行改进的数据结构。计数B树在每个子树链接旁边存储子树中元素数量的计数,从而支持按索引查找、按数字查找以及按任意顺序插入元素等操作。文章详细解释了计数B树的算法原理、操作复杂度以及应用场景,并提供了C语言实现代码。

阅读更多
未分类 B树