All Stories
今天突然又觉得自己的墙纸已经用了好久了,一直一成不变挺单调的,自己收藏的那么多pp的图片深居冷宫那么久,真是浪费了。想起自己一年前(还真的是一年前,去年十一的时候还在整呢)还用C++Builder来写一个呢,结果当时遇到一些问题,比如定时器没正常工作,晕,然后就丢下了。 上网搜索了一下,没发现什么好用的,总是有这样那样的问题。而且今天突然发现,好多好多软件的界面在我的机器上显示有问题,总的说来就是界面上的汉字显示不出来,全是问号,晕倒!另外就是,其实我希望的是,像ADC这样的东东加上一个定时自动更换墙纸的功能,可惜我找了几款日历软件,都没有这个功能,遗憾啊! 大概没有几个人觉得自动更换墙纸有多有用吧,所以随便下了几个更换墙纸的软件,也都做得很差劲。 没办法了,只好自己动手,丰衣足食了。用MFC写一个吧,以后有精力的时候,再考虑加上日历,反其道行之,呵呵!
不经意间来到Tencent的网站看了看,发现现在它真的是战线全面铺开了,中国互联网霸主地位非它莫属了! 即时通信工具和游戏不说。看看其它的现在中国网民最常可能用到的工具,邮件客户端、汉字输入法、下载、视频直播、桌面Widget、浏览器、IE工具栏,它全都有。 感觉它是越来越像微软了,靠其中的一两样东西发家,然后看人家做什么火,它就也跟着做什么,虽然是后发制人,但即很可能把人家拖挎。
今天下班后,坐同事的顺路车回家,结果大概是因为周末的缘故,在高速公路上就开始堵车,真是太神奇了,于是有了时间聊天和上网。在网上看到新闻,说中国目前已经有很大一批富有的阶层了,现在亿万富翁有1万多人,千万富翁有30多万人,而百万富翁则占了总人口数的1.5%。这样的数字还是很让我吃惊的,原来中国富人这么多啊,尤其是百万富翁,这么多! 8点半才到小区门口,然后我去对面一个快餐店吃饭,偶然间听到里面的服务生在谈论他们的工资,一个女孩在说她有1200一个月,每月吃什么的花100多,还要买衣服什么的大概300多,差不多每月可以存下800块。听到这些,我心里有些感触,为什么人和人的差别可以这么大。
MoveFileEx似乎要在同一个分区里才能移动当前运行的Exe或Dll文件,于是我只好在本地目录再新建一个子目录。还有个问题,用NULL参数登记系统重启后删除,不知道为什么不起作用,该不会是只有在临时目录下的才能自动删掉。 再抱怨一下asio,吞吐率并不高啊,不知道是不是哪里用得不对,而且太占CPU了,很介意这个事啊,要是到时候同时有几个人从这里请求文件传输,岂不是卡死了,郁闷,这是无论如何都不能接受的。 还有个界面刷新的问题,在回调函数时加入Invailidate(FALSE),就能看到进度条在那里动了,当然还要在下面加一句PumpMessage,不过还有一点点问题,如果界面被遮盖住过,再切回来是没有显示的,只有鼠标再点一下界面,才会恢复显示。 今天又被叫去讨论了一下,真是烦死人了。还要用Excel来画流程图,画完了还要用程序来解析图的前后继承关系,烦啊!
今天接着做升级程序,本来以为大部分的技术问题都已经解决了,实际上,还是很花了不少工夫,有些问题想都想不到。 通过http下载昨天就差不多搞定了,今天发现,用asio来下载,很占CPU啊,全都占满了。以至于,好不容易通过boost::function把进度回调加进去后,界面不能得到及时的刷新。 还有,因为我想看起来更人性化一点,就希望是一个文件一个文件地下载,然后替换更新,也就是如果是exe或dll文件,在运行时,也是需要能不动声色地把它替换掉的。依靠以前的一点点模糊残缺的记忆,MoveFileEx可以达到目的,它可以把运行中的文件移动到其它地方,还可以登记让文件在下次系统启动时被删掉。不过中间遇到一点问题,怎么也移动不了一些文件,后来发现只要该文件长度为0,就不能移动,真是奇怪。不过还好,这个情况在实际应用中几乎不会出现。 现在,几乎所有的技术难点都差不多搞定了,只是要实现好,还是要花些时间,精雕细琢嘛。看来这周能把这个升级程序整完就不错了。
今天上午,经过仔细的检查,终于能在右键菜单上显示并正常工作了。有几个关键点,首先,注册表中的项要正确,其次,类厂的QueryInterface要完整,再次,实现类的QueryInterface要完整。这样就基本上应该能正常工作了,我开始总是弄不出来,一是类厂的实现可能有问题,二是实现类就有问题。另外想抱怨一下,ATL来写IShellExtInit接口映射怎么老是编译都不能过。还好,我不是很排斥用API写东西,今天还被老大说了,说我什么东西都喜欢从头从底层重新搞起,应该充分利用现有的资源。我说主要是我特别讨厌COM这套东西,他问我为什么,我说我觉得COM调试起来特别麻烦。 下午整了一下自动升级程序,因为星期天听帽子说,腾迅提倡XP,没有文档,所有的东西都放在服务器上,发现问题可以随时修改升级,我觉得挺好的,于是我要让我这个小东东也可以随时自动升级。想了几个简单的方案,最后决定用http来发布更新。开始研究了一下MFC的WinINet类,MSDN里说得太简单了,不会用。最后只好改一下asio的那个例子程序,勉强能用了,呵呵,不过还有不少要做的,比如我想要有进度报告。 这样说来,白天还是有些收获的。不过晚上就比较郁闷了,本来情绪就有点低落,就想利用一下晚上的垃圾时间,写一下老大要的那个宣传胶片吧。结果,首先是机器有问题,PowerPoint不能即时保存,然后然后然后,居然突然停电了,好像有两页内容没保存!无奈啊!无聊啊!无助啊!
昨天早上还是很早,大概是7点多就醒了,起来开电脑,无聊,然后熬了一会儿,去洗澡收拾,弄得自以为比较干净整洁的样子。还是比较早,就写了一会儿代码,好不容易熬到10点半,出去坐车,本来以为之前已经千叮万嘱过了要准时,别让我等的。结果到了那里,还是等了20分钟,当时心里还是挺有点生气的,不过见到人后,突然就觉得生不出气来了。而那边阿菲则不停地发短信问我到哪了,我则只好很无奈地说,还没上车呢。本来说好11点准时坐车走的,结果已经是11点一刻了,那公车站又等不到能到南山天虹的公车,只好打了个车。打车就快多了,大概半个小时就到了,不到50块钱。在车上时,她悄悄问我,是不是等了20分钟,我说,如果只是我一个人等是无所谓的,等个一两个小时也没关系,关键是现在那边还有人,我不好意思。 到了天虹,进去略微看了看,感觉跟华强北那个气氛很像,乱糟糟的。约好是在二楼的雨花西餐厅,她又闹着要上洗手间,还以为很急呢,结果是整了下头发,带了个发夹。在餐厅里看了一会儿菜单,阿菲她们来了,帽子还背着个guitar,很酷啊,有时候真的很羡慕这样有一技之长的人啊!6个人随便点了些东西,我点了个羊排,阿菲在那里说我,本来想给我省点钱的,现在自已都不给自己省。于是我大声说,你们要少吃点啊,啊! 一边吃一边帽子马上就问起工作上的事来,说起来还真是比较困难,我又想工作轻松,又想钱不少! 一直吃到1点半,帽子还要去排练,说是马上要去比赛了,于是匆匆地走了。剩下几个人,她说要回去,我也觉得没事无聊,还是回家休息一下,晚上还有一顿呢!阿菲说去K歌,我说不去了,还是回去了,于是就跟她一起走了。跟阿菲她们分开后,她问我晚上几点钟吃饭,我说大概六七点吧,她说还有好久呢,不如她陪我玩到6点再走。我说还是回去吧,她说要陪我逛,我说这样我也逛不安心啊,她说那就逛一个小时再走。走出天虹,对南山这带非常不熟悉,不知道可以逛什么,就又折回天虹。 她说要帮我挑衣服,我的衣服太少了。衣服少倒是事实,不过我确实很不习惯让别人来帮我挑,除了我妈。然后两个人在4楼逛来逛去,试了一些西服、休闲装,衬衫、T恤、针织衫,牛仔裤,发现大多数的只要尺码合适,我穿上还是比较好看的,于是心里很是暗爽。其实也不是暗爽,每次她说挺好看的,我就说不是衣服好看,而是衣服架子好。嘿嘿!这点我自己也很早之前就知道了,我穿衬衫西服的样子真的还不错,如果身高能再高个二三四厘米,就更好了。后来在Benbo里,她趁我在试衣间里时,就叫人开单了一条牛仔裤和一件T恤,晕! 又试了几样,无聊了,她说要帮我去选耳环。走到1楼的珠宝专柜,没有男式的。倒是我想起我妈说要项链,于是我说要看项链,那些服务员可热情了,以为有生意来了,哈哈。让她带了两条试试,没什么感觉,而且我妈那么胖胖的,而她又是瘦瘦的,完全想像不出来带上去是好不好看,只好作罢。她就很遗憾地说,买不到耳环了,只好去些路边的小店了。先去把那单买了,结果刷卡的时候,她用她自己的卡刷了。当时我的心情,都不知道应该怎么形容。说高兴吧,肯定是有的,但除了高兴,还有很多很多其它的感觉,说不出的感觉。不知道为什么她要买衣服给我呢? 从天虹出来,天下起雨来,她拿出伞来,不好再去其它地方逛了,看看时间4点,离吃饭时间尚早。但最后还是决定去坐车回去,等车的时候,她问我她回家了我怎么办,我说我随便哪里玩一下呗。她说到时候我可以去家乐福玩一下,等到晚饭时间。我也不好再说什么,心里虽然有点点沉闷。这时想起xcc他们在哪儿了,就打电话给他,他说在晾衣服,再过半个小时出门,我说我在南山天虹呢,于是他说再等一会儿等他出来。刚好发现公车站后面有家KFC,就进去,一人要了一个饮料,另外她要了一对鸡翅。她还在那里很兴奋地跟我描述,抢到这个四人的座位是多么的不容易,呵呵。我就一边吸着可乐一边看她啃鸡翅,最有趣的是,两个鸡翅她都啃了几下就掉了,让我想起星期六才看的Kanon里那个变身成人类女孩的狐狸在生命渐渐衰弱时,吃饭时拿不稳筷子,一连要掉几次,呵呵。 xcc来了,坐着聊了一会儿天,xcc的gf也来了,然后4个人坐车。车上的人越来越多,下车的时候我踩到一个女孩,我反而只是瞥了一眼就下车了,那女孩就在那里喊,连一声对不起都不说。我才不管呢,当年就是这样人很多很挤的时候下车,才把钱包挤掉了,虽然后来找回来了,但我却从此再也不管别人怎么样了,自己安全才是最重要的。她下车来还笑了我,我就顺便语重心长地教育了一下她。在路口分手后,xcc问我怎么不送她进去,我说要是里面有个男的在等着遇到了,岂不是很尴尬。xcc也只好干笑一下,然后扯起另外一些事。 3个人来到八仟馆,等到doggy来,4个人慢慢吃了一顿,但我还是没什么食欲。不过能跟朋友们一起聚聚,还是很开心的,我是很怕孤独的。吃完后,9点过了,随便爬上一个公车,跑回家,觉得好累好累,怎么都不想动了,下了好大的决心洗了个澡,倒头便睡!
再次说回来公司那个东东的自动完成功能。 本来只有简单的关键字提示功能,因为关键字不多,而且要提示的都只有长度超过3个字符的,所以很简单,把关键字排好序,放在配置文件中,每到3个字符时,show一下那个字符串就行了。后来提出了更多的要求,要能尽量联想一下类名啊、方法名啊、变量名啊等等,于是动用了数据库,把所有的库中的类名、相关的方法名等信息都存放到一个数据库中,必要时从数据库中检索出相应的内容,再组合成一个字符串,show出来。 Ruby语言有点奇怪,不知道是不是大部分现在流行的脚本语言都有类似的情况,因为一直以来我都只接触过C/C++,像Delphi这些语言也是静态编译的,所以几乎都是强类型的。但Ruby不同,它的变量的类型是随时可以变的,不过这个问题对于实现解决自动完成功能时并不是特有的困难,而是所有的语言都可能会有的。要扫描所有的代码,然后确定某个符号是什么类型的。 当前项目中使用的方法,现在想起来,当时做的时候几乎没做什么设计,直接想到一个解决办法就拿上去用了。每次打开一个文件的时候,就扫描一遍文件,把几种特定形式的语句用正则表达式匹配一把,然后记录到一个map中,key是变量名,value是类型名,到时候就查找这个map。这个方案有一个很严重的问题,就是打开大文件时,会有很恶劣的性能问题,可能过了几十秒钟,那个文件还没有show出来,而是正则表达式一直在那里匹配计算,而且正则表达式有好几个,需要匹配好几次,每次都可能花费大量的时间。另外还有一个问题,就是不能很好地反映代码更新的情况,比如一开始打开时已经定义了一个变量,后来在编辑时,修改了变量所属的类型,而我现在只有在回车换行时,才扫描一遍当前行的内容,是定义了新的变量等等,如果用户只是改完内容后直接用方向键移动了,或是用鼠标直接跳离了当前行,就不能得知修改的内容了。 因为没有这方面的经验,也没有看到其它多少可以参考的项目或资料。依稀觉得Source Insight的解决方案比较适合应用到我们这个项目中。Source Insight具体工程的概念来管理所有的源代码文件,新建一个工程后,把所有的源代码文件都添加进来,然后可以由用户手动触发扫描所有文件,建立一个符号表数据库,或者是程序自动在后台,慢慢建立一个数据库,但不会影响前台功能的使用。再一想,我现在用的正则表达式匹配的方案实现很落后低效,再怎么样,也可以依赖于像ctags这样的工具建立索引。我其实并没有仔细地研究过Source Insight的建立索引的机制,只知道它的速度确实很快,而且准确性也基本能符合用户的要求。 另外,我现在几乎不能再大动干戈地改动那一块的设计了,所以表现上不会有质的飞跃了,真是略微有点点遗憾啊。这些想法就只能放在自己现在搞的这块来实现了,要做一个类似Source Insight的通用代码浏览、编辑工具,编辑功能应该是强于Source Insight的。然后针对几种语言做IDE,除了要能浏览、编辑代码,还得跟编译器(或解释器)有良好的交互功能。初步计划是针对D、Lua、TCL、Python、Ruby、Perl、PHP这几种,因为这个市场还没有被什么寡头垄断,还有机会插一脚,哈哈。
晚上又跟小思宇去吃肥牛府了,两个人点了好多,最后浪费了好些菜,肉硬是全让我消灭了。然后两个人慢慢走回百草园,我再走到百草园门口坐车回家。 无聊的时候,就静静地躺在床上,发一会儿呆,把所有的不快都抛得远远的。 今天在公司里也无聊了一天哦,我觉得领导们是存心不想让我按时完成那个项目了,需求不停地讨论、确认、修改,不就那么小小一个文件共享软件吗,如果不是因为想用类似Google桌面搜索那样的界面,我可能两个星期就能做完了。 无聊的时候,就偷偷幻想一下美好的未来吧,有的人有的事,真的不用太在意,有时候我觉得我太有责任心了,都让自己变得很下贱了。