分类目录归档:老博客上的内容

http://www.cbsr.ia.ac.cn/users/sqyu/blog/上的内容

居家男人升级至0.2版

自从前些日子买了微波炉,
我就变成了“居家男人0.1版”,
今天成功做了鸡蛋羹(应该叫这个名字吧),
顺利升级为“居家男人0.2版”。

一时冲动买了个微波炉,我就钻研用微波炉煮鸡蛋。
我是以科研的精神来研究微波炉煮鸡蛋。
微波炉煮鸡蛋有三种煮法:
(1).带壳鸡蛋放进去加热;
(2).鸡蛋去壳放入碗中,加水,然后置于微波炉内;
(3).鸡蛋去壳放入碗中,加水,搅成鸡蛋糊糊,然后置于微波炉中。
微波炉火力有:
A.高火
B.中高火
C.中活
D.小火等

先不考虑加热时间,根据排列组合原理,这就有3X4=12种做法。
如果采用逐个实验的方法,至少需要12只鸡蛋,
至少需要12天(每天我只能做一次实验,还有别的忙呢)
才能完成所有可能,并选择出最优方案。

当然,搞科研不能这样傻搞,先要排除一些肯定不合理的组合。
微波炉加热是从内往外热,带壳鸡蛋在内会爆炸,所以"1"先被排除掉。
另外,根据中学课本上的知识,鸡蛋加热到70摄氏度左右就会凝固,所以不能用高火加热,采用中火则可以。
所以现在只有两种方案了
方案一:(2)-C
方案二:(3)-C

在方案一的实验中,刚开始就发生了一次严重的实验事故:“蛋黄爆炸事故”,一声巨响,蛋黄沾满了微波炉内壁。原来蛋黄之中还是有气体的。其后先把蛋黄切割再加热,但是还是很容易发生蛋黄爆炸,不过没有第一次的事故严重。

另外,方案一煮出的鸡蛋口味不佳,后来跟vlmv讨了些盐,口味有所改善。

方案二是我今天晚上进行的实验,加热前,加入适量水和盐(根据常识,不加水鸡蛋会煮干),然后充分搅碎。放入微波炉加热片刻。打开炉门,我的妈呀,这是我做的么?黄灿灿的,吃起来又软又可口。
所以我决定把自己升级为“居家男人0.2版”。

OpenCV 0.9.7 linux版本cvQueryFrame函数内存泄露

发现自己写的程序存在内存泄露,
我写代码的时候很细心的,怎么还有内存泄露?
查了一通也没有查出原因。

然后试了一下从摄像头读取视频,没有泄露;
从文件读视频,有泄露。
那么,这应该不是我的问题。
写了一个简单的测试程序,确定了是度视频文件时候,cvQueryFrame存在内存泄露。

我用的是OpenCV 0.9.5 (beta5),已经发布很长时间了,
Yahoo! OpenCV group上输入 “cvQueryFrame memory leak”一查,果然有答案。

只要简单修改一下源代码则可:
文件otherlibs/highgui/cvcap.cpp中的函数:
icvGrabFrameAVI_FFMPEG(…..)
在函数结束处的return valid;语句之前添加一行释放内存代码则可,如下:

 the_end:
    av_free_packet(pkt); //请添加这一行,释放内存
    return valid;
}

重新编译安装OpenCV,问题得以解决。

CVS中的OpenCV这个问题早已经解决。


Update:
不过,这样改了后,读取视频文件的最后一帧,好像有问题,
反正到了最后的时候,程序报segment error,
不管了。

咳咳,廉颇老矣

从上个学期就就计划这个学期重拾跑步旧业,
这个学期都过去一个多月了,
今天终于跑了可喜的第一次。

围着宿舍楼跑,这样跑的确比较土,
但是,实在没有办法那。
跑了两三圈,就觉得胸闷,腿沉,
感觉就是两条无力的腿推着肥硕的身躯往前挪。
想当年,接力马拉松赛跑五十几名。
跑个十公里啥的没太大感觉,跑完照样谈笑风生,
什么强度的跑步没有经过啊?
可现在,竟然一千米都跑不动了,
哎,廉颇老矣,虎落平阳了……

跑了一会儿,去做了会儿单双杠,
还练了一下腹肌,
一定要把六块腹肌练出来,嘿嘿。

晌午惊魂

中午,懒散的坐在座位上,
往后伸了一下懒腰,
只听"咔嚓"一声巨响,::surprised::
我依然在椅子上,但是椅子已经躺在了地上,也就是:我仰面躺在了地上,
同实验室的其他人闻声围了过来,
我赶紧爬起来,椅子又被我毁了。
这转椅质量太差了,
下面的一个关键部件竟然用劣质塑料做的,一用力就迸裂了。
幸亏我不重,
如果哪个大块头像我这样倒下去,
估计会砸穿地板,
落到下面一层去。

转载:Emacs的字体设置方法总结(第二版)

发信人: brep (哪个虫儿敢做声), 信区: Emacs
标 题: Emacs的字体设置方法总结(第二版)
发信站: 水木社区 (Wed Mar 22 16:18:03 2006), 站内

根据 Dieken 的建议,添加了 windows 下的字体设置方法。

* Emacs的字体设置方法总结

在 X 下使用 emacs 时,如果字体配置不好,emacs 就会显得十分丑陋。而作为
emacs 的用户,每天相当长的时间都在盯着这个编辑器,如果字体不好看,对眼
睛是一种严重的伤害。除非有严重的自虐倾向,没有人会喜欢这种感觉。

我在这篇短文中总结了 emacs 的字体设置方法,由于 linux 的字体设置本身就
是一个很复杂的问题,本文如有疏漏,希望大家指正。

* 两种字体系统

实际上 XFree86/Xorg 包括了两种字体系统:核心字体系统和xft字体系统。核心
字体系统历史悠久,传统的 X 程序使用的都是核心字体系统。但是随着人们对字
体的显示要求越来越高,核心字体系统渐渐地有些落伍了。为了更好地支持矢量
字体,实现抗锯齿、子像素光栅化等高级特性,xft字体系统开始浮出水面。

由于 xft 字体系统所具有的种种优良特性,现代的 X 程序开始普遍采用 xft
字体系统绘制文字,逐渐开始取代核心字体系统。例如,基于 Qt/Gtk2 的程序
采用的都是 xft 字体系统。

但是核心字体系统并没有完全退出历史舞台,很多老的 X 程序仍然采用的是核心
字体系统,要把这些程序全部迁移到 xft 字体系统还要做许多工作。很不幸
emacs 就是这样一个程序。有一个正在开发中的 emacs 分支(XFT_JHD_BRANCH),
就是试图让 emacs 支持 xft 字体系统,可惜这个分支还很不成熟。也许下一个
代的 emacs 会支持 xft,但目前我们还只能接受 emacs 不支持 xft 的现实。

* 字体的安装

由于目前的状况是两种字体系统并存,我们安装字体时就必须同时照顾到两者。
有时候在网上我们会看到一些字体安装经验介绍,比如:“安装字体太简单了,
把字体丢到 ~/.fonts 下面,执行一下 fc-cache 命令,你就可以在 firefox 中
使用这个字体了。”实际上,这只是为 xft 字体系统安装字体的方法,按这种方
法安装的字体,采用核心字体系统的程序无法使用,也就是说 emacs 无法使用这
样安装的字体。

下面我们介绍为核心字体系统安装字体的方法,很多人对这种方法记忆犹新,因
为在几年前,xft出现之前,为linux安装字体采用的都是这种方法。

第一步,拷贝字体。选择一个目录,把想用的字体拷贝到这个目录下。比如:

cp simsun.ttf /path/to/my/truetype/font/simsun.ttf

第二步,生成 fonts.scale 与 fonts.dir

在你的字体目录下用 mkfontscale 命令生成 fonts.scale 文件,用
mkfontdir 命令生成 fonts.dir 文件,注意命令的顺序不能颠倒,否则生成
的 fonts.dir 是空文件。其实这两个文件的内容是一样的,因此也可以直接
cp fonts.scale fonts.dir

不知道是什么原因 mkfontscale/mkfontdir 命令生成的 fonts.scale 文件中
缺少对 gbk 字体的支持,因此需要手工编辑 fonts.scale,添加一行:

simsun.ttf -misc-simsun-medium-r-normal–0-0-0-0-p-0-gbk-0

如果你用的是不同的字体,这一行的内容可能不太一样,但需要注意的是必须要
加上一个以 gbk-0 结尾的行。同时,文件第一行的那个数字要加1。
fonts.dir文件也要进行相应的修改,使这两个文件保持一致。如果不进行这
一步,就无法使用 gbk 字体。

第三步,修改 /etc/X11/xorg.conf (如果你在用 XFree86, 那就修改
XF86Config-4):

找到 Section "Module", 加载 freetype 模块:

Section "Module"
……
Load "freetype"
……
EndSection

找到 Section "Files", 添加你的字体路径:

Section "Files"
……
FontPath "/path/to/my/truetype/font"
……
EndSection

最后重新启动 X,这时候用 xlsfonts 命令应该能看到你安装的字体。注意,只
有 xlsfonts 列出的字体,emacs 才能使用。

* emacs的字体设置

由于 emacs 是个支持多语言的程序,它支持很多种字符集,而一种字体一般只覆
盖一个或几个字符集,因此只用一种字体是无法显示 emacs 支持的所有文字的。
因此在emacs中需要设置 fontset,也就是多种字体的集合,或者叫做字体集。

如果我们不指定 fontset, 那么 emacs 会使用默认的 fontset-default 来显示
字体。如果你觉得这种字体不好看,就需要自己定义 fontset。定义 fontset 有
两种方式,一种是在 ~/.emacs 中使用 create-fontset-from-fontset-spec 函
数,令一种是在 ~/.Xdefaults 中定义资源。我们分别介绍这两种方法。

** 使用 create-fontset-from-fontset-spec

每个 fontset 都有一个很长的正规名称,例如:

-*-courier-medium-r-normal–14-*-*-*-*-*-fontset-courier

为了方便起见也可以使用短名称,就是最后两段:fontset-courier

那么这个名称是怎么生成的呢?首先我们用 xlsfonts 命令找到自己满意的字体,
比如:

-adobe-courier-medium-r-normal–14-100-100-100-m-90-iso8859-1

然后把最后两段去掉,也就是把 iso8859-1 去掉,换上自己起的字体集名称,
比如 fontset-courier,最后把我们不关心的部分用 `*' 号取代就可以了,
注意,用 xlsfonts 列出来的字体名称中,有些字段为 0,这些是可缩放的矢量
字体,这些 0 不能保留,必须用数字或 `*' 号取代,例如,

-adobe-courier-medium-r-normal–0-0-0-0-p-0-iso8859-1

要改为:

-adobe-courier-medium-r-normal–14-*-*-*-p-*-fontset-courier

还有一点需要注意,尽量不要选用可缩放的矢量字体,因为 emacs 不支持 xft,
因此无法打开抗锯齿,这些字体会显得很毛糙,不好看。

选定了字体就可以用 create-fontset-from-fontset-spec 函数定义 fontset
了,这个函数很简单,它的参数是个字符串:

(create-fontset-from-fontset-spec
(concat
"-*-courier-medium-r-normal-*-14-*-*-*-*-*-fontset-courier,"
"chinese-gb2312:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gb2312*-*,"
"mule-unicode-0100-24ff:-*-simsun-medium-r-*-*-14-*-*-*-c-*-iso10646*-*,"
"korean-ksc5601:-*-*-medium-r-*-*-14-*-*-*-*-*-ksc5601*-*,"
"chinese-cns11643-5:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,"
"chinese-cns11643-6:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,"
"chinese-cns11643-7:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,"
"sjis:-*-medium-r-normal–14-*-jisx0208*-*"))

这个字符串的第一段是 fontset 的名称,实际上也指定了英文(ascii字符集)字
体,后面的各段格式都是“字符集:字体”,分别为不同的字符集指定字体,例如
上面的定义中,ascii采用courier字体,chinese-gb2312采用simsun字体,以此
类推。

定义好了 fontset 以后,我们就可以让 emacs 使用这个fontset了:

(set-default-font "fontset-courier")

另外,为了让 emacs 创建新的 frame 时 (C-x 5 系列命令) 采用我们指定的
fontset,还要进行下面的设置:

(setq default-frame-alist
(append
'((font . "fontset-courier")) default-frame-alist))

** 在 ~/.Xdefaults 中定义 fontset

第二种定义 fontset 的方法是在 ~/.Xdefualts 中定义资源字符串:

Emacs.Fontset-0:-*-courier-medium-r-normal-*-14-*-*-*-*-*-fontset-courier,\
chinese-gb2312:-*-simsun-medium-r-*-*-14-*-*-*-c-*-*-*,\
mule-unicode-0100-24ff:-*-simsun-medium-r-*-*-14-*-*-*-c-*-iso10646*-*,\
korean-ksc5601:-*-*-medium-r-*-*-14-*-*-*-*-*-ksc5601*-*,\
chinese-cns11643-5:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,\
chinese-cns11643-6:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,\
chinese-cns11643-7:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,\
sjis:-*-medium-r-normal–14-*-jisx0208*-*

然后让 emacs 使用这个 fontset:

Emacs.font: fontset-courier

更改了 ~/.Xdefaults 的内容以后要执行:

xrdb .Xdefaults

命令,这样更改才能起作用。

上述两种方法都可以实现同样的效果。但是有一点细微的差别,采用第一种方法
时,fontset 的定义是写在 ~/.emacs 中的,而 emacs 启动过程中,是先建立了
第一个窗口,然后才读取 ~/.emacs 的,建立第一个窗口时,因为还没有读到我
们定义的 fontset, 因此它会采用 fontset-default 创建第一个窗口,当读到我
们定义的 fontset 时,再进行调整,如果我们定义的 fontset 与默认的
fontset-default 字体差别比较大,就会看到emacs进行了一个调整窗口大小的动
作,这个动作延缓了 emacs 的启动过程。而采用第二种方法则不会出现这个问题,
因此推荐使用第二种方法。

* Emacs23 (emacs-unicode-2 分支) 的字体设置

Emacs23的字体设置与上述方法类似,但也有所不同。或许是因为emacs23的实现
比较独特,或许是emacs23的bug,按上述方法指定的中文字体无法起作用。因此,
emacs23的字体设置采用下述方法:

仍然采用 create-fontset-from-fontset-spec 创建 fontset:

(create-fontset-from-fontset-spec
"-*-courier-medium-r-normal-*-14-*-*-*-*-*-fontset-courier")
(set-default-font "fontset-courier")
(setq default-frame-alist
(append
'((font . "fontset-courier")) default-frame-alist))

也可以在 ~/.Xdefaults 中这样设置:

Emacs.Fontset-0:-*-courier-medium-r-normal-*-14-*-*-*-*-*-fontset-courier
Emacs.font:fontset-courier

两种方法取其一即可。

但是设置中文字体时,采用 set-fontset-font 分别指定各种 script 的字体:

(set-fontset-font
"fontset-default" nil
"-*-simsun-*-*-*-*-14-*-*-*-*-*-gb2312.1980-*" nil 'prepend)
(set-fontset-font
"fontset-courier" 'kana
"-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend)
(set-fontset-font
"fontset-courier" 'han
"-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend)
(set-fontset-font
"fontset-courier" 'cjk-misc
"-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend)

* Emacs for Windows 的字体设置

在 Windows 下设置 emacs 字体只能在 ~/.emacs 中进行,因为 windows 下没
有与 ~/.Xdefaults 等同的东西。除了所用字体不同以外,设置方式与linux基
本相同。下面分别给出 windows 下 Emacs22 和 Emacs 23 的参考设置:

** Emacs22 for windows 字体设置

(setq w32-charset-info-alist
(cons '("gbk" w32-charset-gb2312 . 936) w32-charset-info-alist))

(setq default-frame-alist
(append
'((font . "fontset-gbk")) default-frame-alist))

(create-fontset-from-fontset-spec
(concat
"-outline-Courier New-normal-r-normal-normal-13-97-96-96-c-*-fontset-gbk,"
"chinese-gb2312:-outline-新宋体-normal-r-normal-*-14-*-96-96-c-*-iso10646-1,"
"mule-unicode-0100-24ff:-*-新宋体-normal-r-*-*-14-*-96-96-c-*-iso10646-1,"
"chinese-cns11643-5:-*-新宋体-normal-r-normal-*-14-*-96-96-c-*-iso10646-1,"
"chinese-cns11643-6:-*-新宋体-normal-r-normal-*-14-*-96-96-c-*-iso10646-1,"
"chinese-cns11643-7:-*-新宋体-normal-r-normal-*-14-*-96-96-c-*-iso10646-1"))
(set-default-font "fontset-gbk")

** Emacs23 for windows 字体设置

(setq w32-charset-info-alist
(cons '("gbk" w32-charset-gb2312 . 936) w32-charset-info-alist))

(setq default-frame-alist
(append
'((font . "fontset-gbk")) default-frame-alist))

(create-fontset-from-fontset-spec
"-outline-Courier New-normal-r-normal-normal-13-97-96-96-c-*-fontset-gbk")
(set-fontset-font
"fontset-default" nil
"-outline-新宋体-normal-r-normal-*-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-gbk" 'kana
"-outline-新宋体-normal-r-normal-*-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-gbk" 'han
"-outline-新宋体-normal-r-normal-*-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-gbk" 'cjk-misc
"-outline-新宋体-normal-r-normal-*-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-gbk" 'symbol
"-outline-新宋体-normal-r-normal-*-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-default-font "fontset-gbk")

* 一些字体设置技巧

** 几个字体相关的命令
M-x describe-char

我们可以使用这个命令查看光标所在的字符采用的是什么字体。

M-x describe-fontset

这个命令用来查看各个字符集分别采用了什么字体。

这两个命令可以用来检验我们的设置是否发挥了作用。

** 设置字体的技巧(Dieken提供):

(1)在*scratch* buffer中输入
(frame-parameter nil 'font)
光标放在行末按C-x C-e就可以看到当前字体;
(2)Shift + MouseLeftClick可以出来字体选择对话框;
(3)M-x describe-font可以查看当前字体描述
(4)M-x set-default-font <RET><TAB>可以看到可以选择的字体。


掃數十年不庭之巨寇
擴數千里未闢之遐封

※ 来源:·水木社区 newsmth.net·[FROM: 166.111.59.*>

呼乱写点流水帐

昨天晚上,看了一下 新浪Blog
新浪的这一步做得很成功。
作为一家媒体网站,如果派出人力去采访这些公众人物,
要耗费大量人力物力,而且人家还不一定愿意理你。
拉他们来写Blog,不用采访,他们就自己说了,
给新浪提供了大量的八卦素材,
新浪不仅赚足了眼球,而且还掌握了源源不断的八卦素材,爽!

新浪Blog还有一个很大的社会意义,
它把公众人物拉到了你身边,
虽然各种八卦记者在八卦报纸上不停的八卦这些人物的生活细节,
以满足人们的“偷窥”欲望,
但是在一般老百姓心里,他们依然很遥远。
有了这个Blog,看他们写的日志,感觉他们一下子变成了自己的邻居。
比如我看了汤加丽在三环被抢,看了李亚鹏的光阴手册……感觉这些名人也是跟咱们一样的普通人,只是认识他们的人多了点而已嘛 ::wink_happy::

上午去中科院研究生院开源软件设计大赛比赛现场看了看,看了几个作者的作品介绍,有好的,也有差的。有个哥们做了个类似本科生课后作业的东西,还吹的蛮玄乎,被评委们一阵咔嚓。看来作人要低调,不要做一丁点P事就四处炫耀;还有,就是要凭实力说话,认认真真做事,把事情做扎实了,别把别人当傻子。不过还是有很不错的东西的,比如StarDict也拿来参赛了,哈尔滨工程大学有个Lighter,基于Java的Flash所见即所得编辑器,很有应用前景的一个东西。

今天上午在听参赛作品介绍时,不止一个人问我<a href="http://fsa.ia.ac.cn/?q=act18">周三活动</a>的事情,哦,看来王垠知名度还是超出我的预料啊。其实在他声明退学之前,我们就跟他联系,计划让他讲一次Emacs,后来碰到退学事件,就不得不取消。今年又请他来,看来还是关注度很高啊。

修了一个晚上水箱,好累

昨晚躺下,听见有水声,
翻了个身继续睡,
宿舍隔音不好,半夜夜深人静的时候,楼上和隔壁水龙头的声音听得到。

不知什么时候醒来,听见还是在响,
这个家伙真能洗啊…
不对,不会是马桶漏水吧,
起来一看,果然是自己宿舍的马桶漏水,
打开马桶水箱盖,拨弄了几下,好了。

再睡下,竟然梦见了水箱又漏水,
怎么也弄不好,最后浮标都断下来了,
我在梦中修了一个晚上,
起来后感觉好累::sad::,好困::yawn::
好像真的修了一个晚上一样。

STL是个好东西

最近几天在疯狂coding,
这次写代码中,尽量用C++的特性,而不是C。
比如文件操作用iostream,而不是fopen, fprintf之类。
不用char,用stl:string,
特别是STL(Standard Template Library)真是个好东西,
以前也用过里面的stl:stack, stl:list之类,
用stl写代码会心情愉悦。

顺便提供个C/C++ Reference网站:
http://www.cppreference.com/

思绪万千,下笔无言

最近“八荣八耻”突然之间冒了出来,
又要进行口号教育了,可笑可怜可悲啊,
这么多年,口号提了不少,就是没有个见效的。

这个缺失信仰的社会里,

人人不知为何而活,于是轮子、传销等等乱七八糟的东西如雨后春笋般冒了出来;

很少能有人能够静下来用心做一件事,一切都是浮夸,为了玩数字游戏,于是要在某某年把某某大学创建成世界一流大学,某某年要把xxx翻两番,……

思想教育也如此,天天喊口号,喊完口号该干啥干啥,而不是用心去教育学生诚实乐于助人守法等;

现在很多人都丧失了基本的道德观,比如前面说的剽窃,剽窃之人基本上不害羞,不脸红,而且还振振有词,哎,也难怪,从小学开始,也很少有老师真正的把剽窃、抄袭作为一件很严重的事情,大不了喝斥几句而已,点名批评一下,而不会认真的告诉他犯了一个很严重的关乎个人道德的大错误.小学生长大以后,当然也不会当做很严重的事情。

思绪有点乱,不写了