タグ

ブックマーク / www.be-interactive.org (14)

  • BeInteractive! [巴さん - Flashで手書き文字認識]

    テストも終わり、ActionScript三昧な日々、いかがお過ごしでしょうか。yossyです。 先日、ウチにNintendoDSが来まして(俺が使うんじゃないですけど)、ちょっと触らせて貰いました。「脳を鍛える大人のDSトレーニング」ってソフトだったんですが、うおー、これペンで書いて答えるのか!手書き文字認識か!いまどきのゲームはそれぐらい出来なきゃいかんのか!これはFlashでもやるしかねぇ! と、いうワケで作ってみた。 オープンソースの手書き文字認識エンジン「巴」をベースに、少し改変して認識エンジンと辞書をFlashに移植。ショボショボ学習機能も追加してみました。速度の割に、そこそこの精度で認識してくれます。 巴がLGPLなので、一応これもLGPLということで。ソースはこちら。AS2.0用のクラス(製作中のゲーム用フレームワーク「Spark」のパッケージとして提供)と、使い方の

  • BeInteractive! [Loader と ApplicationDomain による実行時クラス置換]

    最近、告知と勉強会エントリばっかりでしたが、タイトル通り、ActionScript でクラス置換風なことが出来ることに気付いたので、まとめてみます。この手法を使うと、任意の SWF 内で使用されているクラスを、自分で用意した別のクラスで置き換えて実行することが出来ます。ポイントは、その任意の SWF をパブリッシュしなおしたりだとか、バイトコードでどうこうだとかそういったハックの類を使わなくてよく、一切弄る必要がないところです。 サンプルを Spark project にコミットしたので、これを見ながら読み進めて下さい。 http://www.libspark.org/svn/as3/RuntimeClassReplacement/ まず、以下のような Context クラスと DocumentRoot クラスで構成された、contents.swf があります。 src/org/libsp

  • BeInteractive! [早速 AIR で FlashPlayer を作ってみた]

    何を言っているのか分からないと思いますが、次のAIRアプリケーションをインストールして実行してみてください。 http://www.libspark.org/svn/as3/swfassist/trunk/samples/swfplayer/bin/SWFPlayer.air 実行するとウィンドウが現れるので、そこに何かアニメ的なSWF(ex: 魔理沙は大変なものを〜)をドラッグ&ドロップしてください。すると、しばらくした後、次のような感じでムービーの再生が始まります。 色々面倒なので線だけですが、全てActionScriptで描画しています。内部的にはswfassistを使っています。ソースはこちらにありますので、興味がある人はどうぞ。

  • BeInteractive! [知っていると得をするActionScript3.0新文法]

    知らないと損をするActionScript3.0の新文法をまとめて紹介します。 複数の変数の出力が楽に:trace 引数に変数を複数渡すと、自動的にスペースで区切って表示をしてくれます。 var a:int = 0; var b:String = 'hgoe'; trace(a, b); // Output: 0 hoge 要素の巡回が楽チン:for each 今まで、配列の要素を巡回するのは、次のようにするのがセオリーでした。 for (var i:Number = 0; i < list.length; ++I) { trace(list[i]); } しかし、もうこんな面倒な事は必要ありません。次のように書けば、list内の要素がひとつずつelementに代入されてループします。 for each (var element:Object in list) {

  • BeInteractive! [Shibuya.abc#1を開催しました + サーバーサイドActionScript]

    日、サイボウズラボにて、Shibuya.abc#1が開催され、無事終了致しました。色々と協力してくださったTAKESAKOさん、nishioさん、そして発表してくださった変態の方々、見に来てくださった変態の方々、当にありがとうございました。予想以上に楽しかったと僕は感じてるんですがどうでしょう?なんだかんだ言って皆かなりABC的な話で盛り上がってましたね。以下簡単レポ。 Shibuya.abc#1 基調講演 - beinteractive まず最初に僕の基調講演から。いきなりバイナリの話をして死者が出るといけないので、Tamarinで遊ぼう的な内容です。が、それが高じて遂にサーバーサイドActionScriptを実現してしまいました。詳しくは以下のスライド(PDF, 1.7MB)で。 http://www.be-interactive.org/works/Shibuya.abc-

  • BeInteractive! [AS3におけるローカル変数の扱い]

    まずは、ConquestArrowさんのエントリ「AS3のスコープとint/uint型の宣言で基的なところが解っていなかった件」を見て欲しい。 ここで重要なのは、「ActionScriptのローカル変数は、関数単位で管理されている」ということ。ブロック単位とかスコープ単位じゃありません。関数ユニークなので、同じ関数内で同名のローカル変数を宣言すると、ブロックが違っていても、「重複してる」とか言ってコンパイラに怒られるわけですね。 実際、JITの結果なんかを見てると、全てのローカル変数は、宣言(var)位置に関係なく、その関数に入る時に全て初期化され、returnするまでずっと生きてるようなコードが生成されている気がします(ちゃんと調べてないので曖昧にしとく)。ちなみに、ローカル変数は特別に、「レジスタ」と呼ばれる超高速にアクセスできる領域に格納されてます。更に、ローカル変数の中でも若

  • BeInteractive! [AS3で、どこでも簡単にスタックトレースを取る] flash actionscript

    「この関数一体何処から呼ばれてんだよ!!」って思う事ありますよね。そんなとき、以下のコードで簡単にスタックトレースを取る事が出来ます(デバッグプレーヤーのみ)。 trace(new Error().getStackTrace());

  • BeInteractive! [スレッドによる非同期処理はこんな感じ]

    otsuneさんのtumblr経由で、「MochiKit.Async.Deferredで非同期処理の同期処理を直感的に書く」を見たら、この辺この間のtwitterで書いたスレッドで実現するとどうなるか書いてみたくなったので書いてみる。このエントリと同じく、Flickrの写真をFFFFOUND!とtumblrにポストするスレッドを考えてみます。 まず、予めFlickrのpermalinkとmetadataを取得する「flickr.GetPermalinkThread」と「flickr.GetMetadataThread」、FFFFOUND!とtumblrにポストする「ffffound.PostFFFFOUNDThread」と「tumblr.PostTumblrThread」を作っておきます。これらのスレッドは、中でURLLoaderとか使ってリクエストを投げて、終わったらterminate

  • BeInteractive! [obj ? obj : default と 遅延評価]

    変数objがnullであれば、デフォルト値を返すコード、 return obj ? obj : 'default'; ってよく考えたら return obj || 'default'; だよね。多分こっちの方が速いし。もしかして常識ですか。 ・・・これだけでエントリが終わったらツマランので、ASで遅延評価メソッドを作るメソッドを考えてみよう。 ちなみに、遅延評価とは、値が当に必要になるまで計算を先送りすることで、全体として計算量を減らすという技術。例えば、 function hoge (a:Number, b:Number) : Number { if (a > 0) return a; return a + b; } という関数があったとすると、aが0より大きい場合、bの値は全く必要が無いので、計算するだけ無駄。よって、return a + b; が実行されると

  • BeInteractive! [ASでブロック付きメソッド呼び出し - その2]

    前のエントリの続きです。 で、たまたま見つけたんですが、どうやらFirefoxでは、JavaScript1.5辺りから、Array.forEachメソッドという、瓜二つなメソッドが実装されてるぽいです。世の中考えることは皆同じですネ... ただ、とりあえずまだ書くことがあるので書いておきます(また誰かが先を越してるかもしれないけど・・)。 まず、continueについて。通常のループでは、continueを使うと残りの処理を飛ばして、次のループ処理をします。 for(var i:Number=0; i<list.length; i++) { var item = list[i]; if(item < 5) continue; trace(item); } 上の例では、要素が5未満であれば、traceをせずにスキップをします。 では、これをeachに適用するとどうなるで

  • BeInteractive! [ActionScript]

    ActionScriptには、Function.applyというメソッドがあって、thisと任意長の引数を指定してメソッドを呼び出すことが出来ます。 function sum (a:Number, b:Number) : Number { return a + b; } var n:Number = sum.apply(null, [1, 2]); // var n:Number = sum(1, 2); と同じ この、「任意長の引数」というのがポイントで、どんなメソッドであろうが、何個引数があろうが呼び出せるので便利なのです。 んで、今回考えるのは、この「任意長の引数」をnewの時に実現できないか?という話。イメージとしては、java.lang.reflect.Constructor#newInstaceのような、Function.newInstanceというメソッドがあ

    m_hatayama
    m_hatayama 2007/09/05
    Function.newInstance
  • BeInteractive! [prototypeは拡張するためにある]

    昨日の続きと言えば続き。 やはり組み込みのクラスを拡張するのは比較的一般的みたいで、最速インターフェース研究会さんでは、JavaScriptで色々とごにょごにょした軌跡が掲載されてます。JavaScriptで使えるテクニックは、ほぼそのままActionScript1.0/2.0に適用できるので、読んでみる価値アリです。 で、更にこのBlogで、Ruby.jsという、Ruby的なメソッドをJavaScriptで実装しようという、まさに昨日俺が書いたような事をやってるプロジェクトが紹介されてました。こちらの方が網羅率が高いですね。 ただ、ブロック内からbreak;をする方法は思いつかなかったようで、フラグの状況でループを飛ばしてたりしてました。そこはなんとなく自己満足に浸る(まあ、あの方法もあんまり良いとは思えませんけど)。 最後に、読んでいてオォーと感動したテクニックを、Action

    m_hatayama
    m_hatayama 2007/05/16
    配列コピーテクニック。Array.apply(null, コピーしたい配列);
  • BeInteractive! [ActionScript理解度テスト 解答]

    ActionScript理解度テストの解答です。 1. プリインクリメント・ポストインクリメント var a:Number = 0; trace(a++); var b:Number = 0; trace(++b); 出力 0 1 これはプログラミングの初歩ですね。a++の場合は加算前の値が、++aの場合は加算後の値が返ります。 2. 配列参照 var list:Array = [1,2,3,4,5]; var copy:Array = list; copy[0] = 6; trace(list); trace(copy); 出力 6,2,3,4,5 6,2,3,4,5 初心者の人が良く間違う、配列のコピー「したつもり」コードです。 配列を代入する場合、参照が代入されるので、それを弄ると元の配列が変更されます。 3. メソッド参照 var o:O

    m_hatayama
    m_hatayama 2007/05/14
    理解を深める
  • BeInteractive! [ASDoc]

    Adobe LabsにてAS3用ドキュメンテーションツール「ASDoc」が公開されています。これは、クラスやメソッドに対して書かれたJavaDoc形式のコメントをHTML化してくれるものです。 というわけで、早速AS3Unitで試してみました。 うーん、正直、あまり品質は高くないような気がします。assertByteArrayEquals.as内に書いたプライベートFunctionがドキュメント化されちゃってるし・・・。コメント書いてないヤツはParametersの改行がおかしいし。何より、コマンドラインでやるのはキツイ。あとハマったのが、-doc-sources(ここで指定したフォルダ内全てドキュメント化するオプション)を指定する場合でも、-source-pathはきちんと書いてあげないといけない。というか、Flex2のlangrefは何で生成してるんだろう?まさかコレじゃないよなぁ

  • 1