2007-11-29

Python implementation of Nussinov Folding Algorithm for RNA Secondary Structure Prediction

by Forrest Sheng Bao http://fsbao.net


#This software is a free software. 
#Thus, it is licensed under GNU General Public License.
#Python implementation to Nussinov Folding Algorithm
#for Homework 7 of Bioinformatics class.
#Forrest Bao, Nov. 29 <http://fsbao.net> <forrest.bao aT gmail.com>

import sys,string
from numpy import *
from matplotlib import *

#read sequences
#sequences are stored in many lines
f=open(sys.argv[1], 'r')
seq=[]
for line in f.readlines():
seq.append(string.strip(line));

def delta(l,m):
delta=0;
if l=='A' and m=='U':
return 1;
elif l=='U' and m=='A':
return 1;
elif l=='G' and m=='C':
return 1;
elif l=='C' and m=='G':
return 1;
else:
return 0;

def buildDP(seq):
L=len(seq);
s=zeros((L,L));
for n in xrange(1,L):
for j in xrange(n,L):
i=j-n;
case1=s[i+1,j-1]+delta(seq[i],seq[j]);
case2=s[i+1,j];
case3=s[i,j-1];
if i+3<=j:
tmp=[];
for k in xrange(i+1,j):
tmp.append(s[i,k]+s[k+1,j]);
case4=max(tmp);
s[i,j]=max(case1,case2,case3,case4);
else:
s[i,j]=max(case1,case2,case3);
return s;

def traceback(s,seq,i,j,pair):
if i<j:
if s[i,j]==s[i+1,j]:
traceback(s,seq,i+1,j,pair);
elif s[i,j]==s[i,j-1]:
traceback(s,seq,i,j-1,pair);
elif s[i,j]==s[i+1,j-1]+delta(seq[i],seq[j]):
pair.append([i,j,str(seq[i]),str(seq[j])]);
traceback(s,seq,i+1,j-1,pair);
else:
for k in xrange(i+1,j):
if s[i,j]==s[i,k]+s[k+1,j]:
traceback(s,seq,i,k,pair);
traceback(s,seq,k+1,j,pair);
break;
return pair;

for q in xrange(0,len(seq)):
pair=traceback(buildDP(seq[q]),seq[q],0,len(seq[q])-1,[])
print "max # of folding pairs: ",len(pair);
for x in xrange(0,len(pair)):
print '%d %d %s==%s' % (pair[x][0],pair[x][1],pair[x][2],pair[x][3]);
print "---";

2007-11-27

150 meters / 400 feet from my home to campus


home2school
Originally uploaded by Forrest Sheng Bao
Forrest Sheng Bao http://fsbao.net

I have just found a perfect place to live from next semester. It's just 400 feet / 150 meters far from campus. And it is the closest one to my departments. From the scale legend on this picture, you can see that it's less than 5 minutes walk from my home to both Dept. of Computer Science and Dept. of Electrical & Computer Engineering. The area of my new one-bedroom apt is 575 square feet. The rent is $430/month with free wireless Internet. I only need to pay electricity and gas bills.

2007-11-26

Python script to solve N-Queen problem using minisat

by Forrest Sheng Bao http://fsbao.net

Only works for Linux!!!

#queen.py
#This software is a free software.
#Thus, it is licensed under GNU General Public License.
#Python code to solve N-Queen problem
#generate DIMACS CNF file and call minisat to solve it.
#Usage: python queen.py
#for SAT solver project of CS384, Logics for Computer Science
#Forrest Bao, Nov. 26

import sys,string,os;

n=int(sys.argv[1]);

if (len(sys.argv)<2):
print "Usage: python queen.py ";
print "Or, just: python queen.py ";
exit();

if (len(sys.argv)<3):
print "You don't specify output DIMACS CNF file name, use default I/O name- nqueen.cnf result";
ofilename="nqueen.cnf";
o2filename="result";

if (len(sys.argv)==3):
print "Using your DIMACS CNF filename: ",sys.argv[2];
ofilename=sys.argv[2];

if (len(sys.argv)==4):
print "Using your result filename: ",sys.argv[3];
o2filename=sys.argv[3];

ofile= open(ofilename,"w");
o2file= open(o2filename,"w");


str0="c"+str(n)+"-queen problem\nc By Forrest Sheng Bao http://fsbao.net\nc This software is a free software under GNU General Public License\nc assume number means grid\nc true means a queen in this grid\nc false means not queen in this grid\nc each line must has one queen\nc no two queens attach each other\nc so they cannot be true at the same time\n";
ofile.write(str0);

#generator rule
for i in range(0,n):
str0='';
for j in range(1,n+1):
number=str(j+n*i);
str0=str0+number+" ";
str0=str0+" 0\n";
ofile.write(str0);
#end of generator rule

#constraints on rows
for i in range(0,n):
for j in range(1,n):
number=j+n*i;
for l in range(1,n-j+1):
str0="-"+str(number)+" -"+str(number+l)+" 0\n";
ofile.write(str0);
#END of constraints on rows

#constraints on columns
for j in range(1,n+1):
for i in range(0,n):
number=j+n*i;
for l in range(1,n-i):
str0="-"+str(number)+" -"+str(number+n*l)+" 0\n";
ofile.write(str0);
#END of constrains on columns

#constraints on NW->SE diagonal
# part 1, upper bound triangle
for i in range(0,n-1):
for j in range(i,n-1):
number=j+1+n*i;
for l in range(1,n-j):
str0="-"+str(number)+" -"+str(number+l*(n+1))+" 0\n";
ofile.write(str0);

# part 2, lower bound triangle
for i in range(0,n-1):
for j in range(0,i):
number=j+1+n*i;
for l in range(1,n-i):
str0="-"+str(number)+" -"+str(number+l*(n+1))+" 0\n";
ofile.write(str0);
#END of constraints on NW->SE diagonal

#constraints on NE->SW diagonal
# part 1, upper bound triangle
for i in range(0,n):
for j in range(0,n-i):
number=j+1+n*i;
for l in range(1,j+1):
str0="-"+str(number)+" -"+str(number+l*(n-1))+" 0\n";
ofile.write(str0);

# part 2, lower bound triangle
for i in range(0,n):
for j in range(n-i,n):
number=j+1+n*i;
if (number != n*n ):
for l in range(1,n-i):
str0="-"+str(number)+" -"+str(number+l*(n-1))+" 0\n";
ofile.write(str0);
#END of constraints on NE->SW diagonal

ofile.close();

exe="minisat "+ofilename+" "+o2filename;

os.system(exe);

exe2="cat "+o2filename;
os.system(exe2);

2007-11-06

DVD-RW nonerasable problem on Linux

Forrest Sheng Bao http://forrest.bao.googlepages.com

I was ignored by a problem that I can't erase my DVD-RW and can't burn it again. Now I found the problem, that it doesn't support TAO(track-at-once) model. No matter I use K3b or Nautilus media burner, they are return me an error at the starting time. I checked the log of K3b, it even used dvd+rw tools to burn my dvd-rw disk. OMG, I can't depend on default or auto setting this time. Once I select DAO mode to burn, it works fine now. But K3B still can't erase DVD-RW. So I use dvdrecorder to do that:
dvdrecord dev= 0,0 -v blank=fast To fully remove then you can change the "fast" into "all".

Ripping DVD video via MEncoder/AcidRip on Ubuntu 7.10

Forrest Sheng Bao http://forrest.bao.googlepages.com

MPEG-4 are also called DivX, which is a proprietary standard. So there is an open source standard been developed, called XivD. Funny, just reverse the order of numbers. Thanks to those open standards and open source developers, now I can have a total video ripping solution and playing solution.

MEncoder is the video encoder accompanied to famous open source media player MPlayer. There are two ways to rip the DVD to the hard drive. One is called the 2-pass method. Another is called the 3-pass method. The difference is that in 3-pass method, audio encoding takes place in a separate pass. But I don't recommend the 3-pass method, coz I have found much quality difference. The MPlayer official website has provided an example

http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-mpeg4.html


One easy way to forget these detail is to use a GUI of MEncoder called AcidRip. It has a very easy to use GUI.
Snapshot of AcidRip

I think it better follow the later example, coz in most of the time, we don't need AC-3 audio. MP3 is enough. Here is my coding script example:


forrest@narnia:/forrest/2pass$ cat 2pass.sh
#/bin/bash -x
mencoder dvd://1 -dvd-device /dev/dvd -aid 128 -info subject="The Blue Planet - Season of Life" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=3239:chroma_me:vhq=4:bvhq=1:quant_type=mpeg:pass=1 -vf pp=de,crop=704:480:10:0 -o "/dev/null"
mencoder dvd://1 -dvd-device /dev/dvd -aid 128 -info subject="The Blue Planet - Season of Life" -oac mp3lame -lameopts abr:br=128 -ovc xvid -xvidencopts bitrate=3239:chroma_me:vhq=4:bvhq=1:quant_type=mpeg:pass=2 -vf pp=de,crop=704:480:10:0 -o "/forrest/2pass/blue_planet_disc1.avi"


This is another better script.

http://axljab.homelinux.org/Mencoder_DVD_to_MPEG-4


You can also get the subtitles while 2-pass coding. See example 13.5 on MPlayer official doc.
http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-extractsub.html


Other references:
http://gentoo-wiki.com/HOWTO_Rip_DVD_mencoder
http://web.njit.edu/all_topics/Prog_Lang_Docs/html/mplayer/encoding.html
http://www.mplayerhq.hu/DOCS/HTML/en/video-codecs.html
Making a high quality MPEG-4 ("DivX") rip of a DVD movie: http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-dvd-mpeg4.html
Encoding with the Xvid codec: http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-xvid.html

2007-11-05

Ripping DVD audio to OGG/MP3 in mplayer/mencoder on Ubuntu Linux 7.10

Forrest Sheng Bao http://forrest.bao.googlepages.com

Step 1: Detect your DVD information
mplayer dvd://1 -frames 0 -identify

Maybe you need to adjust the number after dvd://. A good strategy is start from 0, that will guarantee you knowing how many titles(separate movies, generally) on the DVD. If the number is not 0, you can see informations of specified title.

Then you can see following information, such as

There are 1 angles in this DVD title.
audio stream: 0 format: ac3 (5.1) language: en aid: 128.
ID_AUDIO_ID=128
ID_AID_128_LANG=en
number of audio channels on disk: 1.
subtitle ( sid ): 0 language: en
ID_SUBTITLE_ID=0
ID_SID_0_LANG=en


Step 2: Rip the audio into PCM file
mplayer dvd://# -aid # -vo null -ao pcm:file="filename"
For example
mplayer dvd://1 -aid 128 -vo null -ao pcm:file='ice2.wav'

Step 3: Convert WAV into OGG or MP3 using oggenc or lame
The oggenc is included in vorbis-tools. You can use
sudo apt-get install vorbis-tools to install it.

Examples: oggenc ice.wav -o ice.ogg

Other maybe useful stuff
RipperX
StreamRipper
Dekagen

mplayer for AMD64 and its decoders on Ubuntu 7.10

Forrest Sheng Bao http://forrest.bao.googlepages.com

I think configuring totem or xine or kaffeine is too sophisticated. So I still prefer using mplayer, just two steps to deploy, installing the binary executables and copy the decoders to proper place.

Step 1: install binary executables
           sudo apt-get install mplayer
Step 2: Add Medibuntu into your source repository and install w64codecs
sudo wget http://www.medibuntu.org/sources.list.d/gutsy.list -O /etc/apt/sources.list.d/medibuntu.list
wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add - && sudo apt-get update
sudo apt-get install non-free-codecs
Done.

Enabling 32-bit executables on Ubuntu 7.10 for AMD64

Forrest Sheng Bao http://forrest.bao.googlepages.com

Preamble: This article will be great help to you, if you having problem running 32-bit only program under 64-bit environment on AMD64 CPU, especially the symptom that you get a "no such file or directory" when you start certain program by its path. (It's weird, isn't? That program is just over there, but the system says can't find it.)

I have just immigrated to AMD 64 platform. Although I have purchased this Athlon X2-64 3600+ CPU in June this year(2007), it ran in 32-bit model until last week. One reason I didn't immigrate before is because some commercial software can work in 64-bit model due to lack of some libraries.

But 64-bit model is too attractive to me, that in most fields I am working on(bioinformtics, logic-based AI, communication network, biomedical signal processing, etc.) many programs execute much faster on 64-bit model than the ones on 32-bit model, such as Python interpreter(with scipy/numpy/pylan libraries), gProlog and smodels, even the GCC compiler. The performance promotes at least 10%, if only considering the time of executing same computational job. My friend Eric told me that the SMP performance of AMD64 is greatly improved on 64-bit model. For instance, if GCC is compiling your program, one core is doing syntax parsing while another core is doing assembling.

So what I do? There is no problem to all open source software, their guys have prepared 64-bit version or I can compile them myself. But I can't drop out all commercial software, especially some of them are really professional, with their own algorithms and stuffs. How can I balance using 64-bit model while being able to run some 32-bit only software?

Today, I figured it out. Ubuntu 7.10 has provided some 32-bit libraries to allow those 32-bit only programs run even in 64-bit model. I found this when I tried to install Adobe/Macromedia Flash Player through Firefox promotion that a plug-in was required to display Flash on the webpage. And I noticed some 32-bit libraries were installed. Later I checked the apt log, and found this:
Setting up libc6 (2.6.1-1ubuntu10) ...
Setting up libc6-dev (2.6.1-1ubuntu10) ...
Setting up libc6-i386 (2.6.1-1ubuntu10) ...
Setting up lib32gcc1 (1:4.2.1-5ubuntu4) ...
Setting up lib32z1 (1:1.2.3.3.dfsg-5ubuntu2) ...
Setting up lib32stdc++6 (4.2.1-5ubuntu4) ...
Setting up lib32asound2 (1.0.14-1ubuntu8) ...
Setting up lib32ncurses5 (5.6+20070716-1ubuntu3) ...
Setting up ia32-libs (2.1ubuntu3) ...
So you just need to install all those stuffs.

Yup, in Ubuntu 7.04 I found that Adobe/Macromedia Flash Player can't work in 64-bit model but the open source GNASH player is too poor working with Youtube. Now, this problem is solved. Thanks to Ubuntu team's that I can watch Flash animation inside webpages out-of-the-box, with only less than 3 times mouse click.

Later I checked Adobe PDF reader, it also works well this time. But to render PDF inside browser, you need to do a bit configuration, as mentioned on Adobe website.
http://blogs.adobe.com/acroread/2007/09/adobe_reader_811_faqs.html But personally, I don't think this is useful. By the way, it is more important to enable PDF reader plugin in Firefox.
Browser plugin doesn't load on Linux
If SELinux security is turned on, the browser plugin (nppdf.so) as well as PPKLite plugin (PPKLite.api) doesn't load because these are not SELinux compliant. To fix this you can run the patch for SELinux which is shipped along with Adobe Reader 8.1.1 kept at acroread_install_dir/Adobe/Reader8/Reader/Patch/selinux_patch.

Run this patch script as follows:

./selinux_patch acroread_install_dir/Adobe/Reader8

with root privileges.
Note of caution: This will disable SELINUX enforcement for all the libraries of Adobe Reader 8.1.1
You might need to install "policycoreutils" before run that script. And if you have some problem related to shell interpreter, try to edit the first linke of selinux_patch script into proper interpreter.

2007-11-03

USA, the country that Canadian kids dislike

Forrest Sheng Bao http://fsbao.net

I will translate it into English soon.

我是一个总是喜欢追求冒险的人,总是给自己定一些自己做不到的目标,用南京人的话说叫做一口吃个大胖子
我来美国之前我就觉得这个地方会适合我,充满了冒险精神,...

先说为什么我觉得加拿大小朋友仇恨美国。我去年暑假去加拿大参加一个会议,从西边跑到东边,再从东边跑到西边,特别是在一个叫Kanata的地方(在Ottawa附近)小住一段时间。加拿大的小朋友就开始教育我了,法国人第一次来这里,问印第安人这里叫什么名字,印第安人说叫“村庄”,音译成法语就是Kanata,所以后来演化成Canada。然后小朋友就开始教育我美国人的坏,美国人是自私的,淫荡的,没文化的,素质低下的。接着就开始说美国人天天想吞并加拿大,挑逗魁北克省独立,利诱西边四个省加入美联邦。我靠,原来魁北克问题和台湾问题一样阿,都是美国插手,分裂其他国家阿。

我奇怪,加拿大小朋友怎么这么仇恨美国呢?加拿大人的爱国简直到了变态的地步,比中国大陆的某些愤青还要BT。比如去书店,你要推荐小朋友买Merriam-Webster字典那是绝对不可以的,都是没文化的美国人用的字典,把个centre拼作center, colour还少写一个字母。他们要买什么呢?要买Canadian English Dictionary。装了一个软件,他们能费半天的劲选择语言,我说这不是英语吗,他们说这是美国英语。去商店,一定要去商店门口写了The owner and employees of this shop are all Canadian的商店。

我奇怪,怎么会这么仇恨呢?难道美国人冲进加拿大搞了一个大屠杀?加拿大那么多东西都从美国进口,先签了美加自由贸易协定,后加入墨西哥扩大为北美自由贸易协定。赚钱不说,你和美国还有世界上最长的无防边界线,一点也不像干仗的国家阿?世界上哪两个干过仗的国家还能搞无防边境?

今年3月,在一个会议上,吃饭时候,我说是去美国好呢,还是去加拿大好呢,于是一帮中国人faculty就开始八卦了。一位Waterloo的老师说,Red Coat和Blue Coat干了一仗,独立战争以后,保皇党人逃到北部的加拿大。美国人很diao, 准备把英国在北美的所有殖民地都吞了。3000土匪,气势汹汹的去侵略加拿大,结果被英国人和印第安人的1000人联军给打败了。我说哦,有这个事情,大概因为都想占地皮,所以关系闹毛了吧。

今天我才知道,这场战干的真够劲,双方分别把对方的首都给大火烧了一斧子,美国总统逃跑到弗吉尼亚,加拿大首都(当时是多伦多)大街上全是冻死的人。

怎么回事呢? 英国是在1783年承认美国独立的。从美国1776年宣布独立,英国已经不爽,独立后英国人用海军封锁了美国海岸,阻止美国同欧洲作贸易,这就给了美国开战的合法借口。美国人很diao,认为自己是加拿大人民的解放者,起早独立宣言的开国元勋杰弗逊说:“今年(1812)将加拿大地区兼并,包括魁北克,只要向前进,向哈利法克斯进攻,最终将英国势力彻底逐出美洲大陆“。1812年是美国独立后第18年,双方从北美大陆的东边打到西边,北边打到南边。加拿大的英国人后裔都是保皇党,对美国这帮造反派非常不爽,法国人后裔是天主教徒,美国人大部分是新教徒,天天说天主教是瞎搞,所以法国人也不爽,而且美国人还得罪了印第安人,所以是三家打一家,如此悬殊的实力差距下美国人胆子够大,敢去打。举个例子,英国人在美洲有97艘战舰,其中有11艘战列舰和34艘护卫舰,其中一个还是当时全世界最大的战列舰圣劳伦斯号,有102门大炮。美国仅有22艘战舰,大部分为护卫舰,英国报纸讥讽美国海军只是街头流氓组成的乌合之众。

最后双方的首都都被烧了,英国被这帮“乌合之众”搞的实在吃不消,宣布谈和。这场战争后,美国把英国在北美南部的殖民地大部分都吞下来了,包括佛罗里达,从此拉丁美洲除了美国的地盘就是西班牙和葡萄牙的地盘了。

占领了通向拉丁美洲的通道,“乌合之众”胆子越玩越大,就开始往南边搞。挑逗得克萨斯共和国从西班牙帝国独立,加入美国,西班牙帝国不爽,于是美国就和西班牙帝国开战。期间美国又和英国夺地皮,抢先搞下刚刚独立的加利福尼亚共和国,接着把Santa Fe, 洛杉矶,圣地亚哥全部搞定,然后从整个美国和西班牙帝国的边境向墨西哥开展,西班牙帝国当然不和大英帝国一个数量级,又是割地又是赔款,“乌合之众”这次搞的很爽,拿下了整个加利福尼亚、内华达、犹他,还有科罗拉多、亚利桑那、新墨西哥和怀俄明的部分地区。这场战争后来成为美国南北战争的前奏,北方各州都反对这场仗,反对这场战争的也是名人,叫做亚伯拉罕.林肯,后面再说他。

但是“乌合之众”不能继续打了,一个小事件搞的美国自己国内战火起来了,1839年夏天,五十三名黑人遭白人绑票,被关在西班牙奴隶船“亚美斯塔号”运往新大陆。黑人领袖辛格挣脱身上的枷锁,释放同伴,抢下这艘奴隶船,准备回到非洲。然而幸存的两名白人船员瞒过他们,仍把船驶往美国。上岸后这些非洲人因谋杀船员的罪名受到审判。起初两名解放黑奴运动者席德裘森和路易斯泰潘找来年轻律师罗杰包德温为这些黑人辩护,在地方和高等法院他们都获判无罪。但是支持奴隶制度的美国总统马丁.范伯伦为了讨好南方的保守派势力,指派法官做出不利的裁决,当此案送到最高法院进行上诉时,前任美国总统约翰.昆西.亚当斯便决定挑战范伯伦的作法。于是,从来都是美国把人家搞分裂,这次自己分裂了,前面说的那个新手亚伯拉罕.林肯这次就成了ZB男,于是就打南北战争,不用多说什么了。

打完了,也快20世纪了,和西拔牙人的纠葛还没全解决,这次就是美西战争。1898年,一艘美国军舰在古巴爆炸了,“乌合之众”这次又扮演解放者,要求西班牙帝国承认古巴独立。乖乖,又来搞分裂了。然后又开打,我靠,西班牙帝国这次是更不如美国了,美国用了100多年时间已经搞成全世界GDP第一的国家,他这次开始在大西洋和太平洋两线作战,不费吹灰之力,在大西洋上搞定了西拔牙在加勒比海上的众多殖民地,在太平洋上又搞定了菲律宾。西班牙人彻底歪歪了,除了美洲大陆上的领土,海外岛屿基本全割给美国了,包括菲律宾和关岛,然后又赔了n多钱。

于是,接下来的事情大家也知道了,一战,二战,朝鲜战争,越南战争,沙漠风暴(海湾战争), 持久自由(阿富汗战争),伊拉克战争。Forrest Gump里面说,美国每次战争丹中尉家里都有人倒下,看来是真的了。巴顿将军那个电影里面说,美国人民从来都是好战的,看来也是对的。这个国家从他诞生开始,就一直在到处打仗。其实美国人打败仗的次数也很多,刚刚独立20年,首都就被烧了一斧子,失败的概率也不低,但是就要继续打,能冒险阿。实际上阿富汗战争和伊拉克战争,是打败了,因为那里还是乱七八糟的。

现在的小布什搞的是到处都是烂摊子,鬼知道他怎么收场,而且他已经把“打不赢的仗也要打”的精神发挥到及至了。

2007-11-01

A small world of Billy Graham with China

Forrest Sheng Bao http://fsbao.net

Preamble: In this article, you will find the relationship of many famous people with China, such as Billy Graham and Pearl Buck. By reviewing the social connections of Billy Graham, I found these famous people are connected no farther than 6 people. It's really 6-degree of separation!

Today I came to Baptist Student Ministry at Texas Tech as usual. Baptist Student Ministry has many chapters around United States, funded by many Baptist Churches in USA. I discussed with some people today about a project called "Operation Christmas Child". It is a program initiated by Samaritan's Purse, whose president is Franklin Graham. Then, my discovery started.

A staff there told me that Franklin Graham is the son of Billy Graham. I said, I don't know this guy. But later I figured out that I know him. To me, his Chinese name is more famous than his English name. That's why I didn't response at the first time. He has a very famous Chinese name, "葛培理". “培理” stands for Billy in Chinese and 葛 stands for Gra. And then, you can figure out his relationships with China.

Billy Graham's wife, Ruth McCue Bell, was born in China in 1920 at Hwai-anh(Huai-an, 淮安). She has also a very nice Chinese name "钟路得", where “钟” means exactly “bell” in Chinese and “路德” is the pronounciation translation of "Ruth".

They have two sons, Franklin Graham (葛福臨) and Ned Graham (葛纳德). The Chinese name of Franklin means "happiness is coming" and it also fits the pronounciation of "Franklin" in Mandarin. Their younger son's Chinese name means "gaining virtue" in Chinese. Franklin Graham, as I mentioned before, is the president of the organization which distribute gifts to children in poor place. How about Ned Graham? Ned is now holding a church in the place where his mother was born in China.

Ok, now let me finish the story of Billy Graham. Ned Graham's wife, Christina Kuo (郭瑞玉), is the grand-grand-granddaughter of Zeng Guofan(曾国藩), who was "almost" (coz at that time China don't have chancellor) the chancellor of Qing Dynasty, the last dynasty of China. Zeng is famous also for his student, Li Hongzhang (李鴻章), who is considered as the "Oriental Bismarck"(东方卑斯麦). I don't need spend much words about Bismarck, right? Everyone knows him.

It that all? No! Some Chinese Communists are related with them. What?! The grand-grand-granddaughter of Zeng's brother married Ye Jianying(叶剑英), former vice provost of "Whampoa Military Academy"(黄埔军校), the military academy as famous as Westpoint. Many military leaders of KMT(中国国民党) and CCP(中国共产党) are graduated from that school. Later, KMT and CCP had a big civil war in China after World War II. That war leads to now the sophisticated Taiwan problem. If Taiwan an independent country or part of China? Ah, it's hard to say, only God knows.

Ok, now forget those politicians. Let's talk about some writers by first going back to Billy Graham's wife. She was born in "Mercy Hospital"(仁慈医院), which is the biggest hospital of American Presbyterians (South) outside USA. The hospital is founder by Absalom Sydenstricker(赛兆祥). "兆祥" means "good news" in Chinese. You might say, "I haven't heard about him". Yes, but you must have heard about his daughter, Pearl Buck(赛珍珠, " 珍珠" means "pearl" in Chinese), who is the first female winner of the Pulitzer Prize(普利策奖) and Nobel Prize in Literature(诺贝尔文学奖). Indeed, she is the only female who won both of these two prizes.

But she is very unlucky, that though she spent many years in both Nanjing University (former name National Central University 南京大学/国立中央大学) and University of Nanking(emerged by Nanjing University in 1950, 金陵大学), she never went back to China after 1934. The reason is that she offended both the Republic of China gov and the People's Republic of China gov for she criticized Chiang Kai-shek(蒋介石) was a dictator and she also criticized the Communism government later respectively. Even after the US president Nixon visited China in 1972, she was still now allowed to go to China.

Pearl Buck wrote a famous novel called "Letter from Peking"(北京来信). Peking means "the northern capital" in Chinese. Another Chinese writer, Lin Yutang(林语堂) also had a famous novel "Moment in Peking"(京华烟云). He is more famous for his book "My country and my people"(吾国吾民).

Oh, there is another writer related to Chancellor Li Hongzhang. His son-in-law's granddaughter is Eileen Chang(張愛玲), the writer as famous as Pearl Buck in China. Ok, I have to stop now, otherwise you will be led by me to University of California, where many Chinese scholars live. Then you will find bunches of family connectivities.

PS: I hate reading novels coz that costs too much time. So I prefer watching movies adapted from novels. Then I did some search about "Moment of Peking". I found following result in Wikipedia: "The novel has been adapted twice into a television drama, including the most recent version in 2005, starring Zhao Wei." OMG, directors of CCTV(China Central Televisin), how can you let such an uncivilized actress to play this famous novel?

Refereces:
1. Billy Graham(葛培理), http://en.wikipedia.org/wiki/Billy_Graham (English), http://zh.wikipedia.org/wiki/%E8%91%9B%E5%9F%B9%E7%90%86 (Chinese)
2. Ruth Bell Graham(钟路得), http://en.wikipedia.org/wiki/Ruth_Graham (English), http://zh.wikipedia.org/wiki/%E9%92%9F%E8%B7%AF%E5%BE%97 (Chinese)
3. Franklin_Graham(葛福臨), http://en.wikipedia.org/wiki/Franklin_Graham (English), http://zh.wikipedia.org/wiki/%E8%91%9B%E7%A6%8F%E8%87%A8 (Chinese)
4. Mercy Hospital(仁慈医院), http://zh.wikipedia.org/wiki/%E4%BB%81%E6%85%88%E5%8C%BB%E9%99%A2 (Only Chinese version in Wikipedia)
5.Pearl Buck(赛珍珠), http://en.wikipedia.org/wiki/Pearl_S._Buck (English), http://zh.wikipedia.org/wiki/%E8%B5%9B%E7%8F%8D%E7%8F%A0 (Chinese)
6. Absalom Sydenstricker (赛兆祥)http://zh.wikipedia.org/wiki/%E8%B5%9B%E5%85%86%E7%A5%A5 (Only Chinese version in Wikipedia)
7. Zeng Guofan(曾国藩), http://en.wikipedia.org/wiki/Zeng_Guofan (English), http://zh.wikipedia.org/wiki/%E6%9B%BE%E5%9B%BD%E8%97%A9 (Chinese)
8. Lin Yutang(林语堂),http://en.wikipedia.org/wiki/Lin_Yutang (English) http://zh.wikipedia.org/wiki/%E6%9E%97%E8%AF%AD%E5%A0%82 (Chinese)
9. Li Hongzhang(李鸿章), http://en.wikipedia.org/wiki/Li_Hongzhang (English), http://zh.wikipedia.org/wiki/%E6%9D%8E%E9%B8%BF%E7%AB%A0 (Chinese)