ブログカウンター

2007 年 7 月 10 日

貼ってみた。

Gmailチェッカー

2007 年 7 月 5 日

こんなものがあったんだ!知らなかった。早速インスコしてみた。RSSリーダーやブックマークとgoogle依存が激しすぎ、自分。

Gmail Notifier

Pen ウェブ・クリエイターの仕事。

2007 年 7 月 3 日

7/15発行のPenがWebを特集してます。Penは雑誌の中でも1,2を争うほど好きです。まだ読んでませんが、かなり期待できるんではないかと。今月号のWebデザインノートもやばかったですが、話題の人達をスポットにした記事は刺激になります。

G Map がバージョンアップ

2007 年 7 月 2 日

flashにgoogleマップを簡単に取り込めるコンポーネント。久々に見たらバージョンアップしてた。かなり細かく再現できるみたい。markers, polylines, polygons, layersなどなど。ライセンスがどうなってんのか、いまいちよく分からない。個人で非商用ならOK?誰か教えてください。

G Map V. 2.5

CASA Frameworkを試す

2007 年 7 月 2 日

CASAが良いらしい、とよく聞くので使ってみる。クラスを一通り見てみると「LoadGroup」と「XmlUtil」あたりが便利そうだ。

「LoadGroup」を使うと複数のxmlや画像を一括管理で読み込む事ができる。今回は自分のTwitterのuserとfriendsのRSSをまとめて読み込んでみる。読み込んだ後はxpathにてノードを取得する。(CASAでもノード取得できるはずなんだけど、なぜかセレクトできなかったので。)

注目すべきは「new Percent(25)」の部分。読み込む対称に対して全体の何パーセントを割り当てるか、を設定できる。ここでは1つ目のxmlを読み込んだ時点で全体の25%読込完了となる。ローディングバーとかに細かく反映できたりしてこそばゆい。

読込が完了したら、「getXML()」でxmlに変換してやりxpathにて取り出す。trace文にはTwitterの最新タイトルがそれぞれ表示されます。CASAを使うと、ちょこちょこしたスクリプトを簡便化できるので、地味だけど後からジワジワ効いてきます。「ArrayUtil」クラスとかも使う機会多いんじゃないかな。ちなみに画像をまとめて読み込む場合は「MediaLoad」クラスを使います。詳しくはドキュメントを参照されたし。

ACTIONSCRIPT:
  1. import org.casaframework.load.LoadGroup
  2. import org.casaframework.load.base.BytesLoadInterface;
  3. import org.casaframework.load.data.xml.XmlLoad;
  4. import org.casaframework.load.media.MediaLoad;
  5. import org.casaframework.math.Percent;
  6. import org.casaframework.util.XmlUtil;
  7.  
  8. //-----[xmlの取得先]
  9. var userXML:XmlLoad = new XmlLoad("http://twitter.com/statuses/user_timeline/6023282.rss?"+getTimer());
  10. var friendsXML:XmlLoad = new XmlLoad("http://twitter.com/statuses/friends_timeline/6023282.rss?"+getTimer());
  11. var myLoadGroup = new LoadGroup();
  12.  
  13. //-----[初期化関数]
  14. init();
  15. function init()
  16. {
  17.    //-----[ロードオブジェクトを追加]
  18.    myLoadGroup.addLoad(userXML, new Percent(25));
  19.    myLoadGroup.addLoad(friendsXML, new Percent(75));
  20.  
  21.    //-----[オブザーバーの登録]
  22.    myLoadGroup.addEventObserver(this, LoadGroup.EVENT_LOAD_PERCENT, "onGroupLoadPercent");
  23.    myLoadGroup.addEventObserver(this, LoadGroup.EVENT_LOAD_ERROR, "onGroupLoadError");
  24.    myLoadGroup.addEventObserver(this, LoadGroup.EVENT_LOAD_COMPLETE, "onGroupLoadComplete");
  25.    myLoadGroup.start();
  26. }
  27.  
  28. //-----[ロードグループイベントハンドラー]
  29. function onGroupLoadPercent(sender:LoadGroup, progress:Percent):Void
  30. {
  31.    trace("My group is " + progress.getPercentage() + "% loaded.");
  32. }
  33.  
  34. function onGroupLoadError(sender:LoadGroup, failedLoad:BytesLoadInterface):Void
  35. {
  36.    myLoadGroup.removeLoad(failedLoad);
  37.    myLoadGroup.start();
  38. }
  39.  
  40. function onGroupLoadComplete():Void
  41. {
  42.    trace("xml complete");
  43.  
  44.    var userObj:Object = XmlUtil.xmlToObject(userXML.getXml())['rss'][0]['channel'][0]['item'];
  45.    var friendsObj:Object = XmlUtil.xmlToObject(friendsXML.getXml())['rss'][0]['channel'][0]['item'];
  46.  
  47.    trace(userObj[1].title[0].nodeValue);
  48.    trace(friendsObj[1].title[0].nodeValue);
  49. }

7/17追記
xpathを使わずにcasaのみでノードを取得するやり方が分かったのでコードを修正しました。

AMFPHPを試す

2007 年 6 月 18 日

AMF通信をやってみる。まずはFlash Remoting用のコンポーネントをダウンロードしてインストールする。

次にamfphpをダウンロード。現時点でのバージョンはamfphp-1.2.6。解凍してamfphpフォルダごとlocalhost直下にアップする。

今回の場合はhttp://localhost/amfphp/browser/index.htmlにアクセスしてデフォルト画面が表示されていればインストール成功となる。この画面がサービスブラウザとなりコードの修正や引数のやりとりを確認する事ができる。ここからはサービス用のphpファイルとflaファイルを作成。

■HelloWorld.php(クラス名とファイル名を統一すること)

PHP:
  1. <?php
  2. class HelloWorld
  3. {
  4.     //-----[AMFPHPのテーブル設定]
  5.     function HelloWorld()
  6.     {
  7.         $this->methodTable = array
  8.         (
  9.             "say" => array
  10.             (
  11.                 "access" => "remote",
  12.                 "description" => "文字列を返します"
  13.             )
  14.         );
  15.     }
  16.    
  17.     //-----[flashから呼ばれる関数]
  18.     function say($sArgments)
  19.     {
  20.         return 'You said: ' . $sArgments;
  21.     }
  22. }
  23. ?>

フラッシュからの引数は$sArgmentsに格納される。このphpをhttp://localhost/amfphp/servicesにアップする。
※この状態でサービスブラウザにアクセスするとHelloWorldがサービスとして登録される。

■HelloWorld.fla(ルートの1フレーム目)

ACTIONSCRIPT:
  1. import mx.remoting.*;
  2. import mx.rpc.*;
  3. import mx.remoting.debug.NetDebug;
  4.  
  5. var gatewayUrl:String = "http://localhost/amfphp/gateway.php";
  6.  
  7. NetDebug.initialize();
  8. var _service:Service = new Service(gatewayUrl, null, 'HelloWorld', null , null);
  9. var pc:PendingCall = _service.say("Hello!");
  10. pc.responder = new RelayResponder(this, "handleResult", "handleError");
  11.  
  12. function handleResult(re:ResultEvent)
  13. {
  14. trace(re.result);
  15. }
  16.  
  17. function handleError(fe:FaultEvent)
  18. {
  19. trace("エラー");
  20. }

トレースすると"You said: Hello!"が出力される。xmlを経由しなくてもphpとflashでオブジェクトのやりとりが出来るので便利。DBからセレクトしたデータをflashに直接渡したり、phpに配列を渡したりとかなりお手軽にできそう。ここまでくるとMovableTypeとかでxmlを出力してflashに読み込ませるCMS的パターンは壊滅なんじゃないかと。従来のXMLを読み込んでパースかけるやり方よりも高速に送受信ができるらしい。なるほど。

外部画像を読み込んでスムージング

2007 年 6 月 15 日

画像の読み込みをリスナーで捕まえるにはcontentLoaderInfoを使う。スムージングをかけるには読み込み完了時にビットマップ化して、スムージングプロパティをtrueにする。回転させるとスムージングがかかってるのが良く分かる。

ACTIONSCRIPT:
  1. var imgLoader:Loader = new Loader();
  2. imgLoader.load(new URLRequest("画像のurl"));
  3. imgLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
  4. imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
  5.  
  6. //-----[読み込み中イベントの処理]
  7. function onProgress(e:Event):void
  8. {
  9.     trace("progress = " + Math.round((e.bytesLoaded * 100) / (e.bytesTotal)));
  10. }
  11.  
  12. //-----[読み込み完了イベントの処理]
  13. function onComplete(e:Event):void
  14. {
  15.     //-----[スムージング処理]
  16.     var loadedImage:Bitmap = Bitmap(imgLoader.content);
  17.     loadedImage.smoothing = true;
  18.     addChild(loadedImage);
  19.     loadedImage.rotation = 15;
  20. }

ムービークリップのカーソルアイコンについて

2007 年 6 月 10 日

AS3ではMouseEventをリスナーに登録しても標準では指アイコンに変化しない。アイコンを変える時は明示的に設定してやる必要あり。

ACTIONSCRIPT:
  1. mc.buttonMode = true;
  2. mc.useHandCursor = true;

buttonModeをtrueにしておかないとuseHandCursorが効かないのだ。ちょっとハマったのでメモ。

Tweenerについて

2007 年 6 月 5 日

Tweenerを使ってみる。

ACTIONSCRIPT:
  1. import caurina.transitions.Tweener;
  2. Tweener.addTween(mc, {alpha:0, time:1, transition:"easeOutExpo", delay:0, onComplete:hoge, onCompleteParams:["hello"]});
  3.  
  4. hoge = function(s:String)
  5. {
  6.     trace(s);    //hello
  7. }

こうする事で1秒でアルファを0にイージングして、完了後にコンプリートハンドラーよりhoge()がコールバックされて"hello"がトレースされる。基本Fuseと使い方は一緒だな。

その他のイベントパラメータはこちら。
・onStart
・onStartParams
・onUpdate
・onUpdateParams
・onComplete
・onCompleteParams
・onOverwrite
・onOverwriteParams

ドメイン間ポリシーファイルについて

2007 年 5 月 17 日

異なるドメイン間でXMLとかをやり取りする場合、「crossdomain.xml」を設置する必要がある。Flash側にはcrossdomain.xmlが置かれているドメインを設定することでクロスアクセスが可能になる。アクセス許可の範囲はポリシーファイルの置かれたディレクトリ以下に限られる。毎回忘れるのでメモ。

ACTIONSCRIPT:
  1. System.security.loadPolicyFile("crossdomain.xmlのパス");

XML:
  1. <xml version="1.0">;
  2.     <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
  3.     <cross>
  4.         <allow domain="Flash側のドメイン"></allow>
  5.     </cross>
  6. </xml>