FLASHer のためのSinatra入門 [導入編]

前回の続きです。

今回は大量のダミーデータを返すAPIを作ってみます。
要件としては

  • 住所録を返すAPI
  • 本番サーバはPHPなので、URLもそれに合わせる
  • 100件程度、ランダムで返す
  • XMLの内容は、名前、メール、メッセージ、性別、国

という感じです。

Read More…

Posted in flash, ruby, sinatra, 未分類 at 2月 17th, 2010. No Comments.

はじめに

こんにちはーFlasherのみなさん。
すっかりRuby記事ばっかりなのに、いまだにブログ訪問者の大半はFlasherらしいこのブログ。
久しぶりにFLASHerのための記事を書けそうです。

今日とりあげるのはSinatraというRubyで作られた超シンプルなフレームワークです。

  1. require 'rubygems'
  2. require 'sinatra'
  3. get '/hi' do
  4.   "Hello World!"
  5. end


このたった5行で、http://localhost:4567/hi にアクセスすると「Hello World!」というテキストを返すAPIサーバがローカルPC上に完成するんだ。

Rubyがわからなくたって、どんなプログラムなのか一目瞭然だ。シンプルだと思わないかい?
今回はこのシンプルなSinatraを使って、あなたのFlash案件に使える、より本番に近いモックAPIサーバを作ろうというお話です。

Read More...

Posted in flash, ruby, sinatra, 未分類 at 2月 16th, 2010. 2 Comments.

久しぶりにmixiアプリの事を調査したよ。

多分日頃からOpenSocial開発をしてる人には当たり前のことなんだろうけど
ぐぐってもわからなかったので。。

iframeで外部ページを埋め込めるか?

mixiアプリはそもそもiframe内にgadget.xmlをキャッシュされた状態で起動する。

つまり、mixi.jp内のページにmixi-platform.comにキャッシュされたコンテンツを表示していて
さらにその中で別ドメインなコンテンツを表示できるのか?

結論としてはできる。 ただ外部ページからではOpenSocialAPIに接触しようがないから、不便は不便。

iframeの中にfacebookアプリを埋め込んだりもできたよ。
でもmixiアプリ上で認証させるのは多分規約違反。

iframeで外部コンテンツを表示するっていう作法も、外部サイトへの遷移の規約に従ってない気がするのでアウトかな?

どうでしょう?

Flashから外部コンテンツとの通信

OpenSocialのFlash埋め込みAPIを使って、配置したSWFから
URLLoaderなんかを使って普通にクロスドメインな通信ができるかチェック。

これもできる。相手のサーバから拒否されてなければ。

JavaScriptはXHRを使えないから(ひょっとして使える?)、makeRequestするわけだけど
Flashは普通に通信できるなら、mixiアプリは開発しやすさで言えばFlashで作るに限るってことかなぁ。

makeRequestはoAuthの署名リクエストが使えるので、通信にセキュリティを保証したい場合は有効だと思う。

Posted in actionscript3.0, javascript at 11月 19th, 2009. No Comments.

filmoというCM作成サイトがあって

うちの嫁さんが出す作品出す作品必ず賞を取っている

嫁(@ai1017)・・恐ろしい子・・

Posted in flash, 日記 at 5月 26th, 2009. 9 Comments.

ブログパーツのようなFlashで、いろいろなサイトに埋め込まれるSWFの 埋め込まれているページのURLを取得する方法。

  1. import flash.external.*;
  2. var locationHref:String = String(ExternalInterface.call("function(){return location.href}"));


ExternalInterface.callの1番目の引数は、呼び出すJavaScriptのメソッド名という事になっていますが

  1. ExternalInterface.call("myMethod","args1","args2");


は単純に以下のようなJSが実行されているものと考えられるので

  1. eval("myMethod").apply(window,["args1","args2"]);


まぁ、ようするに無名関数をFlash側で引数としてあげればいいと。

Posted in actionscript2.0, actionscript3.0, flash, javascript at 8月 30th, 2008. No Comments.

eyeVioがHD動画に対応してます。

http://eyevio.jp/

今回もいつも通り、動画のプレイヤーと、JavaScriptあたりをやりました。

FlashPlayerは7で作っているのでExternalInterfaceクラスが使えないわけですが、 それでも一生懸命JavaScriptと連携しています。

SWFからダイナミックにHTMLのレイアウトを弄ったりして、なかなか楽しいです。

今回途中で非同期処理の管理に嫌気がさしたのでAS2用のスレッドライブラリを作りました。

AS3ではSparkの「そうめん」のような素晴らしいライブラリがあるんですが、AS2向けでシンプルなのは見つからなかったので 自作で

  1. new Sequence(
  2.   new Wait(1),
  3.   new XMLLoad('hoge.xml'),
  4.   new Wait(1),
  5.   new FunctionJob(this,this.normalfunc)
  6. ).start();


こんな感じで書けるように。

もともとのソースコードのコールバック関数をそのまま弄らずシーケンス処理に組み込めるように 関数をひとつのスレッドとして利用できるようにしたのが正解でした。

非同期の整理のつもりでスレッドライブラリを作りましたが、メソッドが集中しやすいコントローラー系クラスの処理分散にも効果を発揮してウハウハ。

時代遅れのAS2なので、気合いをいれて拡張していくつもりはサラサラないけど、 気が向いたら公開したいですね。

Posted in actionscript2.0, flash, works at 6月 30th, 2008. No Comments.

ソニーの動画共有サイト「eyeVio」がリニューアルされました。 動画のプレイヤー部分を引き続き担当しています。 それからHTMLコーディングとCSSも、ベース段階でやっています。

今回のリリースから、フリーランスでやってます。

Posted in actionscript2.0, flash, works at 3月 12th, 2008. No Comments.

Flashの話。

Flashでフルスクリーンを使いたい場合は埋め込み用のEmbed of Objectタグに

  1. allowFullScreen='true'


を追加しておく必要がありますよね。

さらに、FlashにHTMLのdivなんかをオーバレイさせたい場合は

  1. wmode='transparent'


にしますよね。

でも、wmodeに何か設定がされているとフルスクリーンにできないみたいなんです・・・。

つまり、Flashの上にオーバレイさせたりするコンテンツで、フルスクリーンモードは使えないってわけ。 週明けにリリースなのに、まじ勘弁ですよ・・・。

--

ちなみに、JavaScriptで動的にwmodeを切り替えるというのも当然考えた。 けどIE以外のブラウザでは、embedタグを弄ろうものなら、容赦なくSWFがリロードされるよ。 SWFのリロードとかクリティカルすぎて問題外だよ。

Flash純正のフルスクリーンは諦めて、すでに使っているブラウザいっぱいにFlashを広げる手法でいく。 これメンドイんだよなぁ。

Posted in flash at 2月 28th, 2008. No Comments.

ActionScript2での開発の話だけど、 大抵どんなプロジェクトでもディレクトリ構造が同じになってきた。 ちょっと晒してみる。

他の人はどういう風なのかな?

  • com
    • func09
      • event(イベント系の親クラスが入ってる)
      • logging(俺ロギングAPI)
      • utils(俺便利クラス群)
      • :myproject(プロジェクト名)
        • bussines(共通で使うロジックをここに)
        • compornents(UICompornentを継承したUIはここに)
        • model(モデル系)
        • service(外部とのインターフェイスクラス。大抵シングルトンで実装)
        • views(作ったコンポーネントをがっちゃんこするクラス。コンポーネント同士のメディエイターの役割だとか、リサイズ時の制御だとか)
        • Main.as(コントローラークラス。モデルとビューをつなぐ部分だったり、外部向けのAPIを持つ)

僕はあんまりモーションモーションした案件がないので、CairnGormなんかを参考にしてます。 UIパーツはほぼ全てUICompornentを継承してコンパイルしておきます。 こうするとテストもしやすいし、おのずと結合が緩くなりますので。 バイディングもできるしね。 いいことばかりじゃないけどね。

さて仕事仕事。

Posted in actionscript2.0, flash, 日記 at 2月 20th, 2008. No Comments.

※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)では

  1. var a = "dog";
  2. var b = a;


としたとき、「dog」というオブジェクトがコピーされています。

object_1.gif

追記: 文字列変数コピーは参照コピーである:福井プログラマー生活向上委員会の記事を参照してください。

  1. a = "cat";
  2. trace(a); // output 'cat'
  3. trace(b); // output 'dog'


この時2つの変数の間でオブジェクトは共有されていません。

では、複合データ型の場合

  1. var a = [0,1,2,3];
  2. var b = a;
  3.  
  4. a[0] = 10;
  5. trace(a); // output '[10,1,2,3]'
  6. trace(b); // output '[10,1,2,3]'


object31.gif

2つの変数は同じオブジェクトを参照しています。 ここまでは問題ないかと。

ではさらに突っ込んで、「参照」とは何かを説明すると

  1. a = null;
  2. trace(b); // output '10,1,2,3'


これはちょっと変だと思う人もいるかも。 nullはオブジェクトを捨てる事ではなく、参照を切るだけ

object3.gif

図を見ると、「変数a」と「配列[10,1,2,3]」を繋ぐ線が消えただけだということが良くわかる。変数が持っているのは、この「線」の部分だけだということ。

では

  1. b = null;


とすると、オブジェクト[10,1,2,3]は消えたのでしょうか? 答えはノーです。

object4.gif

どの変数からも参照されなくなったオブジェクトはやがてメモリから捨てられます。 これをガベッジコレクションといいますが、どの変数からも参照されなくなった時点で削除されるのではなく、捨てる準備。捨ててもいいよというマークがされて適当な時に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なのでクリックして紙芝居的に挙動が確認できます。

Posted in actionscript3.0, 日記 at 1月 15th, 2008. 2 Comments.