Posts written in 2007‒08

SlickSpeed

因為好奇最近 jQuery 1.1.4 的更新提昇了多少速度,因此自己放了一個 SlickSpeed 測試頁。本來也想加入 Ext.js 一起測,不過加不成功,不知道 Ext.js 是不是有哪裡需要特殊設定?

下面是我的測試結果,我的電腦好像滿差的 XD

  Firefox2 Firefox3 IE 6 IE 7 Opera9 Safari3
base2.DOM 0.9 (alpha) 32 115 1600 395 128 52
dojo 0.9.0 467* 715* 2711* 821* 229* 286*
jQuery 1.1.3.1 757 872 3253 710 519 338
jQuery 1.1.4 694 847 3911 914 436 278
MooTools 1.2dev 212* 267* 4926* 1496* 227* 152*
prototype 1.5.1.1 203 282 6599* 1833* 219 80
prototype 1.6.0_rc0 184 249 6436* 1712* 207 48
* 發生錯誤或回傳結果為零

測試 Firefox 2 和 IE 7 的電腦配備較好,因此整體都比較快。

Update: 之前測試 dojo 在 IE 7 完全不能動可能是因為我用 Standalone 版本的緣故,更新為安裝版的重測結果。

Canvas experiment #1 : Polar Chart

Canvas experiment #1 : Polar Chart
Canvas experiment #1 : Polar Chart


看見謝老在玩 <canvas> ,因此引發我的興趣,於是就跟著也寫了一個產生星狀圖的程式——前八張圖的值是隨機的,後四張則是固定的。如果要挑 bug 的話,就是視窗改變大小後,圖形可能會換行,但數值的位置不會隨著圖形改變,要按重新整理才會更新。

Canvas 中畫弧的 method 使用的角度單位是弧度,因此要用三角函數計算,讓我複習了不少三角函數,過去學了不知道有什麼用的三角函數,終於在這次派上用場,看著 JavaScript 中充斥著數學計算式真是有成就感 XD

Canvas 沒有寫字的 method ,這一開始讓我覺得滿奇怪的。有些人是先建立一個暫時的 HTML 物件,再將其上的文字複製過來,但我後來覺得直接使用 HTML 物件就很好啦!我猜 Canvas 不內建寫字的 method 也是考慮到這點。

好久沒有像這樣不用管瀏覽器支援程度,寫沒有用的東西來玩了,感覺好舒暢啊!

※ Firefox 1.5 / Safari 1.3 / Opera 9 以上版本才支援 Canvas 。

Bigram Full-Text Search rev.35

昨天整理 WordPress 資料庫時發現, Bigram Full-Text Search 如果設定可在迴響中搜尋,好像會殘留下一些垃圾迴響?今天想來修這個 bug ,才發現更嚴重的 bug ——目前根本就不會產生迴響的 N-gram 啊! orz (原因只是打錯一個變數)所以到底會不會殘留垃圾迴響… 還有待觀察。我最近完全沒有任何 Spam ,不知道是因為裝了 Comment Timeout 還是 Downtown Host 自動幫我擋下這些異常流量。

本來只想修好這個 bug 就好,但是只改一行感覺不夠誠意,所以低調的寫了一些其他更新:

  1. 修復一些可能出現的 Notice 和 Warning 。
  2. 支援部份 boolean full-text search operators
    目前已支援的有 +, -, ~, *, " ,未支援的則有 > <, ( ) 。雖然我說支援 " ,但因為本 plugin 是採用 Bigram 分詞,「+"搜尋字詞"」找不到東西,所以輸入「+"搜尋字詞"」會被自動轉換為「+搜尋 +尋字 +字詞」。
    也因為現在全面採用 boolean full-text search operators ,關聯性的計算方式就隨之改變,搜尋結果的順序會和過去有所不同,哪一種比較好我也不確定。
  3. 設定不於迴響中搜尋時,則不更新 wp_comments_ngram 表格。

有興趣試用的話,可以從 Google Code 下載最新版本:

Bigram Full-Text Search (Latest revision)

Update: 突然想到關於 " 的處理方式… 或許可以改成輸入「+"搜尋字詞"」自動轉換為「+"搜尋 尋字 字詞"」,不過這樣會有中英文交雜的問題——目前 N-gram 是將歐文取出來放在最後。

Klustering

目前是暑假,而我剛從大學畢業,還沒到研究所辦理入學,研究工作卻已經開始了。最近的 meeting 主要是聽學長報告,我們雖然有一位唯一僅有的學姐,我卻未曾有幸聽過她的報告。

因為暫時還算悠閒,在家沒事很無聊,於是 7/25 決定開始學習 C# 。我也考慮過 Java ,但是我對於 Java Virtual Machine 的印象很差,而且 C# 的 IDE 看起來很方便,就這樣有點隨便的決定了我要學的語言。

第一個程式先從基本的 K-means 演算法寫起(因為我指導教授的研究大致上都關於 K-means ,我想先寫一個來以後一定會用到 XD)。現在還沒有學生身份,不能到學校圖書館借書,只能靠著網路資料學,起初不熟悉時什麼都得查,進度好慢。到了 7/27 才完成基本的讀取 CSV 資料、分群。程式寫完便又開始無聊,就繼續作外觀方面的功能,例如讓點可以放大縮小、改使用者介面之類的。 C# 內建許多控制元件,而且不需要特別設定就會自動套用 XP 風格外觀,調整介面方面做得滿愉快的。

資料編輯器
分群結果


讓我印象比較深刻的,是主要資料的儲存型態我改了兩次,兩次都牽一髮而動全身,要改寫好多地方。 C# 的多維陣列有兩種作法:矩形陣列(Rectangular array)和不規則陣列(Jagged array),其中不規則陣列就像其他語言中的多維陣列作法,也就是陣列中的陣列(Array of arrays),因此每列長度可以不同;矩形陣列則像是表格,每列長度都相同。我的資料是一串座標,座標數量、維度不固定(但是同一份資料中座標維度必相同),起初我想這應該算是「動態陣列」吧!就用了 ArrayList(並不是前面提到的任何一種 XD),後來才發現我不需要動態,又改回矩形陣列,矩形陣列每列長度相同,跟我的資料剛好符合。最後一次則是改成不規則陣列,因為矩形陣列要取出其中一列很麻煩…… 這樣改了一圈感覺滿空虛的,都沒有用到 C# 的特殊功能 orz

7/30 沒事作,便試圖提昇 K-means 效能,第一個想法是最佳化找最近點的演算法,因為 K-means 中不斷的在找最近點。稍微翻了一點資料後,我覺得 kd-tree 看起來好像不錯,而這就是一段悲劇的開始…… kd-tree 其實是一種資料結構,為了將我的資料轉換為這種格式,我花了兩天才完成,主要的困難點在於他必須依照資料的各個軸排序,這不是用 Array.Sort() 就能辦到的事情,而我又不想使用 Wikipedia 上講的 Selection sort(時間複雜度很高耶!),最後把資料型態改成不規則陣列才作出來(這也是最後一次改資料型態的主因),這個部份完成後其他部份便很快也跟著完成了。

不過花了兩天研究 kd-tree 其實也還不算什麼,難過的是我寫完後才發現我不知道這要怎麼應用到 K-means 上…… XD

 1