顯示具有 Google 標籤的文章。 顯示所有文章
顯示具有 Google 標籤的文章。 顯示所有文章

2015/6/2

KKTIX / Google Spreadsheet / Mac OS dashboard 快速製作

COSCUP 2015 Workshop 採用 KKTIX 報名,場次不少,我們自然也挺關心每個場次的報名狀況(關係到我們是否要針對特定族群再加以宣傳)。由於每場的 KKTIX 活動頁面都選用同樣的佈景主題,也都公開顯示報名狀況,於是即使沒有提供 API,也可以很容易用 Google Spreadsheet 的 ImportXML 函式快速製作出綜合每個場次報名狀況的一覽表。

ImportXML 可以接兩個參數:

  1. 要讀入的 XML 網址
  2. XLink query,用以指明需要顯示的資料

以迅速爆滿、由 d3js.tw 成員慕約帶來的「第一次自幹 Open Data SimCity 就上手」為例,其網址為 http://coscup2015.kktix.cc/events/opendata-simcity ,而查閱原始碼可知,記載人數的 node 為「<span class="info-count">」的內容,於是 XLink 就可寫作 //span[@class='info-count'] 。

那麼只要在 Google Spreadsheet 的某個儲存格打入下列公式:

=IMPORTXML("http://coscup2015.kktix.cc/events/opendata-simcity", "//span[@class='info-count']")

就會讀入現有的報名人數及總名額,接著再用一些文字操作的函式,也就能順利把數字部分都讀出來。於是只要搭配一點點變化,就可以做出這樣的表格:

另外再做點美化,發布為 HTML 後,就成了人人可看的狀態一覽表:

其實若要自己看,也不盡然得發布為 HTML,但發布後搭配 Mac OS 的 Safari 「在 Dashboard 裡打開的功能」,那就能把這個頁面變成方便查閱的 Dashboard 小工具了:

Google Spreadsheet 還有另外提供 ImportHTML 這類的函式,但主要是用來讀取表格;如果像這種只要取幾個節點或一份清單的狀況,有鑒於 HTML 也是一種 XML,Google Spreadsheet 可以正確讀入沒有問題,還是 ImportXML 會方便點。

不免俗也是要廣告一下:COSCUP 2015 Workshop結合 15 個社群傾力演出,陣容堅強內容充實,絕大部份為免費參加。歡迎大家一起來唷 :)

2015/4/21

Google Tag Manager 新版學習札記

先前稍微玩了一下 Google Tag Manager 但一直沒有正式放到網站上(主要是... 沒有人有時間再去研究,還有一堆 GA 調整的票掛在那邊沒時間做啊啊啊啊),但因為某顆布丁說要有光就有了光,於是我這星期又重新把沈寂數個月的「研究轉換到 GTM」那張票挖出來。

快速分享一些東西,或許能幫上跟我狀況 / 程度差不多的人。

這篇文:

  • 不是教學,是快速概覽:我是站在「如果是我的話,看了以後可以省一些摸索時間」來寫的,而介面選項在哪裡什麼的,自己摸吧 XD
  • 不是去技術文:GTM 本身雖然沒有限制是開發人員才能使用,但會不會 JavaScript 影響規劃時能用的把戲,我直接以小會一點 js 的角度來看

那就開始囉!

改名

如果你用過舊版的,有些名詞換了,個人認為是更好懂:

  • Rules 改稱為 Trigger
  • Macro 改稱 Variable

改名這種事情,其實對初學者來說超級重要的,因為在求助時,找到的文件可能都還是舊版。

概念

基本流程如下

  1. 新增 Container,就是... 意義上可以歸類的一組東西
  2. 請開發人員將 Container 產生的 GTM 程式碼放上網站。理想上無論你以後怎麼改設定,這就是少數幾次真的會動到網站程式碼的時候了。
  3. 在 Container 中可以新增各種 Tag,可以想為「要做的事」
  4. 每個 Tag 可以藉由多種 Trigger「觸發」
  5. 另外 Trigger 跟 Tag 中可以藉由各種 Variable 來設定雜七雜八的東西
  6. 設定完畢後,可以用 Preview / Debug 來測試
  7. 測試沒問題就發佈,相關設定就會直接套用到網站上
  8. 若以後有要改什麼,就從 Step 3 再走一遍,而開發人員理想上不用更動什麼程式碼

舉例:「使用者在進入這一頁點選『喝我喝我』按鈕後,就告訴 GA 這人在進來多久以後才按這個鈕」,這句話裡:

  • Tag 是「就告訴 GA 這人在進來多久以後才按這個鈕」
    • 其中「進來多久」很可能是 Variable
  • Trigger 是使用者「點選『喝我喝我』按鈕」

Tag 與 Trigger

Tag 的設定不盡相同。簡單的狀況:以設定「讀入此頁時,就在 GA 中記上一筆 pageview」這樣的事情來說,只要新增一個 GA 的 Tag、選擇 Pageview、並且設定在 All page 觸發就結束了。

但複雜的話就很複雜:一樣以 GA 為例,你有「一大堆」的欄位可以指定要傳送怎樣的資訊給 GA,舉凡 UserID、Enhanced eCommerce data 等等都可以(也必須)在這裡設定。這部分有必要搭配相關的開發文件來查閱該怎麼傳。

每個 Tag 都可以指定讓很多種 Trigger 觸發,這裡會是聯集,也就是說如果你設定了 3 個 Trigger,那只要符合 3 個中的任一種情形,都會觸發此 Tag。若想用「交集」,也就是要符合所有條件才會動,那設定上得自己兜成一個 Trigger(單一 Trigger 內的各條件是交集),或者另外新增 Exception。

舉例:我們希望在使用者登入的情況下(這裡有個 Variable 可以得知使用者是否登入),點擊某頁 A 上的某個連結 B 會觸發 Tag。有兩類設定方式:

  1. 在一個 Trigger 裡,設定在 A 頁啟用 Link Click 追蹤,並僅在使用者已登入點擊 B 連結時觸發
  2. 或者,也可以設定某個 Trigger 是在 A 頁啟用 Link Click 追蹤,並僅在點擊 B 連結時觸發。此時該 Tag 還要記得另外新增一個若使用者未登入則不觸發此 Tag 的 Exception

兩種方式主要看規劃,講簡潔好維護當然是 1,但或許某些時候還是會想用 2。

Exception 其實也是一種 Trigger,你可以想成「如果符合這個 Trigger 的條件,我就不觸發」。正所謂敵不動我不動,敵一動我亂動(此句意味不明。)

當然一個 Trigger 也可以觸發兩個以上的 Tag。

Variable

記得先進 Variable 把一些預設的 Built-In Variables 開起來,例如我開了 Page 跟 Click 的大部分。

這些做啥用?例如 Click Element 可以作為 Trigger 的條件,讓你做到「如果點選了 DIV.triggerme 底下的 A 元素,就觸發這個 Tag」,以此類推。

Variable 有許多類型,我覺得比較有用的東西例如:

  • Constant: 常數(固定值),例如 GAID 會用在很多 Tag 上,先拉出來做常數設定好。一個重點是在這邊設定好以後就會變成各欄位的下拉選單。
  • Custom JavaScript: 大概是變化最多最厲害的一種,可以用 JavaScript 抓/拼出各種想要的值交給 GTM。
    • 一行看熱鬧: function(){ return {{Click Element}}.getElementsByClassName("text")[0].getAttribute("data-event-label"); }
    • 其中 {{Click Element}} 是 Variable 的引用方式
    • GTM 高人 Zorro 曾指點,其實 GTM 內建 jQuery,所以不見得要像我那樣用原生 DOM API 抓東西。但... 我就習慣了... 然後沒有公開說支援的東西我也會擔心不告而別壞光光 :/
  • Data Layer Variable: 網頁上送來的 Data Layer 資訊要從這裡轉成變數給其他人用
  • Lookup Table: 如果你會 JavaScript 的話差不多就是 Switch ... Case 的精簡版,需求簡單又懶得寫程式時是蠻方便

Preview / Debug

GTM 內建的除錯工具,啟用後在瀏覽網頁時下半部會分割視窗顯示,平常測試起來會比用瀏覽器內建的 developer console 方便非常多。主要功能是查閱各種狀態(網頁載入、DOM 完備、網頁讀完、各種點擊事件)下:

  • 到底哪些 Tag 被觸發了
    • 以及,送出了什麼資訊
    • 而如果沒被觸發又因為哪些條件沒滿足(這個非常好用)
  • 各自訂變數值

由於他會把各狀態當下的所有數值記錄下來,所以你也可以在十幾個事件之後才回頭查第三次 click 觸發了什麼東西。下圖代表在剛載入的時機點由於網頁 URL 不符規則,於是沒有觸發。

Preview 時的 GTM 設定只有你才看得到,或者你也可以分享給其他特定人。總之,即使在 production 上測試也是沒問題的。

其他筆記

  • 瀏覽器相容性:寫 Custom JavaScript 要注意瀏覽器相容性,畢竟這段 js 碼是真的會在瀏覽器上跑。
  • 由於 GTM 的設計,只要你會寫 JavaScript 就幾乎可以不靠開發人員調整網頁,就能自幹所有的變數(例如,自己爬最終訂單畫面來解析出訂單內容資料)。
    • 不過基礎 Metadata 我會仍然傾向商請網站開發人員送 Data Layer 過來,以免網頁結構有些許更動時讓 GTM 死在路邊。
  • 閱讀文件後我認為 GTM for iOS / Android App 實際作用倒沒有像網站上那麼大,開發人員仍然得自己送出幾乎所有的事件(App 沒有 DOM 可以抓啊...),差異點是:
    1. 有些設定過的 Data Layer 值可以直接重複使用
    2. 可以在軟體發佈以後才透過 GTM 改一些設定值

小結

網站分析師善用 GTM 的話可以省很多「等開發人員有空」的時間,有什麼要調整的東西時開發人員也比較不會覺得很煩。站在「網站企劃分析人員多少都得懂點網頁技術」的角度上,是蠻推薦每個人都可以學學。不過相較 GA 已經深入行銷人的領域、在用詞與操作上幾乎只要懂網路基本原理就可以用,GTM 就還是很技術人的工具。

當然,即使你完全不會寫 JavaScript,也還是可以用 GTM 快樂做些事情、不用等 RD 幫你處理,但會寫 JavaScript 的情況下,用起來根本不是同個級別的。無論如何,Google 提供不少範例,或可作為一個入口。

有打算下個月或下下個月在摩茲工寮弄個簡單的 GTM 分享,有興趣的下面留言一下吧。

2013/3/27

關於 Google Analytics 「不得追蹤單一個體」的誤解?

昨天 Google Analytics 把 Universal Analytics 送進公測,我終於有機會到處看看。新的 Measurement Protocol 要求每個 Request 都要送個 Unique-id 給 GA,以便辨識是同一人(使用 Web 版或行動 SDK 的人,程式會自己幫你搞定這一點,一切都跟以前一樣),因此我覺得或許我以前誤解了 Google「不得識別單一個體」的條文。後來看 Universal Analytics 的資料找到這條:

You will not upload any data that allows Google to personally identify an individual (such as certain names, social security numbers, email addresses, or any similar data), or data that permanently identifies a particular device (such as a mobile phone’s unique device identifier if such an identifier cannot be reset), even in hashed form.

「您不可以上傳任何能讓 Google 識別特定個人(如姓名、身分證字號、電子郵件地址等)或特定設備(例如手機上無法更動的唯一設備號碼)的資料,即使雜湊過也不行。」

這好像跟我原本的認知就已經不同了,畢竟他很強調「不可讓 Google 識別」,而不是不可讓我識別。於是又回頭看服務條款:

You will not (and will not allow any third party to) use the Service to track, collect or upload any data that personally identifies an individual (such as a name, email address or billing information), or other data which can be reasonably linked to such information by Google.

「您不可(亦不能授意第三方)使用此服務追蹤、搜集、上傳任何可用以識別單一個人的資料(如姓名、電子郵件地址、賬單資訊等),或其他可由 Google 合理連結此等資訊的資料。」

好像仍然只是在強調不可以陷 Google 於不義。也就是說,依照此兩條解釋,其實如果我自己為使用者定一個 ID(例如 35009a79-1a05-49d7-b876-2b884d),然後設定 Custom Value 去追這個 ID,並不違反 Google 的條款。因為只有我自己才可能知道 35009a79-1a05-49d7-b876-2b884d0f825b 是誰,Google 無從得知,除非他駭進我後台系統,或者我笨笨的在前台就把這個 ID 跟前述使用者個人資料連在一起。

2012/9/29

HTTPS 的 referrer 狀況筆記

很快筆記一下,周三去聽喬后演講時,她講了個我從前不知道的事:HTTPS 的網站連向 HTTP 網站時,瀏覽器不會送 referrer。以目前大部份網站都沒用 SSL 的情況來說,這會讓分析時高估直接流量(自以為有很多人加入書籤?XD)、且可能低估某些來源的威力。剛巧又有人貼了 Search Engine Land 的文章,說 iOS 6 因為預設搜尋引擎與 Firefox 相同,都轉往 SSL Search,所以就不送 referrer 了。如此推算,被低估的部份就變成自然搜尋,但這是網站健康程度的指標之一,雖然重要性就看個人,但若有需求該怎麼解決?

那就測試一下吧!Dropbox 的空間可以用 SSL 存取,所以我做了個簡單的網頁來顯示 referrer,想等 Google 去索引此網頁後再來測試搜尋。但,後來想到更快的方法:Facebook 也是 HTTPS 吧?那就從 Facebook 去連這個檔案就好。
好,所以事實證明,若 HTTPS 網站轉進另一個 HTTPS 網站時,還是會送 referrer。所以,如果想避開這種狀況帶來的影響,讓自己的網站也採用 HTTPS 就好了。花錢能解決的事情都是簡單,接下來的問題只在值不值得花。

不過現在大部份網站並不採用 HTTPS,那按理說會造成一部份的自然搜尋來源蒸發現象。但以我可以看到分析資料的網站而言,在 Firefox 預設改用 SSL Search 後,這種事情卻沒有發生,難道這代表 Firefox 的使用量已經低到無法撼動任何東西了嗎? XD

這倒也不是。其實 Facebook 等網站或許因為廣告等需求,就算你用 HTTPS 連,他的 proxy link 仍採用 HTTP 未加密連線。也就是說
  1. 你使用 HTTPS 來連 Facebook,並點擊一個看到的對外連結
  2. 這個對外連結會先跳到 HTTP 連線的 proxy link:以我的測試網站來說,就是 http://www.facebook.com/l.php?u=https%3A%2F%2Fdl.dropbox.com%2Fu%2F3280872%2Freferrer.htm&h=YAQH98kqz
  3. 這樣正式連過去另一個站的時候,對方無論是否採 HTTPS 連線,仍可收到來自 facebook.com 的 referrer
實際上 Google 也是如此,即使你採用 SSL Search,按照 Search Engine Land 的方法到 whatismyreferer 測試,對方也能正確顯示你從 Google 來。因為 Google 也用 proxy link 當跳板,然後這張跳板也刻意僅用 HTTP 連線。這是 Firefox 採用 SSL Search後,在數據上沒有造成任何影響的原因。

最後一個問題 - 那為什麼 iOS6 採用 SSL Search 後,搜尋上會造成這種影響?從剛剛的各種線索推算,答案就簡單了:因為 Google 行動版的行為不同。Google 行動版雖然也用 proxy link 來計算點擊數,但這個 proxy link 卻採用 HTTPS 連線,所以瀏覽器發現連線對象是 HTTP 網站時,也就很快樂地把  referrer 擋下來了。你可以用 Firefox for Android 搜尋 whatismyreferer 後,長按搜尋結果連結來證實此點。

喔,這樣才是置入性行銷啊 :)

2010/5/21

因 Google TV 來的雜想

現在 Google I/O 正在秀 Google TV。說實在很多點子你我也想得到,更別談那堆機上盒和 Apple TV。創新是如此的,一步步搭上,奠基在過去的生活體驗。所以你可以同時搜尋頻道、節目、網路了,你也可以(當然可以)同時上網並用子母畫面看電視。

如果你必須要登入 Google 才能看電視,不意外 XD 而且別忘了你家的電視會當機,偶爾還要擔心有資安問題(把你昨天看過的節目資料竊取而去),或是病毒(…播送不該看的東西?)。

我經常覺得解決舊的問題時,總又要面對新的挑戰。

Don't get me wrong, 用電視作為資訊接收系統一直是我很有興趣的事情,我甚至還有想過要買 Apple TV,剛也覺得 Google TV 不貴的話就很想要。講個有趣的體驗:我的 Flash 常會掛點,特別在全螢幕時,所以後來很習慣地不開全螢幕。因為要邊看 Google I/O 邊寫 Blog,我把電視接上了電腦、將 Google I/O 直播丟上電視螢幕。由於不開全螢幕、所以影片看起來很小 -- 我迅速地按了 Crtl 與 plus,將整個頁面放大 -- 不管網頁放大的技術一開始所為何事,但我這樣用了,而且相信當一個工具除了原本的功能外、還能以創作者沒想過的方法被使用,便是極為成功的工具。

這世界有網路還是很棒的,剛跟人在日本的 Kenny 用 Skype 聊了網路標準的事情,然後上 YouTube 看遠在美國的研討會直播,用 Plurk 跟大家討論(且根本不用管他們在哪裡)。我們還是應該活下去繼續看看會變成什麼樣子,只是為了好玩而已。

2010/5/20

Breaking: Download Firefox nightly and try WebM!

如果你是個關心網路影音發展的開發者,那麼快去下載今天的 Firefox nightly 吧。

方才在 Google I/O 上,Google 終於確實做了大家期待他做的事情:開放 OGG Theora 的同門師弟「VP8」的編碼專利,成立 WebM 專案。目前有包括 Mozilla、Opera 以及想當然爾會相挺 Google 的一些軟硬體廠商為這項計畫站台,這很可能一舉終結目前 HTML 5 中 VIDEO 標籤的編碼大戰。

YouTube 已經開始提供 WebM 的 HTML5 版,首先以支援 WebM 的瀏覽器(例如剛剛請你快點去下載的 Firefox nightly trunk)開啟 www.youtube.com/html5 點選「Join HTML5 Beta」,搜尋影片的時候在網址後加上「&webm=1」即可。目前我還沒辦法測出來,但相信很快就可以玩玩。接下來等 WebM 的硬解晶片上場,我想這場小戰役就可以宣告終結了。財大氣粗有財大氣粗的玩法,看過富豪刑事的人一定很了解啊!

不過還是真的要說句感謝咕狗大神,總算我們可以確保網路持續開放。

2009/12/12

Porting JetQRCode from Jetpack to Google Chrome

(將 Jetpack 套件移植到 Google Chrome — JetQRCode 篇, 點我直接看中文版)

As you may know, Google Chrome browser announced their extension gallery a few days ago. The Google Technology User Group in Taipei hosted a Chrome Hackathon today, I was there and did something insteresting: porting extension between Google Chrome and Jetpack. MozTW is all for "open" (standards, source…) and not for a single product, at least that's the way I doing things.

So here it is, JetQRCode for Google Chrome 0.4, a demo about porting Mozilla Labs Jetpack scripts to Google Chrome.

I've learned a few about the difference between the two:

  1. You have to break everything in Jetpack script, which is in a single file, to several parts, like manifest.json, content_script.js / background.html, options.html, to make things work in Google Chrome.
  2. Jetpack is highly related to jQuery. To make life easier, you may want to insert jQuery as content script.
  3. HttpRequest to different domain is not allowed in content script, do it in background html, and pass the result to content if needed.
  4. You have to create a HTML page for user to set preferences, and storage the values in LocalStorage. (But you can't get the setting values in content script, pass them from background html if needed.) Also, there's only one data type in LocalStorage: string. Be careful if you're trying to use boolean or integer in it.
  5. There's no APIs for context menu in Google Chrome yet, you might need to do the same behaviors in different way.

IMO, since Jetpack is still in early stage, extension APIs in Google Chrome is more complete (though more complex) in many way than Jetpack. Porting things between the two framework is not as easy as I thought before, and need creativity to conquer the difference.

If you are a not-so-good web developer like me, I think Jetpack is easiar to create extensions to solve problems in daily life. But anyway, creating an extension in either Google Chrome or Jetpack is much simpler then in Firefox (without Jetpack), which results more productivity.

(To correct my poor English, drop me a line with patches, thank you. :)


因為我懶得把一樣的話重寫一次了,所以這篇的中英文版大概只有重點一樣、內文會差很多 XD

我原先以為讓 Jetpack 與 Google Chrome 互通套件不算很難,但今天參加 Taipei GTUG 的 Google Chrome Hackathon 時實作一下稍稍有點改觀 —— 的確不難,但是有些東西是比想像中麻煩些。所幸最後仍有斬獲,所以各位親愛的 Google Chrome 使用者、這裡是 JetQRCode for Google Chrome

拜雙方都遵循網頁標準所賜,其實原理跟很大一部份的程式碼依然相同 (是說我大多都用 jQuery 就是了… 懶惰鬼!)。有些經驗我想還是蠻值得跟大家分享一下,但中文版我想首先講結論:結論是…

  1. Jetpack 真的比較好寫 (XD),對於像我這種沒有很精的人來說可以輕鬆愉快地達到效果,相對來說 Google Chrome extension 就要考慮比較多架構上的問題 —— 或許是因為得拆成數個檔案吧?有些事情要在哪裡做,得先就權限等問題考量一下。
  2. 無論你喜歡哪個,兩個都比原來 Firefox 的套件實作方式輕鬆許多,當然也大勝 Internet Explorer。 (Opera 跟 Safari 沒研究)

好,那麼柏強在這次的遊戲中學到什麼呢?

  1. Google Chrome 的套件,要完成一件事情就算程式碼再簡單也會需要兩個以上的檔案,例如 manifest.json、content_script.js / background.html、options.html 啥的,所以單一檔案的 Jetpack 要移植過去就要好好想一下該怎麼拆程式。
  2. Jetpack 內建 jQuery,很多事情也跟 jQuery 息息相關,所以移植到 Chrome 時、方便起見先把 jQuery 塞進 content script 比較好。
  3. 在 Google Chrome 的 content script 裡不能做跨網域 HttpRequest,不過background html 沒問題,所以如果需要的話就在背景做、然後把資訊傳到內容去
  4. 兩者設計哲學中大不同的地方之一是偏好設定,在 Google Chrome 裡你必須自己寫整個 Option 頁面,也要自己把設定值存進 LocalStorage —— 相對自由當然也相對麻煩 (而且從 content page 裡目前還沒辦法直接拿設定值喔!記得從 background html 裡傳。) 這邊我撞到的其中一堵牆是對 LocalStorage 不熟,不知道它什麼都是用字串存,如果要用布林值還是數字的麻煩注意一下
  5. 目前 Google Chrome 裡還沒有調整快捷選單的 API,所以有些效果可能要重新想想使用者可以運用的方法。

以上心得供大家參考,也希望網頁設計師們都可以來玩玩看這兩種比較簡單的套件寫作方式,發揮創意製作出一些好玩的套件。日後有機會再來試試把 Google Chrome 的套件移植回 Jetpack…

2009/12/11

用 Thunderbird 3 玩 Google

Thunderbird 3 有非常方便的帳號設定功能,只要在一開始的精靈畫面輸入比較知名的電子郵件帳號服務提供商 (例如 Gmail),就自動幫你把該點該選的通通準備好了。不過呢… 如果只是這樣,那或許你跟我一樣會撞到一些牆,這邊分享一些設定上的經驗,也順便再度介紹即將現身的 Lightning 1.0。

如果你是信件數要用 G 當單位來計算的 Gmail 老用戶,那使用 Thunderbird 3 幫你設定 IMAP 之後可能會遇到幾個問題:

a. IMAP 好像沒用,收不到信?

請到 Gmail 設定的「轉寄和 POP/IMAP」裡確定已經有打開 IMAP 的選項。如果已經開了,或許代表你身處一個會阻擋這類連線的網路環境中 (例如公司…)?

b. 為什麼好像硬碟一直在跑…

有很多原因:

  • 在預設值中,Thunderbird 會把「所有」的信件都收回來電腦裡當個快取 (這快取真大…),所以如果你是老用戶,想像一下 4G 的信件在空中飄…
  • 由於 Gmail 的特殊 IMAP 實作方式,每一封信都有可能有不同的「分身」出現,例如一封信剛寄到的時候就會同時在「[Gmail] > 所有郵件」以及「收件匣」裡出現;要是設定過自動上標籤的話、還會有更多分身,因此即使信件總量是 4G,實際上要收的可能是 5G 或甚至 8G 的信…
  • Thunderbird 3 的搜尋功能大躍進 (非常值得一試),代價是為了製作搜尋索引要耗掉不少硬碟空間。以我的 4.7 G 信件為例 (在 Gmail 裡這樣顯示,實際上因為前一點的關係,可能不止),整個索引結束後 Thunderbird 個人設定檔資料夾佔去了 18G 的空間 —— 你沒看錯,就是十八基嘎。我後來有做點動作讓整體空間下降到大約 6G (等下會說明),如果經常需要搜尋信件、或許這是值得的,只是一開始硬碟頻頻亮燈就免不了了…

要跑多久?主要看網路速度而定,有得等了!還好這期間還是可以用 Thunderbird 來收發信,只是「搜尋」無法找到所有信件而已。

c. 我遇到了「Account exceeded bandwidth limits. (Failure) 」訊息,然後無法收信了?

其實這才是我寫這篇的原因,如果你還沒有開始用 Thunderbird 來收 Gmail IMAP 的信件,建議先看完這段。

剛說了 Thunderbird 會把所有信件都下載下來,那很容易在使用不久之後就碰上 Gmail 自己對 IMAP 設的流量限制了。遇到這個問題後,會有數小時到將近一天的時間無法用 IMAP 收信。

這個時候你什麼都不能做,只能回去用 Gmail。

有沒有解法?目前沒有很好的方法,不過我在網路上搜尋到一篇文章提供了一個不錯的意見:有些人 (例如我) 在存取 IMAP 時,並不需要「所有郵件」跟「收件匣」之外的任何資料匣 (也就是標籤),那為什麼不把他們隱藏起來呢?這樣可以大幅減少信件往來耗費的頻寬,且既然可以用搜尋方式找到任何想找的信件,那「資料匣」的必要性就降低很多了。

在 Gmail 實驗室裡就有「進階 IMAP 控制項」,首先將其啟用:

接著到設定中的「標籤」一頁,我只勾「收件匣」、「寄件備份」、「所有郵件」及「垃圾桶」,其他全部取消。

這麼一來日常使用中與主機之間訊息來往的機會就會稍微減少一點,「可能」也比較不容易撞壁。

請參考 fauzty 對這點的看法,刪除郵件部份我還沒有驗證但他說的應該是對的、資料匣的部份看各人的習慣如何。

d. 我把寄件備份跟垃圾桶那堆也都取消了!

那… 你可能會發現信寄出去時老是卡住,因為本來 Thunderbird 想存放寄件備份的位置被關掉了 XD 刪除郵件倒是還可以用,不過在 Gmail 那邊會多出現「[imap]/刪除的郵件」這種標籤。有兩條路可選:

  1. 把垃圾桶跟寄件備份打開
  2. 調整 Thunderbird 存放郵件的資料匣

第二種方法要到「編輯 > 帳號設定」 (在 Windows 跟 Mac 上應該是 「工具 > 帳號設定」) 去,點選左側面板 Gmail 帳號下的「備份與郵件匣」一項,把 IMAP 中已經隱藏、信件該丟到本機資料匣的東西都選好即可。 (例如下圖中的「草稿」跟「範本」就是存在本機資料匣。)

「垃圾桶」的設定則在「伺服器設定」一項,一樣是看你 IMAP 有沒有把垃圾桶隱藏起來而決定要放到哪兒去。

e. 好,信件沒問題了,可是 Gmail 的連絡人資料不會一起過來…

那… 就用 gContactSync 把它們叫過來吧,裝完以後在「通訊錄」的選單中可以設定啟用,目前要同步的通訊錄名稱請用英文設定。

f. 我想要有 GMail 實驗室裡的「Google 日曆小工具」

那麼你需要的是 Lightning 套件,也就是 Mozilla 行事曆軟體 Sunbird 的「Thunderbird 雙鳥整合版」。安裝後就可以在 Thunderbird 旁顯示接下來幾天的預定行程,加上 Provider for Google Calendar 就可以輕鬆與 Google 日曆同步!

在 Thunderbird 3 裡,Lightning 的行事曆將以分頁的方式呈現,操作起來比以往更直覺些,搭配 Provider for Google Calendar 也支援直接設定以簡訊方式提醒行程。唯一的缺點是目前還沒有給  Thunderbird 3 用的「正式版本」,你得自己安裝 Lightning 的逐日建置版 (Nightly,每天都會更新的超級測試版) 才行,這畢竟還是測試用的、在這邊就不提供連結了,有興趣的可以等 1.0 版正式出爐,屆時應該也會放入由 Sun Microsystem (以及包括小弟在內許多早期貢獻者) 協助完成的中文語系。

2009/10/30

JetWave 0.2 with waves list in your sidebar.

I just add a feature to JetWave which can show your inbox in Jetpack sidebar. Check the screenshot below:

Also, you can install JetWave from the new Jetpack Gallery, which is still in the alpha stage but usable. Remember to check the "Let me install this unreviewed Jetpack" near the install button.


我為 JetWave 新增了在側邊欄內讀取 Wave 清單的功能 (見上圖),另外也把 JetWave 丟到 Mozilla 實驗中的 Jetpack Gallery 裡了。如果您要從那邊安裝的話,記得先勾選「Install Jetpack」上方的「Let me install this unreviewed Jetpack」。

2009/10/22

JetWave, JetPack feature for Google Wave

JetWave is a JetPack "feature" for Firefox. Just like Gmail-notifier extensions, JetWave can help you to check your inbox in Google Wave.

For install and usage information, please check the JetWave page.

我最近花蠻多時間玩 JetPack 的。雖然上官覺得 JavaScript 其實不簡單,不過我自己來講、「簡單」代表的是肉腳如我也可以隨便寫出點東西來,我們這種人是不會要求自己太多、或者要把什麼東西寫得太好太複雜的 ;) JetPack (及 Google Chrome 的擴充套件架構) 就蠻適合我們這些平常只碰網頁設計、會點 JavaScript 的人。

JetWave 是簡單的 Google Wave 檢查套件,安裝後會在狀態列上顯示收件匣內的新訊息數目,點擊後則可前往 Google Wave 查看新訊息。除此之外,我也蠻建議會點 JavaScript 的人看一下程式碼 —— 我並不專精於程式設計,但相信看了後可以大概了解用 JetPack 快速寫個符合需求套件 (或說「feature」) 的方法。

安裝或其他資訊,請往此處去

我接下來想做中職戰況快速檢視的東西,不過今天晚上我要去ㄆㄘㄉ了 :P 所以就跟預定的 JetCPBL 套件說聲明年三月見囉~

2009/1/12

在 Google Sites 上嵌入 SlideShare 的投影片

Google Sites 萬般好,不過天殺地封閉,想放個外部資源還得先看是不是自家產品再說。好在 Google Gadget 並不算難寫,所以我先從解決自己的需求開始、加上了 SlideShare 的投影片功能

方法簡單:

  • 在 Google Sites 編輯時選「插入>更多」
  • 點選「Search」隔壁的小字連結「輸入網址以新增」
  • 在接下來的網址輸入欄上輸入 http://embedanything.googlecode.com/svn/trunk/insert_slideshare.xml,點選「新增」
  • 設定好大小,貼上 SlideShare 投影片的網址,再點選「確定」 即可,他會自己去找到對的程式碼來貼。

標準寬度是 425、高度為 355,但多寬多高都可以。另,我要很沒良心地說,嘗鮮者用之、遇蟲者報之,有求者可以講但我不見得有能力應就是 — 有能力的人啊,這是 BSD 授權的,歡迎加入修改。

我真的不喜歡寫,但還是得解決自己的問題。

2009/1/7

Google 協作平台「加入本站」範例

Google Sites 缺乏提供大眾申請加入本站一同編輯的機制,但你可以利用 Google Docs 拼湊出來。這邊提供一個申請頁面範例以及可以直接使用的報名表樣本,若仍有所疑慮、可參考隨附影片加以設定。

複製報名表樣本

在 Google Sites 上放入報名表

2008/12/18

隱藏發佈後之 Google 試算表的某些資料

這篇是我寫在 HappyMobs Wiki 上的文件,歡迎到那邊協助補完


用 Google 表格 (Form) 做網際連署等表單時,常會遇到以下需求:

  1. 最好可以即時公佈有哪些人已經參與連署
  2. 最好可以隱藏一些隱私欄位 (例如 email、電話等)

很可惜,需求 2 目前沒有很好的解法,至少現在是這樣。

解決方案

目前沒有很好的解法,但還是可以用笨方法解。以下是幾種笨方法、及其副作用的介紹。

For programmer: 或許這可以利用伺服端程式藉著 API 存取 Google 試算表後再顯示出來,但目前似乎並沒有人寫這玩意。如果你有寫了、或是有找到這類解決方案,歡迎協助編輯這份說明

Google 試算表裡的「隱藏欄」

副作用:對會 HTML 的人來說等於沒隱藏。

最簡單、也最不推薦的方法,便是先在 Google 試算表裡選取某欄、然後按滑鼠右鍵選擇「隱藏欄」,接著再發布。但這種方法只是把該欄位在視覺上隱藏起來,其發布的網頁原始碼中仍含有那些隱私資訊,對於 會用 HTML 的人來說等於沒有藏。因此,真正私密的資料不建議用這種方法。

發佈「影文件」

副作用:需要人工手動進行,耗時、無法動態即時更新。

說穿了就是把資料內容「複製」到另一份試算表,刪去隱私資料後再發佈那份「影文件」,這樣可以確保發佈後的東西安全。

以下假設有一試算表 A 需要發佈並隱藏其中的隱私資料,將複製的步驟說明如下:

  1. 開啟試算表 A
  2. 點選 Google 文件介面中的「檔案>建立副本」,副本試算表的名稱請自訂 (在此以「B」為例)。
  3. 刪除試算表 B 中的隱私欄位
  4. 發佈試算表 B,並以試算表 B 的發佈網址為公佈名單網址。

如果你是想分享(而非發佈為 HTML) 給其他使用者,記得你刪除的資料依然會在「檔案>修訂版本資訊」裡出現,所以變成是要先在試算表 A 裡刪除敏感資料、複製出試算表 B 後,再行復原試算表 A 剛才刪除的資料。進行這樣的動作之前,請先取消試算表 A 的「表單>接受回應」,待資料復原後才打開。

日後要更新時有兩種方案可選:

同試算表、新版本
  1. 開啟試算表 A
  2. 點選 Google 文件介面中的「檔案>匯出> xls」,這樣你會下載一個 MS Excel 檔案,在此例為 A.xls
  3. 以硬碟上的軟體 (MS Office 或 OpenOffice 皆可) 開啟 A.xls,刪去敏感資訊後存檔
  4. 回到 Google 文件,開啟試算表 B
  5. 點選 Google 文件介面中的「檔案>上傳新版本」,接著選取硬碟上的 A.xls 上傳

這麼做的優點是發佈的名單網址 (試算表 B 的發佈網址) 不會變動,缺點是需要硬碟暫存、不方便在公用電腦等地使用。步驟 3 也可以先省略、待步驟 4 與 5 都做完後再直接用 Google 文件編輯,但若要這麼做請記得先取消「有變更時自動重新發佈」,免得把還沒刪除敏感資料的版本送出去。

新試算表

非常簡單,只要按著原來複製出試算表 B 的步驟再從試算表 A 衍生出試算表 C、試算表 D 等等徒子徒孫就可以了。缺點是發佈名單的位置會經常更動 (因為你每次更新的時候真正發佈的試算表都不一樣)。

其他連署方案

由於隱藏 Google 文件表單資料中的隱私資訊如此麻煩,若您真的很需要即時、方便的連署功能,建議採用 Zoho Creator 等其他連署方案,不要用 Google 文件。

2008/12/15

授權方式更動

原先使用的是「姓名標示—非商業性—相同方式分享」,決定比照我的 Flickr、把非商業性拿掉。至於相同方式分享算是我的堅持吧?總之,歡迎利用。

CC 有個特性是不可撤回,意思就是說在本文以前的文章,你都還是可以採用創用 CC 姓名標示—非商業性—相同方式分享 2.5 台灣版的準則來利用… 不過,哪有人偏愛比較嚴格的限制呢? :P

另外我也放上了 Google Friend Connect,歡迎加入。這算是實驗一下,之後可能會需要看 OpenSocial/Google Gadgets 的東西… 留言板也採用 GFC 的塗鴉牆,比照慣例我還是開了允許匿名張貼,也請多多利用。

2008/12/5

Google Sites 裡的背景圖

答案就是很難做。

樂生快活 小卡圖 因為要改造某個網頁下方的圖文,改為在關掉圖時依然可見文字的方式做,所以需要在 Google Sites 的版面上實作「背景圖」這玩意。很可惜,Google Sites 會濾掉 CSS 裡的 background-image 特性:在編輯模式內看得到,但實際存檔後會消失;縮寫模式 (background: ) 有圖的話也會濾掉。這對已經習慣用 CSS 的我著實是個麻煩。

我想到的第二種方法:雙 div「套印」、也就是讓文字 div 浮動在圖層 div 上的方法,依然宣告失敗,因為 Google Sites 也會過濾掉 position 等相關 CSS 特性。

沒輒,只好又回到表格… 好久沒用「<tr background="…"」這種玩意了 XD 實在很蠢,但是沒辦法。Google Sites 方便歸方便,限制實在過份多,我想目前對熟悉網頁技術的人來說最好的免費 Wiki 或許還是 Wikidot。

附帶一提:這種「套印」法通常還要注意的事情是,萬一使用者關掉圖 (我用手機上網時通常會關掉),白色的前景字會消失在白色的背景裡,因此要記得也設定背景色—這麼一來圖片沒關就會顯示圖片、關了就會顯示背景色,前景文字一樣看得見。

2008/9/2

禁止改作?換個格式算不算?

CC 的 VP: Mike Linksvayer 剛剛以身作則,「示範」把含有「禁止改作」條件之作品轉變為其他格式檔案,用的正是今天在網路界引起風暴的 Google Chrome 漫畫書。他將這本漫畫編為 PDF 檔案,方便大家下載收藏,並在 Blog 上寫道

This is one rare case in which I find reading a PDF easier than web pages (page down has lower latency and requires less movement than clicking ‘next page’) so using sam2p and pdftk I made a PDF version of the comic book.

Note that although Creative Commons licenses containing the ‘No Derivatives’ term do not allow altering the license work, they do allow moving the otherwise unaltered work to a new format. (Ideally Google would have released the work under a more permissive license, but we’ll take what we can get.) Lenssen’s scanning and my PDFing are examples of such format shifting.

簡譯:這是少數我覺得用 PDF 比用網頁更容易閱讀的例子,所以就做了個 PDF 版。雖然這份作品採用的創用 CC 授權方式中帶有「禁止改作」條件,但這條件其實亦允許將沒有更動過的作品轉換為其他格式。Lenssen 把拿到的漫畫書掃描上網、我把掃描的東西拿來做 PDF 都是這樣的例子。

剛好可以拿來當個範例。

Google 瀏覽器

剛剛瞬間竄紅的新聞,圖片來自 Google Blogoscoped。很快紀錄幾個重點:

  • 使用 WebKit 作為佈局引擎 (加上這個新聞,Google 真是太邪惡了)
  • 跨平台、Open Source (授權方式不明,猜想應該也是兩三種平行授權?)
  • 以介面簡潔為特色 (這,看上圖就知道了)
  • 內建 Google Gears,所以也就有離線網際程式跟多線程 JavaScript 功能了。
  • 每個分頁都是獨立的程序在跑,企圖以此閃過記憶體相關問題。
  • 用新的 JavaScript 引擎 (不曉得這跟 Firefox 3.1 會加上的新引擎相比如何)
  • 支援 Safari、IE8 的「隱密瀏覽」模式
  • 支援 Firefox 的「惡意軟體、釣魚站台」阻擋功能
  • 支援 Opera 的 Speed dial 功能
  • 支援類似 Prism for Firefox 或說 Safari 4 的 Web Application 功能,就是說網際應用程式可以開在獨立、無介面的視窗,加深整合感。
據稱離想像中的 1.0 應該還很遠,不過明天就會先有 Windows 版可以測試了。

2008/4/26

ACIA 與網際應用軟體

在創用 CC 今年初舉辦的「ACIA:資訊時代之亞洲與公眾創用 」研討會中,我用了一些方便(而且免費)的網際服務,完成 ACIA 中一些需求。會利用這些網際服務主要是因為我超懶,實際上也不喜歡寫程式,能用別人弄好的當然是最棒了 :P 後來成效還算不錯,我也一直有打算分享一下應用上的經驗,不過一切就有如我過往兩三個系列文章一樣,成篇不足、斷頭有餘… 現在體認到如果有話要講就快講,久了就懶了或忘了。

最近有些附中校友為在校生辦了「菩提通識學院」,把一些多元的想法介紹給學弟妹,我覺得這樣很好;看了他們的網站,我想應該至少還是要把簡單的網際應用使 用範例寫一下,會省下他們很多時間。為了避免再度斷頭又沒把話講完,這次的目標就是超級簡介、一篇結束,希望能幫上點忙。

這對一些比較缺乏資源的組織可能也有點用處,只是、基於到底還是要討論到很多技術名詞跟選擇上的考量,這篇比較好的對象還是有涉獵技術的朋友。真正啥也不 懂的讀者,可以試著搜尋名詞解釋來瞭解你看不懂的地方,不過如果也能轉交給貴組織的技術人員參考,或許會快一些。況且,我的考量勢必有非常多疏漏,不見得 就適合你組織的運作模式。

網站:採用 Wiki (Wikidot)

Wiki 共同寫作的特點,很適合一般沒有真正全職網站編輯人員的組織。最大的好處當然就是每個人都可以上去寫個三言兩語、有錯誤也可以立刻改。如果搭配良好的版面配置及規畫、做研討會網站是十分適合的。

用 Wiki 做研討會網站,最大的 Showcase 應該就是 Wikimania 維基媒體國際會議了。這個研討會中的參與者甚至籌辦團隊都散佈全球,要求「一定要大家一起開籌備會」是決計有困難的,這時網際網路就發揮了不錯的功能。Wikimania 使用維基百科自家的 MediaWiki 系統做統籌,參與者人人可以自由編輯各項文件,搭配維基人本來就有的動手習慣,是使用 Wiki 系統籌辦活動的典範。ACIA 打開始就決定要用 Wiki 做網站,這是我跟我家老闆不約而同的共識。老闆的理由我沒有細問,我自己倒是因為一路觀看 Wikimania 的 Wiki 使用過程而一直很想動手試試看。
系統部份,懶人是很討厭自己架系統的,所以我採用日前發現的 Wikidot 來設立研討會網站。Wikidot 自由靈活無廣告的特性非常適合我們,也能夠自訂網址、加入訪客分析功能 (Google Analytics);雖然不支援中文頁面名稱及網址,但這對我們這個以英文為主的研討會來說不是問題。

編輯上的經驗

Wiki 系統的強項在於協同編輯,不過如果你身處傳統組織、老闆習慣用「我不會、你加比較快」來叫你改網頁,那「協同」的威力就大大減弱了。在 ACIA 裡,好在我家老闆也是個十分親近資訊科技的人,在研討會初期常有我們各自修 Wiki 修到半夜的記錄;另外創用 CC 乃至公眾授權本身是個跨越法律、文化及資訊科技的議題,各國參與者對資訊科技抗拒的程度比較不會那麼高,所以網站上也有演說者自己上來修改介紹、提供圖片 的經驗。整體來說,除了無法讓辦公室其他非資訊相關的同事一起編輯較為遺憾之外,用 Wiki 方式確實收到應有的功效。

Wikidot 可以非常全面地調整各種導覽列及外觀,詳細的說明我已經寫過一篇文章,請參考 Wikidot 快速啟用事項清單

研討會流程表大概是我遇到的第一個問題,Wikidot 的表格說實在不很強、程式也有小 Bug。這時我們有一些選擇:a) 用別的軟體畫表格,然後以「embed」標籤嵌進去網頁 b) 改變表格編寫法。基於我家老闆盡善盡美的個性,流程勢必在編排過程中有相當頻繁的修改。一開始我們只用簡單的列表方式來排、等一切大致底定之後,我才開始 嚐試用 Wikidot 表格語法來編寫流程表。以我的編寫格式來說,Wikidot 尚能負荷;不過如果你需要更複雜的編排方式,或許直接以 Google Docs 編寫表格以後再嵌進來比較好,類似的範例可以參考 MozTW 自由新生代的課程表



「講者、講題介紹」是個能好好利用「範本」功能的地方,我先做了個簡單的範本頁面 ,並設定其他以「program:」為開頭的網頁都預先套用這個範本。如此一來,在編寫上的速度會快上很多。講者照片大多來自 Flickr,感謝 Joi Ito、他拍過了許多與會者的照片,在這方面用起來真的蠻方便的。

雖然我本身蠻抗拒做中英對照網站 (研討會官方語言不是英文嗎?),但不可否認這是個需求。Wikidot 沒有 MediaWiki 多語參照的概念,為了應付這個需求,我用了一點小花招、使用兩組 Wikidot 網站來做中英對照。這方面的經驗我之前也已經寫過一篇,請參考以 Wikidot 實踐中英對映站


整合外部服務

地點資訊頁面裡,使用了 Google Maps 功能。現在來說你已經可以把自己在 Google Maps 上面標誌的路線圖等資訊直接嵌入網站了,這可以參考一下 MozTW 自由新生代的交通資訊頁面。Wikidot 會自動製作上傳圖檔、PDF 檔的縮圖,這點蠻方便的,也很有用處。

再次強調我是個懶人,不喜歡寫程式、討厭自己架系統,但是研討會的參加者來自世界各地、「報名系統」成了必備條件。這個部份真的要強烈推薦 Zoho Creator ,它可以讓你用拖拉放的方式製作資料庫表單,也可以設定檢索方式來匯出資料報表。雖然以現在的角度來說,我們已經有了Registrano 這個國產優秀網站工具可以處理網路報名的事情,但自訂能力來講 Zoho Creator 略有優勢,裡面自訂驗證、表單處理程序的功能也適合有程式基礎的朋友。兩者各有擅場,都是值得推薦的服務。


會後的錄影,我們希望能挑選支援創用CC的影音平台,選擇並不多。後來採用 blip.tv 的服務 ,好處是可以下載原始檔案,壞處則有兩個: a) 不支援中文 b) Wikidot 預設無法內嵌。無法內嵌是個大問題,不過由於 Wikidot 可以支援所有以 iframe 標籤嵌入的內容,所以比照中英對照的技巧、我也寫了一個小網頁來「偽裝」 ,做出可以方便內嵌 blip.tv 影片的機制。讀者可以自己參考一下原始碼,再比對一個成果網頁 即可瞭解。

除了影片外,會後的相片、投影片則有 FlickrPicasa Web AlbumSlideshare 可以放,Flickr 跟 Slideshare 都支援創用 CC、算是政治正確的選擇。

跟網站無關的部份…

除了網站之外,後面的行政流程上也多少會用一點網路服務。例如我這邊邀請國外講者的預算及規畫等等就是用 Google Docs 的試算表功能與我家老闆共享,另外也採用 Google Analytics 分析一些訪客往來的資訊。這部份… 就不是這篇的重點了 :P



上述所有服務都是免費的,操作介面大多也蠻人性化;即便是要寫點小程式的地方,也可以參考我給的例子來下手。如果你完全不懂那些技術性的東西而心生畏懼,我找了一些使用這類服務的教學文件,或許你可以動手試試看再決定要不要用。

2007/10/16

10/22 Google Vin Cerf 在台演講

TANET 2007 諾貝爾獎級專題講座,請來 Google 的 Vint Cerf 博士演講「探索二十一世紀網路趨勢」,轉貼資料如下:

「網路」已成為現代人不可或缺的生活工具,是個人獲取資訊的主要管道,企業的行銷利器,也是創作者的樂土。網路科技日新月異,每一階段的技術創新都帶來嶄新商業模式與更便利的生活方式。掌握網路發展趨勢是網路時代創造機會的關鍵。想瞭解網路 的未來發展嗎?Google誠摯邀請您與「網際網路之父」Vint Cerf博士一起探索二十一世紀網路趨勢,同時讓Google臺灣工程研究所團隊與您分享Google技術創新,一起感受網路新生活。

Vint Cerf博士為電腦諾貝爾獎 Turing Award得主,Google資深副總裁。他是網際網路TCP/IP協定發明人,網路發展重要推手,Google新創技術主導者。他對網路發展趨勢的分析,在國際上深受重視。此次來台演講機會難得。 Google臺灣工程研究所2006年4月成立,致力發展尖端網路技術。本次演講為研發團隊成立以來首次公開研發成果展示。

講題:探索二十一世紀網路趨勢

  • 時間:10月22日14:30 ~ 15:30 (名額有限,14:00開始入場)
  • 地點:福華文教會館卓越廳 (台北市新生南路三段三十號)
  • 講者:Vint Cerf博士,電腦諾貝爾獎 Turing Award得主,Google資深副總裁
  • 主持人:李琳山博士,臺灣大學教授
  • 共同主辦:臺灣大學與臺灣網際網路研討會 (TANET 2007)

講題:Google技術創新與網路生活

  • 時間:10月22日15:40 ~ 16:40
  • 地點:福華文教會館卓越廳 (台北市新生南路三段三十號)
  • 講者:Google臺灣工程研究所團隊

如果需要加入 Google Calendar 的話,請按此鈕:

這種時候就會很期待 Mircoformat 風行時代的來臨啊。