關於 Web Typography。過去,你若想讓網頁上出現多樣性的字型與排版,往往得將文字作成圖片或 Flash 來顯示。如此一來常常使網頁失去文字複製、搜尋引擎最佳化 (SEO) 的功能,一個網頁製作再精美,但卻沒有人可找來閱讀的話,也是徒勞無用的。

於是你想使用瀏覽器預設的功能,但又不想屈就於有限的作業系統內建字型,這該怎麼辦?你或許會利用像是 sIFR, FLIR, Typeface.jsCufón 等替代方案。

sIFR (Scalable Inman Flash Replacement) 來講,sIFR 是利用 Java Script 與 Flash 動態的替換瀏覽器上的文字,字型則來自網頁設計者預先從系統中設定欲使用的字型於 Flash 中。

而 Cufón 概念亦差不多,不過作法是先將字型外型轉成 Java Script/JSON 格式,實際使用時再利用 HTML5 Canvas 繪出字型。Cufón 的作法所生成的 Java Script 雖比所用的 Truetype 字型小,但其實檔案大小也頗大,BCSEEATI 試驗了一分割字型方式,可有效降低傳輸量,但需把字型計算工作轉移到伺服器端。

Cufón 的一項缺點是,用了 Canvas 來繪圖,結果造成使用者無法點選文字。關於這個問題,TypeSelectTypeface.js 用 span tag 解決的選字的問題。這些作法都頗討厭,因為你要求瀏覽器為了美觀顯示,多做了圖形運算或重複塞了一圖一字就為了美觀跟可選字。

若是可以讓瀏覽器直接依字型繪字不是很好嗎?在 Firefox 3.5 (Gecko 1.9.1) 後,Firefox 開始支援了 CSS 的@font-face 語法。於是,你有機會可以用 font-family 來指定一些擺在網路上 TrueType 或 OpenType 字型,直接讓流覽器繪出美麗的文字 (中文版: 顛覆網路 35 天 (4b): 以 @font-face 使用你喜歡的字體 by BobChao)。 文泉驛的雲字體計劃便是應用 CSS 更換字型的例子之一。

但是對於字型廠商來說,並不樂見讓你隨意在網路上使用 TrueType 或 OpenType 字型。主要的原因就是版權濫用,同樣的一套字型很可能會被大量複製。另外,對於瀏覽器開發者而言,納入 DRM 控制網頁用字型顯然是與網路傳統背道而馳。對使用者而言,這兩種格式都太大,會浪費相當頻寬下載所需字型。

就頻寬的問題而言,其中一種解決方式如 Microsoft 所倡議的 Embedded OpenType (EOT),解決方案是以工具掃瞄網頁,並從字型檔中抽出網頁所需的字型。這樣的確可以降低頻寬使用,但是總覺的每次都要產生特定的字型檔實在有點太麻煩。

比較好的作法或許使利用壓縮的機制來降低傳輸量。Mozilla 的 Jonathan Kew 於是提議了一種新的規格 ZOT,基本上就是 OpenType 的壓縮,但壓縮的是 SFNT 字型檔中的獨立表格。這種格式的好處是有效壓縮字型檔大小,在 Web Open Font Format for Firefox 3.6 一文中提到,此格式可將 3.1MB 的 TTF 字型檔壓縮成 1MB 左右。另外一個好處是由於 table 獨立壓縮,因此像是記憶體容量較小的行動裝置,可以下載字型後依照 cmap 表格找到相對應的字型,依照需求再逐一解縮壓,可解省些系統支援。

另外一個需求會是版權的問題,Jonathan Kew 倡議 ZOT 時,同時有人為了字型供應商的需求做了 .webfont 格式。基本上的用意是希望能夠在字型中夾帶一些 metadata,使供應商可以追蹤網站所使用字型是否符合版權,但是不加以 DRM 保護。這個提議已經得到一些字型供應商的支持

這些規格加起來就是 WOFF File Format 在新釋出的 Firefox 3.6 中,預定支援 Web Open Font Format (WOFF) 之格式。ars technica 有一篇詳盡的報導 Web Open Font Format backed by Mozilla, type foundries,介紹了 WOFF 中的一些規格演繹與技術說明。在 after Firefox 3.6 – new font control features for designers 一文中有相當精彩的字型應用展示,如利用網頁字型重現傳統印刷字等。

目前此規格已經在 W3 的 Web Fonts Working Group Charter 中,目前只有 Firefox 支援 WOFF,接下來要便看其他的瀏覽器是否願意支持此規格了。可於 www-font 郵遞論壇追蹤最新的進展。

2009-12-02 後記: John Boardley 的 Web fonts. Where are we? 亦相當有參考價值。簡體中文翻譯請見關於 Web 字體:現狀與未來

先前裝了 HelloTxtUbiquity Script 來用,以便於可以在 Firefox 中直接用 Ubiquity 介面來更新自己的狀態到多個微網誌。不過 Hellotxt 的 script 是針對早期 Ubiquity 版本所撰寫,因此在 0.5 版釋出後,原 Script 不相容於新 Parser 2 API,因此幾個月前就無法使用了,官方也一直未修正。於是自立自強的依照 Parser 2 API Conversion Tutorial 修正一版,可於此網址安裝或下載 patch

自己已經用了 Ubiquity 一陣子,目前使用經驗良好,值得推薦給你使用。但網路上介紹已相當多,除了 Mr6 的「開啟比 Google寬一千倍的路」目光短視的膚淺廢話不要浪費時間之外,其他的使用面介紹都可參考。這裡就不多費唇舌,你想了解基本的使用方法可以參考 Ubiquity 0.1 實際操作過程的精彩影片示範一文。

若可聽讀英文或日文,可讀 mitchoTokyo 2.0 的精彩演講 Ubiquity: Command the Web with Language 言葉で操作するWeb (簡報),mitcho (Michael  Yoshitaka  Erlewine) 現在是 MIT Department of Linguistics 博士生,之前在 Mozilla Lab 擔任研究員開發 Ubiquity。

Ubiquity 的指令與功能極多,逐一介紹極耗時,請安裝後利用 list ubiquity commands 指令取得各項功能說明。

自從新版的 Ubiquity 的 Mozilla Web Search Commands 整合了 Firefox 的 Open Search 功能後,我就可以直接用 search 指令查詢自建的 Open Search Plugins。過去雖然依照自己的需求建立了十幾個不同的 open search plugin 來找不同的郵遞論壇BTS、搜尋引擎、拍賣等,但是用滑鼠切換搜尋引擎絲毫沒有可用性可言。

新版的 Ubiquity 可讓你利用鍵盤快速搜尋所選文字,而且常用的指令會排序再前頭,也可以直接選擇文字後透過滑鼠右鍵執行該指令。因此除了內建的 IMDB, Wikipedia 外,我自己最常用得就是 amazon, aNobii, FindBook, 博客來臺北市立圖書館館藏間互查書籍,一邊在 aNobii 規劃書單,一方面在不同的地方查詢藏書。

過去查詢一本書,你得「複製」、「開啟新頁」、「連上特定網站」、「貼上」、「搜尋」等幾個步驟,現在一樣是選取可以直接用右鍵選擇該服務,或者叫出 Ubiquity 的搜尋介面鍵入該服務名稱即可,也避免在複製貼上間還得找網頁的輸入欄位。剪貼行為總是很快讓我進入昏睡狀態。

另外一個值得提的指令是 Marcello Herreshoffcreate search command,之前建立自己的 Open Search plugins 程序其實有點複雜,即便利用 Ready2SearchSearch Plugins Generator 等工具也需要一些步驟。這個指令只要選定一個搜尋欄位,鍵入 create search command 名稱 就會自動產生一組 Ubiquity 專用指令,一行程式都不需要寫!非常好用。另外你也可以利用 create bookmarklet command 把你常用的 bookmarklet 轉成 Ubiquity 指令。

即便我自己最常使用的還是搜尋引擎等指令,但是我相當看好 Ubiquity 的未來發展。不少人認為 Ubiquity 僅多提供 Web 的 CLI 的介面,也有些人質疑指令列根本就是走退路,未能體會 Ubiquity 的多國自然語言介面設計理念。

事實上,對電腦下命令不難,難的是背指令後依照指定語法下命令。

CLI 介面最令人畏懼的是得背下指令名稱,還得依據其指定之語法給予參數。而多國自然語言介面的設計用意就是,讓使用者盡量用熟悉的口語方式給予指令,不讓使用者強記。替代日漸繁雜的選單與功能列,取而代之是選取文字後使用「search this with Findbook」、「到 Findbook 查這個」的這種指令方法。

在新版 Ubiquity 的 Parser 2 中,Ubiquity 帶入semantic roles 的指令設計,搭配先前設計的名詞詞性 (Nountypes),可以更精確的分析使用者欲執行的指令。再研究過眾多語言的文法架構後,在語意分析器設計上也可有彈性的適應於不同語系,現在你可以依照自己的語言特性設定 Branching、斷詞等方式,讓分析器再判斷完介係詞、分隔字後正確判斷文句意義。因此未來除了現有的英文語系之外,你也可以使用中文來下達指令,再接下來的計畫中,也會納入 Command chaining,於是或許接下來你就可以直接對電腦說「到 Findbook 查這個並寄給 Rex」這種語法。

不少人拿 Ubiquity 跟一般桌面的 Launcher applications 作比較,像是 MacOS 上的 Quicksilver 介面,或 Linux 上的 Gnome-Do 等。但是桌面系統的特性畢竟跟網頁略有不同,許多桌面工具並非文字導向,應用上並沒有像網頁間互相傳輸字串那樣自然。

我最期待的幻想其實是希望這套系統可以置入行動裝置,並結合語音辨識功能。雖說現在許多智慧型手機已內建語音辨識,但常常都還只是啟動電腦或直接撥打電話這樣程度的應用,軟體若可以知道自己接受哪些參數,或許就可以利用觸控螢幕輸入欲傳送之「物件」(object) 並用語音給予指令了。這樣的應用相對只需要聽懂指令,可以避免以語音給予「物件」數值時容易聽錯的缺點。