WAI-ARIA
WAI-ARIA全名是 Accessible Rich Internet Applications Suite,是WAI正在制定中的規範之一,對象是網路應用程式,像是 gmail、各種 CMS 等,它在WAI 制定的各種規範中,是唯一縮寫名稱用 WAI- 開頭的,一直很好奇為什麼,前幾天寫信去問也得到了答覆:
Short answer: Because the acronym ARIA is used for other things, we use WAI-ARIA.
結果和 J長輩 猜的一樣是因為ARIA太常見了,所以加上 WAI- 。
肆月 27Hate IE
昨天我才被微軟救到,今天它就用 IE 來討債了Q_Q,這件事要從JOYSOUND講起, JOYSOUND是日本的一個卡拉OK系統,前陣子推出了 Wii 版,讓使用者可以用便宜的月費就可以唱到數萬首日文歌曲,不過使用上有個問題,就是它的網頁沒有針對 Wii 版的搜尋功能,透過 Wii 介面來搜尋又不夠快,於是我就自己手寫了一個http://joysound.othree.net/,資料來源是他們網站,我定期去撈新增曲目,結果最近太混,才發現 7 週沒有去更新,網頁上又只保留 5 週份的更新資料,於是就趕快上 Google 看有沒有 cache,順利的找到4份中的3份,但是有一份找很久都找不到,過了幾十分,找了一堆日本的搜尋引擎,才在日本 MSN找到那個網頁的 cache,於是心中一顆大石頭終於落地,也實在沒想到會讓微軟幫到這樣一個大忙。
時光飛逝,歲月如梭,一下就來到了新的一週,早上九點半開始開了四小時的會,回到電腦前一看發現有 IE bug 要解,沒想到這一個 bug 讓我整整花了4個小時才解決掉,一開始看起來是 javascript 問題,搞到最後竟然是無法說明的 CSS 地雷,花了數小時,只砍掉下面這樣一行東西而已:
right: 0;
更讓人難過的是這個 bug 是在 IE7, 8才會發生的,講到這我就必須要抱怨一下 IE,這陣子處理不少問題根本都還是 IE7, 8 還在的,感覺上 IE 這兩次升級對於 javascript 相關的部分都沒什麼改善,這也是為什麼我決定把這裡弄的讓 IE 都看不到。
最後就是提一下,大概要怎麼判斷是不是 CSS 地雷,和要怎麼找,基本上,會被稱為地雷,就是那種會看起來應該不會有問題,出了問題你也不知道問題在哪的狀況,如果是 javascript 的問題現在瀏覽器都可以妥善處理,不小心跑進無窮迴圈也不會跑到死,所以如果一直出現找不到的問題發生點的話,那就有可能是 CSS 地雷了,像我這次遇到的狀況是整個 IE 吃光 CPU,但是不會有訊息問我要不要停止執行 script,然後我找了很久,排除頁面上各種可能產生影響的 javascript,最後才懷疑到 CSS 上,這時候我已經浪費超過三小時了,要判斷是不是 CSS 問題到很簡單,先把 CSS disable 掉試試看就知道了,如果一 disable 掉問題就沒了,那很明顯就是 CSS 的問題,接下來就是用消去法來尋找造成問題的 CSS 定義,就不贅述了。
真的最後了,就是其實 JOYSOUND 現在已經可以在網頁上搜尋 Wii 版曲目了XDD。
肆月 25Opera Face Gesture 與其它
首先來看一下 Opera 在今年愚人節推出的臉部表情控制吧。
閱讀 「Opera Face Gesture 與其它」 全文 肆月 21
The Web of Linked Open Data
週末要到摩茲連續聚介紹可能的網路未來,以下整理一些相關連結。
- Tim Berners-Lee on the next Web | Video on TED.com
- The Web of Data: Creating Machine-Accessible Information - ReadWriteWeb
- Linking Open Data
- SWEO Community Project: Linking Open Data on the Semantic Web
- OWL Web本體語言概述 推薦標準
- d.CAT- the RIA blog » ontology 是什麼?
- OpenStreetMap
- Linked Data - Design Issues
WTFPL
前陣子透過Manic才知道這個超讚的授權,WTFPL - Do What The Fuck You Want To Public License,「隨便拿去做你的鳥東西」授權條款,超棒的,裡面的說明和 FAQ 都很值得一看。
肆月 01大家來用 IE8
IE8 超棒的,大家趕快來用!!
貳月 02日文全文搜尋
這篇要講的是很基本的東西,不過我是最近有需要才搞清楚的,雖然標題是日文,不過其實中文也是一樣的狀況。
MySQL資料庫內的全文索引還只支援用空白斷詞,不過這種方法在中文、日文的語言結構下完全無法產生作用,而且事實上也很難讓程式能根據語意正確的斷詞,像是有名的句子:「すもももももももものうち」,程式語言很難判斷該在哪斷出すもも、もも兩個主詞,因此有了 N-Grams 斷詞的演算法,使用 N-Grams 來對上面的例句做處理,會變成:「す すも もも もも もも もも もも もも もも もの のう うち ち」。
轉成這樣的詞句來讓資料庫系統做索引,要搜尋時也先把關鍵字做 N-Grams 斷詞,分成多個關鍵字,這樣按照分數來排就可以得到還不錯的搜尋結果了,不過有兩個問題,首先是可能會因為斷詞方式而有不正確的搜尋結果,這問題目前只能加長斷詞的長度,例如把兩個字的長度改為三個字的長度。另一個問題是 MySQL 其實要到 5.1 才支援,5.0還沒有,所以一直以來要做全文搜尋,都是把目標欄位做 N-Grams 斷詞,存到另一個欄位裡面,然後對該欄位做全文索引(Fulltext Index),另外還要在 my.cnf 的 mysqld 區塊內加上:
ft_min_word_len=1這樣 MySQL 做全文索引時,才會把字串長度在 1 以上的詞都納入範圍,如此一般就可以用 MATCH, AGAINST 的語法來進行全文檢索了,這裡 MySQL 還會自動的忽略大小寫、平假名片假名,用 LIKE 時要忽略平假名片假名可是很辛苦的~_~。
壹月 25多欄位搜尋時的排序問題
有看過 usability 的相關文件的話,或許會有看到關於搜尋的欄位,不要給太多的選項讓使用者調整,像是 Amazon 或是 Google 那樣,在初始的搜尋介面只有一個欄位讓人填寫,其實可以有比較多的成功搜尋,最近就試著做了這樣的設計,結果沒想到還有些背後的東西需要顧慮,而且目前我還沒想到個好解法。
問題就是結果的排序該如何排,我做的是歌曲的搜尋,會希望歌名有符合關鍵字的放第一順位,演唱者的第二,然後才是其他的資訊,不過如果只是用 SQL 的 OR 來做多欄位搜尋,結果會怎樣排序不是我們能決定的,ORDER 只能針對單一欄位的內容來進行排序,而不能根據那個欄位有符合到關鍵字來決定順序,我想了很久才想到目前的解法:
SELECT DISTINCT id, title, artist, artist_id, program FROM (
SELECT *, 1 AS o FROM songs WHERE id = 'keyword' UNION
SELECT *, 2 AS o FROM songs WHERE title LIKE 'keyword' UNION
SELECT *, 3 AS o FROM songs WHERE artist LIKE '%keyword%' UNION
SELECT *, 4 AS o FROM songs WHERE program LIKE '%keyword%' UNION
SELECT *, 5 AS o FROM songs WHERE utaidasi LIKE '%keyword%'
) s ORDER BY o大量的子查詢,還好我的資料庫小,使用人數也少,不然應該一下系統就撐不下去了吧,而且這個方法還有個問題,就是只能處理一個關鍵字,如果有兩個以上的關鍵字,似乎就沒辦法只用 SQL 來做處理了,因為不同的關鍵字可能在不同欄位符合,要計算結果的優先順序會隨著關鍵字增加而變得越來越複雜,純用 SQL 來寫感覺就是會整個慢到,不知道 Amazon 是怎麼處理這個問題的架構的,我想應該是自己開發或修改過的資料庫系統吧XD。
拾貳 21W3C Validatior 贊助計畫
剛剛看到這個W3C Validatior Donation Program,希望大家幫忙贊助 W3C 一直以來都是免費的QA Tools(包括HTML/CSS Validator),付款機制是 PayPal,不過看起來贊助的人也不會有什麼回饋(像是小貼紙、記名、紀念品之類的),至於我,最近比較沒預算,所以就幫忙宣傳就好了~~
拾貳 19short-amazon
剛剛寫的縮短Amazon網址的小東西,純 javascript,還提供了 bookmarklet 版,理論上只要 Amazon 沒有改他的網址定義的話都會生效。
其實快寫完的時候Jedi大師告訴我以前有人寫過,不過我看一下前人的 code 後,發現我處理的比較完善,可以對付比較多國家的Amazon網址,不過中國的沒辦法就是。
昨天後來和長輩討論過後,好像 dp (detail page) 發現好像治百病,所以剛剛修改過,變成產生的都是 dp/ASIN 這樣的網址,這樣就和 short amazon affiliate 一樣了,所以我比較強只有可以處理 .com 以外的和可以處理多行。
