@Lenciel

给Python标准库充电

Python 的自荐页面About Python上号称自家的标准库是”batteries included”的,但实际情况却不是这样。对 Python 标准库的批评几乎从来没有中断过。著名的 Python 包Requests的作者甚至决定永久把 Requests 保持为第三方库而拒绝加入标准库,他的理由是:加入标准库就会死翘翘

再举个例子,我们最近的项目里面都用到了pytz。标准库里面的 datetime 是支持时区的(tzinfo类),但是并没有包含时区信息(tzinfo 是抽象类需要自己实现)。遵照前人的经验使用 pytz 是最好的办法12

所以不奇怪的是,几乎所有的 Python 项目都会引用一堆优秀的第三方库。为了管理这些依赖一般都会用上 pip:

  • 在项目里面用 pip freeze 生成一个requirement.txt文件
  • 在创建virtualenv的时候使用之前生成的文件安装所有的依赖

为了不在每次运行pip install -r requirements.txt的时候都下载一堆依赖,你还可以打开 pip 的download cache。如果整个公司在做项目的时候都需要经常使用一些包,甚至可以考虑做一个Pypi的库来共享,类似于 Maven 的 Repo。

NASA造笔的事情也是假的

Don't touch me

在软件开发中我们一说到避免过度设计,经常有两个例子会被抬出来,其中一个就是 NASA 造了昂贵的太空笔,然后俄罗斯用很简单的方案解决问题的故事(另一个大概就是传送带旁边放电风扇的故事)。NASA造笔的故事大概是这样的:

太空竞赛开始的 1960 年代,NASA 面临一大难题,宇航员需要用笔在真空环境下写字。NASA 于是展开了研究,花了 150 万美元开发出了「宇航员笔」,并在商业市场上取得了小小的成功。

俄罗斯人遇到了同样的问题。

他们用铅笔搞定。

非常有启发意义的故事,不是吗?只不过这不是真相。其实 NASA 一开始就在太空中使用铅笔,但是铅笔在零重力下会造成粉尘特别是石墨这类导电的粉尘飘散,所以被替代了。替代品是Fisher公司开发的一款可以在极端条件下使用的笔:

Paul C. Fisher and his company, the Fisher Pen Company, reportedly invested $1 million to create what is now commonly known as the space pen. None of this investment money came from NASA's coffers -- the agency only became involved after the pen was dreamed into existence. In 1965 Fisher patented a pen that could write upside-down, in frigid or roasting conditions (down to minus 50 degrees Fahrenheit or up to 400 degrees F), and even underwater or in other liquids. If too hot, though, the ink turned green instead of its normal blue.

在测试之后,NASA 订购了 400 支 Fisher 笔,总共花费在一千美元以下。俄罗斯在一年之后也开始订这种笔了。Fisher 公司目前仍然在销售这种太空笔,并且你可以很方便的买到:Amazon上30 来刀,甚至还有一个一看就不是官方网站的中文官方网站