博客

七年之痒


MSN 上挂着 "The Seven Year Itch" 的名字很长时间了。不知不觉,和亿邮这个团队一起走完了 7 年的旅程。虽然在这里获得了很高的成就,但近半年来感觉工作已经无法给我带来任何乐趣,可能确实是"日久生痒"了,hoho

因为前几个月正值占座融资的关键时期,所以一直没有利用 blog 这个渠道去找新工作,甚至就是有了意向也不能去公开谈,呵呵,这算是我为亿邮做的最后的事情吧。

随着公司内陆续开始有人知道这个消息,我也可以公开在这里宣布,现在是离开的时候了。新的去向基本已经定下来,还是互联网企业。当然,要是你能提供给我更好的职位选择,我乐意去认真考虑。另外,至少有两个业内人士建议我创业... 如果你愿意投资我(不管是人力还是金钱),欢迎和我联系。

我的个人简历可以在这里看到。

BTW:已经把我以前 team 上值得保留的文章搬到了 http://www.dup2.org/qyb/eyouteam

Topic: 生活

解压缩 Install Shield 打包的 .cab 文件

Install Shield 会把原始文件打包成 data1.cab, data2.cab 这样的文件名.. 恶心的是这东西虽然后缀叫 .cab,但不是微软的 cab 格式,用 7-Zip 等是无法解压的。

开源项目SynCE 推出了一个 UNIX 下的工具 unshield 来解压这种格式。在 Win32 平台上,目前似乎只有一个命令行工具 i6comp 来解压。

Topic: 技术

恢复 Ubuntu 6.06 的 grub 菜单

重装 Windows 后,grub 引导菜单会被覆盖掉。对于别的操作系统都好说,但 Ubuntu 6.06 的安装 CD 是没有 rescue 选项的,这个就让事情变得稍微有点恶心。

在我上周的分区表灾难恢复后,我就开始头疼怎么来恢复我的 grub。最后方法如下:

1. 从 Ubuntu CD 引导
2. 手工 Mount 原来的 / 分区
3. 执行 chroot,到那个目录
4. 执行 /sbin/grub-install /dev/hda
... 什么"无此设备". 这是因为 /dev 目录下的设备现在都是在启动过程中内核去自动加载
5. 打开另外一个窗口,ls -l /dev/hda 看看这个块设备的 major/minor 是多少,然后在 chroot 环境里用 mknod 去手工创建块设备
6. 最后 /sbin/grub-install /dev/hda 执行成功了!
7. 删除刚刚创建的设备文件,退出 chroot 环境,重启系统,一切都恢复了,阿门

Topic: 技术

介绍一个 GPL 的分区表修复工具 TestDisk

其实大约一年前,我就用过一次 TestDisk,当时是恢复了 FreeBSD 上的分区,感觉很牛,不过由于 Win32 下类似的软件相当多,所以这次我的分区出问题,一开始并没有考虑用它来做恢复。

事情的起因是这样的:
Thinkpad 上随机会附带一个隐藏分区,用来做系统恢复用。前不久我在安装 ubuntu 的时候,用自带的 gparted 分区工具把它喀嚓掉了,分成两个 primary 分区,一个 ext3,一个 swap,来安装我的 ubuntu。顺便把原来那个 30 多G 的 C 盘划了一个 extended 分区出来,然后在上面创建了 1个 FAT32 和 2 个 NTFS 分区。
上周一我决定重新安装 XP,但 grub 似乎无法认出新安装 XP 的引导记录,一怒之下用 FreeDOS 启动,"fdisk /mbr" 重写了主引导记录。麻烦来了,安装完 XP 后,我发现3个逻辑分区里丢了两个。
于是开始找分区表修复工具,"Partition Table Doctor"到是很容易的发现了我丢失的两个分区,于是执行 recover —— 那两个分区没有被恢复,反而硬盘最后的两个 linux 分区也没有了!!!

我几乎都要崩溃了,开始去搜索 Linux 分区的恢复工具,就这样又找到了 TestDisk。它不像 Win32 下常见恢复工具那样带有漂亮的图形界面以及向导模式,只是提供一个 DOS-提示符窗口,显示对磁道扫描的情况,以及所有可能的分区布局。扫描完成后选择那些正确的布局方案就好了。最终我找回了所有的分区。

鉴于 TestDisk 已经成功两次挽救回我的分区,所以我这里强烈推荐这个软件,作为分区表恢复的第一选择。

使用提示:缺省扫描中,TestDisk 可能并不是扫描所有的扇区,未必能找全潜在的正确分区布局,在完成普通扫描结果后,屏幕底部会有一个"[Search! ]"的选项,执行它就是扫描所有扇区。我的分区表就是这么恢复的。

事后我试图找出灾难的原因,以及为什么普通的恢复工具反而导致更大的灾难。感觉可能是 Windows 和 Ubuntu(或许包括 FreeDOS) 对硬盘磁道参数识别不一致导致的。Windows 认为硬盘是 240 Heads,但 Ubuntu 说只有 16 Heads。最后我是在 Ubuntu 下执行的 TestDisk 搞定的。

Topic: 技术

Win32 下的蓝牙——开发事项、外设购买

作为项目 MobileSync 的一部分,我计划增加对蓝牙通信的支持。结果经过一段时间的尝试,我发现 Win32 平台上针对蓝牙开发简直太让人郁闷了。

红外的支持看 MSDN 的文档下很容易就完成了,所以我也首先去参考 MSDN 上蓝牙相关的部分,结果在创建一个 BTH 的套接字的时候返回了 10047 错误——"Address family not supported by protocol family"。接下来从网上搜索得知这是因为我的机器上还没有安装本机协议栈(native bluetooth stack)的缘故。太奇怪了,我明明已经安装了驱动并可以传送文件啊,为什么说我不支持蓝牙?

再进一步查找,这才知道在 Windows XP SP1 之前,微软是不支持蓝牙的。直到 SP2,native stack 也仅仅支持少数的几种设备。可以想象蓝牙刚刚问世的时候,微软的反应是:“谁知道这项技术会不会最终成功,俺先等等看吧”。于是后来 IVTWidcomm先后开发了自己的协议栈和管理应用程序,来配合蓝牙外设在 Win32 平台上的使用。而我的蓝牙适配器的问题就是,它可以在 IVT 下工作,但 SP2 不支持(ISSC 芯片)。

对于蓝牙软件开发商来说,问题就很棘手。市场上有三种协议栈,最好是全都支持以适应最大可能的应用范围。我现在才明白为什么我的 Nokia 3650 的 PC 同步程序无法用蓝牙通信,这是因为它用的 mRouter 协议层只支持 Widcomm 和 Native,不支持设备附带的 IVT 驱动。

后来还找到 Jon Cellini 的一篇文章,描述如何让并没有被 MS 官方支持的设备在 native 协议栈下工作的。虽然有人报告他的 ISSC 设备可以如法炮制,但我的适配器却不能这样去工作。

为了能继续我的开发工作,我只好重新买了一个 CSR 芯片的适配器。很便宜,不过 50 元(加上快递费),芯片版本还是 BlueCore4-ROM,似乎能支持蓝牙 2.0。它很顺利就在 XP 下自动检测出来了,同时"Control Panel"里面多了一个"Bluetooth Devices"的控件。然后我就发现微软缺省的管理程序比 IVT 差太多了,很明显 Microsoft Native Stack 将是未来开发的主流,但要想得到用户的广泛应用,还差一套完善的设备管理程序。不知道未来是 Vista 去改进,还是独立的第三方厂商做开发。

故事讲完了,如果你计划购买蓝牙适配器,我建议还是选择一个 SP2 官方支持的,比如 CSR 就挺好。市场上的主流好像是 ISSC,它的确更便宜一些,但我不敢保证 SP3 或者 Vista 就一定会支持..

最后要说的是,从这个事例里面看到,微软对外设的支持也就那么回事情,Linux 的 BlueZ 栈好像在 2.4.x 时代就确定了主流地位,是不是未来对新型硬件的支持以后 Linux 的优势会越来越明显?

Topic: 技术

怎样结束一封英文信件?

你是不是厌烦了千篇一律的 "Regards"? 今天从 BBC Learning English 上看到如下技巧:

Best Wishes (OK for someone you don't know and in a fairly formal situation)
Kind Regards ( OK for someone you don't know and in a fairly informal situation)
Fondest regards (OK for someone you know but not intimately)

下面是泡外国 MM 或 GG 的时候用的

With love*
Thinking of you*
Lots of love*
Love and kisses*

* These are a bit intimate 

另,学习到一个好玩的单词:smog,smoke + fog,知道它确切的意思了吧。走召弓虽

Topic: 生活

用免费的 Microsoft Visual C++ Toolkit 2003 编译 Python 2.4 模块

本来这个方法是从别人的 blog 那里看到的,我只是加了我的书签。但今天想查的时候发现这个 blog 访问不了,Tor 今天好像也用不了,寻觅半天,从 MSN Search Cache 里面找到了。贴在这里转载一下。

在这个方法之前,有人说需要 hack distutils 才能使用 Microsoft Visual C++ Toolkit 2003;但现在这个天才发现修改一下注册表就 OK 了,牛!

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\VC]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\VC\VC_OBJECTS_PLATFORM_INFO]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\VC\VC_OBJECTS_PLATFORM_INFO\Win32]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directories]
"Path Dirs"="C:\\Program Files\\Microsoft Visual C++ Toolkit 2003\\bin;
C:\\Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\bin"

"Library Dirs"="C:\\Program Files\\Microsoft Visual C++ Toolkit 2003\\lib;
C:\\Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Lib;
C:\\Program Files\\Microsoft Visual Studio .NET 2003\\Vc7\\lib"

"Include Dirs"="C:\\Program Files\\Microsoft Visual C++ Toolkit 2003\\include;
C:\\Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Include"

Python 2.5 也应该是用 VC 7.1 编译

Topic: 技术

南开大学北村一居室出租

代我岳父母发一条广告

学校里面的居住生活条件那是没得说了..

40平米,板楼的阳面,6楼顶层,有空调热水器,煤气暖气,还有学校宽带哦。

报价900/月,根据对方人品可以议价。

有意者给我发信

Topic: 生活

Authentication War

昨天读到了一条消息,Yahoo 刚刚发布了基于 Web 认证 Yahoo! ID 的服务——BBAuth。现在加上微软的 LiveID,Google 的 Account,三个世界上最大的 Web 服务提供商,或者也可以说三个全球知名度最高的免费邮件提供商,现在开始了一场"Web认证之战"。

当我 2005 年开始设计 eyou.com 的 passport 机制的时候,当时就考虑到可以开放我们的服务,鼓励第三方开发人员来基于 eyou.com 的 passport 创建应用。甚至还提出了把这个 passport 网络扩展到我们部署在 CERNET 内所有的邮件服务器上。不过现在 eyou 已经专注在"占座"上,我也没有机会去实现这个疯狂的念头

拥有用户的认证信息对于有责任心的厂商而言是一个很不轻松的负担——你必须承担起安全存储它们的任务。提供 HTTPS 连接,雇佣可靠的员工来维护数据库,防御黑客的攻击...。另一方面,吸引用户来你的网站注册又是如此困难,甚至认证邮箱现在从技术上因为 SPAM 防御的因素也越来越困难。因此对于创业网站来说,LiveID,Google Account,BBAuth 这种服务就很有吸引力,你无需再关心怎样吸引用户在你这里注册,而专注在自己的核心竞争力上。

当然事情远远不是我上面所宣称的那般美妙。在 BBAuth 之前,我就已经尝试利用 LiveID 或 Google Account 的 API 来写个测试程序,结果发现目前为止还是困难重重。微软 LiveID Web 版本的 API 要到 2007 年才发布(Client 版本则看起来今年能发布,从这件小事可以看出微软在 Web 服务竞争中的尴尬局面),而且迄今还没有一个明确的关于此服务是否收费的政策。要知道如果加入 Passport (LiveID 的前一个版本)的话,每年的年费至少上万美元;虽然在 Google/Yahoo! 的竞争压力下它应该会包括免费的服务,但如果现在就计划把服务依赖于 LiveID 则必须承担风险。Google Account API 倒是非常简单,我很容易找到了一个 PHP 的例子然后修改了一下就通过了测试,但现在可用的服务仅限于 Google Calendar!就是说如果一个 Google Account 没有注册 Google Calendar 服务,那么我的应用可以确认一个人通过了 Google 的口令认证,但我无法获得这个人的邮件地址!

Google Account 服务包括两个步骤(Yahoo BBAuth 同样如此,估计 LiveID 也差不多):认证和授权。校验邮件地址/口令是否匹配属于认证过程,第三方是否可以获得用户的服务信息,比如邮件地址则属于授权过程。对于用户体验来说就是这样:用户在第三方网站上点击登录,重定向到认证服务的地址,通常是一个 https 连接;用户输入邮件地址和口令,校验正确后进入授权页面,提示用户这个第三方网站将获得用户的某些信息;用户确认后返回到第三方网站同时带有一个 token;第三方网站根据这个 token 来确认用户的确已经通过口令校验,并获得用户的相关信息。

就网上讨论的情况来看,Google 目前仅有 Calendar 一种授权服务,还没有人反映 gmail 已经可以被授权。最让人失望的是,google group 上来自 google 的支持非常少,同样 MSDN 上 LiveID 相关的讨论组里面,也罕有微软的人发言,都是开发人员自己在猜测。

所以欢迎加入 Authentication War, Yahoo!。希望能刺激一下微软和 Google,让竞争来得更猛烈些吧。

Topic: 商业

日本的家族政治

安倍晋三当了日本新首相。昨晚吃饭时顺便看的小饭馆里提供的京华时报上有他的背景介绍:

安倍晋三出生在日本西部山口县一个显赫家族。他外祖父原姓佐藤,后来过继到岸家,改名岸信介,岸信介的亲弟弟叫佐藤荣作,安倍晋三的父亲叫安倍晋太郎。

岸信介与佐藤荣作都当过日本首相,安倍晋太郎也是内定的首相继承人,因为病逝所以没有当成首相。安倍晋太郎可以说是小泉纯一郎的政治“恩人”,1988年,安倍晋太郎举荐小泉在竹下登内阁出任厚生大臣,得以在政界崭露头角。小泉当选后“知恩图报”,2002年任命安倍晋三为内阁官房副长官。

安倍晋三的外祖父岸信介干过什么呢?

岸信介1936年赴日军统治下的“伪满洲国”,充任“产业部次长”和“总务厅次长”,是伪满当局的实权人物之一。1942年10月,岸信介出任东条英机内阁商工大臣。1945年日本投降后,岸信介被定为甲级战犯,关进监狱,但后来被美军当局无罪释放。上世纪50年代,岸信介成为战后保守势力整合的领军人物之一,1957年2月至1960年6月两次出任首相。

安倍晋三多次承认,自己受外祖父影响最大。

引用了京华时报许多文字,详细请看安倍晋三组建日本新内阁
另有一篇新华网日本“国粹主义”之乡走出第八位首相

更新:安倍晋三宣布辞职,安倍今年8月15没有参拜靖国神社,中日关系近来似乎也有起色,不知他的继任怎么样——070912

Topic: 社会
订阅 RSS - 博客 | BT的花