4.12. 其他¶
1968-04月 梅尔 · 康威在 Datamation 杂志上发表了一篇名为“How Do Committees Invent”的论文,提出了「康威定律」
1992 年 Ward Cunningham 提出“技术债”
2018-05-23 net-tools 起源于 BSD,自 2001 年起,Linux 社区已经对其停止维护,而 iproute2 旨在取代 net-tools,并提供了一些新功能。一些 Linux 发行版已经停止支持 net-tools,只支持 iproute2。
4.12.1. 加密¶
1976 年,DH 是 Diffie-Hellman 的首字母缩写,作者Whitfield Diffie 与 Martin Hellman开创了公钥密码学的先河
1977 年,联邦信息处理标准(FIPS)发布 DES
1977 年,三位数学家Rivest、Shamir 和 Adleman设计了一种公钥算法RSA,可以实现非对称加密。这种算法用他们三个人的名字命名。
Rivest设计出 md4, 128bit, RFC1186, RFC1320
1983 年由 David Chaum 提出
盲签名
1985 年由 Neal Koblitz 和 Victor Miller 分别独立提出
ECC
1990 年,MIT 的 Ronald L. Rivest 设计出MD4(RFC 1320),MD 是 Message Digest 的缩写。其输出为 128 位。MD4 已证明不够安全。
1991 年,Rivest 对 MD4 的改进版本MD5(RFC 1321)。它对输入仍以 512 位分组,其输出是 128 位。MD5 比 MD4 复杂,并且计算速度要慢一点,更安全一些。MD5 已被证明不具备“强抗碰撞性”。
1991年,程序员Phil Zimmermann为了避开政府的监视,开发了加密软件PGP。因为这个软件非常好用,迅速流传开来成为许多程序员的必备工具
1993 年,安全杂凑标准(Secure Hash Standard)发布第一个版本,这个版本常被称为 SHA-0,它在发布之后很快就被 NSA 撤回。
1995 年,NIST发布了 SHA-1,它的输出为长度 160 位的 hash 值,因此抗穷举性更好。
1997 年,PGP 成为一项互联网标准,称为 OpenPGP
1997 年,GPG(GnuPG)是OpenPGP 标准多种实现中的一种,由自由软件基金会 (FSF) 所开发的的程序称 GNU Privacy Guard(GPG)
2000 年10月2日, Rijndael(比利时: Joan Daemen, Vincent Rijmen)在美国国家技术研究所NIST(National Institute of Standards and Technology)举办的公开竞选中获胜,生成新的对称加密标准 AES
2002 年,以官方标准发布包含SHA-1 的 FIPS PUB 180-2
2004 年 2 月,发布了一次 FIPS PUB 180-2 的变更通知,加入了一个额外的变种 SHA-224
2010 年12月17日,国家密码管理局发布的椭圆曲线公钥密码算法SM2
4.12.2. 加密破解¶
1999年,RSA-155 (512 bits)被成功分解,花了五个月时间(约8000 MIPS年)和224 CPU hours在一台有3.2G中央内存的Cray C916计算机上完成
2010 年,美国软件工程学会 (SEI) 就认为 MD5 算法已被破解,不再适用
2009年12月12日,编号为RSA-768(768 bits, 232 digits)数也被成功分解。这一事件威胁了现通行的1024-bit密钥的安全性,普遍认为用户应尽快升级到2048-bit或以上
4.12.3. 服务端开发¶
1971 年,电子邮件诞生。
1974 年,Internet 诞生。
1974 年,第一个数据库系统 IBM System R 诞生。SQL 语言诞生。
1989 年,万维网(WWW)诞生。
1993 年,世界上第一个 Web 服务器 NCSA HTTPd 诞生,它也是大名鼎鼎的 Apache 开源 Web 服务器的前身。
1998 年,Akamai 诞生,提供内容分发网络(CDN)服务。算是全球第一个企业云服务,当时还没有云计算这样的概念
2006 年,Amazon 发布弹性计算云(Elastic Compute Cloud),简称 EC2。这被看作云计算诞生的标志性事件。
2007 年,Amazon 发布简单存储服务(Simple Storage Service),简称 S3。这是全球第一个对象存储服务。
2008 年,Google 发布 GAE(Google App Engine)。
2009 年,Go 语言诞生。Derek Collison 曾预言 Go 语言将制霸云计算领域。
2013 年,Docker 诞生。
2013 年,CoreOS 诞生。这是第一个专门面向服务端的操作系统。
2014 年,Kubernetes 诞生。当前被认为是数据中心操作系统(DCOS)的事实标准。
4.12.4. 正则表达式¶
20 世纪 40 年代,有两位神经生理学家(Warren McCulloch 和 Walter Pitts),研究出了一种用数学方式来描述神经网络的方法。
1956 年,一位数学家(Stephen Kleene)发表了一篇标题为《神经网络事件表示法和有穷自动机》的论文。这篇论文描述了一种叫做 “正则集合(Regular Sets)” 的符号。
1968 年 Unix 之父 Ken Thompson 发表了文章《正则表达式搜索算法》,并且将正则引入了自己开发的编辑器 qed,以及之后的编辑器 ed 中,然后又移植到了大名鼎鼎的文本搜索工具 grep 中
1986 年的 POSIX 开始进行标准化的尝试。POSIX 作为一系列规范,定义了 Unix 操作系统应当支持的功能,其中也包括正则表达式的规范。因此,Unix 系统或类 Unix 系统上的大部分工具,如 grep、sed、awk 等,均遵循该标准。我们把这些遵循 POSIX 正则表达式规范的正则表达式,称为
POSIX 流派的正则表达式
[注: 流派1]。1987 年 12 月,Larry Wall 发布了 Perl 语言第一版,因其功能强大一票走红,所引入的正则表达式功能大放异彩。之后 Perl 语言中的正则表达式不断改进,影响越来越大。于是在此基础上,1997 年又诞生了
PCRE——Perl 兼容正则表达式(Perl Compatible Regular Expressions)
[注: 流派2]。
4.12.5. 敏捷开发¶
1996 年,Steve McConnel 出版了一本著作《Rapid Development》,国内译作《快速软件开发》首次提出了解决集成问题的优秀实践:Daily Build,每日构建。
2000 年时,“软件行业最会总结的人” Martin Fowler 发布了一篇重量级文章“Continuous Integration”
2011 年写成《精益创业》。最早成型的面向不确定性创造新事物的方法论是精益创业(Lean Startup),它是 Eric Ries 最早总结出来的。他在很多地方分享他的理念,不断提炼,最终在 2011 年写成一本同名的书:《精益创业》。
2006 年,Martin Fowler 重写了“Continuous Integration”这篇文章
4.12.6. 测试¶
最早的测试框架起源是 Smalltalk。这是一门早期的面向对象程序设计语言,它有很多拥趸,很多今天流行的编程概念就来自于 Smalltalk,测试框架便是其中之一。 真正让测试框架广泛流行起来,要归功于 Kent Beck 和 Erich Gamma。Kent Beck 是极限编程的创始人,在软件工程领域大名鼎鼎,而 Erich Gamma 则是著名的《设计模式》一书的作者,很多人熟悉的 Visual Studio Code 也有他的重大贡献。 有一次,二人一起从苏黎世飞往亚特兰大参加 OOPLSA(Object-Oriented Programming, Systems, Languages & Applications)大会,在航班上两个人结对编程写出了 JUnit。从这个名字你便不难看出,它的目标是打造一个单元测试框架。 顺便说一下,如果你知道 Kent Beck 是个狂热的 Smalltalk 粉丝,写过 SUnit 测试框架,就不难理解这两个人为什么能在一次航班上就完成这样的力作。 JUnit 之后,测试框架的概念逐渐开始流行起来。如今的 “程序世界”,测试框架已经成为行业标配,每个程序设计语言都有自己的测试框架,甚至不止一种,一些语言甚至把它放到了标准库里,行业里也用 XUnit 统称这些测试框架。
2003 年由 Dan North 提出了来的 BDD
4.12.7. 信息论¶
1948 年,克劳德・香农(Claude Elwood Shannon)在《贝尔系统技术学报》(Bell System Technical Journal)上发表了一篇论文《通信的数学原理》(A Mathematical Theory of Communication),这是现代信息论的开端。我们程序员熟知的通信、数据压缩、密码学、自然语言处理等诸多领域都有信息论的身影。
4.12.8. CI/CD¶
2009 年,Flickr 做了一个分享《每天部署 10 次》,整个行业受到了极大的冲击,从此 DevOps 运动风起云涌。Chef、Puppet、Ansible 这些工具基本上都是在那之后,兴起或广为人知的。