又是一个冬天

到了冬天我就想回家,想看家里白茫茫的雪,路上的薄冰,嘴边的哈气,窗户上的冰花,冻的瑟瑟发抖的小狗。朋友问我为什么喜欢冬天,因为冬天里的回忆太多了,多的想也想不完。

记得上初中的时候的冬天比现在的冬天还要冷一些,天还没有全亮就要出门去上学,一开门外面的冷空气扑面而来,一口气被憋了回去。就这样头顶着寒风走到汽车站的时候嘴边的围巾已经是白色的了。

从学校里刚刚毕业的时候什么都不懂,四处碰壁。一次和朋友一起逛街,在路边的地摊上吃不凉的汤条,听着旁边加州牛肉面餐厅里放的《西游记》的插曲,那首歌给我的感觉是象生活在世外冰源,身边嘈杂的人群完全和自己无关。我所拥有的只是静静地落在身边的雪,他们的安静洁白让我的心也被净化了,他们的冷静沉着让我的心也不在浮躁。

记得刚刚去电信局工作的时候也是冬天,新工作新同事每天在紧张和兴奋中度过,下班的时候天虽然已经黑了,仰望满天飘的雪花在路灯的辉映下象花瓣一样翩翩飞舞,感觉自己也要飞上去了,似乎可以听到那些在寒风中蹦着跳着雪花的笑声。

冬天的回忆实在太多了,喜欢冬天的冷冬天的雪冬天的风。可是这一切却只能在回忆中感受了。在的生活是即不能回去看海月,又不能回家感受冬天,只能呆在这里学日语,我要怎样努力才可以达到那感觉远不可及的目标呢。就算是学成了回到那陌生的城市一家人团聚,那又将会是什么样的生活。一想到这些感觉头象是在旋转,找不到重心了。渐渐地我似乎看到了海月蹦蹦跳跳放学回家的样子,看到老公坐在电脑前兴致勃勃地看新闻的样子,和一家人回老家的样子。这就是人们说的生活,有时候你可以选择一些,而还有一些是不容你选择的。


合唱団への手紙

みんなは心から出てきた声で歌を歌いました。本当にありがとうございます。歌が終わった時、私はもう一曲が聞きたいと思いました。中学生は多感な年齢です、たくさんの事がよく分かりませんけど、先生にみんなは3時間かかって、夜間学校はどんな学校です、なんであります、いろいろ疑問が分かるようになりました、と聞きました。そしてみんなは真剣な態度できれいな声で合唱ができました。みんな理解してくださってありがとうございました。

我会说话和走路了

就在那个专门为海月买的摄像机出故障的几天里,我开始说话和走路了。很遗憾没有记录下这一历史性的时刻。现在大妈把伯伯的摄像机带回来了,并且给家里的电脑配上了一个摄像头,这样爸爸妈妈随时都可以欣赏到我的音容笑貌。

现在我觉得我完全有能力一个人脱手走路了,不过大人们总是不放心,所以我身边一直都有人看着,以备我随时跌倒。其实我走路的时候很稳,不慌不忙,两只手也伸展开,起到平衡的作用,爸爸说我这象是在走钢丝。

其实我早就能听懂大人们说的话了,现在我也开始学着他们的发音,而不是用我那独特的婴儿用语了。毕竟我将来得走向社会,不是有这么一句话么:不要输在起跑线上。我现在会说爸爸、妈妈、爷爷、奶奶、阿姨、好等单词了。并且能够分别好几十个图片,前几天我给爸爸妈妈表演了一回,我一边玩着我的脚丫,一边听奶奶说她要让我找的单词,然后我就准确地从图片堆中找出来。而且我还能把图片和身边的东西结合起来,例如如果我找到了袜子的图片的话,我会指奶奶的袜子,并且把自己的袜子拽下来;如果图片是耳朵的话,我会指奶奶的耳朵和我的耳朵;如果是时钟的话,我会指家里的墙上挂的时钟......,家里这些东西我早就滚瓜烂熟了。

海月一天天地长大了,可惜爸爸妈妈没有看到。还好听说妈妈明年1月底会回来看我,我要再努力努力,争取在妈妈回来之前学会跑步和唱歌。CoolTongue out


读写Rockbox的字体

前些天发现本博客提供的simsun字体中的标点符号上下颠倒了,在阅读文本的时候看上去很不舒服,所以一直想修正这个错误,今天终于找到一点空闲时间了。

由于bdf文件为文本文件,修改起来比较麻烦,所以我决定直接用程序读取rockbox的fnt字库格式。Rockbox网站上可以下载到完整的代码,因此分析fnt字库的格式也没有什么困难的。

有关fnt的读取都是在font.c中完成的,fnt格式在font.h中有介绍:

/*
* .fnt loadable font file format definition
*
* format len description
* ------------------------- ---- ------------------------------
* UCHAR version[4] 4 magic number and version bytes
* USHORT maxwidth 2 font max width in pixels
* USHORT height 2 font height in pixels
* USHORT ascent 2 font ascent (baseline) in pixels
* USHORT pad 2 unused, pad to 32-bit boundary
* ULONG firstchar 4 first character code in font
* ULONG defaultchar 4 default character code in font
* ULONG size 4 # characters in font
* ULONG nbits 4 # bytes imagebits data in file
* ULONG noffset 4 # longs offset data in file
* ULONG nwidth 4 # bytes width data in file
* MWIMAGEBITS bits nbits image bits variable data
* [MWIMAGEBITS padded to 16-bit boundary]
* USHORT offset noffset*2 offset variable data
* UCHAR width nwidth*1 width variable data
*/

根据这个格式,我写了一个小python的测试程序验证,其中的变量f是某个打开的字库文件:

version = f.read(4)
maxwidth, height, ascent, pad = unpack("HHHH",f.read(8))
firstchar, defaultchar, size, nbits, noffset, nwidth = unpack("LLLLLL", f.read(6*4))
if nbits >= 0xffdb:
nbits1 = (nbits/4+1)*4
else:
nbits1 = (nbits/2+1)*2

bits = f.read(nbits1)
offset = array("L", f.read(noffset*4))
width = array("B", f.read(nwidth))

其中bits储存的就是所有的点阵字形的信息,要找到某个文字的点阵字形的话,需要用到offset和width。fnt字库是按照文字的UCS-2编码的,所以首先要知道某个文字的UCS-2编码才能找到与其对应的字形信息。Rockbox中有完整的编码转换程序,可以参考一下。我用的办法是用notepad++ ,把文件编码改为UCS-2编码,然后输入我要查找的文字,然后改为16进制查看方式,就可以知道文字对应的UCS-2编码了。下面的Python程序找到文字对应的字形信息,参数char是一个整数,表示字符的UCS-2编码,例如逗号“,”的编码是0xff0c。

那么得到的字形信息是如何表示文字的二位点阵的呢?在Gray_draw.c中函数gray_mono_bitmap_part的前面有这么一段说明:

/* About Rockbox' internal monochrome bitmap format:
*
* A bitmap contains one bit for every pixel that defines if that pixel is
* foreground (1) or background (0). Bits within a byte are arranged
* vertically, LSB at top.
* The bytes are stored in row-major order, with byte 0 being top left,
* byte 1 2nd from left etc. The first row of bytes defines pixel rows
* 0..7, the second row defines pixel row 8..15 etc. */

根据这段说明我写了一个把rockbox 内部monochrome bitmap格式转换为二维点阵的程序。

01def readCharList(char):
02    bitmapOffset = offset[char]
03    srcBytes = width[char] * ((height + 7) / 8)
04    return bits[bitmapOffset:bitmapOffset+srcBytes]
05 
06def getBitmap(char):
07    charlist = readCharList(char)
08    w = width[char]
09    h = height
10    b = [[' ' for x in range(w)] for y in range(h)]
11    for i, c in enumerate(charlist):
12        for j in range(8):
13            v = (ord(c) >> j) & 0x0001
14            if v:
15                b[j+(i/w)*8][i%w] = '#'
16    return b
17 
18def printBitmap(bitmap):
19    for r in bitmap:
20        print "".join(r)
 

下面是一个显示的例子,printBitmap( getBitmap( 0x597d )),0x597d为“好”的UCS-2编码。
  #
# ######
# #
##### #
# # #
# # #
# #########
# # #
# # #
# #
# # #
# # #
# ##
有了上面这段程序,就很容易把标点符号纠正过来了。点击下载rockbox simsun 字库

かわいそうお婆さん

この間あるお婆さんはバスを降りるとき、ガードが出てくるのを待っているあいだ、端に立ってどいてあげた。降りるとき注意していながったから、踏み外した、歯を地面に打って、歯がぐらついた。私は同じバスに乗っていたから、ちょっと見ました。

吹奏楽部への手紙

私にとって そうなん あんなに 美しい 美しく 吹奏 演奏した曲を聴くのははじめてです。本当に感動しました。みんなはまだ中学生ですのに、もう専業 専門のレベルを達成したと思います。練習を続けて十年十五年あとぜひ専業吹奏人 専門演奏家 になれます。機会があれば中国で演奏してください。必ず人気があります。その時私はみんなのファンになった になるでしょう。

// 草先生より訂正してもらいました //


まずい料理

美味しい料理 は たくさんあります。でも 私が忘れられないのはまずい料理です。

私が妊娠した時 何も食べたくなくて、油の味を聞く においを嗅いだだけで 吐き気がしていました。主人はとても心配して、自分で トマトやナス で料理 を作ってくれました。主人 自分は豚肉が好き ですけど なのに、油 でも入れなかった も使わず、塩だけ 入れました で味付けしていました。味は本当   美味しくな  かった ですけど、私は食べられました。主人は「美味しい美味しい」と言って、私にたくさん食べさせ たいんでした ようとしてくれました

// 草先生より訂正してもらいました //


谁说天下没有免费的晚餐

来到日本之后最明显的感受是日本免费的东西真多呀。超市里可以免费尝各种各样的食品,经常看到两三个孩子围着一个果盘肆无忌惮地大吃着。新炸的鸡块、刚拌的凉菜、韩国正中的辣白菜,当然也有日本的生鱼片。这还是小餐一碟,连正式的晚餐都可以免费,只要你说自己初中没毕业。

日本政府为了普及初中义务教育,给那些初中没有毕业的人提供免费的学习机会。为了不影响大家的正常工作,上课时间是晚上5点半到8点40,所以中间提供免费的晚餐。晚餐虽然不是很高级但内容也算丰富,各色日本小菜一盒、加上一盒饭还有一小盒牛奶,并且提供茶水。在学校里学习用的纸张书本,美术用具等都是由学校来负担。而且学校给发正式的学生证,有了这个学生证可以免费看各种展览,参观博物馆,游玩水族馆,公园等各种旅游设施。每年3月份还会给一些通勤补助,钱直接打到学生的银行帐户里。到了秋天会有一次秋游,去的地方都是附近较为有名的旅游观光地。可以说只要去个人就万事大吉。

每年学校里都会举行一次文化发表会,主要有作品展示和文艺表演。家属,朋友甚至附近的居民都可以自由参加。

   
 每位学生一个汉字 每位学生一幅画
   
 每位学生一篇短文 每位学生一只招财猫
   
 每位学生一个人形 够专业的乐器

 


几个Python的library

每当我想用电脑实现一点什么功能,总是先上google找找是否有Python的库可以用。下面是最近收集的几个:

PyMedia

PyMedia is a Python module for wav, mp3, ogg, avi, divx, dvd, cdda etc files manipulations. It allows you to parse, demutiplex, multiplex, decode and encode all supported formats. It can be compiled for Windows, Linux and cygwin.

简单的说就是用Python来进行音频的编码和解码,不过由于Python的运行速度太慢,解码后的数据也只能直接传给声卡播放,无法实时的做音频处理,所以如果要搞DSP的话还是得用C语言。这个Pymedia可以用来做一些音频转换的批处理工作。

Web.py

一个很小的Web Application Framework,只有一个文件,HYRY Album 就是用它做的。

ClientForm

ClientForm is a Python module for handling HTML forms on the client side, useful for parsing HTML forms, filling them in and returning the completed forms to the server.

用Python程序分析HTML的表单,并且可以填写并返回给服务器。

IEC

IEC is a python library designed to help you automate and control an Internet Explorer window. You can use this library to navigate to web pages, read the values of various HTML elements, set the values of checkboxes, text boxes, radio buttons etc., click on buttons and submit forms. 

用IEC可以方便的控制IE窗口,可以让IE自动打开某个地址,在某个输入框中输入信息,点击某个按钮提交表单内容。