SVG vs. Canvas

眾所周知地, Flash 是一個 loading 很重的繪圖插件, 那麼在瀏覽器裡面內建的繪圖方式又是什麼呢? 大概就是 SVG 或是 Canvas 這樣的東西吧!

SVG (Scalable Vector Graphics), 顧名思義, 它是與影像解析度無關的向量繪圖. 它嚴格遵循 XML 的語法, 所以可以放在 XML 裡面. ".SVG" 是一個可操控的文字檔, 功能有點像是 Flash 的 ".swf'". 在 SVG 檔之中, 可以用 ECMAScript  (Javascript 的一種) 或是 SMIL (Synchronized Multimedia Integration Language) 指令來控制 SVG 的物件, 讓它產生動畫的效果. 而它的又支援文字索引 (index), 方便於根據內容來搜尋所需要的圖檔.

相對於 W3C 所推廣的 SVG 開放標準, Apple 有另外一套 Canvas 相容於 HTML5, 並使用 Javascript 來控制動畫. 包括較早期的 Mozilla, FireFox, 後來的 Opera, Chrome. 甚至於即將出台的 IE9, 也在 2010/6/23 把 HTML5 和 Canvas 加進測試版, 取代(?) 過去所支持的 VML. 在打手眾多的情況下, 看來 Canvas 會比起 SVG 更有明星架勢.


[ref]

1.  SVG 摘要與範例

2.  Canvas 簡單範例

SAMBA vs. CIFS

SAMBA (SMB – Server Message Block) 是一個讓 Windows 系統存取 Linux 檔案系統的 protocol, 鳥哥對此有很好的介紹. 他也提到, CIFS (Common Internet File System) 和 NFS (Network File System) 只在 Windows 或 Unix 裡面互通. 原文說:

不過,NFS 僅能讓 Unix 機器溝通, CIFS 只能讓 Windows 機器溝通。傷腦筋,那麼有沒有讓 Windows 與 Unix-Like 這兩個不同的平台相互分享檔案資料的檔案系統呢?

果真這樣的話, 那麼來推銷 CIFS IP 的廠商不就是來亂的嗎?也不是, 中間有個演變的過程.

根據歷史, 1991 年先有 SMB 之後, Microsoft 到 1996 年才仿效 SMB 發展出 CIFS 與之匹敵, 放在 Windows NT 裡面. 到了 2006 年推出 Vista 的時候, Microsoft 乾脆就把新的 CIFS 命名為 SMB 2, 頗有雀巢鳩佔的味道. 到了 Windows 7 的時代, 微軟繼續地推出了 SMB 2.1 版, 老實不客氣地搶坐了正統的大位. (Java、Java script 的故事也差不多).

所以今天的 SAMBA 已經是 SMB + CIFS 的綜合體, 這裡有一篇說明. CIFS 代表比較新, 相容性比較好, 解決了 unicode, access control lists, aggressive cacheing, 2/4GB transfer bug 等問題 . 不過若是舊電腦連不上去的話, 請回到老 SAMBA 吧! 

此外, 原始的 SMB 要從 GPL 2.0 升級到 3.0 了. 如果要避免 open source, 可以考慮搬家到 CIFS.CIFS 由 SNIA (Storage Networking Industry Association) 所維護, 理論上可以看著 CIFS 的 technology Reference 自己 implement. 但是其中用到的技術, 要向原始的 owner, reasonable and non-discriminatory (合理而無差別) 地取得授權. 此外, 真正握有技術的 Microsoft 把 CIFS 的規格弄得含糊不清, 因此產生了賣 CIFS IP 的軟體生意出來.

看來看去, 網路上這篇介紹得最好: SMB: The Server Message Block Protocol

其中的這句話寫得更是傳神: Like NetBIOS, the Server Message Block protocol originated a long time ago at IBM. Microsoft embraced it, extended it, and in 1996 gave it a marketing upgrade by renaming it "CIFS".希望有一天我的文章也可以寫得這麼精煉.

UDP/TCP/IP/MTU 小註解

我們部門本來是做多媒體的, 可是多媒體不是從網路上拿來, 就是有可能再傳到網路上, 所以我們也愈來愈像是在做網路了.

在網路上傳送多媒體, 如果是即時的應用, 就會使用 UDP (user datagram protocol). 一個 UDP 封包最小是 8 bytes (只有 8 bytes header), 最大是 65535 bytes (64KB, 包括 8 byte header). 它的長相如下:

bits 0-15 16-31
0 Source Port Number Destination Port Number
32 Length Checksum
64 data

 

Checksum 的部分相當神奇, 根據 IP v4 或是 IP v6 的不同, 它還要想像它前面還有 IP header, 一起做 checksum. 因為想像中的 IP header 並不在 UDP 的協議中, 所以那個想像中的 header 就叫做偽頭 (pseudo header). 顯然地, IP v6 的偽頭比 IP v4 要來得大! 如果不要那麼麻煩去算 checksum, 填 0 也可以, 那就表示 "我沒算 checksum".

如果加上 IP 層的頭, overhead 又多了 20 bytes. 所以原來號稱最大可以傳 65535 bytes, 減去 UDP header 8 bytes 和 IP header 20 bytes, 就剩下 65507 bytes.

bit offset 0-3 4-7 8-15 16-18 19-31
0 Version Header length Differentiated Services Total Length
32 Identification Flags Fragment Offset
64 Time to Live Protocol Header Checksum
96 Source Address
128 Destination Address
160 Options ( if Header Length > 5 )
160 or 192+ UDP, TCP (for example)

 

如果是 TCP 的話, 用來取代 UDP 那個位置. 不過 TCP 光是 header 就有 20 bytes 以上, 幾乎和 IP v4 header 等量齊觀.

MTU (Maximum transmission unit) 又是啥呢? 無論我們選了 UDP 或是 TCP, 對傳輸系統來說, 都是 IP 的封包. MTU 就是能夠傳送最大封包的 size. 比方說 IPv4 建議值是 576 bytes, IPv6 建議值是 1280 bytes.  最大的狀況大概是 Ethernet Jumbo frame 的 9000 bytes, 基本上都不會太大, 連 10 KBytes 都不到.

當然, MTU 設得愈大, 系統就要等更多的 data 才能發送, 造成資料的延遲. 如果 MTU 設得很大, 對 TCP 或許是有意義的, 但是對於 UDP 就有點不知所云了. 畢竟即時和延遲是對立的關係.

[ref]

1. http://en.wikipedia.org/wiki/User_Datagram_Protocol

2. http://en.wikipedia.org/wiki/Maximum_transmission_unit

3. http://en.wikipedia.org/wiki/IPv4

4. http://www.docin.com/p-47138983.html

iKala 網站簡介

iKala 這個網站的經營理念, 幾乎和老馬兄所想得一模一樣. 不過對方已經經營很多年了, 並非紙上談兵啊!

進入這個網站, 就可以免費使用一些功能. 但要好玩的話, 得要繳幾百塊月費才行. 它有哪些功能呢? 包括:

1. 線上點唱.

2. 揪團開線上包廂唱歌.

3. K 歌上傳到網誌 Klog 上. 歌聲當然是自己的, 至於要露臉 (用 web cam) 還是播 default 畫面都可以. 據說露臉的以女生為主, 我猜她們想要成名吧! 超偶歌手符瓊音就是由 iKala 網站推派出去比賽的.

4. K 歌上傳後 PK, 拿獎金, 進名人堂?!

4. 非即時對唱, 如果看到正妹上傳的 “i影音", 您可以和她 “對唱" 並上傳. 不過在個人的 Klog 裡面都有自己的版本. 不會因為今天有歪果仁和正妹對唱了, 正妹的影音檔就變成歪果版.

5. 紅包場制度. 如果今天你看到章魚哥唱得很好.可以花台幣買 K 幣當小費送給對方. 章魚哥可以拿 K 幣去 7-11 ibon 換點東西來維持 “藝術家" 的生計.

6. 當然什麼花 K 幣買廣告, 花 K 幣買禮物, 那些可以讓各位把台幣敗掉的功能好像都不缺.

7. 宅男不會唱歌, 又捨不得給紅包…那…就當是上另類無名小站吧!

3D graphic 的演進

昨天聽了台大簡韶逸教授的演講, 對 3D graphic 又多了一點認識. 先前我自修了幾個小時的 3D,  但是還是比不上聽 2 個小時的演講.

3D Graphic 的技術基本上是硬體愈做愈多, 但軟體卻也沒有愈做愈少. 假設 3D 技術可分為 Transform and Lighting ( T&L – 幾何轉換及光源), Rasterize, Texture, Blend and Z-buffer 這幾個單元的話, 早期的 3D graphic card 只包含 Texture 和 Z-buffer 這兩部分 (1998 年以前).

Milestone 1:

3dfx 的巫毒卡 (VOODOO), 我聽說它效能很讚, 也去敗了一張. 這張卡的特色就是把整張圖切細, 比方說用 4 個 sub-frame 來計算整個畫面, 最後再接起來. 因為這個技巧的確有效, 所以它也紅了一陣子.

Milestone 2:

1999 年的下半年, NVIDIA 的GeForce 256,首次支援硬體的 T&L. 這樣一來,  CPU 就不用算很多浮點數了, 效能自然是大大地增強. 可惜 Voodoo 不知道在堅持什麼? 始終都不支援 T&L, 最後就被 NVIDIA 給併購了.

2001 年, NVIDIA 引進 programmable vertex / pixel shader 的觀念. 所謂 vertex shader 就是 T&L 的進階版,  pixel shader 或是 fragment shader 就是 texture 的進階版. 怎樣進階呢? 就是把原本寫死的硬體, 做成可以程式化的巨量運算單元, 再以程式來控制想要輸出的 vertex 或 pixel 運算. 這個概念影響了 Direct X 8 的方向, 使得新版的 Direct X 都伴隨著 shader model 的更新.

老師的講法, programmable pixel shader 在 2002-2003 才出現. 但網路上的說法, pixel shader 和 vertex shader 應該都是 2001 年的 Geforce 3 的發明.

Milestone 3:

2002 年, ATI 推出 Radeon 9700 這顆 IC. 裡面用到的新技術還頗不少, 比方說這是第一顆 flip chip 的 IC, 對於散熱問題有了不少改善. 在驅動程式方面也產生了很大的突破, 由於可程式化的技術已經相進步; Wiki 上說它執行抗鋸齒(AA)和各異向性過濾(AF)運算時,在所有情況下,它能比 GeForce 4 的 Ti 4600快上40-100%。這顆 IC 因為效能遠勝 NVIDIA 而大賣了 3 年.


Milestone 4:

2006 年 11 月, NVIDIA 再度推出具有 unified shader 概念的 GeForce 8800. 所謂 unified shader 就是把 vertex shader 和 pixel shader 整合在一起. 同一個 shader 既可以做 vertex shader, 也可以做 pixel shader.

網路上的講法說, unified shader 就是 steam processor. 但是簡教授認為的 stream processor 至少要有 register 的概念, 才比較像 processor. 這是發生在 2007 年.

Milestone 5:

2008年2月, NVIDIA 收購 AGEIA, 推出 CUDA 語言, 使得顯示卡變身為平行處理電腦. 這邊就算是 GPGPU (general purpose GPU) 的起點吧!

綜合以上資料, 應該有一個 milestone 是把所有的 buffer (Vertex buffer, Texture buffer, Z-buffer) 整合成 unified buffer. 但是哪一顆 IC 率先推出這個改進就不得而知了.

總之, 搞繪圖卡的這些人頭腦還挺不錯的. 在激烈的競爭之下, 大家接力地推出可以徹底打敗敵人的招數. 目前 ATI, NVIDIA, Intel 雖然表現出三雄鼎立的架勢, 但誰可以在下一個階段勝出呢? 真是很有趣的一個問題. 繪圖卡愈來愈像小型 super computer, 到時候應該要比誰對軟體的支援最強吧?

另一個觀察的角度是: 當局者迷. 事後看來, 後面發展的路徑好像是顯而易見的, 但是十年前的人也都那麼聰明, 為何他們都想不到呢? 最好的解釋或許是人們不喜歡質變, 由量變過渡到質變的話則可以逐漸接受. 有誰一次想太遠的話, 只會被當作瘋子~~

Ref:

[1] 物竞天择适者生存!显卡10年技术漫谈

[2] http://zh.wikipedia.org/zh-tw/Radeon_R300