Home » 2007 » June (Page 3)

Safari 的 display: table-cell

找到的 bug 似乎是講用 Javascript 動態改變 display 時的 bug,不過我遇到的是純 CSS 的 layout 問題...

丟到 IE6/Firefox2/Opera9/Safari2/Safari3 測試,發現在 2.0.4 (Mac) 及 3.0.1 (Win) 上都會先出現 #id2 再出現 #id1,但是其他的瀏覽器都是先顯示 #id1 再顯示 #id2。

這是在我的 Windows 上顯示出來的結果,Safari 2.0.4 (Mac) 的結果跟 Safari 3.0.1 (Win) 的結果一樣,再加上我手邊沒有 Mac,就不貼了:

我的問題是, 這兩個都通過 的 Browser 到底哪個才是正確的?

UpdateThe display declaration 上早就提過這個問題了。

幫 Pixnet 做 Fulltext Search

這幾天總算是比較接近完成的階段了,在問過 之後來寫一篇講一下。

大約是在年初的時候 就想要將 Pixnet Blog 的部份弄 Fulltext Search,剛好那陣子我也在弄類似的東西,survey 一些對 CJK 支援比較好的 Fulltext Search Engine,當時看起來比較好用是 維護的 。(我也寫了 HyperEstraierHyperEstraier 與 qdbm 的一些雜記 兩篇文章)

不過後來 將近三個月沒更新,加上 那陣子在忙公司整合的事情,所以這件事情在收了訂金後就一直擱著... (皇上都不急了,太監就不要在旁邊跳腳...)

除了 外,我還有訂另外幾個 Fulltext Search Engine 的 mailing list,其中 用的 也蠻值得關注的。我從 0.9.x 版的時候就在觀察,當時連 UTF8 support 都沒有,但是 有丟出 3rd party patch。不過我寫信去問 得到的回答是,文章數量很大,但是每天搜尋的人次並不多,平均不到 1 query/sec。(信件在 /var/mail/gslin,隨著硬碟爛掉沒備份到消失了,只能憑映象寫...)

再加上 以英文為主,當時沒有很仔細繼續去研究,直到後來在 的 mailing list 上看到有對岸的人說中文的部份他用的很好,仔細去研究以後發現其實是因為以前想的太複雜,加上對 不熟造成的誤解而沒有仔細去研究 的細節。

所以... 以下進入 的細節。

的每一份文件 (Document) 分成三個部份,文件主體 (Data)、 (Value)、項目 (Term)。Data 是一組字串,通常就是放文章內容,但是也可以不用放。Value 是 key+value 的集合,key 的部份是數字,而 value 的部份則是一個字串,Value 可以用很多組。(這邊的 "value" 並不是遞迴定義,而只是官方取的名字剛好就是 Value)

不過上面那兩項都是插花用的,重點在 Term。一個 Term 是一個帶有 weight 的字串,會被 索引。所以你可以對 Term 下搜尋條件, 會傳回符合的項目。

對英文來說,假設我要索引 "A apple a day keeps the doctor away." 這個句子,那麼我只要以非英文字的部份切開就可以了,換句話說,最簡單的情況會被切成:['a', 'apple', 'a', 'day', 'keeps', 'the', 'doctor', 'away'],另外內建常用字的詞庫把一些比較沒有意義的詞濾掉,於是 a、the 就會被濾掉變成:['apple', 'day', 'keeps', 'doctor', 'away'],然後再進一步對詞性做處理,於是把 keeps 轉成 keep,最後索引成:['apple', 'day', 'keep', 'doctor', 'away']

對中文來說 (以及日文、韓文),假設我要索引「端午假期16日、20日兩次夜間暫停收費」這個句子,以單字一個一個切開,切成 ['端', '午', '假', '期', '16', '日', '20', '日', '兩', '次', '夜', '間', '暫', '停', '收', '費'],或是兩個字兩個字切,切成 ['端午', '午假', '假期', '期16', '16日', '20日', '日兩', '兩次', '次夜', '夜間', '間暫', '暫停', '停收', '收費'] 似乎都不太好,前者當搜尋條件很少的時候準確度不太高 (像是以「林洋港」為條件搜尋時可能會找到討論海港旁邊樹林的文章),而後者則會收了不少沒有意義的字,像是 '期16', '日兩', '間暫',而且像是 '次夜' 其實不是這句的應該有的意思。

所以對於 CJK 的斷詞演算法來說,能夠切出符合的 Term 才是重點,於是就有很多論文在討論這些方法... 不過很多方法都是建立在詞頻表上面,換句話說,詞頻表的正確性會影響到搜尋的品質,而為了確保詞頻表的正確性,有很多時候必須讓人力去介入,這點我跟 都不太喜歡,我們偏好的是即使不去管,也保持一定的水準的方法。

所以我跟 解釋完以後,決定用一字表 + 兩字表硬切產生所有的 Term (也就是上面兩組都取來當 Term),然後看看效果如何。在跑了二十幾個小時將全站所有文章掃過一次後內部測試 (目前最新文章的 id 是 528xxxx,實際的數字當然比這個少,不過 說這是商業機密不能公開 XD), 對於搜尋出來的品質還蠻滿意的,所以就切到兩個字... (如果 不滿意的話我打算再把三個字的切詞加上去 XD)

然後用 兜個 HTTP API 出來讓前端的 Web 用,其實就很棒了 :p (我知道有 xapian-tcpsrv,不過...)

所以大概就是這樣啦, Blog 的 Fulltext Search 應該有機會在七月底前看到吧?(因為 很墮落,所以我實在不能保證六月底前出的來... XD)

各瀏覽器的速度

Note:這只是在 Javascript 裡跑 CSS Selector 的速度。

剛好看到 SlickSpeed CSS Selector TestSuite 這篇文章,在 Windows 上測了幾個瀏覽器,單位都是 ms (所以數字愈小愈好),測試的時候都儘量保持不動電腦的情況下跑完:

1.5.1 1.1.2dev 1.2dev 1.1b1 2.02
61600323813028396511
2.0.0.5 pre17642891449655411
9.206814451121981122
3 beta120733140152931

呃, 2 的速度... (想裝地雷看看有沒有進步,結果想到早上才失敗過,沒辦法測 XD)

Update:網頁上多了 的測試項目,速度也還不錯。

啟用 Safari (Windows 版) 的除錯選單

看到的,原文在 Enabling the debug menu on Safari for Windows 這篇。提到如何把 bug 滿天飛的 Safari for Windows 的除錯選單打開。

如果是 Windows XP,打開 C:\Documents and Settings\Your Username\Application Data\Apple Computer\Safari 下的 Preferences.plist (如果是 Vista,則是在 C:\Users\Your Name\AppData\Roaming\Apple Computer\Safari 下面),這是一個 XML 檔,在接近尾端的地方加上下面兩行:(</dict></plist> 的前面)

<key>IncludeDebugMenu</key>
<true/>

然後再打開 ,就可以看到 Debug 選單出現。

功能不是很多,最實用的應該是修改 User Agent 的功能,以及 Import Bookmarks 的功能吧?

Mozilla Firefox 3.0a6

因為 通過 的關係而特地去裝 Mozilla Firefox 3.0a6,果然如同 code name 一樣是 Minefield... 把系統內的 的設定砍掉後重新安裝 (包括 Document and Settings 裡的個人設定與 Program Files 裡的檔案),連裝都裝不起來... XD

把 3.0a5 裝起來後,再升級到 3.0a6 後又爛掉 XD 晚點再裝回 2.0.0.5pre 好了...

Mac 上的 Safari 移植到 Windows

Mac 上的 移植到 Windows 上了,而且不只是軟體移植而已,裝起來以後我發現我瞬間被 漂亮的 antialias 擊沉了...

不過, 說的 Beta 版真的就是 Beta,跟 那種不一樣... XD

目前我在 Windows XP 上測試的情況,碰到 Bookmark 的功能就會 Crash,用酷音輸入法在 Form 裡面輸入文字一次只能輸入一個字... 另外在 的 Browser 板上,以及學弟都有回報看不到中文的情況。

Update:Bookmark 的問題在文章後面的 comment 有提到解法了。把四個目錄裡的 en.lproj 複製成 zh.lproj 後就正常了。(Thanks! Daniel)

Anyway,這是 在 Windows 下 的 Screenshot:

要注意的幾點:(大概沒人看 EULA 吧?XD)

3. Consent to Use of Data. You agree that Apple and its subsidiaries may collect and use technical and related information, including but not limited to technical information about your computer, system and application software, and peripherals, that is gathered periodically to facilitate the provision of software updates, product support and other services to you (if any) related to the Apple Software, and to verify compliance with the terms of this License. Apple may use this information, as long as it is in a form that does not personally identify you, to improve our products or to provide services or technologies to you.

這代表 可以蒐集你的資料。

另外這是測試版本,到下次發行或 12/31 時失效:

4. Term of License. The term of this License shall commence upon your installation or use of the Apple Software and will terminate automatically without notice from Apple upon the next commercial release of the Apple Software, or December 31, 2007, whichever occurs first. Your rights under this License will also terminate automatically without notice from Apple if you fail to comply with any term(s) of this License. Upon the termination of this License, you shall cease all use of the Apple Software and destroy all copies, full or partial, of the Apple Software.

s3cmd (Amazon S3 CLI)

本來打算等到 的時候寫的,結果進 Ports 後反而一直忘了寫... 使用 的人可以到 下安裝。

的介紹請先看:「」這篇以及「」這篇,或是直接去官方網頁上看也可以。

很粗略的說, 是一個付費的網路磁碟機服務,沒有最低消費額度,用多少算多少。

是一個以 寫出來的 CLI client。

在申請完 帳號後會拿到兩組 key,一組是 access_key,一組是 secret_key,第一次執行 s3cmd 的時候應該會出現錯誤訊息:

ERROR: /home/staff/gslin/.s3cfg: No such file or directory
ERROR: Configuration file not available.
ERROR: Consider using --configure parameter to create one.

這時候跑 s3cmd --configure,程式會跟你要 access key 與 secret key,輸入完以後記得把 .s3cfg 設定成 600 (rw-------)。

接下來必須開個 bucket 給自己用,所以就下個 s3cmd mb s3://choose-the-name-you-want,沒問題的話就會出現:

Bucket 'choose-the-name-you-want' created

如果名字被別人用掉的話會出現:

ERROR: Bucket 'test' already exists

然後你可以用 s3cmd put /path/filename.tar.gz s3://bucket-name/filename.tar.gz 丟檔案上去,用 s3cmd del s3://bucket-name/filename.tar.gz 砍掉。

其他的功能可以到 的網站上看,上面有範例可以直接看。或是加上 --help 看一些說明。

喔對,如果 put 的時候有加上 -P 的參數,那麼檔案就可以公開讓人下載,這時候可以用 http://s3.amazonaws.com/bucket-name/filename.tar.gz 下載,要注意的是這是要收費的喔 :p

Archives