江边闲话集

10/26/2008

追求与理想

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

最近几天与Sandy,Nick的交流,再一次让我体会到我自己的追求。

和他们的交流中,我也不断的在思考我自己到底是属于一个什么样的人,自己的价值观,人生观,世界观是什么,是如何体现的,这些都很重要。

我自己认为我是一个特别爱思考,爱学习的人,也真因为这样,他们促使我再一次思考自己。我从他们那学习到很多。

回想起来,今年还有2次交流让我受益匪浅。

  • 今夏,与Spring的一次对话,让我终于明白我现在做的很多事情都是和我的意愿想符的。以及我做的事情是和以前所做的事情是一脉相承,相互帮助的。
  • 国庆前后,让我深刻体会到自己的生活和工作存在的一些问题。当然我也正努力的去解决啦。

不管怎样,正如这里写到的那样,我还是坚持里面大部分观点,只有极小的点有变化。

10/20/2008

基础还是真重要的

Filed under: 一技之长 — Tags: — 张太国 @ 16:08

一些知识太久不用,发现自己都快遗忘了。上周和某位同学一起聊天,谈到了一些最基本的知识,因为自己的生疏,或者不懂,搞得自己有些尴尬。为了改变这一现状,还是先熟悉一下例我远去的基础知识吧。

今年来自己状态也不是特别好,总被这样那样的事情分心,所以也没有时间去整理一下。事实上,与其说这样的理由,还不如说自己因为一些事情导致自己心都懒惰了,所以这些知识才离我远去,突然想起刚毕业那会和一年前那种干劲,真的很怀恋。

话不多说,是时候捡起来了。马上行动,先写一个计划吧。

10/19/2008

水问

Filed under: 闲情逸致 — 张太国 @ 15:25

中央电视台纪实片<<水问>>,非常不错。建议每个人都看。

这里摘抄一下CCTV网站上的介绍:

水是万物生命的源泉,也是人类文明的源泉。浏览人类文化的发展史册,水与文化密切相关,相辅相成,交相辉映。黄河与长江,汩汩澎湃着,孕育了5000年水与文明的壮丽喧哗。如今,在文明不断进步的同时,水资源的短缺时刻警醒着我们。8集纪录片《水问》,八问中国之水,探询人水和谐的发展之道。

更多关注这里:http://space.tv.cctv.com/podcast/shuiwen

环保,环保,你真的环保了吗?

最近几年中央电视台的纪录片越来越不错,质量较以前提高不少。值得收看。

10/16/2008

给NetBean For Ruby安装Fast Debugger

Filed under: 一技之长 — Tags: , , — 张太国 @ 17:11

心血来潮,发现自己的Netbean IDE for ruby已经很老了,于是想更新一下。

用就用最新的,到这里下载了一个最新的NB 6.5 beta版本:

http://bits.netbeans.org/download/trunk/nightly/latest/

下载2分钟,安装1分钟,导入工程1分钟。然后点击调试按钮0.1s,系统居然提示我安装fast debugger 0.3版本。直接在IDE上安装了,等了N久就是安装不上。

接着在命令行飞快输入:

gem install ruby-debug-ide -v '0.3.2' --include-dependencies

等了半天,居然出现如下结果:

INFO:  `gem install -y` is now default and will be removed
INFO:  use --ignore-dependencies to install only the gems you list
Bulk updating Gem source index for: http://gems.rubyforge.org/

于是在美国的服务器上试了一把,结果是没问题。看来是我们这边网络有问题呀。设置好socket代理,嘿,我也不知道怎么在gem下设置socket代理,只知道设置http代理。无果,只能下载gem文件安装了。

Google了一把,

ruby-debug-ide居然在Debug Commons里面。链接是:http://rubyforge.org/frs/?group_id=3085

因为ruby-debug-ide依赖ruby-debug-base,所以不得不找它。后来发现在ruby-debug这里,链接是http://rubyforge.org/frs/?group_id=1900

注意,如果你在windows安装,ruby-debug-base必须安装windows版本的。

一切搞定。要不是公司网络问题,我还不知道ruby-debug-ide的包究竟在哪里。

接下来想研究一下它是如何给ruby设置hook的。

10/15/2008

7Zip的格式

Filed under: 一技之长 — Tags: , — 张太国 @ 10:39

我一直使用7Zip,今天下载了7Zip的代码,才知道7Zip的格式。所以将之Copy到这里。

7z Format description (2.30 Beta 25)
———————————–

This file contains description of 7z archive format.
7z archive can contain files compressed with any method.
See “Methods.txt” for description for defined compressing methods.

Format structure Overview
————————-

Some fields can be optional.

Archive structure
~~~~~~~~~~~~~~~~~ 
SignatureHeader
[PackedStreams]
[PackedStreamsForHeaders]
[
  Header
  or
  {
    Packed Header
    HeaderInfo
  }
]

Header structure
~~~~~~~~~~~~~~~~ 
{
  ArchiveProperties
  AdditionalStreams
  {
    PackInfo
    {
      PackPos
      NumPackStreams
      Sizes[NumPackStreams]
      CRCs[NumPackStreams]
    }
    CodersInfo
    {
      NumFolders
      Folders[NumFolders]
      {
        NumCoders
        CodersInfo[NumCoders]
        {
          ID
          NumInStreams;
          NumOutStreams;
          PropertiesSize
          Properties[PropertiesSize]
        }
        NumBindPairs
        BindPairsInfo[NumBindPairs]
        {
          InIndex;
          OutIndex;
        }
        PackedIndices
      }
      UnPackSize[Folders][Folders.NumOutstreams]
      CRCs[NumFolders]
    }
    SubStreamsInfo
    {
      NumUnPackStreamsInFolders[NumFolders];
      UnPackSizes[]
      CRCs[]
    }
  }

  MainStreamsInfo
  {
    (Same as in AdditionalStreams)
  }
  FilesInfo
  {
    NumFiles
    Properties[]
    {
      ID
      Size
      Data
    }
  }
}

 

HeaderInfo structure
~~~~~~~~~~~~~~~~~~~~
{
  (Same as in AdditionalStreams)
}

Notes about Notation and encoding
———————————

7z uses little endian encoding.

7z archive format has optional headers that are marked as
[]
Header
[]

REAL_UINT64 means real UINT64.

UINT64 means real UINT64 encoded with the following scheme:

  Size of encoding sequence depends from first byte:
  First_Byte  Extra_Bytes        Value
  (binary)  
  0xxxxxxx               : ( xxxxxxx           )
  10xxxxxx    BYTE y[1]  : (  xxxxxx << (8 * 1)) + y
  110xxxxx    BYTE y[2]  : (   xxxxx << (8 * 2)) + y
  …
  1111110x    BYTE y[6]  : (       x << (8 * 6)) + y
  11111110    BYTE y[7]  :                         y
  11111111    BYTE y[8]  :                         y

Property IDs
————

0x00 = kEnd,

0x01 = kHeader,

0x02 = kArchiveProperties,
0x03 = kAdditionalStreamsInfo,
0x04 = kMainStreamsInfo,
0x05 = kFilesInfo,
0x06 = kPackInfo,
0x07 = kUnPackInfo,
0x08 = kSubStreamsInfo,

0x09 = kSize,
0x0A = kCRC,

0x0B = kFolder,

0x0C = kCodersUnPackSize,
0x0D = kNumUnPackStream,

0x0E = kEmptyStream,
0x0F = kEmptyFile,
0x10 = kAnti,

0x11 = kName,
0x12 = kCreationTime,
0x13 = kLastAccessTime,
0x14 = kLastWriteTime,
0x15 = kWinAttributes,
0x16 = kComment,

0x17 = kEncodedHeader,

7z format headers
—————–

SignatureHeader
~~~~~~~~~~~~~~~
  BYTE kSignature[6] = {‘7’, ‘z’, 0xBC, 0xAF, 0x27, 0x1C};

  ArchiveVersion
  {
    BYTE Major;   // now = 0
    BYTE Minor;   // now = 2
  };

  UINT32 StartHeaderCRC;

  StartHeader
  {
    REAL_UINT64 NextHeaderOffset
    REAL_UINT64 NextHeaderSize
    UINT32 NextHeaderCRC
  }

………………………

ArchiveProperties
~~~~~~~~~~~~~~~~~
BYTE NID::kArchiveProperties (0x02)
for (;;)
{
  BYTE PropertyType;
  if (aType == 0)
    break;
  UINT64 PropertySize;
  BYTE PropertyData[PropertySize];
}

Digests (NumStreams)
~~~~~~~~~~~~~~~~~~~~~
  BYTE AllAreDefined
  if (AllAreDefined == 0)
  {
    for(NumStreams)
      BIT Defined
  }
  UINT32 CRCs[NumDefined]

PackInfo
~~~~~~~~~~~~
  BYTE NID::kPackInfo  (0x06)
  UINT64 PackPos
  UINT64 NumPackStreams

  []
  BYTE NID::kSize    (0x09)
  UINT64 PackSizes[NumPackStreams]
  []

  []
  BYTE NID::kCRC      (0x0A)
  PackStreamDigests[NumPackStreams]
  []

  BYTE NID::kEnd

Folder
~~~~~~
  UINT64 NumCoders;
  for (NumCoders)
  {
    BYTE
    {
      0:3 DecompressionMethod.IDSize
      4:
        0 – IsSimple
        1 – Is not simple
      5:
        0 – No Attributes
        1 – There Are Attributes
      7:
        0 – Last Method in Alternative_Method_List
        1 – There are more alternative methods
    }
    BYTE DecompressionMethod.ID[DecompressionMethod.IDSize]
    if (!IsSimple)
    {
      UINT64 NumInStreams;
      UINT64 NumOutStreams;
    }
    if (DecompressionMethod[0] != 0)
    {
      UINT64 PropertiesSize
      BYTE Properties[PropertiesSize]
    }
  }
  NumBindPairs = NumOutStreamsTotal – 1;

  for (NumBindPairs)
  {
    UINT64 InIndex;
    UINT64 OutIndex;
  }

  NumPackedStreams = NumInStreamsTotal – NumBindPairs;
  if (NumPackedStreams > 1)
    for(NumPackedStreams)
    {
      UINT64 Index;
    };

Coders Info
~~~~~~~~~~~

  BYTE NID::kUnPackInfo  (0x07)

  BYTE NID::kFolder  (0x0B)
  UINT64 NumFolders
  BYTE External
  switch(External)
  {
    case 0:
      Folders[NumFolders]
    case 1:
      UINT64 DataStreamIndex
  }

  BYTE ID::kCodersUnPackSize  (0x0C)
  for(Folders)
    for(Folder.NumOutStreams)
     UINT64 UnPackSize;

  []
  BYTE NID::kCRC   (0x0A)
  UnPackDigests[NumFolders]
  []

  BYTE NID::kEnd

SubStreams Info
~~~~~~~~~~~~~~
  BYTE NID::kSubStreamsInfo; (0x08)

  []
  BYTE NID::kNumUnPackStream; (0x0D)
  UINT64 NumUnPackStreamsInFolders[NumFolders];
  []

  []
  BYTE NID::kSize  (0x09)
  UINT64 UnPackSizes[]
  []

  []
  BYTE NID::kCRC  (0x0A)
  Digests[Number of streams with unknown CRC]
  []

  BYTE NID::kEnd

Streams Info
~~~~~~~~~~~~

  []
  PackInfo
  []

  []
  CodersInfo
  []

  []
  SubStreamsInfo
  []

  BYTE NID::kEnd

FilesInfo
~~~~~~~~~
  BYTE NID::kFilesInfo;  (0x05)
  UINT64 NumFiles

  for (;;)
  {
    BYTE PropertyType;
    if (aType == 0)
      break;

    UINT64 Size;

    switch(PropertyType)
    {
      kEmptyStream:   (0x0E)
        for(NumFiles)
          BIT IsEmptyStream

      kEmptyFile:     (0x0F)
        for(EmptyStreams)
          BIT IsEmptyFile

      kAnti:          (0x10)
        for(EmptyStreams)
          BIT IsAntiFile
      case kCreationTime:   (0x12)
      case kLastAccessTime: (0x13)
      case kLastWriteTime:  (0x14)
        BYTE AllAreDefined
        if (AllAreDefined == 0)
        {
          for(NumFiles)
            BIT TimeDefined
        }
        BYTE External;
        if(External != 0)
          UINT64 DataIndex
        []
        for(Definded Items)
          UINT32 Time
        []
      kNames:     (0x11)
        BYTE External;
        if(External != 0)
          UINT64 DataIndex
        []
        for(Files)
        {
          wchar_t Names[NameSize];
          wchar_t 0;
        }
        []

      kAttributes:  (0x15)
        BYTE AllAreDefined
        if (AllAreDefined == 0)
        {
          for(NumFiles)
            BIT AttributesAreDefined
        }
        BYTE External;
        if(External != 0)
          UINT64 DataIndex
        []
        for(Definded Attributes)
          UINT32 Attributes
        []
    }
  }

Header
~~~~~~
  BYTE NID::kHeader (0x01)

  []
  ArchiveProperties
  []

  []
  BYTE NID::kAdditionalStreamsInfo; (0x03)
  StreamsInfo
  []

  []
  BYTE NID::kMainStreamsInfo;    (0x04)
  StreamsInfo
  []

  []
  FilesInfo
  []

  BYTE NID::kEnd

HeaderInfo
~~~~~~~~~~
  []
  BYTE NID::kEncodedHeader; (0x17)
  StreamsInfo for Encoded Header
  []


End of document

10/10/2008

又长了一岁

Filed under: 闲情逸致 — 张太国 @ 11:55

我宣布:截止至今日,我已经踏入28岁了!

 

感谢老哥,父母等人提醒我。

10/06/2008

国庆一览

Filed under: 闲情逸致 — Tags: , — 张太国 @ 17:46
  • 不要选择长假高峰期出行。这次我是真正的国庆节那天10月1号出门。坐出租车很顺利,司机一个劲的狂奔,连个红灯都没见到。原来大约45分钟现在只需要18分钟搞定,那叫个通畅。下了滨海国际机场,才发现狗日的是新机场,害我多出了几十块钱的出租车费用。下了飞机之后直接叫了一个出租车到中山门。我就问司机师傅机场修了,比原来远了。司机说没错,现在从机场到中山门要40.3元。这司机够厉害的,当道中山门时,40.3元,一分不多一分不少。太牛了。
  • 从机场出来的那条路真是够宽的。这师傅也是一路狂奔。可能是因为奥运和达沃斯峰会在这里举行吧。途中我顺便问了一下,要是我直接到塘沽多少钱。人家告诉我大概110,再加上过路费10块,也就120.天啦,那也比原来贵40块。
  • 到塘沽的轻轨里的味道还是没消灭掉,很难受。
  • 塘沽的人真够多,我一直和我朋友说塘沽那里的人绝对要比天津市区里消费要高很多。有钱的人也大把多的是。不用多说,自己消费一把就知道了。随便吃顿饭也得斥资30-40块人民币。我和朋友吃顿面条人均也得15块。
  • 塘沽有个金百万,这里的菜我基本上每个都喜欢。去那边胃口一般不太好,但是到了这里,一看菜单口水直冒。每次去那里都吃得饱饱的,绝对撑着回家。这家生意特好,不仅仅是因为做的好吃,而且价格很实惠。是请客吃饭的好去处。就是服务员有点不到位。
  • 10月2号的什么天津大学生龙舟国际邀请赛。那个举办的水平,那叫一个不到位。我想进去看看都不给,你不给老子就不看了。不过最后看了一场比赛,期间设想了无数次跑到场内的方法。既然不看了总得找点事情做吧,于是乎到了电影院,看了看画皮,半价,25块钱,我还是觉得挺贵。塘沽的这个电影院挺有意思,什么埃及厅,希腊厅,华夏厅等,虽然不如上海等大城市的条件,总体感觉还可以。这个<<画皮>>虽然不是我想象中的那么好,但是比起其他电影,还算是不错了。赵薇在里面的角色我很喜欢,很少见到赵薇演这样一个角色。很成熟,很唯美,我喜欢。是不是我有恋母情结呢?我想应该有点吧。
  • 闲着没事干,去了趟CNC IDC,这个IDC还比较大。里面有国内某些大型互联网公司的服务器。看见那些一柜柜的服务器,我真为人家的系统架构师捏了把汗。能做到一个好的架构真是不容易呀。我才发现我学得那点知识可以去喂狗了。惭愧的不行。
  • 逛完IDC,去吃了顿湘菜,感觉还可以。和大哥聊了几句,感觉自己还有很多做的不够。接着去太平洋百货逛了一圈,买了一点格兰陵,当然不是我用啦。嘻嘻。
  • 这个国庆除了吃饭就是睡觉。nnd的,也不知道怎么回事情打死也睡不够。
  • 包水饺。我那个失败呀,既不会杆皮,也不会包。中间试着包了几个,到最后吃的时候发现几个散了,没准这几个就是我包的。看来我这个人只会吃,不会包的无用之人呀。更有意思的是,吃饭时说喝点酒,那个开瓶器居然断在里面了,不知道是张裕的瓶塞太厉害还是这个开瓶器太差,反正最后没喝成。第二天拿了一个钢的才打开。
  • 这个国庆几乎天天饮酒,虽然不多,但是品种还挺多。白酒,红酒,啤酒,每顿都喝一样。谨记,适量饮酒,有益健康。
  • 吃面是我的最爱。某天中午去吃炸酱面和铁板什么面的。本来还在说话的,一看到面,弃朋友不顾,一个劲的吃,大口大口的吃,难怪后来朋友说我看见面我就不和他说话了
  • 我先从塘沽到天津站,然后从天津站回上海。塘沽到天津坐的是城际列车。第一次坐,真的不错。快到天津站的时候乘务员居然发给我一瓶水。我晕,我都快下了,你还发。出了天津站,才发现天津站再也不是那个破站了,现在是旧容换新颜。不过出站时我稍微犹豫了一下,不然就走错了。后来发现好多人都走错了,这都是标志不清惹的祸。进了候车厅,才发现北京到天津的城际列车那就是公交车。每个10-20分钟一班。差不多半个小时就可以到达。这在上海绝对想不到的。那个方便,真是羡慕呀。我看了一下,每天有100班左右吧。中国的铁路发展之快,让你想不到。在回上海时,一上车就开始睡觉。爽!

Powered by WordPress