訂閱

上次更新

September 02, 2010 03:21 PM

所有時間日期皆為格林威治標準時間。

Powered By

Planet

摩茲工寮

這邊是工作人員碎碎念的地方,您可獲得最新出爐的資訊以及最不成形的想法 :P

August 21, 2010

BobChao

立馬加入 W3C 中文 HTML5 討論郵件群組!

我已經加入囉,其他就直接看 Ping 的文章吧,全文轉載如下:


W3C 的 Chinese HTML Interest Group 要成立了!

這個小組目前還在籌備階段,要等章程寫完、被 W3C 批准才能正式成立,但 mailing list 在 W3C 的 Kenny Lu 和 Mike Smith 的熱心幫忙之下,已經建好了!

如果你熱血到要馬上加入,請發信到 public-html-ig-zh-request@w3.org,主題寫 subscribe,然後依收到的指示進行就可以了。

如果你不確定這是什麼,那請繼續往下讀。

W3C Chinese HTML Interest Group 是什麼?

來逐字解讀好了。

W3C = World Wide Web Consortium = 制定 Web 規格的單位,有興趣了解的人可以看維基百科上的中文英文說明。

Chinese = 中文,包括正體中文和簡體中文。

HTML = HyperText Markup Language = 用來表現網頁的語言,如果你不知道 HTML 是什麼,你大可以忽略這篇文章。  :)

Interest Group 是什麼?如果你去問 Google translate,它會告訴你 "interest group" 是「利益集團」,台灣霹靂火瞬間上身! XD

其實 Interest = 興趣,Group = 一群人,所以 Chinese HTML Interest Group 就是「對 HTML 有興趣的一群講中文的人」。當然任何人都可以號召這樣的一群人,組織起來討論 HTML 的技術和講中文的人對它的需求,但成立在 W3C 裡有不一樣的意義,根據  W3C Groups 網頁的說明,W3C 的任務性小組有四種:

  • Working Groups(工作小組,暫譯):進行規格相關工作並有實際產出的小組,產出可以是技術報告、軟體、測試套件、評審他組產出的報告等等。
  • Interest Groups(興趣小組,暫譯):對評估有潛力的 Web 技術和政策有興趣的人的集結,主要是個交換想法的論壇。
  • Coordination Groups(協調小組,暫譯):和其他組溝通和協調資源的小組。
  • Incubator Groups(培育小組,暫譯):在一年之內快速開發新 Web 技術的小組。

另外有兩個永久編組,就不多說了,對 W3C 組織架構有興趣的人可以上網查。


W3C Chinese HTML Interest Group 可以做什麼?

成立這個「中文 HTML 興趣小組」(暫譯)的想法是 2010 年 8 月 14 日在 COSCUP / GNOME.Asia 2010 的 HTML5 BOF 期間由 Kenny Lu 找 Mike Smith、柏強和我談的,初期的想法是可以在這裡讓大家用中文討論 HTML 的技術和中文這種文字對 HTML 的需求,如果能把全世界各地講中文、關心這個議題的人聚集起來,如果大家成熟到可以理性討論、凝聚出共識,就能把需求遞交給 HTML Working Group 或讓主要瀏覽器開發者重視我們的需求。

一開始提出的議題是:
  • 直排文書的 CSS3 規格和實作
  • Ruby 的 HTML(5) 規格和實作,Ruby 就是像國小課本文字旁的注音符號那樣縮小排到本文旁邊的字。
  • Web font 的中文支援
但小組成員可以自由提出其他議題。

我在 8 月 17 日的 Tossug HTML5 讀書會中宣傳了興趣小組的構想,立刻得到 21 位熱血社群朋友連署響應!申請一個興趣小組據說總是要一個月以上,而 mailing list 在小組成立前是不會建的;但是顯然台灣社群的熱力燒到了 Mike Smith,讓他破格先建了 mailing list,讓大家不用引頸企盼太久。

我有沒有說過 Mike Smith 是 HTML Working Group 的正式窗口,同時是 HTML 規格書的編輯?

所以,熱情的台灣社群朋友們,你還在等什麼呢?

by 柏強 (noreply@blogger.com) at August 21, 2010 01:38 PM

August 14, 2010

sst.dreams

Jetpack SDK Presentation on COSCUP / GNOME.Asia 2010

In the joint conference of COSCUP / GNOME.Asia 2010, which is the biggest FLOSS conference in Taiwan this year with more then 1,000 attendees, I gave a 30 minutes presentation about Jetpack SDK and how to developer extension with Addon Builder.

Though I still spoke too fast, it was still a great presentation at all :). The following is the slide of the presentation, which was written in English:

Examples used in the presentation:
  1. Plurk pusher *
  2. Say Sorry pt.2 feat. littlebtc
  3. Plurk unread mointor *
 * You require a Plurk account to test full funcationality of 1 and 3. Plurk is the most famous microblogging service in Taiwan.

To me, I think next time I should not put so much things in a 30-minutes presentation :P

by littlebtc (noreply@blogger.com) at August 14, 2010 03:36 PM

August 08, 2010

Othree

JavaScript Best Practice Part.2: Performance

目前 JavaScript Best Practice 想了四個主題,不過後面兩個主題的東西還有點少,雖然預計一週一篇,可能還會再看看吧,這篇主要是在效能增進的一些作法,下一篇應該會是一點安全性的東西,第四篇應該是 Loose Coupling (Special Event)。總之所以就開始吧~

陣列與迴圈

通常用 for 迴圈處理陣列時會這樣寫:

for (i=0; i < arr.length; i++) { arr[i] = blah...
}

不過這樣效率比較差,每次都要去看陣列的長度,所以建議寫成:

for (i=0, len=arr.length; i < arr.len; i++) { arr[i] = blah...
}

這樣就只有一開始去存取陣列長度而已,其實還有其他寫法可以更快,像是反過來存取,或是改用 while,不過程式碼比較不淺顯好懂,就比較不推薦使用。

如果不是陣列而是 DOM NodeList 的話差距會更明顯,DOM NodeList 雖然行為和陣列有些相似,不過效率上一直都比較差,所以像 sizzle 還會把找到的節點丟到陣列才回傳,又不過其實現在大部分的新瀏覽器在 DOM NodeList 存取和陣列存取的效率差距越來越小了。

One var

宣告多個變數時:

var a = 1;
var b = 2;
var c = 3;

改成

var a = 1, b = 2, c = 3;

試著讓每個 function 一開始就用一個 var 把所有需要的變數的宣告好,包括 for 迴圈要用到的 i, j, k, len 等變數,因為 JavaScript 只有 function 有 scope 的效果,所以在 for (var i = 0; i < arr.length; i++) 這裡面宣告的 i 和在外面宣告的一樣,所以就統一移到前面去宣告吧,這在 前一篇的文章 有提到 JSLint 的 onevar 這個選項可以使用,所以可以交給 JSLint 檢查。

字串串接

如果有需要大量使用到字串串接,像是下面的程式碼:

str = '';
for (i=0, len=arr.length; i < len; i++) { str += arr[i].text;
}

那改成先丟進陣列,最後用 join 一口氣接起來會快很多:

strarr = [];
for (i=0, len=arr.length; i < len; i++) { strarr.push(arr[i].text);
}
str = strarr.join('');

使用 innerHTML 還是 DOM

在我曾經還是標準狂信者的時候,我是很討厭使用 innerHTML 的,不過後來我脫離了這個階段,innerHTML 就再也不是我的禁忌了,畢竟它速度快、相容性又高,不過需要注意的是在 IE 下使用標籤語法要正確,像是標籤沒有結束的話,其他瀏覽器會產生空的標籤,IE 可能就什麼都沒產生了,不過使用上要注意,把需要的 HTML 字串都生好了一口氣丟進去,不然速度還是會很慢,另外比較特別的是其實 webkit 瀏覽器使用 DOM 會比較快。

Scope Chain

JavaScript 的 scope 是要用 function 來建立,每多一層 function scope 就會讓 scope chain 多一層,scope chain 指的尋找變數、函數時的搜尋路徑,越多層 function scope 的東西要存取起來速度就會越慢,前一篇也有提到不要使用 with,其中一個原因就是會讓本來直接可以存取的東西跑到上一層去,所以考慮到這個問題,所有會存取到兩次以上的,不同層的東西都盡量在這層存起來,舉例來說:

function test() { if (/baga/.test(document.getElementById('id1').className) { document.getElementById('id1').style.color = 'red'; }
}

就可以改成下面這樣,程式碼看起來也比較精簡:

function test() { var id1 = document.getElementById('id1'); if (/baga/.test(id1.className) { id1.style.color = 'red'; }
}

有些人可能會習慣用一個匿名函數把自己的 code 包起來,避免污染到其他的 script,如下:

(function () { // blah...
})();

實際上這樣寫,會讓 global scope 的東西變得遠一層,所以像是 document 這種常用到的物件存取時間就會增加,有一個從 10 Things I Learned from the jQuery Source 看到的方法如下:

(function (window, document, undefined) { // blah...
})(window, document);

這種寫法有兩個好處,一個是剛剛提到的,把 document 抓回到同一層, gugod 說這樣在 IE 下會快不少,另一個好處是使用壓縮工具時,可以把 window, document 這些變數名稱也壓縮起來。至於輸入參數的第三個 undefined 是故意的,這樣的用途是確保 undefined 沒被人覆寫過,不過 undefined 沒辦法過 JSLint,我是建議看自己的情形來決定需不需要,當然有的話比較安全。

Reflow and Repaint

當你對文件結構或是文件樣式做修改時,瀏覽器需要重新畫一次頁面,這些工作能盡量減少就盡量減少,大概有幾個方向可以做到:

  • 減少對文件樹的修改:修改文件樹會需要 reflow (當然接著 repaint),所以要盡量減少文件樹的改動次數,如果需要插入大量的節點,可以先用 documentFragment 包起來,再一次放進來。
  • 避免直接修改 style 屬性:因為無法一次修改 style 的不同屬性,所以建議是用 class 來預先寫好不同狀況的樣式,然後改 class ,這樣就可以一口氣讓節點的樣式改好,而不會因為需要改三個屬性就讓能瀏覽器重畫了三次。
  • 減少存取顯示相關的屬性:瀏覽器本身會做一些最佳化和排程來減少 reflow/repaint 工作,不過如果你需要存取這些顯示相關的資料(例如:寬、高、位置等),瀏覽器就會被迫馬上重畫,所以可以不存取就不要存取,例如做移動效果時,先把路徑設計好,然後看時間決定位置,而不要根據現在位置和函數執行的次數來移動。

關於 reflow/repaint , phpied 有篇文章 Rendering: repaint, reflow/relayout, restyle 講的很詳細,有興趣深入的可以看看。

Event Delegation

如果你有大量的東西要加上同樣的事件,像是文件清單,要給每個文件都放上 click 事件來產生選取效果,那建議使用 event delegation 方式,而不要真的給每個元件都綁定事件,一來綁事件本身就很花時間了,二來也會吃記憶體,event delegation 的作法是把事件把在目標節點共同的祖先層,然後再用 event.target 來判斷實際上是按到哪個元素,程式碼看起來如下:

document.getElementById('#file-list').addEventListener('click', function (e) { var target = e.target, tclass = target.className; if (target.nodeName.toLowerCase() == 'li') { tclass = tclass == 'selected' ? '' : 'selected' ; }
}, false);

這段 code 在 IE 上不能運作。Delegation 除了速度和記憶體的好處外,還有一個好處是因為事件綁在上面一層,所以內容(檔案清單)的增減都不用再去處理事件的增減,可以讓你的程式的 coupling 更鬆一點。

一些函式庫像是 jQuery 有提供 delegation ,讓你寫起來比較方便,除此之外它還有 live/dead,差別是 live/dead 是把事件綁在最外層,也就是 document 本身,不過這樣做有些缺點,一是綁太多時,效率會變差,因為要做太多的 target 判斷,加上一些事件可能會發生的太頻繁,整個就會卡住,二是有些事件不會跑到最上層。

函數名稱和 profiling 工具

匿名函數很好用,不過建議還是給它個名字,這樣在 profiling 的時候才知道是哪個函數,以下面這段程式碼為範例,用了兩種方法綁定事件,分別給了有名稱的函數和沒名稱的函數:

function call() {
}
document.getElementById('b1').onclick = function () { call();
};
document.getElementById('b2').onclick = function b2() { call();
};
document.getElementById('b3').addEventListener('click', function () { call();
}, false);
document.getElementById('b4').addEventListener('click', function b4() { call();
}, false);

接著我依序點了四個目標,用 Firebug 記錄事件,結果如下圖:

profiling

可以看到沒有名字的兩個函數會難以分別,都叫 onclick,另外有自己取名的 b2、b4 就好辨認多了,當你的程式大起來時,會使用到匿名函數的地方可能會越來越多,如果沒有取名稱的話,到後來幾乎就無法判斷誰是誰了,因此建議函數都給它個名字吧。不過這頂多是開發時有用,正式上線程式碼過壓縮之後,YUICompressor 會把函數改名,Closure Compiler 會把不需要的函數名稱砍掉~~。

我最早看到這個問題是在 Building a Better JavaScript Profiler with WebKit 這篇文章,主要是在講新(當時)的 Webkit 開發工具的改變。

August 08, 2010 11:26 PM

YUICompressor vs Closure-Compiler

總之我比較喜歡後者,兩個原因,一是壓縮出來比較小,二是不會把換行砍光光,這樣如果有錯誤出現,不得不從壓縮過的版本裡面找時,還會比較好找,用 YUICompressor 的話,因為會只剩一行,結果有錯誤的話也無法判斷是哪一部分的程式碼出錯。

August 08, 2010 05:39 PM

August 03, 2010

Othree

JavaScript Best Practice Part.1: JSLint

前陣子有長輩問我 JavaScript 的 Best Practice,一時還真講不出來,因為我不太有把經驗整理出來的習慣,所以有了這系列的文章,雖然會有幾篇不知道XD。

那天被問到的時候我一時只想的到先過 JSLint 再說,所以第一篇就先從 JSLint 開始講起,JSLint 是 Douglas Crockford 在 2002 年時發表的 JavaScript 程式碼的檢查工具,除了基本的語法檢查外,還多了不少限制和要求,可以讓你的程式碼品質提昇,光是讓你的程式碼能過 JSLint 檢查就可以減少很多可能的問題了,接下來就針對各項主要的檢查項目做介紹。

全域變數

全域變數很危險,因為這些變數可能會和其他的程式碼產生衝突,畢竟你可以控制自己的程式不用全域變數,但是你無法控制其他人的,甚至是其他人惡意 code,再加上 JavaScript 中只要變數使用前沒有先用 var 宣告過,該變數就會是全域變數,所以在 JavaScript 中是很容易誤用全域變數的,一般的作法是把自己的 code 全部放到同一個 namespace (物件)之下,這樣就可以讓程式使用到的全域變數最小化到只剩一個,或是把你的程式碼整個用 closure 包起來。JSLint 限制全域變數的使用,沒有宣告的全域變數都會被視為錯誤而跑出警告,宣告的方法是寫在註解裡面如下:

/*global myApp:true, myApp2:true */

結尾分號

每行結尾都要有分號,沒寫雖然程式碼也可以跑,但是寫了比較沒事,尤其是在使用簡單的 JavaScript 壓縮工具時很有差。不過有時候程式敘述沒完,到下一行還要繼續,像是太長的字串要分兩行,然後用 + 接起來時該怎麼辦? JSLint 其實也是可以接受,只是加號要放在行尾,不是行首。

另外有有嚴格要求函數結尾的分號使用,分成兩種:

var f1 = function () {};
function f2() {}

f1 這種宣告會要求要有分號結尾,f2 的方式則要求不可以加上多餘的分號。

if, for 一定要大括號

當然不寫大括號會有一行被認定是在該條件之內需要被執行的程式碼,不過為了保險不誤判起見(容易發生在修改程式碼時), JSLint 強制要求一定要大括號。

for in 要檢查該屬性是否屬於該物件直接擁有

簡單說就是要這樣的寫法:

for (var i in obj) { if (obj.hasOwnProperty(i)) { .... }
}

這是為了確保不會存取到不想存取的屬性,舉例來說,像是 prototype 這套 JavaScript 函式庫會對原生的陣列物件加上一些新的 method 到它的 prototype 裡面,這時如果想用 for in 寫法來跑這個陣列就會把這些新增的 method 也一起抓出來,所以需要用 hasOwnProperty 來檢查一下,不過我個人的建議是,不要用 for in 寫法,一來它效率比較慢,二來可能會遇到這種問題,還要一個一個檢查,所以能不用就不用最好,尤其是跑陣列時。

不要用 with

總之就是不要用 with,因為會讓你產生混淆,不知道你存取到的變數到底是哪個 scope 來的,而且還有效能問題, with 會多產生一層 scope chain ,本來直接可以存取到的變數反而跑到第二層去了。

=== and !==

和 null, 0, undefined, true, false 這些值比較時,一定要用 ===!== ,因為 JavaScript 有神祕的型別轉換,讓你的 null == undefined 但是 null != false ,當然還有其他各種有趣的比較,總之你確定是要判斷是否是以上列舉值的其中任一種時,就用 ===!== 吧,如果只是要 true/false 判斷,可以用 !! 來把值轉成 boolean。

eval is evil

不要用 eval ,或是丟程式碼到 setTimeout、setInterval、Function 裡(和 eval 等價),雖然少數時候會需要 eval,不過大部分的程式應用可以不使用 eval, 它有安全性的問題和效率的問題,如果需要處理 JSON 格式的資料,那大部分的 Library 都有函數可以處理,沒的話也可以使用 Crockford 的 json2.js ,它相容於現在新瀏覽器內建的 JSON 物件,可以安心使用。

說到 JSON 就不得不提一下,其實它的字串只允許使用雙括號 " ,而且物件屬性名稱有要求一定要用字串形式,用雙括號包起來,不是只有字串值才需要,詳細可以看看 JSON 官網 的鐵路圖,只是因為很多人使用 eval 來讀 JSON 資料,才會產生誤解以為 JSON 和 JavaScript 語法完全一樣,嚴格說來只是子集而已,這邊衍生的問題是,錯誤的 JSON 格式在用原生 JSON 或是 json2.js 時會過不了。

使用 {} 建立物件, [] 建立陣列

不要用 new Object() 和 new Array() 了,直接用 {} 和 [] 吧,還可以同時給初始值,速度也比較快。當然 newString()new Number()new Boolean() 也別用...

parseInt

parseInt 可以指定要是幾進位的整數形式,不過第二個參數也可以省略,只是預設值不是固定的,如果你的字串是 0 開頭的話,它會幫你當成 8 進位,如果是 0x 開頭的話會當成 16 進位,不過後者的問題比較小,問題是前者,如果你想要把 09 轉成整數,你本來預期是 9 ,但是因為被當成 8 進位,09 不存在,所以他會回傳 0 ,因此 JSLint 要求使用 parseInt 時一定要加上第二個參數,指定字串顯示的數值是幾進位的形式。

使用 obj.name 取代 obj["name"]

可以的話就使用前者的方法,速度比較快,也比較省程式碼。

變數只能宣告一次

在同一個 scope 下,同樣的變數名稱只允許宣告一次,當然也是為了錯誤認知。

設定

其實 JSLint 有不少選項可以設定,甚至可以允許 eval ,畢竟有時候會有需要,和全域變數一樣是寫在註解裡面,我自己現在的設定如下:

/*jslint browser: true, forin: true, onevar: true, white: true*/

第一個 browser 選項是會提供部分瀏覽器內建的全域變數和函數,我不知道為什麼有些函數反而會關掉,像是 escape 有使用到的話還要自己加到 global 裡面。

第二個 forin 是前面提到的 hasOwnProperty 檢查,我通常是關掉不檢查的(設成 true),因為我很少需要物件繼承的複雜資料結構,所以比較不會有使用 for in 的需要,加上陣列也不會用 for in 來跑,所以就省去這項檢查了。

第三個 onevar 是限制每個 function 只能有一次 var 宣告,這也是一個效率問題,後面的文章會再詳細介紹。

第四個則是嚴格的縮排檢查,預設是四個空白,另外在有名稱的 function 宣告時會要求名稱後面直接接 () 中間不留空白, anonymous function 則否,當然主要目的是為了讓兩者區隔比較明顯,不會把 "function" 看成函數名稱。

var f1 = function () {};
function f2() {}

像是前面舉過的例子,f1 後面的函數在宣告時是屬於匿名的,他的 () 就要和前面的 "function" 間留一個空白,f2 就要求函數名稱和後面的 () 接在一起。

其他

還有不少設定和檢查說明我這篇文章沒有提到,可以參考 JSLint Instruction ,而除了這些其實還有不少細部檢查沒列出的,就要等遇到時才知道了(要翻 原始碼 也是可以的)。

下一篇文章會講一些和效能有關的東西,這兩篇應該都還很偏 coding style XD。

補充:查了一下發現 escape/upescape 已經不推薦使用了,以後請用 encodeURI/decodeURI 。

August 03, 2010 05:26 AM

July 28, 2010

BobChao

2010 CC 亞洲會見聞錄 (2): Open, 以及 CC 司法領域專案會議

接續前一篇「CC 亞洲會」而來...


Closing Keynote: Open

「好像是第三次看 Lessig『現場表演』,我就像戲迷一般。」雷席格教授的演講術舉世聞名,是很富表演魅力的。這一天的最後,CC 發起人雷席格教授上台演講,我在 Twitter 上有感而發寫了這句。這場演講據他本人說「有 95% 新內容」,環繞在一個越來越明顯的問題:「開放、自由」這件事情,在平台、內容上,是否是必須的?

最好的例子仍是蘋果電腦,一個似乎推崇開放與創意,但行為上十分封閉的公司。這樣的公司獲得經濟上的巨大成功,那麼我們對於開放與自由的態度到底該如何?如果我們相信「有開放、自由會更好」,如何證明?需要證明嗎?千古大哉問。

the new Grail?

又,這段演說對筆者來講有另一個重點:基於理念與面對的議題十分相近,自由文化相關社群的合作勢在必行。CC 的主事者開始關注「平台的自由」,Mozilla 也提出 Drumbeat試圖將觸角延伸到非關軟體的地方。我想可以預見這些組織未來將更頻繁地合作,為彼此共同的目標努力。

雷席格教授的演講已經放上 YouTube,有興趣的朋友也可以上網觀看。

CC Asia Meeting

第二天屬於 CC 司法領域專案的關門會議 – 說「關門」,其實也不是因為不能公開,只是一般民眾大概也不會有興趣而已 :P 一如往常,大家分享這一年以來的工作狀況,討論相關議題。

SANY6519

除了各自發表的內容之外,韓國CC很貼心地還另外邀請兩位訪客分享關於募捐的事情。其中韓國延世大學的「Blue Butterfly」方案十分有趣,放進了一點遊戲元素,利用神秘感誘使校友閱讀、並提倡一天捐款 1 美元(1000 韓圜)連成蝴蝶,贊助經濟較為困難的學生。由於這個募款方式十分特殊,甚至還上了外文媒體!此專案有英文版簡介影片,可以參考。

談到資金,過去各司法領域專案對於與 CC 總部之間的關係總有點不滿意,畢竟各區專案必須得自力更生、而 CC 總部的募款計畫從來不曾協助在地專案(見去年的「華文地區訪談」)。為了這個問題,CC 總部日前已經開始嘗試提出贊助方案,以實際的資金協助全球社群的相關計畫。這是個開始,希望以後還能更好。

在去年台灣創用 CC 計畫把網誌移到首頁後,我們每個月都花了些時間看看其他人做些什麼、發生了什麼,因此在這次工作報告的部份,比較多是我們早已知道的事情,相對來講也很遺憾地比較難留下印象。好在這到底是個注重分享的社群,很多人都已經把投影片上傳到網站上了,有興趣的朋友也可以到英文版網站上查詢。

下一篇來談一下社群的部份

by 柏強 (noreply@blogger.com) at July 28, 2010 11:40 PM

2010 CC 亞洲會見聞錄 (3): 社群,結語

承前一篇。本文一開始,筆者提過這次去主要想觀察他們的社群,在會議結束之後我也額外多留一點時間,前往韓國 CC 辦公室一探究竟,並且與專案經理 Mi Young 聊到差點趕不上飛機。這次會談的內容大致圍繞社群運作模式,幾個有趣的要點如下:

「其實我們也不知道為什麼」

有趣的事實:大部分的開放社群,都不知道社群成員為什麼會來。不過這當然只是一瞬間的感覺,仔細探究一下還是會發現一些可能的原因 – 說是「可能的」原因,因為人太多種、原因也太多了,其實很難直接複製一套作法就想通吃所有人。不過好在我們到底是個佛心非營利組織,往良善的方向去通常也會有不錯的結果。

給30歲左右人士的實體活動

韓國 CC 與 TEDxSeoul 等實體研討會、活動合作,自己也辦了好幾次的 CC Salon、CC Hopeday 等派對、工作坊。Mi Young 特別提到她個人的觀察:成年人進入社會工作一段時間後,常會感覺精神上只是在付出而沒有獲得,他們也會想加入許多的社團、組織,擴大交友圈或培養興趣。雖然韓國 CC 一開始並沒有針對這群人規劃活動,但或許以他們為目標可以收到不錯的效果。

資金充裕?

這次的研討會是過去三次亞洲會中最盛大的一次(大到讓筆者有點擔心往後沒人敢接手),且韓國 CC 居然在高級地段有辦公室,這讓人對他們的資金來源十分好奇。Mi Young 表示,這個辦公室第一年的資金由社團法人的理事長贊助,而他們現在也已經與韓國前兩大入口網站 NAVER 及 Daum 簽訂合作條款、並可望找到另外的大贊助商。不過當筆者問到目前是否能確保這個協會能穩穩邁入第三年?Mi Young 搖了搖頭「我們會努力,但目前不能確定。」

目前韓國 CC 協會大約有上百名會員,會費是月繳數百台幣。扣除大公司贊助不談,這應該算是少量、但比較穩定的收入。筆者覺得可以慶幸的是他們至少還不需要四處「接案」來過活,若今天總得擔心明天是否溫飽,經常就只來得及「把事情做對」,很難要求再將心思放在「做對的事情」上。

實體空間是重要的

SANY6903

雖然「網路」是CC誕生的重要因素,但見面三分情,實際面對面的互動體驗畢竟還是網路交流無可取代的部份。韓國CC辦公室開放時間內,社群成員皆可自由進出,現場也有白板、文具等工具協助社群成員動腦發想新點子。筆者剛進辦公室時,也有社群成員正在討論網站製作的問題,認真但不過份嚴肅,氣氛不錯。

另外有實體空間也能讓記憶留存,例如牆上貼了這次研討會籌辦之始,韓國CC團隊思考會議目標的腦力激盪圖表、排班表等佈告,讓社群成員對一個地方有記憶、有感情,也越容易產生認同感。

有魅力的領導人會加分

The judge is SOOOO ROCK!

上圖是 Jay,吉他手、足球員、愛打雪仗。他同時也是法官,以及韓國 CC 的領導人。這次去開會,筆者觀察到社群成員對他都有非常高的認同感,他也很能跟大夥打成一片 – 或者說,是大家對他都沒大沒小 :P 在與 Mi Young 聊天時提到「Jay 應該也很忙吧?」她跟暑期實習生 Ji Hye 兩人相視一笑:「很忙啊... 嗯啊,忙著... 玩 Band 那類的!」這當然不是說只顧玩都不用做事了,不過在得知 Jay 同時還參加了足球隊跟冬季雪球比賽,還真是著實讓筆者吃了一驚。大家都愛跟有趣的人一起做事,有這樣一個興趣多元又親和的領導人,想來對社群營運也是十分有幫助的。

世界的自由社群都一樣

筆者過去曾有一些機會與其他國家的社群接觸,這次到韓國也做了訪談,再加上七月參與 Mozilla 全球會議。有個越來越深的感覺是,全球的自由文化相關社群,目前在營運上遇到的問題大同小異,想出來的實驗性解決方案也很類似。這有兩種解釋:首先,台灣社群並不差到哪裡去,我們實在沒有必要經常用「人口太少、市場太小」或「東方人不主動」這類事情困住自己。另一方面,目前全球的自由文化社群都卡在某些關卡上不去,我們極力追求提高社群參與的方式,但如之前筆者在自己的網誌曾寫的,貢獻率總是百分之一,我們老是想辦法提昇人數,卻很難提昇貢獻率。或許這就是極限了,也或許我們該再增強彼此的交流,試圖讓各種創意快速實驗並分享經驗?


結語

在 iSummit 2008 之後,CC 已經很久沒有真正全球性的會議了。這次的 CC Asia Conference 有來自中東與 CC 總部的夥伴,第二天的討論也蠻熱絡(雖然對於怎麼跨區域合作,好像還是沒什麼進展),稍微有點全球會的樣子。明年的亞洲年會將在澳洲舉辦,據說他們很想再「復興」一下全球會的盛況,或許我們可以再次期待明年有一個聚集四方「Commoner」的盛會。

而一如往常地,這次會議我們解決了一些問題,例如從去年會議結束後發出的「CC 亞洲電子報」在成功發出兩期後,也催生了亞洲 CC 網站建置計畫。未來亞洲的 CC 社群活動將有可能以更快的速度分享,提昇跨區域合作機會。但,也一如往常地,我們總是發現還有很多事情處理不完,例如各司法領域都很缺乏技術人才、因此筆者發表的題目「Fun with Metadata」意外獲得比想像中更多的迴響 – 不過就是個 CC 套件原型而已啊!其他還有資金、提昇參與等事情,這些議題或許三五年內還不會消失,也或許就永遠不會消失了,但相信我們可以找出方法與之共舞,不致失敗。

最後還是廣告一下:創用CC計畫下半年有一連串的工作坊,從技術、音樂、文件寫作等部份出發,希望慢慢將這些聽起來比較「硬」的著作權議題帶入創作者的生活。又、日前台灣創用 CC 計畫也啟動了兩個合作研究案,一個關於 CC 帶給創作環境的影響、一個則探討 CC 運動本質的反思。這些事情需要各位的支持,也請別忘經常訪問台灣創用 CC 計畫的網站。

by 柏強 (noreply@blogger.com) at July 28, 2010 05:56 AM

2010 CC 亞洲會見聞錄 (1): CC 亞洲會

前言:由於我被 OpenOffice 的字數計算騙了,所以下個月的專文不小心拉哩拉雜就寫了五千多字,害編輯的同事刪得很辛苦 orz。依據慣例,還是在這裡刊一下一刀未剪版 -- 太長了,分三集播出。


你知道嗎?創用CC電子報的專文是辦公室的成員「輪值」的,若沒有人投稿、則負責的成員就得自己寫一篇,或邀請別人撰稿。筆者通常習慣自己寫,也蠻喜歡接手「研討會報告」這類的文章(暱稱為「遊記」) – 這通常是給自己一個整理的機會,否則忙著忙著,通常就什麼都沒有了。總而言之,這篇文章將跟大家分享六月在韓國舉辦的CC 亞洲區會議心得。

先來點歷史:CC 亞洲會今年是第三度召開,台灣創用CC計畫在 2008 年發起這個會議後,去年的菲律賓、今年的韓國 CC 團隊們都陸續把棒子接下去,也一年比一年盛大。每年這項亞洲區研討會都大致分成對外、對內兩個部份:對外者,一般大眾都可以參與、容易入口,主要圍繞在案例、概念等部份;對內的部份,則是各國 CC 團隊討論一些工作上的相關議題,例如社群經營、推廣經驗、技術實作、資金等等。正所謂外行看熱鬧、內行看門道,不需要當爐主煩惱授權條款在地化的熱情大眾可以在此碰面、交流,各國團隊也能討論實務上操作的經驗。由於去年在菲律賓時「見識」到韓國團隊社群經營的實力,也一致覺得促進參與(當然)是重要議題,於是韓國 CC 就被拱出來當今年的主辦。

韓國 CC 是少有的、在美國以外也成立獨立法人團體的 CC 司法領域區團隊,去年的菲律賓會議裡,他們是訪客最多的團體之一,且其中只有一個是組織內的受薪成員,其他皆為志工。會議中,他們也分享過數個由志工自行企劃實踐的網站、活動專案,實力非凡。由於去年的印象太深,因此這大概是筆者參加過的 CC 會議中,最具「目的」的一次:在 MozTW 與創用 CC 計畫中,我給自己的定位都是社群發展、聯繫,所以打開始就非常期待能實際看他們的社群成員以怎樣的方式在團隊中遊走、幫助這個團隊壯大。

這篇裡,我將大概介紹一下這次會議中的事情,下一篇再來談與韓國 CC 專案經理之間關於社群經營的訪談心得。

CC Conference

第一天是開放大眾參加的 CC Conference,由於錄影的內容韓國 CC 都已經公佈在他們的網誌上,有興趣的朋友可以直接過去看,就不用流水帳的方式一個個寫了。會議中筆者較感興趣的一些東西,紀錄如下:

Sharism

由CC的朋友 Jon Phillips、毛向輝、Christopher Adams 等人提出的「分享主義」,其中的「分享貨幣」機制圍繞在「分享的人能獲得更多」或說「分享者更能獲得別人的分享」的理念,讓分享的程度成為實際可計算、可交換的東西。這跟時間貨幣、碳交易那類的東西似乎有異曲同工之妙,而目標則是讓全體的創意流通與構建更上層樓。有鑑於我們的創意都奠基在過往的經驗中,讓想法加速流通、多被利用確實可以提昇整體的創新層次,不過由於又牽扯到將抽象化為具體的計算,大概也會受到與碳交易等機制一樣的批評。

SANY6435

目前 Sharism.org 上可以看到的資料並沒有很好地組織,剛進去的人應該都看不太懂吧?其實除了毛向輝日前曾訪問台灣以外,接下來八月的開源人年會 COSCUP 有一場 Christopher Adams 的演講、九月的開放源碼國際研討會 ICOS 也有場 Jon Phillips 的演說,有興趣的朋友或許可以參加這兩個研討會、當面向這些發起人請教一下 :)

NHK Creative Library

NHK Creative Library 是由日本的公共電視 – NHK 發起的網站。這個跟「公視創用」網站一樣,搭上了全球公共電視台分享資源的列車,將 NHK 所擁有的各項資源釋出、讓大眾利用。NHK 在歷史與年度預算上畢竟是台灣公視的數倍,這次釋出的資源也一口氣將影片、照片、音樂等項目一網打盡。

網站上除了素材庫之外,也提供「My List」讓訪客編輯自己要使用的作品清單,然後就可以直接簡單地剪接;或許也因為有這個功能,網站上另外還有一區「作品集」,放置各地投稿的作品、並同時列出這份剪輯影片中利用的素材清單,這算是一種「自動化姓名標示」的實驗,十分令人激賞。

不過,要特別強調一點:這個網站上的素材,並非採用創用 CC 授權!演說者表示,NHK 仍朝向選用創用 CC 條款授權的方向努力,但目前他們認為創用 CC 條款對於一般人仍太複雜,且就組織的角度來說,也希望對於條款內容有更高的主控權。雖然要不要用創用CC絕對是著作權所有人的自由選擇,不過建立太多種條款就如同有好幾套標準,對授權者來說或許比較穩當、但對利用人來說反而可能徒增麻煩。畢竟,如果我已經認識創用 CC,那麼看一眼圖示就可以了解能做什麼、不能做什麼,更能加速理解。

現在說的「太複雜」,或許是在於要理解任何著作權條款,都不是容易的事情 – 但創用 CC 該鼓勵大家理解著作權到什麼地步呢?或者我們是否該揚棄現有規則、另外想一下怎麼兼顧分享與保護作者權益?這扯遠了,與之相關的議題還很多,日後有機會再與大家討論。

CC to the Museum

博物館、美術館等地方,經常可見到「禁止拍照」這類告示。這個題目的演說者是日本東京六本木「森美術館」的館長,他藉由允許大眾拍照、上網張貼展館照片並以 CC 授權的方式,成功為美術館創造口碑、也從而帶入另一種「與參觀者互動創作」的創作形式。

SANY6457

館長提出的一個論點蠻有趣:藝術該像是空氣一般,人人可取、人人可用而無所謂「原創者」是誰 – 這真是超激進的!但他也說,這個論點的挑戰在於如何讓創作者付出的時間與心力也獲得回饋(具體地說,物質上的回饋)– 嗯,大約就抵銷了前面那句話 :P 不過確實,只要解決後面這個問題,反對分享自己的作品的人將大幅減少。

下一篇是關於雷席格教授的演講「Open」,以及 CC 司法領域關門會議的心得

by 柏強 (noreply@blogger.com) at July 28, 2010 05:42 AM

timdream

Responsive Web Design

Ethan MarcotteResponsive Web Design布丁爸爸說這是 2010 上半年最重要的文章之一

內文主要是在闡述一個重要的 Idea:「Responsive Web Design」。隨著 Web 從 PC 螢幕移動到各式各樣的裝置,為每個裝置設計不同的網站版本(iPad 版、iPhone 版、手機版)是個 viable 但是不 scalable 的解決方法。作者認為,網站開發時如同「Responsive Architecture」的概念一樣,讓環境去適應使用者的存在 -- 像是自動調節室內溫度、將窗戶霧化以保護隱私等。網站設計不應該是平面出版的電子化,存在於固定的版面、文字大小、圖文配置;設計應該要自然的適應不同的裝置,自動調整版面的 flow,甚至是互動 UI 的大小等等

實作的細節,作者花了後半的篇幅在介紹 CSS media query。Media Query 是以前 CSS 2 的 media type 延伸,不同的是它不只是一組預先設定好的媒體(螢幕、紙本、點字、語音…),它可以讓開發者自行設定 CSS 規則適用的裝置類型、寬度等等。文章內提供了具體的範例,展示了使用 Media Query,作者可以指定當裝置的螢幕寬度小於多少、或是介於多少時,網頁可以隨之切換欄數、圖片寬度、圖文配置等等。

我自己把文章印了出來(地球對不起 > <),認真讀了一遍,滿有收穫的。雖然 CSS media query 是早就知道的東西,但是不了解前面的設計哲學與意義就不會有動機去玩它(現在就超有動機的哈)。作者的文筆讓人耳目一新,闡述概念的方式相當的生動,可以拿來練英文(真的)。

有個研伸的問題,作者也有簡略提到。CSS media query 解決了排版適應裝置畫面的問題,但如果開發者希望在不同裝置呈現不同的內容,甚至不同的互動時,多版本網站還是解法。如果只是幾行字,或許可以用 display 屬性開關切換掉,但總不會 Facebook 套了另一份 CSS 就變成 Facebook for touch devices:P

by timdream at July 28, 2010 03:44 AM

July 25, 2010

Othree

TOSSUG HTML5 分享補充

這週二我去 TOSSUG 講了 HTML 5 的新標籤和 Web Forms 2.0 ,講的當下感覺是還好,不過回來後回想才發現不少東西忘了講,大概整理一下,結果那些東西要再另外還蠻有難度的,一是量不夠,二是主題有點分散,所以當天就決定寫一篇 blog 來補充,先放上當天投影片:

目前語意網的兩個方向

這部份算是個人見解,實際情形我比較沒相關資訊查證。語意網最早的想法是擺現有網際網路上的資料轉換成有語意的格式,也就是 XHTML 2.0 的方向,不過實際上遇到的問題就是沒人想花這種人力成本來跟做這種事情,那時候 Web 2.0 的概念也還沒起來,結果就變成 W3C 制定他們的,實際上在提供服務的、用網路的自己開發自己的,當然最後的結果就是產生了 WHATWG HTML5 ,總之現有網際網路上的資料這方向失敗了,但是同時在發展的 Web Service 卻開出了另一條新的路,也就是 Tim Berners Lee 目前主要的推動目標,公開本來不在網路上的各種領域的資料,如果有在看 TED 的可能有看過他的兩場 Talk。



這兩場 Talk 就闡述他這幾年在做的事,到處推動、遊說個政府、組織、企業公開他們手中的資料,我覺得他來做這件事真的是很有說服力,因為早在網路地圖風行的年代前,他家的 經緯度 就已經公開在網路上了(顯然都還沒遭到導彈攻擊)。

W3C 接納 HTML5 背後的意義

一千零一網 書中有提到 Tim Berners Lee 對於網際網路的願景是對所有人都是自由免費的,而且不應該由任何一個企業、團體所操控把持,包括 W3C 自己,這個想法讓我真是很佩服 Tim Berners Lee ,說我成為他的粉絲也不為過,當然現實世界不會這麼美好,大陸的 Great Wall 就是一個例子,之前微軟 IE 過高的市佔率也造成很多負面影響,像是讓整個網路發展停滯了好幾年。回到重點,W3C 接納 HTML5 這件事本身就是這個理念的實踐,證明了他們不是說假話。

HTML 砍掉重練、 ECMAScript 也砍掉過、那 CSS?

這幾年主流的文件結構、行為、表現三種分開的網頁編寫方式,其各自的代表技術其實就是 HTML、ECMAScript、CSS,不過其中兩者已經砍掉重練過了,分別是 XHTML 2.0 廢棄,改發展 HTML5,ECMAScript 4 (JavaScript 2.0) 廢棄改發展 ECMAScript Harmony,而且兩者都是因為過度發展的情形下,功能加太多,太理想化等,才被砍掉重練的,現在 CSS3 又有點肆無忌憚的一直加新東西,其實我還蠻擔心哪一天會不會也被砍掉重練的,大概變成像是某種必經之路的吧。

<article> 對搜尋引擎的影響

<article> 就我腦袋所想到的,其實對於搜尋的正確性應該會有很大的幫助,回憶看看你是不是有這樣的經驗,丟入兩三個關鍵字後,打開的結果網頁是個部落格索引頁,每篇文章都有摘要,然後卻發現你輸入的兩三個關鍵字分散在不同的文章中,當然每篇文章都不是你想要的,<article> 的出現就可以解決這樣的問題。

<p> 不只是段落

簡單說你的一段文字找不到適當語意的區塊標籤來包的話,都可以用 <p> ,詳細請參考 HTML5 Spec ,這以前對於過度的語意正確要求者來說也是不小的困擾~

Web Forms 2.0 支援度

那天我忘了提到 mobile device 像是 iPhone 就有支援了,不同的 input type 它會給你不一樣的螢幕小鍵盤,其他的平台我就沒看過測試,所以比較不清楚這樣,不過手機平台某方面來說因為沒有 IE 的包袱,所以開發起來比較可以開心的使用新東西,雖然有人擔心 iPhone 會變成下一個 IE 就是。

CSS3 的那一堆 - 開頭的屬性是哪來的

這只是順便提的,CSS 2.1 時就已經有規範 Vendor-specific extensions ,就是各家瀏覽器可以自己定樣式,當然是不建議使用,而目前想要用 CSS3 的話幾乎都要用這種寫法,原因之一是標準還沒完全定案,所以各家都先用這種方法來實作,等到哪一天定案了,在把對應的字串改過來就好了,當然這些自定樣式也會慢慢移除掉,所以別忘了最後還是要加一個非 Vendor-specific extension 的寫法,免得以後還要修改,當然如果最後定案的語法和你現在寫的不一樣,還是免不了,所以現階段我有用的話會盡量寫簡單一點,像是圓角框就盡量四個角一樣。

不願意提的,HTML5 何時定案?

最後一次聽到消息是 2022,不過不表示那時候才能用,HTML5 比較特別是可能 2012 年就會把功能都定好,剩下10年是推廣實作修改階段,到 2022 要成為正式標準時,應該是直接可以用的狀況,不過這是兩年以前的消息了,我覺得比較可信的版本是,沒有定期限。

當然還有更不願意提的問題,CSS3 何時定案?答案是完全沒消息,甚至我想還會繼續冒出新東西,雖然 3D Transform 就已經很令人驚嚇了。之前甚至還有 Safari 先說他們做了什麼新東西,測試版也出了可以用,但是過了一陣子 W3C 那邊才看的到那東西初版 Working Draft 的情形。

參考網站

最後放上一些參考網站:

另外新出的 HTML5 For Web Designers 內容似乎剛好就是我這次分享的主題(感謝 even 情報)。

July 25, 2010 05:47 AM