Linus Torvalds在Google Talk上做的git演讲

这是2007年的演讲,但是仍然值得一看。 git一直有对初学者不友好的名声,主持人一开始就调侃了一句: It was especially designed to make you feel less intelligent than you think you were. git最初被设计用来管理Linux内核,而Linus作为内核负责人,当然是以方便自己使用的角度出发来设计git。 Linux说出了自己对版本管理的三点要求: If you are not distributed, you are not worth using. If you perform badly, you are not worth using. If you can not guarantee that the stuff I put into the SCM come the exactly the same. You are not worth using. 为什么像CVS这些集中式的版本管理工具无法用来管理Linux内核呢?Linus给出了答案,主要是因为没有去中心化。...

June 19, 2014

使用pip来管理python软件包

一直以来都是用easy_install来按照python的软件包,虽然不太喜欢,但是也勉强能用。今天重新安装了python,于是切换到了pip,只要敲打三个字母,顿时觉得简单了许多。 pip官网上列举了一大堆优缺点,对我来说主要有两点: pip可以卸载之前安装过的包 pip不支持easy_install的egg打包格式,而是使用新的wheel打包格式 不管如何,既然是人家推荐的,照着用就是了,关键是学习怎么用。 参考pip的安装文档: 具体请参考Python Packaging User Guide的Installation Tool Recommendations。以后的Python软件包的流行玩法是用virtualenv或pyenv创建虚拟的环境,用wheel打包,用pip管理安装。 P.S. 好多python软件包都托管在Bitbucket上啊。 更新: Cygwin下面需要安装libuuid-devel和binutils这两个包之后才能成功安装pip。更新: Python 2.7.9的Window安装包自带pip 

May 26, 2014

GnuPG上手指南

这是很多年前写的一篇文章了。 GnuPG全称GNU Privacy Guard,它是基于公钥/私钥体系的加密工具PGP(Pretty Good Privacy )的开源版本它遵循OpenPGP标准。你可以免费使用,自由传播,并可以获得它的源代码。可以用于对Email、文件及其他数据的加密与验证,确保通信数据的保密性、完整性和真实性。 PGP原理及规则 在介绍GPG前,先让我们看看PGP的基本原理及应用规则。 PGP使用双密匙来加密数据。每个使用PGP加密技术的人都要创建一对密匙,一个叫做公匙,另一个叫做私匙。公匙可被广泛传播,你可以贴在自己的网页上或发到专门的公钥管理网站上等等。私匙属于个人信息,绝不应该泄漏给其他人。 公匙和私匙相互作用对数据进行加密及解密。被公匙加密的数据只能被私匙解密,被私匙加密的数据也只能被一个公匙解密。这样就可以实现双重认证。 例如,A要给B发信息: A不想信息被其他人看见,怎么办? 首先A必须通过某些途径得到B的公钥。在发送信息前,使用B的公匙对信息进行加密。这样只有B用对应的私匙才能解密收到的信息。所以就保证了信息传输的安全,这就是PGP所谓的加密(encryption)与解密(decryption)。 B收到信息后如何确定这信息是A发的呢? 首先A必须通过某种途径把自己的公钥发给B。在发送信息前,A先用自己的密钥加密信息。B收到信息后就可以使用A的公钥来对收到的信息进行验证。这样就能确定信息来自A,这就是PGP所谓的签名(signature)与验证(verification)。 如何使用GnuPG来生成自己公钥/私钥 你首先要创建一个自己的密钥对,使用如下命令: 期间会要求你输入个人信息如用户名,邮件地址,注释等,最好选有意义的。最后会让你输入passphrase(口令),这就是咱们通常意义上的密码了,解密和签名时都用得着的,按设密码的一般规则设就行了。除了那些Yes/No的问题,其他选项大可直接回车默认。 这里假设我们生成了一个名为foooo的用户: 接着你便可以使用下面的命令导出自己的公钥了 下面是文本形式公钥的一个例子 现在你就可以把你的公钥传到网上或发给别人了。 获得别人的公钥之后可以使用下面的命令把公钥导入自己的钥匙圈 如何使用GnuPG来加密/解密 你有一个文件beloved.txt要加密后发给你的GF,首先你得有GF的公钥,假设GF的公钥的用户信息为 加密命令如下–recipient选项指定接受者,也就是你要用谁的公钥来加密。在GnuPG里面指定公钥或私钥可以使用该公钥或私钥的用户名、注释、邮件地址等。可以只输入一部分,但要唯一,GnuPG会查找用户列表来找到所需的公钥。 比如,使用邮箱地址来指定密钥 当然GnuPG还可以通过其他手段来指明你要使用哪个公钥或私钥,具体请参看GnuPG的文档。 现在可以把加密后生成beloved.txt.gpg或beloved.txt.asc文件发给你GF吧。 你的GF收到文件后,必须使用自己的相应的私钥来解密,命令如下 这个过程需要输入passphrase。 如何使用GnuPG来签名/验证 那么你的GF如何确定这信息是你发的呢?这就涉及到签名与验证了。你发送beloved.txt的时候可以使用自己的密钥给beloved.txt加上签名。签名实际上就是用自己的私钥给文件加密,但是你的公钥是公开的,持有你公钥的人都可以解密你签名的信息。签名的时候要用到passphrase。 签名的过程如下 这样你就可以把beloved.txt.gpg或beloved.txt.asc发给你的GF了。 持有你公钥的人使用下面的命令来验证和还原信息。 此外还有两种签名方式,一种是 这种签名方式主要用于文本,将签名信息附在文本内容的后面,验证时只要把该文件做参数就行了 这是用–clearsign方式加密后的例子 另外一种是签名方式是生成单独的签名文件 验证的时候需要要原文件和签名文件,命令如下 参考:...

May 21, 2014

初识Node.js

前些天使用到了一个Javascript库,需要用到Node.js,于是顺道了解了下Node.js。 Node.js创始人Ryan Dahl在JSCON上的演示文稿中说Node.js是 Evented Server-side Javascript 即Node.js可以使你用Javascript在服务端以事件驱动的非阻塞IO模型进行编程。基本上任何语言都可以使用这种模型编程,那为什么Node.js如此特殊呢? Node.js是一整套Javascript的运行时环境,它基于Google Chrome的V8引擎。V8是一个性能出色的虚拟机,扩展性良好,这基本上保障了Node.js的品味。通过V8的扩展性,Node.js为Javascript添加了许多系统级的API,使得Javascript与Ruby那样全面的编程语言更加接近。 可以说Node.js是前端工程师的福音,他们可以迈向所谓的full-stack工程师。 我觉得Node.js可能会遇到的问题: V8并不是为服务端应用优化的,可能会有些影响性能的问题,比如垃圾收集策略会影响Node.js的大文件服务请求。 Node.js采用单线程模型,在多核CPU时代不知道能否吃得开 总之,Web应用类型那么多,Node.js可以试水的地方应该是很多的。

April 21, 2014