2006年5月31日

Python多线程编程[Zz]


Python线程编程(一)线程对象



我们在做软件开发的时候很多要用到多线程技术。例如如果做一个下载软件象flashget就要用到、象在线视频工具realplayer也要用到因为要同时下载media stream还要播放。其实例子是很多的。

线程相对进程来说是“轻量级”的,操作系统用较少的资源创建和管理线程。程序中的线程在相同的内存空间中执行,并共享许多相同的资源。

python中如何创建一个线程对象

如果你要创建一个线程对象,很简单,只要你的类继承threading.Thread,然后在__init__里首先调用threading.Thread__init__方法即可

import threading
class mythread(threading.Thread):
def __init__(self, threadname):
threading.Thread.__init__(self, name = threadname)
....

这才仅仅是个空线程,我可不是要他拉空车的,他可得给我干点实在活。很简单,重写类的run()方法即可,把你要在线程执行时做的事情都放到里面

import threading
import time
class mythread(threading.Thread):
def __init__(...):
....
def run(self):
for i in range(10):
print self.getName, i
time.sleep(1)

以上代码我们让这个线程在执行之后每隔1秒输出一次信息到屏幕,10次后结束

getName()threading.Thread类的一个方法,用来获得这个线程对象的name。还有一个方法setName()当然就是来设置这个线程对象的name的了。

如果要创建一个线程,首先就要先创建一个线程对象

mythread1 = mythread('mythread 1')

一个线程对象被创建后,他就处于“born”(诞生状态)

如何让这个线程对象开始运行呢?只要调用线程对象的start()方法即可

mythread1.start()

现在线程就处于“ready”状态或者也称为“runnable”状态。

奇怪吗?不是已经start了吗?为什么不称为“running”状态呢?其实是有原因的。因为我们的计算机一般是不具有真正并行处理能力的。我们所谓的多线程只是把时间分成片段,然后隔一个时间段就让一个线程执行一下,然后进入“sleeping ”状态,然后唤醒另一个在“sleeping”的线程,如此循环runnable->sleeping->runnable... ,只是因为计算机执行速度很快,而时间片段间隔很小,我们感受不到,以为是同时进行的。所以说一个线程在start了之后只是处在了可以运行的状态,他什么时候运行还是由系统来进行调度的。

那一个线程什么时候会“dead”呢?一般来说当线程对象的run方法执行结束或者在执行中抛出异常的话,那么这个线程就会结束了。系统会自动对“dead”状态线程进行清理。

如果一个线程t1在执行的过程中需要等待另一个线程t2执行结束后才能运行的话那就可以在t1在调用t2join()方法

....
def t1(...):
...
t2.join()
...

这样t1在执行到t2.join()语句后就会等待t2结束后才会继续运行。

但是假如t1是个死循环的话那么等待就没有意义了,那怎么办呢?可以在调用t2join()方法的时候给一个浮点数做超时参数,这样这个线程就不会等到花儿也谢了了。我等你10s,你不回来我还不允许我改嫁啊?:)

def t1(...):
...
t2.join(10)
...

如果一个进程的主线程运行完毕而子线程还在执行的话,那么进程就不会退出,直到所有子线程结束为止,如何让主线程结束的时候其他子线程也乖乖的跟老大撤退呢?那就要把那些不听话的人设置为听话的小弟,使用线程对象的setDaemon()方法,参数为bool型。True的话就代表你要听话,我老大(主线程)扯呼,你也要跟着撤,不能拖后腿。如果是False的话就不用那么听话了,老大允许你们将在外军命有所不受的。需要注意的是setDaemon()方法必须在线程对象没有调用start()方法之前调用,否则没效果。

t1 = mythread('t1')
print t1.getName(),t1.isDaemon()
t1.setDaemon(True)
print t1.getName(),t1.isDaemon()
t1.start()
print 'main thread exit'

当执行到 print 'main thread exit' 后,主线程就退出了,当然t1这个线程也跟着结束了。但是如果不使用t1线程对象的setDaemon()方法的话,即便主线程结束了,还要等待t1线程自己结束才能退出进程。isDaemon()是用来获得一个线程对象的Daemonflag状态的。

如何来获得与线程有关的信息呢?

获得当前正在运行的线程的引用

running = threading.currentThread()

获得当前所有活动对象(即run方法开始但是未终止的任何线程)的一个列表

threadlist = threading.enumerate()

获得这个列表的长度

threadcount = threading.activeCount()

查看一个线程对象的状态调用这个线程对象的isAlive()方法,返回1代表处于“runnable”状态且没有“dead

threadflag = threading.isAlive()








Python线程编程(二)简单的线程同步



    多个执行线程经常要共享数据,如果仅仅读取共享数据还好,但是如果多个线程要修改共享数据的话就可能出现无法预料的结果。

    假如两个线程对象t1t2都要对数值num=0进行增1运算,那么t1t2都各对num修改10次的话,那么num最终的结果应该为20。但是如果当t1取得num的值时(假如此时num0),系统把t1调度为“sleeping”状态,而此时t2转换为“running”状态,此时t2获得的num的值也为0,然后他把num+1的值1赋给num。系统又把t2转化为“sleeping”状态,t1为“running”状态,由于t1已经得到num值为0,所以他也把num+1的值赋给了num1。本来是2次增1运行,结果却是num只增了1次。类似这样的情况在多线程同时执行的时候是有可能发生的。所以为了防止这类情况的出现就要使用线程同步机制。

    最简单的同步机制就是“锁”

    锁对象用threading.RLock类创建

    mylock = threading.RLock()

    如何使用锁来同步线程呢?线程可以使用锁的acquire() (获得)方法,这样锁就进入“locked”状态。每次只有一个线程可以获得锁。如果当另一个线程试图获得这个锁的时候,就会被系统变为“blocked”状态,直到那个拥有锁的线程调用锁的release() (释放)方法,这样锁就会进入“unlocked”状态。“blocked”状态的线程就会收到一个通知,并有权利获得锁。如果多个线程处于“blocked”状态,所有线程都会先解除“blocked”状态,然后系统选择一个线程来获得锁,其他的线程继续沉默(“blocked”)。

import threading
mylock = threading.RLock()
class mythread(threading.Thread)
    ...
    def run(self ...):
        ...     #此处 不可以 放置修改共享数据的代码
        mylock.acquire()
        ...     #此处 可以 放置修改共享数据的代码
        mylock.release()
        ...    
#此处 不可以 放置修改共享数据的代码

    我们把修改共享数据的代码称为“临界区”,必须将所有“临界区”都封闭在同一锁对象的acquire()release()方法调用之间。

    锁只能提供最基本的同步级别。有时需要更复杂的线程同步,例如只在发生某些事件时才访问一个临界区(例如当某个数值改变时)。这就要使用“条件变量”。

    条件变量用threading.Condition类创建

    mycondition = threading.Condition()

    条件变量是如何工作的呢?首先一个线程成功获得一个条件变量后,调用此条件变量的wait()方法会导致这个线程释放这个锁,并进入“blocked”状态,直到另一个线程调用同一个条件变量的notify()方法来唤醒那个进入“blocked”状态的线程。如果调用这个条件变量的notifyAll()方法的话就会唤醒所有的在等待的线程。

    如果程序或者线程永远处于“blocked”状态的话,就会发生死锁。所以如果使用了锁、条件变量等同步机制的话,一定要注意仔细检查,防止死锁情况的发生。对于可能产生异常的临界区要使用异常处理机制中的finally子句来保证释放锁。等待一个条件变量的线程必须用notify()方法显式的唤醒,否则就永远沉默。保证每一个wait()方法调用都有一个相对应的notify()调用,当然也可以调用notifyAll()方法以防万一。








Python线程编程(三)同步队列



我们经常会采用生产者/消费者关系的两个线程来处理一个共享缓冲区的数据。例如一个生产者线程接受用户数据放入一个共享缓冲区里,等待一个消费者线程对数据取出处理。但是如果缓冲区的太小而生产者和消费者两个异步线程的速度不同时,容易出现一个线程等待另一个情况。为了尽可能的缩短共享资源并以相同速度工作的各线程的等待时间,我们可以使用一个“队列”来提供额外的缓冲区。

创建一个“队列”对象

import Queue
myqueue = Queue.Queue(maxsize = 10)

Queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。

将一个值放入队列中

myqueue.put(10)

调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为1。如果队列当前为空且block1put()方法就使调用线程暂停,直到空出一个数据单元。如果block0put方法将引发Full异常。

将一个值从队列中取出

myqueue.get()

调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为1。如果队列为空且block1get()就使调用线程暂停,直至有项目可用。如果block为0,队列将引发Empty异常。

我们用一个例子来展示如何使用Queue

# queue_example.py
from Queue import Queue
import threading
import random
import time

# Producer thread
class Producer(threading.Thread):
def __init__(self, threadname, queue):
threading.Thread.__init__(self, name = threadname)
self.sharedata = queue
def run(self):
for i in range(20):
print self.getName(),'adding',i,'to queue'
self.sharedata.put(i)
time.sleep(random.randrange(10)/10.0)
print self.getName(),'Finished'

# Consumer thread
class Consumer(threading.Thread):
def __init__(self, threadname, queue):
threading.Thread.__init__(self, name = threadname)
self.sharedata = queue
def run(self):
for i in range(20):
print self.getName(),'got a value:',self.sharedata.get()
time.sleep(random.randrange(10)/10.0)
print self.getName(),'Finished'

# Main thread
def main():
queue = Queue()
producer = Producer('Producer', queue)
consumer = Consumer('Consumer', queue)

print 'Starting threads ...'
producer.start()
consumer.start()

producer.join()
consumer.join()

print 'All threads have terminated.'

if __name__ == '__main__':
main()

示例代码中实现了两个类:生产者类Producer和消费者类Consumer。前者在一个随机的时间内放入一个值到队列queue中然后显示出来,后者在一定随机的时间内从队列queue中取出一个值并显示出来。




2006年5月30日

Doing better research and project



今天又是“源头活水来”的一天。

上午的英语课上,我完成了这学期的第二个英语报告,题目是“How to do research? In my view”。报告很成功,老师一贯的给每位同学提了一些建议。给我的建议有这么几条:(1)说“我完成了很多工作”时,不用“I have done so many works”,而要用“I have done so much work”;(2)发音中有一个单词需要纠正一下,那就是analyze,一定要分清它的名词形式analysis二者的发音;(3)演讲过程中注意去掉多余的"ok",否则显得不够正式。这是今年来,我第二次收到别人对于我的英语的建议。感觉这种建议非常的好,我可以好好的有针对性的提高一下。我的演讲内容包括了自己三年以来做研究的一些经验和心得。对于研究的感觉,我是“It is exciting with depressed, just like on wave.”老师说,这么多年来,我是第一个她看到的对研究exciting的人,从我的演讲之中确实发现我对研究充满激情。我的演讲也引来了几位同学的一些讨论,针对这些问题我们也进行了很好的讨论和交流。确实,在我的博士英语班同学面前谈如何作研究,确实有点班门弄斧。但是还好的是得到了一些对于研究感受的共鸣。我研究的最后观点是,(1)研究是一个充满着激动和沮丧的过程,需要不断的激动和不断的沮丧。只有经历了这种过程的不断迭代才能成为一位真正的Researcher;(2)研究是一个整体的过程,需要认真的去提高各个步骤的能力,掌握的技巧越多,越能高效的完成你的研究;(3)做项目,对于做研究是一种互补,把项目当成研究,把研究当成项目,可以实现鱼和熊掌兼得;(4)保持激情,保持阅读,多多思考,多多动手,最后你会像我一样热爱研究。

我的研究结束语是,“I love research! And you?”

晚上的时候,实验室的Coding Group请到了IBM俱乐部的负责人吴晋老师。吴老师在项目开发方面经验非常丰富。他指导的俱乐部多数成成员都是大二大三的学生,但是却在国内的很多重量级的编程大赛中取得了非常那个卓越的成绩。其中除了吴老师的个人魅力之外,就是他对项目管理的一整套的心得体会。

在短短的一个半小时中,我们聊到了很多很多的话题。我非常感兴趣的几个问题是:
(1)如何引导高校中参加项目的学生很好的完成项目?
(2)对于一些非常好的软件工程工具软件的使用情况如何?
(3)有没有一些特殊的小组合作方式?

讨论得到的结论是:
(1)需要针对具体的同学来具体设定每个学生在项目开发中的角色。比如通过小组成员轮流主持讨论会的方式来考察学生项目管理的爱好情况和能力,或者在介绍完每个项目之后通过查看每位同学对项目的看法来了解学生然后分配具体的角色。

(2)高校中采用大二大三指导学生来完成工作的合作模式需要一些和在公司中开发软件不同的方法。需要针对目前具体的问题来具体分析如何使用一些非常时髦的软件工程软件。现在能够使用到的软件主要包括:wiki, gf的项目管理网站,cvs的代码管理,单元测试测工具,bug管理的软件等等。各个软件的使用都需要一些时间来揣摩具体的小组合作模式。

(3)上面提到的wiki是一种非常好的合作模式。在其中可以非常方便的进行协同开发文档。比如小组例会定义好的任务列表,具体的项目开发文档,甚至完成的代码等,都可以在其中非常好的完成。而且可以形成非常恰当的经验积累,对于后来的成员和项目管理可以起到很好的实例教学的功能。

现在,我正在我负责的CR四人小组中扮演着一个项目管理者的角色。在吴老师的这次座谈之中体会到了很多。我会将一些比较好的模式推广到我们小组中的。非常巧的是,在座谈会之后,我们的四人CR小组召开了我们的每周例会。今天主要是忻舟和立正华介绍了两片xiaofeng yang的论文,其中我们学习了一些很好的技巧来改善我们目前的指代消解研究工作。之后的常规讨论我们各自简述了一周的工作和项目进展和下周的计划。

嗯,总体感觉,今天收获巨大。可以好好的指导我们下一步的研究和项目工作。

2006年5月29日

问渠哪得清如许

记得初中毕业的时候,我最尊敬的数学老师送给我一句话,“问渠哪得清如许,唯有源头活水来”。今天是执行俺的最新的个人事务管理计划的第一天。今天下来最大的感受是,阅读论文太重要了。现在得到的结论是,当你对研究没有激情的时候需要认真的阅读几篇相关的论文,那样你的那一坛水就能重新变得清澈起来。

今天,我主要阅读了三篇论文,两篇是NLPXML系列的,一篇是关于共指消解的。NLPXML的文章都是2001年首届会议的。其中提到的一些想法和做法都和我们现在实现的工作类似。这个问题也说明,我们现在的工做比国外落后了五年左右。还好,现在借助于这次阅读论文的机会可以很好的弥补这种差距。指代消解的论文是ICML2005的一篇指代消解的论文。其中提到的一个非常好的观点是,对于特定的机器学习任务,需要优化的有Sample selection, feature selection, feature representation, parameters choosing,和data validation。这整个的优化空间非常巨大,不能仅仅根据一些特定的设置来完成一些相关的机器学习任务。事实上,作者在UCI数据和共指消解的数据集上完成的工作都体现了这个结果。这个结论非常的有意义。以往我们关注于机器学习方法的选择的研究手段是不合理的,应该更多的关注到对问题的理解和建模。

这些新鲜的想法就像一记清水,注入我当前的研究和开发之中。现在对于研究,我的感觉又恢复到Exciting状态了。哈哈,实现逆转了。加油吧,我会更加努力的。Keep reading everyday. It will refresh you everyday!

2006年5月28日

NLPXML

找到这个系列,决定好好学习,然后结合我正在完成的项目添加一些新的理念在里面。

地址:NLPXML Workshop Series http://www.ling.helsinki.fi/~gwilcock/NLPXML/

NLPXML Workshop Series

1st NLP and XML Workshop (NLPXML-2001), Tokyo, 30 November 2001

2nd Workshop on NLP and XML (NLPXML-2002), Taipei, 1 September 2002
Language Technology and the Semantic Web:
3rd Workshop on NLP and XML (NLPXML-2003), Budapest, 13 April 2003

RDF/RDFS and OWL in Language Technology:
4th Workshop on NLP and XML (NLPXML-2004), Barcelona, 25 July 2004

Multi-dimensional Markup in Natural Language Processing:
5th Workshop on NLP and XML (NLPXML-2006), Trento, 4 April 2006


2006年5月27日

爱上“数学之美 系列”

近来,Google黑板报(http://googlechinablog.com/)推出了研究员吴军撰写的“数学之美 系列”。现在能够看到的文章有如下几篇:

数学之美 系列一 -- 统计语言模型
数学之美 系列二 -- 谈谈中文分词
数学之美 系列三 -- 隐含马尔可夫模型在语言处理中的应用
数学之美系列 4 -- 怎样度量信息?
数学之美系列五 -- 简单之美:布尔代数和搜索引擎的索引
数学之美系列六 -- 图论和网络爬虫 (Web Crawlers)
数学之美 系列七 -- 信息论在信息处理中的应用

昨天和今天,我把这几篇文章从头到尾认真的阅读了一遍。其中领会到了很多的东西。比如信息熵计算公式的来由,网络爬虫的原理和基本方法。现在我感觉自觉哦非常喜欢这个系列的文章,期待出现更多的相关文章。推荐大家也学习一下。

学习别人的东西,要抱着批判的眼光。在学习这几篇文章的时候我发现了一个问题。那就是“数学之美 系列一 -- 统计语言模型”在估计P(wi|wi-1)时的那段说明。帖子中的这段描述原文如下:


接下来的问题就是如何估计 P (wi|wi-1)。现在有了大量机读文本后,这个问题变得很简单,只要数一数这对词(wi-1,wi) 在统计的文本中出现了多少次,以及 wi-1 本身在同样的文本中前后相邻出现了多少次,然后用两个数一除就可以了,(P(wi|wi-1) = P (wi)/[P(wi-1,wi)]。


结合自己学习NLP时候的感觉,这段描述好像存在一些问题。我觉得应该修改为如下内容:


接下来的问题就是如何估计 P (wi|wi-1)。现在有了大量机读文本后,这个问题变得很简单,只要数一数这对词(wi-1,wi) 按照wi-1wi形式在统计的文本中出现了多少次,以及 wi-1 本身在同样的文本中出现了多少次,然后用两个数一除就可以了,(P(wi|wi-1) = C (wi-1wi)/C (wi-1),C表示计数)。


原文中的概率公式P(wi|wi-1) = P (wi)/[P(wi-1,wi)]好像也写错了。

呵呵,可能算是有点较真了,不过,扣除这点瑕疵,我还是非常喜欢Google的黑板报的。从这里了解到了很多Google中国的情况,但愿自己有一天能够到那里实习一下,也好体验一下那种Google的文化和自由。

2006年5月26日

摇滚.经典中国 哈尔滨啤酒两岸三地巨星演唱会

昨天晚上,有幸和亚杰一起参加了哈尔滨国际会展体育中心体育场举行的“摇滚.经典中国 哈尔滨啤酒两岸三地巨星演唱会”。这是俺这辈子第一次亲临演唱会,总算是感受到了那种演唱会上的歌迷的热情。演出明星有黄贯中、伍佰、许巍、黑豹、胡彦斌。

演唱会节目单

黄贯中:光辉岁月、海阔天空、愿我能、季节、我在存在
黑豹: 无地自容、错觉、别去糟蹋、DONT BREAK MY HEART、I DONT WANNA SAY GOOD-BYE
许巍: 曾经的你、蓝莲花、礼物、旅行
胡彦斌: 红颜、我的未来不是梦、WAITING FOR YOU、皇帝
伍佰: 挪威森林、白鸽、浪人情歌、泪桥

感觉非常不错!在演唱会现场看到了亚杰的一位高中同学。同学相见,总是那么的亲切和热情,我们聊到了很多。哈哈,这个同学管我叫“妹夫”。还真是有点不习惯呀^_^

演唱会上,各位歌星非常的卖力,我最喜欢的歌手是伍佰和胡彦斌,《白鸽》和《红颜》我觉得非常不错。演唱会现场的真是人山人海,体育场四面都坐满了人,简单算算应该有1万多人吧。现场的音效以及各种烟雾、灯光,让人非常的震撼。

嗯,感觉非常不错的!

2006年5月25日

个人时间管理实践-时间规划

当你有很多的工作需要完成的时候,我认为时间管理和分配就显得非常的重要了。记得本科时代,我经常作的一件事情就是将自己的时间片在草纸上整理出来,同时把需要完成的事情也列在纸上,然后开始逐一的匹配和协调,之后就是严格的执行。这种工作几乎每个月至少进行一次。进入研究生一以来,我经常感觉到自己需要完成的事情非常多,但是经常出现的情况是我的时间分配很混乱,经常不清楚究竟自己分配了多少时间在各个点上,久而久之就形成了恶性循环,自己也变得越来越忙了。呵呵,最近有类似感觉的朋友请注意反思一下自己最近的时间分配情况,可能你的不断忙碌就是由于时间没有好好分配的原因。

找到了自己近来一直忙碌的原因,这下可要好好的治理一下了。我拿出自己心爱的几个软件之一的MindManager,开始将自己本科时代的那种规划方法发挥了一下。哈哈,在这个软件上进行时间规划可真是非常方便呀。几下子下来,俺对于自己一周的时间和需要完成的任务真是一清二楚了。扣除周末的休息时间,俺现在觉得自己的时间和任务刚好能够匹配上的,而且各个方面都考虑到了。

看到自己安排完成的时间表,俺觉得自己一下子理清了自己以往混乱的状态。但是在各个任务上的细节好没有详细的安排出来。这个工作我需要在明天再花上一天时间来好好完成。磨刀不误砍柴功,俺深知这个道理。这次时间规划俺会非常认真的对待的。因为,太累的感觉很不好,需要好好的调整一下了。

朋友,如果你也很累,那也磨一下刀吧^_^

[转载]做时间的主人

link: http://www.heartnet.com.cn/heart/culture_and_education/c72.htm

时间管理的目的,是要帮助人们最有效率地运用时间,以完成其人生目标。时间管理得好,你就能尽量做完该做的事,并能享受你所做的事。

“时间管理”,看来毫无新意,其实意义远大于“管理时间”。因为时间若利用不当,压力就会接踵而来,而生活也随之变得杂乱无章。所以时间管理,是压力管理,更是生命管理。

▲时间管理妙守则

分析时间运用现状:请以15分钟为单位,记录你每天的时间花费方式,三四天后,你会恍然大悟,为何自己总是成天嚷嚷着“没时间,我没时间”了。

列出生活目标:接下来,请把你现阶段的生活目标明确地列出。在这儿要写的,是全方位的生活目标,包括工作、人际关系(家人及朋友)、个人保健(运动、保养等),以及自我实现(嗜好兴趣、学习进修)等各方面。别忘了,一个平衡的生活状态,才是真正丰富的生命成就。

排出重要次序:现在则要把每个订出来的目标,依序列出其重要性。

以周为单位做规划:最好的时间安排是以一星期为蓝本,如此既不失全面性,又能保有适应变化的弹性。

排定每天的生活计划:为了达成一周的生活目标,每天都该有进度分配。分配进度越具体越好,例如“写企划案两小时”就十分模糊,改为“完成企划案前两大项”更易遵循。

▲事半功倍小技巧

善用身体的自然律动:我们的身体依照内在的生物钟,在一天之中有着不同的能量表现,如果能顺着生理律动来安排时间,可以达到事半功倍的效果。

早上9点到11点为“企划时间”:此时我们的思考、组织、计划能力最强,反应最敏捷,最适合做用脑多的企划工作。

早上重量点到中午重2点为“决案时间”:短程记忆和推理能力在早上11点到达高峰,而临近中午时则是做出复杂决定的最佳时机,因此这段时间用来开会很不错。

下午重点到2点为“创意时间”:在下午2点左右,我钉刁的想象力最丰富,若要写信、作诗或想些新点子,蛔擞宜。

下午3点到5点为“整理时间”:下午3点,身体各项功能都“跌停板”,最适合做些不太需动脑的事,例,如回电话、打字、整理档案等。不过值得一提的是,此时长期记忆还不错,所以可以复习外语,恶补新学习的工作技能等。

下午5点到7点为“运动时间”:我们的体能在下午5点达到最高峰,反射动作快,身体协调能力佳。想健身瘦身的你,快换上运动服,用力流汗吧。

由难到易,不要拖延:一旦订出了每天的生活计划,就得好好地遵守才行,要不然会前功尽弃。如果你感到知易行难,那就找一位好友来相互监督,甚至订出惩罚条款,给自己更多动力。

万万不可事必躬亲:时间只会消逝,不会增多。挑出别人可代劳的事项,以及你该说“不”的活动。避开这些事情,留出时间做真正重要的事情。

留出弹性空白时间:请别把时间表排得分秒必争,这样只会增加压力,减少产能。各项活动间留一些空白时间,以便应急,或是用来调整心情。

做了总比没做好:如果你是个完美主义者,总是得等到“准备好了”才行动,那就很可能会成为“一直心动,却无行动”的“拖延大王”相信自己,像你这样的自我要求很高者,表现是不会太离谱的。所以当心中那个“再计划看看”的声音又冒出来时,别忘了大声吼回去“先动手看看”,在行动的过程中可以再修正计划。

别总是一心多用:有时,你的确可以、也应该一心多用。例如,利用等车的时间看看书,再加上听听音乐,一举三得。然而,如果按照“一心多用”这个原则安排所有的时间,那恐怕就要大乱。一般情况下,一次只做一件事,惟有专注于某个当下,才能免去焦虑,创造奇迹。

最后想再次提醒你的是,时间是我们最真诚的朋友,却也是最可敬的敌人。管理好时间,也就意味着经营好生命。

(香港《文章分享》)
参考消息 2004.6.8



2006年5月24日

出关,重整!

前一阵子,算是好好得闭关了一阵子,今天俺出关了。现在得任务就是好好的睡上两觉(因为今天总感觉睡不醒似的),然后将前一段时间没有完成的一些紧急而不重要的事情完成,比如给爸爸寄衣服、理发、帮高中同学找学校数学系的考研专业课卷子等等。

忙完这些,我开始准备将前一段时间中断的事情,比如“三天不练,生”的百日计划好好的的执行下去。还有非常重要的事情,就是研究计划的重新制定和执行。还好,昨天完成和我负责指导的三位同学开了个小会,其中定好了我们开会的时间、地点、形式、讨论内容、小组论文学习计划等等。以往我非常清楚论文阅读的重要性。这一两个月来,我年初制定的每天一篇指代/共指消解论文的学习没有执行起来。本该快要完成的指代/共指消解综述第一稿也没有任何的眉目。原因是这学期一来一直在忙于语言技术平台的研发工作以及前一阵子的想要结束性别识别的研究工作。现在我需要重新调整自己的各种计划了。确实,现在需要完成的事情有很多很多。主要集中在共指消解研究的展开,语言技术平台设想的实现以及涉及到的项目管理、软件开发、编程语言学习等等问题,完成博士生课程,个人业余机器学习的开展。哈哈,这么多的事情,概要如何去完成呀?换作以前的我,我会说,这些事情同时进行根本完不成。但是,现在的我正在学习一种能力,那就是多项事务同时进行的能力,即分而治之的方法。在我的Bloig里面有不少关于个人时间管理的文章。这些文章,我也需要好好的重读一下,然后根据现在的情款来好好的完成各项事宜的安排。各个方面,只有都完成好了,才能有充分的心情和时间去享受周末的阳光和美丽的约会。

呵呵,这种能力是非常重要的,现在俺就好好的整理吧。我会把这些事情统统拿下的。当然,这件事情的难度还是非常非常大的,因为这不是一种轻易就能获得的能力。做到比想到困难的多。但是有句话叫实践是最好的老师。加上俺的理解,我认为,有良性反馈的实践是最好的老师。我会加油的!

2006年5月23日

How to do research? In my view.

This morning, in our Ph.D. candidate English writing class, I submitted my presentation outline. Nowadays, I has so much feelings on research. So my presentation topic is: "How to do research? In my view." The outline, is provided by our teacher. It is good for our speech. The outline is as following:


Speech Outline for “How to do research? In my view.”
Introduction
I. Reasons for this speech
a) The teaching plan requires it.
b) I have done so many works and some feelings on research and projects.
II. Purpose of this speech
a) Sharing the feeling on doing research with my classmates.
b) Discussing with classmates on how to do better research.
III. Statement of main ideas to be presented
a) Doing research is exciting and depressed. It’s a wave.
b) We should practise our abilities for all step of research
c) Doing project is needable for research.


Body
I. First main idea: feeling of research is fluctuant
a) Exciting: reading good paper, flash ideas, best result, submit paper, your paper is hired, you paper is published in jourals, presentation in proceedings
b) Depressed: reversed to a)
II. Second main idea: upgrade you ability in each step of research
a) Find paper
b) Read paper
c) New idea
d) Experiment design
e) Quickly doing your experiment(coding for CS)
f) Analysis you result
g) Goto a)
h) Write paper
i) Send to proceeding and journals
III. Thirs main idea: Doing project is good for research
a) Formal feeling is not good
b) The goodness of doing project
c) The basic ability of project and research is in consistent.


Conclusion:
I. Summary of significance:
a) Love research, keep going, you will do better
b) Keep learning everyday, the more the better
c) Project is needable for research
II. Recommandations
a) Keep enthusiasm and interest, they are best teacher for you.
b) Doing more, think more, you will do better in research




2006年5月22日

疯狂的写作,快速撰写论文

什么是疯狂的感觉?我不得而知。只知道今天的状态似乎就是这样的。昨天晚上将性别识别的论文彻底提交之后,我开始忙碌另外一篇论文:语言技术平台。这篇论文的完成时间只有一天,要求今天晚上12:00之前提交。一天的时间真是很短,还好有很多的素材可以参考,还有刘老师的鼎立支持。这篇论文是我和刘老师的第一次论文合作。老师负责论文的哲学和宏观方面,我负责论文技术细节、格式等其他部分。在我们以前开发LTP的历次讨论和文档之中,我找到了很多的文字,加上老师的两篇Blog,我飞速的按照自己在性别识别论文写作中积累下来的经验和技巧完成着论文的初稿。

下午4:00,我完成了论文的初稿,交付老师审阅。时间真是海绵里的水,只要你挤就会有。下午五点,我们实验室和智能人机接口实验室进行了一场篮球赛。这场比赛是我们实验室参加计算机学院光熙杯篮球赛首轮循环中的最后一场,如果我们胜利的话可以晋级学院前八强的下一轮循环赛,如果失利的话需要和另外一组的第五名争夺第九名。为此,大家都非常重视这场比赛。比赛之中我们大家都非常的投入,虽然比分最后输了,但是我们也打出了自己的风格和水平。

比赛结束后,我继续进行自己的论文写作工作。晚上的时间主要是在进行论文的不断修饰和完善。感谢刘老师的帮助。由于这段时间篮球赛非常耗费精力,老师今天晚上和疲惫进行了坚决的抵抗。

整个论文的撰写,我还是按照了自己揣摩得到的论文撰写过程快速的完成着。各个步骤都完成之后我们进行了最后的统稿,最终晚上11:00,我提交了论文。

回到寝室,简单和亚杰电话之后,我很快入睡了。呵呵,终于可以睡个好觉了。不过这种疯狂的论文写作干结还是不错的,真的和当初完成数学建模竞赛的时候非常像了。

2006年5月21日

爱相随,亚杰

爱是什么?有人说那不是任何物质,只是一种感觉而已。但那又是非常美丽的东西,因为那能让你感觉幸福,一种不能用任何物质代替的东西。爱是奇妙的东西,需要用心去领会;爱是一颗小草,需要用心去呵护;爱是天气,需要用心应对各种情况;爱是大树,会带来光阴也可以在下面避雨。

由于年轻,或许没有更多的资历来写这样一篇Blog,但是出于心中的爱,对亚杰的,我想这样来写。五一从长春回来,到现在,我都处于一种非常忙碌的状态,很多的事情都有被打乱。这个过程中,亚杰给予了我很多的支持和理解。在遇到问题的时候,我会和她述说一下,虽然不能得到专业上的帮助,但是人的工作更多时候是受到心态和心情的左右的。这个时候她给予我的那些话语起到了非常好的作用。可以说,这段时间的忙碌和一些工作成果都和她的支持分不开。在心情非常好的时候,我会和她分享。有句话,一份快乐两个人分享就是两份快乐;一份不快两个人分担就是半份不快。我们每天都在分享和分担着很多的快乐和一些短暂的不快。

由于身在两个学校,我们的约会时间不是很多,每周只有一两天的时间能够见到对方,更多的时候是通过电话的。电话真是一个奇特的东西。在我们交往的过程中,不管什么情况,每天都有电话。这个就像吃饭睡觉那样必须每天进行。呵呵,或许,我们的生活中电话已经成了一个非常重要的部分。电话之中,我们会聊到很多很多的事情,天上地下,无所不谈。正因为电话,我们在刚开始交往的时候了解了对方很多很多。,最终使得我们爱在一起了。

这几天,由于论文的事情,我快忙到极点了,真是有当年数学建模竞赛的那种劲头了。人是需要休息的。每天和亚杰的电话,算是我全天最好的休息了。其中的欢声笑语和各种新鲜事情在我们的耳畔传递。原定是我该去她学校看望她的,但是情况特殊,又是她过来看我了。嗯,见面的时间虽然短暂,但是我们都非常珍惜这种感觉。

我爱亚杰,真的!那种感觉非常的强烈。我会好好对她的。阅读我Blog的朋友们,祝福我们吧!真诚向你表示感谢!

2006年5月20日

修改,修改,再修改!

就像昨天讨论的那样,论文需要不断的修改修改再修改!昨天我完成了我的性别识别论文的初稿,今天的任务就是不断的完善。其中一个最大的问题就是我的初稿写得太长了,会议要求是8000字,可是我现在的这个初稿已经超过了10000字。论文的删减比内容的增加相对的容易一些,但是也需要非常小心的去完成各个部分。

这里介绍两个论文格式修改的方法。Word中格式刷和样式表的使用。记得半年以前,我根部不知道格式刷的用途,一次维刚师兄向我介绍的时候,我感觉这个东西非常有用。修改一些特殊的格式就是非常的容易了。但是在使用格式刷的时候我遇到了一个新的问题,那就是当你哦想把一个格式应用到很多地方的时候需要不断的点击格式刷。这个事情非常的麻烦。我在网上查看了一下相关的方法介绍。这个时候我再次领会了有人说过的,Office中只有你没有用过的技巧,没有你想不到的技巧。在应用格式刷的时候把以往的点击一次格式刷改为双击格式刷就能到处“刷”了。取消格式刷的时候只需要在格式刷的图标上单击一下就可以了。

不要小看了这个技巧,当你大规模修改你的论文格式的时候非常有用的。试试才知道哦。

另外的一个技巧就是样式表的使用,这个东东用好了比格式刷还要好使。比如你的初稿是直接使用Word默认的模板的时候,需要将很多的标题格式修改为论文要求的格式,可以打开“样式格式”后在需要原文中需要批量修改格式的地方放置鼠标,然后在样式格式框中选择修改格式,记得要在修改完后选中更新框。这样就可以非常方便的大批量修改格式了。

上面的两个技巧网上有大量的资料介绍,如果你感兴趣的话可以仔细研究一下吧。

论文修改修改再修改~!呵呵,也就是前进前进再前进哦~!写论文真是一个奇妙的历程,渐渐找到了感觉~!祝贺一下!

2006年5月19日

写论文的顺序之我见

由于5月20日是学生计算语言学会议的截稿日,这几天我的“三天不练,生!”计划需要中断一些时日了。说到写论文,我已经有一年半没有过了。回想自己亲手主笔过的三篇论文,写论文还是需要很多很多的技巧的。其中一个最大的问题就是写论文的顺序。当然,我这里谈到的写论文是和前期的实验基本想法,实验设计和相关结果的获得没有关系的。

按照MSRA洪小文老师的观点,应该先写论文主体,最后才写摘要。这个过程我非常的赞同。结合我们实验室的论文撰写流程规定,先写出一个框架,然后经过讨论后再按照框架内容撰写论文主体,最后撰写摘要的方法是较为可行的。但是其中涉及到的论文主体的撰写顺序我想每个人都是不一样的吧。至少我请教过的几位师兄是这样的一种情况。

根据我的理解和经验,我觉得论文先撰写引言和相关工作比较好。因为这些是论文前期调查、想法和相关工作调研的结果。这个部分应该能很容易的撰写出来。其中的一个关键是参考文献的撰写顺序问题。我觉得在撰写这个部分的时候,将参考文献用一两个短语概括出来,用综括号写在这个部分就可以了。这样一来方便后期的参考文献的格式化处理,二来可以非常方便的利用Word或者Latex生成自动的参考文献顺序。

之后的第二个撰写的部分就是论文的贡献部分的详细撰写。这个部分最为关键,每个细节部分的撰写都需要缜密的布局和支撑的内容,绝对不能添加任何没有意义的内容。由于这个部分是论文的绝对主体,需要尽可能的写,这样也为后期的论文删减准备了参考的内容。

论文撰写的第三个部分就是相关的结论和将来工作部分。这个部分的文字看似不是非常的重要,其实对于审稿人,这个部分相当重要,因为它直接展示了你论文的重要性。

随后部分就是参考文献部分。以往在写论文的时候,这个部分的处理一直是我觉得非常麻烦的部分,特别是参考文献部分的编号和原文中的编号的对应。完全手工处理非常容易出现错误,特别是当修改论文的时候删除了前面部分的一个参考文献的时候,后面的编码部分非常容易出现混乱。这个问题的解决方法我一直在寻找,现在的解决方案是充分利用Word的尾注功能。这个功能非常的强大,一旦用好了会为你节省大量的时间和精力。对于参考文献中文献信息的撰写可以借鉴Biblioscape的自动生成功能。这样一来,最后在修改格式的时候就非常非常的方便了。

哈哈,写完论文的以上部分后一定要赶紧核对一下论文的框架,如果出现了巨大的偏差,需要好好的修改一下。匹配上框架后一定要再将文章主体修改两遍以上,然后再好好的撰写论文的摘要。最后部分是论文的各种格式的变动。这样一来就是真正初稿的生成。这个时候就可以找人帮你再修改了。

呵呵,写论文真是一个巨大的工程,各个部分的能力都需要不断的锻炼和提高。呵呵,我想一句话,熟能生巧。个人不断的领悟吧。

2006年5月18日

人生:吃亏就是占便宜

转一个故事:

有一个年轻人大学刚毕业就进入出版社做编辑,他的文笔很好,但更可贵的是他的工作态度。那时出版社正在进行一套丛书的编辑,每个人都很忙,但老板并没有增加人手的打算,于是编辑部的人也被派到发行部,业务部帮忙,但整个编辑部只有那个年轻人接受老板的指派,其他的都是去一两次就抗议了 他说:“吃亏就是占便宜嘛!”
事实上也看不出他有什么便宜可占,因为他要帮忙包书,送书,像个苦力工一样! 他真是个可随意指挥的员工,后来他又去业务部,参与直销的工作,此外,连取稿,跑印刷厂,邮寄……只要开口要求,他都乐意帮忙! 反正吃亏就是占便宜嘛!”他这么说。

两年过后,他自己成立了一家出版公司,做得还不错。原来他是在吃亏的时候,把一家出版社的编辑,发行,直销等工作都摸熟了。他真地是占了便宜啊! 现在,他仍然抱着这样的态度做事,对作者,他用吃亏来换取作者的信任,对员工,他用吃亏来换取他们的积极性,对印刷厂,他用吃亏来换取品质……
由此看来,他这下真地占到了便宜!

吃亏就是占便宜!尤其是年轻人更应该记住这一点这是你积累工作经验,提高自己做事能力,扩大人际关系网络的最好办法。如果样样想占便宜,那最后一定会吃亏,而且还可能吃大亏。

2006年5月17日

今天不想写blog

没有心情来完成今天的blog,对不起我的朋友们了。调整好心情和心态,我会继续我的“三天不练,生”计划的。

2006年5月16日

个人事务如果能够分治?

这段时间,按照俺的“三天不练,生”的百日计划,我每天都在阅读10页的CODE COMEPLETE。这是一本奇特的书。因为,每当我仔细品味其中的每个字眼的时候,很多额外的联想就会浮现出来。呵呵,这个算是浮想联翩吧!

现在你一定对俺今天的“浮想”有点兴趣吧?我的浮想就是这篇Blog的标题,“个人事务如果能够分治?”

在CODE COMPLETE大概80多页的时候讲到到程序开发的经典流程。提到可以在做完需求分析构建之后,可以将整个程序分为几个大的系统部分,然后确定各个部分之间的联系方式,再针对各个部分进行工作类的设计,接下来详细设计各个工作类的数据和方法以及对外的数据和方法接口,最后编写各个部分的详细的函数代码再进行整体的链接运行。整个过程和我们在算法设计中的分治的思想一样。就是一个总分总的过程。回想自己曾经写过的所有程序,真正按照这种流程完成的只有一次。那是我去年在微软亚洲研究院的时候,四个月的Chat Robot构建后,我被转到一个英法相互翻译的Project中。我接手了别人的代码。阅读了别人的代码后发现,其中使用了两种语言使用了MFC的C++的网络数据采集和基于C#的本地文本文件搜索。后来我将两部分代码的架构重新进行了设计。采用的方法就是上面提到的那种方法。后来感觉这种开发方法对于需求非常明确的程序可以很好的完成。事实上,据我了解,现在研究院中涉及到这个Project的代码采用的就是我当时撰写的那个架构上修改的。嗯,这次体验非常让人激动。但是后来便再没有采用这种方法来编写过程序。原因是诸多方面的,以后我会考虑继续在一些工具的帮助下使用这种软件开发方法,比如使用PyUT这个工具。

软件开发很多时候是一门综合性质的学问。包含的很多的方法学可以从其他问题中学习到,也可以将软件工程的开发方法应用到很多的其他问题之中。我想到的一个应用就是个人事务管理的问题。试想,如果我们能够很好的将个人事务划分成各个模块,然后分配好时间去完成各个模块,最后将各个模块的工作集成起来应该就能很好的组合起来。这个想法应该是过于理想的。因为,其中存在很多的问题。

比如个人事务如何划分?如何保证在完成某个事务模块的时候不会出现新的需求?如何将完成的各个模块进行很好的连接?问题很多,但是也不代表我们没有解决方案。比如,想到的一个个人事务管理方法是每天进行一次如下的操作。


1。前一天晚上将第二天需要处理的事务全部列出,然后按照类别和重要程序排序;
2。第二天早上根据刚刚收到的电子邮件、电话等将制定好的计划进行微调;
3。依次执行;
4。晚上先总结自己完成计划的情况,将完成情况数值化保存到一个文件中;
5。每周检查一下一周以来的计划执行情况,分析出现的问题和相关的原因,然后用于指导下周的计划制定方法和执行。


上面这个方法可以看成是一个自学习和启发式的方法,如果能够收敛的话一定会大幅度的提高个人的执行力的。

呵呵,那就试验一下吧~!

2006年5月15日

打台球能调节人的性格


运动有很多种方式,以前自己曾经一度非常喜欢过篮球,乒乓球,羽毛球,游泳和台球。在几种运动中,现在我最喜欢的是台球。现在我主要玩的是美式球桌。小小的一张台球桌上十五个球,在我们的不断瞄准和失误下一个一个进洞。需要的不但有力量,还要有很多的技巧和策略。可以说,这是一种非常综合的运动。

从去年下半年在北京的时候每周一晚上都和朱慕华一起去北航台球馆打上几局。这学期在学校也时常和金山师兄一起每周玩上一次。开始的时候我们都是非常的初级的那种,只知道拿着球杆就开始打。现在想来,那时的我们几乎是台球盲。有一阵子我们对台球都非常的痴迷,有一周我们去了四次。又一次,金山师兄问打完球后母球的运动方向究竟是什么样子的。我的答案是这个需要采用旋转力学分析方法来求解。我们为了找到这个答案,开始在网上寻找答案。

在网上寻找运动技巧,根据我学习游泳的经验来看,这个代表我们开始要进阶了。金山师兄找到一篇文章分析,如果母球不加旋转的化,碰球后母球的轨迹和目标球的轨迹成九十度夹角。为了验证这个结论,我们又去了一次,答案果然正确,但是有时候会莫名其妙的不满足这个规律。

后来我们开始在网上寻找台球教学的视频。兴趣是最好的老师,皇天不负有心人,我们找到了巴尼标准台球教程和国内发行的一个台球教程。在这几个视频里面,我们学习到了很多有关台球的知识。包括台球、台球桌、球杆、粉底、击球动作、击球方法、母球上的九个接触点、撞击结果等等。学到了这些我们都迫不及待的去体验。每每验证学到的东西,我们都非常的高兴。我们现在打完一局的速度比以前提高了不少。

台球,我认为是一种可以训练人的性格的运动。打台球需要冷静的分析,高度的注意力,和平稳的心态。任何一个环节出现问题都会打不好。晚上我们打完球回来路过学校施工的一个路段的时候,一辆挖土机在前面缓缓走过之后我的步伐很稳健,不像以往那样毛躁。一时之间,我彷佛把过路段当成了打球,有了那种潜移默化的稳健的心态。

这种感觉很奇特。在我写这个Blog的时候心里一直有这种感觉。所以我的这篇Blog的题目是“打台球能调节人的性格”。一种运动,如果能够体会到超出运动以外的感觉,我想就是真正喜欢上了这种运动的标志。分析一下自己的性格,确实存在很多毛躁的时候。每每因为自己的这种控制不住的情形而事后懊悔,一些朋友也都因此受到了我无意的伤害。我想打台球训练了我,我需要将自己的性格中的那种躁动控制一下。人,是需要稳健的。这一点,我需要好好的向周围的老师和师兄同学学习。

发现自己的缺点很难。但是改正自己的缺点更难。通过运动来达到这个目的,或许是一种解决方案。当然,凡事都存在度,运动或者休闲式的运动也不能过量,需要将学习工作和运动结合起来的。那样才能起到相互促进的作用。

你也打台球么?有过类似的感觉么?哈哈,如果有,那就一起体会吧。

2006年5月14日

好书易求,难于一读

我收集了很多的Python电子书,但是真正认真阅读过的几乎没有。这种情况,被我定义成一个术语“好书易求,难于一读”!试问坐在计算机面前的您,电脑中存在的电子书有多少,真正阅读过的有几本呢?我越来越发现,面对电子资源,人有一种冲动,那就是不管看不看,只要觉得日后可能有那么一丁点儿用处,采取的行动就是--立刻下载!

这是多么可怕的一个行动!按照80%-20%的原则,咱们的计算机中80%的资源咱们很少触及。面对这样一种情况,人容易三心二意。今天看看这本,明天看看那本。这本看了几天又听说另外一本很好,然后就转向另外一本。类似的情况和编程语言的选择一样。对于Python的学习,我自省发现,我也存在这样的情况。前一阵子看了两天的wxPython in action,但是随后又转向《Python编程经典》。等到完成我在实验室负责的LTP(语言技术平台)项目后,基本的Python学习就被我抛到脑后去了。是的!我们都很忙,看看我们每天忙碌的事情都有哪些?究竟是什么原因使得我们非常的忙。我想,原因在于我们关注的东西太多了。回想高中时代那种绝对的三点一线而且没有电脑的时段,我们关注的东西非常的少,因此我们能够把很多事情做得非常好。

有人说,这是一个注意力经济时代。每天我们周围有太多太多的东西在吸引着我们的眼球。走在路边有大大小小的广告牌,进入超市更是琳琅满目的宣传画和商品,坐汽车会看到汽车箱里箱外都是广告标语,现在连乘电梯都有了分众传媒。一旦打开电脑,登上互联网,那个信息的量会比现实生活翻几翻,什么垃圾邮件,垃圾新闻,铺天盖地得让人喘不过气来。

面对这样一种信息严重过度的时代,我们能够采取的方案能是什么呢?我想那就是集中。只有我们主动的集中我们的注意力,才能将很多事情做好,才能将我们时间重新分配到应该分配的地方。以电梯旁的广告为例,我们完全可以采取爬楼梯的方式来解决这个问题。一方面能够锻炼身体,一方面免受多余信息的干扰。一举两得,何乐而不为呢。

对于编程语言的学习,也是这样一种情况,花上一段时间来精心选择你喜欢的语言,然后每天抽出一点时间来好好的学习它。对于电子书籍的选择,一定要连续10天询问自己是否仍然确定要学习它。如果选定后,那就好好执行吧。

哈哈,说起执行。想到前两天在师弟小潘的桌上看到一本书《赢在执行》。随便翻翻后发现其中一章专门讲了个人执行能力的问题。个人执行能力其实就是一个个人管理的问题,包括时间管理,生活管理,爱好管理等等。

回到好书,我在阅读了SPOJ上的Python高手Tim Peters发给我的一段质数生成的代码。原先我写的这个程序总是不能通过SPOJ,看到论坛上Tim Peters说他解决了这个问题,特意发出求助后终于在昨天得到了这段代码。真是来之不易呀!万分的感谢Tim Peters,呵呵,虽然他肯定不会看到我的blog。看完他的代码,我忽然发现自己的Python编程能力还非常非常的初级。为了解决这个问题,我找到了Python Cookbook这本书。不看则已,一看震惊。这本书就是前一阵子我一直想要寻找的那种介绍别人编程经验,适当的还要展示一些代码设计结构的好书。上午阅读了十来页,感觉甚好!

^_^,鉴于俺的“好书易求,难于一读”的想法,俺会把学习Python的注意力完全集中到这本书上的。

2006年5月13日

brute force approach

"Brute force approach",这个短语你见过么?至少我是第一次见到这个英文短语,在完成SPOJ Problem Set 第一道题目1. Life, the Universe, and Everything的时候我见到了这个短语。开始感觉应该就是一种穷举比较的方法。呵呵,和昨天的blog一样,俺用了Google 的Definition,找到如下的一段解释:


It's a primitive programming style in which the programmer relies on the computer's processing power instead of using his own intelligence to simplify the problem, often ignoring problems of scale and applying naive methods suited to small problems directly to large ones. The term can also be used in reference to programming style: brute-force programs are written in a heavy-handed, tedious way, full of repetition and devoid of any elegance or useful abstraction.

The canonical example of a brute-force algorithm is associated with the "travelling salesman problem" (TSP), a classical NP-hard problem:

Suppose a person is in, say, Boston, and wishes to drive to N other cities. In what order should the cities be visited in order to minimise the distance travelled?

The brute-force method is to simply generate all possible routes and compare the distances; while guaranteed to work and simple to implement, this algorithm is clearly very stupid in that it considers even obviously absurd routes (like going from Boston to Houston via San Francisco and New York, in that order).



再看看Brute force的中文解释,金山词霸的解释是“暴力的”意思。再查询Definition的时候找到一个brute-force attack的解释:In security, an attack that requires trying all (or a large fraction of all) possible values until the right value is found.这个解释就想软件破解领域的一个术语:暴力破解。

暴力,对于一些特殊的应用是不得已的方案。但是很多时候我们在编写程序的时候却“偷懒”的使用了这种概念。比如在进行数据排序的时候,很多人使用的是编程语言直接提供的方法,有时候这些方法得到的效率是非常低下的。但是人,偷懒了,或者可以理解为采用了暴力的方法来解决这些问题。这里的暴力,我更多的理解成为一种不考虑问题精解的方法。正如上面那段英文解释第一段中说明的那样。brute-force programs are written in a heavy-handed, tedious way, full of repetition and devoid of any elegance or useful abstraction.

我认为“暴力”还有一个解释,那就是对整个问题的解空间进行穷举。这种方法在上个世纪中叶计算资源和能力非常稀缺的年代是很难实现,也是根本不允许的。作为一个非职业化的程序员,我们应该尽可能的减少问题的解空间,比如采用上一片blog中提到的启发式方法来进行。特别是在我们计算机应用专业里面,应用一个算法的时候,或者实现我们的一种新的算法的时候,我们往往不去考虑程序执行的时空复杂度,有些朋友的观点是程序能够运行起来,而且得到结果那就是万幸了,至于程序运行的速度和所占内存空间根本都不用考虑。

有一句古语,不积圭步,无以至千里。我们应该尽可能的提高个人的编程修养,多多阅读一些相关的资料和多进行一些相关的实践。这样才会出现编程能力的迭代式的提高。看着《CODE COMPLETE》我现在越来越觉得编程和做研究在很多方面是相通的。既然我们在做研究的时候那么严格要求自己的研究方法和正确性,研究成果的高度可重复性,以及论文的原创性;我们为什么不再给自己完成编程工作的时候加上一个编程严格规范的限制呢。这种限制,我认为是一种对于计算机专业人员的归属的体现。作为计算机专业的不管是本科、硕士,还是博士,高水平的编程能力是必须的。这一点,我现在已经有了较为清楚的认识。

行,胜于言!在彻底解决了Komodo中文问题的基础上,那就好好的练习吧。期待自己的编程能力得到提高!

2006年5月12日

什么是启发式?

在自然语言处理或者信息检索领域里面呆时间长了,总能听到一个术语“启发式”。在Google或者Baidu上输入“什么是启发式”,返回的结果中有很多的“启发式”:诸如,什么是启发式软件,什么是启发式教学法,什么是启发式搜索,什么叫做启发式杀毒等等。Google中一个有趣的结果是返回页面的第一个最后一个结果中说“孔子最早开创启发式教育。”呵呵,这个命题很有趣呀~!

这么多的启发式概念,那么究竟什么是启发式呢?我询问了很多老师同学,得到的一个普遍性的答案是,“启发式就是拍脑袋想出来的”。这个解释我觉得比较牵强,因为不同的人在不同的时候“拍脑袋”想出来的可能都会不一样。抱着试一试的态度,我在Google上输入了“definition:heuristic”. Heuristic的中文意思是“启发式”。加上“Definition:”是定义查询的方法。还好,在返回的首页中我找到了一个感觉解释的比较好的结果,如下(来源页面:http://www.learningframework.com/define-heuristic.html):


A heuristic (hyu-'ris-tik) is the art and science of discovery and invention. The word comes from the same Greek root as "eureka" meaning "to find". A heuristic for a given problem is a way of directing your attention fruitfully to a solution. It is different from an algorithm in that a heuristic merely serves as a rule-of-thumb or guideline, as opposed to an invariant procedure. Heuristics may not always achieve the desired outcome, but can be extremely valuable to problem-solving processes. Good heuristics can dramatically reduce the time required to solve a problem by eliminating the need to consider unlikely possibilities or irrelevant states. As such, it is particularly useful to those in the process of discovery and the are constantly rethinking their strategies in the face of a stubborn unknown.



这个说法和我最近学习的《CODE COMPLETE》第12页在介绍“如何使用软件隐喻”的时候提到的“启发式”类似。这里提到:


而启发式方法(试探法)是一种帮你寻求答案的技术,但它给出的答案是具有偶然性的(subject to chance),因为启发式方法仅仅告诉你该如何去找,而没有告诉你要找什么。它并不告诉你该如何直接从A 点到达B 点,它甚至可能连A点和B点在哪里都不知道。实际上,启发式方法是穿着小丑儿外套的算法:它的结果不太好预测,也更有趣,但不会给你什么30 天无效退款的保证。

驾驶汽车到达某人的家,写成算法是这样的:沿167 号高速公路往南行至Puyallup;从South Hill Mall 出口出来后往山上开4.5 英里;在一个杂物店旁边的红绿灯路口右转,接着在第一个路口左转;从左边褐色大房子的车道进去,就是North Cedar 路714 号。

用启发式方法来描述则可能是这样:找出上一次我们寄给你的信,照着信上面的寄出地址开车到这个镇;到了之后你问一下我们的房子在哪里。这里每个人都认识我们——肯定有人会很愿意帮助你的;如果你找不到人,那就找个公共电话亭给我们打电话,我们会出来接你。

算法和启发式方法之间的差别很微妙,两个术语的意思也有一些重叠。就本书的目的而言,它们之间的差别就在于其距离最终解决办法的间接程度:算法直接给你解决问题的指导,而启发式方法则告诉你该如何发现这些指导信息,或者至少到哪里去寻找它们。



英语和中文的不同描述都给我们解释了启发式的涵义。简而言之,启发式式一种经验性的指导原则,依靠好的启发式,我们可以大得到进行高效,快速的问题求解。如何选择好的启发式就需要不断的经验积累了。

2006年5月11日

彻底解决Komodo中文显示存储问题

最近几个月一直在学习Python编程,但是如何选择一个好的开发环境还真是意见麻烦的事情。换了好多个东东,最终俺选择了Komodo。网上对Komodo的介绍如下:


  近日,业界著名的开放源代码编程工具开发商ActiveState公司推出了首个第三方Mozilla应用软件Komodo 1.0。Komodo是第一个基于Mozilla应用程序框架底层开发的Perl和Python集成开发环境。全功能, 多语言支持的Komodo 1.0将进一步提高开发人员的工作效率,其特征包括提供完整的联机帮助和一个交互式的远程调试器。此外,Komodo也包括一个独特,正规的表达式工具箱, 极大地简化了脚本语言的开发。
  
  据ActiveState公司的创始人及CEO迪克•哈德特(Dick Hardt)介绍,Komodo是业界第一个商业级、跨平台的Perl和Python集成开发环境。Mozilla面向框架的组件技术将允许开发人员在今后很容易地为Komodo 1.0添加更多的语言和特征支持。

  Komodo的主要特征:

    正规的表达式工具箱
    自动补全和请求提示
    完整的联机帮助  
    智能的代码编辑器
    交互式的远程调试
    代码合并功能
    可定制和可扩展的可视源代码

  Mozilla是一个理想、跨平台的Web开发环境,而集成Perl、Python 以及Mozilla精华技术的Komodo将为Perl、Python以及JavaScript开发者提供一个非常完美的网服务开发解决方案。ActiveState公司发布了第一个基于Mozilla组件技术的应用程序,这将成为开放源代码运动中的一件具有划时代意义的事件,更进一步证实了Mozilla比下一代Netscape浏览器有更多的优越行。更重要地, 它提供与语言喜欢 Perl 和到精华的超过黑客可接近的大蟒的开放源代码做跨平台的开发的使网能够的 IDE 。”它提供了一个高效率、跨平台网络编程环境,促使更多的普通用户转向基于开放源代码语言(像Perl和Python )的网络编程。

  包含ASPN Komodo的Komodo 1.0售价为295美元,ASPN Komodo是为Komodo IDE提供的年度订阅费用,包括所有的升级,技术的参考书,样品代码,以及在线帮助等。



用这个软件,俺叶有些自己的心得体会。它的好处,不用多说。不足之处,如下几点:
1。设置断点程序中断的时候不能用鼠标在代码编辑窗口中直接查看变量的值。这一点在Visual Studio中可以实现。
2。代码的只能提示功能欠缺一些。刚定义的变量在随后敲入的时候不会自动提示。
3。中文不能很好的显示
4。修订中文显示后不能保存文件,一旦保存,相应的中文字符都会编程问号

仔细分析上面的四条后,我发现第3条和第4条我非常难以接受。一段时间曾经用汉字对应的双字节十六进制编码来代替,这使得俺编程的时候感觉非常的不爽。在实验室Gold师兄的帮助下,中文能够很好的显示了。具体的操作方法如下:



在Mozilla\components目录下面找到koEncodingServices.py文件,用文本编辑器打开在第80行插入
('cp936', 'Chinese(CP-936/GB2312)', 'CP936', '', 1,'cp936'),
('GB2312', 'Chinese(GB-2312)', 'GB2312', '', 1,'GB2312'),
('GBK', 'Chinese(GBK)', 'GBK', '', 1,'GBK'),
('GB18030', 'Chinese(GB18030)', 'GB18030', '', 1,'GB18030'),
上述四行当中的后三行之对3.5版本有效,3.5版本使用的是FireFox的引擎,之前的版本使用的是Mozilla的引擎所以不能完全兼容。如果你使用的是3.5以前的版本只插入
('cp936', 'Chinese(CP-936/GB2312)', 'CP936', '', 1,'cp936'),
就可以了。




采用这种方法后,编写程序的时候可以在文件中敲入中文了。但是在运行含有中文字符的程序的时候总会有下面的这段提示:


C:\Program Files\ActiveState Komodo 3.5\lib\support\dbgp\pythonlib\dbgp\client.py:590: DeprecationWarning: Non-ASCII character '\xb2' in file E:\PythonProgramming\wxPython in Action Practise\Test.py on line 2, but no encoding declared; seehttp://www.python.org/peps/pep-0263.html for details
execfile(file, globals, locals)



打开提示的网页,俺找到了这个提示的作用,需要在程序的首行加入文件编码格式的强制定义,一个测试程序如下:


# -*- coding: gb2312 -*-
#测试
print "测试"



现在运行程序就没有任何的问题了。

总结一下上面的陈述:
1。解决中文显示问题可以修改Komodo的配置文件,加入几行说明。
2。解决中文运行问题可以在程序首行加入编码格式的强制

2006年5月10日

三天不练,生~!

前一阵子,在好友际洲的Blog看到他转载别人的一句谚语:一天不练手脚慢,两天不练丢一半,三天不练门外汉,四天不练瞪眼看。

当时看完感觉颇有道理,但是并没有对俺的生活起到什么建设性的作用。今天回想前一阵子研究生英语老师的介绍的如何学好英语的时候,想到了“三天不练手生”这句。顿时,俺的Google Talk签名信息就变成了“三天不练,生~!”之所以没有写“手生”,是因为“生”有很多种。什么“口生”,“脚生”,甚至“脑子生”,都是如此。联想自己以前学会的很多好东西,以及养成的好习惯都默默的变得“生疏”,心里感觉不是很畅快。真有点自己对不起自己的感觉。

养成一个好习惯不容易,坚持一个好习惯到很多年,那就更不容易了。俺的好习惯有过很多,但是到现在为止真正坚持下来的只有从2003年9月17日开始每日撰写Blog的习惯了。俺现在觉得有些事情是必须每天坚持一下的,否则日子久了会产生严重的后果。这一阵子俺对研究的感觉甚为不好,应该就是这种原因。

重新审视了一下俺的生活和学习,俺整理除了如下几天每天都必须完成的“小事”。(小,是因为像是“不积圭步,无以至千里”中的“圭”那样)

1。撰写Blog,不能少于1000字。
2。英语:每天20秒的听力资料,反复听写五分钟。
3。C++编程,每天精读10页CODE COMPLETE
4。Python编程,每天编写50行Python代码
5。锻炼身体,每天早上健身20分钟,晚上慢跑20分钟。

这里俺不敢多列那些看似很重要的事情,因为俺知道要想每天坚持完成一件事情那是非常困难的。俺的每天必做事宜从以前的一件,现在一下子升级到了5件,难度是非常非常大的。但是不要紧,就像闹钟那样,只要每秒钟摆动一下就行了,不必想着每年要摆动31104000下。至少,尽两日来,第2条和第5条俺都能完成一半。不用多说,行动胜于计划。俺需要好好的完成第3项了。CODE COMPLETE是一本非常好的书,现在俺急需把它看完然后去重构俺负责的LTP。

说时快,那时慢。俺把CODE COMPLETE前10页看完了。刚才一个人在窗前,站着翻完了前10页。其中提到了一个非常好的概念--隐喻。简单说来,隐喻就是类比,将一种事物类比成另外一种事物,从而用另外一种事物的分析处理方法来研究当前的这种事物。最近俺在《科学美国人》上看到的声音黑洞就是光学黑洞隐喻的产物。CODE COMPLETE第10页提到建模就是一种隐喻。联想自己本科时代最热爱的数学建模很多时候都是在将需要解决的问题用一种已知的数学模型来模拟类比,然后再进行常见的数学分析。这个过程确实有隐喻的味道。哈哈,第一次把数学建模看成÷是科学研究中的“类比”方法,感觉有点特殊,一种说不上的清晰。

嗯,把一件事情完成一次很容易,难的是把它编程一种习惯。慢慢来,俺需要有一个重新养成习惯的过程。他们说彻底养成一个习惯,至少需要100天。俺就从今天做起啦,每天在俺的Gtalk上更新一个数值,看看俺能坚持多久。欢迎朋友们监督哦~!

2006年5月8日

怎么让一天有36个小时zz

原文链接:http://chn.blogbeta.com/133.html

你经常听人说“真希望一天能多几个小时”或者类似的话吗?当然,现实中我们每天只有24小时。这么说吧,人和人怎样度过这24个小时是完全不同的。到现在这样的说法已经成了陈词滥调,但我们的24小时和Thomas Edison与Mother Theresa曾拥有的相同,和Oprah Winfrey与Bill Gates 今天拥有的也相同。就像老歌里唱的,“It’s in the way that you use it.”。

但是,我们怎么让一天多于24小时呢?

不可能?我不同意。我们不可能有多于24小时的实际时间,但很可能有多一些实用的时间。实际上,如果做一些相关的简单事务,我认为一天可能有36小时的实用时间。废话少说,如下是我的“一天36小时规则”。

这是一个有关节约时间的列表,你可能想到过也可能没有。遵循一部分规则,你很可能每天多出几个小时来。全部遵循这些规则,你会发现手头的时间很宽裕。这是个吸引人的话题,不是吗?这里的10个方法可以彻底改变你的生活,空余出那些你原以为无法节约的时间。

『一天36小时规则1:调整睡眠』
有些人每天只睡3到5个小时就可以(真让人羡慕),但另外一些人需要多于9小时才感觉休息好了。当然一部分原因是遗传和环境因素。我想说的是有办法让我们每个人都减少睡眠同时又不觉得疲倦。建议如下:

每天定时起床:我是从Steve Pavlina的很棒的blog知道这个方法的。我试了一下就迷上它了。这个方法很简单,只要让你的闹钟每天早晨定时响起来就好了。闹钟响了就起床,晚上困了再睡觉,不困就别上床。Steve说这个办法每周可以节约10到15个小时,我觉得他完全正确。

让你的卧室安静幽暗:很多人在卧室活动,光线亮声音吵。应该尽量减少卧室的音量(如果你的公寓或邻居很吵,试试空气净化器或者白噪声发生器)。逐步减少或消除睡觉时卧室的光线(厚的窗帘或者深色的材料效果很好)。还要尽可能的把带来刺激的东西(比如电视)拿出卧室。

体验小睡(polyphasic sleep):小睡是一种将一天的睡眠降低到2至5小时的方法。我没有尝试过所以不知道是否可行,不过你可以再去Steve的blog看看这种不寻常的却又有潜在效果的睡眠方法。

优化睡眠节约的时间 = 约1.5小时

『一天36小时规则2:优化食谱』

人在消化和排泄上花费的能量要比其他多的多。以饮食形式进入人体的一切直接影响了人的精力,同时也影响必要的睡眠时间。几年前我特别胖, 每天吸收大量卡路里和蛋白质。结果呢?我需要大量的睡眠。有时候睡10到11个小时(大运动量也没效果)。

现在的我正相反,我更合理(也更正确)的吃蔬菜、水果、谷物、肉类和油脂的混合食品。精力上的差异很明显,我比以前睡的少了。我的食谱仍需要改进,但它已经在我每一天每一个小时里改变着我。

优化食谱节约的时间 = 约1.5小时

『一天36小时规则3:多线工作』

多线工作,看起来很正确。如果同时能做两件事,那一天下来就能做更多事情。但是它没有缺陷吗?一位在路上开车同时又打着电话的女士,可能不是多线工作的好例子。

不过我要说,如果做的好,多线工作是节约时间的最佳途径。边打电话边进行“不费脑”的活动是个好方法。对大多数人,洗衣服洗盘子就是一种不用思考的活动。为什么不在这同时打个电话,起到一石二鸟的作用呢?记住,收发邮件和看电视不是“不费脑”活动。而且,没什么事情比和一个心不在焉的家伙打电话更让人讨厌的了。

另一个多线工作的方法是把锻炼身体融入平时的活动里。要追上一个朋友,用慢跑的方法,同时也就完成了日常的运动。我读书或者坐在电脑前的时候经常伸懒腰,我有一个锻炼用的球,收邮件的时候拿出来玩玩,有点儿BT不过对我很有效。

有成千上万的办法,它们都能使你在日常事务过程中锻炼身体。这绝对是个提高效率并且保持好体型的好办法。

多线工作节约的时间 = 约2小时

『一天36小时规则4:使自己井然有序』

你真应该让自己变得有条理,因为它节约时间并且减轻压力。这方面有很多不同的方法和策略,我发现其中最好的(也是我在用的)是David Allen的Getting Things Done方法。GTD,就是一个掌握和管理需要做和需要记住的事情。它非常有效,因为它能让你从杂乱的小事中解脱出来,释放你的“精神内存”,让你有时间思考更重要的事情,提高创造力。

David Allen的方法并不是唯一的。很多人用Franklin-Covey、Tony Robbin的生活管理方法或者其他什么。我不知道哪个最好,但我认为重要的是我们都应该采用一个这样的方法,那样的话,像“记得买牙膏”这样的事儿就不会消耗我们丁点的脑细胞。

同样,关于GTD也有成千上万的方法。了解这些方法的投资很大程度上是值得的。你不但会变得更积极,也会变得轻松,精力充沛,然后有一次增加了一天中的时间。

使自己井然有序节约的时间 = 约2小时

『一天36小时规则5:提高打字速度』

在这个电脑时代,键盘是我们交流的主要形式。我估计一个人每天平均打字1到2小时,这是个毫无根据的猜想。打字,可能是发邮件、聊天、写备忘录、写报告等等。有些人可能多些,有些人则可能不到。所以假设人均1.5小时。

那么假设你现在每分钟输入40个单词,如果提高到60个,拿就节约了33%的打字时间。提高到80个每分钟就节约了50%。可能每天能节约半小时甚至45分钟。这样下来,一年十年(别说一辈子)能省下巨量的时间。

让人惊讶的是一方面我们在工作上花钱买一些有用的软件,另一方面很多人还不会盲打。这让我发疯。打字越快交流就越简单明了。键盘使你和这个世界交流和分享。

我强烈建议大家花点时间(每天几分钟)来提高打字速度。我用过一个软件TypingMaster,我也很喜欢。它很容易使用,甚至可以设置为追踪你的实时打字,这样它就会把你常漏掉的字词加入特别训练里。这对于每天的打字训练来说很节约时间。

提高打字速度节约的时间 = 约0.75小时

『一天36小时规则6:提高阅读速度』

和打字一样,提高阅读速度同样会提高效率和节约时间。人和人不同,但是平均下来我们每天都要阅读一到两个小时。无论是早报、邮件、工作学习的文章或者是畅销书,这个时代需要我们不停的阅读。

事实是,大多数人的阅读习惯不够好。他们阅读速度慢,经常为了了解某些东西反复阅读。结果是要么不再读(读的太慢又无法领会内容只会让你不舒服),要么是在阅读上花了不必要的时间。

和打字一样,又多种方法提高阅读能力。我列出一些方法:

Active Reading-做不好阅读的一个原因是,当阅读时我们完全处于被动。大脑在活跃的时候更容易集中精力,做到这点最好的办法时记笔记。读书的时候做标记,划出段落、快速记笔记等等。你会发现自己的理解跟上了阅读速度(即使除了做标记的时间)。做标记的另一个重要作用是以后你回过头再读的时候,可以更加快速高效。

提高阅读速度节约的时间 = 约0.75小时

『一天36小时规则7:使用音频学习』

我开始LearnOutLoud.com的学习过程,可能最重要的原因是我坚信使用音频教材确实可以增加时间。同样,也使你对那些过去浪费掉的低效率的时间充满乐趣和充实感。

使用音频也是多线工作的好例子。我每天都听几个小时的有声书或者podcasts。我在开车、锻炼或者在家做杂事的时候听。过去的一年我疯狂的听了大量的书,包括完整版的My Life(克林顿)和The World is Flat(Thomas Friedman),这些书我永远没时间坐下来读。同样,我还通过podcast“参加”了一些会议。

感谢iPod和其他一些MP3播放器,否则用音频学习就没这么容易了。我喜欢做的一件事是,出去跑步同时听一些podcast或者有声书。这对身体和头脑都是一个锻炼。

我坚信今后几年是用音频学习的革命。人们时间越来越少,一点点读自己需要的信息会消耗更多的时间。听是个绝好办法,同样会影响你的生活。

使用音频学习 节约的时间 = 约1.5小时

『一天36小时规则8:善用软件』

选择正确的软件能节约大量时间。当然,不是所有软件都会节约你的时间,有些就很耗时间,比如扫雷:) 有些软件能给你每天、没月增加不少时间,下面是我发现的几个:

Cloudmark Spamblocker(或者其他反垃圾软件),清理垃圾邮件很浪费时间,所以用软件清除它们是很值得的。当然也可以选择GMAIL这样的邮件系统,它本身的过滤机制很有效。

Bloglines(或者其他RSS聚合工具),blog日益成为获得信息的最佳途径,通过聚合可以很容易的得到你订阅的信息。Bloglines甚至支持手机版本,很方便吧。

善用软件 节约的时间 = 约0.5小时

『一天36小时规则9:看电视的时间减半』

有研究表明人均看电视时间是每天四小时。每天忙忙碌碌,居然花多于四个小时看电视?

我不否定所有电视节目,肯定有些节目能让人娱乐一下休息一下,但我不能理解一个人可以花一生中大部分时间,只是为了大多数时候没意义的事情。一年半前我取消了有线电视服务。注意一下自己在看什么节目,还有为什么看?如果你一天看四个小时,那减半就节约了两小时。重复一下,我认为有好节目而没有那么多好节目。

看电视的时间减半 节约的时间 = 约2小时

『一天36小时规则9:向别人求助』

最后的规则是找人帮助自己。这与你的工作还有收入有关,假如你是500强公司的CEO你很容易找手下做这做那,又不用付钱。不过,其他人呢?

首先,人们是乐于帮助你的,别不信。如果要搬家,何不找朋友来帮忙,那样会省不少力气。

另一个可能性是和别人互助。比如你需要清扫工作,那你可以找一些英语不好需要帮助的人,作为交换对方帮你做清扫。这样你节约了时间,对方也受益,结果是双赢。

这样的机会很多只要你努力发现。当然有人求助的时候也要乐于帮忙,这对于节约的时间来说不是问题,不是吗?

另外有更好的省时办法。网上有很多免费或者收取少量费用的服务可以帮你,技术问题我贴到到Experts Exchange,很快就可以得到答案。非技术问题可以找Google Answers这样的服务,收取少量费用但是你会发现,和节约的时间相比是很值得的。

当然还有成千上万的论坛,那里的会有人免费为你解答问题。

向别人求助 节约的时间=约0.5小时

把这些加起来,每天就可能会有12个小时。当然你会有不同的看法,不过我希望能试验一下。时间是这个星球上最珍贵的商品,在一些方面节约时间那你就可以花时间去作其他的事,那些对你最重要的,有目的的和感到高兴的事。如果大家都这么做,也许,会改变世界。


2006年5月7日

26度了~!

今天的天气非常的好,但是我还是比较困,在寝室睡到早上7点四十才算真的醒过来。天气非常好,气温到26度了,感觉有些热,换上偏夏季一些的衣服才算感觉凉爽一些。

到实验室后整理了一下,发现很多的事情在等着完我去完成,今天我想好好的理顺一下自己的生活,很多事情都需要好好的整理一下。首先就是一些衣服需要拿出来好好的洗洗,因为夏天到了,需要换季了。接下来的事情可是相当的不少。呵呵,第一件事情就是要完成很多的文档的书写。

好的,还是好好的书写一下吧。

2006年5月6日

回到哈尔滨!

先睡上一觉比较重要,呵呵,在长春 比较累的。

2006年5月3日

陈毅恒的婚礼

来哈尔滨已经五年有余,但是一直没有参加过婚礼,听到很多次别人介绍这里的婚礼,总感觉和我们家乡的不一样。今天有幸参加了实验室师兄陈毅恒的婚礼。由于下午要去长春,早上没能参加迎娶新娘的仪式,还好早上忙完下午的行囊,上午10:00准时参加了在学校学苑楼三楼的婚庆仪式。

偌大的一个三楼摆满了桌子,很多生疏的面孔出现在我们的面前,但是很快,我看到了新郎——相当帅气的陈毅恒师兄。在婚典现场的幕布上写上了新郎新娘和名字,还挂上了新郎新娘的结婚照。等到10:30左右新郎新娘一起出现在红地毯的尽头。实验室的老师和同学们围坐在一起,大家看到新郎新娘出现在红地毯旁的时候都惊呼起来,因为,另外一位主角————新娘李雪亭出现在陈毅恒的旁边了。新娘分外的漂亮,一袭白色的婚纱配上新郎黑色的西装,感觉很美。新郎新娘在主婚人的主持下从红地毯的一头往婚典前台缓缓走去,两旁气球爆炸的声音非常的喜庆,亲友们在花架旁燃放着一种能够迸发出彩星的鞭炮。

刘老师作为陈毅恒的领导,出任了婚典的证婚人,在结婚仪式上还发表了一席对新人的祝语。这一点和我们家乡的婚典不太一样。之后的仪式就是新郎新娘父母讲话。随后新郎新娘一起在一个酒塔上倒酒,再一起点燃一个长长的像荧光棒的鞭炮后,婚礼进行到午餐时段。新郎新娘及其父母一起开始在各个桌上祝酒。整个场面非常的盛大。

由于下午要去长春,我们没有机会参加下午和晚上新郎新娘的闹洞房和相应的庆祝仪式。在这里真诚的祝福新郎新娘新婚快乐~!

2006年5月2日

植物园

两年前的4月28日我所在的研究生英语班全班到哈尔滨植物园游玩了一天。当时的感觉是植物园是一个美丽的地方,以后可以经常到这里来休息放松一下。

今天是一个晴朗的日子,人在这种天气下的心情往往格外的好。进入植物园右拐到多人自行车停放的地方,我们租下了一辆双人自行车。骑在车上,我们的心情格外的好,微风在耳旁轻吹,一列一列的绿树往我们身旁往后飞动。我们的脸上都挂满了笑容。真是一种放松的惬意。在这一刻,什么也不用想,一切都是那么的美好。我们的双人自行车在先在植物园的主干道上轻柔的飞驰了一趟,返回的途中,我们走的都是各个园子的小道。阳光在园子里散布得很均匀,走到哪里身上都感觉是非常得舒服。

约莫一个半小时,我们退还了自行车,开始在游船湖畔用餐。植物园今天最惹眼的是那四对结婚的新人。每个景点面前都有他们的合影,每对新人身旁都有一大队服务人员。看着大家忙碌的样子,再看看新人们脸上洋溢的笑容,植物园真是凭添了几分美丽。

游船,铁索,游人;
阳光,绿树,新人;
好一派美景胜收,日后定要常来!

2006年5月1日

美丽晚餐

下午我们到哈尔滨的沃尔玛商场购买了很多的好吃的。按照亚杰妈妈的说法,今天过节,我们应该买一些好吃的。

这是我第一次到哈尔滨的沃尔玛购物,感觉了一下,和北京希格玛旁边的沃尔玛很像,里面什么东西都有卖的。沃尔玛的特点就是大而全,但是东西的质量就不一定了。这一点可以从我在北京沃尔玛买的两件T-Shirt看出来。哈尔滨沃尔玛的物价比起我们学校的超市算是要便宜一些,呵呵,或许是便宜10%。因为在我经常喝的藏秘酸奶在学校超市是1.1元每袋,而沃尔玛是1元一袋。我们学校的超市就是贵呀。不过也没有办法呀,谁让我们的超市在学校是独家经营呢。

在沃尔玛我们买到了很多的东西,最值得高兴的就是买到了亚杰一直非常期待的朝鲜伴饭的辣酱。亚杰说这个辣酱用来做蘸酱菜非常的好吃。我闻了一下不禁也想赶紧尝一口。在超市里面逛了半天,我们还买到了一只香辣烤鸡、麻辣伴菜、二两凉拌猪耳,加上苹果喝面包片,我们高兴的回到了学校。

在寝室,打开这些菜肴,我们开始享用这顿晚餐。一些都是那么的美好~!