Latest Entries »

前一陣子花了些時間寫一個 allocator library. 首要目標就是要能符合 C++ Standard 對 allocator 定義的 requirement. 當然也要相容於 Standard C++ Library 的 container 實作, 能與所有的 container function 正確的 inter-operate. 在這個過程中, 我意外地一腳踏進又一個 C++ 的陰暗角落.

先讓我把這個有點嚇人的結論寫在前面:

    你所使用的標準 container , 很可能無法完全正確地與 object-stateful 的 allocator 一起運作. 即便該 allocator 確實是符合標準規範的.

不過先別慌. 只要拿來與 container 搭配使用的是沒有 per instance 狀態的 allocator, 你就不會遭遇本文所討論的問題.

View full article »

Why Const Matters

假設我們需要按照順序以紙條對 Alice 與 Bob 打招呼:

    void Alice(string& message_to_alice);
    void Bob(const string& message_to_bob);
    

View full article »

CONST LPLONG

實在是憋不住了, 還是來不正經一下.
View full article »

Do Things the Standard Style

見過不少 C/C++ Standard Library 的不愛用者. 要辨認他們並不困難, 從 code 中可以很容易發現:

  1. 在 header file 以 #pragma once 替代標準 inclusion guard 手法
  2. 將一個 const long* 宣告為 CONST LPLONG
  3. 習慣性使用 ZeroMemory/bzeroCopyMemory/bcopy, 而 (無意間?) 迴避 memsetmemcpy 等標準 API

除了省去替 inclusion guard 取有效 (唯一) 名字的功夫之外, 我實在是看不出上述習慣有任何實質上的好處.
View full article »

不適任的 System Administrator

為了幫助工作團隊建立個 knowledge base, 周四下午我開始著手安裝 MoinMoin Wiki 在公司一台跑 IIS 6.0 (on Windows Server 2003) 的內部 server 上.
View full article »

放大你的愛心

現在服務的公司正舉辦一項名為 “Give and Match” 的活動. 只要員工以本人名義捐助四川地震救災, 將錢捐給中華民國紅十字會總會或是慈濟, 公司就會再捐款四倍金額:

親愛的<公司中文名>人:

此刻,想必您已準備以實際行動投入賑災。「<公司英文名> Give and Match」專案,<公司中文名>將根據員工的捐款數,再投入一倍的<公司中文名>人捐款金額捐助緬甸洪水救災,四倍的<公司中文名>人捐款金額捐助四川地震救災。

請您立即行動,並將您的捐款收據以下列任一方式提供給HR以利金額計算。或您有相關問題,請連繫Doris Liu (#3484),謝謝大家。

建議捐款機構:

  • 中華民國紅十字會總會 http://www.redcross.org.tw/RedCross/page/pagetypeA1.jsp?groupid=106&webno=1&no=240&pageno=480
  • 慈濟 http://www2.tzuchi.org.tw/tc-join/html/donation05.htm (提供線上捐款)

捐款方式:請您以該機構接受之任一方式 (如信用卡, 郵匯 …等) 進行個人捐款。

如何將單據提供給公司以利員工捐款總額計算:

  1. 提供捐款轉帳憑據,如email確認信/信用卡刷卡單/ATM轉帳收據,並於其上註明你的員工編號,英文姓名,捐款對象 (緬甸 or 四川)。
  2. ※ 在您捐款轉帳後,稍後您應會收到該捐款機構提供之正式捐款收據,請您保留此憑證,若您之前提供HR的轉帳憑據不清楚,我們會與您聯絡請您提供該正式捐款收據。

  3. 將單據投入7F HR 所準備的「<公司英文名> Give and Match」箱,或以e-mail方式給Doris Liu。

特別注意:

  1. 若你在此公告發出前已自行捐款,一樣可將單據提供公司以計算捐款總額,但於此公告之後,僅接受於紅十字會及慈濟的捐款。
  2. 「<公司英文名> Give and Match」:即日起至 2008/6/6

想利用這個機會放大你的愛心? 請與我連絡: freak (at) fsfoundry (dot) org


[Follow up]

Vicky 2000
羅子洋 222
Barrose 1000
Polo 500
Me 7500
Total 11222

挺住

救災救難的英雄們, 請加油再加油!!!

… 然而就在搶救到最關鍵的時候,突然教學樓的廢墟因為餘震和機吊操作發生了移動,隨時有可能發生再次坍塌,再進入廢墟救援十分的危險,幾乎等於送死,當時的消防指揮下了死命令,讓鑽入廢墟的人馬上撤出來,要等到坍塌穩定後再進入,然而此時,幾個剛才廢墟出來的戰士大叫又發現了孩子。

幾個戰士聽見了就不管了,轉頭又要往裏鑽,這時坍塌就發生了,一塊巨大的混凝土塊眼看就在往下陷,那幾個往裏轉的戰士馬上給其他的戰士死死拖住,兩幫人在上面拉扯,最後廢墟上的戰士們被人拖到了安全地帶,一個剛從廢墟中帶出了一個孩子的戰士就跪了下來大哭,對拖著他的人說你們讓我再去救一個,求求你們讓我再去救一個!我還能再救一個!

看到這個情形所有人都哭了,然而所有人都無計可施,只眼睜睜的看著廢墟第二次坍塌。後來,那幾個小孩子還是給挖出來了,但是卻只有一個還活著,看著那些個年輕的戰士抱著那個倖存的小女孩在雨中大叫著跑向救援所在的帳篷的時候,她已經泣不成聲 …

雖然我的眼淚再也挺不住了, 但是倖存的小娃兒啊, 你一定要挺住…

活動網頁上表示暫定 5/14 在台北 5/14 上午在淡江大學及 5/15 在新竹傍晚在清華大學各一場. 台北那場我已 email 去報名了.

View full article »

Abrahams’ Guarantees

在 C++ 的世界裡, 正確的 exception handling 是專業的 C++ programmer 不可或缺的技巧. 雖然它的概念並不困難, 但實作起來卻常不見得那麼容易.

要做到正確的 exception handling, 首先必須要了解什麼是 exception safety. 一個需要與 exception 打交道的 component 可在其介面實作人稱 Abrahams’ guarantees 的三種 exception safety 保證之一:

  1. The basic guarantee
  2. 允許操作失敗時改變物件的狀態, 但不能有 resource leak. 且該物件的狀態必須是可靠的仍然可以被解構, 操作失敗後該物件的狀態可以是不完全能被預測的.

  3. The strong guarantee
  4. 操作後的狀態只能是成功完成, 或是將該物件回復到操作之前的狀態並拋出一個 exception.

  5. The no-throw guarantee
  6. 操作不會拋出 exception.

View full article »

昨天在網上閒逛, 在樂多上看到篇名為 “Socket Programming in C 常犯的錯誤” 的短文. 這短文作者的動機很好, 指出常見到的錯誤並提供個人看法與可能較好的作法. 這樣的行為很值得鼓勵. 但極可惜的是, 結果卻是很不理想的. 容我說句重話, 如果是考試的話該文是得不到我的分數的.
View full article »