江边闲话集

03/22/2009

爬起来

Filed under: 闲情逸致 — 张太国 @ 21:06

过去的08年里,自己做的事情失败过几次,到了09年,才认识的更加深刻。08年的失败将成为过去,我坚信它们仅仅是我生活中的一个涟漪,他们不仅没有让我意志消沉,反而让我清晰认识到自己的不足。过去从哪里摔倒,那今天今天就从那里爬起来吧。

一直以来,我都认为自己是一个打不倒的人,以前有这样的思维多少带点盲目,如今,发现自己能够理性去面对,不管如何,我心一样坚强。

人不可能不会遇上坎,也许目前的困难时很重的,但是过了之后,才发现仅此而已。

对自己说一声,我会从去年的失败之处再一次站起来的。

爬起来需要一种高度的眼光看过去,实现未来,就这么简单。

北京见闻4:京津城铁之二

Filed under: 北京见闻 — 张太国 @ 11:25

上次因为自己有点事情,所以就没写完,今天补写。

京津城际上有免费的水喝,如果你做千万别忘了。

刚开始的时候,都是服务员推着一个小车,上面放满了水,会挨着一个一个乘客发。大概是09年2月份,就开始停发了。改为乘客自己去取。这样做的好处是避免浪费,很多人其实不用水的。当然,我在想,这个车票的票价已经包含了水的价格。

水是由西藏的5100公司专为和谐号提供,所谓5100,其实就是5100m地下水吧。上次到超市去溜达,偶然看见这个牌子的水,嘿,居然还挺贵的。

在车厢的车头或车尾,都有电源插座,很适合商务用。如果你的笔记本没电,或者手机想充电,这是一个不错的选择。

在美堂车上,都有一个bar,提供一些咖啡等服务,这是聊天的好去处啊。

到目前为止,仍然有很多乘客拍照留念,可惜我还没有这么做呢,尽管坐过无数次了。

列车是有国内的制造商制造,好像是中国南车和中国北车吧。不管是谁,总之全部是国产化,这足以说明中国在铁路上的技术已经进入国际一流水平。如果留心这些年国家的铁路发展,就会有一个清晰的改变。

03/20/2009

北京见闻3:京津城铁之一

Filed under: 北京见闻 — 张太国 @ 21:21

往返于北京和天津的机会太多。每次都是乘坐京津城际快车。感觉是很好很快很贵。

这条线路是去年奥运前开通的,刚开始坐的人特别多,当时应该说是抢票吧,因为大家都是为了图个新鲜。现在这个新鲜劲儿一过,买票就不用发愁了。现在我每次从北京去天津就不用订票,直接去买就行。即使赶上大的假日,应该也不要紧。当然,如果从塘沽到北京,最好还是提前买票,我一般都是买往返票的。

票是可以改签的,提前和推迟都行。可能是因为班次太多,这车就相当于公交车,间隔为10-20分钟一班。这也是容易买到票的一个很好的理由。当然往返于北京和塘沽之间的车次仅仅只有4班,而且时间点也不好,令人郁闷。

买票很方便,都有专门的窗口出售。除了窗口之外,还有自动售票机,这是我见过最好的售票机。操作起来很方便。但是这个系统有个小毛病,就是点击确认票之后付款的操作有点让人不爽,一是现金付款的按钮有点让人不知所措,然后是出票时没法取消。所以一定要注意。

票价太贵,分为一等和二等座,我每次都做二等座,所以只知道二等票价。上次碰见一个特等座的,好像搞的人家都不知道在哪里坐。既然能打出特等座的,我很奇怪为什么没有座呢,怪事。北京和天津间的售价为52RMB,北京和塘沽为70RMB,天津和塘沽为18RMB。居然不打折,很郁闷。其实我也发现很多空座位。

车很快,估计国内只有上海的磁悬浮和它媲美,在北京和天津这段,一般在320km/h,在天津到塘沽这段,一般在170km/h。北京到塘沽距离在160KM多,56分钟到。北京到天津差不多是28分钟,平均可能在250km/h.

车上的条件不错,都是软座。比较宽敞,坐起来很舒服度。椅子是可以转动的,这方便到站之后可以调头。多好的设计。座椅可以调节高度,如果累了,调低一些,睡个大叫很适宜。前面有个面板,可以放电脑,水等物品。还提供一些杂志,一个月换一次。一般一排座位提供3本杂志,内容什么都有,饮食,娱乐,房地产什么都有。

今天有事,就先写到这里吧。

03/19/2009

北京见闻 2:地铁

Filed under: 北京见闻 — 张太国 @ 17:12

今天早上上班坐地铁,因为人很多,根本不用我往里挤,我已经到了车厢中间了,后面的队伍确实很厉害。今天被人家一挤,我的手一不小心碰到了一小姐的嘴巴,这位小姐可能是一着急,把自己的下嘴唇给咬住了。我一看流血了,连忙道歉。准备拿出纸巾,发现自己已经动弹不得。这位小姐说了声讨厌,恶狠狠的看着我,我心里真是很惭愧。

通过以上的实例,说明北京的地铁还是很拥挤的。

地铁很便宜。这么大片地,居然2块钱就可以搞定,地铁之间换乘同一价。太便宜了。上海地铁起步可是3块钱啊。以前在上海每次到要4RMB,够贵。

地铁没信号。这被很多乘客所诟病。偌大一个北京,若先进的一个城市,怎么地铁一开动就两个信号都没有。我的手进很有意思,要是没信号,先会变成SOS,真难道代表的我的心声。往往你会发现有这么一幕,一到站,好多人开始打电话,地铁一开,马上就挂了。这真的赶时间啊。不知到北京地铁公司和移动运营商怎么搞的,可能还是利益的问题吧。

地铁换乘极其痛苦。基本上北京的地铁换乘起来走的很远,真是够累的。200m的换乘那简直是小case了。要是换上东直门换13号或西直门换13号,走的你吐血,另外,换乘时不知道哪来的那么多栏杆,我觉得完全没有必要,说是为了缓解站台上乘客的压力,我看也未必。

地铁太旧了。这列车很旧啊,记得以前到北京时候拿更旧,也许因为奥运会的缘故吧,换了一批新车,不过总体感觉还是不爽。在一号线上甚至可以看见列车上方是电风扇,而不是空调。

地铁周边的公交车以及其他设置标志不合理。你要是出战后找个公交车,很难找,要么是标志不清,要么是标志牌放的不合理。

地铁标记不好找。记得有一次,我在王府井坐地铁,居然没发现标志。后来文人,才知道地铁就在我脚下。那叫一个晕。不过,现在好多了。

地铁的工作人员多。这个很好,维护秩序。至今为止我还没听说过有人跳地铁自杀或者其他事件,这在上海一年也有那么几次吧。

地铁要安检。好像还出了一台什么安检法吧。

上面好像总是说的不好之处,实际上对我而言,也没什大不了的,已经习惯了。

是什么造成了这样的困惑呢。

03/18/2009

这是我的不对

Filed under: 三言两语 — 张太国 @ 21:44

昨天晚上和Lisa大吵了一顿。完之后我心情非常不好,我相信Lisa应该也和我一样吧。后来我分析了一下,责任还是在我这里。

正如Lisa所说,我真是一个工作狂。要是工作起来,连饭都可以不吃。不过想想现在。自己的身份已经改变了,以后除了工作,还有自己的家庭。这次也算是对自己提一个醒吧。

一直以来,我自己都觉得对生活没有对工作认真。在生活发生的事情上,我显得不是那么积极,有些事情不是特别着急,自己是不大会去积极去处理。就拿换房子的事情,一拖拖了几个月,我自己都不好意思了,但是对于工作就不一样。真是可笑。

这几个月,对于生活上的事情,我一直不上心,有时候自己想去做点什么,但是发现自己还是不能完完全全投入到里面去。说实话,在这段时间里我觉得特别对不起Lisa,要不是她,一些事情都不知道怎么办呢。尽管这样,我觉得自己已经比原来上心了一些,也许这点上心对于别人来说根本不值什么,但是对于我来说,我觉得自己真不容易。即便如此,离我心中的目标还差很远。

我时刻都在考虑为什么会造成这样的局面?答案是与我这几年的生活经历有太大关系。因为前几年,我太忽略了生活,在生活上,过得太简单,除了一些爱好外,自己好像也没关心什么。人闲惯了,突然一下子紧张起来真是有点不习惯啊。

除此之外,我发现自己在生活上的沟通真的得再进一步。Lisa已经说过很多次了。没有沟通,人家就不知道你的想法,如果碰上一个特别着急的人,他会跟你着急。沟通的好处不用我多说,即使不可以,说出来了就有商量啊。

如果我在生活上的处理方式能和工作上,那多好啊。真TMD的是个工作狂啊。

总结一下,必须提高一下的能力:

  1. 沟通能力
  2. 执行能力
  3. 尊重家人,重视家人,让自己的生活焕发起来

以此文章为起点,努力。

03/17/2009

北京见闻 1:公交车

Filed under: 北京见闻 — 张太国 @ 20:07

来北京已有快4个月了,除了工作忙之外,其他也没做什么,所以对北京仍然处于一知半解。今天下决心开辟一个北京见闻的目录,记录以前,现在以及将来我生活在北京的见闻。

先说公交吧。

今天上班时,在公司楼下突然发现有个728的公交线路,自己吃惊的不行,这条线路不是经过我住的那个地方么。可能我对北京不熟悉,所以一直也没发现。

到了公司之后,抽点时间查找了一下该公交线路,确实很长,横穿整个北京,从东到西,全程46.25公里,真是服了。以前在上海,可从来没有出现过这样的公交线路。

后来上网继续查,发现比这个更长的都有。我被雷倒了。

另外,北京的公交车也真是够便宜,便宜的你没法想象。持有公交卡,居然打4折,我每次坐公交,才4毛钱。在上海这个城市里生活久了,面对北京这票价,我只能感叹一声,便宜,真的很便宜。

咖啡和可乐

Filed under: 闲情逸致 — 张太国 @ 12:52

今天中午去吃午饭,在地下一层随便要了一份午餐,本来已经向服务员要了一杯可乐,但是过了2秒之后我说我放弃了。就是在这两秒里,我想起了lisa上次交待我的事情。上周末她说,以后每个月只允许我花50块钱买水喝(包括饮料),按照我的理解,我在可乐上每个月的花费不能超过50块钱。心里一盘算,如果买小瓶装的话可以买20瓶,如果买1.25L和2L的差不多可以买7瓶,这对我来说,一个月应该够了。尽管这样,当lisa说这件事情的时候,我心里真的很感激她,因为她这都是为了我好。

今天我克制住自己也算是迈出第一步吧。实际上,喝可乐没什么好的,对身体没有多大益处,还乱花钱。另外,我发现喝可乐还上瘾呢。

已经这么久的习惯了,如果一下子能够改过来不太现实,还是让我以最快的速度戒掉吧。目标是少喝甚至不喝。

让我想起前两年我喝咖啡的习惯。当时我很喜欢喝咖啡,一天几杯,但是后来lisa也对我说,多喝咖啡不好。在以后的日子里,每次喝咖啡的时候我都会想起lisa孜孜不倦的教诲。有时候我偷偷喝了一杯,没敢告诉她,但是事后觉得心里面很惭愧。为了避免此,我已经没有喝咖啡的习惯了。当然偶尔也喝喝,在我的记忆里已经记不起我上次喝咖啡是什么时候了,可想而知我已经对咖啡没什么感觉了。

如果哪位见到这篇文章后,再也不要请我喝咖啡和可乐,在此谢过了。

最后,感谢Lisa的教导,虽然我们已经在一起这么多年了,我出自内心的感谢你。

02/10/2009

脑残非典型

Filed under: 闲情逸致 — 张太国 @ 23:08

用一句话形容自己的状态就是脑残非典型。

爷的,除了对工作之外,感觉自己对其他有点脑残了。

最近事情很多,无论是生活上和工作上。

先说工作上,感觉越来越顺利,尽管有些忙。最近自己非常投入一个非常有挑战的项目,时间短但是内容多,有意思,而且和其他人沟通也很多。这是其一,其二是用到的技术很久没动过了,令我没想到的是很容易上手,也许是这几年的磨练吧。原来非常害怕的事情现在基本上没有难度了。这就是经验的作用。也许有机会出差了。希望不要和我的大日子相撞啦。

再说生活上的事情,在自己终生大事上,自己显得很脑残,很多事情都不知道,甚至有时候一想,怎么觉得大脑一片空白呢?有时候让自己多想想,但是发现自己有些烦乱。幸好leaf和她家人这个时候分担了99%的事情,我也省事多了,不过话说回来,自己真有些惭愧。这个周末约了老张,与他和嫂子好好聊聊,顺便去取经。周末相约老张的人别妄想了呀。

说是脑残,还表现在生活上的有些事情,感觉自己做事不够细心,难怪老哥语重心长的说我几句呢。我也不知怎么地了,就是觉得状态不好。

好好想想吧。

02/04/2009

Hello, Memory Leak

Filed under: 一技之长 — 张太国 @ 17:52

已经有3年没有认认真真写过C/C++程序。即使是写,也是写些小程序。

因为项目的需要,与C/C++再续前缘。令人崩溃的是,我写的程序居然出现内存泄漏,直接吐血。以前,也有一次出现过内存泄漏问题,记得当时写的是一个monitor工具,一直运行在机器上,有意思的是每次执行泄漏4个字节。原因后来找到了,都是CString惹的祸啊。

这次的情况和上次不一样,没那么简单,一直用到其他库,二是因为自己对这门语言开始生疏了,造成了很大的问题。今天一口气将其解决掉,经验分享如下。

如何知道内存泄漏?

我是用VS.NET 2003开发的,该工具挺好的,当我调试时然后关闭应用程序,在output窗口就会显示,例如,

Detected memory leaks!
Dumping objects ->
{10381} normal block at 0x01C76F40, 4 bytes long.
Data: <  t > EC 9C 74 00
{9443} normal block at 0x01C37D68, 4 bytes long.
Data: <  t > EC 9C 74 00
Object dump complete.

说实话,上面提示只能告诉你内存泄漏存在,而且泄漏多少,但是没有告诉你在哪里泄漏。还好,一个开源的小工具能够帮助我们定位到具体位置。这个工具就是Visual Leak Detector , 至于如何使用,网上文章特多,在这里我还是简要说明一下。

  1. 将include文件放在系统的include下,如果使用VS,那就放在VS的include下。
  2. 将lib文件放系统的lib下,如果使用VS,就放在VS的lib下。
  3. 在需要的源文件引用一下就可以了,例如#include<vld.h>
  4. 将dll放在执行文件的目录那里。

debug应用程序,然后关闭,在output下会出现:

No memory leaks detected.
‘xxx.exe’: Unloaded  c:\xxxx\Debug\dbghelp.dll’
Visual Leak Detector is now exiting.

上面是最简单的方法有个缺点,要是我不想讲include等文件放在系统目录下,而想将其跟我的工程一起放怎么办?很简单,将include,lib等文件拷到自己的project下,如果使用VS,请在设置里将include,lib将这些目录加上,然后再lib的那里加上vld.lib即可。不同的IDE不一样,也许不用加上。

当然还有很多更好的工具,不过VLD已经够用了。

如何避免?

避免内存泄漏的方法还是在于防范。

我觉得最根本的原理就是请求内存,然后释放内存。往往我们就是只请求不释放。

原则可以如下:

  1. new一个,一定要delete
  2. malloc一个,一定要free
  3. 有时候并没有new/malloc,但是还是请求了资源,这个时候也要free。
  4. 不要返回一个对象或者一个对象的指针,代替的是在参数里进行传址。
  5. 如果你非得返回一个对象或指针,那引用该函数的人一定有义务要删除。

1、2不多说了,太简单,举个很有意思的例子。CString我们都熟悉,但是用好还真不容易,new了一个一定要删除,有时候会调用GetBuffer,事后是否需要ReleaseBuffer呢?

说第3点。先举个例子:

char* val = XMLString::transcode(subNode->getFirstChild()->getNodeValue());
//do your thing here
  XMLString::release(&val);

上面val其实分配了内存,所以要在下面释放,XML::release就是干这个事情的。也许我这么说很明白,按时真到了关键时刻,可能就忘了,也许有这样的写法:

std::string msg(XMLString::transcode(subNode->getFirstChild()->getNodeValue()));

说不定我们写完了以为就没事了,但是事情往往就出现在这里。

第4点,很多人都会犯,包括我自己。

先看这样如下代码:

Class A
{
  public:
  A();
  ~A()
}
class B
{
public:
B();
~B();

A f1(){return new A();};
A* f2(){A* a = new A(); return a;};
}
B b;
A a1 = b.f1()
A* a2 = b.f2();

上面的代码就是模拟第4点写的。第一看没问题,这在C#,Java里,这种思路在普遍不过了,但是在C/C++这里需要注意,返回一个临时对象是不安全的,即使访问指针,也是不安全的。如果要变的安全,需要费劲,而且你必须遵照第5点,手动删除它。

什么是安全的使用方法?我们可以改写一下:

Class A
{
  public:
  A();
  ~A()
}
class B
{
public:
B();
~B();

int f1(A* a);
}
B b;
A* a1 =new A();
b.f2(a1);

这样做就安全许多。因为f1将指会存入a1指向的地址那里。

其他

为了避免内存泄漏,有个比较好的方法就是RAII(Resource Acquisition Is Initialization),一般用在类里,思想就是在析构函数里将资源释放掉,即使在使用的过程中忘了删除,最后对象销毁时也会释放的。举个例子:

#include  
#include  
class file 
{ 
public: 
    file (const char* filename) 
        : file_(std::fopen(filename, "w+")) 
    { 
        if (!file_) 
            throw std::runtime_error("file open failure"); 
    } 
    ~file() 
    { 
        if (0 != std::fclose(file_)) // failed to flush latest changes? 
        { 
            // handle it 
        } 
    } 
    void write (const char* str) 
    { 
        if (EOF == std::fputs(str, file_)) 
            throw std::runtime_error("file write failure"); 
    } 
private: 
    std::FILE* file_; 
    // prevent copying and assignment; not implemented 
    file (const file &); 
    file & operator= (const file &); 
};

上面~file()里,也会把file_干掉的,即使字啊write里没有释放。

程序员是很懒的,所以有时候不会主动释放掉,更不用说粗心大意的人了,即使是谨慎的人,也不会时时刻刻去关注。即使是,后期维护人员难道知道处处到要释放吗?不能保证啊。

上面是方法之一,接下来就是只能指针,auto_ptr,当这个指针销毁时,其对象也销毁。看看下面的代码:

using namespace std;

class MyClass {

public:

  MyClass() {} // nothing

  ~MyClass() {} // nothing

  void myFunc() {} // nothing

};

int main() {

  auto_ptr<MyClass> ptr1(new MyClass), ptr2;

  ptr2 = ptr1;

  ptr2->myFunc();

  MyClass* ptr = ptr2.get();

  ptr->myFunc();

  return 0;

}

如果ptr1销毁后,那么在new MyClass()也会销毁。

关于智能指针我不多说了,毕竟我也不是特别精通啊。

暂时就写这么多,以后在更新吧。

02/02/2009

我不在?

Filed under: 闲情逸致 — 张太国 @ 17:48

这里已经很久没有更新了,如果你真这样想,那么你错了?其实这个博客一直在更新,只是从表面上看不出来。如果想知道,请参看这里

看着大家迎新辞旧,我曾经也忍不住想写一把,但是想想,自己也没什么好写的,基本上大致的情况是:

  • 生活上,变化很大
  • 工作上已经从上海转到北京了
  • 心理上,更进一步理性了,当然梦想还是有的。

至于09年,现在也写不出,感觉自己大脑里还是有点空。等吧,天翻地覆。

总结一下,最近一年表现最突出的是心理,庆贺。

« Newer Posts

Powered by WordPress