Firefox 27 將移除 Flash Plugin,改用 Javascript Flash VM “Shumway” 代替

Geek.com: Firefox 27 will kill the Flash plug-in on January 21 看到這個消息,就試著去裝了 Shumway 的 Extension

要跑起來花了一點功夫…

  • 要把 Flash Block 關掉
  • 要把 Flash Plugin 改為「啟用時詢問」
  • about:config 內要把 shumway.ignoreCTP 設成 true。原本沒有這個設定,要自己加上。

跑起來結果如下:

會看到下方出現 Shumway 的字樣,表示這個 SWF 檔案是用 Shumway 解析的。

另外測試了幾個影音網站,全部都不能動。YouTube 是直接強制用 Flash Plugin:

Vimeo 是黑色畫面:

ニコニコ動画也不會動:

距離 1/21 剩下三個多月了耶,這樣真的不會大爆炸嗎 😮

用 ETag 追蹤使用者

真可以說是道高一尺魔高一丈⋯⋯

警告:以下文長,如果只想知道 ETag 怎麼進行追蹤的,請直接從最後一段讀起。

為了瞭解使用者的行為,投放使用者喜歡的內容或是可能有興趣的廣告,網站會使用各式各樣的方法來紀錄使用者的瀏覽行為。例如 Amazon 會紀錄使用者看過哪些或購買了哪些商品,然後把使用者有可能有興趣的商品顯示出來,希望使用者能繼續在 Amazon 購買。對於廣告聯播網來說,如果能投放使用者喜歡的內容,進而提高點擊率,便能獲得更好的成效,增加收入。但是廣告聯播網並不像 Amazon 這類電子商務網站,強制使用者必須登入才能使用,而且廣告聯播網大多橫跨多個網站(例如很多站都會掛 AdSense),因此一般來說會採用 Third Party Cookies1 紀錄 User 的瀏覽紀錄。

這造成了一個問題:到底是誰可以擁有我們「看過的網站的列表」這個資料?相信沒有人願意讓大家知道自己在看某些害羞的網站吧。但如果這些網站有加入廣告聯播網,廣告聯播網便可以知道你瀏覽過這些網站,於是在其他一般的站台,便有可能出現令人害羞的廣告內容。這造成了隱私洩漏問題。

於是人們採用了各式各樣的反制方法:有的裝了 AdBlock 眼不見為淨,但免費的服務大多數依賴廣告為生,如果大家都排斥廣告,連 Google 都活不下去;有的人提出了一個 DNT (Do Not Track)的宣告,希望網站能夠遵守。不過這實在太理想化了,不知道要何年何月全世界的網站才會支援。

另外,瀏覽器廠商也推出了他們的解決方案,其中一個是「隱私模式」,也就是不紀錄任何的 Cookie,每次重開瀏覽器都需要重新登錄網站。但這對普羅大眾來說實在太麻煩了,因此又有另一個方案:禁止 Third Party Cookie。也就是說,只允許使用者主動連上的網站(例如使用者喜愛的社交網站,部落格,或是影音網站)設定 Cookie,而使用者沒有主動連過去的網站(例如廣告聯播網)則禁止設定 Cookie。這樣就避免廣告聯播網利用 Third Party Cookies 來紀錄使用者瀏覽紀錄了。iOS 上的 Safari 預設是禁止 Third Party Cookies 的2 ,而原本 Firefox 打算也改為預設禁止,不過現在延遲了這個計畫。

看起來,未來使用 Cookie 來追蹤的方法會越來越受到限制,於是有許多替代方案出現,像是利用 Flash,或是 HTML5 的 LocalStorage 等等,但都有一些缺點。今天看到有人提出用 ETag 來追蹤,想了一下發現沒什麼破綻,使用者更難防止追蹤了。

ETag 是用來避免使用者下載已經存在瀏覽器快取裡面的資料,進而加速使用者瀏覽網站速度的功能。大部分的網站並不會常常大改版,於是會有一些 CSS、Javascript、圖片是不常更動的,如果這些資料下載一次後就存在使用者電腦中,下次使用者拜訪網站時,就不需要重新向網站抓取,可以節省頻寬與時間。當瀏覽器第一次下載資料時,網站可以指定檔案的 ETag 值,瀏覽器會記住。下次訪問網站時,瀏覽器會先詢問網站同一個檔案的 ETag 值是否相同,如果一樣就不重新抓取。


ETag 示意圖,取自 http://lucb1e.com/rp/cookielesscookies/

因為瀏覽器會將記住的 ETag 值送回網站,因此網站只要在頁面中插入 1px * 1px 的 GIF,然後針對每個沒有傳 ETag 來的瀏覽器給定一個獨一無二的 ETag 值(並紀錄在資料庫中),下次使用者回訪時,便可以分辨出這個使用者曾經來過這個網站。對於廣告聯播網來說,只需要在每個站台加入這個機制,又可以爽爽紀錄使用者曾經瀏覽過的網站了⋯⋯

Reference: http://lucb1e.com/rp/cookielesscookies/

  1. 可參考 fcamel 的文章: Cookie 雜記 []
  2. 結果 Google 發現 Safari 有 Bug 可以繞開這個限制,也利用了這個 Bug,於是就被告了。 []

Google Reader 將在 2013/7/1 關閉

根據 Google Blog 的公告:A second spring of cleaning,Google Reader 將在 2013/7/1 關閉,官方表示原因是使用人數日漸下降。Google 並沒有給出替代方案。

Feedly 馬上就公告請大家試試看他們的服務,並且放出正在寫 Google Reader 相容 API 的消息。不過現在Feedly 網站 已經屬於癱瘓狀態了。

中國「春運」造成 GitHub 負載升高

中國的「春運」(台灣的春節返鄉)訂票系統 12306 在農曆春節開放訂票時常常會癱瘓無法使用。於是有個傢伙就寫了一個 Browser Plugin 12306.cn 訂票助手 來解決這件事。不過因為他把檢查更新的機制放在 GitHub 的 raw.github.com 上,所以就….XDDD

GitHub 的人開的 Issue 下面一堆中國網友在討論萬一 GFW 把 GitHub 牆了怎麼辦 XDDD

Update: GitHub 果然被牆了

Aaron Swartz 自殺…

這幾天蠻大的一個新聞,連國內媒體都第一時間報導了。(聯合報中央社

Aaron Swartz 除了是 RSS 1.0 規格的共同作者之外,也是 Reddit 的共同創辦人及 Markdown的共同作者之一。

2011 年,Aaron 來因為大量下載了 400 萬篇 JSTOR 的學術期刊而被起訴。可能是造成他憂鬱症與自殺的原因。關於學術期刊這個詭異的 ecosystem,可以讀讀 學者的智慧, 期刊的財產, 圖書館的業績…或是負擔? 這篇文章。

從 Delicious 改用 Pocket

自從入手 Nexus 7 之後,看 RSS Feed 的工具就從電腦改成 Android 平版了。7″ 的大小不會像手機一樣看到眼睛脫窗,也比 iPad 適合在捷運上單手手持。而 NewsRob 的背景同步功能則讓我不用每次出門前按下同步按鈕,只要把 Nexus 7 塞進包包就能出門。

不過,因為 Nexus 7 不支援 3G,如果看完要記下來,就沒辦法直接存到 delicious。用 Google Reader 的星號功能是一個解法,但是沒辦法下 tag。

能夠下 tag 又能離線存取的服務,之前試過 pocket (以前叫做 read it later) 還蠻好用的,因此就選它啦。離線紀錄下來的 URL,在回到有網路的地方時,會自動 sync 回去 Server 中。

pocket 也有提供收錄文章列表的 RSS Feed,預設是需要輸入密碼的,但可以在設定裡面改成公開(不需密碼)。我的 Feed 在 http://getpocket.com/users/jnlin/feed/

Linux 的閏秒問題

根據 Wikipedia 閏秒這個條目,最近一次的閏秒剛好發生在 GMT 2012/6/30 23:59:60,也就是台北時間昨天早上 8:00 左右。結果踩到了 Linux 以及一些軟體的 Bug:

只要重開 OS / App 就可以解決問題。

除了自己 Server/NTP Server 的時間外,其他的時間都不應該相信。

作手機 Client 的人應該常常遇到這種問題:User 因為某些原因(像是常常賴床起不來),把手機的時間調快了 5 分鐘。如果用的又是 OAuth 這類會有 expire 機制的 Protocol,就會遇到認證失敗的問題。

一般的解決方法是,利用一台「時間準確」的 Server,提供正確的時間。可以透過 HTTP Header(可以少一個 request),也可以透過一個 API,例如:http://emma.pixnet.cc/index/now。最近的 Google Authenticator 也有類似的機制。

不過,不只是 Client 會有這樣的問題。雖然 NTP 已經很普遍了,但總是會遇到因為設定錯誤,或是防火牆擋掉,或是 blah blah 等等的原因,導致 Server 時間跑掉的情形。當然,也有可能是軟體 Bug 造成的問題,導致 Server 傳回的時間是錯誤的。

最近就遇到這樣一個好玩的現象:寫 Parser 的時候,會看一下 Server 給的 Last-Modified 的 header 來判斷是否要 invalidate cache,結果發現有的 Server 會回傳未來時間…XD

所以,如果你的 Server 有跟 NTP Server 定期對時的話,應該使用自己 Server 的時間,其他任何外部來的時間都不應該相信,一定要檢查合不合理。