Recent Entries
Recent Comments
OZACC.blog: Flash Category Archive

2010年1月14日

Flash | TextFlowLineの文字列データ

Flex SDK 4.0.0.10485に含まれているText Layout Framework(TLF)でのお話。

TLFで文章内の一行を表すのがflashx.textLayout.compose.TextFlowLineクラス。このTextFlowLineオブジェクトに含まれるテキスト、つまりある一行の文字列データを取得したいのだけど、TextFlowLineクラスにはgetText()メソッド的なそのものずばりのメソッドやプロパティが用意されていない。

なので、今まで非常にややこしい方法でテキストを取っていたんだけど、やっと簡易な方法がわかった。

var line:TextFlowLine = textFlow.flowComposer.findLineAtPosition(xxx);
var lineStr:String = line.paragraph.getText().substr(line.getTextLine().textBlockBeginIndex, line.textLength);

このline.getTextLine()メソッドによって、TLFからFlash Text EngineのTextLineオブジェクトを取得できる。このTextLineクラスのtextBlockプロパティとTextFlowLine.paragraphプロパティはほぼ同義なものと思われる。

ちなみに、Adobeサイトに上がっているTLFのAPIドキュメントは古い。

Posted by otsuka : 21:20 | Comment (0) | Trackback (0)

2009年10月 8日

Flash | URLRequest で空の POST

URLRequest - ActionScript 3.0 言語およびコンポーネントリファレンス

注意:Flash Player で実行されているときに、参照されるフォームに本文がない場合、Flash Player では自動的に GET 操作が使用されます。これは、メソッドが URLRequestMethod.POST に設定されている場合でも同じです。このため、正しいメソッドが使用されるように、ダミーの body を必ず含めることをお勧めします。

今日嵌っていたポイント。上記ドキュメントにあるようにダミーデータをくっつけて解決。

var req:URLRequest = new URLRequest(url);
req.method = URLRequestMethod.POST;
req.data = "dummy";
Posted by otsuka : 23:31 | Comment (0) | Trackback (0)

2009年9月29日

Flash | Flash CS5+FlashBuilder 4

moockblog: Flash CS5/Flash Builder 4 Integration Preview with Richard Galvan

If you use Flash Builder as your main programming IDE, but still use Library symbols from a .fla file for graphics, your compiling and debugging process is going to be significantly more convenient in Flash CS5/Flash Builder 4.

Flash CS5+FlashBuilder 4では、Flash BuilderからFlaファイルのライブラリが参照できるようになるってことか? この記事だけでは詳しく分からないけど、両者の連携強化は期待できる機能。

ただ、

when editing a class file in a Flash Professional Project, Flash Builder will not list the symbols available in the main .fla file, and will not provide code hints for those symbols.
とのことなので、ライブラリのシンボルをFlash Builderで編集しているASコードから参照してもエラーにならないだけで、それ以上のことはできないのかも。

Posted by otsuka : 14:58 | Comment (0) | Trackback (0)

2009年8月 3日

Flash | Dateオブジェクトのソート

僕が実装を担当したFlashに重大なバグが見つかった。しかもリリースの半日くらい前に。そしてそのバグはなかなか再現しない。少なくとも自分の環境では発生させることができず、まったく原因が分からなかった。

結局リリースまでに原因が判明せず、再現性が低いのでとりあえずリリース。が、アクセスの多いサイトだったので、確立は低いとは言えバグに遭遇するユーザもそれなりにいるわけで・・・

昨日の夜になってようやく再現環境を作ることができ、今朝バグを解決。原因は僕の勝手な思い込みだった。

var aug2:Date = new Date(2009, 7, 2);
var aug3:Date = new Date(2009, 7, 3);
var aug4:Date = new Date(2009, 7, 4);
trace(aug2 < aug3); // true
trace(aug3 < aug4); // true

var dates:Array = [aug4, aug3, aug2];
dates.sort();
trace(dates);

例えば上のコード。最後のdates変数の値は8/2、8/3、8/4の順のDateオブジェクト配列になると思わない? JavaだったらDateクラスはComparableインターフェースを実装しているので、普通にソートすればそうなるのだけど、ActionScriptにはComparableインターフェースなんてなく、Array.sort()メソッドのAPIドキュメントにある通り「データ型に関係なく、すべてのエレメントがストリングとしてソート」される。
つまり、DateオブジェクトのtoString()メソッドの結果を基に以下の順にソートされる。

  1. Mon Aug 3 00:00:00 GMT+0900 2009
  2. Sun Aug 2 00:00:00 GMT+0900 2009
  3. Tue Aug 4 00:00:00 GMT+0900 2009

そんなことを知らずに日付順にソートされてるはずと思い込んでいたのが、バグの原因でした。
関係者の皆様、ユーザの皆様、すいませんでした。

Posted by otsuka : 01:11 | Comment (0) | Trackback (0)

2009年6月20日

Flash | 画像をボタンとして扱いたいのだが

単純な矩形ではない複雑な形の画像をボタンとして扱いたい。

AS3 だけで作ろうとすると、[Embed] メタデータタグを使って画像を埋め込んで、それを Bitmap オブジェクトとして取得する。
Bitmap を Sprite でラップして、Sprite.buttonMode を有効にする。でもこれだと、Bitmap を囲った Sprite の矩形がヒット領域になってしまう。でも画像の透過部分はヒット領域にしたくない。
Sprite.hitArea は Sprite 型。

どうすればいいんだ? 何かド忘れてしている?

Posted by otsuka : 00:14 | Comment (2) | Trackback (0)

2009年6月 3日

Flash | EncryptedLocalStore

Adobe AIR 1.5 * 暗号化されたデータの格納

初めて EncryptedLocalStore クラス使ったけど、簡単に使えて便利。AIR だけじゃなく、Flash Player でも使えるようになればいいのに。
Flash プログラマーの中には、結構センシティブな情報をサーバサイドではなく SharedObject に保存しようとしちゃったりする人もいるので、こんな風に手軽に使える暗号化データストアがあるといいと思うんだよね。


「AIR アプリケーションをアンインストールするときは、アンインストーラは暗号化されたローカルストアに格納されたデータを削除しません。」という仕様は微妙。
AIR アプリのアンインストーラーは、スタートアップに登録したショートカットも消されないので、AIR にはいつかアンインストーラーの設定もできるようになって欲しい。

Posted by otsuka : 00:03 | Comment (0) | Trackback (0)

2009年6月 2日

Flash | AS3 で Static イニシャライザ

Static initializers in AS3

なんだ、Java と同じようにできるじゃん。

Posted by otsuka : 23:38 | Comment (0) | Trackback (0)

2009年5月29日

Flash | SWFとAIRアプリの通信

Adobe AIR 1.5 * アプリケーション間通信

ごちゃごちゃと書いてあって読んでもよく分からなかったけど、接続名をアンダースコアで始めるようにすれば次のようにLocationConnectionオブジェクトを設定すればいい。

▼SWF → AIR
・送信側 (SWF)
lc.send("_xxxxxxx", "methodName", ...args);

・受信側 (AIRアプリ)
lc.allowDomain("swfが置いてあるサーバのホスト名");
lc.connect("_xxxxxxx");


▼AIR → SWF
・送信側 (AIRアプリ)
lc.send("_xxxxxxx", "methodName", ...args);

・受信側 (SWF)
lc.allowDomain("app#" + appID + "." + pubID); // appIDはアプリケーションID、pubIDは発行者ID
lc.connect("_xxxxxxx");

Posted by otsuka : 23:06 | Comment (0) | Trackback (0)

2009年5月22日

Flash | クロスドメイン

Security.allowDomain() メソッド
LoaderContext.checkPolicyFile プロパティ

クロスドメインなSWFコンテンツで軽く嵌った点。またきっと引っかかると思うのでメモ。

前者は、ExternalInterfaceを使ってJavaScriptからSWFにアクセスする場合に、JavaScriptとSWFがホスティングしているサーバのドメインが違うと必要。

後者は、Loaderクラスが画像をロードしてBitmapData.draw()メソッドを使っていじくる場合に、画像とSWFがホスティングしているサーバのドメインが違うと必要。もちろん画像をホスティングしているサーバにはクロスドメインポリシーファイルを置いておく必要がある。

Posted by otsuka : 14:31 | Comment (0) | Trackback (0)

2009年4月27日

Flash | AMF3 Vector型

Vector Format in AMF3 - AKABANA

arkwさんのサイトで、Vector型とDictionary型のAMF仕様が紹介されていた。そういえば10で追加されたVector型のことをすっかり忘れていた。Dictionary型はOject型としてシリアライズされるものだと勝手に思い込んでいた。

これらの型については、AMF3の仕様書にはまだ反映されてないようだけど、arkwさんが調べたのかな? 有益な情報ですね。
後日検証して、Django AMFにも反映させたいと思います。

型マーカの13~15は何に使われているのだろう?
あと、サーバサイドからFlash/Flexに戻り値を返すときに、VectorやDictionary型で受け取りたいことってあるんだろうか?

Posted by otsuka : 20:09 | Comment (2) | Trackback (0)

2009年3月24日

Flash | AmFast

amfast - Google Code

via Ted On Flash: AmFast Remoting for Python

Cで書かれたPythonのAMFエンコーダ/デコーダ。
以前にDjango AMFとPyAMFとで、至極簡単なパフォーマンス比較を行ったことがあるんだけど、誤差と言えるような差なんだけど、常にPyAMFが速かった。AmFastはPyAMFより10倍以上速いと書かれているので、相当速いに違いない。

Cの勉強を兼ねてソースを見てみたんだけど、まずはPythonモジュールをCで書く方法を学ぶ必要がありそうだ。

Posted by otsuka : 22:10 | Comment (0) | Trackback (0)

2009年2月15日

Flash | SWT to SWF

Ted On Flash: Eclipse E4 M1 SWT: JAVA to AS3

SWTアプリは一度も作ったことはないけど、この変換がちゃんとできるんならスゴイな。
まだJava APIにしかできないことがいっぱいあると思うんだけど、そういう機能を使っている場合どうなるのだろうか。

Posted by otsuka : 18:28 | Comment (2) | Trackback (0)

2009年1月20日

Flash | swfmill

Flash Liteでの携帯サイト制作の練習をと思い、サーバとごにょごにょやりとりするものを作っていたのだが、loadVariable()/loadMovie()のクリック制約に悩まされている。
この制約内で頭使ってFlash Liteサイトを作るのが醍醐味なのかもと思いつつも、サーバサイドでSWFを動的に生成するしかないという結論に至った。

というわけで、swfmillを初めて使っているのだが、XMLの記述はなかなか直感的で書きやすい。ライブラリに画像をいくつか突っ込んだSWFを作ろうとしているだけなので、これで事足りそう。
Flash 9のSWFも生成できればいいのに。これくらいシンプルな方が使いやすい。

動的生成にはサーバサイドプログラムからswfmillのプロセス立ち上げて、XMLデータを渡したりしなければならなそうなので、ちょっと面倒。

Posted by otsuka : 18:31 | Comment (0) | Trackback (0)

2008年12月10日

Flash | ObjectUtil.toString() 出力されないプロパティ

[#SDK-13013] ObjectUtil.toString() misses password property - Adobe Bug System

ObjectUtil.toString()メソッドは、passwordとcredentialsプロパティを出力しないという挙動を知らず、しばらく嵌ってた。ちゃんとAPIドキュメントに明記して欲しいよねー。

Posted by otsuka : 17:39 | Comment (0) | Trackback (0)

2008年11月15日

Flash | Flash CS4 日本語ドキュメント

Adobe Flash CS4 Professional * Flash CS4 Professional

先日までFlash CS4のβ版からヘルプを呼び出しても認証が掛かってて見られなかったけど、今日誤ってヘルプを選択したらアクセスできるようになっていた。

あー、公式だとこういう風に訳すのかと思うところが多々。原稿はもうとっくに提出しているので、今更直したくないけど。

Posted by otsuka : 19:55 | Comment (0) | Trackback (0)

2008年11月 9日

Flash | AS3でRemote Shared Object

SharedObject - ActionScript 3.0 言語およびコンポーネントリファレンスガイド

setDirty() メソッド

SharedObject.setProperty() メソッドは、setDirty() を実装します。ほとんどの場合、たとえばプロパティの値がストリングや数値のようなプリミティブ型のときは、setProperty() を呼び出すことが可能で、setDirty() を呼び出す必要はありません。ただし、プロパティの値が独自のプロパティを持つオブジェクトである場合は、setDirty() を呼び出してオブジェクト内の値が変更された日時を示します。

もう、なんで?というAS仕様に悩むこと2時間。
FMSのRemote Shared Objectを使うプログラムを初めてAS3で書いてたんだけど、AS側から

so.data['key'].name = value;
と、RSOのデータを変更してもサーバにこの変更が伝わらない。
オレ様のコードは正しいはずなのに…と、この辺りの書き方をいろいろアレンジしてみたが直らない。で、ドキュメントを読み直していたら、AS2の時とは挙動が変わってた。

新しくsetProperty() や setDirty() メソッドが追加されており、RSOのプロパティ値を変更する場合は基本的には setProperty() メソッドを使うようだ。データがObjectやArrayの場合でその中身だけ変更した場合とかは、setDirty() を明示的に呼び出す必要がある。なので、上記のコードは

so.data['key'].name = value;
so.setDirty('key');
とすることで、サーバまで変更が伝わるようになった。

因みに、上で引用しているドキュメントの「setDirty() を呼び出してオブジェクト内の値が変更された日時を示します。」の、最後の「変更された日時を示します」は誤訳っぽい印象。

Posted by otsuka : 00:41 | Comment (0) | Trackback (0)

2008年10月15日

Flash | Flash Playerダウンロードページ

Adobe Flash Player - Downloads

いつもこのページになかなか辿り着けないので今日はメモしておく。

Adobe Flash Player 10 Update for Flash CS4 ProfessionalにDebug版のFlash Player 10も含まれている。

Posted by otsuka : 16:17 | Comment (0) | Trackback (0)

2008年9月26日

Flash | dango

トップページ - dango

サーバサイドではRubyを使ったFlashとのリアルタイム通信フレームワーク。昨日のFlex勉強会のプレゼンで知りました。
通信はポーリングとかではなくストリーミングで、データフォーマットはJSONとのこと。

データフォーマットはAMF(RubyAMF)を使てみては、とAdobeの外国人から突っ込まれていたけど、確かにフォーマットをJSONとAMFとで選択できるといいかも。
一サーバで100接続くらいはさばけるらしい。複数台でスケールアウトできる仕組みがあれば実用性が高まりそう。

BlazeDSだとFlashから使えないので(何か方法はありそうだけど)、Flashからでも使えるdangoは今後期待大。FMSクローンになれば言うことナシ。

Posted by otsuka : 18:40 | Comment (0) | Trackback (0)

2008年9月22日

Flash | AIRアプリ向けコード署名証明書

グローバルサイン、Adobe AIR向けコードサイニング証明書の提供を開始 | ネット | マイコミジャーナル

先日、あるプロジェクトでも話題に上ったAIRアプリの証明書。価格帯的にはThawteとほぼ同じだけど、国内で対応してもらえるのはありがたい。

数ヶ月前までは大手企業のAIRアプリでもCA発行の証明書による署名はされてないものが多かったけど、最近はきちんと署名されたアプリが増えてきている様子。

基本的に制作会社側ではクライアント企業の電子証明書は取得できないので、AIRアプリの制作を行う場合は、早めにこの点について確認しておく必要がある。

AIR ファイルへの電子署名

Posted by otsuka : 01:36 | Comment (0) | Trackback (0)

2008年6月 5日

Flash | Flex Builder 3 with Java 6

スタンドアロンのFlex Builder 3をインストールして、そこでプラグイン「Explore it」を使おうと思ったらインストールは出来たけど、動作しなかった。
調べてみると、Flex Builder 3付属のJREはJava 5だった。てっきりもうJava 6が使われてると思い込んでいた。

Flex Builder 3が使うJREをJava 6のものに変えようと前にも書いたやり方を試してみたところ、うまくいかずJava 5が使われたままだった。

Flex Builder 3のショートカットのリンク先を次のように変えるとOKだった。Explore itも動作するようになった。
"C:\Program Files\Adobe\Flex Builder 3\FlexBuilder.exe" -vm "C:\Program Files\Java\jdk1.6.0_05\jre\bin\javaw.exe"

Posted by otsuka : 15:54 | Comment (0) | Trackback (0)

2008年5月15日

Flash | Flash Player 10

Adobe Labs - Flash Player 10 Beta Release Notes

大分大幅な機能強化だ。

File Reference runtime accessは待望の機能。AIRの必要性がひとつ減った感じ。
Dynamic Sound Generationも面白そう。

Posted by otsuka : 19:08 | Comment (0) | Trackback (0)

2008年5月 6日

Flash | AMF仕様書の日本語版

Developer Documentation - BlazeDS - Confluence

いつの間にかAMF仕様書の日本語版が出ていた。が、AMF 3の方は英語のままだ。

Django AMFの開発もしばらくやってないのでそろそろ再開したいが…
忙しいときはやりたいことがいっぱいあるんだけど、いざ時間ができるとダラダラしてしまい何もやらない病はどうしたらいいのだろうか。

とりあえず今月の目標としては、ストリッパーズに野球部(軟式)を創設する。

Posted by otsuka : 23:21 | Comment (0) | Trackback (0)

2008年3月26日

Flash | メタデータタグ

Adobe Flex 3 ヘルプ

via 中垣 茂 ( Shigeru Nakagaki ) | ブログ ( Flex, AIR, ColdFusion ) | メモ : Flex 3 メタデータ一覧

ちゃんとドキュメントにまとめられてたんですね。いつもタグに指定できるプロパティが分からなくなってしまって調べるのに苦労していたので、これは助かる。

でもまだ他にもメタデータタグはあるよね? ぱっと思いつくのは [SWF] タグ。

Posted by otsuka : 18:13 | Comment (0) | Trackback (0)

Flash | PureRubyなRTMPサーバ

PureRubyなRTMP(MP4/H.264)サーバをオープンソース化しました - takumalog

これはすごいですね。このままRuby製FMSクローンまで育てて欲しいです。

Posted by otsuka : 18:05 | Comment (0) | Trackback (0)

2008年3月20日

Flash | Tweener処理後に対象オブジェクトを削除

Tweener.addTween(aDisplayObject, {alpha:0, onComplete:deleteObject});

function deleteObject():void {
    this.removeChild(aDisplayObject);
}

上のコードのように、あるDisplayObjectをフェードアウトした後に、それが属しているDisplayObjectContainer(上の場合this)から削除したいのだけど、上のコードだとdeleteObject()が呼ばれた時ににはTweenerがまだaDisplayObjectを何かしてるから削除できないよとエラーになってしまう。

こういうことをしたい場合、どうすればいいのでしょうか? Tweenerに詳しい方、教えてくださいまし。
お礼にSMEの3/30のライブチケットを差し上げます。

Posted by otsuka : 18:23 | Comment (4) | Trackback (0)

2008年3月13日

Flash | AS3のコレクションライブラリ

vegas - Google Code

Javaで言うところのSortedMapのAS3実装が欲しくて探してみたんだけど、このVegasというフレームワークしか見つからなかった。確かにライブラリというよりはフレームワーク。巨大すぎて使う気がそがれる。
必要なクラスだけ抽出して…と思ったけど、継承が深いので面倒くさそう。

今回は自分で実装するとしても、Apache CommonsのCollectionUtilsレベルのコレクションライブラリがあると便利な気がする。標準のArrayとObjectだけでは何かと不便。

Spark projectで作ってくれないかなあ。

Posted by otsuka : 18:47 | Comment (2) | Trackback (0)

2008年3月 5日

Flash | ライブラリのアセットはリフレクションで

今取り組んでいる案件は訳あってFlash CS3でコンパイルしなければならないが、コンテンツはほぼActionScriptオンリーで作成している。ソースはFlex Builder 3のActionScriptプロジェクトとして書いているのだが、Flash CS3でコンパイルするため[Embed]メタタグで画像等の素材を埋め込むことができない。そのため、Flashのライブラリに画像を登録し、リンケージで書き出している。

例えばIconクラスとしてリンケージ書き出したビットマップのシンボルは、ActionScriptの中で扱うときに

var iconData:BitmapData = new Icon(0, 0);
var icon:Bitmap = new Bitmap(iconData);
addChild(icon);
といった感じとなる。
しかし、Flex BuilderからFlashのライブラリは参照できないので、Iconクラスの参照が常にエラーとして表示されてしまう。Flashのライブラリをクラスパスに加える方法はないものなのか。

で、このエラー表示は鬱陶しいなあと思っていた今日この頃だったのだけど、さっきリフレクションでオブジェクトを生成すればいいんじゃんということに気付いた。

var IconClz:Class = getDefinitionByName('Icon') as Class;
var iconData:BitmapData = new IconClz(0, 0) as BitmapData;
var icon:Bitmap = new Bitmap(iconData);
addChild(icon);
これでFlex Builderからエラーの表示が消えた。スッキリした。他のエラーにも気付きやすくなったし。

リフレクションでのオブジェクト生成がパフォーマンスにどれ位影響を与えるのか、後で調べてみる。

追記
簡単なパフォーマンステストをしてみた。リフレクションの方が遅いと予想してたけど、僕の環境ではリフレクションで生成しようが、クラスを直接参照して生成しようが実行速度は変わらなかった。

Posted by otsuka : 02:26 | Comment (0) | Trackback (0)

2008年2月29日

Flash | TextFieldの最小限の高さ

TextLineMetrics - Adobe Flex 3リファレンスガイド

TextFieldのheightプロパティを、そのフィールドに含まれるテキストに合わせた最小限のものにしたくて次のようなコードを書いていた。

var textField:Text = new TextField();
textField.wordwrap = true;
textField.text = '長いテキストと仮定します。';
textField.height = textField.textHeight;
しかし、これだと複数行になる場合に何故か最終行が表示されず困ったことになる。なので、上のコードの最後を
textField.height = textField.textHeight + 5;
と、その時の気分に合わせて適当に高さを加えていた。

上記のTextLineMetricsクラスのドキュメントに掲載されている図を見て、このナゾが理解できた。
TextFieldの中のテキストとTextFieldの枠(heightの対象になるもの)の間に上下それぞれ2pxずつのガターがあったのだ。なので、最終行までちゃんと表示させるにはTextFieldの高さはtextHeightの値に少なくとも4pxを加える必要がある。つまり、TextFieldの高さを最小限にするためには次のようなコードになる。

var gutter:int = 2;
textField.height = textField.textHeight + gutter * 2;

幅に関しても同じ。すっきりした。

Posted by otsuka : 18:08 | Comment (0) | Trackback (0)

2008年2月27日

Flash | CS3のTextInput、TextAreaコンポーネント

TextArea - ActionScript 3.0 コンポーネントリファレンスガイド

Flash CS3のテキスト入力コンポーネントへの入力を監視してゴニョゴニョやろうと、textInputイベントをlistenしてたんだけど、このイベントオブジェクトのpreventDefault()メソッドを呼んでも何も起こらない。そのまま入力できてしまう。

長時間いろいろ試した挙げ句に最終的にソースを読んでみると、コンポーネントの内部でTextFieldからのtextInputイベントを一度キャッチして、イベントオブジェクトを作り直して再送出していた。このイベントオブジェクトのcancelableプロパティはfalseになっていた。
あれ? cancelableプロパティはtrueってドキュメントに書いてあったじゃんと思って再度見てみると、

cancelable:
true は、preventDefault() メソッドを呼び出して、デフォルトの動作をキャンセルします。
と書いてあった。確かにウソは書かれていないのだけど。。。ここではfalseに固定されてるんだから、trueの場合のことなんて書くなよ。

幸いなことにtextInputイベントを再送出している箇所のメソッドがprivateではなかったので、これらのコンポーネントクラスを継承した自前テキスト入力コンポーネントを作って解決。

Posted by otsuka : 22:49 | Comment (0) | Trackback (0)

2008年2月25日

Flash | Red5 0.7.0

Red5 v0.7.0 final 02.23.2008 Open Source Flash

Red5の新バージョンがリリースされていた。今まで0.6.3が出たちょっと後のSVN Trunkバージョンを使っていたけど、これを機に最新にアップグレードしてみたら、既存のプログラムは動かなかった。

Red5はこんなことの繰り返しだ。早く安定して欲しい。

Posted by otsuka : 17:57 | Comment (0) | Trackback (0)

2008年2月20日

Flash | Flex to Flash

Flex(ActionScriptプロジェクト)で開発していたものをFlash CS3環境に移行しなければならなくなった。すぐにできるかと思ったら、結構面倒くさかった。
以下、やったこと。

Embedしていた画像やSWFといったアセット類をFlashのライブラリに移し、リンケージの設定やらコードの修正を行う。

corelibas3syndicationlibが動かない。というか、componentsフォルダに置いてもこれらのSWCがFlash CS3から認識されない。なので、ソースファイルをクラスパスに加える。が、コンパイルエラー。corelib内のクラスからmxパッケージ配下のクラスへの参照があるため。Flex 3のソースディレクトリをクラスパスに加えてみたが、うまくいかなった。仕方ないので、mx.utils.StringUtilへの参照をcom.adobe.utils.StringUtilに変更。

コンパイルは通ったが今度はas3syndicationlibのDateUtilクラスから例外がスローされる。調べてみたらこのバグ報告と同じ。
対処方法は、このブログエントリーのコメント欄に。DataBase.asをcom.adobe.utilsパッケージに置いて、DateUtilクラス内のDateBaseクラスへの参照をこのcom.adobe.utils.DateBaseに変更する。

これで動くようになった。
corelibやsyndicationlibなどのコアとなるようなライブラリはmxパッケージに依存しないで欲しい。

Posted by otsuka : 20:12 | Comment (0) | Trackback (0)

2008年2月15日

Flash | Wowza H.264サポート

Wowza Media Server Pro H.264 Preview Release

これが正式にサポートされるようになると、FMS 3との機能差は大分縮まる。

Posted by otsuka : 12:36 | Comment (0) | Trackback (0)

2008年2月 9日

Flash | AS3 デコンパイラ

AS3 decompiler

出力されるデコンパイル結果は僕には何だかよく分からないものだけど、クラスに含まれるメソッドやその引数、変数にどんなものがあるのかは読み取れる。

さっきこのデコンパイラの存在を知ったばかりなんだけど、早速これが役に立って、ある問題の回避方法が分かった。これで眠れる。

Posted by otsuka : 04:26 | Comment (0) | Trackback (0)

2008年1月30日

Flash | Commandsライブラリ

fladdict.net blog: AS3で非同期処理を行う為のcommandsライブラリ

すばらしい。SerialCommandクラスがかなり便利そう。後でソースを追ってみよう。
これらのCommand連結を流れるようなインターフェースで実現できればベター。


ちょろっとSerialCommandクラスのソースを見てみたけど、次の関数処理に移る際の条件となるイベントがEvent.COMPLETEに固定されている。デフォルトはCOMPLETEイベントでいいと思うんだけど、Commandを連結する際に他のイベントに設定できるとより便利かも。

Posted by otsuka : 13:38 | Comment (0) | Trackback (0)

2008年1月28日

Flash | Flex UIコンポーネントのcallLater()メソッド

callLater() メソッドの使用 -- Flex 2

callLater() メソッドは、現在の更新ではなく、次の画面更新で実行する処理をキューに格納します。

このメソッドの存在を今更ながら知った。次回のEnterFrameイベント発生時まで処理をペンディングするということか。いちいちイベントリスナーの処理を書かなくていいから便利そう。多用すると危険な気がするけど。
ActionScriptの関数としても欲しい。自分で書けばいいだけか。

Posted by otsuka : 23:37 | Comment (0) | Trackback (0)

2008年1月23日

Flash | Loaderのイベント

TNSTUDIO blog: AS3_メモ4

ロードした画像にスムージングかけたいのだけども、パブリッシュブレビューだとロードがcompleteしたタイミングで、event.target.contentを参照してもnullになったりしませんか?
これはおそらくcompleteイベントではなくinitイベントをlistenするようにすればいいのでは?
loader.contentLoaderInfo.addEventListener(Event.INIT, 
  function(e:Event):void {
    // var loader:Loader = e.target.loader;
    var bitmap:Bitmap = loader.content as Bitmap;
  }
});
試してないけど。
Posted by otsuka : 15:35 | Comment (0) | Trackback (0)

2008年1月16日

Flash | クロスドメインでのリダイレクト

例えば「www.example.com/base.swf」のFlashコンテンツから「before.example.net/cgi-bin/data.cgi」というURLに対してCGIのリクエストを行っているとする。クロスドメインなリクエストになるので、このURLでのCGI呼び出しの前に「before.example.net/crossdomain.xml」が読み込まれる。

さて、今日あるトラブルにより、Flashは何もいじらないまま「before.example.net」へのCGIリクエストを「after.example.net」に転送させる必要があった。そのためまずbefore.example.netのApacheでmod_rewriteを使って全リクエストをafter.example.netにリダイレクトさせるようにした。

ところが、これだと
・Flash → before.example.net/crossdomain.xml →(リダイレクト)→ after.example.net/crossdomain.xml
となり、Flashコンテンツは「after.example.net」に対してリクエストを許可されることになる。つまり、以降の「before.example.net」へのリクエストは許可されていないことになりFlashからリクエストは送信されない。

解決策としては、「before.example.net/crossdomain.xml」は転送しないでそのままFlashに返すようにする。こうすると
・Flash → before.example.net/crossdomain.xml
・Flash → before.example.net/cgi-bin/data.cgi →(リダイレクト)→ after.example.net/cgi-bin/data.cgi
といった望ましい挙動となった。

要するにFlashからのリクエストをリダイレクトする場合、crossdomain.xmlへのリクエストはリダイレクトしてはいけないということ。

Posted by otsuka : 17:40 | Comment (0) | Trackback (0)

2008年1月15日

Flash | URLLoader

as3httpclient - Google Code

AS3であるWebサービスを使用するライブラリを作ろうとしていたところ、いくつか引っかかったポイントがあった。

まず標準APIのURLLoader。そのWebサービスはWSSE認証が必要だったために、HTTPのリクエストヘッダに任意の値をセットできる必要があった。幸いURLLoaderに渡すURLRequestクラスのAPIドキュメントを見ると、requestHeadersプロパティが用意されている。
WSSEヘッダの値の生成は、corelibのWSSEUsernameTokenクラスを使えばOKなので、これでWSSEの認証部分はOKだなと思ったら、ここに第一の罠が。

URLLoaderでリクエストヘッダを付けたリクエストを送っても、そのヘッダが付いていない。検索してみると「URLRequestHeader#requestHeadersが反映されない」というFxUGの投稿が見つかった。同じ症状。
結論から書くと、FxUGで書かれているようなcrossdomain.xmlが云々という問題ではなく、GETリクエストでは任意のリクエストヘッダが付与されないということが分かった。同じリクエストのmethodをPOSTにして適当にPOSTデータを付けてURLLOaderから送信してみるとWSSEヘッダはちゃんと付いていた。おそらくFlash Playerの問題。仕様なのかバグなのかは分からないけど。

じゃあ、GETリクエストで任意のリクエストヘッダが付けられるURLLoaderをSocket使って自作するしかないのかと思っていたところ、次の記事を見つけた。

HTTP Authentication for HTTP/GET requests using ActionScript 3

I was not able to set the header of a HTTP/GET request. Macromedia Flash Player allows you set the header only for POST requests.

上と同じことが書いてあります。で、この人はHTTPURLLoaderクラスというURLLoaderではできない機能を持つものを作って公開してくれてます。基本的なインターフェースはURLLoaderと同じなので、クラス名をHTTPURLLoaderに差し替えるだけで使える。
このお陰でGETリクエストでもWSSEヘッダを付けられるようになりました。

WSSE認証ができたら、次はPOSTメソッドでXMLデータを送受信する機能の実装。POSTリクエストなら標準のURLLoaderで問題ないなと思ったら、ここにもまた罠が。
何が悪いのか分からなかったのだけど、何度やってもレスポンスのXMLが受け取れない。COMPLETEイベントを受け取る前に、「Error #2032: ストリームエラー」で中断されてしまう。Proxyソフトで正しいXMLレスポンスが返ってきているところまでは確認できているのだが。

URLLoaderは使わずにHTTPURLLoaderクラスを使うかと思って、試してみたところHTTPURLLoaderクラスはPOSTメソッドに対応していなかった。あちらを立てればこちらが立たず。なかなかうまくはいきません。
HTTPURLLoaderに手を入れてPOSTに対応させるかとごちゃごちゃいじってたんだけど思い通りにいかず、最終的に行き着いたのがas3httpclientのSocketURLLoader。HTTPURLLoaderと同じ人が作ってます。もっと早くに気付いていれば。。

このSocketURLLoaderクラスを使うと、POST結果のXMLレスポンスもちゃんと受け取れるようになって、万事解決。前にも書いたHTTPステータスも受け取れるみたい。すばらしい。

Posted by otsuka : 17:34 | Comment (0) | Trackback (0)

2007年12月 4日

Flash | Flash Media Server 3

アドビ、H.264対応のFlash Player、Media Serverをリリース - @IT

同時接続数や帯域の制限がなくてこの値段なら、前のバージョンに比べてかなりリーズナブル。
アップグレード価格は用意されてないのかな。

Posted by otsuka : 21:33 | Comment (4) | Trackback (0)

2007年11月 9日

Flash | ライブストリーミングサーバ

糸柳和法のオッパイぷるるん☆放送局 - 各種 RTMP サーバーでのライブストリーミングの実現

FMS / Wowza / Red5 それぞれを使ってのライブストリーミング検証記事。オリジン/エッジサーバ方式のクラスタリング構成での検証も。これは必読。


そんなにクライアントが多くないマルチユーザアプリならRed5で特に問題なく動いているけど、負荷が掛かる状況や動画ストリーミングとなると怪しいところが出てくるのかも知れない。
Wowzaの動作検証をまだやってないけど、余裕ができ次第やってみないと。

Posted by otsuka : 12:00 | Comment (0) | Trackback (0)

2007年11月 1日

Flash | onEnterFrameループ

今日学んだこと。

画面表示の裏でonEnterFrameループを使って重たい処理を分割実行するときは、毎フレームではなく数フレームに1回の割合で処理を実行するようにして画面表示処理への影響を抑える。

Posted by otsuka : 02:33 | Comment (0) | Trackback (0)

2007年10月19日

Flash | JIS X 0213文字セットへの対応

[231260]環境依存文字を入力すると文字化けする(Flash CS3)

Flashコンテンツの中のテキストフィールドにWindows VistaからJIS X 0213で追加された文字を入力しようとすると文字化けするというトラブルが発覚し、こちらで調べた限り対処法が分からなかったので、先日AdobeのFlash Playerテクニカルサポートに問い合わせを送った。問い合わせの翌日、Flashでは環境依存文字はサポートされておりませんと、上記URLを添えて返答があった。

上記サポートデータベースの内容はFlash CS3のものだがFlash Playerにも当てはまるみたい。ただ、Flashコンテンツ上にテキストフィールドに直接入力しすると文字化けするけど、コピペすると入力できるし(フォントがちょっとおかしいが)、サーバから取得した環境依存文字を表示する分には問題ない。次期バージョンでサポートされることを期待。

Posted by otsuka : 12:26 | Comment (0) | Trackback (0)

2007年10月18日

Flash | Flash CS3のアイコンパネル

Flash CS3に備わっている各種パネルのドッキング機能とアイコン化機能は、ステージやスクリプトエディタを広く使いたい場合にすこぶる便利。なんだけど、「アイコンパネルを自動的に折りたたむ」ようにしている時、アイコンパネルを開いたままFlash以外のアプリケーションに切り替えると、Windowsのタスクバーが点滅してしまうのが難点。
何とかできないものか。

Flash CS3にはまだまだ便利機能がありそうなんだけど、全然使えていない気がする。

Posted by otsuka : 20:21 | Comment (0) | Trackback (0)

2007年9月14日

2007年9月13日

Flash | 続・Remoting Classes for Flash CS3

OZACC.blog: Remotingな仕事

フリーランス時代にトーサキと仕事したとき、Flash Remotingを使うと関数を呼び出してレスポンスを取得するまでのprogressが取れないのが気になる点として挙げられた。

あれから3年半。ActionScript 3になって、ようやくこの機能を実現できる目処が付いた。
以前に、Strippers Remoting ClassesというFlash 9からAMFを使ったRPC呼び出しを行うクラスを作ったけど、これはflash.net.NetConnectionを使って実装していた。NetConnectionクラスを使えばAMFプロトコル自体は全く意識しなくてもいいのだが、AMFに含まれる細かい情報を扱えないため、Django AMFの独自機能を実装する上で障害になっていた。
で、ここ数日ちょっと余裕ができたので、AMF <-> ByteArrayを相互変換できるようにし、flash.net.URLLoaderを使ってサーバとやりとりするように作り直している。ByteArrayクラス自体にオブジェクトのAMFシリアラズ/ディシリアライズメソッドが備わっているので、AMFメッセージの構造さえ知っていれば比較的容易に実装できる。URLLoaderクラスを使えばProgressイベントが取れるため、前述の機能が実現できるようになった。

サーバから受け取ったAMFメッセージのバイナリデータを自分でパースするので、NetConnectionクラスやFlexのRemoteObjectクラスでは取れなかったAMFのヘッダを自在に扱うことができるようにもなった。
このAMFヘッダをHTTPヘッダのように扱えば、前に考えていたキャッシュ的な機能を実現できるかも知れない。

Posted by otsuka : 19:55 | Comment (0) | Trackback (0)

Flash | FlashでHTTPステータス

HTTPStatusEvent - Adobe Flex™ 2 リファレンスガイド

HTTP ステータスコードをプレーヤーに渡すことができないブラウザで実行される Flash Player プラグインでは、常に値 0 が生成されます。該当するブラウザには、Netscape、Mozilla、Safari、Opera、および Internet Explorer for the Macintosh があります。

URLLoaderクラスでサーバから受け取ったレスポンスのHTTPステータスコードを参照しようとしたら、常にゼロ。どういうわけだ?と思ってAPIドキュメントを調べてみたら、ちゃんと書いてありました。
って、Win IE以外の主要ブラウザではHTTPステータス取得できないじゃん。HTTPステータス取得は諦めるしかないか。

URLLoaderじゃなくてSocket使ってHTTPプロトコルを実装すればできるのかな? JavaのCommons HTTPClientやCommons NetみたいなライブラリはまだAS3では存在しない?

Posted by otsuka : 02:06 | Comment (2) | Trackback (0)

2007年9月12日

Flash | AMF Predefined Headers

Predefined headers | Open Source Flash

このページは見過ごしていた。あとRemoting EnvelopeDebug informationのページも。
これらのページを読んでDjango AMFではいくつかAMFの解釈を間違ってた部分があることに気付いたので、直してリリースした。

定義済みヘッダのうち、RequestPersistentHeaderは独自機能を実装する上で重要そう。「This is implemented in mx.remoting.Connection.」とあるけど、flash.net.NetConnectionでもサポートされているのかどうか調べなければ。

DjangoではURLにくっつけるタイプのセッションIDをサポートしていないのでDjango AMFでAppendToGatewayUrlヘッダは意味がなさそうだけど、AMFPHPはこのヘッダの機能を使ってたんだなということが分かった。

ReplaceGatewayUrlヘッダは、ゲートウェイURLのリダイレクト機能ってことか。何かに使えるかな?

Posted by otsuka : 00:31 | Comment (0) | Trackback (0)

2007年9月10日

Flash | Hessian

Hessian now available to Adobe Flash developers

もうWatchしている人は相当少なくなったであろうCaucho Technology。Scottというエンジニアがほぼ1人でServletコンテナのResinを開発し、勢い余ってEJBやらORMやらを独自仕様でスピーディーに開発しちゃって、果てはPHPまでResinに載っけちゃうもう何でもアリな有様。Tomcatがバージョン3とか4とかいまいちな感じの時は、僕もResinのライセンス買って使っていました。独自仕様とは言っても、いつもNice!な感じで機能を拡張していて僕は大好きでした。オープンソースでありながら有償というスタイルも好きでした。しかしながら、今はもう使ってないのですが。
Resinについては、過去に一度WEB+DB PRESSにResin記事を書いているおかもと氏のWikiにまとめられてます。

そんな時代を突っ走るCauchoからFlash絡みのプレスリリースが。HessianとはWebサービスのバイナリプロトコルで、簡単に言っちゃえばAMFのようなもの。結構昔からHessianの名前だけは聞いていたので、もう仕様としては落ち着いたものになっていると思われます。AMFと比べて効率がいいのかどうか分かりませんが、いろんな言語での実装が揃っているので遊んでみると楽しいかも知れません。ざっとAPIを見たところ、認証に関するものがないのでお堅いアプリへの実戦投入は難しいかも知れません。

Python実装もあるので、余裕がある時にDjango AMFをHessianに置き換えて、Flashと連携させてみたいと思います。

[追記]
と思って少しいじってみたけど、Pythonのhessianlib.pyはクライアント用のライブラリだった。メッセージヘッダやメソッド名の抽出などサーバ側で必要となるパース処理は自分で作らなければならない。面倒。

Posted by otsuka : 17:10 | Comment (0) | Trackback (0)

2007年9月 7日

Flash | Flash Media Server 3

Flashcomguru.com: Adobe Announces Flash Media Server 3

詳しくはこっちのPDFに。FM3FAQ.pdf

H.264のサポートや、RTMPEプロトコル導入によるコンテンツプロテクション等、実直なアップデート。Serverside ActionScriptの拡張がなかったのは残念。

「Mobile video delivery to Flash Lite 3」という項目があったけど、FMS3ではなくFlash LiteがRTMPプロトコルに対応しただけじゃないのか? Flash Lite 3搭載携帯とか登場したら、オンデマンドビデオサービスを自由に作れてしまうわけだ。

気になった機能は「Server-side re-Publish」と、次のリダイレクト機能。

Will FMS3 support a solution similar to HTTP-302 redirect?
Yes, this will be a new feature of FMS3 to support advanced load balancing and smart redirection.
この機能はどうやって実現されているのだろう。FMS3というよりFlash Player側の拡張のように思うけど。Red5やWowzaでも対応して欲しい。

Posted by otsuka : 07:11 | Comment (0) | Trackback (0)

2007年9月 4日

Flash, Python | Django与Flash的結合

DjangoFlash - Woodpecker.org.cn Wiki for CPUG

via 常山日記

Django AMFについて中国語で書かれたページ。

Posted by otsuka : 15:51 | Comment (0) | Trackback (0)

2007年8月31日

Flash, Python | Django AMF 0.5.1でやること

1番目のはもう実装済み。3番目のgettextモジュールは使ったことがないので、これから調べてみないと。

あー、なるほど。Djangoで国際化機能がサポートされているのか。

追記 2007/9/3
全部対応した。しばらく様子を見てリリース。

Posted by otsuka : 16:40 | Comment (0) | Trackback (0)

2007年8月30日

Flash, Python | Django AMF 0.5リリース

先日告知した機能を実装したDjango AMF 0.5をリリースしました。

AMFのRPCサービスメソッドを実行するだけなら、Flash/Flexよりも簡単にできる手段だと思います。S2Flex2AMFPHPWebORBRubyAMF、そして純正Flash Remoting MXと、サーバ側のプロダクトが何であろうと関係はありません。ちゃちゃっとネットワーク越しにサービスメソッドを実行したい場合に便利かも知れませんよと。

まずは日本語ドキュメントは書きました。
Django AMF
amf.RemotingServiceクラス リファレンス

Posted by otsuka : 04:16 | Comment (0) | Trackback (0)

2007年8月23日

Flash | Wowza Media Server

Wowza Media Systems

Adobeの元社員が立ち上げた会社が開発しているFlash Media Serversの代替プロダクト。FMSに比べて圧倒的に安い価格。5,000ドルで無制限ライセンスが買える。

オープンソースのRed5と同様にJavaで作られている。なのでサーバサイドのプログラムもServerside ActionScriptではなく、Javaで開発できる。
まだフリー版も試していないけど、Red5よりも安定しているならお金払ってでもこっちの方がいいかも知れない。有償製品なのでサポートもあるし。

今後Red5と共に追っていこう。

Posted by otsuka : 12:36 | Comment (0) | Trackback (0)

2007年7月16日

Flash | 覚え方

trick7.com blog: Flashやってる人があやふやにしがちなこと

listener を書く時に、頭の中でリステナーと思い描く人(3)、口に出しちゃう人(1)

あー、コレすごく分かる。僕も「リステナー」と呟きながらタイプします。

中学校の時、消しゴムのeraserを「イラセアー」と覚えてました。「影」という漢字は、先生が黒板に書いた時にクラスの誰かが「ひきょうさん(日京三)」と叫んだせいで、今でもそう覚えてます。太陽が昇る方角はバカボンの歌の逆と覚えているため、いちいち冒頭の歌詞を歌わなければ思い出せません。

Posted by otsuka : 15:56 | Comment (0) | Trackback (0)

2007年6月18日

Flash | WebORB for PHP 2.0

WebORB Blog: WebORB for PHP status update

WebORB for PHP 2.0が今月末にリリース予定だそう。.Net版WebORBと同様のサービスブラウザ等の管理コンソールを搭載してくるらしい。

Django AMFでも管理画面的なものは作りたいが、さてどうしよう。
それよりもRTMP経由でのRPCをパースする実装を作りたいなあ。

Posted by otsuka : 13:11 | Comment (0) | Trackback (0)

2007年6月12日

Flash | Red5 for Flash Player 9 Update 3

Changeset 2092 - Red5 - Trac

Flex 3 betaと合わせてリリースされたFlash Player betaにアップグレードしたらRed5にRTMPで接続できなくなってしまった。という報告が昨夜MLに流れ、さあ大変ということになったのだが、今朝には問題がFixしていた。

というわけで、今はRed5の0.6.1よりもtrunkを使った方がいいです。
ついでにRemotingを使うんなら僕のパッチを当てた方がいいです。というか当てないとまともに動かないと思うんだけどなあ。僕の環境が何かおかしいのか?

Posted by otsuka : 17:03 | Comment (0) | Trackback (0)

2007年5月29日

Flash | Red5評価中

現在あるプロジェクトで使うためにRed5を評価中。特に問題なければ、FMSではなくRed5を使う予定。
が、Red5のRemoting周り、AMFのデコードで致命的な問題を発見。Red5の該当箇所のコードをDjango AMFのコードと比較し、AMFのデコードで間違ってそうな箇所を捜す。幸いバグが分かって簡単に直すことができた。

バグ報告してパッチを送ったら、即効で取り込まれた。直面したバグをとりあえず回避するコードだったんだけど、ちゃんとチェックしてるんだろうかと心配になる程の早さだった。
http://jira.red5.org/browse/APPSERVER-146
http://jira.red5.org/browse/APPSERVER-147

勝手な想像だけど、Red5はRTMP実装と比較してAMF実装にはそんなに力を入れてないと思うので、まだAMF周りにはバグはありそう。

案の定(?)、上記のパッチだけではAMFのバグが修正しきれていなかった。
なのでもう1つパッチを送付したが、こいつのコードは怪しいと思われたのか今度はなかなか取り込まれない。
http://jira.red5.org/browse/APPSERVER-151

Posted by otsuka : 00:54 | Comment (0) | Trackback (0)

2007年5月16日

Flash | Flexでメール投稿フォームを作成したい

Flexでメール投稿フォームを作成したい | フォーラム - Flex User Group

ここにもコメントをくださっていたsuamaさんによる別ドメイン下のリモートSMTPサーバを使用する方法についての投稿。
crossdomain.xmlで許可していても25番ポートを使おうとするとエラーになるそうです。僕も「crossdomain.xmlで指定すれば、1024番以下のポートでもSocket通信が可能だと思っていた」ので意外でした。

Posted by otsuka : 21:24 | Comment (0) | Trackback (0)

Flash | Custom Component for FlashCS3

AKABANA - Custom Component for FlashCS3

arkwさんによるFlexで作ったSWCライブラリをFlash CS3で使う方法の解説記事です。

なるほど、Componentsディレクトリの下に任意のディレクトリを作れば、それがコンポーネントパネルのツリー表示フォルダとして認識されるんですね。知りませんでした。

ライブラリやコンポーネントパネルからコンポーネントをステージ上にドラッグ&ドロップした時に、(Flash 8用とかの)Adobe純正Remotingコンポーネントのようにアイコンを表示したいのだけど、それが分からないんですよね。あと、コンポーネントインスペクタからプロパティを設定できるようにするには、どうすればいいのか。

と書いておけば、また解説していただけるのではないかと淡い期待を抱いてます。「明日やろうは馬鹿野郎」なので、きっとすぐに。

Posted by otsuka : 17:39 | Comment (4) | Trackback (0)

2007年5月15日

Flash | ASファイルをソースパスルートに配置

AKABANA - global function like AS2 for AS3

package宣言なしでルートに配置したASファイルの関数はimport宣言ナシ、つまりトップレベル関数として使えるらしい。
裏技っぽいけど、理論的に考えるとそうなりますな。

Posted by otsuka : 19:10 | Comment (0) | Trackback (0)

2007年5月12日

Flash | Remoting Classes for Flash CS3 ActionScript 3.0

Flash CS3用のRemotingコンポーネントはまだ出ていないけど、それっぽいクラスライブラリをFlex2用に作っていたので、Flash CS3で動くようにmxパッケージのクラスを使わないように書き直しました。Flash CS3でもFlex 2でも使えます。

Strippers Remoting Classes 1.0-beta

これでFlash CS3からもDjango AMFを使えますよ。

使い方は、Flash8までのFlash Remotingコンポーネントと同じような感じです。

import jp.strippers.remoting.*;
import flash.net.Responder;

var gatewayUrl:String = "http://127.0.0.1/gateway/";
var serviceName:String = "addressBookService";

var serviceFactory:ServiceFactory = ServiceFactory.getInstance(gatewayUrl);
var service:RemotingService = serviceFactory.getService(serviceName);
// service.connection.setCredentials("username", "password"); 認証が必要な場合
var pc:PendingCall = service.getCards(); // リモーティングメソッドの呼び出し
pc.responder = new Responder(onResult, onFault);

/** サーバからの戻り値が引数に渡されます。 */
function onResult(results:Array):void {
  // 結果を処理する
}

function onFault(fault:Object):void {
  trace(fault.description);
}

コンポーネントとしてSWC化したいのだけど、Flash用のコンポーネントの作り方が分かりません。。。

Posted by otsuka : 01:28 | Comment (0) | Trackback (0)

2007年5月10日

Flash | ozacc-mail library for AS3 1.0-beta

ozacc-mail library for AS3 1.0-beta

こんなところでもちょいと触れられているOML for AS3ですが、β版をリリースするのをすっかり忘れていました。POPサーバからのメール受信機能もサポートしました。

コード例

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:oml="http://www.ozacc.com/library/oml" layout="absolute">
  <mx:Script>
    <![CDATA[
    private function receive():void {
      var delete:Boolean = false;
      fetchMail.getMails(delete);
    }

    private function onMailReceived(event:MailEvent):void {
      trace(e.mail); // 受信したメールをトレース
    }
    ]]>
  </mx:Script>

  <oml:FetchMail id="fetchMail" host="POPサーバ名" username="ユーザ名" password="パスワード" mailReceived="onMailReceived" />

  <mx:Button label="受信" click="receive()" />
</mx:Application>

MailクラスのAPIも少し変わっています。α版ではJava風にMail#setForm()とかgetFrom()とかアクセスメソッドを用意してたけど、ActionScript風に

var mail:Mail = new Mail();
mail.from = new InternetAddress("amechang@example.com", "あめちゃん");
mail.subject = "エサの件";
mail.text = "もっと食べたい。";
というようにプロパティアクセスの形式にしました。


せっかくなので、ちょっと高度なActionScript3講座。メールヘッダに含まれるBエンコードされた文字列をデコードするメソッドを解説します。

public static function bDecode(str:String):String {
  return str.replace(/=\?([\w\-]+)\?B\?([a-zA-Z0-9=\+]+)\?=/ig, decodeBase64);
}
		
private static function decodeBase64():String {
  var decoder:Base64Decoder = new Base64Decoder();
  decoder.decode(arguments[2]);
  var ba:ByteArray = decoder.flush();
  return ba.readMultiByte(ba.length, arguments[1]);
}
このコードで解説すべき点は二つ。

1つ目は、文字列置換の方法。ここではbDecode()メソッドの中のString#replace()メソッドに正規表現でパターンを指定し、第二引数にdecodeBase64関数を指定しています。パターンに一致した文字列はこの関数からの戻り値に置換されます。
またこの関数の中では正規表現パターンでマッチした文字列がグループ毎に納められた配列であるargumentsグローバル変数にアクセスできます。
正規表現パターンの最後に指定しているフラグも重要です。これは文字列の中に複数一致するパターンが表れたら、その一致する文字列すべてをdecodeBase64で処理するということです。

2つ目。Base64文字列のデコード方法。Base64Decoder#decode("Base64文字列")でBase64Decoderインスタンスの中にデコードされた文字列ができました。それをflush()でByteArrayとして取得し、ByteArray#readMultiByte(ba.length, "文字コード")でFlashPlayerが扱えるUTF8の文字列に変換しています。

メールヘッダではBエンコードの他にQエンコードというエンコード方式も希に使われます。今ではほとんど見かけませんが。
OML for AS3ではQデコードができません。QデコードのAS3コード書ける人がいたら、是非教えてください。

Posted by otsuka : 00:11 | Comment (0) | Trackback (0)

2007年4月28日

Flash | ネームスペースを使ったイベント監視

川o・-・)<2nd life - ActionScript3 でネームスペース使ったキーイベント監視ユーティリティ作りました

via BeInteractive!

スバラシイですね。ネームスペースを使ったイベントハンドラー関数定義のやり方は目から鱗。ちょっと感動しました。
proxyでしかネームスペースを使ったことないので、AS3のネームスペースちゃんと理解してないんだけど、今作っているライブラリもこの方式が適用できないか考えてみよう。

FlexBuilderのライブラリプロジェクトはやっぱりちょっと不便ですよね。僕もyossyさんと同じく、ライブラリプロジェクトとテスト用のプロジェクトの二本立てです。

Posted by otsuka : 14:53 | Comment (0) | Trackback (0)

2007年4月23日

Flash | FlexBuilder with Java 6

前にJava 6でmxmlcのコンパイルが速くなってると書いたけど、mxmlcとFlexBuilderのJVM設定は別だということに先日気がついた。

FlexBuilder(スタンドアロン版)をインストールしている場合、インストール先/Flex Builder 2/Flex SDK 2/bin/jvm.config にmxmlcが使うJVMの設定を行うファイルがある。デフォルトではJAVA_HOME環境変数を見るので、JAVA_HOMEがJava 6を指していればいい。

FlexBuilderに付属しているJREのバージョンは1.4。これを変更するには、インストール先/Flex Builder 2/FlexBuilder.ini

-vm C:\path\to\Java\jdk1.6.0\jre\bin\javaw.exe
という行を加えればよい。FlexBuilderの起動が速くなりました。

Posted by otsuka : 22:51 | Comment (0) | Trackback (0)

2007年4月18日

Flash | Flash CS3のAPIリファレンス

ActionScript 3.0 Language and Components Reference

Flash CS3のAPIリファレンス。やっぱりmxパッケージは入らないわけだ。

Posted by otsuka : 12:44 | Comment (0) | Trackback (0)

2007年4月 4日

Flash, Python | Django AMF 0.4.1

一日でバージョンアップ。認証システムとしてDjangoのユーザ認証機能をそのまま使える関数を追加しました。かなりオシャレな仕上がりになりました。 http://sourceforge.jp/projects/djangoamf/

ActionScript側でDjangoユーザアカウントのユーザ名とパスワードをセットして、パーミッション制限が掛かっているRPCメソッドを呼び出せば、勝手に認証・ログインを行い、そのセッションクッキーをセットしてくれます。ユーザがDjangoのスーパーユーザーならば、存在するすべてのパーミッションに対して有効になります。
自分で認証の処理とか書かなくていいので、この楽チンっぷりはやばいよ。

・ActionScript
var service:RemotingService = new RemotingService();
# アクセスユーザのユーザ名とパスワードを設定します。
service.setCredentials("username", "password");
service.do_something();
・settings.py
# 設定ファイルに次の一行を加える。
AMF_AUTH_FUNC = 'amf.django.authenticate'
・sample/view.py
from amf.django import permission_required

# このview関数を実行するのに必要なパーミッションを
# デコレータの引数に指定します。
@permission_required('add_user')
def do_something(request):
    return 'This function can be invoked by authenticated user.'
ここまでやったら @login_required デコレータもサポートしたいなあ。
Posted by otsuka : 17:10 | Comment (0) | Trackback (0)

2007年4月 3日

Flash, Python | Django AMF 0.4

先月末からいくつかリリースが続いてますが、今度はDjango AMFの新バージョン。ようやく認証システムを実装しました。これで実際のお仕事にも使っていただけると思います。
http://sourceforge.jp/projects/djangoamf/

Djangoのユーザ認証システムをDjango AMFでもそのまま使おうかと思ったのだけど、もっと柔軟にできるような仕組みにしました。したつもりです。
まだドキュメントをWikiにまとめてないのだけど、コードにするとこんな感じ。

・ActionScript
var service:RemotingService = new RemotingService();
# アクセスユーザのユーザ名とパスワードを設定します。
service.setCredentials("username", "password");
service.do_something();
・settings.py
# 設定ファイルにアクセスユーザのパーミッションを取得する
# 関数を指定します。文字列または関数オブジェクト。
AMF_AUTH_FUNC = 'sample.views._get_user_perms'
・sample/view.py
from amf.django import permission_required

# このview関数を実行するのに必要なパーミッションを
# デコレータの引数に指定します。
@permission_required('admin')
def do_something(request):
    return 'This function can be invoked by admin user.'

def _get_user_perms(request, username, password):
    """
    settings.pyで指定した関数。Django AMFが認証時に実行します。
    指定されたusernameとpasswordから、ユーザが所持している
    パーミッション(ロール)の文字列を返します。
    複数パーミッションを所持している場合はリストかタプルで返します。
    """
    if username == 'username' and password == 'password':
        return 'admin'
    return None

認証に失敗するとFlashにはFaultEventが返ります。FaultEvent#typeの値は「AMFAuthenticatinError」、#codeの値は「401」です。

次のバージョンではDjangoの認証システムをそのまま使える便利関数を提供する予定です。

Posted by otsuka : 17:18 | Comment (0) | Trackback (0)

2007年3月30日

Flash | ozacc-mail library for AS3 1.0-alpha

ozacc-mail library for AS3 1.0-alpha

結局テキストメールの送信のみをサポートしてリリース。ソースはまた後日。とりあえずswcファイルだけ。

ActionScriptのコード例

// SendMailオブジェクトの生成
var sendMail:SendMailImpl = new SendMailImpl("SMTPサーバ名");
sendMail.connectionTimeout = 5000;

// イベントリスナーの登録
sendMail.addEventListener(MailEvent.MAIL_SENT, function(e:MailEvent):void {
  Alert.show("メールを送信しました。");
  trace(e.mail); // 送信したメールを取得
});
sendMail.addEventListener(MailEvent.MAIL_ERROR, function(e:MailEvent):void {
  Alert.show("何かエラー");
  trace(e.mail); // 送信できなかったメールを取得
});
sendMail.addEventListener(NetEvent.CONNECTION_TIMEOUT, function(e:NetEvent):void {
  Alert.show("接続タイムアウト");
}

// 送信するメールの作成
var mail:Mail = new Mail();
mail.addTo(new InternetAddress("amechang@example.com", "あめちゃん"));
mail.setFrom(new InternetAddress("aiai@example.com", "アイアイ"));
mail.setSubject("メールの件名");
mail.setText("メールの本文");

// メールの送信
sendMail.send(mail);

MXMLタグでSendMailを定義する場合のコード例

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:oml="http://www.ozacc.com/library/oml" layout="absolute">
  <mx:Script>
    <![CDATA[
    private function send():void {
      var mail:Mail = new Mail();
      // 送信するメールの生成 (省略)

      sendMail.send(mail);
    }

    private function onMailSent(event:MailEvent):void {
      Alert.show("メールを送信しました。");
      trace(e.mail); // 送信したメールを取得
    }

    private function onMailError(event:MailEvent):void {
      Alert.show("何かエラー。");
      trace(e.mail); // 送信できなかったメールを取得
    }
    ]]>
  </mx:Script>

  <oml:SendMail id="sendMail" host="SMTPサーバ名" mailSent="onMailSent" mailError="onMailError" />

  <mx:Button label="送信" click="send()" />
</mx:Application>
Posted by otsuka : 03:09 | Comment (2) | Trackback (0)

2007年3月29日

Flash | GUIのmxmlc

Tanablog: mxmlc の GUI 版アプリケーション

スタイルシートだけサクッとコンパイルしたい時とかに便利ですね。まあ、mxmlcの起動は遅いのでサクッとはいかないんですが。

まだリリースされたばかりのバージョン0.1ですが、起動の度にmxmlcのパスを指定しなければいけないのが面倒なので、時期バージョンで対応に期待です。

Posted by otsuka : 23:36 | Comment (2) | Trackback (0)

2007年3月28日

Flash | Apolloでメール

ozacc-mail library for AS3を使ったサンプルアプリケーションをApolloで作ってみました。

OMLの受信機能がまだ完全ではないので、まずは送信フォームだけです。サンプルなので起動の度にSMTPサーバの設定をしなければいけません。SMTP認証には対応していません。
(もしPOPサーバの設定をすることになったら、パスワードとかのデータはどこにどういう形式で保存すべきなんだろう?)

メールの差出人や宛先欄には「amechang@example.com <あめちゃん>」といった具合に「メールアドレス <名前>」のフォーマットで指定できます。メールアドレスだけでも可です。

メールの送信に関しては、Apolloのセキュリティ関係がまだよく分からないけど、自分の環境で試した限りは外のSMTPサーバに繋ぐのも問題ありませんでした。
インストールしたPCに対してファイルアクセスはしませんのでご安心を。

アプリケーションにはオシャレにフランス語で名前を付けました。「Expediteur」と言います。意味はまんまメーラー。何て読むのか分かりませんが、大学の時に第二外国語でフランス語をやっていたトーサキに訊いてみたところ「イクスピディトゥ」みたいな感じでした。合ってるかどうか分かりません。
まだアプリケーションのアイコンはないです。

そんなApolloアプリですが、試してみたい方は以下のURLからインストールを。
Expediteur.air

Posted by otsuka : 17:02 | Comment (0) | Trackback (0)

2007年3月26日

Flash | Spark project

BeInteractive! [Spark project 本格運営開始!]

スバラシイ! さすが未踏プロジェクトです。

AOContainerを早速テストしてみました。ページに掲載されているファーストステップをやっただけですが。SpringやSeasarでおなじみのDIコンテナなので、結果に対して今更物珍しくも何ともないのだけど、ActionScriptで実現できることについてはやはり新鮮です。

ただ、設定XMLがスクリプトの中に入るというのは、違和感を覚えるところ。ただ、この設定を外から読み込もうと思うと、その設定ファイルをどこに置くかという非常に悩ましいことになるので仕方ないんですが。設定スクリプト内で実装クラス宣言をコードに埋め込む必要があるのもあまり動的な感じがせず、これならプログラムでオブジェクトを生成してグローバル領域に置いた連想配列クラスに突っ込んでおいてもいいような気がします。
DIコンテナとしてはRSLを扱えるようにならないと。

と、JavaのDIコンテナに慣れた身としてはつい比較してしまうけど、ASでDIコンテナは個人的には待ってましたと言わんばかりのものなので、AS3Unitと合わせて今後活用してきたいと思います。
OML for AS3を使う上でもDIコンテナがあれば、設定と実行コードを切り分けられるのでいいかも知れない。

Posted by otsuka : 17:22 | Comment (0) | Trackback (1)

Flash | ozacc-mail library for AS3 もうすぐ

今週中にリリース予定。テキストメールの送信はもう出来てるんだけど、受信したメールヘッダの日本語変換処理で引っかかってます。FetchMail(受信)については未完成でも、とりあえず出そうと思います。
Apolloでメーラーが作れちゃいます。SMTPサーバに直接繋ぐので、CGIとか作る必要無しです。

今後は、ファイル添付メールの送信も出来るようにするつもりです。Apolloで導入されたFileや、ByteArrayをそのまま送れるように。

APIはJava版と大体同じものを用意しているので、Java版のOMLを使ったことがある人なら馴染みがあると思います。非同期なので、イベント処理が多少必要になります。

Posted by otsuka : 10:30 | Comment (2) | Trackback (0)

2007年3月19日

Flash | Apollo Runtime ファーストインプレション

Adobe Labs - Apollo

Apollo Runtimeを早速インストールして、サンプルアプリをいくつか実行してみました。
RuntimeもApolloアプリケーションもインストールは楽チンです。アプリケーションはWindowsの場合、C:\Documents and Settings\username\Program Files\Adobeというディレクトリ下にアプリケーション毎にディレクトリが作成されています。アンインストールはコントロールパネルの「プログラムの追加と削除」からできます。
exeファイルがそのまま起動するので、見た目はデスクトップアプリと何ら変わりありません。

Alphaリリース一発目なのでいろいろとあって当然なんですが、今の段階で気付いたネガティブ面。リリースノートを含めドキュメントを何も読んでないですが。

  • Fresh(RSSリーダー)はFlexコンポーネントで作られているのかな? ツリーメニューなどのアニメーションがもっさりでぎこちない。
  • Scoutを使って分かったけど、まだFlashPlayerがApollo内のブラウザに備わってない。
  • 日本語フォントの表示が変。
今後が楽しみであります。

Posted by otsuka : 17:15 | Comment (0) | Trackback (0)

2007年1月31日

Flash | Amfphp 1.9 beta 2

5 1/2 blog � Amfphp 1.9 beta 2 - ridiculously faster

AMF3をサポートしたAMFPHP 1.9の新しいベータ版ではえらく速くなってるらしい。PHPネイティブではなく、Cで書いたAMFのエンコーダとデコーダを使っているとのこと。そしてもう一点、ブラウザがgzip圧縮をサポートしている場合、サーバからの戻りデータを圧縮しているとのこと。

後者の圧縮についてはDjango AMFの場合、django.middleware.gzip.GZipMiddlewareをMiddleware設定に加えるだけで実現できるので、Django AMF自体では何もする必要はない。が、ドキュメントには記載しておいた方がよさそう。

Posted by otsuka : 00:22 | Comment (0) | Trackback (0)

2007年1月23日

Flash | 文字列からクラス取得

X-LABO: AS3 パッケージ記述簡略化

flash.utils.getDefinitionByName を用いると 文字列からクラスを取得できるようです。

知らなかった。いろいろと使えそう。

Posted by otsuka : 22:04 | Comment (0) | Trackback (0)

2007年1月10日

Flash | AMFキャッシュ

Flash Remotingによる(AMFを使った)リモートサービスの呼び出しでは、HTTPヘッダによるキャッシュは利用できない。だから、滅多に更新されないデータを返すリモートサービスでも実行する度にサーバとの間でデータのやりとりが発生し、無駄なコストが生じてしまう。この辺りはAjaxでも同じなのかな?

Flashに返すAMFMessageオブジェクトを生成したら、現在日時とリクエストURLやメソッドパラメータをキーにして、オブジェクトをキャッシュする。で、HTTPレスポンスヘッダにLast-Modifiedヘッダを追加する。
FlashPlayerからのリクエストを送るときにHTTPヘッダにIf-Modified-Sinceヘッダを付けてくれるのか分からないけど、もし付けてくれるならその値を取得する。もし付けてくれないならAMFメッセージのヘッダに付けるようにして、その値を取得する。

で、そのリクエスト内容をキャッシュのキーと比較して、キャッシュ内容が更新されていなければ、データは返さず何か特別なレスポンス(AMFのエラーレスポンスを利用してもいいかも)を返す。Flash側はそのレスポンスを受け、以前に取得しているデータを再利用する。
If-Modified-Sinceヘッダがなかったり、キャッシュの内容が新しければ、キャッシュしているAMFMessageオブジェクトを返す。これでDBアクセスなどのコストも減らせるかも知れない。

以上のようなちょっと複雑な処理をサーバサイドのAMF実装とActionScriptのライブラリで吸収し、容易にAMFキャッシュが使えるAPIを提供する。というアイデアが先日浮かんだ。

Posted by otsuka : 18:26 | Comment (0) | Trackback (0)

2007年1月 8日

Flash | ServiceCapture vs Charles

AMF3の実装をやっているとき、HTTPモニターツールのServiceCaptureを使用した。HTTPの通信内容をモニターできるツールはいくつかあるけど、ServiceCaptureはAMFの内容を解析して表示してくれる。AMFの他にもXML、SOAP、JSONにも対応しているとのことなので、Ajaxアプリ開発でも便利そう。

Javaで稼働するのだけど、Java 6を使っていたせいかUIの動作も軽く、AMFやXMLを使用するFlashアプリ開発では今後マストツールになりそう。こちらは使用期間が15日で、1ライセンス35ドル。

ServiceCaptureと同様AMF解析機能付きHTTPモニターツールとして、Charlesというソフトもある(ロゴマークは何故に壺?)。こちらは今日になって初めて使ってみたのだけど、AMFの解析表示がServiceCaptureより詳細だった。また、レスポンスのバイナリデータをHex表示できるので、Charlesを先に使っていればAMF3実装作業がもう少し効率的にできたかも。
Charlesは使用期間が30日で、1ライセンス50ドル。ServiceCaptureと同様にJavaで動作する。使用期間中はやたらとスプラッシュスクリーンが表示されるので、いらつく。

AMFの解析に関して言えば、Charlesの方が高機能。が、普通にFlash/Flexアプリを開発する人にとってはそこまでAMFの詳細が必要になるケースは滅多にないと思う。UIはServiceCaptureの方がシンプルで使いやすかったし、パフォーマンスもServiceCaptureの方が若干いいように感じた。
なので、普段使う(?)にはServiceCaptureがいいと思うのだけど、僕の場合にはCharlesの方がいいのかなあ。ライセンス費が激高ってわけでもないので、両方のライセンスを大人買いするか(会社の経費で)。

Posted by otsuka : 15:52 | Comment (0) | Trackback (0)

2007年1月 7日

Flash | AMF3

Open Source Flash - amf3:index

Django AMFのために、ActionScript 3.0で導入されたAMF3メッセージフォーマットのPython実装を行っていたのだが、ほぼ完了してリリースの見込みが立った。

AMF3の公式な仕様は公開されていないが、バイナリデータを解析した先人が上記のページで公開してくれている。
仕様を読んでもよく分からなかったが、最終的に実装してみてAMF3が効率的にデータを取り扱い、データ量を減らしていることがよく理解できた。

例えば、["アイアイ", "アイアイ"] という同じ文字列を含む配列の場合、["アイアイ", #0] というように既出の文字列は参照番号に置き換えられて出力される。
また、[["アイアイ", "アイアイ"], ["アイアイ", "アイアイ"]] という二次元配列の場合は、[["アイアイ", #0], ##0] と、文字列の参照に加え、既出の配列オブジェクトも参照に置き換えられる。配列型、日付型など数値型以外のデータはオブジェクト参照の対象となる。

さらにクラスオブジェクトの場合は、クラス定義(クラス名、クラスメンバーとして定義されているプロパティ名の配列)が先に出力され、以降に表れる同じクラスのオブジェクトはクラス定義への参照番号とプロパティの値だけが出力される。

このようにAMF3は文字列参照、オブジェクト参照、クラス定義参照を使って重複するデータを省き、データ量や解析コストを減らす仕組みを備えている。シンプルな仕組みなので、AMF3へのシリアライズ(AMF3からのディシリアライズ)にもコストが掛からないよく考えられたフォーマットだ。
お陰で実装するのは面倒だったけど。

Posted by otsuka : 01:04 | Comment (0) | Trackback (0)

2006年12月13日

Flash | Java 5とActionScript 3の構文比較

Flash Player 9/ActionScript3.0/Flex2の勉強日記 - Java 5 と ActionScript 3 の構文比較

こういう比較表は一方のプログラムに慣れ親しんでいると他方の文法を理解するのに便利。

ActionScriptは変数の型宣言が後ろにくる形に未だに慣れないけど、AS3になってE4Xや正規表現が言語に組み込まれ、言語仕様としては今までに僕が使ってきた言語の中では最も気に入ったものになっている。
AS3でサーバサイドのプログラムも書ければなあ。

Posted by otsuka : 01:42 | Comment (0) | Trackback (0)

2006年11月 7日

Flash | AVM組み込みブラウザ

アドビ、モジラにActionScript Virtual Machineのコードを寄贈へ - CNET Japan

Mozilla Foundationでエグゼクティブディレクターを務めるFrank Hecker氏によれば、将来的に同ソフトウェアはFirefoxに組み込まれる計画で、2008年前半には実現される見通しだという。

昔からAdobe(Macromedia)はFlashプラグインではなく、Flashを組み込んだブラウザそのものを作ればいいジャンと思っていたのだけど、それに近いことがFirefoxで実現されるのかも知れない。

Posted by otsuka : 18:12 | Comment (0) | Trackback (0)

2006年10月30日

Flash | FLEXifier

The FLEXifier

via FxUGのフォーラム

MXMLコードを入力するとコンパイルされ、SWFが生成されてその場で実行できる。

Posted by otsuka : 15:56 | Comment (0) | Trackback (0)

2006年10月20日

Flash | Apollo Runtime

akihiro kamijo: Apollo のご紹介

Apolloについて大きな勘違いしていのだけど、ApolloはmProjectorのようにOSネイティブの実行ファイルを作るためのものではなく、Java Virtual Machineみたいな実行環境だったんだね。
いずれApollo2Exeみたいなソフトが登場することでしょう。予言しておきます。

Posted by otsuka : 17:41 | Comment (0) | Trackback (0)

2006年10月16日

Flash | Flexアプリ

Flex2を使って作ったアプリケーションを先週末初めてリリースした。いわゆる管理サイト的なものなので、一般の目には触れないけど。

これをHTML+Ajaxで作れって言われたら、かなりしんどいと言うかやりたくないので、リッチ(?)なU/Iを簡単に実現するのであれば、Flexは有効だと思った。
ただ、標準コンポーネントのモッサリ感というか重さというかその辺りがいまいちなので、軽快な処理を実現したいのであればHTML+Ajaxの方がいいかも知れない。

最初は慣れないのでmain.mxmlに全部のスクリプトを書いてしまってて、途中からこのままじゃイカンと思い、スクリプトを各コンポーネントに分散。AdobeのFlexサンプルサイトのソースを見たりして、開発の後半では勝手が掴めてきて、それなりに綺麗な構造で作れるようになった。少しずつノウハウを溜めていかないとね。

UIコンポーネントを使う場合、スタイルを調整しただけくらいではいかにもFlexで作りました感が出てしまうので、デザインコンシャス(!!)なサイトを作るのであれば、UIコンポーネントやそのスキンを自作しないとダメかな。

Posted by otsuka : 16:22 | Comment (0) | Trackback (0)

2006年10月 2日

Flash | 可変長引数

ステートメント、 キーワード、ディレクティブ - Adobe Flex™ 2 リファレンスガイド

パラメータはカンマ区切りの値のリストを受け付けますが、Array クラスのインスタンスとは異なります。

あるメソッドが... restで受けた引数を一旦Arrayとして保持し、他のメソッドの... rest引数に渡そうとしたのだけど、ダメだってことが分かった。可変長引数とはこういうものなのか。

その後、ふと思いついて可変長配列を引数に取るメソッドをFunction.apply(Object, Array)で実行してみたところ、引数のArrayが自動的に可変長配列に展開されるのか、うまくいった。

Posted by otsuka : 07:59 | Comment (0) | Trackback (0)

2006年9月28日

Flash | Remotingでファイルアップロードしたいのに

Flash 8からFileReferenceクラスを用いてファイルアップロードができるようになったけど、Flash Remoting経由でのアップロードができないため、いつも面倒くさいことになっている。

例えばブログエントリーを画像付きで投稿するとなると、

  1. Remoting経由でタイトルや本文を送信。
  2. サーバでエントリーを保存して、エントリーIDを返す。
  3. AS3の場合、URLRequest.dataにエントリーIDをセットして、ファイルをアップロード。
  4. サーバでファイルを保存。
のざっと4ステップが必要になってしまう。しかも、Remoting用に作っているプログラムの他に、ファイルアップロードのPOSTリクエストを受け付けるプログラムを作らなければいけない。

セキュリティ確保のために、FileReferenceの用途が限定され過ぎてるんだよなあ。FileReferenceにdataプロパティ(選択したファイルのバイナリデータ)とpathプロパティ(選択したファイルのローカルファイルパス)があれば便利になるのに。
例えば、ローカルファイルにアクセスしようとした場合、都度確認を求めるダイアログが出て、ユーザに選択を委ねるようにすればいいんじゃないかな。怪しいサイトの場合は許可しなければいい。この仕組みがないと、勝手にPC上のファイルが怪しいサイトにアップロードされてしまうから。

Apolloではきっとローカルファイルへのアクセスができるようになるんだろうけど。

あとさ、FileReference.browse()で出てくるファイル選択ダイアログがOS標準のものと違って使いにくいよね。せめてダイアログサイズを可変にして欲しい。今のじゃ小さくて、ディレクトリの中のファイルを探すのが大変。

Posted by otsuka : 16:36 | Comment (0) | Trackback (0)

2006年9月 7日

Flash | Flex 2 with AMFPHP

既存のPHP WebアプリからAMF0でやりとりをするFlexプログラムを作成中。いくつか学んだことをメモ。

AMF0でAMFPHPを使用するには、

NetConnection#objectEncoding = ObjectEncoding.AMF0
を指定して、サーバに接続する。で、「サービスクラス.メソッド名」、Responderインスタンス、サービスメソッドに渡す引数をいくつでも、の3つ引数を NetConnection#call() メソッドに渡す。

Flashの

Connection#setCredentials(username, password)
に直接該当するメソッドはないが、
NetConnection#addHeader("Credentials", false, {userid: username, password: password})
を呼べばOK。

Responderインスタンスで指定した2つのコールバック関数の引数は、Flashだと ResultEventFaultEvent だったが、Flexの場合はサーバからの返り値がそのまま渡される。

AMFPHPが_explicitType という名前で返している型情報がFlexだと取得できない。なくなっている。

Flex2とAMF0 とAMFPHP : nod::ぶろぐ::RIA::Flash/Flex/Ajax

Flex2.0当初(アルファ版?)の頃は、AMF0で接続すると、JavaからAS3に変換する際に型情報が失われるということがありました。(Release版である現在のバージョンのものはできるそうです。

とあるので、型情報を取得する方法があるのかも知れない。

Posted by otsuka : 23:34 | Comment (0) | Trackback (0)

Flash | Embed画像のスムーズリサイズ

Adobe Consulting: Enable Smoothing on Images for scaling in Flex 2

via Flex Code Modeler

MEMO。

Posted by otsuka : 14:59 | Comment (0) | Trackback (0)

2006年9月 6日

Flash | Flex embedタグ

AKABANA - embedタグ②

[Embed(source='test.xml', mimeType='application/octet-stream')]
private static const Xml:Class;

このようにすれば、バイナリデータを埋めれるみたいです。
そして、Xmlというクラスは、ByteArray型を継承したクラスになるみたいです。

MEMO。

Posted by otsuka : 01:50 | Comment (0) | Trackback (0)

2006年9月 5日

Flash | FlashLite2.0対応携帯

あれれ?どうやらauの秋端末からFlashLite2.0対応っぽい (CODE THE FUTURE -未来をデザインせよ-)

FlashLite2.0対応携帯がようやくAUから。これで大抵のFlashアプリが携帯で動かせるようになるはず。でも、XMLのパースなんかを携帯のCPUにやらせて大丈夫なのかな? すぐにバッテリーがなくなりそう。

P702IDを買ったばかりだけど、DoCoMoが903でFlashLite2.0に対応しなかったら、AUに乗り換えてもいいかな。

Posted by otsuka : 12:09 | Comment (0) | Trackback (0)

Flash | Flex 2 日本語ドキュメント

Adobe - Flex : Flex ドキュメンテーション

日本語ドキュメントがアップされてた。気付かなかった。

Flex Builderの発売日が9月下旬に延期されてた。

Posted by otsuka : 11:25 | Comment (0) | Trackback (0)

2006年9月 2日

Flash | Flashでmod_deflate圧縮コンテンツを受け取れない 2

先日、IE上のFlashでmod_deflate圧縮が掛かったXMLを読み込めないというエントリーを書いたけど、ようやく原因が分かった。

Apacheからのレスポンスヘッダに「Content-Encoding: gzip」ヘッダと「Cache-Control: no-cache」ヘッダが含まれているとこの現象が発生した。XMLコンテンツをキャッシュさせないためにこのヘッダを入れていたのだけど、外してみたら解決した。
他にブラウザキャッシュを抑制するHTTPヘッダに「Pragma」と「Expires」があるが、これらは入っていても問題なかった。

Cache-Controlヘッダがないとプロキシでキャッシュされてしまうのかな? でもExpriresヘッダで過去日時を指定しておけば実質的にキャッシュされない? プロキシ依存なのかも知れないけど、この辺の挙動がよく分からない。

Posted by otsuka : 02:26 | Comment (0) | Trackback (0)

2006年8月21日

Flash | 同一のDisplayObjectインスタンスは複数同時に表示できない

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
  <![CDATA[
    import mx.controls.Label;
    public function init():void {
      var l:Label = new Label();
      l.text = "text";
      box.addChild(l);
      box.addChild(l); // RangeError: Error #2006: 指定したインデックスが境界外です。
    }
  ]]>
</mx:Script>
  <mx:VBox id="box" />
</mx:Application>
Flexでこのようなコードを書くと、boxの中に2つの「text」が縦に並びそうだけど、実際にはランタイムエラーが発生する。「インデックスが境界外」って、インデックスは指定してないのに、とハマってしまった。
その後、いろいろ実験してみて、DisplayObjectContainerには同一インスタンスを2つ以上追加できないようになっていることが分かった。よくよく調べてみると、
Class DisplayObjectContainer - addChild() method
If you add a child object that already has a different display object container as a parent, the object is removed from the child list of the other display object container.
と、ドキュメントに出ていた。
つまり、DisplayObjectContainerに同一インタンスの重複登録ができないのではなく、登録される側のDisplayObjectが親(所属)コンテナを一つしか持てないということだった。納得。

だけど、例えば同じ画像を複数表示したい場合は、Imageオブジェクトを複数作らないといけない。clone()メソッドを実装したサブクラスを作ってしまえばいいと思うのだけど、プロパティを全部コピーするコードを書くのが面倒。BeanUtils#copyProperties(Object, Object)的なライブラリはないかな?
Posted by otsuka : 22:56 | Comment (0) | Trackback (0)

Flash | Flex内にiframe埋め込み

Deitte.com: Finally Updated: Embedding HTML in a Flex application using an IFrame

via Flex Code Modeler

これは使えそう。

Posted by otsuka : 17:01 | Comment (0) | Trackback (0)

Flash | ResizeEffectの基点

Resize - Adobe Flex 2 Language Reference

Flex2のResizeEffectクラスには、リサイズの基点を指定するためのプロパティがないんだな。常にDisplayObjectの左上を基点に拡大縮小が行われてしまう。RotateEffectクラスの方にはoriginX、originYプロパティで基点を指定できるのに。
サブクラスを作ってプロパティを加えるか。mxパッケージのソースってどこかにインストールされてるのか?

Posted by otsuka : 16:30 | Comment (0) | Trackback (0)

2006年8月18日

Flash | Flashでmod_deflate圧縮コンテンツを受け取れない

FlashからXMLを取得する際、Apacheがmod_deflateでXMLを圧縮している場合に、IEだと正常に動作しない症状に悩まされている。mod_deflateを外せばちゃんと動くし、mod_deflateが有効な場合でもFirefoxだと問題なく動作し、またIEでも生のXMLを取得する分には問題ない。

IEとFlashPlayer間でXMLを受け渡しするときに何らか問題が発生していると推測しているのだけど、mod_deflateで圧縮されたコンテンツの解凍はブラウザが行い、解凍されたコンテンツがFlashPlayer Pluginに渡されているはずだよね? なら、mod_deflateの有無に関わらずFlashPlayerは正常にXMLを読み込めていいはずなのだが。
う~む・・・

Posted by otsuka : 20:24 | Comment (0) | Trackback (0)

2006年8月11日

Flash | FXT

fxt - Google Code

via Flex Coder

MEMO。

Posted by otsuka : 11:50 | Comment (0) | Trackback (0)

2006年8月 7日

Flash | Flex Builder体験版期限切れ

困ったな。Flex Builderに慣れてしまうと、テキストエディタとSDKだけで開発するのはやっぱり面倒だ。早く日本語版が発売されないかな。

Posted by otsuka : 18:41 | Comment (0) | Trackback (0)

2006年7月26日

Flash | FDS2 Express 利用制限

akihiro kamijo: Flex Data Services 2.0 Express

MEMO。

Posted by otsuka : 19:45 | Comment (0) | Trackback (0)

2006年7月19日

Flash | AS3 メタデータの使い方が分からない

AS3ではメタデータが使えるらしいのだけど、その使い方が分からない。「Programming ActionScript 3.0」にもメタデータの文法的なことについては何も載っておらず、[Embed]メタタグが突然出てくるだけ。

nodさんのエントリーを参考に、あるクラスの中で
[ArrayElementType("jp.strippers.mail.InternetAddress")]
private var toAddresses:Array;

public function addTo(address:InternetAddress):void {
  toAddresses.push("stringだよ");
}
と、要素の型をInternetAddressに指定したつもりの配列にStringを突っ込むよう書いてみたけど、コンパイルエラーは起きなかったし、実行時にもこの部分ではエラーは発生しなかった。

MXMLでこのスクリプトを使用するときにだけ意味があるのかな?
Posted by otsuka : 17:43 | Comment (2) | Trackback (0)

Flash | AS3 メールヘッダをエンコード

できた!
package jp.strippers.mail {
  
  import flash.utils.ByteArray;
  import mx.utils.Base64Encoder;
  
  public class MailUtil {
    
    private static const B_ENCODE_PREFIX:String = "=?ISO-2022-JP?B?";
    private static const B_ENCODE_SUFIX:String = "?=";
    private static const DEFAULT_CHARSET:String = "iso-2022-jp";
    
    public static function encodeHeader(str:String):String {
      var sb:String = new String();
      var nonAscii:String = new String();
      for (var i:uint = 0; i < str.length; i++) {
        var charCode:Number = str.charCodeAt(i);
        if (0x20 <= charCode && charCode <= 0x7e) {
          if (nonAscii.length > 0) {
            sb += bEncode(nonAscii);
            nonAscii = "";
          }
          sb += String.fromCharCode(charCode);
        } else {
          nonAscii += String.fromCharCode(charCode);
        }
      }
      if (nonAscii.length > 0) {
        sb += bEncode(nonAscii);
      }
      return sb;
    }
    
    public static function bEncode(str:String):String {
      var ba:ByteArray = new ByteArray();
      ba.writeMultiByte(str, DEFAULT_CHARSET);
      var encoder:Base64Encoder = new Base64Encoder();
      encoder.encodeBytes(ba);
      return B_ENCODE_PREFIX + encoder.flush() + B_ENCODE_SUFIX
    }
  }
}
ポイントとしては、ドキュメントにないBase64Encoderクラスを使うところと、文字コードの変換にByteArrayクラスを使っているところ。

ところで、AS3にはJavaで言うところのStringBufferクラスがないので、Stringをバンバン結合するしかないみたい。corelibのソースに var sb:String = new String(); というStringBufferを模しているようなコードが含まれていたので、真似してみた。
追記: 少なくともbeta2まではStringBufferクラスは存在していた様子。akihiro kamijo: StringBuilder クラス
Posted by otsuka : 04:25 | Comment (1) | Trackback (0)

Flash | AS3 Codec

日本語のテキストメールを送るには、次の2つのエンコードが必要になる。
  • 本文の文字コードをJISにする
  • ヘッダ内の日本語をJISにした上で、MIMEエンコードする
前者に関しては、Socketに送るデータをByteArray#writeMultiByte(text, "iso-2022-jp")で生成すれば大丈夫だった。
問題は後者。AS3版のCommonsCodecみたいなユーティリティクラスが公開されてないかな?

Thunderbirdで確認する限り、「Subject: 件名」みたいにMIMEエンコードせずにモロに日本語をヘッダに入れてても問題ないのだけどねえ・・・ Flex2 Language Referenceには何故か載っていないけど、mx.utils.Base64Encoder、mx.utils.Base64Decoderというクラスが存在してた。

で、次のコードで文字列をJISに変換してMIME Bエンコードを施すことができた。
function encode(str:String):String {
  var ba:ByteArray = new ByteArray();
  ba.writeMultiByte(str, "iso-2022-jp");
  var encoder:Base64Encoder = new Base64Encoder();
  encoder.encodeBytes(ba);
  return encoder.flush();
}
戻り値の文字列の前後を「=?ISO-2022-JP?B?」と「"?="」で括ってやればOK。
あとは、文字列の日本語のみにこのエンコードを適用するようにできればヘッダのMIMEエンコードはバッチリだ。
Posted by otsuka : 01:23 | Comment (0) | Trackback (0)

2006年7月18日

Flash | AS3 corelib DateUtil

DateUtil - corelib ActionScript 3 API Reference

メールのDateヘッダで使用する日付フォーマットは、RFC822で定められたものでなければいけないのだけど、このフォーマットでの文字列出力はDateクラスのメソッドでは用意されていない。

面倒くさいけど自分でフォーマット変換クラスを作るかと思っていた矢先、AS3のcorelibでDateUtil#toRFC822()というそのまんまのメソッドが提供されていることを発見。ラッキー。

試してみたら、タイムゾーンは常に「GMT」になった。

Posted by otsuka : 23:31 | Comment (0) | Trackback (0)

Flash | AS3のイベントリスナー

昔、ActionScript 2.0が発表されたときにECMAScriptをそのまま採用したことに不満を書いたことがあるけど、今回のAS3で敢えて標準仕様のDOMイベントモデルにまんま準拠しなかったのがイベントリスナー。

DOMイベントモデルでは、EventListenerインターフェースを実装したクラスのインスタンスをイベントリスナーとして登録しなければいけないけど、AS3でのイベントリスナーはFunctionのみなので、実装の手間を大幅に減らすことができる。
AS2でもいちいちリスナーFunctionを定義したオブジェクトを作って登録しなければいけないクラスがあったので、そういうのがなくし、イベントリスナーのモデルをシンプルにした点は評価したい。


個人的にはエラーイベントのハンドリングで次のような機構が実装されて欲しかった。
例えばErrorEventのサブクラスであるAsyncErrorEventをディスパッチするクラスに、addEventListener(ErrorEvent.ERROR, handleError)とErrorEventタイプを登録しておけば、全てのエラーイベントをキャッチしてくれるような機構。try...catch(e:Error)のイベント版。

Posted by otsuka : 19:58 | Comment (0) | Trackback (0)

Flash | OML for AS3

「Programming ActionScript 3.0」を8割方読み終わった。新機能の実装する練習として、いくつかプログラムを作っているのだけど、ozacc-mail libraryのAS3版を実装中。JavaMailに相当するようなライブラリはないので、AS3のSMTPクライアントはもうどこかで公開されているのかも知れないけど、SMTPクライアントから自作することにした。

Socketクラスを使ったSMTPクライアントはほぼ完成し、きちんとヘッダがセットされていないメールを送れるところまではできた。SMTPサーバに接続する上でのセキュリティを考えると、実践ではなかなか使いづらいだろうけど、サーバプログラム無しでSWFから直接メールを送信できる手軽さはイイ。

ところで、本来SMTPコマンド「HELO」のパラメータとしてSMTPクライアントのFQDNを渡すのだけど、AS3では実行マシンのホスト名を取得する手段がない(と思われる)。Javaで言うところの「InetAddress.getLocalHost().getHostName()」。まあ、この値は所詮テキトーでいいんだけどさ。

Posted by otsuka : 15:33 | Comment (3) | Trackback (0)

2006年6月29日

Flash | ファイルアップロードで2回サーバにアクセス (2回目)

Flash/flexでのファイルアップロードに関するTechNote(FileReference API):nod::ぶろぐ::RIA::Flash/Flex/Ajax

Flash Player 8は10kb以上のファイルをアップロードをする際は、0サイズで一度接続テストをするとのことです。
Flash Playerが2度ファイルアップロード先に指定されたURLにアクセスすることになります。アクション先に指定されたアップロード用プログラムでは、Content-lengthをみて適切に処理する必要があるということですね。

Flash Player 9は、オプション扱いで設定により接続テストをするように変更されたとのこと。
デフォルトはしない(=false)になっているので、設定しないかぎりは2度アクセスされることはないようです。

以前に「ファイルアップロードで2回サーバにアクセス」というエントリーを書いたけど、Flash Player 9で挙動が変わったようです。ややこしい。

Posted by otsuka : 15:33 | Comment (0) | Trackback (0)

2006年6月 1日

Flash | AMFPHP 1.2.5

CHANGELOG 1.2.5

  - Fixed issue with getClassPath
  - Fixed MethodTable not recognizing encapsulated variables
  - Modified ServiceBrowser for private/public methods
  - Fixed bug in class loader for class name finding with packages
  - Added correct typing for AdoDB with MySQL databases
1.2.5で結構メジャーな不具合が修正された。

ストリッパーズでは1.2.1をベースに独自にバグ修正して機能追加したカスタマイズバージョンのAMFPHPを使っているのだけど、新しいバージョンの内容をマージするのが難しくなってきた。

せめてAMFPHPのCVSが公開されていればいいのだけど、今SFで公開されているCVSはもう使われてないみたい。うーん。
Posted by otsuka : 18:13 | Comment (0) | Trackback (0)

2006年4月21日

Flash | ファイルアップロードで2回サーバにアクセス

前回のエントリーに引き続き、FileReferenceクラスでのファイルアップロードの問題。FileReference#upload(url)メソッドを実行すると引数で渡しているURLに何故か二度アクセスしている。一度目はファイルデータは送信しておらず、2度目で送信している。

これに関して検索してみたけど、次のBlog記事しか見つけられなかった。
http://blog.hybrid-style.com/archives/2006/01/filereferenceup.html

困ったことにはならないようにサーバサイドのプログラムを作ればいいだけなんだけど、このFlash(FlashPlayer)の仕様はスッキリしない。フガフガ。

Posted by otsuka : 20:11 | Comment (0) | Trackback (0)

Flash | ファイルアップロードでエラーを通知するには

Flash 8からFileReferenceクラスを使ってファイルのアップロードが出来るようになったけど、初めてこの機能を使うことになり、APIドキュメントを調べてみた。HTMLフォームと同じようなことができる(他のテキストフィールド等の値と一緒にファイルアップロードできる)のかと思っていたら、全く違っていた。FileReference#upload(url)メソッドを使って、ファイルだけを送信する仕組みだった。

例えば画像ファイル付きでブログエントリーをアップしようと思ったら、まずファイル以外のデータをサーバに送信し、サーバでそのデータに対して一意のIDを割り振る。そしてそのIDをFlashに戻し、FlashではそのIDをパラメータとして持つURLに対しファイルをアップロード。サーバではIDからブログエントリーとアップロードされた画像ファイルを関連づけるという手順が必要になる。結構面倒くさい。

今問題になっているのが、サーバでファイルを受け取って、例えば画像ファイルではなかったからNG、みたいな結果をFlashに返したい場合、サーバからの戻り値をFlashで受け取る手段が用意されていないこと。
onCompleteリスナーが用意されているけど、サーバからの戻り値は受け取れない。onHTTPErrorリスナーがあるので、何らかのエラーをサーバから返す場合は404等のHTTPステータスを返すしかなさそうだ。

むぅ、FileReferenceは使いにくいなあ。

FLASH-JP.COMのフォーラムにもありました。
ファイルアップロードのエラー原因を知ることはできるでしょうか

Posted by otsuka : 13:12 | Comment (0) | Trackback (0)

2006年4月10日

Flash | SE|PY with SVN

SE|PY, the editor, the blog [HowTo: Configure SVN on Windows]

最近になってようやくストリッパーズスタッフの間でSubversionを使用してくれるようになった。以前からtracは使っていたので、これでタスクとソースを並行して管理できる。

ActionScriptエディタのSE|PY 1.5系にSVN連携機能(厳密にはTortoiseSVNとの連携)が付いていることに気がついた。SE|PY内のプロジェクトブラウザ(Workspace Panel)で直接ファイルをコミットしたり更新したりできる。日本語もちゃんと通りました。

但し、SE|PYのプロジェクトファイル(sxmlファイル)を編集して保存すると、xmlのエンコーディングが「cp932」と書き出されてしまい、再度そのsxmlファイルを開こうとすると、対応してないエンコーディングエラーになってしまいます。その場合はsxmlファイルを他のエディタで開いて、頭のエンコーディングをutf-8に書き直せばOK。でも面倒だ・・・

Posted by otsuka : 13:44 | Comment (0) | Trackback (0)

2006年4月 6日

Flash | OpenAMF 1.0RC12

OpenAMF 1.0RC12

開発が途絶えていた(?)OpenAMFだけど、1年ぶりのアップデート。永遠にRelease Candidateのままだと思われる。

Posted by otsuka : 13:37 | Comment (0) | Trackback (0)

2006年4月 5日

Flash | AMFPHP

今携わっているプロジェクトでAMFPHPを使っているのだけど、以前に使用したOpenAMFより大分便利。ただ、PHPにはdate型が標準では備わっていないために、AMFPHPではFlash Dateクラス <-> PHP float型の変換が自動ではできない(設定が必要)。そこが不便なので、PEARのDateクラスとFlash Dateクラスを自動変換できるように修正してみた。これで更に便利に。

こういう仕組みはどうよ?とAMFPHPのフォーラムに投げてみたのだけど、あまりにも変な英語すぎるせいか相手にもされない。。。


あと、PDOを使ったS2Daoのライト版みたいなものも作っています。S2Dao.PHP使えばいいんだけどさ。久しぶりのPHPの勉強も兼ねて。
Javaで言うところのThreadLocal的な仕組みを利用するには、$GLOBALSを使うしかないのかな?

Posted by otsuka : 21:42 | Comment (0) | Trackback (0)

2005年11月 2日

Flash | Macromedia Lab日本語ブログ

akihiro kamijo

via thebadtiming.com

MEMO。

Posted by otsuka : 10:27 | Comment (0) | Trackback (0)

2005年10月20日

Flash | FlashVars変数がSWFに渡らない

HTMLからSWFに変数を渡そうとFlashVarsを使っていたのだけど、FirefoxやSafariでは変数がSWFに渡らずundefinedになってしまう。(IEではOK)
で、手探りで解決法を探っていたのだが、<param>や<embed>要素のflashvars属性名が小文字になっていたのを「FlashVars」とキャピタライズしたらうまくいくようになった。

XML(XHTML)的には属性名に大文字が入るのはいいんだっけ?

Posted by otsuka : 11:27 | Comment (2) | Trackback (0)

2005年10月19日

Flash | Macromedia Labs

Labs - Homepage

MEMO。

Posted by otsuka : 00:27 | Comment (0) | Trackback (0)

2005年10月 8日

Flash | プログレッシブJPEG

Macromedia - Flash TechNote : fl0271 - プログレッシブ JPEG 画像を動的に読み込めない

特定のJPEG画像をSWFで表示できないバグに見舞われて、ボスに訊いてみたら、「プログレッシブJPEGが原因じゃない?」と一言。調べてみたら、ズバリその通りでした。こんなのは常識?
上のページではFlash Player 7以下ではNGと書いてあるけど、Flash Player 8では読み込めるのかな? もしそうでも8が普及するまでにはまだ時間掛かりそうなので、サーバ側でプログレッシブJPEGをそうじゃないJPEGに変換するようにしなければ。どうやったらプログレッシブを判定できるのだろう。メタデータとして何か埋め込まれいるのかな。要調査。

Posted by otsuka : 18:37 | Comment (2) | Trackback (0)

2005年10月 6日

Flash | FlashTextEditor

FlashTextEditor.com

via thebadtiming.com

MEMO。

Posted by otsuka : 22:52 | Comment (0) | Trackback (0)

2005年8月31日

Flash | FDTのインストール

fladdict.net blog: FDTのインストール

MEMO。もうEclipseを動かすにはメモリが足りない。。。

Posted by otsuka : 05:25 | Comment (0) | Trackback (0)

2005年7月31日

2005年7月27日

Flash | Xmi2As

darron schall: Xmi2As - ActionScript 2.0 Code Generator

明日早速試してみよう。

Posted by otsuka : 02:30 | Comment (0) | Trackback (0)

2005年7月14日

Flash | Flash / JavaScript Integration Kit

Flash / JavaScript Integration Kit

とりあえずMEMO。

Posted by otsuka : 18:41 | Comment (0) | Trackback (0)

2005年7月13日

Flash | Flash Player 8 ベータ版

Macromedia - Flash Player : Macromedia Flash Player Public Beta

ようやく登場。メインマシンにはインストールしにくいので、ノートPCの方に入れてみようかな。触れ込み通りパフォーマンスが劇的アップしているのか!?

Flash Playerのバージョン切り替えを簡単に行えるユーティリティソフトってないかな。

Posted by otsuka : 10:06 | Comment (2) | Trackback (0)

2005年3月20日

Flash | MTASC | ActionScript2とFlash OOPのすすめ

MTASC | ActionScript2とFlash OOPのすすめ

MEMO。

Posted by otsuka : 17:20 | Comment (0) | Trackback (1)

2005年1月16日

Flash | Maven Repo Search | Flash Edition 1.0-SNAPSHOT

Maven Repo Search | Flash Edition

基本形はできた。Backボタンとか付けちゃうあたり、まだHTMLベースWebアプリの考え方が抜けていない。ラベルを含めてU/Iをもうちょっと作りこまないと。
データグリッドの描画が遅い。コードの改善でパフォーマンスを上げられるのだろうか。もしかすると、この辺は時期Flashプレーヤーに期待するしかないのかも知れない。

このカート機能のおかげで、dependenciesタグの作成は今までより楽になると思う。今までは一個ずつ検索してコピペしていくしかなかったから。Mevenideにこういった機能が含まれればベストなんだけどなあ。

ご意見、ご要望があれば伺います。

Posted by otsuka : 06:34 | Comment (0) | Trackback (0)

2005年1月14日

Flash | データバインディング

Maven Repo Search | Flash Edition

作りかけなんだけどアップしてみた。すごいね、データバインディング機能って。XMLConnectorとDataSet、DataGridを使ってみたんだけど、今までスクリプト書いてたのは何だったんだ!?と衝撃を受けました。僕はVBやDelphiを使ったことがないんだけど、こんな感じで楽にプログラミングができてしまうものなの? もしそうなら、ひたすらコード書くのと比べて生産性は格段に上がるね。

で、上のMaven Repo Search Flash。repositoryカラムで、文字数が多くて冒頭しか表示されてないのだけど、これはWindowsのU/Iみたいにカーソルを合わせればツールチップで値を表示することはできないのでしょうか? ご存知の方がいましたら教えてください。


因みにMaven Repo Searchは、「http://maven.ozacc.com/search?keyword=seasar&type=all&format=xml」のようにformatパラメータに"xml"を指定すればXMLで結果を受け取れます。Eclipse PluginはこのXML結果を使用しています。

Posted by otsuka : 13:45 | Comment (3) | Trackback (0)

2005年1月 7日

Flash | Flash Remoing FaultクラスとJava例外クラス

久しぶりに仕事でFlash Remotingを使った。ちょうど一年ぶり。堅苦しくなったと思っていたFlash Remoting AS2だけど、使ってみると以前のバージョンより勝手がいい。

サーバ側はOpenAMF 1.0 RC10。特にハマった点はなかったけど、mx.rpc.Faultクラスの各プロパティに、Javaの例外クラスのどのプロパティが該当するのか分からなかったので、サクッと調べてみた。


faultcode
"SERVER.PROCESSING"という値。よく分からん。
faultstring
Exception.getMessage()の例外メッセージ
description
例外メッセージ (faultstringと同じ)
detail
例外のスタックトレース
type
例外クラスのFQDN

Posted by otsuka : 11:50 | Comment (0) | Trackback (1)

2005年1月 5日

Flash | XPath4AS2

XPath4AS2

XPath4AS2 is an ActionScript 2 library to add XPath functionality to Flash.

MEMO。

Posted by otsuka : 23:01 | Comment (0) | Trackback (0)

2005年1月 4日

Flash | Central SDKをインストールしたら

Flash MX 2004にCentralのSDK拡張をインストールしたら、Flash起動時に

*** XML 解析エラー ***
C:\Documents and Settings\user\Local Settings\Application Data\Macromedia\Flash MX 2004\ja\Configuration\ActionsPanel\CustomActions\CentralAppAPI.xml:
行 478:tiptext エレメントに folder 属性が見つかりません
<folder index="true" id="Types" name="Types" version="6">
というエラーが出るようになった。ググってもスペイン語と中国語の情報しか出てこず、解決方法がわからない。folder属性を加えたとしても値に何を入れればいいんだ!?

Posted by otsuka : 16:29 | Comment (2) | Trackback (1)

Flash | MTASC - AS2 クラスコンパイラ

Motion-Twin ActionScript2 Compiler

オープンソースのAS2クラスコンパイラ。Flashなしでも、このツールだけあれば、クラスのSWFが生成できる。ワンダフル!!

早速ダウンロードして試してみました。AS2のクラス.asファイルを-headerオプションを付けて実行。ホントにSWFファイルが出来上がりました。SWFを解析してみたところ、AS1のコードに全て置き換えられていました。

これで、クラス単体のSWFを簡単に作れるようになったわけだ。

早速MLにも申し込んでみたけど、誰かが不具合報告すると即行で直してCVSにアップしてる。これは今後の機能拡張に期待できるプロダクトかも。

Posted by otsuka : 04:48 | Comment (0) | Trackback (0)

Flash | Using the Tween and Transition Classes in Flash MX 2004

Macromedia - Developer Center : Using the Tween and Transition Classes in Flash MX 2004

Macromedia純正のTweenクラスとTransitionクラスの使い方。写真が怖い。

Posted by otsuka : 03:52 | Comment (0) | Trackback (0)

2005年1月 3日

Flash | Simon Wacker

simonwacker.com - Weblog | About | Projects | Portfolio

as2lib作者のBlog。やばいよ、この人。AS2でAOP Frameworkを作ってる。

Posted by otsuka : 17:04 | Comment (0) | Trackback (0)

2004年12月14日

Flash | Flasm

no|wrap.de - Flasm

Flasm disassembles your entire SWF including all the timelines and events. Looking at disassembly, you learn how the Flash compiler works, which improves your ActionScript skills. You can also do some optimizations on the disassembled code by hand or adjust the code as you wish. Flasm then applies your changes to the original SWF, replacing original actions.

MEMO。

Posted by otsuka : 00:01 | Comment (0) | Trackback (0)

2004年12月13日

Flash | SEPYのメニューを日本語化

Diary - laughing.stock

なるほど、スバラシイ。最新版との組み合わせだと"Search"メニューが加わっているので、それ用の項目を足さないとダメだけど、XMLファイル見れば簡単です。

SEPYは有料になってもいいから、日本語の読込/書込をきちんとサポートしてくれないかな。

Posted by otsuka : 18:50 | Comment (0) | Trackback (0)

2004年11月25日

Flash | AS Development Tool

SourceForge.net: Project Info - AS Development Tool (asdt)

A plugin for the popular Eclipse platform to work with ActionScript 2 files. It should provide such features like code coloring, code folding, code completion, outlining, refactoring ...

MEMO。

Posted by otsuka : 02:47 | Comment (0) | Trackback (0)

2004年11月24日

Flash | S2OpenAMF for Maven

Maven用のレポジトリにない・・・と、書いておけば、かくたにさんが何とかしてくれるんじゃないかと期待。:-)

Posted by otsuka : 11:40 | Comment (0) | Trackback (2)

Flash | Flash Remoting for AS2

はてなダイアリー - ほその日記

ほそかわさんの日記を見ながら、AS2用のFlash Remotingに触れてみた。いや、もう大混乱。今年の初めの頃は、Flash Remoting + OpenAMF + Springでブイブイ言わせてた(?)のに、クラスが変わってたりして分からなくなった。ほそかわさんも書いているけど、AS2 APIが適用されて堅苦しくなってしまった感もあるなあ。

所々ヘルプがブランクページなんだけど、うちだけ!?

追記
と思って、ヘルプのソースを調べてみました。(ヘルプはHTMLなので)

<html>
<head>
<title>Flash Remoting の ActionScript の使用の概要</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script language="JavaScript" src="../../_sharedassets/pages.js"></script>
</head>
原因は、このmetaタグの位置です。文字コードの指定がタイトルより後に位置しているため、タイトルの日本語の文字コードがブラウザで解釈できないときにブランクページになっています。

ヘルプのHTMLに対して一括置き換えかければよさそう。

Posted by otsuka : 08:57 | Comment (0) | Trackback (0)

2004年11月 2日

Flash | #includeで読み込む外部asのコメント

#include "external.as"
外部のActionScriptファイルにコメントが入っていると読み込めないんだが、いつからこんな仕様になった?

Posted by otsuka : 15:32 | Comment (3) | Trackback (0)

2004年10月24日

Flash | 久々のFlash

半年ぶりくらいに仕事でFlashをいじった。もう何かいろいろと忘れてる。プレビュー(Ctrl+Enter)しようとして、Ctrl+F11を押したりして、Eclipseと混ざってる。
使いたいメソッドもすぐに出てこず、ヘルプを調べながらだったので、やたら時間が掛かった。

途中うっかり無限ループの処理を作ってしまい、プレビューしたらフリーズ。保存していなかったので作り直し、なんて悲しい事態も。

久しぶりにActionScriptを書くと新鮮で面白い。でもEclipse + Javaに慣れてると、もっと高度なIDEが欲しいところだ。

Posted by otsuka : 04:43 | Comment (0) | Trackback (0)

2004年9月 5日

Flash | イベントの委譲 (Delegateクラス)

FN0408001 - イベントの委譲 - Flash : テクニカルノート

Delegateクラスをスクリプトやクラスにimportすると、イベントを特定のスコープと関数に委譲(delegate)することができます。

7.2から追加されたDelegateクラスについて。後で読むべし。


うぉー、地震だー。

Posted by otsuka : 19:10 | Comment (0) | Trackback (0)

2004年8月28日

Flash | 7.2

Macromedia - Flash MX 2004 : Flash MX 2004 7.2 アップデータ

早速入れてみた。起動時間はかなり短くなった。あとの改善点はまだ実感するに至ってないけど、起動時間の短縮だけでもアップデートの価値はある。

Posted by otsuka : 13:39 | Comment (0) | Trackback (0)

2004年8月26日

Flash | OnEnterFrameBeacon

darron schall: A hidden gem... or two

FLASH OOPを読み始め、OnEnterFrameBeaconクラスの存在を知り、ちょっと感動する。

夏も終わりだね。

Posted by otsuka : 07:56 | Comment (0) | Trackback (0)

2004年8月23日

Flash | MD5 in ActionScript

MD5 in ActionScript

via RIAストアー

MEMO。WindowsとMacで結果が異なってしまう点に注意。

Posted by otsuka : 10:49 | Comment (0) | Trackback (0)

2004年7月31日

Flash | KineticFusion 2.0

Kinesis Software - Home of KineticFusion

大幅に機能強化して、コマーシャルソフトになって登場。それでもサポート付きで$300ちょっと。Flexと比べられる代物ではないが、価格だけ見ると激安。

今後サーバ・コンポーネントがリリースされるらしいけど、それがどういう形になるのか。目が離せない一品。ということで、MLを購読。

Posted by otsuka : 22:52 | Comment (0) | Trackback (0)

Flash | Mkulu QA Proxy

QA Proxy

Mkulu QA Proxy is used to view the details of HTTP packets. It is a useful tool for web development and testing. Work is ongoing to increase the tool's functionality. The proxy is able to parse the binary AMF protocol used by Macromedia Flash Remoting.

via blog.keitap.com

MEMO。

Posted by otsuka : 17:39 | Comment (0) | Trackback (0)

2004年7月11日

Flash | OpenAMF 1.0RC7

upgraded Jakarta Commons Logging from 1.0.3 to 1.0.4
improved handling for java.lang.Number parameters
improved handling for shorts, integers, floats, and doubles
added javadocs to the org.openamf.DefaultGateway class
added javadocs to the org.openamf.AdvancedGateway class
improved method: SessionControlInvoker.supports
improved method: PageableResultSetServiceInvoker.supports

最近使う機会がなかったので追ってなかったOpenAMF。いつの間にか1.0RC7までリリースされていた。

Springもそうだったけど、ReleaseCandidateになってからが長いよね。って言うか、RCになって初めて本格的な開発が始まってるように思える。


Commons Loggingが1.0.4になっていることにも今日気がついた。

Posted by otsuka : 15:52 | Comment (0) | Trackback (0)

2004年7月 1日

Flash | LocalData class

To ease the pain of storing data locally, you can use my custom LocalData class, which wraps the funtionality of the SharedObject class into two easy-to-use methods: save() and load().

MEMO。

Posted by otsuka : 03:09 | Comment (0) | Trackback (0)

2004年6月29日

Flash | Flash Cache

Flash版のOSCacheやEHCacheみたいなものを捜索中。

Posted by otsuka : 01:51 | Comment (0) | Trackback (0)

2004年6月20日

Flash | クロージャ

データと関数をひとまとめにしてカプセル化したものを、 クロージャといいます。

これは、オブジェクト指向でいうところのオブジェクトと機能的には同じですが、クラスを明示的に宣言したりする必要がない分気軽に使うことが出来ます。データとコードの結びつきは、クラスを定義して生成したオブジェクトよりも強いくらいです。

「クロージャ」って単語を初めて目にした。英語にすると「closure」?

Posted by otsuka : 01:43 | Comment (1) | Trackback (0)

2004年6月17日

Flash | Teleo

9zaku経由

MEMO。

どうにかすれば、Felicaの内容をFlashで読めたりする!?

Posted by otsuka : 23:55 | Comment (0) | Trackback (0)

Flash | ループ

MEMO。

Posted by otsuka : 03:41 | Comment (0) | Trackback (0)

2004年6月 2日

Flash | KineticFusion

KineticFusion
swf と XMLを相互に変換するJAVAベースのアプリ。SWFはMacromediaから仕様が公開されているので、色々とSWF生成ツールが作られているのだけど、これはSWFからXMLを生成し、それをXMLベースで修正してSWFに戻すことができます。これを使えばサーバ上で動的にSWFを生成することも可能だと思われます。

MEMO。

Posted by otsuka : 12:41 | Comment (0) | Trackback (0)

2004年6月 1日

Book, Flash | FLASH OOP - ActionScriptによるオブジェクト指向プログラミング

持ってるだけで満足しちゃう位の名著な予感。

誰かのAmazonアフィリエイトリンクを使って注文してみよう。一件でいくらになるのか知らんけど。

Posted by otsuka : 14:52 | Comment (0) | Trackback (0)

2004年5月31日

Flash | FLASHのFPSを正常に

<param name="wmode" value="transparent" / >の1行を加えるだけです。

MEMO

Posted by otsuka : 20:34 | Comment (0) | Trackback (2)

2004年4月20日

Flash | Brady Beta

Flex用のIDE、Bradyのベータテストに関するメールが届いた。Flexに手を出す気はないけど、一応後で使ってみよう。

Posted by otsuka : 13:29 | Comment (0) | Trackback (0)

2004年4月14日

Flash | MXMLをクライアントで

Flex は MXML ActionScript 2.0 でかかれているテキストファイルを、サーバーで SWF にコンパイルし、クライアントへデリバリーします。これとは逆に、MXML をクライアントでパースして、Flash Player で UI をレンダリングしようと試みている人もいます。

Flexが出たときに、友人がこのような技術について話していた。Flash MXの成果物もMXMLにして、Flash Player側でMXMLを解釈して実行できるようになれば、サーバ側で動的にMXMLを生成するのは容易なので、いろいろと面白そうなことが出来るはず、と。
今のMXMLの仕様だと表現しきれない部分があるだろうけど、その辺は今後拡張していくとして。

Flexなんて製品はなくして、MXMLを解釈できるFlashプラグインを12,000ドルで出すってのはどうでしょう(??)。

Posted by otsuka : 13:18 | Comment (0) | Trackback (0)

2004年4月 8日

Flash | AS2 Logging Framework

thebadtiming.com経由

Java 1.4 Loggingフレームワークをほぼ踏襲している。オイラも前にAS2用のLoggingの仕組みを作ったけど、こっちの方が本格的だ。

Posted by otsuka : 13:53 | Comment (0) | Trackback (0)

2004年4月 2日

Flash, Java | DTO for Flash Remoting

Flash Remoting経由でやりとりするオブジェクトのクラスは、Flashで必要なプロパティだけをまとめた専用のクラスを作った方が良さそうだ。J2EEデザインパターンのDTOと同じような感じで。ただ、そうなるとFlash Remoting用にそのDTOを返すサービスメソッドを作らねばならない。

Posted by otsuka : 19:11 | Comment (0) | Trackback (0)

2004年3月31日

Flash, Java | OpenAMF CVS版

以前に書いたOpenAMF 1.0 RC5の不具合ですが、3月初めにCVSのコードは修正されていました。

ソースを見たら自分とほぼ同じコードで解決していたので、ちょっと嬉しい。ASTranslator.fromActionScript(Object asObject, Class desiredBeanClass)はprotectedだったけど、ASTranslator 1.5.6でpublicに戻された模様です。

Posted by otsuka : 19:14 | Comment (0) | Trackback (0)

2004年3月30日

Flash | Flexの価格

Flex presentation server pricing starts at $12,000 for two CPUs and includes annual maintenance.

Flexがリリースされましたね。もうベータプログラムのNDAは関係ないでしょう。

Flexの価格を初めて見たとき、$1,200に見えました。妥当な価格だなと思っていたら、ゼロの数が違ってました。まあエンタープライズ向けと言ってしまえばそれまでなんだけど・・・ 採用事例を早く見てみたい。

多分ほとんどのケースでは、サーバ上でJSPみたいにMXMLをSWFに変換する必要はないはず。僕が欲しいのは、ローカルPC上でコマンドラインで動かすことができるMXMLのコンパイラ。これを$1,000位(もっと安く)で出してくれ。

Posted by otsuka : 01:14 | Comment (0) | Trackback (0)

Flash, Java | org.openamf.RequestContext

I committed a new class into OpenAMF's CVS repository.

The new class is org.openamf.RequestContext

This class provides easy access to the HttpServletRequest object and the HttpSession object.

Application developers can use these static methods:

RequestContext.getHttpServletRequest
RequestContext.getHttpSession

OpenAMFのMLから。HttpSessionを簡単に取得できるようになるのは便利そう。

Posted by otsuka : 00:14 | Comment (0) | Trackback (0)

2004年3月21日

Flash | FlashでXPath

MEMO

Posted by otsuka : 19:10 | Comment (0) | Trackback (0)

Flash | 過剰なイントロダクション

サイトが、Macromedia によって提供されるユーザビリティに従うものであること。これには、効果的なナビゲーション、低いバンド幅のユーザへのアクセス、過剰なイントロダクションなどが含まれます。

「過剰なイントロダクション」っていうのは望ましいことなの?

Posted by otsuka : 04:23 | Comment (0) | Trackback (0)

2004年3月17日

Flash | Flex

ようやくFlex Betaプログラムへのご招待が届いた。いろんな妄想を実現できるのか実験だ!!

Posted by otsuka : 12:13 | Comment (0) | Trackback (0)

2004年3月 7日

Flash | Remotingな仕事

今回は、Remoting技術(予算なかったため、OpenAMF使用)でやったのだが、気になる点がいくつか。

・サーバー側とクライアント側の作業進捗が同期しないといけない。あるいはサーバー側が先行して実装させている必要がある。
今までみたいにXMLデータをサーバー側とやりとりするという形なら、とりあえずはローカルに作った同じフォーマットのXMLファイルで動作確認をしながら進めたが、Remotingでやり取りするのはFlash側データはインスタンス化されたデータであるので、サーバー実装がされていないときのやり取りのしようがないような気がする。それかめんどくさいがローカルでいちいちデータを作るか・・そんなことしてたら、サーバー実装作業しちゃうのと変わらないし・・・

大きなシステム屋さんと組んでRemotingとか使うのは無理そう。


・Remotingで関数呼び出しをして、フィードバックしている間のProgressがとれない。
これはなんか方法あるんだろうか?Macromedia 純正のRemotingだったらできたりするのかな・・・
ぱっと見た感じでは方法なさそう。
数千アイテムとかのインスタンス読み込みがあるとフリーズしてるみたいになりそうだ。

と、とりあえず気になった点。

先週納品したFlash×OpenAMF×SpringなWebアプリのクリエイティブディレクター兼Flashオーサーの日記から。

後者の指摘ポイントは、今のところFlash Remotingの仕様では無理。HTTPプロトコルを使うサーバとの通信メソッドならContent-Length値が取れる(必ずではないが)けど、AMF(Action Message Format)にはオブジェクトサイズを示すような属性はもっていないのだろう。独自に拡張を施すことができるものなのだろうか? と言っても、サーバ側だけでなく、Flash側のRemotingコンポーネントも拡張しなきゃいけないので無理か。
今回はイントラ用だったので、擬似ローディングプログレスバーを実装したけど、パブリックなものだったらこの辺りはきちんとしないといけないところ。


因みに、予算があっても僕はOpenAMFを使用したと思う。

Posted by otsuka : 17:08 | Comment (3) | Trackback (1)

2004年3月 5日

Flash | Macromediaのオンラインショップ

U/IにFlashを採用したオンラインショップで売上が30%上がったとか宣伝文句を並べてFlashの販促に努めているマクロメディアは、何故自身のオンラインショップにFlashを採用しないのか。謎だ。

Posted by otsuka : 02:14 | Comment (0) | Trackback (0)

Flash | 右クリックを無効に

Flash Player 右クリックメニュー を無効にする方法

_root.createTextField ("disable_memu", 999, 0, 0, Stage.width, Stage.height);
と書くと、拡大とか画質、設定といった右クリックでのメニューが表示されなくなります。

MEMO

Posted by otsuka : 00:59 | Comment (1) | Trackback (0)

2004年3月 4日

Flash | ASDocGen

steve webster has started an open-source project to create a javadoc utility for flash. he's looking for help, so if you have the time to participate, you should drop by the project site:
>> http://www.asdocgen.org/
according to the site, the first beta is expected in march.

これは応援しないとね。言語がJavaなら開発にも参加したいところだけど、C#だから僕には無理。テスターとして参加しよう。

Posted by otsuka : 00:35 | Comment (0) | Trackback (0)

2004年2月15日

Flash, Java | OpenAMF 1.0 RC5 改

Flashからの引数がなぜかdoubleで処理されています。メソッドに定義されている型に合わせて、勝手にメソッドをInvokeするはずなので、ここは引数に宣言されているintで処理されると思いきや、doubleで処理されています。 なのでエラーが発生し、戻り値が正常に受け取れませんでした。 とりあえずintで宣言している引数を両方ともdoubleにした所Flash側で戻り値が受け取れました。
この問題、僕のところでもずっと前から起こっていて、開発者にバグ報告もしたのだけど、今のところまだ対処はされていない。OpenAMFではなくASTranslator側の問題に思えるけど。

回避策として、サービスオブジェクト(Java側)のメソッドにはdoSomthing(int)とdoSomething(Double)を用意し、

doSomething(Double num) {
doSomething(num.intValue());
}
と、わざわざint値に変換していました。まぁ大した手間ではないのでこれでもよかったんだけど、いい加減うざくなったので、ソースにちょこっと手を加え、パラメータにint、long、Integer、Longが要求される場合、OpenAMFで変換できるようにしてみました。かなり無理やりだけど。

上のコード例のように引数がDoubleのもの、intのもの両方が定義されている場合、Doubleが優先されます。この使い分けは、同じサービスメソッド内容でFlashから呼び出す時だけ、ある処理を追加したいって時に役立ちます。

openamf-1.0RC5.zip

この問題点の箇所は、org.openamf.util.OpenAMFUtilsにあります。ソースをいじってしまったので、正確な行数がわからなくなってしまいましたが、50行目付近に

decodedObject = translator.fromActionScript(parameter);
というコードがあります。translatorインスタンスのクラスはASTranslatorです。

ASTranslator.fromActionScript(Object asObject)では、

Class desiredBeanClass =
DecoderFactory.decideClassToTranslateInto( asObject );
return fromActionScript( asObject, desiredBeanClass );
となっており、さらにDecoderFactory.decideClassToTranslateInto(Object asObject)では、asObjectがASObjectクラスのインスタンスでない場合、つまりDouble型などのネイティブ型の場合、asObject.getClass()で取得されたクラスに変換されます。だから、fromActionScript()メソッドにDouble型オブジェクトが渡されれば、Doubleのオブジェクトそのままで返されてしまいます。

ASTranslator.fromActionScript(Object asObject, Class desiredBeanClass)はprotectedなので、OpenAMFからは呼べません。このメソッドをpublicにして、OpenAMF側もこれに合わせて・・・って手もありますが、それよりは今回改造したようにOpenAMF内でDouble→求められる数値型への変換を行ってしまう方が手っ取り早いと思います。

Posted by otsuka : 17:17 | Comment (2) | Trackback (0)

2004年2月12日

Flash | Flash FIELD - AS2クラスライブラリ

Flash ActionScript 2.0用の(java.util.collectionのような)コレクション・フレームワークがないものか探してみたのだけど見つけられなかったので、自分で作り始めました。
テスター募集中です。

FlashFIELD.zip


誰かAS2用正規表現クラスを作って~。

Posted by otsuka : 06:31 | Comment (0) | Trackback (0)

2004年2月 2日

Flash | Remotingのオブジェクト生成

FlashRemotingを使って、サーバ→Flashでやりとりするオブジェクトはどのように生成されるのか。Flash側(AS2)クラスのオブジェクト生成手順のこと。Remotingドキュメントには載ってないのだけれど、Remotingはどうもサーバから渡されたプロパティをセットしてから、コンストラクタを呼び出してる様子。

サーバ→Flashに渡されたオブジェクトのプロパティがJavaオブジェクトと同期していなかったので、そのオブジェクトクラスのコンストラクタ内に初期化コードを書かないようにしたら、正しくプロパティをセットしてくれるようになった。

コンストラクタを後から呼ぶのが仕様なのかなあ? ちょいと不便だ。詳細仕様が知りたい。

Posted by otsuka : 03:05 | Comment (0) | Trackback (0)

2004年1月24日

Flash, UML | EAでFlashのクラス図

Enterprise ArchitectでActionScriptのクラス図を描いていたので、その定義ファイルを出力。たった8つしか定義してないけど、毎回登録するのも面倒なので。基本データ型以外も入ってます。

EA用ActionScriptデータ型定義ファイル

Posted by otsuka : 18:57 | Comment (0) | Trackback (0)

2004年1月21日

Flash | 戻り値がvoidの場合

Flash Remoting経由でJavaのメソッドを使用するとき、そのメソッドの戻り値がvoidだとどうなるのか。

今まで戻り値が何かしらあるメソッドの呼び出ししか行っていなかったので、上記の疑問がふと浮かんだ。

serviceObject.doSomthing(); // 戻り値が void のメソッド
function doSomething_Result(data) {
  trace(data); // ここで出力されるのは null
}
答えはnullでした。サーバ側(OpenAMF)ではメソッドの実行が完了するとすぐにnullを送り返します。

メソッド名_Result()が呼び出されている時点でメソッド実行が成功していることは判るのだけど、実行が成功しているのにnullが返ってくるのはイヤな感じだ。Javaサイドではvoidではなくtrueを返すようにした方がいいのかなぁ・・・

Posted by otsuka : 22:53 | Comment (0) | Trackback (0)

2004年1月20日

Flash | リモート呼び出し

OpenAMFを使うプロジェクトの打ち合わせで、サービスインターフェースの定義を検討している時に「頻繁に呼び出すメソッドでいちいちXXオブジェクトを渡してたらアレじゃない」といった感じのことを言われて気が付いた。

すっかり意識から抜けてたんだけど、FlashとRemoting Gateway間はオブジェクトをシリアライズしてインターネット経由で送って、先方でディシリアライズする(オブジェクトの値渡し)わけだから、多分パフォーマンスに響くわけだ。

今回は呼び出し頻度は減らせないので(しかも頻繁の回数が半端じゃない)、XXオブジェクトのキー要素だけを渡して、シリアライズ/ディシリアライズの負担を軽減させることに。

Posted by otsuka : 19:56 | Comment (0) | Trackback (0)

2004年1月16日

Flash, Java | OpenAMF 1.0 RC5

RC5 Contains:
- cleanup of ASTranslator integration
- memory leak fix
- fix for char data type

I hope this is the last RC before 1.0. Currently the plan is to release 1.0 sometime next week.

1.0 Finalが出るかと思いきや、RC5だった。
多分、これがそのまま1.0 Finalになるのでは。

Posted by otsuka : 14:15 | Comment (0) | Trackback (0)

2004年1月11日

Flash | GDispatcher使用方法

理解するために訳してみた。
原文: http://www.gskinner.com/blog/archives/000027.html

GDispatcherのダウンロードについては原文を参照。

いくつか前のエントリーで、EventDispatcher クラスを拡張して自分が欲しい機能をいくつか追加するつもりだと書いたけど、要求を満たすにはゼロから書き直さないといけないとすぐに分かったんだ。そして GDispatcher が出来上がったんだ。僕は気前がいいから ;) このクラスをコミュニティで共有したいと思ってね。このエントリーを読んでダウンロードしてくれよ。

GDispatcher は ActionScript 2.0 に対応した新しいイベント・ディスパッチのクラスで、EventDispatcher インターフェースを完全に実装しているため、簡単に取り替えが出来るようになっているのさ(イェーイ ポリモーフィズム!)。EventDispatcher で定義されている基本機能に加えて、次の新しい機能も備えている。

  • リスナーは、ディスパッチャからの全てのイベントを購読できる
  • リスナーは、指定されたイベント、または(リスナーのスコープ内での)全イベントを扱うファンクションを定義できる
  • リスナーがあるイベントを既に購読しているかどうか確認できる
  • 指定されたイベント、または全てのイベントに対する全リスナーを削除することができる

新機能の使い方を簡単にまとめてみた。時間ができたら、プロジェクトの中での実際に使用する方法についてまとめるつもりだ。だけど、過去のいくつかのエントリーを読んでもらえれば、いいアイデアが浮かぶんじゃないかな。(Using EventDispatcher, EventDispatcher: the next morning)

全てのイベントを購読する
これは他のイベントを購読するのと同様のやり方で実現できるんだ。イベント名の代わりに「ALL」を渡せばいい。

someObject.addEventListener("ALL",this);
全てのイベントに対するリスナーを削除するのも一緒さ。
someObject.removeEventListener("ALL",this);

実際には、ディスパッチ・オブジェクト(someObject)からのあらゆるイベントコールがトリガーとなる、ALLという一つのイベントを購読していることに気を付けて欲しい。つまり、もし同じオブジェクトからの別のイベントを購読していると、ダブって呼び出されることになる。同様に、ALLイベントのみ購読し、そこから特定のイベントを削除することはできないんだ。

ハンドラー・ファンクションを指定する
addEventListenerメソッドにオプションの第三パラメータでは、呼び出すべきファンクションの名前を指定できるんだ。このファンクションは第二パラメータで指定されたオブジェクトのスコープ内で呼び出される。

someObject.addEventListener("click",this,"onClicked");
勿論、この機能は他の新機能と併せて使うことができるぜ。「ALL」イベントの購読のようにね。
someObject.addEventListener("ALL",this,"onSomeEvent");
このリスナーを削除するときは、全てのパラメータが同一じゃなきゃダメなんだ。
// これじゃ削除できない
someObject.removeEventListener("ALL",this);
// これなら削除できる
someObject.removeEventListener("ALL",this,"onSomeEvent");

リスナーを確認する
GDispatcher には、「eventListenerExists」というメソッドが追加されていて、あるイベントに対応するリスナーが既にセットされているかどうかを調べることができるんだ。

if (someObject.eventListenerExists("click",this)) {
  trace("Yes, it's