2009年12月29日 星期二

PLT-Scheme and Apache

結合 PLT-Scheme Web server 和 Apache 時,使用以下的 Rewrite Rule 於 Apache 的 VirtualHost 中。

        RewriteLog /home/ccwu/rewrite.log
        RewriteLogLevel 9
        RewriteEngine on
        RewriteRule ^/play(.*)$ http://localhost:8000/play$1 [P]

其中的 RewriteLog 及 RewriteLogLevel 是為了除錯。RewriteEngine on 是必須的,每個 VirtualHost 的 Rewrite engine 都必須各別致能,這是基於安全考量。

但是 Apache 告訴我我沒有權限使用 http://localhost/play。
檢查 apache 的 error log ,參考網上的討論後,將 mod_proxy 及 mod_proxy_http 致能後問題得以解決。

2009年12月27日 星期日

sysctl IPV6_V6ONLY

前些日子在我的 Debian 機器上無法以 Java 連上網路。上網查詢後原來更新 netbase 後增加了一個新的 sysctl 選項。

cat /etc/sysctl.d/bindv6only.conf 
可以見到 net.ipv6.bindv6only = 1
這選項使得 ::ffff::ip 不再被接受,而 ::ffff::ip 卻是 java 
的預設。

2009年12月25日 星期五

Continuation 之不可或缺

Continuation web server 真的比較好嗎?依我最初使用 Javascript 加 Helma NG 及後來使用 PLT Scheme 的感覺來看,使用 Continuation 的確使得我不必太去操心網路 stateless 的本質,從而提升了程式開發的流暢感。

這只是模模糊糊的隱約覺得...

這幾日,遇到了問題,瀏覽網頁時常過期。這可嚴重了,使我從新思考是否要放棄 Continuation style。我改寫了部份程式,使用當初以 Helma NG 撰寫的方式。起初容易,最後困難,原本不關心伺服器和瀏覽器間要傳送什麼資料的,現在開始必須歩歩為營,考慮哪些資料需要 serialization 。

而目前這伺服程式還算簡單 ...,如果繼續發展下去,不使用 Continuation 恐會使得這遊戲的開發工作超出我一個人休閒時的工作份量了。

這使得我體會到 Continuation 對我這類網路應用的不可或缺。

2009年11月1日 星期日

Scratch 和 Google App Inventor

一種為小孩子設計的語言:Scratch

這樣的語言,及發展環境,也是我的夢。

Google 的 App Inventor 也提供了類似 Scratch 的開發環境,但是內部使用的語言是 Scheme。

Kawa

以 Java 寫成的 Scheme,可以在 JVM 上執行。因此我忍不住將它和 plt-scheme 及 rhino 比較,以瞭解它的優劣定位。

相較於 rhino:
  1. 同樣可在 JVM 上執行。
  2. 援用 java 的 class 時,沒 rhino 那麼方便,必須定義要使用的 method,若使用某個 method 眾多的類別如 JOGL 時,會帶來一些困擾。
  3. 因為是 scheme,比 rhino 更適用於開發 Domain specific language (DSL)。
相較於 PLT-SCHEME
  1. 可在 JVM 上執行,因此,可以和使用 rhino 的程式整合在一起,提供 rhino 欠缺的 DSL 能力。
  2. 缺少 PLT-SCHEME 的龐大功能及其健康的社群。
Kawa 被用於 Google 的 App Inventor,被使用的原因就是因為 Scheme 的 DSL 能力。

依我的觀點,Scheme 的 DSL 能力最適合用在當 Domain specific language 尚未定型,正在成長時。

javascript 和 OpenGL

在學習使用 javascript 透過 java 執行 OpenGL 時,我採用 Wikipedia 中 "Java OpenGL" 這一條文的例子。但是執行時出現了以下錯誤訊息:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no gluegen-rt in java.library.path

參考網路上的說明,UnsatisfiedLinkError 意指少了某個 .so 檔,在此為 libgluegen-rt.so。查詢結果這檔案位於 /usr/lib/jni 中,在 java 命令後加上 -Djava.library.path=/usr/lib/jni 後問題得到了解決。