2019-02-02

【基础科研】谈量子力学

【基础科研】谈量子力学
出處: 【基础科研】谈量子力学(一) - 王孟源的部落格 - udn部落格 http://blog.udn.com/MengyuanWang/108908797#ixzz5eLyf9YW4

我一直以简明易懂为原则来写稿,毕竟我所谈的话题本身都已经是很复杂的现象,必须加以浓缩简化才能说得清楚。不过那些有关社会人群的事,一般读者至少还有直觉性的经验;量子力学则不衹是极为专业,而且极为反直觉(Counter-Intuitive),不是下过多年苦工的人不太可能真正瞭解它的精微细致之处,所以原本我没有计划要谈。不过昨天有读者要求,我又自忖一辈子所学的很多很杂,却不是教书的,没有弟子可传,自己的儿子对这些研究也基本没有兴趣,等我年老痴呆了,这些思想也将随脑力的衰退而湮没,似乎有点可惜,所以不自量力,在这里谈谈我对量子力学的理解。如果不是物理系出身的读者,请自由忽略,不必强读。

量子力学的核心是它的波动方程式,这是一个普通的微分方程,如何定量地求解是理工科出身的人都应该学过的。真正要懂量子力学的涵义,难点在于如何定性地将量子力学的计算与现实的观察联系起来。大家都知道量子波的平方代表着机率密度,如果反復做同一个实验,测量结果会成随机分布(但是量子力学不是掷骰子;掷骰子是古典的随机事件,量子现象除了所有的测量值都有可能出现之外,还有测量值之间的相干,参见下面的双缝实验)。但是粒子还是粒子,如果衹专注在一个粒子上,测量后就衹能有一个定值,那么与它对应的量子波必然也在测量过程中被改变而集中在这个定值上。量子力学的祖师们对这个现象的哲学解释有不同的理解;很不幸的,因为哲学解释不能由实验取决,最后胜出并主导后来教科书内容的是当时身份地位最高的Niels Bohr所鼓吹的量子波崩溃论(Wave Function Collapse);因为Bohr是柯本哈根学派的宗师,所以也叫作柯本哈根解释(Copenhagen Interpretation)。它的逻辑漏洞不止困扰了后世无数的理工科学生,而且还衍生了所谓“New Age”的伪科学。
拿双缝实验为例子,一束粒子照射到开了两条平行缝隙的障碍上,会在其后的墻上產生一系列的干涉条纹。在这个例子里,粒子撞墻的位置,是“外界测量”的物理量。如果衹用一颗粒子,自然衹会有一个碰撞点,但是这个点出现的机率分布正是前面所説的干涉条纹。古典粒子即使是随机的,也衹会在两条平行缝隙后方各產生一个条纹。

量子波崩溃论说在受到“外界测量”后,量子波随之崩溃,这个崩溃的过程是立即而且不受波动方程式主导的。这个説法不但肆意强加了一个超越波动方程式的人工成分,而且连定义都无法自圆其説:什么算是外界?什么才算是测量?测量是否代表着心智?那么一切现象是否植根于唯心认知?一个很明显很简单的物理现象,一下子变成了绝对唯心论的根据,这在逻辑上实在牵扯得太远了。但是物理学者也是人,他们也有社会惯性,虽然正确的解读从一开始就有人明白,但还是一直拖到1980年代,高能物理界才缓慢地开始承认量子波崩溃论是不合逻辑也没有必要的。那时推动新的量子去相干(Quantum Decoherence)看法的,就包括在哈佛教量子场论的Sidney Coleman;他很得意地在他的办公室解释给我听时,当时很年轻的我不识相地说这是理所当然的,他也就理所当然地不高兴。

量子去相干论说没有所谓的外界,测量仪器和被测量的粒子都属于同一个整体的量子波(其实整个宇宙都在同一个量子波里),仪器与粒子间的作用在于打破不同测量值之间的相干关系(事实上可以説,所谓的测量仪器,本身就是专门设计来打破不同测量值之间的相干关系的机制),这一般是靠仪器所含的极大数量的凝态原子来吸走被测量的粒子的量子不确定性,其结果是粒子表现得如同一个古典的骰子。但是整个过程中量子波的变化在时间上是连续的,始终遵守着波动方程式,衹不过在粒子与仪器碰撞后,它的量子波的尖峰有了明显的分离。以薛定格的猫(Schrodinger's Cat)为例,当我们打开箱子时,猫的量子波并没有崩溃,衹不过是在开箱之前已经分离为生与死的两个尖峰。而且由于猫和毒气机制所含的原子很多,又是在凝态,这个分离早在箱子里的量子纠结粒子接触到毒气机制以决定是否触发毒气的时候就已发生。如同所有古典的随机事件一样,现实必须择一发生。柯本哈根解释中又是生又是死的猫就从来不存在;不论箱子外面有没有观察者,它始终衹能或是生或是死。

很不幸的,等到物理界把量子去相干搞清楚时,已经是超弦即将席卷高能物理的前夕,所以更进一步的解释就走上了歧路。

前文解释了量子去相干的基本精神是大数量的凝态原子在接触微观粒子的过程中,会有打破其量子相干关系的趋势,使该粒子表现得如同一个古典的骰子。但是这个古典的骰子到底会选择哪一个答案,却还是随机的。不过因为测量仪器和被测量的粒子都属于同一个整体的量子波,所以结果仍然在逻辑上自洽。换句话说,薛定格的猫若是被箱内的量子随机机制杀死了,整个宇宙就步上了死猫歷史的路;若是没有被杀,宇宙则走上了另一条活猫歷史的路。总结来说,每次有微观粒子和巨观物体接触,前者的量子态就被去相干,一个随机结果被记录下来,宇宙的歷史又在岔路口做了一个选择。

宇宙有大约10^100个原子和电子,光子更是多到不可计数;在137亿年的宇宙歷史中,每个原子、电子或光子可以遭遇多次的量子去相干经验;在岔路口面临的选择还可能是连续的(例如双缝实验里,粒子打到墻上的位置)。把这些数目乘起来,宇宙在歷史上面临过的岔路选择之多,可能是人类在实际经验上所能遭遇的最大数字。于是就有了一个新的问题:歷史没有走上的岔路原本也是宇宙量子波的一部分(甚至可能是一大部分,例如如果薛定格的猫原本被设定为九死一生,但是结果是它活下来了,那么没有发生的反而是原本机率空间的90%),难道就这样凭空消失了吗?

1957年时,一个叫做Hugh Everett的美国人提出一个看法,认为每次歷史分岔时,所有的岔路都被“实践”了,宇宙分裂为许多不同的歷史道路,只因为不同的歷史道路之间没有任何沟通的可能,所以生活在任何一个歷史下的人衹能感觉到自己的特定歷史。这个説法后来被叫做“Many-Worlds Interpretation”(“多重世界解释”)。

到1990年代,超弦被证明有至少10^500个解,因而没有任何预言的能力(可能的解越多,理论就越没有针对性回答问题的能力;例如0=0有无限多解,也就对回答x=?没有任何意义),也永远不能被证伪,结果超弦论者一窝蜂地开始鼓吹多重世界解释,以致到现在多重世界解释成为新的主流。其实多重世界解释里面的许多世界,与超弦產生的许多解,完全没有对应的关系,两者在逻辑上是互相独立的。但是超弦论者正想要重新定义科学是什么,而多重世界解释刚好也有很大(其实是更大)数目的多重可能,也同样不能被实验证伪,所以就成为了超弦论者的最爱。

不过虽然多重世界解释不能被实验证伪,它在逻辑上却有很大的毛病,衹是超弦论者当然不知道也不在乎。首先,在很多量子去相干的事件中,相干性并没有降到数学上的零(我们可以确定这点,因为量子波仍然始终遵守波动方程式,而在很多场合下,波动方程式的时间演化过程不可能產生连续的真正零值),衹是变到极小,在物理测量上等同是零。所以看起来像是两条岔路,其实是同一条路,衹不过中间的安全岛很不好走罢了。多重世界解释的第一个逻辑毛病,就在于它假设量子去相干总是產生真正的离散(Discrete)结果,而实际上有很多情况下,离散的表象衹是一个近似。

多重世界解释的另一个逻辑毛病,在于它所做的隐性哲学假设。基本上所有其他对量子力学的解释,都衹有一个现实(Reality)的存在(Existence);而多重世界解释却说凡是数学上允许的解,都是存在的现实。换句话説,现实没有什么特别的,唯一的限制是必须在数学上逻辑自洽。但是“逻辑自洽”是一个很松的要求,我们可以轻易地想像出除了量子力学之外,还有无限多的其他自洽系统,那么那些其他系统的解是否也是存在的现实呢?如果数学自洽是唯一的要求,那么现实存在就衹是幻觉,那么为什么当我凝思一个自洽的数学系统的时候,没有出现对应的新宇宙呢?不同宇宙不能互相沟通,固然是达成自洽的一个方式,但是可以互相沟通的不同宇宙应该也能达成自洽,那么为什么我们没有观察到呢?

多重世界解释还有一个经验法则上的问题,就是它不但违反了Occam's Razor,而且是所有违反中最恶劣的。这是因为它为了解释一个世界,而必须介绍N个世界,而N正是我在前面提到的宇宙在歷史上面临过的岔路选择的总数目,极可能是人类在实际经验上所能遭遇的最大数字。Occam's Razor和可证伪性一样,是科学的基石。多重世界解释不但不可证伪,还以最严重的方式违反了Occam's Razor,那么至少我个人认为它不应该被当做科学的一部分。

Everett提出多重世界解释,基本还是一个懒字:如果我们存在的这个现实有什么特别,那么它就应该衹有一个,而要能证明单个现实的自洽性,是很难的。多重世界解释避免了这项工作,但是其实别人早已做出来了,这就是de Broglie的Pilot Wave(导航波)理论。de Broglie是量子力学的创始人之一,但是他不像Bohr、Schrodinger或Heisenberg那样先发论文、再做计算、最后若是有空再想清楚道理(Bohr显然一直都没空),所以就没有抢发那么多论文,也就没有他们那么有名。de Broglie认为量子波衹是一个导航装置,里面还是隐藏着一个真正的点粒子,而这个点粒子就对应着唯一存在的现实。

要证明导航波理论的自洽性,并不容易,de Broglie自己没有完成。一直到1952年,David Bohm才把整个理论建构成功,所以导航波理论也叫做Bohmian Mechanics。我不想在这里写下一大堆数学,所以请有兴趣的物理学者自行去找资料(例如这里:http://www.bohmian-mechanics.net/)。这套理论是所有量子力学的解释中,唯一逻辑严密完整,而且还明确标定出所有因果关系(Causality)以及现实的特别性。它的另一个好处,是可以确实算出量子力学比古典力学多出的那一项,不但明确地标定出两者的差异,而且还解释了双缝实验中为什么粒子能转弯。但是为什么至今很少人听説过呢?这有一大两小三个因素。

首先是前文提过的歷史原因:高能物理界一直到1980年代才摆脱了量子波崩溃论,但是随即被超弦席卷,于是多重世界解释成了新主流。其次,BM的逻辑太清楚严谨了,所以很难写新的论文。但是另外还有一个理由,使很多高能物理学者对导航波理论嗤之以鼻,那就是它很明显地是非局部(Non-Local)的理论,因此明确地违反了相对论,从而也与量子场论不相容(量子场论是特别为相对论发展出来的)。但是最近几年的实验却一再证明量子力学的确是非局部的(包括今年八月的这个新实验,参见http://www.nytimes.com/2015/10/22/science/quantum-theory-experiment-said-to-prove-spooky-interactions.html?_r=0),所以错的是相对论(或许应该说相对论衹是一个近似而不是绝对正确的)。我在下一篇文章再详细讨论这个非局部性的问题。

20世纪的前30年,是现代物理的黄金时代,狭义相对论、广义相对论和量子力学迅速成形,使人类对宇宙运作机制的瞭解向前跨了几个大步。在这个过程中,爱因斯坦是巨人中巨人,基本上独力完成了两项相对论,并且有意义地参与了量子力学的发展。然而他对量子力学,始终抱着保留怀疑的态度,一辈子重复了那句“God does not play dice”许多次;比较少为人知的是他也常説“God does not use telepathic methods”。

爱因斯坦并不是质疑波动方程式,他真正不喜欢的是Bohr的量子波崩溃论和崩溃过程中的Stochastic(随机选择结果)过程。他认为量子力学的随机特质衹是我们无法测量所有现存的自由度的结果,换句话说他希望量子力学有Hidden Variables(隐藏性的参数),当所有的自由度(包括无法测量的部分)都被考虑进来时,量子力学应该是Fully Deterministic(可以完全决定未来,亦即没有随机选择)。事实上Bohmian Mechanics正是一个他早年梦想的如此Fully Deterministic的隐藏性参数理论;可惜的是,von Neumann(多才多艺的数学/哲学家)给了一个错的证明,说量子力学不可能有隐藏性的参数,等到BM被证明完全自洽,爱因斯坦已经是风烛残年,又被大统一理论的迷梦吸走了所有的时间精力,结果没有给予BM足够的关注和研究。

至于所谓的“Telepathic Methods”,爱因斯坦指的是量子力学里面两个粒子进入纠缠态之后,可以被分离开很远,但是分开测量的结果仍然会遵守纠缠性。例如两个电子可以进入自旋相反的纠缠态,然后被送到距离几公里远的两个实验室,在同一个时间(所以即使用光速,这两个电子也来不及互相协调)测量自旋,其结果必然还是相反的。爱因斯坦仍旧依样画葫芦,认为这个表面上打破了局部性(Locality)的实验,可以用隐藏性参数来解释(这是一篇很有名的论文,发表于1935年,一般依三个作者的名字来称呼:Einstein-Podosky-Rosen,EPR);换句话説,当所有的自由度(包括隐藏性参数)都被考虑进来时,量子力学应该是Fully Local。

在1950年代BM被建立之后,虽然BM本身就是Explicitly Non-local,但是它是一个成功地以隐藏性参数解决Stochasticity的例子,似乎暗示着Non-locality问题也有可能用隐藏性参数来成功解决。不过真正的答案,最后还是靠了一个来自北爱尔兰的年轻物理学家,叫做John Stewart Bell来发现。他首先参考了BM,指出von Neumann证明的错误之处。其后他完成了EPR论文里开始的推论,得到了后世所谓的Bell’s Theorem。这个定理说,如果量子力学的非局部性真的来自于隐藏性参数,那么测量结果必须遵从一个不等式。所以如果实验结果违反了这个不等式,量子力学的非局部性就应该是Irreducible(不可消除的)。

自从Bell在1964年发表他的定理之后,物理学家反復地进行了他所建议的实验,两个纠缠粒子的空间距离从几公分开始,越拉越远,到了几百公里的范围。(讲个题外话,把两个粒子拉开很远的距离,但还是保持其纠缠性,刚好有一个很重要的工业用途,就是量子通讯;这可以保证通讯内容绝对不能被监听或复制。)几十次的实验,结论衹有一个:Bell不等式被违反了。换句话说,量子现象的确是Irreducibly Non-local。

为什么爱因斯坦那么在乎Locality呢?这是因为他推导相对论的起点是Equivalence principle(等效原理),而等效原理的背景就是两个局部的实验环境,所以局部性是相对论的一个极为重要的隐性假设。既然实验已经证明局部性假设是错的,那么相对论也就不可能是绝对正确的。

让我澄清一下,前面那句话并不代表物理系可以不要教相对论了。实际上相对论已经被无数的实验直接或间接地证实了,未来几百年人类会遭遇相对论失灵情形的可能性微乎其微。在我们的实验范围中,量子力学和相对论都将会继续表现得如同是绝对正确的理论,但是逻辑上这两者是不相容的,衹不过这个不相容性必须到所谓的Planck Scale(约为10^19GeV,比LHC的能阶高10^15倍,亦即千万亿倍)才会明显化。量子力学的非局部性被证实,代表着在那个极高的能阶上,新的Quantum Gravity(量子重力)理论必须也是非局部的,所以它会主要藉重于量子力学,相对论可能必须做较多的修正。

有兴趣的物理人应该先从学习BM开始,然后用BM和量子去相干论来理解最近的这些Bell实验。在这个过程中,你或许会有疑问:用量子去相干论来看Bell实验,两个纠缠的粒子和测量仪器都同属一个大量子波,那么不管怎么测量都衹是这个大量子波遵循波动方程式的自然演化,为什么会和Lorentz Transformation有衝突呢?答案在于量子力学的量子波是立足于Configuration Space,而不是Physical Space。只有在单个粒子的情形下,Configuration Space和Physical Space是同样的。当有两个粒子的时候,前者是两个后者的Tensor Product(张量乘积),这个张量乘积衹有在固定坐标系才有自洽的定义。量子场论的物理场没有Configuration Space,直接建立在Physical Space上,所以可以与相对论相容,但是也就遗失了非局部性。

【后注一】正文和评论里,原本说量子场论和QM不一样,不能描述Bell实验,这不够精确。我有20几年没有碰量子场论,在写文章的时候只记得以前常用的Lagrangian表态,忘了做数学物理的人会比较熟的Second Quantization。从Second Quantization来看,量子场论的确包含QM;但是这并不代表着它解决了非局部性的问题:Second Quantization有公式和量子态两部分,前者可以和相对论兼容,非局部性被扫到后者这块地毯下面去了。换言之,量子场论的公式是完全相对性的;只有量子态有非局部性,这使得研究场论与量子纠缠的关系非常地困难。

【后注二】今天(2017年八月9日)有读者看过这篇正文之后,私下联络我,问我对文小刚教授的”弦网“理论(String-net Liquid,参见https://mp.weixin.qq.com/s?__biz=MzA3OTgzMzUzOA==&mid=402377946&idx=1&sn=21aa33c4ebd89c6d395c075ff0151936&mpshare=1&scene=21&srcid=08045JgEMpAfUlTWbYSSL4MV#wechat_redirect)有什么意见。首先,弦网虽然也是一个Theory of Everything(试图解释广义相对论、标准模型和量子纠缠这些现代物理最尖端知识的理论),内容却和超弦无关。当然,名字选择用”弦“这个字是很不明智的,文教授显然还不理解超弦的名誉现在有多臭。其实弦网反而比较类似Loop Quantum Gravity和Penrose的Spin Networks这些被超弦界打压的理论。这些都是很有意思的研究,但也都非常、非常、非常困难,成功的希望也就非常、非常、非常地小。尤其要无中生有,同时產生广义相对论、标准模型和量子纠缠。以往高能物理界的尝试,如超弦,多是从前两者出发。文小刚却是以量子纠缠为起点,这是个有趣的点子。虽然现在他的理论还很不成熟,我认为是值得几十个或甚至几百个研究人员投入十年左右的时间,看看是否能有结果。他说的需要新的数学,我也能理解,那么数学界也应该有所投入。但是这终究是个Highly Speculative(亦即非常、非常、非常可能失败)的尝试,绝对不能像超弦那样,全高能物理界几十万人通通都只研究一个点子,结果点子失败了,学界却已经投入太多学术生涯而无法放弃。

我认为过去40年高能物理界忽视了量子力学的非局部性,是理论研究上的最大错误。毕竟从非局部性的理论导出服从局部性的结果,再怎么困难,原则上还是可能的。反之从完全局部性的理论要变出非局部性来,则根本不可能。在这点上,我和文小刚的立场是一致的。这并不代表文小刚的弦网就是正确的答案,不过至少他问的是正确的问题。
我可以理解一个学凝态理论的人,见过的宇宙比高能物理要多得多,毕竟高能物理只有一个宇宙,而不同凝态样本都可能是他们的新宇宙。所以他的点子可能比高能物理人灵活得多。然而做凝态理论的人,一般会低估没有实验引领理论时的困难。他要用弦网来解决高能物理的难关,那么即使用的是凝态理论的点子和方法,仍然必须面对研究高能物理的最大难题,也就是所需的实验远超人类能力可及(环绕月球赤道的对撞机,都还远远不足以探测这个能阶)。他必须从基本假设开始,完全只依靠逻辑,而派生出前面提过的广义相对论、标准模型和量子纠缠。我感觉他还不完全理解这有多困难,尤其量子纠缠和广义相对论有基本的逻辑矛盾(参见正文),即前者是非局部的,而后者遵从局部性原则。弦网立足于量子纠缠,所以他在文中说他无法派生出广义相对论,是我可以事先预期的。
总之,弦网是一个值得若干努力来尝试的新点子,不过不要抱太大的希望,毕竟这个问题无法做实验,而且有埋得很深的内在矛盾,所以是极为困难的。

2013-09-02

基于tornado的web server

一个基于tornado的webserver,每个请求会开启一个新的线程还异步处理。 代码见:https://github.com/aoyoo/tornado

整理一下近一年的工作

看了看为知笔记和firefox收藏夹里面乱七八糟的记录,决心把近一年半的工作内容整理一下。能写出代码的就放到github上去,注意不要有些工作的内容是不能公开的。 以此为记。

use redis with hiredis & pipeline

简单的将hiredis封装成一个c++的类,需要增删查改的数据格式:
1.key: long, value: long set

2.key: long, value: bytes

代码在https://github.com/aoyoo/redis/tree/store_for_gid_pid_pidinfo
数据简单的按key取模的方式分片,并用pipeline接口减少延迟,封装为以下接口:

同时一个简单的python脚本,用于每次dump一份redis的rdb文件作为备份。 代码在https://github.com/aoyoo/redis/tree/master

MySQL基本命令


初步学习了一些MySQL的基本命令,以及针对apple的epfimporter而做的binlog日志分析,代码放在了github(https://github.com/aoyoo/mysql)。
创建用户
GRANT ALL PRIVILEGES ON *.* TO 'epfimporter'@'localhost' IDENTIFIED BY 'epf123' WITH GRANT OPTION;
行数:
select count(*) from epf_application ;
列最大/小值
select max(application_id) from epf_application ;
select min(application_id) from epf_application ;
最大/小 N个值
select application_id from epf_application order by application_id limit 10;
select application_id from epf_application where application_id<281816692 10="" application_id="" by="" div="" limit="" order="">
清空表
TRUNCATE TABLE epf_application ;
查看表大小
select TABLE_NAME,DATA_LENGTH,INDEX_LENGTH from information_schema.TABLES;

2013-05-02

Activity传递Intent用于显示本地图片

0.创建2个Activity,一个用于启动时选择图片,另一个显示选择的图片。

                    android:name="com.example.openlocalimage2.MainActivity"
            android:label="@string/app_name" >
           
               

               
           

       

       
                    android:name="com.example.openlocalimage2.showImage"
            android:label="@string/app_name" >
           
               

                 
                  

                //如果没有这句话,这无法启动此Activity
 
           

       

1.在一个Activity中打开一个Intent,用于打开本地图片
        Button button = (Button)findViewById(R.id.b01); 
        button.setText("选择图片"); 
        button.setOnClickListener(new Button.OnClickListener(){ 
            @Override 
            public void onClick(View v) { 
                Intent intent = new Intent();
                intent.setType("image/*"); 
                intent.setAction(Intent.ACTION_GET_CONTENT);  
                startActivityForResult(intent, reqCodeOpenImage); 
            } 
        });
打开成功后,启动另一个 Activity
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == reqCodeOpenImage){
            if (resultCode == RESULT_OK) {
                Intent i = new Intent("org.aoyoo.showImage");

                Uri uri = data.getData();
                i.setData(uri);
                startActivityForResult(i, reqCodeimageview);
            }
        }

    }

2.显示图片
        Uri uri = getIntent().getData(); 
        Log.e("uri", uri.toString()); 
        ContentResolver cr = this.getContentResolver(); 
        try { 
            Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); 
            ImageView imageView = (ImageView)findViewById(R.id.iv01); 

            imageView.setImageBitmap(bitmap); 
        } catch (FileNotFoundException e) { 
            Log.e("Exception", e.getMessage(),e); 
        } 







2013-01-04

中国梦,宪政梦『南方周末新年献词』

本文是《南方周末》2013年新年献词,作者系南方周末资深评论员戴志勇先生。
  
    天地之间,时间绽放。
  这是我们在2013年的第一次相见,愿你被梦想点亮。
  2012年,你守护自己的生活,他们守护自己的工作。守护这份工作,就是在守护他们对生活的梦想。
  2012年,庙堂之上发出的宪政强音嗡然回响:“宪法的生命在于实施,宪法的权威也在于实施。”我们期待宪法长出牙齿,宪政早日落地。惟如此,才能成就这个沧桑古国的艰难转型;惟如此,国家与人民,才能重新站立于坚实的大地之上。
  今天,已是能够梦想的中国,今天,已是兑现梦想的时代。经历过宪政缺失的“文革”梦魇,我们花费三十多年的时间来逐渐回归常理与常情。从土地联产承包责任制到个体户、乡镇企业到“民企”,稍稍归还国人自主安排生活的权利,我们便创造了繁华城市,收获了满仓粮食。
  我们重新体认什么是真,什么是假,是其是,非其非;我们重燃对公义的热爱,对自由的向往。面对暴虐强力,我们双手相握,一起走过艰难时刻,迎接生活转机。
  今天,我们终于可以从厚厚的历史尘埃中挺起胸,从琐碎的日常生活中抬起头,重走先辈的宪政长征,重温先辈的伟大梦想。
  一百七十多年前,我们开始从天朝上国的迷梦中醒来。先败于英,后败于日。百姓愈加民不聊生,耻感深深刺痛中国士人。保国!保种!由洋务而君宪,由立宪而革命。从器物到制度再至文化,激愤者不惜彻底打倒“孔家店”,决绝地将自己的文明连根拔起。
  辛亥革命后,清帝退位,先辈们终于建立了亚洲第一个共和国。但是,一个自由、民主、富强的宪政中国并没有随之而来。
  国家内外,战争连连;人群内外,残酷不断。
    一度,人们远离仁,远离义,远离天道,远离对自由的坚守。
  一度,人们认错为对,指鹿为马,万千生灵生机断绝。
  美梦与山河,齐齐破碎。自由与宪政,双双消隐。
  度尽人世劫波,深味人性幽暗,我们依然是能做梦的人,有颗能做梦的心。
  今天,我们断断不只梦想物质丰盛,更希望性灵充盈;我们断断不只梦想国力能强盛,更希望国民有自尊。新民和新国,救亡与启蒙,谁也离不开谁,谁也不能压倒谁。而宪政便是这一切美梦的根基。
  兑现宪政,坚守权利,人人才能心如日月流光溢彩;鳏寡孤独才能感受冬日暖意而非瑟瑟发抖;“城管”与小贩才能谈笑风生;房屋才能成为自己与家人的城堡;
  兑现宪政,限权分权,公民们才能大声说出对公权力的批评;每个人才能依内心信仰自由生活;我们才能建成一个自由的强大国家。
  兑现宪政大梦,每个人才能做好个人的美梦。而这需要我们就从手边做起,就从守护此时此刻的生活做起,而不要将重任留给子孙。
  很多人一直深深懂得这一点,很多人早就努力践行这一点。
  不是杰出者才做梦,是善于做梦者才杰出。
  你的天赋权利就是可以梦想,并且兑现梦想!
  为你的梦想鼓掌,为这个国家的梦想加油,这就是很多新闻人的梦想,是他们不大不小的野心。他们忠于新闻,更忠于内心。愿你也有个玫瑰色的美梦;自由成就自己,完成天之所赋。
  总会梦想人人都可以做一个有尊严的人,不论身居高位,还是街头卖艺;
  总会梦想人人内心有爱,即使罪犯也未必穷凶极恶,总有恻隐之心自由闪动;
  总会梦想阶层只是引人自由流动的动力,而不再是相互猜忌和仇视的天堑;总会梦想这五千年文明生生不息,为改善人类的现代处境,捧出一掬甘冽清泉……
  兑现这一千一万个梦想,才能抚平这一百多年的刻骨痛楚。
  兜兜转转一百七十年,美梦成真何其难!一百七十年后,依然有人渴望良知萌新芽,重温天命之谓性;依然有人坚持要求权利一一落地,政治复归于正,公义自在流淌。
  依然有人相信,不管多难,梦想终会落实为宪政良制,风行为敦敦美俗。
  先辈们筚路蓝缕,践义成仁。如今,后人承继其志,燃灯前行。
  兑现梦想,自然要借鉴前贤智慧,与古人的信仰、习俗和情感和解。儒释道法墨,百家皆是源泉;周汉唐宋明,代代皆有可取。
  但这决不是要复古,古人不能给予今天所需的一切。只是不再轻易贬损先辈,平心静气地吸收转进,以让中华文明开新花,结新果。
  兑现梦想,自然要吸取世界经验。所以要认真审视希腊民主,罗马法治,借鉴英美宪政,追赶现代科技文明。
但这也不是仅仅作一个西方文明的优等生,西人有西人演进的轨迹,同样未必能直接给予我们今天所需的一切。
  我们要站在自己的大地上,与各国人民一起,生活出一种古今相融的新生活,文明出一种中西合璧的新文明。在古今中西的激荡中,要遵循人类共通的价值,也要不惮于做自己的新梦。
  称美古人,赞扬邻居,不是因为他们足够完美,而是因为我们熟悉他们眼中洋溢的快乐,心底流淌的自由。
  中国人本应就是自由人。中国梦本应就是宪政梦。
  宪政之下,才能国家持续强盛,宪政之下,才有人民真正强大。兑现宪政梦想,才能更好地外争国权,维护国家的自由;才能更好地内争民权,维护人民的自由。而国家的自由最终必得落脚于人民的自由,必得落脚于人人可以我口说我心,人人可以用心做美梦。
  生而为人,谁能不热爱自由?这自由,不仅是权利针对权力而言,也是宽恕针对报复而言,是般若针对无明而言,是仁爱针对暴虐而言,是有道针对无道而言。
  大道之行,天下为公;万物自在,各正性命。这就是古人的梦想,先辈的梦想,也是今天很多人的梦想。
  中国梦,自由梦,宪政梦。
  万物速朽,但梦想永在。万物诞生,因梦想不灭。梦想就是生生之几,就是当你失败了一百次,那第一百零一次充实你内心的不死之希望。
  依然有人倾听你的梦想,期待你敢于做梦。你从苦难中爬起,他们为你加油;你尝尽人世冷暖,他们为你加油;你收获美好生活,他们为你加油……他们别无所资,惟有对梦想的执着;他们别无所长,惟有对真相的追求。
  一句真话能比整个世界还重,一个梦想能让生命迸射光芒!

2012-02-23

彻底搞定C指针-函数名与函数指针(值得一看)

http://blog.pfan.cn/whyhappy/6030.html
函数名与函数指针
一 通常的函数调用
一个通常的函数调用的例子:
//自行包含头文件
void MyFun(int x); //此处的申明也可写成:void MyFun( int );
int main(int argc, char* argv[])
{
MyFun(10); //这里是调用MyFun(10);函数
return 0;
}
void MyFun(int x) //这里定义一个MyFun函数
{
printf(“%d\n”,x);
}
这个MyFun函数是一个无返回值的函数,它并不完成什么事情。这种调用函数的格式你应该是很熟悉的吧!看主函数中调用MyFun函数的书写格式:
MyFun(10);
我们一开始只是从功能上或者说从数学意义上理解MyFun这个函数,知道MyFun函数名代表的是一个功能(或是说一段代码)。
直到——
学习到函数指针概念时。我才不得不在思考:函数名到底又是什么东西呢?
(不要以为这是没有什么意义的事噢!呵呵,继续往下看你就知道了。)
二 函数指针变量的申明
就象某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也以存储在某个函数指针变量里的。这样,我就可以通过这个函数指针变量来调用所指向的函数了。
在C系列语言中,任何一个变量,总是要先申明,之后才能使用的。那么,函数指针变量也应该要先申明吧?那又是如何来申明呢?以上面的例子为例,我来申明一个可以指向MyFun函数的函数指针变量FunP。下面就是申明FunP变量的方法:
void (*FunP)(int) ; //也可写成void (*FunP)(int x);
你看,整个函数指针变量的申明格式如同函数MyFun的申明处一样,只不过——我们把MyFun改成(*FunP)而已,这样就有了一个能指向MyFun函数的指针FunP了。(当然,这个FunP指针变量也可以指向所有其它具有相同参数及返回值的函数了。)
三 通过函数指针变量调用函数
有了FunP指针变量后,我们就可以对它赋值指向MyFun,然后通过FunP来调用MyFun函数了。看我如何通过FunP指针变量来调用MyFun函数的:
//自行包含头文件
void MyFun(int x); //这个申明也可写成:void MyFun( int );
void (*FunP)(int ); //也可申明成void(*FunP)(int x),但习惯上一般不这样。
int main(int argc, char* argv[])
{
MyFun(10); //这是直接调用MyFun函数
FunP=&MyFun; //将MyFun函数的地址赋给FunP变量
(*FunP)(20); //这是通过函数指针变量FunP来调用MyFun函数的。
}
void MyFun(int x) //这里定义一个MyFun函数
{
printf(“%d\n”,x);
}
请看黑体字部分的代码及注释。
运行看看。嗯,不错,程序运行得很好。
哦,我的感觉是:MyFun与FunP的类型关系类似于int 与int *的关系。函数MyFun好像是一个如int的变量(或常量),而FunP则像一个如int *一样的指针变量。
int i,*pi;
pi=&i; //与FunP=&MyFun比较。
(你的感觉呢?)
呵呵,其实不然——
四 调用函数的其它书写格式
函数指针也可如下使用,来完成同样的事情:
//自行包含头文件
void MyFun(int x);
void (*FunP)(int ); //申明一个用以指向同样参数,返回值函数的指针变量。
int main(int argc, char* argv[])
{
MyFun(10); //这里是调用MyFun(10);函数
FunP=MyFun; //将MyFun函数的地址赋给FunP变量
FunP(20); //这是通过函数指针变量来调用MyFun函数的。
return 0;
}
void MyFun(int x) //这里定义一个MyFun函数
{
printf(“%d\n”,x);
}
我改了黑体字部分(请自行与之前的代码比较一下)。
运行试试,啊!一样地成功。
咦?
FunP=MyFun;
可以这样将MyFun值同赋值给FunP,难道MyFun与FunP是同一数据类型(即如同的int 与int的关系),而不是如同int 与int*的关系了?(有没有一点点的糊涂了?)
看来与之前的代码有点矛盾了,是吧!所以我说嘛!
请容许我暂不给你解释,继续看以下几种情况(这些可都是可以正确运行的代码哟!):
代码之三:
int main(int argc, char* argv[])
{
MyFun(10); //这里是调用MyFun(10);函数
FunP=&MyFun; //将MyFun函数的地址赋给FunP变量
FunP(20); //这是通过函数指针变量来调用MyFun函数的。
return 0;
}
代码之四:
int main(int argc, char* argv[])
{
MyFun(10); //这里是调用MyFun(10);函数
FunP=MyFun; //将MyFun函数的地址赋给FunP变量
(*FunP)(20); //这是通过函数指针变量来调用MyFun函数的。
return 0;
}
真的是可以这样的噢!
(哇!真是要晕倒了!)
还有呐!看——
int main(int argc, char* argv[])
{
(*MyFun)(10); //看,函数名MyFun也可以有这样的调用格式
return 0;
}
你也许第一次见到吧:函数名调用也可以是这样写的啊!(只不过我们平常没有这样书写罢了。)
那么,这些又说明了什么呢?
呵呵!假使我是“福尔摩斯”,依据以往的知识和经验来推理本篇的“新发现”,必定会由此分析并推断出以下的结论:
1. 其实,MyFun的函数名与FunP函数指针都是一样的,即都是函数指针。MyFun函数名是一个函数指针常量,而FunP是一个函数数指针变量,这是它们的关系。
2. 但函数名调用如果都得如(*MyFun)(10);这样,那书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许MyFun(10);这种形式地调用(这样方便多了并与数学中的函数形式一样,不是吗?)。
3. 为统一起见,FunP函数指针变量也可以FunP(10)的形式来调用。
4. 赋值时,即可FunP=&MyFun形式,也可FunP=MyFun。
上述代码的写法,随便你爱怎么着!
请这样理解吧!这可是有助于你对函数指针的应用喽!
最后——
补充说明一点:在函数的申明处:
void MyFun(int ); //不能写成void (*MyFun)(int )。
void (*FunP)(int ); //不能写成void FunP(int )。
(请看注释)这一点是要注意的。
五 定义某一函数的指针类型:
就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来申明函数指针变量。
我先给你一个自定义数据类型的例子。
typedef int* PINT; //为int* 类型定义了一个PINT的别名
int main()
{
int x;
PINT px=&x; //与int * px=&x;是等价的。PINT类型其实就是int * 类型
*px=10; //px就是int*类型的变量
return 0;
}
根据注释,应该不难看懂吧!(虽然你可能很少这样定义使用,但以后学习Win32编程时会经常见到的。)
下面我们来看一下函数指针类型的定义及使用:(请与上对照!)
//自行包含头文件
void MyFun(int x); //此处的申明也可写成:void MyFun( int );
typedef void (*FunType)(int ); //这样只是定义一个函数指针类型
FunType FunP; //然后用FunType类型来申明全局FunP变量
int main(int argc, char* argv[])
{
//FunType FunP; //函数指针变量当然也是可以是局部的 ,那就请在这里申明了。
MyFun(10);
FunP=&MyFun;
(*FunP)(20);
return 0;
}
void MyFun(int x)
{
printf(“%d\n”,x);
}
看黑体部分:
首先,在void (*FunType)(int ); 前加了一个typedef 。这样只是定义一个名为FunType函数指针类型,而不是一个FunType变量。
然后,FunType FunP; 这句就如PINT px;一样地申明一个FunP变量。
其它相同。整个程序完成了相同的事。
这样做法的好处是:
有了FunType类型后,我们就可以同样地、很方便地用FunType类型来申明多个同类型的函数指针变量了。如下:
FunType FunP2;
FunType FunP3;
//……
六 函数指针作为某个函数的参数
既然函数指针变量是一个变量,当然也可以作为某个函数的参数来使用的。所以,你还应知道函数指针是如何作为某个函数的参数来传递使用的。
给你一个实例:
要求:我要设计一个CallMyFun函数,这个函数可以通过参数中的函数指针值不同来分别调用MyFun1、MyFun2、MyFun3这三个函数(注:这三个函数的定义格式应相同)。
实现:代码如下:
//自行包含头文件
void MyFun1(int x);
void MyFun2(int x);
void MyFun3(int x);
typedef void (*FunType)(int ); //②. 定义一个函数指针类型FunType,与①函数类型一至
void CallMyFun(FunType fp,int x);
int main(int argc, char* argv[])
{
CallMyFun(MyFun1,10); //⑤. 通过CallMyFun函数分别调用三个不同的函数
CallMyFun(MyFun2,20);
CallMyFun(MyFun3,30);
}
void CallMyFun(FunType fp,int x) //③. 参数fp的类型是FunType。
{
fp(x);//④. 通过fp的指针执行传递进来的函数,注意fp所指的函数是有一个参数的
}
void MyFun1(int x) // ①. 这是个有一个参数的函数,以下两个函数也相同
{
printf(“函数MyFun1中输出:%d\n”,x);
}
void MyFun2(int x)
{
printf(“函数MyFun2中输出:%d\n”,x);
}
void MyFun3(int x)
{
printf(“函数MyFun3中输出:%d\n”,x);
}
输出结果:略
分析:(看我写的注释。你可按我注释的①②③④⑤顺序自行分析。)

Archlinux下udev网卡

本人的电脑有双网卡,联了不同得网段,默认的eth0是192.168.1.x,eth1是192.168.2.x,均是在/etc/rc.conf中指定得静态ip
在某次升级后,重启后不能上网,得多重启几次才可以,后来发现是eth和eth1有时候会互换….
archlinux有问题就果断去wiki啊,果然发现了是udev的问题,手动指定下应该没问题
创建文件/etc/udev/rules.d/10-network.rules然后将不同的网卡通过MAC地址绑定到不同的名字上:
SUBSYSTEM==”net”, SYSFS{address}==”aa:bb:cc:dd:ee:ff”, NAME=”lan0″
SUBSYSTEM==”net”, SYSFS{address}==”ff:ee:dd:cc:bb:aa”, NAME=”wlan0″
同时,您需要注意以下内容:
您可以通过下面的命令获得网卡的MAC地址:: udevinfo -a -p /sys/class/net/<你的网卡>
注意在udev规则文件中使用小写的16进制MAC地址,因为udev无法识别大写的MAC地址。
一些用户在使用旧的命名方式时出现问题,例如: eth0, eth1, 等等. 如果出现这个问题,试试使用 “lan”或者”wlan”之类的名字.
注意不要忘记修改您的/dec/rc.conf和其它使用ethX命名的配置文件。
按照wiki来一遍,果然可以鸟~~~

刘未鹏的书单

转自怎样花两年时间去面试一个人
列一下我所认为的,你面试微软前必须要读的十本书:
Code: The Hidden Language of Computer Hardware and Software (《编码的奥秘》)
Computer System: A Programmer’s Perspective (《深入理解计算机系统》) / Windows via C/C++ (《Windows核心编程》 / 《程序员的自我修养》
Code Complete 2(《代码大全》)/ The Pragmatic Programmer (《程序员修炼之道》,我也把这本书称为《代码小全》)
Programming Pearls (《编程珠玑》) / Algorithms / Algorithm Design / 《编程之美》
The C Programming Language
The C++ Programming Language / Programming: Principles and Practice Using C++ / Accelerated C++
The Structure and Interpretation of Computer Programs (《计算机程序的构造和解释》)
Clean Code / Implementation Patterns
Design Patterns (《设计模式》) / Agile Software Development, Principles, Patterns, and Practices
Refactoring (《重构》)
(注:1. 以上同一条目下用“/”隔开的表示任选,当然你也可以都读了,相信我,时间是足够的。2. 读这些书并不意味着逐字逐句从第一页读到最后一页——当然你也可以这么做。怎么是聪明高效的读法,可以参考我之前写的关于如何阅读和查找/鉴别书籍/资料的博文)
注意:以上是我个人认为你面试微软开发职位前必须要读的10本书,它不代表我的雇主的观点。它也只是一个初步的书单,肯定会受到我个人经验和眼界的限制。欢迎大家提意见。
此外,IT不同子领域的必读书单可能千差万别,所以在发布之前我把这篇文章发给了一些朋友,他们给出了自己的书单(你是不是能看到一些有趣的共同点呢):
云风(中国游戏编程先行者,前网易游戏部门资深程序员,简悦创始人):
如果面试,我会挑以下的我自己读过的书,让人选择他也读过的部分,再了解他对这些书的理解。这些书其实本质上就是两类,对所面对的东西(程序语言也好,操作系统也好,底层设施也好)本身的理解程度。以及另一类:对设计思想和原则的理解:
C++编程思想
Effective C++
深度探索C++对象模型
C++语言的设计和演化
C专家编程
C陷阱与缺陷
C语言接口与实现
Lua程序设计
Linkers and Loaders
COM本质论
Windows核心编程
深入解析Windows操作系统
程序员修炼之道
代码大全
UNIX编程艺术
设计模式
代码优化:有效使用内存
深入理解计算机系统
深入理解LINUX内核
TCP/IP 详解
冯大辉(丁香园CTO,贝塔咖啡创始人):
软件随想录
黑客与画家
重来
UNIX编程艺术
编程人生
洪强宁(豆瓣技术总监):
StackOverflow上有一个程序员必读书单帖子,这里仅列出top10,更多参考这里。
Code Complete 2
The Mythical Man-Month (《人月神话》)
Code: The Hidden Language of Computer Hardware and Software (《编码的奥秘》)
TAOCP (不解释)
The Pragmatic Programmer (《程序员修炼之道》)
Design Patterns (《设计模式》)
The Structure and Interpretation of Computer Programs (《计算机程序的构造和解释》)
Refactoring (《重构》)
The C Programming Language
Introduction to Algorithms (《算法导论》)
郑昀(窝窝团研发副总裁):
工程师入门:
Code Complete 2
程序员修炼之道
深入理解计算机系统
工程师升级:
设计模式
重构——改善既有代码的设计
工程师转型:
快速软件开发——有效控制与完成进度计划
人月神话
IT项目管理那些事儿
软件随想录
最后期限
走出软件作坊
你的灯亮着吗?——发现问题的真正所在
张峥(微软亚洲研究院副院长):
Algorithms (by Sanjoy Dasgupta, Christos Papadimitriou and Umesh Vazirani)
Data Structure and Algorithms
The C Programming Language
The Design of the UNIX Operating System
Compilers (龙书)
Computer Architecture: A Quantitative Approach
Flow
Outliers (why hard work and luck are both important)
邹欣(MSRA创新工程中心首席研发经理):
关于创新的书籍(http://book.douban.com/doulist/1253169/):
The Myths of Innovation
The Innovator’s Dilemma
The Innovator’s Solution
Crossing the Chasm
Inside Intuit
盛田昭夫
杰克·韦尔奇自传
梦断代码
Innovation
浪潮之巅

2011-04-11

aoyoo.org

处于众所周知的原因,blogger常年悲剧,近来Gmail/GAE等也惨遭毒手。。。
入手虚拟空间一枚aoyoo.org,无聊的时候自己搞着玩,省得被墙烦心

2011-01-17

手动修改ramdisk.gz

由于工作需要,对一个编译好的ramdisk.gz尽心修改, 查了一下, 原来是一个打包过的镜像而已.


ramdisk.gz在~/xxx

解压

#cd ~/xxx
#gunzip ramdisk.gz

在解压后, 得到文件系统镜象文件ramdisk, 原来的ramdisk.gz会消失(不知道为什么...)

#mkdir loop
#mount –o loop ramdisk loop //挂载镜像到loop目录
#cd loop

这里可以看到, 就是ramdisk.gz成功加载后的目录, 可以修改了, 我在这里添加了一些程序

#cd ..
#umount loop

#gzip –v9 ramdisk //生成新的ramdisk.gz压缩文件

2010-12-14

fedora13下安装KScope

    KScope ,一款源代码阅读、浏览工具,它也为你提供源代码的编辑环境.该工具尤其适合于使用 C 语言编写的大型项目.KScope 使用 Cscope 作为源代码的分析引擎,可以为编码人员提供一些有价值的信息.堪比Windows下的source insight.

     我用的是fedora13系统,用#yum install kscope后,从菜单启动的KScope只有一个标题栏,别的什么都没有......查看了以下,是1.9.2版本,估计是KDE和QT环境不兼容导致(我没有安装fedora的KDE)
    从kscope网站下载了kscope的版本为1.6.2的源代码(这个版本似乎用的人最多)

    解压后,进入kscope目录:

    [kscope-1.6.2]$./configure

       这个时候,会提示缺少kde-config,yum不了这个玩意, 上网搜也没发现这个软件包...不过,看名字应该是kde环境里面用于配置的,于是打开"添加/删除软件"(不得不说,这玩意没有ubuntu的新力得好用),查找kdelib,勾选上KDE 3 Libraries和对应的devel包,安装,再回去./configure,ok
     开始make,又出问题了,提示./src目录下缺少-lkateinterfaces,不知道这是什么,Google一下,按照这篇blog里面说的

       接下来,进行make:

        [ /home/lanch/Download/kscope-1.6.2]$make

        这个时候,会提示找不到 -lkateinterfaces 不用担心,该参数是要找动态链接

库,其实没有动态链接库,只有静态链接库,该库位于

         /usr/lib/libkatepartinterfaces.la

        这个时候,切换到src目录下:

        [ /home/lanch/Download/kscope-1.6.2]$cd src

        [ /home/lanch/Download/kscope-1.6.2/src]$grep -n -lkateinterfaces Makefile

        将Makefile文件中使用-lkateinterfaces 的地方,替换为/usr/lib/libkatepartinterfaces.la,接着,退回到上层目录cd .. ,进行make,就会大功告成。
       
    按照这样可以就可以了,不过替换是没有用原文里面的grep(不知道那行命令是干什么的),我gedit打开Makefile然后替换了.
    然后#make install  OK, 安装成功

2010-11-09

ubuntu下使用tex编辑中文简易方法

ubuntu下最简单的使用tex编辑中文应该是使用texlive+xelatex了

1.下载texlive
我是在学校的镜像下载的最新的texlive2010,比较大,有2G
将下载的镜像挂载到~/iso目录
不下载的话,也可以使用apt-get来安装,应该效果一样

2.根据~/iso/texlive-doc/texlive-zh-cn.pdf 安装
记得选中create symlinks in standard directories
省的自己设置环境变量

3.只要你的ubuntu支持中文,现在已经可以使用xelatex来编辑中文了
来个网上找来的例子,用gedit/vim等把下面的文本写进s.tex:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{WenQuanYi Zen Hei Mono} %关键在于这里的字体设置,下面会说到

\begin{document}
Cowards die many times before their deaths.\\

懦夫在未死之前,已身历多次死亡的恐怖了。
\end{document}

4.ubuntu下
$fc-list
可以查看机器中的字体
找出中文字体,我ubuntu10.04有

文泉驿微米黑,文泉驛微米黑,WenQuanYi Micro Hei:style=Regular
文泉驿正黑,文泉驛正黑,WenQuanYi Zen Hei:style=中等,Medium
文泉驿等宽正黑,文泉驛等寬正黑,WenQuanYi Zen Hei Mono:style=中等,Medium
文泉驿等宽微米黑,文泉驛等寬微米黑,WenQuanYi Micro Hei Mono:style=Regular

将中文字体写到 \setmainfont{//这里} 就可以了

5. $ xelatex s.tex
目录下会自动生成pdf,可以显示中文

2010-11-01

SYGATE的端口映射

做了个Sygate的端口映射,这样在宿舍也能访问我在实验室的电脑了

打开服务器的Sygate,"高级"--"访问规则"--"增加"--"增加一条新规则"--"确定"
先做一个TCP的映射,用于http的访问
1.选择"IN"
2.选择"TCP"
3.填自己电脑内网地址192.168.1.101
4.默认端口80
5.保存

在相同的办法添加一个SSH的映射规则,端口为22,其他与http完全一样

OK,Sygate的映射完成,重启一下Sygate即可

2010-10-25

wallproxy果然不错

wallproxy

基于GAppProxy,但更强大,可以无障碍访问youtube.com twitter.com blogger.com

简易使用指南:基于搭建自己的GAE服务器

1.下载wallproxy
2.解压缩,修改gae_server/app.yaml中的your-gae-id为自己的GAE ID(GAE申请方法Google一下很多),上传gae_server文件夹
3.启动WallProxy软件包中local文件夹中WallProxy.exe,点击"设置",在弹出对话框中.修改GAE_PROXY的URL中的your-gae-id为自己的GAE ID
4.修改浏览器代理为 127.0.0.1:8086 设置全部完成~go go go
5.更多使用方法见wallproxy主页 http://code.google.com/p/wallproxy/

PS:firefox建议配合使用FoxyProxy更加强大

2010-06-19

胡言乱语

现在很多人,以年轻人居多,他们渴望别人和社会对他们的认同,这很正常.但是他们对于与他们意见向左的人持严厉的批判的态度,整天"不如何如何的人,就是如何如何"等,反过来想,既然他们否定一切他们不同意的想法,又如何让别人同意或容忍他们的一切所作所为呢?已所不欲,勿施于人,海纳百川,有容乃大....

2010-04-26

写程序之飞鸽传书

准备在linux下写个类似飞鸽传输的文件,基于tcp.
    服务器流程:
    socket();bind();listen();accept();send();close();
    客户端流程:
    socket();connect();recv();close();
0.1版:
    1.服务器发送字符串,运行后将自身挂起,等待连接;
    2.客户端被动连接,接收字符串后输出;
    3.接受后客户端退出,服务器端继续挂起;
0.2版(预计):
    服务器端发送指定文件;客户端接收

tips: exit(1)表示发生错误后退出程序,exit(0)表示正常退出.这个0和1应该是返回给操作系统了.

2010-04-25

腾讯微博

在万能的twitter上找到了疼讯腾讯微博的邀请:

t.qq.com/aoyoopo

为什么不能支持5个字符的ID呢,真是
不过现在还没有邀请,有了,就送给万能的twitter

2010-04-22

test from Gmail

test from Gmail,
test from Gmail,

!
test from Gmail!