February 22, 2006

使用SWT开发WEB应用

出處:developerWorks 中国使用SWT开发WEB应用

黄林榕 ,软件工程师

2006 年 2 月 20 日

Eclipse SWT(标准部件工具包)发展迅速,以其良好的性能和漂亮的外观,已逐渐成为JAVA桌面应用开发的首选控件包。一直以来SWT都是用来开发桌面应用的,那这个优秀的工具包能否直接用于开发WEB应用呢?如今SmartSWT技术可以让这个想法成为现实,这对SWT来说,无疑又多了一个用武之地。

SmartSWT简介

为了提高传统WEB应用的界面表现能力,RIA技术应时而生,各种RIA平台通过各种手段来提高丰富的图形界面。如Bindows,它使用动态HTML技术模拟Windows控件,还有Flex,直接使用Flash做为WEB应用的表现层,以弥补DHTML技术的不足。

而SmartSWT 则是基于SWT的RIA发布平台。它可以将普通的SWT的应用直接发布成为一个可通过客户端浏览器访问的WEB应用,这样就使通过SWT直接开发富UI的WEB应用成为了现实。不仅如此,基于SWT扩展的许多扩展包也大都可以直接使用,如JFace、GEF等。

SmartSWT和 SmartClient不一样,它并不是将SWT应用程序下载到客户端来运行,而是和B/S模式的WEB应用一样,整个应用程序是运行在服务端的,只是运行过程中将图形界面实时显示于客户端的浏览器中,并将客户端的操作事件自动实时返回服务端,触发服务端原SWT应用的事件处理代码进行处理。服务端的 SWT应用所进行的数据库操作和文件操作都是相对于服务器端进行的,而不像C/S应用那样,需要客户端自己将数据按自定义的通讯协议传回服务端再进行处理。

SmartSWT底层的通讯是加密而且高效的,在内网的客户端打开服务端的SWT应用,和原来直接在本机使用相比相差不多。相当于将您机器的CPU降一档后运行应用程序的感觉。

SmartSWT目前测试版本是3.1,表示支持SWT3.1的兼容应用程序。

下图是一个SWT应用(SWT Control Example)在SmartSWT平台部署后,客户端通过IE浏览器访问的效果:

1.jpg

安装运行

SmartSWT 的测试版仅支持Windows系统,根据其用户手册的说明,它的服务端正式版将支持Linux、Unix等系统。SmartSWT安装运行非常简单,从 www.smartswt.com下载SmartSWT31压缩包并解压,在解压目录下有三个子目录SmartSWTClient、 SmartSWTServer和WEB。

1. 打开SmartSWTClient目录,运行Setup.exe安装客户端,该程序将在客户端安装一个定制的小型JAVA虚拟机。

2. 打开SmartSWTServer目录,运行Startup.bat,将运行SmartSWT服务端,SmartSWT使用自带的JAVA虚拟机,所以您不用预先准备它。

3. 如果您的客户端和服务端都在同一台机器,则直接进入WEB子目录,用IE打开index.htm文件,大约15秒钟左右即可在IE浏览器中启动SmartSWT桌面,您这时可以通过Start菜单,启动内置的DEMO程序体验一番。

开发SmartSWT应用

开发SmartSWT应用基本上和开发普通的SWT应用相同。您可以使用Eclipse的SWT可视化插件来帮助创建一个SWT应用程序,比较好的有Designer及Eclipse的VisualEditor等。

用于部署到SmartSWT服务器的SWT应用在开发时有些小的限制,幸好这些通常都只是举手之劳:

1. Display的获取必须统一使用Display display = Display.getDefault()方法,不能使用new Deisplay()创建,SmartSWT目前尚不支持多Display的应用,对大多数应用来说这不是问题;

2. 创建的Shell最好必须调用shell.setSize()对其尺寸进行初始化,否则在SmartSWT将默认呈最小化状态;

3. 尽量不要使用非公开的API,因为有少量非公开API,可能SmartSWT并没有实现它;

4. 尽量不要使用其它JNI技术和ActiveX控件,不要使用SWING和AWT等非基于SWT的控件;

5. 避免初始化时一次创建几十上百个控件,这样会造成启动时间较长,应在需要显示时创建控件。

部署SmartSWT应用

SmartSWT 的部署一样很简单,只需将调试通过的SWT程序的类文件,按包名目录结构原封不动拷贝至SmartSWTServer的swtapps目录,然后在 SmartSWTServer.xml文件中按以下格式注册一下,最后重启SmartSWTServer,你就可以通过客户端浏览器启动SmartSWT 桌面,在Start->Programs菜单里启动它:
 



mainClass="org.eclipse.swt.examples.controlexample.ControlExample">
false
ControlExample Application

SmartSWT: RIA平台的强有力竞争者

SmartSWT 同其它RIA平台比较有一些独特的优势。首先它是基于SWT的RIA平台,依托强大的Eclipse阵营,有许多扩展技术可用,如JFace、GEF、 EMF等,像UML设计器、报表、动画这样的复杂图形应用都可以通过SWT实现后,发布到SmartSWT,从而在WEB上很轻松地使用这些桌面应用独有的表现技术。还有OpenGL、RCP这类应用也有可能在将来得到支持,而且Eclipse不断发展中,SWT相关技术的不断成熟,都将以最快的速度同时运用于WEB应用。而且多年来用积累的用SWT开发的软件,不需要修改,或只需少量的修改,即可同时拥有WEB版本。

其次,很多JAVA应用开发者往往只对JAVA服务端的技术感兴趣,而对表现层采用的HTML、JS、JSP这类标签语言和脚本技术并不喜欢。而事实上兼通JAVA技术、 HTML和脚本技术的程序员也是少之又少。这也是造成许多传统J2EE应用的界面表现不佳的原因。由于SmartSWT直接采用了SWT,使的整个应用的开发完全是纯JAVA技术的开发过程,开发者不再需要与非面向对象的HTML、JS、JSP等标签语言和脚本技术打交道,整个开发过程完全是桌面应用的开发模式,基于事件驱动。这使得应用开发在技术人员的配备上要容易得多。

此外,发布到SmartSWT的SWT应用,客户端通过浏览器使用时,仍然具有和原SWT一样的具有Windows本地风格的界面,具有和真正桌面应用一样的表现能力和事件机制,其表现能力和功能是Bindows以及Flex等技术无法真正模拟的。

SmartSWT的局限性

尽管SmartSWT有诸多好处,但也存在一些局限性。 由于技术实现的原因,对网络传输速度要求较高。SmartSWT在内网内访问时,其使用效果和本机上直接使用相差不多,但在外网上却几乎不具可用性。这决定了SmartSWT只能用于开发企业内网应用。

另外,和Flex类似,Flex要求客户端的浏览器安装一个Flash ActiveX控件,SmartSWT也有类似要求。SmartSWT客户端需要在浏览器中实时表现服务端SWT应用的图形界面,并对用户操作做出响应,这就需要在客户端安装一个特制的小型JAVA虚拟机,并以ActiveX控件的形式在IE中使用。某些政府机关的敏感部门对这种方式 可能比较反感。

选择SmartSWT,还是...

是否选择SmartSWT,取决于您的软件应用范围和客户。如果您的软件是内网的企业应用,您的用户日常办公使用的是Windows系统,而且对客户端安装一个小小的虚拟机不介意的话,选择SmartSWT无疑是上佳选择。它将使您的WEB应用开发充分享受SWT开发的各种便利性和各方的丰富技术支持,完成普通WEB无法完成的功能。SWT界面的表现力和操作便利性,也会使客户满意度大大提高。

参考资料

* 您可以通过http://www.smartswt.net获得进一步的SmartSWT资料和试用软件。

* http://www.eclipse.org/swt/这里是Eclipse SWT的基地,可以得到最新的SWT开发包和开发资料。

* http://www.eclipse.org/上还有很多SWT相关的扩展项目,如GEF、EMF等。

* 您可以通过http://www.swt-designer.com/获得SWT应用开发的可视化Eclipse插件。

关于作者

黄林榕,J2EE软件工程师,多年的J2EE项目开发经验和Eclipse应用开发经验,目前从事RIA技术研究。

Posted by philipz at 07:06 PM | Comments (0)

February 18, 2006

微軟採用開原碼描述語言-Python

出處:Taiwan CNET微軟採用開原碼描述語言
微軟已經釋出其.Net Python版的測試軟體。
微軟表示,上週釋出的IronPython 1.0 Beta 1,與其他.Net程式編製架構良好整合,Python程式設計師也能「輕鬆地」存取所有.Net的應用程式。
Unix Python程式開發員Salim Fadhley表示,微軟支援Python是為了吸引Unix開發員轉至Windows平台,因為這是Unix平台上普遍使用的描述語言。
Fadhley說:「如果微軟擁抱Python,對Unix開發員是一大誘因 – 如果我們最愛用的語言成為主要軟體商率先支援的語言,對Window也是一大利多。目前大多數Python開發員使用Mac和Linux, IronPython可替微軟在傳統Unix敘述的領域大舉攻城掠地。」
但微軟不是唯一嘗試將.Net支援帶往其他平台的單位,開放原始碼Mono計畫的主要目標,就是將.Net支援帶入其他包括Unix在內的非微軟作業系統。
微軟尚未宣佈IronPython支援是否會加入其Visual Studio工具組,但許多人相信這只是時間問題。去年12月傳出軟體商ActiveState準備放棄支援其Visual Studio外掛軟體Visual Python後,類似謠言更甚囂塵上。
同時為開放原始碼Plone內容管理系統和Zope應用伺服器計畫擔任開發員的Fadhley表示,若有Python支援,開放原始碼開發員比較有可能考慮使用Visual Studio。他說:「我的看法是,此舉可以吸引通常對微軟非常猜疑的開放原始碼支持者。平常我絕不會用微軟的Visual Studio,不過,這或許會降低其他產品,如IBM Eclipse的優勢。但在可見的未來,我還是會繼續在Linux或Mac上使用Eclipse,因為那是非常成熟的Python平台。」
微軟尚未透露IronPython 1.0的正式推出日期,但該計畫團隊表示,測試版應該不會超過10個。
IronPython測試版可至微軟網站下載。(陳智文)

使用過Python,覺得目前主流3P(Perl、PHP、Python)的描述語言,就屬Python最靈活,也最Powerful,除了用Java實做出Python語法的Jython,還能編譯成單純執行檔,對於影像處理的陣列也比其他描述語言方便,加上目前又推出支援.NET平台的IronPython,蠻建議大家玩看看Python這描述語言。
Perl 和Python 的比較研究
專訪Java之父:Java會愈老愈俏嗎?(下),談到JAVA對面描述語言的競爭。

Posted by philipz at 10:03 PM | Comments (0)

February 14, 2006

February 04, 2006

抗噪音的BOSE耳機

bose_QuietComfort2.jpg
春假期間參觀101的BOSE專賣店,看到一只神奇的耳機,具有噪音消除技術(Acoustic Noise Cancelling),其前方螢幕正說明此耳機是從軍用設備所演進,包括飛行員及坦克駕駛的耳機。在視聽過程,旁邊家用視聽音響正播放音樂,戴上後還是聽到旁邊音樂,但當耳機開始播放,卻完全聽不到周遭聲音,包括旁人的對話。
其噪音消除原理,在科學人雜誌有介紹,主要是"運用破壞性干涉,抵消外界的噪音",高頻的噪音可以透過耳機外殼和邊封襯墊才消除,但是低頻卻容易穿透,所以透過反向產生相同聲波來抵消。因iPod熱賣,導致"iPod耳"的病症,新聞「iPod損聽力 男子打官司」,就因為外部噪音干擾,使得音量加大造成聽覺損傷和耳背。所以iPod可以配上這抗噪音的BOSE耳機,但可能汽車警示喇叭也會聽不到而造成車禍吧,^_^。

Posted by philipz at 01:41 AM | Comments (3)