星期六, 12月 27, 2003

無間道Ⅲ大啟示


一.說一個謊得用十個謊來圓。同樣的電影也是,狗尾續貂的劇情,保證只會製造出更多的漏洞。

二.想敷衍別人時千萬別說"別擔心~過了明天就沒事了",因為保證明天會出事。

三.想要認識絕色美女,請隨時保持憂鬱的眼神,再讓自已經常處於情緒不穩的狀況,如果可以最好是別忘了隨身攜帶煙灰缸。

星期四, 11月 27, 2003

是大失血還是大豐收呀?!

一晃眼到深圳快二個月了,最近才開始進行血拼的動作,上週末才在華強北買了不少PS2的遊戲(與台灣價差約1:5),昨天又到了羅湖商業城血拼,羅湖商業 城位於羅湖火車站附近,是前往羅湖口岸的必經之地,許多香港人也很喜歡來此購物喔,原因很簡單,這裡就是所謂的A仿集散地囉。

透過已是識 途老馬的同事指引找到店家後,由店員帶我們穿過了九彎十八拐的小巷,不久後我們就來到了神秘的小倉庫。一進去,嘩~怪怪隆地東,裡頭花樣可真不少,什麼貨 色都有,如PRADA、GUGGI、LV、BURBERRY、ROLEX等,嗯~雖然我不太懂這些名牌是啥名堂,不過感覺的出來料跟工都相當不錯,真不愧 是A仿呀~

精挑細選後終於到了算帳的時刻,請千萬記得在這裡購物絕不能太爽快的掏腰包,因為店家專門等著宰無知的肥羊,最少都要將店家報價先打個三折,再慢慢跟他磨。另外在這兒台幣、港幣、人民幣都收喔~

不過與同伴討論如何殺價的時候可要小心點,不要以為偷偷用英文講就沒關係了,告訴你,那裡店員英文可溜得很哩,昨天去還遇到二個香港人帶了個老外去買,那裡店員可是直接就跟那個老外溝通的喔~

星期二, 11月 11, 2003

Sliding Doors


雖然已是1998年的舊片,但其實我一直對它的劇情簡介很感興趣,
"趕上一班地鐵,很重要嗎?那錯過一班地鐵呢?
五分鐘之前你做了什麼決定呢?有沒有想過這五分鐘對你的一生將產生什麼樣的結果?
"
很 有趣的問題是不?

但看了片子後反而覺得其實片中所要表達的根本不是那麼一回事。時間就像是永不停止的巨輪,
當這個時間點過去後,逝去的時間已永不再回頭。
或許像片中一樣產生了數個不同的時空,每個時空都代表著不同的抉擇與際遇。

命運的抉擇似乎操之在我,但誰知道也或許這一切都只是上帝精心的巧妙安排。
在看 似Yes/No的選擇題中,我卻知道你永遠會選擇Yes。
哈~講這樣好似一切的一切都已是命中註定,
但每當我想起由李連杰所主演的太極張三豐中飾演大反派 天寶的錢小豪,
最後在明知勢不可為的情況下,仍大喝一聲「我命由我不由天」那種一往無回的氣魄~
才會讓我有種活在當下,真實存在的感受…

星期一, 11月 10, 2003

週六不是工作天

天殺的週六一大早還得早起去開會
早上天氣陰陰的,大好的假日卻沒一絲歡樂的氣氛
還好今天的講師帶了個四川靚妹來
外面的天氣似乎也突然跟著放晴了起來

聽一聽覺得很無聊就開始偷喵她
一個轉頭突然見她剛好也看過來
看她微微笑了一笑
嗯…趕快假裝翻一下資料繼續專心聽講 :p
心想,靠~有那麼剛好的

中午一群人跑去吃四川菜
其實平常還蠻常經過那家餐廳的
總是聽門口服務員在講:來我家吧,川菜好吃喔~辣不辣都有
今天終於有機會去試一試哩

前幾道菜還正常,到後來愈來愈辣
那種辣還真是辣到舌根,真有點讓人受不了
瞄了一下四川靚妹實在很想虧她一下
四川來的都像妳一樣辣嗎?
不過人太多,加上她可能也聽不懂,還是算了

買單時看招待我們的董總一直在看發票,覺得怪怪的
搞半天,我哩~原來發票也有假的
辨識的方法其實也很簡單
在發票上有一個標籤只要遇熱就會變色
所以就拿杯熱茶將發票靠上去一試就知道囉

星期三, 11月 05, 2003

忘了時間的錶


五年了,沒想到你還真能撐~陪我渡過成功嶺再加上二年外島風霜,依舊能屹立不搖,一分一秒的閃爍著正確的時間,雖然覺得到這年紀還在載電子錶好像有點孩子氣,不過就想看看你還能撐多久,沒想到今天才忘了帶出門就...放心吧~返台後我一定會讓你復活的~

星期一, 10月 27, 2003

熊貓與我


坐了將近一個鐘頭的車來到了深圳野生動物園,才發覺門票還挺貴的竟然要價¥100 RMB,我哩咧~深圳消費落差還真大。眼看離閉園時間也只剩二個多鐘頭了,想想算了~還是下次再來吧,不過凡走過必留下照片咩,就跟園口的熊貓拍一張吧~

星期日, 10月 19, 2003

休兵小歇擇日再戰江湖



嗨~各位親愛的朋友,最近小弟前往大陸觀光,所以較無暇上網與大家打屁哈啦,同時也深感往日時常在網上流連忘返實非長久之計,決定痛定思痛,暫時戒網。等 回台再跟大家打屁哈啦囉~ ^_^ ,附上二張照片,左邊是我近日寄居的地方-深圳發展銀行,右邊是深圳第一高樓-地王大廈,嘩~有69層樓高328米耶~

星期六, 10月 11, 2003

Software Fashion


http://www.softwarereality.com/soapbox/softwarefashion.jsp#id27


蠻搞笑的文章,原來軟體也可名列時尚業呀~
談到一些不適當的技術應用,加上誇大的宣傳、過度的銷售
讓人更能體會所謂的追求軟體時尚是怎麼一回事

生活上的例子就像讓胖妞穿比基尼,讓模特兒穿孕婦裝一樣
而在軟體開發上,就如同使用EJB來開發小規模的商用軟體
將XP應用在短期的專案上;利用taglib來加入一些新的meta-language
最後發覺除了製造混亂外,似乎對開發毫無益處
或是當團隊中的那個人閱讀了GOF後,
就瘋狂的想要把所有可能的pattern塞進設計裡

文中還有一個爆笑的面試對談
面試官:呃~請問你最愛的Design Pattern是那一個呀?
求職者:喔~我愛死Decorator,啥米地方我都想來一下Decorator耶~
(我哩~果然是有怎麼樣的考官就會有怎麼樣的答案)

而當宣傳超過人們能客觀地評估技術的時侯,就是開始發生技術誤用的時刻
就像許多時侯人們選用XML的原因,就是因為它是XML XD
這段調侃XML的部份,讓我想到最近電視常在打的廣告
命運騎寵系統狂飆上市的那隻豬,哈~我哩我還飆豬哩

順便還虧了Sams的Teach Yourself xxx in 21 days系列一把
講這些出版商唯恐天下不亂
還會趕緊出本Teach Your Micro-Horse to Sing in 21 Days!

不過當我們選用某項新技術時,到底是因為它正好適合我們的開發需求
或著只是想到這項新技術寫在履歷表上看起來還蠻不錯的?
啥…你問我是怎麼想的,呃~我只能學呂副總統回答你"嘿嘿嘿"

在Popularity vs. Platform Size那段的最後
提到IT廠商不會再咬第二口蘋果也真是神來之筆
apple fans抱歉了:)

接著就是大戰的開始
提到了三項作者認為有遭到誤用的時尚技術
1. VB.Net
2. Struts
3. XP

講到Struts時一開頭還特別挑戰了Struts的使用者
希望他們儘量放馬過來,講講為啥要用Struts
這裡的用詞有點誇張,講的似乎Struts一無是處
還要透過xml的設定用迂迴的方式增加不必要的層級
啥米用了Struts簡直是花了二倍的功夫
簡單的web ap會變複雜,複雜的web ap卻還是沒簡化到哪裡去

這裡似乎又講到一個職場的現實
這年頭出來找頭路,許多面試官也受到時尚技術的影響
於是乎想寫個web ap(java solution),似乎無可避免的還得要會Struts
不過最後的結論我蠻同意的
不管是啥米東東啦…XML現在似乎是用的太泛濫了些

對XP的評論更毒
講的是好像XP將開發速度定下了個20哩的速限
超過速限的就要抓起來
因為開發者不愛互相溝通,就來個pair programming
因為開發者不愛跟客戶溝通,就讓客戶加入開發小組中
因為開發者不愛測試,所以寫code前要先寫測試…etc

好了,可想而知在該文後面還有一大團,以上各技術愛好著的反擊
大家有興趣的可以慢慢欣賞
諸如像VB.NET是C#的窮親戚,
或是VB.NET不過就是C#之上的語法糖果之類的爭論

雖然我想作者是故意寫給人家批的
不過所點出的現象很值得大家思考

難道選用熱門的時尚技術
是因為,嘿~大家都在用,呀那個國外大廠也嘛在用,還有大師的加持哩
喔~拜託一下,有沒有就是在我們週遭的成功案例呀

老是在講彈性、彈性
切割了許多層來達到所謂的低耦合
到底實不實際

台灣真正的軟體公司到底有幾家呢?
在講究快速開發(結案收錢)的情況下,
設計出那麼多的可擴充性又如何?
我們真的需要那麼多彈性嗎?

覺得國外的成功案例是有時空背景因素在,
而過了水到了台灣後,或許我們又得因應這樣的環境來調整開發的方式。

星期五, 9月 19, 2003

各位大俠,饒了Java板吧~

流傳在BBS Java版上已久
傳統的年度大戲Copy By XXXXX
再度熱烈上映中...

故事的開端總是這樣的
一位盲劍客路見不平拔刀相助
但卻是誤斬好人

好心的僧人心生憐惜
想要為亡者超渡
盲劍客卻連僧人也不放過

公說公有理、婆說你沒道理
老天爺…為啥米躺在哪兒的FAQ都沒有人要理呀

星期一, 9月 01, 2003

在心中建模型

在【別鬧了,費曼先生】一書中
有一個章節始終讓我百看不厭的就是
『跟數學家抬槓』那段

我很佩服費曼在心中建模型那招
也一直覺得這是個很好的學習方法
不過這方法難就難在如何在心中建立模型

透過不斷的練習
最近我似乎慢慢抓到一點訣竅來哩

其實這道理講起來好像也挺簡單的
不過就是看到新的觀念時
要多思考一下,試著找找看有沒有啥米不對勁的地方
然後再試著用自已的話講出來
這也就是在自已心中建立模型了

直到這一步
才能算是真正將所吸收的東東融會貫通了起來

星期六, 8月 23, 2003

讀Refactoring一書有感

重構

其實很早就拿到這本書原文電子檔
不過語言上的隔閤卻讓我對這道美食始終難以下嚥
總是翻個二、三頁就去見周公去了
時日一久竟也忘了這本書的存在
真是要感謝侯老師及熊節先生的無償提供前1-6章的中文譯本
火熱下載點:http://www.jjhou.com/jjtbooks-refactoring.htm

首先強烈建議先閱讀本書第一章
因為實在是寫得太黯然、太銷魂啦
我真怕以後看不到這樣的好書該怎麼辦
此章透過一個逐步重構的實例來點出重構技巧的神奇
讓一隻堅硬如石的程式慢慢軟化
相信就算您是個修道多年
信仰忠貞以設計為先的道徒
看完這章大概也會馬上拋開所有禮教
還俗投入重構的美麗新世界中

好吧…我承認這樣講是有點誇張,
但是不誇大哪會有噱頭引您往下看哩

其實重構的步驟也不用想得很複雜
重構的目的並不是為程式增加新功能
只是為了提高程式的可讀性及重用性
重構有時只是改變一下程式碼的位置或取個更有意義的變數名稱,
再將其放置在適當的位置
例如像當A類別內某個函式的頻繁的操作B類別的屬性
或許這就是一個暗示,暗示我們應該讓這函式回歸至B類別處
讓資料和引用這些資料的操作總是在同一個類別之中發生

而Design Pattern則是為Refactoring建立了一個依循的方向
所以當我們透過良好的設計範式來切割類別間的關係時
有些類別間比較複雜的函式根本不會知道外面的世界已經變天哩

再來什麼時候你需要重構哩
例如當你發覺程式寫好一週後,再回去看它時
突然懷疑一週前你是不是有被火星人附身時
你肯定需要重構一下你的程式

另外在書中也提到
我們可依循三次法則
事不過三、三則重構

而若是對於已發佈介面published interface進行重構
則我們可以保留舊介面,用其呼叫新介面
但千萬不要再犯copy-paste的錯誤
並可透過deprecated來標記舊介面
提醒及避免其他人再繼續呼叫這個介面

有時為了撰寫上的方便
我們會讓暫存變數被賦與二次以上的值
像類似這種一時的便宜行事,卻會造成事後對程式的意圖造成理解上的困難
於是像這樣的地方,我們也應該透過重構的技巧來重整它
書中常見的手法就是將拆解成多個足以自我說明其意義的變數
然後我們可將新的暫存變數宣告成final,
便可透過compiler來檢驗是否仍有重覆賦值的缺失

而對於Java為何選擇pass by value而非pass by reference有疑問的人
可以看一下Remove Assignments to Parameters這個重構手法
其實重點就在於強化程式的清晰度及減少非預期的邊際效應

相信你一定有這種經驗
看到一個超肥的大型函式…讓人一時之間慌了手腳不知從何剖析它
這時我們可運用必殺技Replace Method with Method Object
將此大型函式獨立宣告成一個物件
如此一來函式內的變數就成了該物件的欄位
然後我們就可任意肢解這個大型函式,而不必傳遞任何參數
使其各自成為精巧且更具可讀性的小型函式

另外書中有段話雖然跟重構無關,但我覺得實在是講得太好了
也順便節錄一下
"懶惰是程式員的美德
所以能立即查閱的東西
千萬別記在腦子裡
免得把腦袋塞爆"

而書中有些教條式的守則
我想就算一時間不能體會
背起來也是無妨
例如:見到黑影就開槍
喔~不對、不對....
是看到switch就想到polymorphism
或是
當你感覺需要撰寫註解前請先嘗試重構,試著讓所有註釋都變得多餘
(設計良好的程式本身就應具有解譯自身意圖的能力)

在第四章提到了撰寫自我測試程式的重要性
測試是重構的前提
而一般慣用的手法都是寫test main()
不過缺點就在於難以執行多種測試
所以在此章裡介紹了如何透過JUnit來執行測試

總的瀏覽本書前一至六章一遍後
我想起我的前小組長也十分愛玩重構的遊戲
每每看到我寫得亂七八糟的垃圾一到他手裡就被重構的井然有序
內心深處總是覺得十分的佩服…
曾幾何時我幾乎認為那是我達不到的彼岸

因為覺得自已即不是記憶力超強的陳俊生
也不是火星來的假面怪客
能在腦中憑空勾勒出理想中的設計模型

不過現在若是能一步步透過書中所介紹的重構技巧…
或許能使得平凡如我,也能有機會一窺外星人的境界

也記得有陣子我看到OO就很煩
總感到造成追縱程式流程的困難,就是在不斷的delegation之後
看了本書中p.61間接層及重構後
仔細想想才體會到原來間接層所帶來的利益為何

慢慢發覺我的壞習慣是太愛追根究底
實際上好的切割及命名法則,可使我們更能憑著直覺,
來理解程式的執行

而一如GOF的Design Pattern般的鉅作
本書照慣例創造了許多術語
不過感覺上各項重構的命名是容易會意的多,若是為了溝通方便
其實倒是蠻容易記憶的
請想像一下以下的討論場景

強者H:嘿…我覺得這裡該嘗試用Extract Method來重構
小呆P:嘩~醬子這個Method得傳入一狗票參數耶
強者H:呀不然這邊再搞個Preserve Whole Object
小呆P:鳴鳴鳴…Object之間的界定還是很難搞定呀
強者H:好吧…那就出必殺技Replace Method with Method Object吧
小呆P:救命!!! 我頭昏了啦 @_@

是不是覺得有了術語的協助,其實更能增進溝通的效率呢?

雖然從現實角度來看一個軟體專案的執行
往往都因deadline緊迫而壓縮整個開發的時程
這個時候去考量重構來讓往後開發或維護更加順利似乎是有點緩不濟急
不過方法在這裡,如何巧妙的應用及選擇合適的時機點切入
相信就要由聰明的您自已來判斷了

最後我想這本書讓我感到最珍貴的
就在於作者Erich Gamma將平時一些難以言傳的重構技巧
作一個有系統的整理及說明
讓想要學習重構技巧的人能感到有所依循
跟隨著大師的腳步前進
相信總是比憑著自已的直覺要來的準確的多

看到這裡,大家有沒有開始覺得手癢起來了呢?
對於你一直看不爽的code,現在就讓我們動手來肢解它們吧!!!

後記:
雖然書中也提到重構不是建構軟體的銀子彈
至多只能算是把銀鉗子
但我還是感到十分的興奮
迫不及待的想把讀後心得分享出來
並且開始對Smalltalk產生了好奇心
有沒人要來澆盆冷水的呀 :p

星期四, 7月 03, 2003

Oracle SQL statement Tuning tips

1 衡量table筆數,以便拆解statement時選擇適當的順序來執行
2 拆解statement,利用sub query的方式
,可分段check response time找出效能缺口
在8i之後在select,from,where後均可加入sub query
重點在於先將筆數多的table拆解出來。
tune完整段仍有問題時,則應檢查index、或是where部分是否仍為效能缺口
3 針對where條件欄位加入index or 移除不必要的index
4 使用Hint,透過Hint可強迫DB在執行各項Query時採用特定的方式,
不過似乎並無特定的rule可尋,只能依經驗或靠tuning tool來協助
找出最佳解。
EX: select /*+ first_rows */ name,department from dept;
5 check index
check fragmentation(類似硬碟重整)
adjust chain row(用以調整一次抓取資料的Block範圍)
6 不能以null作索引,任何包含null值的列都將不會被包含在索引中。
也就是說如果某列存在空值,即使對該列建索引也不會提高效能。
7 避免萬用字元%在搜尋字首出現,因會導致Oracle無法以此欄位建索引。
在很多情況下可能無法避免這種情況,
但是一定要心中有底,萬用字元的使用會降低效能。

通用原則:
1 not in比in費時(避用)若要用則應改寫為NOT EXISTS子句
同樣的在Oracle中幾乎可將所有的IN操作符子查詢改寫為使用EXISTS。
2 distinct、order by費時(應拆解至細部sub query,避免擺至最外層)
3 要避免直接對driven table作運算
例:where to_char(date,’yyyy/mm/dd’)=’2003/07/02’
應改為:date = to_date(’2003/07/02’,’yyyy/mm/dd’)較有效率
4 若比對條件式中含有常數,則應將此段query擺在前頭

補充:
1 雖然用Hint 可快速解決當下Sql 速度慢的問題.但須經常重新Tuing,
因為一段時間之後,Table 的筆數增長各有不同.
所以時間久了,原本可改善的Rule 反而不管用.
2 增加Index 並非萬能,因為多增Index 會影響Table
在執行 DML (Insert/Update/Delete) 的時間.
3 在 Oracle 的 Performance & Tuing 裡,
除了Sql 下的好不好以外, DB 的參數設定值亦是關鍵.

星期三, 6月 11, 2003

我真的是瘋了 @_@

BenQ Joybook8000

p4m-1.8g
512mb ddr ram
30g hd
8x DVD / CD-RW Combo
顯示尺寸:15.2吋
最高解析度:1280*854
亮度:200 Nits
規格:WXGA TFT-LCD
NT:58600

我果然是省小錢、花大錢的那種人

星期四, 3月 20, 2003

翻譯這檔事


去年十二月時與朋友一起接了本翻譯書…沒想一直等到今年三月才出版,老實講都快忘記有這回事了說 :p不過果然如許多人的經驗一樣…翻譯這行一點都不好賺。如果說比較有收獲的地方,大概算是在自已人生經歷上多了一件事,還有看到自已翻譯的文字出現在印 刷的紙本上的那種感覺吧…呵,還真像有那麼一回事^_^不過慘的是,後來發覺寫比翻更痛苦一萬倍 >_<

星期二, 1月 28, 2003

分紅 VS 聚餐

過年分紅大吉大利

分紅就像把好運分給每個同志
分紅就像忘了過去一年的不如意,新的一年得以扭轉運氣一樣
人生除吃吃吃.....喝拉撒醉,不能有點創意嗎?
分紅很有創意
吃吃吃.....但吃完剩什麼?

想買的數位相機呢?還是mp3隨身聽呢?或是升級電腦呢?
不然買本Thinking in Java如何?
你喜歡抽中禮券嗎?聚餐就像抽中禮券

1號候選人出身食神世家
我出身平民,真的想做事

請支持我的政見 搶救2號

<笑死我了,寫得真是好>