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赶紧出了。