為何要選擇自由軟體授權你的 JavaScript 等前端程式碼

昨天和人討論事情又提到所謂「HTML5 的安全問題*」這個老梗,整理一下寫下來:

為何要選擇自由軟體授權你的 JavaScript 等前端程式碼所構成的 client-side web app?

答案對我來說很簡單:

  1. client-side web app 活在瀏覽器上,Javascript 等所有程式碼都是明碼下載下去執行,不會被編譯。
  2. 當然你可以用 compressor 做 obfuscation,但 compressor 再厲害也只能做 dead code removal 和重新命名變數。Beautifier 可以很容易的復原除了變數名稱以外的所有東西。程式的邏輯本身是不會被保護的。
  3. 如果程式是用 GWT 等工具撰寫,前端程式碼也會面臨一樣的問題。
  4. 就算人家看不到,天底下哪有什麼不能用 black box testing 重建的程式?假以時日總會有人山寨出來。
  5. 因為技術上做屏蔽不可行,所以在授權上去標示著作權所有抄襲必究只是防君子不防小人。
  6. 而防君子這件事情一點好處也沒有 … 妨礙了自己的技術被認可的機會,也阻礙整體的技術發展。

所以基於商業方法要做什麼技術考量的話,我的建議是:

  • 程式的主體、架構、流程還是可以放在 client-side。現在有很多很棒的 library/framework 可以幫忙這件事情,像是 jQueryModernizrbackbone.js。尤其別忘了善用 History API。
  • 如果有什麼獨家演算法需要保護的話,請用 server-side script 實作,放在 server 上用 API 的方式提供。但代價是伺服器的 CPU 與流量。
  • client-side 的 API wrapper,甚至是完整的 client 程式本身,都可以用自由軟體授權(像是 MIT License)放出去。理由如前述。
  • 如果你的 server 端服務真的如此獨家又有價值的話,把 JavaScript 包成 API SDK 放出去,反過來增加他的價值。公司甚至可以用 API 用量賺開發者的錢!Google 有許多 API 就是用這種方式提供的,免費提供,超過流量收取費用。

* 其實不算安全問題而是商業方法問題。只是大家都覺得 code 被看光叫做不安全。

Microsoft TechDays 2011:HTML5 應用程式開發簡介

星期四在 Microsoft TechDays 2011 給的演講,介紹使用 HTML5 開發網路應用程式的入門。

TechDays 這個大會比較適合企業 IT 決策人員,多半的議程都在介紹各種解決方案,技術議程算是其次。HTML5 與 Web 技術終於成為 Microsoft 的主要解決方案之一;尤其是星期三的 Build Windows 2011 Keynote 看到 Windows 8 這平台示意圖:

還有 Metro-style App 在 Visual Studio 2011 Preview 竟然跟 PhoneGap 一樣,是標準的 HTML Web App,用 window.Windows.{Storage|...} 來存取 Windows Runtime API,真是令人感慨萬千呀 …(裝老)

總之,Web 最終的程式平台,Web Tech 是真正的跨越所有平台的程式開發模式。你要加入我們嗎?

台灣政府對美三不承諾

六月維基解密丟出來的密文,算是我期待的那種,但是當時在新聞上好像沒有很大的爆點?

Burghardt expressed his appreciation for Ma’s pledge of no surprises in the U.S.-Taiwan bilateral relationship as well as his emphasis on substance over show. He recounted three examples Ma had given him to demonstrate this commitment:

  • Taiwan would not ask for a certain kind of transit just to show that the U.S. would grant it;
  • Taiwan would not ask for certain weapons systems just to show the U.S. would sell them;
  • and Taiwan would not insist on certain names just for domestic political considerations.

(原文)

後面的意思是,台灣目前的執政政府私下向美國承諾:

  • 台灣政府不會為了證明和美國的關係而要求特定形式的(台灣總統出訪在美國國內的)轉機方式;
  • 台灣政府不會為了證明和美國的關係而向美國要求特定武器的軍購;
  • 且台灣政府不會因為國內政治的考量而向美國要求特定的稱呼。

這看起來很糟呀。畢竟看了這麼多年的中台美關係新聞,人人大概都知道,從李登輝總統開始,美國要賣什麼武器給台灣、台灣總統去中南美洲經過美國要怎麼被接待,都是美國行政當局向台灣公開表現姿態的方式。比較遜的總統像陳水扁,就會搞到下不了飛機直接被送到中美洲去;比較厲害的總統像李登輝就可以做到回學校演講,幾乎是「順便」入境美國訪問。第三項稱呼,要說杞人憂天也罷,但是美國政府自從國會制訂台灣關係法,定義台美關係之後,就沒有在對台灣的地位上有任何的正式調整了,如果政府放棄和美國行政當局堅持名稱的話,下次歐巴馬訪問中國的聯合公報會不會出現「Chinese Taipei」?

簡單說,這個密文的意義是,台灣政府把在國際還有空間可以因為美國表達存在感的工具都偷偷封殺掉了。我是不願意像某些網路上的言論去歸咎動機是什麼啦(所謂的「賣台」?);可能只是比較遜的總統、或是在現在的國際形勢(密文以外我們還看不到的那一大部分)我們的外交部已經沒有籌碼可以放了。

唉。

COSCUP 2011 網站手機版

這篇文章是給 Mobile App 比賽的介紹。

COSCUP 2011 網站帶有 Responsive Design 概念的 Media query CSS,在手機上網站會套用手機使用的 CSS 版面:

整個畫面的 CSS 重排;右方的贊助單位 Logo 隱藏,改成隨機顯示贊助單位於標題下方。贊助單位頁面有所有的贊助單位。

議程表格使用 CSS 將 <table> 原有的樣式拿掉。「目前議程」的按鈕可以在大會期間快速跳到目前正在進行的議程:

原本網站展開的議程詳細資訊的顯示方式如下圖:

在 iOS 上,網站可以被加到 Home Screen:

從 Home Screen 啟動會進入全螢幕模式:

結語

COSCUP 2011 網站的設計目標是在同樣的網址,同樣的靜態 HTML 上面在桌面與手機均提供最好的體驗。在手機上,希望能夠用類 Web App 的形式展示手機使用者即時需要的內容。沒有在前端技術上很複雜的去做議程篩選、離線瀏覽等等,不過那些都是 Web App 的潛能。使用 Web App 的形式也能實現真正的跨平台——只要有瀏覽器的手機皆能執行操作。

希望大家會喜歡。

最後,感謝 COSCUP 2011 網站組團隊的協助,尤其是魏藥在後端內容管理上的開發。

來源請求.js

很早以前就想講了,但講了大概又會被戰。相較於英文維基百科,中文維基百科在社會和歷史條目充滿了 systemic bias。但是那些主觀論述又不是編輯者有意加進去的,而是某種編輯者存在的社會所給予的暗示(Inception?)與集體共識,而不是原本百科全書應該有的可驗證的事實。因為是暗示又是共識,所以有自覺的百科編輯者反而是少數;中文維基只好長成現在這個樣子了。

總之我昨天還是在噗浪上提了,還被協會的人看到 XD。想想作為一位 Web Developer,我還是用寫 code 的方式來貢獻維基百科好了,別花時間跟別人吵架好。

所以,來源請求.js到底是幹嘛的呢?這是一個可以安裝到 Wikipedia 帳號的 User Script,安裝之後,每次在文章裡面選一段文字,旁邊就會出現 [citation needed] 按鈕,按下去確認之後就會自動編輯文章,加上「[來源請求]」的標記。

安裝方法是,登入之後到 Special:MyPage/common.js 頁面,編輯插入下列程式碼:


importScriptURI(
    'https://raw.github.com/timdream/citationNeeded.js/master/citationNeeded.min.js?'
    + Math.floor((new Date()).getTime()/1000/60/60/24).toString(16)
);

安裝之後,下次在維基百科上看到有什麼需要引用來源的資料,只要選起來,按游標旁邊的按鈕,「來源請求」標記就會自動被加上去。

至於維基百科何時能夠解決這個問題呢?我想等到「抗日戰爭」這個條目的名稱被改掉那天之後才有可能吧。噗浪上大家的 comment 值得一讀。

Wikipedian Protester

(via xkcd)

還有,這個 script 只花我 1 小時查資料跟寫功能,但是又花 1 小時完善 UI,2 小時寫文件(含這篇)。是有沒有這麼閒 orz