我对blogspot目前的状况深表惊诧:它时而被封,时而解封,而且无规律可循,呈现出一种混沌的运动状态。如果就blogspot的状态随时间的演化的动力学行为写一篇paper,估计能开辟出nolinear physics的一片新天地……不扯了,我一直很奇怪:为什么我能在www2.blogger.com上写blog,可就是看不到呢?很郁闷。今天,众blogspots又被允许出来放放风,晒晒太阳,但我的yacheng-meng.blogspot.com(就是你现在看到的这个)好像永久性的消失了,打开这个地址,只能看到一个Google Logo,下面跟一句“无法访问您所搜索的信息,请返回 google.cn 查询其它信息”,很不厚道的话。我没办法,只好再申请了一个blogspot,地址是iqhe.blogspot.com。现在上面什么都没有,最近比较忙,实在没心情来弄这个。我还打算申请一个国内的,blogbus之类的。古人有分教:狡兔三窟。3是一个临界值。我决定以后如果要写,就三箭齐发。
最近谷歌的日子很不好过。我觉得谷歌现在越来越不行了。搜索直接转到google.cn,搜索质量也有所下降(我的感觉)。搞了两年的本地化,结果惨不忍睹。前不久看到一篇文章,分析为什么谷歌不行,原因在于策略摇摆不定,对市场定位到底在高端用户(我自认为是高端用户,低端的搜索都交给baidu之类的本土公司)还是低端犹豫不决。最近谷歌的动作表明它想抢占低端市场,但显然,这帮人对中国的生存之道了解得很不够……建议买厚黑学看。不管怎么样,谷歌算是把Google "Don't be evil"的理念破坏光了。还是苹果牛,看看乔布斯怎么说的:“苹果是一家加利福尼亚公司”。
星期一, 四月 16, 2007
星期三, 三月 21, 2007
又被封了?
奇怪的事情……今天发现blogspot又上不了了,但是可以写blog(www2.blogger.com访问正常)!最坏的可能当然是GFW发作把blogspot封上了,当然最好不要发生这种事。
星期日, 三月 18, 2007
星期一, 三月 05, 2007
Language by Keyboard
reddit.com上的一个帖子。从键盘看所使用的编程语言。
C程序员:键盘上的'*'基本上废掉了(如果真是这样,说明对指针已经到了走火入魔的地步了。这样写C程序和汇编相去不远矣。我个人没有这么牛,最多只是把printf写到近乎条件反射了)
C++程序员:键盘上的'<'和'>'已经作废(这哥们估计是Template Meta Programming的高手,一天不用template浑身不爽。也属于走火入魔)
Lisp程序员:当然是'('和')'了。
Python程序员:Tab键。谁叫Python规定了嵌套结构一定要用缩进表示呢?
Perl程序员:所有的标点符号键都报销了。而字母和数字键干净整洁,和新的一样(众所周知,Perl将键盘上那些非字母数字键发挥到了极致。我个人不欣赏这种语言设计)
APL程序员:他们有一个专门的APL键盘(现在还有人用这种恐龙级的语言?听说过这门语言的人估计都寥寥无几。为什么说他们需要一个专门的键盘?因为APL用到很多匪夷所思,根本不应该在Programming Langugae里面出现的字符,程序极其短小精悍,但外观如甲骨文,如蝌蚪文,如涂鸦,……总之令人发指就是了。属于一种彻底破坏当今IT行业对程序语言一切想象的语言。举几个例子:
找从1到N的素数:
(∼N∈N∘.×N)/N←1↓⍳N
什么意思?我没有兴趣知道。对于这样充满了火星字符的程序能够成功的用html表示出来已经让我吃惊不小。
Conway的life game:(没法用字符了。上图片)

有兴趣的同志自己上wekipedia参观。
Newbie程序员:他们的F1键坏掉了(不知道这哥们是用的什么IDE?)
Windows程序员:他们的'Ctrl','Alt'和'Delete'键早按坏了。看来这帮hacker对Microsoft真是一点也不客气啊。
还有几条我没完全明白:
文档编辑(使用Word):'e','Ctrl'和'Alt'键都不行了。谁能解释一下?
经验丰富的文档编辑(还是Word):这回是'Ctrl'和's'。还是不懂。
这个表还在不停的增长。More Language By Keyboard
C程序员:键盘上的'*'基本上废掉了(如果真是这样,说明对指针已经到了走火入魔的地步了。这样写C程序和汇编相去不远矣。我个人没有这么牛,最多只是把printf写到近乎条件反射了)
C++程序员:键盘上的'<'和'>'已经作废(这哥们估计是Template Meta Programming的高手,一天不用template浑身不爽。也属于走火入魔)
Lisp程序员:当然是'('和')'了。
Python程序员:Tab键。谁叫Python规定了嵌套结构一定要用缩进表示呢?
Perl程序员:所有的标点符号键都报销了。而字母和数字键干净整洁,和新的一样(众所周知,Perl将键盘上那些非字母数字键发挥到了极致。我个人不欣赏这种语言设计)
APL程序员:他们有一个专门的APL键盘(现在还有人用这种恐龙级的语言?听说过这门语言的人估计都寥寥无几。为什么说他们需要一个专门的键盘?因为APL用到很多匪夷所思,根本不应该在Programming Langugae里面出现的字符,程序极其短小精悍,但外观如甲骨文,如蝌蚪文,如涂鸦,……总之令人发指就是了。属于一种彻底破坏当今IT行业对程序语言一切想象的语言。举几个例子:
找从1到N的素数:
(∼N∈N∘.×N)/N←1↓⍳N
什么意思?我没有兴趣知道。对于这样充满了火星字符的程序能够成功的用html表示出来已经让我吃惊不小。
Conway的life game:(没法用字符了。上图片)

有兴趣的同志自己上wekipedia参观。
Newbie程序员:他们的F1键坏掉了(不知道这哥们是用的什么IDE?)
Windows程序员:他们的'Ctrl','Alt'和'Delete'键早按坏了。看来这帮hacker对Microsoft真是一点也不客气啊。
还有几条我没完全明白:
文档编辑(使用Word):'e','Ctrl'和'Alt'键都不行了。谁能解释一下?
经验丰富的文档编辑(还是Word):这回是'Ctrl'和's'。还是不懂。
这个表还在不停的增长。More Language By Keyboard
星期六, 三月 03, 2007
Copy Semantics in Python
昨天晚上被Python给整得……还是自己概念不清。我想实现一个二维数组,最直接的办法就是用list,其中每个元素又是一个list。所以我就这么写了:
array2d = [[]]*n ## n is the dimension of the 2-d array
然后要往里添加元素。像这样:
array2d[0].append(1)
我很自信的认为结果肯定会得到[[1],[],...,[]]。所以根本就没去检查。整个算法跑出来得到一堆诡异的结果,然后就开始了艰苦的bug hunting。找了半天,问题集中在前面那条append语句。print出来一看,结果居然是[[1],[1],...,[1]]!看到这个输出我愣了半天,我觉得我的世界观人生观都被打碎了。问题当然出在Python的copy by reference的语义上。在通过'*'运算符复制时,复制的只是“引用”,复制出来的所有东西其实都是同一个。我当时还没把问题想明白,复制不行,咱们就累一点,一个一个添加进去!
这个做法是正确的,用id()检查array2d的每一个元素发现它们各不相同。然后我又犯傻了,想把它写成一个函数:
最后来总结经验:Python中的复制(这里的复制其实包括了赋值、参数传递、‘*’运算符(仅对sequence type有效)等等)是by reference的。如果复制的对象是immutable的,比如int,string,那么by reference和by value其实没有区别。但如果对象是mutable的,比如list,dictionary,那么复制就相当于C中的复制指针,这个时候要提起注意。那么为什么前面写array2d.append([])的时候不会出问题呢?表达式'[]'会导致一个新的list对象被构造出来,虽然大家都是[],但各不相同。它们是“值”相等,但“引用”不相等。这也是因为list是可变对象。其实copy by reference的语义pythonist估计都知道,但到实际编码的时候还是免不了要犯一点错。
再想想,如果真的要copy一个list,得到一个副本呢?Python给我们提供了copy模块专门来做这件事。copy提供了两个基本的函数,一个是copy,一个是deep_copy。copy.copy(obj)函数提供了Shallow Copy语义,copy.deep_copy(obj)顾名思义是Deep Copy。两者的区别相信学过C++中Copy Constructor的同志都很明白。一般情况下,用copy.copy(obj)就可以了(所以它的名字就叫copy,没有弄成shallow_copy()这样的怪胎)。这个办法我想应该比较普适。当然,对于list,我们有专门的惯用法(即切片操作[:])复制。又如字典(dict)对象,也有相应的copy方法,一般情况下不需要动用到copy模块。
Python中Copy模块的文档
终于,找到了在blogger中显示代码缩进的办法:输入全角空格。这样就不会被自作聪明的blogger把空格都去掉了。缺点是:如果有人想把代码拷贝到文本编辑器中,就会出现一堆非法字符(我相信没有哪种语言的编译器/解释器会把全角空格当作空格的)。然后就会扔出a mass of error message。所以这也只是权宜之计。或许修改css能够解决这个问题?
Update:和Python无关,终于找到了代码缩进问题的解决办法,很简单,把所见即所得编辑器关掉,直接写html,把代码放在pre标签中。
array2d = [[]]*n ## n is the dimension of the 2-d array
然后要往里添加元素。像这样:
array2d[0].append(1)
我很自信的认为结果肯定会得到[[1],[],...,[]]。所以根本就没去检查。整个算法跑出来得到一堆诡异的结果,然后就开始了艰苦的bug hunting。找了半天,问题集中在前面那条append语句。print出来一看,结果居然是[[1],[1],...,[1]]!看到这个输出我愣了半天,我觉得我的世界观人生观都被打碎了。问题当然出在Python的copy by reference的语义上。在通过'*'运算符复制时,复制的只是“引用”,复制出来的所有东西其实都是同一个。我当时还没把问题想明白,复制不行,咱们就累一点,一个一个添加进去!
array2d = []
for i in range(n):
array2d.append([])
这个做法是正确的,用id()检查array2d的每一个元素发现它们各不相同。然后我又犯傻了,想把它写成一个函数:
结果又回到了老路上,再一次出错。
def new_array2d(n,obj):
ret = []
for i in range(n):
ret.append(obj)
return ret
最后来总结经验:Python中的复制(这里的复制其实包括了赋值、参数传递、‘*’运算符(仅对sequence type有效)等等)是by reference的。如果复制的对象是immutable的,比如int,string,那么by reference和by value其实没有区别。但如果对象是mutable的,比如list,dictionary,那么复制就相当于C中的复制指针,这个时候要提起注意。那么为什么前面写array2d.append([])的时候不会出问题呢?表达式'[]'会导致一个新的list对象被构造出来,虽然大家都是[],但各不相同。它们是“值”相等,但“引用”不相等。这也是因为list是可变对象。其实copy by reference的语义pythonist估计都知道,但到实际编码的时候还是免不了要犯一点错。
再想想,如果真的要copy一个list,得到一个副本呢?Python给我们提供了copy模块专门来做这件事。copy提供了两个基本的函数,一个是copy,一个是deep_copy。copy.copy(obj)函数提供了Shallow Copy语义,copy.deep_copy(obj)顾名思义是Deep Copy。两者的区别相信学过C++中Copy Constructor的同志都很明白。一般情况下,用copy.copy(obj)就可以了(所以它的名字就叫copy,没有弄成shallow_copy()这样的怪胎)。这个办法我想应该比较普适。当然,对于list,我们有专门的惯用法(即切片操作[:])复制。又如字典(dict)对象,也有相应的copy方法,一般情况下不需要动用到copy模块。
Python中Copy模块的文档
终于,找到了在blogger中显示代码缩进的办法:输入全角空格。这样就不会被自作聪明的blogger把空格都去掉了。缺点是:如果有人想把代码拷贝到文本编辑器中,就会出现一堆非法字符(我相信没有哪种语言的编译器/解释器会把全角空格当作空格的)。然后就会扔出a mass of error message。所以这也只是权宜之计。或许修改css能够解决这个问题?
Update:和Python无关,终于找到了代码缩进问题的解决办法,很简单,把所见即所得编辑器关掉,直接写html,把代码放在pre标签中。
星期五, 三月 02, 2007
May God Bless GFW
我已经没有兴致再去骂GFW。我们已经习惯生活在各种限制中。在GFW出现以前,Freedom这个东西曾经存在在Internet上,现在没有了。对我个人而言,GFW让我最不爽的是它封锁了Wikipedia,我不得不用answers.com这样的曲折方式来访问。此外它还禁掉了我认为是宇宙中最好的blog服务:Wordpress.com。当然blogger也很不错。注意这几年blogspot一直都被封上,到去年下半年才解封。Wordpress现在又提供了对LaTeX的支持。这更增加了我对Wordpress的无限向往。我现在想在blog上写个数学公式都必须通过tex2png之类的玩意做成png图片然后上传,如果想修改就得一切重来,麻烦到极点。如果blogger也能支持LaTeX,我真的想要出去喝两盅庆祝一下。最关键的是:你不知道明天起来还能不能访问blogger。既然这种事情已经发生了无数次,完全有可能再来一次。
昨晚上看到阅微堂上的一篇文章,总结了目前能够绕开GFW的各种方法。其实大家的原理都是一样的,就是通过匿名代理。代理这个东西有时效性,像衣服一样隔两天要换一换,不然被GFW察觉了就没用了。在这里把文章的内容转述一下。
Anonymous Web Proxy Server
比如http://p.free.com.do/,http://grab.cc/等。通过这些匿名代理网站,访问Wikipedia,Wordpress.com基本上没有问题。但是它们不能避开GFW的关键字过滤。如果有自己的主机空间,则可以安装一个phproxy。
Anonymous Proxy Software
例如大名鼎鼎的Tor。现在Tor似乎已经不行了,可能是GFW已经找到了应对的办法。所以低调一点。另外一个好用的GFW Killer是free door。由于free door出身很有问题(是某个非法协会开发的),想找个下载不太容易。我也不给链接。前面阅微堂上有下载。
总而言之,广大网友和GFW的斗争才刚刚开始。所谓道高一尺,魔高一丈,群众的眼睛是雪亮的,群众的力量是无穷的。GFW总有倒掉的一天。到那时再来效颦鲁迅,写一篇《论GFW的倒掉》。
昨晚上看到阅微堂上的一篇文章,总结了目前能够绕开GFW的各种方法。其实大家的原理都是一样的,就是通过匿名代理。代理这个东西有时效性,像衣服一样隔两天要换一换,不然被GFW察觉了就没用了。在这里把文章的内容转述一下。
Anonymous Web Proxy Server
比如http://p.free.com.do/,http://grab.cc/等。通过这些匿名代理网站,访问Wikipedia,Wordpress.com基本上没有问题。但是它们不能避开GFW的关键字过滤。如果有自己的主机空间,则可以安装一个phproxy。
Anonymous Proxy Software
例如大名鼎鼎的Tor。现在Tor似乎已经不行了,可能是GFW已经找到了应对的办法。所以低调一点。另外一个好用的GFW Killer是free door。由于free door出身很有问题(是某个非法协会开发的),想找个下载不太容易。我也不给链接。前面阅微堂上有下载。
总而言之,广大网友和GFW的斗争才刚刚开始。所谓道高一尺,魔高一丈,群众的眼睛是雪亮的,群众的力量是无穷的。GFW总有倒掉的一天。到那时再来效颦鲁迅,写一篇《论GFW的倒掉》。
星期四, 三月 01, 2007
Code Kata:Word Chains
又做一个Kata题目。这回是Kata 19,Word Chains,即要在字典中寻找一个单词序列,头和尾由输入决定,相邻的单词必须只能相差一个字母。例如下面是一个从cat到dog的单词链:
cat->cot->cog->dog
这个题目我想不到什么特别巧妙的算法,只能暴力搜索。但是因为输入数据量非常大,如果用递归的话会导致栈溢出,所以改用队列。最后的性能还马马虎虎。Kata上说作者的原始解答跑得很慢,用他提供的字典找从"ruby"到"code"的单词链需要90s,而"code"到"ruby"要一个小时。他后来改进了算法,上面这两个例子都可以在0.5s到1s内完成。由此可见算法的确是影响程序性能的第一要素。我的程序基本上差不多,从"ruby"到"code"耗时0.5s,"code"到"ruby"稍微长一点,大概1.8s,可见算法还有改进的余地。
wordchain.py
还是老办法,放到googlepages上。
现在觉得python确实好用,代码写起来很快,主要得归功于库的强大,特别是一些常用数据结构,比如list,dictionary(hash table),都是作为内建数据类型支持的。python里面唯一让我有些不爽的就是string。想要把一个string排序就得先把string转换为list,对list排序后再重新转换为string。文档上说这是因为string是imutable object,不可变对象,而list的sort方法会改变对象。那为什么不给string专门实现一个sort方法呢?可能Guido van Rossum觉得用list过渡一下进行排序也没什么不好的,再加上对string进行sort不算是特别常用的方法,就懒得实现了。
cat->cot->cog->dog
这个题目我想不到什么特别巧妙的算法,只能暴力搜索。但是因为输入数据量非常大,如果用递归的话会导致栈溢出,所以改用队列。最后的性能还马马虎虎。Kata上说作者的原始解答跑得很慢,用他提供的字典找从"ruby"到"code"的单词链需要90s,而"code"到"ruby"要一个小时。他后来改进了算法,上面这两个例子都可以在0.5s到1s内完成。由此可见算法的确是影响程序性能的第一要素。我的程序基本上差不多,从"ruby"到"code"耗时0.5s,"code"到"ruby"稍微长一点,大概1.8s,可见算法还有改进的余地。
wordchain.py
还是老办法,放到googlepages上。
现在觉得python确实好用,代码写起来很快,主要得归功于库的强大,特别是一些常用数据结构,比如list,dictionary(hash table),都是作为内建数据类型支持的。python里面唯一让我有些不爽的就是string。想要把一个string排序就得先把string转换为list,对list排序后再重新转换为string。文档上说这是因为string是imutable object,不可变对象,而list的sort方法会改变对象。那为什么不给string专门实现一个sort方法呢?可能Guido van Rossum觉得用list过渡一下进行排序也没什么不好的,再加上对string进行sort不算是特别常用的方法,就懒得实现了。
星期三, 二月 28, 2007
Code Kata:Anagram
CodeKata上有一些很值得一做的题目(并不一定需要你操一门语言写代码。有些只是design,乃至estimate)。有一个题目(Kata 6)是Anagram,就是找出一个单词表里的所有形变词,比如:
enlist inlets listen silent
boaster boaters borates
fresher refresh
sinks skins
网站作者给了一个单词表。作者说他的解答只用了25行Ruby代码,在他的1GHZ PPC上运行时间1.5s。看到这个数据我很高兴,因为我写了个27行的Python程序,运行时间0.53s。不排除我的电脑比他的快,更可能是因为Python实现本身就比Ruby实现快。幸亏前辈科学家发明了一种伟大的数据结构:散列表,而一些巨牛无比的programmer写出了质量极高的实现,我们才能用这种简洁得足以自我吹嘘的方式解决这个问题。
在blogger上贴代码,缩进老是会乱掉,我不知道有什么解决办法。为了美观起见(我认为这很重要),我把代码转成HTML放到googlepage上(3.11 Update:不久前终于弄明白了怎么贴代码,所以把代码也一块弄上来了)。我的解答:
Anagram.py
唯一让我有点担心的是,网站作者说他给的list里面包含了2530组形变词,总共5680个单词。而我得到的结果是2531组,5683个单词。为此还专门写了一个脚本,检查我得到的结果是否都是形变词而且没有重复,好像也没什么问题。不知道是谁弄错了。
enlist inlets listen silent
boaster boaters borates
fresher refresh
sinks skins
网站作者给了一个单词表。作者说他的解答只用了25行Ruby代码,在他的1GHZ PPC上运行时间1.5s。看到这个数据我很高兴,因为我写了个27行的Python程序,运行时间0.53s。不排除我的电脑比他的快,更可能是因为Python实现本身就比Ruby实现快。幸亏前辈科学家发明了一种伟大的数据结构:散列表,而一些巨牛无比的programmer写出了质量极高的实现,我们才能用这种简洁得足以自我吹嘘的方式解决这个问题。
在blogger上贴代码,缩进老是会乱掉,我不知道有什么解决办法。为了美观起见(我认为这很重要),我把代码转成HTML放到googlepage上(3.11 Update:不久前终于弄明白了怎么贴代码,所以把代码也一块弄上来了)。我的解答:
Anagram.py
import datetime
def load_word(file_name):
file_handler = open(file_name)
table = {}
for line in file_handler.readlines():
w = line.strip(' \n').lower()
w_sorted = ''.join(sorted(w))
if w_sorted not in table:
table[w_sorted] = []
table[w_sorted].append(w)
file_handler.close()
return table
if __name__ == '__main__':
t1 = datetime.datetime.today()
output = open('result.txt','w')
anagram_sets = ['']
for word_list in load_word("wordlist.txt").values():
if len(word_list) > 1:
anagram_sets.extend(word_list)
anagram_sets.append('\n')
output.write(' '.join(anagram_sets))
t2 = datetime.datetime.today()
print str(t2 - t1)
唯一让我有点担心的是,网站作者说他给的list里面包含了2530组形变词,总共5680个单词。而我得到的结果是2531组,5683个单词。为此还专门写了一个脚本,检查我得到的结果是否都是形变词而且没有重复,好像也没什么问题。不知道是谁弄错了。
星期一, 二月 26, 2007
回校前最后一博
明天就要回学校了。今天要去把头发理一理,下一次理发最乐观估计是在五一劳动节,也有可能是暑假。
修改了一下首页的sidebar,加了一个del.icio.us的javascript,并且非常无耻地安上一个"recommended reading"的标题。del.icio.us确实考虑周到,提供了js代码和css供参考。然而这段css在blogger上明显水土不服,不管怎么调整各个margin和padding显示效应总是有些怪异,最后不得不舍弃了那个边框(自我安慰说边框和整个页面的风格不怎么协调,拿了更好)。
下学期课还是不少。都说大三下没什么课,我们系好像是个例外。统计物理,固体物理,近代物理实验(又是物理实验……我对做实验缺乏兴趣)。除此之外,课程表还塞满了各种专业选修课。就我自己来说,可能还要去听听别的专业方向的课(我报的是理论物理,相对课最少)。一转眼都已经是大三学生了。下学期也是我们在浦口的最后一学期,大四就要搬到住宿条件相对凄惨,其他条件都不错的鼓楼校区去。
修改了一下首页的sidebar,加了一个del.icio.us的javascript,并且非常无耻地安上一个"recommended reading"的标题。del.icio.us确实考虑周到,提供了js代码和css供参考。然而这段css在blogger上明显水土不服,不管怎么调整各个margin和padding显示效应总是有些怪异,最后不得不舍弃了那个边框(自我安慰说边框和整个页面的风格不怎么协调,拿了更好)。
下学期课还是不少。都说大三下没什么课,我们系好像是个例外。统计物理,固体物理,近代物理实验(又是物理实验……我对做实验缺乏兴趣)。除此之外,课程表还塞满了各种专业选修课。就我自己来说,可能还要去听听别的专业方向的课(我报的是理论物理,相对课最少)。一转眼都已经是大三学生了。下学期也是我们在浦口的最后一学期,大四就要搬到住宿条件相对凄惨,其他条件都不错的鼓楼校区去。
星期一, 二月 19, 2007
电视剧中的量子力学
来自于李淼老师的blog。据说是从《我们无处安放的青春》里截出来的。一听这名字就觉得这电视剧很装逼。


我个人认为曾谨言老师的量子书并不适合作为旅途消遣。曾老师如果看到这个片子肯定很欣慰,电视剧里想要弄一本道具量子力学课本立马就想到了曾老师……
第二句话很实在:“也没看懂”。所有学过量子的同学都会对这句话产生共鸣。
电视剧的第一集里面还拿出一句台词的篇幅对量子力学作了一个宏观的,高屋建瓴的概括性的讨论:“在量子力学中,只有变量,没有常量。”有非常浓厚的宿命,无常之感。李老师非常善良地认为这说的是uncertainty principle。


我个人认为曾谨言老师的量子书并不适合作为旅途消遣。曾老师如果看到这个片子肯定很欣慰,电视剧里想要弄一本道具量子力学课本立马就想到了曾老师……
第二句话很实在:“也没看懂”。所有学过量子的同学都会对这句话产生共鸣。
电视剧的第一集里面还拿出一句台词的篇幅对量子力学作了一个宏观的,高屋建瓴的概括性的讨论:“在量子力学中,只有变量,没有常量。”有非常浓厚的宿命,无常之感。李老师非常善良地认为这说的是uncertainty principle。
星期四, 二月 15, 2007
Problems with latex2html
Today I tried to install latex2html on my computer and I failed after a painful struggle with the unreadble Perl Scripts.To get a latex2html package to work,first you have to check that LaTeX2e,a Perl distribution,Ghostscript interpreter(always distributed together with TeX system) and NetPbm are all OK and add the corresponding 'bin' directory to the PATH environment variable.Then download a latex2html compressed package(the latest version seems to be released in 2002) and extract it to $TeX$\localtexmf\($TeX$ is the directory your LaTeX lies).Open prefs.pm in the directory and find the line "$prefs{'PREFIX'} = '...';" Replace the content between quotes by the path where your latex2html is going to be located.Note that the path must contain no spaces.Then run 'config.bat' and 'install.bat'.You will have a nice LaTeX2HTML to enjoy.
But,in fact even you strictly follow the steps I describe above,you will probably get a failure message when running test.bat.What the hell is that?Many reasons.I suggest you go to google.com.The problem I encountered is that the netpbm version I downloaded is not portable with latex2html.I guess(yes,it still remains a postulate.I am not able to prove it) only netpbm earlier than version 10 can work with latex2html.I have made a lot of efforts in looking for a netpbm 9.xx version but still,I failed.Is there anybody who has netpbm 9.25 or earlier?
But,in fact even you strictly follow the steps I describe above,you will probably get a failure message when running test.bat.What the hell is that?Many reasons.I suggest you go to google.com.The problem I encountered is that the netpbm version I downloaded is not portable with latex2html.I guess(yes,it still remains a postulate.I am not able to prove it) only netpbm earlier than version 10 can work with latex2html.I have made a lot of efforts in looking for a netpbm 9.xx version but still,I failed.Is there anybody who has netpbm 9.25 or earlier?
回家过年
在上海待了两个星期,这期间近乎与世隔绝:手机被盗,不能上网。离开了网络,虽然不能说什么生活崩溃了不能继续等等, 但也觉得人生不完整了。说到手机,我到上海第一天,拎着包挤地铁,人民广场站下车的时候一个不留神,手机gone with crowd,再也找不回来。明知如此,还是要聊尽人事,跑到警务处登记了一下,警察同志态度和蔼,很详细的跟我说如果想要报案要提供哪些东西,我一听,没一样是我知道的,只能化悲痛为力量,继续上路了。活了20年,人生第一次遭遇小偷,我认为2007年1月31日是小学作文题中所说的“难忘的一天”。
昨天下午回家,一路打起了十二分精神防盗。已经到了年关,无论是地铁上还是车站里都是人山人海,正是小偷猖獗时。可能是过于敏感,下了地铁我居然感觉背上的包轻了不少……这一路倒是平安,不过晚上车到天台的时候,公路上排起了长队,据说是前面出了事故,大概堵了整整一小时。司机不停的骂娘,说“要撞也要等我开过去再撞……”虽然到现在我还不知道具体出了什么事故,我也认为这个说法不怎么厚道。然而实事求是的说,车上的大多数人心里转的差不多都是这个念头,我也不例外。
后天就要过年了。
昨天下午回家,一路打起了十二分精神防盗。已经到了年关,无论是地铁上还是车站里都是人山人海,正是小偷猖獗时。可能是过于敏感,下了地铁我居然感觉背上的包轻了不少……这一路倒是平安,不过晚上车到天台的时候,公路上排起了长队,据说是前面出了事故,大概堵了整整一小时。司机不停的骂娘,说“要撞也要等我开过去再撞……”虽然到现在我还不知道具体出了什么事故,我也认为这个说法不怎么厚道。然而实事求是的说,车上的大多数人心里转的差不多都是这个念头,我也不例外。
后天就要过年了。
星期五, 一月 26, 2007
How to present mathematical expression in your blog posts
This is a critical problem,especially for those guys who are desired to write something on math or physics in blog posts.Currently there are mainly two alternatives:
- Write down mathematical expressions in LaTeX and save the text as a ".tex" file.Run "tex2png.pl" or "textogif.pl"(a number of such scripts converting tex to images can be found on Web.Just google,you'll find a lot) to obtain a PNG or GIF which can be inserted to your posts.It is known to all that LaTeX are GOOD at processing math expressions,so don't worry about the quality of images generated.What bother me is that some blog systems,such as Blogger,behave strangely when I try to insert images to my posts.The server loves adding certain HTML codes to adjust the position,margin and so on to its preferences.I'm not familiar with these HTML and CSS tricks,so I never get what I want in Blogger.Finally I canceled this approach.
- Write mathematical expressions using HTML's special entities.Hm,it does work,more or less,although they look somewhat ugly.Note:prepare yourself to suffer a lot from writing math formulas in HTML.If you decide to take this way,I strongly recommend Math in HTML(and CSS).The article offers everything you will care about in great detail.
- I'm still waiting for someday when a more simple,elegant method for presenting maths in HTML pages appears and solves all problems.Blogger wolverinex02 implements a LaTeX compiler for blogger,see his page LaTeX for Blogger.The idea seems excellent,but the implementation now still needs some improvements.
星期四, 一月 25, 2007
Poincaré Recurrence Theorem
Poincaré recurrence theorem,翻译过来叫庞加莱回归定理,和统计力学的基础很有关系。用数学语言来叙述就是下面这句话:一个有限测度空间的保测度变换具有无限回归性质。这就比较费解,需要解释一下。测度我们可以大胆地替换为体积(广义的体积,比如相空间中的体积。这也是讨论物理问题的方便之处,在我们被那些数学家编出来的鸟话弄得头疼的时候可以暂时无视数学严密性。) 有限测度空间就是说这个集合本身的体积是有限的(在给定的体积形式下)。保测度变换,就是指这个空间到自身的映射,在这个映射下子集和象的体积相等。
为了说清楚什么是无限回归性质,必须先规定几个记号。用X表示这个测度空间,E表示X的一个子集,用f表示保测度变换,设有x∈E,在f的反复作用下形成一个轨迹f(x), f 2(x), f 3(x), ...。无限回归性质就是说,所有在经过有限次变换后轨迹离开E的点x组成的集合的体积(测度)为0。一个等价的说法是:对任意一点x∈E,只要E的体积大于0,那么x的轨迹中一定有无穷多个点在E中,或者说,x的轨迹会无限次的回到E中。这个定理告诉我们,好马也摆脱不了吃回头草的命运。
下面看这个定理的证明。虽然定理初看起来比较吓人,名头也很大(挂了Poincaré的招牌),但证明一点都不难,相当简明易懂,只是免不了要多写几个数学式子。我们要证明的是集合P={x∈E|存在一个N,对所有n>N,f n(x)∉E}的体积为0。考虑其补集:P'={x∈E|对所有N,存在一个n>N使得f n(x)∈E},定义An=∪k≥nf -k(E),表示经过至少n次变换后轨迹回到E的点的全体。显然P'=∩n≥1An。也就是说,我们要证明μ(E-∩n≥1An)=0。回头看我们定义的An,显然有E⊂A0,且Ai⊂Aj若i≤j。此外,因为Ai=f j-iAj,根据定理假设中的f保测度,有μ(Ai)=μ(Aj)。因为E-An⊂A0-An,故有μ(E-An)≤μ(A0-An)=μ(A0)-μ(An)=0,也即对所有n>0,μ(E-An)=0。我们马上就得到结论:μ(E-∩n≥1An)=μ(∪n≥1(E-An))=0。That's all。
定理中所说的保测度变换是离散的。对连续变换也有类似的结果。
前面说过,回归定理和统计力学的基础有很大的关系。现在把这个非常数学化的定理翻译到物理语言。考虑一个力学系统,假定其Hamiltonian是有界的,换句话说,正则坐标q和正则动量p都是有界的,这样系统的相空间就具有有限体积(定理只对有限测度空间成立,这个有限性是关键的条件)。力学系统在相空间中的演化由Hamilton方程决定。经典力学中有一条Liouville定理:力学系统的Hamilton演化不改变相空间的体积。也就是说,系统的演化相当于一个保测度变换。这样回归定理的所有条件都满足了,因此我们可以说,系统的相空间上的演化在充分长的时间后可以任意接近于其初始状态。
本文中Poincaré回归定理的陈述和证明来自于PlanetMath.org:Poincaré Recurrence Theorem
为了说清楚什么是无限回归性质,必须先规定几个记号。用X表示这个测度空间,E表示X的一个子集,用f表示保测度变换,设有x∈E,在f的反复作用下形成一个轨迹f(x), f 2(x), f 3(x), ...。无限回归性质就是说,所有在经过有限次变换后轨迹离开E的点x组成的集合的体积(测度)为0。一个等价的说法是:对任意一点x∈E,只要E的体积大于0,那么x的轨迹中一定有无穷多个点在E中,或者说,x的轨迹会无限次的回到E中。这个定理告诉我们,好马也摆脱不了吃回头草的命运。
下面看这个定理的证明。虽然定理初看起来比较吓人,名头也很大(挂了Poincaré的招牌),但证明一点都不难,相当简明易懂,只是免不了要多写几个数学式子。我们要证明的是集合P={x∈E|存在一个N,对所有n>N,f n(x)∉E}的体积为0。考虑其补集:P'={x∈E|对所有N,存在一个n>N使得f n(x)∈E},定义An=∪k≥nf -k(E),表示经过至少n次变换后轨迹回到E的点的全体。显然P'=∩n≥1An。也就是说,我们要证明μ(E-∩n≥1An)=0。回头看我们定义的An,显然有E⊂A0,且Ai⊂Aj若i≤j。此外,因为Ai=f j-iAj,根据定理假设中的f保测度,有μ(Ai)=μ(Aj)。因为E-An⊂A0-An,故有μ(E-An)≤μ(A0-An)=μ(A0)-μ(An)=0,也即对所有n>0,μ(E-An)=0。我们马上就得到结论:μ(E-∩n≥1An)=μ(∪n≥1(E-An))=0。That's all。
定理中所说的保测度变换是离散的。对连续变换也有类似的结果。
前面说过,回归定理和统计力学的基础有很大的关系。现在把这个非常数学化的定理翻译到物理语言。考虑一个力学系统,假定其Hamiltonian是有界的,换句话说,正则坐标q和正则动量p都是有界的,这样系统的相空间就具有有限体积(定理只对有限测度空间成立,这个有限性是关键的条件)。力学系统在相空间中的演化由Hamilton方程决定。经典力学中有一条Liouville定理:力学系统的Hamilton演化不改变相空间的体积。也就是说,系统的演化相当于一个保测度变换。这样回归定理的所有条件都满足了,因此我们可以说,系统的相空间上的演化在充分长的时间后可以任意接近于其初始状态。
本文中Poincaré回归定理的陈述和证明来自于PlanetMath.org:Poincaré Recurrence Theorem
星期四, 一月 04, 2007
iPod
我原来的iPod nano溺水身亡(洗衣服的时候放在兜里没掏出来,在洗衣机里惨遭摧残蹂躏……同志们引以为戒),尸身至今安详的躺在我的桌上;昨天终于下定决心,再买一个。本想进城买,后来听了同学的意见,和他一块在淘宝网上买。昨晚订的货,今天上午就到了,效率值得表扬,比市场价便宜近300RMB,是日行原装,说明书发票都是日文的。可惜硅胶套没货了,只好自己买。nano 2和一代比起来,外型有些变化,原来是没有抛光的,nano 2看起来更有金属感。其他方面,至今还未有体验。
星期一, 一月 01, 2007
买书
今天下午在广州路的先锋书店里泡了两小时,买了两本书。遥想当年高中,看闲书是我一大爱好,平均一星期都要买上个一两本,逛书店有如女同胞逛街看衣服,逛是重点,买不买倒是次要了。上了大学,终日与物理数学计算机周旋,慢慢地就不怎么看人文类的书了。有一种说法是物理学到了高层次和人文艺术也是相通的,并举Einstein为例。同时我们也看到,很多物理学家对哲学,确切地说是形而上的玩意,态度都很不屑——比如Feynman。当然这种态度本身也可以说是一种哲学,经验主义的哲学。不管如何,找几本好看的书消磨消磨时间也是不错的。
转了半天,买了一本《上学记》,何兆武先生的回忆录。说实在的,这本书买得有点郁闷,因为浦口的南大书店有卖这本书,倘若不远万里的进城一趟就买这本书回去未免有点舍近求远了。所以又拿了一本《物语日本》,适合我等俗人增加俗气的书,内容也算有趣,加上不少精美插图,可作为居家旅游的消闲读物。
转了半天,买了一本《上学记》,何兆武先生的回忆录。说实在的,这本书买得有点郁闷,因为浦口的南大书店有卖这本书,倘若不远万里的进城一趟就买这本书回去未免有点舍近求远了。所以又拿了一本《物语日本》,适合我等俗人增加俗气的书,内容也算有趣,加上不少精美插图,可作为居家旅游的消闲读物。
订阅:
博文 (Atom)
