星期五, 十月 30, 2009

MozCC 在 Jetpack 裡重生:JetCC

在弄 ccZotero 時,網頁裡後設資料皆經由 ccMetaView (MozCC 的一部份) 擷取而來。ccMetaView 的目標是要能夠抓到各式相關的後設資料格式 (而不論是否與 CC 相關),這是好事,不過如果就真的只想抓 CC 的後設資料、是否有跟 MozCC 1.0 一樣的簡單套件呢?又,Firefox 的 API 隨著版本演進而變,而就 CC 總部投注在 MozCC 上的資源,顯然不足以隨著版本變動而更新,是否有更能快速修改的東西呢?

之前提過,我最近花比較多時間玩 Jetpack,所以在想到這些後,就把腦筋動到 Jetpack 上。這種單純的架構果然是實作簡單套件的最佳方式,只花了一點點時間、就把這個 Jetpack feature: JetCC 做出來了。

安裝 JetCC 之後,在狀態列上會顯示目前網頁的授權方式,點選之後則會帶你前往授權條款的說明頁面。其實一切就與 MozCC 1.0 差不多,這也是我覺得比較「輕量」的方式。

拜 HTML 5 Selector API 所賜 (在此以 jQuery 處理),要找到網頁中有沒有「授權條款」相關資訊,只需要簡單一行:

$(doc).find("a[rel~='license']");

接著再取得該元素中的 href 屬性 (也就是授權條款網址),即可得知該文件採用什麼授權條款,然後顯示相應圖片即可、輕鬆愉快。

在這個小套件裡有幾件事情值得與大家分享:

1. CC Metadata 格式

從古到今,就我所知有三種在網頁裡嵌入 CC 授權資訊的方法,分別是放在註解裡的 RDF、microformat、以及目前的 ccREL 規格。後兩者都可以用剛剛那樣擷取 rel="license" 的方法來察知,不過對 JavaScript 來說、放在註解裡的東西還真是苦手。實作上還是可以分析網頁後自己寫簡要 RDF parser、不過我懶了…

除了註解中的 RDF 之外,XML 中的 RDF 也是個問題。按理說我不需要管到 XML 的部份、但因為 Firefox 的構成介面:XUL 也是種 XML,所以利用 XUL 做的「網頁」 (例如高橋流 XUL) 也可以由 Firefox 開啟,這麼一來支援一下就是理所當然的事情了。不過同上,目前懶得做,願意幫忙的大德快來吧 XD

2. 產生 referer

點選狀態列的 CC 圖示會帶你到該授權條款的說明網頁。其實 CC 的授權條款說明頁面會自動偵測來源網頁是否有其他 ccREL 的資訊 (例如 morePermission、姓名標示資訊等),並且顯示出來。因此,如果在這邊單純用 jetpack.tabs.open() 來開啟授權條款說明頁的話,在 HTTP request 內並不會送出 referer,那說明網頁也就無法找到來源網頁上的其他資訊。

只要能送出 referer 就能解決此問題,不過 Jetpack 的 API 目前還沒有提供修改 HTTP Request 內容的方法,所以只能靠其他旁門左道來處理了。在你點選狀態列的 JetCC 圖示時,我們偷偷在目前頁面上插入一個按鈕,設定按下後前往授權條款網頁,再用程式模擬按下動作。這樣就暫時繞過了 referer 的問題。

嚴格說來,這個套件的作用相當有限,但有鑑於 Jetpack 這種方式是未來瀏覽器擴充套件架構必走的道路,當成試作品亦有他的價值。程式碼本身相當簡單,我直接宣告進入 Public Domain 了,歡迎大家隨意使用,如果有興趣改成 Google Chrome 可以安裝的擴充套件也不錯 (應該也相當簡單)。

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」。

星期四, 十月 22, 2009

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 套件說聲明年三月見囉~

星期五, 十月 02, 2009

Bring CC data to Zotero

Zotero is a Firefox extension which plays the role of EndNote; it helps you to manage the resources you collected from the web, like research papers or articles. Though there's a "Rights" field for copyright / license metadata, it seems that Zotero cannot recognize CC license data.

Zotero supports COinS, but doesn't save "rft.rights" values from OpenURL (I don't know why.) That means you have to enter every rights information by yourself, or you might have copyright issues when you wanna reuse the data.

Luckily we have MozCC, an extension to recognize hidden metadata in the web page. By the following way, we can make another extension to bring the power of MozCC to Zotero. It actually pretty simple, but I do spend way too much time coding to address these issues:
  1. After 2.4, MozCC is broken into two extension: One for recognize metadata in web page, and another for UI display. Since the separation is still at the early stage of development, I often feel lost when I read the code. :( Well I'm not a good programmer, I knew it from the very beginning.
  2. COinS is totally new for me, and there's only a few example for "rft.rights" on the Internet. This is pretty strange but it's true. Do a search and you'll see. I have to decide if it is the good place to save license data and, if true, in which format. Since I want to solve the multi-licenses issue (see below) in the next step, I save only the license URL at this point. 
  3. When there are two (or more) license statements on one page, how do you know which license to follow? Sometimes it means the page is dual-licensed (like Wikipedia, license under both GFDL and CC BY-SA,) but sometimes it means different licenses for different parts on the same page. This could be a problem, and even MozCC doesn't solve this.
  4. Bob is too lazy.
Anyway, I made a simple extension (or, "plugin for Zotero") to try out the possibility. If you wanna give it a try, or even help me to improve it, you can get it from my website.

Remember you have to install MozCC and Zotero first. You can use Zotero 1.x or 2.x beta, and for MozCC, please install the newest version IN THE SANDBOX (2.4.9+) from the Firefox Addons site.

Patches and feedback are welcomed, just leave me a message :)

練習寫英文的分隔線 (喔對了歡迎幫我改作文 orz 請寄信給我)

Zotero 是個 Firefox 的擴充套件,可以用來管理網路文件與你擷取的其他資料,跟 EndNote 的作用非常相近、都是比較偏向學術文件管理的用途。我家老闆希望有個可以管理網路 CC 資源的軟體,這當然是非常棒的東西,但可惜他雖有「授權」欄位、卻認不得 CC 的資料。

我查了一下他支援的 COinS 格式,此格式將 OpenURL 嵌入網頁,規格裡也有 rft.rights 這個欄位,不過 Zotero 不吃… 所以我把腦筋動到 MozCC、一個可以辨識網頁上 CC 資訊的套件上。理論上,可以寫個小程式,讓 Zotero 在儲存資料時「順手」將 MozCC 辨識出來的資訊帶到 相對應的欄位裡,完成任務。

程式其實很簡單… 不過我花的時間好像比較多在查資料,包括:
  1. MozCC 2.4.9 開始真的把這套件拆成兩個部份了,一個用來辨識、一個用來顯示。這很棒,也是正確方向,不過目前分割得不是很乾淨,我看程式碼時常迷路 orz 我真的很遜。
  2. COinS 跟 OpenURL 對我來說是新東西,其實我不太敢確認  rft.rights「可以」拿來存授權資料;目前反正是心一橫就上了,而且我有看到有人的使用方式跟我相近。另外,要儲存什麼資訊呢?我一開始有想過像 MP3 的授權欄位一樣,儲存「本文章採用創用CC姓名標示條款授權,請見 {網址}」這類的東西,不過考量到我想解決多重授權(看下一條)等問題,所以目前先單純儲存授權條款網址再說。
  3. 網頁上如果出現兩個(以上)的授權聲明,怎麼辨識儲存下來的部份該遵從哪一個條款?是平行授權、還是針對網頁的不同部份授予不同權利呢?這真的有難,MozCC 也沒解決這問題,不過我想試試看有沒有什麼好方法可以處理,以後再說。
  4. 我好懶。現在每天看棒球轉播是我唯一的嗜好。
總之總之,我還是做了一個小套件。先裝 Zotero 跟 MozCC 2.4.9+ 再裝這個套件,那麼儲存網頁時如果 MozCC 有偵測到 CC 授權資訊、Zotero 就會把授權條款資訊儲存在「權利」那個欄位內。有興趣的可以試試看,也超歡迎幫忙修改、一起討論的。

我覺得寫得簡單又爛,其實很掙扎要不要丟出來 orz 不過考量到其實我好像沒在怕別人知道我多遜,就丟吧 XD 有興趣幫改或提意見的,請直接留言囉。