2009年3月31日星期二

RCP Designing Coding and Packaging Java Applications书中的一个错误

按照书上,一步步实现一个IM系统,虽然没有完好的设计,但是还是体验了一下RCP开发一个完整软件的过程:) 但书上有一处错误,搞到我调了N久……在10.3节的扩展org.eclipse.core.runtime.adapters中,书上只列出了两个对象的adapter配置,即:只配置了RosterEntry和RosterGroup,却没有对Roster对象进行adapter,找出随书附带的源码,发现里面的确配置了Roster。
看书的时候不能光顾着看文字,还得结合附带的代码……

2009年3月30日星期一

Smack

昨晚被Smack的example郁闷了,误以为MessageListener是用来返回对方的回复信息,今天终于搞明白了。
Smack是XMPP的一个Java客户端library,可以用来实现Instance Message Tool(Spark、Sparkweb)。服务器端也有相应的的实现,叫Op
enfire,当然,这里只对这两个XMPP的实现讨论,还有很多其他开源实现。顺便提一下,和Smack对应的有个XIFF的Flash客户端实现。

贴一个例子,假设首先启动了Openfire服务器,用Spark客户端登录了某个账户prc,然后在代码中用另一个用户登录,并进行交谈。

效果图:



package org.prc;

import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;

/**
* Chat prototype using smack as client library. Server side are supported by
* openfire.
*
* @author promise
* @date 2009-3-30
*
*/
public class FireChat {
public static XMPPConnection con;
public static Chat newChat;
public static ChatManager chatmanager;

public static void main(String[] args) throws InterruptedException {
// XMPPConnection.DEBUG_ENABLED = true;
try {
// Create a connection to server
ConnectionConfiguration config = new ConnectionConfiguration(
"localhost", 5222);
con = new XMPPConnection(config);

// connect and login with the username and pwd on server
con.connect();
con.login("promise", "promise");
System.out.println("Authenticated = " + con.isAuthenticated());

// add a listener to receive all messages
addListener();

chatmanager = con.getChatManager();
newChat = chatmanager.createChat("prc@fantasy-promise/spark",
new MessageListener() {
public void processMessage(Chat chat, Message message) {
System.out.println("I'm sending: "
+ message.getBody());
}
});
newChat.sendMessage("hi");
} catch (XMPPException e) {
e.printStackTrace();
} finally {
Thread.sleep(3600000);
con.disconnect();
}
}

private static void addListener() {
// just need Messages :)
PacketFilter filterMessage = new PacketTypeFilter(Message.class);

PacketListener myListener = new PacketListener() {
public void processPacket(Packet packet) {
System.out.println("From: " + packet.getFrom() + "\n");
System.out.println("Body: " + ((Message) packet).getBody());
// when receiving prc's Message, just say something else again
// and again, robot :)
try {
newChat.sendMessage("hi again :)");
} catch (XMPPException e) {
e.printStackTrace();
}
}
};
// register the listener to the connection
con.addPacketListener(myListener, filterMessage);
}
}

2009年3月24日星期二

Apache和Subversion整合过程中的问题

Apache Http Server和Subversion的整合总是不怎么顺利,这已经不知道是第几次配置这个环境了。现在开始log下其中关键的几个问题,其他的经典配置略过。

  1. Apache Http Server和Subversion的版本要匹配;
  2. 在copy Subversion的两个so模块时,同时需要copy dll文件到ApacheHttpServer的modules中;
  3. 在windows上建立Repository后,在写Apache配置文件时有时(Apache2.2.11+Subversion1.6.0)需要把路径变为和windows上一样,也就是用反斜杠来定位Repository,否则出现无法读取Repository的错误,但我在Win2k3+Apache2.2.9+Subversion1.5.3中却可以用斜杠/;
  4. to be appended ...?

2009年3月13日星期五

开源电子平台Arduino

今天在IBM的DW上了解了一件非常新鲜的东西:Arduino

说新鲜,是因为我接触的硬件比较少,对于这个开源的硬件非常感兴趣!它是一个开放的平台,包括开源的PCB设计和开源的编程接口。也就是说我们可以自己实现电路板,然后添加上我们所需要的一些外设,比如各类传感器、红外线、马达、存储介质……最后组成一台微电脑!

希望以后的DIY能越来越方便,最好就是像搭积木一样拼起来,然后配上一套开源的便捷的开发环境,稍微写几行代码就能组成一个强大的智能平台!

2009年3月11日星期三

Javascript碎语

        Javascript离不开互联网的流行应用。它是由Netscape公司的Brendan Eich发明的,后来同Sun公司合作后就改名为Javascript。M$看到了互联网的巨大潜力后,也想在IE上用Javascript,可惜没有获得版权,于是自己除了JScript。当时由于没有统一标准,所以浏览器之间的不兼容问题非常严重。当两个公司提交给ECMA后,由于互不相让,所以只好把标准名称做ECMAScript,目前主要使用的标准是ECMA-262第三版本。其实目前我们听到的Javascript更多的是指浏览器中提供的Javascript引擎实现,但除了被用在网页中,ECMAScript还能被用于很多其他场景,比如ActionScript也是其繁衍的一个分支,只是Adobe公司对其进行了扩展,加入了Flash虚拟机的一些扩展支持。本质上来说,ECMAScript是一种语言规范,它的实现就是一种虚拟机实现或者解释器实现,而我们平时除了用核心语言之外,还常会用到一些浏览器附加的对象,比如DOM对象、各种插件对象等。浏览器之间的兼容问题主要是由这些附加对象的实现造成的,比如对事件的支持、对CSS的支持等,在不同浏览器中的具体实现有差异,但是核心语言的实现基本上是一致的。
        Javascript是一种解释性的语言,它是基于对象而非面向对象,因为它没有提供语言级别的面向对象相关技术,比如封装、继承、多态等,但是它是基于对象的,而且可以使用一些技术来弥补其语言在面向对象方面上的不足,比如可以使用closure来实现封装。
作为一种解释性语言,最大的缺点可能就是它的运行效率,但是目前的一些技术可以提供解决方案,比如JIT(Just-In-Time),它在代码运行前进行即时编译,使得代码在内存中能按照汇编码或者二进制码来运行,这对代码执行速度有很大提高。这方面Google和Mozilla都有相关研究,而且都有源代码开放,Google的V8是用C++实现,Mozilla提供了Java的实现版本Rhino。PS.有新闻说Opera将会开发出全世界最快的Javascript Engine——“Carakan”。可见当前Javascript在RIA中的地位。
        一开始有个疑问,为什么只用Javascript来做浏览器客户端脚本语言,为什么不是Python、Ruby等这类更强的OO语言?我看了一些论坛贴,发现以前也有人问过,主要原因在于安全,Javascript已经有对应的沙盒的实现,而其他语言并未有对应的沙盒实现,所以如果要改用其他脚本语言,第一件事情就是要制定一套机制,来确保他只能在规定的权限范围内使用。目前网上看到的一些APAX、ARAX基本上都是把Python、Ruby代码转换为Javascript代码,并不是真正实现了对应的浏览器脚本引擎。
        目前ECMAScript的发展方向主要是ECMAScript 262-3.1,也就是被M$和Yahoo支持的方案,而ECMAScript-262-4这个主要由Google、Adobe、Opera、Mozilla等公司支持的方案中的一些功能将被取消,具体可以参阅ECMAScript的Harmony项目。
最后说说RIA领域的现状。M$的SilverLight使用了JScript.net,算属于ECMAScript一类;Adobe的flash使用了ActionScript,也算是属于ECMAScript一类,PS.Adobe的flash引擎有个开源版本项目Tamarin,和Mozilla合作,目的是让Flash兼容ECMAScript-262-4标准;当然了,AJAX本身用的就是Javascript,属于ECMAScript一类;最后还有Sun的JavaFX,这一类使用的是自带的脚本语言,依赖于JVM。JavaFX的最大好处就是平台统一性,凡是Java的咚咚,全部基于JVM,但JRE太大,很难下载,不过Sun公司目前也有意要精简JRE的部署文件大小了,出了一些解决方案,先下载精简JavaFX用的JRE,然后再慢慢扩充JRE,且后续的Java版本可能会模块化;SilverLight的话不用多说,M$的产品:易用、文档齐全,但所依赖的.net目前并非跨平台(虽然有开源的mono,不过感觉和windows平台上的功能和性能都差远了),而且要$;Flash是目前最多人装的插件,基本上每台上网的机子都有装Flash,可见其用户普及度,而且Adobe公司目前的战略是要向电视网靠拢,实现互联网和电视网的联通,让Flash跑上电视,野心不小哇~虽然Flash引擎可能会被开源,但是一些通讯协议就不知道了。总的来说,Flash开发应该还可以,有面向程序员的Flex和设计员的FlashStudio,而且Flash源文件可以很好的保密,不用像Javascript一样被公开;AJAX也随着Web 2.0而热起来,在原有的基础上增加了异步传输,提高了用户体验,使得Javascript被再度关注,目前很多大公司和组织都在研究,比如Google、Mozilla,而Javascript代码的执行效率也越来越快,各种框架类库也像雨后春笋般出现,比如jQuery、ExtJS、YUI、Dojo……还有转代码工具比如GWT等,Javascript相比其他技术的优点可能是可以无止境的优化,比如缩短代码再压缩来减少传输数据量,但是总体感觉Javascript的门槛还是比较高,特别是要求写一些效率比较高的代码。
        目前还不能断定哪种技术有绝对的优势,但是从用户角度可以说我们的选择余地也越来越宽广:) 

参考:
  1. https://developer.mozilla.org/presentations/xtech2006/javascript
  2. http://en.wikipedia.org/wiki/
  3. http://ejohn.org/blog/the-world-of-ecmascript/
  4. http://www.ecmascript.org/
  5. http://www.mozilla.org/projects/tamarin/
  6. http://www.infoworld.com/article/08/06/23/eich-javascript-interview_1.html

2009年3月7日星期六

About my concentration

发现自己的注意力比较分散,很容易受到网络内容的影响,比如本来是想找关于A类内容的信息,结果发现某A类内容中提到了B类内容,于是“深搜”下去,最后发现自己的思维停留在比较原理原始目标的一个位置,虽然期间接触了很多感兴趣的topic,但感觉没有特别的成果……
莫非上网真的会使人的注意力涣散?
相信问题总有解决方法 :) 现试行如下:
  1. 上网前预先想好topic,并打开free mind,如果遇到某些预订topic之外的内容,将其置入free mind中,以备后查,重点完成预先设定topic;
  2. 对每个topic及时写总结。

2009年3月5日星期四

数码行业发展趋势之我见

  • 手机越来越智能,手机的处理器频率上1G了,内存256M RAM + 512 ROM;
  • 笔记本越来越小巧,越来越省电,持续导航能超过10小时,大小可以和书本一样;
  • 家庭数码产品越来越多了,HTPC、家庭网络存储系统开始要流行起来了;

看来电子行业方向发展主要有几方面:降低功耗、电路板微小(主板有很多规格,现在的Mini-ITX才17mm*17mm)、UI方便(触摸板笔记本)。

畅想:以后的手机能否充当主机功能,走到哪用个投影就能开始干现在的主机+显示器能干的事情。

-- 
Promise