簡單

簡單的法則(The Laws of Simplicity)前幾天買了John Maeda的新書:簡單的法則(The Laws of Simplicity)。John Maeda是MIT Media Lab的教授,我久仰他的大名,他的另一本書Creative Code: Aesthetics + Computation也讓我很感興趣,可惜在台灣似乎不太容易買到。在資訊系待了快六年了,寫了很多程式,看過很多研究,也幫學弟妹上過許多課,對於"簡單"這件事也有點感悟。以寫程式為例,還記得小時候初學程式時,因為對程式語言本身不熟悉,很多指令和語法都不是很確定適當的寫法。東學一點,西學一點,所以寫出來的程式碼總是混雜不同風格和邏輯,也就是一團混亂。剛學C語言時,我甚至對於什麼時候要加分號這件事都感到很困惑。後來程式寫多了,對於電腦底層(OS, compiler, programming language)的了解也更為深刻。了解了OS如何多工執行程式及分配記憶體,compiler怎麼分析處理程式碼之後,突然就發現這些看似複雜的東西其實背後都是用簡單的規則串連在一起的。這時有了精練的能力,精確知道什麼是必要的,什麼其實並不重要。運用這種能力,看穿複雜背後的本質,就能用簡單的程式描述複雜的事物。我常看別人寫的程式,初學者和大師的程式碼很容易分辨。初學者的特徵是重複、雜亂、思緒跳躍、用表面的規則來描述複雜的現象,大師的特徵是簡單、一致、有一定的秩序、直接用簡單的規則描述背後的本質。簡單的東西不但容易了解,而且也很美麗。可是這不是件容易做到的事。沒有深厚的基礎知識,很難看透複雜背後的簡單規則。近幾年流行的Design Patterns就是依靠這種深厚的功力所濃縮精練出來的簡單規則,而John Maeda提出的The Laws of Simplicity也是同樣的道理。只是,對於初學者來說,直接學習這些經由前人精練出來的簡單法則,並不能帶給他們相當於大師腦袋中的數十年功力。我還記得我在大一時看過Design Patterns,那時並沒有得到什麼感動,只是記了一些的規則(也就是pattern),但並不了解要怎麼運用。後來陸續寫了幾個較大的系統,慢慢發現要做出一定規模以上的複雜系統,必須先清楚的了解它,再適當分解萃取成許多較簡單的小塊(module/class),才能做明確的分工,也才能輕易的讓別人了解。到這時我才體會到Design Patterns是什麼,也才能對它裡面所蘊藏的智慧結晶感到驚嘆與感動,在台大資訊系有一門課叫做資訊系統原理,這門課教的是在分析及設計物件導向系統所用的UML。奇怪的是,這門課被排在大一下學期。小大一們才剛學完C語言,寫過的最大程式大概只有100行,在這個時候學設計大型系統才需要的UML會如何?根據我觀察身旁的同學,幾乎沒人記得大一的這門課在幹什麼。大多數人在大三才會有需求實做較大的程式,因為我們也沒正式教過物件導向的設計和分析,所以很多人根本不會去用UML,更別提記得它在幹麼。於是我在一門需要實做上千行程式的課裡發現竟然有不少人把所有程式碼都放在一個.cpp裡面....。就此看來,想要掌握簡單的法則似乎沒有捷徑。一定得親身經驗過什麼是複雜,才能從中體會簡單的美。閱讀全文

AppleTV能跑全功能的Mac OS X了!

根據AppleTV Hacks的文章,已經有人研究出來怎麼hack AppleTV,讓一般的Mac OS X能在上面執行了。也就是說,以後可以花美金$299買AppleTV來接上客廳的40吋大螢幕(現在好像沒有50吋不能叫大螢幕了)當一台便宜的Mac用...。雖然AppleTV的硬體不怎麼樣(1Ghz的Intel CPU,256MB RAM),但如果只是要拿來看影片(只要能跑MacOSX,就甚麼格式都能看囉)上上網倒是綽綽有餘。閱讀全文

Adobe Apollo alpha released

Adobe Apollo已經開放alpha版的SDK和runtime平台可以下載了。Apollo是我還蠻看好的一個新平台。最特別的地方是他讓習慣開發Web application的人,能用熟悉的方式,也就是HTML, CSS, Javascript, Flash, Flex來開發Desktop application。其實相反的事情,也就是用Desktop app的開發方法來做Web app,Microsoft已經做很久了。只是MS把東西都綁在自己的系統下,實在一點都不想讓人去嘗試。Apollo會支援Windows, MacOSX, Linux,而且SDK和runtime也全都是免費的,更棒的是底層的HTML Engine是用open source的Webkit(就是Safari用的那個)。加上現在Adobe把Flash/Flex的技術也吃進去了,Apollo的未來真是一面看好。至於實際上會如何,就一起走著瞧吧XD閱讀全文

用Macbook內建的iSight攝影機快速建立網路書櫃

從很久以前,我就一直很想要跟大家分享我有些甚麼書,在看些甚麼書,所以我就寫了Now Reading TW的Wordpress plugin。在這之前,我聽說過大陸有個豆瓣,可以把自己的書/CD/DVD在網路上分享給別人,利用這些媒體來認識一些興趣相近的人,甚至可以用這個平台來做二手交易。最近有個Delicious Library我之前看過的就是這個得了好幾個大獎的軟體(Mac onlyXD)。它主打的功能就是利用iSight做條碼掃描。經過實際測試,它的掃描速度和成功率都是最高的。唯一可惜的,這不是免費軟體,不花錢使用最多只能放25本書。但是......有個方法可以突破這個限制,待會再來說 XD
  • Bruji Barcode scanner這是Bruji的一個類似Delicious Library的軟體Bookpedia所用的Barcode scanner原始碼。(沒錯,這裡只有原始碼,想用的人得自己用Xcode編譯...)我也測試過這個程式,因為有原始碼的關係,我可以直接調整裡面的參數。但即使經過調整,仍不如Delicious Library好用,大部份的書都得在鏡頭前晃上好一段時間才能偵測到。如果熟悉Image processing和圖形辨識的人,有這個程式可以直接拿來改是件還不錯的事。
  • Barcodepedia的webcam barcode scannerBarcodepedia是個線上的barcode資料庫,也提供一個flash程式,可以用任何webcam來掃描條碼,所以只要能跑flash的平台都能使用。但是,我用這個東西掃半天都掃不到我的書,後來就放棄了...XD
  • 比較過上面三個軟體條碼掃描器後,最適合直接拿來實際運用的其實只有Delicious Library,但翩翩它有個討厭的25本書限制。而Flash寫的掃描器,我倒是覺得aNobii這類的網路收藏庫應該都要內建一個(當然得寫的好用一點,我相信技術上並不是問題)。現在有webcam的人很多(即使要買一個也比買真正的條碼掃描器來得實用),如果能直接在網站上支援條碼掃描,一定會成為blogger間的下一個話題 XD看到這裡的人一定都很好奇前面賣的關子.....。Delicious Library雖然有25本書的限制,但如果只是要拿來當條碼掃描器,其實還是可行的。關鍵在於,Delicious Library會把每次掃到的條碼,記在~/Library/Application Support/Delicious Library/Scanned UPCs Log.txt,即使把掃進資料庫裡的書刪掉也一樣會留著紀錄。所以利用Delicious Library大量掃書的做法很簡單,連續掃25本書進去後,按住delete鍵,把資料庫裡的書刪光光,接著再繼續掃就好。因為Scanned UPCs Log.txt裡會有所有掃描成功的條碼紀錄,只要在最後打開這個檔案,全選複製起來貼到aNobii的大量匯入文字框內就行了。接下來順便提一下掃描的技巧。如果是用Macbook或是Macbook Pro的人,可以把螢幕闔到和鍵盤約成30~40度夾角的地方,然後把條碼放在觸控板的按鈕旁邊(見下圖)。這時最好是接個外接螢幕,並且把Delicious Library的視窗拖到外接螢幕上,這樣才能確認條碼有沒有放對位子而且對焦正確。要能成功掃描的重點在於有沒有對焦清晰,也就是說不管條碼的大小,都要距離鏡頭一段固定的距離,才能正確的辨識。我用Macbook把螢幕闔到圖中那樣,接著只要把書放在觸控板上,聽到逼一聲就是成功了。有另一個放法是把螢幕再抬高一點,然後把書靠著Macbook放著,這樣比較適合書的厚度差異很大的時候(電腦書大概都只能這樣掃XD)。順利的話一本書不用一秒就可以搞定。我今天掃了236本書,其中有25本無法成功掃描,只好放旁邊最後一起手動輸入。這些書都是條碼太小,或是本來就不太清晰,辨識會失敗也不奇怪XD整體來說,用iSight來掃描是個省力氣的好方法。整個過程中最累的其實是把書從書架上拿下來,還可能要清一清灰塵,掃描完再歸位的動作。其實我想應該可以更輕鬆一點,例如拿相機對著書櫃拍幾張照片,再拿來OCR得出全部的書名......想歸想,其實我也把書架上的書都掃完了,剩下收在箱子裡或放在台中的就下次再說了。歡迎大家參觀我的aNobii書櫃,之後有空可能會把我想賣掉的書順便標上去 XD。scan-book.JPGDelicious Library掃描時的樣子delicious-lib.png閱讀全文