JeffHung.Blog

(My smile insists of having nose. :-)

黑米商業模式大解密?

昨天才發了篇《見微知著》,剛剛就從 XDite 那邊看到的:《未經書面允許,不得惡搞?》,獨孤木發信決定退出黑米,Qing 也發文說明,他的程式,幾乎不會對黑米造成預期之外的影響。
阿西事件時,黑米也曾經自己改過使用者條款,而且沒有公告周知[1]。印象中是阿西先被逼走,在熱烈的討論之下,於是黑米增設了「禁止玩殘黑米條款」。那什麼叫做「玩殘黑米」的行為呢?條款裡寫的很模糊,不過按照經驗,大概是指會讓站長看得不開心的行為吧?!
印象中,「其他『黑米』有正當理由認為不適當之行為」那時就加了[2]。可惜 Internet Archive 只有收集到 2006-04-30,且所收集到的所有時間點,黑米都未曾出現過「服務條款」。不過,既然早就決定退出黑米,所以也沒有螢幕截圖留證就是了。
Qing 說,「以後黑米就加一條:使用者如果使用黑米的服務,必須每月支付一百萬元新台幣,並且溯及以往」。一開始倒真是嚇到我了,尤其是黑米二年級生的感嘆也指出:

黑米條款第一條是這麼寫的:"「黑米」有權於任何時間修改或變更本約定書之內容,建議您隨時注意該等修改或變更。您於任何修改或變更後繼續使用「黑米」,視為您已閱讀、瞭解並同意接受該等修改或變更。若您不同意以下所述內容,請暫時不要參與黑米網站上的活動。"

難道,這就是黑米的 business model 嗎?
只有在某些討論串裡提及。 ↩記得我很早就提過(黑米新搜尋真的好難用,找了好久才找到),黑米應該好好去請個律師,把制度搞好。不過,到現在這個版本的使用者條款,某些部份還是看起來讓人覺得匪夷所思。 ↩

見微知著

該怎麼說呢,見微知著?
如果一個社群的管理者(站長),會說出這種話:「如果我辛苦架設一個網站,連我自己都看得不開心的話,那我甘願冒上被扣上獨裁或不民主的帽子,使出我最不想使用的方法請你離開。」把使用者逼走,那我們就可以想像,該社群的風格會如何。
果不其然,就在有人協助黑米做出黑米書籤搜尋後沒多久,該黑米書籤搜尋就被黑米 ban 掉了[1],然後隔天就出了新版的黑米站內搜尋。
嗯,測了一下黑米的新版站內搜尋書籤討論,找不到「如果我辛苦架設一個網站,連我自己都看得不開心的話,那我甘願冒上被扣上獨裁或不民主的帽子,使出我最不想使用的方法請你離開。」這句話耶。
一種可能是還沒 index 到比較舊的資料,所以找不到。不過還沒 index 完就急著推出,嗯……。
另一種可能是,因為「HEMiDEMi 書籤匯出工具」跟「HEMiDEMi 書籤搜尋工具」是用同一個 IP,所以其實是「HEMiDEMi 書籤匯出工具」被 ban。這樣的話,勉強可以說是,一個是不友善的行為,另一個不是。不過,也有可能都被認為是不友善的行為就是了。:-p
但是,在 web 2.0 時代,這種 mash-up/add-on 應該要被視作是友善的行為啊[2]。
最後一種可能,是我不會用。也許,所謂的「關鍵字」,是指兩個字以內的詞[3],但我用「網站 獨裁 民主」還是找不到任何東西就是了。
唉~沒關係啦,站長是王咩。
更新 (2007-06-07):用「獨裁」找到 17 頁,共 161 筆資料,目標在第 7 頁,關聯度 2.84%。所以結論是,只能用一個關鍵字,而且還不能太長。所以其實這個功能,沒什麼存在的價值。
更新 (2007-06-08):後續請參見《黑米商業模式大解密?》一文。
據說「一天的 page request 數可是 100 都不到」。 ↩內在?! ↩bi-gram?!(經指出:「bi-gram != 二字詞」。我說清楚一點好了,用二字詞來測,是為了避免踩到「東西」。假設這個搜尋是用 bi-gram 做的,因為這通常簡單一些。但如果沒做好的話,可能會有些 bug,如三字詞就找不到了。因為我一開始是用一整句丟下去找卻找不到,所以也許是長詞會找不到,所以就取極端一點,只用二字詞來當關鍵字。更新:用「甘願冒被扣上獨裁或不民主的帽子」找的話,就可以找的到了。所以可能跟標點符號有關,如標點符號被濾掉後,變成「如果我辛苦架設一個網站連我自己都看得不開心的話那我甘願冒上被扣上獨裁或不民主的帽子使出我最不想使用的方法請你離開」,然後找不到這個長詞,而使得搜尋失敗。) ↩

Editplus Pros.

剛進大學時,聽說 UltraEdit 是 programmer 必備的編輯器,也用了一段時間。不過後來遇上了 Editplus,從此把 UltraEdit 完全捨棄,從大四一直用到現在,也將近七個年頭了,剛剛在看 BBS 上的舊文章,發現自己雖然提到過很多次,但從來沒有在 blog 上跟大家介紹 Editplus,因此特地寫這一篇,勸說大家離開 UltraEdit 的懷抱。
簡單先用一句話介紹:「除了 binary(hex) edit 以外,UltraEdit 有的 Editplus 都有,Editplus 有的 UltraEdit 不一定有。」
在七年前,如果把 UltraEdit 與 Editplus 的功能列出來比較的話,基本上 UltraEdit 是被「巴」假的。一直慢慢等到 UltraEdit 陸續新增了四、五個版次[1],UltraEdit 的功能,才漸漸地追上 Editplus。而 Editplus 的版次,從七年前到現在,都還是 2,從以前就一直強悍到現在。
Editplus 好在哪裡?先來貼一下 BBS 上的舊文:

作者 JeffHung (御風只配做笨木頭), 信區: BBS_History
標題 Re: 最近.....
時間 淡江資工地上站 (Fri Jun [...]

五年前我的個人(用)網站

今天在 IRC 裡跟 Qing 聊到怎麼爬 HemiDemi,提到五年前我自己也有寫過(個人用)的書籤模組。剛剛興起,就跑去 Internet Archive 把我以前的個人(用)網站挖出來回味。
我以前用的網址是 www.jeffhung.idv.tw,因為最便宜。以前的網站,基本上只是一個大雜燴式的首頁。從 archive 可以看出,這個大雜燴式的首頁,我從 2002 年六月,一直用到了 2005 年四月,差不多用了 3 年,然後才換成現在用的 wordpress 系統。
基本的構想是,幾乎所有事情都可以在首頁裡解決。每樣功能,被作成一個一個的區塊,我稱之為 weblet。約略在同一時期,Java 也有套類似的 framework,稱之為 portlet。我不清楚 portlet 的定義其實為何,因為我沒有研究過。但我對 weblet 的定義,約略等同於一個 desktop application 的視窗。
那時候沒有 AJAX 這種東西[1],所以沒有所謂「直接在 client 端執行的程式實體」這種概念。因此,weblet 後端有個 WebOS 引擎,貫穿 HTTP 的 stateless 天性,負責 weblet 的 persistency across HTTP requests。也就是說,WebOS 會負責在每次頁面切換時,將各個 weblet 喚醒,給予對應的 event,最後呼叫如 OnPaint() 之類的函式,讓每個 weblet [...]

RoR vs. PHP?談 web 開發技術的未來?

本文拖太久了,斷斷續續寫,寫到後來都忘記本來想寫什麼了。不過我發現,好像 thegiive 自己分多次,把很多我要寫的都寫完了。:-p
剛剛看到這篇《Twitter , Rails , Scalibility...More》,我哈哈大笑三聲。所謂的 scalability,就是「有沒有能力在短時間內應付突然爆增的流量成長」嘛!結果 thegiive 最後的結論竟然是:

那麼一時之間無法解決也是非常正常的事情。所以,他們應該也不是太懶惰,只是成功的太突然,沒辦法吃下來。…至於 Ruby 是不是真的太慢,Rails 是不是真的不夠 Scalibilty 呢?這個問題我也不知道…

既然這樣子,那我也沒辦法了,寫再多,又有何用,情人眼中出西施咩。所以剩下的我也就懶得寫了,各位看官自行斟酌吧。

這篇是為了回應 thegiive 的這篇《簡單的回應 JeffHung 的文章》,thegiive 對於我在《COSCUP2006》裡對 RoR 的一些意見,不表認同。不過在談技術之前,我想先澄清一點的是,這種很明顯地就是會沒有結論,甚至容易陷入 flame war 的問題,其實並不適合在那種場合提出 challenge,因為不會解決任何事情。用 challenge 這個字眼,其實也不太對,COSCUP 是個可以讓大家 up up 的場合,真的沒有必要白刀子進紅刀子出。事後的交流,也是可以產生火花,而且更為持久,一切由心,端看我們怎麼想,個人覺得實在是沒有必要那麼亢奮。
再好的 template engine,也解決不了套版的問題
我們先來看看套版的問題好了。也許是雙方對「套版」兩字的定義不同吧?我的意思是,在一般網站的開發過程中,程式設計師將動態網頁的功能寫好時,通常網頁的畫面是「素」的,非常陽春不經任何裝飾。接下來要做的就是,將轉交給版面設計師,也就是俗稱的美工,所設計好的華麗版面,套在這個「素」的版面上。對於程式設計師來說,這個「套版」的過程,通常是非常痛苦無聊的,但又不可能交給版面設計師處理,因為通常版面設計師,並無法處理到「碼」的層級。面對美麗的美工姊姊,小小工程師只好乖乖地與複雜的 HTML 混碼奮鬥。
更恐怖的是,通常來說,這個過程不會只做一遍,通常會形成一個循環,程式改好後套版,版面或程式稍微改寫之後,又要重新套版,循環不休。這當然是因為,在專案進行的過程當中,通常不可能很幸運地可以一條鞭式地順著瀑布溜下來。
對於套版問題,目前已經成熟的技術,是各式各樣的 template engine,如 PHP 的 Smarty。除了解決了 security-concern、separate-from-login 與 caching 等需求之外,簡單的語法,也讓套版的困難度,降低了少許。但無論如何,template 仍然是以「碼」的形式存在,要處理套版,仍然是只能讓程式設計師會版面設計,或者是讓版面設計師會寫點程式。
幸好,這個世界有在慢慢地改善,隨著 CSS/W3CStd. 的普及,以及 Ajax 的流行,套版的問題,將可以得到相當大的改進。如果網頁是功能性的,像 Gmail 那樣,比較好的解法會是使用如 ZK、GWT 這類的 Ajax [...]

Windows Mobile 6 SDK

舊聞新發,不過我弄丟了原來寫文章時的 timestamp。
Windows Mobile 6 SDK 開放下載了,分 Standard 跟 Professional 兩個版本,兩者主要差在支援的平台不同,不過因為 Professional 版沒有包含 Standard 版,所以最好還是兩個版本都安裝。
花了一天下載後,嘗試安裝。安裝程式跟我說,需要安裝下列三樣東西:

Visual Studio 2005 SP1 or later
ActiveSync 4.5
.NET Compact Framework 2.0 SP1

前兩者很好理解。Visual Studio 2005 是用來當作開發平台用的,SDK 提供 header files、libraries 以及 emulator 等,Visual Studio 2005 則提供 compiler 與 IDE。而 ActiveSync 4.5 的角色,當然就是負責傳輸編譯好的程式,到 mobile device 上,以及負責 debug 時所需要的協同傳輸。
但 .NET Compact Framework 2.0 SP1 就讓我搞不清楚啦,我不是已經裝了 .NET Framework [...]

GNU make is unmaintained?

在做 cdrtools 時,看到這個 message:

===> Building for cjk-cdrtools-2.01.20041227_2
W A R N I N G Messages like:

gmake[2]: Entering directory `/tmp/cdrtools-2.01/libschily'
../RULES/r-gmake.dep:76: OBJ/<arch-dir>/cvmod.d: No such file or directory
../RULES/r-gmake.dep:76: OBJ/<arch-dir>/dat.d: No such file or directory
../RULES/r-gmake.dep:76: OBJ/<arch-dir>/fcons.d: No such file or directory
../RULES/r-gmake.dep:76: [...]

回應 tfing 的問題

tfing 在我這篇《新同事》詢問,為甚麼我遇到的一些情況,是不好的。寫一寫發現太多了,乾脆另開一篇。
在 VC6 裡,做 .lib 時,是不會檢查 dependency 的。也就是說,如果你呼叫了另外一個 .lib 的 function,只有 compiler 會檢查該 function 有否宣告過,linker 不會檢查該 symbol 是否存在。因此,如果 include path 有設,header 也有 #include,就不會顯示任何錯誤。必須要等到用該 .lib 的人,在做 .exe 或 .dll 時,才會產生 missing symbol 的錯誤。[1]
另外,.lib 相當於是把所有 function 都赤裸裸地開放出來,這樣就沒有所謂的「模組介面」,因此很容易就會亂呼叫 function,而沒有注意到,呼叫了不應有相依關係的 component 裡的函式[2]。又由於前述不會有 missing symbol 錯誤的關係,而無法察覺這樣的錯誤,因而導致最終程式的 dependency 關係會一團亂。
亂 call function,除了上面「呼叫了不應有相依關係的 component 裡的函式」的狀況之外,還包含了「喜歡自行在 .c/.cpp 檔前面,重複宣告函式,而不是用 #include 將對應的 header 引入」。 這會造成當所依存的 component 更新,prototype 改變時,會無法於 [...]

pkginfo2dot.pl - draw freebsd installed package dependencies

承襲上篇《dsw2dot.pl - extract and draw project dependencies》,又手癢寫了 pkginfo2dot.pl,將 freebsd 裡已安裝的 packages,彼此之間的 dependencies 畫出來。這個 script 的 usage 如下:
Usage: pkginfo2dot.pl [ <option> ... ] <dot-file> <pkg-glob> ...

Generate graphviz digraph script <dot-file> according to pkg_info(1) outputfor package <pkg-glob>s..  If path of digraph script <dot-file> is a singledash, will output to standard output.

Options:

  -h,--help               Show this help message.  -n,--name <graph-name>  Set [...]

dsw2dot.pl - extract and draw project dependencies

很多時候,build 程式時最後會死在 link error,一堆 symbol 會找不到。最後追查下來,通常會發現是 project dependencies 沒有設好的緣故。由於是「找不到」而不是「用得不對」,因此我們通常得用 grep 之類的工具,從十幾萬行的程式裡,去尋找遺失的 symbol 在哪裡。當一個 dependency 忘記設時,可能遺失的 symbols 會達上百個[1],要一個一個手動尋找時,就很討厭了。
為了避免這樣的情形,也為了方便確認目前系統各 components 的關聯情形,如同原本預計的理想狀態,我寫了一個簡單的 script,叫 dsw2dot.pl,能夠 parse VC6 的 dsw 檔,然後依據內函的各 project 檔的相依情形,產生 GraphViz 的 dot 檔 script。這樣一來,我就可以用 dot 產生 png/svg/... 等各種圖形了。
這個程式的 usage 如下:
Usage: dsw2dot.pl [ <option> ... ] <dsw-file> [ <dot-file> ]

Generate graphviz digraph script <dot-file> according to project dependenciesthat [...]

 Prev 1 2 3 4 5 6 7 8 ...17 18 19 Next