顯示具有 helma-ng 標籤的文章。 顯示所有文章
顯示具有 helma-ng 標籤的文章。 顯示所有文章

2009年9月6日 星期日

風雨將至?Scheme 來援?

出於興趣,工作之餘,我撰寫網路游戲,透過這努力,我吸收新的,工作以外的專業技術。這是必須的,因為,工作的內容常一成不變,以致於人無法單靠工作成長。在技術瞬息萬變的軟體世界,不成長就等著被淘待。在休閒時撰寫網路游戲,使我能任意選擇我想要學習的技術,也沒有工作上必須完成的壓力,能依自己的狀況或快或慢,漸進地成長。

雖說技術瞬息萬變,但值得學習的常常是那些老舊的東西,那些老舊但又能持續推陳出新的東西。在此我指的是一種古老的語言:Scheme。我在前幾天發現 PLT Scheme 提供了 Web Server。

對於 Scheme 這語言,我早充滿好奇。一直沒能派它上用場,只能止於欣賞,無緣深入。我開始撰寫網路游戲時,未曾考慮它。我使用 Javascript,另一個我以為值得學習的語言。我以 Helma NG 為我開發的平台。在這過程中,我停歩了。我發覺自己需要一個 DSL以撰寫游戲的腳本。我考慮自行設計,或直接用 Javascript,前些時決定用 jLINQ+JSON。這組合總算初歩滿足我的需求。不幸,撰寫工作還是一停在停。

「一定是在哪兒有問題,讓游戲的撰寫工作少了一種流暢感。」我心想,「可能游戲複雜度將至的警訊。」

這流暢性的缺乏來自我的游戲中需要有能和資料完美結合的 DSL。但 Javascript 或 jLINQ 或 JSON 並不適合。

這時發現 PLT Scheme 提供了 Web Server 讓我十分開心。我打算以 Scheme 改寫游戲,評估它的實用性。希望這次能讓我進入 Scheme 的領域。

2009年7月25日 星期六

更簡單的安裝 EC2 AMI 中文的方法

在 ssh 及 apt-get update 及 user-setup 之後,以NX登入。
再選擇 Language support。

之後可以以 sudo 執行以下命令執行 helma ng:
apt-get install sun-java6-jdk ant git-gui
git clone git://github.com/hns/helma-ng.git
cd helma-ng; ant jar
export PATH=$PATH:`pwd`/bin
helma apps/demo/main.js

建立 中文 AMI

在起動了一個 AMI 後:

ssh -i xxx.pem ec2-user@public_DNS
user-setup

以下的命令可以以透過新的 user 使用 sudo 執行。

apt-get update && apt-get -y upgrade
apt-get install language-pack-gnome-en language-pack-en
apt-get install language-pack-gnome-zh language-pack-zh
dpkg-reconfigure locales
vim /etc/default/locale; set LANG=zh_TW.UTF-8
vim /etc/environment; set LANGUAGE=zh_TW:en_US:en, LANG=zh_TW.UTF-8, PATH
apt-get install scim-chewing scim-tables-zh
apt-get install sun-java6-jdk ant git-gui user-setup
user-setup
git clone git://github.com/hns/helma-ng.git
cd helma-ng
ant jar
export PATH=$PATH:`pwd`/bin
helma apps/demo/main.js

如此,可以顯示中文了。

部份需要 root 權限的工作可由自建的 user 使用 sudo 來做。

2009年7月21日 星期二

從 Helma NG 到 Jack

為了瞭解為何 Helma NG 無法顯示中文,我繼續走在探索道路上。

我必須瞭解 Jack 。因為 Helma NG 架構在 Jack 上。

我試著執行一下 Jack。只是修改它的 jack/examples/example.js ,加幾個中文字。結果 Jack.Lint 告訴我 Error: Content-Length header was 24, but should be 20 。

我想是 Jack.Lint 的 bug 。

不禁嘆息。看來 javascript 的中文之旅還在初階段呢。

有趣的是,看 jack 的寫作風格和 Helma NG 是完全不同的。

Helma NG 0.4 在 App Engine 上無法顯示中文

很不幸的。無法顯示中文。這迫使我必須瞭解原因。為了瞭解原因,我必須學很多本來不必學習的東西。

本來,我的計劃只要使用 Helma NG 和 javascript 就能搞定。現在,我必須探就 Helma NG 的底層,瞭解到底發生了什麼事,為何 java 可以正確顯示中文,而建立在 Java 之上的 Helma NG 卻不可以。

我先瞭解 rhino 及 app engine 的關係。以免被 Helma NG 的複雜性嚇到。以下這篇文章,給了我一個不錯的開始。

Javascript on Rhino on Java on App Engine

這時開始感到困難了。

我不會 Java。

又回到了年輕時什麼都不會的時候。

努力之後,我學會了:
  1. 使用 Eclipse 的 Project->Property 來增加一個 jar file。
  2. 在 src 中增加一個新的 .java 檔。
  3. 如何 embeds rhino
  4. 使用 FileInputStream 及 InputStreamReader 來讀取 .js 檔,以便設定 encoding。FileReader 雖然較容易用但無法設定 encoding 。
  5. ContentType 要加上 charset=UTF-8。
It works!! 我寫的小小的 Rhino Servlet 可以在 App Engine 上顯示中文了。

核對 Helma NG 的程式,其 file.js 及 MarkdownProcessor.java 都使用 FileReader。這應該就是 Helma NG 無法在 App Engine 顯示中文的原因。