2013年3月25日 星期一

2008-2009 SUN TECH DAY筆記 & 感想


2008-2009 SUN TECH DAY筆記 & 感想
上次參加JAVA TWO 的活動是2006,這個連續使用多年的活動名稱在2007已悄悄的改為「SUN TECH DAY」,去年錯過了,今年終於有機會參加,參加後第一個感覺,不,應該說感觸,就是昇陽慢慢在式微了…
無論活動規模、贈品、獎品、抽獎、合作廠商、討論主題、茶點…都比以前遜色不少,讓人不禁害怕,昇陽,能撐得下去嗎? 若不幸撐不下去,JAVA有未來嗎? 這問題我覺得倒不用擔心,JAVA相關產品及社群力量都已非常成熟、壯大,IBM, Google 等都是擁抱JAVA技術的大廠,JAVA若有危難,他們絕對不會袖手旁觀的~
回到今年主題,記得過去的JAVA TWO 活動都會有個主題,例如有一年是J2ME,相關廠商就會分享他們在J2ME的研究成果,當然順便會有些解決方案介紹,前年則是集中在當時非常火紅的Ajax,類似研討主題至少有3~4個。到去年,本來2天的活動已縮成1天,主題集中在SUN自家的產品技術介紹,以前最喜歡聽的一些關於Third party的實務應用及經驗分享已經沒有了,有那麼一點失望。
今年聽的幾個主題包括技術面的 JDK6.0 Update10, JavaFX, ZK, Ruby on Rails,以及昇陽產品介紹Netbeans,GlassFish, opensolaris
jdk6.0 update 10 :
為何強調 update 10?這是主講者強調的 update 10前一版本是 update 7,中間跳過89,用意是要突顯10這版的確是大躍進一版,由於focusweb應用,主講者只針對了 Applet部份介紹。 Applet過去一直被垢病地方是啟動慢,applet程式錯誤會導致整個Browser Hang住,以及我個人慘痛經驗,就是Browser版本升級後,本來能跑的 applet 因為browser安全政策變了而全部躺平,有的則是JRE本身版本前後不相容,這些搞到最後就對 applet很排斥。
這版其中一個特點是runtime環境從本來與browser 共享 resource之設計(同一個process),改成自己獨立一個process運行,就算applet掛了,也不影響browser運作,其中神奇之處是在網頁上的applet可被拖出來變成獨立的 standalone application,網頁關掉後,該applet,不,此時已經變成 desktop application仍然是活著的,演變至今,Applet Swing之間的界線已變得模糊,兩者再也不需分彼此~
AppletBrowser分開process的設計,與 Google Chrome browser相同,Chrome browser號稱一個分頁掛了,不會連帶影響其它分頁,背後也是分開process的,這種設計不知道是誰參考誰的了。
再來新版的 Applet處理3D流暢度提高不少,會場展示了用Applet寫的3D網路射擊遊戲,以及類似 Google Earth效果的美國山脈分佈圖,都展現了驚人的3D效果 ! 在網路遊戲應用上增色不少。
JavaFX
近年的RIA(Rich Interface Application)一直由 Adobe AIR/Flash獨霸網路世界,近年Google堀起後,大量應用javascript做出許多讓人讚嘆不已的互動效果,讓週邊的 javascript library 一時間變得好不熱鬧,過去很難做到的拖拉、特殊動畫效果現在都得很簡單,此時 microsoft 也趁機推出 Silverlight,假想敵是AIR/Flash,挾持著微軟一貫以來OS的優勢,自然也造成了不少震撼。JAVA陣營類似的SolutionApplet,動畫處理對Applet也不是甚麼大問題,但近年由於大量好用Javascript library面世,已能漸漸取代applet任務,加上前面所述之applet問題,讓applet使用率節節敗退。SUN不得不推出新一代的UI處理技術,他是緊接在 Silverlight後面推出的,所以應該會有汲取到一些經驗吧。來看看 JavaFX 基本資料,他的語法類似其它 script language的定位,但寫法較高階,定位在比較初階的程式員,來看看一段sample code
for 迴圈
for (i in [0..3]) {
addNewItem("Item {i}","{i}");
}  
陣列處理
var x = [1,2,3];
 insert 12 into x; // yields [1,2,3,12]
 insert 10 as first into x; // yields [10,1,2,3,12]
 insert [99,100] as last into x; // yields [10,1,2,3,12,99,100]  
神奇吧,處理陣列很像在寫 sql,這種寫法對程式基礎較淺的人很直覺,但對已有編程基礎的人來說就很囉嗦~
簡化設定UI方式
Frame {
    menubar: menu
    content: BorderPanel { 
top: del_button 
              bottom: add_button }
    visible: true
    onClose: operation() {System.exit(0);}
}
寫過 swing的人都知道,要達成上面需求,寫起來很麻煩
 
Frame frame=new Frame();
frame.addMenubar(new menu());
frame.setVisible(true);
BorderPanel bp = new BorderPanel();
bp.setTop(del_button).
……
 
過去用 swing 打造一個很簡單的畫面,動輒幾千行程式跑不掉,用script方式打造再簡單不過了。

Binding
不得不提這個功能,UI很多元件之間是有互動關係的,例如一張圖片 300x200 大小放在 window裡,
當我resize window後,window變大,圖片不變,旁邊就會多出空白,很醜,如果我想圖片大小跟著視窗大小走,利用 binding 功能就很簡單了,
 
var frame=Frame {
  title:”JavaFX測試
  width:200
  height:400
  content:Canvas{
     content:ImageView{
         image:Image{width:bind frame.width
height:bind frame.height }
     }
  }
}
 
 framewidth,height變化時就會自動觸發 imagewidth,height變化,這點在UI互動控制相當好用,
背後就是用了trigger機制,就是所謂的「牽一髮動全身」。

有位置sensecode
html雖然是寫給browser看,但人去看html時,多少也能想像得出畫面長相,原因在於code的位置是與畫面佈局有關聯性的,
例如:
修改”>
刪除”>
我就知道【刪除】鈕是在【修改】鈕的後面,上面Frame的例子,你也可容易看出各元件之相對位置,程式碼也簡潔多。
 
JavaFX還有一個分工整合方面的好處,美工人員利用Adobeillustrator工具把美工圖做好後,可將檔案存成JavaFX格式檔案,程式開發人員打開這個檔案加入程式碼,影像處理工具上的 layer會轉換成不同的 object,程式人員再加入script動態控制object之屬性,就能做到無縫整合。
另外Java從一開始就將自己應用定位成資訊家電,以JavaFX開始之UI,將來都可在任意平台上呈現,就是Write UI Once, Run Everywhere的概念!
關於 JavaFx介紹,這裡還有一篇不錯的分析文章http://jerrylovesrebol.blogspot.com/2007/12/javafx.html
有興趣的人可進一步了解。
Ruby On Rails
Ruby on Rails(簡稱RoR)Ruby+RailsRuby是一個日本人在1993年發明的一種很高階的語言,但由於執行效能差,一直到2005年因為發生一件事,才讓Ruby瞬間暴紅。2005年一位丹麥教授發明了Rails框架,此框架堀起速度之快令人咋舌,因為裡面就是用了這冷門的語言Ruby,而順把也把Ruby帶紅了,情節有點像楊宗緯把曹格的「背叛」唱紅一般。
Rails之所以紅得那麼快,關鍵一點是它把MVC架構裡工程師所遇到的問題通通解決了,對比目前許多MVC框架的大量設定檔,他以減少了大量CODE及設定檔為志向,相信「習慣」,籍由事先講好的命名習慣、檔案擺放習慣,工程師只要遵守這些習慣,底層框架就能自動幫你搞定許多鎖碎事項。目前我們開發一個系統,所用到的third party林林總總,model會用springview會用 struts,儲存層會用 hibernate,單元測試會用 JUnit,最後部署時會用 ant,要寫一堆 build task…等。RoR可說一手包辦,籍由背後隱藏的Code Generator機制,讓你寫少少,做很多。
RoRproject中只要新增model或頁面,他會自動幫你產生好所有model相關的單元測試、功能測試、整合測試的外殼,測試用到的相關database你也能輕鬆的建立出「開發版」、「測試版」及「正式版」的database。現場示範做出一個有INRD功能頁面,從頭打造花不到5分鐘,堪稱目前市面上開發速度最快的框架。
目前 Sun已經在他的Netbeans中已經支援RoR,併且再籍由 JRuby,可讓 Ruby語言使用javaAPI,甚至部署到 Java application server,而Sun所推之AP Server GlassFish,也號稱已將 ruby執行效能提昇2倍,相信會開始吸引一些企業用戶。
在聽到整個 Rails概念後,猛然發現他整個概念就是中冠ipms所做的事情,定義命名規範、目錄擺放方式、一系列的 code generatorstructs框架,原來整個世界其實都是遇到類似問題,只是各有不同解法,從IPMS與外面當紅的Rails框架理念之接近,突然間覺得原來中冠底層很多理念其實已與世界接軌了(講起來不會臉紅嗎?)
Rails
框架紅極一時,大廠開發工具也開始重視,慢慢支援工具變多,讓整個框架使用起來極為便利,這讓我想到,目前中冠的一系列底層規範、tools也的確少了開發工具支援,假以時日,我們也成功發展了Eclipse相關plugin,一定能大大提昇生產力。
ZK
介紹了幾個很popular的處理ajax應用,有 jQuery+DWR, GWT, ZK,分析了一些優缺點,由於主講者於ZK公司任職,難免最後會力推ZKZK的原理是撰寫 xml檔案表示畫面所有element的佈局,由server一支servlet parse看懂之後再幫你把相應的html, javascript response到前端,由於這工作極耗資源,我相信內部應該也是採用類似jsp處理方法,gen過一次會利用cache機制,xml有修改時才會重新parsezk xml範例如下,副檔名為 zul
        







這種應用方式已跳脫了html範疇,你必須學這種新的語法。在全新開發專案中這樣寫是沒問題的,若想在既有程式裡要用zk,也行,他也提供你在既有html上面先自定 namespace zk component鑲進來
他也支援 jsptaglib
顯示zk為了相容於既有程式,真的下了不少功夫。不過,如果你是全新的專案,建議最好還是全部用 zul方式設計,因為zk還有個好處,他可以真正的跨平台,不只跨browser,還能跨device,相同的 zul 檔案可完全移值到手機上,因為zul只是個抽象的意念xml,完全不涉及任何實作技術,所以zk就可幫你到處搬,哪天要讓家裡冰箱的LCD螢幕顯示這個畫面相信也是能辦得到的。
小結
整個會場因為是sun主辦,有了技術應用,自然少不了工具,當中會穿插昇陽的周邊工具介紹,這些工具幾乎都open source的,server GlassFishDBMySQLIDENetbeansOSopensolaris,這些都免費的,昇陽近年也開始慢慢積極走向open source之路,我覺得中冠慢慢也可多多survey這方面的產品,除了目前大型企業ERP導入外,也慢慢組合出一些中小企業的解決方案,如(open solaris+GlassFish+MySQL),在可預見未來幾年的不景氣下,也許不只中小企業會合用,一些想省錢的大企業不一定也會喜愛,如此產品才會多元,企業靈活度才會高。不過表面的省錢效益,建基在背後產品及技術研究的精力、時間,如何才能權衡值得我們研究研究。

沒有留言: