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 後問題得到了解決。

2009年10月31日 星期六

rhino-debugger

目前我的網路遊戲是以 plt-scheme 寫成,有以下兩個原因使得 plt-scheme 難以被取代:
  1. 它的 at-exp 容易讓我描述遊戲的劇本。
  2. 它的 continuation based web server 使得我容易撰寫遊戲的流程。
但未來遊戲若要做成 GUI 的形式,我會期待用 javascript 完成。此時,我會選擇以下的工具:
  1. rhino, 以 JAVA 實現的 javascript interpreter。
  2. JAVA 的 Swing。因為它的無所不在,因為 Java Web Start。我不選擇 Eclipse 的 SWT,並不是有 JAVA 的地方就有 SWT。
 為未來做準備,我因此必須多瞭解一點 rhino,以及 JAVA。以下是我今日拜訪的連結:
Rhino + Javascript + Swing, Look Ma no Java ,很好,這樣短短的一篇,就給了我一個好開頭。

依據這篇文章,我寫了以下小小的 GUI 程式於 launch.js 中,以 rhino launch.js 成功地執行。

importPackage(Packages.javax.swing);
importPackage(Packages.javax.swing.border);
importPackage(Packages.java.awt.event);
importPackage(Packages.java.awt);
importPackage(Packages.java.util);

importClass(Packages.java.beans.EventHandler);

function runApp() {
        var lframe = new JFrame("MapaView");
        lframe.setSize(500, 400);
        lframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        var panel = new JPanel();
        panel.border = BorderFactory.createEmptyBorder(30, 30, 10, 30);
        panel.setLayout(new java.awt.GridLayout(0, 2, 10, 10));
        var exitButton = new JButton("Done");
        exitButton.addActionListener( function() {
                java.lang.System.exit(0);
        });

        panel.add(new JLabel("done yet?"));
        panel.add(exitButton);

        lframe.add(panel);
        lframe.pack();
        lframe.show();

}
runApp();

此外,我也瞭解了一下 rhino-debugger。rhino-debugger 這命令在 Debian Linux 下是一個 script 檔。閱讀後多多少少讓我知道要如何呼叫 Java。呼叫 Java?唉,是啊,我完全不懂 Java,我不屬於新生代的軟體工程師了。

2009年10月23日 星期五

Functional Programming

使用 PLT Scheme 撰寫遊戲至今,我完完全全體會到 functional programming 的表達力。在我的程式中,現在到處是 map 及 lambda。而且,setter 的使用也減少許多。
不過,我寫遊戲的方式是有點瞎子摸象方式的,沒什麼事先的設計規劃。完全是玩玩改改。目前這樣做的進展很快。但能持續到何時,可維護性如何,我還沒有把握。

2009年10月20日 星期二

Chat and Wiki for Scheme.

台灣很少有和 Scheme 這種語言有關的資訊。既然我目前使用 Scheme 做為我開發遊戲的語言,我就將這部落格做為我提供 Scheme 相關資訊的平台。

由於需要,我搜尋是否有以Scheme實現的 wiki ,發現了以下網頁。

http://practical-scheme.net/

在網頁中有個 WiLiKi 從開發的歷史來看,這 Wiki 從 2001 年到 2009 都有開發的活動。因此我粗淺地斷定這作者不會放棄這個 Wiki 軟體的開發,因此值得信賴。

在這網頁中還有個 chat room 的軟體,這也讓我頗感興趣。