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!]
 

WebGL 小註解

WebGL 正如其名, 具有 Web + GL 兩種性質. 它是一個 3D rendering 的 API, 修改自 OpenGL ES 2.0, 而且它使用 Web browser 當作 middleware. 只要有 browser, 就可以用 HTML 來畫 3D.

當然, 此時 WebGL 需要借助 HTML 的 CANVAS. 下面是 CANVAS 的一個例子, 說明 canvas {} 可以畫出圖來. 只不過這個例子是 2D 的, 而不是 3D 的.

大家可以發現, canvas 需要先做一個類似宣告的動作. 以便取得 ID (假設是 xxx 或是上面例子中的 tutorial.

var canvas = document.getElementById(‘xxx’);

然後再用這個 ID 取得 context, 有了 context  就有 drawing buffer. 和其他語言一樣, 第二次用同樣的名字去 getContext, 只會傳回同樣的內容, 不會再 create 新的  object . 

var ctx = canvas.getContext(’yyy’);

至於 drawing buffer 的內容, 主要是 color (8 bit), depth (16 bit), 和 stencil (模板 8 bit).

那麼 view point 呢? 表示方法如下, 由四點所組成的矩形構成四個參數:

ctx.viewport(0, 0, canvas.width, canvas.height);

 在陰影處理的部分, WebGL 支援 GLSL (OpenGL ES Shading Language). 

最後要提一下 DOM (document object model), WebGL 也會用到它. 因為 DOM 是跨 HTML, XHTML, XML 的資料表示方法. 所以 WebGL 的 function 和 interface 是用 DOM 來描述的.

對了! 據說所有知名的 browser 都打算支援 WebGL, 除了 IE9 不想放棄自家的 DirectX 之外.

[ref] WebGL Specification V1.0

 

管理學第八原理 – 系統思考定理

系統思考包含六個觀念:

(1) 整體統一: 人存在於組織, 組織存在於社會, 系統思考不能只看局部, 忽略大局.

(2) 普遍聯繫: 系統中的大小單元彼此都互相聯繫.

(3) 發展變化: 任何系統都會有變化.

(4) 相互制衡: 沒有人可以我行我素, 總是會有制衡的力量.

(5) 和諧有序: 系統的各部分長得都不一樣, 可以用人體的器官來類比.

(6) 中正有矩: 系統的任何一個部分都不能過度突出或是不及, 否則會危及系統的運行.

第一推理: 管理的效果和系統化程度正相關.

第二推理: 企業發展的穩定程度與系統化程度正相關.

第一推論: 愈多企業成員學習系統思考, 組織就愈穩定, 特別是高階主管.

第二推論: 企業領導人系統思考的程度愈高, 員工就愈能學習系統思考.

整理完後, 感覺對 "系統思考" 還是相當抽象. 用我自己的話來翻譯的話: 公司就是一個系統, 公司的架構與領導人的思路 (軟硬體) 愈是清晰有據, 則員工就愈能融入其中, 按部就班地把事情做好.

管理學第七原理 – 文化誘導定理

人類被做事習慣所誘導, 不假思索就能做出部分的決定. 其次, 由於立場、角度、方法上的差異, 即使思考過了, 仍然會被誘導. 最後價值觀主導, 覺得對的事情, 不顧利害也會去做. 因此文化誘導包括了做事習慣, 思維, 和價值觀三個方面.

第一推理: 沒有共同的價值觀, 就沒有組織文化.

第二推理: 組織的價值觀和外部的價值觀差異愈大, 組織文化就愈不穩定.

第三推理: 組織文化包括四個層次和九個要素. 完整的組織文化可以抵擋外在文化的入侵.

  形象藝術
表象層 語言藝術
  風俗習慣
  生產方式
  倫理道德
實體層 規章制度
  科學技術
理論層 倫理哲學
核心層 價值觀

第一推論: 組織文化建立的過程, 就是養成同樣做事習慣, 思維, 與價值觀的過程.

第二推論: 要有洗腦的過程, 才能將組織文化純化, 去掉雜質. 聽起來怪可怕的, 但這也是事實. 中國產生了前所未有的新文化, 就是從文革而來的.