Wednesday, August 27, 2008

如何寫 Beautiful code

剛剛讀了一篇文章,發現跟我的想法不謀而合,因此抓下來供自己或參觀我的 blog 參考
所謂 beautiful code 並不是要證明寫的 code 很厲害確難懂,而是清楚易懂又有效率
不易懂的 code 讓自己或別人無法輕易理解及重複使用

Class.forName for Methos.invoke 等是我最不建議使用,因為用了 System level 的呼叫方式
這些方式通常屬於較底層的寫法,用在平常開發 Web Application 則顯得格格不入

Beautiful Coding - The way to life.

I often have to fix other people’s code. You can tell coders who have been coding for years simply by the feel of their code.

One of the problems with java is the simple fact that you can end up with a spaghetti-junction of objects all calling, calling back, implementing, sub classing, overriding, running ejb’s etc etc and it can be a bit of a nightmare to find your way through.

The key here (although you can reverse engineer into a UML Model with Netbeans) is really in the way that the code is written.

Things I do to make code more readable

- Initials of variables

All my strings for instance start with s - sName, sUsername
integers I , iCount, iGold
doubles d

and so on for different types of variables or objects.

Components on forms I use a 3 letter start up.

txtTEXTBOX
lblLABEL
stcSTATICTEXT
cmbCOMBOBOX

Also in the code using the java doc function, within Netbeans if you type /** enter it will auto document the next function and you just “fill in the blanks”, javaDoc is fantastic and well worth looking into. If you have “java doced” your code, not only does Netbeans pick up the documentation when you are typing or using your own functions but also you can generate a website that documents your classes!!! How Call

ALT-SHIFT-F - auto format your code, very useful.

Comment long bracketed loops. I always put // from next to a bracketed loop that is too long to see in one screen. e.g.

for (int iCount=0;iCount<10;++icount)> 

Also comment all calls to EJB’s to say what they do -

// Get this job’s History
JobManagerBean.getHistory(sJobNumber);

Beautiful Code!

Lisp programmers write beautiuful code, why? Because you have to, it becomes unreadable otherwise. In a way I wish all programmers would learn Lisp - because it makes you think in a different way and see software development from an almost etherial height. When I get some further research time I want to work on a lisp implementation for netbeans.

Remember that you will not be around forever, don’t punish the next poor programmer who has to work on your code. I like my code to be really easy to read and understand.

Code Rewriting

You know that sometimes I will rewrite a whole subroutine if I’m not happy with it. Programmers are artists, the difference is that the result of our art is a system for people to use or some form of output. Well written, neat, fast, efficient code means happy users and that is the caling of a programmer, to make the lives of the users easier.

If your software makes it harder. It needs rewriting, or maybe replacing with a pen and paper.

Be passionate about your coding and your users will be passionate about your software.



出處 : Beautiful Coding - The way to life.

Thursday, August 21, 2008

每個 team 都該裝個 Wiki

自從裡裝了個 JSPWiki 之後,開始把一些日常的資源往上面丟,做些小整理。試用一陣子之後,發現用 Wiki 整理文件真的超快,語法簡單,資料的相互連結打幾個字就搞定。也不用怕寫的不好,有問題直接改就行了。完全無痛 !! 總算是讓我這個 "死也不寫文件" 的人寫文件寫的心甘情願~~

喔... 我們不是拿來寫軟體規格書,還是啥 SA/SD 文件。主要是收集如何安裝、如何 deploy、或是一些開發的設定、像是 eclipse、資料庫... 等等資料。這些東西並不是每天在做,偶而才做一次而已 (例如新人報到,或是重灌電腦),因此很容易忘記,常常翻箱倒櫃亂找,找的滿頭大汗還不見得找得回來... 用 wiki 來整理這些資料再適合不過了,真恨自己以前不懂的用這個工具~~

一些我們 wiki 的截圖:

首頁設計成提供快速的常用連結

home

Eclipse 的相關設定

eclipse

常用的 API 連結

api

Project 的資料

project

收集一些對開發有益的文件

Wednesday, August 20, 2008

有關軟體開發流程

最近發現 Netbeans 的內部人員發表了在 Netbeans IDE 開發時的流程,這也是我一直想要推動及執行的。
唯有如此做,在台灣的軟體開發才能漸漸的上軌道。

I have worked on a lot of large software projects in the 17+ years I have been in the industry, and I don't say it lightly that I think NetBeans has one of the best development processes I've ever seen.


I've been on (and seen) projects that were so overburdened with processes and documents that it was like walking through a lake of molasses.

I've also been on (and seen) projects where there was so little process that life was exciting, interesting, crazy, but basically one chaotic scramble after another.

NetBeans follow a beautiful middle path - not too much process, but not too little. I'm sure I'm missing a lot of important points and aspects that make this all fall together, but these are the ones that stand out to me:

Planning
The planning phase is fast and lightweight. Each release is given a release boss, and the release boss works to define a theme for the release. The release boss also decides on the dates for milestones and the final release. Then each team is asked to decide what features they feel best meet the theme, and for what milestones those features will be delivered.

Normally the feature list is written up quickly on a Wiki page. Each feature is given an issue number in Issuezilla and is assigned a person who owns it and a milestone date.

The release boss uses reporting features in Issuezilla to track all of the features committed for a given milestone, and you have the plan. Pretty simple. We all know what to do, and when we have to do it by, and we get to work.

Specification and Design

You are expected to specify the user experience and interface for your features. But it's in a very lightweight manner, on a Wiki page. Here is an example UI Spec that I wrote. Pretty simple, but it gets the point across.

Certain defining features get a lot of attention and are reviewed carefully by our User Experience team, but for most smaller features you just need to write up a quick spec, have it reviewed by your team, and you are done.
A milestone on the A140 in Horsham St.
Milestones
I love milestones. I think every large team should have milestones. Basically these are a mini-release, where everyone has to get features in by a certain date, there is a stabilization period with extended QA and bugs are fixed, and then it gets published on the NetBeans site. Milestones normally happen about once every 4-6 weeks.

The main reason why I like these as a developer is because it keeps me focused. A six month development cycle tends to make you be lazy early on in the cycle. With milestones coming at you once a month, you get very focused, and you are working hard all the way through the release, instead of working insanely at the end. This also means that it is much more likely that we deliver on time, or if we're late, we know sooner rather than later. And what I have seen is that NetBeans has consistently delivered what we say we deliver, when we say we're going to deliver it. There is a lot behind this, but milestones are a key part of this.

Simple, Strong Quality Criteria
Every release has quality criteria. These are soft and hard goals in terms of the number of P1, P2 and P3 bugs. There is a total overall goal, and each team is also assigned specific goals. For some reason a lot of projects I have been on have not been that strict about this, and it has affected the quality of their product

Nightly Builds Available to the Community
What this means is everybody is using our stuff all the time, all the way through the release process, and we hear from them. I think this is great. More and more projects are doing this, and I really can't recommend it highly enough. And if you don't know about Hudson, you really should check it out.

The Team
This is a lot harder to reproduce, but as usual is a key part of it.

The theme running through this all of this and a thousand more details and steps, is a dedication to quality and predictability, without overburdening the teams with process and busywork. It's a difficult balance, and it's executed quite well here.

So I think that is probably the underpinning of why NetBeans development process rock: the team. From developers to management to QE to release engineering, I have never seen such a smart, dedicated, hardworking group of folks. I am really honored to work with them.

Source : NetBeans development process rocks!

Tuesday, August 19, 2008

全國墊紙 救甘興?

在「赤壁」這部片中,還有一個人物也很特別,
是由日本人中村獅童所飾演的「甘興」,
不過根據史書記載,吳國有甘寧這個猛將,但卻查不到甘興這個人…

後來網友展現了可怕的情報能力,才讓我們知道甘興到底是何許人物,而且還是
我們早就熟悉的人物,故事是這樣的…資料來源--網路路透社消息)

甘興是孫權旁邊一個侍衛,平時盡忠職守,也深得周瑜的喜愛,有一天,甘興在
孫權的桌子上割東西時,因為沒有墊東西,所以刀子力透紙背,割壞了孫權的愛
桌,孫權非常的生氣,正當要將甘興拖出去斬了的時候…

周瑜特別為甘興求情,他向孫權深明大義,叫孫權不可為了區區一張桌子而殺害
一位忠臣,孫權最後接受了周瑜的求情,但還是憤恨難平。



周瑜為了讓孫權消消火氣,便向全國宣告,日後在桌子上割東西,都要先墊紙保
護桌子,才不會造成像孫權愛桌被割的憾事,而這個佈告獲得全國的響應,也使
得孫權最後心情平緩,原諒了甘興…

這就是…

「全國墊紙 救甘興」
(全國電子...就感心~~~ =.=|| ) 快被冷死了啦...

對別人好 就是快樂

來源 :對別人好 就是快樂

對別人好.就是快樂

要看完ㄛ..

有意思的文章!

對別人好.就是快樂


某天,小張要去相親,因為沒有看過對方,擔心她長得太醜,
於是交代朋友,十分鐘後 call他的手機,這樣他就可以藉機遁逃。
到了約會地點之後,小張發現女方驚為天人,
於是心想,等一下手機響不要回就好了。
沒想到,美女的手機這時候響了起來,美女聽了兩秒後,對小張說:
『對不起,朋友有急事找我,我要先走了……』
 
有一個男人在派對上對男主人說:
『今天的美女真多,要是待會兒我泡上一個,
你可不可以把樓上的房間借我一用。』
主人說: 『那你老婆怎麼辦?』
這人說: 『放心,她不會想念我的,我只失縱一下而已。』
主人說:
『我不是說這個,我是說十五分鐘前,她才向我借了樓上的房間。』
 
有一個老光棍,他並沒有什麼嗜好,
只是喜歡在睡覺前喝一點葡萄酒自娛。
然而,他發現這幾天有人偷了他的酒。
他便懷疑偷酒的是他的佣人,於是就把酒倒出來,
再裝入他的小便。但裝小便的酒,仍然每天減少。
他很不高興的把佣人叫來,責備一番。
『不,我並沒有偷喝!』
佣人說:
『我是想做味道更香更可口的菜給您吃,
所以我每天燒菜時,都加了一點在裡面。』


從這三則短文中各位有沒有發現什麼共通之處呢?
沒錯,你怎麼對別人,別人就怎麼對你;
你給別人什麼,別人就回報你什麼。
說得更白一點就是,你給別人的,其實是給自己的。
就像我在前面說過的,不管你丟出去什麼,
或是…想了、說了、做了什麼,最後都會回到你身上,不是嗎?
你給別人的,其實是給自己…
自食惡果的事說都說不完,讓我們再聽下面的故事:

在一家簡陋的酒館裡,正在喝大杯啤酒的李先生,突然覺得內急,
他匆匆忙忙站了起來,又想到上廁所時,酒可能被別人偷喝,
猶豫一會後,他找到一張紙,寫上: 《我吐口水在這裡!》,
把它放在杯子下面,然後才放心的去上廁所。
過了幾分鐘後,李先生回來時,他看到另一張紙寫道:
《我也吐了一口在這裡!》。
哈!哈!哈!  

 
我聽說從前有個人,他很不喜歡喝咖啡,
但是他太太並不知道,他從來沒告訴過她。
她非常喜歡喝咖啡,所以,每天早上都會順便為他…
準備一個熱水瓶的咖啡,跟他的便當擺在一起。
他一直都帶著那個便當和熱水瓶去工作,但是因為他很節儉,
所以每天晚上都會把那個熱水瓶帶回家,裡面的咖啡完全沒有被動到。
他知道太太很喜歡喝咖啡,為了要省錢,所以當她沒看到的時候,
他會將沒有喝的咖啡倒回咖啡壺裡。
晚上的時候他會用喝咖啡使他睡不著的理由把它推掉。
就這樣他每天都重複這麼做。

有一天,她的太太認識了另一個男人,
他們計劃好要毒害他,以獲取巨額的保險金,
於是她每天早上都放少量的砒霜在他的熱水瓶裡,
日復一日,直到最後她毒死了她自己。
你給別人的,其實是給自己的。
你說是不是呢?
你所給予的,都會回到你身上…
如果,你對人冷淡,別人也會回以冷漠;
如果,你經常批評別人,你也會接收到許多的批評;
如果,你總是擺一張臭臉,沒錯,別人也不會給你好臉色。
所有你所給予的,都會回到你身上。
套句詩人奧登( W.H.Auden)的話:
『人受惡意之作弄,必作惡以回報。』
如果你陷害別人,哪天你也會遭人陷害。

 
同樣的道理……
當你帶給別人歡樂,你就會得到歡樂;
帶給別人祝福,你就會得到別人的祝福;
如果你經常讚美別人,不久你也會聽到有人在讚美你,
《你給別人的,其實是給自己的!》。
你讓他人經歷什麼,有一天你也將自己經歷;
你怎麼對待你的父母,將來你的孩子也會怎麼對待你。
我想許多人一定聽過,
格林童話中有一則關於一位老人和兒子住在一起的故事。


老人的耳力已經不行了,眼睛也看不見,
顫抖的雙手經常把飯菜洒得滿地,碗也常打破,
兒子夫婦倆感到非常厭煩,給老爸爸一付木製碗筷,
把他趕到廚房幽暗的角落,不准和大家一起用餐。
有一天,兒子看到自己的兒子用刀片消木頭,
他好奇的問孩子要做什麼。
結果孩子回答: 『我在替你準備將來要用的木碗、木筷。』
從此以後,年老的父親又回到餐桌上吃飯,家人也都非常孝順他。

 
農夫的哲理
地球是圓的,整個世界都在繞著圈子,
不論你傷害誰,就長遠來看,你都是傷害到你自己,
或許你現在並沒有覺知,但它一定會繞回來。

所以,如果你佔了別人什麼便宜,
先別得意,很快你就會為此付出代價;
反過來,若是別人對你做了什麼,你也無需氣憤,
不必去報復,任何他們所做的,他們都將自食惡果。

《凡你對別人所做的,就是對自己所做的。》
這是歷來最偉大的教誨。

不管你對別人做了什麼,
那個真正接收的人,並不是別人,而是你自己;
同理,當你給予他人,當你為別人付出,
那個真正獲利的也不是別人,而是你自己。
有一個農夫的玉米品種,每年都榮獲最佳產品獎,
而他也總是將自己的冠軍種籽,毫不吝惜地分贈給其他農友。
有人問他為什麼這麼大方?
他說:
『我對別人好,其實是為自己好。
風吹著花粉四處飛散,如果鄰家播種的是次等的種籽,
在傳粉的過程中,自然會影響我的玉米品質。
因此,我很樂意其他農友都播種同一優良品種。』

他的話看似簡單卻深富哲理,凡你對別人所做的,就是對自己所做的。
所以,凡事你希望自己得到的,你必須先讓別人得到


保證有效的秘方
就像那個農夫一樣,
如果你想要得到冠軍的品種,就要給別人冠軍的種籽。
你若想被愛,就要先去愛人;

你期望被人關心,就要先去關心別人;
你想要別人對你好,就要先對別人好。

這是一個保證有效的秘方,可以適用在任何情況。
如果你希望交到真心的朋友,你就必須先對朋友真心,
然後你會發現朋友也開始對你真心;如果你希望快樂,
那就去帶給別人快樂,不久你就會發現自己愈來愈快樂。

明白了嗎?

我們所能為自己做的最好的事情,就是去為他人多做點好事。

 
《己所欲,施於人。》
凡你想給予自己的經驗,就給予別人;
想別人怎麼對你,就怎麼對待別人。
感恩過去… 把握當下… 創造未來…

Thursday, August 14, 2008

如何擴充 VMware 虛擬磁碟及作業系統容量

企業為了節省成本及空間,在內部系統的規劃上漸漸的都以虛擬機器(VM)取代
在一部裝滿 8G RAM 的 PC 上,可以規劃出 5-6 VM 使用,的確可以替企業省不少成本

在 VM 的領域上,又以 VMWare 最為有名。而其下的 VMWare Server 因是免費的,許多企業便運用 VMWare Server 的免費及便利性,規劃內部系統的建置及測試。

尤其是在測試方面,因可以規劃成獨立的空間作測試,將來在備份及還原時只要一個檔便可解決不用作 Ghost 或是重新安裝的繁雜動作

在建立一個 VM 時,VMWare 預設的空間是 8GB,所以一般建立時都會直接用此預設值但在特殊情況下 (如模擬正式環境的機器),8GB 的空間就顯得不足

在此情況下,有兩種作法
1. 再加上一個虛擬硬碟,但此方法無法避免原來的虛擬硬碟爆掉
2. 將原來的虛擬硬碟容量加大

在此就介紹如何加大原來的虛擬硬碟及作業系統的容量 (以 Windows 2003 server 為例 )

step 1. 複製原來的虛擬硬碟成為第二顆硬碟,並掛到原來的 VM 中。複製的檔名如下
c:\Virtual Machines\Windows Server 2003 Standard Edition\Windows Server 2003 Standard Edition_1.vmdk
PS : 檔名不能有中文名稱,因為 VMWare 不支援

step 2. 利用 VMWare 提供的工具先將第二顆虛擬硬碟加大
以下為原來 VM 的 size 為 8GB






執行以下指令後 (以我的環境為例)
C:\Program Files\VMware\VMware Server>vmware-vdiskmanager.exe -x 16Gb "c:\Virtual Machines\Windows Server 2003 Standard Edition\Windows Server 2003 Standard Edition_1.vmdk"

可以透過 DOS box 看見虛擬硬碟容量逐漸加大中







執行完後,可以發現虛擬硬碟容量已經變大了








要如此做的原因是因為若要將硬碟上的作業系統容量作擴充但還要保留原來的內容,則必須將此硬碟掛為 D 磁碟,因為 C 磁碟是開機磁碟,作業系統會鎖住無法作立即擴充

step 3. 將 VM 開機並將原來的 D 碟 8GB 容量擴充為 16GB 容量
因為掛上 VM 後,D碟 (我的虛擬硬碟為 F) 的邏輯磁碟只有 8 GB,若要擴充為 16GB,則可以藉由 Windows 2003 內建的工具 Diskpart 完成。原來邏輯的只有 8GB





進入 VM 後,透過 dos command 指令將 D 碟擴充為 16GB



















step 4.
接下來就需要一點小技巧。為了將原來的 C 碟系統擴充為 16GB,又因為 D 碟是複製 C 碟又可以開機,那要如何做呢? 沒錯,將 VM 關機後,移除原來的虛擬磁碟,再將 _1.vmdk 改為原來虛擬磁碟的檔名,然後再將 VM 重新開機後,可以看到,C 碟可開機且容量變為 16GB








要把虛擬硬碟容量改為多少,端看實際運用。一般而言,8GB 應該足夠,若需加大便可以用此技巧加大虛擬硬碟容量並無需再重新安裝 Windows 2003