Profilo di Jin梦幻之城FotoBlogElenchiAltro Strumenti Guida

Blog


30 ottobre

本blog的第一篇技术文章

    嘿嘿,不好意思,虽然是第一篇技术文章,但是还是转来的,林锐写的有关c++的文章。因为觉得挺不错的,咔咔。以前看过他写的<软件工程>,就是当小说看的,现在才发觉那本书还是很不错的,可惜我只记得里面的笑话了.....是不是和很多人上新东方后的感觉很像?不多说了,把文章贴上来
**************************传说中的分界线**************************
                                                    修练8年C++面向对象程序设计之体会

       六年前,我刚热恋“面向对象”(Object-Oriented)时,一口气记住了近十个定义。六年后,我从几十万行程序中滚爬出来准备写点心得体会时,却无法解释什么是“面向对象”,就象说不清楚什么是数学那样。软件工程中的时髦术语“面向对象分析”和“面向对象设计”,通常是针对“需求分析”和 “系统设计”环节的。“面向对象”有几大学派,就象如来佛、上帝和真主用各自的方式定义了这个世界,并留下一堆经书来解释这个世界。

  有些学者建议这样找“对象”:分析一个句子的语法,找出名词和动词,名词就是对象,动词则是对象的方法(即函数)。

  当年国民党的文人为了对抗毛泽东的《沁园春·雪》,特意请清朝遗老们写了一些对仗工整的诗,请蒋介石过目。老蒋看了气得大骂:“娘希匹,全都有一股棺材里腐尸的气味。”我看了几千页的软件工程资料,终于发现自己有些“弱智”,无法理解“面向对象”的理论,同时醒悟到“编程是硬道理。”

  面向对象程序设计语言很多,如Smalltalk、Ada、Eiffel、Object Pascal、Visual Basic、C++等等。C++语言最讨人喜欢,因为它兼容C 语言,并且具备C 语言的性能。近几年,一种叫Java 的纯面向对象语言红极一时,不少人叫喊着要用Java 革C++的命。我认为Java 好比是C++的外甥,虽然不是直接遗传的,但也几分象样。外甥在舅舅身上玩耍时洒了一泡尿,俩人不该为此而争吵。

  关于C++程序设计的书藉非常多,本章不讲C++的语法,只讲一些小小的编程道理。如果我能早几年明白这些小道理,就可以大大改善数十万行程序的质量了。

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

  早期革命影片里有这样一个角色,他说:“我是党代表,我代表党,我就是党。”后来他给同志们带来了灾难。

  会用C++的程序员一定懂得面向对象程序设计吗?

  不会用C++的程序员一定不懂得面向对象程序设计吗?

  两者都未必。就象坏蛋入党后未必能成为好人,好人不入党未必变成坏蛋那样。

  我不怕触犯众怒地说句大话:“C++没有高手,C 语言才有高手。”在用C 和C++编程8年之后,我深深地遗憾自己不是C 语言的高手,更遗憾没有人点拨我如何进行面向对象程序设计。我和很多C++程序员一样,在享用到C++语法的好处时便以为自己已经明白了面向对象程序设计。就象挤掉牙膏卖牙膏皮那样,真是暴殄天物呀。

  人们不懂拼音也会讲普通话,如果懂得拼音则会把普通话讲得更好。不懂面向对象程序设计也可以用C++编程,如果懂得面向对象程序设计则会把C++程序编得更好。本节讲述三个非常基础的概念:“类与对象”、“继承与组合”、“虚函数与多态”。理解这些概念,有助于提高程序的质量,特别是提高“可复用性”与“可扩充性”。

1.1 类与对象

  对象(Object)是类(Class)的一个实例(Instance)。如果将对象比作房子,那么类就是房子的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。类可以将数据和函数封装在一起,其中函数表示了类的行为(或称服务)。类提供关键字public、protected 和private 用于声明哪些数据和函数是公有的、受保护的或者是私有的。

  这样可以达到信息隐藏的目的,即让类仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们不可以滥用类的封装功能,不要把它当成火锅,什么东西都往里扔。

  类的设计是以数据为中心,还是以行为为中心?

  主张“以数据为中心”的那一派人关注类的内部数据结构,他们习惯上将private 类型的数据写在前面,而将public 类型的函数写在后面,如表8.1(a)所示。

  主张“以行为为中心”的那一派人关注类应该提供什么样的服务和接口,他们习惯上将public 类型的函数写在前面,而将private 类型的数据写在后面,如表8.1(b)所示。

  很多C++教课书主张在设计类时“以数据为中心”。我坚持并且建议读者在设计类时“以行为为中心”,即首先考虑类应该提供什么样的函数。 Microsoft 公司的COM 规范的核心是接口设计,COM 的接口就相当于类的公有函数[Rogerson 1999]。在程序设计方面,咱们不要怀疑Microsoft 公司的风格。

  设计孤立的类是比较容易的,难的是正确设计基类及其派生类。因为有些程序员搞不清楚“继承”(Inheritance)、“组合”(Composition)、“多态”( Polymorphism)这些概念。

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
{
};

  上述程序十分简短并且运行正确,但是这种设计却是错误的。很多程序员经不起“继承”的诱惑而犯下设计错误。

  一只公鸡使劲地追打一只刚下了蛋的母鸡,你知道为什么吗?

  因为母鸡下了鸭蛋。

  本书讲过“运行正确”的程序不见得就是高质量的程序,此处就是一个例证。

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)派生类的功能可以被基类指针引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。以前写的程序可以被将来写的程序调用不足为奇,但是将来写的程序可以被以前写的程序调用那可了不起。

2 良好的编程风格

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

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)等。

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)一般教科书都鼓励程序员们进行防错性的程序设计,但要记住这种编程风格会隐瞒错误。当进行防错性编程时,如果“不可能发生”的事情的确发生了,则要使用断言进行报警。

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 是“野指针”,程序出错
}

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;
}

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)将自己经常犯的编程错误记录下来,制成表格贴在计算机旁边。


3 小结

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

24 ottobre

full house

    大四时室友mm们聚在一起看过,当时我只瞟了几眼,因为当时对韩剧完全不感冒。
    研一时有人推荐,说是很搞笑的类型,于是决定有空看看。
    然而自从下下来都一直没有看,前天才开始看,以很慢的进度向前推进。04年的片子,我06年才开始更进,有够迟钝的。据说很多小女生看了这部韩剧一心想做SOHO,就像女一号那样在家写小说然后出版。不过现实往往没有电视剧那么美好,不是每个人都会遇到一个男一号恰巧收留你做家政,也不是每个人都会遇到一个男二号正好是出版社的部长,还有,不是每个人都有写小说的才能的。至于爱情那部分,我真心希望爱情就是电视剧中的那个样子。好像发现,里面有一点和现实还是蛮像的,那就是适当的吵架可以增进感情。每次看男女一号吵架就觉得搞笑,当然现实中的吵架恐怕要有更多的火药味,不过从朋友们的反映来看,有时候吵完和好后会更甜蜜些。注意,我说适当吵架,适当。毕竟很多感情就是在争吵中结束的。真希望有那样的默契,就是争吵,闹闹小情绪也不会影响彼此间的感情,如同女一号说的,虽然她每次都拎着行李离家出走,但是每次都没有真的想分手。可惜,电视剧中有情节安排,让你可以走了之后由于总总原因,阴差阳错地回去了,现实中,走了就走了吧。
    每次看到女二号,虽然不喜欢她的作法,但是对她却是很同情。以前男一号对她一往情深,但是她只喜欢男二号,结果男二号并不爱她,想回头时却也失去了男一号。她对男一号之后的喜欢我不知道是不是真的,因为可能是一直拥有的突然没有了觉得不甘心,加上自己追求的感情遭到挫败感到沮丧,但是她算是这个四角恋爱中输得最惨的吧。这种A喜欢B,B喜欢C的情况在生活中真的好多。如果我是B,我想我不会一直缠着C,也不会接受A。对于C,苦苦纠缠只会打扰对方的生活,给对方增添烦恼;对于A,如果不是因为爱而接受对方,是不是对爱情的亵渎,对对方的欺骗呢。唉,自己为什么那么完美主义呢,撞墙死了算了。突然想到一句话“出来混的,迟早要还的”,也许以前伤了不少人的心,所以我的爱情也一直不顺来还债吧。但是,我不得不申辩一句,我已经尽了最大的努力去不伤害别人,虽然我情商可能不够,而且我也从没为了自己的贪心虚荣而弃别人的痛苦于不顾。上天就原谅我吧,一次就好了。
     full house还没有看完,不知道结局如何,我是希望男一号和女一号在一起,男二号和女二号在一起,大团圆,没有人心碎。看爱情剧,总会去关注配角,也许因为觉得自己在爱情中一直是那个不被关心不被在意的配角吧,希望配角也能幸福,希望自己也能幸福。
17 ottobre

九龙湖归来

    在九龙湖待了历史最长时间两天一夜,终于怀着激动的心情回到了亲爱的家。以前人家说九龙湖怎么样,我都没什么发言权,这次我可是有亲身经历了!!
    去九龙湖感觉是很迷糊的一件事,本来找好的去那里的理由结果一个都没有用上,等于自己去九龙湖散心旅游了一番。废话少说,开始我的评价,从衣食住行开始。
    衣,一个mm和我说她都不敢穿比较漂亮的衣服,因为怕被人家觉得不正常,据说在九龙湖穿得越像民工越正常,当然有所夸张,不过放眼看去确实没有本部mm那么花枝招展。今天中午在食堂吃饭时看到一个mm穿得挺好看的,算是一枝独秀了。可怜了九龙湖的男生们啊。
    食,九龙湖有两个食堂,本科生食堂和研究生食堂,两个食堂遥遥相望,几乎望不到。据说研究生食堂比较便宜,所以每到吃饭的时候,都能看到大批的本科生骑车到研究生食堂吃饭。本来我也想到本科生食堂去考察一下的,但是我不是有车一族,想想还是算了。我对食物不怎么挑剔,所以说菜做得是否好吃,没什么感觉,就是觉得量好少价格也不低。刚到九龙湖的那天,不知道为什么特别饿,晚饭时一荤一素一碗3角钱的米饭全部吃干净,价位在4元多。但是我还是饿.....因为用的是实验室mm的饭卡,所以不好意思再点,加上旁边还有个同来的男生,怕吓到人家,于是忍住。不由得回想起南航,4元钱可以吃很不错很饱了。为此再同情下九龙湖男生,mm们可以减肥吃少些,男生就.....
    住,借住在别人的宿舍,感觉还是很不错的,四人一间,下面是写字桌上面是床铺。每一间都有个挺大的卫生间,还配备了热水器。晚上洗了热水澡之后就爬上床,一觉呼到天亮,不错。就是早上好像周围有直升飞机在飞,总是听到螺旋桨转动的声音。住九龙湖的朋友来说说看,应该不是我的幻听吧。不过可以督促人早起看书,在九龙湖我六点半就醒了,在家要到七、八点。
    行,九龙湖真是大啊,没车真是痛苦啊,楼与楼之间要拿望远镜对看。坐车回来从实验室走到西门,不仅感叹,如果没车天天这么走,东南的人都可以去参加竞走比赛了。
    下面要隆重介绍下我们的实验室,大楼很PP,毕竟是新的,各个房间也很大,人员不是那么拥挤,但是人与人之间还是没有隔板,老板说方便大家交流。一个大房间隔成两个部分,一个较小的部分放服务器什么的,其他的地方坐人。虽说是水泥地但是倒也干净,桌椅都是新的看上去比较爽。不过感觉里面应该放一些植物,进去后总觉得头晕,可能甲醛什么的还没有散尽,建议放盆仙人掌或者芦荟。实验室的网络还是一如既往地挫。昨天只能上国内网站,今天才勉强可以上谷歌,gmail啊,hotmail啊都上不去。
    下午又被老板叫过去谈话,似乎还是想让我读博士。唉,老板真是太不了解我的水平了。不过今天老板和我谈话说我还是挺聪明的,心气也挺高的时候,虽然知道并非老板真实想法,但是鼻子也酸了一下。
    总的来说,如果不是网络不好,如果不是要和人合住而且多出一份房租开销,我倒是愿意到九龙湖去住的,然后周末回家,觉得可以静心潜修,远离都市的喧嚣。但是也会有顾虑,因为交通不方便,很多信息会不知道,在这个信息时代,这可是一大损失。
15 ottobre

杂记

    早上起来,没有来由地觉得心里面空空的,sigh,很久没有这个感觉了。不想深究,于是开始早上的routine: 打开电脑,连上网络,播放CNN的新闻,然后我去洗漱。回来正好看到一个节目,有人采访科学家谈论人类大脑的问题。采访者问科学家a genius is born or is built,对方回答他认为是is born,之后又解释说也许不能说天才就完全是天生的,但是他认为有些人生下来就比其他人在某些方面做得更好,这是由其大脑皮层褶皱及其中神经元之间的联系所决定的。想起看过一篇报道说对爱因斯坦大脑进行解剖研究发现他与常人不同,褶皱更多更深。没办法,在我活着的时候没办法把脑壳打开数数,从而决定我是否有足够的天份去做某些事情,能做得就只有自我开发了。运气好的也许一下子就找到自己擅长的领域,不好的就要多花些时间了。安慰自己千万不要没有尝试没有努力就放弃,万一错过发掘自己的机会,实在可惜。
    想了一堆乱其八糟的东西,还是心慌和沮丧,于是带着本书去上自习。途经我的小学,成贤街小学,从外面望进去,教学楼没有太多的改变。思绪一下子回到了小学时代,回想起以前的老师,10多年了,不知道他们如何了。转而想起自己在数学课上睡着,想起被语文老师罚站在黑板的一角站了一节课,想起因为喜欢的老师所教的课没有考好愧疚地不敢见老师。人说3岁看80也许还真有些道理呢。
    说心情不平静的时候可以练习yoga,可惜因为身体原因,将课程向后推了一个月。考虑这个月的锻炼改为慢跑好了,天气适宜。
04 ottobre

10月4日

    10月4日,很平常的一天,不过今天却觉得很充实,因为把一些琐碎的小事都办了。前些天就听说有动感地带的M值换取苏果券的消息,只是一直懒得动,今天决定乘着活动还在进行中,把它搞定。到了家附近的移动营业厅,人家说一定要去动感地带的营业厅,在东南那里。ft,想到学校发的中行卡到现在都还没有改 密码,邢mm昨天提醒为了安全问题还是尽快改好,所以觉得一起办。转而又想到4号了,军人俱乐部应该开门了,就把要买的书也一起办了吧。于是决定路线:家-->军俱-->东南动感地带-->珠江路中行营业厅。其实很奇怪东南为什么将原来的建行该位中行,建行学校周围有好几家,比较方便学生使用,而中行真的很少。除了珠江路的,恐怕就要到山西路或者新街口,实在太远了。转念一想,学校什么时候考虑过学生的方便与否了,做学生的就只能承受了。
     全部跑完搞定,回家已经下午四点半了,稍作休息奔赴厨房做饭。今天要烧萝卜汤,郁闷,因为要切丝。我最怕的就是切丝工作,所以青椒炒土豆也很头疼。上次就是因为切丝被老妈说了一通,说什么动作慢。其实是因为我的完美主义情结。我希望每根丝大小形状差不多,而且要是标准的矩形,所以切丝后要再修饰半天。做菜太热,于是将袖子卷起,突然发现这一动作让我的手臂感到很痛,于是问老妈为什么会痛呢。老妈似乎晕了一下说那就是发烧了。发烧?可是我一点感冒症状也没有,头也不是很痛啊?不过做完饭后,发现头开始痛了,测一下体温真的发烧了....
     不过发现自己还真矫情,一定要看了会儿paper再去睡觉,似乎自己向自己证明决心一样。睡了几小时又起了床,因为不停的做梦,不停的在梦中思考真的很累。似乎大二时的一场打击让我觉得很多事都是无法努力实现的,于是有些愤世嫉俗,所以之后虽然也认真地去做事,但是似乎很少全心地投入,总是喜欢给自己找个退路的样子,因为害怕结果不好,到时候付出全白费。但是多年后的今天,我突然发现,自己喜欢的还是那个能全力投入,奋斗不止的自己。那个总以计划不如变化做借口,那个总是为最后结果担心的自己真的是懦弱且猥琐。星座说9~10月份是狮子座反省最强烈的时候,这样看还真是有些准。最近不断的反省。反省的结果就是一句话:过程比结果更重要,成长比面子更重要。虽然现在身上有很多不足,但是我还可以学习和改进,总比为这些缺点而烦恼却期望它们突然消失来的实际。因为害怕丢面子被人鄙视所以总是畏畏缩缩,那么永远也没法前进。还有就是某人和我说的,一定要自信,嘎嘎,多谢了^_^
     不能去栖霞烧香拜佛了,但是突然觉得自己的rp也许也不算少,只是上帝以另一种方式表现出来罢了。
01 ottobre

看了想哭的故事

     带走的钥匙 

  他和她邂遇在火车上,他坐在她对面,他是个画家。他一直在画她,当他把画稿送给她时,他们才知道彼此住在一个城市。两周后,她便认定了他是她一生所爱。 

  那年,她做了新娘,就像实现了一个梦想,感觉真好。但是,婚后的生活就像划过的火柴,擦亮之后就再没了光亮。 

  他不拘小节、不爱干净、不擅交往,他崇尚自由,喜欢无拘无束,虽然她乖巧得像上帝的羔羊,可他仍觉得婚姻束缚了他。但是他们仍然相爱,而且他品行端正,从不拈花惹草。 

  她含着泪和他离了婚,但是带走了家门的钥匙。她不再管他蓬乱的头发,不再管他几点休息,不再管他到哪里去、和谁在一起,只是一如既往地去收拾房间,清理那些垃圾。他也习惯她间断地光临,也比在婚姻中更浪漫地爱她,什么烛光晚餐、远足旅游、玫瑰花床,她都不是在恋爱和婚姻中享受到的,而是在现在。除了大红的结婚证变成了墨绿的离婚证外,他们和夫妻没什么两样。 

  后来,他终于成为了有名的艺术家,那一尺尺堆高的画稿,变成了一打打花花绿绿的钞票,她帮他经营帮他管理帮他消费。他们就一直那样过着,直到他被确诊为癌症晚期。弥留之际,他拉着她的手问她,为什么会一生无悔地陪着他。她告诉他,爱要比婚姻长得多,婚姻结束了,爱却没有结束,所以她才会守侯他一生。 

  是的,爱比婚姻的长度要长,婚姻结束,爱还可以继续,爱不在于有无婚姻这个形式,而在于内容。


  破碎的花瓶 

  他和她是大学同学,他来自偏远的农村,她来自繁华的都市。他的父亲是农民,她的父亲是经理。除了这些,没有人不说他们是天生的一对,在她家人的极力反对下,他们最终还是走到了一起。 

  他是定向分配的考生,毕业只能回到预定的单位。她放弃了父亲找好的单位,随他回到他所在的县城。他在局里做着小职员,她在中学教书,过着艰辛而又平静的生活。在物欲横流的今天,这样的爱情不亚于好莱坞的“经典”。 

  那天,很冷。她拖着重感冒的身体,在学校给落课的学生补课,她给他打过电话,让他早点回家作饭。可当她又累又饿地回到家时,他不在,屋子里冷锅冷灶,没有一丝人气,她刚要起身做饭,他回来了。她问他去哪了,他说,因为她不能回来做饭,他就出去吃了。她很伤心,含着满眶的泪水走进了卧室。她走过茶几时,裙角刮落了茶几上的花瓶,花瓶掉在地上,碎了。半年后,她离开了县城,回到了繁华的都市。 

  这便是婚姻,坚强而又脆弱。如同漂亮的花瓶,放在一个合适的位置,可以经受得住岁月的风化,但是只要轻轻一碰,掉在地上,就可能会变成无数的碎片。


  滴水的窗檐 

  他和她属于青梅竹马,相互熟悉得连呼吸的频率都相似。时间久了,婚姻便有了一种沉闷与压抑。她知道他体贴,知道他心好,可还是感到不满,她问他,你怎么一点情趣都没有,他尴尬地笑笑,怎么才算有情趣? 

  后来,她想离开他。他问,为什么?她说,我讨厌这种死水样的生活。他说,那就让老天来决定吧,如果今晚下雨,就是天意让我们在一起。到了晚上,她刚睡下,就听见雨滴打窗的声音,她一惊,真的下雨了?她起身走到窗前,玻璃上正淌着水,望望夜空,却是繁星满天!她爬上楼顶,天啊!他正在楼上一勺一勺地往下浇水。她心里一动,从后面轻轻地把他抱住。 

  婚姻是需要一点情趣的,它就犹如沙漠中的一片绿洲,让我们疲劳的眼睛感到希望和美,适当地给“左手”和“右手”一种新鲜的感觉吧。


  最后的旅行 

  他是个搞设计的工程师,她是中学毕业班的班主任老师,两人都错过了恋爱的最佳季节,后来经人介绍而相识。没有惊天动地的过程,平平淡淡地相处,自自然然地结婚。 

  婚后第三天,他就跑到单位加班,为了赶设计,他甚至可以彻夜拼命,连续几天几夜不回家。她忙于毕业班的管理,经常晚归。为了各自的事业,他们就像两个陀螺,在各自的轨道上高速旋转着。 

  送走了毕业班,清闲了的她开始重新审视自己的生活,审视自己的婚姻,她开始迷茫,不知道自己在他心里有多重,她似乎不记得他说过爱他。一天,她问他是不是爱她,他说当然爱,不然怎么会结婚,她问他怎么不说爱,他说不知道怎么说。她拿出写好的离婚协议,他愣了,说,那我们去旅游吧,结婚的蜜月我都没陪你,我亏欠你太多。 

  他们去了奇峰异石的张家界。飘雨的天气和他们阴郁的心情一样,走在盘旋的山道上,她发现他总是走在外侧,她问他为什么,他说路太滑,他怕外侧的栅栏不牢,怕她万一不小心跌倒。她的心忽然感到了温暖,回家就把那份离婚协议撕掉了。 

  很多时候,爱是埋在心底的,尤其是婚姻进行中的爱,平平淡淡,说不出来,但是真实存在。


  晾晒的萝卜干 

  楼下住着一对老夫妻,男的是离休的处级干部,女的退休前是一家大医院的主任医师,他们的两个孩子,一个是某局里的中层干部,一个在国外读书。 

  入秋的一个傍晚,我看见那老夫人在翻晒萝卜,我很奇怪,像她这样的家庭,还用自己腌菜吃吗?我问她,张阿姨,你家还腌咸菜吗?那老夫人很有丰韵,笑起来一脸的幸福,她说你王伯就爱吃我做的萝卜咸菜,吃了一辈子都不腻,过去工作再忙,都要给他晾菜,何况现在退休了,有的是时间。 

  望着翻菜的老人,忽然就想起林语堂先生的名言:爱一个人,从他肚子起。对那些走过几十载风风雨雨的婚姻来说,爱可能真的就落在碗里,落在“萝卜干”上了。 

  不是每份爱都是惊天动地的,实实在在,朴实无华是婚姻的一种境界。


  身边的风景 

  和许家庭一样,他们曾经那么热烈地相爱过,但是随着岁月的流失,他开始变得冷漠了,大概就是人们常说的“审美疲劳”吧,激情越来越少,心开始了漂移。 

  他开始上网,聊QQ,在虚拟中寻找新鲜的感觉。一日,他在一个网站看到一个署名“飘落的枫叶”所写的短文,写的是一个女子对婚姻对生活的失望。那优美的文字和文字间流溢的淡淡忧伤,深深打动了他。他不明白,一个感情这样细腻、丰富的女子,她的丈夫怎会不知道珍惜?他禁不住翻阅了那女子的注册资料,却发现那注册的信箱竟是妻子的姓名全拼,他猛地释然了,妻子的名字不正是“枫”吗,自己怎么就忘了, 

  妻子曾是大学里的文学社团主席呢,只是婚姻让她淡忘了许多爱好。 

  他走进厨房,用手从后面环住妻子的腰:我们吃完饭出去散步吧。妻子肩头微微一颤:太阳从西边出来了?你不上网了?他转过妻子的身,看着那其实很好看的脸说,我以后天天陪你散步。 

  “不识庐山真面目,只缘身在此山中”,人们常说身边没有风景,其实风景往往就在你身边。


  温顺的丈夫 

  他和她都是小工人,薪水不高,但是足够生活。丈夫很普通,妻子却很漂亮,也很伶俐。 

  因为彼此都很有时间,他们每个月或是出去看场电影,或是去逛逛公园,间或出去吃顿晚餐。只要妻子想,丈夫就陪着。什么事都顺着妻子,只要妻子高兴,只要条件允许,从来不说半个“不”字,好像从来就没有自己的想法。一次,他们出去吃晚饭,妻子让丈夫点菜,丈夫说,点你爱吃的吧,妻子有点生气,你就没一点自己的主见!是不是有点窝囊!丈夫楞了,叹了口气:我只是一个普通的工人,不能给你宽敞的住房和漂亮汽车,我只想在自己“能”的范围内,给你最好的。 

  世界上有卑微的男女,却没有卑微的爱情,爱她,就给她最好的,我想这也该算是婚姻的真谛吧。
 
******************************************************************************************
每个女孩都会做梦,梦想着自己白马王子的样子。最开始都是几尽完美的要求,到最后才会发现,其实只有能发现你的好,欣赏你,宝贝你才是最重要的,为了这个其它的要求都可以舍弃。