Category Archives: Skysoft

I’m part-time working at Skysoft Co, Ltd. This category is talking about some notes in there.

在 Diablo II 中墮落

這幾天沒在 blog,原因是都跑到美西去練功了 :Q

然後練一練就去寫 的 code… 目前看起來 semaphore library (用 semaphore 實做 read/write mutex) 的部分沒問題了,要把 bbsd 用到的 code 整個檢查一次 :o

PS:用 semaphore 實做 read/write mutex 的方式我是參考 Implementing a Read/Write Mutex 這篇文章的說明。

擋 BBS 的 Crosspost 與 Multipost

先定義一下我所說的 Crosspost 與 Multipost。

在 Usenet 上,Crosspost 通常是指一個 Message-ID 有多個 Newsgroups,而 Multipost 是指同樣內容的東西貼到許多不同的 Newsgroups。而在 BBS 上,Crosspost 則是指「轉貼文章」的功能所產生的文章,而 Multipost 則是使用者自己一篇一篇的貼。

要注意的是,如果 BBS 上有轉信,由於 bbslink 不支援 Usenet Crosspost,所以轉出去的 article 都是 Multipost。

然後回到正題… 前幾天我在寫 的 code 發現 BBS 的 Multipost 似乎不好處理: 是直接限制每次上站只能 post 二十篇文章,其中在分站長與板主在自己地盤上發表文章不會計算在這二十篇內。

不過這種方式來擋 Multipost 看起來就很虛,於是就要找一些替代方案,不過我想了幾天沒想到,就跑去找一群不願意具名的長輩們討論 XD

中間討論的過程在 blog 上就略過好了 (有提出來很多實在是笨到不行的方法),直接講最後的做法:五分鐘內只能在五個看板發表文章。(當然,數字可以再調整)

所以你在某個看板上面灌水是沒有問題的 (因為只有一個看板),而如果你是回文章的話也沒問題,理論上看一看文章然後再 reply 的動作應該會超過一分鐘?:p

hmmm,大概先這樣 :p

EULA

Boing Boing 看到「How much crap is in your P2P app?」提到 EULA 的長度:

eDonkey’s EULAs fill 90 on-screen pages.

iMesh’s EULA is 56 on-screen pages. (I assume this is the version of iMesh from before they shut down). v Kazaa’s EULA fills 182 on-screen pages. The app writes 845 registry keys upon installation.

Morpheus shows you 44 on-screen pages of EULA for its bundle-ware, DirectRevenue.

LimeWire has no EULA and no bundle-ware. If you already have the Java Runtime Environment installed, it also has the smallest install footprint of any of the apps (cuz it’s a Java application).

咦,我應該去看看我們家 KKMan 有多長 XD

BBS 的字串搜尋

這幾天唸 algorithm 剛好念到幾個經典的 algorithm,其中之一就是 O(m+n) 的 KMP algorithm,突然想到 BBS 應該要大量使用這類 O(m+n) 的 algorithm 才對。因為掃一次 pattern 求出 fail function 後 (當然,為了速度要存到 array) 就可以不斷的重複使用。

string matching (nist.gov) 有列出不少都是 O(m+n) 的演算法。(當然,O(m*n) 的暴力法一定也會列的啦)

以 M3 (Maple3) 為例,在 ‘~’ 的串接功能,以及 ‘/’ 的中文看板板名搜尋 都應該以 KMP 改寫。於是這幾天就把 KKcity 的 str_str() 換了不少下來,在看板搜尋的部分果然馬上就有感覺。(因為全 KKcity 的看板實在太多了)

應該把 str_str_kmp() 以及 str_str_kmp_fail() 丟出來,接下來 itoc 就會處理了 :p