Archive for June, 2006


MacBook也能變成遊戲控制器..

Saturday, June 24th, 2006

Engadget Chinese看來的玩法。竟然有人利用Macbook內建的加速感應器來操作遊戲(就像Wii那樣),真是太有創意了XD..

Google Canlendar支援Safari了..

Friday, June 23rd, 2006

剛剛不小心在Safari中連到Google Calendar,沒想到竟然可以用了..Q_Q

GDB的妙用

Wednesday, June 21st, 2006

今天有個同學跑來跟我求救。他說有隻重要的程式在工作站上面跑,但沒有放在screen裡面,可是Windows的鍵盤滑鼠都卡死了,有沒有辦法能重新開機(也就是關掉windows上的terminal, putty)而且讓程式能繼續跑下去..。
其實我以前也遇過同樣的問題,只是一直沒去想怎麼解決,後來都習慣用screen,就自然不會遇到這問題了。可是我最近發現,其實有不少人都不知道UNIX上有screen這個好東西,於是只要跑些重要的程式,就得擺一個terminal在桌面上,而且千千萬萬不能關掉,否則跑了數天的結果就這樣白費了。

今天再次碰到這個問題時,仔細想了一下,terminal關掉會讓程式中斷的關鍵在於,程式會在terminal關閉時收到SIGHUP這個signal,而不處理這個signal的結果就是結束程式。在以前還不知道screen這東西前,都得用nohup這個指令來事先攔截SIGHUP。

那現在碰到的問題就是,有沒有辦法在程式執行到一半的時候,先在它收到SIGHUP之前把這signal擋下來?或是直接在它執行中修改它的程式碼,讓它忽略SIGHUP…?

想在runtime時變更程式的行為,讓我馬上想到gdb這個好東西。gdb可以在程式執行到一半時,attach到它的process上,接著就能做所有gdb能做的事情..。gdb能做的當然不只是debug啦,gdb可以在runtime改變程式的執行流程和行為,還能攔截程式本來應該要收到的signal…,咦,這好像就是解答了嘛!

Debugging with GDB可以查到,只要在gdb裡輸入這樣的指令,底下的程式就不會收到SIGHUP了。


handle SIGHUP nopass

所以這問題的解法很簡單。

  1. 從另一台電腦連上正在跑重要程式的工作站
  2. 用ps和grep找出那個程式的pid
  3. 用gdb attach它: gdb [program] [pid]
  4. 在gdb內輸入: handle SIGHUP nopass
  5. 把當掉的windows重新開機,在gdb內輸入continue讓程式繼續執行
  6. 你會看到gdb攔截到SIGHUP的訊息,再輸入continue就可以了

Why is Lisp so great?

Monday, June 12th, 2006

自從看完了駭客與畫家後,就開始看Common Lisp相關的書和文章。其中我最有興趣的是Paul Graham不斷提起的macro。

一開始我還不了解macro到底強在哪裡,為什麼能讓Lisp如此特別,直到發現Why is Lisp so great? or Why so many parenthesis?這篇文章,才大大一驚,原來macro是這樣玩的!

這篇文章舉了Haskell著名的quicksort implementation為例

qsort []     = []
qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
                 where
                   elts_lt_x   = [y | y < - xs, y < x]
                   elts_greq_x = [y | y <- xs, y >= x]

這份實做真的非常漂亮,短短幾行就說完了qsort。
但如果用原始的Lisp語法寫起來還蠻複雜的,因為Lisp沒有提供list comprehension(Haskell的中括號)這種特殊的簡潔語法。但透過macro,就可以自己幫Lisp加上新的語法,而且完全不用動到compiler。

(defun qsort (ax)
  (and ax
       (let ((a (car ax))
             (x (cdr ax)))
         (append (qsort [y (y < - x) (< y a)])   ; A
                 (list a)          ; B
                 (qsort [y (y <- x) (>= y a)])))))   ; C

多麼神奇的特色啊,也難怪Lisp可以活這麼久而且永遠有許多死忠支持者..。

Friday, June 9th, 2006

剛從這篇文章發現一件有趣的事:

但是在無名小站上面,不管你是什麼等級的 VIP,你還是逃不掉廣告的攻擊,差別只在於機率和受害程度罷了,而且它的廣告有越來越大張的趨勢,現在連去首頁,我 browser 如果不捲動的話,整個螢幕都是廣告 XD

我覺得不可思議的是連首頁都整個變成廣告這件事。

我懷疑無名是快撐不下去了嗎,怎麼會把整個門面都賣給別人,還是這家公司連基本的格都沒有了呢?

台灣的商業網站真的都缺少”以客為尊”的感覺,到處都還是banner廣告,除了佔位子外還一定要不斷的閃爍。這種方法雖然吸引到了注意力,但卻會讓不需要的人產生厭惡的感覺,搞到最後每個人都只好裝Adblock來把討厭的廣告移除..。這樣子廣告廠商真的還有賺頭嗎?