:: Sola & Luna :: Album of the Shining Days

輝きが溢れる日々を、ともに、創る~ShyujikouとLovetwomixのブログ・音楽クリエーターユニット「連鎖調律」公式サイト~


MENU => PROFILES | FOCUS LISTS | MUSIC WORKS | CONTACT

Click to view all posts by Shyujikou

关于MSN机器人的一点开发心得

Tags: , ,
Posted in Comment | 评星品辰,Technology | 技术 by Shyujikou on November 18th, 2007

从进公司以来就想自己学学JAVA,无奈我这个人是一定要有实际的工程才能有心思学的(你这个啥的不会的公司也不会把项目给你做啊=v=|||),不然看了半天文档还是没有用啊~最近一段时间项目没那么忙了,我把以前尘封的一个想法翻了出来,那就是写一个MSN机器人。以前从来没有用过OOP(面向对象编程)的编程语言,一直觉得是一个遗憾,进公司之后从CakePHP架构上接触了MVC(Model-View-Controller,数据模型层-表现层-控制层)的理念,才算是有了一些OOP的影子吧,既然OOP是现在的主流,作为自称会写程序的我来说,还是不能不学的呀……嗯,公司的Reinhardt.Shi师父在JAVA上给了我很大的帮助,在此表示感谢m(_ _)m。

说起JAVA,这个东西的最大优势就是“一次开发,到处可用”,因为代码是在虚拟机上运行,所以拥有跨平台的移植性能,而也正是由于要在虚拟机上运行,因此JAVA的代码在效率上存在着不足。不过MSN机器人这个东西,只是个实验品而已,也不会过多牵涉到对于代码效率的研究,所以用来练习JAVA是个不错的项目~这个项目现在还在开发中,暂时先不公开测试(小规模内测状态=v=|||),下面只是说一些心得和感想,牵涉到项目的各个方面的。

首先是JAVA本身。开发到现在最大的体会就是JAVA是一个完全的OOP,不像用VB或者PHP之类的语言里面有一些语言本身的固有函数可以帮你实现一些东西,JAVA的一切都是靠对象来实现。举个例子,要测试一个字符串tmpString是否以“test”开头,在PHP里面会通常这样写:

if (left($tmpString,4)=="test") {
    //Do something
}

PHP中的字符串函数left()可以取出字符串左边制定长度的子序列,这是PHP的固有函数,并不属于任何一个对象,而在JAVA里面,因为一切都是属于对象的,所以要这样写:

if (tmpString.startsWith("test")){
    //Do something
}

我们这里用到的starsWith是String类的一个方法,并不是一个独立存在的函数,当初始化一个String类的时候,这个方法就存在于这个实例中并可以被调用,这就是典型的OOP理念了。当然,JAVA里面也有不用初始化实例就可以调用的方法,比如打印信息的方法System.out.println(),这就是一个静态(static)方法了,你自己写的Class里面同样可以拥有静态方法,从某种意义上来说,你和JAVA设计者的地位是平等的。

JAVA的另一个特点就是它是一种显式的语言,里面的实现划分的很细致,要根据需要选择,而决不是一种傻瓜语言。用PHP习惯了总喜欢让系统自动转换变量的类型,而这在JAVA里面是很少能行得通的,必须显式地告诉JAVA你要怎么样转换才行。还有,PHP里面的数组功能强大,甚至可以当多维表和树形结构来使用了,有字符串索引也很方便,而JAVA里面却分成了表、向量表、链表、Hash Map等等很多中模式,就连字符串的实现也不止又String一种模式,这给开发带了了很大的灵活性(比如可以把任何对象装载在表里而不仅限于普通的变量),然而你必须清楚在什么时候应该使用哪种实现方法以获得更高的效率,这就比较有难度了。

说说MSN机器人的实现。也许很多人知道小i机器人现在和微软关系很好,机器人也做的最强大,他们的网站提供了一套机器人的SDK。最开始我也想用这个SDK来做,不过实际做了发现,这个东西是要登录到小i的服务器作为中转平台的,虽说这样有一部分功能可以不用开发者来设计,不过毕竟控制权捏在人家手里,还有很多功能限制(啊要你付费啊,不厚道啊,这又不是你的技术,地球人都知道的= =b),于是不久就被我抛弃了。

如果你要从MSN的协议开始做起,那么MSNPiki这个网站是非常值得参考的。不过,从协议开始写起这个太不现实了,于是又发现了JML – Java MSN Messenger Library这个东西。这是一个封装MSN协议的JAVA包,里面使用了Cindy的事件触发机制,实现起来感觉和小i的东西很像,所以很容易就把原来的代码移植过去了。这东西也是还在开发中,有很多功能也没有实现,比如文件的传输等等,不过这些暂时也没啥问题。现在发布的这个版本里面,设置头像的代码有Bug,去官方的SVN上checkout下来最新的源代码自己编译一下的话就可以解决这个问题了,不过新版还没有发布,不知道有没有别的Bug,肯定也有写到一半的功能,不去用它就OK了。

JAVA在配置文件的读取上有一个类来实现,不过这个类对中文的支持却不良,于是我只好选择用更强大的XML来做资源文件,在代码中不直接出现表现UI的字符串,把它们集中到一个XML里面来访问,并单独写了一个类来处理资源文件,当然,这个类是建立在Dom4j这个XML解析库的基础上的。Dom4j利用了X-Path表达式来定位XML的节点和元素,真是太强大了……话说这个机器人的基本目标是实现对于Wikipedia的检索,现在是利用了一个API服务来做,返回XML的解析也是在Dom4j上写的类,以后要真正从Wiki上抓取数据,还需要更多的研究和探索吧……

好了,写这么多我估计也没人看,到这里了先-v-~



相关文章 | Related Posts

4 Responses to '关于MSN机器人的一点开发心得'

Subscribe to comments with RSS or TrackBack to '关于MSN机器人的一点开发心得'.


  1. on November 18th, 2007 at 9:19 pm

    看到是有人看,不过看不懂……

    Reply

  2. 小叶子 said,

    on November 18th, 2007 at 11:46 pm

    看来我是应该放弃JAVA……

    Reply

  3. 雨夜观月 said,

    on November 22nd, 2007 at 12:59 pm

    呵呵,原来你在做IT开发了阿。:)

    Reply

  4. Felicia said,

    on November 25th, 2007 at 11:41 am

    突然神經病一樣上來了,看不懂,不過MSN機器人跟小i機器人有什么不同?

    Reply

Leave a Reply