之前用 Microsoft ExcelOpenOffice Calc,時常會想在寫函式時使用 SQL 語法。因為你在試算表中,最常用得功能之一,就是統計並計算出原始資料工作表 (Sheet) 中的數值。

例如,你可以用 SUMIF, COUNTIF, FILTER 等公式,去統計、過濾查出某一種類別的加總或平均。可是這樣一來,你得寫好一行公式,然後把他拉開複製到每一個儲存格 (Cell) 中,有時參照 (cell reference) 沒寫好或無意中拉錯一格計算範圍,你就算錯所有資料。偏偏這種錯誤很容易在不停重複複製儲存格時發生。

所以你就想,為什麽不讓我直接 SELECT * FROM cells GROUP BY 來拉資料就好?可是這些試算表軟體,都只讓你從其他 Data Source 中拉資料時,才能用 SQL 語法。但是把手上的資料匯入 Microsoft Access 或 OpenOffice Base 又很脫褲子放屁。

最近為了方便分享資訊給其他人,常改用 Google Spreadsheets 編輯。發現 Google Spreadsheets 有一個 Query function,可以讓你在試算表中用類似 SQL 得 Google Visualization API Query Language.

Query Language 本來的設計是讓你可以從線上資料庫中撈資料,以便整合到 Google Chart Tools / Interactive Charts (aka Visualization API) 中,如此你可以把自己的資料接出來 (Google I/O 2009 – Implement Your Own Visualization Datasource) 餵給 Visualization API。

而 Google Spreadsheets 的 Query function 則是整合了 Query Language,讓你直接把試算表當作 Data Source! 所以你可以直接用 SELECT *,把另外一個表格中資料全數複製。你也可以用 GROUP 跟 aggregation functions 如 avg(), count(), sum() 把一個表格中的資料統計算好列出來!非常方便,過去要重複好幾次計算,甚至那種千行以上的工作表都可以瞬間就處理好,出錯得機率也小了許多。

Youtube 上有一則非常好的示範

昨日晚去 Tossug 聽 Chrome OS 團隊的Google 工程師談偉航介紹 Chromium OSericsk 前輩對此聚會寫了演講摘要紀錄。演講的內容大約不外乎推廣 Chrome OS 設計理念,也就是「快速」、「簡單」、「安全」。

關於這個演講,我自己所見的疑問之一,是使用者資料安全的問題。雖說 Google 倡議其設計會將個人資料加密後存於本機,既使實體電腦遺失也不用擔心資料被竊走 (所謂豔照門 ?),但其資料是會存至雲端系統,功能是讓你在不同的機器上同步個人資料與設定。不過目前網路上還沒有文件或技術規格說明其如何儲存個人資料,而個人資料的可儲存空間收費方式也是一個待議的問題。

作為一個使用者,我實在不希望任何的設定或文件以明碼的方式存於 Google,這家公司已經掌握太多個人資料了。一些使用者願意使用像是 Google Desktop 之類可以帶來一些便利的工具,但實質上是自願拿個人隱私與獨大公司交換便利性。這個代價實在太大了一點。

查了一下目前版本的 cryptohome 設計是預設以一動態金鑰對加目錄作 aes-cbc-essiv:sha256 加密。因整合一 pam_google 模組,各帳號登入時會自動掛載,並獨立加密。至於資料傳到雲端的部份,目前尚不知其如何作。

Native Client

另外一議題,似乎還沒有多少人重視,但我仍期待的是 Native Client。在當代的作業系統上,即便你有超過一半以上的時間可能都只是發發信件、瀏覽網站、上上社交網站,但是還是有許多使用者期待良好的影音效果或遊戲。雖說現在有各家利用 JIT 技術激烈激烈的 ECMA Script (Java Script) Engine,再配合 HTML5 已經可以作相當多應用。不過這種系統介面無法滿足想用盡每一個處理器指令集的多媒體解碼器或遊戲製造商,而且這些軟體開發者手上都已經有不少 code base,他們會希望可以移植,而不是從頭開發。

所以最好還是在系統上挖一個洞,讓開發者可以在瀏覽器上用盡所有硬體資源。業界的一個實做方式是 Microsoft 的 ActiveX,基本概念上就是讓你可以存取作業系統上的各種軟體元件。但是其安全機制一是透過數位簽章 (digital signing) 確保安裝檔未被竄改,一則是詢問使用者是否允許安裝。而這種模式輕易的讓許多麻瓜的電腦上種滿了木馬。

其中一個選擇是使用 NPAPI 的 Plugin. 雖說現在 Chrome Browser 已經開放了 NPAPI 的外掛支援。但是其實 NPAPI 相當不安全,且不甚方便的。不安全指 NPAPI 的權限極大,現有的架構讓 Plugin 可以讓人存取系統資料。而避免安全問題的方式,就是不自動安裝,除了熱門外掛外,其餘的皆讓使用者自己去尋找官方安裝檔。這有效的降低中毒機會,因為麻瓜往往不知道從哪下載木馬。實際的使用經驗仍不便利。

另外一種模式是建立一個沙箱 (Sandbox),讓所有的程式都在安全的 VM 上跑。這種實做之一是 Adobe 的 Alchemy 計畫,Alchemy 的作法是利用 LLVM 與調整過得 gcc  將 C/C++ 原始碼編譯成給 Action Script Virtual Machine 2 用的 bytecode。於是你可以將原本的 C/C++ 軟體移植到 VM 上,並在瀏覽器中執行。好處是安全,壞處是這樣降低了一些效能,同時也無法用到特定硬體上的多媒體處理指令集。

而 Google 所倡議的作法是 Native Client. 基本作法是希望可以既提供便利性,也可以涵蓋安全與效能之需求。在 IEEE Symposium on Security and Privacy (Oakland’09) 所發表的這篇論文 Native Client: A Sandbox for Portable, Untrusted x86 Native Code 中詳盡的描述了在 x86 的一些策略與作法。

基本上,Native Client 的架構分為

  • 內部沙箱:binary validation
  • 外部沙箱:OS system-call interception
  • service runtime binary module loader
  • service runtime trampoline interfaces
  • IMC (Inter Mdule Communication) (aka SRPC, Simple RPC)
  • NPAPI

目的是為了達到 Software Fault Isolation,安全上的設計用了 x86 memory segmentation 來限制軟體可存取之記憶體與資料範圍,另外也控制 system-call 的限制,僅開放特定 API。另外若該軟體呼叫了不支援的指令集,則系統會以 HLT 指令避開,避免程式執行錯誤。

使用時,瀏覽器外掛會直接下載已編譯的 nexe 檔案,並用其特製 loader 載入執行,使用時不像傳統外掛模式,還需逐同意或手動安裝,方便許多。而與網頁的互動也可以用 Java Script 透過 SRPC 或 NPAPI 控制。

若想進一步瞭解,請閱讀 Native Client: A Sandbox for Portable, Untrusted x86 Native Code 一文 (請參考簡體中文摘要),以及 Brad Chen技術演講,技術演講頗多場,可參考 Google I/O video (簡報) 這場,或較新的 Velocity video 這場或在 University of Washington 演講

沒時間看的話,可以看上述的短片的簡介,影片中稍微展示了利用 Native Client 解決影片解碼軟體的問題。目前的軟體架構已經擺入如 SDL, termcap 等,因此你可以玩玩最常被拿來展示的 SDL Doom 或是嵌入 Web 的 VIM!

Native Client 的架構與效能,相較於其他的 sandbox 環境應該是簡單且快一點,至少跟 Microsoft Xax 比起來容易許多。剩下的問題就是能否贏得開發者與使用者的青睞,Native Client 必須要證明其是絕對安全,為了確保安全性,今年,Google 甚至還辦了一個競賽,邀請大家來協助破解。另外一個重要的課題是,移植軟體的相容性與除錯性也會是非常重要,這點還沒有經驗或文件,尚無法判斷。

目前使用 NPAPI 時,現有 API 有些問題,容易造成與 HTML 混用時的一些排版或顯示錯誤。關於這方面 Google 也已經提議了一組新的解決方法在 Mozilla 的 PlatformIndependentNPAPI

其他

另外一些關於 Chrome OS 平台的筆記

Tossug 會後有段時間說明 G 社目前為 Chrome OS 開了些職缺,供人投遞履歷,有人感興趣嗎?

兩年前講 Web 2.0 時,曾經提過利用 FOAFXFN 來映射人際關係的概念。這在當時好像是一種幻想,不過今年二月初時 Brad Fitzpatrick (是個強者,做了 LiveJournalmemcachedPerlbalMogileFSDJabberdOpenID 等軟體或規格,目前任職於 Google, Inc) ,推出了一組新的 Google Social Graphic API。不妨先看一段 Brad 的簡白說明

Introduction to the Social Graph API

簡單說,Google 提供了一組 API,讓你可以取查詢被索引的社交關係,而這些資料來自於網路上的以 XFN/JSON 格式表現的公開連結。於是,若你經營社交網站,你可以透過此 API 幫你的訪客找到網站上的朋友們,而不需要你的訪客匯入朋友資料。或者,你也可以透過此工具找到你的愛人、仇人的連結關係。;-)

整個概念發想,可以參考 Brad Fitzpatrick 所寫的 Thoughts on the Social Graph,以及 Alex Iskold 發表於 ReadWriteWeb分析文章

目前 Google 網站上已經提供三組展示用的程式,包含 Site Connectivity, My Connections, Parameter Playground 等。我的愛人或仇人們你們可以透過此介面查詢我的社交關係

當然,目前使用 FOAF 與 XFN 之類後設資料的網站還相當少,但若未來重視 Social Network Portability 並使用開放技術的網站越來越多,那麼未來都有機會使用這個 API 來相互鍊結吧。或者,我們可以拿 Open Social 作為網站間的橋接層 ? 🙂

長久以來,一直為了一個小小的資料庫系統尋找適合的解決方案。這個系統的基本概念是要建立一個可以大量收集與處理 Metadata 的資料模型。由於這只是一個 Pet Project,在無法額外投資建立叢集系統的狀況下,只能試著用一些簡單的方式來實做。

這個資料庫的用途是可利用透過各式 Metadata 所組成的 Facts 進行推論。稍早的實驗,已經可以有效率的進行基本的前推式(Forward-chaining)與回溯式(Backward-chaining)的混合式推導來取出有意義的「knowledge」。

我的資料形式都是 subject-predicate-object 表示的 RDF Triples (RDF: Concepts and Abstract Syntax),原本是專注在可以處理 RDFTriplestore,但大部份的開放原碼後端資料庫都還是使用 RDBMS,加上冗贅的 RDF/XML 資料交換格式,速度上實在難以令人忍受。而 ORDBMS 又需要使用不少的計算資源 (記憶體 :-/ ) 才能順利執行。

於是,策略性的將系統設計為 Controlled vocabulary,後端採用飛速的 SQlite。以速度來說,在有 VFS 快取下,從兩千餘萬筆資料中取出十筆的時間大約是 150ms。這種速度在使用上是毫無問題的,但如此一來毫無 Scalability 可言。問題之一是寫入的速度並不快,而且寫入過程資料庫便被鎖住,別說同時寫入,就是取用也是一個大問題。

於是,試著找一些可行的方案,如以 BigTable 為基礎的 Apache HBase, Hypertable,或是 Document-oriented database 類型的各式解決方案,如以 Erlang 開發的 Apache CouchDB, 基於 Facebook Thrift 架構的 ThruDB, Ruby 開發的 StrokeDB, 或 Java 為基礎的 FeatherDB。這些資料庫具備分散式且容錯的設計,而且都適合塞 schema-free 的資料。唯一的問題是你還是得自己架設一堆伺服器,才是「正」分散式、容錯設計。

直到最近 Google App Engine (視訊說明) 推出正式的服務租用價格,由於費用極為便宜,我便開始認真考慮是否可以把資料庫移到網路公司所提供的 Platform-as-a-Service

Google App Engine 提供的是以 Python 語言為基礎網站應用軟體開發環境,其中提供 Datastore API,是基於 BigTable 上所開發,以提供了所謂 Scalable data-backed。另外一個價格與功能相仿便是 Amazon SimpleDB (但是 GAE 的硬碟儲存費用便宜多了)。這兩組服務所提供的都不是標準的 SQL 語法,而是特定的 API 搭配特製的查詢語法,Datastore 是 GQL, SimpleDB 則設計了自己的 query language.自然,網路上已經出現了根據此 document-oriented database 與 RDBMS 的交相論戰,如 Ryan Park 所寫的 Top 10 Reasons to Avoid the SimpleDB HypeYurii Rashkovskii (StrokeDB 的作者) 的回覆 Top 10 Reasons to Avoid Document Databases FUD

對我而言,我並不需要 RDBMS 的特色,key-value 的資料庫形式已經可以滿足我的要求。問題在於系統是否可以處理我的需求,根據 High Scalability Todd Hoff 的文章指出,GAE 的 Datastore API 似乎有些速度上的問題、以及 Application Quotas 的限制,如此還必須實際再深入研究軟體的設計方式。而 Amazon SimpleDB 尚處於 Limited Beta 的狀態,因此還不能進行實際的評估。此外,目前這些方法還無法做 Path queries,是下一個研究方向。

剛剛讀了阿修介紹,到 mobile.google.com 上下載了 Google 新釋出出的 Mobile Search 工具,支援 Symbian 平台,安裝後會在手機待機畫面出現提示與熱鍵搜尋功能,只要按下 meta key,就可以隨即叫出搜尋視窗,並登打查詢字串,頗方便 (雖說其實並不常隨時用 Google 查詢資料,並在手機小螢幕上閱讀這些資訊)

昨日 (2/19) 的工商日報頭版 (發現過去一年整天做些低等技術的東西而停止注意產業資訊,因此又開始恢復每天讀兩份以上平面報紙並書寫的習慣) 是調查局發佈的「網頁掛馬」攻擊新聞稿。看似警告民眾網路有毒,千萬別亂逛亂抓陳冠希的性愛照,不過新聞稿下方還刻意的引用刑法第 235條散布猥褻物品罪,感覺嚇阻散佈色情照片的味道大於病毒警示阿。

據說鳥人大大的說好話,看好圖說法,萬一不小心見到的新版的性愛照,請先丟給阿碼科技的 Armorize Special Forces 團隊掃一掃喔。因為幾篇新聞中提到調查局這次的數據都是出自阿碼科技,調查局透過HackAlert™系統長期監控台海網站,這次類似的網站大約有180個,有許多網站到目前為止都還有裝有惡意程式。(阿碼科技尚很佛心的提供了 HackAlert 系統免費申請帳號試用) 新聞中並提供了幾個示範網址

Continue reading