AS3でのイベントフロー

順調にprog_actionscript30.pdfを読み進めてきて、ただいま第三部のFlash Playerの仕組みのとこ。

で、イベントフローがいまいち掴めん。

と思って調べてみたら、イベントフローをわかりやすく説明してあるエントリみつけた。

要するにイベントを木構造で表現すんのか。なるほど。

概念上、イベントフローは 3 つの部分に分けられます。 第 1 の部分はキャプチャ段階と呼ばれ、ステージからターゲットノードの親までのノードすべてがこれに含まれます。 第 2 の部分はターゲット段階と呼ばれ、ターゲットノードだけがこれに含まれます。 第 3 の部分はバブリング段階と呼ばれ、ターゲットノードの親からステージまでの帰り道を構成するすべてのノードがこれに含まれます。

バブリング段階とかは、継承関係のコンストラクタみたいなイメージでいろいろやれそうなことがわかるんだけど、キャプチャ段階って実際のところどういう処理が入る可能性があるんだろうか。

TurboGearsでpdfを出力する

Produce PDF Pages with TurboGears, Cheetah, and ReportLab を見つけたので早速やってみた。

ReportLabはpdfを生成するライブラリらしい。ドキュメント読むと面白そうなんだけど、グラフ作成とかの部分はちょっと使いにくそうかナァ。むしろmatplotlibRpyにグラフ作成は任せて、できた画像を入れ込むほうが使いやすいかな。

それから、tg-admin infoして気付いたけど、CheetahはTGの標準モジュールだった。

プレゼン資料作成用にPythonPointというXMLからpdfのスライドを作成するライブラリも一緒に入ってた。XMLじゃなくてYAMLから生成できるともっと便利に使えそう。Sporkのテキストファイルをpdfにできるようにしてもいいかもしれん。

VOXはじめました

この前購入したXactiで遊びたいということもあってVOXアカウント取った。

秘密結社ケロリンQ

で、駄文、妄想の類はこっちに書くことにした。

使っていいなと思ったのは分類がタグなんでゆるーく結びつく感じがいいのと、公開レベルを自分だけにすると下書きと一緒な感じになるので、思いつくままに書き散らしておいて、公開したいやつだけ公開するというスタンスが取れることかな。

そのうちChangeloglMemoを同期させたくなるかもしれんが、APIって公開されてるのかな?AtomAPIが使えるらしいけど。

PlotKit+Ajaxでチャートを描画

MochiKitのチャート描画ライブラリであるPlotKitでヒストグラムを描かせてみた。

del.icio.us - Mochikit

ちょっとした折れ線チャートとかヒストグラム、パイチャートの類はPlotKit使うと便利そう(javascriptだけでできるし)。

Ajaxで試したかったので、わざわざJSON形式でファイルを別に作成しておいて、非同期で読み込ませるようにした(data.json)。

{
  "name" : "sqrt",
  "value" : [[0, 0.3],[1, 1], [2, 1.414], [3, 1.73], [4, 2]]
}

スクリプトはこんな感じで結構短い。

  function plot_async() {
    var url = 'data.json';
    var d = loadJSONDoc(url);
    var gotData = function (data) {
    var layout = new Layout("bar");
      layout.addDataset(data.name, data.value);
      layout.evaluate();

    var chart = new SweetCanvasRenderer($("chart"), layout);
    chart.render();  
    };
    var dataFetchFailed = function (err) {
      alert("data not found");
    };
    d.addCallbacks(gotData, dataFetchFailed);
  }

これで割と綺麗なグラフが作成される。

plotkit

デモも置いておく。

フレームワークに組み込めば、お手軽にチャートが作成できそうな感じだ。

ActionScript3.0を覚える

AS関連を色々あさってたら、

subtech - Pink Blossom Diary ( ̄―+ ̄) - AS3

あとブクマコメントを見るに始め方が解らないつってるけど、ほんと入門書としては素晴らしすぎる prog_actionscript30.pdf, flex2_devguide.pdf があるわけで(きちんとしたドキュメントが無償配布、というのも adobe がオフィシャル提供する大きなメリットの一つですね)、それだけ読めば普通のプログラマならすんなり入れるわけで、誰かがコマンドラインでの開発方法を sdk ダウンロードするところからまとめればいいんじゃないかな、と思ったけど別に書かなくてもいいんじゃね、と思った。

500p以上あって、内容も充実してるっぽいので読み始めた。

1章は言語的にどういうもんなのかを説明してるんだけど、読み終えて感じたのは、AS3ってjavaとjavascriptを混ぜ混ぜした感じだなぁって思った。

で、BioActionScriptライブラリ作るメリットがわからんとか書いたけど、あってもいいのかな、むしろあったほうが効率あがるかなと思った。どういった部分にフォーカスするかだけれども。

となると、Perlmolっぽいものがあってもいいかナァ。特にparser関連に特化したライブラリが欲しい。インタラクティブに合成したい化合物をエディットするとそれにともなって予測値が算出されるといいかも。で更に、履歴をケミカルスペースに撒いたりとかするといいんじゃないかな。

メタモの早割

メタモの超早割 どうすっかなー。

多分行くと思うんだけど。

Xacti Vox

ふむーなかなかいいかも。ってか先週末Xacti買ったのでかなり気になる。

動画デジカメ「Xacti」新機種、CGMサービスと連携へ - @IT

シックス・アパートは、エントリーの公開範囲を家族や友達、趣味のグループなど、グループ単位で指定できる次世代ブログサービスの「Vox」において、Xactiのユーザーグループを作る。

Voxのアカウントとろうかな。

Flex2とCatalystをJSONでつないでみる

Creating a Flex application using the TurboGears frameworkを参考に。

JSONでやり取りしてるからflex2の部分はそのままでフレームワーク部分を変えるだけでいい。MVCフレームワークに小さいMVCフレームワークが乗っているという風にも取れるけど、かなり疎なので、自前でwebapiサービスを提供しつつ、サービスを受けるっていう感覚に近いかもしれん。

イメージにするとこんな感じ。 ファイルはココに置いておいた。

flex2_Catalyst

CatalystのviewはJSON。で、Flex2は受けとったJSONをmodelにしてASでロジック書いて、MXMLでUIのデザインをやればいい。 そのためすっきりとした感じはする。後は、チュートリアルみてたらFlex Builder2が欲しくなった。UIデザインするにはGUIのツールがやっぱ楽でいいと思う。

flex2に関してはCreating a Flex application using the TurboGears frameworkのオンラインチュートリアルを眺めてください。corelibを使うとJSONのシリアライズ/デシリアライズをやってくれるので必要。c:flex2extlibというフォルダをつくって放り込んでおいた。

コンパイルは

mxmlc -compiler.include-libraries c:\flex2\extlib\corelib.swc \
-- address.mxml

とやるとswfができるので、catalystプロジェクトの root/staticに放り込む。

flex2はこれで終了。続いて、というかメインのCatalystをいじるわけだけど、こっちも大して面倒なところはない。

TGはhttp://localhost:3000/からアドレスリストをJSONで受け取って(R)、http://localhost:3000/save,http://localhost:3000/deleteでそれぞれCU,Dという実装だったので、Catalystもこれに併せて、Catalyst::View::JSONとDBIC::Schema::Loaderを使ってつくることにした。

まず

catalyst.pl MyApp

でプロジェクトをつくって

script\myapp_create.pl view JSON JSON

でJSON用のviewを作成。モデルはSQLiteで。

まずSQLite

sqlite3 myapp.db < myapp.sql

ちなみにsqlはこれ。

CREATE TABLE address (
  id INTEGER PRIMARY KEY,
  full_name TEXT,
  phone TEXT
);

続いて、DBIC::Schema::Loader

いつも、明示的に書いてるので、触るのはほとんど初めてなんだけど、スキーマクラスって自分で書かないといけないんだろうか? こんなの。

use strict;
use base qw/DBIx::Class::Schema::Loader/

__PACKAGE__->loader_options
  (
   relationships => 1
  );

ヘルパーあんのかな?あとで調べる。こういう細かい部分はTGのSQLObjectはあんま考えないでいいので楽。データもcatwalkからブラウザでちょこちょこ入れられるし。

Root.pm,save.pm,delete.pm

Root.pmはアクセスするとアドレスリストのJSONを返す。

sub default : Private {
  my ( $self, $c ) = @_;

  my @result = $c->model('DBIC::Address')->search();
  $c->stash->{addresses} =
    [
     map {{fullName => $_->full_name, phone => $_->phone, id => $_->id}} @result
    ];
  $c->forward('MyApp::View::JSON');
}

save,deleteは普通にDBIC操作なので省略。

やるべきことをやったら動かしてみる。、

swf

こんな感じでflashが、、、なんかきもちいい。

あと今回手を動かしていく過程で以下の本がマイウィッシュリストに投入された。

ProductName Actionscript 3.0 Cookbook
Joey Lott
Oreilly & Associates Inc / 3034円 ( 2006-10 )


この時期頻発する送別会を2,3見送ればこの中の2冊は確実にゲットできるのになぁとちょこっと思ったヨ。っていうかかなり本気で悩む。

とりあえずTurboGearsの本は欲しいなぁ。買いかなぁ、見送りかなぁ?もし読んだヒトがいたらアドバイスなどください。

MSYS+cpanでエラー

WindowsXPのActivePerlのバージョンあげてcpanコマンドでモジュール入れようとしたら、

Error exit delayed from previous errors

とtarできねーっていうようなエラーが出てはまった。

どうもMSYSのtar,gzipが悪いみたいだと気付くのに1時間かかった。MSYSから他のgzipに変えたらさくっとなおった。

BioFlashってのがあるのね

ほう、こんなプロジェクトがあったとは。

BioFlash.org - Flash, Flex and ActionScript for biology and bioinformatics

BioFlash.org は Flash, Flex, ActionScript を利用することによりインタラクティブなバイオインフォマティクスソフトウェア、ウェブサイトの構築を推進するプロジェクトです。 現在バイオ関連データを ActionScript オブジェクトとして扱うための BioActionScript ライブラリを開発中です。

なんか面白そうなツールがあるので後でソース読もう。

このプロジェクトはRIAを目指すのかなと思ったのだけど、ASでBioActionScript ライブラリを創るメリットってのがイマイチ見えないナァ。biorubyとかbiopython,bioperlの既存のライブラリを活用する以上の何かが得られるんだろうか?ロジック書くのが楽になるのかな。