こないだの FxUG でしゃべったやつ

7/24 に行われた Flex User Group Japan Tour 2010 でちょっとしゃべったやつのスライド置いときますね。リンク付き。さらーっと話しすぎて意味わかんなかったと人も多かったと思うんだけど、やっぱ、あれ、haXe は素人にはお勧めできないなw


7/24 に行われた Flex User Group Japan Tour 2010 でちょっとしゃべったやつのスライド置いときますね。リンク付き。さらーっと話しすぎて意味わかんなかったと人も多かったと思うんだけど、やっぱ、あれ、haXe は素人にはお勧めできないなw
すげえ久しぶりにブログる。どうも最近いろいろやる気がでなくって、久しぶりに集中できたとおもったら仕事じゃなかったみたい。つっても半分仕事みたいなもんだけど。んと、ブログには書いてなかった気がするんだけど Web Designing 5 月号から One's View で連載書いてます。んで、7 月号に Face.com をとりあげたのですけど、そのときにかるーくサンプルアプリを作ったりしたのでそのソースコードをのっけときますねっていう。Face.com については Web Designing 買えばいいんじゃないかな!
いちおううちのサイトにも動くやつのっけておいたので試してみてくださいな。やっぱこういうのは twitter 連携つけとかなきゃねーとおもって twitpic 投稿機能とか付け始めたら、OAuth がすげえめんどくせえの。一晩かかっちゃった。だけどよく考えたら Face.com の API 制限が 1 時間に 200 コールまでってなってるので、twitter で広がったとしてもほとんど意味ないのでした。
つーか、何するアプリか書いてないな。Face.com の顔認識 API をつかって写真にうつってる人みんなにクマかぶせちゃおうっていうやつですよ。すでにやってる人いるんだけど(その 1、その 2)、まあ、Face.com のが簡単で正確で速いねっていうことですな。
上の写真は 2 年前ぐらい?のごは Fla 京都んときの写真ね。身近でたくさん人うつってるやつがこれぐらいしかなかったっていうw
Sorry, this entry is only available in English.
正月からずーっと仕事しかしてない気がするけど、たまにはこういうコード書きたい! ということで書いた。これでみんな自分オリジナルの radiko プレーヤーが作れるね!
(※あたりまえだけど公式プレーヤーで聞ける範囲の人しか聞けないよー)
package { import com.bit101.components.HBox; import com.bit101.components.Label; import com.bit101.components.PushButton; import com.bit101.components.VBox; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.NetStatusEvent; import flash.net.NetConnection; import flash.net.NetStream; public class radiko extends Sprite { private static const STATION_CODE_OSAKA:Array = ['FMO', '802', 'CCL', 'OBC', 'MBS', 'ABC']; private static const STATION_CODE_TOKYO:Array = ['TBS', 'QRR', 'LFR', 'INT', 'FMT', 'FMJ']; private var _conn:NetConnection; private var _stream:NetStream; public function radiko() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var vbox:VBox = new VBox(this, 10, 10); var osaka:HBox = new HBox(vbox); new Label(osaka, 0, 0, 'OSAKA'); for each (var name:String in STATION_CODE_OSAKA) { new PushButton(osaka, 0, 0, name, _onSelectStation).width = 50; } var tokyo:HBox = new HBox(vbox); new Label(tokyo, 0, 0, 'TOKYO'); for each (name in STATION_CODE_TOKYO) { new PushButton(tokyo, 0, 0, name, _onSelectStation).width = 50; } } private function _onSelectStation(event:Event):void { if (_stream) _stream.close(); if (_conn) _conn.close(); _conn = new NetConnection(); _conn.client = {onBWDone: trace}; _conn.addEventListener(NetStatusEvent.NET_STATUS, _onNetStatus); _conn.connect('rtmpe://radiko.smartstream.ne.jp/' + event.target.label + '/_defInst_'); } private function _onNetStatus(event:NetStatusEvent):void { switch (event.info.code) { case 'NetConnection.Connect.Success': _stream = new NetStream(_conn); _stream.client = {onMetaData: trace}; _stream.bufferTime = 1; _stream.play('simul-stream'); break; } } } }
SoundMixer.computeSpectrum でサウンドビジュアライズ的なものもくっつけようとしたら、セキュリティエラーでできなかった。。。まー、いつまでこのコードが動くかわかんないので、できるうちに遊んどくのが吉。あ、これ、リファラーチェックしてないんだったらそのまま Wonderfl で動くやん、、つーことで置いときました。
haXe でサイトを作ろうとしていて。Flash とは勝手が微妙に違うのでメモしていく。
・Mac では eclihx (heXe Eclipse plug-in) は Java 6 で動作する Eclipse Cocoa (64bit) じゃないと動かない。(そしてそんなに便利じゃない)
・TextMate Bundle も微妙。
・FlashDevelop しかなくね?
・FDT 4 がまちどおしい。
・エントリポイントは haxe -main Hoge でコンパイルしたら Hoge クラスの static main() から。このとき Hoge は Sprite クラスである必要はない。
・flash.Lib クラスの current が root の MovieClip。
・trace するとステージにおかれた TextField に出力される。
・flash.Lib.trace がいつものやつ。デフォルトの trace を置き換えることもできるらしい。
・Int, Bool, Void あたま大文字。
・Number なくってかわりに Float。
・getDefinitionByName はない。かわりに Type.resolveClass。
・getDefinitionByName でとってきた Class をそのまま new できない。かわりに Type.createInstance。→ あー、flash.Lib.attach だけでクラス取得してインスタンス化までいけるのかな。引数あたえたい時は createInstance。
・グラフィックは Flash IDE でてきとうなクラス名 (Hoge) つけて書きだした swf を、Application.currentDomain に Load して、同名クラスを Hoge.hx で作って上書き。。(まだよくわからん) assets.fla → assets.swf / haxe --gen-hx-classes
assets.swf / hxclasses に assets.swf に含まれるクラスの .hx 版みたいなのん(stub)ができあがるのでそれを使う。 / コンパイルするときに -swf-lib で assets.swf をくっつける。
・-swf-lib で指定できる swf は 1 個だけなので(なんで?)複数の swf ライブラリを使用したい場合は swfmill でくっつける。。→(どうやら複数の swf をいちどにコンパイルできるようになりつつあるっぽい。)
・Sam HaXe。swfmill の haXe 用高機能版? hxswfml 類似品?
・SWC も haXe から呼び出すためのインターフェースを用意すれば使える。
・AS3 で SWC (SWF) つくって haXe で全部まとめるか、haXe で SWC 書きだして AS3 側で全部がちゃんこするか? (polygonal のは後者)
・あるクラスのサブクラスを作ったら、コンストラクタでは明示的に super() 呼ばないといけない。
・コンストラクタの名前はクラス名じゃなくって new。public function new() {}
・as は flash.Lib.as に static function として存在してる。キャスト String(hoge) は cast(hoge, String) かな?
・is は Std.is(hoge, SomeClass)。
・クラス名は必ず大文字アルファベットから始める。
・Flash のトップレベルの関数とかは untyped __global__["encodeURIComponent"](str) とかで呼べる。ちなみに encodeURIComponent の代わりに StringTools.urlEncode がある。
・as3tohaxe で AS3 のクラス (.as) を haXe のクラス (.hx) にコンバートできる。ちょっと手直し必要だけど 1 からやるよりは楽。
・Object のフィールド削除、delete someObject["keyString"] は Reflect API を使って Reflect.deleteField(someObject, "keyString") する。その他 Object に対する操作は Reflect クラスにいろいろと?
・for (var key:String in obj) { trace(obj[key]); } → for (key Reflect.fields(obj)) { trace(Reflect.field(obj, key); }
・列挙型 enum がある。しかもコンストラクタがあったりしてなんか特殊。。
・enum を switch するときは、その enum 型に含まれるすべての項目にたいして case 書かないといけない。
・protected はない。っていうか private が protected。private がない。
・・・
続く。