SparkProject勉強会#6

前回とても熱い勉強会だったので、今回も参加してみました。

Spark近況 - yossyさん

最初はyossyさんによるSpark近況報告。
HigeWheelというライブラリが、SWFWheelに名前を変えるという話から、 tracプロジェクトへのチケットの作り方の説明になる。自分は使ったことがあるから使い方も分るのだが、trac使ったことない人には易しい説明だったんじゃないかな。
こういうところを説明した方が良いんじゃないかな、という点を見つけるのがyossyさんはうまいと思う。
で、最近新規コミットされたライブラリなどをさくっと説明。

(追記 2008-12-21)yossyさんの発表資料がアップされていました↓

Flash CS4 - Adobeさん

続いて、Adobe 西村さんによる、本日発売のFlash CS4の紹介。まぁ、自分は今までいろいろなところで断片的に見てきた紹介でもあるので、これはキーワードを断片的にメモだけしておきます。
パネルの配置について、アニメーションのキーフレーム、モーションパス、モーションコントローラ。数値パネル内での計算。モーションプリセット。IK。アーマチュアレイヤー。3D。
途中から新藤さんからのデザイナー向けではなく、スクリプト書く人向けのFlash CS4新機能を2点紹介。
一つは、FlexコンポーネントのswcをFlash状から扱うことが出来るようになったこと。これでFlexなどで作ったswcパッケージとして配布できるようになった。
もう一つは、コンパイル時定数を使えるようになったこと。これは便利だし、欲しかった!
例えば、CONFIG::DEBUGとかそういう定数を使えるわけで、以下のようなパブリッシュ分岐を行える。

trace( "A" );
CONFIG::DEBUG{
	trace( "debug" );
}
trace( "A" );

graphoon - fushanさん

fushanさんは、早稲田大学大学院在学中の福山誠さん。初教・中等教育Flash/Flex,ActionScriptの組み合わせを研究されているらしい。発表されたのは、その研究で作られたサービスgraphoonと、その描画部分を切り出してコミットされたライブラリ。

グラフ描画に、Mathematica高い、gnuplot, Rってほどじゃない。らしいということで作ったらしい。なるほど、その動機は理解できる。昔のマックにはグラフ描画アプリが入ってたと思うのだが、あれは今どうなったのかな。とか思いつつ、発表を聞きました。これ、中学生とか高校生の時なら面白く使っただろうな〜、と思う。
オープンソースとして公開されたのは、グラフ描画コンポーネント部分。
設計上でのポイントは、AS3ではevalが無くなったので、D.evalを使った。とのこと。

evalを使いたくなったことは今のところ無いけど、覚えておいて損はないライブラリですね。

曲線の公式 - e_s_jpさん

e_s_jpさんは、Flash用にいろいろなツールをjsflで作っている方で、それらもSparkにコミットされている。

これらも結構便利そう!特にGetFrameActionScriptは人の作ったflaファイルを解析するのには必須だ!欲しかった・・
e_s_jpさんが、今回紹介されたのは曲線描画ライブラリ。これもgraphoonのように数式を解析して描画できたりするライブラリ。
しかし、一気に描画する、タイマーで描画する、などのメソッドが実践的で使えそうな感じ。クラス構成とか命名ルールとか実装部分もきれいで好感&興味が持てるライブラリ。いい意味で、エンジニアだな−、という発表でした。
で、あれ?このライブラリってどこからダウンロードできるんだろう…。すいません、メモし忘れました。

AIRアプリ - daoki2さん

Spark/FXUGに趣味で参加されているらしいdaoki2さんの発表。

AIRアプリをはじめて1年、ということらしいが、いろいろコミットされておられる。

などなど。AIRアプリ作成に便利なツールとか、いろいろです。
そんなdaoki2さんが最初に発表されたのが、AIRBuilder!これがすごい!AIRアプリ用GUI作成ツール(いわゆるRADツール)。AIRアプリ状でGUIを作成して、MXMLを出力できるらしい。AIRアプリは外部アプリを起動出来ないので、MXMLを出力しているらしい。
続いて、RococoというSQLite3のデータベースを作って、いじれるアプリケーション。その場でSQLをそのまま扱えるみたいで、SQLの基礎というか概要を学ぶためにも良いかもしれない。
そして、LocaleMakerというローカライズデータ(ロケールファイル)の作成ツール。Flexと同様な仕組みを採用していて、例えば、Sample.locale.dbというデータを書き出す。これをAIRアプリのMXMLに読み込ませると、簡単に多言語対応アプリができる、と言うしくみ。アプリ側での使い方は次のような感じになるようです。

bGo.label	= resourceManger.getString( "SampleBrowser", "Button.Go" );

リソースマネージャを使うと、ロケールファイル名とキーを与えると、文字列が返ってくる。という仕組み。何かAIRアプリをつくるときに便利そうなので、覚えておこう。
これらのアプリは以下のページで配布されているようです。

GC最学習 - yossyさん

最後に再度yossyさんが、AVM2のガーベジコレクション(GC)についてまとめて紹介されました。
ベースになっているのは上条さんの情報らしいので、それを読んでいれば分りやすかったのかもしれないが、読んでなかった自分でもまぁ大体理解出来ました。
ポイントとなるのは、ガベージコレクションの方法は「マークアンドスウィープ(mark-and-sweep)方式」であるということ。(=参照カウンタ方式ではない)

yossyさんのプレゼンによると、つまりこういうこと。

  • メモリマネージャについて
    • メモリマネージャが、ある程度まとめて確保されたメモリを小分けしてオブジェクトに割り当てていく。
    • 足りなくなるとその時点で大きめの領域を再確保。
  • マークアンドスウィープ方式について
    • ツリーで管理されている(ルートはStage)
    • ルートから引き出しをたどって印をつける。
    • ルートからたどり着けなかったものが削除対象となる。
    • 親から子へたどれない場合に削除される
    • 子から親へたどり着けるかどうかは関係ない。

そのあと、コンパクションとは、とか、その仕組みをざっと説明した後、親子関係が以下に重要であるか。を説明されました。ちょっとここのサンプルの表示が速かったので、理解が追いつかなかったのですが、いずれblogに公開されるのではないかと期待しています。(それを見てちょっとこのあたりの文章も更新します)公開されたyossyさんの発表資料を見てもうちょっと勉強したいと思います。
(追記 2008-12-21 yossyさんの発表資料→http://www.be-interactive.org/works/20081219/be-lt05-gc.pdf
ここからが重要な発表内容だったのですが、「確実に作業されるためには?」という話。
GCは重い処理」なので、「アニメーション処理が重要なFlashでは、負荷が重い処理が行われていると、GCが中断されたり、実行されないことがある」というのだ!なんと!!驚きです。
GCを起動しやすくする方法は以下のとおり。

  • 新しく要求されないと起動しない
  • スクリプトが動いていないといつまでもGCされない
  • マークアンドスウィープ方式を意識する
    • 親から子への参照を残さないようにする
  • 負担が低い場面を作る
  • コンパクションの発生が少なくなるようにする
  • System.gc()でGC強制発動
    • 負担が低くなったときを狙って
    • 大量にオブジェクトが削除されたあとによぶといい
    • 但し、重いので注意

まぁ、ざっと箇条書きでメモしただけですが、これらが頭に入っていると、いろいろと設計がやりやすくなりそうです。

今回も面白かった

来月は月末にAdobe MAXがあるので、ということで、#7は2月予定らしい。次回も是非!