RubyAMF を使ってみる

 よりよい家計簿を目指して、RubyAMFを使ってみる。Rails + Flex3.0 でやろうと。

インストール(Rails側)

$ script/plugin install --force http://rubyamf.googlecode.com/svn/trunk/rubyamf/

設定

 インストールすると config/rubyamf_config.rb が出来るので、ここで設定を行う。

無視したいフィールドがあったら、下記のように指定する。

ClassMappings.ignore_fields = ['created_at','created_on','updated_at','updated_on']

ActionScript側で、変数名をキャメルにするかアンスコ区切りにするか。

ClassMappings.translate_case = false

public var created_at:Date;

ClassMappings.translate_case = true

public var createdAt:Date; // created_at in rails

AS側で、動的にRailのモデルと関連づけを出来るようにするか。ARから派生したモデル以外でも使えるみたい。

ClassMappings.assume_types = true

指定は、以下のようにする。
# Flash:: fl.net.registerClassAlias(‘User’,User)
# Flex:: [RemoteClass(alias=’User’)]

ClassMappings.assume_types = false のとき、以下のようにしてRails側とAS側のマッピングをするか。

ClassMappings.register(:actionscript => 'Address', :ruby => 'Address', :type => 'active_record')

とすると、
Ruby側

class Address < ActiveRecord::Base

AS側

[RemoteClass(alias="Address")]
public class Address {

デフォルトだと、ASから送られてくる日付は Time オブジェクトになるが、これを DateTime オブジェクトにするかどうか。true で DateTime, false で Time。

ClassMappings.use_ruby_date_time = true

これを true にすると、associationを eager load してくれるみたいです。false にすると、いちいち設定する必要があります。

ClassMappings.check_for_associations = true

AS側で保存したときに、Rails側でどのように受け取るかの設定。

ParameterMappings.scaffolding = false

として、AS側でsaveしたとき

save(context);

Rails側では、以下のように受け取ります。

def save
  @context = params[0]
ParameterMappings.scaffolding = true

として、AS側でsaveしたとき

save(
   {context:context}
);

Rails側では、以下のように受け取ります。

def save
  @context =
     params[:context]

書きかけ。

RubyAMF を使ってみる

AIR

 パルフェやりたいけど、AIRもやらなきゃ。って言ったら、AIRに移植すればいいじゃないですか、って言われた。そっちのAIRじゃないですよ。ゲームの方です。でも、普通どっちも思い浮かばないんだよ。

 25日にAdobeがAIR正式版とFlex3をついにリリースしたらしいですね。千早の誕生日に合わせてくるとは、さすがAdobe Systemsです。AIRはβ版で何度か大きく仕様を変えたみたいだけど、1.0 になったからはじめるなら今とか。土曜にAIR本買ったけどどんなもんかね(‘A`)

 でも、まだデスクトップで何を作れば良いかってあんまし思い浮かばないよね。気軽にデスクトップとWebが連携出来るようになったら、Web2.0とは逆に、より個人向けっていうコンテンツも流行ると思うんだけど。AmazonとかGoogleがやってるような。それとか、まだネットの住人でない人を取り込むための土俵を作ることがもしかしたら出来るかもしれない、というか多分これは結構マーケット広い気がしてます。ユーザが常にいるサイトを作る方向と、ユーザの近くに常にいるモノを方向が出来るみたいな感じ。

AIR

デバッガ付きFlashPlayer9を強制的に入れる

 なぜかFirefox版のデバッガ付きFlashPlayser9が入らなかったので、強制的に入れる方法をめも。

 以下のURLから、デバッガ付きFlashPlayer9をダウンロードする。 ActiveX control content debugger (for IE) と書いてあるのがIE版で、Flash Player 9 Plugin content debugger (for Netscape-compatible browsers) と書いてあるのが Firefox等にいれる版です。SAはスタンドアロン版。

http://www.adobe.com/support/flashplayer/downloads.html

Firefox版でこれでダウンロードしたファイルを実行すると、XPのHomeエディションでは、 C:\WINDOWS\system32\Macromed\Flash\NPSWF32.dll というDLLがインストールされる。しかし、なぜかFirefoxのプラグインフォルダに入ってた通常バージョンとかは消されてしまう(‘A`) デバッガ付きをインストールすると、NPSWF32.dllがデバッガ付きになってるので、これをFirefoxのプラグインフォルダにコピーすればプラグインとして使えるようになるようだ。

C:\Program Files\Mozilla Firefox\plugins 以下に、先ほどのNPSWF32.dllをコピーします。これでFirefoxを起動すると、無事デバッガ付き FlashPlayer9がプラグインとしてインストールされます。

おまけで、古いバージョンのFlashPlayer をインストールしたいときは、以下のURLから拾える。

http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_14266&sliceId=2

デバッガ付きFlashPlayer9を強制的に入れる

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入れる

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環境作った