1. 泛型 + Singleton Patterns

    聽起來 singleton 跟 generic 好像搭不上邊, 不過搭配 .net framework 2.0 的 generic 機制, 倒是可以讓 singleton 好做很多... 我先簡單寫一下不使用 generic 時的做法...

    只有單一 class 要實作 singleton 很簡單, 只要寫這樣的 code 就可以:

        7     public class SampleSingletonClass

        8     {

        9         private static SampleSingletonClass _instance = null;

       10         public static SampleSingletonClass Instance

       11         {

       12             get

       13             {

       14                 if (_instance == null)

       15                 {

       16                     _instance = new SampleSingletonClass();

       17                 }

       18 

       19                 return _instance;

       20             }

       21         }

       22 

       23         private SampleSingletonClass()

       24         {

       25             //

       26             //  ToDo: constructor code here.

       27             //

       28         }

       29     }

     很標準的 code, 不是嗎? 不過問題來了... 當我有第二個 class 也要套用 singleton patterns 時, 幾乎一樣的 code 就得再抄一次, 只因為 public static XXX Instance; 這個 static property 的型別不一樣, 很討厭...

    這堆看起來差不多的 code 想要省掉, 那只好動點手腳, 用繼承的技術解決, 不過問題又來了, 型別的宣告... 就像一堆 Collection 物件一樣, 傳回型別宣告為 object 就好了, 不過這樣的 code 用起來實在麻煩... 寫起來就像這樣:

        8     public class SingletonBase

        9     {

       10         public static SingletonBase Instance(Type seed)

       11         {

       12             if (_singleton_storage[seed] == null)

       13             {

       14                 _singleton_storage[seed] = Activator.CreateInstance(seed);

       15             }

       16 

       17             return _singleton_storage[seed] as SingletonBase;

       18         }

       19 

       20         private static Hashtable _singleton_storage = new Hashtable();

       21     }

       22 

       23     public class SingletonBaseImpl1 : SingletonBase

       24     {

       25         public SingletonBaseImpl1()

       26             : base()

       27         {

       28             Console.WriteLine("SingletonBaseImpl1.ctor() called.");

       29         }

       30     }

       31 

       32     public class SingletonBaseImpl2 : SingletonBase

       33     {

       34         public SingletonBaseImpl2()

       35             : base()

       36         {

       37             Console.WriteLine("SingletonBaseImpl2.ctor() called.");

       38         }

       39     }

    看來不怎麼漂亮? 不過看在重複的 code 只寫一次就好的份上, 醜一點關起門來就看不到了. 不過這樣就沒事了? 不... 用起來更醜... [:'(]

       11             SingletonBase.Instance(typeof(SingletonBaseImpl1));

       12             SingletonBase.Instance(typeof(SingletonBaseImpl1));

       13             SingletonBase.Instance(typeof(SingletonBaseImpl1));

       14 

       15             SingletonBase.Instance(typeof(SingletonBaseImpl2));

       16             SingletonBase.Instance(typeof(SingletonBaseImpl2));

       17             SingletonBase.Instance(typeof(SingletonBaseImpl2));

     

    實在無法接受這種 quality 的 "class library" ... 這種 code 看起來一點美感都沒有, 就像文筆不好的人在寫文章一樣...

    處女座的個性, 實在不能容忍這種 code 出現在我的 project 裡... 碰到這種問題, 直覺的解決辦法就是:

    1. 透過 inherence, 把這些重複的 code 集中到 super class 一次解決
    2. 同樣邏輯, 要套用到不同型別的應用, 就用 generic 的方式處理

    不過要實作還沒那麼簡單, 試了半天, 總算找出一種看起來最得意的解法... <待續>

    2006/10/26 系列文章: 泛型 + Singleton Patterns .NET

  2. Microsoft Windows XP Media Center Edition 2005

    最近裝了台 PC, 灌了 MCE 2005 ... 用起來只有一個字... 爽!!!

    最近台灣引進了 TiVo 這套系統, 應該不少人聽過吧? PC + TV card + MCE2005 就是像 TiVo 這樣子的東西, 只不過都是 Microsoft 靠一堆軟體弄的... 不用額外買專用的機器, 也不用像 TiVo 要付月租費...

    用起來如何? 就是用電腦看電視而以, 我沒有接在電視上, 而是直接用 LCD monitor 看, 爽度差了點, 不過我也習慣了, 我們家都是用 monitor 在看電視... 哈哈. 用 MCE 跟一般 TV card 付的軟體看電視, 差別蠻大的... 我列幾個我覺的特別好用的地方:

    1. Microsoft 的軟體很多人覺的不怎麼樣, 不過再怎麼樣也比電視卡廠商寫的軟體強多了...
    2. Microsoft 提供線上的節目表更新, 因此選台爽多了, 第幾頻道名字是啥, 現在播的節目是啥, 還有節目簡介通通都有了...
    3. 有節目表後, 預約錄影也簡單多了, 選節目按錄影就搞定, 連續劇也是選好後直接幫你把每一集都錄下來
    4. Time Shift, 節目看一半可以隨時按暫停 or 倒轉, 要上廁所倒飲料不用等到廣告...
    5. 錄到硬碟, 要看要刪很方便
    6. 電腦沒用會自動進入待機狀態, 預約錄影時間到時會自己醒來開始錄...

    其它當然有一堆好處, 我就不提了, 反正我也用不到... 如果以後買了 LCD TV, 我一定要擺台電腦在旁邊.. [:D]

    抓幾張畫面...

     

    預約錄影清單... 當然節目的相關資訊都在裡面.

     

    節目表... 左下角會用PIP方式顯示目前正在播放的節目畫面..

     

      

    播放畫面, 我錄的 "超人特攻隊" ... 它的操作界面都是特別針對電視能看的清楚的畫面, 還有都是能搭配搖控器操作... keyboard / mouse 不是必需品.

     

    選台時下方會出現的頻道 and 節目資訊..

     

     

     

    Orz, 這篇是勸敗文嘛...

    2006/09/25 有的沒的

  3. Canon PowerShot G7 出現了...

    期待了半天的G7, 等著把用了多年的G2換掉的新機, 沒想到這麼令人失望...

    早就有要換掉G2的打算了, 不過一直找不到合適的機種, G2其實我用的很滿意, 只是有些地方還是可以改進改進...

    1. 專用電池太麻煩 (換成3號電池最好)
    2. CF card可以換一換了, 現在的SD比CF划算 and 好用的多
    3. 拍Video的功能我很需要, G2的video實在遜了點

    不過想要保留的優點有:

    1. 可以外加閃光燈, 這個太重要了... 室內跳燈一打, 隨便照都很漂亮 [H]
    2. 翻轉LCD
    3. 有搖控器
    4. 大光圈 (F2.0)
    5. RAW support
    6. Canon 的操作方式用慣了, 比它牌的好用

    之前認真的考慮過 Canon S3 IS, 不過缺了 (1), 其它都還可以接受, 就這樣龜下來了, 想說還是等 G 系列的出來再說吧, 沒想到這次 G7 改了一堆, 跟本不像 G 系列了...

    缺點 (1) 還在, (2) (3) 沒了, 而優點 (2) (3) (4) (5) 全沒了, 額外多的好處都是對我不大重要的...

    1. Face Detect, 會自動偵測畫面中的臉來測光對焦...
    2. 1000 萬像素 (6mp 1/2.5", 10mp 1/1.8", 換算起來 CCD 的密度差不多, 同樣技術的話, 畫質半斤八兩吧... )
    3. Digic III chip

     

    看了真是 Orz, 看來我要換的話, 目前最合適的機種還是 Canon PowerShot S3 IS 吧... G7 就不考慮了, G8 ? 看看我撐不撐的到 G8 現身.. 哈哈.. 反正這篇沒啥目的, 純脆發發牢騷用的, 我都是隨時鎖定要買的東西, 不過啥時買? 就看啥時有敗家的衝動了...

    2006/09/25 有的沒的

  4. Windows Live Writer...

    看起來真不錯啊, 感謝小熊子提供情報, 這樣用起來真舒服...

    像 e-mail 一樣, 打完之後直接傳到網站上... Web based HTML editor 做的再好, 就是不如一個簡單的 editor ap 方便..

    補張圖爽一下... [H]

    2006/08/16 有的沒的

  5. 浩劫重生的 X31 ...

    上禮拜在公司跟同事討論事情時, 一個失手桌上喝一半的御茶園就倒在 X31 臉上.. Orz, 當時公司沒雞絲可以搶救, 就立刻把水倒出來 & 搽乾就跑回家了...

    回家後災難才開始.. 一開始是開不了機, 拆開用吹風機吹乾就正常了, 不過用了沒多久, 硬碟就發生怪叫, 再拆一次才發現硬碟的電路板進水沒擦到...

    還好硬碟擦乾後也正常了, 不過資料卻毀了, 開不了機, 用USB接到別台也讀不出來, my god... 挖出舊的 40GB HDD 出來重灌撐著用, 同時掛了的硬碟也接到 PC 上用 Final Data 救資料..

    跑了兩天, 資料總算是救回來, 系統也都恢復正常了, 不過小黑最引以為傲的鍵盤... 因為進水, 乾了之後打起來都卡卡的, 有的像是裡面卡了沙子, 按起來卡卡的... 有的像鞋底黏到口香糖, 按下去跳不起來 [:'(]

    這種 ThinkPad 怎麼用啊... 去 IBM 網站看, 自費換鍵盤要價 3650 NTD .. 土匪... 到 PCHome 看到英文的 (沒有印注音的字樣) 一片 "只要" 2300 NTD, 當場就刷了下去..

    原本就是等寄來就沒事了, 不過 pchome 竟然打來說沒貨 ( [:@] 上面寫庫存正常是寫假的嘛.. ), 要訂貨, 得等一個禮拜... 不等也不行, 就說 ok .. 隔天跟肉包聊到這件事, 他講去Y拍找找, 我才想到 "對喔, 怎麼沒想到.." ... 順手找了一下, 竟然有耶... 而且一片 "只要" 1500 NTD ...

    誰叫我不小心打翻飲料, 當年 X23 因為這樣花了 29xx 元去 IBM 換... 現在 1500 可以解決就偷笑了, 在公司下標, 隔天就收到貨了, 差點多花了 800 冤枉錢...

    現在總算一切搞定了 [:D], 新鍵盤真好打, 不過這片鍵盤還是跟原來的有點不一樣, 應該是給早期 X30 用的料號吧... 不管它了, 沒差多少, 貼幾張圖看看

    舊的鍵盤 新的鍵盤

    看起來我比較喜歡英文的這片... 乾淨多了, 那個 "ThinkPad" 的鈕看起來也比較順眼... 少了注音大概就沒有人會想來用我的電腦... 不過最重要的是, 以往 ThinkPad Keyboard 的手感又回來了.. [:'(]

     

     

    2006/07/21