« 2007年12月 | メイン | 2008年02月 »

2008年01月29日

as3の非同期処理を行うお手軽ライブラリを作った

CommandだとかThreadだとかChainだとか、as3の非同期処理クラスを見ていて思うのはとにかく小回りがきかないこと。

実装はどれも素晴らしいんですが、ちょっとだけ使いたい時でもひたすら型を書かなきゃならなかったりと微妙に不便なので手軽に使える非同期処理クラスを作りました。
ASDeferred(JSDeferred) をベースにしています。


Chain ライブラリ


・・・激しく名前かぶってますorz
だって後から知ったんだもの。

コンセプトは以下の3つ。
・やってることが一目で分かる
・必要なコード量を極力減らす
・取得データを参照しやすい仕組み

■やってることが一目でわかる

これは Tweener を参考にしました。
パラメータをオブジェクトで渡すことで視認性大幅アップ、かつ各処理クラスを隠蔽します。
データをテキストで読みたい場合は text、バイナリで読みたいときは binary パラメータに読込先のアドレスを設定します。
また、CGIを叩きたい時は vars でパラメータを指定することもできます。



Chain.parallel({
foo: { time:2 },
bar: {
img:"sample.jpg",
delay:1
},
php: {
variables:"sample.php",
vars:{ handle:"hoge", id:"12345"},
method:"post"
}
}).
next( function():void {
trace("elapsed: " + this.data.foo );
trace("jpeg width: " + this.data.bar.content.width );

addChild( this.data.bar );
}).
load( { swf:hoge.swf, target:this } ).
log("chain end");

parallel の引数にある foo とか bar とかはただの添字なので重複しなければなんでもいいです。




■必要なコード量を極力減らす

インスタンス生成コードを毎回書いてるとうざくなるので、そういうのは諸々スタティックメソッドで吸収しています。
また、traceするだけなのにメソッド定義するのも相当うざいので log メソッドで。



// 1秒後にhoge出力
Chain.wait(1).log("hoge");


並列処理の定義ではわざわざ型宣言が必要なメソッドを書かなくてもいいようにしています。
onStart や onComplete には通常コールバックメソッドを設定しますが、文字列にすると自動的に trace するメソッドに置換するようにしています。
デバッグに便利。

// 指定ページのテキスト情報を取得し、かつ5秒以上が経過したら出力
Chain.parallel({
	foo: { time:5, onComplete:"5000ms" },
	bar: {
		text:"http://www.google.co.jp/", 
		onStart:"load text: start",
		onComplete:"load text: complete"
	}
}).
next( function():void {
	trace( this.data.bar );
});

その他、マウスイベントや Tweener にも対応(仮実装です)

// ムービークリップをクリックするとフェードアウト
Chain.listen( mc, MouseEvent.CLICK ).
tweener( mc, { alpha:0, time:1, transition:"linear"} );



■取得データを参照しやすい仕組み

取得したデータを参照する際、メソッドの引数にわざわざ取得データ配列を渡していると記述ミスによるランタイムエラーを誘発しやすいので、全部 this.data で参照できるようにしました。
並列処理の場合はオブジェクトとして、単独処理の場合は値としてそのまま参照できます。
また、直接繋がっているメソッドでしか参照できないのはどうにも不便なので getter を利用してチェインを遡って参照できるようにしています。
parallelやloopに引き継ぐ場合はスコープが複雑になるので、データを外部に逃がした方が賢明かもしれません・・・このあたり、もすこし研究してみたいと思います。

Chain.load( { swf:"hoge.swf", delay:1 } ).
log("hoge").
next( function():void {
	addChild( this.data );
});

その他エラーハンドリングまわりがまだ未調整なので、ランタイムエラーが発生する可能性があります。
特定のエラーが起きた時に紐付けされたチェインだけ解除するとか、拡張機能を考え始めるとキリがない・・・

2008年01月25日

非同期処理クラス ASDeferred を作ってみた

JSDeferred の実装に感銘を受けて、思わず ASDeferred として移植してみました。

SparkProject にコミット。
ASDeferred

といっても ActionScript3.0 のクラスなので function を書くたびに返り値の型をしっかり記述しなければならず、はっきりいって使い勝手は激悪ですwww
それでも移植せずにはいられなかったというやつです、はい。

それと parallel が直列で繋げないのがどうにも腑に落ちなかったので、直列に繋ぐための挿入コードを追加してみました(一応コメントアウト)
テストコードの方も同様にコメントアウトしています。
クラスメソッドを呼ぶかインスタンスメソッドを呼ぶかの違いだけとはいえ、どうも混乱しそうなので使いやすい方を選ぶべきなのかなと思いますが、このあたり JSDeferred の中の人にも聞いてみたいなと思います。

テストが不完全なところがあるかもしれないので、おかしな挙動があったらコメントください。

2008年01月11日

Colin MoockとActionScriptな人々

今月15日にAdobe Presents コリン・ムックの「今から始める ActionScript 3.0 - WORLD WIDE TOUR 」が行われますが、その翌日16日に日本のActionScriptを見せつけてやるぜという名目の技術系イベントが開催されます。
まだ若干名リスナーとしてですが募集しているので、ActionScriptの濃ゆい質問をコリン・ムックにぶつけたいぜという人は下記の引用を読んで是非応募をば!

応募数が定員に達したため、参加申し込みは締め切られました。

当日はスピーカーとして参加します。
題目は「BitmapDataで面白エフェクト」ですが、面白くなければ変えるかもしれません(笑)
FlashはFlashらしく、見た目でも楽しめるものにする予定。

新年さっそく、ActionScript の"濃い"技術系イベント開催のご案内です。

AS3 エンジニア必携の書「Essential ActionScript 3.0」
http://www.amazon.co.jp/dp/0596526946
の著者の Colin Moock さんが来日されています。
ブログはこちら: http://moock.org/blog/

アドビのセミナー講師としてワールドツアーを回っているそうです。
http://www.event-web.net/as3/
この1月15日(火)の無料セミナーは既に満員御礼なのですが、このセミナーとは反対に、一線の日本人 ActionScripter から発表
し、Colin Moock を国内先端 ActinoScript で迎撃(歓迎)するイベントを追加開催することになりました。(ありがとう!
Adobe!)

●日時&場所
1月16日(水)18:30~20:40
アドビオフィス
東京都品川区大崎1-11-2 ゲートシティ大崎イーストタワー19F(兼、集合場所)

●当日のタイムテーブル
18:30 開場、事務局連絡、はじめに
18:40 Colin Moock 氏講演(30分)
19:10 日本人ActionScripters発表&ライトニングトーク&休憩(トータル70分程度)
20:20 Colin Moock にコレを聞きたい Q&A(20分)
20:40 終了。解散

●日本人ActionScripters発表&ライトニングトーク内容(予定)
・yossyさんhttp://www.be-interactive.org/
- SparkProject
・むらけんさんhttp://www.muraken.biz/ と teraさんhttp://www.trick7.com/blog/
- Gainer + AIR + Wiiリモコン + ヘルメット
・むねゴンさんhttp://void.heteml.jp/blog/
- BitmapData で面白エフェクト
・id:secondlifeさんhttp://d.hatena.ne.jp/secondlife/
- AS3/Flex で国際化アプリケーションを作る + その他いろいろ
・ワンパク 阿部さん
- ワンパク流ASフレームワーク
・小林悠さんhttp://d.hatena.ne.jp/yukoba/
- Flash でも Ruby つかえるよ

FLASHer 向けでなくて、ActionScripter 向けのイベントです。伝説のイベント『ActionScript 的超絶技巧発表会』
の AS クリエイタや、同じ ECMAScript 陣営の Shibuya.js からも出撃!濃い技術ネタにご期待ください♪

ただ、日程が急なこともあり、大きな会場が取れなかったそうなので、残念ながら、Adobe のサイトでの告知や、公式サイト等はございません。この告
知記事を見て、我こそはという AS ラヴな方、お知らせ下さい。

●参加エントリーについて
参加希望申し込みは以下のメールアドレスからお願いいたします。
宛先メールアドレス: colin-moock-20080116@googlegroups.com
メールには「参加希望です」というフレーズとあわせて:
・希望氏名&所属(必須)
・メールアドレス(必須)
・ご自分のサイトURL等(推奨)
・最近の ActionScript 作品orブログ記事 URL(推奨。あればAS3)
・コリンさんへの質問(必須)
をご記入ください。

既に現在、日本人発表者とコリンさんへの濃ゆい質問を事前打診した都合上、その方々にもご来場いただく事になっており、残り募集枠は限られております。
すいません!!おそらく11日中に定員に達するものと思われます。エントリーはお早めに!
申し込みは先着順にて決定いたしますが、運営者も人の子、ActionScript への愛を感じる申し込みや、コリンさんへのコアな質問や、質問内容
を英語でも用意してくださるような情熱的な ActionScript 愛好家さんからの申し込みを優先させていただくこともあるかと思います。ご容赦
くださいませ。

受講当選者には1月15日18時迄に受講決定メールをお届けします。

尚、当日は参加できない方も、「Q&A」コーナーに参加いただけます。
「どうやって書くのがクール?」とか「AS のここが不便だ」とか Colin Moock に投げかけたい技術的な質問・メッセージを募集中です。
どしどしご応募下さい。colin-moock-20080116@googlegroups.com

一番集中できる状態

社会人にとって一番集中できる状態は、学生時代にどういう状況で受験勉強していたかに依存しているのではないかという仮説を提唱してみます。


家で勉強していた人はやっぱり家。
塾に通っていた人は会社。
図書室で勉強していた人は図書館。


放課後タイプ。
徹夜タイプ。
早朝タイプ。


音楽を聴きながら勉強していた人は、音楽が流れていないと逆に落ち着かない。
コーヒー飲みながら勉強していた人は、何か飲みながらじゃないと逆に落ち着かない。
いや、これ自分のことなんですけどね。

ウェブサーフィンしながら勉強していた人は、、、どうなんでしょ。
受験に失敗する確率高そうだし。
そもそも合格した年の受験勉強の状況が前提ということでひとつ。

あまり説得力ないけどー

2008年01月01日

煩悩の鐘

あけましておめでとうございます。
今年もどうぞよろしくお願いします。


年明け直前に思い立って作ったネタ、さすがに間に合わなかったため年明け後に Twitter でこっそり投下するだけにとどめたのですが、1年後まで公開を見送ってもしょうがないので公開してしまいます。


煩悩の鐘

名前を入力して、鐘をクリックするだけ。
108個の煩悩が吹っ飛びます。
除夜の鐘で浄化できなかった貴方の煩悩、なんて位置付けはどうだろうw


脳内メーカーもどきなのは重々承知、というか明らかに劣化版ですね。
文字とかアイコンを大量に吹っ飛ばす実験作のひとつ、ということで;