第八章 Fetchmail成熟了

简介: 现在有了一个简洁新颖的设计,我确信代码运行稳定,因为我每天都在用,公测名单也枝繁叶茂。我逐渐发现,我不再只是研发一个可能只有少数人才会用到的琐碎的个人软件了。而是在主持一个所有使用SLIP/PPP邮件接口的Unix用户都切实需要的软件。

现在有了一个简洁新颖的设计,我确信代码运行稳定,因为我每天都在用,公测名单也枝繁叶茂。我逐渐发现,我不再只是研发一个可能只有少数人才会用到的琐碎的个人软件了。而是在主持一个所有使用SLIP/PPP邮件接口的Unix用户都切实需要的软件。

凭借SMTP转发功能,fetchmail把竞争对手远远的甩在了后面,成了一个潜在的“领域杀手”。一个在同领域鹤立鸡群的杀手,它让对手们不但被抛弃而且被遗忘。

这种结果是可遇而不可求的。一个卓有建树的设计构想会把你顺理成章,甚至命中注定地推向成功。而找到这类构想的方法无非是拥有很多值得尝试的创意——或者能用工程的眼光把其他人的创意发挥到令原作者都难以想像的境地。

安迪·塔能鲍姆[1]首先为IBM PC机开发了一个简单的原生Unix系统,他的本意是把它作为一个教学工具(他称之为Minix)。李纳斯则把Minix的概念推臻至安迪想像不到的境地,让它成了这个奇妙的玩意。类似的(只是规模小些),我从卡尔·哈里斯哈利·豪切斯那里借得创意并把它们深化。我们都不是“原创”——那种人们浪漫想像中的天才。话说回来,大多数科学、工程和软件的成果都不是来自原创天才,恰恰相反,是锐意进取铸就了神话。

这两个项目(指Linuxfetchmail——译者按)都成果斐然——事实上,这正是每个黑客毕生求索的成功!这同样意味着我不得不加高要求自己的标准。为了让fetchmail达到预期的目标,我不仅要为自己编程,还要额外地加入别人需要的功能。与此同时,还必须保证程序的简洁和健硕。

意识到这点之后,我加入的第一个也是至关重要的功能就是“集体收发”——从一组用户的邮箱中收取邮件,之后在分发给不同的收件人。

我添加集体收发功能不仅是因为很多用户吵着要用,更主要的是我觉得通过这个方法可以迫使我更全面的处理地址问题,从而摆脱单信投寄中的缺陷。结果得我所愿。正确地完成RFC822[2]地址解析耗费了我很长时间,并不是因为它的某一部分很难,而是它牵扯了一堆相互关联的烦人细节。

添加集体收发成为了一项杰出的设计决策,只因为:

 

14.任何工具都应该起到预期的作用,而一个真正杰出的工具会带来出乎意料的用途。

Any tool should be useful in the expected way, but a truly great tool lends itself to uses you never expected.

 

加入集体收发的一个出乎意料的用途是让通过网络相连的客户端可以保存邮件列表和别名扩展。也就是说,通过ISP上网的个人用户不需要持续访问ISP的别名文件就可以管理邮件列表了。

我的公测人员要求加入的另一个重要功能是支持8位的MIMEMultipurpose Internet Mail Extensions,多用途的网际邮件扩充协议)操作。这很容易办到,因为我之前就很小心的保留了对代码的8位兼容性(就是,没有强迫ASCII字符集中未曾用到的第8比特位去携带程序信息)。这并不是因为我有先见之明,而是遵循了另一个原则:

 

15.在写任何网关软件的时候,都该花点功夫尽可能不去干扰数据流——除非用户强迫你,否则永远不要抛弃任何信息!

When writing gateway software of any kind, take pains to disturb the data stream as little as possible—and never throw away information unless the recipient forces you to!

 

假设我不曾遵循这个原则,那么加入8MIME支持就会很困难而且毛病多多。事实上,我现在做的只是读一下MIME标准(RFC1652[3],然后加入一条小小的标头生成规则。

一些欧洲用户请求我加入了一个选项,来限制每次连接可下载的邮件数目(这样他们可以节流昂贵的电话上网费)。我曾长时间抵触这种做法,就算现在也不是心甘情愿。但是如果你是在为外界编写程序,那么你就必须听从你的客户——即使他们不付钱也应如此。

 

 

 

 

 

译者按:

1.安迪·塔能鲍姆:安德鲁·斯图尔特·塔能鲍姆(Andrew Stuart Tanenbaum)昵称安迪(Andy)美国计算机学家,现定居荷兰。

2.RFC822Standard for the format of ARPA Internet text messages,标准ARPA 互联网文本消息格式。

3.SMTP Service Extension for 8bit-MIMEtransportSMTP 8bit-MIME传输服务扩展。

相关文章
|
6月前
|
机器学习/深度学习 数据采集 存储
4个维度讲透ChatGPT技术原理,揭开ChatGPT神秘技术黑盒
4个维度讲透ChatGPT技术原理,揭开ChatGPT神秘技术黑盒
|
2月前
|
人工智能 前端开发 JavaScript
技术探索之旅:从基础到突破
在这篇技术性文章中,我将分享我的技术探索历程。从最初的编程入门,到如今的项目实践和团队合作,每一步都充满了挑战与收获。希望我的经历能为同样走在技术道路上的你带来一些启发。
|
2月前
|
前端开发 C# Android开发
揭秘Uno Platform跨平台开发魅力:企业级应用的优势与挑战,一篇文章带你深入探究代码背后的秘密
【9月更文挑战第8天】Uno Platform在企业级应用领域展现出强大潜力,凭借其跨平台特性,能够使用C#和XAML为Windows、iOS、Android及Web构建应用,显著降低开发成本。本文将探讨其优势与挑战,并通过示例代码展示其实际应用。Uno Platform不仅提供丰富的UI控件和布局选项,还支持MVVM架构,提升代码的可维护性和可测试性。
53 2
|
3月前
|
Rust 安全 数据挖掘
【颠覆常规】Rust科学计算革命:掌握数值分析与数据处理的全新利器,让你的工作事半功倍!
【8月更文挑战第31天】Rust语言凭借其出色的内存安全和高性能特性,在科学计算领域逐渐崭露头角。本文通过具体代码示例展示了Rust在数值计算与数据分析中的应用,包括矩阵乘法、统计分析及线性方程组求解。通过安装Rust并引入`ndarray`、`nalgebra`和`statrs`等库,读者可以轻松实现各类科学计算任务。Rust在科学计算领域的潜力巨大,未来可期。
169 1
|
3月前
|
XML 开发框架 .NET
.NET框架:软件开发领域的瑞士军刀,如何让初学者变身代码艺术家——从基础架构到独特优势,一篇不可错过的深度解读。
【8月更文挑战第28天】.NET框架是由微软推出的统一开发平台,支持多种编程语言,简化应用程序的开发与部署。其核心组件包括公共语言运行库(CLR)和类库(FCL)。CLR负责内存管理、线程管理和异常处理等任务,确保代码稳定运行;FCL则提供了丰富的类和接口,涵盖网络、数据访问、安全性等多个领域,提高开发效率。此外,.NET框架还支持跨语言互操作,允许开发者使用C#、VB.NET等语言编写代码并无缝集成。这一框架凭借其强大的功能和广泛的社区支持,已成为软件开发领域的重要工具,适合初学者深入学习以奠定职业生涯基础。
100 1
|
3月前
|
开发者 C# Android开发
震惊!Xamarin 跨平台开发优势满满却也挑战重重,代码复用、熟悉语言与性能优势并存,学习曲线与差异处理何解?
【8月更文挑战第31天】Xamarin 与 C# 结合,为移动应用开发带来高效跨平台解决方案,使用单一语言和框架即可构建 iOS、Android 和 Windows 原生应用。本文通过问答形式探讨 Xamarin 和 C# 如何塑造移动开发的未来,并通过示例代码展示其实际应用。Xamarin 和 C# 的组合不仅提高了开发效率,还支持最新的移动平台功能,帮助开发者应对未来挑战,如物联网、人工智能和增强现实等领域的需求。
52 0
|
6月前
|
物联网 区块链 vr&ar
构建高效Android应用:Kotlin协程的实践指南未来交织:新兴技术趋势与跨领域应用探索
【5月更文挑战第28天】随着移动应用开发的不断进步,开发者寻求更高效、更简洁的方式来处理异步任务和提升用户体验。在Android平台上,Kotlin协程作为一种轻量级的线程管理方案,提供了强大的工具来简化并发和异步编程。本文将深入探讨Kotlin协程的核心概念,并通过实例演示如何在Android应用中利用协程优化性能和响应性。通过本文,你将学会如何运用协程来编写更加流畅和高效的代码,同时减少内存消耗和提高应用的稳定性。 【5月更文挑战第28天】 随着科技的迅猛发展,一系列创新技术如区块链、物联网(IoT)、虚拟现实(VR)等正在逐渐从概念验证走向实际应用。这些技术的融合与交叉不仅预示着信息时
|
机器学习/深度学习 SQL 人工智能
应用开发者的疑问:大模型是真正的银弹吗?
通过本文作者想和大家简单讨论下大模型的局限以及真正的适用场景。
83999 30
应用开发者的疑问:大模型是真正的银弹吗?
|
机器学习/深度学习 SQL 人工智能
应用开发者的疑问:大模型是银弹吗?
ChatGPT 火了之后,大模型似乎被当成了真正的银弹,所有的体验问题都试图通过大模型解决。本文想和大家简单讨论下大模型的局限以及真正的适用场景。由于本人不是专业搞算法的,大佬们多多拍砖。
764 0
|
机器学习/深度学习 算法 数据挖掘
浙大发布「数据混合增强」框架AutoMix,还顺手开源了众多mixup算法(1)
浙大发布「数据混合增强」框架AutoMix,还顺手开源了众多mixup算法
192 0