Profilo di qiangStrong's SpaceFotoBlogElenchiAltro Strumenti Guida

qiang huang

Professione

Strong's Space

The best way to predict the future is to create it.
24 novembre

[转]八卦总是比公式好看的

——顶尖物理学家的牛事和八卦

大物理学家脾性各异,谦虚如爱因斯坦,大智若愚如玻尔,古板如施温格,高傲如泡利,放浪不羁如费曼……

一. 爱因斯坦

1、有一年开会,就是那种数学物理学上的牛人们去开的那种会。会场选在了拉斯韦加斯,这和国内选九寨沟什么的一样,都是要找能腐败的地方。我们的小爱同学在那里做了一件很不好的事情,他疯狂的赌钱。然后有个物理学家就评论说,“我从来没想过爱因斯坦也会这样,好像要见不到明天的太阳了似的。”另一个愁容满面,叹了口气说,“我担心的就是这个,我总觉得他的确是知道会有什么事情发生。”

2、 爱因斯坦,当年在苏黎世读书的时候,也是满可怜的。他和另外三个学生一起获得了一个叫Fachlehrer的冬冬(大概就是作助教的资格),另外三个人立马就拿到了位置,偏偏小爱没拿到。(另一个学生,爱因斯坦未来的第一任夫人,未能通过Fachlehrer),当时系里管这个的是Weber,好像对爱因斯坦不是很满意,曾经批评爱因斯坦不喜欢听从他人意见(原文是 but you have one great fault, you do let yourself be told anything)。据说爱因斯坦对实验兴趣不大也是跟这个有关。小爱终生对Weber耿耿于怀。当Weber去世的时候(1912),小爱居然写了这样一封信给朋友,信中声称“Weber's death is good for the ETH”。ETH Zurich就是苏黎世理工学院了。

3、时间与永恒

一个美国女记者走访爱因斯坦,问道:“依您看,时间和永恒有什么区别呢?” 爱因斯坦答道:“亲爱的女士,如果我有时间给您解释它们之间的区别的话,那么,当你明白的时候,永恒就消失了!”

4、意识

爱因斯坦的二儿子爱德华问:“爸爸,你究竟为什么成了著名人物呢?” 爱因斯坦听后,先是哈哈大笑,然后意味深长地说:“你瞧,甲壳虫在一个球面上爬行,可它意识不到它所走的路是弯的,而我却能意识到。”

5、感觉相同

一天,爱因斯坦在冰上滑了一下,摔倒了。他身边的人忙扶起他,说:“爱因斯坦先生,根据相对论的原理,你并没摔倒,对吗?只是地球在那时忽然倾斜一下?” 爱因斯坦说:“先生,我同意你的说法,可这两种理论对我来说,感觉都是相同的。”

6、成则为王

20世纪30年代,爱因斯坦有一次在巴黎大学演讲时说:“如果我的相对论证实了,德国会宣布我是个德国人,法国会称我是世界公民。但是,如果我的理论被证明是错的,那么,法国会强调我是个德国人,而德国会说我是个犹太人。”

7、 老爱和小爱的故事:广义相对论提出的时候,是爱丁顿带着一帮人趁着日食的时候看看远处的星光会不会被太阳偏折,观测的当晚,老人家紧张的一夜没睡。“他显然不懂相对论,否则,会和我一样安安稳稳的睡觉。无论怎样,广义相对论是对的,不然,我会为仁慈的上帝感到遗憾。” ——小爱对老爱失眠的评价。

爱丁顿当时的测量误差和真值差不多大(用现在的话说就是相对不确定性几乎为百分之百),不过他还是发表结果支持爱因斯坦,然后爱因斯坦就成了神。所以你可以想象爱丁顿当时的权威有多大,基本上,天文学家、天体物理学家都是闭着眼睛跟他走。

据说有个传说是有人问爱丁顿,说当世只有三个人懂得相对论,爱因斯坦是一个,您是一个。爱丁顿沉默了半天,那人说您不必如此谦虚吧。爱丁顿说,我在想那第三个人是谁。

这个故事真实性不可考,不过这个是真实的。当年普朗克劝爱因斯坦去柏林,爱因斯坦推辞说:“相对论不算什么,郎之万说全世界也就12个人懂。”普朗克回答道“可是这12个人至少有八个在柏林”可见当时德国数学物理学研究之强。

二. 泡利(Pauli)

1、这位先生是上个世纪少有的天才之一,Pauli同学出生于维也纳一个研究胶体化学的教授的家中,他的教父是著名的马赫先生。马赫先生被爱因斯坦称为相对论的先驱,虽然马赫先生并不给小爱这个面子,声称他对于相对论的相信程度,像他对分子论的相信程度一样。而众所周知,马赫先生极端反对分子论,而这种反对是使那个统计物理的天才波尔兹曼最终绝望而自杀的原因之一。在Pauli 21岁的时候,他为德国的《数学科学百科全书》写了一片长达237叶的关于狭义和广义相对论的词条,该文,到今天仍然是该领域的经典文献之一,爱因斯坦曾经评价说,“任何该领域的专家都不会相信,该文出自一个仅21岁的青年之手,作者在文中显示出来的对这个领域的理解力,熟练的数学推导能力,对物理深刻的洞察力,使问题明晰的能力,系统的表述,对语言的把握,对该问题的完整处理,和对其评价,是任何一个人都会感到羡慕。”

2、少数年轻人大约以为这个物理学的王子的名字只是与不相容原理联系在一起,甚至他们以为这个原理只是量子力学的一个推论。实际上,这个原理的提出是在1925年,甚至早于海森堡提出量子力学,Pauli是用他天才的洞察力从浩如烟海的光谱数据中得出的不相容原理,其难度甚至远大过开普勒整理行星轨道的数据。Pauli的贡献遍及当时物理学的各个领域,他参与了量子力学的基础建设,量子场论的基础建设,相对论……Pauli似乎在物理学领域是一个征服者而不是一个殖民者,他大量的工作没有发表,而是遗留在私人信件里。今天我能查到的信件中,我们发现大量这样的例子,他的关于矩阵力学和波动力学的等价性证明是写在给Jordan的信件里,测不准原理首先出现在他给海森堡的信件里,Dirac的泊松括号量子化被Hendrik Kramers 独立发现,而他指出,Pauli早就指出了这种对易关系的表示方法。或许有些天才的生命是注定短暂的,Pauli生于1900年,于1958年去世,仅比他心中帝王晚去世3年,(爱因斯坦1879-1955),他唯一的遗憾就是一生中觉得没有做出像他的king一样伟大的工作。

3、Pauli作为一个物理学家,眼光是相当锐利的。比如Feynman说的那个故事,Pauli预言惠勒永远做不出那个什么超前推迟势的量子力学推广(果然他没作出),Feynman事后着实被puali的眼光震惊了。不过Pauli一生最遗憾,他是那个时代公认最聪明的物理学家,却没有做一个划时代的发现。他一生喜欢评论别人的东西,经常是一针见血,不过很可惜,他一生反对错了最重要的两件事情,一个电子自旋,一个宇称不守恒。可能一个人过于敏锐了,对于一些违反常规的想法有一种本能的抵制。

4、Pauli的刻薄在圈内无人能敌。做Pauli 学生太可怜了,他曾经批评学生的论文, “连错误都算不上。”他对一篇文章最好的评价就是:“这章几乎没有错。”Kronig,最早提出电子自旋的概念,可是拿着论文去找泡利。被骂了一顿,因为Pauli指出计算不符合相对论。于是他们没敢发这篇文章,悲惨啊。海森堡得了Nobel奖以后经常还被他骂的狗血喷头。不过Pauli有一点比较好。他对所有人都很刻薄,不会因人而异。有次小爱作报告,做完了,Pauli起立来了句,“看来爱因斯坦不是很蠢。”

后来有人这样说:“Pauli死后,来到天堂见到上帝。上帝把他关于宇宙的设计给Pauli看。Pauli看了半天,挠了挠头,说:“居然找不到什么错。”

5、Pauli大概天生不适合作实验。据说他出现在哪里,那里的实验室仪器就会有故障 。有次,某个老大的实验室仪器突然失灵。他们就开玩笑说,今儿Pauli没来这地方啊。后来过了不久,Pauli告诉他们,那天他乘坐的火车在那个时刻在他们的城市短暂停留了一下。

6、Pauli年轻的时候大概是他最牛的时候,他和海森堡认识的时候,虽然不一样大,但是海森堡对他当真是言听计从,看来十分崇拜。海森堡刚开始想做相对论方向的工作,Pauli作为已经在相对论方面已经算是一个小专家的人物,他告诉海森堡,“他觉得相对论方面近期的进展是hopeless,但是原子物理方面机会却是大大的。”要是海森堡去做相对论,就不是现在的样子了。

7、关于Pauli和爱因斯坦的地位:对于所有人来说,小爱在上一世纪简直就是God。波恩曾经认为,Pauli也许是比爱因斯坦还牛的科学家,不过他又补充说,Pauli完全是另一类人,“在我看来,他不可能像爱因斯坦一样伟大。”那么Pauli是怎么看爱因斯坦的呢?在1945年,Pauli终于拿到了那个他觉得自己20年前就应该拿到的Nobel后,普林斯顿高等研究院为Pauli开了庆祝会,爱因斯坦为此在会上演讲表示祝贺。Pauli后来写信给波恩回忆这一段,说“当时的情景就像物理学的王传位于他的继承者。”Pauli倒是一点都不客气,认为自己就是继承者了。

8、最后补充一点,泡利虽然为人刻薄,语言尖锐,但这并不影响他在同时代物理学家心目中的地位。在那个天才辈出,群雄并起的物理学史上最辉煌的年代,英年早逝的泡利仍然是夜空中最耀眼的几颗巨星之一,以致在他死后很久,当物理学界又有新的进展时,人们还常常想起他,“不知道如果泡利还活着的话,对此又有什么高见。”

三.  海森堡

1、 当博士当的最郁闷的莫过于海森堡。做实验答辩,结果委员会中有老师对他不满,差点没让他毕业 。做理论,老板索菲莫,给了个做不出来的题目,湍流,差点不能完成任务。不过超人毕竟是超人,他在不知道怎么计算精确解的情况下,猜了一个近似解,毕业了。你猜怎样?最后那个结果被证明是正确的。

2、有些人的工作是由于数理功底扎实,水到渠成,但他们从事的问题别人去做也可能成功。但海森堡的研究就非常奇怪,比如他不会严格计算湍流,但是猜出了二维湍流解,最后这个解被林家翘严格证明了,诺伊曼作数值计算也发现他是对的。量子力学的创立也是如此,谁也没想到他能够一开始就完全放弃轨道等经典概念,只从可观测量出发建立量子力学。戈德史密特作过氦光谱的问题,他想用轨道自旋耦合解释,费尽力气也没找到答案,然后海森堡开始做,他从一开始就意识到这可能与反对称波函数有关,结果作出了答案,这好像是反对称波函数的第一次应用。

3、据说海森堡给自己弄了个墓志铭,“He lies somewhere here”。直译就是 “他在这里,且在别处。”明白不确定原理的应该都知道这句话的意思。

四. 波尔兹曼

1、波尔兹曼是伟大的统计物理学家,他对现代的统计物理理论做了奠基性的工作,不幸的是他一生在与自己的学术对手作斗争,被迫不停的宣传原子论;更不幸的是学术上的斗争竟然引入了人身攻击,攻击他的人就包括爱因斯坦很很佩服的马赫;不幸的波尔兹曼最终死于自杀,最大的不幸是他刚死,他的对手就都承认了原子论。

2、伟大的波尔兹曼的墓志铭是一个伟大的公式: S=k*lnW此公式我认为是物理学中最深刻的公式之一 。

3、 波尔兹曼大约上课不喜欢往黑板上写东西,然后学生经常抱怨听不懂。然后学生complain啊,说老大,证明太难了,以后往黑板上写,别光讲,我们记不住。波尔兹曼答应了。第二天,他又在课上开始滔滔不绝,从a变换到b,b到c...最后总结说,大家看这个东西如此简单,就跟1+1=2一样。然后他突然想起对学生的承诺,于是拿起粉笔,在黑板上工工整整地写了“1+1=2”。

4、伟大的波尔兹曼生前很少有支持者,年轻的Planck是这少数支持派的一员,但是可怜的Planck,波尔兹曼压根看不起他,认为Planck和自己不是一路。这个故事告诉我们,一张厚脸皮和一颗麻木的心对于科学工作者是多么重要啊。

五.  牛顿的“谦虚”

那句有名的话“ if I have seen further than others, it is by standing on the shoulders of giants.”不少年轻孩子都因为这句话觉得牛顿很谦虚。其实这句话很损的。胡克,就是胡克定律那个,一直宣称万有引力是他先发现的,后来牛老大怒了,就给他写了一封信,其中包含了这句话。意思嘛,很明显,是说就算我的发现借鉴了前人的工作,那也只是借鉴了那些巨人的,这跟你有什么关系?看来骂起仗来,物理学家不比其他人差。同样的话还有更有名的爱迪生的“天才是99%的汗水加上1%的灵感。”这个以后再说。

六. 欧姆的“运气”

欧姆同学,就是那个欧姆定律那个,这孩子从小做事认真努力,经过不懈研究,终于得出了欧姆定律 U=I*R,想想在当时,这是多大的发现啊,按理说房子车子票子应该全来了。不幸的是,这个定律实在是太简单了,完美的线性关系,在那些老大们看来,根本不可能。于是Ohm的tenure(职位)不仅没拿到,还被攻击为骗子,Ohm,老实孩子会倒霉的。

七. 多普勒是怎么验证多普勒效应的

大家都知道,限于当时的条件,多普勒同学不可能像我们一样运用计算机啊什么的记录下波形文件,然后比较频率。那他怎么办呢?他请了一帮吹小号的坐在火车拉的平板车上,然后请了一帮能听出绝对音高的音乐家坐在铁轨旁,让那帮音乐家用他们的耳朵记录下火车靠近和离开的时候的声音。多普勒公式就是这么验证的。牛啊 !

八.  费曼(Feymann)

1、他有个最大的毛病,就是喜欢装牛,明明自己也是费尽九牛二虎之力才作出来的。非得装着一晚上想出来的,用来打击别人。不过他也碰上过对手,有次碰上个速算的牛人,从此他知道在某些人面前不能吹牛的。

2、他有次跟个朋友参加聚会,他路上抱怨说自己为盛名所累,讨厌人围着,他朋友安慰他说今天没有物理圈的,我不说,没人知道你得过Nobel,于是他朋友很老实的。遵守诺言,可是宴会开到一半,几乎所有的人都知道Feymann是Nobel了。他朋友很郁闷,找了个人一问,原来是Feymann自己到处说的。

3、关键是Feymann虽然的确不错,但是他自己吹再加上别人帮着吹,吹着吹着就让人受不了了。比如那个所谓的拒领Nobel奖,而且这个家伙明显的大嘴巴,作演讲不管对的错的一块儿来。

九、费米(Fermi)

费米夫人著的《原子在我家中》介绍这个人物堪称20世纪物理学界最后一个全才,在理论和实验上都有非常深的造诣,而且牛人弟子如长江之水,连绵不绝。

1、Fermi真的是可以跟爱因斯坦,Bohr比肩的大师,非但目光锐利,善于抓住主要问题,而且思维敏捷,实验理论都是第一流,还会教学生,作为一个物理学家,简直是完美。关于场论,刚开始大家特别糊涂,自己算出来的是什么东西都不知道,只知道算。然后Fermi发了一片文章,结束了混乱。

2、Fermi有次在讨论班上讲群伦,他先讲了A ,然后是B ,然后是……讲了老半天,讲到了群的定义。然后学生就抱怨阿,说怎么讲的这么乱, Fermi然后来了句:“群论就是一堆定义的堆砌而已。”

3、Fermi对物理学家有自己的分类办法,

a、某些他认为自己可以从对方身上学到一点东西的(在50年代的芝加哥,这样的人只有一个,盖尔曼)
b、有勇气反对他的人,(不幸的是,Fermi通常认为自己是对的)
c、能够几乎自动的接受他的想法的人,这种人可以做助手。

4、有关轨道自旋耦合还有一个Fermi的故事。Mayer,就是那个女物理学家,牛人。企图解释原子核的壳层模型,怎么都不成功,去问Fermi,费米问了一句,你考虑过自旋轨道耦合没有?Mayer去做,成功了!

5、费米的轶事多不胜数,搞原子弹的时候,很多东东涉及保密,人手一个密码柜,结果很多人经常忘了密码,或者本人正好不在,同事们却要使用他锁起来的资料。当时费米就极擅长开这种密码锁,有一次他去了趟另一个部门,走后该部门就有文件下来:凡是费米碰过的柜子,统统换密码。

十. 施温格(Schwinger)

1、这个人是属于早慧那种,和费曼一起发现了量子电动力学。据说他十几岁时混得不好,在纽约一个社区大学混日子,但有一天著名物理学家I. I. RabiI和另一个牛人在谈论量子电动力学的问题,Schwinger插话了,“这个少年尖锐的发言结束了这场争论。”Rabi爱才,特意托关系把他招进的Columbia,从此Schwinger一帆风顺……

2、Schwinger的数学奇好,写的文章很难看得懂,据说有次场论报告的时候,除了Bohr(波尔)在那里点头,剩下的人根本不知道他在说什么,但既然波尔在那点头,大家认为就对了,紧接着费曼上去忽悠,这下更糟,连Bohr在内,没一个听懂的,Bohr据说讲了句特尖刻的话:“你应该重学量子力学。”

3、Schwinger以超强的算功闻名。有段时间Schwinger在Oppenenheimer(奥本海默)那里干活。有两个年轻的物理学家来找奥本海默请教一个问题。此时奥本海默已经进入脱产的老板阶段,就告诉他们这样这样算,回去自己算吧。当天Schwinger狂算了一个晚上,最后就把结果写在一破纸上,塞到一口袋里。过了5、6个月,那两个人回来了,高兴把结果拿给老板看,Oppenenheimer就对Schwinger说你不是早就搞定了吗,你去对一下。Schwinger就回去把所有的衣服翻了遍,终于找到了那个小纸团。对了一下,回来告诉大部分是对的,只差了一个因子。于是Oppenenheimer转身就对那两个家伙说:“你们赶快回去,找找看哪里少了个因子。”看,当老板狂吧?

4、Schwinger的工作时间和其他人是正交的。一般他下午5:30去办公室,那时候别人都回家了。所以如果有问题,总是留个条子在他的桌上。一次一个物理学家不太懂BESSEL函数,就留个条子在他的桌上。第二天他发现一本40页的答案。但是他发现这个结果没有物理意义。就又留条子问你是不是弄错了?Schwinger自信地说没问题。这哥们只好自学相关的数学,好长时间自己也弄出来了。再对一下Schwinger的答案,发现Schwinger用错了一个公式。这事很丢面子,于是Schwinger恼火地说:下次再也不到书上抄公式了,用什么一定自己先推一遍。

5、Feynman没教出好学生,Schwinger却是个好老师,最著名的有Glashow,在Harvard师从Schwinger。Glashow也是个怪才,一次他给他教的学生考试,好象考电动力学吧,学生们被卷子上的一道题目卡住了,个个满头大汗。Glashow突然想起来了,对学生们说:“卷子里有一道题目我也没有做出来,谁做出来了告诉我一声。”全体学生尽皆晕倒。

十一. 夸克发现的历史

1、夸克名称的由来

来自诗集《芬尼根彻夜祭》,其中有这样一段诗句:

“夸克……夸克……夸克……/三五海鸟把脖子伸直,/一起冲着绅士马克/除了三声‘夸克’/马克一无所得/除了冀求的目标/全部都归马克。

2、可怜的兹维格

现在一提夸克,大家都知道是盖尔曼。其实兹维格比盖尔曼要早发明夸克理论,发展的也完整得多,他写了篇特详细的文章。基本上方方面面都涉及到了。可惜四处投稿发不了,因为太超前了。他想在大学谋个职位,可惜没有成功,因为他的关于夸克理论的文章使他名声扫地,某位德高望重的理论物理老前辈评价说那文章纯属江湖骗子之手。这个故事说明:工作做得太好了,是要坏事的。

3、老奸巨滑的盖尔曼

盖尔曼在兹维格之后不久,也得到了夸克理论。可他跟兹维格不一样,兹维格年轻啊,不知道厉害啊。盖尔曼可是太清楚了,圈内那帮老流氓们打击新奇思想的力度。于是他写了一篇奇短的文章,里面凡是关键的部分都说得含含糊糊,模棱两可。然后他又找了一份不是很牛的杂志,发了。可怜的兹维格,夸克理论都在圈内流传很久了,他的文章仍然到处在找发表的地方呢。也是,谁让他写的太详细了呢 。

十二. 讲讲电子自旋的故事

1、说到电子,想起了电子荷质比的测定,密里根油滴试验。现在大家都知道密里根的这个Nobel奖是骗来的了。所以物理实验中曾伪造数据的同学不必内疚,万一你给中国骗个Nobel呢。

2、戈德史密特和另一个老大乌伦贝克当研究生的时候,写了篇电子自旋的论文,他们拿给Lorentz看。结果Lorentz当时就指出:这样电子表面速度大于光速,违反相对论,不可能。这两个人郁闷啊,赶紧去找自己的老板厄轮菲斯特,(爱因斯坦的好友,自杀了)。结果老板告诉他们,文章已发了。还安慰他们:“没关系,年轻人难免犯错。”然后你就知道啦,这两个幸运的家伙,就这样发了一篇重要无比的文章。

07 febbraio

Linux下C++共享库的制作和使用

上面介绍的共享库制作方法只适合c,对于c++前面的方法是不行不通的,不过c++静态库的制作与使用和c是一样的。
这里有专门一篇文章介绍c++共享库的制作与使用(有点麻烦,没有验证过):

Linux下共享库的制作与使用

还是使用上面的例子程序:

生成共享库(动态链接库):
#>gcc  -fpic -shared -o libstr.so  Strlen.c Strnlen.c
-fpic
使输出的对象模块是按照可重定位地址方式生成的。

-shared
指定把对应的源文件生成对应的动态链接库文件libstr.so文件。

动态库的使用:
动态库的分为隐式调用和显式调用两种调用方法:
隐式调用的使用使用方法和静态库的调用差不多,具体方法如下:
#>gcc -c -I/home/hcj/xxxxxxxx main.c
#>gcc -o main1 -L/home/hcj/xxxxxxxx main.o libstr.so  //
这里是*.so

在这种调用方式中,需要维护动态链接库的配置文件/etc/ld.so.conf来让动态链接库为系统所使用,通常将动态链接库所在目录名追加到动态链接库配置文件中。否则在执行相关的可执行文件的时候就会出现载入动态链接库失败的现象。在编译所引用的动态库时,可以在gcc采用 –l-L选项或直接引用所需的动态链接库方式进行编译。在Linux里面,可以采用ldd命令来检查程序依赖共享库。不过我没有隐式调用成功过,因为在Cygwin中没有找到/etc/ld.so.conf,很奇怪。

显式调用:

/*****************************************
FileName: main2.c
Description: test static/dynamic library
Author: HCJ
Date  : 2005-5-7
******************************************/
#include<stdio.h>
#include<dlfcn.h>

int main(int argc, char* argv[])
{
    //define function pointor
    int (*pStrlenFun)(char* pStr);     //
声明对应的函数的函数指针

    int (*pStrnlenFun)(char* pStr, int ulMaxLen);

    char str[] = {"hello world"};
    unsigned long ulLength = 0;

    void *pdlHandle;
    char *pszErr;

    pdlHandle = dlopen("./libstr.so", RTLD_LAZY);  //加载链接库/libstr.so
    if(!pdlHandle)
    {
        printf("Failed load library\n");
    }
    pszErr = dlerror();
    if(pszErr != NULL)
    {
        printf("%s\n", pszErr);
        return 0;
    }

    //get function from lib
    pStrlenFun = dlsym(pdlHandle, "Strlen"); //
获取函数的地址

    pszErr = dlerror();
    if(pszErr != NULL)
    {
        printf("%s\n", pszErr);
        return 0;
    }

    pStrnlenFun = dlsym(pdlHandle, "StrNlen");
    pszErr = dlerror();
    if(pszErr != NULL)
    {
        printf("%s\n", pszErr);
        return 0;
    }

    printf("The string is : %s\n", str);
    ulLength = pStrlenFun(str);   //
调用相关的函数

    printf("The string length is : %d(use Strlen)\n", ulLength);
    ulLength = pStrnlenFun(str, 10);
    printf("The string length is : %d(use StrNlen)\n", ulLength);
    dlclose(pdlHandle);
    return 0;
}

#>gcc -o mian2 -ldl main2.c
gcc编译对应的源文件生成可执行文件,-ldl选项,表示生成的对象模块需要使用共享库。执行对应得文件同样可以得到正确的结果。

相关函数的说明如下:
(1)dlopen()
第一个参数:指定共享库的名称,将会在下面位置查找指定的共享库。
-环境变量LD_LIBRARY_PATH列出的用分号间隔的所有目录。
-文件/etc/ld.so.cache中找到的库的列表,用ldconfig维护。
-目录usr/lib
-目录/lib
-当前目录。
第二个参数:指定如何打开共享库。
RTLD_NOW:将共享库中的所有函数加载到内存
RTLD_LAZY:会推后共享库中的函数的加载操作,直到调用dlsym()时方加载某函数
(2)dlsym()
调用dlsym时,利用dlopen()返回的共享库的phandle以及函数名称作为参数,返回要加载函数的入口地址。
(3)dlerror()
该函数用于检查调用共享库的相关函数出现的错误。
 
这样我们就用简单的例子说明了在Linux下静态/动态库的创建和使用。 

Linux下静态链接库的制作与使用

Linux 中的应用程序以以下两种方式之一链接到外部函数:要么在构建时与静态库( lib*.a)静态地链接,并且将库代码包含在该应用程序的可执行文件里;要么在运行时与共享库( lib*.so)动态地链接。通过动态链接装入器,将动态库映射进应用程序的可执行内存中。在启动应用程序之前,动态链接装入器将所需的共享目标库映射到应用程序的内存,或者使用系统共享的目标并为应用程序解析所需的外部引用。现在应用程序就可以运行了。

 

先介绍静态库:

静态函数库实际上就是简单的一个普通的目标文件的集合,一般来说习惯用“.a”作为文件的后缀。可以用ar这个程序来产生静态函数库文件。Ar archiver的缩写。静态函数库现在已经不在像以前用得那么多了,主要是共享函数库与之相比较有很多的优势的原因。慢慢地,大家都喜欢使用共享函数 库了。不过,在一些场所静态函数库仍然在使用,一来是保持一些与以前某些程序的兼容,二来它描述起来也比较简单。

静态库函数允许程序员把程序link起来而不用重新编译代码,节省了重新编译代码的时间。不过,在今天这么快速的计算机面前,一般的程序的重新 编译也花费不了多少时间,所以这个优势已经不是像它以前那么明显了。静态函数库对开发者来说还是很有用的,例如你想把自己提供的函数给别人使用,但是又想 对函数的源代码进行保密,你就可以给别人提供一个静态函数库文件。理论上说,使用ELF格式的静态库函数生成的代码可以比使用共享函数库(或者动态函数 库)的程序运行速度上快一些,大概15%。

 

假设有下面几个文件:String.hStrlen.cStrlnen.c
String.h
,声明相关函数原形;
/***********************************
Filename : String.h
Description :
Author   : HCJ
Date     : 2006-5-7
************************************/
int Strlen(char *pStr);
int StrNlen(char *pStr, unsigned long ulMaxLen);

Strlen.c:函数Strlen的实现,获取给定字符串的长度;
/**************************************
Filename    : get string length
Description  :
Author      : HCJ
Date        : 2006/5/7
**************************************/
#include<stdio.h>
#include<assert.h>
int Strlen(char *pStr)
{
    unsigned long ulLength;
    assert(NULL != pStr);

    ulLength = 0;
    while(*pStr++)
    {
        ulLength++;
    }
    return ulLength;
}

Strlnen.c:函数StrNlen的实现,获取给定字符串的长度,如果输入字符串的长度大于指定的最大长度,则返回最大长度,否者返回字符串的实际长度;
/**********************************************
Fileneme: mystrnlen.c
Description: get input string length,if string large
             max length input return max length,
             else real length
Author: HCJ
Date  : 2006-5-7
**********************************************/
#include<stdio.h>
#include<assert.h>

int StrNlen(char *pStr, unsigned long ulMaxLen)
{
    unsigned long ulLength;
    assert(NULL != pStr);
    if(ulMaxLen <= 0)
    {
        printf("Wrong Max Length!\n");
        return -1;
    }
    ulLength = 0;
    while(*pStr++ &&  ulLength < ulMaxLen)
    {
        ulLength++;
    }
    return ulLength;
}

生成静态链接库:
利用GCC生成对应目标文件:
#>gcc –c Strlen.c Strnlen.c
如果对应的文件没有错误,gcc会对文件进行编译生成Strlen.oStrnlen.o两个目标文件(相当于windows下的obj文件)。然后用ar创建一个名字为libstr.a的库文件,并把Strlen.o Strnlen.o的内容插入到对应的库文件中。,相关命令如下:
#>ar –rc libstr.a Strlen.o Strnlen.o
命令执行成功以后,对应的静态库libstr.a已经成功生成。

静态库的使用:
假设有下面的文件要使用对应的的静态库:
编译生成对应的目标文件:

#>gcc -c -I/home/hcj/xxxxxxxx main.c
生成可执行文件:
#>gcc -o main1 -L/home/hcj/xxxxxxxx main.o libstr.a
其中-I/home/hcj/xxxxxxxx-L/home/hcj/xxxxxxxx是通过-I-L指定对应的头文件和库文件的路径。libstr.a是对应的静态库的名称。这样对应的静态库已经编译到对应的可执行程序中。执行对应的可执行文件便可以对应得函数调用的结果。

/*****************************************
FileName: main.c
Description: test static/dynamic library
Author: HCJ
Date  : 2005-5-7
******************************************/
#include<stdio.h>
#include “String.h”   //
静态库对应函数的头文件

int main(int argc, char* argv[])
{
    char str[] = {"hello world"};
    unsigned long ulLength = 0;

    printf("The string is : %s\n", str);
    ulLength = Strlen(str);
    printf("The string length is : %d(use Strlen)\n", ulLength);
    ulLength = StrNlen(str, 10);
    printf("The string length is : %d(use StrNlen)\n", ulLength);

    return 0;
}

cygwin的安装以及交叉编译环境的配置(2)

二、配置arm交叉编译环境

Cygwin下配置arm-linux交叉编译环境的方法很多,简单的可以下载一些别人编译好的工具如:arm-linux-toolchain-cygwin等,解压之后把相应的文件夹拷贝到Cygwin的目录下,但是这种方法至少有两个不好的地方,一是会把Cygwin本身自带的很多东西覆盖掉,二是据说这个arm-linux-toolchain-cygwin现在的版本还不支持浮点数。所以我没有采用这种方法,而是另外方法是:

1.准备工作,下载如下软件包:

http://lsb.blogdns.net/ezx-crosstool下载ezx-crosstool-0.5.tar.bz2

 

ftp://ftp.gnu.org/pub/gnu 下载如下包

binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2

gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2

 

http://www.kernel.org/pub/linux/kernel/v2.4/ 下载

linux-2.4.26.tar.bz2

 

以上几个包只有第一个是必须的, 后面几个编译的时候如果没有会自动下载,如果你网速够快的话就可以先不用下载,不过强烈建议先下载下来,这样会节省很多时间。

 

2.把下载来的ezx-crosstool-0.5.tar.bz2解包:

tar xvfj ezx-crosstool-0.5.tar.bz2

会生成一个ezx-crosstool-0.5目录, 然后把预先下载的:

binutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz2

gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2

拷贝到ezx-crosstool-0.5目录的子目录下(没有预先下载则跳过此步).

 

3.编辑ezx-crosstool-0.5目录下的build.sh文件,把第5:

RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt

改成你想要的安装位置,比如要安装在/usr/arm就改成:

RESULT_TOP=/usr/arm

 

4.最后一步,也是最费时间的一步:

ezx-crosstool-0.5目录下运行:

./build.sh

 

然后就慢慢等吧...

我是头天下午3点左右开始安装,到第二天上午10点左右才完成。另外还要注意有足够的空间,安装好交叉编译环境的Cygwin大概有4G,我第一次就是因为空间不够,没有安装成功,白白浪费了一个晚上。

 

安装好之后就可以在Cygwin下进行arm-linux的交叉编译了,基本上和linux下一样,只不过在每个命令前多了一个arm-linu-,如gcc变成了arm-linux-gcc,其他的依次类推。

cygwin的安装以及交叉编译环境的配置(1)

这段时间因为要把以前做的东西移植到arm平台,要用到linux平台以及arm的交叉编译环境,但是又不想安装linux系统,查了一下资料,发现Cygwinwindows平台下的的linux仿真平台,基本上能够得到所需的linux工具。初次接触这个东西,弄起来还是有点麻烦的,现把一些查到的资料整理一下,免得以后用到的时候忘掉了(资料大部分都是来自网络,如果侵犯到原作者的权利,请留言,我会马上删除的)。

 

一、             Cygwin

Cygwin是一个用于在Windows上模拟Linux环境的软件。它可以作为那些虚拟机软件的一个部分替代品。之所以将它排在第一个来介绍,是因为它实在给我帮了很大的忙。

运行Cygwin后,你会得到一个类似LinuxShell环境,在其中你可以使用绝大部分Linux软件和功能。如Gcc,Make,Vim,Emacs等等。总之如果你想使用某个Linux下的功能,而windows上又找不到好的替代品的话,你就可以用Cygwin。我使用的最频繁的是GccMake。我经常用它们来编译一些我从网上下载的开源的工程。这些工程在Windows上编译往往很麻烦。我也用它做过X Server来连接一台真正的Linux服务器,用来测试一个用tcl/tk编写的跨平台的用户界面程序。下面,我逐步介绍Cygwin的基本用法。

1.1. 安装

Cygwin 的安装很简单,登陆www.cygwin.com,点击页面上的“Install or update now!”。首先要下载一个网络安装程序,运行后会看到如下界面:

Figure 1. CygWin Setup

如果你使用的版本不同,这个界面可能会稍有差异。点击下一步,选择Install from Internet。这是最常用的选项,如果你下载过本地安装包,也可以使用第 三个选项。下面以从网络上安装为例讲解,点击下一步,选择你的安装目录,下一步,选择你要存放下载的文件的目录,建议不要和你的安装目录在一起。将来如果你的安装目录出了问题,可以从这个目录重新安装而恢复。下一步是选择Internet连接方式:

Figure 2. Cygwin Setup - 连接方式

如果你要使用代理的话,可以在这里设置,我使用的是直接连接。下一步,这个时候安装程序会去试图找一份所有可以使用的镜像服务器的列表,这会需要一点时间。然后你会看到如下界面:

Figure 3. Cygwin Setup - 选择镜像

然后你就要去选择一个对你来说最快的镜像了。这里Cygwin做得非常不好,一大堆的镜像,谁能一个个的试呢?希望以后的版本,可以在这里提供一个自动速度检测的功能。我一般使用mirrors.kernel.org这个镜像,速度快的时候,一秒20K吧。你也可以加入自己的镜像服务器地址,不过目前为止,我没有找到在国内的镜像。再点击下一步,安装程序又要停止一会,这次他是要从你刚才选择的镜像站点下载当前所有可用的软件的列表。如果这个过程很长,你就可以取消了,因为接下来的下载会更漫长。这里再次批评一下Cygwin,取消后程序就退出了,要从新来过,这个太不方便了。下面是软件列表界面的截图:

Figure 4. Cygwin Setup - 安装软件

这里要解释一下这个界面:在List的上面有4个单选按钮,它们决定了你选择安装包的策略:

  1. Keep,意思就是说保持目前已经安装的版本不动。比如你现在一个软件的版本是1.01,而服务器上已经有了1.20,选择这个选项,不会替换你目前的版本。这个选项非常有用,因为Cygwin上的版本升级很快,如果每个升级你都要安装的话,你会发现即使你只想安装一个小小的新软件, 安装程序也会顺便给你把所有安装过又有更新的程序重新下载安装一次。
  2. Prev,意思是说安装上一个版本。这个功能我从来没用过,可能是用来作版本回滚的吧。
  3. Curr,意思就是说把最新的版本统统下载下来安装
  4. Exp,没用过这个选项

右边的"View"按钮是用来选择显示方式的,分别有按类别显示,全部显示,部分显示,显示最新的和显示尚未安装的几种模式。

搞清楚了这些选项的含义,接下来,就是选择你想要的程序安装了。一般第一次安装,先把它默认要安装的都给装了,这包括最基本的一些东西,比如bash.之后你可以根据自己的需要选择安装,比如Gcc,Vim,make,autoconf等等。

选择好你要安装的软件后,再点击下一步,程序就开始自动安装,你可以去干干别的。

要注意的是,安装Cygwin最好准备大一点的磁盘空间,下载下来的安装文件有600M,完全安装好大概要2.7G左右。

1.2. 使用

安装完成后,在桌面上会有一个Cygwin的图标,双击它,会出现一个windows的命令窗口,过一会,你就会见到熟悉(或者陌生) LinuxShell界面。试一试ls ,是不是可以工作了?

Figure 5. Cygwin - 界面

从今往后,你就可以自由的在windows下使用Linux的软件了。基本上你能用到,cygwin都有。如果你要开发可以在两个平台上运行的程序, cygwin也是你前期试验的好地方。从互联网上下载的各种开源代码,也可以在Cygwin里编译,运行,调试。下面介绍一些使用技巧,更多地还要靠大家自己探索拉!

1.2.1使用Cygwin访问windows的文件

Cygwin安装后,其根目录位于你的安装目录下。所以使用cd /,只能访问到你的安装目录,要访问硬盘上的其他文件,可以使用mount:

mount D:/testdir ~/testdir

这样,你就可以在~/testdir里访问到D:/testdir里的内容了。

1.3. 其他

Cygwin是一个了不起的软件,为我节约了大量的时间。更是我了解开源软件的一个得力工具。不过它有一个缺点非常让人讨厌,就是他使用Cygwin.dll作为包装器,如果你不小心掉进了Dll Hell,就会出现很多程序不能运行,抱怨找不到某某某函数入口。遇到这种情况,建议你把C:\windows,C:\windows\system(32)下的cygwin.dll全部找出来删除,只保留在安装目录下的那个。

24 gennaio

工作年终总结

好久没到这里写点什么东西了,不是没有写,只是很多东西写了不方便贴出来,索性就不更新这里了,写在自己的日记里算了。以后这里也就最多贴一些书评或者工作感受罢了。
前几天所里开员工大会要每个人都写一个年终总结,写好了顺便贴在这里,算是这半年的工作总结吧:
 

从七月中旬算起,我来所已经整整六个月了,在这半年中做了一些事情,遇到了很多的问题,也学到了不少东西。

刚来所里的时候,从七月中到八月底我是在看AVSM标准以及流媒体方面的资料,其中主要是在研究一个RTP/RTCP库的实现以及应用,并且把RTP/RTCP加入到AVSM播放器中,实现了一个简单的网络播放器,可以从一台主机发送码流,在另一台主机接收码流并解码播放,但播放器端没有考虑丢包的问题。 

从八月底到九月中旬实现了一个高速的可靠的UDP传输程序。主要是利用了一个改写的滑动窗口算法来实现这个功能,并且把这个传输程序加入到播放器中,实现了一个基于UDPAVSM网络播放器。 

从九月中旬开始研究AVSM的系统层,协助李师兄开始AVSM手机电视联合攻关项目的研发,主要负责系统层的复用与解复用。

十月李师兄离所,所内研发人员重编,我进入系统研发组,与其他组员一起进行联合攻关项目以及东方龙流媒体手机电视的研发,我主要负责联合攻关项目编码端、播放端的解复用,东方龙流媒体手机电视的编码端。 

11月中旬,实现了系统层复用与解复用的简单功能;

11月底的时候东方龙流媒体手机电视的编码端库基本完成;

12月和谢师兄一起多次到东方明珠调试联合攻关项目的系统,解决测试中遇到的各种问题,12底完成联合攻关项目的基本功能,从实时编码到系统层复用,再到信号的发送与接收、系统层的解复用、解码播放,基本流程的各个环节都打通;

1月初浦东科协完成对联合攻关项目的中期验收;

上个星期与谢师兄一起和中兴商谈好LINUX手机平台播放器库的接口并形成文档;把网络接收功能加入到东方龙流媒体手机电视的播放器中。

 上面就是我这半年来做的工作,下一步要做的工作主要有两个:完善联合攻关项目的编码端;实现中兴LINUX手机平台播放器库。

 总的来说,这半年虽然做的工作比较多,但是总感觉效率不是很高,原因主要是很多东西都要靠自己去摸索,没有人指引。我们现在做的很多东西都是已经很成熟的东西,别人早几年就已经做好了的,如复用解复用、播放器等,但我们以前都没有接触过,全部要从头开始摸索,这样做不但效率不高,会走很多弯路,做出来的效果也不是很好,如现在我们的播放器在音视频同步上总是不尽如人意,系统层的复用与解复用也只实现了基本的功能,而这些别的公司早就有成熟的产品和代码,我觉得我们应该与这些公司合作或者向他们购买这些产品和代码,而不是什么东西都自己来做,我们应该集中精力来做我们核心的东西,这样不但可以提高我们的工作效率,加快公司的积累,节省了成本,也能保持我们在核心产品上的优势。

13 novembre

唐德刚批注《胡适口述自传》摘录

刚来上海的时候就买了这本书,但是一直没有时间看,只是每天蹲厕所的时候翻看几页。虽然还没有看完,但感觉很有意思,特别是唐德刚在每篇后面的批注。今天看到唐对《青年期的政治训练》这篇的批注,很受启发,摘录如下:
--------------------------------------------------------------------------------------------------------------------
       胡适之先生这篇有关政治思想的自述,是他晚年著述中很重要的一篇。这里所谈的虽是他青年时代的故事,但也是他晚年期的夫子自道,而且是一篇对他幼年思想重新估价、从头核准、初无丝毫“修正”的夫子自道。笔者二十年前为他英文自述作导言时,也就根据这几篇而强调说,胡适思想四十年来无太大的变动。这从好处来说,是胡适思想的前后一致性;从坏处来说,则是胡适之没有进步。
 
      青年期的胡适是被两位杰出的英美思想家——安吉尔和杜威——“洗脑”了,而且洗得相当彻底,洗到他六十多岁,还对这两位老辈称颂不置。这也就表示胡适的政治思想,终其生没有跳出安、杜二氏的框框。胡适之先生一生反对“被人家牵着鼻子走”。可是在这篇自述里,我们不也是看到那个才气纵横的青年胡适,一旦碰到安吉尔、杜威二大师,便“尽弃所学而学焉”,让他两位“牵着鼻子走”吗?适之当然不承认他被人家牵着鼻子走,因为他不自觉自己的鼻子被牵了。这并不表示他老人家没有被牵。相反的,这正表示牵人鼻子的人本事如何高强罢了。
 
安吉尔、杜威能在东方碰到个诚实无欺、信仰坚定、生死不渝的一世祖,马克思、恩格斯为什么就不能呢?一个民族的智慧老大之后,被侵入的新兴思想所洗脑——所谓启蒙期——并赖之而复苏,原是很自然的事。但是一直停留在洗脑程序之中,而不能跳出框框,那这个老大民族就脑脉硬化,没有进步了。

  记得幼年读《左传》,读到一个小故事说:“公嚼带,使公子牛焉。公子仆,折公二齿。”在胡先生这篇自述里,我们也看到,胡适嚼带,使安、杜二人牛焉。安、杜仆,胡公折其二齿。

  当然在近代中国启蒙的思想家,甚至海外的宣传家之中“折其二齿”的,正所在多有,并不只胡老师一人。所以我们要了解胡适的政治思想,先得搜搜安、杜二公的“根”(root),看看他们怎样能使我们那样有才学的胡老师,来“俯首甘为孺子牛”!

  大凡一个思想家,他思想体系的建立,总跳不出他自己的民族文化传统和他智慧成长期中的时代环境。这是他的根。其后枝叶茂盛,开花结果,都是从这个根里长出来的。安、杜二氏的根是怎样长法的呢?让我们先来逐条解剖一下:

  第一,他二人都是白种人。他们的文化传统白得像一条被单。他们的思想、观念,是完全从欧洲白种人的文化传统出发的。

  第二,他二人都是西方扩张主义极盛时代、最富强的帝国主义国家中的上等公民。

  第三,他们是上述这个社会内的“开明分子”、“社会贤达”、高级知识分子,自命为有教无类的大学者、教育家。他们的人品都是极其善良的:奉行基督,反对战争,同情弱小,同情得像贾宝玉同情刘姥姥的孙子板儿一样。

  第四,他二人就同胡适之先生、张君劢先生一样,无拳无勇无钱,而又自命不凡,不甘寂寞,专门欢喜“谈政治”的“白面书生”。现在美国的费正清先生等等的社会贤达,还是属于这一类。

  有了这四条框框,我们就不难看出他们所讨论的“力”、“能”、“和平”、“法律”等等概念的本质之所在了。

  所谓“力”也者,在他们看来,就是英国的“力”碰到了德国的“力”。他们二力相销,两败俱伤,所以胜者也就不能发“胜利财”了。他们就未看到一旦英国的“力”碰到印度的“力”,俄国的“力”碰到中国的“力”,二力不相销,则胜利者就要发“胜利财”了。他们如果不发胜利财,胡适之先生也就没有“庚款”可以“留美”了。

  所以谈近三百年来的世界问题(包括今日美、苏争霸的问题),如果抹杀“帝国主义”这个基本概念,则一切理论也就不值一驳了。

  再看安、杜二氏所谈的“和平”罢!

  他们的“和平”的定义,事实上是:“全世界在休战状态下,维持现状(status quo)。”第一次大战(乃至第二次大战)前后,想“维持现状”最力的国家便是“日不没”的大英帝国。她在“现状”之下,已日不没矣;不维持现状,难道还要征服火星吗?

  那时想打破现状,使世界大乱,好浑水摸鱼的是德、意、日等几个小强盗。大强盗要维持现状,保护“既得利益”,小强盗要打破垄断,向大强盗分赃,才搞起了所谓“世界大战”,其理甚明。

在这情况之下,安、杜二大师要全世界休兵息战,维持现状,这不但小强盗不肯;这现状对我们这些历经大小强盗洗劫、弄得家破人亡的殖民地、半殖民地、次殖民地,又发生什么意义呢?民国初年孙中山先生反对“参战”的理论基础(我强调的是“理论”二字),也是从这个观点出发的。

  安吉尔、杜威这两位白面书生,书生论政,见不及此,是可以理解的,因为他二人皆“身在此山中”。像胡适之先生这样的从半殖民地出来的黄面书生,在国际政治上也和他们大唱其同调,不是很可笑的事吗?!

  杜威对“法律”所作的那两条解说,事实上和我国汉朝许慎所说的“触不直者去之”,同样没有太大的反驳价值,因为他忽略了“法律”的从属性而以偏概全。

  “法律”就像一头猎犬,它是有“主人”的。杜威用数理逻辑所推出的答案,在今日政治学派上说盖可归之于“数理派”(mathematical metrical)。他这个调节不同力量、使其作有组织地更经济有效地使用这一公式,有个大前提——使用这一公式的人,必须全是“主人”。这样则一条公路上两位驾驶员,各自靠右边开车,各自经济有效地使用其“力量”而不至于“浪费”。

  可是就在胡适之在美国做学生的时候,也就是杜威完成这个公式之时,美国加州却有一条管理该州公路的“法律”。那条“法律”规定在公路驾马车而过的小贩,不收费,或收费甚轻;步行挑担的小贩,则付重税,重于马车数倍。何以故呢?就是“主人”家里的人都是乘马车的。那些“挑担”的广东小贩,站都站“不直”,所以这匹野兽“NCE5C”便“触而去之”了!

  笔者在50年代的中期,为着应付考试也曾熟读杜威之书。讲到“不疑处有疑”之时,我就把他一段段地开了天窗,虽然我在三重口试的考场上不敢对这个杜家店说半个不字。

  后来我访问胡先生,我看他老人家无条件地服膺杜威的情形,心中亦不以为然。但是胡公虽然一辈子鼓励人家“怀疑”,他自己却不大愿意人家对他的思想有所“怀疑”。笔者因而也就未敢过分地唐突西施。可是适之先生是绝顶聪明和极度虚心的。我们的字里行间式的聊天,曾惹起胡先生用了大笔血汗存款,托我替他买了十来本研究杜威的新著。

  笔者叙述这段小事,并不是说其愚如余小子者,尚敢斗胆批杜,而胡大师却不敢说半个不字!非也。这是中国学术史上的“辈分”问题。

  适之先生求学于清末民初之际,那时孔家店已不倒自倒。思想界一片空白(笔者这一论断,周策纵先生是一向反对的),青年知识分子乃四出“求经”。可是这些洋“经”对他们来说,实在是太新鲜、大高明了。在泰山压顶的西风东渐之下,他们完全丧失了“学术自主”的信心(事实上也无此能力),因而新学问对他们只有“皈依”的份,哪里谈得到怀疑呢?幼年既无力怀疑,也无心怀疑,年老功成业就,已成了开山宗师,东方一世祖,自然就更不会怀疑了。这不但是实验主义者如此,马克思主义者更是如此。

  我们这后一辈就有点不同了,我们第一个怀疑是那些“留学归国”在大学里教过我们的洋老师。对老师的怀疑,因而对老师的老师也就不太信任了。这就是笔者所说的“辈分问题”,倒不是后一辈胆子大,“不知轻重”。

  再者,胡适之先生原是个十分标准的传统中国士大夫。传统的士大夫现代化了,因而他与英美的士大夫——英国的张君劢、美国的胡适之……也就一拍即合。后一辈的知识分子去古已远,他们的士大夫气息已经很淡薄,加以他们都是抗战、革命等空气喂大的,对洋人也就没有像老一辈子那样说一不二了。

------------------------------------------------------------------

正所谓文理相通,思想家哲学家是如此,工科理科也是如此。

09 novembre

[转]算法人生

刚才在网上找资料,发现一篇文章,写得很有意思,转录过来:
 
几年前的一次算法考试,准备写篇文章上去的,可惜考试的时间太短,做完那些题目后,已经没有时间了。于是写给了自己,近日翻了出来,给大家分享,请大家批评指正。

       算法与人生,看上去没有什么联系,其实不然。

       算法是由若干条指令组成的有穷序列。人生是由若干指令(去吃饭、去睡觉、去工作等)组成的有穷序列。   
       算法有零个或多个由外部提供的量作为算法的输入。人从生下来开始就不断地接收来自于自然界、社会各种信息。
       算法产生至少一个量作为输出。人生当中的输出也至少有一个,包括物质的和精神的。
       组成算法的每条指令是清晰的,无歧义的。组成人生的指令也是清晰的,不过由于硬件具有很大的不稳定性,执行起来会造成误差。
       算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。
人生中的每条指令当然也如此。
 
       算法分析的目的在于分析算法的复杂度,从而改进算法,使算法能够使用尽量少的资源(时间、空间)完成算法的计算,得到结果。每个人的人生都有一定的目的,不管这个目的是高尚的还是庸俗的,也不管这个目的是宏伟的,还是渺小的。每个人都为了这个人生目的而奋斗,有的人在奋斗过程中不断分析,寻求更好的方式达到目的,有的人按部就班的前行。当然不会思考的人获得成功的可能性是很小的,所以相对应于算法分析,这里提出人生分析。如同算法分析一样,人生分析的目的在于分析如何目前的现状,使用最少的资源(时间、金钱等)达到自己的目标。
 
       所以说,人生如算法,算法分析也就是人生的分析。
 
       无论从宏观的角度来看,还是从微观的角度来看,算法中最重要的一个指令是“选择”,人生也如此。算法寻求结果是通过try出来的,人生也是try出来的,说得通俗一点,人生是摸索出来的,说得更科学一点,人生是探索出来的。如果人生的目的是排好序的,那我们没有理由从小到大一点一点去try,如果有共n个目的,那么平均要试n/2次,但以选择二分查找法去寻求自己所追求的那个目的,平均只需要logn次。可惜假设不成立,但是人生中的很多事情是可以通过二分查找法来进行改进的,大家应该知道,人生中很多事情不是只有两种答案,一种是0,还有一个是1,正确的答案往往在0和1中,而且根据不同的外部输入,答案也不同,换句话说,只有把握好了一个度,才能处理好。这样的例子人生中太多。
       人生是复杂的,复杂得我不知道人生是否属于NPC,或者说这里用“属于”这个词是否正确我都不能明确。但有一点可以确信,人生中应用了各种算法。
 
       分治算法。这是用得最多的,而且也是最直观的。社会的进步,造成了社会的复杂,复杂得依靠个人能力已经不能去解决,那么此时,我们通常采用的方法就是,大事化小,小事化了(呵呵,后半句不要)。为什么化小啊,为了小到能够让个人能够去完成啊,是不是只要化小就可以了呢?当然不是,划分时还得注意划分的规模,如果一件事情需要10天完成,你分给A、B两个人,A,70%, B,30%,那么最终需要7天才能完成,如果A,50%, B,50%,那么5天就能完成。还有一点要注意,A和B的工作完成后要能够准确的接上。呵呵,这是管理学中的方法,其实这就是分治了。分而治之,治而合之。
 
       动态规划。货郎担问题够通俗话了吧。什么,你没有用到,呵呵,其实每个人在无形中都用到了该算法(计算得准不准确另当别论)。比如有时候想上街去买东西,要去一个地方买鞋子,还要去另外一个地方买衣服,再去另一个地方买点吃的,最后回家,出门前你都会盘算一下应该先去哪里,再去哪里,怎样走线路会更近一点,会节约更多的时间。这个时候你就用到了动态规划。忘了说非常非常重要的一点,动态规划在计算过程中一定要保留已经计算过的数据,避免重复计算。没有这一点,就是穷举算法,有了这一点就是动态规划算法,没有这一点,你也能成功,但是你的花100年,有了这一点,你可能只需花10年。人生何其短,有多少时间能让你重复计算?
 
       贪心算法。拥有贪心算法思想的人肯定不是一个战略家,因为他只注重当前利益。不过拥有贪心算法思想的人肯定是一个最开心的人,因为他得到的总是当前最好的。在这个世界上,我想大多数人和我一样贪心。
 
       回溯法和分支界定法。这两个算法是体现try思想最明显的了。不就是解决问题吗,我去先去按这条路走一走,走不通,再试一试走另一条路,呵呵,走通了,这个方法是最好的方法吗,还有没有更好的,在去试,试,试,呵呵,找到一个更好的方法,难道人生不是这样的吗?不过有一点要注意,不要盲目的试,要学会在试之前对这种方法进行判断,如果明显不行,就没有必要再试了,以免浪费时间。
 
       虽然人生如算法,可是千万别严格的按照算法去生活,当你每天一成不变的按照你计算的从家到公司最近的线路来来回回的时候,不妨偶尔绕绕路,你会发现不同的风景,毕竟,我们是在生活,不是在做算法考试,不会因为没有达到最优而扣你的分:)
 

雁过留痕

Nessun elenco musica in questo Windows Live Spaces.
Foto 1 di 59