Dreamingk Alone

看时间流过
文章 - 10,收藏 - , 评论 - 18, trackbacks - 1

导航

公告


    我好冷,我控制不住发抖的
  身体。请原谅我!


    本blog除标明转载的文章之外,其他所有文字皆为原创,如要转载请注名作者出处,特此声明
                -- Dreamingk

文章

收藏

    相册

      Python

        PythonIc

          存档


          正在读取评论……
          2005年03月18日

              由于不太喜欢csdn的blog服务,还有donews的blog服务最近不稳定,特决定以后只更新两个blog,如下:

              Dreamingk Alone at miex.org http://www.miex.org/dreamingk

              Dreamingk Alone at Sina http://blog.sina.com.cn/blog/1401337701 (test)

              我会坚持更新blog的,否则就真成了挖坑不埋了:)

                                                                             ---- Pythonic Dreamiingk



          2005年03月05日

              子曰:巧言令色鲜亦仁

              “巧言”就是很能侃、很能吹。仁义道德讲的头头是道,却从不这样脚踏实地的做,言行不一。“令色”是态度很仁义,但却是假的。“鲜亦仁”就是很少做到“仁”这个学问的境界。所以做学问是要踏实的。

              “巧言令色”作为工具的时候都是有目的的,并且不一定都是那么表面化的“巧言令色”。所谓“上有好者,下必甚焉”,你说你很讲原则,不为名、不要钱,只是爱好琴棋书画,那就有人带着“家藏墨宝”、“古书典籍”来跟你交流。你看在赖氏的经典名言“不怕你讲原则,就怕你没爱好”的指导下,多少国家大员都被同流合污了。

              曾子曰:吾日三省吾身,为人谋而不忠乎?与朋友交而不信乎?传不习乎?

              曾子是孔子学生,名参,少孔子四十六岁,他著《大学》,原本是《礼记》里的一篇,唐宋时候把拉出来做为四书之一。后来孔子孙子子思著《中庸》也是跟他学的。所以《大学》、《中庸》并不能说代表了孔子思想。而孟子是子思的学生,孔子三传弟子,这时是战国时代,他的思想和孔子多少有些出入。所以这也代表文化思想的演变与时代有关。

              曾子说他这个人做学问,每天用三件事情考察自己。

              “为人谋而不忠乎”,替人家做事情有没有尽心尽力。古代“忠”是指对人对事无不尽心的态度。

              “与朋友交而不信乎?”,与朋友是不是言而有信。就是我答应人家的时候都做了吗?

              “传不习乎?”,老师教我如何做人做事,我真正去实践了没?

              如果我们每天自省,用这三个事情来考察自己,就可以明了我们自己是如何做学问的,做的怎么样?要以做人做事体会出来,这就是学问,只是太难了。

              学问讲到这里,都是个人修养。但是学问不是只讲个人修养的。扩而充之就是社会问题、政治问题。我们上面讲的都是学问的内涵。

              子曰:道千乘之国,敬事而信,节用而爱人,使民以时。

              “道”,是领导的导,就是领导之德、领导的修养。

              “国”,在秦汉以上是地方政治单位的名称,不是指现代的“国家”。

              “乘”,古代以战车、壮丁、田赋等合在一起计算的,算是个计量单位吧。

              “千乘之国”,算是比较大的地方政治单位了。

              “敬事而信”,对一件事情认真做为“敬事”。一项职务宁可不接受,接受了就要认真做。“信”就是使下面的人信服。可见如果要取信于人,就要“敬事”,说了的话一定要兑现,身先士卒。

              “节用而爱人”,节用指经济政策的措施一定要节省。节省的目的是为了“爱人”。

              “使民以时”,用人要把握好时间。用人要得当,这样才能人尽其用。不光在用人上,还在为人的道德上,比如部下重病,要懂得“爱人”,而不是责备他为什么不来上班。所以用人不仅是方式方法,还是道德修养,也是学问。

               这整句话便是孔子做学问的目的、态度和方法的记录。





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

              创建一个“队列”对象

              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中取出一个值并显示出来。



          2005年03月01日


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

              假如两个线程对象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()方法以防万一。





              大家小时侯凡是上过中学的大概都学过《学而》这篇文章,里面最经典的莫过于:

              子曰:学而时习之,不亦说乎?

              有朋自远方来,不亦乐乎?

              人不知而不愠,不亦君子乎?

              老师都给我们讲过这几句话的含义,但是南老先生却提出了疑义,让我们来明辨一下

              第一句的重点在时间的“时”和见习的“习”上。

              如果读过孔子全部著述并了解了孔子的全部思想的话,就知道什么叫做学问。学问不是文章,是从做人做事上体会的一种修养,书上读是读不出来的。随时随地的生活都是我们的书本,都是我们的教育。孔子说“观过而知仁”,意思是我们看见人家犯了错误,自己便反省,我不要犯这个错误,这就是“学问”。这个方法就是要随时随地的思想、见习、体验、反省。但是刚开始反省时也不容易,后来慢慢有了进步自然会不亦说乎,“说”就是会心的微笑。可见不是今天我们读《论语》就叫做学问,明天不读就不叫做学问。

              从这里看来,孔子认为人的修养、人的知识都是从生活的行动过程中悟来的、反省来的,而不是“一心只读圣贤书”读出来的,也不是考试考出来的。如果中国的教育体制仅仅还只是社会建设选拔人才的机制的话,那么中国的人文精神将不会有所建设。还有随时随地的学习也是和我们现在提倡的终身学习时刻学习具有同样意义的。现代信息社会,信息更新速度太快,社会发展变革太快,生活环境变化太快,不能够及时的更新知识结构是不能够适应这样千变万化的社会。所以终身学习、随时学习真的是非常必需的。只是很多人都把技能培养放在首位,殊不知,没有思想没有修养的人在面对这样纷繁的物质世界时不怕心智失衡吗?

              孔子认为即使一个安定的社会,文化教育没有完成,是不能解决其他问题的。因此他一生宁可穷苦,从事教育。一个思想家,一个不为穷苦折腰的人,最看重的人当然是知己。有句老话:“人生得一知己,死而无憾。可见一个知己、一个知心朋友来看望孔子的话,他有多么高兴。当然古代人们消息闭塞,传播知识的效率也低,远不及现在有电话、手机、internet。所以只要不是整天碰面的人,联系起来都是非常远的。这样我们就可以理解第二句话了。

              第三句是说一个人碰到艰难困苦、遇到重大打击,不要“怨天尤人”。老天爷是最无辜的,不要怨他,而要反省自己,为什么我站不起来?为什么我没有达到这个目的?是自己的学问、修养、做法种种的问题。这才是健康的心理,拿现代的新观念来讲,就是讲究人生哲学的开始。

              其实经常看到有些书讲的都是处世哲学,讲的无非是“圆融贯通”、“八面玲珑”。其实所谓立身处世如果仅仅站在一个狭隘的立场上真的和哲学是格格不入的。我是从来不去读此书的,因为即便你真的把那些东西做为你立身处世的根本的话,那么在生活中去体验“圆融贯通”、“八面玲珑”远比那么些“处世哲学”讲的深切的多,至少我是深有体会。当然这也算验证了孔子学从习中来的道理。

              我们连贯上面三句话就晓得读书作学问的修养,自始至终,无非要先能自得其乐,然后才能“后天下之乐而乐”。明代陈眉公说:“如何是独乐乐?曰:无事此静坐,一日是两日。如何是与人乐乐?曰:与君一席话,胜读十年书。如何是众乐乐?曰:此中空洞原无物,何止容卿数百人。”有此胸襟,有此气度,也自然可以做到“人不知而不愠”了。不然,知识愈多,地位愈高,既不能忘形得意,也不能忘形失意,那便成为“直到天门最高处,不能容物只容身”了。

              有子曰:其为人也孝弟,而好犯上者鲜矣;不好犯上而好作乱者,未之有也。君子务本,本立而道生;孝弟也者,其为人之本与?

              若要理解这句话,首先要了解什么是“孝弟”

              “孝”大家都应该清楚的,就是对父母的爱。其实“父慈子孝”这是相对的。父亲对儿子付出了慈爱,儿子回过头来爱父亲就是孝。过去的中国文化是大家庭制度,有宗族、有祠堂,所谓五世同堂,聚族而居。大家庭固然有许多小毛病,但也有它的好处,像宗族的发展,即由此而起,这是孝道的精神。

              “弟”就难理解了。其实有句话“兄友弟恭”,哥哥对弟弟好,弟弟自然爱哥哥。那么我认为“弟”就可以理解为“以弟自居”,再延伸就是兄弟姊妹的友爱。中国的五伦有君臣、父子、夫妇、兄弟、朋友。这五伦中四伦都讲得通,为什么加朋友这一伦?朋友是一种感情的结合,这是中国文化的特殊处,这个“弟”就包括了对兄弟、姊妹,一直到朋友,伸展到社会的友情。

              中国文化中的“感情力量”是巨大的,尤其是宗族的力量以及“友道”形成特殊结合。所以“孝弟”的人是不会犯上作乱的。

              学问的根本是什么呢?“君子务本”。文学好,知识渊博,那是枝节的,学问之道在自己作人的根本上,人生的建立,内心的修养。所以“本立而道生”,学问的根本,在培养这个孝悌,孝悌不是教条。换句话说,培养人性光辉的爱,“至爱”、“至情”的这一面,所谓“孝弟也者,其为人之本与。”他说这个是“人”的本。

              看了这些我们可以理解这句话就是说:一个有真性情对每个人都有感情的人,就不会犯上作乱,不会犯上却还会作乱的,这是不可能的,因为这种人有分寸、有限度。学问之道在自己作人的根本上,人生的建立,内心的修养。所以培养人性光辉的爱,就是为人的根本。



          2005年02月28日


              我们在做软件开发的时候很多要用到多线程技术。例如如果做一个下载软件象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()
             





              我不是心理学家,但是我有幸接触过很多人的心灵深处。其实我是个情绪调节能力很差的人,我的心灵无时无刻不被我的情绪所控制或影响着,我也看到了很多人如我一样。情绪当然不是人心痛苦的根源,但是通过有益的自我控制和自我调节情绪,可以让我们更好的面对心灵、面对生活。

              看到了一个blog [ 双子 M & L ] 有一些关于情绪、心理和心灵成长的文章,收藏一下
              我比较关注的有:





             一直以来对于《论语》、《诗经》、《大学》、《中庸》等国学著作都没有兴趣。小的时候好奇心驱使对于自然科学方面的花拉、草拉、动物拉甚有兴趣,上了中学对于电子科技由比较着迷,后来渐渐没入计算机的世界,都没有时间和精力对什么是国学有过认识。中学上语文时候本有机会接触一点《论语》、《诗经》,但由于语文老师的“严厉”而对语文及其一系列的东西深恶痛觉,因为语文老师每天要女生来检查我们几个男生的语文功课,例如背诵、词语解释等,一题不会讲台上当众挨二棍。我每天必挨,至少4棍,有一次打了我20多下,打急了我,我小声嘟囔了两句,他说我骂他,把我撵出了教室,我一生气,一本语文书照他脸上砸去,然后跑掉了。结果当然是我被父母领到学校赔礼道歉,还又多挨几十棍另在桌子底下凉快了一下午。可怜我本来语文就不好,起、承、转、合都不会,一篇议论文论一棵书写了几天没通过,到现在有话讲不出,讲出来的也不是原来的意思了。后来人渐渐大了些经历了一些人生的打击和转折,重新开始认识这个社会反省自己。重新拿起书本开始看书读书。断断续续的看了西方哲学家罗素的一些著作如:《西方哲学史》、《哲学问题》、《我的幸福之路》等。之所以说看而不是读,是因为只是粗略的看了一遍,当中很多东西并没有细细琢磨和体会,对于我们这些理科学生看过就已经很高了。随着个人思考的深入和思考范围的扩大,越来越多的矛盾的东西困绕着我的思想,因为我的知识层次和水平已经不足以承载我的进一步思考。我也很困惑,不知道再从哪开始。幸的遇到了北京师范大学的教育学专家庄秀丽老师,交流学习一番,她推荐我读一些国学著作,今特挑出一本南怀瑾先生的《论语别裁》来读。因为我的古文水平基本还处在只认识中国字的层次上,所以读这样一本别裁也许可以更容易读懂。别裁的意思老先生已经在文中说了:本书定名为“别裁”,也正为这次的所有讲解,都自别裁于正宗儒者经学之外,只是个人一得所见,不入学术预流,未足以论下学上达之事也。但对我来说别人裁,我读正是省了我事,让我这样的菜鸟也可以登堂入室,当然如果以后功力增长还是要读读原本《论语》来个“自裁”。

              之所以是浅读是因为我其实是不怎么会读书的,我的思维总是有些乱,还乱联想,有点控制不住,从来没有形成好的读书的方式和习惯。还有由于中学的经历让我对所谓“老师”深恶痛绝,已经没有信任感,所以也从来没有人对我的思想拨乱反正,就算有我也不接受,我也就我行我素,以自我观点为中心。到现在我已经不再痛恨老师了,毕竟在现代教育体制下我们这些非良民还可以反教育,而老师作为教书育人的灵魂工程师被夹在现代教育体制和被教育者之间已经连反教育的权利都被剥夺了,还有我也认为教育本身没有错,但是我觉得一个人首先要有自己的观点。记得前段时间看中央台新闻节目《大家》,访谈的是著名哲学家汤一介,他在访谈中说在中国哲学家是指政治领袖,而他们是哲学工作者,哲学家建立哲学思想,而他们负责对这些思想做解释工作。以至于他到了四十岁以后才晓得一个哲学家应该有自己的一套系统的哲学观点。一个人连自己的观点都没有他以什么东西来作为自己思考和判断的依据?对于他这样的话,我真的有些惊讶,一个著名哲学家在不惑之年才明白这样一个事情,还真的是四十不惑,不到四十岁一直惑。或许这样再来说有些人认为中国已经没有哲学家了也就没有一点惊诧了。

              废话一通,切入正题

              老先生对开会讨论“中国文学的再革命”的学生们说:“文学革命,我没有资格讲,你们也没有资格讲。为什么呢?如果古文、四六体、作诗、填词,都能露一手,然后发现这种文学有毛病,这才有资格谈革命。现在你们连‘命’都还没有,还‘革’个什么呢?你们还有文学革命的资格吗?”其实好骂人的李熬就说过:“我骂他王八蛋,不光骂他是王八蛋,我还要证明他是王八蛋”。然后就拿出一堆手稿拉、照片拉、报纸拉等各种证据表明那个人就是王八蛋。假如你要证明的话其实你首先就应该了解你要骂的这个人,了解清楚了才可以言而有据、言之成理的骂他,让他无以辩驳。否则你光骂他三字经的话还不如写个电脑程序 for i in range(3000):骂(xxx人,"王八蛋")来完成的好。不过这样不光你骂的人鄙视你连起哄旁观的看客都会鄙视你了。所以我们在评论一件事情或者传播一件事情的时候至少要有一些了解,再去做。这应该也是做学问的态度吧。

              老先生说: “我们中国的老祖宗晓得语言和时代是要变的,所以把文字脱开了语言,只是用很短的时间,经过两三年的训练就会写出来,这个文字就单独成为一个体系,表达了思想。因此这种文字所保留下来几千年以上的思想”。但其实由于中国古代文论的诸范畴,表现出一些多义性特点,所以对我们这些没有古文根基的人来说学习古代思想困难重重,对于从事人工智能、自然语言处理等现代科学技术理论研究来讲,也是很苦恼的一件事情。不过象我们学习外国人的思想和技术就要去学习外语一样,难道我们要了解老祖宗的思想就不能学习古文了吗?对于学习外语来说,我们学习古文也许更具有先天优势吧。

              老先生说:“以全部《论语》来讲,他本身就有一贯的系统,完全是对的。我们不需要以新的观念来割裂它。‘以经解经’,就是仅读原文,把原文读熟了,它本身的语句思想,在后面的语句中就有清晰的解释。以这个态度研究《论语》,它可以说前后篇章贯而通之。”这个东西老先生已经解释的很明确了,我们只要把《论语》替换为anything来理解就可以了。其实这个观点从后面的文章中可以体会的到。

              老先生对于儒、释(佛学)、道的比喻真的很有趣,说:佛学像百货店,可以去也可不去,但是社会需要它。道家则像药店,不生病可以不去,生了病则非去不可。一个国家民族生病,非去这个药店不可。 儒家的孔孟思想则是粮食店,是天天要吃的。

              中国上下这两千多年的文化、思想、历史,不管它是什么政体,大致都以司法为中心,司法与行政是分不开的。中国法律系统的哲学背景,就是以四书五经作基础,所以这部四书五经,在过去无宪法观念时代,严格说来就是一种宪法思想,也就是政治哲学思想的中心,法律思想的中心。其他各种哲学思想也都归之于它。也就是说四书五经等既是中国的人文思想也是中国社会的政治哲学思想。

              我们都知道任何事物的发展都要经历破而后立的过程。例如就我个人经历来讲,我是在经历了很大的危机之后已经不知道如何继续生活的情况下才决定和过去彻底决裂并且反省,从新建立自我。这里的2个重点是破和立。破的前提应该是巨大的危机,不得不破,不破的话危机就会继续发展,当危机发展到不能承受的地步就会破了,危机越大破的越彻底。二是后立,所谓后就是先要有破,而后才能立,如果破的不彻底,立新就会有阻力,所以只有破的越彻底立的才能更好、更有生命力。象黄易的小说《大唐双龙传》就有跋风寒被武尊毕玄所伤,差点成为废人,却籍此机会练成武林绝学换日大法。其他很多小说中都有如此描述。

              中国在上个世纪也经历了这样一个过程。上世纪初中国处于内忧外患之中,整个社会形态政治制度都逐步瓦解,到49年新中国成立,中国的社会形态政治制度经历了从破到立的过程。我想对每一个中国人来说,这样一段历史进程都是我们不能忘记的。其间的文化运动文化革命也有多次,例如新文化运动等等。但是由于我们新中国的政治哲学体制是从西方马列哲学继承吸收过来的,虽然具有了中国化的特点,但是却绝对不是我们老祖宗的思想体系一脉相承的,这就造成了中国政治哲学思想和中国传统思想文化不合拍。而我们的传统文化思想人文体系在新中国成立后的一些文化运动和文化大革命中又遭到了前所未有的打击和破坏,这样一个东西被破坏了,但是新的思想又没有建立起来。在这样一个经济繁荣物质充足日新月异的时代,我们却没有自己的文化没有自己的信仰没有自己的思想,真的是很可悲的事情(阿甘正传里就称中国为没有信仰的国家)。他对我们现世的影响真的是直接而深远的。在我们倡导科学精神的同时,是不是更应该去倡导我们失去的自己的人文精神呢?



          2005年02月27日

              一个项目的发展过程是一个想法到实现的过程,一个理论的东西到实践的过程、一个由不确定到确定的过程。

              知识管理是一个很大的课题,为什么有做这样一个项目的想法,我想有几个个原因。一是就是所谓的信息爆炸,整个社会信息总量迅速增长且远远超过我们个人认识和学习的速度。对于我们个人的注意力资源来说,这是个很大挑战,我们需要增加我们的学习和认知效率,就要对知识有所筛选、管理、关联,筛选是为了快速选择我们有效的信息,管理和关联是提供知识快速处理的方式方法。二是我们有学习知识的需求,在现在以及未来的社会变革发展中,我们需要终身学习来适应和推动社会和个人的发展,我想对于我们这些在信息行业或者即将进入信息行业工作的人来讲,更有切身的体会。基于个人知识的社会化共享来说,我们更需要一个社会性软件,他首先是一个个人信息管理工具,还必须是一个可以社会化共享知识的工具。这几个方面就说明这样一个项目并非凭空出来的,而是在一定社会条件下产生的一种需求。

              对于知识管理的项目,我想虽然到现在为止我们都各自有了很多很多的想法,但是到现在为止还没有形成一个统一清晰的系统需求做项目设计的指导。想法很多但是不系统就设计就会矛盾很多。对于一个从不确定到确定的过程,我们首先应该去确定一些东西(这些是从庄老师的文章中得发的)。

              一、我们这样一个软件是给哪个层次的人群使用的呢?

              一个知识管理的软件,功能即使再好,如果没有相应层次的学习能力、知识管理能力、开放精神等人群应用,再好的功能也没用。知识共享的软件的应用,实际不是软件开发或者实施问题,这是使用群体的学习水平培养问题、学习能力提升问题、学习层次展开的问题,以及思想觉悟点化问题等。所以我们要确定我们要开发的软件是适应那样一层次的群体来使用的。

              二、这样一个群体平时的知识管理的方法和层次是什么样子的?

              我们需要确定这样一个软件对知识管理的水平和层次要达到那些基本条件,至少是要比这样一个群体的人已经具有的一些能力和方法有所提高并且是有效率的提高并且能让他们习惯于这样一种方式。

              三、这样一个群体对于知识管理有些什么具体的需要?

              和上一个问题一样,只是更具体化了,我们需要那些具体的知识管理的功能呢?例如知识的筛选、收集、管理、检索、发布、关联等等。这些需求就更具体更确定了一些。对于以上两点做一个一定范围内的实际调查是比较需要的。

              对于我们来说,我们最初的很多想法都可以归结到我们对于软件的需求上,而其他的一些理念则可以是我们在实现这样一个应用时做指导的。

              对于实现来说我们要关注三点

              一、个人信息管理

              信息首先是个人的,我们都在做着个人的信息管理,例如收藏夹、我的文档等等很多很简单的东西却都在做着这样一个管理。但是大多数的个人管理工具都有很多局限性。例如信息关联不够、信息检索困难、信息繁冗等等。要解决这些问题首先核心的东西就是信息和知识到底是什么,信息应该如何描述,信息和信息之间是种什么样的关系、信息的有效性和完整性等等。我想这又是另一个系统性的东西,需要一个基础性的理论来支持。然后通过一个实验性的原型来验证。这样一个东西对于我们来说是具有决定性意义的。他直接决定我们的软件对于所谓知识管理的层次和水平。(从庄老师的观点中思考得来)

              二、社会化的共享和交流

              基于毛老师的理论,一个社会性软件首先要具有几个特征:身份识别、社会性网路管理、交流方式、基于时间的管理。我们通过身份识别来确定信息的来源、以此判别信息的有效性、通过身份识别可以产生人际之间的关系扩展信息获得的空间、通过身份识别还可以进行基于个体之间的交流。由此看来身份识别是社会性软件的一个基础(社会本来体现就是人和人的关系)。而因为我们的软件首先是基于个人的信息管理工具,所以实现这样一个人的身份识别也是势在必行。同时信息还存在一个时间的积累。牛顿说他是站在巨人的肩膀上,可见如果没有前人信息和知识的积累,社会也就不会得到发展,而不发展的结果就是消亡了。对于信息共享是局限于现有的技术水平和社会的方式,所以还要做具体的讨论,他也要有几个特点:方便、快捷、个人成本和社会成本要低、具有适应性、发展性,他必须是大众的方式不能是小众的方式,除非你仅仅把你的用户圈子锁定在那里。

              三、其他方面

              这个软件应该具有帮助使用者学习或者引导使用者学习的设计理念,他应该最大程度的适应更多层次的群体,这样才能充分发挥它的社会功用。当然它的学习成本应该是较低的。对于其他的方面我想应该还有更多的考虑。

              对于我们这些人来说,各人对于知识管理有着各种思考和想法,层次和方向也许都不相同。在实现的过程中由于我们熟悉的领域不同和对于实现的方式方法都有自己的想法,所以在一个团队合作的项目中,这些都是比较难解决也是导致项目建设不够活跃进展缓慢的原因。一个是希望大家可以把这样一个项目真正当做自己的项目并且有兴趣来思考和做,而不仅仅是观望或者希望设计完成确定后自己可以按照设计来实现一部分代码。所以如果你要参与一个项目更主要是参与思考和思想,而不是实现。二是尽量把一些能确定的东西确定下来,而不是空泛的讨论,所以我们也需要一些一个机制来通过大家来确定一些讨论成熟的想法。只有确定的东西才能被别人理解和认同。我想如果这样一个项目能够发展下来的话,那么我们也就有了这样一个基与项目和社区的核心团队以及团队的合作机制(对于团队我想可以去听听余世维的讲座)。

              这样一个项目其实涵盖了太多方面的东西,程序员实际动手也许仅仅是在软件实现的最后几步,所以希望大家不要局限自己对自己的定位,而要有更多方面的思考。项目的实现目标可能很远,我们的技术局限性等因素决定我们不可能直接实现,而要分步明确目标的来做这样一个项目,一定要有明确且每个人都能理解的目标。

              这是我在这段时间里思考所得到的一些想法,没有涉及到一些具体的实现,只是阐述了一些指导性的想法,希望可以对项目的进展有所帮助,并且也很希望听到大家的讨论和意见。

              以上想法是基于Woodpecker开源社区知识管理项目所做的一些思考,如果您有兴趣并且希望参与这样一个很有意义的项目,可以去社区里了解一下,开源项目欢迎您的参与!



          2005年02月26日

           
          天成 2002-7-24 凌晨

            思考是痛苦的,特别是孤独的思考。夜深人静的时候,它如一匹脱缰的野马,在黑暗的旷野里飞驰,很不幸的是,我被捆在了马背上,于是我也不由自主的跟着狂奔。周围一片漆黑,并非荒凉,而是根本什么都看不到。也许我本就不再马背上,而是在一颗在荒凉的宇宙游荡的不知名的小行星上or the others。我不知道路,不知道方向,什么都不知道。多么希望前面有一点灯火,帮我照亮前路,或者仅仅远远的给我一份精神的寄托,抑或遇到一位道友,解除我心灵的孤寂。但是还是什么都没有,我趴在马背上飞驰,听着耳边的风声,渐渐迷茫了,麻木了。。。

             我从沉思中醒来,看着徐徐上升的烟在空气中飞散。我知道我还活着,痛苦的活着,虽然痛苦,但是还算清醒。因为只有麻木的人生才不痛苦,或者他们已经痛苦的麻木了。

            我出生在1981年的9月9日,日子不算坏,是老人节呢,如果按算命瞎掰的,那我肯定会是个老寿星。可从小我就被一种莫名的恐惧所笼罩,它总是在某些时候侵袭我的灵魂,它让我感到了一种威胁,却又不知道威胁来之何处。活了这么几十年,随着知识的日益增长和生活经历的加深,我终于明白了原来那是出于我们对于未知宇宙的巨大恐惧,我发现了威胁的存在,但是我却不能解决它,我发现我越来越迷惑了,我发现善恶竟这般的不明显,对错亦是如此难分辨,更加可怕的是我发现我懂的东西是如此之少,如此的贫乏,以至我对人生产生了疑问,人生是什么?人又是什么?人为什么要生活,为了什么而生?怎么样生活?宇宙是什么?宇宙有没有任何的统一性或者目的呢?它是不是朝着某一个目标演进的呢?究竟有没有自然律呢?还是我们信仰自然律仅仅是出于我们爱好秩序的天性呢?如果真的如科学家所说,宇宙只是有夸克的基本粒子所构成的并且人只是宇宙间物质存在的一种形式,那人类还有何意义?那我们生活中的高低贵贱善恶丑美是否都只是虚幻无谓的?

            一切的一切我们都无法解释。虽然科学在突飞猛进的发展,但是宇宙当中的不确定还是如此之多,甚至随着我们知识的不断积累,我们的知识与不确定相比竟完全可以忽略不记了。科学不能解释。那神学宗教呢?神学带来了一种武断的信念,说我们对于事实上我们是无知的事物具有知识,这样一来就对于宇宙产生了一种狂妄的傲慢。在鲜明的希望与恐惧之前而不能确定,是会使人痛苦的;可是如果在没有令人慰藉的神话故事的支持下,我们仍希望活下去的话,那末我们就必须忍受这种不确定。于是生活变成了一个有着1500度近视却没有带眼睛并且在火星上迷路的地球人。

            这就是在宇宙中生存的可怜的人类,自卑的人类。

            看来,我们自杀算了。

            可是为什么没有呢?因为我们有着生之留恋。

            懂的了生命的脆弱,更让我懂的了生命的珍贵(并非一如当代的中国人一说生命的宝贵就要讲到为新中国成立而奋不顾身的革命先驱者,诚然他们很伟大,但是我要讲的是每一个拥有生命的人)懂得了人类的渺小,更让我们懂得了生命为了生存而做出的抗争是如此伟大。于是乎这些又是激励我们生活下去的勇气。即便在最痛苦的时候我们也要为生命的存在而认真负责。

            然而不确定的痛苦犹如积习一般时时困惑我们的心智,摧残我们的神经。只有坚定的意志和理智的头脑才能让我们克服它,虽然步履蹒跚但却意志坚定的走下去。
           

            教导人们在不能确定时怎样生活下去而又不致为犹疑所困扰,也许这就是哲学在我们的时代仍然能为学哲学的人所做出的主要事情了。

            (初读西方哲学史,所以写下这些话,虽然其中有些话是摘抄的哲学史中的原句,但是只是为了表达意思的准确而做的处理,这些想法在我思想中已经积沉已久。)