2007-05-08
久しぶりに vim で as3 のコードを書いたが
自作ライブラリのような小規模なコードで外部依存性が少ないような場合は vim + fcwrap のほうが Flex Builder より開発しやすいな。あとマシンスペックが低い場合。
flex とか使い出すとメソッド名とか引数を htmlhelp で引きまくらなくちゃならないのでその場合は Flex Builder の方が楽。
EventUtil クラス作ってみた
http://svn.rails2u.com/as3rails2u/trunk/src/com/rails2u/utils/EventUtil.as
http://svn.rails2u.com/as3rails2u/trunk/examples/EventUtil/EventUtilSample1.as
やっぱイベント登録がめんどくさいよなー、つうので登録代行してくれるユーティリティの作成。
bindEventHandler でターゲットのEventDispacher 継承クラスが送出しそうなイベントがあればそいつを自動登録してくれる。たとえば URLLoader なら onComplete とか onHttpStatus とか。
bindEventHandlerByEvent では指定したイベントクラスが dispacheEvent() されそうなメソッドが定義されている場合登録してくれる。これはメタデータタグでEvent が定義されてるとリフレクションで調べることが可能で、flex sdk の中のクラスはもれなく書いてあるので読み取れる。これで
EventUtil.bindEventHandlerByEvent(this.stage, this, [MouseEvent, KeyboardEvent]);
と定義すれば this に onMouseDown や onKeyDown などなどが定義されていればイベントに登録される。もちろん
EventUtil.bindEventHandlerByEvent(this, null, Event);
とか書いて this に onEnterEvent が定義されていれば登録される。また複数のイベントでも同一のイベントハンドラで処理したい場合
EventUtil.aggregateEventHandler(loader, logHandler, [IOErrorEvent.IO_ERROR, SecurityErrorEvent.SECURITY_ERROR]);
でまとめ上げて登録したり
EventUtil.addGenericErrorHandler(loader, logHandler);
で組み込みのエラーっぽいイベントが送出されたら呼ばれるハンドラ定義したり。
しかしながらこの方法の一番の問題が定義するハンドラが public なメソッドで定義しないとダメなことで…。ううう。
JS Commander
http://d.hatena.ne.jp/kstn/20070504/1178275407
すばらしすぎる。適当なポートで TCPServer たてて JS な String 送ると実行して結果を返すような機能がつくと別言語からも弄れたり別プロセスからも通信できてうれしい!
あと
Signal.trap('INT') {}
なのは何でなんだろう。Ctrl-C で抜けられない><。
win32 での fork は win32-process ロードしてもだめかな、と思ってやってみたけど、require 'win32/process' ると bind できなくなる、oh。えええ。
SpriteHelper
http://d.hatena.ne.jp/nitoyon/20070508/p1 を読んで。
なるほどー。SpriteHelper クラス自体は Proxy を継承して委譲のデザパタにそのまま当てはめるともっと簡潔に書けそう。
委譲したいメソッドだけ羅列してflash.ui.decribeType 使ってリフレクションで引数読み取って渡したり、特定のプロパティは matrix に委譲、とかも簡単に書けて長い引数をいちいち定義しなくてもいいし。(でも Proxy にしちゃうと flex builder のコード補完ってきかなくなるんだっけ?)
あと nitoyon さんも書いてるけど Proxy クラス継承すれば delete 演算子で定義したイベントリスナの削除もできるし。
また Sprite に自分がプロパティつけたいためだけに Dynamic にして DynamicSprite を定義するよりは、Interface で stash:Object のような getter/setter 用意してそれを継承した Sprite 使って
mySprite.stash.x = 10;
みたいにして使った方が心おきなく代入しまくれていいんじゃないかなぁ。Interface で定義しとくと Sprite じゃなくて他のクラス作るときにも応用が利くだろうしね。
railsbrain
rails doc の Ajax つかった API インクリメンタルサーチなんだけど。いかんせん JS が重すぎるよ…。ていうかこんな風なサイト二つぐらい過去に見た気がする。よ。
のののののののののののたん
衝撃的だ…。ああああああああ