2012年2月14日火曜日

「ActionScript3.0 パフォーマンスチューニング」読んだ


ActionScript3.0 パフォーマンスチューニング - 野中 文雄 (著)

引き出せ!ということなので、引き出したいと思って読んでみました。
パフォーマンスチューニングについてまとめられた本てあんまりみかけないから期待しつつ。

感想
 なんというか、「ちょっとパフォーマンスチューニングてのをしたいんだけどどうしていいか右も左もわからない」人向けには割といいんじゃないかと思いますが(けど、それパフォーマンスチューニングじゃないんじゃないかみたいなとこもちょいちょいある)、ある程度実力のある人にとっては既に知っている内容が多く、そういう人にはオススメできないかもと思いました。本書が対象とする読者が、
  • 自分の意図した動作を自分のスクリプトとして書きたい。
  • スクリプトはどのように組立てればよいのか、どうすればより効率的な処理になるのかを知りたい。
  • ステートメントひとつひとつの意味を理解して、自分で応用できるようになりたい。
なのでパフォーマンスチューニング入門書みたいなそんな感じですね。

問題
 それはさておいて、この本若干問題がありまして、それがパフォーマンスの計測をしていないこと。パフォーマンスがどれだけ改善されたかをみるためにも計測は基本中の基本だけど、「試してみたところ速くなりました」みたいな表記はるもののどれだけ速くなったかは特に言及されておらずちょっと物足りなさを感じてしまう。「速いのかー。そうかー。」で終わっちゃいそう。もったいない。逆に言うと自分でどれだけ速くなったか調べてもらうという意図があるんじゃないかとか。わかんないけど。

計測
 ちょうどここでPDFプレビューが見られるので「変数と関数にはデータ型を指定する」のサンプルを例にどのくらい改善されるのか見てみたいと思います。
測定のために書いたのが次のスクリプトで、処理1がダメな例とされるスクリプト01-01-006、処理2が良いとされるスクリプト01-01-05。
// 初期化
var my_array:Array = new Array(100000);

var t1:int = getTimer();

// 処理1
for(var i = 0; i < my_array.length; i ++) {
 var element1:Object = my_array[i];
}

var t2:int = getTimer();

// 処理2
var nLength:uint = my_array.length;
for(var j:uint = 0; j < nLength; j ++) {
 var element2:Object = my_array[j];
}

var t3:int = getTimer();

trace("処理1の処理時間: " + (t2-t1) + " msec");
trace("処理2の処理時間: " + (t3-t2) + " msec");
結果は
処理1の処理時間: 25 msec
処理2の処理時間: 12 msec
てことで自分の環境だと2倍ぐらい速くなりました。
やばい。テンション上がる。もっと速くしたい。
というモチベーションループが廻りますね。多分。

その他
 Flashのパフォーマンスチューニングについてはこちらの特集がためになります。 身内なので紹介するのは気が引けるけどそれを差し引いても良い内容です。
最後は地道な努力が身を結ぶということで。

2012年2月12日日曜日

WP7のPrismでInteractionRequestを使う


WP7のPrismでInteractionRequest使うときにはまったのでメモ。

はじめに
出したい!と思って以下のエントリも参考にしつつ実装してみる。
そしたら、XAMLを書くところで、
エラー 2 The tag 'InteractionRequestTrigger' does not exist in XML namespace 'clr-namespace:Microsoft.Practices.Prism.Interactivity.InteractionRequest;assembly=Microsoft.Practices.Prism.Interactivity'.
とかなってうまくいかない。困った。

Prism for Phone updated for Mango
調べてみたらPrism for Phone updated for Mangoでこんなことに。
Microsoft.Practices.Prism.Interactivity was also updated to a 7.1 SDK project as well as the following updates:
- Removed BindingListener and InteractionRequestTrigger
- Updated ApplicationBarButtonCommand
そして。
InteractionRequestTrigger was deprecated in favor of EventTrigger provided by the Expression Blend SDK for Silverlight.
ということでInteractionRequestTriggerがなくなってる。
そのかわりEventTrigger使えっていうことなので、EventTrigger使って書いたのがこちら↓。

2011年12月11日日曜日

GAME&WATCH(BALL)を自動で操作するマシーンを作って「Make: Tokyo Meeting 07」で展示した



はじめに
12月3、4日に「Make: Tokyo Meeting 07」が開催されるてことで、せっかくだから何か展示したいと思って、GAME&WATCH(BALL)を自動で操作するマシーンを作って、チームラボブースで展示をしました。

MTM07のまとめ。
Make: Tokyo Meeting 07:まさに「才能の無駄遣い」の宝庫――「Make: Tokyo Meeting 07」へ行ってきた (1/2) - ねとらぼ

チームラボブース。
チームラボMake部、MTM07に出展します!

というわけで、作ったマシーンの動画です。



これはなに?
GAME&WATCH(BALL)を自動で操作するマシーンです。
マシーンがゲームを操作するのを眺めて楽しみます。

作った理由
・自動で動く機械が好き
・人がゲームをしているのを見るのが好き
なので作りました。

仕組み
・カメラで画面を撮影し、画像処理をしてボールと手の位置を検出
・ナックルプレス(っぽい)機構でボタンを押す

画像処理
画像処理はこんな感じでやってます。




(1) 元画像
(2) 2値化した画像
(3) アフィン変換した画像
(4) (3)の画像をラベリングした画像
これを見てるだけでも楽しいです。

ボタンを押す
ボタンを押すのはソレノイドとか試したけど、ボタン押す力がなくてダメでした。
12VのDCソレノイドだったからACソレノイドとかにすればいける気もする。

こういう仕組みでもいいかも?

画像処理の結果からArduinoを介してサーボモーター動かしてます。

強さ
MTM07で一日中動かしていましたが、最高で40点でした。
今自分でやってみたら98点でした。なので僕よりは下手です。
というより僕下手だ。

まとめ
今後の展望的なもの。
・機械がかしゃかしゃ動いて楽しいから割と満足
・人工知能とかで動かしたい
とはいえ、しばらくは放置する感じかなと思います!

その他。MTM07の感想。
・みんなメイクメイクしてた
・プラネタリウムは何度見てもよい
・スライムシンセサイザーやばい(見た目が)
・シュークリームもらったらカレーパンだった
という感じでした。

チームラボブースではゲストでTogetterの作者でもある@yositosiさんがレジツイを展示していて、前を通る人が「これが、あの!」みたいな感じで足を止めてたので、すげーっていう感じですごかったです。そういうMakerに私もなりたい。