最后更新于 .

一.美化你的bash
每次在进入一个很长的目录的时候,光标都会变得很靠右,很丑陋:

1

今天同事给了一段配置:

export PS1="\[\e[36;1m\]\u\[\e[0m\]@\[\e[33;1m\]\h\[\e[0m\]:\[\e[31;1m\]\w\[\e[0m\]\n\$ "

写入.profile后,会变成如下的样子,效果不错,哈哈:

2

二.在python中使用soap -- suds
今天需要通过soap来给RTX的其他用户发消息,于是研究了一下python中的soap包。
先是发现了SOAPpy,包括Dive into Python都推荐了这个包,不过经过我的试用之后,发现打死都显示不了任何数据,于是我搜啊。。终于在某个不起眼的角落看到了这样一段话:

Unfortunately, at the moment, I don't think there is ...

最后更新于 .

因为下周要用php写项目,所以周末在家里重新看php的语法,看到三元描述符,突然想起来python是没有三元描述符的,印象中依稀记得有模拟的实现,于是上网上搜了一下。
(对应C语言的 X ? V1:V2)
找到一篇文章:http://blog.csdn.net/xiaoyin992/archive/2008/12/29/3635015.aspx
其中一种是:

(X and V1) or V2

正常情况下是不会有错误的,但是文章中也提到了,当V1=""时,就会有问题
比如

print (True and '') or 'V'
print (False and '') or 'V'

输出永远都是: V

完美的解决方案是在《python核心编程中提到的》:

V1 if X else V2

原文如下:

如果你来自 ...

最后更新于 .

出于种种原因,最近感觉还是在自己机器上装个linux写程序靠谱些,毕竟总是VPN到公司内网速度也太慢了。
本文最终实现了:

1.在windows下用virtualbox安装了ubuntu7.04命令行版
2.ubuntu能够与主机(即windows)共享网络
3.在windows下可以直接ssh到ubuntu上

遗留问题(详见文末):

1.ubuntu与主机共享文件夹失败
2.rz/sz命令安装失败

先截图如下(putty中的截图):

putty

OK,我们一步步来说:
一.VirtualBox安装
    1.到http://www.virtualbox.org/wiki/Downloads下载windows版本
    2.一路点击next,出现不兼容提示框,直接继续即可。
二.Ubuntu安装
    1.选择安装命令行的版本,安装即可
    2.设置root密码。ubuntu的root默认居然是不启用的,需要在启动的时候,按ESC进入recovery模式,会自动以root权限登录 ...

最后更新于 .

最近心情不错,所以就卖力的为Vim多更新几篇吧~
写在前面:

    最近渐渐发现对Vim的强大有了更新的认识,以前Vim无非只是为了满足打字如飞的需求,然后是方便的写程序,最后是干什么都想在Vim里面。
    其实到了最后一步,Vim本身的概念已经被淡化了,他开始代表一个终端,或者叫做平台,一个你和外界交互的平台--不管是用来看《糗事百科》(参看本博插件),还是用来写twitter,或是用来收发邮件,Vim本身一直在履行一个平台的职责,而它与各种脚本语言的完美集成帮助他能够更好的完成与外界的交互。
    但是话说回来,这是有一个渐进的过程的。
    其实我并不推荐初学Vim就想把Vim打造的跟VS一样,那样你还不如去用VS。Vim最核心的理念是,你要用键盘,而不是鼠标。它让你打字如飞,让你效率成几倍的提高,这才是他最初始的功能。
    而之后的功能,实际上是Vimer们对Vim不断的要求而制作的。
    为什么需要那些功能呢?因为对Vim的依赖,最终你会依赖上这个编辑器,因为他几乎能做一切你想做的事情,是的,你可以写插件在Vim里面看邮件,可以写插件用Vim写twitter,甚至我看过Vim的像素播放器!
    OK,随便说几句,可能不一定对,但是只是基于我自己用Vim的经验而已。


好啦,进入正题,介绍一下这个用来写twitter的Vim插件-TwitVim
http ...

最后更新于 .

今天在进行CGI外网部署的时候,出现一个很奇怪的问题。
先说明一下背景:
在webserver上的一个CGI-A会通过libcurl来访问另一个webserver上的CGI-B,并将调用的结果返回给前台。
问题的表现:
前台看到是CGI-A超时,抓包发现在调用CGI-B的时候,http请求正常返回,但是时延达到1s左右。
但是当在浏览器直接输入CGI-B的链接的时候,就在40ms之内即可返回。

具体抓包如下:
命令:

sudo tcpdump -s 0 -nX host [ip] -i eth1 -w data

libcurl调用CGI-B:

http://www.vimer.cn/wp-content/uploads/2010/09/data_err

浏览器直接访问CGI-B:

http://www.vimer.cn/wp-content/uploads/2010/09/data_suc

在wireshark中仔细的对比了请求包,发现只有两个地方不同:

libcurl调用CGI-B:

1

浏览器直接访问CGI-B:

2

但是当时怎么也没有想到居然真的就出在了gzip的问题上。

后来总监过来看了一眼,注意,就一眼!(果然姜还是老的辣啊),就说 ...

最后更新于 .

好吧,我承认我又无聊了---说白了就是在终端Vim中列出所有的256颜色,用来供配色方案选择。
废话不多说,先上截图如下:

1

哈哈,感觉还是不错吧,这样就可以慢慢选择啦。
下载链接:http://www.vim.org/scripts/script.php?script_id=3235
安装要求:

1.vim编译了python支持
2.机器上安装了python

调用方式:
把showcolor.vim放到plugin目录下,执行:

:call ShowColorTerm()

当然,上面这个命令是只准在终端下执行的,在gui下执行会报如下错误:

2

另外,插件也实现了gui下的颜色显示,截图如下:

3

调用方式:

:call ShowColor(0x00,0xFF,15)

三个参数分别是:起始颜色,终止颜色,每行颜色个数。
有3个参数的原因是,因为全部列出所有的配色是不可能的(即使用python,vim也会卡死),所以必须指定范围。

列出代码如下:

function! ShowColor(beginColor,endColor ...

最后更新于 .

最近因为python升级到了2.7导致mod_python不能用,所以自己电脑上的apache一直启动不起来,趁着周末有时间,抓紧搞一下。 在网上搜了一下,发现mod_python已经停止维护了,而替代他的是mod_wsgi,下载路径如下: http://code.google.com/p/modwsgi/downloads/list 挑选For 2.7的版本下载,改名成mod_wsgi.so,然后扔到apache的modules目录就可以了。 在apache的conf文件中加入:

LoadModule wsgi_module modules/mod_wsgi.so

OK,但是我们真正的安装才刚刚开始。 刚才说过由于python升级到2.7,之前所有的库都删掉了,所以不得不重新安装,需要准备好如下库。

最后更新于 .

相信沉迷于Vim(gVim)的朋友,都或多或少纠结于Vim(gVim)的配色,别人配置的永远感觉不完美,像我之前就用过desertex,wombat,等等配色,不过终究还是感觉不满意,总想自己修改一下,但自己配置起来又麻烦。。
之前在博客中有介绍过将gVim配色转化成终端配色的插件:
强烈推荐–将GUI配色转化为终端配色的VIM插件–gui2term.py

解决了gvim和vim配色一致的问题,这次介绍的插件colorsel.vim则是解决了可视化的选择配色,让调整配色变得更简单。
下载链接:http://www.vim.org/scripts/script.php?script_id=927

先上截图如下:

1

简单看一下介绍应该就能明白:
RGBHSV的数值是可配的,通过j、k实现选择,通过h、l、w、b来实现数值调整。
x可以将背景色分成上下两屏,进行对比,如图:

2

X可以切换调整前景色、背景色,
/可以输入自己定义的前景字符串,
f可以调整字符串的格式(正常、斜体、粗体、粗斜体)
如图:

3

y可以copy调整好的RGB值,
p可以粘贴从别处copy的RGB值 ...

最后更新于 .

最近在修改一个代理机server,增加url rewrite的功能,由于其单机的访问量很高,20000/s左右,对性能要求很高,所以在做url映射的时候,纠结在用map还是hashmap存储映射的问题上。

于是做了一个简单的测试,对与map和hashmap(我们用unordered_map),循环10000*24次,map大小是12(因为目前预估会配置的url个数是12左右)。
部分代码如下:

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include "markupstl.h"
#include <tr1/unordered_map>
#include <sys/time.h>
using namespace std;
#define hashmap std::tr1::unordered_map
#define CONFIG_FILE_PATH "./urlconfig.xml"
map<string,string> g_mapUrl;
hashmap<string,string> g_hashmapUrl;
struct timeval ...

最后更新于 .

记得刚入职的时候,那时候什么都不懂,组长让我跑个迁移程序,还没跑完就关终端走人了,结果可想而知,那是第一次知道守护进程的概念。
当时后来是加了nohup参数解决的,

nohup ./program &


但是总是强迫别人用nohup来启动自己的程序毕竟不是办法,所以还是要把自己的进程变成守护进程才行。

C/C++的版本就不说了,这里有篇文章写的很清楚。
http://colding.bokee.com/5277082.html

这里主要介绍一下在网上无意发现的一个国外哥们的写的python版本:
http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
顺便吐个槽,这哥们用的Vim配色明显是Wombat~~
代码如下(对私有函数名加了_前缀,便于理解,并加了一定的注释):

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, os, time, atexit
from signal import SIGTERM
class Daemon:
    """
    A generic ...