NaCl 小註解

有一部安潔莉娜裘莉主演的動作片 SALT 正在電視上重播, 原本我看到 SALT 就只會想到鹽, 現在又多了一個聯想. 而前陣子看到的 NaCl 則是另外一個.

NaCl 不就是鹽巴嗎?嗯, 只怪老外喜歡搞頭字語,  NaCl = Na + Cl = Native Client. 不過 NaCl 這個詞太基本了, 不用 NaCl + Native Client 幾乎 Google 不到它技術名詞的這個版本. 換言之, 不知道它原來的意思就 Google 不到, 這真是太有趣了.

NaCl 是由 Google 提出的技術, 類似 Microsoft 的 ActiveX, 使得瀏覽器 (的 Client) 能夠直接執行一些機器碼 (Native) 來加速. 大家還記得 ActiveX 有時是病毒偽裝而成的, 所以瀏覽器只得常常跳出一個視窗來問我們是否允許執行這個 ActiveX.

NaCl 的作法是採用固定長度的指令集, 比方說只用 16 或 32 bits 長度的指令, 不是這個長度的指令就不准用. 這樣一來,  短短的 b (branch) 或是其他控制流程的指令就不合 NaCl 的規則, 而無法被執行. 在 CISC 指令集中只採用類似 RISC 的指令, 當然會拖慢執行的效率. 不過據說影響不太大. 畢竟 Native 表示該電腦的機器碼, 本來就比較快. 

此外, NaCl 刻意選用記憶體區段的方法, 把 NaCl 的程式碼侷限在一塊獨立的記憶體中運行, 就像用 Visual Studio debug code 一樣, 在沙盒 (or 沙盆, 原文是sand box)中怎麼玩, 都不會影響到主記憶體的行為. 這也是防毒軟體常用的技術, 把某個有嫌疑的程式放到沙盒裡面執行看看, 如果它有不軌的行為, 就可以判斷它是病毒.

至於為何叫做 sand box 技術, 令人不得不聯想到貓咪. 貓咪只會在沙盆裡面便便, 具有隔離的效果, 哈!

[Ref]

1. http://zh.wikipedia.org/wiki/Google_Native_Client

SIMPLE 有 Simple 嗎?

今天看到一個沒見過的 spec. 叫做 SIMPLE (Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions), 名字真是隨人取的啊!那麼它真的簡單嗎?

首先來解析 IM (Instant Message),  大家可能天天都在用的 MSN, QQ, Yahoo Messenger, Skype, ICQ 都是 IM. 這個即使不懂原理也知道它是什麼.

再來是 SIP (Session Initiation Protocol), SIP 和比較早的 H.323 一樣, 都是 VoIP 最主要的信令協議 (signaling protocol). 什麼是信令呢?舉例來說, 打電話時, 連接到局端就是透過信令, 接通電話是信令, 掛斷電話也是信令. 它是一些控制訊號的組合.

SIP 的特色原來是希望簡單, 所以雖然模仿 SS7 實現了許多撥號, 發話, 振鈴,…的功能, 但是只支持點對點的通訊.

說到 SS7, 不由得又回想起 15 年前讀博士班的時候, 我們在 CTI 這門課的 team project 實作了一個電話訪問程式. 它會透過電腦 + 一張卡自動播號到竹軒 (交大女生宿舍)做電話訪問. 同學搞笑說十題裡面一定要問有沒有男朋友, 結果女生幾乎都有回答這一題, 讓大家很有成就感!

Presence 顧名思義就是 "存在". SIMPLE 不只是包括 IM, 它還管對方是否存在?例如 MSN 中, 我們可以看到對方 "離開", 也可以看到對方有視訊或是麥克風設備的存在, 這些都統包在 presence 一詞當中.

那 LE 呢?我私下認為那是用來湊數的. 不然只能叫做 SIMP 不是有點遜嗎?當然是得拼個常用的單字囉! 比方說我要開個 "退職螃蟹聯誼會", 我也會取個 REtired CRabs U and I Together 之類的嘛!

[REF]

1. SIMPLE

2. 會話發起協議

3. 即時通訊

4. SS7

MAF 小檔案

MAF 這個怪怪的名詞是 multiple application framework 的縮寫. 它是由 Intel 所提出的數位家庭規格, 因此想法很像是把 PC 的 multi-tasking 觀念搬到客廳去! 我們知道傳統的 DMP、OTT、STB 都是 single task, 因此 MAF 的確有它的特色. 

MAF 的妙處在於: 雖然每個 AP 都以為自己是唯一的 AP, 透過 global scense graph library 的管理,  AP 可以各自可以放大縮小或移動位置後, 最後同時呈現在螢幕上! 

假設電視夠大的話, 畫面中將會同時有電視, 遊戲, 視訊會議, 瀏覽器….呃, 這不就是 PC 嗎? 唯一的差別是裡面沒有 Microsoft, 倒是 browser 支援了 Flash.

IPTV 公司 Netgem 號稱 MAF 是 IPTV 2.0 的解決方案. 不過根據 ETRI  (Electronics and Telecommunications Research Institute) 的定義來看, 這個說法不盡正確.

IPTV 2.0 應該隱含 mobile, take out, …任何時間地點都可以看電視的觀念. 在技術上可能需要搭配 H.264 SVC (scalable video coding), 而 MAF 只是比較有彈性的方案, 直接和 IPTV 2.0 綁在一起應該視為廣告吧!

[ref] MAF for CE

DVB-T2 小註解

乍聽之下, DVB-T2 好像是 DVB-T 的後繼版本, 多少有點向前相容吧! 並沒有, 它只向 "錢" 相容, 調變規格和 DVB-T 差了很多. 雖然平平是 OFDM + QAM, 不過 QAM 的大小和 FEC (forward error correction) 就不同了. 更別說 DVB-T2 有 rotated constellations (令人聯想到傾斜的太魯閣號列車跑比較快).

DVB-T2 使得原本只能傳一路的 HD 的頻帶, 可以傳兩路 HD 加上一路 SD. 在芬蘭, DVB-T2 可憐地只分到 2 個頻道, 但即使是這樣, 它們還是塞進了 7~8 個 HD 節目 [note], 可見通訊技術真的進步了很多.

現在來講講 DVB-T2 帶來的商業利益:

1. Free-to-air

如果一個地區的免費頻道很少, 那麼 DVB-T2 可以提供更多節目的特性, 可能會吸引人去買新的 STB. 如果當地的頻道本來就多得不像話, DVB-T2 帶來的好處是把 SD 節目全部變成 HD.

2. Pay-DTT (digital terrestiral television)

同樣是付費的電視, DVB-T2 的滲透力比較高. 因此一個新的付費服務, 放在 DTT 上會比放在 cable 或是 satellite 更有成功的機會.

採用 DVB-T2 的國家包括: UK, Italy, Sweden, Turkey, Serbia, South Africa, Russia, Ukraine.

想了解 DVB-T2 的技術摘要可以看 note2.

[note]  http://www.digitag.org/DTTResources/DVB-T2_Handbook.pdf

[note 2] http://www.enensys.com/technologies/dvb-t2-overview.html

Web Workers 小註解

如果看到 dedicated worker 這個名詞, 可能會讓人聯想到專注的工作者. 而 shared worker 就像是共用的人力資源. 其實無論 dedicated worker 或是 shared worker 都是 web worker 的一種, 而 web worker 當然不是指網路工作者.

Web worker 是 HTML (特別是 HTML5)  的一個 feature, 它允許一個以上的 thread, 特別是在有任務很重的 Javascript 的狀況下, 有效率地在 browser 上執行.

在未支援 web worker 的環境下, 必須等到 Javascript 被執行完之後, 才能執行完某個 thread. 這使得 Javascript 所花的時間不能夠被隱藏起來, 而降低了執行的效率.

Browser 支援 web worker 之後, 它定義了 run Java 的 API. 多個 Javascript 都可以被放到 background 執行. 而且這些 Javascript 不會直接 access DOM, 只是透過 message passing 來收發 event.

舉例來說, 傳統的 HTML 會花一段 code 寫 Javascript, 然後用 <Javascript></Javascript> 包起來, 接著在 HML 中調用 Javascript 所定義的 function.

但 Web worker 的做法, 直接在 <Javascript></Javascript> 中間, 把 Javascript 指定給 worker 管理. load 一個 Javascript 或是關閉它的方式如下:

var worker = new Worker("worker_script.js");
 
worker.close();

把 message 傳給 worker, 或是從 worker 接收的方法如下:

worker.postMessage("Hello World!");

worker.onmessage = function(event) { do something }

Dedicated worker 表示 worker 被 create 出來的時候, 它的 message port 就已經被產生了, 例如上面這種寫法. 它的最大優勢就是簡單.

shared worker 依據 port 來共用 worker. 表面看起來和 dedicated worker 只差一點點:

var worker = new SharedWorker("worker_script.js");
worker.port.onmessage = function(event) { do something }

但實際上, Javascript 裡面會有一個 assign port 的動作, 再為 port 設定一個 listener:

var port = event.ports[0];

port.onmessage = function(event) { do something }

透過這樣的'方式, 多個 window 都可以共用一個 worker thread.

由於 dedicated 和 shared worker 的特性不太相同, 號稱支援 Web worker 的 browser 也未必同時支援這兩種模式. 我們可以透過傳回值來確認 browser 是否提出支援.

// Test if Dedicated Web Workers are available
if(window.Worker) { g_bDedicatedWorkersEnabled = true; }

// Test if Shared Web Workers are available
if(window.SharedWorker) { g_bSharedWorkersEnabled = true; }

[ref]

1. WIKI

2. Web Workers Editor's Draft 4 October 2011 [Complete!]

3. Javascript Web Workers: Opera 10.6 Beta Supports SharedWorkers

4. An Introduction to HTML 5 Web Workers  [Best!]