Seed(1)

Ubuntu裡安裝 Seed 很簡單,參考PPA for Orange Owners裡,把

deb http://ppa.launchpad.net/orange-owners/ppa/ubuntu intrepid main
deb-src http://ppa.launchpad.net/orange-owners/ppa/ubuntu intrepid main

放到 /etc/sources.list 裡,然後用 sudo apt-get update 更新,sudo apt-get install seed 來安裝即可。

執行 script 也很簡單,有兩種方法:

  1. 直接以 seed 執行:seed your_script.js
  2. 把 js 檔的第一行改為 #!/usr/bin/env seed,再以 chmod +x 為 js 檔加上執行權限,就可以用 ./your_script.js 執行。

目前官方沒有文件說明 Seed 內部有哪些類別與方法,這很讓人困擾,這兩天看了 source code 跟 example code 之後,大致上有點了解。

Seed 主要的類別是 Seed,提供了如下方法:

  • include:用來含括其他 js,讓你可以為程式作適當的切割,不至於讓檔案變得太大而難以維護。
    Seed.include("other.js");
  • print:印字串。
    Seed.print("Hello world!");
  • check_syntax:檢查語法,你可以傳 javascript 程式進去檢查,如果有錯,會丟出 exception。
    try {
    Seed.check_syntax("Seed.print(;");
    Seed.print("syntax ok!");
    }
    catch( e ) {
    Seed.print( e.message );
    }
  • spawn:執行外部程式,執行以後會回傳一個 object,這個 object 有兩個屬性:stdout 與 stderr。
    var result = Seed.spawn("ls");
    Seed.print( "=== spawn result(stdout) ===" );
    Seed.print( result.stdout );
    Seed.print( "=== spawn result(stderr) ===" );
    Seed.print( result.stderr );
    
  • fork:這跟 C 的 fork() 一樣,回傳值是 0,表示是子行程,-1 表示失敗,大於 0 的值,表示是父行程。
    var pid = Seed.fork();
    if( pid == 0 ) { // child process
    var result = Seed.spawn( "ls" );
    Seed.print( result.stdout );
    Seed.quit();
    }
    else if( pid == -1 ) {
    Seed.print( "cannot create child process." );
    }
    else { // parent process.
    Seed.print( "I am parent process." );
    }
    
  • quit:離開。
  • introspect:這個函數可以用來探知類別成員函數如何使用,安裝 Seed 以後,/usr/share/doc/seed/examples 下有個 introspect.js,就是一個很好的範例。不過我還不是很懂怎麼去用~
  • import_namespace:含括其他 library 進來使用,不要跟 include 搞混了,include 是含括其他 js 檔。

把檔案內容放到環境變數

在 bash 下很簡單的一件事情,批次檔似乎沒有比較好的解~
在 bash 下:

VERSION=`cat version.txt`

在批次檔裡,我發現可以用 for 來解:

@For /f "" %%a in (version.txt) do (set VERSION=%%a)

但缺點是,當檔案有多行時,VERSION 會是最後一行的內容。

當 jQuery().ajax() 遇到 ASP

利用 jqGrid 新增中文欄位資料時,到伺服器端時,就變成亂碼了。
FireBug 大神幫忙,發現 request header content-type 的編碼是 utf-8,查過jqGrid的 source code,裡面也只是調用 jQuery 的 ajax 函數而已。
照理來說,應該可以用 $.ajaxSetup() 來修正,但試了好一陣子,發現沒辦法,即使我在 contentType 裡指定了 charset=big5,最後送出時,仍然會是 utf-8…

好吧,山不轉路轉,再拜請Google大神,發現有人利用 escape() 解,也就是先用 javascript escape() 編碼,server 端再解碼,這樣就解了。
大致的代碼是這樣:

//
$("#jqGrid2").jqGrid(
// ... 略 ...
).navGrid( "#pager2", {
// ... 略 ...
add:true,
addfunc: function() {
$("#jqGrid2").editGridRow( "new", {
url: "server.asp",
beforeSubmit: function( postdata, o ) {
var s = postdata[ "your_field_name" ];
var ret=[true, "", ""];
postdata[ "your_field_name" ] = escape( s );
return ret;
}
} );
return false;
}
} );

電影流水帳(2009/1/22~2009/2/12)

偷懶,看看上面的日期,居然也快滿一個月了。跟去年同期比起來,少看很多~

  • 좋은 놈, 나쁜 놈, 이상한 놈(IMDB, Wikipedia),中譯:神偷、獵人、斷指客。雖然莫名的不太喜歡韓國,但是我必須要說,這是很讚的一部片子,全片無冷場,好看。
  • The House Bunny(IMDB, Wikipedia),中譯:女郎我最兔。我是衝著Anna Faris才看這部片子的,但這片令人失望,笑點低,早知道就不要看了。好在女主角身材還不錯~
  • Seven Pounds(IMDB, Wikipedia),中譯:七生有幸。悶,而且個人對於這樣的故事並不贊同,男主角因為害自己老婆在車禍中喪生(對!開車時千萬不要分心看手機!!),所以一心想藉著捐贈器官幫助別人來解除痛苦,最後甚至自殺把心臟捐出去。且看這部片子在情人節檔期是否賣座吧~

Xming 的字太小?

Xming 等同是 Windows 上的 X Server,使用的說明可以參考:Xming 簡易使用說明,圖文並茂,寫的非常好。
對我來說,唯一的問題是字太小,該怎麼解決?我找了好久~
最後終於意外發現,只要在 XLaunch 最後一個步驟的畫面的 “Additional parameters for Xming” 裡填上 -dpi 100,就可以解決字太小的問題。

javascript + gtk = seed

昨天在這兒:Building desktop Linux applications with JavaScript看到的,現在可以用 JavaScript 來寫 GTK Application 了,如果以後再支援 DOM、selector與類似 XUL 語法(GLADE?)的話,應該會吸引一堆會 javascript + html 的人來用吧~
不過話說回來,XUL 好像也沒非常風行啊~
該專案的官方網站在:Seed
Anyway, 如果你想試試的話,已經有人打包了 for Ubuntu 的 package 了,位置在這裡:PPA for Orange Owners
詳細安裝方法,文章裡都寫的很清楚,這裡就不再贅述了。

電影流水帳(2009/1/1~2009/1/21)

甄子丹的英文名字是Donnie Yen?!
好像一點關係也沒有啊~為什麼是 Yen ??

  • 葉問(IMDB, Wikipedia)。看完前面,覺得挺不錯,覺得不錯的原因,恐怕是因為很生動地演出了葉問怕老婆的事。不過到了片子的最後,還是有”最後怎麼會這樣”的感覺,嗯,爛掉了。有人說叶问(ip man, 2008)是垃圾片,如果你跟真正的葉問生平相比起來,這部片可以說完全是虛構、吹捧。算了,不過就是電影啊,做做戲罷了~話說,為什麼英文片名是 Ip Man 啊??想不透。
  • 梅蘭芳(IMDB, Wikipedia)。以梅蘭芳生命中的三個插曲,點出他這個人,我覺得拍得不錯,不會落於虛幻,至少很樸實地、盡可能地去詮釋梅蘭芳的生平。這部片子很能讓人想多了解一些梅蘭芳的生平,特別是第二段…恐怕真相也並非如電影所演(梅蘭芳和孟小冬的不了情)…

vim auto completion

Linux Today看到這篇文章:Vi and Vim Editor: 5 Awesome Examples For Automatic Word Completion Using Ctrl-X Magic,看完的當下,非常的高興。
原本以為要安裝特定 plugin 才能達到的 auto completion 功能,居然早已內建,而且只需要在編輯時按下 ctrl+x ,再搭配下列按鍵即可:

  • ctrl+p:向前找可以自動完成的字
  • ctrl+n:向後找
  • ctrl+i:找所有單行開頭的,特別適合寫程式,因為通常函數都會是先以單行宣告,根據同事實驗,這還會去找 header 裡的…
  • ctrl+f:檔名的自動完成

能說什麼呢?只能說Vim太威了!