2009年12月21日星期一

Opera 字体设置

opera
的字体选择机制进步是有目共睹的!如今选择自己想要的中文字体,或者中英文不同字体,已经非常容易方便了。

设置很快!
0. opera:config 里搜索 fonts,去掉 Enable Core X Fonts 的勾;

1. 使用你心爱的编辑器打开 $OPPATH/share/opera/ini/font.ini
这个文件,注意权限;
如果觉得权限麻烦,就复制一份font.ini到~/.opera,然后就直接修改吧。

2. 找到第 35 行,把 family: 到 =
中间的字段改成你想要的,系统中存在的中文字体,比如我的改成
 family:Vera Sans YuanTi=chinese-s try-first ;

3. 保存退出,重新启动 Opera 就可以看到你选择的中文字体的显示效果了;

scim在opera中偶尔失去响应的解决方法

这个问题很有历史了,见http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=434180中的bug报告,里面有几句话提到了解决方法:
And the problem showed up from version 1.4.6. Current transitional
solution is changing the value of \"/FrontEnd/X11/Dynamic\" in
/etc/scim/config or ~/.scim/config from \"false\" to \"true\", which is
known to unfortunately break deadkeys usage in European keyboard layouts.
So this walk around is only recommend when such problem shows up. Seems
further investigation is required.

于是打开编辑~/.scim/config
gedit ~/.scim/config
找到:/FrontEnd/X11/Dynamic = false
改为:/FrontEnd/X11/Dynamic = true
然后重新启动X,在opera中肆意蹂躏了下键盘,暂时没有出现和以前一样突然不能输入的情况。
(不过注意哦,这个方法有个问题上面也说到了:" which is known to
unfortunately break deadkeys usage in European keyboard layouts. ")
-------------------------
还在网上搜索到下面几种解决方法:(本人未测试,不知道可行否,直接转过来给大家参考)

Ubuntu 7.10下scim/libx11的bug及解决方法
在7.10版本的Ubuntu中,默认的scim模式改成了XIM。造成在有些程序中无法输入文字,即使是英文字母也不行的bug。我多次在nautilus里遇到该bug。该bug很早就被报告了,只是最近才由于默认设置的改变而更加容易出现了。不过这似乎是libx11库的bug。

launchpad上给出了两种解决办法:

1. 如果不需要使用依赖 libstdc++5库的程序。可以执行
im-switch -s scim-immodule
把scim模式改掉。但是我需要用到java6,acroread这些依赖stdc++5的程序,所以该方法不适合我。

2. 如果不需要使用deadkeys,可以按以下步骤修改:
a. 执行im-switch -s none,使得scim默认不会启动,退出并重登录
b. 修改 ~/.scim/config 文件, 将 /FrontEnd/X11/Dynamic 改为 true
c. 执行im-switch -s scim,使得scim默认启动。
但是我要用deadkeys来输入法文音标字母,所以该方法也不适合我。

于是有人给出了第三种方法,
a. 按照方法2修改设定
b. 安装 scim-uim以及 uim-latin
c. 设置一个复合键(在gnome的键盘选项中)
d. 启动scim,把输入法改为 UIM-Latin

voila!

还有个更简单的方法。既然是libx11的问题,那就应该从源头上解决,治标治本。
添加源
deb http://ppa.launchpad.net/arnegoetje/ubuntu gutsy main restricted
universe multiverse
deb-src http://ppa.launchpad.net/arnegoetje/ubuntu gutsy main restricted
universe multiverse
把libx11库更新即可。


上面那个是参照debian的bug报告:对于ubuntu用户见https://bugs.launchpad.net/ubuntu/+source/scim/+bug/66104
这里还提到了别的方法:
Bug description

In gutsy, the default mode of scim (detemined by im-switch\'s settings
\"scim\") uses XIM mode. This may cause problems in some applications and
make it impossible to input anything, even if you choose the
English/Keyboard input method. This happens most often in nautilus, but is
also seen in gedit, gnome-terminal, etc.

This bug has been around for a long time, it only became more visible
because of the change in the default settings of scim and the Ubuntu
package.

There are two work arounds for this problem:

1. If you do not use any programs linked to libstdc++5 (very few of the
Ubuntu official packages do, one know exception is the fglrx video driver
for ATi cards; but plenty of third-party programs do, such as firefox
downloaded from http://www.mozilla.com, and Adobe\'s PDF reader), you can
use the scim-immodule setting in im-switch. To change the im-switch
setting, just run \"im-switch -s scim-immodule\" command.

2. If you do not use the deadkeys (often seen on European keyboards, and
if you don\'t know what a deadkey is, you are not using it), you can
change scim\'s \"/FrontEnd/X11/Dynamic\" setting. The procedure to change
this setting is:
(a) Set scim not to start automatically (because it\'s useless to change
the configuration file when scim is running) using the command \"im-switch
-s none\". Log out and re-login.
(b) Edit your ~/.scim/config configuration file, change the
/FrontEnd/X11/Dynamic option to true.
(c) Reset scim to start automatically with command \"im-switch -s scim\".
Log out and re-login.

If you are using programs linked to libstdc++5 as well as deadkeys, there
is no known workaround for you. You may try the scim-bridge settings (you
need to install scim-bridge-* packages first), but it\'s not clear whether
it works or not (and I don\'t even know if there is a written scim-bridge
setting for im-switch of not).
This description was updated. View original description.

其实有个很简单的方法,在网页空白地方点右键打开菜单就又可以继续输入啦
按一下alt-tab切换一下,再按alt-tab切换回来也能解决问题。

2009年12月20日星期日

暗时间

如果你有一台计算机,你装了一个系统之后就整天把它搁置在那里,你觉得这台计算机被实际使用了吗?没有。因为CPU整天运行的就是空闲进程。运行空闲进程也是一天,运行大数据量计算的程序也是一天,对于CPU来说同样的一天,价值却是完全不一样的。

大脑也是如此。

善于利用思维时间的人,可以无形中比别人多出很多时间和生命,从而实际意义上能比别人多活很多年。我们经常听说"心理年龄"这个词,思考得多的人,往往心理年龄更大。有人用10年才能领悟一个道理,因为他们是被动领悟——只有在现实撞到他脸上的时候才感到疼,疼完了之后还是不记得时时提醒自己,结果很快时过境迁抛之脑后,等到第二次遇到同一个坑的时候早忘了曾经跌过跟头了,像这样的效率,除非天天摔坑里,否则遗忘的效率总是大过吃亏长的记性。善于利用思维时间的人则能够在重要的事情上时时主动提醒自己,将临时的记忆变成硬编码的行为习惯。

每个人的手表都走得一样快,但每个人的生命却不是。衡量一个人生活了多少年,应该用思维时间来计算。举一个极端的例子,如果一个人从生下来开始就呆在一个为他特殊建造的无菌保护室里,没有社会交往,没有知识获取,度过了18年,你会不会认为他成年了?

认为时间对每个人是均等的是一个错觉,认为别人有一天,我也有一天,其实根本不是这样。如果你正在学习一门专业,你使用自己所投入的天数来衡量,很容易会产生一种错觉,认为投入了不少时间,然而其实,"投入时间"这个说法本身就是荒唐的,实际投入的是时间和效率的乘积。你可以"投入"很多时间在一件事情上面,却发现毫无进展,因为你没有整天把你要做的事情,要学习的东西常驻在你的大脑中,时刻给予它最高的优先级。你走路的时候吃饭的时候,做梦的时候心心念念想的就是这件事情,你的CPU总是分配给它,这个时候你的思维时间就被利用到了极致,你投入的时间就真正等于了实际流逝的时间,因为你的CPU是满载的。

如果你有做总结的习惯,你在度过一段时间之后总结自己在某某领域投入了多少时间,建议千万不要粗略地去计算有多少天下班后拿起书来翻看过,因为这样你也许会发现书倒是常翻,但领悟却不见得多深,表面上花的时间不少,收益却不见得那么大。因为看书并记住书中的东西只是记忆,并没有涉及推理,只有靠推理才能深入理解一个事物,看到别人看不到的地方,这部分推理的过程就是你的思维时间,也是人一生中占据一个显著比例的"暗时间",你走路、买菜、洗脸洗手、坐公车、逛街、出游、吃饭、睡觉,所有这些时间都可以成为"暗时间",你可以充分利用这些时间进行思考,反刍和消化平时看和读的东西,让你的认识能够脱离照本宣科的层面。这段时间看起来微不足道,但日积月累将会产生庞大的效应。

能够充分利用暗时间的人将无形中多出一大块生命,你也许会发现这样的人似乎玩得不比你少,看得不比你多,但不知怎么的就是比你走得更远。比如我就经常发现一些国外的牛人们为什么不仅学习牛逼,连"业余"玩儿的东东也都搞得特牛逼,一点都不业余(上次在《How
We
Decide》上看到斯坦福的一个牛人,粒子物理教授,同时是世界扑克大赛的前六名保持者,迄今累计奖金拿了6百多万刀),你会奇怪,这些家伙到底哪来的时间,居然可以在不止一个领域做到卓越?

程序员们都知道,任务切换需要耗费许多额外的花销,通俗地来讲,首先需要保存当前上下文以便下次能够顺利切换回来,然后要加载目标任务的上下文。如果一个系统不停地在多个任务之间来回倒腾,就会耗费大量的时间在上下文切换上,无形中浪费很多的时间。

相比之下,如果只做一件任务,就不会有此损失。这就是为什么专注的人比不专注的人时间利用效率高得多的原因。任务切换的暗时间看似非常不明显,甚至很多人认为"多任务"是件很好的事情(有时候的确是),但日积月累起来就会发现,消耗在切换上的时间越来越多。

另外,大脑开始一件任务的时候必须要有一定时间来"热身",这个时间因人而异,并且可以通过练习来改变。举个例子,你看了一会书之后,忽然感到一阵无聊,忍不住打开浏览器,十分钟后你想起来还要继续看书,但要回复到当时理想的状态,却需要一段时间来努力去集中精力,把记忆中相关的知识全都激活起来,从而才能进入"状态",因为你上了十分钟网之后这些记忆已经被抑制了。如果这个"热身"状态需要一刻钟,那么看似十分钟的上网闲逛其实就花费了二十五分钟。

如果阅读的例子还不够生动,对于程序员来说其实有更好的例子:你写程序写得正high,忽然被叫去开了一通会,写到一半的代码搁在那儿。等你开完会回来你需要多久能够重新进入状态?又或者,你正在调试程序,你已经花了二十分钟的时间把与这个bug可能相关的代码前前后后都理解了一遍,心中构建了一个大致的地图,就在这时,呃,你又被叫去开了个会(:D),开完会回来,可想而知,得花上一些时间来回想一下刚刚弄清的东西了。

迅速进入状态的能力是可以锻炼的,根据我个人的经验,至少可以缩短到3-5分钟。但要想完全进入状态,却是很难在这么短的时间实现的。所谓完全进入状态,举个例子:你看了3个小时的书,或者调试了半个小时的程序之后,往往满脑子都是相关的东西,所有这些知识都处在活跃状态,换言之你大脑中所有相关的记忆神经网络都被激活了,要达到这样一种忘记时间流逝的"沉浸"状态(心理学上叫做"流体验"),不是三两分钟的事情。而一旦这种状态被破坏,无形间效率就会大打折扣。这也是为什么我总是倾向于创造大块的时间来阅读重要的东西,因为这样有利于"沉浸"进去,使得新知识可以和大脑中与其相关的各种既有的知识充分融合,关联起来,后者对于深刻的记忆非常有帮助。

要充分利用暗时间,不仅要能够迅速进入状态,另一个很重要的习惯就是能够保持状态多久(思维体力)。《The
Psychology of Invention in the Mathematical
Field》上有一段关于庞加莱的思考习惯的介绍,很有代表性。庞加莱经常在去海边休假或者在路上走的时候在脑海中思索数学问题,很多时候解答就在这些时候忽然闪现。虽然我和庞加莱是没法比的,但是常常也在路上想出答案,这是一种愉悦的体验。

能够迅速进入专注状态,以及能够长期保持专注状态,是高效学习的两个最重要习惯。

很多人都有这样的体验(包括我自己),工作了之后,要处理的事情一下多出了很多,不像在校园,环境简单,生活单纯,能够心无旁骛地做一件事情而不被打扰。工作之后的状况就是,首先需要处理的事情变多,导致时不时需要在多个任务之间切换;另一方面,即便能够把任务的优先级分配得比较合理,也难免在做一件事情的时候心中忽然想起另一件事还没做的焦虑来,因为没做完的事情会在大脑中留下一个"隐藏的进程",时不时地发个消息提醒你一下,中断你正在做的事情。

因此这里就涉及到最后一个高效的习惯:抗干扰。只有具备超强的抗干扰能力,才能有效地利用起前面提到的种种暗时间。抗干扰能力也是可以练习出来的,上本科那会经常坐车,所以我就常常拿着本大部头在车上看,坐着看或者站着看都可,事实证明在有干扰的环境中看书是非常锻炼专注能力的一个办法:D
另外,经常利用各种碎片时间阅读和思考,对迅速集中注意力和保持注意力都非常有帮助。记得很久以前TopLanguage上大伙曾经有次饶有兴趣地讨论"马桶时间"的利用,包括在卫生间放个小书柜。(估计很多同学心有戚戚焉吧:D)

2009年12月19日星期六

linux HZ Tick Jiffies

linux HZ
Linux核心几个重要跟时间有关的名词或变数,底下将介绍HZ、tick与jiffies。

HZ
Linux核心每隔固定周期会发出timer interrupt (IRQ
0),HZ是用来定义每一秒有几次timer
interrupts。举例来说,HZ为1000,代表每秒有1000次timer interrupts。
HZ可在编译核心时设定,如下所示(以核心版本2.6.20-15为例):
adrian@adrian-desktop:~$ cd /usr/src/linux
adrian@adrian-desktop:/usr/src/linux$ make menuconfig
Processor type and features ---> Timer frequency (250 HZ) --->

其中HZ可设定100、250、300或1000。以小弟的核心版本预设值为250。
小实验
观察/proc/interrupt的timer中断次数,并于一秒后再次观察其值。理论上,两者应该相差250左右。
adrian@adrian-desktop:~$ cat /proc/interrupts | grep timer && sleep 1
&& cat /proc/interrupts | grep timer
0: 9309306 IO-APIC-edge timer
0: 9309562 IO-APIC-edge timer

上面四个栏位分别为中断号码、CPU中断次数、PIC与装置名称。
要检查系统上HZ的值是什么,就执行命令
cat /boot/config-`uname -r` | grep '^CONFIG_HZ='

还可以直接更改文件
os/linux/include/asm-cris/param.h?
Tick
Tick是HZ的倒数,意即timer
interrupt每发生一次中断的时间。如HZ为250时,tick为4毫秒(millisecond)。

Jiffies
Jiffies为Linux核心变数(32位元变数,unsigned
long),它被用来纪录系统自开几以来,已经过多少的tick。每发生一次timer
interrupt,Jiffies变数会被加一。值得注意的是,Jiffies于系统开机时,并非初始化成零,而是被设为-300*HZ
(arch/i386/kernel/time.c),即代表系统于开机五分钟后,jiffies便会溢位。那溢位怎么办?事实上,Linux核心定义几个macro(timer_after、time_after_eq、time_before与time_before_eq),即便是溢位,也能藉由这几个macro正确地取得jiffies的内容。
另外,80x86架构定义一个与jiffies相关的变数jiffies_64
,此变数64位元,要等到此变数溢位可能要好几百万年。因此要等到溢位这刻发生应该很难吧。那如何经由jiffies_64取得jiffies资讯呢?事实上,jiffies被对应至jiffies_64最低的32位元。因此,经由jiffies_64可以完全不理会溢位的问题便能取得jiffies。
HZ的设定:
#make menuconfig
processor type and features--->Timer frequency (250 HZ)--->
HZ的不同值会影响timer (节拍)中断的频率

Google Reader的密技

如果童年时代有玩过红白机上的经典游戏魂斗罗, 就一定会知道著名的密技:
上上下下左右左右BA。而对于我天天使用的Google
Reader中,今天我也发现有一个密技存在,而且使用方法就是
"上上下下左右左右BA"(需要按快一点),可以呼叫出隐藏在Google
Reader中的隐藏人物!(至于按完密技后会出现什么就让大家自行去发掘喽),俺就不在此贴图了。

在程序里放这种复活节彩蛋似乎已经变成一种程序设计师爱玩的小花招,而且Google人又喜欢将娱乐结合于工作中,不禁令人好奇其他Google
app会不会也有类似的密技可以使用呢?

美国教科书选的三个神秘中国人

中国文化随着中国的日益壮大,在世界各地盛行开来,孔子学院在全球的开展,使得汉学更加流行,美国也不例外,美国通行的教科书里有很多涉及中国的内容,中国历史人物自然会反映其中。我们做个假设,让中国人推荐应该有哪三个人该获选?结论虽然有可能五花八门,但一般跳不出以下几个圈子:帝王将相如秦皇汉武成吉思汗类;文化名人如孔子抑或屈原类;民族英雄如岳飞文天祥,分别昭示中国政治的强大,文化源远流长,对外不屈不挠等意思。但美国人不这样看,他们的选择有点出乎我们意料。你能想到这些人物会是谁呢,猜不着吧,那就听我给你道来:
第一个被选中的人物是陶渊明,上榜理由:过上流生活,出污泥而不染。
麦基《世界社会的历史》中的解释颇有代表性:"他不是一般的中国农民,他跟士大夫阶层的人士保持着紧密联系,经常在一起喝酒吟诗。他的作品反映了他对这样简单的田园生活很满足,甚至把这种生活美化成世外桃源。"作者希望学生从中领略到魏晋南北朝的时代气息,即注重的不是学识,而是出身和门第。绝不与门不当、户不对的人通婚。他们自命为社会精英,在自己庞大的庄园里,聚会、喝酒、行乐、吟诗……"陶渊明就是在这种乌烟瘴气的环境中,寻求超脱与自然"。
他们选中的第二个人物是杨玉环。上榜理由:浪漫。
斯特恩斯在他的《世界文明》中提到了唐玄宗的贵妃杨玉环,这部教科书用了整整两页的篇幅讲述杨玉环的故事,还配了一幅"贵妃行乐图",渲染她的富丽堂皇和婀娜多姿。这部教科书讲述完唐玄宗和杨玉环的"浪漫史"后指出,他们的感情属于是"最著名的,也是最不幸的"。这个人物的选择,纯粹是考虑到青年学子的口味。作者对杨玉环爱情故事的渲染,除了美国人对爱情的重视,不乏迎合、媚俗的考虑在里头。但浓浓的生活气息颇让人感动,显现出教科书的温馨和人情味。
被选中的第三个人物是李自成。上榜理由:暴力夺权的改变不了旧的为政方式,要引以为戒。
布利耶特所著《地球和居住其间的人民》介绍到李自成时写道:"李自成的农民起义军,成功只是短暂的。明朝将领吴三桂相信,跟李自成那样没有文化而暴力倾向很强的人在一起,很难共事。他就和满族结成了联盟。吴还可能因为李抢走了他的爱妾而心怀愤。""一年以后,李死了。死因要么是自杀,要么是因为偷吃了农民的粮食而被活活打死。"可见,美国人所关注的,并非谁来当皇帝的问题,关键在于某种社会形态是否产生了本质改变。他们认为,倘若李自成获胜,不过是牌桌上换了一个庄家,玩法没有任何变化。



到底该如何定投指数基金?

先看看历年上证指数的最高点、最低点。
我们选取每次都买在最低点,20年间每年定投1万元的话,到昨天2009年12月18日收盘3113.89点时,共剩余额130万元;如果选取每次都买在最高点呢,共剩余额68万元。
而每年的1万元的成本呢?如果选取在每年第一次利率调整点定存银行至2009年12月18日为止,20年其成本总额为46万元,这么算来20年的时间,我们这种方法定投的结果是最厉害的可以赚取资金成本的1.8倍;最差的可以赚取资金成本的0.5倍,那么我们可以看到,这种定投方法是对选时的一种补偿,但是绝不能说收益有多好,那么我们到底该如何定投指数基金呢?