ActionScript3でRubyのsend的なこと

ActionScript3 で Ruby の send のようなことをするには [method名] とすれば良いようだ。

var method_name:String = 'length';
var str:String = 'htp://ecpplus.net';
trace(str[method_name]);

=> 18

みたな感じでとれる。Object は .method名 でも [method名] でも行けるような感じ。まだまだイベントが使いこなせない。

ActionScript3でRubyのsend的なこと

64bit Linuxに FlashPlayer9入れる

Suse10.3 64bit版に FlashPlayer9 入れようとしたら普通には入らないみたい。Adobeのページで tar.gz 版落としてきたら、中に libflashplayer.so というファイルがあり、これをインストールすればいい。

flashplayer-installer というシェルスクリプトのインストーラがついてくる。これを見ると、Firefox のプラグインは ~/.mozilla/plugins というディレクトリのようだ。しかし、plugins はデフォルトではないようなので mkdir してあげる。そして、プレイヤーを突っ込む。

$ mkdir ~/.mozilla/plugins
$ cp libflashplayer.so ~/.mozilla/plugins

これだけでは動かないので、nspluginwrapper というコマンドをかましてあげる。これが root で実行しないとダメみたい。

$ sudo nspluginwrapper -i ~/.mozilla/plugins/libflashplayer.so

これで FlashPlayer9 インストールできる。Flex2 開発するために入れねばいけない。さっき JAVA入ってなくて小一時間ハマったよ。

64bit Linuxに FlashPlayer9入れる

Akelosのmigration

PHP の RailsコピーのAkelosを触ってる。まだVersin0.8だけど、良さそうなので使ってみたい。CakePHPはRailsコピーかと思ったら全然違ったので使うのやめた。

migration

$ php script/generate model Book

上記のコマンドで、Bookモデルが作られる。そうすると、migrateファイルにあたるものが app/installers/book_installesr.php に出来る。デフォルトだと以下のような形になって、バージョンUPとDOWNに対応した処理を書くようになっている。

< ?php
class DrinkInstaller extends AkInstaller
{
    function up_1()
    {
        $this->createTable('drinks', "
          id,
          name
        ");
    }
 
    function down_1()
    {
        $this->dropTable('drinks');
    }
}
?>

createTableの第一引数がテーブル名、第二引数がテーブルの中身になる。第二引数は、カンマでカラム名を区切っていく。型を指定しないと、自動的に最適な型にしてくれるということだが、怪しいので指定したほうが良さそう。以下のように書く。

        $this->createTable('drinks', "
          id,
          name varchar(255),
          descrption text,
          isbn varchar(20) not null
        ");

これをDBに反映させるには script/migrate book install と書く。install をやると up が順に実行され、 uninstall を実行すると down が実行される。

chu@chu-mac:~/Sites/sample$ php script/migrate book install
Upgrading-----
(mysqlt): SET AUTOCOMMIT=0
-----
-----
(mysqlt): BEGIN
-----
-----
(mysqlt): SHOW COLUMNS FROM books
-----
1146: Table 'sample_dev.books' doesn't exist
ADOConnection._Execute(SHOW COLUMNS FROM books, false)% line  854, file: /Users/chu/Sites/akelos/vendor/adodb/adodb.inc.php
ADOConnection.Execute(SHOW COLUMNS FROM books)% line  393, file: /Users/chu/Sites/akelos/vendor/adodb/drivers/adodb-mysql.inc.php
ADODB_mysql.MetaColumns(books, true, false)% line  202, file: /Users/chu/Sites/akelos/vendor/adodb/adodb-datadict.inc.php
ADODB_DataDict.MetaColumns(books)% line  723, file: /Users/chu/Sites/akelos/vendor/adodb/adodb-datadict.inc.php
ADODB_DataDict.ChangeTableSQL(books, id I NOTNULL AUTO KEY,
name varchar(255),
desctipntion XL,
isbn varchar(20) NOTNULL,
updated_at T,
created_at T, Array[1])% line  279, file: /Users/chu/Sites/akelos/lib/AkInstaller.php
-----
(mysqlt): CREATE TABLE books (
id                       INTEGER NOT NULL AUTO_INCREMENT,
name                     VARCHAR(255),
desctipntion             LONGTEXT,
isbn                     VARCHAR(20) NOT NULL,
updated_at               DATETIME,
created_at               DATETIME,
                 PRIMARY KEY (id)
)TYPE=InnoDB
-----
-----
(mysqlt): COMMIT
-----
-----
(mysqlt): SET AUTOCOMMIT=1
-----
Smart Commit occurred

途中にエラーっぽいメッセージがあるが、公式のScreenshot見てもこれが正常な動作のようだ。

ちなみに、以下のように書いておくと migration を uninstall した時にbooksテーブルがdropされます。Railsだと、デフォじゃテーブルやバージョン別のmigrationをサポートしてないからこれは結構便利かも。ただ、みんなで別々にやってたらどうなるのか。全部一気にやる方法がまだわからない。同じファイルに全部書いておけば問題はないと思うけど、要調査。

    function down_1()
    {
        $this->dropTable('books');
    }
Akelosのmigration

Macでflex2環境作った

インストール

まず、flex2SDK のサイトへ行き、Flex SDK, Flex Language Pack を落とす。

Flex SDK の中に、 Flex Language Pack 内のファイルをディレクトリごとに配置する。MacのFinderで同じディレクトリ上書きすると、前にあった中身消しちゃうんだねー。

あとは Fles SDK ディレクトリのbinにパスを通せばいいみたい。

flexのコンパイルはやたら時間がかかるそうなので、Flex Compiler Shell を導入。ダウンロード、解凍したファイルをFlex SDK の該当のディレクトリに一緒に入れて置けばそのまま使える。

あと、ActionScript3 (mxmlc) でのコンパイルを100倍速にする方法 に書いてあった rlwrap というのも入れた。上下キーで履歴辿れたりするみたい。

rlwrap は port で入る。

$ sudo port install rlwrap

これで環境構築は終わり。

fsch はこんな感じに使うみたい。

chu@chu-mac:~/flex$ rlwrap fcsh
Adobe Flex Compiler SHell (fcsh)
Version 2.0.1 build 159086
Copyright (c) 2004-2006 Adobe Systems, Inc. All rights reserved.

(fcsh) mxmlc hello.mxml
fcsh: Assigned 1 as the compile target id
設定ファイル "/Developer/SDKs/flex/frameworks/flex-config.xml" をロードしていま##
/Users/chu/flex/hello.swf (126938 bytes)
(fcsh) compile 1
設定ファイル "/Developer/SDKs/flex/frameworks/flex-config.xml" をロードしていま##
Nothing has changed since the last compile. Skip...
/Users/chu/flex/hello.swf (126939 bytes)
(fcsh) 

rlwrap で fsch を起動して、そのシェル内で mxmlc コマンドを叩く。するとfcsh: Assigned 1 as the compile target id と出るので、次回からは compile 1 と id を指定することで、メモリ上に展開されたソースを瞬時にコンパイルしてくれるみたい。上の実行例だと、差分がなかいので何もしなかった様子。

fcwrap

インストール

コンパイルするの結構めんどくさいと思っていたら、fcwrap というのがあった。webrick でサーバが常時立ち上がってて、ソースの更新ごとにコンパイルしてブラウザをリロードしてくれるとても良いもの。

http://saqoosha.net/2007/03/25/534/

Rails環境がそろってれば、3あたりからで大丈夫な感じ。

3. gemsいろいろ
$ sudo gem install rails hoe mongrel rack --include-dependencies

4. fcwrap
$ svn co svn://rubyforge.org/var/svn/hotchpotch/fcwrap fcwrap
$ cd fcwrap
$ sudo rake install_gem

使い方

$ fcwrap -s hello_world.mxml

として、http://0.0.0.0:3001/ を開いておきます。 hello_world.mxml に更新があるたびにブラウザ側で勝手にロードしてくれます。

rascut

fcwrapの後継で高機能版の rascut というのが出ていたみたい。

インストール

$ sudo gem install rascut --include-dependencies

使い方

$ fcwrap hello_world.mxml -s

とするとサーバモードで起動して、http://0.0.0.0:3001/ を開いておきます。 hello_world.mxml に更新があるたびにブラウザ側で勝手にロードしてくれます。

プリントデバッグ

http://subtech.g.hatena.ne.jp/secondlife/20070219/1171872801

から log.as を頂いてくる。flex-config.xml に以下のように書くみたいなんだけど、その mxml ファイルがあるディレクトリに置いたら import せずにそのまま使えた。


  /path/to/

以下のように書いたら、fcwrap 立ち上げて firefox の firebug の console でプリントデバッグ出来ました。AS3 の文法わからなすぎて、なんで log.as が呼ばれるのか分かってないけど、環境そろったので始めよう。

   private function sayHello():void{
     log('hello !');
   }
Macでflex2環境作った

gem install mysql

gem install mysql もう何回やってるんだって話だけど、つまずいたのでメモ。

–with-mysql-config で mysql_config のコマンドを呼ぶ。MacのPortで入れると、 /opt/local/bin/mysql_config5 というのが入るからこれを指定する。

% sudo gem install mysql -- --with-mysql-config=/opt/local/bin/mysql_config5

こんな感じでやれば無事とおる。

Debian だと、mysql が入っていても mysql_config が無いことがある。libmysqlclient15-dev というパッケージに入ってる。

% sudo apt-get install libmysqlclient15-dev
gem install mysql

NFSでネットワーク越しにマウント

SuseLinux10.3(chihaya) をサーバにして、 LAN内のSuseLinux10.2(mingosu) からディレクトリをマウントしてみた。

chiyahaのIPは 192.168.1.10 で、 mingosu のIPは 192.168.1.20 とする。

今、 chihaya の /home/test/nfs_test を mingosu の /home/test/nfs_test_mnt にする。システム上でのユーザIDが同一でないとエラーになるということだったのだけど、たまたま同じIDのユーザがいたので、そのユーザで作業を行う。

サーバ側の設定

chihaya 側で、マウントされるディレクトリの設定を行う。

/etc/exportsに以下のように追加。

/home/test/nfs_test 192.168.1.20(rw,no_subtree_check)

これで、192.168.1.20 から /home/test/nfs_test をマウントできるようになる。

しかし、これだけではセキュリティ的に良くないらしいので、 hosts ファイルでアクセス元を制限する。

/etc/hosts.deny で、サービスに対して特定のホストからのアクセス以外を拒否したい。

portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

これで全部ふさいで、次に

/etc/hosts.allow

で許可する。

portmap:192.168.1.20
lockd:192.168.1.20
mountd:192.168.1.20
rquotad:192.168.1.20
statd:192.168.1.20

これで設定は完了。

nfsserver のサーバを立ち上げる。

# /etc/init.d/nfsserver start
Starting kernel based NFS server                                     done

成功したらこんなメッセージになるはず。

# showmount -e localhost

とすると、現在エクスポートされているものが見れる。

/home/test/nfs_test 192.168.1.20

クライアント側の設定

mingosu の設定は、まずマウントポイントの作成。

$ mkidr /home/test/nfs_test_mnt
$ mountpoint -d /home/test/nfs_test_mnt

これでマウントポイントが作られる。

あとは、普通にマウントするだけ。

# mount 192.168.1.10:/home/test/nfs_test /home/test/nfs_test_mng

これでマウントされたはず。以下のようにすれば確認できる。

$ mount
....略
192.168.1.10:/home/test/nfs_test on /hoome/test/nfs_test type nfs(rw,addr=192.168.1.10)

エラーが出た時

サーバ側でうまく設定出来ていない時。

mount: mount to NFS server '192.168.1.10' failed: RPC Error: Program not registered.

サーバがうまく動いてない時、以下のエラーが出ます。きちんと export 出来てるか、確認する。設定が反映されていないかもしれないので、以下のコマンドを実行してきちんと反映させる。

$ /usr/sbin/exportfs -a
$ /etc/init.d/nfsserver restart

portmapが動いていない時

mount.nfs: Input/output error

クライアント側でportmapが動いていなかったらしく出ました。サーバ側も必要…なのかな?

$ /usr/sbin/portmap start

これで、完成。mingosu の /home/test/nfs_test_mnt に chihayaの/home/test/nfs_test がマウントされました。

NFSでネットワーク越しにマウント