由《金蝉脱壳》到《习惯的力量》

最近看了施瓦辛格的两部电影,《背水一战》和《金蝉脱壳》。

施瓦辛格的电影之前能叫的上名字的,只有《终结者》系列,和一部想不起剧情和名字,关于大力神的电影。一直以来对他的印象就是肌肉男+前州长。但看完《背水一战》却让我眼前一亮,因为年老的施瓦辛格脸上竟然有些许伊斯特伍德的影子。爱屋及乌,也对这个虽然年轻十七岁,但也有六十六高龄的老头子忽然心生好感和敬意。

说了这么多施瓦辛格,但史泰龙才是这部电影的男一号,论年龄,他还比州长大了一岁。史泰龙在电影里扮演的是一个越狱专家,他无时无刻不在观察着周围的环境,寻找哪怕是最隐蔽的薄弱点,然后用各种技能逃生。在他所有的技能中,最出色的的一项是对人的观察,就像一架机器一样不偏不倚的从周围人们的行为中找出他们的习惯,找到了这些习惯,也就意味着找到了逃出生天的法门了。

习惯的力量有这么大吗?电影毕竟只是电影,很多地方经不起推敲。

很巧的是,我刚好在昨天看完了一本书,叫《习惯的力量》,这是一本值得一看的书。并没有类似习惯决定性格,性格决定命运的老套警句,而是以大量的科学实验为依据,讲述了习惯的产生的原理,习惯对人的影响,以及怎么养成或破坏一个习惯。

在CentOS6.2下用virtualenv分别创建python2.7.6和python3.3.2的应用

本文主要内容参考自:

http://toomuchdata.com/2012/06/25/how-to-install-python-2-7-3-on-centos-6-2/#comment-5691

使用Python,一个绕不过去的问题,就是其版本繁多的问题。首先是版本选择问题,这个不在我们讨论的范围之内,官网上在显眼的位置做了一些说明和建议:Python2 or Python3。

这里我们假设知道自己该选哪个或哪几个版本了。这里就会遇到第二个问题,python在linux中属于基础组件,各发行版会默认安装一个python,例如CentOS5.5中的是2.4.3,而CentOS6.2中是2.6.6.

以CentOS6.2为例,在/usr/bin目录下有一个python和一个python2.6.这两者有什么区别呢:

[root@vps1 ~]# ls -l /usr/bin/python
-rwxr-xr-x 2 root root 3592 Dec 7 2011 /usr/bin/python [root@vps1 ~]# ls -l /usr/bin/python2.6 -rwxr-xr-x 2 root root 3592 Dec 7 2011 /usr/bin/python2.6

推倒重做

这几个月一直在做一个基于FastDFS的分布式存储系统,从前期调研、测试到后面的设计、编码、测试等。其中设计部分,每个环节都和当时带我的一位哥们讨论过,时而愁眉不展,百思不得其解;时而一拍脑袋,找到一个很巧妙的设计方法。已经有两个月没有什么大的改动了,上周实在无聊,就把我当时赶工写的,现在看来不堪入目的代码进行了重构。

一切看起来很美好的样子,只是看起来。

部门的开发主要分为后台组和系统组,我属于系统组,主要职责是做底层linux c方面,譬如nginx模块开发,存储系统开发等;后台组的职责就是要能从web上和我们的系统对接,在更高层面上进行管理,一方面是为了便于公司内部系统的部署和监控,另一方面也是为了和客户对接。

关于proxy_pass的参数路径问题

由于工作需要,开始分析nginx的proxy模块,在分析之前,当然要先会用了。于是开始熟悉该模块的一些指令,其中最基本的指令要属proxy_pass了。nginx的英文文档总是看着感觉有些别扭,于是按惯例先google了一些文章。

这一搜,就掉进坑里了。

这些文章里都把proxy_pass的目标地址是形如“127.0.0.1:8090”和“127.0.0.1:8090/”分开讨论,认为后者“/“的作用是删除url中匹配的部分,然后再讨论目标地址中带了uri的情况。

其实根本没这么复杂,只有两种情况:

(1)目标地址中不带uri。即proxy_pass的参数形如”http://127.0.0.1:8090"。 此时新的目标url中,匹配的uri部分不做修改,原来是什么样就是什么样。

(2)目标地址中带uri。即proxy_pass的参数形如“http://127.0.0.1:8090/dir1/dir2"

利用here document携带c代码

假设你想通过一段脚本调用make来编译代码,并且在脚本中将一些编译需要的系统信息传递给makefile,可以通过bash的here document来实现。例如:

tmp_src_filename=fdfs_check_bits.c  
cat <<EOF > $tmp_src_filename  
#include <stdio.h>  
#include <unistd.h>  
#include <fcntl.h>  
int main()  
{  
        printf("%d\n", (int)sizeof(long));  
        printf("%d\n", (int)sizeof(off_t));  
        return 0;  
}  
EOF  
  
gcc -D_FILE_OFFSET_BITS=64 -o a.out $tmp_src_filename  
output=$(./a.out)