2008年6月的存档

一个时代的终结

2008年06月24日 星期二

Bill Gates 退了,作为计算机软件时代的代表人物 (之一?第一吧),这也算是软件时代终结的标识吧。

国内怕是没多少人见识过Window 2.0吧?大学里上铺的父亲的同事从国外带来一套,我们在清华CAI实验室里装上了,感觉了它的神奇。当时最深刻的印象是两个应用程序之间可以通过剪贴板来传递数据。当时的DOS除了一些驻留程序能做类似的事情,基本还都是单任务执行的方式。

然后,Window 3.0又来了,第一时间从希望书店买了Windows编程的书,玩得不亦乐呼。不久,大学毕业设计的任务就是把实验室的THOCR程序移植到Windows下,实现了THOCR的第一个windows版本。印象最深刻的是我为扫描仪的操作包装了一个Scanner.dll,结果总是出错,最后发现,那个扫描仪自己的驱动程序也叫scanner.dll,我的dll根本没载进去,一调用我的函数,不错才怪呢。

转眼十六、七年过去了,一直在这里面混饭吃。中间虽然也是第一拨沾上网络的,但没有抓住互联网的机会。互联网时代扑面而来,而我却猝不及防。

Gates走了,是否也感到自己对于互联网时代的力不从心呢?而我呢,是否再搏一搏呢?毕竟我还比Gates小那么多岁。虽然,十六、七年前,也是这么说的,但现在,已经不是当初的意味了。

挂个Windows历史的视频吧,以示敬意。

愿Gates在慈善的路上也能走好。游走于生活的两级,这样的人生,真好!

MSN上的好友列表

2008年06月21日 星期六

一些基本概念,摘自http://www.hypothetic.org/docs/msn/notification/get_details.php

Forward List (FL)

The forward list, abbreviated as FL, is the list of principals whose presence you are subscribed to. You can expect to be notified about their on-line state, phone numbers, etc. This is what a layman would call their “contact list”.

This list currently (as of March 23, 2003), has a limit of 150 people, doubled from a previous 75. If you try to add a 151st person, you will receive error 210 and they will not be added.

Everyone in your forward list belongs to one or more groups, identified by their group number. By default, they belong to group 0.

Reverse List (RL)

The reverse list, abbreviated as RL, is the list of principals that have you on their forward list. You cannot make modifications to it. If you attempt to add or remove people from this list, you will be immediately disconnected from the NS with no error message.

Allow List (AL)

The allow list, abbreviated as AL, is the list of principals that you allow to see your online presence - as opposed to your reverse list, which is the list of people who request to see your online presence. If someone removes you from his or her contact list, he or she is automatically removed from your RL but not your AL. He or she no longer receives online presence from you, but if he or she adds you again, your client can act in the knowledge that you previously allowed him or her to see your presence.

Block List (BL)

The block list, abbreviated as BL, is the list of people that are blocked from seeing your online presence. They will never receive your status, and when they try to invite you to a switchboard session, they will be notified that you are offline. No-one can be on the AL and the BL at the same time, and if you try to add someone to both lists, you will receive error 219.

用Miranda, MSN, 还有自己的程序做了些实验,基本上搞清楚了:

  • 假设一开始都是新的帐号
  • jimax 加了 xiao, xiao收到“被加为好友”信息,选择确认,现在xiao里面是 FL, AL, RL; jimax 里面是FL, AL, RL, 双方都能看到对方信息
  • 下面 xiao 删除 jimax (MSN里面, 但不阻止), 此时xiao里面是 AL, RL (只是从FL里删除), jimax里面是FL, AL (只是RL中删除) jimax 仍然能看到 xiao 的在线信息
  • 下面 xiao 阻止 jimax,此时xiao里面是 BL, RL, jimax里面是FL, AL, jimax看不到xiao的在线信息了
  • 现在 jimax 删除 xiao (用自己程序), jimax里面彻底没有(从FL, AL里面都删除了), xiao里面是 BL
  • 现在 xiao 加了 jimax, jimax 里面 FL, AL,RL. jimax 看不到xiao的信息,因为xiao里面是 FL, BL, RL
  • jimax删除xiao(自己程序) RL, BL (而不是全部删除), xiao里应该是FL, BL
    (这里是有些不同的地方:删除的时候,如果FL, AL ==> 0; 如果FL, AL, RL ==> RL, BL)

  • 此时xiao删除jimax, jimax里面是BL, xiao里面是BL
  • 此时xiao加jimax,jimax得不到“被加为好友”,jimax BL, RL, xiao里面是FL, BL
  • 此时jimax加xiao, 变为 FL, AL, RL, xiao里面是FL, BL,RL , jimax得不到xiao信息,xiao能得到jimax消息
  • xiao 解除阻止,jimax不变 FL, AL, RL, xiao为FL, AL, RL, 则两边都可以得到消息了

    原来主要的问题是,MSN里面删除帐号的时候,并不从AL里面删除,这就导致了再次加好友的时候,好友帐号不会再次得到“被加为好友”信息

  • 又是十年

    2008年06月14日 星期六

    下午看了《每当变幻时(Hooked on You)》, 没来由的感动了半天。特别是杨千嬅最后的一笑,是卸去重负吗?是明白一切都是过程的顿悟吗?

    也许这片子的原名《阿妙的十年》,陈奕迅也正好唱过一首《十年》,想想自己的生活也又是十年。

    十年前在水木清华写下《昨日情怀》,纪念那入学后的十年,那时候是否也是一种卸去重负,期待未来的微笑呢?后来被大学同学看到,猜到那是我写的,今年年初聚会时提到了,说,又是十年了,是不是再写点什么啊。是啊,又是十年了。我也想再回忆回忆,反省一下这十年,但大概是没有这样的时间和激情了。

    就用陈奕迅的《十年》表达一下思绪吧,虽然我的十年并不完全这样:

    如果那两个字没有颤抖
    我不会发现 我难受
    怎么说出口 也不过是分手
    如果对于明天没有要求
    牵牵手就像旅游
    成千上万个门口 总有一个人要先走
    怀抱既然不能逗留
    何不在离开的时候
    一边享受 一边泪流
    十年之前
    我不认识你 你不属于我
    我们还是一样 陪在一个陌生人左右
    走过渐渐熟悉的街头
    十年之后
    我们是朋友 还可以问候
    只是那种温柔 再也找不到拥抱的理由
    情人最后难免沦为朋友

    直到和你做了多年朋友
    才明白我的眼泪
    不是为你而流 也为别人而流

    ========================================

    还有,阿妙的十年 —- MISS

    VC 2005中的locale

    2008年06月09日 星期一

    连续碰到两次和locale相关的问题,一次是ifstream, 一次是boost::format, 做了些实验记录下来:

    1. ifstream 的文件名参数其实可以接受char *, 也可以接受wchar_t * 作为参数,如果接受char * 的话,实际上内部也是转换成为wchar_t *,但转换的时候问题就来了,如果此文件名里面有汉字,vc2005就转换不对,这样就打不开文件了。在vc2005中,一开始程序的缺省locale是”C”, 也就是std::locale::classic()返回的,但这个locale下,汉字转换是不正确的,所以,要先用 std::locale::global(std::locale(”"))这样的语句将locale设到系统缺省的。实际上std::locale::global(std::locale(”.936″)) 也是一样的。936就是简体中文的codepage(代码页)。 此时用 locale.name() 打印出来的locale名称为: “Chinese_People’s Republic of China.936″

    2. 但是一旦locale变为936了,cout 输出中文就又会有问题,碰到中文就会断掉,而且后面的东西再也显示不出来。这可以通过在ifstream打开文件之后,用std::locale::global(std::locale(”C”))再设回缺省locale来解决。

    3. locale设为936的另一个问题是,boost::format 中 如果输出数字的话,1234会变成1, 234. 这个问题也可以用上面的方法来解决。另外一个方法是可以用format的第二个参数来做,例如std::locale::classic() 或者std::locale(”C”);

    4. 网上说流输出时候也会将1234变为 1,234,但我直接实验cout << 1234 好像没有问题。看到说碰到这种情况,需要用a.imbue(std::locale(”C”))。

    5. 如果ifstream直接用wchar_t *的文件名参数,就很简单了,由于不更改locale就可以打开文件,后面的cout输出汉字也没有问题,boost::format也没有问题。所以竭力推荐这种方法 :)