2009年3月3日星期二

ubuntu下安装Acrobat Reader并显示中文

Adobe的Acrobat Reader还是比Ubuntu自带的Evince要好一些。

在Ubuntu下安装Acrobat Reader的方法如下:
Step1. 设置mediabuntu源,参考官方的指南https://help.ubuntu.com/community/Medibuntu
Step2. sudo apt-get install acroread

此时Acrobat Reader就可以用了,但是还不能显示中文。为了能显示中文还需要做下面几步
Step3. 到这个http://www.adobe.com/tw/products/acrobat/acrrasianfontpack.html网址上下载中文语言包
Step4. 解压后,运行里面的安装脚本(用命令./INSTALL.sh)。当安装脚本要求“
Enter the location where you installed the Adobe Reader [/opt]” ,你输入“/usr/lib”。

这样就可以在Ubuntu下使用Acrobat Reader查看中文文档了。
上述方法在Ubuntu 8.04下实验通过,其他版本应该也可以。

2009年2月26日星期四

判断三点共线问题的最佳程序

此问题与解答源于《Beautiful Code》,这里只是精炼地表达书上的解答。

问题:如何判断平面上三个点(x1,y1),(x2,y2),(x3,y3)是否在一条直线上。
思路:
这个问题的难度不在于如何解决它,而在于如何“完美”地解决它。“完美”,可以理解为代码必须正确,美观,简洁,高效而且不容易受到计算误差的影响。

判断三点共线的方法有很多。如果采用与斜率有关的方法(比如使用直线的截斜式),那么必然要对斜率无穷大或者说没有斜率的情况做特殊处理。也可以考虑计算第三点到另外两点所确立的直线的距离,如果用这种方法,那么会涉及到求直线方程Ax+By+C=0和开平方,这样做运算效率较底。

最终的解决方案是求三点所确立的三角形的面积,三点共线当且仅当三角形的面积为0。而计算面积最简单高效的方法是使用矢量法,即三角形面积的行列式公式,面积等于
| x1-x3 y1-y3|
| x2-x3 y2-y3| / 2

[ (x1-x3)*(y2-y3) -(X2-X3)*(y1-y3)] / 2
利用这个公式可以保证在无论三点是否互不相同都可以判断共线。

Lisp代码:
(defun area-collinear (x1 y1 x2 y2 x3 y3)
(= (* (- x1 x3) (- y2 y3))
(* (- x2 x3) (- y1 y3))))

2009年1月19日星期一

MSI(Microsoft Installer)二三事

最近跟MSI(Microsoft Installer)打了不少交道,下面是关于MSI的一点儿知识:

1. The Windows Installer (previously known as Microsoft Installer[1]) is an engine for the installation, maintenance, and removal of software on modern Microsoft Windows systems. -- Wikipedia
2. msi: Windows系统下的安装文件的格式
    msiexec:在Windows下执行安装的程序
    msiserver:运行msiexec会打开msiserver服务;这个服务会在安装完毕10分钟之后自动关闭
3. 使用msiexec的方法:
    msiexec /?                    查看msiexec的使用方法
    msiexec /i SoftwareInstaller.msi 安装SoftwareInstaller.msi
    msiexec /i SoftwareInstaller.msi /lv log.txt 安装SoftwareInstaller.msi,并将安装过程的日志保存在log.txt
    msiexec /i SoftwareInstaller.msi /quiet       以默认的参数静默安装,即安装过程没有任何提示
4. 结束未完成的安装的过程的方法:
    net stop msiserver
    第三四条命令可以在自动化安装脚本(.bat/.cmd)中用到
5. 在系统的隐藏文件夹%WinDir%\Installer下找到本机缓存的安装文件(.msi)。估计控制面板中的“添加删除程序”就是使用这里的.msi来做uninstallation的。在注册表的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下可以查看到反安装时所需要的各种信息
    

2009年1月15日星期四

用C#从注册表中读取%ProgramFiles%的值

%ProgramFiles%是Windows上软件的默认安装路径,常见的值是C:\Program Files或者D:\Program Files。这个值是在注册表中有记录的。如果你的C#程序想读取这个值,可以用下面的代码:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingMicrosoft.Win32;
namespaceConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
RegistryKey folders = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\");
if (folders == null)
Console.WriteLine("null");
else
{
string defaultInstallPath = folders.GetValue("ProgramFilesDir") as string;
Console.WriteLine(defaultInstallPath);
}
}
}
}

注意不能写成@"\SOFTWARE\Microsoft\Windows\CurrentVersion\"。

2008年6月3日星期二

Substance下Swing控件中文显示为方框

使用substance后Swing控件上的中文全部显示为方框。 这大概由于substance的look and feel替换了原来的字体,使得中文无法正常显示。解决办法是在设置使用substance的Look and Feel 之后,加入下面的语句:

int sizeOffset = 1 ;
Enumeration keys = UIManager.getLookAndFeelDefaults().keys() ;
while ( keys.hasMoreElements() )
{
Object key = keys.nextElement() ;
Object value = UIManager.get( key ) ;
if ( value instanceof Font )
{
Font oldFont = ( Font ) value ;
Font newFont = new Font( "Dialog", oldFont.getStyle(),
oldFont.getSize() + sizeOffset ) ;
UIManager.put( key, newFont ) ;
}
}

2008年4月12日星期六

matlab的函数参数传递

在网上查到:

如果函数内部试图修改输入参数的值则为值传递,如果没有修改则为地址传递。
采用这一处理方式的目的是:
一、不允许函数内部修改输入参数的值
二、兼顾执行效率(地址传递不需要将输入参数拷贝一份

2008年4月9日星期三

[转载]他们的心情好

http://criyun.blog.hexun.com/18163747_d.html


访美一年归来,当朋友们问起我对美国最大的感受是什么时,我会回答:他们的心情好。

由于心情好,他们对人就比较友善热情。那是我刚踏上美国的土地就感受到的。

刚到纽黑文那天,我与同行的中国朋友从机场打出租车到耶鲁。天下着小雨,我的朋友去联系租房子的事,我则在耶鲁神学院宿舍的大房沿下一边避雨一边看守着大堆的行李。从旁边路过的人看到我的情形,大多都会停下来或走过来问我:

“有什么问题吗?”

“需要帮助吗?”

我诚惶诚恐地回答:“没有,谢谢!”

但有的人走出几步还会回来问我:“是没有钥匙吗?我这有”。

“不是,谢谢!”我非常感激地回答。

即使这样,有的人还是带着很不放心的神情走开,还不时回头看看我。

这种情形在我们这里,是只有熟人和朋友间才会发生的,但在他们这里,会发生在陌生人之间。大体上说,你在中国能够期望熟人和朋友对待你的方式,在美国,大多数陌生人都能做到。

当你在路上散步,迎面遇到一个美国人时,除了像曼哈顿那样的闹市,你常能得到一声热情的问候,像老朋友见面一般。当你在公共场所偶然打扰、冒犯、碰撞了别人,在我们这里会遇到一双白眼,甚至会恶语相加的场合,对方往往只是善意地嫣然一笑。

这些年,我们搞起市场经济,在一些服务业,我们也能享受到“微笑服务”了。但在美国你会发现,当美国人向你问候的时候,往往眼睛深情地注视着你,面带真诚 的笑容。问候语因时因地各不相同,并不是千篇一律的那几句话。在我们这里,被老板和领班训练出来的服务员像大鹦鹉一样地喊:“欢迎光临”,“下次再来,眼睛不会看你,面部没有表情。这种问候和微笑是表演,不会使人感受到善意的温暖,而是感到浑身不自在。

在美国,微笑绝不仅仅是服务业的绝活,也不是服务员(侍者)们的职业技能。他们的问候和微笑是双向的,不仅服务生,而且顾客也会热情地回应,在很多场合, 是顾客主动地问候为他提供服务的服务生。我在耶鲁坐了一年的校车,据我观察,大多数乘客都会上车时向司机打个招呼或下车时向司机道一声“谢谢”。在公交车 上,也经常有乘客会这样做。在我们这里,顾客们会认为,这是我付钱买来的服务,我们不仅不会向服务员问候,而且认定服务员的问候有一种商业化的动机,所 以,面对声声问候和道别,我们大都会目无表情地昂然而入或昂然而去。

我猜想,美国的领班也许不需要刻意地训练他的员工,或 者他们的训练比较自然。因为热情友善地待人是他们的日常生活,是人与人相遇时的一般行为方式。不仅他们做服务生时才会这样,不仅在饭店里、在柜台前、在大 堂上才会这样做,而是街道上、走廊里、电梯中,在人与人相遇的各种场合,他们都会这样做。

记得有一次,我与两位多次来过美国的中国学者在纽黑文的街上散步。一个美国人低着头从我们身边匆匆走过,这时,一位中国学者转过身指着那位美国人的后背 说:你看,美国人的道德水准下降了。我问他为什么这样说,他回答:他看见我们没打招呼就过去了。我问他:以前美国人在路上遇见陌生人都打招呼吗?他和另一 位中国学者都非常肯定地说,绝大多数都会打招呼的,现在打招呼的的确比以前少了。

可是,在我看来,这种据说已经“下降了”的道德状况仍然是我们难以企及的。这种待人方式,将内心的善意传达给别人,也得到善意的回报,从而营造了一个友善和谐的社会气氛。

在美国,虽然也会遇上无家可归者呆滞迷茫的目光,游荡在大街上和公园里的无业游民令人不舒服甚至恐惧的神情——这些边缘群体难得有一个好心情,但在一般的场合,你随处都能看到笑脸,到处充盈着笑声。他们是如此的幽默,如此的开心,让人嫉妒。

美国电视的搞笑节目,大多是现编现卖的,总能赢得观众开心的笑声。我看过一个节目,一个女主持人在那里讲故事,讲她的经历,平均五六句话就使观众笑一次。可她一口气讲了三个钟头!

看美国的电视,主持人经常互相开玩笑,笑得前仰后合。从严肃的政治新闻、社会新闻,直到天气预报,他们都开着玩笑讲。

一次,副总统切尼打猎误伤了朋友。人们预料,大约在 一个星期的时间内,他会成为媒体开心的材料。果然如此。一个搞笑节目主持人一出场就兴奋地大喊:“大规模杀伤性武器找到了!”,然后扳着脸严肃地说“在切 尼这”。一家电视台制作了一个小卡通,切尼端着来福枪,牛气冲天的神态,嗵、嗵、嗵地一路打过来,让人忍俊不禁。

在美国,笑是如此廉价;在中国,笑是如此罕见的奢侈品。

中国人是很不容易逗笑的民族,所以竟使一个专门逗乐子的文艺种类濒临灭绝了。小品演员一年半载才鼓捣出来一台节目,其中的大多数竟然不容易让观众开怀笑一 下。尽管媒体一再煽情,什么“今天是个好日子”,什么“咱们老百姓今儿个真高兴”,观众就硬是心事重重眉头紧锁高兴不起来。

在美国,笑也是最慷慨也最有价值的馈赠。

在一年一度的白宫招待记者的宴会上,为了取乐大家,白宫主人安排两位平时专门拿布什总统开涮的电视搞笑明星来到招待会上表演。其中一个扮成布什,活灵活 现,俨然一对双胞胎。在布什致辞时,他在旁边以夸张和丑化的方式摹仿布什的语言和动作。布什显得有点不自在,脸上红一阵白一阵,但夫人劳拉在一旁却乐不可 支。

布什在耶鲁读书时,是个经常得C的学生,这段糗事当他竞选总统时被人发掘出来并大肆炒作。如果放在我们这儿,是足以让我们的官僚政客们嘴上起泡大便干燥的,但布什却拿自己的糗事逗别人开心。据说,他有一次对耶鲁的学生说:在耶鲁读书是很好的事,如果你是A类的学生,你能当大学教授;如果你是B类的学生,你可以做CEO;如果你是C类学生,还能做个总统。同时他还没忘了捎上他的铁杆搭档切尼,这位曾在耶鲁退学的副总统:如果你是个不合格的学生,也能当副总统。

看来 ,为了让别人开心而献出自己当笑料,这大概是美国人招待朋友和客 人的一种方式。在期末的时候,我应邀参加耶鲁政治学系的期末聚会,参加者是全系的教职工和研究生。按惯例,由二年级研究生表演节目。同样按惯例,节目的内 容是摹仿和讽刺他们的老师。表演者胸前挂着一个牌子,正面和背面各写一位他们所要摹仿的老师的名字。他们摹仿老师一些富于个性的动作和语言,常逗得台下的 师生开怀大笑。

当然,有时美国人的玩笑开大了,竟然涉及到中国和中国人,说不定会被哪家小报记者拿来炒作一把,一群神经质的“爱国主义”者一哄而起,将其定性为“反华” 或“辱华”事件,排泄出一堆国骂,有时会迫使他们像犯了错误的小学生一样道歉。他们绝对不了解中国的“国情”,中国人是很容易发怒的民族。中国的骂与美国 的笑一样多。

国内电视经常转播的“开心一笑”(just for laugh) 之类的节目,从中也许最能了解美国人的心情。这种节目往往以搞恶作剧即“整人”的方式寻开心,那些受到不明来由的惊吓、侵扰、诬谄、欺辱的受作弄者,或显 出惊愕、疑惑、茫然的神情,或幽然一笑,或无可奈何地耸耸肩,双手一摆,最多是理性与克制的争辩。我大胆设想,虽然我们能够摹仿“美国偶像”一类的节目, 但却无法摹仿“开心一笑”,因为电视台绝不敢用那种恶作剧向我们的同胞开玩笑。

美国人待人接物时的友善、热心助人、无所不在的幽默感——无论拿自己开心还是拿别人开心,以及被别人捉弄时的反应,都反映出他们的心境。我们想想,当我 们心情好的时候,大体上也能像他们那样。他们日常生活中表现出来的经常性的精神状态和行为方式,无非是我们在心情很好时才可能有的精神状态和行为方式。区 别在于,他们经常有一个好心情,我们却难得有一个好心情。

人们在获得基本的生活保障和安全后,精神的快乐应该成为衡量生活质量的最重要的指标。可是,一次次国际性研究,对各国人民生活的快乐指数排名,中国都远远地排在后面……远低于我们人均GDP的排名。

为什么我们得不到快乐?耶鲁的华人学者陈志武教 授有句名言:“一个典型的中国人一辈子是不幸福的”。他从养老金制度的角度对此做出了有力的论证。但是,使中国人活得沉重、忧郁、烦躁的,岂止是养老问题 呢?我们的制度放任专横任性的权力,在这种权力面前,人得不到尊重、不能自由地伸展,常常受到侮辱和欺凌而无可奈何。这种任性的权力本身就成为人们的一大 心病。我们的文化和风俗习惯有太多违背人性的东西,自己与自己过不去的东西。它使我们作茧自缚、自我糟贱。它像一张大网,将我们死死缠住。我们屈从于这种 制度和这种文化,甚至热心地维护和发展它们,从而使自己活得累、活得烦、活得不快活。

由于太多的个体经常处于心情不好的状态,于是大家相互传染,相互激荡,共同营造了一个恶劣的社会环境:人与人之间充满冷漠、不信任、嫉妒、敌意。每个人将 自己的坏心情释放给社会,也同等地遭遇其他人的坏心情。它们相互激荡,相互放大。在被大家共同毒化了的社会环境里,没有人会有好心情。当阴郁碰上烦躁、烦 躁撞上愤懑、愤懑遭遇仇恨的时候,你还能指望会发生什么呢?

每个人的行为和心境,一方面为他人营造了一个外部世界,同时也为自己创造了一个外部世界。对个人而言,外部世界不光是眼睛看到的,也是我们的心镜映射出来 的。不同的心情投射到外部世界,外部世界就会呈现出不同的色彩。所谓“心清水现月,意净天无云”。当我们心情好时,世界是明亮的:似乎百花在向我传情,百 鸟在为我鸣唱,云朵在向我招手,太阳也向我露出笑厣。我们在这时对人会比较友善,对事比较平和。当我们心情不好时,世界是阴郁的。在这时,我们会以敌意对 待周围的人:我们很容易惩罚孩子,羞辱学生,顶撞顾客,和同事发生争吵,与路人为敌。

如果我们从充满冷漠与敌意的社会中长大,我们便会以冷漠和敌意的眼光看待社会;我们从别人那里很少得到关爱和友善,我们便很难将关爱和友善给予别人;我们 在童年时代受到压抑和虐待,我们长大后就会充满怀疑与仇恨。当我们走向社会,一种恶意假设已经成为我们估量他人行为的基准。这种恶意假设使人与人之间没有 了信任和友善,使人们的心头充满怀疑、敌意和愠怒,不幸的是,在我们这里,这种恶意假设总是合理假设,而坏心情就成为我们的精神常态。

当我们在GDP上紧盯着美国较劲时,别忘了我们与美国的差距还有快乐指数!