从快猫加鞭到网络伴侣
——一个共享软件程序员的自述

王尧(左轻侯)

  我并非科班出身,也从未从事过与IT有关的正式工作,很久以来,编程都只是一种个人爱好而已。吸引我的完全是程序设计本身,那种完美的逻辑结构,那种对现实世界关系的理解与复述,对人的智力是一种挑战。从DOS到Windows,我的兴趣只是在于把原理搞懂,再编段程序把它调通,甚至都从没有想到要写出来一个完整的软件。

  由于偶然的机会写出来的“快猫加鞭”(speedcat)在网上十分流行,现在很多网友对我的第一印象也是“快猫加鞭的作者”。但纯粹从程序的角度来看,“快猫加鞭”实在是一个不怎么样的作品,代码写得非常糟糕。因为开始没有想到会写成一个正式的作品,所以结构相当混乱,例如注册表的操作,以前是直接调用复杂的API函数,以至于每操作一次注册表,就要copy一堆各种五花八门的参数,不但容易出错,而且维护相当麻烦。后来才在自己的函数库里把这些API封装起来,但我也没有兴趣再去修改以前的代码了。从编程语言来看,作为一个执着的“面向对象编程癖”者,VB也不是我喜欢的,我学习它仅仅是想看懂别人写的VB代码而已。果不其然,VB糟糕的稳定性、笨重的运行库以及OCX的兼容性问题等等,把我搞得头大无比。

   终于我打算放弃快猫,重新写一个比较规范的软件。 我向老一辈著名程序员冯志宏先生请教,冯先生告诉我还是写计费软件比较好。虽然类似的软件已经不少,但仍有许多可以改进之处,也就是说,我还有机会。我自己觉得这也是一个挑战。

   但网络伴侣诞生之初,并不是仅仅作为一个计时计费的软件出现的。它集成了多种网络应用,甚至内置了一个多元搜索引擎。我的设想是将它做成一个上网控制平台,即用户与网络之间的中间层,可以通过它调用其他的如浏览、下载、Email等网络服务,也许是有点头脑发热吧。因此我曾经想将它起名为NetShell,发现这个名字已经被使用了,就改成了起初的Net Compaion。后来周鸿一先生提醒我这个设想过于庞大,我自己反思之后也觉得是如此,所以在Beta 1版之后,我不再提过高的要求,而是先努力于做好现有的功能。虽然随着网费的下调,将来可能计费会无关紧要,但在现阶段,计时计费也许仍是用户最看重的功能。

   网络伴侣使用Delphi编写,在稳定性和兼容性上都与VB不可同日而语。同时,由于Delphi是一种完全面向对象的编程工具,使得我可以充分发挥OOP的优势。再加上在开发之前就有一个比较明确的构想,这些都让网络伴侣有了一个好的开头。网络伴侣的核心功能是由作者专门开发的一个比较复杂的类库(Class Library)来实现的,这个引擎完全遵循OOP标准,例如,对数据文件的读写和分析,统一由TNIFile(Net Information File)类来完成。同时这个引擎独立于任何界面元件,这也是网络伴侣能迅速从Beta 1的界面转到Beta 2的界面的原因之一,事实上我几乎没有改写什么代码。 在这个基础之上,网络伴侣实现了一些我比较满意的功能。数据文件的存储是一个问题,我曾经考虑使用标准的DBase或Access数据库来存储,这样可以减少很多的开发量,但因占用资源过多和兼容性不好而放弃了。使用TXT文件固然简单,但定制性不好,而且数据量一大就不能保证性能。最后还是从底层定义了自己的数据库格式,在TNIFile中实现。因为一切都是从底层实现的,所以可以进行最大限度的性能优化,例如,由于使用了FileStream技术,网络监测中心在向文件追加数据时几乎不受文件大小的影响,也就是说即使数据库中有成千上万条记录,追加数据的速度也不会改变。这在软件实现定时存盘功能时是很重要的,因为频繁地读写数据库会严重增加系统负担。而且,在这个接口上可以方便地实现多种数据分析,资源管理器中的按月结算功能就是这样完成的。

   计费的算法也是比较麻烦的问题,各地ISP的计费标准五花八门,有实时制,封顶制,包月制,分段制(有的分成三、四级),还有各种各样的优惠时段,要在一个计费算法中将它们统一起来,还不能占用过多的系统资源,实在是件要命的事!而且,电信不过在月底把时间加起来算一下而已,而网络伴侣却要实时显示当天、当月和全部的数据(必须这样才能做到实时提醒)。但不管怎么说,在一个复杂的算法中我还是实现了目前大多数比较流行的计费算法。幸好不同算法的实现,只需要在calculatefee方法中进行改动就可以了。

   由于界面不友好而失去用户是国产软件的通病,快猫当初能够赢得用户,简洁实用的界面也是原因之一。网络伴侣发布前,我对界面进行过多次修改,但觉得Beta 1的界面仍然华而不实,于是在Beta 2中全部重做了。在费用管理器中,用树型结构+属性页来实现多帐号、按月结算的显示,也是想了很久之后,才做出的决定。现在的界面,应该可以说基本上能让用户一目了然。同时,和快猫加鞭一样,我花了很多功夫写了一个非常详细的使用手册,让一般的使用者有解难答疑的地方。

   总的说来,网络伴侣是一个我比较满意的软件。虽说现在它在网上的影响还远不上快猫加鞭,它还处于测试阶段,有太多的有待改进和完善的地方,但我认为它从技术上来说是比较有优势的。也许,网络伴侣才算是我的第一个作品。

   从用户的反应来看,网络伴侣主要的优点是:计录详细,稳定,占用资源少,结算功能强大。作为一个计费软件,它应该是比较称职的。但我仍然没有放弃以前的梦想,在Beta 3中,网络伴侣加入了计划任务和语音提示功能,成为了完全的绿色软件,并正式将英文名改为iCompanion。Companion意为伴侣,i既是Internet,也是intelligent(智能),合起来就是智能的因特网伴侣,这标志着它从计费软件朝着智能网络辅助工具的方向转变。例如,网络伴侣可以自动完成拨号上网,启动Foxmail和ICQ,并打开几个IE窗口连接到指定的网址,让你直接投入的要注意的内容中去,并且用声音提醒你。当然同时它也会详细地记录上网的时间、费用与流量。

   现在我正在紧张地开发网络伴侣的V2.0版,这个版本增加了小面板显示、多帐号邮件检测、间隔提醒等多项功能,界面上也有很大的改进,整体上说来应该比V1.0版优秀很多。但我觉得网络伴侣的优势还远没有完全发挥出来,我仍然把眼光投在更远的地方。

   在技术方向上,我对通过COM方法集成其他软件的功能非常感兴趣。COM技术是将来的趋势,它使得各个应用软件之间能够方便地通讯,这对于实现我期望中的网络伴侣是非常重要的。正好Netants的作者洪以容先生也正在考虑这方面的问题,经过双方的努力,现在网络伴侣通过Netants提供的COM接口调用它的下载功能,在技术上已无问题,只是具体应用于哪方面的想法还不成熟。也许在不久的将来,网络伴侣就能够做到:自动拨号上网,自动下载指定的软件,收取信件,自动在网上搜索有关某个关键词的数据并保存之,自动断线,关机。也就是说它类似于一个机器人,能辅助你完成各项网络工作,成为真正的智能化网络伴侣。

   现在我遇到的最大的困难是兼容性上的。作为一个业余程序员,我现在能接触的电脑设备只是两年多前买的那台P166老机,这台机子连Windows2000都跑不动(而且我的硬盘也实在没地方了),更别说改进网络伴侣在Windows2000下的兼容性了。随着ISDN、DDN等的流行,有不少用户要求我改进对这些接入方式的兼容性。他们不知道我有的只是一只200多元的33.6K内置小猫而已,连在那些豪华设备上做测试的机会都没有。以前快猫对多种Modem的支持,是靠许多热心的网友把他们的注册表寄过来,我一个个的分析后实现的。这些问题不能是靠编程能力能够解决的,可以说也是一种悲哀。

   我知道这条路上的艰难。我的理想也许能实现,也许不能。但无论如何,我会全力以赴。

 

返回