Archive for May, 2009
Control of Duplication
by calendarw on May.22, 2009, under database, design
近期做緊 Application to Database 呢部份, 開始對 Analysis Patterns 一書中既 Knowledge Level 同 Operation Level 多左理解, 除此之外, 仲開始感受既點樣控制重覆!!
Duplication, 係 Program 入面係理應避免的, 正如見到重覆既 Code 就應該進行重構一樣, 但在 Database 層面上既管理又可能係另一種講法. 係 Knowledge Level 入面, 儲存既資料應該避免重覆, 因為所做既係最新既資訊, 以最實時既資訊去處理日常既運作, 雖然用既係最新既資訊, 但儲存落 Database 入面就可能要將所有有關既 Value Object 儲存埋, 因為往後既日子如果 Knowledge Level 有所改變, 亦唔應該影響到 Database 入面 Operation Level 完成品既歷史, 方面了解當時既情況, 等同於 Data Mining 一樣, 做既唔係避免重覆, 而係有必要地控制重覆, 呢個就係 Database Design 入面一個重要既地方!!
Feedback!!
by calendarw on May.21, 2009, under diary
Human Factor, 讀 Degree 果時其中一科有教過, 工作環境, 工作類別等等既因素都會影響到員工既工作表現, 而我發現呢度有好多錯配既情況發生, 雖然好大部份都因為人手唔夠既問題而產生出黎既, 但如果無人理, 咁就會令到資源流失 (產品質素, 公司形象, 人才或時間). 今日有一大個進步, 因為 Tommy 開始認識 Software Design, 希望呢個好既行為可以持續落去. 除此之外, 今日都比左好多意見, 雖然接受程度要進一步觀察, 但起麻係一個好既開始. 公司缺少既係一個發表意見既地方, 就算底下一班人識幾多野, 無上面既人援助基本上咩都做唔到, 而感覺上會發表意見既人亦唔多, 咁落去其實對公司發展亦有一定影響, 希望今日發表既意見可以令公司氣氛有所改變啦!!
Windows 7 RC on HP TouchSmart tx2
by calendarw on May.19, 2009, under diary, os
前日終於買左 HP 果部 tx2, 經過三次 format 後 (一次重裝, 一次 verify 自制既 backup 碟, 同第三次 for windows 7), 尋日終於有時間試下部機.
裝左 Windows 7 RC 7100 64bit version 後, Multi-touch, Quick Launch Button, CIR Receiver 同 Fingerprinter 既 driver 都要重新裝過.
Quick Launch Button 同 CIR Receiver driver 都可以係 HP 官網入面找到, 而 Multitouch 既 driver 就要係 N-trig 度下載 – Here
另外, Fingerprint program 要 download 返 AuthenTec 果個先有埋個 TrueSuiteApplication, 咁先用到指紋 Login.
呢幾日試用感覺唔錯, 入左 d program 都行到:
Adobe Reader 9.1
Daemon Tool 4.30.4.0027
Firefox 3.0.10
RealPlayer 11.1.1
曾經出現問題
Daemon Tool 4.30.4.0027

出左呢個問題之後, 個 ISO image 要再 mount 過先可以再行.
網上講既靜電問題出現左, 要拆電先回復返.
8 ways to be a better programmer in 6 minutes.
by calendarw on May.18, 2009, under diary, soft skill
前日子維 send 左個 post 比我, 內容幾好, 都係講緊 software improvement – 8 ways to be a better programmer in 6 minutes
1. 用大 Size 既字
當用左大 Size 既字後, 因為睇既野少左, 所以你就要開始諗點寫短一些既 method, 從而減低軟件既複雜性及增加可讀性
2. 將 hard code 既 string 變得討厭
這樣可以鼓勵你寫少一點 hard coding, 同埋指示你那裡有 hard coding

Visual Studio Options
3. 學習一下關鍵字 (keyword)
每隻 language 既關鍵字都有佢既用途, 請認識一下 language 不同關鍵字既用處. 以我為例, 呢兩年都開始學多左用不同既關鍵字, 例如 (is, as, ?? opertor 等), 識多一點更會簡化自己既 coding, 亦對自己既寫作有幫助.
以下係原文提供既幾個 .net languages 參考: C#, VB.net, F#.
4. 增加 1% 代碼覆蓋度
除左用自動化單完測試外, 進一步測驗一些內容深入難明或易錯既地方. 增加 1% 覆蓋度對代碼更有幫助
5. 閱讀 Open Source Project
學習一下 Open Source 既代碼, 對自己會有幫助. 近年都開始睇緊 NHibernate, Rhino-Tools 等既 Source Code, 當然係有些難度, 不過真係 improve 到好多方面既 skill, 例如學下人地 d Test Case 點寫, Inheritance 既 Test Case 點寫, 人地用咩 keyword 去處理事件, 同埋人地點設計等等.
亦可以參考原文建議既 Hanselman’s Weekly Source Code series.
6. 用代碼分析軟件進行分析
這個可減少代碼既複雜性.
原文有幾個 Tools: fxcop, StyleCop, clone detective, ndepend, 或者 code metrics feature of VS 2008
7. 找一個最醜既 method 進行重構
重構一個不唔清晰既 method 可以提升到軟件既架構, 可讀性, 重用性等多個方面
8. Stop Reading, Start Writing
學以致用才是最好既學習模式, 最好由最基本既寫起, 原文建議寫 Complier. 另一方面, 我見過既好多人都有個好重要既問題, 就係佢地從來都無 Start Reading, 有些連學校教既野都唔會去用, 寫出黎既野完全難以重用!! 請記住, 係 Stop Reading 之前係有個 Start Reading 的, 如果你無一個清楚既概念, 無 Start Reading 既話, 就好難會學得好!!
Timer for Performance Testing
by calendarw on May.13, 2009, under coding snippet, testing
呢排重溫緊 Pragmatic Unit Testing in C# with Nunit, 開始試緊寫有關 Performance 既 Test Case, 書中有一段有關 Performance 既 Code:
[Test]
public void FilterRanges()
{
Timer timer = new Timer();
String naughty_url = "http://www.xxxxxxxxxxx.com";
// First, check a bad URL against a small list
URLFilter filter = new URLFilter(small_list);
timer.Start();
filter.Check(naughty_url);
timer.End();
Assert.IsTrue(timer.ElapsedTime < 1.0);
// Next, check a bad URL against a big list
filter = new URLFilter(big_list);
timer.Start();
filter.Check(naughty_url);
timer.End();
Assert.IsTrue(timer.ElapsedTime < 2.0);
// Finally, check a bad URL against a huge list
filter = new URLFilter(huge_list);
timer.Start();
filter.Check(naughty_url);
timer.End();
Assert.IsTrue(timer.ElapsedTime < 3.0);
}
段 code 係一個幾好既 example 去講點 Test Performance, 但當真係要試果陣, 就發現左樣野, 就係我搵唔到 Code 中既 Timer Class, 係我在 System 入面既幾個 namespace 中, 都搵唔到啱用既 Timer, 因為 System namespace 入面既 Timer 大部份都係用黎 Trigger Timeout Event, 而當中既 Stop method 都只係用黎停止 Event Trigger, 而沒有任何計時結果做到出黎, 所以經過一輪網上既搜尋之後, 得出以下 Timer, 主要目的係用黎計時, 仔細度高, 最啱用黎作 Performance Testing 之用!!~
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace TestUtil
{
public class HighResolutionTimer
{
private long frequency;
private long start;
private long stop;
public HighResolutionTimer()
{
QueryPerformanceFrequency(ref frequency);
}
public float ElapsedTime
{
get
{
float elapsed = (((float)(stop - start)) / ((float)frequency));
return elapsed;
}
}
public void Start()
{
QueryPerformanceCounter(ref start);
}
public void Stop()
{
QueryPerformanceCounter(ref stop);
}
[System.Runtime.InteropServices.DllImport("KERNEL32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
private static extern bool QueryPerformanceCounter([In, Out] ref long performanceCount);
[System.Runtime.InteropServices.DllImport("KERNEL32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
private static extern bool QueryPerformanceFrequency([In, Out] ref long frequency);
}
}
HighResolutionTimer 來源 : 在 C# 中實現高性能計時

