Thursday, August 23, 2007

停用

貌似国内把blogspot封掉了
这次还是穿越出来的

更新不方便
不得不停用

Wednesday, May 23, 2007

纪念的忘却

分手了
相交了一个月
终于不再相见
从经的亲密,现在的陌路



别离
细雨


11路

相伴走过一程的人儿
这样离去了
连朋友都做不成

为什么此刻
我的心中
一片漠然?

忘记?
根本未曾在意?
或者,还是其它?

过去了
一切的过去
彷佛,从未开始

忘却了
开始忘却了
为了纪念的忘却
趁着记忆的懵懂
写下,
记下,
自己的伤口
自己的纪念

一个清华学生在香港读研受到的心灵震撼 zz


  98年本科毕业,又顺利地被保研,当时的我只是一个憨憨的书呆子,纯洁的如同高中生,在清华这种和尚庙一般的理工学校里呆了四年,女孩似乎是山下的老 虎,神秘得让我一见就脸红心跳。未来是什么对于我就是“读完研再说”,反正成绩还行,不读白不读。天上掉了馅饼,用我的兄弟的话来说。香港正好回归一周 年,教育部要选派一批本科毕业生去香港科技大学读研,以加强两地的教育和科研交流。清华当然要占不少名额,系里的几个牛人去了美国,所以这个饼就掉到了我 头上,确实是个不错的饼,不用考g、考托、全额奖学金,连什么手续都是学校和教育部包办了,我分文不花,后来香港科大的联络人抱怨中国的办事效率和程序烦 琐,至于怎样的麻烦过程,我至今都一无所知......
  
  香港科大
    就这么糊里糊涂地来到了香港。依山傍海 的科技大学美得如同世外桃源,现代感的建筑更让我们爽眼。当时的一个哥们说:“妈的,就是用银子在荒山野岭堆出来的,这样的物质条件算是让我满足了。”后 来得知就是亚洲最美丽校园,倒也丝毫不怀疑。据说是香港政府感到了贸易和服务的优势正受中国沿海城市的挑战,而科技就是竞争力,就下了狠心投钱建了这学 校,请来了学者。耗资400亿港币,相当于微软公司一年的纯利。组织的参观,教授的讲话,英语的培训很快就过去了,当时的新奇兴奋也褪得干净,每天面对这 青山海景,最后也麻木得没有感觉了。
  
   由此可以推测娶一个漂亮老婆是没有多大意义的,如果不是为了炫耀。教授大多是华人,台湾和大陆出身的不少,反倒香港人是少数派,很多都是在北美的名校里拿 了phd,奔这里的高薪来了,他们的phd头衔总要和名字相片挂一起,挂一辈子,harvard和standford之类的当然就香了。正教授可以一年拿 到一百多万港币,也就是一个月可以买小汽车,比一般的美国大学高。知识真的值钱了,让我们充满了对未来的向往。有回和教授们吃饭,谈及大陆大学教授的待 遇,他们就感慨:“知识分子真被廉价到了可耻的地步。”我们也无话可说,反正不是我的错。然而钱不是好拿的,很多教师正是三十出头,教授职称还未到手,和 学校只是几年合同,其他的学者也不断在申请进来,所以压力颇大,辛勤程度比公司打工仔有过之而无不及。既然自己做学问要紧,培养学生的事就要往后排了。刚 近来时很多教师和我们亲切讲话,之后就不见了,好久不见就不认得。研究生当然有导师的,只要自己不去找他,他是肯定不会找我的。上课之后就是绝对的自由, 当时自由得很是惬意。
  
    萧伯纳说人生的苦闷有二,一是欲望没有被满足,二是它得到了满足。这话的确是部分的真理。当我住 在这绝世美丽的地方,可以随心所欲的去商店买东西不用担心付不起帐,可以任意的支配自己时间时,最初的半年里,却发现情绪每况愈下。西方化的建筑设计将个 人的所谓privacy保护发挥到极致,进了宿舍就基本感觉不到他人的存在,同单元的人也有独立的卧室,大家都是进了房,将门一关,隔离了,谁也不好意思 去敲门。刚来时认识的一伙人,后来发现根本遇不着,如同消失了一般。同住一起的是三十好几的叔叔级人物,偶尔可以说上一两句话,却永无可能说很多。大家都 像是住在不同的空间里做研究,忙碌的无瑕顾及他人。平心而论,对于一个成熟的研究者,如果他有确定的目标和兴趣,对生活人生都不再有不切实际的幻想,准备 投身科学研究中,那么这里真是一个好环境。但是我种茫茫睁着无知的眼睛的毛头小子,却是完全另外的感觉。那种茫然的苦闷感觉真是难以描述,找不到人玩,只 是将窗户开了又关,关了又开,不停的喝水,仍然感觉不舒服。怀念在清华的破楼里相互串门打闹的日子,怀念抱着篮球在走廊里叫一声就应者云集的日子,可是怀 念解决不了问题。以孩子的心理去进入成熟严谨的环境,不可不说是一次考验。
  
    多年的功利教育的辛勤培养,我一路顺当地走 过来,发现完全的上当。我在成功的通过了一次次考后,最终都不知道我为什么要通过这些占距人生的考试,这个所谓的优秀学生只是在不停地让自己去符合那个 “优秀”的外在标准来麻痹自己的虚荣心,而自己,那个真正的自己却一直没有存在过,没有发育过。我学的任何课程都无法帮我解决当时的苦恼,那么每天学那些 微分方程又是为了什么?还去为了父母的微笑,人们的赞许吗?年年得奖学金的清华毕业生是了这么一个怪物:不知道自己要什么,也不知道生活是什么,对社会毫 无接触,二十出头,可是见女孩子就一身不自在,会解各式各样的方程,却不能解决自己的困惑,硕士博士的路就在眼前,可是不知道还应不应该这样走下去,这状 态难道就是我的追求?一个智商还不错的人努力多年就变成这样?
  
    这是一个问题,很早就有了,只不过太晚地暴露出来,我相 信这样的问题依然将被很多师弟师妹们面临,我相信在清华依旧有很多像我当年一样的学生。当看到他们天真的讨论:g 2***, 托 6**,gpa 3.*, 学校名次top **,仿佛几年的辛劳就只为那么点数字,人生的终极标就是 go abroad.我无法不为他们忧虑。这也是促使我写这篇文章的主要原因。
  
    很多人没有对做研究的真正兴趣,但是用尽了精力去获得一个去国外做科学研究的机会,就洋溢在掩饰不住的喜悦里,甚至对人生毫无真正规划,对自己的兴趣一无所知,为出国而出国,那将在告别父老乡亲后去迎接苦闷的开端。
  
     香港的学生很实际,决大多数本科毕业就去赚钱,三十之间为结婚买房奋斗,如果告诉一个香港人说你二十八了还在读博士,他会觉得你很失败,可能是根本 不会赚钱。而留下来读博士的香港学生,就是真的很喜欢作研究的人,扎实地做事,他们的认真让我们一批朝三暮四,心猿意马的大陆学生汗颜。
  
  生活在香港
     都说香港是弹丸之地,其实一千多平方公里的面积也不算小,不过大多是山,可利用的地方不多,很多商业区都是添海造出来的。亚热带的气候,又在到处是 山和海湾的地方,风景当然好。香港的气候比北京舒适一万倍,冬天冷不了,夏天也不太热,甚至没有明显的四季感。只是上半年天气有些潮。成天都有湿湿的感 觉,北方人有点受不了。
  
    香港的交通极其发达,公共车从不拥挤,也很少堵车,可是香港的道路比北京的窄得多,车也不会 少,布局和管理更好而已,看来北京走向国际化还须努力。这里是名符其实的购物天堂,东西也不算贵,电器和服装可能比北京便宜,特别是国际名牌,由于没有关 税,肯定要比大陆便宜。所以不必带很多衣服来,足够便宜了。但是服务业,比如吃饭,理发,涉及到员工劳动和地租的就要比大陆贵好几倍。可以随便往来深圳也 是在香港的一大好处,一天可以轻松来回好几次,在香港读书的学生可一得到香港的临时身份证,加上护照上盖个章,就可以自由出入境了。
  
    常有人问及香港的影视明星,可是到了香港就觉得那些人也只是打工仔,背后是更有影响力的老板,一旦老板不想捧了,明星就会很快消失,新人会取而代之。看到他们卖力地载歌载舞,其实也是生存需要,在商业社会里那是绝对的驱动力。
  
    香港的金融和资讯服务相当发达,在所谓第一世界里也算相当突出,可以很便宜的享受到信用卡,电讯,互联网服务,因此有些人在香港呆久了再回来反而不适应了,主要就是这些方面,当然还有其他制度等软件原因。
  
     说到学校的生活,物质条件比国内任何大学好,甚至条件好过美国不少学校,香港的学生很少住宿学校,所以一到周末放假学校就很冷清。通常大陆学生独享 学校设备,偌大电脑房和运动场,舒服的游泳池,都有不少美好回忆。学生宿舍条件不错,可以作饭,自己作比在餐厅里吃来的便宜,所以大陆学生会乐此不疲,周 末常三五成群,作吃的为乐。餐厅里中西餐都有,中餐以广东口味为主,忙起来时以营养为重,口味不对也只能将就吃了。
  
    现 在在香港的大陆学生不算多,总共有四五百人,各个学校都有学生联谊会,是比较松散的组织,也有一些机会认识朋友。周末会组织放放电影,搞舞会。临近考试或 论文时,谁也没心思搞活动。香港的学生很好打交道,在成熟的社会里长大的人,心理相对简单且好玩,不像一些大陆学生常常过分盘算自己的明天,将自己逼的很 累。他们对大陆也渐渐感兴趣,虽然他们常常不知道湖南和四川,只说得上秦始皇和毛泽东。只要主动点和他们交流,是可以结识不少朋友的,粤语不是障碍,很多 人可以听普通话,而且,广东话不难学,不留神就长进不少。
  
  关于工作机会
    很多人就终于跳到北美去了,大多 还是接着读书,从这个意义上讲,香港只是跳板。在香港留下工作的机会不多,如果在进香港的第一天了解这一点,是有好处的。也有回祖国的,我就是,所以我在 这里写文章了,看到很多朋友询问去香港读书的问题,作为过来人,就写了这些,如果能给这些朋友提供一点有益的信息,就很满足了。
  
     上次写了文章发表在海外学子版,很多朋友给我回信,给了我很大的鼓励,真的没想到过自己的东西会给别人带来影响。留学的经历给了我很多,几乎是一个 脱胎换骨的过程,在一篇文章里是不可能都讲完的,所以我再写一个续集,好莱坞搞续集纯是为赚钱,我呢是什么都不图,万一有 ppmm看了之后找我,最爽不过。将心底里的一点点“龌龊”都暴露出来,可以痛快讲了。
  
  凡事都是虚空
    来自发展中国家的人,难免在神情上都多一丝生存紧张,中国在海外的留学生尤其让人感觉到这一点。看不到出自内心的笑,连谈话时也似乎只有一个主题:今后有什么打算?每做一件事,都在问自己:对我有没有好处?
  
    坦白的说我自己刚到香港时就是这样,只觉得自己多么没着落,无根无底的飘在他乡,我要努力啊,绝不可浪费自己的任何精力,房子,车子,名誉,地位,还有漂亮老婆,我什么都要啊。要学最能给我带来利益的东西,去做最有利自己的事情,直到我成功。
  
     当时我就是这么典型一????, 到现在我都想这样痛骂自己。数学指出函数的极大值往往在最不稳定的点取到,人追求极端就会失去内心的平衡,到时候就不难体会到数学原理的深刻。我很快让我 的????心理逼到无路可走了,对所学的东西怀疑,担心自己变成书呆子,对自己有信心,找不到真正的朋友,找不到让身心平静的乐趣,每天都在心潮起伏。最 后我去找学生辅导员。愚蠢的诉说倒不多提了,不过我记得他大胡子的脸有了微笑,眼睛里放出宽容而温和的光。他告诉我觉的我很有意思,他第一次遇到这么坦白 的学生。“那些东西有什么意义呢,你怀疑得很好。“之后就翻出圣经来,给我读某些章。everything is meaningless.竟是圣经里的话语。那是我看到的最为震惊的一句话,也是我后来觉得最深刻的一句话。中国人很难理解,对在功利教育里熏陶过来,缺 少人格教育的中国学生,更无异于晴天霹雳。 成绩,ffer, 学位,这样那样的好处,每天拼命算计的东西有什么意义?假设你突然死掉,世界将会怎样?世界将一样绚丽,地球转的一样快,太阳系每天在宇宙中换一个位置。 大海还是大海,波涛还是波涛,一样的花开花落,潮起潮落。你的亲人可能会掉眼泪,但是周围的人在三个月内将你忘个干净,那是你曾经那么在乎他们怎么看你的 一群人啊。如果上帝存在,在他的眼里,你是多么可怜的小虫子,在活着的短暂岁月里,在最美好的青春里,都不曾快乐过,用尽心力去聚集一大堆外在和心灵没有 关系的小东西,只是出于对未来的没有信心,小小的心灵在接近熄灭的一天还在发出那个愚蠢的声音,让你忙碌,让你忧虑的声音:我要,我还要。天底下充满了这 样的小虫子,当一个离开了,又有一个来了,做着同样的事情,汹涌着同样的小小念头,受着同样的煎熬。
  
    于是上帝要感慨了:虚空的虚空,凡事都是虚空。已有的事,后必再有;已行的事,后必再行。日光之下,并无新事。已过的时世代,无人纪念;将来的世代,后来的人也不纪念。 ------圣经 旧约 传道书
  
    我不是在传教,当时的辅导员也不是在传教,但是让我立刻看到自身的渺小,物质追求的虚妄,内心的愚昧。看看资本主义的学生辅导,是不是比我们这边高明多了?马哲曾帮助过我们什么?
  
  不要忧虑
    “不要为明天忧虑,天上的飞鸟,不耕种也不收获,上天尚且要养活它,田野里的百合花,从不忧虑它能不能开花,是不是可以开得和其它一样美,但是它就自然的开花了,开得比所罗门皇冠上的珍珠还美。你呢,忧虑什么呢?人比飞鸟和百合花贵重多了,上帝会弃你不顾吗?”
  
     一个朋友告诉我,他在等美国 offer 的时候,常常梦到接到牛校offer,过度兴奋到醒,更为郁郁,感慨 “但愿长醉不复醒”。这样的故事大家听了不会太惊诧,由此不难理解《儒林外史》中的进中举了。而得到offer的人到了海外,往往要经历更多的梦醒时分。
  
  为什么活得这么累?
    生命本是如此美丽,连飞鸟和野花都可以尽情地享受上天的恩赐,而这些有高等思维的聪明 人,却活活让思维搞得神情郁郁,哀声叹气。常有人感叹西方人笑起来那么真实,那么出自内心,探讨起来,又归结到他们更有钱,他们的社会更发达。可我觉得那 不是原因。原因就是他们比中国学生更接近飞鸟和野花罢了,更接近《阿甘正传》里的弱智罢了。他们更天真,相信那个万能的上帝会永不遗弃他,所以他们可以少 想很多的问题,反而过得更顺利,在团队里表现得更凝聚,因为过分的私心是无法向大家共同的上帝交代的,他们可以很快做出一个microsoft,一个 dell,但是大家可以看看中国的北大方正,联想,新浪,管理层一年的地震比台湾还多,这么多年来,连冲出亚洲的野心都没有真正实现过。这难道不是上帝给 西方人带来的好处,耶稣说信我就可以得救,不管这个上帝是不是虚拟的,但他在事实上填补了人性的巨大空白,人家的microsoft就证明了他的存在,正 如计算机的虚拟内存,尽管虚拟,但事实上的作用是巨大的。中国学生总是怀疑这个看不见的上帝是否存在,更在私下里说,他对我能带来好处吗?其实中国人什么 都不信,只信好处,从古时的考八股起,读书就是为了好处。因此,大家每天活在害怕没有好处的忧郁里,想靠自己小小的思维,在着巨大的世界系统里去谋取好 处,上帝忍了泪水,背过脸去。
  
  思维的无奈
    我并不主张虚无,尽管我在上一篇文章里尽力去指出物质追求的虚 妄。正如萨特认为,人生本是本无意义,但是怎样摆脱虚无却是有意义的。王朔的意义在于砸碎那些没有意义的假崇高,伍迪.艾伦的意义就在于不断指出人生的荒 谬。如果一切都是那么可笑,我们怎样面对每天的24小时?但是活着就是这么简单,它只是一个过程,简单而自然地发生,以至于任何干扰和关注都是多余。就像 飞鸟掠过天空,野花静静地开放。能把什么东西叫做现在吗?你能占有什么东西吗?一切的意义只在时间的流动的河中。就像一团火,哪个燃烧的过程才叫火,一旦 过程停止了,火不存在了。人的思维在作怪,它是一个双面的东西,它不总是带给我们好处,虽然我们对它有那么多自信。思维在很多时候严重地干扰了那个自然的 生命过程,它在想单个的状态好不好,值不值得,合不合规范,能给自己带来什么,所以我们很快变得不快乐,不安稳,再也无法享受那种自然的喜悦了,正像被摄 像的人,他的表情立刻不自然起来。恐怖片里的鬼魂可能一直不曾出现,人们却开始牙齿打颤,是被自己思维折磨而已。学计算机的朋友肯定知道操作系统将一个进 程悬挂起来的意思。人的那个蠢笨不堪的思维,凭什么要常驻内存?它那么长期的运转,又真正解决了多少问题?为什么不在必要的时候悬挂它,去享受生命的自 然?明白这一点将改变你的生活,思维会使你陷入矛盾,很多时候它是多余的,用心去体会,甚至用毛孔去感受就足够了。当你不再判断,不再分辨,不再比较,不 再权衡,你就立刻、和谐起来。“采菊东篱下,悠然见南山”。那时,还用考虑什么呢?“此间有真意,欲辩已忘言”,连言语都是多余,因为言语来自思维。佛陀 的捻花一笑,详和的神情,虽静坐,似乎已飞跃世间一切,他坐在了那个生命的根本之上, 再也没有一丝的不和谐。
  
    读书的 时候,我常常到海边听滔声,坐下来看着太阳落下,那会是我一天最美好的时间,当太阳没下去,晚霞渐渐褪去颜色,波浪依然轻轻拍打岸边,幕色从四周将我围过 来,静默中我会在心灵里升起喜悦,感觉到冥冥中那个永恒的力量,它在紧紧将我抱住,天地万物和我一样同在,也被温和地抱着,我将永不孤独,永不伤心,永不 绝望,因为那力量就一直在那里,将永远在那里,我是它的恩赐,我的灵魂从未像那时一样枝繁叶茂,内心从未像那时一样宁静和谐。
  
     我不用去分辨那种力量,是上帝也好,上天也好,老子说的道也好,有什么关系呢?分辨只是是思维常干的蠢事罢了。所有的心灵都是一样的,所以我相信所 有人都有那个和谐的状态,就像收音机有那个频道一样,只不过太多人没有调到过。太阳,大海,清风明月,鸟语花香,生生不息的物种,是多么大的恩赐啊,只在 我们断暂的生命里才可以感受到,可是太多的人从不念及。他们将自己全部地交给了少得可怜的脑细胞,心灵交给了那个拙劣的 cpu,时时刻刻在做狭窄不堪的运算和判断,所以才会长时间挣扎焦虑,只看到85分和90分的区别,5000元月薪和10万年薪的不同,牛校和烂校的分 辨。所以“郁闷”,“ 无耻”,“倒霉”,“不爽”,“急”,这样的词汇就开始在嘴边泛滥了,就像破电脑的出错提示一样多。
  
  我在香港学习的日子(之四)
     本没有打算再写很多了,关于人生的刨根问底本来就是沉重的课题,无异让学业繁多的学子们再怀疑自己,平添忧虑。倒不如多说点逗乐的事,每天多嘻嘻哈 哈一阵。前不久见到北大的一个女生,说我前面介绍香港的文字很实用,后面的文章就越来越看不懂了,可以理解,并不是所有的人都要像我一样想这些问题的,特 别是女孩,一天多说几声“挺好的”“好温馨哟”就算过得不错了,古今中外都不曾出过一个女哲学家。
  
    前面提到的女生就问 我,在留学过程中最大的收获是什么,我回答是长了见识。就像在小地方呆久的人出来见了大海,这个收获大得很。所以我渐渐地学会了真正的谦虚态度,越来越承 认自己所可以理解到的,可以认识到的只是这世界的太小一部分。在我的脑力范围外有太大的空间,从这一点来看,我们每个人都对自己有过多的自负,每天都在或 多或少的干着坐井观天的蠢事,争论着盲人摸象的争论。
  
    清华北大的学生的人文素养,我想,很多来源于图书馆的人文书籍, 因为喜欢读书的学生多半在那里搬书回来看。可是那些书多产于七十,八十年代,基本上是被一把姓马的刀阉割了的太监式的书,我不怕得罪人。怎么阉割法?举个 例子,“总体而言,宗教是唯心的,错误的世界观,被统治阶级利用来麻痹被统治阶级的广大人民...”从此,你知道了这一点,你么读释迦,读耶稣,读老庄, 都觉得如同太监一般阴阳怪气。在红色的年代里,马刀所向无敌,包括孔夫子到孙中山,从曾国藩到蒋介石,都少有可以逃脱的,因为他们有“阶级局限性”。
  
     但是我到了香港,就看到了很多台湾的书,很多香港的书,原来这些书本不象太监的,甚至不比姓马的书少阳刚之气,可以读得让人忘食,哎,可怜它们的被 阉。这些都是我以前脑子以外的东西,所以我立刻知道要谦虚了,人总是受着他的经历和环境的巨大局限,他甚至不意思到,没有选择地被限制隔离着。
  
    耶稣呢,用我们的眼光看,他太失败了,没有妻子,没有儿子,没有房子,没有财产,没有地位,最后还要被钉死,他只是游走于四方去救助受苦受难的人们,他有余的眼光总是看到了世界的外面,因为他也到过更高的维度里。
  
    庄子至今看来还是活得最浪漫最洒脱的中国人,他是超脱的同义词,他也是高维空间的蚂蚁。
  
    去读他们,去体会那种来自另外一个维度的智慧的震撼,尽管你可能无法改变无奈的现实,但是可以深刻地改变自己,尽管无法摆脱沉重的肉身,依旧无选择地活在平面上,但是,心灵获得了自由。愿意升起你的心灵吗?
  
  我在香港学习的日子(之五)
     每个人都是独一无二的,而且我们永远只能是自己,卢梭说的,对于整个世界我微不足道,但是我对于自己确是全部。事实上我们只对于自己重要,如果我死 掉了,没有几个人会在三年后保持对我的记忆,如果我痛苦,没有几个人会有真正的同情,因为太难了,每个人都无法了解我的意识。所以我们要独立,活着就是成 为自己,那个独一无二的自己,去寻找自内在的完美与和谐,去实现句那没有选择的话: i am who i am。 simply because i am not and can not be anyone else.可是我们受教育,教育的目的就是教我们忘掉自己,去变成一个称为标准的人,不是这样吗?从小学起我们就要评三好,树标兵,学雷 锋,学赖宁。老师总是看到我们的恶习,“你那样子不合行为规范,不可耻吗?”到了大学,我们又自由了多少呢?我们依旧看别人,看典型,看所谓成功者,我们 依旧活在要忘掉自己的标准包围中,去bbs看看,似乎所有人都统一了口吻,gre 2400,拿了牛校offer, 签了著名外企,找到了ppmm, 牛啊,羡慕啊,爽啊,历史走到了21世纪,北大和清华人只剩下一副面孔了,每年招了很多新生,最后就剩下了一个。
  
    比较 是有意义的吗?作为一个独一无二的存在,作为自己的全部主宰,为什么要什么都和人家比才可以找到意义?为什么当别人考g的时候,我也一定要考,为什么考不 过2200就要郁?为什么billgates成功的时候,我也一定要学计算机?可是自己和别人是多么的不同,些不同难道可以在一些欲念的驱动下轻易的忽 略?崇拜是有意义的吗?明星是需要那样追捧的吗?中国的那支烂球队是需要那么多关注的吗?
  
    当我们倾注希望的时候,他们借此赚到了更多的银子,活得更加嚣张,更加让我们失望,我们是在给富翁们献爱心,爱心那么多,为什么不献给需要爱心的更多的人们,为什么不献给自己,独一无二的自己?
  
     当我们崇拜自己,热爱自己,追捧自己,关注自己,我们就都也是明星了。这样盲从将无法发生,起哄将无法发生,个人崇拜将无法发生。这个意义大的很, 至少大跃进将不发生,文革将不发生,我们的经济有可能早三十年走上正轨,现在我们不需要拼命飞跃重洋,中央到地方的官员就不要象现在一样,在亿万人没有工 作时还竭力吹嘘7%的gdp增长,就像阳痿的人,为了脸面,郑重地去声明:请看我浓密的胡须,年增长率7%!

Saturday, May 12, 2007

最佳答案

男人,从他出生的那一天起,就注定这辈子要艰难的跋涉。因为他要承受的是“男人”这重若千斤的称呼。无论如何,这面旗帜决不能倒,男人扛起自己的旗帜,昂然前进。
奋斗,才能成就男人。身为男子汉,一生背负的是对生命的承诺和责任。
男人,一定要堂堂正正。行的正,做的直,不做损人事,不做亏心事。一定要胸怀坦荡,磊磊落落,不计较个人恩怨,不患得患失,大肚能容,容天下难容 之事。一定要努力拼搏,不计较流言蜚语,我走我路,我歌我泣,遇山劈山,遇虎打虎。因为找不到任何理由与人分享,所以把无聊、委屈、痛苦都独自一个人承 担,这就是男人。
男人的快乐多是基于实现自我的快乐,甚至于虚伪的快乐,很多时候,由于没有理由与他人分享,快乐也就悄然而逝,所以男人的包袱往往越减越重。 男人的寂寞是孤悬于世的寂寞。要流泪的时候,因为坚强,忍着把泪水埋藏;要后悔的时候,因为坚强,拼着老命死不认帐;所以男人的肩膀愈承受愈有力量。男人 的坚强是昂然于世的坚强。
男人,笑可以与人分享,苦自己去尝。
一个真正的男人也会有温柔的一面。他会对妻子呵护,对父母孝顺,对儿女关爱,对朋友真诚,也会对陌生人友好,对公益事业热心,偶尔也会在夜里观看繁星,对着月亮遐思飞想,也会对花鸟虫鱼感兴趣,也会看书看到天亮,也会时不时弄出些幽默。
真正的男人,决不板着脸孔,也决不挂满笑容。因为他毋须任何伪装,他以男人的本色而光辉。
生命最大的悲哀不在于贫穷,不在于卑微,而在于价值感和方向感,在于怎么找都找不到理由和哪怕一点一滴一丝一毫的事物引以为自豪,一个男人,倘若失去了骄傲的资本,他就趴下了。
男人有时候会握紧拳头对自己说:“你是行的,你一定会成功。”是男人,就一定要挺起胸膛,至死不变。真正的男人,决不会在任何困难面前被吓倒,决不会对任何英雄顶礼膜拜,决不会在任何大师面前发抖。
男人并不都想成为英雄,只不过是想从英雄的影子里透视到些什么,以此慰藉自己空乏的心灵。
一个好男人,不是拼命不让女人受一点点伤害,而是把对女人的爱视为与对信念一样的崇高,是要用生命去做的事。男人,也正是通过女人对他的肯定、认 可、欣赏、喜欢和爱才获得更大的动力和生命力,然后成就一切。一个优秀的男人,会让女人感到平等、自由、幸福、安定和信任。一个人最难得的就是贯穿于一生 的品质与品格,永远不会褪色。你十八岁是一条好汉,到了八十岁还是一条好汉,那才是真正的男人。
男人,最要不得的就是懦弱、自卑。对一个男人最低的评价就是:“没有男子汉气概,越看越像老太太。”一个男人,扬起的应该是自信的风帆。做任何事都应该胸有成竹,成功时不得意忘形,失败时也决不颓废,一个自以为做不成事的男人是最没用的男人,甚至他已然算不上男人。
你可以做不到胸怀天下,但至少要有一份宽容,举重若轻,大道而行;你可以做不到志在千里,但至少要有一种信念,光明磊落,正道而行。

Thursday, April 05, 2007

经典到发狂

从一美女那里转过来的,晕一个。

7月7日
  我知道我不算帅哥,但曾经有人看我满月的照片时,也说过我左边的鼻孔很偶像派。
8月30日
  独守空房,让人只能浪费;妻妾成群,让人懂得节俭。可是我现在,却在终日浪费中向往节俭。

 5月10日
  我想我是个变 态,我有恋母和喜欢极品熟女的癖好。不然为什么每次看到我们超市主管的那张脸,我都想操 她奶奶?

3月18日
  和女朋友分手之后,我终于明白,幸福要掌握在自己的手中,而不是在别人的嘴里!

  7月9日
  今天看书,看到康熙皇帝在二十三岁的时候已经贵为一国之君,绩伟功丰,我很沮丧;但又看到同治皇帝在二十三岁时已经死了四年了,我平饬恕?

  11月11日
  情人节,孤单的我在饭馆吃面,听到收音机里的点歌节目说:“有一位先生给所有恋人们点歌来表达他的祝福,下面请听《无言的结局》。”……我觉得很不好,人可以无爱,但不能无耻,于是我也打电话点播了一首歌——梁静茹的《分手快乐》。

 7月20日
  以前喜欢过一个女孩,表白了,那女孩问我为什么喜欢她,我说:如果你是我,也会喜欢上你自己的;

  后来,她把我拒绝了,我很伤心,她不了解我,我告诉她:如果我是你,肯定早就喜欢上我自己了!

  12月9日
  今天饭馆的白酒又兑水了!妈的!等我有钱了,也到大酒楼去喝人头马、XO什么的!而且绝对不让他们用八六年和七二年的糊弄我,要喝就来瓶今年的!

 9月12日
  其实馒头是万能的,饿了就可以吃。想吃饼,就把馒头拍扁;想吃面条,就把馒头用梳子梳;想吃汉堡,就把馒头切开夹菜吃……

9月12日
  男人,上半身是修养,下半身是本质;女人,上半身是诱饵,下半身是陷阱。

 9月10日
  单身很痛苦,单身久了更痛苦,前几天我看见一头母猪,都觉得它眉清目秀的……

  6月22日
  男人分两种,一种是好色,一种是十分好色;

  女人也分两种,一种是假装清纯,一种是假装不清纯。

  1月19日
  有些人的爱情是A片,有些是三级片,有些是喜剧片,有些是文艺片;

  我最惨,我的爱情过程是文艺片、喜剧片、三级片、A片、悬疑片、动作片,最后是KB片,更可气的是,还他 妈插播广告……

 2月13日
  明天情人节,我辗转找到一个我中学暗恋的女生的电话,给她发了一条短信:如果只有一碗粥,你先喝半碗,剩下的半碗,我放在怀里给你保温……

  几分钟后,她回了一条短信:你是谁介绍的?一次四百,包夜七百。

  2月14日
  舍不得孩子套不着狼,舍不得媳妇抓不着流氓,舍不得更新得不着收藏……

  今天心情一直不好,昨晚的短信让我知道了,我以前暗恋的女生堕落了,竟然跟我说一次四百……

  当时我很伤心,一边伤心一边翻了翻钱包:

  于是我更伤心了,我连陪她堕落一次的资本都没有……

4月15日
  你问我,幸福在哪里?我告诉你,你踮起脚尖,就能离幸福更近一些,你闭上眼,就能感受到幸福了……

  许久,我们分开,我看着你羞红的脸颊,轻声问你,感觉到幸福了么?

  你温柔的低头,娇声回了一句:你今天,吃蒜了。

 5月10日

  什么叫残忍?
  是男人,我就打断他三条腿;是公狗,我就打断它五条腿!

5月16日
  马善被人骑,人善也被骑。

  人骑马是运动,人骑人是娱乐,马骑人……兽交。

  6月9日
  今天心情不好。我只有四句话想说。包括这句和前面的两句。我的话说完了……

6月9日
  师太,你就从了老衲吧!

  很久很久以后……

  师太,你就饶了老衲吧!

  7月23日

  对付凶恶的人,就要比他更凶恶;对付卑鄙的人,就要比他更卑鄙;

  对付潇洒的人,就要比他更潇洒;对付英俊的人,就要……毁他的容!

7月23日

  上一次恋爱给我的教训是:不要找一个喜欢吃辣的女孩作女朋友。

  每一次请她吃完麻辣火锅,我们在一起亲热时,我都会在痛苦不堪中想起一首歌:《燃烧吧!火鸟》。

 5月23日
  我的原则是:人不犯我,我不犯人;人若犯我,我就生气!

 5月23日
  忽然想起上大学时,老师出对联:国兴旺,家兴旺,国家兴旺。

  班长对下联:天恢弘,地恢弘,天地恢弘!

  后来我被赶出了教室……

  因为我对的下联是:你 妈 的,他 妈 的,你 他 妈的!

  5月23日
  偶然看见书上所谓的当代女子择偶标准:有车有房,父母双亡。

  郁闷。遂写下幻想中的选妻标准:

  家中财产过亿,美貌天下第一,贤惠温柔性感,岳父癌症晚期……

 7月17日
  凤凰重生就是涅盘,野鸡重生就是尸变。

7月11日
  人生啊,不能在一棵树上吊死,要在附近几棵树上多死几次试试。

8月18日
  我才发现,吸引住男人的办法就是让他一直得不到;吸引女人的办法正好相反,就是让她一直满足。

  9月8日
  人生的悲惨在于:辛辛苦苦的作了一晚上内容香艳的美梦,第二天早上醒来居然全都记不起来了!

5月19日
  这个世界不公平就在于:
  上帝说:我要光!——于是有了白天。

  美女说:我要钻戒!——于是她有了钻戒。

  富豪说:我要女人!——于是他有了女人。

  我说:我要洗澡!——居然停水了!

  5月8日
  吃了晚饭在阳台抽烟享受,忽见夜空中一个光点转瞬即逝的划过,心里一激动:流星!于是马上许愿……
  许了六七个愿望,睁眼,烟已经抽完了,顺手扔出阳台,忽然听见楼下一个女孩的声音:“哇!流星!快许愿……”

 3月22日
  记得刚毕业不久的一天,女友给我发了一条短信:“我们还是分手吧!”

  我还没来得及伤心呢,女友又发来一条:“对不起,发错了。”

  这下可以彻底伤心了……

  8月15日
  野猫:走哪儿睡哪儿。

  野狗:逮什么吃什么。

  野男人:见一个爱一个。

  3月17日
  在街上看美女,目光高一点就是欣赏,目光低一点就是流氓。

 4月17日
  朋友说:“我和女朋友有隔阂,我下面给她吃,她说咸,她下面给我吃,我说酸……”
  想了许久,我终于明白了。

  9月6日
    父亲问我人生有什么追求?

  我回答金钱和美女,父亲凶狠的打了我的脸;

  我回答事业与爱情,父亲赞赏的摸了我的头。


5月17日
  科学证实:劣质避孕套容易导致直肠癌。

  5月17日
  香荷碧水动风凉,水动风凉夏日长,长日夏凉风动水,凉风动水碧荷香。

9月9日
  贞操因人而异,比如人们会赞美一个女孩是处女,却也会嘲笑一个男孩是处男。

10月31日
  有人说春天把女朋友埋到地下,到了秋天就会收获很多很多女朋友。

  我朋友相信并照做了,他在春天把女朋友埋到了地下,到了秋天,他被警 察叔叔埋到了地下……

  2月27日
  面对困难时:死都不怕,还怕活着吗?

  面对危险时:活着都不怕,还怕死吗?

  这就是爱因斯坦的相对论……

 2月27日
  女孩在乎的是下半生的幸福;男孩关注的是下半身的幸福……

 2月27日
  如果人生能像电影一样,我一定大刀阔斧的剪辑一遍,把少年时上学的段落剪成字幕,把青年时创业的段落剪成一个特写,把中老年时期的成功片段,剪成整个故事……

 10月28日
  今天约见了一女网友,名叫“稚嫩小妹”,暗号是拿着一只玫瑰花,在约会地点张望,见一女握玫瑰做翘首状,遂逃,晚上联网,质问对方:怎么是你妈来替你见网友?……从此我安静的躺在了她的黑名单里。

  10月28日
  真不明白,女孩买很多很多漂亮衣服穿,就是为了吸引男孩的目光,但男孩想看的,却是不穿衣服的女孩。

  12月31日
  一般来说长命百岁只是祝愿,但人想活一百岁其实很简单,就是你必须咬牙坚持忍受一千二百个月……

  5月17日
  每个人都是天上落下的天使,只不过有的是完好无损的着陆,有的是脸先着地,有的更倒霉,下落的时候直接骑在了围墙栏杆上……

  2月10日
  我终于活着回来了!

  刚刚见了一个网友,长得很像如花,还是毁容版的如花,你能想像么……

 2月10日
  我喜欢把人生交给命运:早上醒来我都会抛硬币,如果正面朝上,我就继续睡觉;如果背面朝上,我就躺在床上看电视。如果硬币落地后是立起来的,我就起来收拾屋子。

 2月22日
  维持生命在于运动,创造生命也在于运动,区别就是——床下床上。

  2月10日
  我慢慢发现,人才是妖精!有些妖精吃人,但人什么都吃,逮着一只妖精没准也能烧烤了!

 6月12日
  凶残的人——没事找个人来杀杀。

  风流的人——没事找个美女睡睡。

  富有的人——没事买辆新车开开。

  我——没事捡个烟头抽抽……

  6月12日
  年少的时候有一段时间,一直想表现自己彪悍的一面,于是想纹身,最终没有实施的原因是:我一直在犹豫是纹蜡笔小新好,还是纹铁臂阿童木好。

  3月11日
  男人都好色,色心稍强一点叫色狼,再强一点叫色鬼,更加强就叫色魔,尤其强那就成了变 态色魔,好色到了极致,被称作人体美学艺术家。

3月11日
  下雨天别出门,雨水虽没毒,湿身事小,淋病事大啊。

  3月11日
  我把她从女孩变成了女人;她把我从男孩变成了....................穷人。

  3月11日
  如果幸福是浮云,如果痛苦似星辰。

  那我的生活真是万里无云,漫天繁星……

  ——赖宝日记摘录3月11日
  男人所说的内在美,指的是胸罩里面,而不是内心。

  3月11日
  我退化了,到现在我还不会游泳,要知道在我出生之前,我绝对是游的最快的那个……

  7月21日
  人要学会自己寻找一些小幸福,比如到街上看一看那些不属于自己的美女,去银行看一看那些不属于自己的钞票,到车展上看一看那些不属于自己的跑车,然后在街上找一个乞丐看,告诉自己:没关系,刚才的那些也不属于他……

  7月21日
  这几天一直下雨,我猜是玉皇大帝在哭,一定是他和王母娘娘的婚姻不幸福,这种不幸福有两种可能,一种是王母娘娘离开了,一种是王母娘娘不肯离开……

  9月23日
  妹妹问我:“哥,接吻是什么样的?”我笑着告诉她:“傻丫头,接吻时要说:猪~~~”

  弟弟问我:“哥,什么是接吻啊?”我说:“接吻?张嘴,伸舌头。”

  9月23日
  经血是子宫在为孤独哭泣,梦遗是精囊在为压抑流泪。月经一月一次,梦遗却不定期,这正说明:男儿有泪不轻弹……

  9月23日
  雌螳螂在交配后会吃掉雄螳螂,残忍么?但一些女人却在交配途中吞下无数子孙后代……

  2月18日
  今晚仰卧,明早起坐,明晚俯卧,后天撑~~~锻炼,有时候就是这么简单。

  6月20日
  小时候经常听说有人因为生活压力大而自杀,那时我懂得死亡,却不明白压力是什么,现在长大了,我懂得了什么是压力,开始不明白为什么还有那么多人活着……

  6月20日
  老天爷给我一双眼睛,让我看到花花世界;老天爷又给我一双手,让我去勤奋劳动挣钱;老天爷再给我一张嘴,让我用它来咒骂老天爷的不公平……

6月20日
  女人无论站多高,蹲下只能湿润脚下的土地;男人厉害了,站的更高,尿得更远!

  6月20日
  又美丽、又纯洁、又温柔、又性感、又可爱的处女,就像鬼魂一样,男人们都在谈论它,但从来没有人亲眼见过……

Saturday, March 24, 2007

探花

  消磨无聊经年,刻纂倩影,割断姻缘。

若个孤客,吹了衣单,放下酒残。

都道是英雄多情,索性作浪子寻欢。

寻欢何处?泊大江湖,忆梅花苑。


  潦倒深醉深眠,游走红尘,戏对红颜。

我在谁边,伊在谁边?不羡神仙。

笑你时潇潇洒洒,哭我时疯疯颠颠。

莫惊我梦,醒又把盏,醉又把盏。

Friday, March 23, 2007

mutt + msmtp + getmail 配置备忘

.muttrc

set locale = zh_CN.gbk
set charset = gbk
#设置邮件储存位置
set spoolfile = ~/spool/inbox
set mbox_type = Maildir
set folder = ~/Mail
set mbox = "+inbox"
set record = "+sent"
set postponed = "+outbox"
#用msmtp发送邮件
set sendmail = "/usr/local/bin/msmtp"
set use_from = yes
# 设置用gmail帐号发信
set from = xxxxxx@gmail.com
set envelope_from = yes
my_hdr From: xxxxxx
my_hdr Reply-To: xxxxxx
ignore headers *
unignore headers from: to: subject date
#set hdr_order to from subject date
#设置快捷键G调用脚本 checkmail 检查新邮件
macro index G "!~/checkmail\n" "Checking mails......"
#处理html格式的邮件
auto_view text/html
#邮件头的颜色
color header brightred black ^from
color header brightblue black ^to
color header brightcyan black ^subject
color header brightgreen black ^date

.mailcap

#设置用w3m显示html格式邮件
text/html; w3m %s; nametemplate=%s.html
text/html; w3m -dump %s; nametemplate=%s.html; copiousoutput

.msmtprc

# Set default values for all following accounts.
defaults
tls on
logfile ~/.msmtp.log
# gmail.com mail service
# 设置用gmail的smtp服务发信
account gmail
host smtp.gmail.com
from xxxxxx@gmail.com
auth on
user xxxxxx@gmail.com
password xxxxxx
port 587
# Set a default account
account default : gmail

用getmail收取邮件的checkmail 脚本

#!/bin/bash
#[username]和[password]用真实的用户名和密码代替
echo -n "Checking "
echo -n "xxxxxx@21cn.com "
getmail_fetch -d -q pop.21cn.com [username] [password] ~/spool/inbox
echo -n "xxxxxx@tom.com "
getmail_fetch -d -q pop.tom.com [username] [password] ~/spool/inbox
echo -n "xxxxxx@163.com "
getmail_fetch -d -q pop.163.com [username] [password] ~/spool/inbox
echo -n "xxxxxx@gmail.com "
getmail_fetch -s -q pop.gmail.com [username] [password] ~/spool/inbox
echo "Done."

Friday, March 16, 2007

Linux的声音系统

作者:Roderick W. Smith
翻译:windrose

从Linux控制台唤起你注意的简单的“丁”声,到DVD的环绕声,今天音频已成为桌面计算的重要部分。确实有许多计算机用户不需要声音,但是声音能够为许多计算机任务增色。正是如此,音频硬件已经成为一个几乎所有主板和操作系统,也包括大多数Linux发行版,的通用部件。

不幸的是,配置Linux的声音是一项让人头疼的事。在Linux中,有3套音频驱动,使用着两种不同的API。在这些驱动之上,还有几种支持库,目的是让程序员的日子好过一点,但对最终用户增加了配置的复杂性。实际上,对于一个普通用户,让系统发声会成为一项令人沮丧的经验。假如某个发行版没有正确地配置好声音,最终用户面对的将是寻找、安装和调试各种模棱两可、没有完善文档的设置选项。

作为对Linux声音系统的调查,让我们从对声音架构的总体认识开始。了解多种音频流如何混在一起同步发声也正日益重要。在这些话题的基础上,对于特定驱动的认识就显得很必要。声音设备文件以及它们的权限经常是发生问题的根源,所以我们也会谈到这个话题。此外,支持声音的库文件既可以是祝福

Linux声音系统全貌

理想化地说,音频应用程序应该是直接了当的:发出一个命令或点击一个按钮,就可以听见预期中的声音。在这个情形的背后,Linux采用了几种层次的工具来发声,如图1所示。

sound_02
图2: 混音器使你能够设置声卡的音量

声音数据在某个应用程序和声卡之间准确的传输路径,取决于该程序以及系统的整体配置,会有极大的差异。由于这个原因,追踪声音的问题也就非常困难。到底问题是出在硬件损坏、驱动程序的编程错误、库文件的错误配置、应用程序出错还是这些问题之间的相互作用呢?

如图1所示,声音库和应用程序都可以直接和声音驱动程序打交道或者依赖于其他的库。有些应用程序和库提供了多种选择:它们既可以直接使用驱动程序也可以通过其他的库来做。虽然图1还不很完备(还有数十个小的声音支持库),但已经涉及了许多最常用的工具和库,包括:

  • 声音硬件 - 尽管在图1中只显示成一项,实际上有许多不同种类的声音硬件。如果没有支持你的硬件的Linux驱动程序,你可能该买个新的硬件。
  • OSS - 2.4.x版内核系列中,OSS的开源版本是标准的Linux音频驱动。4Front Technologies (http://www.opensound.com)公司还提供商业版。对于软件来说,标准的内核OSS驱动和商业版OSS驱动没什么不同。多数Linux库和发声工具都支持OSS。尽管2.6.x版本的内核中还包含OSS,但是它们已经正式被ALSA所取代。
  • ALSA - 高级Linux声音架构(ALSA,http://www.alsa-project.org)是OSS的替代方案。ALSA既兼容OSS,又提供了新的音频界面方法。ALSA作为2.6.x内核的标准配备,也能在编译成用在以往的内核上的模块。
  • ESOUND - EsounD是一个库以及后台服务,目的是无论使用OSS还是ALSA,它都为Linux音频系统提供一个统一的界面。EsounD还提供了一些底层驱动程序所没有提供的额外特性,例如支持多音频流同时发声(这个库有时也叫做esd)。
  • POLYPAUDIO - 这个库是意图取代EsounD的不速之客。
  • ARTS - aRts(http://www.arts-project.org)与KDE相联系的声音库。它能用EsounD、ALSA或OSS作为输出。你通过与之关联的后台服务使用aRts来产生对网络传输透明的声音,对于使用网络瘦终端来说会很方便。
  • SDL - SDL(http://www.libsdl.org)是一个游戏开发者常用的跨平台的多媒体库,它经常用名为libsdl的包安装在Linux系统中,它可以依赖于多种其它的库或者直接和声音驱动打交道。
  • 声音应用程序 - 最终你的兴趣在于使用声音应用程序,例如XMMS(http://www.xmms.org)。这些程序可能直接用到一种或多种的音频驱动,可能依赖于某个库,或者给你提供几种选择。
也可以是诅咒,所以了解它们也很有帮助。在文章的结尾,当掌握了前面的基础知识,你可以测试和使用声音工具,并且设置常见发声程序的选项。

处理多音频流

Linux声音系统的一个烦人的方面在于处理多音频流。传统上,Linux声音系统是单线程的:如果某个程序在发声,别的程序就不能发声了。在某些情况下,这样会产生问题。

例如,假设你设置了让email软件在有新邮件到达时发声。如果你正在听一个OGG文件而有邮件来了,邮件程序将不能发出新邮件到达的提示声。随着越来越多的简单程序具备了发声功能,这种限制成为一个越来越严重的问题。

解决这个问题有两个办法:为音频驱动添加多线程支持和为音频库添加多音频支持。可以认为,为音频驱动添加多线程支持是最好的办法,因为直接使用音频 驱动的程序无须修改。如果你的所有程序都使用同样的库,用库文件来处理这个问题则更快速,但是只要有一个程序是直接使用音频驱动的,这个好处就非常受限制 了。

今天,许多ALSA驱动支持多音频流。然而,这种支持在一定程度上取决于音频硬件。同时,ALSA的OSS模拟对多音频流没有支持──使用OSS的 程序享受不到这种好处,除非它想和使用了ALSA的其它程序竞争。OSS也采用了一些多线程的支持(常被称为多线程OSS)。EsounD、aRts和一 些其它库也支持多线程发声。

从实用上说,你应该尽可能多地采用多线程的选择。假如一个程序能让你选择使用多线程的库还是直接使用不支持多线程的驱动,那么在所有可能情况下应选 择用库。假如你可以在ALSA和OSS之间选择,而你的ALSA驱动支持多线程,则使用ALSA驱动。你可能无法设置每个程序都使用多线程的方案,但是你 很可能能把大多数频繁使用声音的程序设置成多线程的。


启动驱动程序

驱动程序代表着Linux声音系统的核心。因此,编译和安装驱动是至关重要的。不幸的是,这个任务有时候看起来像是巫术。Linux的音频驱动是出 了名的难伺候。在驱动程序层面的出问题的原因包括选错了驱动、不同种类驱动(ALSA和OSS)之间的相互干扰以及用了错误的驱动程序(通过错误的声音设 备文件,很快会谈这个话题)。

首先你必须决定是采用ALSA驱动、内核OSS驱动还是商业版OSS驱动。为此,你应该在有关网站或使用内核配置工具查看你的硬件兼容性。假如你的 硬件有多种驱动的支持,你得逐一测试以找出最好的那个。但是要小心 -- 如果你试图同时直接把两种驱动加载到内核,最多只能是其中之一能够工作。要想逐个尝试,你需要编译两个内核或者把驱动编译成模块,这样就可以随你的意愿加 载或卸载了。

假如你的系统已经有了基本的声音,最好不要改变配置,除非真有这个必要(例如,你因为别的原因需要重新编译内核)。

当挑选需编译的驱动时,选择“Device Drivers, Sound, Sound Card Support”这一选项。然后,在ALSA或OSS之间作出抉择并设定选项。

通常情况下,把声音驱动直接编译进内核比把它们编译成模块要容易得多,但是编译成模块会更有灵活性,因为你可以随意加载或卸载。编译ALSA模块 时,要选择OSS兼容的选项(对于mixer功能和PCM功能都要选),因为许多程序编程时是直接使用OSS设备的,如果你不包含兼容层,它们将不能工 作。假如你想使用商业的OSS驱动,你必须在内核设定基本的OSS支持,但是不要选择把你的声卡驱动编译进内核(最多只是把它编译成模块)。

一旦你重新编译了内核并用新内核重新启动之后,声音可能正常也可能不正常工作,这取决于你设的选项是否准确。如果你把关键功能编译成了模块,你需要 加载它们。你可以用常用的命令,例如modprobe做到这一点。然而有些驱动需要在加载时设置特定的参数,ALSA就常有这种情况。请在ALSA网站查 看详情,每种声卡都有所不同。典型情况是,你必须把几行alias命令加入到 /etc/modules.conf 文件中去。



声音设备文件

许多Linux驱动允许程序通过读写设备文件来使用硬件,这些文件存在 /dev 目录和子目录里。对于音频设备也是如此。不使用库文件的程序会直接使用设备文件,而使用了库文件的程序通过库文件间接地使用设备文件。

表1概括了对应OSS和ALSA的最重要的音频文件。这些设备文件依据它们的用途分属于几个范畴。(多数文件名以0或C0D0结尾。当你有多个声卡时,这些数字会变化,有些情形下会完全省略掉。)

表1: 重要的音频设备文件

设备类型OSSALSA
数字取样/dev/dsp0/dev/snd/pcmC0D0
Sun音频兼容性/dev/audio0N/A
混音器/dev/mixer0/dev/snd/mixerC0D0
高层音序器(high-level sequencer)/dev/music0N/A
低层音序器(low-level sequencer)/dev/midi0N/A
声音状态/dev/sndstatN/A
控制文件N/A/dev/snd/controlC0

对于大多数功能来说,最重要的文件是处理数字音频的输入和输出的数字取样文件,以及使调音程序能够控制音量的混音器文件。Sun音频兼容性提供了与 Sun工作站兼容的界面,对应于一些非常老的程序。音序器(sequencer)文件使你能播放MIDI文件,但不是所有的驱动都支持这个特性。状态和控 制文件给声卡提供了信息和控制的界面。

早期版本的ALSA要求你运行一个叫snddevices的脚本来产生声音设备文件。这些文件在后期版本的ALSA应该是自动生成的,或者应该在多数现行的Linux发行版中默认建立。

尽管如此,假如你找不到适当的声音设备文件,你应该找找snddevices脚本并运行一下。

有个重要的细节是,打算使用声音应用程序的用户必须对设备文件有读和写的权限,至少对OSS风格的访问有这种权限。多数Linux发行版用两种途径 之一来处理这个问题:或者提供一个具有写权限的组(例如audio或sound组),你可以把用户添加进去;或者把设备文件的所有权改成当前登录用户。前 者会在用户远程登录并使用声音应用程序时产生冲突,而后者会在系统有多个用户登录时出问题(例如,你特地用多个用户名登录

安装库文件

许多程序依赖声音库,所以首先你必须安装这些库文件。幸运的是,如果你知道需要哪些库文件,这项任务是相当简单的,只要找到并安装适合你的发行版的软件包就行了。

库文件的部分问题在于,你不一定知道使用一个特定程序时的具体要求。有些程序在找不到所需的库文件时,会把一些选项隐藏起来。另一些不提供先决条件的说明,特别是当你从tar.gz格式(tarball)安装,或者是用其它绕过你的包管理系统的方法安装时。

然而,当通过RPM或用Debian的包来安装程序时,如果你试图安装的软件依赖于一个你还没有安装的库文件时,包管理工具会发出提示。在此情况下,你需要循着线索找到那个库。(有些包管理工具,例如APT,会自动帮你做这件事)

值得稍微详细地介绍一下Gentoo。由于它采用的是“全部自己编译”的方式,Gentoo让你在程序中明确包含或排除对特定音频库文件的支持── 至少对于在编译时支持这些选项的程序如此。/etc/make.profile/make.defaults 文件包含了在可能情况下应该用到的所有库文件的清单,每个占一行。

假如你知道你不想用到某个库,比方说SDL,除非绝对必要,你应该在上述文件里面注释掉sdl这一行。你也可以在每次运行emerge时个别改动, 通过加入库的名称以提供支持,或者在库名称前面加个“-”(比方像这样 -sdl)来忽略对这些库的支持。然而,这些选项只会在当这些库被列为软件包的“可选”(optional)库文件时才有效。

例如,如果软件包必需SDL才能正常工作时,在emerge命令中指定 -sdl选项将不起作用。你应该小心这些问题,因为可能造成程序的选项出现或消失。在某些情况下,它们还会影响到程序的音频质量。如果一个库比起另一个 来,能更好地在你的硬件和程序上工作,你的选择就会影响到声音输出的质量。

为了得到这种控制权,在传统的二进制Linux发行版上,你必须用源码重新编译软件包,这么做要么干脆绕过包管理系统,要么用你喜欢的编译选项产生定制的软件包。

有些库提供了设置各种选项的配置工具。例如,aRts让你选择用ALSA、OSS还是EsounD(很快会更详细介绍)。你可能要看看库文件的文档来了解它提供了哪些选项。


测试和使用声音工具

所有的库文件和驱动程序安装之后,就可以着手测试声音了。做这件事,最好从最简单的工具入手 ── 即那些不依赖于驱动程序的。然后,再逐步向“上”测试用到不同的库文件的其它工具。

  • play
    play命令直接通过OSS驱动(或者ALSA对OSS的兼容层)播放声音文件。例如,输入 play test.wav 来播放 test.wav。除了用 cat 直接发送一个声音文件到声音设备文件(这将极大地扭曲声音)之外,这是测试你的声音系统的功能和可操作性的最简单办法了。如果你使用了ALSA但是没能成 功编译或加载OSS兼容支持,play命令将不起作用。
  • aplay
    aplay在ALSA中的作用等同于play,用法也完全一样。如果你用ALSA,两个工具都应该试一下。如果aplay能用而play不行,通常表明你没能成功编译或加载OSS兼容支持。
  • esdplay
    这个命令与play,aplay非常类似,只是它通过EsounD播放文件。

这些程序都只播放相对简单的文件,例如.wav文件。它们不能正确处理MP3、Ogg Vorbis或其它复杂的文件类型。

理想情况下,你能以普通用户的身份使用这些程序。然而,如果你在OSS设备文件上的权限不正确,你可能只能以root身份播放声音。果真如此,检查一下你的设备文件的权限然后再试试。

这些程序都有对应的录音程序:rec,arecord和esdrec。你应该能够用这些命令来录制一个声音文件。取决于你的混音器设置,生成的文件可能完全是空白的,即使你已经给了声卡一个适当的输入。

谈到混音器(mixer),这里需要注意一下,特别当你使用ALSA的时候。按照默认设置,ALSA启动时所有的输出频道都是静音的。 因此,你可能能播放一个声音文件,但是却什么都听不到(播放程序可能暂时“冻住”了,但过了一会儿当文件静悄悄地播放完,又“解冻”了)。有很多种混音器 程序,包括mixer,amixer,alsamixer,kmix以及gnome-volume-control。前三个是文本界面的,其余是图形界面 的。amixer和alsamixer仅使用ALSA接口,其它的使用OSS接口或者两者都支持。图2显示了gnome音量调节程序。

sound_02
图2: 混音器使你能够设置声卡的音量

你应该确保你所需的频道解除了静音并且音量调节滑块设置在恰当的水平(你需要通过试验才知道何谓“恰当”)。“Mater”和“PCM”选项对于放音至关重要。如果想播放音乐CD,你可能还需要设置CD选项。

为了录音,通常你必须对“Mic”(麦克风)或者“Line”选项解除静音。许多声卡提供了额外的选项,可能很重要,也可能无关紧要。例如,假如你只有传统的2个喇叭,环绕声的音量选项就不重要,然而如果你用了全套的环绕声系统则另当别论。

当重新启动计算机时,混音器的设置将被重置。为解决这个问题,你可以用一个能从文本文件中读入音量设置的文本界面的混音器。在本地的启动脚本中,如/etc/rc.d/rc.local,加入对这个程序的调用,或者从一个SysV风格的启动脚本中设置调用。

对于OSS来说,mixer程序是个好选择,但是你要从试验中找出最好的选项。详情请查看manpage。对于ALSA,一个捷径是用 alsactl。这个程序能把当前的混音器设置存到一个文件中或者从文件中读出来。当你用自己喜欢的混音程序调节满意之后,用root身份输入 alsactl store 。这个命令将把混音设置储存到 /etc/asound.state 中。此后,你就能在一个启动脚本中调用 alsactl restore 来恢复设置(有些发行版的ALSA启动脚本已经包括了这个功能)。

除了简单的放音、录音和混音程序之外,还有许多更为复杂的音频工具。例如,xmms是播放Ogg Vorbis和MP3文件的常用程序,xine是播放MPEG流媒体的工具,当然,还有许多游戏也播放声音。事实上,声音已经用在许多你通常意识不到会放 音的程序中。例如,大多数桌面环境,像KDE和GNOME,都能把声音和特定事件联系起来,比如说启动一个程序或控制台铃声。


设置 KDE/aRts 选项

许多应用程序和库提供了与声音有关的选项。这些选项你让你选择声音如何输出(直接通过驱动程序还是通过库),或者提供更精细的选项(例如时序选 项)。如果你安装了多个声卡,你也许能选择想用哪一个。尽管将所有应用程序的所有选项罗列出来是不可能的,一些例子能让你建立起有哪些是能做的的概念。

我们来看看设置 KDE/aRts 选项和 XMMS 的选项。

KDE让你通过控制中心来调节输出选项(输入kcontrol命令或在菜单里选择)。这些控制实际上是设置aRts──KDE的声音库。这些选项位于控制中心的“声音和多媒体,声音系统”部分,见图3(有些发行版在名称上可能稍有不同)。

sound_03
图3.KDE控制中心使你能设置aRts选项

“General”标签让你设置有关网络可达性、CPU使用率已经自动挂起(auto-suspend)之类特性(当驱动程序不支持多线程,而且你 也无法告诉aRts使用一个低层的多线程库时,最好是启用最后那个特性)。你也可以点击“Test Sound”和“Test MIDI”来测试aRts的设置(后者不是在每种声卡上都起作用)。

“Hardware”标签设置低层的选项。要特别注意的是“Select the Audio Device”按钮。你可以告诉aRts在几种低层的驱动和库中选择哪一个。典型的选项包括auto-detect,ALSA,OSS,Threaded OSS和EsounD。在不同的系统上,列出来的内容会有所不同,取决于安装的驱动程序和KDE编译时的选项。

默认设置通常是auto-detect,而通常也是可以接受的。然而,如果KDE应用程序(或其它使用aRts的程序)的声音质量有问题,或者 KDE的声音特性与其它程序发生干扰,你可以试验其它选项。你也可以设置额外选项,例如取样率和质量。再一次,默认选项通常是可接受的,但是出问题的时候 你也调整。

设置 XMMS 选项

作为一个专门的多媒体应用程序,与多数程序相比,XMMS提供了更多的音频选项。然而,这些选项并非完全是显而易见的,在 XMMS 菜单条上按鼠标右键并选择“Option,Preferences”,结果就是图4显示的 XMMS “Preferences”对话框。

sound_04
图4: XMMS 首选项对话框让你设置XMMS的输出选项

XMMS 最重要的选项是“Output Plug-in”按钮,使你你选择输出驱动。通常你能在ALSA、OSS和EsounD之间作选择,然而准确的选项依发行版和安装的输出插件的不同而不同。

一旦你选择了要用的输出方式,你还能点击“Configure”机型微调。它会带来一个插件特定的对话框让你来设置其它特性。例如,用 ALSA 插件,你能选择要用的音频设备、启动或停止Mmap模式等等。

有时候,这些选项会对你听到的声音质量造成很大的影响,所以出现问题时,你应该尝试不同的选项。











)。






Monday, March 12, 2007

(ZT)清朝最后一次科举试题 看看你能考中状元吗

第一场,史论5篇:
  “周唐外重内轻,秦魏外轻内重各有得论”;
  “贾谊五饵三表之说,班固讥其疏.然秦穆尝用之以霸西戎,中行说亦以戒单于,其说未尝不效论”;
  “诸葛亮无申商之心而用其术,王安石用申商之实而讳其名论”;
  “裴度奏宰相宜招延四方贤才与参谋请于私第见客论”;
  “北宋结金以图燕赵,南宋助元以攻蔡论”。
  (第1题藩镇,第2题平戎,第3题举贤,第4题变法,第5题以夷制夷,还真是理论联系实际,就是最后一题不太吉利,有亡国之兆。)
  第二场考各国政治,艺学策五道:
  1,“学堂之设,其旨有三,所以陶铸国?造就人才,振兴实业.国民不能自立,必立学以教之,使皆有善良之德,忠爱之心,自养之技能,必需之知识,盖东西各国所同,日本则尤注重尚武之精神,此陶铸国民之教育也.讲求政治,法律,理财,外交诸专门,以备任使,此造就人才之教育也.分设农,工,商,矿诸学,以期富国利民,此振兴实业之教育也.三者孰为最急策”。
  2,“泰西外交政策往往借保全土地之名而收利益之实.盍缕举近百年来历史以证明其事策”。
  3,“日本变法之初,聘用西人而国以日强,埃及用外国人至千余员,遂至失财政裁判之权而国以不振.试详言其得失利弊策”。
  4,“周礼言农政最详,诸子有农家之学.近时各国研究农务,多以人事转移气候,其要曰土地,曰资本,曰劳力,而能善用此三者,实资智识.方今修明学制,列为专科,冀存要术之遗.试陈教农之策”。
  5,“美国禁止华工,久成苛例,今届十年期满,亟宜援引公法,驳正原约,以期保护侨民策”。(这种题目放在现在考,偶看都够用了)
  第三场《四书》《五经》
  首题为:“大学之道,在明明德,在亲民,在止于至善义”,
  次题为:“中立而不倚强哉矫义”。
  三题为:“致天下之民,聚天下自货,交易而退,各得其所义”。

zz:从不合事实的“温水煮青蛙”比喻看经济学家们的愚蠢

原文题为:经济学家和真正的动物世界,作者:苏杨(国务院发展研究中心社会发展部),这里的转贴有删节,全文转贴至unchanged.tianyablog.com

   [Blog主人陈安按语]我觉得非常需要批评一下那些无知盲从的读者和听者们,他们从来没有过自己的判断力,往往听风就是雨,并十分乐意于广泛传播荒谬 但是显得有趣的东西,而丝毫不去思考其间的荒谬。最近又有人认为中国缺少人文精神,说这话的人往往是那些文科的学者们,对于科学一无所知,也没有能力掌握 科学方法,我觉得这真是件很无奈的事情:想来,我们不习惯于理性的中国从来没有过最重要的科学精神吧,到今天我们仍然最缺它!虽然如此,可是我们居然不知 道我们到底缺的是什么,这才是更可怕的事。
  
  我特别害怕经济学家拿动物现象打比方说事,因为结果往往是不知哪儿的动物,不知哪儿的事,非常荒谬。现在已经妇孺皆知的“温水煮青蛙”故事好像就是这样成的真理。
  
   温水煮青蛙“真理”在现象上的一般表述是:把一只青蛙放进沸水中,它会立刻全力挣扎跳出。而把青蛙放进冷水中慢慢加温时,情况就变了:从冷水到沸水,尽 管没有什么障碍限制青蛙跳出,但青蛙会习惯乃至麻木于这种环境微变直到被煮熟。与此现象配套的“科学解释”(即真理)为:青蛙内部感应生存威胁的器官,只 能感应出环境中激烈的变化,而对缓慢、渐进的变化,则几乎没有作用。这个其实不过就是“生于忧患死于安乐”主旨的故事通常被经济学家用以告诫企业领导晏安 鸩毒的危害和防微杜渐的重要。由于其颇为符合侦探小说“意料之外、情理之中”的要诀,很能吸引人的眼球,于是很快风靡一时直至家喻户晓。
  
  但这是真事吗?所谓的“科学解释”真的在“情理之中”吗?一般人尤其经济学家只是敏感于此表述的新奇和生动,却忘了用心思考这么非同寻常的事是故事呢还是真事——其实不用费心思考和苦心调研,顶多花半天时间就能证实或证伪。以我的亲身经历作证吧。
  
   我第一次听说“温水煮青蛙”时,也当然觉得真是有意思,且深为能发现此现象并将此类比到社会生活领域的经济学家所折服。但转念一想,以我和那么多动物打 过交道的经验(有时还是“残酷”的实验),作为两栖类变温动物的青蛙,对水温的敏感必为人不能及,似乎不可能在主要生存技能方面如此弱智。再说了,如果让 我和青蛙换位思考,这水温渐变起的麻痹作用难道比毒品还大?即便水温上升再慢,总有一个致痛温度吧。届时,本能也会驱使我垂死挣扎,断不会听凭那水被我改 造为肉汤。有此疑惑,赶上下乡调研,便真的找来若干青蛙煮之。我以为,水温上升愈慢,越接近于此现象发生的理想状态,因此釜底抽薪、扬汤止沸甚至冷水勾兑 等办法全部用上,每小时升温不到10度——几乎看不见冒热气。刚开始,青蛙的确慵懒于水面假寐。但水温超过30℃以后,青蛙“醒”了,开始了蛙泳,且动作 幅度越来越大。水温超过40℃以后,锅内的水体开始泛波,青蛙在反复“助游”之后终于起跳。尽管被我一再镇压,但还是奋不顾身抓住我的防守空当出锅了。我 不甘心,换只青蛙再试,结果是一定的:当水温超过40℃时(青蛙的一生一般遇不到这样的温暖水体),青蛙必定一跃而起,根本不管这个说法多么生动、合理, 也根本不顾及那么多VIP的面子——有多少经济学家传授过这个说法啊!
  
  真是遗憾,青蛙死活不愿成全经济学家,而“温水煮青 蛙”还是所有我听说过的经济学家讲述的动物故事中听上去最真的。其它的,根本毋须我费心尽力做实验,故事中的创作痕迹昭然若揭。例如,某著名经济学家提出 的描述浙江台州、温州经济发展模式的“小狗经济”。“小狗经济”本意是讲小狗虽然个小,但齐心协力且善于抓住斑马的弱点——鼻子——进攻,所以小个吃了大 个。其实,所谓小狗(根据这位经济学家有关文章的描述及配图,可知小狗是这位经济学家对非洲草原上社会性最强的动物——非洲三色野狗——的俗称)吃斑马, 以动物学的基本原理之一——捕食所得必须大于捕食中考虑风险情况下的体力投入(与经济学中“市场条件下产出大于投入的行为才是自发的”原理很类似)——来 看可能得不偿失。动物捕食肯定是吃柿子照着软的捏,本来通常以吃愚钝的角马(而且还只是老弱病残)为主的非洲野狗,捕食斑马是很罕见的——主要是因为很危 险,而且斑马肉从非洲野狗的营养需要来说并不优于角马肉(我还正好看到过野狗在追逐斑马时伤于斑马蹄下最终不治而死的“动物世界”节目)。千万年来的经验 和教训已经教会了非洲野狗不要碰斑马,少数“不懂事”的野狗也迅速死于非命。结果,尽管非洲野狗的团队精神最强、捕食技巧相对最好,但其肯定吃不上斑马 肉。那位著名经济学家可能考虑到斑马对中国人来说比角马亲切、熟悉多了,所以不惜“自主创新”——我相信他绝对没有在电视上见过非洲野狗捕食斑马。
  
   另外一个故事是:谁钉住了壁虎的尾巴?故事是说日本某户人家,拆木板墙时,发现有一只壁虎被外面钉进来的钉子钉在尾巴上,而那钉子是10年前钉的。动不 了的壁虎为什么能活呢?原来另一只壁虎在不停地衔取食物喂它。用小壁虎来教育大人类,更感人了,更发人深省了。可是,稍微有点动物学常识,就会想到:一只 壁虎能活10年吗?何况,壁虎本是以应急断尾著称的!这种大愚若智且以讹传讹的造假放在别的领域,例如说汽车跑得比自行车快主要是因为轮子多,一定会被人 认为是疯话。但在动物世界怎么就如此频繁呢?在古代这事可是指鹿为马的笑话啊。尽管高智商、博闻强记的经济学家一般还不会无知到臆造“壁虎故事”这样过于 离谱的“动物世界”。但他们的确是时下“创作”动物行为、幻想“动物世界”的主力。我分析,在经济学家中普遍出现这种现象的原因有二:
  一是自己很无知但是却不自知。
  二是自己的无知得到了读者无知的配合因而养成了对涉及“动物世界”的研究不求甚解的习惯。

Sunday, March 04, 2007

一些很彪悍的句子

爷爷都是从孙子走过来的……
  --所有的大白话中都蕴涵着真理
  
  
  其实我是一个天才,只可惜天妒英才!
  --可以看成借口,不过也还有用,心理暗示加乐天知命
  
  
  都是水何必装醇,都是色狼又何必装羊!
  --至少你不伪善,伪善比无耻强得多了
  
  
  你看得见我打在屏幕上的字,却看不到我掉在键盘上的泪……
  ---可以和某位IT精英的与狗聊天论相呼应
  
  
  师太,你就从了老衲吧……
  师太,你就饶了老衲吧……
  --某ID被人篡改得可以为一字之师,真是终生难忘
  
  客官请自重,本姑娘是卖身不卖艺的!
  ---NND,面对很多明星,也许,这才是人格。
  
  
  长个包子样就别怨狗跟着!
  ---白话有白话的痛快。
  
  
  学海无涯,回头是岸!
  ---考研,混硕,读博,出国……以佛眼相看
  
  猪有猪的思想,人有人的思想。如果猪有人的思想,那它就不是猪了——是八戒!
  ---可以用来对付某些伪精英的言论,诸如房子太便宜,穷人都去死……
  
  
  我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变?
  ---面对很多废而又立的事物,不要忘记,此类事情,终究是涅盘的少,尸变的多
  
  
  老天,你让夏天和冬天同房了吧?生出这鬼天气!
  ---面对气温变化莫测的陡变,真正的诗人如是说
  
  
  不要在一棵树上吊死,在附近几棵树上多试试死几次~
  ---这世界本没有彻底完蛋,失败多了,才成了破产清盘
  
  
  
  当头晕的时候我终于明白了什么叫爱情。
  ---相对于你恋爱时的献媚,这是至理名言
  
  
  偶尔幽生活一默你会觉得很爽,但生活幽你一默就惨了~
  ---生活真的很幽默
  
  
  心终于可以放下了,原来那100多个是人头不是猴头!不然死了那么多猴猴多可惜啊……
  ---个人认为,这是对前阵子,某条新闻最彪悍的评论
  
  
  马化腾私下说:“学十年语文没有聊半年QQ效果好!”
  ---如果这真是马化腾说的,至少可以说是他这辈子最真实的言论
  
  
  早餐里吃到刷锅的金属丝很正常,这正说明我们后勤是严格按照先刷锅后做饭的顺序操作的……
  ---塞翁失马论是一种普适的真理。还有苦中作乐的好处
  
  
  
  大便的时候要留一半,免得饿得快~
  ---这人一定发财了
  
  
  女人拥有无数个QQ号只为了调戏一个男人,男人常用一个QQ号上面加满各种各样的女人……
  ---你有几个QQ号?
  
  淫的一手好湿并不难,难的是淫一被子好湿!
  ---丽华这阵子真的被全国人民策醉哒
  
  
  钓鱼岛是中国的,你是我的!
  ---这才是爱国主义浪漫爱情诗人的作品
  
  
  菜刀在手,问天下谁是英雄!!!
  ---有苏公豪放派词风

Friday, February 02, 2007

[转载] zz一个北大学子毕业后的感悟(转载)

还有这个


发信人: anxi (司马昭之心,路人皆知), 板面: Optical

标 题: [转载] zz一个北大学子毕业后的感悟(转载)
发信站: 飘渺水云间 (Tue Jan 30 09:39:55 2007), 转信

【 原文由 vicwzh 发表于 Work 讨论区 】
1,我刚工作的时候,在一家小公司,很小很小的。和我一起进去的另外2个都是普通一点的
学校的。我

们刚去的时候,基本上有了电话都是我站起来跑过去接,其它人根本就不动身。以至于到了
后来,电话

一响,如果我不起身,大家就会一直等着,一直等到我终于忍不了了起身去接。每天下班以
后,我要检

查办公室的垃圾袋,看看是不是需要把垃圾袋提走。而其他人,比如老员工和另外的实习生
,他们根本

不会去提垃圾袋。我是北大人。我不狂。

2,工作形势非常严峻。尤其是对于刚毕业的学生。如果是大公司,它们可能有能力支付生
手的培训时间

和金钱,也有能力承受生手因不熟悉业务而给公司带来的损失,但是对于绝大部分小公司,
它们根本就

不愿意或者说无法承受这些。所以在一个大专毕业的熟手和一个北大毕业的生手中间,他们
宁可选择前

者。

3,中关村乃至海淀乃至北京,是一个廉价高等教育人才市场。这个大环境决定了我们在用
人单位眼里,

都是金属,而不是金子。在这里,大学生就是廉价劳动力,商人看刚毕业的大学生的感觉,
和建筑工地

上包工头看民工的眼光没有任何区别。尤其在以赚钱为唯一目的的大部分小公司。所以,刚
毕业的同学

最需要做的,就是赶紧让自己成为一个熟工。

4,在学校的时候,多交几个真心的朋友。因为工作以后,你可能就永远丧失了交朋友的权
力和勇气。特

别是同事,你可能一直到离开某个单位的时候,你都恋恋不舍,觉得这个单位的同事很不错
。但是没准

在后来的某一天,你突然因为偶然的机会发现,每天对你温柔微笑的同事曾经在你背后捅了
一刀或n刀,

而这些刀的直接后果就是你滚蛋。

5,在学校的时候,好好享受自尊的感觉。有人说,他读大学的时候,以为他毕业后要变成
一条狗只需要

3年的时间,但是工作后,他发现对自己真是太不自信了,其实要变成一条狗根本不用3年,
半年就足够

了。这话是我大4时看见的,过了2年后,我发现这条伟大真理完全可以和牛顿定律媲美。我
们在北大里

,享受的是中国最大的自由和民主,这是个可怕的甜蜜。因为当你第一次受到指着鼻子的责
骂时你一下

子无法接受。

6,你在北大的时候,可能会觉得某人很俗。离开北大的时候,你可能会立志你绝对不要俗
。但是过了几

年后,你会发现只有那些完成了由不俗到俗的成功转变的同学才能衣着不俗地参加聚会,而
那些尚未完

成转变的同学则可能潦倒落魄地出现在你面前。所以,当你在学校的时候,千万不要讥笑(
哪怕是在心

里)身边那些俗又俗的同学,因为他们很可能就是将来同学聚会上的主角,也是你mm对你进
行再教育的

榜样。

7,当你在北大的时候,千万不要看不起那些在西门外那排小平房租房准备以考研方式杀进
北大的年轻人

,他们中的某些人在你看来可能很功利、没有道德观、为了目的不达手段。但是你工作后你
会发现这3点

恰恰是北大没有教给我们的生存技能。如果我们能够掌握这3点,再加上我们的学历背景,
北大人一定会

战无不克。事实上,我们中的大部分人在离开学校后都会往这个方向努力,所以,他们其实
是很值得尊

敬的,因为他们比我们成熟得要早。他们可能在更年轻得时候就受过挫折,所以他们懂得从
此以后拼命

。而我们一直是幸福宝宝,等到毕业的时候才开始接受人生中第一次真正意义上的挫折,所
以我们拼命

得比他们要晚了很多。

8,在我们所受到的教育里,师长一直告诉我们要诚实、对人真诚。还有,中国的老话叫“
买卖不成仁义

在”。这在企业竞争已经到人性化程度的西方世界可能还是真理,但是在现在的中国商场上
那是……胡

说。举个例子吧,我的诚实让公司失去了一个客户,让我个人赢得了一个朋友;当这个朋友
因我的诚实

而给我带来一个大买卖时,我已经被公司老板因那次业务失败而炒了鱿鱼;所以最后我把这
宗大买卖带

到了新服务的公司。 这件事的结果最后是好的;但是这只是一个幸运的偶然。我想大部分
人不会这么幸

运。工作以后,如果你每天统计一下,你会惊讶于自己现在从早晨走进办公室的那一刻起就
开始说假话

。这假话对同事说、对老板说、对客户说、一直说到家里,如果你的女友or男友还没有工作
,而是留在

学校上研上博(就像我的情况),你会让他们大为震惊,他们很可能悲痛欲绝地对你说“你
怎么能这么

说?”然后,你可能更加愤慨地对她or他说:“这只是交际的手段/业务的需要/如果你能给
我提供一个

饭碗我肯定不这么说……”最后的最后,你们很可能对彼此失望,比如,对方觉得你变了;
你觉得对方

too naive,too simple,不理解你。

9,北大太自由了,这是身为北大人的幸运,也是不幸。在北大了你可能学会了直言不讳,
而这可能正是

你的老板最忌讳的。中国人都是有劣根性的;中国的富人和西方的富人区别很大,中国的老
板和西方的

老板也很不同。我们看过很多例子,里面讲到某人因为直言而被认为是被炒鱿鱼,最后却升
职了:这种

故事在现实世界中简直就像是……相信灰姑娘当上皇后一样又美丽又白痴。在北大人眼里,
人生来平等

,即使你是老板;北大的人不少是完美主义者,他们看见陈规陋习会直接指出来;这下完蛋
了,因为当

老板发现你在某些方面比他还高明的时候,他会郁闷to death.即使最终他终于采用了你的
建议,你也离

滚蛋不远了。我相信,这也是很多外界评论北大人狂的原因之一。对此我的理解是,呸,有
种的你就说

我们狂,也别用我们的建议,别吃了我的葡萄长了肉还要说葡萄是酸的!

10,当你还在学校的时候,平时有空多看几部白痴一点幼稚一点的片子,比如《流星花园》
那种。当年

我对此嗤之以鼻,现在我一想起一个宿舍的女生围着一台破电脑看它的情景我就鼻子发酸!
!!!现在

我们已经没什么心思能沉在一部片子里耐心地看下去了,偶尔看看电视,就是拿着遥控器拼
命跳台,然

后骂: “tmd!这帮编电视的都狗屎!什么玩意,我要是老板非统统开除了不可,饿死他丫
的!”(ps

:这些话我上大学时听着都脸红,现在越说越溜)

11,当你还在学校的时候,多去上上课,少在宿舍打游戏睡觉。多看看那些底高望重的老教
授,没问题

也找几个出来问问吧,就当小时候听奶奶讲故事。因为,工作以后就不要指望谁这么耐心给
你讲东西了

,老板要是让你做啥,不懂的话千万别问!自己想办法查!不要以为像在学校一样,好问是
美德!你多

问几句,脾气好的老板会不理你,晾着你知道你自己讪讪地走开,脾气稍微不好地老板会对
你阴阴地说

:“你们北大的就这素质?这都不会?”你可能会心里喊冤:“拜托!我接触这项业务才2
天,我不问我

怎么知道?”你这么想就错了。老板要的是结果,不是过程。他管你怎么做到的,总之你做
到了才算完

。我现在每想到大学时候不少次我都在课堂上睡觉,我就觉得特别对不起讲堂上的老师。

12,当你还在学校的时候,能谈恋爱就谈场恋爱,那时候谈恋爱才叫谈恋爱!你的她很可能
只是因为喜

欢你而跟你谈恋爱;你们可能大夏天一起挤公交去动物园,在臭气烘烘的车厢里晃来晃去都
是一种甜蜜

一种幸福;工作以后你就别指望了!如果她跟你谈了3年你还没有能买房能加薪的迹象,你
就完蛋了!如

果你跟她谈了3年你还没有能买房能跟她结婚的迹象,你也完蛋了,你可能会开始怀疑你是
不是在耽误她

的青春她的时间。那时候你们一起再坐公交车,你都会觉得心酸:你堂堂一个北大男子汉,
还要让lp挤

公交车!

13,当你还在学校的时候,多原谅舍友的小过失。不要因为她or他不小心把一杯水泼在你的
英语词典上

就对她or他生气甚至要求赔偿;不要因为她or他的臭袜子忘记从你床上拿走你就对别人抱怨
!不要因为

她or他借了你2块钱买水果一直忘记还就在意。不要不要因为她or他的无意中的缺点或失误
而对他生气。

当你工作以后,你会

发现其实他们原来并没有那么讨厌,你会惊讶当初你干吗总是为这种事情而生气,你会慢慢
忘记他们的

不好而只记得当初你们床头夜话时的温馨、买一包零食回来大家一起吃的开心。当你刚上大
学的时候,

你可能感叹过真心朋友只有在高中才交得到;但当你工作以后你会发现,大学才最可能交到
一辈子的能

互相倾诉互相帮忙的朋友!

14,如果你是女生,当你还在学校的时候,多体谅那些你不喜欢甚至讨厌但是狂追你的男生
!因为无论

你多讨厌他,毕竟他们是真心喜欢你的,在他们眼里,你很可能就是天使!而在工作后,你
在老板看来

,很可能你只不过是狗屎!人的一生中没有多少机会得到一些最真最纯的东西,很多年后那
些看起来又

矮又丑的男生可能结婚成家,你很可能已经被世事磨得没有知觉,而当你再和他们相遇,你
很可能会突

然发现他们原来这么好、这么好、这么这么好,原来他们一点都不丑……你会很想很想哭!

15,当你在学校的时候,多读一点书,少上网做一些没有意义的东西,比如灌水比如聊qq!
因为你一旦

离开校园,你就很可能顶多只有读读《瑞丽》《成都今夜将我遗忘》这样的垃圾杂志和快餐
书,而不再

有机会去想万圣和风入松!更不会有机会有时间有气氛去看那里的书!我在大2的时候,曾
经惊觉我读的

名著基本上停留在高中时代,而当我工作后我发现我读过的书完全停留在大学毕业以前!

16,当你还在学校的时候,不要总是抱怨北大的宿舍太烂太小(虽然这是事实,特别是对于
那些住普通

宿舍的同学)不要总是抱怨楼长阿姨太凶。你不用考虑每个季度有一堆电话水费电费物业费
上网费等等

等等堆在你面前,不用考虑每个季度有房东来催你交房租!不用担心万一你哪天被老板炒鱿
鱼了就要露

宿街头,不用每天下了班回到狭窄而空荡荡的房间痛苦地回想今天是否又挨了骂、明天要计
划拜访哪个

客户、这个case到底哪里让老板不满意……!!!!不用再想说话的时候突然发现竟然想不
起谁可以现

在说说话!!!

17,当你还在学校的时候,你可能为那些该死的偷车贼而痛不欲生咬牙切齿,你可能会在临
上课前5分钟

才起床,然后慢悠悠散步去4教上课;当工作以后,你最大的可能就是每天6点起床,在沙丁
鱼罐头一样

的公交车里焦急地等待你的公交车在堵车长龙里挤牙膏一样一点一点地往前爬;当你因某天
某段路发生

交通事故而迟到了5分钟却因为老板还没来而庆幸时,很可能某个你的亲密同事已经在准备
报告给老板了

。当你晚上再经历同样的堵车回到家想看点书时,你很可能发现时钟已经指到9了,而你这
时候很可能还

没吃饭!

18,如果你是女生,当你还在学校的时候,不要为了减肥而生饿自己把自己弄出胃病来!因
为你会发现

一旦你有了胃病而后工作你会郁闷to death!而且很可能你的工作会导致你不得不得上胃病
,因为你根

本就没时间也没胃口吃任何东西!你在学校的时候,很可能因为某天例假来了而轻易就选择
不去上课,

而当你工作后,哪怕你痛得浑身发凉你也可能强迫自己不请假!因为你要把一年里有限的几
个请假机会

留给你最最需要的时候!在学校的时候,你可能觉得在苗条和健康中你会选择前者,等到你
工作了,你

会发现,健康才是人生最大的财富!因为你的病假越多,你的奖金扣得越多!很可能最后还
会导致你失

业乃至完蛋!

19,当你还在北大的时候,好好念书,享受自己作为北大人的光荣和梦想。因为很可能你工
作以后你会

发现北大人这个牌子不但不是你的盾牌,还很可能成为你收到暗箭的主因。

20,当你还在北大的时候,好好享受人生中最纯洁最快乐的时光!好好享受自己作为一个成
人能够享受

的权利和感觉。因为在你工作满5年之前,你很可能要一直像一条狗一样听人训斥:“你too
naive!too

simple!你在浪费我的时间!”

21,当你还在北大的时候,把英语学好,多学几个软件,修一个经济双学位,多培养自己的
忍耐功夫,

多学点拍mp……少把时间花在理别人攻击北大的言论上,少和他们争论,因为这些都是没有
意义的!有

本事就好好学东西,在你养活自己之前,北大无论是上天堂还是下地狱,都和你没有太大关
系。

22,最后一点:不要再讥笑拜金主义者。不要再相信什么穷人也有骨气。再过几年,你很可
能会悲哀地

发现自己,原来3年前你讥笑的人恰恰正是3年后的自己!人生最大的痛苦,除了穷,就是自
己宣判自己

…… 还在北大的师弟师妹或者师兄师姐,看了这些可能会很难过,但是有些事情,越早知
道以后受的苦

走过的弯路会越少…… 我一直相信我是一个乐观主义者,因为我从来不会因为我外界的原
因而丧失希望

,但是当我想在我的母校的bbs上写下这些东西的时候,我突然发现原来我的心里其实塞了
很多很多令人

难过的东西。也许是因为我从来不会面对活着的东西无论是现实中还是网络中的人抱怨,所
以它们一直

积累一直积累到成为一个角落里的球…… 我依然有梦想,我梦想将来有一套自己的房子,
可以在伤心的

时候一个人泡在浴缸里泡上整整一天,不用在月底的时候心惊肉跳地等着房东上门收租;我
梦想将来有
一天我不用挨骂,不用小心翼翼,不用忍着屈辱每天假笑面对冷冰冰的客户;我梦想将来有
一天我不用

担心我会挨饿会露宿街头会万一我妈妈生病我还付不起昂贵的医药费;我梦想将来有一天我
什么都可以

不想地安然入睡…… 但是我已经没有了理想……

我想这是我最大的悲哀,也是我走向成熟的第一步……

--
是不是该出发了?
--我一直在路上!
不要为了小事情坏了大事情!不值得!
理啊不理你!

※ 来源:·飘渺水云间 freecity.cn·[FROM: vicwzh]
--
※ 转载:·飘渺水云间 freecity.cn·[FROM: proxy1]

[转载] 一个25岁董事长对大学生的精点.....zz

今天穿梭回88,看到几篇文章不错,转过来

发信人: shiyishe (lido), 板面: Optical
标 题: [转载] 一个25岁董事长对大学生的精点.....zz
发信站: 飘渺水云间 (Sun Jan 28 13:21:00 2007), 转信

【 原文由 shiyishe 发表于 ZJUOnline 讨论区 】
1一定要有独立的人格、独立的思想。一个经过独立思考而坚持错误观点的人比一个不假
思索而接受正确观点的人更值得肯定。不要成为灌输教育的牺牲品。

2.仕途,商界,学术。大致说来,每个人都注定要走上三条道路中的某一条。在进行职
业生涯规划的时候,不妨以此作为思考的出发点。根据不同的职业生涯规划来塑造各自
的核心竞争力。只有知道自己以后要做什么,才能知道自己应该学什么。

3.专业无冷热,学校无高低。没有哪个用人单位会认为你代表了你的学校或者你的专业
。千万不要因为你是名牌大学或者热门专业而沾沾自喜,也大可不必因为你的学校不好
或者专业冷门而自卑。

4.千招会,不如一招熟。十个百分之十并不是百分之百,而是零。如果你有十项工作每
项都会做百分之十,那么,在用人单位眼中,你什么都不会。所以,你必须要让自己具
备核心竞争力。“通才”只有在“专才”的基础上才有意义

5.不逃课的学生不是好学生。什么课都不逃,跟什么课都逃掉没什么两样。一定要掌握
学习的主动性,不要像读中学一样被老师牵着鼻子走。逃课没有错,但是不要逃错课。
同时,既要逃课,又要让老师给高分。

6.一定要学会理财。对于贫困生来说,首先要做的不是挣钱,而是省钱。很多大学生读
书的时候一掷千金,可是,毕业以后一个月的工资还不够交半个月的房租。

7.大部分女生将电脑当成了影碟机,大部分男生将电脑当成了游戏机。大学生要掌握必
要的计算机操作能力,但是,很多时候电脑会成为浪费时间的堂而皇之的借口。有电脑
的大学生非常多,可是,这中间很多人可能大学毕业的时候还不会Excel,不会做一个像
样的PPT.

8.做事不如做人,人脉决定成败。一个人有多少钱并不是指他拥有多少钱的所有权,而
是指他拥有多少钱的使用权。一个人具备多少能力,不只是说他一个人的时候能做什么
,还包括他能通过别人做什么。一个人赚的钱,12.5%是靠自身的知识,87.5%则来自人
脉关系。三十岁以前靠专业赚钱,三十岁以后拿人脉赚钱。所以,请好好珍惜大学期间
建立起来的人脉关系。这几年你认识的朋友可能会是你毕业以后最可宝贵的财富。

9.互联网固然威力无穷,但是,如果你沉迷于网络聊天,或者沉迷于网络游戏,浪费的
金钱倒是可以弥补,荒废的青春就无可追寻了。轻舞飞扬已经红颜薄命了,而痞子蔡却
继续跟别的女孩发生着一次又一次的亲密接触。对于很多大学生而言,网吧就是一个血
淋淋的黑洞。

10.爱情是不期而至的,可以期待,但不可以制造。花开堪折方须折,莫让鲜惶哟砜巍?
同时,既要逃课,又要让老师给高分。

6.一定要学会理财。对于贫困生来说,首先要做的不是挣钱,而是省钱。很多大学生读
书的时候一掷千金,可是,毕业以后一个月的工资还不够交半个月的房租。

7.大部分女生将电脑当成了影碟机,大部分男生将电脑当成了游戏机。大学生要掌握必
要的计算机操作能力,但是,很多时候电脑会成为浪费时间的堂而皇之的借口。有电脑
的大学生非常多,可是,这中间很多人可能大学毕业的时候还不会Excel,不会做一个像
样的PPT.

8.做事不如做人,人脉决定成败。一个人有多少钱并不是指他拥有多少钱的所有权,而
是指他拥有多少钱的使用权。一个人具备多少能力,不只是说他一个人的时候能做什么
,还包括他能通过别人做什么。一个人赚的钱,12.5%是靠自身的知识,87.5%则来自人
脉关系。三十岁以前靠专业赚钱,三十岁以后拿人脉赚钱。所以,请好好珍惜大学期间
建立起来的人脉关系。这几年你认识的朋友可能会是你毕业以后最可宝贵的财富。

9.互联网固然威力无穷,但是,如果你沉迷于网络聊天,或者沉迷于网络游戏,浪费的
金钱倒是可以弥补,荒废的青春就无可追寻了。轻舞飞扬已经红颜薄命了,而痞子蔡却
继续跟别的女孩发生着一次又一次的亲密接触。对于很多大学生而言,网吧就是一个血
淋淋的黑洞。

10.爱情是不期而至的,可以期待,但不可以制造。花开堪折方须折,莫让鲜花败残枝。
一个有一万块钱的人为你花掉一百元,你只占了他的百分之一;而一个只有十块钱的人
为你花掉十块,你就成了他的全部。

11.研究生扩招的速度是30%,也就意味着硕士学历贬值的速度是30%。千万不要以为考研
究生就是积极进取的表现。对于很多人而言,考研不过是一种消极逃避的方式罢了。对
于绝大多数人而言,读研究生纯粹是浪费时间浪费金钱,立志从事科研、学术的人及其
他少数人除外

12.不要一门心思想着出国,更加不要迷信外国的月亮比中国圆。削尖脑袋记GRE词汇很
可能是一件非常愚蠢也非常可悲的事情。既然全世界的公司都想到中国的市场上来瓜分
蛋糕,为什么中国人还要一门心思到国外去留学然后给外国人打工?

13.人才市场就是一个地雷阵。通过多种方式求职固然没有错,但是千万不要饥不择食。
只要用人单位一说要你交钱,你掉头就走便是了

14.求职简历必须突出自己的核心竞争力。求职的时候大可不必像严守一那样“有一说一
”,必要的时候恰到好处地说一些谎言是非常有用的。一份求职简历只要用一张A4纸做
个表格就足够了。很多女生的求职简历就像是写真集,不但浪费钱,而且对求职毫无用
处。面试其实是有规律的,每次面试的时候只要背标准答案就行了……

15.垃圾是放错位置的人才。所以,在找工作的时候一定要把自己放到那个让你成为人才
而不是垃圾的职位上。当然,前提是你要知道自己究竟峡罢鄯叫胝郏孟驶ò懿兄Α?
界上最大的悲剧莫过于有太多的年轻人从来没有发现自己真正想做什么。骑驴找马固然
没错,可是,并非随便找一头驴就能找到千里马。所以,一定要重视第一份工作。

16.大公司是做人,小公司是做事。进入公司工作以后,必须尽快融入写字楼政治。职员
能否得到提升,很大程度不在于是否努力,而在于老板对你的赏识程度。在写字楼的政
治斗争中,一定要学会自我保护。


17.瘦死的骆驼比马大。撑死胆大的,饿死胆小的。一定要有创业的勇气和魄力。如果你
一只满足于给别人打工,那么,不管你工资多高,永远都只能是一个可怜的穷光蛋。就
算月薪2万,在深圳上海那种地方,一年的存款还买不来一个小小的洗手间。

18.大学期间一定要多去图书馆多去自习室。很多书你现在不读,一辈子就再也没有机会
去读了。虽然不是每本书看了都一定有用,但是,因为你不知道究竟哪本书以后会有用
,所以只好多看书,并且抛弃那些过于功利的想法。尽管每次网到鱼的不过是一个网眼
,但要想捕到鱼,就必须要编织一张网。


--
爱生活,爱NewAge ^_^

※ 来源:·飘渺水云间 fre,前提是你要知道自己究竟想做什么、究竟适合做什么。世
※ 来源:·飘渺水云间 freecity.cn·[FROM: shiyishe]
--
※ 转载:·飘渺水云间 freecity.cn·[FROM: shiyishe]

Thursday, February 01, 2007

第六章 C++面向对象程序设计

看到了师兄林锐的一篇文章,很遗憾没有早点翻到,走了很多弯路的说。



第六章 C++面向对象程序设计


六年前,我刚热恋“面向对象”(Object-Oriented)时,一口气记住了近十个定义。六年后,我从几十万行程序中滚爬出来准备写点心得体会时,却无法解释什么是“面向对象”,就象说不清楚什么是数学那样。
软件工程中的时髦术语“面向对象分析”和“面向对象设计”,通常是针对“需求分析”和“系统设计”环节的。“面向对象”有几大学派,就象如来佛、上帝和真主用各自的方式定义了这个世界,并留下一堆经书来解释这个世界。
有些学者建议这样找“对象”:分析一个句子的语法,找出名词和动词,名词就是对象,动词则是对象的方法(即函数)。
当年国民党的文人为了对抗毛泽东的《沁园春·雪》,特意请清朝遗老们写了一些对仗工整的诗,请蒋介石过目。老蒋看了气得大骂:“娘希匹,全都有一股棺材里腐尸的气味。”
我看了几千页的软件工程资料,终于发现自己有些“弱智”,无法理解“面向对象”的理论,同时醒悟到“编程是硬道理。”
面向对象程序设计语言很多,如Smalltalk、Ada、Eiffel、Object Pascal、Visual Basic、C++等等。C++语言最讨人喜欢,因为它兼容C语言,并且具备C语言的性能。近几年,一种叫Java的纯面向对象语言红极一时,不少人叫喊着要用Java革C++的命。我认为Java好比是C++的外甥,虽然不是直接遗传的,但也几分象样。外甥在舅舅身上玩耍时洒了一泡尿,俩人不该为此而争吵。
关于C++程序设计的书藉非常多,本章不讲C++的语法,只讲一些小小的编程道理。如果我能早几年明白这些小道理,就可以大大改善数十万行程序的质量了。

6.1 C++面向对象程序设计的重要概念

早期革命影片里有这样一个角色,他说:“我是党代表,我代表党,我就是党。”后来他给同志们带来了灾难。
会用C++的程序员一定懂得面向对象程序设计吗?
不会用C++的程序员一定不懂得面向对象程序设计吗?
两者都未必。就象坏蛋入党后未必能成为好人,好人不入党未必变成坏蛋那样。
我不怕触犯众怒地说句大话:“C++没有高手,C语言才有高手。”在用C和C++编程8年之后,我深深地遗憾自己不是C语言的高手,更遗憾没有人点拨我如何进行面向对象程序设计。我和很多C++程序员一样,在享用到C++语法的好处时便以为自己已经明白了面向对象程序设计。就象挤掉牙膏卖牙膏皮那样,真是暴殄天物呀。
人们不懂拼音也会讲普通话,如果懂得拼音则会把普通话讲得更好。不懂面向对象程序设计也可以用C++编程,如果懂得面向对象程序设计则会把C++程序编得更好。本节讲述三个非常基础的概念:“类与对象”、“继承与组合”、“虚函数与多态”。理解这些概念,有助于提高程序的质量,特别是提高“可复用性”与“可扩充性”。

6.1.1 类与对象
对象(Object)是类(Class)的一个实例(Instance)。如果将对象比作房子,那么类就是房子的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。
类可以将数据和函数封装在一起,其中函数表示了类的行为(或称服务)。类提供关键字public、protected和private用于声明哪些数据和函数是公有的、受保护的或者是私有的。这样可以达到信息隐藏的目的,即让类仅仅公开必须要让外界知道的内容,而隐藏其它一切内容(参见5.2.1节“信息隐藏”)。我们不可以滥用类的封装功能,不要把它当成火锅,什么东西都往里扔。
类的设计是以数据为中心,还是以行为为中心?
主张“以数据为中心”的那一派人关注类的内部数据结构,他们习惯上将private类型的数据写在前面,而将public类型的函数写在后面,如表8.1(a)所示。
主张“以行为为中心”的那一派人关注类应该提供什么样的服务和接口,他们习惯上将public类型的函数写在前面,而将private类型的数据写在后面,如表8.1(b)所示。


Class A
{
private:
int i, j;
float x, y;

public:
void Func1(void);
void Func2(void);

}
class A
{
public:
void Func1(void);
void Func2(void);

private:
int i, j;
float x, y;

}
表8.1(a) 以数据为中心的书写风格 表8.1(b)以行为为中心的书写风格

很多C++教课书主张在设计类时“以数据为中心”。我坚持并且建议读者在设计类时“以行为为中心”,即首先考虑类应该提供什么样的函数。Microsoft 公司的COM规范的核心是接口设计,COM的接口就相当于类的公有函数[Rogerson 1999]。在程序设计方面,咱们不要怀疑Microsoft公司的风格。
设计孤立的类是比较容易的,难的是正确设计基类及其派生类。因为有些程序员搞不清楚“继承”(Inheritance)、“组合”(Composition)、“多态”( Polymorphism)这些概念。

6.1.2 继承与组合
如果A是基类,B是A的派生类,那么B将继承A的数据和函数。示例程序如下:
class A
{
public:
void Func1(void);
void Func2(void);
};

class B : public A
{
public:
void Func3(void);
void Func4(void);
};

// Example
main()
{
B b; // B的一个对象
b.Func1(); // B从A继承了函数Func1
b.Func2(); // B从A继承了函数Func2
b.Func3();
b.Func4();
}

这个简单的示例程序说明了一个事实:C++的“继承”特性可以提高程序的可复用性。正因为“继承”太有用、太容易用,才要防止乱用“继承”。我们要给“继承”立一些使用规则:
一、如果类A和类B毫不相关,不可以为了使B的功能更多些而让B继承A的功能。不要觉得“白吃白不吃”,让一个好端端的健壮青年无缘无故地吃人参补身体。
二、如果类B有必要使用A的功能,则要分两种情况考虑:
(1)若在逻辑上B是A的“一种”(a kind of ),则允许B继承A的功能。如男人(Man)是人(Human)的一种,男孩(Boy)是男人的一种。那么类Man可以从类Human派生,类Boy可以从类Man派生。示例程序如下:
class Human
{

};
class Man : public Human
{

};
class Boy : public Man
{

};

(2)若在逻辑上A是B的“一部分”(a part of),则不允许B继承A的功能,而是要用A和其它东西组合出B。例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生而成。示例程序如下:
class Eye
{ public:
void Look(void);
};
class Nose
{ public:
void Smell(void);
};
class Mouth
{ public:
void Eat(void);
};
class Ear
{ public:
void Listen(void);
};

// 正确的设计,冗长的程序
class Head
{
public:
void Look(void) { m_eye.Look(); }
void Smell(void) { m_nose.Smell(); }
void Eat(void) { m_mouth.Eat(); }
void Listen(void) { m_ear.Listen(); }
private:
Eye m_eye;
Nose m_nose;
Mouth m_mouth;
Ear m_ear;
};

如果允许Head从Eye、Nose、Mouth、Ear派生而成,那么Head将自动具有Look、 Smell、Eat、Listen这些功能:
// 错误的设计
class Head : public Eye, public Nose, public Mouth, public Ear
{
};
上述程序十分简短并且运行正确,但是这种设计却是错误的。很多程序员经不起“继承”的诱惑而犯下设计错误。
一只公鸡使劲地追打一只刚下了蛋的母鸡,你知道为什么吗?
因为母鸡下了鸭蛋。
本书3.3节讲过“运行正确”的程序不见得就是高质量的程序,此处就是一个例证。

6.1.3 虚函数与多态
除了继承外,C++的另一个优良特性是支持多态,即允许将派生类的对象当作基类的对象使用。如果A是基类,B和C是A的派生类,多态函数Test的参数是A的指针。那么Test函数可以引用A、B、C的对象。示例程序如下:
class A
{
public:
void Func1(void);
};

void Test(A *a)
{
a->Func1();
}

class B : public A
{

};
class C : public A
{

};

// Example
main()
{
A a;
B b;
C c;
Test(&a);
Test(&b);
Test(&c);};

以上程序看不出“多态”有什么价值,加上虚函数和抽象基类后,“多态”的威力就显示出来了。
C++用关键字virtual来声明一个函数为虚函数,派生类的虚函数将覆盖(override)基类对应的虚函数的功能。示例程序如下:
class A
{
public:
virtual void Func1(void){ cout<< “This is A::Func1 \n”}
};

void Test(A *a)
{
a->Func1();
}

class B : public A
{
public:
virtual void Func1(void){ cout<< “This is B::Func1 \n”}
};
class C : public A
{
public:
virtual void Func1(void){ cout<< “This is C::Func1 \n”}
};

// Example
main()
{
A a;
B b;
C c;
Test(&a); // 输出 This is A::Func1
Test(&b); // 输出 This is B::Func1
Test(&c); // 输出 This is C::Func1};

如果基类A定义如下:
class A
{
public:
virtual void Func1(void)=0;
};
那么函数Func1叫作纯虚函数,含有纯虚函数的类叫作抽象基类。抽象基类只管定义纯虚函数的形式,具体的功能由派生类实现。
结合“抽象基类”和“多态”有如下突出优点:
(1)应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。这一招叫“以不变应万变”,可以大大提高程序的可复用性(这是接口设计的复用,而不是代码实现的复用)。
(2)派生类的功能可以被基类指针引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。以前写的程序可以被将来写的程序调用不足为奇,但是将来写的程序可以被以前写的程序调用那可了不起。

6.2 良好的编程风格

内功深厚的武林高手出招往往平淡无奇。同理,编程高手也不会用奇门怪招写程序。良好的编程风格是产生高质量程序的前提。

6.2.1 命名约定
有不少人编程时用拼音给函数或变量命名,这样做并不能说明你很爱国,却会让用此程序的人迷糊(很多南方人不懂拼音,我就不懂)。程序中的英文一般不会太复杂,用词要力求准确。
匈牙利命名法是Microsoft公司倡导的 [Maguire 1993],虽然很烦琐,但用习惯了也就成了自然。没有人强迫你采用何种命名法,但有一点应该做到:自己的程序命名必须一致。
以下是我编程时采用的命名约定:
(1)宏定义用大写字母加下划线表示,如MAX_LENGTH;
(2)函数用大写字母开头的单词组合而成,如SetName, GetName ;
(3)指针变量加前缀p,如 *pNode ;
(4)BOOL 变量加前缀b,如 bFlag ;
(5)int 变量加前缀i,如 iWidth ;
(6)float 变量加前缀f,如 fWidth ;
(7)double变量加前缀d,如 dWidth ;
(8)字符串变量加前缀str,如 strName ;
(9)枚举变量加前缀e,如 eDrawMode ;
(10)类的成员变量加前缀m_,如 m_strName, m_iWidth ;
对于 int, float, double 型的变量,如果变量名的含义十分明显,则不加前缀,避免烦琐。如用于循环的int型变量 i,j,k ;float 型的三维坐标(x,y,z)等。

6.2.2 使用断言
程序一般分为Debug版本和Release版本,Debug版本用于内部调试,Release版本发行给用户使用。
断言assert是仅在Debug版本起作用的宏,它用于检查“不应该”发生的情况。以下是一个内存复制程序,在运行过程中,如果assert的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地方引发了assert)。
//复制不重叠的内存块
void memcpy(void *pvTo, void *pvFrom, size_t size)
{
void *pbTo = (byte *) pvTo;
void *pbFrom = (byte *) pvFrom;
assert( pvTo != NULL && pvFrom != NULL );
while(size - - > 0 )
*pbTo + + = *pbFrom + + ;
return (pvTo);
}
assert不是一个仓促拼凑起来的宏,为了不在程序的Debug版本和Release版本引起差别,assert不应该产生任何副作用。所以assert不是函数,而是宏。程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。
很少有比跟踪到程序的断言,却不知道该断言的作用更让人沮丧的事了。你化了很多时间,不是为了排除错误,而只是为了弄清楚这个错误到底是什么。有的时候,程序员偶尔还会设计出有错误的断言。所以如果搞不清楚断言检查的是什么,就很难判断错误是出现在程序中,还是出现在断言中。幸运的是这个问题很好解决,只要加上清晰的注释即可。这本是显而易见的事情,可是很少有程序员这样做。这好比一个人在森林里,看到树上钉着一块“危险”的大牌子。但危险到底是什么?树要倒?有废井?有野兽?除非告诉人们“危险”是什么,否则这个警告牌难以起到积极有效的作用。难以理解的断言常常被程序员忽略,甚至被删除。[Maguire 1993]
以下是使用断言的几个原则:
(1)使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
(2)使用断言对函数的参数进行确认。
(3)在编写函数时,要进行反复的考查,并且自问:“我打算做哪些假定?”一旦确定了的假定,就要使用断言对假定进行检查。
(4)一般教科书都鼓励程序员们进行防错性的程序设计,但要记住这种编程风格会隐瞒错误。当进行防错性编程时,如果“不可能发生”的事情的确发生了,则要使用断言进行报警。

6.2.3 new、delete与指针
在C++中,操作符new用于申请内存,操作符delete用于释放内存。在C语言中,函数malloc用于申请内存,函数free用于释放内存。由于C++兼容C语言,所以new、delete、malloc、free都有可能一起使用。new能比malloc干更多的事,它可以申请对象的内存,而malloc不能。
C++和C语言中的指针威猛无比,用错了会带来灾难。对于一个指针p,如果是用new申请的内存,则必须用delete而不能用free来释放。如果是用malloc申请的内存,则必须用free而不能用delete来释放。
在用delete或用free释放p所指的内存后,应该马上显式地将p置为NULL,以防下次使用p时发生错误。示例程序如下:
void Test(void)
{
float *p;
p = new float[100];
if(p==NULL) return;
…// do something
delete p;
p=NULL; // 良好的编程风格

// 可以继续使用p
p = new float[500];
if(p==NULL) return;
…// do something else
delete p;
p=NULL;
}

我们还要预防“野指针”,“野指针”是指向“垃圾”内存的指针,主要成因有两种:
(1)指针没有初始化。
(2)指针指向已经释放的内存,这种情况最让人防不胜防,示例程序如下:
class A
{
public:
void Func(void){…}
};
void Test(void)
{
A *p;
{
A a;
p = &a; // 注意 a 的生命期
}
p->Func(); // p是“野指针”,程序出错
}

6.2.4 使用const
在定义一个常量时,const比 #define更加灵活。用const定义的常量含有数据类型,该常量可以参与逻辑运算。例如:
const int LENGTH = 100; // LENGTH是int类型
const float MAX=100; // MAX是float类型
#define LENGTH 100 // LENGTH 无类型
#define MAX 100 // MAX 无类型

除了能定义常量外,const还有两个“保护”功能:
一、强制保护函数的参数值不发生变化
以下程序中,函数f不会改变输入参数name的值,但是函数g和h都有可能改变name的值。
void f(String s); // pass by value
void g(String &s); // pass by referance
void h(String *s); // pass by pointer
main()
{
String name=“Dog”;
f(name); // name的值不会改变
g(name); // name的值可能改变
h(name); // name的值可能改变
}

对于一个函数而言,如果其‘&’或‘*’类型的参数只作输入用,不作输出用,那么应当在该参数前加上const,以确保函数的代码不会改变该参数的值(如果改变了该参数的值,编译器会出现错误警告)。因此上述程序中的函数g和h应该定义成:
void g(const String &s);
void h(const String *s);

二、强制保护类的成员函数不改变任何数据成员的值
以下程序中,类stack的成员函数Count仅用于计数,为了确保Count不改变类中的任何数据成员的值,应将函数Count定义成const类型。
class Stack
{
public:
void push(int elem);
void pop(void);
int Count(void) const; // const类型的函数
private:
int num;
int data[100];
};

int Stack::Count(void) const
{ ++ num; // 编译错误,num值发生变化
pop(); // 编译错误,pop将改变成员变量的值
return num;
}

6.2.5 其它建议
(1)不要编写一条过分复杂的语句,紧凑的C++/C代码并不见到能得到高效率的机器代码,却会降低程序的可理解性,程序出错误的几率也会提高。
(2)不要编写集多种功能于一身的函数,在函数的返回值中,不要将正常值和错误标志混在一起。
(3)不要将BOOL值TRUE和FALSE对应于1和0进行编程。大多数编程语言将FALSE定义为0,任何非0值都是TRUE。Visual C++将TRUE定义为1,而Visual Basic则将TRUE定义为-1。示例程序如下:
BOOL flag;

if(flag) { // do something } // 正确的用法
if(flag==TRUE) { // do something } // 危险的用法
if(flag==1) { // do something } // 危险的用法
if(!flag) { // do something } // 正确的用法
if(flag==FALSE) { // do something } // 不合理的用法
if(flag==0) { // do something } // 不合理的用法

(4)小心不要将“= =”写成“=”,编译器不会自动发现这种错误。
(5)不要将123写成0123,后者是八进制的数值。
(6)将自己经常犯的编程错误记录下来,制成表格贴在计算机旁边。

6.3 小 结

C++/C程序设计如同少林寺的武功一样博大精深,我练了8年,大概只学到二三成。所以无论什么时候,都不要觉得自己的编程水平天下第一,看到别人好的技术和风格,要虚心学习。
本章的内容少得可怜,就象口渴时只给你一颗杨梅吃,你一定不过瘾。我借花献佛,推荐一本好书:Marshall P. Cline著的《C++ FAQs》[Cline 1995]。你看了后一定会赞不绝口。
会编写C++/C程序,不要因此得意洋洋,这只是程序员基本的技能要求而已。如果把系统分析和系统设计比作“战略决策”,那么编程充其量只是“战术”。如果指挥官是个大笨蛋,士兵再勇敢也会吃败仗。所以我们程序员不要只把眼光盯在程序上,要让自己博学多才。我们应该向北京胡同里的小孩们学习,他们小小年纪就能指点江山,评论世界大事。


Wednesday, January 31, 2007

Google 编程竞赛题

ref:http://blog.csdn.net/sygb111/archive/2006/06/28/846835.aspx

-------------------------------------------------------------------------------------------------

Problem Statement
When editing a single line of text, there are four keys that can be used to move the cursor: end, home, left-arrow and right-arrow. As you would expect, left-arrow and right-arrow move the cursor one character left or one character right, unless the cursor is at the beginning of the line or the end of the line, respectively, in which case the keystrokes do nothing (the cursor does not wrap to the previous or next line). The home key moves the cursor to the beginning of the line, and the end key moves the cursor to the end of the line. You will be given a int, N, representing the number of character in a line of text. The cursor is always between two adjacent characters, at the beginning of the line, or at the end of the line. It starts before the first character, at position 0. The position after the last character on the line is position N. You should simulate a series of keystrokes and return the final position of the cursor. You will be given a String where characters of the String represent the keystrokes made, in order. 'L' and 'R' represent left and right, while 'H' and 'E' represent home and end.
Definition

Class:
CursorPosition
Method:
getPosition
Parameters:
String, int
Returns:
int
Method signature:
int getPosition(String keystrokes, int N)
(be sure your method is public)

Constraints

keystrokes will be contain between 1 and 50 'L', 'R', 'H', and 'E' characters, inclusive.

N will be between 1 and 100, inclusive.
Examples
0)

"ERLLL"
10
Returns: 7
First, we go to the end of the line at position 10. Then, the right-arrow does nothing because we are already at the end of the line. Finally, three left-arrows brings us to position 7.
1)

"EHHEEHLLLLRRRRRR"
2
Returns: 2
All the right-arrows at the end ensure that we end up at the end of the line.
2)

"ELLLELLRRRRLRLRLLLRLLLRLLLLRLLRRRL"
10
Returns: 3
3)

"RRLEERLLLLRLLRLRRRLRLRLRLRLLLLL"
19
Returns: 12

-------------------------------------------------------------------------------------------------


solve using C++

/************************************************************************************************

cursor.h

************************************************************************************************/ #ifndef _CURSOR_H
#define _CURSOR_H

#include "string"

class CCursor
{
private:
unsigned int ui_cursor_position;
unsigned int ui_character_number;

public:
CCursor();
CCursor( const unsigned int, const unsigned int );
~CCursor();

void left_move();
void right_move();
void home_move();
void end_move();

void keystroke_simulate( const char );

int get_position( const std :: string, const int );
};

#endif

/************************************************************************************************

cursor.cc

************************************************************************************************/

#include "cursor.h"

#include "string"

//default constructor
CCursor :: CCursor()
{
ui_cursor_position = 0;
ui_character_number = 0;
}

//constructor
CCursor :: CCursor( const unsigned int cursor_postion = 0,
const unsigned int character_number = 0 )
{
ui_cursor_position = cursor_postion;
ui_character_number = character_number;
}

//destructor
CCursor :: ~CCursor()
{
true;
}

//left move
void CCursor :: left_move()
{
if ( 0 == ui_cursor_position )
{
return;
}
else
{
--ui_cursor_position;
}
}

//right move
void CCursor :: right_move()
{
if ( ui_character_number == ui_cursor_position )
{
return;
}
else
{
++ui_cursor_position;
}
}

//end move
void CCursor :: end_move()
{
ui_cursor_position = ui_character_number;
}

//home move
void CCursor :: home_move()
{
ui_cursor_position = 0;
}

void CCursor :: keystroke_simulate( const char ch )
{
//left
if ( 'L' == ch )
{
return ( this -> left_move() );
}
//right
if ( 'R' == ch )
{
return ( this -> right_move() );
}
//end
if ( 'E' == ch )
{
return ( this -> end_move() );
}
//home
if ( 'H' == ch )
{
return ( this -> home_move() );
}
//false mode
return;
}

int CCursor :: get_position( const std :: string KEY, const int N )
{
ui_character_number = static_cast( N );

for ( int i = 0; i <= KEY.size(); ++i ) { this -> keystroke_simulate( KEY[i] );
}

return ui_cursor_position;
}

/***********************************************************************************************

test.cc

************************************************************************************************/

#include "cursor.h"

#include "iostream"
#include "string"


int main()
{
CCursor *cc = new CCursor();

std :: string s = "RRLEERLLLLRLLRLRRRLRLRLRLRLLLLL";
int N = 19;

std :: cout << ( cc -> get_position( s, N ) );

delete cc;

return 0;
}

compile and link

g++ -c cursor.cc

g++ -c test.cc

g++ -o test test.o cursor.o