前回の続きです。
今回は大量のダミーデータを返すAPIを作ってみます。
要件としては
- 住所録を返すAPI
- 本番サーバはPHPなので、URLもそれに合わせる
- 100件程度、ランダムで返す
- XMLの内容は、名前、メール、メッセージ、性別、国
という感じです。
前回の続きです。
今回は大量のダミーデータを返すAPIを作ってみます。
要件としては
という感じです。
こんにちはーFlasherのみなさん。
すっかりRuby記事ばっかりなのに、いまだにブログ訪問者の大半はFlasherらしいこのブログ。
久しぶりにFLASHerのための記事を書けそうです。
今日とりあげるのはSinatraというRubyで作られた超シンプルなフレームワークです。
このたった5行で、http://localhost:4567/hi にアクセスすると「Hello World!」というテキストを返すAPIサーバがローカルPC上に完成するんだ。
Rubyがわからなくたって、どんなプログラムなのか一目瞭然だ。シンプルだと思わないかい?
今回はこのシンプルなSinatraを使って、あなたのFlash案件に使える、より本番に近いモックAPIサーバを作ろうというお話です。
久しぶりにmixiアプリの事を調査したよ。
多分日頃からOpenSocial開発をしてる人には当たり前のことなんだろうけど
ぐぐってもわからなかったので。。
mixiアプリはそもそもiframe内にgadget.xmlをキャッシュされた状態で起動する。
つまり、mixi.jp内のページにmixi-platform.comにキャッシュされたコンテンツを表示していて
さらにその中で別ドメインなコンテンツを表示できるのか?
結論としてはできる。 ただ外部ページからではOpenSocialAPIに接触しようがないから、不便は不便。
iframeの中にfacebookアプリを埋め込んだりもできたよ。
でもmixiアプリ上で認証させるのは多分規約違反。
iframeで外部コンテンツを表示するっていう作法も、外部サイトへの遷移の規約に従ってない気がするのでアウトかな?
どうでしょう?
OpenSocialのFlash埋め込みAPIを使って、配置したSWFから
URLLoaderなんかを使って普通にクロスドメインな通信ができるかチェック。
これもできる。相手のサーバから拒否されてなければ。
JavaScriptはXHRを使えないから(ひょっとして使える?)、makeRequestするわけだけど
Flashは普通に通信できるなら、mixiアプリは開発しやすさで言えばFlashで作るに限るってことかなぁ。
makeRequestはoAuthの署名リクエストが使えるので、通信にセキュリティを保証したい場合は有効だと思う。
ブログパーツのようなFlashで、いろいろなサイトに埋め込まれるSWFの 埋め込まれているページのURLを取得する方法。
ExternalInterface.callの1番目の引数は、呼び出すJavaScriptのメソッド名という事になっていますが
は単純に以下のようなJSが実行されているものと考えられるので
まぁ、ようするに無名関数をFlash側で引数としてあげればいいと。
eyeVioがHD動画に対応してます。
今回もいつも通り、動画のプレイヤーと、JavaScriptあたりをやりました。
FlashPlayerは7で作っているのでExternalInterfaceクラスが使えないわけですが、 それでも一生懸命JavaScriptと連携しています。
SWFからダイナミックにHTMLのレイアウトを弄ったりして、なかなか楽しいです。
今回途中で非同期処理の管理に嫌気がさしたのでAS2用のスレッドライブラリを作りました。
AS3ではSparkの「そうめん」のような素晴らしいライブラリがあるんですが、AS2向けでシンプルなのは見つからなかったので 自作で
こんな感じで書けるように。
もともとのソースコードのコールバック関数をそのまま弄らずシーケンス処理に組み込めるように 関数をひとつのスレッドとして利用できるようにしたのが正解でした。
非同期の整理のつもりでスレッドライブラリを作りましたが、メソッドが集中しやすいコントローラー系クラスの処理分散にも効果を発揮してウハウハ。
時代遅れのAS2なので、気合いをいれて拡張していくつもりはサラサラないけど、 気が向いたら公開したいですね。
ソニーの動画共有サイト「eyeVio」がリニューアルされました。 動画のプレイヤー部分を引き続き担当しています。 それからHTMLコーディングとCSSも、ベース段階でやっています。
今回のリリースから、フリーランスでやってます。
Flashの話。
Flashでフルスクリーンを使いたい場合は埋め込み用のEmbed of Objectタグに
を追加しておく必要がありますよね。
さらに、FlashにHTMLのdivなんかをオーバレイさせたい場合は
にしますよね。
でも、wmodeに何か設定がされているとフルスクリーンにできないみたいなんです・・・。
つまり、Flashの上にオーバレイさせたりするコンテンツで、フルスクリーンモードは使えないってわけ。 週明けにリリースなのに、まじ勘弁ですよ・・・。
--
ちなみに、JavaScriptで動的にwmodeを切り替えるというのも当然考えた。 けどIE以外のブラウザでは、embedタグを弄ろうものなら、容赦なくSWFがリロードされるよ。 SWFのリロードとかクリティカルすぎて問題外だよ。
Flash純正のフルスクリーンは諦めて、すでに使っているブラウザいっぱいにFlashを広げる手法でいく。 これメンドイんだよなぁ。
ActionScript2での開発の話だけど、 大抵どんなプロジェクトでもディレクトリ構造が同じになってきた。 ちょっと晒してみる。
他の人はどういう風なのかな?
僕はあんまりモーションモーションした案件がないので、CairnGormなんかを参考にしてます。 UIパーツはほぼ全てUICompornentを継承してコンパイルしておきます。 こうするとテストもしやすいし、おのずと結合が緩くなりますので。 バイディングもできるしね。 いいことばかりじゃないけどね。
さて仕事仕事。
※2008/01/24に一部加筆しました。 この記事の値のコピーについて誤った記述がありましたので 文字列変数コピーは参照コピーである:福井プログラマー生活向上委員会
しかし、この説明では一つ問題があります。 なぜなら、JavaScriptやActionScript3のString型は、プリミティブ型ではあるものの、変数のコピーは値コピーではなく参照コピーになるからです。それどころか、ActionScript3では全てのプリミティブ型のコピーは参照コピーになるようです
こちらの記事を是非合わせてお読みいただくことをおすすめします!!
コリン・ムック「今から始めるActionScript 3.0」に行ってきました。
http://www.event-web.net/as3/ 今コリン・ムックのレクチャーから帰ってきました。
初心者向けのレクチャーではありましたが、9時間の長丁場。 内容の方は、ビギナー向けということもあり易しめで、難しいところもありませんでした。 コリン節を堪能してきましたよ。
僕はAS2.0の時に、コリン氏のMVC Clockのソースを穴があくほど読んで、初めてMVCという概念を勉強したので師匠を拝むような気持ちでした。
で、基本的には「ActionScript3でどうやってアプリケーションを開発していくか」という課題をひとつのサンプルアプリを通して、疎結合に作っていく大切さを表現していました。
前半はAS3の言語的な部分に多く触れ、後半はMVCやディスプレイオブジェクト、イベントなどの実装寄りな話。
コリン氏は「変数」と「オブジェクト」の関係を正しく理解してもらいたいと何度か言っておりました。
そのわかりやすさに衝撃を受けたので、メモします。
と同じことを何度もいっていたので、よほど覚えて帰ってほしかったのでしょう。
例えばプリミティブ型(NumberやString)では
としたとき、「dog」というオブジェクトがコピーされています。

追記: 文字列変数コピーは参照コピーである:福井プログラマー生活向上委員会の記事を参照してください。
この時2つの変数の間でオブジェクトは共有されていません。
では、複合データ型の場合

2つの変数は同じオブジェクトを参照しています。 ここまでは問題ないかと。
ではさらに突っ込んで、「参照」とは何かを説明すると
これはちょっと変だと思う人もいるかも。 nullはオブジェクトを捨てる事ではなく、参照を切るだけ

図を見ると、「変数a」と「配列[10,1,2,3]」を繋ぐ線が消えただけだということが良くわかる。変数が持っているのは、この「線」の部分だけだということ。
では
とすると、オブジェクト[10,1,2,3]は消えたのでしょうか? 答えはノーです。

どの変数からも参照されなくなったオブジェクトはやがてメモリから捨てられます。 これをガベッジコレクションといいますが、どの変数からも参照されなくなった時点で削除されるのではなく、捨てる準備。捨ててもいいよというマークがされて適当な時にGCされます。
その適当な時とは? コリン氏がいうには、ロードをやめたり、重い処理をストップさせたりした場合らしいです。
AS3ではビルトインではないけれど、強制的にガベッジコレクションを実行するハックもあるので それを使うのもありですかね。
http://www.gskinner.com/blog/archives/2006/08/as3_resource_ma_2.html
個人的にこのオブジェクトの話は、わかってはいても人に説明しづらい。理解したつもりでも、なんかずれていた。という経験があるので、この参照を矢印で表現する図解はためになりました。
今日のレクチャーの内容は http://moock.org/lectures/groundUpAS3/にあります。
--
追記: コリン・モック氏本人がレクチャーで使っていた図解は http://moock.org/lectures/groundUpAS3/の ・copies and references ・multiple references to the same object にありました。 SWFなのでクリックして紙芝居的に挙動が確認できます。