2010年4月29日星期四

用Python写二进制文件

参考了http://linux.byexamples.com/archives/478/python-writing-binary-file/。
binaascii可以在二进制数据和ASCII表达之间互相转换。Python程序如下:

#! /usr/bin/env python
import binascii
f = open('m', 'w')
hs='2dd31d1c'
hb=binascii.a2b_hex(hs)
f.write(hb)
f.close()

之后可以用bvi来验证写入结果。

Debian如何保证安装包的安全

Debian如何确保用户从镜像下载的文件不是被人篡改的呢?简单地说,就是Debian对Release文件(包含各个包的MD5指纹)进行签名,用户通过Debian提供的公钥来验证签名文件(Release.gpg),以确保各个包的MD5指纹和Debian提供的一致(表明其未被篡改)。详细的介绍见Debian的文档:

2010年4月23日星期五

同步时间

今天打开我个人的FreeBSD服务器,发现系统时间和标准时间差了15分钟。这个电脑很老了,而NTP我又没有弄好,所以会差这么多。其实NTP很好配置,照着FreeBSD手册里的文档,就可以配置好简易的NTP了。Linux下的NTP配置应该也差不多,查看发行版的相关文档即可。

2010年4月15日星期四

Linux下的TTS程序

我觉得TTS (Text to Speech) 可以这么用:比如你一直在电脑前看文档,需要离开一下椅子,但是还希望接着"看",可以让TTS程序来帮你把文字读出来。这样不耽误事情,还可以继续学东西。

Linux试用了两个TTS程序:espeak和festival。
Espeak:
Package: espeak
Version: 1.41.01-0ubuntu1
Description: A multi-lingual software speech synthesizer
 eSpeak is a software speech synthesizer for English, and some other
 languages.
 .
 eSpeak produces good quality English speech. It uses a different synthesis
 method from other open source text to speech (TTS) engines, and sounds quite
 different. It's perhaps not as natural or "smooth", but some find the
 articulation clearer and easier to listen to for long periods.
 .
 It can run as a command line program to speak text from a file or from stdin.
 .
 It works well as a "Talker" with the KDE text to speech system (KTTS), as an
 alternative to Festival for example. As such, it can speak text which has been
 selected into the clipboard, or directly from the Konqueror browser or the Kate
 editor.
 .
   * Includes different Voices, whose characteristics can be altered.
   * Can produce speech output as a WAV file.
   * Can translate text to phoneme codes, so it could be adapted as a front end
     for another speech synthesis engine.
   * Potential for other languages. Rudimentary (and probably humourous)
     attempts at German and Esperanto are included.
   * Compact size. The program and its data total about 350 kbytes.
   * Written in C++.
Homepage: http://espeak.sourceforge.net/
Festival:
Package: festival
Version: 1.96~beta-9ubuntu1
Description: General multi-lingual speech synthesis system
 Festival offers a full text to speech system with various APIs, as well an
 environment for development and research of speech synthesis techniques. It
 includes a Scheme-based command interpreter.
 .
 Besides research into speech synthesis, festival is useful as a stand-alone
 speech synthesis program. It is capable of producing clearly understandable
 speech from text.
Homepage: http://www.cstr.ed.ac.uk/projects/festival/

Espeak默认从stdin读入文字,然后用英语读出。Espeak支持55种语言,试了试英语、法语,还有普通话,挺好玩的,停顿很自然。
Festival貌似用到了Lisp语言,默认进入交互模式,用
festival> (SayText "linux is great")
或者
festival> (tts "/home/tux/ss" nil)
用文本文件作为参数读出来。
Festival要安装festvox开头的包,才能有语音出来。

用Python计算日期

经常会碰到这样的问题:比如我的一个水木社区的账号生命力还有281天,由于生命力是一天减一,所以281天后我不上线这个账号生命力就会变成零,账号会死掉。那么今天后的281天后是哪天呢?用Python可以非常方便地计算出来:

In [1]: import datetime
In [2]: datetime.date.today() + datetime.timedelta(281)
Out[2]: datetime.date(2011, 1, 21)

就是说281天后是2011年1月21日。

(2011年9月20日更新)如果要计算两个日期之间的天数,可以:
>>> datetime.date.today()-datetime.date(2010,12,19)
datetime.timedelta(275)
就是说从2010年12月19日到“今天”过了275天。

2010年4月12日星期一

垃圾箱中的wave

打开Google Wave的垃圾箱,发现里面一个已经被我删除的wave,十几天前被对方回复了,显示未读,但是一直还是在垃圾箱里面。我觉得这个算是一个严重的Bug了,对方都回复了,即使原本在垃圾箱里面,也应该放到收件箱里面。我又用Gmail试验了一下,一个会话如果被删除,又得到回复,那么回复会进入收件箱,而不是垃圾箱。

因为电邮是一封一封的,虽然有线索,但是每封邮件都可以单独处理。但是wave的回复和原文都始终是一个wave,目前的状态下不是分开的。所以如果有了新的回复,在不拆开这个wave的前提下,要么把垃圾箱里面的wave再挪回收件箱,要么就在垃圾箱里面接收对该wave的更新了。

对这个问题,Google还需要提供一个完善的解决办法。

虚拟机崩溃

我以前总是对VirtualBox的虚拟机不放心。因为每个虚拟的系统,在主系统上就对应一个巨大的映像文件VDI文件。如果这一个文件出点问题,整个系统就完蛋了。相比每个文件也都是单独的话,可靠性就不高了。这只是我的一个假想,但是昨晚的事情证明了这样的文件确实不可靠。

软件提供的功能,我总是喜欢去折腾。我的VB里面装了个Windows XP。我在Linux下没法和我爸爸视频聊天,因为他没有Skype,而Gtalk在Linux下又不支持视频聊天。为了支持USB,我已经把开源版的VB换成了不开源的版本。我在XP的Chrome里面,登录Gmail,打开视频聊天,能看到自己和对方的视频,也能听到声音。嗯,还不错。可是突然一下整个虚拟XP的窗口就关了,这应该不能算是Windows崩溃,而是VirtualBox崩溃了(但主窗口还在)。又试一次,结果整个Ubuntu桌面死机了。这样玩,破坏力太大了。只能强行重启电脑了。但是杯具还在后面。

重启再打开VB,XP虚拟机就进不去了。启动条滚动几下后,就蓝屏自动重启。这样多次都没法进去,只好在虚拟机里面挂载XP的安装盘,想修复一下。进入XP安装盘的修复模式,要求输入管理员密码。这个我都不知道,连密码都没有,哪里来管理员密码。还打算去找个找回密码的软件呢,再重启从硬盘启动,发现系统竟然可以进去了。登录前自动运行了磁盘检查,看起来磁盘错误很多,修复了很多问题。终于可以进去了,不用再为一个虚拟机去折腾了。

虚拟机崩溃的原因已经很清楚了,就是Ubuntu死机的时候,我强行重启,XP的VDI文件没有Sync到硬盘上,导致组成整个系统的单一文件不完整,后果自然很严重了。其实,当时很可能Linux内核本身并没有死掉,我应该按下ALT+SysRq+S键,Sync所有的文件,然后再重启,这样就可以比较安全地重启系统,不至于让虚拟系统崩溃了。

现在VPS很流行,这样如果发生类似上面的意外,后果岂不是会比较严重呢?VMWARE的虚拟机也是一个映像文件。需要赶紧研究一下Xen,看看Xen里面是怎么弄的。