Beinterractive!の人が
Shibuya.abcでtamarin + Flex SDKでServer Side ActionScriptをやってました。しかもBlazeDSをASにがっつり移植されたらしいです...
すんげぇー(@_@)
何それ、ちょー楽しそうじゃん?え、Linuxなの?MacOS Xじゃ出来ないの?ってことで、MacOS Xで早速試してみましたYo
以下にその手順を示します。
Tamarinのビルド:
予め、Xcode 2.3以上を入手して、使えるようにしておきます。ちなみに自分はXcode 2.5でビルドしました。
まず、
Tamarinのソースコードを入手し、
ここの手順に従い、コンパイルしても良いのですが、自分はXcodeからプロジェクトファイルを開いてビルドしました。
この際に、自分の環境ではビルドエラーになったので、tamarin-central/shell/avmshell.cppの498-502行目(以下)をコメントアウトしました。
//#if defined (WIN32) || defined(AVMPLUS_UNIX)
//if (!P4Available()) {
// sse2 = false;
//}
//#endif
これで、tamarin-central/platform/mac/shell/build/Release以下にshellという実行ファイルが作成されますが、これがいまちまたで噂のavmplusことtamarinです。
何で、Macだとshellというファイル名何でしょうね?(以降はshellをavmplusにリネームしたという前提で書きます)
ビルドが完了したら、avmplusをパスの通った適当なところにおきます。
$ sudo cp tamarin-central/platform/mac/shell/build/Release/avmplus /usr/bin
後は、
Beinteractive!さんのShibuya.abcの資料に従って、tamarinと戯れればいいのですが、問題はMacOS Xにはbinfmt_miscが無いので、第5章以降を進められないこと何んだよな。
そこで...
abcx(Actionscript Byte Code eXecutable)ツールの導入:
仕方が無いので、きれいな実装ではないんだけど、abcファイルをコマンドラインから起動可能にするabcxというツールを作りました。
$ abcx filename.abc
って実行すると、filename.abxというファイルが出来ますので、これをコマンドラインから実行すると、一見abcファイルを直接実行したかのような振る舞いをします。
以下、資料中のabcファイルからabxファイルを作成して実行した例です
$ ./hello.abx
Hello, Tamarin!
当然、コマンドライン引数を与える時に"--"をつける必要などありません
標準入力も何のその
$ ./echo.abx
hoge
You say:hoge
fuga
You say:fuga
quit
キタコレー!!
種明かしをすると、abxファイルはavmplusにabcファイルとコマンドライン引数を与えて実行させるプログラムなんですね。なので、abxファイルと同じディレクトリーに元のabcファイルが無いと正しく動作しません。
abcxツールは、
Spark Projectの方に公開しておきますので、興味のある方は是非試してみてください。
ここの解説に従って、abcxツールをビルドし、abcx, abcx.abxをパスの通った適当なところにおいてください。
$ sudo cp abcx abcx.abx /usr/bin/
Apacheの設定:
今回の例ではWEBサーバに、MacOS XのパーソナルWEB共有を使います。標準で入っているApacheに、.abxをCGIとして実行させるように設定します。
/etc/httpd/users以下にusername.confというファイルがあるはずなので、これを以下のように書き換えます。
<Directory "/Users/username/Sites/">
AddHandler cgi-script abx
Options Indexes MultiViews ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
で、設定を有効にする為にApacheを再起動します。
$ sudo apachectl restart
以上で、公開されている資料とほとんど同じことができます。違いは、CGIファイルの.abcが.abxに変わることくらい?自分は、POST(第8章)まで正常に動作することを確認しました。
でも、肝心のBlazeDSを使うサンプルはクライアント側がFlashで実装されてたので、まだ試せていません...Flash持っていないもので(^_^;