Tuesday, January 22, 2008

Monday, January 21, 2008

GNU Make

The specification that make uses is generally saved in a file named makefile.

The specification file, or makefile, describes the relationship between the source, intermediate, and executable program files so that make can perform the minimum amount of work necessary to update the executable.

If a target is included as a command-line argument, that target is updated. If no command-line targets are given, then the first target in the file is used, called the default goal.

Essentially a makefile contains a set of rules used to build an application. The first rule seen by make is used as the default rule. A rule consists of three parts: the target, its prerequisites, and the command(s) to perform:
target: prereq1 prereq2

commands
The target is the file or thing that must be made. The prerequisites or dependents are those files that must exist before the target can be successfully created. And the commands are those shell commands that will create the target from the prerequisites.The command script usually appears on the following lines and is preceded by a tab character.

Each command must begin with a tab character. This (obscure) syntax tells make that the characters that follow the tab are to be passed to a subshell for execution.

Long lines can be continued using the standard Unix escape character backslash (\). It is common for commands to be continued in this way. It is also common for lists of prerequisites to be continued with backslash.

Variables

In general, a variable name must be surrounded by $( ) to be recognized by make. As a special case, a single character variable name does not require the parentheses.

Automatic variables are set by make after a rule is matched. They provide access to elements from the target and prerequisite lists so you don't have to explicitly specify any filenames.

There are six "core" automatic variables:

$@ The filename representing the target.
$% The filename element of an archive member specification.
$< The filename of the first prerequisite.
$? The names of all prerequisites that are newer than the target, separated by spaces.
$^ The filenames of all the prerequisites, separated by spaces. This list has duplicate filenames removed since for most uses, such as compiling, copying, etc., duplicates are not wanted.
$+ Similar to $^, this is the names of all the prerequisites separated by spaces, except that $+ includes duplicates. This variable was created for specific situations such as arguments to linkers where duplicate values have meaning.
$* The stem of the target filename. A stem is typically a filename without its suffix. Its use outside of pattern rules is discouraged.
Finding files with VPATH and vpath

By default, make will look in the current directory for its targets and prerequisites.
MAKE and GCC have different search path! (有各自独立的搜索路径!)


-I dir
Add the directory dir to the list of directories to be searched for
header files. Directories named by -I are searched before the
standard system include directories. If the directory dir is a
standard system include directory, the option is ignored to ensure
that the default search order for system directories and the spe‐
cial treatment of system headers are not defeated .

for source files: VPATH = src1:src2:src3;
make will search src folder if it can not find the file in the current directory.
modify the implicit compilation rule for header files: CPPFLAGS = -I include

In general, it is good to use variable name to represent external programs.

gcc & g++: GNU C/C++ Compiler

"An introduction to GCC" by Brian Gough

gcc -Wall hello.c -ohello

-Wall turns on all the most commonly-used compiler warnings.

"-c" is used to compile a source file to an object file. When compiling with "-c" the compiler automatically creates an object file whose name is the same as the source file, with '.o'.

To link object files together:
gcc main.o hello_fn.o -o hello (the only place we don't need -Wall)

Traditional behavior of compiler and linkers is to search for external functions from left to right in the object files specified on the command line. It's best to follow this.

In general, linking is faster than compilation.

The compiler option '-lName' will attempt to link libName.so firstly or libName.a if libName.so is not found.

Link order of libraries: A library which calls external function defined in another library should appear before the library containing the function. As for object files, most current compilers will search all libraries, regardless of order.

By default, gcc searches the following directories for header files (include path):
usr/local/include
usr/include

and the following directories for libraries (link path):
usr/local/lib
usr/lib

'-I' add directories to the include path

'-L' add directories to the library search path (or link path)

.a static library

.so shared object

static linking can be forced with the '-static' option to gocc to avoid the use of shared libraries.

Thursday, January 17, 2008

A regular Expression Matcher

Beautiful code Chapter one
The practice of programming Chapter nine

/* match: search for regexp anywhere in text */
int match(char *regexp, char *text)
{
if (regexp[0] == '^')
return matchhere(regexp+1, text);
do { /* must look even if string is empty */
if (matchhere(regexp, text))
return 1;
} while (*text++ != '\0');
return 0;
}

/* matchhere: search for regexp at beginning of text */
int matchhere(char *regexp, char *text)
{
if (regexp[0] == '\0')
return 1;
if (regexp[1] == '*')
return matchstar(regexp[0], regexp+2, text);

if (regexp[0] == '$' && regexp[1] == '\0')
return *text == '\0';
if (*text!='\0' && (regexp[0]=='.' || regexp[0]==*text))
return matchhere(regexp+1, text+1);
return 0;
}

/* matchstar: search for c*regexp at beginning of text */
int matchstar(int c, char *regexp, char *text)
{
do { /* a * matches zero or more instances */
if (matchhere(regexp, text))
return 1;
} while (*text != '\0' && (*text++ == c || c == '.'));
return 0;
}



Monday, January 14, 2008

新东方老师语录

[俞敏洪] 做人如水,做事如山。

  [俞敏洪] 人生最重要的价值是心灵的幸福,而不是任何身外之物。

  [俞敏洪] 艰难困苦是幸福的源泉,安逸享受是苦难的开始。

  [俞敏洪] 让我们全心全意地收获生活的每一天,在平凡的日子里感受生命的美好,在耕耘里感受劳动的快乐和收获的期待。

  [俞敏洪] 生活中其实没有绝境。绝境在于你自己的心没有打开。你把自己的心封闭起来,使它陷于一片黑暗,你的生活怎么可能有光明!封闭的心,如同没有窗户的房间,你会处在永恒的黑暗中。但实际上四周只是一层纸,一捅就破,外面则是一片光辉灿烂的天空。

  [俞敏洪] 思想是人的翅膀,带着人飞向想去的地方。

  [俞敏洪] 上帝制造人类的时候就把我们制造成不完美的人,我们一辈子努力的过程就是使自己变得更加完美的过程,我们的一切美德都来自于克服自身缺点的奋斗。

  [俞敏洪] 为了不让生活留下遗憾和后悔,我们应该尽可能抓住一切改变生活的机会。

  [俞敏洪] 生命,需要我们去努力。年轻时,我们要努力锻炼自己的能力,掌握知识、掌握技能、掌握必要的社会经验。机会,需要我们去寻找。让我们鼓起勇气,运用智慧,把握我们生命的每一分钟,创造出一个更加精彩的人生。

  [俞敏洪] 运气永远不可能持续一辈子,能帮助你持续一辈子的东西只有你个人的能力。

   [俞敏洪] 谁说“机会面前,人人平等”,新东方相信,个人奋斗制胜、攫取成功的精神财产将永远贫富不均。在浩瀚的生命之岸,你应该自豪地告诉世界,你 追求过,你奋斗过,你为辉煌的人生从来没有放弃过希望,从来没有停止过拼搏。而这个造就了万物的世界也将自豪而欣慰地回答你:只要奋斗不息,人生终将辉 煌。

  [俞敏洪] 有些人一生没有辉煌,并不是因为他们不能辉煌,而是因为他们的头脑中没有闪过辉煌的念头,或者不知道应该如何辉煌。

   [俞敏洪] 在我们的生活中最让人感动的日子总是那些一心一意为了一个目标而努力奋斗的日子,哪怕是为了一个卑微的目标而奋斗也是值得我们骄傲的,因为 无数卑微的目标积累起来可能就是一个伟大的成就。金字塔也是由每一块石头累积而成的,每一块石头都是很简单的,而金字塔却是宏伟而永恒的。

   [俞敏洪] 新东方“在绝望中寻找希望”这句话,跟美国著名的民权运动家Martin Luther King所说的话是一模一样的,他在I have a dream演讲词中说过:"We will hew out of the mountain of despair a stone of hope."(我们从绝望的大山中砍出一块希望的石头。)请记住,绝望是大山,但是只要你能砍出一块希望的石头,你就有了希望。

  [俞敏洪] 哪怕是最没有希望的事情,只要有一个勇敢者去坚持做,到最后就会拥有希望。

  [俞敏洪] 所有的人都是凡人,但所有的人都不甘于平庸。我知道很多人是在绝望中来到了新东方,但你们一定要相信自己,只要艰苦努力,奋发进取,在绝望中也能寻找到希望,平凡的人生终将会发出耀眼的光芒......

   [俞敏洪] 光有奋斗精神是不够的,还需要脚踏实地一步一步地去做。要先分析自己的现状,分析自己现在处于什么位置,到底具备什么样的能力,这也是一种 科学精神。你给自己定了目标,你还要知道怎么样去一步一步地实现这个目标。从某种意义上说,树立具体目标和脚踏实地地去做同等重要。

  [俞敏洪] 人生的奋斗目标不要太大,认准了一件事情,投入兴趣与热情坚持去做,你就会成功。

  [俞敏洪] 成功没有尽头,生活没有尽头,生活中的艰难困苦对我们的考验没有尽头,在艰苦奋斗后我们所得到的收获和喜悦也没有尽头。当你完全懂得了"成功永远没有尽头"这句话的含义时,生活之美也就向你展开了她迷人的笑容。

  [王 强] 一个人生活中的失意乃至失败在很大程度上来说是心理的而不是现实的,是技术性的而不是宿命的。现实至多为失败者提供了解脱的借口,而对宿命的信仰最终无情地扑灭了成功的任何希望。

  [徐小平] 人生有五颜六色的价值观,但一种价值观一旦被你认可,你就可能一辈子追求这个价值观而无怨无悔;世界有千紫万红的思想,但你只要接受其中一种,你就能够终生信奉它而至死不逾。

  [钱永强] 对一个年轻人而言最重要的是个人价值的增加。

  [钱永强] 我所不懈追求的是:不断增加自己的价值。

  [钱永强] 千万别摸着石头过河,要清楚最终追求是什么,究竟想成为什么样的人,当别人都迷迷糊糊的时候,你千万别也迷迷糊糊的。

  [钱永强] 对于年轻人而言,最重要的品质是诚实正直,这是做成大事的基础;其次是分析问题的方法,如何全面、有前瞻性地分析问题,不走弯路,是取得成功的关键;最后是技能,不断地学习挑战自己,增加自己的价值是作为一个人应当不断追求的目标。

  [钱永强] 我只是个一般人,只不过没有浪费过时间。每一段时间我都清楚自己有一个目标,也有毅力能够坚持实现这个目标。做任何事情的时候都要有怀疑精神,这样才能不断地去分析、思考,使自己不走弯路,不断地调整自己。

  [钱永强] 我做事情的重点并不是做事情的过程中选择最有效的方法,重点是把事情做成,只有能够把事情做成的方法才是正确的方法。

  [周成刚] 只有倒空自己,才能学到更多。

  [周成刚] 在30岁的时候我就看见了自己60岁的生活,还有什么意思?我一次次地放弃,赢得的是一次次崭新的经历;那一个个个性迥异的城市,给了我迥异的生活与改变困境的本能。

  [沙云龙] 只要你选择了一条路,别人肯定会为你让路。

  [杜 伟] 人生永远都是一种balance 。当你得到某个东西的时候,就意味着你在失去;当你失去某个东西的时候,就意味着你在得到。无论失去和得到都不需要高兴,因为这都是有代价的,只不过有的代价你能看得见,而有的代价你看不见。

  [杜 伟] 如果你真的下决心做一件事,那全世界都会给予你帮助。

  [杜 伟] 一个人的成功不取决于他的智慧,而是毅力,Never quit, keep up with it。

  [梁宏才] 没有承受困难的能力,就没有希望了。

  [梁宏才] 在你生命中确有一个你所喜欢的目标,然后就朝着目标勇往直前。当你把你的一切都投入到你所喜欢的事业上时,你会发现,你所渴望的机会一个接一个全都掌握了。就如同珊瑚静止在水中,它所需要的原生物却不断地送上门来。

   [梁宏才] 人的发展历程就像爬山,每登上一个高度都能看到更远更美的风景。很多人留恋眼前的风景,不愿继续努力前行。只有一少部分人,才敢于向上攀 登。只有这些人才能到达那些更高更远的风景,也只有这些人才能体会到如果当初停下脚步会留下多少遗憾。只有他们能够居高临下地看待下面的登山者。

  [李 丰] 幸福的人生标准有二:一是拥有一份自己十分感兴趣的工作,二是拥有一位自己深爱的生活伴侣。

  [齐文昱] 当你非常沮丧、情绪低落的时候,去看看北京城里夜晚闪烁的灯火吧。看着那些温暖的灯,你会告诉自己:总有一天那里面会有一盏灯是我的!

  [屈建民] 做事不能进退两难,想清楚,不要做墙头草。

   [孙继军] 坚持是世界上最简单的事,因为只要你自己愿意去坚持就没有人可以阻止你,不让你去坚持;但坚持又是世界上最难的事,因为坚持到最后的人一定 是少数[就是成功者。其实人]都有惰性,成功者与失败者的差异就在于成功者能够在做事的过程中找到一种东西来克服自己的惰性而坚持自己的目标,但失败者却 不能。

  [王海波] 当你无法从一楼蹦到三楼时,不要忘记走楼梯。要记住伟大的成功往往不是一蹴而就的,必须学会分解你的目标,逐步实施。

  [王海波] 记住,来得太容易的东西绝对不是最好的。

  [王海波] 把一件事干到底就会成功!

  [王海波] 只要你想出国就一定能出,只不过是时间长短的问题,而最终没有出去的人都是中途放弃者。

  [王海波] 二十年后,中国的脊梁骨必定是留学生,尤其是留美的学生。那里集中了中国最优秀、最勤奋、经过了最残酷的淘汰的人才。而他们所接受的又是世界上最先进的教育。正如当年留日、留法、留俄的留学生们改变了中国一样,留美留加的学生也必定会在历史舞台上扮演无可替代的角色。记住,来得太容易的东西绝对不是最好的。

  [汪海涛] Every ebb awaits an overwhelming flow. 跨过人生低谷,飞跃前途险峰。

  [杨 鹏] 为了实现自己既定的目标,必须能耐得住寂寞单干。

  [白彦峰] 毫无疑问,坐在GRE课堂上的同学都是为了出国而走到一起的;但你们的动机却不尽相同。需要提醒的是,是不是为了知识而出国将决定奋斗的价值。

  [崔 蕊] 痛苦的秘密在于有闲功夫为自己是否幸福而烦恼。

  [戴 云] 别以为自己已经很努力了,比你努力的人多得是。在这个充满竞争的社会里,别人努力,你就要更努力。

   [党道远] 即便有时迫于生活的困境,你会去做家教、去做苦工、去廉价出卖你的劳动,但谁都没有资格看不起你,因为你是在靠自己的劳动养活自己,用自己 的双手去创造未来。或许今天你是一个怀揣梦想、不名一文的青年,但多年后或许你会拥有令人惊羡的成功,因为这些经历让你懂得了人生的真正含义。

  [段 枫] 学好外国语言,做好中国人。

  [高 樾] 你为了向别人、向世界证明自己而努力拼搏,而一旦你真的取得了成绩,才会明白:人无须向别人证明什么,只要你能超越自己。

  [郭 行] 你只希望坐在屋里得到窗口射进来的一缕阳光当然也可以,但有远见有毅力的人会探出头去看看窗外真正美丽多彩的世界。

  [韩 鹏] 置身卓越的环境并追求卓越,你也将变得卓越。

  [黄 颀] 失败的是事,绝不应是人。

  [黄 颀] 因为我们正在追逐幸福,所以不免要触摸痛苦。

  [乐 静] 自暴自弃者永远找不到方向。

  [李春怡] 做决定之前仔细考虑,一旦作了决定就要勇往直前、坚持到底。

  [李 力] 力量必须从自己身上寻找,你终究会发现:你是真正的强者!

  [鲁欢欢] 要勇敢!不要惧怕错误,没有错误你永远不会知道如何修正自己。

  [罗永浩] 失败只有一种,那就是半途而废。

  [李笑来] 坚持就有结果,辛苦必有收获。

  [李笑来] 不是每个人都可以兴风作浪,但当你的起伏与世界同步的时候,你就会得到共振。

  [宁 滨] 人年轻的时候经历种种磨难并不是件可怕的事情。经历过的事情,挫折也好,忧伤也罢,都会成为你生命中最宝贵的财富。坚持下去,你会发现这个世界上真正能够打败你的,只有你自己。

  [宁 滨] 每个人总会经历许许多多的失意与挫折,但当这些降临到你身上时,千万不要放弃。永远不要忘记你儿时的梦想,只有心中怀揣着火热的梦想时,人生才是美丽的。往往你会发现,当你坚持到最后时,一切的失意都会被成功的幸福所替代。

  [宁 滨] 我们走入生活,总以为前方会有一个莫大的幸福在等待着自己。但是蓦然回首,才发现幸福其实就在点点滴滴流逝的时光中。

  [宁 滨] 人的一生特别短暂。按平均寿命70年计算,扣掉少不经事的20年,扣掉老年痴呆的20年,一共只剩下30年的好时光。在这30年有限的光阴中,只要你认认真真地做过一件事,认认真真地爱过一个人,此生无悔。

   [宁 滨] 我们今天学习TOEFL,就是为了让中国真正强大起来,就是为了我们的子孙后代永远不要再学习TOEFL。当他们如我们一般青春年少时,他 们可以像美国的孩子一样,背着书包去周游世界,去享受阳光,享受沙滩,享受生命中所有的美好。而不必像他们的父辈一样,把如此宝贵的青春年华花在无聊的 TOEFL和GRE上。最后送给你们四个字,是我在这个班上对你们最后的祝愿和期盼:早去早回!

  [宁 滨] 贫穷不是一种耻辱。在贫穷的状态中甘于平庸、甘于堕落才是最可耻的事情。我们应该追求的是知识上的富有。知识上的富有,将使你终身受益。

  [宁 滨] 我们每一个人心中都应该有支点燃的蜡烛,通过我们的努力,这火焰才会变大、变亮。这心中的蜡烛就是我们为之不懈奋斗的目标。

  [彭新松] 有压力,但不会被压垮;迷茫,但永不绝望。

  [史学冬] 生命线、事业线和爱情线都在我们手中。

  [王进杰] 每一个人都会遇到困难挫折,被人瞧不起,受到拒绝,就看你自己

如何对待。你是一笑置之?还是为此浪费宝贵的时间,那是否值得?一个人要摆正自己的方向,朝着你既定的目标奋斗。

  [王进杰] 不要总是因为考虑长远的打算而忽略了随时可付出的努力!

  [王进杰] 如果一生只在一个地方停留,人生还有什么意义?赶路时别忘了看看身边的风景。

  [王昆嵩] 奋斗带来自由。

  [王文山] 幸福=身体好+有追求+有所爱

  [徐 晗] 生命本身就是奇迹,每个人都要勇敢地去梦想,勇敢地创造奇迹。

  [翁云凯] 能战胜别人的人是英雄!能战胜自己的人是圣人。

  [詹 晟] 如果世界上只有一个比尔"盖茨,那我不一定能成为他;如果世界上可以有一百个比尔"盖茨,那么我一定是其中的一个。

  [张雷冬] 人生并没有绝对的痛苦与幸福,有的只是一种状态与另一种状态的对比。

   [张红岩] 无论在失意的时候还是得意的时候,我总是用下面的寓言来激励自己:静谧的非洲大草原上,夕阳西下,这时,一头狮子在沉思,明天当太阳升起, 我要奔跑,以追上跑得最快的羚羊;此时,一只羚羊也在沉思,明天当太阳升起,我要奔跑,以逃脱跑得最快的狮子。那么,无论你是狮子或是羚羊,当太阳升起, 你要做的,就是奔跑!

  [张建成] 人生最艰难的时候就是离胜利最近的时候。

  [张建宇] 把你的手举过你的头顶,你会发现你的手总比你的头要高,说明做事情总比想事情重要,实实在在的去做些什么吧!

  [张晓楠] 善于利用零散时间的人,才是最成功的人。往往差异就产生于这些零散的时间中。

  [张晓楠] 其实我们每个人都有一种癌症,那就是死亡。我们终将会离去,但有些人将梦想带进了坟墓,而有些人就在今天去做,珍惜今天的每一分钟,这就是平庸和杰出的唯一区别。

  [赵东坡] 在逆境中,要能够战胜自己,寻求生活中的乐趣。

Sunday, January 13, 2008

Website development Tools

Apache

PHP

MySQL

all-in-one package

WAMP

http://www.wampserver.com/en/index.php

Friday, January 11, 2008

OpenSSH

For Windows: PuTTY

Monday, January 7, 2008

ODBC

ODBC: industry standard Open Database Connectivity (ODBC) API

Friday, January 4, 2008

MySQL

1. start mysql:
prompt> mysqld-nt

2. connect to mysql:
prompt> mysql -r root -p

3.

Thursday, January 3, 2008

My Skill Sets and Books

C

Object-Oriented Programming
C++

Operating System


Network Programming
1. Unix Network Programming

Script Languages
1. Leaning Perl (Llama Book)

Database

--------
Beautiful code