三月 19, 2012
» 我為什麼要念博士

一月 30, 2010
» Sikuli帶來的意義與無限的潛力

這禮拜真是我人生中最瘋狂的一天了..。

自從Sikuli發表後,我本來還打算一封封回覆所有的問題,後來發現排山倒海而來的郵件和留言速度遠大過我能閱讀和回覆的量。前幾天我優先把Sikuli比較大的bug和一些平台問題修掉,昨天釋出了0.9.7讓各平台都提升到同樣的版本(只剩Linux還是沒有抓圖的快捷鍵了),整體運行的速度也提昇了不少,並且新增了一個.skl格式讓人能透過command line或double-click直接執行script。如果之前下載過舊版的朋友強烈建議升級到0.9.7。

修完緊急的bug後,我們會再陸續補上一些文件和教學,說明一些常見的問題要怎麼解決。例如說,畫面上有多個一樣的元件(像check box, radio button)要怎麼處理如果按特殊鍵或是在不同的鍵盤排列上使用(用dvorak的人還真不少,一堆人跟我說type()在dvorak上會有問題)..。

但這篇文章中我想談的不是被上萬人盯著的壓力,而是關於Sikuli能帶來的改變,以及未來的潛力。

有些人說Sikuli看起來只是另一個按鍵精靈或是AutoHotkey,但其實Sikuli還有許多在這個直觀意義之上的潛力我們沒直接說出來。

第一,Sikuli最重要的革命是程式碼的可讀性(readability)和易用性(usability)。把螢幕截圖直接放在程式碼裡面,讓人能直接「看到」他想控制的東西,這是從來沒人想過的事情。以往的方法,不管是透過應用程式自己的程式介面(API)或是透過XPath拿到網頁裡的某個元件,都是只有程式設計師才能寫、才能讀懂的神秘外星語言。機器喜歡精確的語言,人類花越多力氣把事情描述的越清楚,機器就越容易讀懂。

可是,有沒有人想過,人類發明這麼多程式語言來操控電腦,究竟是便利了人類還是便利了電腦?現在我們每天用的程式語言,不管是C++、Java、C#、Python、Javascript..都是只有程式設計師才能寫才能讀的語言。更諷刺的是,這些「現代」語言跟五十年前就有的LISP、Fortran本質上並沒有什麼不同,一樣都是純文字,一樣要求精確嚴謹的語法,一樣是架在百層高塔的系統架構上。即使是訓練有素的程式設計師,要寫程式做些有用的事情也都得先翻翻充滿黑話的說明文件,看看需要的功能對應到什麼函式,運氣不好可能還得學個COM+之類的鬼東西才能使用。

如同我在追求神乎其技的程式設計之道(十):程式設計師的生產力之謎中提過的一樣,即使同為程式設計師,運用電腦的效率依然會有數十倍甚至百倍的差距。如果每天都要按一百個按鈕,程式設計師可以找到適合的命令列工具使用,或是自己寫程式呼叫應用程式提供的函式,就可以用一個按鍵取代這一百個按鈕。那完全不懂程式的一般使用者呢?恐怕只能兩手一攤任由別人寫好的軟體擺佈。也就是說,即使一個人掌控了鍵盤和滑鼠,但實際上卻是被別人的軟體限制住,如此使用電腦其實完全沒有自由可言。

Sikuli的革命把寫程式的門檻降低了,人們和系統或應用程式溝通不再需要讀用黑話寫的文件,也不用搞懂底層的架構是怎麼做的,只要把平常使用鍵盤滑鼠的方式,再加上想控制目標的螢幕截圖,就可以輕易寫成能自動執行的程式。

Sikuli Script範例

除了好寫外,任何人看程式和圖都能很容易讀懂程式到底做了什麼事,於是Sikuli很自然就能成為一種寫教學文件的最佳媒介。以往的教學文件常常step by step列出使用者要做的事,加上使用者應該要看到的畫面,很巧的是這兩者Sikuli script都有。但比傳統的文字描述更好的是,只要把Sikuli的指令混用在文件中,或是透過簡單的對應把文字描述轉成script,這樣一份文件不只人能看懂,連電腦都能執行這些步驟並且一步步告訴你要按的按鈕在哪裡。

第二,除了直觀上的GUI自動化外,其實Sikuli更重要的意義是提供了一種把使用者操作UI的互動過程記錄下來的新方法。以程式設計師的黑話來說,這可以說是GUI操作過程的serialization,如果用一般人的方法說,這就是把人機互動過程「數位化」的一種方法。

電腦發展的過程中,一條必經之路就是把人類周遭的一切資訊全部數位化。一旦資訊被數位化,就可以輕易儲存在電腦裡,或是透過網路分享給別人,電腦科學家也才能發展更多方法來處理、分析、運用這些資料。在21世紀的今天,人們把聲音、影像、文字全都數位化了,所以我們可以輕易的複製、傳播、使用這些資訊。但在人們如此依賴電腦的今天,人和電腦的互動過程其實一直沒有一個好方法可以記錄,所以更別提要複製或是分享這種互動過程。

而Sikuli在這個人機互動領域開了一條全新的道路,這也是為什麼Sikuli的論文是出現在「User Interface Software and Technology」的會議上,而不是在討論程式語言的會議上。

人機互動的過程一旦能被一個標準的方法記錄下來,接著就能複製,就能分享,就能讓電腦自動執行或是演算這些過程。未來的應用方式有千百種,唯一的限制只是看我們的想像力而已。

第三,Sikuli把電腦視覺的研究領域,從真實世界延伸到電腦的桌面上。這點說起來真是很有趣,電腦視覺的研究人員數十年來嘗試想讓電腦能像人一樣「看」這個「真實世界」,可以像人一樣認得別人的臉,或是認得馬路長什麼樣才能讓電腦自動開車,但卻沒什麼人想到讓電腦「看」電腦自己輸出的畫面。在技術上來說,電腦螢幕上的資訊全都是電腦自己產生出來的,沒有光影問題,沒有角度問題,辨識上的難度遠低於真實世界所需的難度。以現在的電腦視覺技術來說,辨識螢幕上的東西簡直可以說是殺雞用牛刀。

Sikuli把電腦視覺和人機介面兩個研究領域打通了,有很多古老的問題(例如OCR,文字辨識)在真實世界很難解決,但在電腦桌面上卻可能可以發展出又快又準確的方法。Sikuli也可能激發更多人把電腦視覺應用到軟體介面上的創意,讓使用者介面不只是簡單使用,也能讓每個人能真正隨心所欲的操控電腦。

第四,建立在Java平台上並且open source的Sikuli,很有潛力能讓每個人都能打造給自己的專屬程式。

Sikuli不只是提供了一堆自動按滑鼠和按鍵的指令集而已,每一個Sikuli script都是一個和Python語法相容的程式。這意味著你可以使用任何的Python語法,不管是迴圈、if、定義function、或是定義class,每一個Sikuli script都是一個真正的Python程式(嚴格來說,應該是Jython,但這中間的差別並不太重要)。除此之外,Sikuli核心是跑在Java平台上,所以可以輕易的使用任何Java的函式庫。例如說,你可以用swing建立一個新的視窗包含了兩個按鈕,按下第一個就用Sikuli執行每天上班前的例行工作,而按下第二個紐則執行下班前的例行工作。會寫程式的人可以輕易混用Sikuli和現有的函式庫,把Sikuli當成和系統或其他應用程式溝通的媒介,並在上層建立自己的新介面。也就是說,這就是桌面環境的mashup,可能的應用是無限大。

雖然不懂程式設計的人,難以撰寫複雜的GUI程式或是資料處理。但Sikuli結合了現有的平台並且open source,這樣的好處是會有來自世界各地有閒有能力的人幫忙讓Sikuli變得更簡單更好用,並結合其他的程式語言或是函式庫讓寫程式的整體門檻大大降低。

雖說Sikuli現在還不是那麼完美,但我相信open source會加快Sikuli的發展,讓更多有興趣的人進來幫忙。很多技術上的問題其實都好解決,例如有人問到是不是桌面換個skin後script就廢了,或是能不能在背景執行script。這些問題其實都有好幾種可能的答案可以解決,只是有沒有必要現在就做而已。技術問題向來都不是能阻擋我的絆腳石,真正困難的只有突破自身創意和想像力的界線而已。

每個人使用電腦的方法都不同,軟體公司設計的軟體也只能按照大部分使用者的需求和習慣所設計。但不論有多少功能,總是不可能涵蓋到每個人的大大小小需求。讓每個人都能寫程式(不論他們是不是知道他們正在寫程式)是我一心嚮往的目標之一,或者說是我希望每個人都能100%按照自己的意願花最少力氣完成最多工作。但在今天的電腦環境上,不會寫程式就有太多事都無法做到,即使會寫程式的人,也不見得願意花那麼多力氣去研究讓自己未來更省力的方法。

這個問題的癥結不在於使用的人太懶惰或是不夠聰明,而是電腦太難用。一個人得經歷幾年的訓練才能熟悉這種用程式「掌控」電腦的感覺,實在太不合理。或許沒有人想研究讓寫程式變得更簡單是因為怕丟了自己的飯碗,但我偏偏就覺得每個人應該要有聰明使用自己工具的自由,而不是反過來被工具限制了自己。所以,我希望Sikuli能讓更多人把使用電腦的自由搶回自己手中,而不是被軟體工程師們掐住脖子動彈不得。

寫到最後,能參與Sikuli這個project其實最需要感謝的人是和我合作的Tom Yeh,在我進MIT前他就在跟我老闆Rob Miller討論用螢幕截圖來搜尋文件的可能性,所以其實在我還在當兵時我們就已經搭上線開始合作了。後來我到了MIT後,一連串的討論就激發出許許多多混合螢幕截圖和電腦視覺所產生的點子,其中第一個成果就是現在的Sikuli。

Sikuli Script只是這一串研究的開端和基石,在這之上其實我們還做了很多東西。例如說我們已經有一個能錄製螢幕和使用者動作的程式,可以把使用者的動作自動轉換成Sikuli Script,也就是說使用者一行程式都不用寫,只要把想做的步驟做一次,程式碼和螢幕截圖就會自動產生出來讓你修改或直接使用。用這個錄製程式,我們可以輕易的在現有的GUI系統上觀看全系統的操作歷史,甚至是自動redo某一部分操作。有這些系統做基礎,我們能做的事情實在太多了,我只怕自己時間和能力有限,沒辦法把所有的點子都做出來。所以,這也是我們把Sikuli公開的目的,希望開放這塊寶石後,能有更多人發揮想像力發明出更有趣更有用的東西來,並徹底打破現今使用電腦的方法,一起來改變世界吧!


一月 25, 2010
» Change The World!

之前一直沒機會跟大家分享我在MIT到底在做什麼研究,但拜登上MIT首頁的一篇報導「Picture-driven computing」所賜,我這兩年的project Sikuli像原子彈爆炸一般透過slashdot和twitter以不可思議的速度擴散開來。而這幾天,剛好碰上學校每年都會舉辦的滑雪三天三夜旅行,我照著計劃坐上遊覽車到四小時車程外的緬因州滑雪。第一天晚上到旅館發現沒網路可用,只好早早上床睡覺養足隔天的精神。到了隔天中午,在雪場的餐廳吃午飯時,我想說該來試試有沒有網路用,於是拿出ipod touch連上網後,沒想到迎面而來的是近百封關心sikuli的郵件。在震驚之餘,我還沒意會過來到底發生什麼事了,直到我看到一封來自跟我同實驗室的學長Michael發給實驗室所有人的信,標題寫著:「Sikuli on Slashdot!」,接著我才意識到:啊!原來是遭到slashdot effect攻擊了!(slashdot是全世界關心科技、網路、電腦技術的人幾乎必看的網站,只要某個網站一被登上slashdot,馬上就會遭到來自世界各地數以千計的閱覽攻擊,其效果等同於分散式阻斷服務(DDoS)攻擊,而這現象就被稱為slashdot effect。我以前都以為只有網站會有突然出現的巨大流量,沒想到連我的信箱也會…)

在這件事情之前,我從沒體驗過媒體和網路的力量可以有多麼驚人。從MIT News發出的一篇報導,隔天被轉載到一小部分科技、技術網站,並且在twitter上開始有人開始口耳相傳這個新玩意。再過一天,有人把這消息推上了Slashdot: MIT Offers Picture-Centric Programming To the Masses With Sikuli,很快的sikuli這名字開始傳遍世界。我在twitter上搜尋了sikuli,想看看人們都說些什麼,結果看到由各種不同語言寫的tweet不斷湧出,就在我還沒看完一頁時又冒出 「xx more tweets since you started searching」 的訊息。搜尋出來的tweets除了絕對多數的英文外,也看到很多俄文、法文、日文,反倒是中文的消息最少,實在讓我有點哭笑不得。(關於訊息的傳播,我也透過這次的事件觀察到不同國家對同一事件反應的一些有趣現象,以後再另寫新文跟大家分享。)

人在偏僻的山中滑雪,突然看到這麼多人們在討論著我的project,還有信箱裡塞滿各種關於sikuli的問題,讓我興奮得不得了。當時我的心情其實完全顧不得滑雪了,但難得的旅行還抱著電腦一直坐在餐廳裡實在也有點可惜,只好趁著有網路時把每封信大略瀏覽一下,下午就趁著坐纜車上山的空檔想想怎麼回覆這些郵件。

太陽下山後,我終於按奈不住卸下裝備就拿著電腦回到餐廳裡繼續連上網,結果又是更多的郵件湧入、更多的tweets、更多的衝擊。而當初把sikuli open source的決定,也讓我接到來自世界各地開發人員的意見和回饋,有人在一天內幫我把Linux上還沒實作的幾個功能寫完並送了patch給我,也有人為了在它的64-bit Windows上執行而直接hack了沒有原始碼的二進位EXE wrapper。除了寫程式的人外,有專業的user experience designer願意加入,也有人志願幫忙移植到Linux的工作。看著這些不知道什麼時候才能回完的信,我突然發現,我似乎真的做了一件不得了的事….。

在MIT裡其實常常能看到許多很驚人的點子,但可惜的是即使在MIT,大部分的東西也都停留在為研究而做的雛形階段,研究人員雖然產出了論文,但如果沒有對的人讀到那些文章,很多好點子也不過是停留在紙上變成可回收的資源而已。

Sikuli的論文其實在去年九月就在ACM關於user interface中最頂尖的會議UIST上發表了,在當時還拿了Best Student Paper Award,但為什麼一直到今天才突然爆發開來變成人們口中「革命性的新發明」呢?

說起來這還是得感謝MIT有自己的News office,一個記者剛好問了我老闆最近有沒有什麼有趣的研究,於是sikuli這個字就從這篇報導散播開來。但除此之外,我也蠻慶幸之前自己決定要把sikuli release出去,而且老闆也很支持我這麼做,整學期都沒問我「研究」上的進度。(把程式release跟研究本身沒什麼關係,有些教授對這些研究結果的實作是否能實用也不太關心,甚至覺得做這些事是浪費時間。)

其實一般人可能很難想像,要把一個研究用的雛型打磨到能夠公開讓任何人用的程度,所花費的力氣可是遠超過寫出最重要的核心功能。我花了幾個星期研究怎麼把Java程式包成Mac上的.app,研究怎麼把.sikuli變成能夠點兩下就打開的document package,怎麼把sikuli會用到的一大包dynamic libs包進.app中讓使用者不用安裝其他的相依函式庫…。搞定Mac後,我又花了一陣子把Sikuli移植到Windows上,雖然上層是Java寫的很好解決,但有部分程式碼是透過JNI連結到C++呼叫OS提供的API才能完成的。因為我一直都用Mac開發,所以這些東西本來都只有寫Mac版的,但為了要真正讓多數人能用這個軟體,只好跟老闆要了一台PC裝上Windows來完成這些相依平台的程式碼。Windows並不是我熟悉的平台,除了國中時玩過VB外,之後就幾乎沒在Windows上寫過什麼程式了。所以為了搞定Windows的移植,除了得速成學會一些Windows API外,還得搞定DLL+EXE的包裝,最後再包成installer讓人能一路按Next就裝完整個軟體。雖然這些事情我都是第一次做,但還好沒遇到太多困難,即使每個禮拜都要花兩三天寫Distributed Algorithms的作業,剩下的時間也剛好夠我處理完這些瑣碎的工作。

完成Mac和Windows初步的包裝後,我也一邊開始做網站、API文件,也請跟我合作的Tom一起寫了一些教學文章,順便讓實驗室的同學們當一下測試的白老鼠。因為周圍沒什麼人用Linux desktop(真是有點出乎意料?),所以Linux版就暫時被我擱著沒動。
後來大家都去放聖誕假期時,我趁著空閒做了一個demo的影片放到youtube上,但因為我也還不急著釋出public beta,所以也沒跟其他人說我做了這個影片。

就在MIT News來採訪的前幾天,0xlab剛好有幾個人突然寫信問我有沒有Linux版的sikuli。雖然不知道他們怎麼發現的,但看到有人想用我也就有了勁想把Linux版趕快完成。花了一天在我新要來的PC上裝好ubuntu後(還包含一個小時在搞定這台電腦的無線網卡driver…。沒想到到了2010年我竟然還在做這種事情…),再修一修Makefile後就包了一個功能不全的Linux版放到網站上。

有句話說「機會是留給準備好的人」。當sikuli被公諸於世的時候,之前做好的事情就突然就派上了用場。MIT News促成了這個好機會讓sikuli這個很酷的想法脫離UI研究會議的小圈圈,進入世界上有網路的每個角落,這時我之前憑著一股熱血就自顧自的作了這麼多的雜事,突然都有了它的意義。於是,在機會到來時,demo的影片加上能下載試用的軟體讓人們親眼看到並且能把玩這個革命性的點子,結果就讓twitter上充滿了一大片的「holy crap this is awesome! http://sikuli.csail.mit.edu」。

我一直夢想著要做些不一樣的事情來改變世界,徹底發揮我的長處做出能夠對世界產生巨大影響力的東西。還記得三年前我在申請MIT時,在SOP上大膽的寫了我的目標「I believe that programming environments should be smarter and more intuitive, and it is my goal to reinvent one that allows beginners to learn easily and adepts to be more productive.」,而三年後的今天,我非常興奮我踏出了改變世界的第一步。


七月 6, 2009
» Web上的萬能瑞士刀: Chickenfoot

喜歡用UNIX的人大都知道UNIX會是一個天然且高效率的工作平台不是沒有原因的,純文字的程式輸出入、輕巧又強大的shell、還有適合各種場合的script語言(像是Perl、Python等等)可以把許多小程式非常快速的結合起來完成許多複雜的工作。

但自從web開始蓬勃發展後,越來越多程式和系統開始移到web上。在剛開始的web 1.0時代,大部分網頁都是提供資料的靜態網頁,當時web app也都是用簡單的GET、POST參數接收資料後再到server side做處理。因為網頁是純文字的HTML寫的,所以在這個時代還有一些人會用scripting語言(像是Perl + WWW::Mechanize)來做網頁的自動化處理。但寫過這種程式的人都知道,要parse HTML並不是很容易的事,因為大部分HTML都沒照標準寫,於是只能用regular expression硬來,但無論如何都沒辦法應付一個最大的問題:只要人家的網頁一更新,script當場就變殘廢…。

到了web 2.0時代,問題變得更嚴重,因為web app不再是單純的server side程式;許多網站大量依賴在browser裡面執行的javascript,只是抓網頁回來而不執行javascript往往無法得到browser裡看到的網頁內容。

所幸我來MIT後發現我們group開發的一個超棒工具Chickenfoot,不但讓使用者能用很簡單的指令做到網頁自動化,它甚至還像是一個架在browser上的萬能shell scripting平台,可以輕易把不同網站的內容和功能連結在一起(就像UNIX shell的pipe一樣!)。

Chickenfoot是一個Firefox的extension,可以讓人在Firefox上寫script全自動操作網頁或是修改網頁的內容。Chickenfoot乍看之下很像另一個能讓人在client端另外插入javascript的Greasemonkey,但實際上Chickenfoot更像一個外掛在browser上的快速scripting平台。

Greasemonkey的目標使用者是會寫Javascript程式的網頁開發者,也因此它的進入門檻很高,如果是不會看HTML原始碼、不了解DOM或XPATH、不會寫Javascript的一般人是沒辦法用的。另外, Greasemonkey主要的功能偏重在單一網頁的客制化上,沒有針對網頁自動化做的設計,也很難做跨網頁的自動化操作。

相反地,Chickenfoot的設計是截然不同的方向:1. 使用者不需要看HTML原始碼,只要看網頁的畫面就能用關鍵字來鎖定畫面上的元件,並用簡單的指令(例如自動按按鈕的click、自動輸入文字的enter、自動選擇checkbox的check..等等)自動操作網頁;2. Chickenfoot是獨立於任何網頁之外的平台,可以輕易做到跨網頁的自動化操作,甚至可以從網頁中提取想要的資料,並帶到其他網頁中使用。3. Chickenfoot是browser的一部分,所以只要在browser中能看到的頁面就能自動操作,不用處理認證或cookie問題。

除了網頁的自動化和客製化外,Chickenfoot還有個很有趣的功能:可以把任何Chickenfoot script包裝成獨立的Firefox extension。也就是說,如果要把script分享給他人不需要請其他人事先安裝Chickenfoot,而是直接把「你的」extension給別人安裝就可以了。

我不打算寫詳細的tutorial,我建議可以從實例來學習,例如Google Icon Search就是一個很好的例子,包含了網頁內容的修改、跨網頁的自動化、還有基本命令的使用。最近釋出的Chickenfoot 1.0.5已經支援Firefox 3.5,並且也修正了中文網頁的支援問題,在中文網頁上也能正確執行。

另外附帶一提,我覺得Chickenfoot中有個很好用的小技巧,但在文件上其實不太容易找到XD 在Chickenfoot的script editor中寫script時,每寫一行就可以按ctrl-enter來執行「一行」指令。用這種方式就可以很容易一邊寫script,一邊測試並觀看每一行指令的結果,而不用一次寫一大堆後再一起測試。

有興趣更深入了解Chickenfoot的人可以參考官方網站上的Quick Start GuideExamples,或是直接看看paper: Michael Bolin, Matthew Webber, Philip Rha, Tom Wilson, and Robert C. Miller. “Automation and Customization of Rendered Web Pages”

六月 26, 2009
» 傳奇人物就在我身邊

今天老闆突然寄來一個youtube video給大家,影片內容是1988年世界上第一隻Internet worm: Morris worm出現時造成的話題新聞。

Morris worm是網路上出現的第一隻worm,它會利用系統的bug (sendmail、fingerd、rsh)複製自己並散播到其他UNIX主機上。當時這隻worm還被稱為virus,但它的威力比起一般virus又強大許多,因為一般的virus只能在同一台電腦中複製自己感染不同檔案,所以擁有向外擴散能力的Morris worm在當時引起了很大的風暴。

這隻worm當時是從MIT開始擴散的,所以讓很多人認為作者是MIT的學生。但後來發現,作者其實是Cornell的研究生,會選擇從MIT開始散播就是要混淆視聽。據說這隻worm當初被開發出來的目的並不是要造成什麼破壞,而是為了測量Internet的大小,只是程式有點bug,沒想到…就造成了全世界的電腦大癱瘓。因為這隻worm實際上造成了非常大的損失,所以作者也成了美國第一個被以電腦詐欺及濫用法定罪的人。雖然作者遭到定罪,但他仍被視為某種傳奇的英雄人物,因為這隻worm暴露出網路系統的bug可以造成多大的危害,也迫使所有人開始重視網路系統的安全問題。

很有趣的是,這個當初在Cornell企圖利用MIT來混淆視聽的學生,現在竟然是…MIT的教授Robert Morris。從他在MIT的網頁完全看不到這段過去的「傳奇事蹟」,但如果去看他的wikipedia頁面,就會發現整頁幾乎都是在講Morris worm而已XD

我在知道這件事後實在非常驚訝,因為我上個禮拜才因緣際會跟他一起吃了許多頓飯。雖然坐在一起吃了很多次飯,也都沒聽人說起這件事,直到今天迂迴的發現原來他就是Morris worm的作者,才讓我大大吃了一驚。

另外,藉由他的wikipedia page,我還發現他跟Paul Graham是超級好朋友,曾一起開過一家公司Viaweb (後來賣給Yahoo!,成為Yahoo! Store的前身) ,後來還一起發明一個程式語言Arc。(Paul Graham是著名的LISP Hacker,寫過很多LISP的書,還有一本我很喜歡的「駭客與畫家」。)

正覺得世界很小的時候,我又發現更驚人的事情。原來Robert Morris的老爸竟然是美國國家安全局底下的電腦安全中心首席科學家,專長是密碼學,每個UNIX都會有的/etc/passwd裡的加密密碼就是用他寫的crypt library產生的。

把全世界搞得雞飛狗跳的hacker,老爸竟然是國安局的密碼學家,這可以說是….虎父無犬子嗎XD

三月 25, 2009
» 與大師的近距離接觸

Takeo Igarashi是東京大學的教授,兩年前MMDays曾經介紹過他在UI上的一些研究,還稱他為日本的UI之神。在當時我就非常佩服Takeo的發明,他讓使用者可以直覺地用滑鼠畫出3D模型或是自然地操作2D圖片。這些發明共通的特性是使用者不需要面對複雜的選單和按鈕,只要用直覺的滑鼠動作就能做到極為靈巧的操作;而表面上看起來雖然單純,但背後卻有著非常聰明的想法隱藏在裡面。

為什麼我會特別提到他呢?

因為再過兩個禮拜,HCI界中最大的conference CHI 2009即將要在Boston舉辦,會場就在離MIT不遠的地方。雖然少了一次機會可以順便去別的地方玩,但有個好處就是世界各地在這個領域的學生和教授都會自己跑來Boston。

Takeo當然也是CHI的其中一位與會人士,而我們老闆就趁這個機會邀請他來MIT給個演講,除了可以親眼看看他那些超酷的demo外,更棒的是他還會跟我們group的所有人一起吃飯!(當我聽到這消息真是超興奮的,這大概就是那種能跟偶像近距離接觸的感覺吧XD)

提到這件事,就讓我想順便比較一下MIT和台大在辦seminar的差異。MIT CSAIL的研究領域非常廣泛,基本上每個子領域的教授都會自己找該領域的研究人員來給演講,所以我們有AI seminar、HCI seminar、Theory seminar…。這些seminar不強制要求學生參加,每個人挑自己有興趣的去聽就行了。我的老闆負責主辦HCI seminar,大概每一兩個星期就會找個人來演講,這些人來自世界各地,很多都是這領域兩大conference (UIST和CHI)的熟面孔。他們除了來演講外,最有趣的是我們老闆總是會請演講者跟我們整個group的學生一起吃午飯。因此,我們很容易就能認識這領域中的頂尖人物,還可以有很多機會跟不同人討論自己的研究,交換不同的想法。

以前在台大時,資訊系每個星期也都會辦一兩場seminar,邀請國內各地的教授給個演講(很少有國外的講者)。大學生通常不會去聽,而研究生是被要求每個禮拜一定都要出席的(碩二要求少一點,但至少兩個禮拜也得去一次)。雖然台大也有這樣的制度,但其實碩士班過了兩年我也沒機會認識哪個講者,更別提能討論什麼研究了。seminar就只是單純的聽人演講,如果講者演說技巧不好或是對題目不感興趣,就會看到下面一堆人在睡覺或玩自己的電腦。

雖然說MIT不強制要求學生去聽seminar,但有興趣的人都還是自己會去聽。聽眾人數通常也不會很多,可是因為是自己想聽才去參加,所以演講中的互動和討論很頻繁,而且氣氛也很熱絡。有一次還出現很有趣的現象:台下的人問了一個問題把講者考倒了,但台下另一個人馬上就幫他回答了答案,就在講者恍然大悟後,台下兩個人就隔空討論起來了XD

我提到這件事也不是想說台大不好,只是MIT實在有太多台大很難有的優勢,像是MIT鄰近Boston這個被稱為「宇宙中心」(The hub of the Universe)的城市,世界各地的人很容易就會往這跑;再加上MIT的學術聲望和財力,要邀請各地的講者也不是什麼問題。台大雖然是台灣頂尖學府,但台灣距離西方國家太遙遠,很少人會專程想來台灣,再加上台大也沒辦法負擔這種國際旅行的費用(話說,五年五百億都用哪去了?),也難怪國際化只能停留在教授改用英文上課上面了。

十二月 14, 2008
» 我活下來了

book pile

第一學期的「收穫」

在MIT的第一學期終於結束了!!從9月3號開學到這星期期末考和project都結束,也不過是三個月又一星期,中間還放了兩次長假加上兩次莫名其妙的星期一假期(據說是防止學生壓力過大自殺的假日,幾乎每個月都會有一天),但我有種已經過了一整年的感覺。學期結束後,我終於能從地獄爬出來了,說實在的,我現在只想對著天空大叫一整天!

很多人都說MIT是個會徹底毀滅一個人的地方,毀滅你的生活,毀滅你的自信,毀滅你的愛情。經過一學期的摧殘,我很高興我終於撐過去了。而且事後想想其實我也沒有過得多糟,至少我每天都還能睡滿七、八個小時,即使在期末週被兩科考試加project交叉攻擊下,我還是奇蹟般的把他們都一一擊破了。這真是讓我親身體驗到人類在危急時總是會爆發出無限潛能是怎麼回事XD 雖然學期順利結束,但也不知道能不能順利都拿到A。我們的資格考之一是要在指定的四門課都拿到A才行,所以要是沒拿到A我等於是白修了這門課,之後又得再痛苦一次(真是讓人想到就胃痛orz)。

其實來MIT後我才開始學著當個認真上課的好學生。以前台大的課我幾乎都不會想去,仔細想想我六年下來有全勤的課其實…只有兩門課吧。或許會這樣的原因其實是台大的教授教材都做得很好,所以只要寫作業或考試前把投影片看一看,再和同學討論一下,幾乎沒什麼難到自己看會看不懂的東西。但是,在這裡卻完全不是這麼一回事。我這學期修了兩門課,除了中間一個禮拜去加州參加conference外,每堂課都乖乖去上課還乖乖抄筆記(教授們都不太愛用投影片…||),但每次作業出來時看到題目都覺得沒有一題會寫的,搞得我們雖然每天都在寫作業,卻還是要連續寫上一個禮拜才寫得完。

除了修課之外,我們group每天都有個「下午茶時間」,其實也就是研究生都知道的meeting時間。只是我們的下午茶時間比較非正式一點,除了跟研究直接相關的進度報告外,其他就都是在閒聊,整個氣氛都很歡樂,跟傳統式輪流報告paper的meeting完全是兩種極端。我們會聊什麼呢,我們有個大家都可以編輯的google docs,上面寫了每天預計要討論的事項,還列了一大串有趣的話題,只要當天預計的事項都討論完就會拿出來聊。這些有趣的話題包羅萬象,但主要圍繞在人機介面、軟體工程、程式語言、WEB技術上,像是最近從網路上看到的新奇資訊或影片,或是剛發表的Python 3.0多了什麼新鮮的功能,我們也討論設計user interface的心理學,或是人與人之間互動的社交心理學;我們會一起做brainstorming討論各種可能的新點子,也會很nerdy的花半小時研究VGA接頭上的第9支針腳到底有什麼功能(呃,因為當天投影機怪怪的,於是我們就開始研究起它的VGA接頭規格,看能不能把它修好…..)。我們最近甚至還設立了一個blog,會把部份討論的主題分享出來,有興趣的人可以過去看看。

我的老闆也是一個很神奇的人,他是個會在meeting中討論討論就馬上開始coding來驗證的教授。他不但是我第一個看過還會自己寫程式的教授(後來我才知道其實很多MIT的教授都會自己動手,而台灣大部分的教授都進化(?)到只出一張嘴的等級了XD),而且他還是個會堅持漂亮的coding style的人。再加上他研究的興趣和我幾乎是100%相同,讓我不禁覺得能在這裡碰到這麼契合的老闆,應該是我到目前最幸運的一件事了吧 :D

九月 17, 2008
» MIT的豆腐駭客

在MIT可以遇到各種奇奇怪怪的人,有很多是傳說中的大人物,像是發明WWW的Tim Berners-Lee就跟我在同一棟樓裡工作,即使在廁所裡遇到也不是很奇怪的事情。也有很多乍看之下就像一般學生,但認識後其實才發現他的一連串驚人事蹟, 像是跟我一起修Machine Learning和Database的同學Ted,竟然已經寫了好幾本書…。

到目前為止,我認識一個最神奇的人是一個叫Dheera的印度學生。他雖然看起來是個標準的印度人,但他說英文沒有印度口音,更扯的是他竟然會說中文,而且不只是能用中文跟我聊天,連讀寫(簡體)中文都沒問題,甚至還會用拼音輸入法打字。他非常熱愛中國文化和中國食物,他今年暑假就自己一個人跑去北京,一路坐火車到新疆,就這樣在中國自己闖蕩了一個多月。

一個會說中文的印度人已經讓人夠驚訝了,但後來跟他去逛中國超市時,才發現他不但對蔥薑蒜等中國食材瞭若指掌,而且還告訴我他其實還會自己做豆腐!!他說超市賣的豆腐不好吃又貴,所以他都自己做,他甚至還為了豆腐而自己做了製作中需要用到的特殊容器。

除了會做豆腐外,他的房間裡還掛了兩個大大的紅色燈籠。很特別的是,從他的窗外遠遠看會覺得燈籠裡面好像是蠟燭,火光會不定時的些微閃爍,但真正的秘密是:那兩個燈籠裡面是燈泡,可是加上他自己寫的控制晶片讓兩個燈泡有忽明忽暗的效果,一切就是為了讓燈籠裡看起來像是真的有蠟燭一樣!!

我只能說Dheera真是讓我大開眼界,真沒想到MIT除了有很厲害的科學家和工程師外,竟然還有這種會說中文的豆腐駭客…。(我想他上輩子一定是中國人…)

九月 16, 2008
» 地獄生活初體驗

才剛進入開學第三個禮拜,我已經非常深刻體會到哈佛大橋上所指的「地獄」是怎麼回事了….。

我記得以前在台大時,直到期中考前幾天,才會在同學間看出比較緊張的氣氛,大家開始相約去唸書,在師大夜市裡的咖啡店邊聊天邊準備期中考。在台灣考場打滾十幾年,每個人都身經百戰,區區一個期中考期末考也不過是拼個兩三天就能唸完的小考試,根本沒人在怕的。至於其他的作業和project呢,反正大多也只是一兩個晚上的份量,即使習慣拖到最後一天的人,熬個夜也都還是能來得及做完。

在出國前,早就耳聞美國大學課程驚人的份量和紮實的程度,但百聞還是不如一見,親身體驗後才知道這種生活有多可怕…。我這學期只修了兩門課,Machine Learning在星期一、三中午,另一門Database在星期二、四中午。Machine Learning自從上一堂課開始,我就已經開始沒辦法在上課時聽懂教授到底在講什麼,只好趁下一次上課前再自己複習趕快追上進度。本來還以為自己太笨,後來發現其實很多人也都開始沒辦法搞懂上課的內容(你以為MIT每個人都是數學天才嗎,別開玩笑了XD),教授就像開了加速器一樣批哩啪拉的一直狂寫數學式,下課後總覺得自己已經瀕臨精神衰弱邊緣,更慘的是我還是得趕快搞懂上課內容,不然不但作業寫不出來下堂課還會繼續聽不懂,實在沒有比這更悲慘的事了..。

其實也不是沒有更悲慘的事,就在我自認為前幾次上課都還聽得懂的時候,第一次作業就出現了。這作業乍看之下只有三題,可是每一題裡面又分了個四、五個小題,剛拿到時稍微瞄過覺得似乎不會太難,誰知道實際做下去才發現這根本不是一兩個晚上可以寫完的,每一題其實都是以前台大一份作業的份量。就這樣在三倍量的作業轟炸下,昨天的中秋節我就把整天都奉獻給這個作業了,只是讓人覺得更想哭的是,我其實還寫不到一半………。

相較於Machine Learning的地獄,Database只能說是輕鬆愜意。教授上課還蠻有趣的,不但一邊說SQL真是爛到爆,還會一直嘲諷微軟和Oracle等大象公司。(後來才知道這個教授其實就是PostgreSQL的原作者……)。雖然Database上課時挺享受的,但上課前就不太有趣了。因為Database每次都指定了一大堆的論文或課文要在上課前看完,不看又不行,誰也不想在大家都很熱烈討論的課堂上突然被問了問題卻只能回個囧給老師看吧…。

兩門課交錯著上,每天上完課、meeting完(對,我每天都要meeting!!!),不是得趕快複習,不然就得趕快準備下一門課,更糟的是現在還得加上趕作業,因為每個禮拜都會有作業……………Q_Q

除了上課外,我還是領系上薪水的博士生,不用付學費又有錢拿的代價就是我得乖乖跟指導教授作研究寫論文,所以除了應付這兩門課外還得一邊作research project、每天參加meeting、每個禮拜還得報告些東西讓我看起來像有在認真做事的樣子。可是我光兩門課的作業都快搞不定了,哪裡有時間去作研究啊,偏偏指導教授才不管學生修課的死活,反正即使被當掉研究還是得繼續做….。

唉,為什麼,為什麼現在明明才剛進入第三個禮拜,我卻已經有種生不如死的毀滅感呢..Q_Q

這就是所謂的地獄嗎?

八月 28, 2008
» Boston新生活開始!

到美國來也快一個禮拜了,每天從早到晚都排滿行程,到昨天好不容易把重要的to-do list都解決掉,跟國際學生辦公室辦到完畢、拿到學生證、在銀行開好戶頭、學會開支票繳了學費以外的雜費、還辦好了暫時的手機…,現在終於有空閒能靜下來寫寫blog,明明只過了五天,感覺卻像一個月那麼長。

我在Boston旁邊的小城市Cambridge,即將開始漫長的博士班生活。雖然還沒開學,滿滿的orientation(就是新生座談,最近因為陳家公子讓這個詞突然變得廣為人知XD)和welcome party把每天的時間都壓榨得一乾二淨,每天晚上回到宿舍都累得想直接躺上床睡覺就算了,可是這時候看看錶往往才不過六、七點,太陽都還沒下山呢….。

這就是MIT的瘋狂生活序曲。

還沒開學就搞得我人仰馬翻實在是讓人很抓狂,我有天跟我們實驗室的學長講起這件事,說希望開學後可以正常一點,沒想到他竟然說:「這有點困難。MIT是個瘋狂的學校,你很快就會知道了…..」

雖然學校很瘋狂,但Boston還是個很美的城市,夏秋交接之際大概也是這裡天氣最舒服的時候了,現在還有一種置身仙境的感覺。昨天下午有點空閒就沿著哈佛大橋從Cambridge走向Boston,散落在查爾斯河上的帆船配上Boston的天際線,美得好像我走進了畫中的世界一樣。

下面這棟是Stata Center,我未來的系館。我的辦公室在其中的蓋茲大樓(就是微軟那個比爾大叔捐的..)7樓。

哈佛大橋上有以前MIT學生用某人的身高為單位(Smoot)量出來的刻度,橋的中間還寫上了「到地獄的半路上」。從MIT逆向而行看到這個標記,心中想的是:「啊 我從地獄中走出來了,是不是該慶祝一下XD」

七月 15, 2008
» AT&T iPhone 3G電話費原來是可以打折的!

因為再一個月就要去美國了,最近一直在肖想要入手iPhone 3G,就四處注意iPhone的消息。

剛在這邊看到原來AT&T跟很多公司或學校都有合作,電話費是可以打折的!結果就透過Google找到了一個好消息:MIT學生的iPhone電話費可以打9折!(雖然不多,但總比什麼都沒有好)

但同時也看到一個壞消息:AT&T在校園附近的收訊還蠻糟糕的,即使是3G也沒好到哪…………………….!#@*$&!@#$&!@%&!@#($

唉,如果收訊不好,即使是300G又有什麼用啊….。

四月 19, 2008
» 釋放出腦裡的音樂

剛在TED.com看到這個超感人的talk: Playing the music in your head: Tod Machover & Dan Ellsey on TED.com,一定要來跟大家分享一下。

Ted Machover是MIT Media Lab的教授,他主要的研究是在結合科技發明未來的音樂創作方法。他在這個talk中請來了跟他們group長期合作的腦性麻痺患者Dan Ellsey,利用他們發明的新「樂器」,讓不能說話不能走路的Dan釋放出他的音樂天份,讓他也能自由創作自己的音樂。

Dan並沒有因為腦性麻痺而喪失智力或創作力,透過電腦輔助分析他頭的移動軌跡,他一樣能操作作曲軟體,一樣能創作感人的音樂。看了Dan現場的表演,真的很令人感動。科技除了能讓人類生活過得更方便外,更應該幫助人們發掘出每個人的潛能,尤其對於有身心障礙的人們,更應該讓他們能像正常人一樣生活。

Tod的新樂器,真的「就甘心」啊。

三月 29, 2008
» MIT,我來了!

從去年從研究所畢業後,一邊在Google當intern一邊匆匆忙忙考了GRE,又緊接著在七月去還欠國家的一年債(感謝老天現在只剩11個月了),當兵中一邊準備申請學校要的各種書面資料,一邊唸英文準備考TOEFL和GRE (again..orz)。一直忙到12月,把所有資料用UPS寄出去後,才終於鬆了一口氣。

時間快轉到2008年2月14號。我無預警的收到來自MIT的兩封信,其中一封來自一位我很有興趣的教授,標題竟然是「congratulations on admission to MIT」…..。然後,忍不住尖叫起來。

雙手一邊發抖一邊仔細把信看過一次,還確定一下今天不是愚人節,信的來源真的是在美國麻薩諸塞州的麻省理工學院(MIT.edu),而不是台灣的MIT.edu.tw,才真的確定了這個不可思議的admission。

我申請的是MIT EECS的博士班(Ph.D.),雖然他們把電機(EE)和資訊(CS)合成一個系,但實際上CS的學生是獨立在另一個資訊科學及人工智慧實驗室(CSAIL, Computer Science and Artificial Intelligence Lab)工作的。CSAIL是MIT傳說中的AI Lab和LCS(Lab for Computer Science)合併來的。MIT AI Lab是由AI始祖Marvin Minsky和John McCarthy所創立,是AI最早的發源地。另外,hacker這個詞也是在MIT AI Lab被發明的,最典型的hacker始祖Richard Stallman就是在這裡hack了AI Lab的雷射印表機,進而展開他的GNU計畫,發展出了Emacs、GCC等軟體。

MIT是全世界理工學生的夢幻聖地,那裡聚集了無數的天才、諾貝爾獎得主、大師級教授、hacker,三不五時就會有新聞報導MIT又發明了什麼驚世新科技。能得到MIT的入學許可,我也沒什麼好考慮的了,縱使還有其它學校的申請結果還沒出來,我也不等了。謹慎的填好MIT Graduate Admissions Reply Form,練了一個禮拜的英文簽名(以後就都得用英文簽名了,當然得先練好一點),在 “Yes, I plan to attend MIT.” 下面打了勾,決定了我未來數年的去處。

MIT,我來了!

biggo.com.tw

A Django site.