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.」,而三年後的今天,我非常興奮我踏出了改變世界的第一步。

57 thoughts on “Change The World!

  1. 真的很酷,我發現 sikuli 是你寫得後感到很意外。
    因為我才剛從你的網站 copy vim 小抄貼在牆上 XD

    • Sikuli 真的很有意思 ….
      公司同事打算導入來做使用 ….

      但我們遇到的問題是怎麼包裝成執行檔 …..

    • Bug回報XD

      程式開啟後預設的Untitled分頁關掉後,在沒有任何編輯分頁開啟的情況下

      按下拍照就跳不回去了

      手賤的傢伙( ゚д゚)ノ☆( #)д`)對不起…

      作業系統是Linux

  2. hi ,vgod:

    今天我试用了你的sikuli ,它真的很库 但是有一个问题就是

    怎样才能将sikuli的文件打包成exe的东西

    在windows下 点击一个就执行呢 ?

    谢谢

  3. 我喜欢这个文章的标题
    当时我用AutoIt时,觉得非常的强大
    而sikuli的理念,让我更加欣赏作者的想法
    希望能继续加强这门语言,让更多想自己写程序的大众能接触到

  4. 恭喜了。

    不過在台灣知道的人確實還不多..
    可能和twitter的中文使用者較少、沒有收到消息有關吧..

    總而言之,祝福閣下將來能有更大突破

    再次恭喜。

  5. Pingback: MIT推出面向大众的图形脚本语言Sikuli | 大头龙仔Blog

  6. 以用過 AutoIT 的人來說,這真是革命性的改進呀!!
    圖就是比文字好!!

    了不起!! 讚~

  7. Pingback: Tweets that mention Change The World! | vgod’s blog -- Topsy.com

  8. 您好,
    我對您這軟體很好奇,
    看起來原理好像是抓圖之後用影像辨識去比對螢幕上相同的圖案?!
    如果原理是如此
    今天如果在MS上面抓[檔案(F)]這個圖案 在重疊視窗的狀況下
    會不會有按錯程式的問題??? 或是如何避免誤判??

    另外在您下type指令的時候 IP後面下了 t
    這是在做如同 MS 的 tab 換欄位嗎??
    如果是這樣的話
    今天如果是在輸入某個網址 剛好遇到”t” 您如何避免誤判呢??

    感謝您嚕

    • 網址是 /t 吧

      t 應該會出現在目錄路徑中
      例如 c:windwostemp

      Javascript遇到這類的情況都是改寫成 \t
      如: alert(“c:windows\temp”);

    • t是演示用的,因为这里已经不是重点了,关注点太多会引起注意力分散。
      当然实际上最好是一个一个点过去然后输入,这样比较稳定。

      不知道简体字是否看明白否?

    • 感謝解釋

      最後就是關於螢幕上有相同圖示的問題
      不知道用什麼方法來避免呢??

  9. 剛剛收信 看到你的blog 有更新
    上來讀過你的文章

    真的看得很感動很感動
    那股想用自己的專長 為這個世界帶來點大改變的心意真的很棒!!!

    希望你繼續加油 😀

    雖然跟你念的領域差很多
    但是每次看你的blog真的都鼓勵我很多很多!!

  10. 真的太厲害了! 能夠用自己的專長改進這個世界實在很了不起

    雖然我是物理背景的,每次看到你的文章都熱血沸騰!

    你在程式上的熱情不只能激勵跟你同樣領域的軟體工程師

    同樣也能啟發許多不同領域的人們,給他們新的想法與熱情

    加油!!

  11. 我可以請教一個問題嗎?

    請問關於圖像的部分

    有沒有使用到影像辨識?

    還是單純的使用截圖大小比對PIXEL值?

  12. 光看影片就要拍拍手了! 他X的! 我以為AUTOIT已經很了不起! 但要控制電腦點那裡/等待什麼畫面/輸入什麼還是很不方便. (尤其是WEB APP流行的現在), 沒想到更先進的SIKULI完全推翻我的想像! 現在電腦還會用看的!!! 太棒了! 手上的PROJECT終於可以完成了, 謝謝你的發明! 你是天才!!!

  13. 昨天看了oxlab的demo影片後, 也滿腦子在想sikuli的應用…..原來是您的大作, 令人配服, 酷.

  14. Pingback: Sikuli: Amazing scripting language - 不愿游泳的鱼

  15. 很棒的project. 如果能把語法本身也圖象化(或至少在地化), 應該會有更大的影響力.

  16. Sikuli 很有趣,在我看來有點像 microsoft office 的錄製 macro

    如果根據 demo 推斷,
    在跑 Sikuli Script 的時候,應該不可以同時做別的東西吧?

  17. To vgod:

    vgod您好,看你的文章很久了,我本人不是作programmer
    但是很羡慕您能programming,所以斷斷續續有在學。
    可是總是只能寫出”hello the world”
    這種小而無用的東西。

    今天看到您的東西後,覺得總有一天像您這樣的達人可以寫出更多更多
    我們這些門外漢也能懂的東西。

    PS.感動到整晚睡不著。
    Oliver

  18. 的确很赞的东西,其实我发现好的作品都源于生活中或我们程序员的生活中经常碰到的问题,只是别的人只甘于现状不求改变,所以没有去想办法采用更好多方案来解决它,而你做到了这一点,的确是个Change the world的一步。 我以后也要向你学习,努力思考、发现、动手解决碰到的问题!

  19. Pingback: 簡約,但是不簡單──談The Big Pictures與feedly的感動,兼聊iPad – MMDays

  20. Pingback: 三個故事 | 及義小站 Every Day 2

  21. Pingback: Nightmare的胡言亂語

  22. 有了它,以後很多麻煩事都可以無痛完成. put the fun back into computing!(from distrowatch)
    你真的做到了;-)

    第一眼看到就只想到兩樣事情, 遊戲外掛, chickenfoot

    因為若我沒有記錯,好像有個遊戲外掛就是用這種方法寫腳本叫ezscript. 不過就陽春太多, 只是拿顏色點來做.
    sikuli和你之前的chickenfoot概念有異曲同共之妙, 一看就有這種感覺.

    真的急不及待要使用一下. 不知道應用現實環境會是怎樣的光境?製作拾垃圾機械人會像咬一口蘋果一樣容易?

  23. 剛剛試著用windows IDE版本,打開Skype並填入密碼。
    我的媽呀!真的成功了!
    真是感動到想要剉賽!
    這絕對是改變世界的一大步,給你一個大拇指,無可挑剔!

  24. Pingback: 使用 Sikuli 实现同时登录两个 Dropbox 帐户 | Solrex Shuffling

  25. 嗨,我今天是在噗浪上看見sikuli的消息,試用後的結果是…這實在是太神奇了。
    Sikuli的訊息已經在台灣傳開,幾乎是跟你這一篇網誌同一時間的PTT板上已有Sikuli的訊息。
    中文訊息傳遞慢或許是我們都以為這是外國人的作品的關係吧,或許有些英文訊息其實是華人貼上去的也說不定,呵呵。
    恭喜你踏出這一步,這一個改變世界的一步。

  26. 之前在MIT有一面之緣,那時候我記得你說你剛進去沒多久。沒想到時間飛快,你做出這麼厲害的作品….有很被激勵到的感覺>///< 台灣的驕傲啦!

    (我也要加油!朝change the world 邁進!)

  27. 以下的Funcs按鍵精靈應該作不到但是Sikuli可以作。
    Find(PIC);//找出桌面上有哪些元素長這樣。
    Distance(PIC1, PIC2);// 兩個圖topleft點的距離。
    panTo(PIC1, PIC2);//把東西丟資源回收筒
    panTo(Find(PIC1), PIC2);//把長成這樣的東西全部丟資源回收筒
    ListDesktopAppHas(PIC)//把桌面上有哪些執行中的桌面應用程式具有這個PIC的給列出來。

    或許對這個scripting Language來說最好用的OS環境,是一個擴增實境裝置的OS。
    一個擴增實境OS中,當使用者可以從真實環境中抽取出任何可被簡化的意符,或者實體
    空間中就已經散佈許多可被辨識的意符。這些意符背後所代表的Object就可以成為sikuli
    運算的標的。商標、文字、號誌、標記,通通都可以。

    如果sikuli可以支援:
    picIn(): 直譯器跑到這行時會跳出畫面要使用者作一個screenShot
    trigger(PIC, ms, app, callback): 每隔多久開始偵測應用程式畫面上是否有這個元素
    那就可以寫更多具有高度互動的應用了。

  28. Pingback: Use the Sikuli to change the world « 开灰机的黑三

  29. Pingback: Oi! we’re Hacksomeone and we would like to introduce you a great new trick! Gain COD3 Call of duty 3 for nothing

  30. Pingback: Smartphones

  31. Pingback: Auto Blogging Auto Riches Review

  32. Pingback: change the world -百分百好站 -change the world

  33. Pingback: idea 3g trick

  34. Pingback: sikuli使用实例,使用 Sikuli 实现同时登录两个 Dropbox 帐户 – 测试之道

留言給我吧!