我們失去的 Web

Anil Dash 對過去美好時代的網路有精闢的描述。他舉了很多實際的例子,但主要的幾個關鍵點在此:

  • 過去的使用者產生內容(User-generated content)是可以分享、匯出、共享、指定公眾授權、資料整合與萃取的。現在的 UGC 是被限制在單一平台的「圍牆花園(Walled Garden)」,無法對 Web 的其他平台分享,整合,萃取。
  • 過去的線上身分是由個人網站展現,而不是仰賴某個中心服務。
  • 過去,若有人想要建立某個網路第三方登入系統,那會造成不亞於美國愛國者法案的隱私侵犯爭議。今日此類服務無所不在。

是的,這個 Blog個人網站網址是那個過去時代的遺跡。Dash 對現在的 Web 並不是完全悲觀的,他覺得現在的 Web 相較於當年,變得更普及,跟親近人;現在的大型網站架構更是軟體工程的巨大成就。但是,他認為我們不能忘記 Web 的初衷與核心價值,而現在的社群網站也該給幫助他們成功的媒介更好的關注 … 很不幸的,他們讓整個世代的網路使用者目光變得狹隘,無法理解 Web 體驗能有的更多創新與意義。

But [the social networks] haven’t shown the web itself the respect and care it deserves, as a medium which has enabled them to succeed. And they’ve now narrowed the possibilites of the web for an entire generation of users who don’t realize how much more innovative and meaningful their experience could be.

Dash 覺得,資訊產業作為一個產業,最終鐘擺會在擺向極端之後,擺向另一邊。只是在擺向另一邊時,新的 Web (或是根本不是 Web?)要面對的是超過當年 AOL 用戶數數倍的,習慣於封閉服務的網路使用者。

我個人比較悲觀;在網路中立性那一役時,我曾經聽過一句話:「Web 最後會變成和電視一樣,內容由大型媒體公司單方面提供,由廣告商掌握」。如果一切的趨勢都沒有改變的話,Web 最後的型態只能符合那樣的預言。而我們心目中能夠跨越國界、族群、與語言的新媒體,就要等到更久之後才會實現了。

最後,就跟那篇文章下面的留言說的一樣:沒有經歷過真的很難體驗,寫這個,很難不聽起來像碎念與感懷舊時代的老人 … 我也得承認,拒絕任何改變反而是妨礙創新,但若進步的代價是讓 Web 失去那些價值,成為充滿 filter bubbleecho chamber 與商業掌握的媒體 … 那恭喜大家,我們終於共同發明了,真正的 Smart TV。

Sort things out: code, project, and open source

As a pet project that kind of fit into the end-of-year mood, I spent some of my personal time re-releasing my previous code projects. In this post, I will announce the repositories I created and try to document additional works I did on those projects.

The projects are:

All these repositories are created with original commit history. Battling with git filter-branch is quite challenging but fun. I disassemble the work done in HTML5 Word Cloud in order to achieve maximum re-useability; by re-useability, I am also referring to having the code understandable and fixable by others. I’ve already use the Google OAuth 2 Login in an unannounced project and it works great. My goal is to eventually rewrote HTML5 Word Cloud and have it use the libraries from these individual repositories, with slick, better UIs.

These are the things I learned, and implemented:

Coding style, comments, and variable naming

One of the first thing I learned from working in Mozilla is to express thoughts to people, not computers, through code. In fact, in collaborative project like Mozilla, having people understand your code is way more important than having computers run them effectively. To achieve that, code written should be:

  • Promote shared understanding through unified coding style. Avoid magical syntax that could confuse the reader.
  • Also, promote shared understanding by annotating the work with comments. David Flanagan (Yes, the David) did amazing work in the Gaia code base on this, but sadly we failed to catch up that.
  • No secretive variable names; this is particularly rampant in the wordcloud2.js, and I haven’t been able to fix them all.

Testing and continuous integration

No, I’ve never wrote automatic tests for my projects until this commit. Before that, all the test is done manually by try out the actual product, or on manual test pages.

In WordFreq and Google OAuth 2 Web Client, I (re)wrote QUnit tests for most of the functionalities. The test coverage is not quite there yet, and for Google OAuth 2 library there are no automatic tests in PhantomJS because some tests must be done with a logged-in session.

I’ve also hook up automatic tests of WordFreq to Travis CI. It’s nice to know such service exists that could further reinforce the fork-commit-pull-request contribution cycle on Github. Unfortunately WordFreq fail randomly on the Travis CI testing VM.

Beyond browser context

Javascript does not just live the the browser. With WordFreq, I tried node.js this time. WordFreq is rewritten in a way that it comes with a synchronous interface and a asynchronous interface (powered by Web Workers). With synchronous interface, WordFreq is available as a npm package and is accessible on the command line. node.js is fun, I would love to use it for more stuff and move away from shell scripting. 🙂

Toward a real collaborative open source project

Putting your work on Github is easy, but nurturing that to a solid free software project is hard. You would just need to learn and adopt some software engineering practices besides writing great code, in order to effectively contribute to the free software ecosystems. These are my baby-steps toward that; feedback and contribution welcome!

We are not there yet – Code Rush 雜感

感謝 MozTWIrvin 等人籌辦活動,今天終於有機會坐在電影院好好看完 Code Rush 這部電影。

這部電影是從 1998 年 3 月 31 日,Netscape 釋出 Mozilla 原始碼,建立 Mozilla 自由軟體專案的前幾週開始講起,一路講到最後 Netscape 決定賣給 AOL 的時刻。1998 年,Netscape 在微軟強大的競爭之下,決定以釋出原始碼,建立自由軟體專案的方式奮力一博來維繫自己的影響力,以及作為一家公司的營利命脈。這件事,就我們後來所知,是完全失敗的。Netscape 逃不了售出的命運(雖然換股的價碼很不錯),員工在併購之後各奔東西,微軟成功壟斷瀏覽器市場;作為故事背景的 Mozilla 自由軟體專案,直到 2004 年才以 Firefox 這個產品重新樹立影響力,如鳳凰般從灰燼中重生(Firefox 最早的產品名是 Phoenix)。

在電影院沉浸的感受是強烈的。就我去了幾次的粗淺感受,矽谷的確和 1998 年一樣,是個掏金的地方。辦公室有堆滿點心的廚房、懶骨頭沙發、熔岩燈——程式設計師可以帶著一技之長去大公司(「establishment」)享受看似成功的人生,或是到新創公司充滿夢想,拿股票選擇權,即片中 Jamie Zawinski 所稱的樂透彩票。Milestone 前的風雨欲來,朝向「Zarro Boogs」前進的感覺也是一模一樣的(連 face-palm 也一樣)。片中的 Michael Toy、Jamie Zawinski、Tara Hernandez 等人趕上了 1998 年 3 月 31 日 Milestone,然後再隨著 Netscape 的瓦解往人生下一階段前進。

我喜歡片中 Zawinski 對 Mozilla 自由軟體專案的精準描述。很欣慰的,雖然沒有成功拯救 Netscape,Mozilla 後來的確也重生了,發揮了使命與影響力(順便賞了我一個工作)。但 1998 年與 2012 年的差異真的不大。Mozilla 基金會與公司作為 Mozilla 軟體專案的主要貢獻者,必須在主導專案,維繫 Mozilla 使命的同時保持自己的影響力與金流。Mozilla 抵抗的依然是奉行封閉、獨佔的公司與其軟體生態圈。Zawinski 對網路也有精準的預測:「我們處在一個產業的起點。誰知道這個產業會怎樣發展,搞不好又會變成像電視一樣,被少數公司所掌控,決定我們能看到、聽到什麼,這有太多先例了。」

感謝 OrinX 的聯絡,今天的活動最後有一段 Tara 向參與同好的打招呼影片;她後來加入了 Pixar 動畫,在影片中也和我們展示了他們現在用的一模一樣的工具:Tinderbox、Bugzilla …。她說我們好像真的成功了,「網路已經無所不在 … 想必台灣和美國一樣,走在路上看到的廣告上面一定都有個網址」。但其實我們還沒有成功:現在在路上的廣告出現的並不是網址,而是「請上 Yahoo! 奇摩搜尋『…』」或是「請上 Facebook 『…』粉絲團」,人們偏好的是封閉平台的「體驗」與「安全」,而不是開放與自由。

最後我聽到 Irvin 在活動會場宣傳 Mozilla TaiwanFacebook 粉絲團以及線上 Code Rush 電影院活動,心中覺得相當的諷刺。沒有不敬的意思,這是當下能做把事情做好的方法。但有一天,我希望我們能不用在「對」與「好」之間選擇。

有一天。


如果有興趣的話,可以 clone mozilla-central repository,然後輸入 git log --topo-order --reverse | head,你會得到這個:

commit 781c48087175615674b38b31fcc0aae17f0651b6
Author: ltabb 
Date:   Sat Mar 28 02:44:41 1998 +0000

    Free the lizard

mozilla-central 即 Mozilla 所有程式,包含目前 Firefox 的程式碼的 repository。歷史呀。