「BlazeDSって何やねん?」の発表をします


Adobeさんの展開が早すぎて僕は情報収集が全然追いつけてないんですが、

BlazeDSってなんですか???


Adobeさんのプロダクツも含めて、Flex周辺の技術情報が
頭の中でうまく整理できないでいます。


で、今日のFxUG勉強会@大阪にて

フレッシュなネタ BlazeDS について紹介してみようと。

発表者本人があんまりわかっていないので
参加者の皆さんの知識をお借りしつつ進めたいなと思っています。



FxUGのwikiに先週の東京勉強会の資料がアップされたので

この資料をもとにみんなで「BlazeDSって何やねん?」について情報を出し合って進めてみます。



本日19時からです。



たぶんちょっとだけ遅刻します。。。

大阪てら子のマル暴に行きました。

先に宣言しますが、勉強会のレポートとかそんな記事じゃないです。



今回はマル暴ということで、スーパードライのロング缶を5本と魚肉ソーセージを持って

遅刻しながらも行ってきた訳なんですが、



やっぱ好きです。てら子(笑)



たけしMaxあたりからどんどんいい方向に進んでるよね


かんぺきに大阪のノリです。


徹夜あけでそのまま行って、スーパードライ2本目で酔ってきて腹出して7の人にUstreamで突っ込まれてれんさんにプロジェクトマネジメントの本を見せてもらってさくーしゃと某案件の話してくっちゃべってるうちに終わってしまって二次会で鍋食って3次会でゲームしてウトウトして気分よく帰ってきました。


僕はFlexでなんか発表しようと思ったのですが、VGAコネクタ忘れたし、軽く酔っぱらって楽しくなってきてそのまま忘れちゃいました。



そうは言ってもいろいろとしゃべってるうちにいろいろ収穫はあるんですよね。
来月は、マル暴新年会。ではなく、なにかおもしろいプログラミングのネタをやるみたいなんで、また行きます。



写真はたけしの人@3次会

たけしの人はいいことがあったみたいで、すごく楽しそうでした。

いいことだ。



今週末はFxUG@大阪の忘年会勉強会ですヨ


こちらはちゃんと何か発表します。

AMFPHP1.9b2でByteArrayをもらう、返す


AMFPHPでByteArrayをもらったり、返したりするにはちょっとだけコツがあります。

<?php

class ByteArrayTest{
    function putByte($image){
        
        // 引数で受け取るときはbinaryデータはdataプロパティに入る
        // のでこう書く。
        $binary = $image->data;
        
        // 返すときはByteArrayクラスとして返す。
        // コンストラクタにバイナリを入れる。
        return new ByteArray($binary);
    }
}
?>

ここでいうByteArrayクラスというのは、AMFPHPのWrapperClasses.phpのByteArrayクラスのことです。

PHPの引数に渡ってくるときは、このクラスのオブジェクトとして渡ってきます。
同様に、
戻り値として返す場合は、このByteArrayクラスのオブジェクトにすることで
ASのByteArrayとしてシリアライズしてくれます。

DtoなどのオブジェクトのプロパティがByteArrayでもちゃんとマッピングしてくれます。


最近公開されたAMF3 Specificationによると256MBまでいけるそうで。。



これはこれで問題ないのですが、


PHPのほうで問題がありまして、


MySQLのBLOB型のカラムにバイナリデータを格納するのはうまくいくのに、

DBから取り出す際の、
PDOやmysql_fetch_array()関数などでおかしくなってるか、
または
Dtoの配列にして、その配列を入れ替えたりすると、

オブジェクトが壊れるというか、


変数のサイズを超えて値が入ってるような、C++の構造体でcharの長さを超えて値を入れて次の変数の値を壊してしまうような感じになってしまう。。



もちろんふつうにnew ByteArray($binary)して、そのままASに返したりすれば問題ないのですが、


Dtoに入れて、配列にいれて、配列の順番を入れ替えて、、とかやってるとおかしくなるんですよね。とほほです。



PHPってバイナリデータを扱うときはなんかコツがあるんでしょうかね

僕はこれで3日くらい費やしてしまいました。
納期のこともあったので、ここから先は調べられていません。


なんか知ってる方いたら教えてください。

AMFPHP1.9b2のカスタムマッピングでハマる

かなり忙しい。。。


AMFPHPの案件がいくつか続いています。
それぞれ環境が違い、
PHP4と5、AMFPHP1.2と1.9 とを行き来して頭の中めちゃんこめちゃんこめっちゃんこです。


で本題ですが

AMFPHP1.9b2で

AS側のDTOPHPに渡るとArrayになる件でちょっとはまったので書いときます。
忘れるから。


まず先に

自作DtoオブジェクトなどをAS⇒PHPにてマッピングするには以下の手順を行います。


1)ASのDtoクラスをつくる

2)ASのDtoクラスにRemoteClassメタを書く。

こんな具合

package com.example.dto{
	[RemoteClass(alias = "com.example.dto.HogeDto")]
	public class HogeDto{
		・・・
	}
}

Flashなど、FlexじゃないAS3はこれ↓をどこか(自作NetConnectionクラスなど)に記述してやる。

registerClassAlias("com.example.dto.HogeDto", HogeDto);

3)ASに対応したPHPDtoクラスをつくる

4)PHPDtoクラスに$_explicitTypeをかく

こんな具合

class HogeDto{
	// PHP5系だとpublicをつけるんかな。。
	var $_explicitType = "com.example.dto.HogeDto";
	・・・
}

5)amfphp/global.phpに$voPathをかきかえる

DTOクラスの置き場所は、amfphpディレクトリ直下にdtoディレクトリを作成してそこに置くことが多いです。僕は。

ASのパッケージ構成に合わせてdtoディレクトリ配下にフォルダを切ったほうが良いと思います。

んで、globals.php

	$voPath = "dto/";

と指定してやる。
amfphpのディレクトリ以外の場所に置くときは絶対パスで書くんだと思います。

これでAS - PHP の自作DTOでやり取りができる。

はず、なのにできない。なんでやねん


PHPのサービスクラスにきたときにはもうArrayになってる。。(PHP4。PHP5は検証してないです)

んで悩むこと2時間モア。

core/amf/io/AMFBaseDeserializer.php(380行目前後)に答えが。。

PHPDTOは拡張子「.php」または「.class.php」が正解なようです。


僕はHogeDto.class.incってしてました。


素直に.php(または.class.php)にするか、AMFBaseDeserializer.phpに追記してあげましょう。


でした。


PHP⇒ASの戻り値でのマッピング注意は、AS側で該当Dtoクラスを「使ってやる」ことです。でないとObjectで返ってきます。


結論:
やっぱりちゃんとソース読んでから使わないといけませんね。。
ごめんなさい。



ところで僕はAMFEXTは使っていません。
そのうち試してみたいと思います。

AS3では、staticメソッドを継承することもオーバーライドすることも出来ません。


■staticメソッドを継承しない

package test{
    public class Aaa{
        public static function hoge():String{
            return "parent";
        }
    }
}
package test{
    public class Bbb extends Aaa{
    }
}


これで、Bbb.hoge();とかくとコンパイルエラー。

package test{
    public class Bbb extends Aaa{
        public override static function hoge():String{
            return "child";
        }
    }
}


static & override なfunction定義もコンパイルエラーになる。


ならば、こう書く

package test{
    public class Bbb extends Aaa{
        public static function hoge():String{
            return "child";
        }
    }
}

※これならコンパイルエラーにはならない。


Bbb.hoge();として実行すると、「child」と表示される。これってOverrideしてる訳ではない。




AS3では、staticメソッドを継承することもオーバーライドすることも出来ません。





ちなみにjavaではstaticメソッドを継承する※)が、@Overrideすることはできませぬ。

※)追記:
継承ではなく、単にクラスの親子関係を逆に手繰って、親クラスのスタティックメソッドを呼んでいる
詳しくはコメント欄見てください



ややこしい。

FxUGの12月勉強会@大阪


近畿(関西)地区のFlex Coder の皆様

まずは京都勉強会お疲れ様でした。なかなか楽しかったっす。豪華景品が当たった人はラッキーでしたねー。

お忙しいところ発表してくださった地元京都のFlex/Flashな方々、ありがとうございました。


こちらに詳しく書かれています。
1日1tech Flex2勉強会第29回@京都 参加してきました
補足すると、
・このブログの著者:宮南さんのプレゼン(京都五山の送り火中継について)もはじめにありました。
・ワントゥテンデザインの方 ⇒ ワントゥテンデザインの長井さん
です。


あと、場所提供:デジタルハリウッド京都校様もありがとうございました。


さて、場所をアップルストア心斎橋さんに戻して、今年最後の大阪勉強会を開催します。12月21日です。



内容は、いつも通りのFlex,AIR,(Flash)などが中心です。

手作りな勉強会です。

まー、がっちり忘年会シーズンですが、Flex入門前の方からFlex達人まで、誰でも参加できますので、何とか時間を作って参加しましょう。

Leopard


遅れながらもやっとゲトったLeopard


Flex2勉強会でお馴染みのApple Storeさんに話を聞くと、とりあえずバックアップ必須(笑)との事。


なんだかんだで家族の写真ぎっしりなiPhotoデータはどこへバックアップすればいいのか・・・


僕のサーバーへFTPでアップロードを試みるも、EMobileのパワーだと10時間近くかかりそうで中断。


.Macを契約してて、普段から活用してる方ならそんな心配いらないんだろうかねー


んー



なんとか12月の勉強会には間に合わせたいなーと願う。




あ、12月の勉強会は21日(金)です。忘年会シーズンなので少人数かも。。

また改めて告知します。