星期日, 2月 27, 2005

Music from Howl Moving Castle: Merrygo-round of Life

雖說這幾天玩 mac mini 玩到瘋了,哎… mac 實在另人又愛又恨啊,說來話長啊…
先不談這個,今個兒拿到了霍爾的 OST (Original SoundTrack)



真是好聽呀。opening 之後的 空中散步 圓舞曲,聽了之後腦中馬上回憶起蘇菲和霍爾在園遊會的上空漫遊的場景。這一幕配上這個音樂真是讚 (想不出啥好詞…) 隨後的是 さすらいのソフィー (流浪的蘇菲),這一段比較長,利用主題曲的不斷變奏來描寫流浪的各種情境。大概是一分半的左右吧,有一段不知是用什麼笛吹的,略帶著滄桑之意,這一段我 也很喜歡。サリマンの魔法陣~城への帰還 這一首前半是沙利曼的光魔法,那個像是異族的聲音聽來很詭異。後半則是坐飛機逃走,很有天空之城之影子 (誰叫它飛機要設定的這麼像咧 ?)

花園 這一首帶哀傷的氣氛,卻充滿了情感的張力,有點欲言又止的那種感覺…(我到底在說啥?) 後面的 戰火の戀 也有一部份跟這首很相似,不過戰火那段帶來的感受卻大不相同,比較像是充滿歷經苦難,終於開花結果的感覺。

除了以主旋律為主的音樂之外,其他的多半都是乒乒乓乓的打仗、奔走等等配樂,不適合單獨聽啦… 片頭和片尾都有一段叫 人生のメリーゴーランド (人生的 merrygo-round,旋轉木馬) 我想這就是主題旋律的名稱吧。啊,只要不放棄人生都還是大可轉圜的。

總之很好聽囉,這陣子不愁沒音樂聽了!推薦給大家~~

星期二, 2月 22, 2005

Spring Training

當然,這不是補習班的 Training... 業界是不會有 open source 技術的 training course 的。過去我們這個 team 在採用技術時,都是先請顧問來教個一兩天 (Struts & Hibernate) 然後我們就開始自己 Coding 。而這一次要導入的是 Spring Framework,原因是…
我自己想用!
前先日子花了很多工夫鑽研 Spring,發現真是棒啊!真的很想在我們的專案裡導入。可是呢,礙於其他人的對 Spring 的熟悉狀況不一,而且採用 spring 一開始並不會有立竿見影的效果,想要導入還真的不容易。為此,只好自己下海,充當起臨時教練。拿起現有所有可得的書東抄西湊的,總算弄了個 50 張投影片,這50張還只是 cover 一半而已 (spring 東西還真多)。今個兒就花了一整天跟組員介紹 Spring 的基礎,以及 persistence 相關的主題。另外,也設計了幾個小 LAB 讓大家練習練習。

事實證明,真的要讓大家做做 lab 才有用。有些人吸收很快,三兩下lab 就做完了。有些人則很明顯,我講的東西他大概吸收很有限… 一做 lab 就發現問題層出不窮。遇到這種情形,我真擔心導入 Spring 對我們 team 會不會太早或太苛求?個人是個 Java geek,就是那種很喜歡玩新的 或是自個兒打造 Framework 的那種人,玩這種東西比吃飯還簡單。但對於接觸不深的人就很麻煩了,要導入新技術,就要花很多時間拉拔這些人… 之前還未做 Training 時我就考慮很多這方面的問題,不過到是沒想到,TEAM 裡的技術之差異居然有這麼大。

念及至此,我反到覺得更要導入 spring 了,對那些 junior 的 programmer,更要強迫他們使用 spring。原因是 spring 提供許多便捷的工具,以及更不易出錯的架構。雖然那些不熟的人一開始可能不曉得為什麼要這樣做/那樣做。但最少,他們寫出來的,整體來講問題會比較少。像今天講課提到的 jdbcTemplate 就是個很好的例子。與其放任他們寫 free 的 jdbc code,倒不如要求他們用 jdbcTemplate,雖然一開始學會比較慢,但長期來看問題反到會比較少。

個人認為,除非 server-side java 有新的特別突破,我相信 Spring 應該是我們 team 導入的最後一個 Framework 了。剩下的,就是一直換新版這樣 (如 Hibernate2 -> Hibernate3... etc)。不單單是因為 Struts + Hibernate + Spring 已足夠應付開發的需求,也是因為 "玩" framework也該有個限度 (雖然我很喜歡玩...)。就技術層面來看,Team 裡(包括我自個兒) 下一個階段比較需要加強的是 domain 的設計及 performance 的 tuning。
 
 

星期日, 2月 20, 2005

From NX70 to Treo650

終於拿到 Treo650 囉,不過跟 NX70 一比.. 怪怪:

怎麼沒有像 MS Import 的工具?
也沒有 Backup 的 tool...
鬧鐘的功能有跟沒有一樣... 只能設時間不能設日期...
而且連最基本的 File Manager 都沒有!太扯了!

也許 palm 本來就是這個樣子吧... 現在才知道 CLIE 的好啊~~

anyway, 找了很多軟體:
  • Card Export II 2.2
將 SD 卡 Export 成一個 USB 硬碟,安裝完後就直接可以用了,windows XP 不需要額外的 driver。速度不錯,我 copy 了 1G 的 mp3 沒有出錯,相當穩定。
  • FileZ 6.5
隨便找來的一個 file manager,還不錯用。可拿來硬殺一些其他 file manager 殺不掉的檔案
  • zlauncher 5.10.3
以前我在 NX70上都是用 Launcher X 的.... 後來聽說作者消逝了... 只好換別的了,zlauncher功能相當強大,而且有內建 File manager,也支援 Treo (上面有圖示顯示手機收訊狀況) SD card 插入時也會自己跑出一個 file tab 出來,很方便。缺點是:超醜!醜斃了!雖然有很多 theme 可以選,但是個人對那種審美觀... 不敢領教。而且很多地方看的出歷史的鑿痕... 在舊的 low resolution UI 上再加上新的 high reolution 的 UI,新舊穿插很不協調...
  • CJKOS 4.62 (港版附光碟)
只有一個字,醜..........
我要掌龍啦~~ 掌龍有沒有計畫要支援 Treo ? 還是已經....
anyway... 以上只是就字型的 complain.... 使用上還不錯啦,撘配前輩的 Unicode 補完計畫
+ 草蝦輸入法後,真的是如魚得水。他的 cManager 可以將字形放在記憶卡上,我只放 16x16 的在內建記憶體裡。不過令我驚訝的是即使是放在卡上,用起來也很快 (完全沒感覺有 delay) (Treo650+CJKOS+ATD 66x 1G SD card) 讀字型遠快於 (NX70 + 掌龍 + MS card 128M),於
是誰貢獻的多,就不清楚了。
  • PowerRun 1.3
將程式與資料一併放到記憶卡的好東西,這就不多提了。1.3版在 Treo650 上工作正常無誤。
  • Agendus pro 9.02
個人愛用的 PIM 強化工具,支援點 contact 直接 dial。可惜有時後不曉得為什麼會突然 soft reset (還好不常發生)
  • Textplus 5.6
5.6 版正式支援 Treo650。這是英文 type saving 的工具,就是打了 te 它旁邊會出現一些相關的字詞 (如text, test... etc) 讓你用 5-way navigator 直接選。
  • Palmary Clock 3.02
palm 本身附的 world clock 不敷使用。找來找去,先找到這個頂著先。有附碼錶,鬧鐘也可以依禮拜幾來設定,也可以與 Aeroplay 或 pocketTunes 搭配,改用 mp3 當作鬧鈴聲(不過我用不到啦....) 只可惜太大了,足足 1MB。因為鬧鐘需要常駐,所以不能放在卡上...只是為了個鬧鐘就花了 1MB 真是太浪費了...
  • pocket tunes deluxe 3.0.6
mp3/ogg player, deluxe 版多支援 wma。買 treo650 不單單只是想要兩槍合一,還要達到三槍合一 (music player+手機+pda),這樣以後一付耳機,一台 Treo,就什麼都打發了。乾淨俐落! 1G 的卡放 mp3 真的是夠聽了,( 我用的是 ADT 66x )
ok, 回到主題,這個 player 還不錯用,加上Unicode補完計畫後,中日文都可正常顯示。也支援 Treo650 的 volume 控制 (左側邊的手機音量控制鍵),我大多數的音樂都是 ogg 的,跑起來也都正常,不會有什麼 delay。音質的話受限於 Treo650 硬體的限制... 所以... 不過,它提供 5 格的 Equalizer,還有 bass boost。equlizer 是建議一定要調,稍補硬體的不足。但是它的bass boost 就免了,破音連連,勸大家還是不要用吧...其他特異功能像是接電話/掛電話後都會直接回覆到剛播放的曲子,很方便。更扯的是 hot sync 時音樂也不會中斷,雖然聲音會一頓一頓的,但總比 hot sync 完還要去開一次來的方便許多。
  • Aeroplayer 5.1.1
也是 mp3/ogg player,中日文一樣 ok。不過不像 pocket tunes 一樣支援 treo 的手機音量鍵。它也提供 5格的 equalizer和 base boost,特別的是它 base boost 可以調 level,而且完全不會破音,而且聲音聽起來飽滿了許多,大大的補足硬體的不足啊!讚!可惜的是它不像pocket tunes 一樣... 它 hot sync 時音樂會斷,而且 base boost 吃 CPU 似乎也很大,放在背景聽,前景程式會變慢許多,音樂也會開始頓頓的。(聽音樂 + 玩 Bejeweled 明顯比較慢) 另外,它一啟動時,每次都會去掃 card 上的 mp3,而且很久,頗浪費時間。
  • realplayer...
這是啥?可以吃嗎?


音質不負責任主觀比較 (耳機為 Etymotic ER-4P + 隨便買的2.5->3.5轉接頭 )

     iAudio M3   NX70     Tre650       Treo650
software  --     built in player  pockettunes     Aeroplayer
tuning  (enable BBE) (bass level 1)  (enhance bass by eq) (enable bass boost)

飽滿    10       9      8         8.5
清昕    10       9      8         8.5
音場    10       9      8         8

註:
  1. ER-4P 本來的 bass 就比較薄一點,所以個人偏好加一點 bass...
  2. 視 iAduio M3 為滿分的前提下比較
  3. 不論是 pocket tunes 或 Aeroplayer,如果不加強一點 eq 或是用 bass boost音樂都乾澀難以入耳....
  4. 除了 NX70 用 256K mp3 外,其於都是 ogg

星期五, 2月 18, 2005

ハウルの動く城 之我見

今個兒終於跟同事去看霍爾了,看完的第一個反應就是 惑爾 啊~ 真的是大大的不懂。原本還以為會有很感人的橋段,結果其實也還好嘛… (為此還被同事譏笑~~ )。不過回來的路上到是好好重新想了數遍... 這一齣戲的主軸,與其說是愛情故事,或是變幻莫測的魔法,我反到認為是 "內心的反映" (一時想不出好詞…)

整齣戲最讓人疑惑、驚喜的便是主人公 蘇菲 一會兒年輕一會兒變老。一開始蘇菲被詛咒時,頓時變得非常年老,90歲的外貌便像是蘇菲當時的內心:處在不確定、退縮、安於現狀的心態 (她不肯面對自己不想繼承家業,不想做帽子,而且一直對自己的外貌沒信心)。當後來她在莎利曼面前,義無反顧的直言她了解、愛護霍爾,她的外貌一瞬間回覆到原來最年輕的樣子,此刻她的外表正反應她內心充滿著勇氣、愛的樣子。後來有很多橋段都可看出,當她願意放開心胸,鼓起勇氣時,外貌便越來越年輕 (像是到花園,或是霍爾替她做了她老家的臥室);又像是她無法接受霍爾對她的讚美時,頓時便從年輕變為老婆婆... 這些一連串的變化,我想這是宮崎駿想要表達一個簡單的道理:當心深鎖,逃避時,你就像個很老的人一般,病厭厭的;而當打開心胸,勇敢擁抱時,你便整個人年輕了起來,神采飛揚。你的內心才是你真正的外貌。

說到最令我印象深刻的橋段,是當霍爾自卑於髮色變深,身體變成一沱綠泥時… 蘇菲彷彿看到了她自己一樣... 終於忍不住在大雨中痛哭... 這一段我覺得最另人動容。其他什麼戰爭、魔法的,我到覺得都還是其次…

宮崎駿的電影向來都會有關懷社會的一面,像是風之谷講的是環保,神隱少女則是諷刺現代人的暴食浪費,而霍爾則有人引申為現代的社會已經是高齡化的社會,鼓勵銀髮族 "人老心不老",勇於開創第二春。(不過我覺得這樣轉太硬了…)

總之... 霍爾算是不錯的電影啦,可是遠遠不及神隱少女當初帶給我的驚奇、感傷及快樂。建議有興趣的人到時可以租個 DVD 看看。不過,到電影院則免了吧。
 
 

星期一, 2月 14, 2005

手又癢了,又給它錄了一首 SRW OG2

本來以為很久沒電動,本想對電動音樂的熱情該差不多熄了... 這一次玩了 OG2 後,那個ラトゥーニ的音樂真是讚啊 (雖然只是 GBA 音源),又給忍不住錄下去了。看來這種錄 BGM 的習慣是改不了:

17 Fairy Dang-Sing.mp3 按右鍵另存新檔後,將副檔名的 .bin 去掉即可

好聽好聽~~
 
 

測試一下圖片功能

剛註冊了 flickr ,這玩意還真是漂亮啊~



Normal Size:
<iframe height='630' width='720'
src="http://www.flickr.com/photos/xexex/sets/120058/show/" >

Cutted Size:
<iframe height='630' width='533'
src="http://www.flickr.com/photos/xexex/sets/120058/show/" >

圖片裡是我最近想敗的 Treo 650 配件 (啊 Treo 650 還沒入手就先想配件,真是太敗家囉)。可惜的是 TreoCentral 沒有賣到台灣... 氣死了 !
  

星期六, 2月 12, 2005

好久沒寫啦,一堆 Spring 雜感

真是有夠久沒寫~~ 現在想想大概是因為後來的文章越寫越大篇,料雖然很多,但是反而變成寫BLOG 的阻力... 下次該寫一點點就好囉。

最近發生很多事:
  • 我 們的系統上線了~ 大概已經過了一個月吧,這個系統開發時導入 Unit Test 與 Continuous Integration。目前累積了大概 1500 個 unit test 吧,改需求/新增功能 都難不倒我們。 team 的人都說還好有 Test 這個 "安全網" ,不然喔上線後,不僅改功能無望,搞不好還得加班熬夜修東修西的。當初我嘗到 test 的甜頭後,便在 team 裡面不斷的 "叫囂" 說要大家寫 test ,現在總算是開花結果了。(個人用了很多嚴重的字眼逼大家寫… 還好結果不錯,不然我會被公X到死~~)
  • 1500 個 unit test 要 run 多久? 加上 database 的 rebuild 大概要 30~40 分鐘。這真的太久囉。原因是我們用 ObjectMother 太多了,這個 ObjectMother 大多跟 DB (hibernate) 綁在一起,所以花了很多無謂的時間在 load hibernate configuration/insert/delete data上 ( ObjectMother with Hibernate 這個用起來太方便了,導致很多 test 都扯到 DB )。下個專案要多多改進 -- DB layer 還是要盡可能的 decouple from business logic啊
  • bug 的數量與TestCase的數量成反比!還有什麼比這個更有說服力呢? Unit Test Rules !

oxoxoxoxoxoxoxo Spring 分隔線 xoxoxoxoxoxoxoxoxo

這 個系統後來我導入了 Spring... (擅自導入到我負責的 module...)。當初因為它又需要額外的 xml 檔,使人望之卻步 (refactoring 的大敵 !) 嘗試用了一個月,只能說真是相見恨晚啊。Spring 真的是 J2EE 開發者的天堂。Spring 的 IoC 只是個吸引人的點子 (別家的用起來反而比較簡單) 真正誘人的是它幾乎整合了所有 J2EE 開發的所有工具:新增 (如 declarative Transaction)、修正 (如 HibernateException 變 unchecked)、簡化 (如 quautz scheduler)、超輕量 (一個 container 居然只要幾個 xml 檔,真是太扯囉)、潛力無窮 (AOP)… etc 太強啦:它可不只是超級萬能瑞士刀,它是小叮噹的四次元口袋!拿得出一卡車的工具且還比瑞士刀輕 !! 哇靠這種好康上哪找啊!

Spring + Hibernate == 現在寫程式的人真幸福

把 Spring 拿去跟 picocontainer / hivemind 去比的簡直是頭殼壞掉,這就像是拿 tomcat 和 oracle db 比一樣荒謬。

現 在還沒嘗試的還有 Spring web,不過好不容易我們的 team 都已經搞清楚 Struts 的脾氣了 (真的是愛恨交加)。如果真要再花半年 Train Spring web,寧可勸大家改學 Tapestry 還比較划算。啊~~~ 真是懷念以前寫 Tapestry 的時光啊。anyway 來看看最近 K 的書吧:

Spring 書推薦:
  • J2EE without EJB (不是全名,請自行查 google) 這本是founder Rod Johnson 自個兒寫的,講了好多大道理啊。前半本大說 EJB 的不是,舉證例例,我是看了一點就狂睡了,基本上嘗過 EJB 的苦頭,就不必再多花時間囉,可直接跳到後半看 Spring。這本是講 Spring 的原理最詳細的一本,時間夠的話,這本是第二本必看的書。
  • Spring in Action, in Action 系列再下一成,這本是Spring 書中最簡單的一本,推薦入門者先看這一本。用 Spring 該具備的觀念都有提到,Spring 所有重要的功能都有涉獵。我常常就直接拿他的範例 code 給它這麼一 copy/past,就直接可用了。(其實也是因為 Spring的設定太簡單囉)
  • Spring Live (Matt Raible 著) appfuse 的開發者。這本是 source beat 的電子書 (只出電子版) ,更特別的是出版後一年之內作者還會追加章節,現在出到第11章了。這本是最 practical 的一本。帶你用TDD 的方式使用 Spring,而且提供 Spring整合其他 framework 的各種作法 (超級多),還有很多實用的技巧。作者本身也是邊學邊寫完這一本的,所以很多大家會遇到的問題他都先碰到了。老實說作者原意是將這本寫成入門書的,其實定 位也是啦,只是他用的概念/framework 實在太多太廣 (光是 TDD 的開發方式就會讓有些人進不了門) 我覺得還是要在 java 界混久一點的人才適合看,作者的 blog 還蠻受歡迎,大家有空可以去瞧瞧。
  • Pro Spring... 剛出… 還沒入手… 有800頁厚
  • Professional Java Development with the Spring Framework 還沒出,不過是 Rod 那群人寫的,這一定是要入手的啦
  • Better, Faster, Lighter Java (Bruse Tate 著,bitter java/ejb 作者) 很小本,純講理念的居多.... 我承認我看不去...
一 個技術到底受不受歡迎,看廣告、看補習班、或是看 forum (TheServerSide...) 講的天花亂墜都不準。看市面上書的數量最準。用的人多了才會有人肯寫書,Struts 雖然不是什麼 jxxx standard,大伙抱怨也不少,可是書多到嚇死人。現在 Spring 相關書藉一直增加,再過不久就要變 de facto standard 囉,先學先賺先享受。

oxoxoxoxoxoxoxo Spring IoC 分隔線 xoxoxoxoxoxoxoxoxo


回 到 Spring 的正題,IoC。導入 IoC container 到系統... 目前我的感覺是有好有壞,好是好在一旦使用 IoC 的方式開發,程式會漸漸 decouple 並且 high coherence (這個詞真難翻,意思是模組的凝聚力高,該自己負責的功能就自己負責,不會跟其他模組混在一起。跟decouple的意思差不多) 壞是壞在很容易掉入 AnemicDomainModel 的陷阱。用了 Spring,物件該有的功能/行為,一不小心就會寫到最外面那一層的Service (facade)去了,原因是:
  • service 那一層通常是 injection 的起點,這一層在整個 Application 中是一定要在 Spring 內設定的 (因為通常也是 Transaction 的 boundary )
  • 再 加上 entity (通常是 PO, persistence object) 很難做 IoC ,為了能讓各種功能 "外包" 出去,自然而然的便在 service 層大興土木 (entity 大多是由 "new" 及 hibernate load from db 時產生的,這兩種生成方式不受 Spring 管,而且通常 entity 數量很大,讓所有 entity inject 相同的 bean 通常會有 performance 的考量) 。
  • 最後由於 Spring 建議 bean 最好是在 container 裡是 singleton (這點沒錯)所以最好 bean 都要 thread safe,而最簡單的 thread safe 的寫法就是將 object 寫成 stateless...
這樣的結果是? -- 會變成 Service 外掛很多的 statless util ,然後 entity 本身只剩下 getter/setter。變成只是個好看一點的 Transaction Scripts 。domain object (entity) 連個行為都沒了,變的很 "貧血"。

為此,又回去翻 domain 聖經 "DDD" (Domain Driven Design) ,有了一些新的感想:原來關鍵還是在 OOP 的設計 (value object 和 entity 合作)。這個等到有比較具體的想法和實際做過後再提吧。