Archive for October, 2005

发现了 UltraEdit 的一个 Bug

2005-10-30 22:24 | by 2ndboy

  一直以来都非常喜欢 UltraEdit 这个 Windows 下的编辑器,普通文本编辑、写代码、十六进制编辑样样都能胜任,而且功能强大,实为居家旅行、杀人灭口的必备良药:-)

  最近抽空在 Windows 环境学习 Ruby 的时候也用 UltraEdit 作代码编辑器(我不喜欢 Ruby Windows 二进制分发包里面自带的那个 SciTE,在 Windows 下我绝对不会选它,在 *nux 下我当然实用 (G)Vim 了),照我的习惯,像这种 command line 程序我都是在 UE 里面创建一个自定义菜单工具来使用的,这样不用切换到其它程序就可以运行程序得到结果了。点击“工具”->“工具栏配置”,配置好了就可以按热键“Ctrl+Shift+数字”来执行自定义命令了,执行完得出的结果可以被捕获并显示在编辑窗口下方的输出窗口,而问题就出在这里。

  因为是初学,我对 Ruby 的语法掌握还不太自信,所以就在 UE 里创建了一个 Ruby 语法检查的自定义工具,命令行是“ruby -c %f”,谁知运行的结果是:如果程序没有语法错误会得到“Syntax OK”的结果,但是有语法错误时什么信息都得不到,可是在 cmd.exe 下面执行时如果有语法错误的话是会返回错误信息的,看来 UE 在这个地方有 Bug!

  由于以前自己写过 Web Server,当时实现 Windows 平台下的 CGI 程序支持时有过类似的经验,所以我猜想是 UE 在执行用户自定义工具程序时有问题。大家大概都或多或少的接触过命令行程序的 GUI 前端吧?!比如 Lame、MPlayer 这些程序的 GUI 前端,这些前端程序不仅能知道它们调用的后台程序的运行结果是否正确,甚至还可以捕获到程序的文本输出。这是怎么做到的呢?其实很简单,在调用 CreateProcess() 这个 API 创建进程的时候可以传入一个 STARTUPINFO 结构体指针,这个结构体中包含了三个句柄,分别对应于新建进程的 stdin、stdout 和 stderr。我们可以创建三个 pipe 通过这三个参数传给子进程,然后通过 read 相应的 pipe 就可以捕获到子进程的输出了。是不是 Ruby 通过 stdout 来输出“Syntax OK”,而通过 stderr 来输出语法错误信息,而 UE 偏偏又没有处理 stderr 导致没有捕获到程序输出呢?

  光猜没用,可以试试,创建个控制台工程,写个非常简单的小程序如下:

  1. #include "stdio.h"
  2.  int main( void )
  3.  {
  4.    fprintf( stdout, "stdout\n" );
  5.    fprintf( stderr, "stderr\n" );
  6.    return( 0 );
  7.  }

  直接运行的话会显示出“stdout”和“stderr”这两个字符串,在 UE 里新建一个自定义工具来运行这个测试程序,在输出窗口中只能得到“stdout”,看来我的猜测是对的,是 UE 没有处理子进程的 stderr 导致了这个问题。为了让我喜欢的 UltraEdit 变得更好,抽时间给 UE 的开发人员写个 mail 吧,但愿他们能早日修复这个问题!

临安大明山游记

2005-10-30 00:03 | by 2ndboy

  按照公司的惯例,今天是每年中集体组织的第二次旅游的日子,我在几个备选景点中选择了去临安大明山。定好了是早上 7 点钟集合出发,但是由于今年换工作时搬到了开发区住,所以我早上五点半就要爬起来去赶公交车,在寒冷漆黑的早上起床真是件无比痛苦的事情!可最终的结果是七点半的时候我们这路人马才启程出发,于是有点后悔中途下车打的和没有吃热早点:-)看来下次出去的时候要把通知时间加 30 分钟来订起床时间了。

  杭州到大明山居然要三个小时!在封闭的空调大巴里颠簸、昏睡、瞎聊了两个多小时后,我旁边的同事终于不堪忍受吐了起来,不由得也勾起了我呕吐的欲望:-)还好,最终被我用深呼吸镇住:-D

  进景区后要再坐 15 分钟的景区小巴来到登山的起点,这里不得不提的就是这个景区小巴,其实也可以说是今天最刺激的项目!上山的盘山路应该叫九屈十八弯路更合适些,但弯道数量上远远超过 28 个!且很窄!只能勉强让两辆景区小巴错车。其中有数个弯道都是 180 度的,且一路上都有坡度,好的,路况就介绍到这里,但看到这里似乎也没有感觉怎么刺激呀?!那么好吧,现在来说说车速,每个开这种小巴车的司机都在用直道的速度猛踩油门,只见两只手在方向盘上上下翻飞,油门刹车不停转换,掀起车内一阵阵的惊呼高潮,而司机总能在车快冲出路面或两车快要相撞的时候轻打方向盘化险为夷,另我们目瞪口呆、叹为观止!以至于绝大多数同事下车后都不会走直线了,我也在暗自思量——这些师父都是从 F1 战线上退下来的好手吧?!如果大家有机会去大明山的话,这个车是一定要坐的,跟过山车绝对有的一拼,所以后来我推测这一定也是景区的特色项目之一吧?!^_^

  由于昨天刚下过雨,一路上所见到的山间瀑布都格外好看,但更好看的是大明山的枫叶,这个时节的树叶尚未全落,也尚未全部红,绿的、橙的、黄的、红的枫叶层层交叠在一起布满山间,那美景真是谋杀了无数的胶卷、电池和记忆卡!也让我们叹服,大自然的杰作永远都比人为设计的构图美的多,也自然的多!

  好久都没有锻炼身体了,爬着爬着就开始出汗,后来又被山风一吹,冷的要命,还好随着路线的变化风渐渐小了起来。山上有很多吊桥,尤数最高处的一座最为壮观也最长,可以将千亩田草甸尽收眼底。说来也怪,大明山山势并不低,我们爬上去都比较累了,谁知在山最高点的山谷中有一片非常开阔的平原,让人看了有一种突然来到了山脚的感觉。所以就有种说法,说这里是古时朱元璋(好像是这么说的)练兵的地方。附近还有大明湖,但大家都是又饿又累就没有过去,是个小小的遗憾,一次来这里一定要多吃些早点,爬山确实比较耗体力。

  下山时要穿过一个叫“万米洞”的山洞,具导游 mm 讲,这个山洞是一九五几年开采钨矿时留下的,怪不得洞两边的石壁上都可以看到嵌在岩石中闪闪发亮的微小金属碎屑,我带回来的石头上也是如此(我的习惯是游览一个地方的时候总会带一两块石头回来作纪念)。山洞中有很多支路,都是在坚硬的岩石中开凿,总长加起来居然长达一万多米!主洞的上方一直挖到了山顶,于是就形成了人工的“一线天”,头顶的石缝中还到处可见当时留下的四方木柱。置身于幽深的石缝底端抬头仰望,不得不佩服前人的艰辛和力量!不去现场真的很难体会到那种深刻的感觉!

  下山时我的腿已经由于能量不足而抖了起来,上山容易下山难,古话似乎句句真理!下午两点我们才来到山下吃饭,“午饭”的场面绝对是风卷残云,连最腼腆的 mm 也在大快朵叽,看来想减肥的话——爬山不是最佳方案:-)午饭后下山,照例又是“过山车”,虽然已经有了上山时的乘坐经验,但心动的感觉却来了一把又一把,刺激!

  走之前有一段自由活动时间,大家都选择买临安特产——小核桃,山下卖的比较多的还有一种很像橙子的水果,据说叫香芸,我两样都买了一些,可以回去讨好 GF:-)下午三点半踏上了归程,回程时没有听到有人聊天,还好,也没有鼾声。再一睁眼时已经四点半了,车上正在放着大家都看了好多遍的赵本山小品集,不过看上去大家心情都不错,我也跟着笑了个够。回到杭州市区时已经七点了,来时晕车的同事马上选择宁可步行回家,我不由得庆幸自己生下来的时候就不晕车,感谢老妈!

老歌 & 怀旧

2005-10-28 00:05 | by 2ndboy

  今晚为了庆祝项目的顺利完成,整个 team 都到钱柜去吃饭唱歌,晚上将近十点才回到家。反正也干不成什么事情了,索性把老歌都翻出来听听,不经意间就看到了《夜》这首歌。当旋律响起在空荡荡的房间里时突然就想起了大学的情景。

  这首歌是《鹿鼎记II》这个 RPG 游戏的大结局主题曲,想当初为了通关,好几个晚上其它兄弟们都睡了的时候我还在游戏里操控着自己扮演的韦小宝闯沙俄,打海战,找阿柯……直到有一天我发现这个游戏的最后一张光盘其实就是一张 CD 的时候,我听到了《夜》这首歌。第一次听的时候已经半夜了,上铺兄弟的 PCWorks 音箱(据说是当时数一数二的多媒体有源音箱)被我借来听音乐,歌声响起,已经钻进被窝的兄弟们就都把脑袋伸出来了:-)真的,在寂静无声的夜里听顾盼盼的这首歌确实是一个享受!

风吹进了我的夜
有点凉 有些醉
谁占据了我的夜
这感觉 陌生却又完美
心 想着谁
思绪纷飞 又为谁
往事又历历浮现
再一次令我心碎

你 像风吹
我 随风而飞
彷佛是穿越了另一个世界
摆脱了所有的不安和虚伪
看见你最真切的狂野
我知道一切是非再无所谓

一样的夜却是孤独的世界
风依然吹而我却觉得伤悲
多希望当黎明划破黑夜
只有笑 没有泪
一起看花开花谢
永永远远不後悔

  如今那张 CD 早已不知所踪,网上也没办法找到高品质的原声,我现在正在听的应该是某个网友的翻唱,当时那种感觉可以说再也找不回来了,心里真是有些说不出来的遗憾。不知为什么现在已经完全听不到顾盼盼这个名字了,是早早嫁人退出歌坛了还是后劲不足,都不得而知,看来这个遗憾是无法弥补了:-(

  以前曾经有过许多这样的经历,走在大街上,听到不知哪里传来的歌声,旋律非常好听,但没办法知道歌的名字。数月之后,有时是数年(我确实有过这样的经历),很偶然的拿到了这首歌,也知道了名字,心里就会有说不出的感觉,可能比较类似他乡遇故知的味道:-)比如 Dido 的《Thank you》,《Serendipity》里面的《Moonlight Kiss》和《When You Know》,都是在听过片断很久后的某个日子才拿到原声的。

  今天在这儿说老歌,其实是在怀旧^_^大学刚开始的时候总会想起过分充实的高中,刚工作的时候常会想起每天自然醒的大学,说实话,刚工作那会儿都有过想把自己的大学生活写成一本纪实小说的冲动!当然,这本小说至今还不存在,偶尔拿在手上翻看的还是那时候留下的稀稀拉拉一些旧照片。如今照片里的人有的结婚,有的已为人父母,不知再过两年,等毕业五年的时候大家又会是什么样子。

  最后放上一张高中毕业时拍的照片,看看那时的我们,感慨……

Linux 笔记备忘一则

2005-10-27 16:14 | by 2ndboy

  这个东东以前就问过 xw 一次了,没想到今天遇到的时候还是忘了,看来真的是好记性不如烂键盘啊,写个笔记吧!

  在 Linux 里面装好一个库以后有时候并不能被链到,这时候要编辑 /etc/ld.so.conf,在里面加一行,写上库所在的路径,然后再执行 ldconfig 就 OK 了。

对 Tag 的重新思考

2005-10-25 20:37 | by 2ndboy

  刚才查了一下,发现打从 2004-08-24 第一次在 del.icio.us 里加书签起,我已经用了一年多的美味书签了。但是在若干个月以前我真正认识到了 Tag 本质上就是 KeyWord 之后我才发现——我把 Tag 用错了!其实与其说用错了还不如说是为了方便查找,我每个书签只贴一个 Tag。可是截至今天(2005-10-25)为止我的帐户里已经保存了 543 个书签了,全部手工修改一遍简直不是人干的事儿,算了吧,既然从开始就错了,那就一错到底吧:-)但这也促使我对 Tag 重新进行了思考。

  放眼看看现在打着 Web 2.0 烙印新鲜出炉的 B/S 应用,有几个不是只提供 Tag 对数据进行分类的,但是这样真的是为用户考虑了吗?还是为了跟“老土”的 Web 1.0 划清界限而设定的游戏规则?!其实我相信大多数用户还是习惯于使用树形分类的,尤其是像我这样兴趣广泛的人,一不留神大概用过的 Tag 就会上百上千,其中很多还只用过一次,试问在使用过一段时间之后再在“浩如烟海”的 Tag 中查找自己需要的信息,更何况目前的 Tag 组织起来都是一维的,平均浪费的时间会有多长,就更不用说什么用户体验了。

  在我看来让 Tag 回归它的本质未尝不是件好事,在应用里提供树形分类,然后用户可以在每个提交的数据上打 Tag,这样不就同时提供了两种分类(索引)方式了吗?!再进一步,其实依据 Tag 的联系,是不是可以用程序将 Tag 组织成树形或图的方式呈现出来呢?最好再按 43things 的方式,使用频率越高的 Tag 字号越大,颜色越深,那用起来该有多方便多直观啊。

  有哪家服务商会这么做吗?我相信总会有的,说不定还很快!