To Polo, an Email not Sent
Posted on September 29th, 2006 at 23:34 by fr3@K

Polo 是我十幾年前的同學, 我們不但一直都是好朋友, 這兩年更一起工作. 今年初他也到了北京 office 上班.

由於感情因素, 我剛去北京的時候心情狀況非常糟, 我十分感謝有這個朋友, 有他陪我度過接下來的的幾個月, 直到我遇到現在的老婆.

大約四五個月前, 有段時間他的野蠻女友, 也不知道是真的還是假的, 總之跟他鬧分手, 這是我當時寫給他但一直沒寄的 email.

(more…)

del.icio.us:To Polo, an Email not Sent digg:To Polo, an Email not Sent spurl:To Polo, an Email not Sent newsvine:To Polo, an Email not Sent furl:To Polo, an Email not Sent Y!:To Polo, an Email not Sent 黑米共享書籤:To Polo, an Email not Sent 推推王:To Polo, an Email not Sent
Boost.Lambda
Posted on September 29th, 2006 at 20:32 by fr3@K

STL 提供了許多實用的 algorithm. 例如 for_each, 可將一個 functor 施用於一串 iterator 所 dereference 後的 instance:

    // Example A
    struct output_to_console_followed_by_a_space
    {
        template 
        void operator () (const T& instance) const
            {
                cout << instance << ' ';
            }
    };
    
    void foo (const vector& values)
    {
        // do a few things first…
    
        // some lines of code
    
        // some more code
    
        for_each(
            values.begin(),
            values.end(),
            output_to_console_followed_by_a_space());
    }
    

許多時候, 在 algorithm 中要對 iterator dereference 後得到的 instance 做的事情很 trivial. 就像例 A 一樣寫個 functor 一點都不困難, 可是卻有幾個地方很討厭.
(more…)

del.icio.us:Boost.Lambda digg:Boost.Lambda spurl:Boost.Lambda newsvine:Boost.Lambda furl:Boost.Lambda Y!:Boost.Lambda 黑米共享書籤:Boost.Lambda 推推王:Boost.Lambda
SSHing Hosts with Different Usernames
Posted on September 28th, 2006 at 20:43 by fr3@K

應該有不少人跟我一樣, 有好幾個在不同的地方 shell 帳號. 有自己的機器上的, 有公司的, 有花錢租的 virtual host, 有參加 FOSS 相關計畫用的. 這些帳號 (login name) 常不一樣.

當我在這些機器上 ssh 過來 ssh 過去的時候, 常得多敲好幾個鍵, 把 login name 餵給 ssh. 今天被這事情搞煩了, 認真把 ssh_config 的 man page 看了, 產出就是 ~/.ssh/config:


# Office
Host office-domain.name *.office-domain.name 192.168.* some-office-machine-name
    User login-name-at-office

# Some project
Host shell.foss-project.org
    User another-login-name

del.icio.us:SSHing Hosts with Different Usernames digg:SSHing Hosts with Different Usernames spurl:SSHing Hosts with Different Usernames newsvine:SSHing Hosts with Different Usernames furl:SSHing Hosts with Different Usernames Y!:SSHing Hosts with Different Usernames 黑米共享書籤:SSHing Hosts with Different Usernames 推推王:SSHing Hosts with Different Usernames
XIM on Deskbar Applet, but it’s really SCIM
Posted on September 28th, 2006 at 20:17 by fr3@K

猛然發現我的 Deskbar Applet 不能輸入中文 (使用 SCIM). 現象是 Crtl + Space 完全沒反應.

不令人意外地, Google 告訴我我不是孤獨的, 對岸也有人也遇到這問題, 而且解法非常神奇 - 在 Deskbar 上按右鍵, 在輸入法的選單裡選擇 XIM.

不解….

del.icio.us:XIM on Deskbar Applet, but it's really SCIM digg:XIM on Deskbar Applet, but it's really SCIM spurl:XIM on Deskbar Applet, but it's really SCIM newsvine:XIM on Deskbar Applet, but it's really SCIM furl:XIM on Deskbar Applet, but it's really SCIM Y!:XIM on Deskbar Applet, but it's really SCIM 黑米共享書籤:XIM on Deskbar Applet, but it's really SCIM 推推王:XIM on Deskbar Applet, but it's really SCIM
Bug Freedom
Posted on September 27th, 2006 at 16:39 by fr3@K

同事 Brian 說:

沒有所謂 bug free 這回事,只有 Bug Freedom。

就跟打麻將沒有不放炮一樣,

寫程式也不會沒有 bug,

這,就是 Bug Freedom。

請受小弟一拜 Orz

del.icio.us:Bug Freedom digg:Bug Freedom spurl:Bug Freedom newsvine:Bug Freedom furl:Bug Freedom Y!:Bug Freedom 黑米共享書籤:Bug Freedom 推推王:Bug Freedom
NAT Traversal, part 1 - NAT Behavior
Posted on September 21st, 2006 at 1:12 by fr3@K

續自 NAT Traversal, part 0.

NAT (不包含防火牆) 處理 UDP 封包的行為中, 對 p2p 影響最大的兩類為:

  1. External Port Mapping
  2. Filtering

exteranl-port-mapping.640x550.png

External Port Mapping 指的是當使用內部同一個端口 (L:l) 對外部發封包的時候, NAT 對外面是否使用同一個端口 (N:?):

  • 若 NAT 對外使用的都是同一個端口 (n1 == n2 && n2 == n3), 則該 NAT 的 External Port Mapping 行為是 endpoint independent (與外部端點無關).
  • 若只有在外部端點 IP 不變只變 port 的情況下, NAT 對外使用的都是同一個端口 (n1 == n2 && n2 != n3) 則該 NAT 的 External Port Mapping 行為是 address dependent (與外部端點地址有關).
  • 若對任何不同的外部端點 NAT 對外使用的都不是同端口 (n1 != n2 && n2 != n3 && n1 != n3) 則該 NAT 的 External Port Mapping 行為是 address port dependent (與外部地址與端口都有關).

filtering.640x550.png

Filtering 指的是在不考慮封包掉了的情況下, 當一個位於內部的端口 (L:l) 對外部的一個端口 (X:x1) 發了封包, 外部不同端口 (X:x1, X:x2 and Y:y) 對 NAT 上 map 出來的端口 (N:n) 發封包時的過濾行為:

  • 若內部端口都能收到任何外部端口所發的封包, 則 該 NAT 的 Filtering 行為是 endpoint independent.
  • 若內部端口能收到外部同一個 IP 的另一個端口 (X:x2) 所發的封包, 則該 NAT 的 Filtering 行為是 address dependent.
  • 若內部端口僅能收到外部同一個 IP 固定端口 (X:x1) 所發的封包, 則該 NAT 的 Filtering 行為是 address port dependent.

在所有 NAT 上, 這兩類行為都同時存在. 但組合起來時, 不是如直覺般產生九種組合 (3 X 3 的矩陣). 細想一下就會知道只能有六種組合:

  • External Port Mapping 為 endpoint independent 時, Filtering 可為 endpoint independent, address dependent 或 address port dependent.
  • External Port Mapping 為 address dependent 時, Filtering 可為 address dependent 或 address port dependent.
  • External Port Mapping 為 address port dependent 時, Filtering 只能是 address port dependent.

繼續閱讀 NAT Traversal, part 2 - STUN.

del.icio.us:NAT Traversal, part 1 - NAT Behavior digg:NAT Traversal, part 1 - NAT Behavior spurl:NAT Traversal, part 1 - NAT Behavior newsvine:NAT Traversal, part 1 - NAT Behavior furl:NAT Traversal, part 1 - NAT Behavior Y!:NAT Traversal, part 1 - NAT Behavior 黑米共享書籤:NAT Traversal, part 1 - NAT Behavior 推推王:NAT Traversal, part 1 - NAT Behavior
給小乖乖
Posted on September 20th, 2006 at 18:17 by fr3@K

心動是遇見了你,

快樂是因為有你,

等待是為了相聚,

幸福屬於我們一起,

再也不要分離,

我的誓言永不過期。

del.icio.us:給小乖乖 digg:給小乖乖 spurl:給小乖乖 newsvine:給小乖乖 furl:給小乖乖 Y!:給小乖乖 黑米共享書籤:給小乖乖 推推王:給小乖乖
NAT Traversal, part 0
Posted on September 20th, 2006 at 1:43 by fr3@K

根據 wikipedia 的定義, 一個 peer-to-peer (p2p) computer network 是一個主要依賴該網路上參與者 (相對於依賴服務器) 的運算能力與帶寬的網路.

P2p 網路的達成主要有兩個困難點:

  1. Signal, 一個 peer 如何找到另一個 peer 並與其溝通
  2. P2p 資料傳輸

達成第一點的方法, 也就是使用的 signalling protocol 有很多, 現階段的規範也比較成熟完善. 例如 SIPIMS. 相對來說, p2p 的資料傳輸是更走在技術的前沿.

無論原因為何, 大多數的裝置 (通常是電腦) 不是直接連上 Internet, 而是透過 NAT 或 NAPT (以下均稱為 NAT) 連上 Internet. 在這種情況下, NAT 的穿透 (NAT traversal) 成為了 p2p 資料傳輸的前提.

這些在 NAT 後面的裝置沒有公網 IP, 如不利用服務器轉送, 傳統上幾乎沒有廣泛通用的方法 從一台這樣的裝置把資料傳輸資料到另一個這樣的裝置.

技術是一直在往前走的, 現在, IETFbehave , midcommmusic 等 working group 已提出在多數狀況下達到 p2p 資料傳輸的方法 (protocol). 在開始進入這些方法之前, 對 NAT 的相關行為必須要有透徹的了解.

這一系列的 NAT Traversal 將從了解 NAT 的行為開始, 到 STUNTURN, 計畫會在 ICE 以及 ICE 在 SIP 的應用劃下句點.

繼續閱讀 NAT Traversal, part 1 - NAT Behavior.

del.icio.us:NAT Traversal, part 0 digg:NAT Traversal, part 0 spurl:NAT Traversal, part 0 newsvine:NAT Traversal, part 0 furl:NAT Traversal, part 0 Y!:NAT Traversal, part 0 黑米共享書籤:NAT Traversal, part 0 推推王:NAT Traversal, part 0
Protected: Chen’s Office and Resident Circumvallated
Posted on September 16th, 2006 at 1:08 by fr3@K

This post is password protected. To view it please enter your password below:


del.icio.us:Chen's Office and Resident Circumvallated digg:Chen's Office and Resident Circumvallated spurl:Chen's Office and Resident Circumvallated newsvine:Chen's Office and Resident Circumvallated furl:Chen's Office and Resident Circumvallated Y!:Chen's Office and Resident Circumvallated 黑米共享書籤:Chen's Office and Resident Circumvallated 推推王:Chen's Office and Resident Circumvallated
Protected: Red Tide in September
Posted on September 14th, 2006 at 2:17 by fr3@K

This post is password protected. To view it please enter your password below:


del.icio.us:Red Tide in September digg:Red Tide in September spurl:Red Tide in September newsvine:Red Tide in September furl:Red Tide in September Y!:Red Tide in September 黑米共享書籤:Red Tide in September 推推王:Red Tide in September

Page 1 of 2[ 1 ]2»