Archive for July, 2010

这是什么网络问题啊!

July 20, 2010

最近几天发现自己的机器每次开机1~2天之后就上不了Google了,而旁边的机器都还能上。所以可以排除是GFW引起的问题。

发生这种情况之后如果我想上任何google网站(搜索,邮件..),必须重启机器。不光光是浏览器上不了google,任何网络工具都不管用!wget/nc/telnet/lftp/curl,每个都报Connection timed out。只有非常偶尔的情况下这些命令行的工具可以把google的主页抓回来。不知道是什么原因引起的:-(

我试着分析了一下tcpdump抓的包,我用wget http://www.google.com去连google,常常会出现这样的情况:我的机器发一个Syn,然后google会回一个Syn+Ack,然后我的机器会发Rst。如果在旁边的机器上试的话是不会发这个Rst的,而是发Ack。

我的机器上好像也没有装什么防火墙,怎么会出这种状况呢?而且不是一开机就出,每次开机过二十多个小时后才出?

在 shell脚本里使用Abstract Factory的设计模式

July 20, 2010

在不同的平台下,我需要定义一个函数,of,其作用是在命令行下用系统定义的图形程序打开某个文件或URL。

比如,of .在Windows平台下应该用Explorer打开当前目录,而在Linux平台下应该用nautilus打开当前目录。

我需要一个工厂虚类,其实就是文件。在linux下,这个工厂有一个实类,同时也有一个对象,那就是我的.bashrc-linux;而在Windows下呢,那就是我的.bashrc-windows。哦,不好意思,我在Windows下在用的是Cygwin。所以也可以使用bash。

在.bashrc-linux这个工厂里,我们这样创建of

function of() {
    gnome-open "$@" > /dev/null 2>&1
}

而在.bashrc-windows这个工厂里,我们这样创建of

function of() {
     gnome-open "$@" > /dev/null 2>&1
}

在.bashrc里,我们这样决定要用哪个工厂:

if test `uname` = Linux; then
    factory=~/.bashrc-linux
else
    factory=~/.bashrc-windows
fi

然后,我们让工厂去创建我们想要的对象:

. $factory

哈哈,设计模式有何难哉!

设计模式123

July 20, 2010

今天重温了一下Desing Pattern (GOF)的前三种:Abstract Factory,Builder,Factory Method。

大意如下:

  1. 如果你需要处理不同的对象家族谱,用Abstract Factory。举例:你需 要创建三种对象,爸爸虚类,妈妈虚类,小二虚类,按照情况,实际创建的时候必 须用某种实类,如李家爸爸实类和张家爸爸实类。

    这里就可以定义一个工厂虚类了。针对两个家族,定义李家工厂实类和张家工厂实 类。工厂虚类里定义三个函数,分别是创建爸爸,创建妈妈,和创建小二。

  2. 如果需要一步一步地创建对象,用builder

  3. 如果需要由子类来创建对象,用factory method. 特别注意一下CreateFooBar 这样的函数,很有可能就是在使用factory method.

同时往多个博客上发帖子

July 15, 2010

呃,weblogger.el还支持这样的功能啊,真是太强悍了!

你可以上这两个地方看: csdn 或者live space

unmarkdown程序

July 14, 2010

用markdown来写博客无疑方便很多,不用太操心格式的问题。python有个库叫 python-html2text,这个可以用来做unmarkdown,但是不能直接调用这个库:

python /usr/share/pyshared/html2text.py

这样是不行的,会有根据终端大小进行断行。所以我们自己写一个封装,名字就叫unmarkdown:

#!/usr/bin/env python
import html2text, sys
data = sys.stdin.read().decode('utf8')
sys.stdout.write(html2text.html2text_file(data, None, '').encode('utf8'))

再在weblogger的hook里做一些设置,发表文章之前做一下markdown,编辑文章之前做一下unmarkdown,爽!

有一点要特别注意的是,code block不要放在一开始的位置。也就是说,不要一上来就贴代码,这样做会导致格式弄乱,python-html2text里可能是有一个bug。

用Eva在Linux下上QQ

July 12, 2010

比腾讯自己出的Linux版QQ不要强太多哦

腾讯太弱了