COSCUP2008投影片
講完了好累,雖然只是粗淺介紹的東西,但還是讓我花了一段時間想要講啥。由於之前應碟爆掉的經驗,所以這次改用google docs做,做簡報來說感覺還蠻夠用的,下次我看沒啥意外就都用這做好了。
COSCUPのプレゼン終わった~疲れた~、時間が短いから少ない内容だけど、準備にもかなり時間がかかった。ラウユンのネコビンプラスGlassFishサンクス。
講完了好累,雖然只是粗淺介紹的東西,但還是讓我花了一段時間想要講啥。由於之前應碟爆掉的經驗,所以這次改用google docs做,做簡報來說感覺還蠻夠用的,下次我看沒啥意外就都用這做好了。
之前因為自己在寫的東西時有用hudson(Extensible continuous integration engine )做CI,所以在公司的環境也把Hudson用起來了,之前懶得用是因為還得用ClearCase和修一下ant build.xml,現在試用起來感覺還不錯呀。Plugin(頗多的)是直接都顯示出來,方便我直接把CC的plugin用好。只是Mantis plugin還沒搞清楚,可以設帳號密碼讓我在簽入時打上fix issue號碼就可以自動幫我填入comment,但是這樣不都同個帳號...。但是我覺得還蠻好用的,建議大家可以試試看,使用也很方便,下載war檔案後java -jar hudson.war就可以執行了!!
う~んhudsonいいねぇ、簡単で使いやすいよ。仕事でCCつかってるからどうなるかと思ったら、CCのプラグインがあって良かった良かった。
一早看dzone看到,原文在這邊,終於在雇用JRuby之後的另一個動作了。讓我想到之前看TSS就有說怎麼只雇JRuby,也一堆人說為何是Ruby不是Groovy or Jython。不管如何,這應該是好事情吧!!讓我想到一開始.Net支援多語言時Sun我記得不看好到現在,時代變的真快XD。附上兩位被hire的Blog,Jython's Future Looking Sunny、The Sun is going to shine on Python。
最近開始在玩Android了,雖然不知道來不來的及完成想做的東西,但是就邊寫邊順便把一些東西筆記一下。Android本身算蠻好寫的,文件也還算充足,但是不知道是不是個人問題,總覺得每次要查資料都花我非常多時間有點難找,我在寫其他東西時感覺也不會花到那麼多時間。另外推薦一個英文語系網站anddev.org,算是蠻多資訊可以找的,當然如果是中文使用者也歡迎到jJavaWorld@TW一起討論,現在水有點少orz...。
這次遇到的問題就是非GUI Thread該怎樣更新畫面的問題,是因為像Swing有SwingWorker了,所以我就想說應該也有類似的東西吧,不然如何在非GUI Thread內更新畫面呢?後來在anddev.org查到了這個範例Pizza Timer, 簡單說就是他有提供一個Handler類別,透過發訊息給Handler的方式告知他更新畫面。所以code會類似:
其實這樣看有點奇怪,為何Handler只要收message就可以正確運作,可以看一下他的javadoc提到"When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables to that message queue and execute them as they come out of the message queue.",以及這頁Developing Responsive Applications。所以看來這樣應該就可以了!?如果有更好的方式歡迎告知:)。
最近正熱的議題?其實我怎麼覺得好像在半年一年多前就有國外媒體還是誰提過?所以已經有點冷感了。而小弟本身就是資訊焦慮者,每次遇到升級就會非常想幫手上的東西升級(我知道這是壞習慣XD)。剛好看到Mr. Saturday回了一篇有關升級的文章,所以也講講自己的看法,因為我自己是寫web為主,所以是以我自己在web開發的經驗跟想法。他提到”也因此,小弟公司內部有一個 team 叫做 Java Infrastructure Team,每次 Java 預定要推出升級的版本時,他們就如臨大敵,工作量暴增...”,說實話這不管在使用任何技術都會有類似的問題吧?我想這問題應該可以分成兩部分,一個是真的有需要因為人家推新版本就跟著更新?另一個則是Java升級新版本是否有這麼痛?
如果公司規模大到上百上千工程師都靠Java,還有自己的infrastructure的話,那當然應該隨著版本更新就必須跟上和檢討,這種規模的公司投資這種Team應該是很值得(星期六提到了MapReduce!?只是我怎記得他是C++?Hadoop才Java?所以星期六應該是在Google工作囉!?),難不成會希望利用的技術更新速度慢一點或不要升級嗎!?,整個公司都靠Java為主力了那應該更希望他能一直改進吧!?這種公司人員教育上也應該要有應對方案才對(不知道是不是有什麼工作或技術是員工不需要學習就可以吃一輩子的)。從Java以前到現在大的升級大概都是一兩年才一次(之前還更長,從6開始速度會更快),Java本身在升級時雖然有api deprecated的狀況,但是我記得sun不會將deprecated的api移掉。JavaOne sun介紹Java6的投影片,Java在大版本號的升級時做的相容測試還比我軟體升級做的還徹底多了。我自己手頭上做過的案子遇過最大問題大概就是因為使用了非公開api,例如com.sun開頭或是application server的api或是使用了沒有原始碼的工具而造成無法順利升級以外(Swing很少寫,但是看來問題比較多一點),其餘都算是換版本也能順利解決和執行。
而像其他公司,依照專案為基礎或做產品的,真的有需要每個版本一出來就迅速升級嗎?像我們有個EJB base的專案,用到了一個inhouse且以EJB為基礎的framework,結果現在那個單位消失了,我們也沒原始碼沒辦法處理,他剛好用到了weblogic和JBoss的API,那個系統就只好一直在J2SE1.4跟指定application server的環境執行無法升級了。但是到現在也沒遇過什麼問題,還是有一批人幫他新增功能也順順利利,也沒人想去幫他升級了,遇到軟體有Bug或是環境的問題時,最遭的狀況也總是有辦法繞一圈處理掉。到現在我們部門遇到最痛的升級問題大概就是有個系統是ASP寫的,結果要找人維護竟然找來面試的每個都說會ASP.Net而不會ASP,看主管花了比預期還久的時間才找到人,這算是不升級的痛嗎?
我認為確實升級會是個該面對的議題,但是它也是使用任何技術都會遇到的問題,只要有人在維護的東西,就會有升級的問題,而Java在這問題上已經算是相對容易的了,至少不是特別難。如果有東西不需要升級的狀況,那總有一天環境會逼迫你切換到另一個技術,因為他已經跟不上環境的變化了。想想很有趣,剛好小弟同事在不同部門使用.Net接案子然後最近接到以Java的案子對小弟抱怨說,Java怎麼那麼多東西可以挑,該挑哪個!?讓我想到,當大家沒有選擇時,會希望有多種選擇可以挑,當選擇太多時又覺得怎麼各有優缺點,這個不好那個不好,乾脆沒得挑最好。技術更新也是,當他更新速度太慢時,覺得這技術會跟不上環境的變化跟潮流,當他更新太快時又覺得變化太大來不及應對,該怎辦呢!?
PS."很不幸地,你必須去苦苦追趕程式語言的升級",我覺得好刺激,真想體驗看看!!果然沒嘗試過的人比較愛幻想,真的遇到可能會邊幹邊升級吧XD
今天升級後跑某個功能時會一直出現outofmemory error,我一度懷疑是velocity出問題,沒想到..花了我一個晚上追好像是MySQL的問題。這個部分以前的code裡面sql像這:select hour(time) as id from mytable group by id order by id desc,雖然一天只有24小時,但是這樣一撈,table裡面的東西好幾萬筆就真的撈出好幾萬筆(因為table自己也有id欄位)。但是這件事竟然在升級時才發現,難道以前的MySQL這樣可以跑,而且只會24筆!?orz...。改成select hour(time) as hoge from mytable group by hoge order by id hoge就可以了。