2005-12-31

HELLO MY BABY lyrics (Phish) ♫

Hello my baby, hello my honey
Hello my ragtime, summertime gal
Send me a kiss by wire, by wire
Baby, my heart's on fire, on fire
If you refuse me, honey, you lose me
And you'll be left alone, oh baby
Telephone, and tell me, tell me
Tell me I'm your very own, ohhhh

Hello my baby, hello my honey
Hello my ragtime, summertime gal
Send me a kiss by wire, by wire
Baby, my heart's on fire, on fire
If you refuse me, honey, you lose me
Then you'll be left alone, oh baby
Telephone, and tell me, tell me
Tell me I'm your very own
Tell me that I'm your own

Read more at phish.lyrics-songs.com/...

2005-12-29

这套小游戏好玩


Simon Tatham's Portable Puzzle Collection”收集了很多耐玩的小游戏,都可以同时运行在*nix/Windows/Mac OS X中,而且还移植到了Palm上。太棒了,我可以在所有这些平台上玩一样的游戏了,呵呵。
补充:在Debian里,可以直接sudo apt-get install sgt-puzzles安装该游戏包。

完蛋,freebsd.org已经被!@#$,mozilla.org好像也要不行了

最新消息,freebsd.org已经不通了,mozilla.org在某些地方也已不通,gnu.org有时下载文件也会出问题……

Orz

在firefox上共享文件,那会有多妙

这两天关于这个firefox上的P2P插件的消息满天飞,今天又顺着slashdot的链接过去看看看……呵呵,又有一个被slashdot攻击的网站诞生liao:
Sorry, the good news is that we have been slashdotted...
The bad news is that our main server is down...

Please try our mirror site or come back later !

We apologize for the trouble.

这说明大家都很期待这个神奇插件的诞生,呵呵。期待在浏览网页的时候,可以随时跟朋友共享自己的上网经历、有趣的文件、图片、网页,这感觉肯定会很妙的。

2005-12-23

XChat-GNOME翻译完毕

这两天上班的事比较琐碎,而且感觉比较累,想休息休息,所以有机会就抽空 翻译 一下 XChat-GNOME 。托Rongjun Mu的福,我要翻译的部分实在已经很少了;所以在扫荡光了未翻译的条目后,又校对了一遍,疏漏应该相对少多了。有时间的朋友请帮忙再校对一下,谢啦。按照 GTD 做完第一件事,很开心,给自己记下一笔 :)

另外,这个翻译用的 rosetta 系统确实不错;从UI和URL上看来,应该是基于 Zope3 开发的。除了偶尔有点慢、偶尔会提交出错以外,用起来还是很方便的。可惜暂时还不会开放源码,而且项目大都是 ubuntu 相关的;不然在国内搞这么一套系统,就可以把很多亟需翻译的项目都很快的组织起来,让大家翻译PO、文档就像在线制作“ 文泉驿 ”字体一样方便。关注一下,看它准备什么时候把代码放出来。

Read more at xchat-gnome.navi.cx/

Python创始人Guido van Rossum去Google工作了

说Google在网罗全世界的IT精英,真的一点都不为过。希望中国也会出现像Google这样的公司,也许我们一起努力,10年之内“Google的中国版”公司能够出现?

Read more at www.oreillynet.com/pub/...

在 GNOME 里养小鱼(彩蛋)

上次看到OOo的彩蛋,这次又有GNOME的彩蛋。没事看看小鱼在面前游来游去,生活也会变得有生气起来。

GNOME彩蛋的启动和退出方法:使用 Alt+F2 打开“运行”对话框,输入free the fish并回车,开始养鱼;在小鱼身上点鼠标左键或右键,赶小鱼出家门。

OOo彩蛋的启动方法:在 OOo2 calc任意一个格子中输入=GAME(”StarWars”),然后回车。

Read more at www.gnome-cn.org/newsit...

2005-12-22

快换SHA吧,MD5真的不能再用了

“md5 已经能够在很短的时间内被破解...”这下原来还存着侥幸,认为之前的论文只是理论研究成果,现实世界里MD5还是很安全的人们没有话说了吧。演示算法能45分钟破解MD5,足够让每个人都警惕了。要是觉得SHA1也不行,也可以试试HMAC,基于RFC2104的算法。换了换了,我先去查查自己的代码里有什么地方用MD5……

Read more at plog.longwin.com.tw/pos...

备案大限到期,FreeBSD中文站遭殃

据可靠消息,由于没有进行备案,freebsd.org.cn被有关方面关闭。由于最近刚刚进行过数据备份,网站资料没有遭受损失。目前该网站维护人员正计划迁移到海外主机。

2005-12-21

Wikipedia Founder Edits Own Bio

最近这几天关于Jimmy的事真是连续不断呀,这都怎么了?是不是上次BBC报道过后,大家都盯上Wikipedia、盯上Jimmy了?Slashdot有人提到了Jimmy编辑过自己在维基百科上的自传曾经有18次之多,指责他违反了编辑自传的原则。不过,我也持一些评论的网友的意见:如果有人恶意修改你的自传,加上些莫须有的东西,你都必须袖手旁观,这样才算中立,才算客观吗?要是非得那样那才是真见鬼了呢。那个原则,也确实只是SHOULD BE,而非MUST BE,不是强制性原则:

This page is considered a guideline on Wikipedia. It illustrates standards of conduct, which many editors agree with in principle. However, it is not policy.

另外,指责还包括另外一些道德上的事,比如Jimmy抹掉了Larry Sanger也是共同创始人的部分;并修改了Bomis.com的部分,据说那是一个色情图片网站。如果Larry是维基百科的共同创始人的话,那就是事实;这个事实也就不会因为Jimmy的自传里没有提到就混淆不请了。关于Bomis.com,厄,等有时间再研究吧;不过按照Slastdot上网友的考证,Jimmy修改之后的描述也许更恰当一些。更详细的讨论,还是请诸位朋友去看Slashdot吧。

Read more at slashdot.org/article.pl...

2005-12-20

NewsForge | IT management in Asia

看看亚洲的兄弟们多么艰苦呀:
Managing an IT concern in Asia presents its own special set of challenges in addition to those faced by CIOs in other parts of the world. When asked what his worst nightmare scenario might be, Kim Carter, CEO of Carsena Technology Services in Thailand, responded, "The first thing I hear in the morning is: 'Hey, Boss, the server's down.' 'Then reboot it!' 'Can't, boss, the power's out, too.'"
LOL
据说国内一些互联网公司也基本处于这个水平。

Read more at business.newsforge.com/...

听Google工程师讲讲“性能的代价”

相比较国内粗放的项目开发,Google公司的工程师真是像在做博士论文的课题呀。Google的首席工程师Luiz André Barroso在 ACM Queue 发表了“ The Price of Performance ”,这里是“ 胡说袋鼠 ”翻译的 译文 。我在想,是不是中国也该培养点IT方向的清算师,帮我们算算自己公司里的糊涂帐。

Read more at spaces.msn.com/members/...

2005-12-19

谣传?维基百科创始人Jimmy Wales遇刺身亡?

Jimmy遇刺身亡?第一感觉就是--谣传。但愿如我所想。

Read more at hopesome.com/archives/6...

del.icio.us的官方解释来了

del.icio.us对最近事故的官方解释如下:

Due to the power outage earlier in the week, we appear a number of continued hiccups. We've taken everything offline to properly rebuild and restore everything. I apologize and hope to have this resolved as soon as possible. Thank you for your continued patience.

Updates will be posted on our blog as we have them.


不过我访问他们的blog有点问题,始终连不上。恩,此刻访问他们blog的人肯定不少。

Read more at del.icio.us/

C语言的代码检查及单元测试

最近写C比较多,不过C的单元测试一直也没做起来,只能用shell写一些功能测试顶上了。先把找到的一些资料放着里,回头再研究吧。有那位朋友有C Unittest的经验,给提点建议吧。

检查内存泄漏
http://www.gnome.org/projects/memprof/
http://valgrind.org/

代码安全性审计
http://directory.fsf.org/devel/build/RATS.html
http://www.dwheeler.com/flawfinder/

C语言单元测试
http://simplectest.sourceforge.net/index.php
http://gethos.net/opensource/cunit.php
http://www.recursism.com/s2004/zp/products/gnu%20autounit
http://cutest.sourceforge.net/
http://check.sourceforge.net/
http://www.falvotech.com/projects/cut.php
http://sourceforge.net/projects/cut
http://cunit.sourceforge.net/
http://c2.com/cgi/wiki?PoorMansTestingFramework

备份有多重要

即使是自己最信赖的服务,也会有出错的时候。航天飞机都不能幸免,何况del.icio.us呢:
del.icio.us is down for emergency maintenance. we'll be back as soon possible.

还好我前些日子把自动备份加到crontab里了,阿弥陀佛:
0 23 * * * curl --user myuser:mypassword -o /home/xyb/netbackup/delicious-xyb.xml http://del.icio.us/api/posts/all

每天一备,再加上Simple Backup,我基本上可以回朔到前一两个月的任何一个版本了。欧耶~
这事让我又温习到的一个教训是,该出事的总会出事。还有,对一个服务太依赖了不好:如果有很多理由离不开它,那最好在“上瘾”之前先确定一下,它是不是提供了良好的备份支持或者后背方案。

2005-12-18

SSH穿梭机

许多人都经常在Linux/UNIX/*BSD的系统中来回穿梭,这是他们的日常工作,是养家糊口的方法。我也是其中的一员。在系统中跳来跳去、来回登录、传输文件,是挺烦人的;为了减少点麻烦,让日子过得更舒服一些,大家都积累了一些小手段,让事情变得更简单一些。今天记录一下我自己做这些事的方法。我的系统是Debian,下面也以它来讲解;但在其他的大多数系统中也都差不多,Windows系统则可以通过Cygwin来得到下面的这些程序。

一般来说,这些系统都是通过ssh来维护的;要使用它,得先安装openssh-client:
sudo apt-get install openssh-client

然后为自己创建用来进行登录认证的密钥,它可以帮助我们在登录时更安全和方便,也可以让一些工作实现自动化:
test -d $HOME/.ssh || mkdir -m 0700 $HOME/.ssh
ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -b 2048

在创建过程中,要输入两次passphrase。passphrase是只有主人知道的密码,是密钥的最后一层安全屏障;有了它,即使你的.ssh/id_rsa文件被人偷走,盗贼不知道passphrase也一样不能冒用。

不过passphrase带来的一个问题是,每次使用密钥之前都要被提问,但ssh-add可以解决这个麻烦。不过我一般不直接使用ssh-add,有了更方便的Keychain,还可以更省心一些。安装Keychain:
sudo apt-get install keychain ssh-askpass

其中ssh-askpass是用来提问passphrase的小程序。也可以选择安装ssh-askpass-fullscreen或者ssh-askpass-gnome。然后
mkdir -p $HOME/.keychain

并把一下语句放入自己的shell rc。比如我是用bash,则加入~/.bashrc:
keychain ~/.ssh/id_rsa
. ~/.keychain/${HOSTNAME}-sh

这样,可以在第一次登录shell的时候,自动加载密钥,而后就再也不会提问它了。

至此我自己的工作环境就准备完毕了。为了登录到其他主机,还需要把密钥放入主机的~/.ssh/authorized_keys文件中。我通常使用下面的脚本来做这个工作:
#!/bin/sh
#sshpubkey.sh
#Here's a little one liner that'll do the trick (for passwordless auth) after you've done the ssh-keygen:
target="$1"
ssh "$target" 'test -d .ssh || mkdir -m 0700 .ssh ; cat >> .ssh/authorized_keys && chmod 0600 .ssh/*' < ~/.ssh/id_rsa.pub

给要访问的主机添加认证时,只需执行:
sh sshpubkey.sh xyb@my.host.com

就自动设置完毕了。

下面我们就可以开始工作了。要登录它,就:
ssh xyb@my.host.com

要上传文件时,执行:
scp -r mydir/ xyb@my.host.com:/path/to/save

要下载文件时,执行
scp -r xyb@my.host.com:/path/to/ mydir

这样就方便很多了。

不过,有些文件可能经常需要更新。比如,我喜欢在自己的机器上编写程序,然后在另一台主机上编译和调试。所以,我需要有个工具能帮我把文件和目录“同步”到主机上去。这是lftp的长项:
lftp -c "open sftp://xyb@my.host.com; mirror -R /my/dir /path/to/dir"

这一条命令就把数据从我的/my/dir目录“镜像”到了远程主机的/path/to/dir了;而且聪明的lftp会自动判断那些文件是被修改过的,它只更新那些新文件。实际上,我更喜欢这样使用:
lftp -c "open sftp://xyb@my.host.com; repeat 2 mirror -X '*.swp' -v -R /my/dir /path/to/dir"

这条命令会把我的目录每2秒向远程主机同步一次,同时显示它做过那些更新,并忽略所有.swp文件:那是我的编辑器vim创建的临时文件。这样,我就可以放心的编辑我的源代码,每次保存的新代码,至多2秒钟之后就会出现在我的调试主机上了。是不是很方便呢 :-D

2005-10-31

维客中国,你真的明白GFDL吗?

今天一到公司,就看到一个好消息:维基百科遭遇的第三次封锁今早终于解除了!庆贺一下。

不过也听到了一个不好的消息,维客中国由于被“骇客”攻击,决定关闭网站。说实在的,这件事情可真够乱的:
  1. 正如维基百科的雪鸮所言,感觉“目前中国做互联网的人没有几个了解GFDL的人,看方东兴的声明,他明显不了解GFDL,感觉被搜派那帮学生当枪使了,他的声明说:我们反复向发起者确认过,网站内容没有侵权。显然那帮学生没告诉他实话”。说大家都不了解不太可能,但很多人没有认真研究过GFDL和版权法肯定是实情。甚至本身知道版权问题,知道GFDL,却为了商业利益而置若罔闻、我行我素的,在国内恐怕也不是一两个、三四个这样的数量。即使今天不被骇客所摧毁,明天也要顶着违反GFDL的名声,去操作“商业运作”。难道维客中国真的就想一辈子这么做下去么?

  2. 维基百科的大部分人都反对用暴力的方法解决版权的纠纷,更不要说为了泄愤而使用骇客手段。昨天晚上一帮维基百科人在msn里聊天,大家都比较担心被误解,怕让人以为是支持这种破坏行为的。Rights在百度贴吧里的留言很好的表达了维基百科人的态度:“奉劝那些攻击者,向Wikicn与Wikipedia两方道歉吧,你们毁掉了一个网站的实体,也几近毁掉了另一个网站的声誉”。

  3. 维基百科人其实很高兴有更多的中文维基出现;如果维基百科的知识能被合法、合理的使用,我们将非常高兴。维基百科是开放的,但也是有版权的,请遵守GFDL,也即《GNU自由文档许可证》,尊重维基百科每位参与者的贡献!请每位想使用维基百科资源的朋友务必先查阅它。


另外,昨天聊天时,有一位维基百科人宣布要结婚了。当时我不在计算机旁,现在借blog,祝她婚姻幸福,白头偕老!你在维基百科做得工作真棒 ^_^

后记:2005-10-31晚,维基百科再次不能访问 :(

2005-10-17

免光驱软驱安装Debian Sarge

换工作了,到新公司一看机器,气得鼻子都歪了,没有光驱、软驱?!问了问,部门就有一个USB的光驱,但用来读光盘安装软件的话,容易出错,不太好使。看来在最近阶段,只有自力更生啦,正好演练一下免软驱、光驱是怎么安装Debian的,以前只听说过,可是没有真的做过。

从linuxsir找到了一篇不错的帖子,不过按着做了半天,发现时过境迁,想装最新的sarge还真不知道要下载那个vmlinuz才行。还算运气,乱试了半天,终于找到了,原来hd-media才是我的“真命天子”。2.4内核的安装用下面这两个文件:
ftp://ftp.debian.org/debian/dists/sarge/main/installer-i386/current/images/hd-media/vmlinuz
ftp://ftp.debian.org/debian/dists/sarge/main/installer-i386/current/images/hd-media/initrd.gz
2.6内核则要用这两个:
ftp://ftp.debian.org/debian/dists/sarge/main/installer-i386/current/images/hd-media/2.6/vmlinuz
ftp://ftp.debian.org/debian/dists/sarge/main/installer-i386/current/images/hd-media/2.6/initrd.gz
下载完了放到C:\里。

我是Windows XP系统,不过算我运气,IT的人为了部署机器方便,用Ghost克隆分区,所以C:的格式是FAT32的。好哇,这下Grub for Dos可以用了 :)
http://www.zevils.com/~matthewg/grub/grub.img
下载了,也一样放到C:\中。

剩下就是编辑C:\boot.ini,在最后增加一行,作为Grub的启动项:

c:\grub.img="grub"


好了,重启系统,在启动菜单里选grub,就出现“Grub >”提示符了。这时输入以下三条指令:

kernel (hd0,0)/vmlinuz root=/dev/ram ramdisk_size=20000 devfs=mount,dall rw
initrd (hd0,0)/initrd.gz
boot

就来到我熟悉的安装界面了,Cool!

P.S. 用vmware试了试直接往物理硬盘上装,倒是可以,就是用真实的硬件启动的时候,就找不到dev/console了;查了查网络,看来有这个问题的不只我一个,不理它了。

P.S. 装完Gnome和gdm,终于来到gdm的登陆界面。为了好看,我换主题……刚换到第三个,怎么突然就屏幕黑了??唉,从此这屏幕在X里再也不亮了,可是从硬盘灯的闪烁来看,我摸黑也一样登陆进去了,这是怎么回事,各位朋友帮忙确诊一下吧,多谢多谢!X系统的配置应该都没什么问题的,显卡、显示器都自己找到了,可怎么会在换gdm主题的时候“熄火”呢?百思不得其解,各位支个招吧,最好能恢复安装原始状态,让他自己再把正确的配置文件生成出来。

16人格的测试火起来了?

一时之间怎么blog里到处都是做测试的?不过人家对16人格的资料比较多,自己也趁机再学习学习。一看可不得了,原来自己竟然是适合做“首席信息系统执行官”的料,好哇,那位同学想请俺去当CIO、CTO的,赶紧报名了,呵呵:
ISTJ,感观型(内向,感觉,思维,判断)
主要特征:安静、严肃,通过全面性和可靠性获得成功。实际,有责任感。决定有逻辑性,并一步步地朝着目标前进,不易分心。喜欢将工作、家庭和生活都安排得井井有条。重视传统和忠诚。
常见适合职业举例:
首席信息系统执行官
天文学家
数据库管理
会计
房地产经纪人
侦探
行政管理
信用分析师

:-D

2005-07-31

用Python转换一些Unix里的时间格式

UNIX世界的时间是从1970年开始算起的,一些程序为了省事,直接把这个记录秒数的数字放到了日志等文件中。在shell里,可以用date很容易的获得这个秒数;借助awk则可以把秒数再还原成字符串。

0$ date +%s
1122802026
0$ echo 1122802026 | awk '{print strftime("%Y-%m-%d %H:%M:%S", $1)}'
2005-07-31 17:27:06


不过我的一些程序是python编写的,为了转换这个数字,我使用下面的这个函数:
import time
def epoch2str(sec):
"""convert epoch time(UNIX) to string

for example:
>>> epoch2str(1122802026)
'2005-07-31 17:27:06'
"""
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(sec)))


还有一种日期格式,TAI64,提供了一种64比特、以纳秒为最小单位的时间格式。它是与操作系统、硬件架构无关的,格式类似于“@4000000042eb9fce1a7faf0c”,主要是在Qmail的日志中比较常见。有一个叫做daemontools的软件包,它包含 tail64ntai64nlocal 可以用来在shell中把这种时间转换成更易读的格式。不过这里的重点还是如何用python来读它。有一个pytai: TAI64 Python interface,提供完整的软件包,但我并不需要如此多的内容。看了看pytai的代码,发现读取方法其实很简单,完全可以简化成如下的一个函数:

from string import atol
from time import localtime,strftime

def tai64time(tai64string, timeformat="%Y-%m-%d %H:%M:%S"):
"""Convert TAI64 time format to human readable string.

TAI stands for Temps Atomique International, the current
international real-time standard. See alse:

http://cr.yp.to/libtai/tai64.html

for example:
>>> tai64time('@4000000042eb9fce1a7faf0c')
'2005-07-30 23:42:06.444575500'
"""
epoch = 4611686018427387904L
s = tai64string
if s[0] == "@": s = s[1:]
secs,usec = s[:16],s[16:24]
secs = atol(secs, 16)
nsec = atol(usec, 16)
return "%s.%d" % (strftime(timeformat, localtime(secs - epoch)), nsec)

2005-07-24

lftp中文设置

最近常上国内的ftp,有很多GBK编码的目录和文件名;而我的环境是zh_CN.UTF-8的,如果不设置一下,在我最喜欢用的lftp里就会乱码。每次老手工输入太麻烦,今天干脆放到配置文件里,顺便又加了两个别名:
0$ cat ~/.lftp/rc
set ftp:charset "gbk"
set file:charset "UTF-8"
alias cn "set ftp:charset gbk; set file:charset UTF-8"
alias utf8 "set ftp:charset UTF-8; set file:charset UTF-8"

默认支持简体中文编码的文件名;两个别名则是在中文和UTF8设置间来回切换的。

2005-07-23

Legolas Greenleaf

看到这么多人的blog里都有了,俺也有点心痒痒了,想看看自己是那个,呵呵。

Which Fantasy/SciFi Character Are You?


A naturally skilled companion to those around you, you earnestly use your prowess out of concern to those you care about.

This forest is old. Very old. Full of memory... and anger.

Legolas is a character from the Middle-Earth universe. A biography is available at TheOneRing.net.

寻找最快的Debian镜像服务器

随着对系统的习惯,我现在是越来越喜欢使用既有的软件和功能了。熟悉的软件和桌面仿佛有着一种独特的“气味”,让我用起来更舒服;把系统翻个底掉,找到所有隐藏的东西的那种生活,仿佛已经是很久远以前的事情了。

现在用新软件越来越少,所以都是做个定时任务,让我的Debian系统半夜去下载升级包;然后等那天有空的时候,自己来操作升级软件:节省了升级时候的等待时间了。不过最近两天unstable里面狂升Xorg,一堆东西都乱七八糟的,不得不多关注一下了。

话说自从换了工作地点,原来一直用的台湾日本的Debian镜像服务器的速度立马大不如前。不过反正都是系统去下载东东,我也用不着等待,也就懒得管它了。今天正好有点时间,重新调整了一下sources.list,惊奇的发现现在官方镜像服务器列表里,我连接debian.ihug.com.au的速度最快,这是什么原理?

做一下工作记录:

1、先检索了一下检测Debian服务器速度的软件包:
apt-cache search apt source

发现有apt-spynetselect-apt两个软件都可用。以前用过apt-spy,这次就试试netselect-apt了:
sudo apt-get install netselect-apt

2、简单看一下帮助,学习一下:
netselect-apt --help

启动程序,让它帮我生成unstable的sources.list:
2$ sudo netselect-apt unstable
Password:
Using distribution unstable.
Retrieving the list of mirrors from www.debian.org...

--15:01:37-- http://www.debian.org/mirror/mirrors_full
=> `mirrors_full'
正在解析主机 www.debian.org... 194.109.137.218
Connecting to www.debian.org|194.109.137.218|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:174,758 (171K) [text/html]

27% [==================> ] 47,322 29.06K/s

15:01:41 (29.03 KB/s) - Read error at byte 47322/174758 (Connection reset by peer). 重试中。

发现程序开始反复被从服务器上断开连接。嗯,惊诧了几秒钟,想到可能是GFW作怪,于是打开浏览器,通过代理手工把Debian代理服务器列表拖到硬盘上(嗯,果然,应该是那个最能引起GFW警报的关键词FREENET作怪),放在netselect-apt执行时的目录中。

3、再启动:
0$ sudo netselect-apt unstable
Using distribution unstable.
There is a already a mirrors_full file in the current
directory. I'll use that, rather than downloading it again.

Choosing a main Debian mirror using netselect.
Running netselect to choose 1 out of 77 addresses.
.......................................
The fastest server seems to be:
http://debian.ihug.com.au/debian/

Choosing a non-US Debian mirror using netselect.
Running netselect to choose 1 out of 72 addresses.
.....................................................
The fastest non-US server seems to be:
http://194.97.2.70/debian-non-US/

Writing sources.list.
Done.

好了,看了看文件内容:
0$ cat sources.list
# the main Debian packages.
deb http://debian.ihug.com.au/debian/ unstable main contrib
# Uncomment the deb-src line if you want 'apt-get source'
# to work with most packages.
# deb-src http://debian.ihug.com.au/debian/ unstable main contrib

# the non-US Debian packages.
deb http://194.97.2.70/debian-non-US/ unstable/non-US main contrib
# Uncomment the deb-src line if you want 'apt-get source'
# to work with most non-US packages
# deb-src http://194.97.2.70/debian-non-US/ unstable/non-US main contrib

4、把它加到/etc/apt/sources.list中,update一下:
0$ sudo apt-get update
获取:1 http://194.97.2.70 unstable/non-US Release.gpg [197B]
获取:2 http://debian.ihug.com.au unstable Release.gpg [197B]
获取:3 http://debian.cn99.com unstable Release.gpg [197B]
获取:4 http://debian.ihug.com.au unstable Release [34.1kB]
获取:5 http://debian.ihug.com.au unstable/main Packages [2851kB]
获取:6 http://194.97.2.70 unstable/non-US Release [21.5kB]
忽略 http://194.97.2.70 unstable/non-US Release
命中 http://debian.cn99.com unstable Release
忽略 http://194.97.2.70 unstable/non-US/main Packages
命中 http://debian.cn99.com unstable/main Packages
忽略 http://194.97.2.70 unstable/non-US/contrib Packages
命中 http://debian.cn99.com unstable/non-free Packages
命中 http://debian.cn99.com unstable/contrib Packages
命中 http://debian.cn99.com unstable/main Sources
命中 http://debian.cn99.com unstable/non-free Sources
命中 http://debian.cn99.com unstable/contrib Sources
获取:7 http://debian.ihug.com.au unstable/contrib Packages [55.8kB]
获取:8 http://194.97.2.70 unstable/non-US/main Packages [5116B]
获取:9 http://194.97.2.70 unstable/non-US/contrib Packages [20B]
下载 2968kB,耗时 30s (97.2kB/s)
正在读取软件包列表... 完成
W: GPG error: http://194.97.2.70 unstable/non-US Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B629A24C38C6029A
W: 您可能需要运行 apt-get update 来解决这些问题

还真是挺快的,下载很轻松就可以达到几百K的速度;就是得解决一下public key的问题。哈哈,前一阵子记的笔记这回派上用场了:
0$ gpg --keyserver wwwkeys.eu.pgp.net --recv-keys B629A24C38C6029A
gpg: 下载密钥‘38C6029A’,从 hkp 服务器 wwwkeys.eu.pgp.net
gpg: 密钥 38C6029A:公钥“Debian Archive Automatic Signing Key (2003) ”已导入
gpg: 需要 3 份勉强信任和 1 份完全信任,classic 信任模型
gpg: 深度:0 有效性: 1 已签字: 0 信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度数据库检查将于 2006-03-07 进行
gpg: 合计被处理的数量:1
gpg: 已导入:1
0$ gpg --armor --export B629A24C38C6029A | sudo apt-key add -
gpg: 没有找到任何绝对信任的密钥
OK

好了,以后我再装新软件随时都可以享受高速的感觉了 :)

2005-07-11

闲话习惯

有人这样子说
不管男生女生,如果其中一边一开始对另一边宠爱到不行,时间一久,会产生一种后果:

1、宠人的一方会受不了,就像你讲的,人也有脾气和忍耐极限。
2、被宠的一方长期下来会被“宠习惯”,他会认为“这已经是应该的”。

所以当你受不了,开始出现“反抗”,他就会认为“你跟天下所有男人一样,对女人都是会变差的!”

而不会先去思考“这样到底对不对”。

讲了一堆废话,总之,人是会被宠坏的。
你们需要的是平心静气认真沟通,尝试回到一个平衡点。


不错,习惯一点养成,就会成为惯例,不管这个习惯本身是好是坏。从这点可以看到,教导小孩子是一件多么重要的事情。昨天坐火车,就看到了一些被惯坏的孩子,本来打扮的很可爱,可却一点礼貌的没有,让人很讨厌。

当然,如何处理好与女朋友的关系,在这一点上也是需要我们严肃对待的,呵呵。我是不愿意让爱人受委屈的那种,看来这方面也要提前做一些心理准备了,免得到头来害人害己。
Tags:

2005-07-06

Debian Apt 的 public key 验证

最近两天想装blackdown java,谁成想apt-get update的时候告诉我gpg没有找到public key?!以前怎么没有见过这个提示?纳闷之余,查了一下,还真有apt-key这个命令,以前倒是一直没有注意过。到狗狗上查了一下,找到了解决办法,给root加上第三方的key就好,如此这般就行了:
gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 529B8BDA
gpg --armor --export 529B8BDA | sudo apt-key add -

其中,529B8BDA是报错时,提示没有找到的那个key的sign。

好久没写blog,上来喘口气

好不容易积攒了一点兴致,想来写一点感言,谁想半截Firefox不给劲,直接core dump了!晕。看来不是写长篇的料,干脆拉倒。剩下的日子,就盼着Firefox1.1赶紧出了。

2005-06-10

现代版孔乙己

  鲁镇的bar的风格,跟别的地方是不一样的:都是当街一个原木的大吧台,吧台里面放着大桶的冰块。


  正如传闻中所说:“啤酒不冰的真难喝!”所以冰块对于一个bar来说,就好像拉面摊上的辣酱那么重要。


  出来打工的蓝领白领,在朝九晚五之后,每每花四块钱,买一扎啤酒——这是二十多年前的事,现在每扎要涨到十块——靠吧台外站着,凉凉地边喝边休息;要是肯多花一块,就能买一碟鱿鱼丝,或者开心果,做下酒物了;如果出到十几块,那就能买一样荤菜。但这些顾客,多半是蓝领帮,大抵没有这样阔绰。只有当白领的,才踱进店面隔壁的包间,开一瓶路易十四,用高脚杯斟了慢慢地喝。


  我从十二岁起,便在镇口的咸亨bar里当差。正如品酒达人常说的那样:“酒醒了,可以喝了。”


  所以像我这样永远都一副睡不醒样子的人,是不能去倒红酒的。掌柜说,我这种大脑冻住的伙计,怕伺候不了白领主顾,就在外头倒扎啤吧。外面的蓝领主顾,虽然容易说话,但唠唠叨叨夹缠不清的也很不少。他们往往要看着扎啤从桶子里倒出,看过杯底有水没有,又亲眼盯着将冰块放进杯子里,然后才放心——在这严格监督下,掺水也很难的。不过啤酒还在桶里的时候就已经掺过水了,不晓得再掺一次还有什么必要。但是掌柜的说我眼神不好,每次倒啤酒的时候都高出标准线零点零一公分,倒一千杯就得高出十公分,倒一万杯就得高出整整一米——这样让我倒下去一定会把他的bar败掉,所以倒扎啤这件事我也干不了。幸亏我在这条街上有人罩着,辞退不得,便改为专管往啤酒里加冰块的无聊职务了。养一个专往啤酒里加冰块的人那可比多倒零点零一公分的啤酒花钱多了,我都不晓得掌柜是怎么算这笔账的。


  我从此便整天地站在吧台里,专司我的职务。虽然没有什么失职,但总觉得有些单调,有些无聊。掌柜是一副凶脸孔,主顾也没有好声气,无聊时Hip-Hop一把也会被掌柜教训。只有孔乙己到店,才可以笑几声,所以至今还记得。


  孔乙己是喝扎啤而穿白领衬衫的惟一的人。他身材很高大,青白脸色,皱纹间时常夹些伤痕,一部乱蓬蓬的花白goatee。他穿的那件白领衬衫,简直就是野兽派作品,让人一见之下就感觉脑袋嗡嗡直响,而且有股子异味直冲脑门——古往今来任何一幅伟大作品都做不到后一点。


  从这件衬衫上我们可以看出孔乙己曾经从事过的行业,共计有:大排档里帮厨的,油漆小工,替人遛狗的宠物保姆,往电线杆子上写“办证: XXXXXXXX”的街头涂鸦艺人,等等。之所以还有等等一项,是因为衬衫上的某些遗迹过于诡异,实在考证不出其历史渊源。孔乙己对人说话,总是满口计算机专业术语,算法线程的,教人听了就想当机。因为他姓孔,又常说自己早年去过日本,潜心研究过任天堂八位家庭游戏机的编程,并且自封为超人气纯情恋爱游戏《你好!翼手龙妹妹》的世界最佳通关记录保持者,所以大家就从日语“你好”(こんにちは ,读音如kon-ni-ji-wa) 这个词中,替他取下一个绰号,叫做孔乙己。


  孔乙己一到店,所有喝酒的人便都看着他笑,有的叫道:“孔乙己,你脸上又添上新伤疤了!在模仿浪客剑心么?”


  他不回答,对吧台里说:“两扎啤酒,要一碟开心果。”便排出九元人民币,红彤彤的一长溜。


  他们又故意高声地嚷道:“你一定又偷了人家的东西了!”


  孔乙己睁大眼睛说:“你怎么这样凭空污人清白!我保留告你诽谤的权利!”


  “什么清白?我前天亲眼见你偷了何家的光盘,被人爆了气发超杀打到三十二连斩!”


  孔乙己便涨红了脸,额上的青筋条条绽出,争辩道:“窃光盘不能算偷……光盘!CDRom!这叫做资源共享……IT界的事,能算偷么?”


  接着便是难懂的话,什么“君子固穷,有所穷有所不穷”,什么“盗版盘,两块三,想买正版没有钱”,什么“开放源码是大势所趋”,什么“Open Source”之类,引得众人都哄笑起来:店内外充满了快活的空气。


  听大家背地里谈论,孔乙己原来也学过计算机,但终于没有通过程序员等级考试,又搞不到风险投资,开不了公司,于是愈过愈穷,弄到将要讨饭了。幸而还会鼓捣电脑,便替人家修修机器,重装重装系统,换一碗饭吃。可惜他又有一样坏脾气,便是好吃懒做。主人家一不留神,便连人和光盘电脑,一齐失踪。如是几次,叫他修电脑的人也没有了。孔乙己没有法,便免不了偶然做些刻章办证卖盗版盘的事。但在我们店里,品行却比别人都好,就是从不拖欠;虽然偶尔没有现钱,暂时记在“多给小费人人赞,欠钱不还冚家铲”的粉板上,但不出一月,定然还清,从粉板上拭去了孔乙己的名字——要是过了一个月就会变成红名,进入任何一个酒吧都会立刻遭到酒保的攻击。


  孔乙己喝过半扎啤酒,涨红的脸色渐渐复了原,旁人便又问道:“孔乙己,你当真会写程序么?”


  孔乙己看着问他的人,显出不屑置辩的神气。


  他们便接着说道:“你怎么连个微软认证都考不到呢?”


  孔乙己立刻显出颓唐不安模样,脸上笼上了一层灰色,嘴里说些话,这回可是全是十六进制编码,一些不懂了。在这时候,众人都哄笑起来:店内外充满了快活的空气。


  在这些时候,我可以附和着笑,掌柜是决不责备的。而且掌柜见了孔乙己,也每每这样问他,引人发笑。孔乙己自己知道不能和他们谈天,便只好向孩子说话。有一回对我说道:“你学过电脑么?”


  我略略点一点头。


他说:“学过电脑?!我便考你一考:windows的扫雷,怎样玩的?”

  我想,讨饭一样的人,也配考我么?便转过脸去,不再理会。孔乙己等了许久,很恳切地说道:“不能玩罢?我教给你,记着!windows的扫雷那是入门基本功,可以锻炼手眼配合能力和逻辑思维能力。尤其是初学者,通过玩扫雷,可以迅速提高鼠标操作水平,练好了这个,以后再去玩星际魔兽这些需要微操作的游戏,进步就很快啦!说到微操作呢,这可是我的强项——在战网上他们都叫我快手小甜甜,因为我的按键速度比正常人高出百分之二十五以上!这就要感谢我灵活的右脚了,要不是键盘上放不下,我连左脚都能用上。这样一来又可以快上至少百分之二十……”


  想到孔乙己三十载陈年的香港脚在键盘上按来按去,我不禁全身寒颤了一下,下定决心以后去网吧得用酒精棉花擦一遍键盘先。孔乙己见我面露惧色,误以为我是被他唬住了,于是起劲地说下去:“扫雷这样的游戏可得花大力气学习。这都是基础呀!windows的基本操作!基本操作应该记着。将来进入信息时代的时候,干什么不得用电脑?以后你去网上菜场买二两猪肉,老板切好了就打个包给你QQ上传过来了……”


  我暗想,现在才二十一世纪初,这信息时代可还早着呢,而且我买猪肉从来都不买二两的——我家爱吃猪头肉,每回都是买的整猪头,加了酱油、茴香、桂皮,焖得烂烂的端上桌来——放到桌上,那猪头看起来还是慈眉善目笑吟吟的呢。


  听孔乙己在那边絮絮叨叨说个不停,我又好笑,又不耐烦,只好懒懒地答他道:“扫雷还要你教,随便玩玩我也十秒之内就搞定了,这么弱智的游戏,还好意思在公开场合拿来说!”


  孔乙己显得极高兴的样子,用两个指头的长指甲敲着吧台,点头说:“Good!Smart
boy!我看你也很有潜力的了。不过windows的扫雷有三种难度级别,你都玩过么?”


  我愈不耐烦了,假装掌柜的找我有事,赶紧闪开。孔乙己刚用指甲蘸了酒,想在吧台上画图,见我咻一下消失在人群里,便又叹一口气,显出极惋惜的样子。


  有几回,邻居孩子听得笑声,也赶热闹,围住了孔乙己。他便给他们开心果吃,一人一颗。孩子们拿了开心果,剥开壳一口吃掉,然后把壳纷纷地往孔乙己头上丢,说道:“一颗开心果就想打发我们?打发要饭的也嫌寒碜!伤自尊了!这事非用钱解决不可!”


  孔乙己着了慌,把两个兜都翻出来,说:“没钱了,我已经没钱了。”


  于是孩子们一拥而上,把他摁倒在地上,脱下他一双开壳掉线的MIKE鞋,从鞋垫里掏出一沓一块钱来,一人买一大把开心果。孔乙己灰头土脸地从地上爬起来,穿上鞋子,自己摇头说:“风吹鸡蛋壳,财去人安乐。好诗!好诗!”于是这一群孩子都在笑声里走散了。


  孔乙己是这样的使人快活,可是没有他,别人也便这么过。


  有一天,大约是中秋前的两三天,掌柜正在慢慢地结账,取下粉板,忽然说,“孔乙己长久没有来了。还欠十九块钱呢!”我这才觉得他的确长久没有来了。


  一个喝酒的人说道,“他怎么会来?他……他生活不能自理啦。”


  掌柜说,“哦!”


  “他总仍旧是偷。这一回,是自己发昏,竟偷到丁举人家里去了。他家的电脑,偷得的吗?丁举人家那台可是银河三代巨型机,占地得有二百来平方米,孔乙己在那儿看四下里无人想搬机器……”


  “好几吨重的机器他也想搬?”


  “他拿了个不锈钢汤勺在那儿拆螺丝,还没拆下两个来就让人逮到了。”


  “后来怎么样?”


  “怎么样?先写了检讨书,后来是打,打了大半夜,还是没打出来。”“没打出来?”


  “是啊,他早就不会提笔写字了,检讨书也是用电脑写。写完了还得拿打印机打出来,丁家那打印机本来有点儿小问题,让孔乙己上去一修,干脆就修成碎纸机了。这可不是讨打么?丁家五位公子轮番上阵,单刀,双节棍,三叉戟,四条腿的板凳,五年陈的绍兴老酒……”“老酒也行?”


  “哦,是老酒坛子。那五位公子可着实了得,先把孔乙己打到防御不能,再打到浮空,落地后再追加攻击,打了整整三个回合,终于打了个生活不能自理。”


  “后来呢?”


  “后来生活不能自理了。”


  “不能自理了又怎样呢?”


  “怎样?谁晓得?!大概是送医学院被人研究去了。”掌柜也不再问,仍然慢慢地算他的账。


  中秋之后,秋风是一天凉比一天,看看将近初冬;我整天的靠着空调,也需穿上南极人保暖内衣了。一天的下半天,没有一个顾客,我正趴在吧台上留着哈喇子打盹。忽然间听得一个声音:“来一扎啤酒。”这声音虽然极低,却很耳熟。


  看时又全没有人,我心慌慌以为自己幻听,还好站起来向外一望,看到那孔乙己便在吧台下对了门槛坐着。他脸上黑而且瘦,已经不成样子;穿一件千疮百孔渔网式小夹袄,盘着两条腿,下面垫一个蒲包,用草绳在肩上挂住;见了我,又说道:“来一扎啤酒。”


  掌柜也伸出头去,一面说,“孔乙己么?你还欠十九块钱呢!”


孔乙己很颓唐地仰面答道:“这……下回还清罢。这一回是现钱,酒要好。来常温的就行,别加冰块,这几天有点儿闹肚子。”

  掌柜仍然同平常一样,笑着对他说:“孔乙己,你又偷了东西了!”


  但这回他却不十分分辩,单说了一句:“不要取笑!”


  “取笑?要是不偷,怎么会打断腿?”


  孔乙己一下子站了起来说,“断腿?谁断腿啦?”


  他来了一个急停跳投,起跳后大幅后仰,姿态十分优美。掌柜大喊一声:“米高佐敦!”——他是他的扇子——眼看着孔乙己“扑通”一声后臀落地,忍不住问道:“腿没断,你垫个蒲团干嘛?”


  孔乙己站起来拍拍裤子,低声说道:“扮成残疾人,比较容易要到钱,唉!经济不景气,各行各业都受影响。”他的眼神,很像恳求掌柜,不要继续追问。


  此时已经聚集了几个人,便和掌柜都笑了。我倒了酒,端出去,放在门槛上。他从破衣袋里摸出四个一块钱的钢镚儿来,放在他手里,见他满手是泥,原来他便用这手走来的。掌柜也看见了,教训我说:“看到了没有?这就是我说的,专业!扮腿断扮到这份儿上,跟真的断了腿还有什么区别?”


  我只好点头称是。不一会儿,他喝完了酒,便又在旁人的说笑声中,坐着用这手慢慢走去了。掌柜看着他远去的背影,自言自语说道:“下回在地铁里看到断腿的乞丐,我可得留神了。”我不晓得他有什么好留神的,因为他从没给过任何一个乞丐哪怕一毛钱。


  自此以后,又长久没有看见孔乙己。到了年关,掌柜取下粉板说,“孔乙己还欠着十九块钱呢!就这么点儿钱,还真不值得让讨债公司去找他!”到了第二年的端午,又说“孔乙己还欠着十九个钱呢!利滚利的也得有小一百了吧?”到中秋可是没有说,再到年关也没有看见他。


  我到现在终于没有见——大约孔乙己的确是送医学院被人研究去了。

Tags:

2005-06-09

等爱的狐狸

“我不能跟你玩。”狐狸说,“我还没有被驯养。”

“对我来说,你还只是一个小男孩,就像其他千万个小男孩一样。我不需要你。你也同样用不着我。对你来说,我也不过是一只狐狸,和其他千万只狐狸一样。但是,如果你驯服了我,我们就互相不可缺少了。对我来说,你就是世界上唯一的了;我对你来说,也是世界上唯一的了。

“驯养,就是建立某种联系……”

“我的生活很单调。我捕捉鸡,而人又捕捉我。所有的鸡全都一样,所有的人也全都一样。因此,我感到有些厌烦了。但是,如果你要是驯服了我,我的生活就一定会是欢快的。我会辨认出一种与众不同的脚步声。其他的脚步声会使我躲到地下去,而你的脚步声就会象音乐一样让我从洞里走出来。再说,你看!你看到那边的麦田没有?我不吃面包,麦子对我来说,一点用也没有。我对麦田无动于衷。而这,真使人扫兴。但是,你有着金黄色的头发。那么,一旦你驯服了我,这就会十分美妙。麦子,是金黄色的,它就会使我想起你。而且,我甚至会喜欢那风吹麦浪的声音……”

--《小王子



2005-05-15

第1期维基读本正式发行

中文版的第一期维基读本出版了!它收录了2005年1月-3月我们在条目上的重大进展,其中包括两篇特色条目汉字),1篇质量提升计划完成较好的条目(不平等条约),以及每周翻译计划中已经全部完成翻译的8篇条目(大熊猫瑰玛金字塔呼麦麦纳麦三曲腿图佬族拉普兰战役纸飞机)。

目前还无法提供任何印刷版的刊物供读者订阅。如果您有任何相关讯息或者建议、帮助,请在Wikipedia talk:维基读本处提出。

下载

本期维基读本是繁简体混合的。

2005-04-26

让我们把google玩出更多新花样吧

GUESS-the-GOOGLE! flash的猜词小游戏,还有高分榜的哦。

更新:刚玩了一局,得了254分。似乎都是常用的单词,只要认真玩肯定能得不少分的 :)

2005-04-22

IE真的很烦

找到我的blog在IE里显示白板一块的原因了,原来是我utf8编码的blog名称造成IE水土不服。只要我的html代码里还有“<title>举头望明月</title>”,IE就不能正常显示。只好改名了。恼火的是,在firefox里显示很好的css布局,原来在IE里也会不太正常。唉,有时间再改吧。
Tags:

2005-04-19

纪念爱因斯坦

今年,验证引力波的Einstein@Home工程启动了;今天(4月19日),为了纪念爱因斯坦,全球范围的“光传递”活动也已经开始。

不管人们如何评判爱因斯坦,他对现代物理与现代社会的影响都是无以伦比的;就让“物理照亮世界”吧。

2005-04-18

又一个测试

还是那个16人格的测试,不过是另外一种测法。多测试一些,就多了解自己一些 :)
您的人格类型是: ISTJ (内向,感觉,思维,判断)

您的工作中的优势:
  ◆ 办事精确,希望第一次就能把工作做好
  ◆ 乐意遵循确定的日常安排和传统的方针政策
  ◆ 每次都能十分专注地把注意力集中在一个项目或者任务上
  ◆ 能够独立工作
  ◆ 灵敏地组织能力
  ◆ 一丝不苟,认真专注地对待具体问题,事实和细节
  ◆ 相信传统地可取之处,并且能够遵循传统模式
  ◆ 非常强的责任意识,别人可以信任你实现自己的诺言
  ◆ 明白清晰的工作伦理,认为高效率和多成果是很重要的
  ◆ 对实现目标有毅力和决心
  ◆ 通情达理,视角现实

您工作中可能存在的不足:
  ◆ 不愿意尝试新的、没有经过考验的观点和想法
  ◆ 对变动感到不安,排斥变革
  ◆ 对需要很长时间才能完成的项目和任务缺乏耐心
  ◆ 有时会因为近期目标而忽略长远需要
  ◆ 办事死板,必要的时候难以事情新情况
  ◆ 难以看到问题的整体以及行为的长远影响
  ◆ 对于方针或者决定对别人造成的影响缺乏敏感性
  ◆ 需要的时候不愿意改变努力的方向或者调整投入的多少
  ◆ 不愿意促成必要的改变,也不愿意支持经过仔细考虑的风险行为

Tags:

2005-04-10

控制台下,python的自动完成功能

继承unix like系统的优良传统,python也拥有强劲的readline模块(只在UNIX类系统中才能使用),可以很轻松的实现自动完成的功能。下面是我的一些设置:
0$ env | grep python
PYTHONSTARTUP=/home/xyb/.pythonstartup.py
PYTHONPATH=/home/xyb/.python:/home/xyb/py:./
0$ cat ~/.pythonstartup.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Last modified: 2004年11月11日 星期四 10时50分39秒 [xyb]

import sys
import LazyPython
sys.excepthook = LazyPython.LazyPython()
del sys, LazyPython

# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it: "export PYTHONSTARTUP=/max/home/itamar/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.

import atexit
import os
import readline
import rlcompleter

readline.parse_and_bind('tab: complete')

historyPath = os.path.expanduser("~/.pyhistory")

def save_history(historyPath=historyPath):
import readline
readline.write_history_file(historyPath)

if os.path.exists(historyPath):
readline.read_history_file(historyPath)

atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath


首先,要有PYTHONSTARTUP环境变量,它会帮助python找到启动时要自动运行的脚本。如果你和我一样使用bash,可以把它直接放到bash的启动脚本.bashrc中:
export PYTHONSTARTUP=~/.pythonstartup.py


其次,要把readline的相关功能放到python启动脚本中,上面的脚本中readline.parse_and_bind('tab: complete')这一句就就是做的这个工作。另外,脚本还加载了其它一些有用的功能,大家可以自己查资料。这个启动脚本也可以从这里下载,请大家按照自己的需要进行修改。

有了这些设置,我们就可以按Tab键来让readline帮我们自动完成了。如果连按两次Tab键,则会把所有匹配的自动列出来:
0$ python
Python 2.3.5 (#2, Mar 26 2005, 17:32:32)
[GCC 3.3.5 (Debian 1:3.3.5-12)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Welcome to Lazy Python. Type "help LazyPython" for help.
>>> import types
>>> types.
types.BooleanType types.ObjectType
types.BufferType types.SliceType
types.BuiltinFunctionType types.StringType
types.BuiltinMethodType types.StringTypes
types.ClassType types.TracebackType
types.CodeType types.TupleType
types.ComplexType types.TypeType
types.DictProxyType types.UnboundMethodType
types.DictType types.UnicodeType
types.DictionaryType types.XRangeType
types.EllipsisType types.__class__
types.FileType types.__delattr__
types.FloatType types.__dict__
types.FrameType types.__doc__
types.FunctionType types.__file__
types.GeneratorType types.__getattribute__
types.InstanceType types.__hash__
types.IntType types.__init__
types.LambdaType types.__name__
types.ListType types.__new__
types.LongType types.__reduce__
types.MethodType types.__reduce_ex__
types.ModuleType types.__repr__
types.NoneType types.__setattr__
types.NotImplementedType types.__str__
>>> types.F
types.FileType types.FrameType
types.FloatType types.FunctionType
>>> types.F

在我目力所及的地方,看到了游行的效果

今天中午去中芯大厦吃午饭,走到楼下,一抬头,发现昨天我们抗议的那个canon广告牌已经变成了光秃秃的一片,还有几个工人在收拾作业工具:看来抗议起效了,可喜可贺!可惜我今天又没有带相机。

一位朋友谈起,如果我们在抵制日货方面,能促使日本厂商有所动作,去游说/施压给日本政府,说不定会有一定的效果。这在逻辑上能说通,但我还是有点怀疑效果究竟能有多大。但有希望总比没希望好:日本政府如果继续保持这种对亚洲国家的姿态,中、韩的民众情绪是不可能有缓和的机会的,早晚得让日本人吃下自己的苦果:这对大家都不是什么好事,何苦呢。

评《血酬定律:中国历史中的生存游戏》


我不是一个社会学研究者,也不知道这本流行书籍还能不能称作研究、做学问的著作,更不能评判书中的种种观点是否具有学术价值;但在字里行间,让我感觉到,就象古龙笔下冷静至极的武林高手,作者以笔为刀,解剖着古代中国社会弱肉强食的竞争。当种种令人发指的罪行被解构,成为在特定环境下必然的行动纲领,并被人们代代相传下去,联想到书名,我不禁不寒而栗。希望有了这本书,人们可以找到打破这所谓“定律”的方法,而不是把他奉为至典,就象那本臭名昭著的《厚黑学》。

另载于:豆瓣评论

2005-04-09

大风起兮

最近总是感觉缓不过精神头来,今天早晨蒙头大睡。睡到了11点,差不多了,赶紧起来,问了一下另外一哥们儿,原来大家都是只知道游行这事,但谁也不知道具体时间。

吃过早饭兼午饭,顶着今年春天的第一场大风往公司赶。路上还和一哥们儿说一会儿去海龙看看情况来着,谁知道刚进了办公室没坐稳当,就听见楼下面隐隐传来口号的声音。放下了钱包、PDA,拿好身份证,赶紧和两个同事下楼,加入进去。喊了几句口号,又唱了一遍国歌,就来到了中芯大厦的楼下。这时我就有点儿感觉,这下午的行动看起来更象是率性而为。跑到中芯大厦低下对着一块巨高的canon广告牌喊口号,要求10分钟拆了。我和同事在楼下郁闷的看着六层楼高的广告牌子,怎么觉得都不太靠谱,没有什么可操作性呀。看来还是有点盲目了,也没什么威慑作用;喊了半天之后,大家终于认识到,大楼的人根本就不鸟你,这时似乎有人发现海龙的墙上也挂着一块sony的牌子,大家又移动,准备再换一个地方继续喊口号。待堵在门口的#X也都离开了,赫然发现中芯的玻璃门禁闭,链锁把门;这还不算,里面密密麻麻的一堆保安是站的整整齐齐,呵呵,都来列队“欢迎”了。

回来之后,有同事说上午9点活动已经开始了,当时就有人在海龙门口烧国旗来着;可惜没有多准备几面,应该每隔两个小时拿出一个来烧一烧才有气氛。

参加这种活动,虽然自己也有一个数码相机,但那是canon的,这场合怎么好意思拿出来呢?唉,谁知道,到现场一看,围了一堆人噼噼啪啪的拍照片,没几个不是用的日本的相机、摄影机!这都怎么回事呀?!郁闷。

2005-04-08

kernel.org这帮变态的

kernel.org的新机器竟然有24G内存和10T的硬盘!这玩意即不是集群,也不是盘阵,竟然就只是一台服务器而已。HP的DL585,嗯,这回可印象深刻了。

2005-04-07

Yahoo! 360°!? Sixfoo! 660°!?!

Yahoo! 360° VS Sixfoo! 660°

总有好事之徒,哇哈哈。你还别说,学了个十足,还真的就能登录进去呢 lol

Google的新特性

Google现在可以当百科全书来使了,用define:keywords可以查询字、词。实际上,返回结果中最多出现、最有用处的,还是要数维基百科的内容了。大家可以用define:google来查询一下试试。Google还知道针对查询者的语言设置,来返回不同语种的维基百科的内容,还是挺体贴人的。不过有一个不爽的地方,在查询结果页面的下面,有该词在其它语言的相关链接:“显示在 简体中文 俄文 德文 意大利语 法文 英文 西班牙文 所有语言所有可找到的定义”,这可实在是不符合中国人的说话的习惯,看来页面还没有汉化充分 ;)

《业余无线电通信(修订本)》


今天又上“豆瓣”转,突然想起曾经痴迷此道,还自己组装过无线电收发机;但当爱好与工作发生冲突的时候,我只能选择工作,毕竟生存才是最重要的。
  
其实,一直想重新拾起自己的这点爱好,但无奈工作繁忙,总觉得无法脱身--也许是我该反省一下自己的生活、工作方式的时候了。
  
已经送人的那部收发机还安在否?下一次回家的时候该和以前的朋友联咯一下了。几年不见,不知道还能不能找到他们了。

2005-03-18

最乐观的悲观主义者的乌鸦嘴又命中了

工作的忙乱之中,突然又看到某某网站被封(或说基本被封,差不多了),不过这回的名头更大,赫然就是水木。这年头,连水木这样的老实人都混不下去,你我还有什么好说的。虽然我是一个乐观主义者,但在官老爷与言论自由的对峙中,我一向是持悲观主义态度。其实我早就说过,上次的HT不会是最后一个,肯定还有更倒霉的。言犹在耳,就又出了这么一档子事,我都不禁对自己的乌鸦嘴佩服起来。还好,前些日子琢磨自己blog的去向,思前想后,还是固守了blogger这片地儿,虽然要自己找空间存放才能在国内看到,但毕竟不用担心那天被连窝端了。现在想想,还真是有先见之明了。唉,要是什么时候,我们在网上闲扯蛋之前不需要这种“先见之明”来提醒管住自己的嘴巴该有多好。

再扯一句:水木去的不多,最近想换个地方租房,本来还想到水木上转转、找找的,这下可找的地方又少了一个。唉。眼看网站一个又一个的“无疾而终”,不免有兔死狐悲之感。

一个值得纪念的时刻,不过已经溜走了

0$ date +%s
1111151035

千载难逢,可惜。

2005-03-12

用 twofish 做块加密

Twofish是一种块加密算法。块加密算法适合进行流加密,倒是一个发展趋势。Twofish的运算速度比以前的Blowfish之类要快一点,今天终于有机会在Python里试验了一下。虽然这种算法已经出现了好几年,并且是被置于公共领域的算法,但我还是发现现在可以利用的Twofish算法库种类好象不多,也良莠不齐。算起来,还是从GnuPG项目中衍生的libgcrypt加密算法库比较完善,而且维护也比较及时,项目活跃程度比较高,用起来放心一点。

在Debian中,安装libgcrypt比较方便:
sudo apt-get install libgcrypt11 libgcrypt11-dev

不过libgcrypt是一个标准C代码库,为了在Python中使用,需要包装一下,把它做成Python扩展模块。在sf.net上,我找到了libgcrypt-py。在Debian下,编译安装很顺利;但在FreeBSD下,好象gcc不会自己到/usr/local中查找对应的libgcrypt的库和头文件,导致编译失败。在对setup.py做了修改之后,终于安装成功了。
--- libgcrypt-py-0.1.0/setup.py 2004-07-22 11:47:15.000000000 +0800
+++ libgcrypt-py-0.1.0-new/setup.py 2005-03-12 21:37:24.122370040 +0800
@@ -11,16 +11,25 @@
url="http://libgcrypt-py.sourceforge.net",
download_url="http://sourceforge.net/projects/libgcrypt-py/",
py_modules=['Gcrypt'],
+ packages=['_Gcrypt'],
ext_package="_Gcrypt",
ext_modules=[
Extension("_Cipher", ["_Gcrypt/ciphermodule.c"],
- libraries=["gcrypt", "gpg-error"]),
+ libraries=["gcrypt", "gpg-error"],
+ library_dirs=["/lib", "/usr/lib", "/usr/local/lib"],
+ include_dirs=["/usr/include", "/usr/local/include"]),
Extension("_Hash", ["_Gcrypt/hashmodule.c"],
- libraries=["gcrypt", "gpg-error"]),
+ libraries=["gcrypt", "gpg-error"],
+ library_dirs=["/lib", "/usr/lib", "/usr/local/lib"],
+ include_dirs=["/usr/include", "/usr/local/include"]),
Extension("_Random", ["_Gcrypt/randommodule.c"],
- libraries=["gcrypt", "gpg-error"]),
+ libraries=["gcrypt", "gpg-error"],
+ library_dirs=["/lib", "/usr/lib", "/usr/local/lib"],
+ include_dirs=["/usr/include", "/usr/local/include"]),
Extension("_Pk", ["_Gcrypt/pkmodule.c"],
- libraries=["gcrypt", "gpg-error"]),
+ libraries=["gcrypt", "gpg-error"],
+ library_dirs=["/lib", "/usr/lib", "/usr/local/lib"],
+ include_dirs=["/usr/include", "/usr/local/include"]),
]
)

下面就打开一个Python,来测试一下:
import Gcrypt
from binascii import hexlify, unhexlify

key16 = '1234567890123456'
mode = 'ECB'
plaintext = '1234567812345678'

t=Gcrypt.Cipher('TWOFISH-128', mode, key16)
ciphertext = t.Encrypt(plaintext)
shouldbe = '8dfc2c5cbc722c3eda60b6f6d5d64adaa08113c4a107dc0967880359b686c1d7'
hexlify(ciphertext) == shouldbe
hexlify(ciphertext) == shouldbe
t.Decrypt(unhexlify(shouldbe)) == plaintext
t.Decrypt(unhexlify(shouldbe)) == plaintext
a=shouldbe.upper()
' '.join([a[i:i+2] for i in range(0, len(a), 2)])

key32 = key16 + '\0'*(32-len(key16))
t=Gcrypt.Cipher('TWOFISH-256', mode, key32)
ciphertext = t.Encrypt(plaintext)
shouldbe = '2d74e616829cc6d036081177fd2bd231d8858c5d39bcb2336c2071b331beee9b'
hexlify(ciphertext) == shouldbe
hexlify(ciphertext) == shouldbe
t.Decrypt(unhexlify(shouldbe)) == plaintext
t.Decrypt(unhexlify(shouldbe)) == plaintext
a=shouldbe.upper()
' '.join([a[i:i+2] for i in range(0, len(a), 2)])

好了,结论是,基本可用。不过和我用C编写的libgcrypt测试程序比起来,Python版本的256位key的加密结果后16字节竟然不太一样!怎么回事?!难道这两只鱼非得要把每16字节一块单独进行运算吗?没办法,理论功底不够,暂且放下,等回头再试试吧。

补:有人提到import Gcrypt会出错,系统提示“No module named _Gcrypt._Random”。出现这种情况一是在libgcrypt-py-0.1.0中执行的import命令,python在现有的目录结构中找不到_Random.so所致;另一个原因是,原代码中的setup.py缺少上面patch中的“packages=['_Gcrypt'],”这一行,这导致_Gcrypt/__init__.py没有被安装到系统中,这也同样会使import出错。

2005-03-10

在Python中接收和处理信号量

今天写程序,用到了信号量,做一下下笔记:
#!/usr/bin/env python
# sig.py
# signal test
import time
import signal
import sys

NEEDEXIT=False
def SignalHandler(sig, id):
global NEEDEXIT
if sig == signal.SIGUSR1:
print 'received signal USR1'
elif sig == signal.SIGHUP:
print 'received signal HUP'
elif sig == signal.SIGTERM:
print 'received SIGTERM, shutting down'
NEEDEXIT = True

signal.signal(signal.SIGUSR1, SignalHandler)
signal.signal(signal.SIGHUP, SignalHandler)
signal.signal(signal.SIGTERM, SignalHandler)

while 1:
if NEEDEXIT:
sys.exit()
time.sleep(1)

在我的debian上,可以使用的信号量:
0$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 33) SIGRTMIN 34) SIGRTMIN+1
35) SIGRTMIN+2 36) SIGRTMIN+3 37) SIGRTMIN+4 38) SIGRTMIN+5
39) SIGRTMIN+6 40) SIGRTMIN+7 41) SIGRTMIN+8 42) SIGRTMIN+9
43) SIGRTMIN+10 44) SIGRTMIN+11 45) SIGRTMIN+12 46) SIGRTMIN+13
47) SIGRTMIN+14 48) SIGRTMIN+15 49) SIGRTMAX-15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

启动一下程序,测试一下:
0$ python sig.py &
[1] 29465
0$ kill -1 29465
received signal HUP
0$ kill -SIGHUP 29465
received signal HUP
0$ kill -10 29465
received signal USR1
0$ kill -SIGUSR1 29465
received signal USR1
0$ kill -15 29465
received SIGTERM, shutting down
0$
[1]+ Done python sig.py
0$

程序还是挺配合的 :) 这样以后就可以直接用 kill PID 来让我的程序“协议”退出了,哈哈。

Post by Gnome-blog

sudo apt-get install gnome-blog


gnome-blog-poster



Gnome-blog功能简洁,支持blogger.com,很适合快速发布blog。

可惜,最后的试验不成功--不仅文章没有标题,而且所有中文都变成了乱码,难道是对我utf8的汉字编码水土不服!?

2005-03-09

我使用的Blogger模板

Zope平台的ftp换到真正纯文件的ftp,又调整了一下自己的blogger模板。在自己手里放着也是放着,还是发布出来,说不定以后会帮到某位也用blogger和ftp发布的朋友呢。

最初的模板是来自于blogger.com的一个素雅的例子,手工调整了一点布局;增加了HaloScan提供的Trackback功能;增加了计数器;增加了trueFresco提供的List referrers功能:

2005-03-07

庆祝我的Blog又获新生!

哈哈,太棒了!

不用再等freezope.org修复ftp的问题了,从linuxfire找到了空间存放我的blog。感谢linuxfire的主人hf_linux,也要感谢FKtPp的热心帮助。