Posted on September 29th, 2006 at 23:34 by fr3@K
Polo 是我十幾年前的同學, 我們不但一直都是好朋友, 這兩年更一起工作. 今年初他也到了北京 office 上班.
由於感情因素, 我剛去北京的時候心情狀況非常糟, 我十分感謝有這個朋友, 有他陪我度過接下來的的幾個月, 直到我遇到現在的老婆.
大約四五個月前, 有段時間他的野蠻女友, 也不知道是真的還是假的, 總之跟他鬧分手, 這是我當時寫給他但一直沒寄的 email.
Polo 是我十幾年前的同學, 我們不但一直都是好朋友, 這兩年更一起工作. 今年初他也到了北京 office 上班.
由於感情因素, 我剛去北京的時候心情狀況非常糟, 我十分感謝有這個朋友, 有他陪我度過接下來的的幾個月, 直到我遇到現在的老婆.
大約四五個月前, 有段時間他的野蠻女友, 也不知道是真的還是假的, 總之跟他鬧分手, 這是我當時寫給他但一直沒寄的 email.
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…)
應該有不少人跟我一樣, 有好幾個在不同的地方 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
猛然發現我的 Deskbar Applet 不能輸入中文 (使用 SCIM). 現象是 Crtl + Space 完全沒反應.
不令人意外地, Google 告訴我我不是孤獨的, 對岸也有人也遇到這問題, 而且解法非常神奇 - 在 Deskbar 上按右鍵, 在輸入法的選單裡選擇 XIM.
不解….
同事 Brian 說:
沒有所謂 bug free 這回事,只有 Bug Freedom。
就跟打麻將沒有不放炮一樣,
寫程式也不會沒有 bug,
這,就是 Bug Freedom。
請受小弟一拜 Orz
NAT (不包含防火牆) 處理 UDP 封包的行為中, 對 p2p 影響最大的兩類為:
External Port Mapping 指的是當使用內部同一個端口 (L:l) 對外部發封包的時候, NAT 對外面是否使用同一個端口 (N:?):
Filtering 指的是在不考慮封包掉了的情況下, 當一個位於內部的端口 (L:l) 對外部的一個端口 (X:x1) 發了封包, 外部不同端口 (X:x1, X:x2 and Y:y) 對 NAT 上 map 出來的端口 (N:n) 發封包時的過濾行為:
在所有 NAT 上, 這兩類行為都同時存在. 但組合起來時, 不是如直覺般產生九種組合 (3 X 3 的矩陣). 細想一下就會知道只能有六種組合:
心動是遇見了你,
快樂是因為有你,
等待是為了相聚,
幸福屬於我們一起,
再也不要分離,
我的誓言永不過期。

根據 wikipedia 的定義, 一個 peer-to-peer (p2p) computer network 是一個主要依賴該網路上參與者 (相對於依賴服務器) 的運算能力與帶寬的網路.
P2p 網路的達成主要有兩個困難點:
達成第一點的方法, 也就是使用的 signalling protocol 有很多, 現階段的規範也比較成熟完善. 例如 SIP 與 IMS. 相對來說, p2p 的資料傳輸是更走在技術的前沿.
無論原因為何, 大多數的裝置 (通常是電腦) 不是直接連上 Internet, 而是透過 NAT 或 NAPT (以下均稱為 NAT) 連上 Internet. 在這種情況下, NAT 的穿透 (NAT traversal) 成為了 p2p 資料傳輸的前提.
這些在 NAT 後面的裝置沒有公網 IP, 如不利用服務器轉送, 傳統上幾乎沒有廣泛通用的方法 從一台這樣的裝置把資料傳輸資料到另一個這樣的裝置.
技術是一直在往前走的, 現在, IETF 的 behave , midcom 與 mmusic 等 working group 已提出在多數狀況下達到 p2p 資料傳輸的方法 (protocol). 在開始進入這些方法之前, 對 NAT 的相關行為必須要有透徹的了解.
這一系列的 NAT Traversal 將從了解 NAT 的行為開始, 到 STUN 與 TURN, 計畫會在 ICE 以及 ICE 在 SIP 的應用劃下句點.
Except where otherwise noted, this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.