Archive for September, 2005

Dissect Eclipse Plugin Framework (2)

Eclipse中的插件都用XML文件来进行描述,比如: <?xml version="1.0" encoding="utf-8"?> <plugin id="org.eclipse.pde.source" name="%pluginName" version="2.1.3" provider-name="%providerName">      <runtime></runtime>     <extension point="org.eclipse.pde.core.source">         <location path="src"> </location>     </extension>  </plugin> 这个清单中描述了插件的绝大多数信息,包括插件的id, name(这个是经过i18n的),版本,启动类等。同时,所有的扩展、扩展点也都在这里定义,此插件对外提供的库(包括Native库)以及资源也都要定义在这个文件中。 这个文件的名称是"plugin.xml",Eclipse启动的时候会扫描"plugins"目录下的所有"plugin.xml"文件,进而装载所有的插件。(注:为了提高效率,Eclipse会保存一个中间文件来加速装载,这里并不讨论。) 因此,你需要用XML Parser将这些信息Parse出来,形成插件的基本信息,具体选用Dom、SAX还是Pull Parser都无所谓。 Eclipse采用微内核+插件的模式构架,也就是说,除了一个微小的核儿之外,所有的东西都是插件。 Eclipse Plugin Framework最核心的概念应该就要算"Extension Point"(扩展点)了。 打个通俗的比方,"Extension Point"就像我们日常生活中的插销板,而"Extension"就是能够插入到这个插销板上面的插销。 系统的开放性很大程度上也取决于系统究竟给你多少"Extension Point"。 WordPress的Plugin Framework也同样采用这种"Extension Point"的概念构架,它为自己几乎所有的应用都定义了扩展点。比如,有的插件可以在"Header显示扩展点"的地方加入代码来添加CSS样式表,Google Sitemap插件可以在"文章发布扩展点"的地方进行Google Sitemap的提交,Creative Commons插件可以在"Footer显示扩展点"处增加"Creative Common"信息等等。 对于Eclipse来说,因为采用微内核+插件的方式,因此,定义扩展点也就成了你的任务,在扩展功能的同时,你也可以在任何你觉得可能被扩展的地方定义扩展点,来方便其他人扩展系统的功能。 Eclipse的插件扩展点都定义在"plugin.xml"文件中,每个插件要扩展哪些扩展点也定义在这个文件中。举个例子(DS中Core插件的一个片断): <extension-point id="Parser">      <parameter-def id="class" type="string"/>      <parameter-def id="icon" type="string"/> </extension-point> 这并不是Eclipse Plugin的DTD所规范的"plugin.xml"格式,而是一个非常简单的模拟。它描述的是一个"Parser"的扩展点。因此,你可以扩展任何自己的Parser(比如QQ聊天记录的Parser,Foxmail Mail的Parser,等等),增加Desktop Search可处理文件的范围。

Dissect Eclipse Plugin Framework (1)

在讨论Xerdoc DSearch的架构的时候,我们就讨论决定采用Eclipse Plugin Framework,可惜那时Eclipse Plugin Framework和SWT以及其它耦合比较大,因此,决定借鉴Eclipse Plugin Framework的思想,来实现一个自己的轻量级的Plugin Framework。 一晃已经过去快一年了,其实非常早就想把自己研究Eclipse Plugin Framework的心得写下来,米嘉也一再催促,不过一直比较懒,觉着这个题目实在要写的太多,于是一直拖着。后来想想,真的应该早点儿把自己的一些粗糙想法写出来,即是对自己的一个总结,也能对其他人有些帮助。 Eclipse Plugin Framework是一套非常成功的插件框架结构,它的架构师之一就是鼎鼎大名的Erich Gamma,设计模式的作者之一。Eclipse JDT就是架构在这个插件平台上的一个杰出的Java IDE。Eclipse 良好的插件架构也形成了很好的"An architecture of participation",你可以在Eclipse的社区中找到各种各样的插件,这些插件又极大的扩充了Eclipse的功能,提高了易用性。 记着候捷在写《深入浅出MFC》的时候,用很简单甚至粗糙的一些例子来模仿MFC内部的行为(比如消息循环等),效果非常好。我也想用一些Xerdoc DSearch中的代码来模仿一下Eclipse的插件架构。 注:这里所指的Eclipse Plugin Framework的Codebase是2.1.3,因为当时研究的时候,3.0(OSGi Based)还没出来 。 最近事情比较多,我也不知道多久能写完,有时间我就会写到这里,最终版本会发到Xerdoc Together上。

没完没了

好几天没写Blog了,最近发生了很多事儿,有些忙。 今晚回家,慵懒的躺在床上,突然接到米哥的短信“中央六正在放《没完没了》”。赶紧爬起来,打开电视: “OKOK” “十三,路易的” … … 再加上想起了前段看的一些关于彪哥的文章,眼镜有些发酸,又赶紧把短信转发给大米,Anto,杨宁… 不知道最近怎么了,特别怀旧,经常想起过去的事儿,今天又不自觉的想起了千禧年的那夜。不知道那会儿的朋友,现在都在哪儿呢?

Leo, 你终于还是决定要走,一起工作、一起玩儿的日子如此难忘,不过还好,你说过你会回来。看看MSN上朋友的祝福,有那么多朋友想着你,多好。 认识你才1年,不过你的憨厚(这么说你不会不高兴吧?呵呵)、乐观、义气还是给我留下深深的印象,今天开车的时候还想起一起做DVD、一起“杀人”、一起喝酒的日子。虽然不想你走,不过家庭最重要,加油,早日携妻带子一起回到祖国的怀抱吧 。 对了,终于还是把你培养成许巍的歌迷,昨天特意买了许巍的全套4张专辑CD送给你,去海边开你的敞篷车,听起来肯定特爽,嘿嘿。 不说了,有缘再相见吧~ Best, -Elan

I just found Google Bendi

GoogleBendi Originally uploaded by Dreamwords. One of my friends told me this link, Google Bendi(本地) Service(Of course, in Beijing). http://bendi.google.com/clochp or http://local.google.com/ Check it out, interesting. However, the speed is a little slow and the result is not very good.

个人门户,由输入到输出

总是喜欢拿技术上的东西来说,因为我觉得本质上,这些都是相通的。 对程序来说,归根结底就是数据(信息)的流动,两个最重要的环节就是数据的输入和输出。 对个人来说,也是一样的,他需要有输入和输出。对于输入来说,就是信息的获取。而输出呢,就是主动的自我意识的表达。我们每个人就像一个程序,根据自己获得的信息做出各种各样的输出 。 信息获取是Web1.0时代的主要需求,而到了Web2.0时代,用户意识的表达成了一个非常重要的需求,因此也就有了"An architecture of participation"。 就个人门户来说,也同样存在两个方面: 1)输入 这方面我用过Google ig,微软的Start 3,以及刚刚看到的Protopage。 "Garbage in, Garbage out",好的输入才能制造好的输出。对我来说,一个Protal就是一个强大到能够让我甘心把它设置为浏览器首页的东西,她应该包括邮件、Bookmarks、天气预报、股票、RSS支持、即事贴等等,当然,还有一个重要的因素就是速度不能过慢。 这样,带给我们的好处是: 节省了时间成本,可以在一页得到尽可能多的信息; 会有更好的用户体验。用户的网络活动由此发起,Portal将可以拿到很多用户的第一手资料,从而进行分析和有目的的信息的主动推送。 Google ig Google ig支持很多新闻源,支持RSS的导入(不过不支持OPML),支持Stock Market的定制。当然,最吸引我的还是GMail和Google Search History的集成。Gmail和Google Search都是杀手级的应用,因此Google ig推广起来,恐怕也更容易一些吧。遗憾的是,Google ig目前似乎问题还比较多,经常会出现“信息不可用”,比较扫兴。 Start 3 Start是微软的试验作品,非常酷,AJAX的应用非常恰当,看起来比Google ig要炫很多。Startlet做的都很有意思,特别是那个与MSN Virtual Earth结合的例子。Start的菜单中也包括MSN Search History,不过目前还不支持。当然,对于我这样一个习惯了使用Gmail和Google Search的人来说,如何将我从Gmail和Google Search吸引过来是个问题。 Update: Start刚刚Release,不再用"/3"来访问了。 Protopage Protopage能够添加Bookmark,不过不支持RSS,最吸引我的是它的StickyNotes,就像我们平时的即事贴,终于,我可以把我的即事贴贴到了电脑屏幕上。对我来说,这是一个杀手级应用。 2)输出 在Web2.0时代,我们更需要别人的认可,需要自我意愿的表达,我们的个人门户就是这样一个舞台,一个展示自己的舞台(广告时间:心有多大,舞台就有多大 )。这个舞台上,你可以放自己的Blog,自己最近的照片,自己看过的文章,自己在听的音乐,自己在看的书,以及自己朋友们的文章,这是一个你自己的地盘,是别人了解你的窗口。 我理想中的这种个人Portal还是去中心化的,你个各种服务还是应该采用最流行,最棒的服务,同时采用Web Service或者RSS(RSS就像是一个Interface,使得你的各种服务的聚合成为可能。)将他们聚合到你自己的Portal上。比如,Bookmarks还是采用Del.icio.us,照片就放在Flickr上,读书交流用豆瓣,Podcasting用土豆,然后用RSS将他们聚合到你自己的Portal上,这就像你自己的一份报纸,你是主编,你负责将你的内容组织展现在你的朋友们眼前。当然,你也可以在你的报纸上放置自己的广告,只要不吓跑你的读者 。