<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>dev.convexstyle.net | convexstyle のウェブ開発ブログ</title>
      <link>http://dev.convexstyle.net/</link>
      <description>convex って平らなモノの表面を触って少しポコってなっているもの。そんな感じでありたい。</description>
      <language>ja</language>
      <copyright>Copyright 2009</copyright>
      <lastBuildDate>Fri, 04 Dec 2009 09:43:48 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>10.0.2 アップデートで修正された問題に関連して</title>
         <description><![CDATA[会社で開発していた Flash コンテンツを納期に伴ないクライアントにソースごと渡すことに。で、問題が発生。クライアントの PC で全くコンパイルできない現象が起きた。いやコンパイルして swf は書き出されているんだけど、空の swf が出来上がる感じ。

一応会社の PC の状況をエミュレートして色々試してみると、A,B の PC でコンパイルできて、C,D では出来ない。出来ない PC で試しにメインクラスに trace('hello'); とかしても trace が出ない。今回はコンポーネントの数個インストールしているし、あの en/ja 問題に関連しているのかとか色々間違った方向に考えていたんだけど、説明つく理由が見当たらない。Debug Movie で書き出すと、Flash ファイルに関連するクラスファイルが見当たらない的なアラートが出る始末。class パスもメインクラスもちゃんと存在しているのに。

「自分の PC でコンパイル出来るのに何故同僚やクライアントは出来ないのだ！？」「Flex Builder 怪しくね！？」とか不毛にどんどん深く悩んでいたんだが、ふと個人 Mac を会社に持ってきてコンパイルすると普通に出来る。両方の PC の共通点を探すと 10.0.2 になってました。このマイナーアップデートはそこまで大きな変化は無いだろうとか考えていたんですが、下記のような問題点が沢山改善されているんですね。

<a href="http://www.adobe.com/jp/support/kb/ts/235/ts_235605_ja-jp.html" target="_blank">Flash CS4 Professional 10.0.2 アップデートで修正された問題</a>

<b>サイズの大きいプロジェクトファイルのコンパイルに関する問題</b>という見出しも！！

今回は papervision3D、コンポーネント、フレームワークなど比較的大きなクラスファイルを同時にコンパイルしようとしていたため、何らかの理由でコンパイルが正常に出来なかったのだろう。

ということで、ちゃんと細目にアップデートしようという話でした。]]></description>
         <link>http://dev.convexstyle.net/2009/12/1002.html</link>
         <guid>http://dev.convexstyle.net/2009/12/1002.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Environment</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">Flash</category>
        
         <pubDate>Fri, 04 Dec 2009 09:43:48 +0900</pubDate>
      </item>
            <item>
         <title>We Feel Fine</title>
         <description><![CDATA[<a href="http://www.amazon.co.jp/We-Feel-Fine-Almanac-Emotion/dp/1439116830/" target="_blank"><img src="http://log.convexstyle.net/images/2009/november/we_feel_fine.jpg" width="350" height="350" alt="We Feel Fine: An Almanac of Human Emotion" title="We Feel Fine: An Almanac of Human Emotion" class="link" /></a>

Web とは関係ない話ですが、<a href="http://www.flickr.com/photos/convexstyle/" target="_blank">写真</a>を始めてから 2 年程になります。
感覚的には技術やうんちくを逆に知らない（知りたくない）ので純粋に楽しめて、特にフィルム一眼・トイカメラ・ポラロイドカメラなどのフィルムカメラにのめり込んで趣味で撮ってたんですが、趣味が高じて 1 枚だけ参加させてもらった「<a href="http://wefeelfine.org/book/" target="_blank">We Feel Fine: An Almanac of Human Emotion</a>」という写真集みたいなアート本が本日発売されました。先日ニューヨーク（Brooklyn）の <a href="http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=powerhouse+books+37+main+street+brooklyn&sll=40.71838,-73.990517&sspn=0.138693,0.210457&gl=us&ie=UTF8&hq=powerhouse+books&hnear=37+Main+St,+Brooklyn,+NY+11201&ll=40.704083,-73.990645&spn=0.00867,0.013154&t=h&z=16&iwloc=A" target="_blank">Powerhouse Books</a> でリリースパーティがあった模様。人間の感情を表現する写真に特化しているらしいです。自分の写真を撮る時も感情を表現したいという思いが強いので、何だか共感してます。

物好きの方は<a href="http://www.amazon.co.jp/We-Feel-Fine-Almanac-Emotion/dp/1439116830/" target="_blank">Amazon Japan</a> からどうぞ。

・・・・・

シドニーのウィークリーマガジンにフリーランスフォトグラファーとしても参加する予定なので、写真がアツイ！！とか勝手に思ってます。ウェブも同様にうんちくに走らず楽しんで作るようにします。]]></description>
         <link>http://dev.convexstyle.net/2009/12/we_feel_fine.html</link>
         <guid>http://dev.convexstyle.net/2009/12/we_feel_fine.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">普通の話</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">写真</category>
        
         <pubDate>Wed, 02 Dec 2009 17:24:05 +0900</pubDate>
      </item>
            <item>
         <title>遂に来たねー</title>
         <description><![CDATA[<a href="http://www.techcrunch.com/2009/11/16/adobe-flash-player-10-1-air-2-0/" target="_blank">Adobe Releases Flash Player 10.1 And AIR 2.0 – Both Include Multi-touch Support</a>

ほほー。楽しみ。]]></description>
         <link>http://dev.convexstyle.net/2009/11/post_4.html</link>
         <guid>http://dev.convexstyle.net/2009/11/post_4.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">開発環境</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">Flash</category>
        
         <pubDate>Wed, 18 Nov 2009 17:14:39 +0900</pubDate>
      </item>
            <item>
         <title>Flash CS4 クラッシュ in snow leopard</title>
         <description><![CDATA[<a href="http://forums.adobe.com/thread/487993" target="_blank">Snow Leopard インストール後、Flash CS4が起動後落ちるようになりました。</a>

まさにこの記事通りなんですが、MAC の OS を Snow Leopard にした途端、Flash CS 4 が起動直後に何もせずに落ちるようになってしまった。CS4 をアンインストール＆インストールしても直んない。OS のクリーンインストールを回避して直す方法知りませんか～！！Fonts 系が怪しいのかもなあ。。。個人マシーンだけど、Flash が使えないと生きた心地がしない。

Help me !!!]]></description>
         <link>http://dev.convexstyle.net/2009/11/flash_cs4_in_snow_leopard.html</link>
         <guid>http://dev.convexstyle.net/2009/11/flash_cs4_in_snow_leopard.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">開発環境</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">バグ</category>
        
         <pubDate>Thu, 12 Nov 2009 12:49:48 +0900</pubDate>
      </item>
            <item>
         <title>Zend_Service_ReCaptcha を使ってみる。</title>
         <description><![CDATA[<a href="http://ja.wikipedia.org/wiki/%E5%85%89%E5%AD%A6%E6%96%87%E5%AD%97%E8%AA%8D%E8%AD%98" target="_blank">Optical Character Recognition</a> 技術で有名な悪意ユーザーを退治する <a href="http://framework.zend.com/manual/ja/zend.service.recaptcha.html" target="_blank">ReCaptcha</a> が Zend_Service に知らないうちに組み込まれてたんでプロジェクトに使ってみる。かなりシンプルな API 対応なんで想像つくけど、あるもんは使う。

<a href="http://recaptcha.net/" target="_blank"><img src="http://dev.convexstyle.net/images/entry/200911/recaptcha.gif" width="322" height="133" alt="Recaptcha" title="Recaptcha" class="link" /></a>

reCAPTCHA でアカウントを作って、Public Key と Private Key を作成。
これを ini ファイルに設定して、こんな感じで設定。

<pre class="prettyprint">
$_params = array(
    'theme' => 'blackglass'
);
$this->_recaptcha = new Zend_Service_ReCaptcha($this->_recaptchaIni->public_key, $this->_recaptchaIni->private_key);
$this->_recaptcha->setOptions($_params);
</pre>

View には

<pre class="prettyprint">
$this->view->_recaptcha = $this->_recaptcha->getHtml();
</pre>

後は変数に post された際に下記な感じか。

<pre class="prettyprint">
if($_req->isPost()) {
    $_recaptcha_challenge_field = $_req->getPost('recaptcha_challenge_field');
    $_recaptcha_response_field  = $_req->getPost('recaptcha_response_field');
    $_recaptchaResult = $this->_recaptcha->verify(
        $_recaptcha_challenge_field,
        $_recaptcha_response_field
    );			
    if(!$_recaptchaResult->isValid()) {
        $_msg = 'reCaptcha field is needed to be filled correctly.';
        array_push($this->_errors, $_msg);
    }			
    if(!empty($this->_errors)) {					
        return;
    }
}
</pre>

楽やな。

・・・・・

海外に来て、日本じゃあまり聞いたことの無いサービスの API に連携しないといけない事が多々ある。自分だけ知らないのかもしれないが。<a href="http://www.silverpop.com/" target="_blank">Silverpop</a> がその１つ。メーリングリスト系のウェブサービスらしい。さすがにこれは Zend_Service に無かった。PHP 系のサイト制作には高頻度使用なので、自作しよう。

日本ではあり得ない仕様が海外だと結構あり得たりする。
ここら辺は本当にむずい。そのうちここら辺については書こう。]]></description>
         <link>http://dev.convexstyle.net/2009/11/zend_service_recaptcha.html</link>
         <guid>http://dev.convexstyle.net/2009/11/zend_service_recaptcha.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Zend Framework</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">Framework</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Zend</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Zend Framework</category>
        
         <pubDate>Mon, 09 Nov 2009 16:36:14 +0900</pubDate>
      </item>
            <item>
         <title>RemoteProxy class を考えてみる。</title>
         <description><![CDATA[Flash プロジェクトで大抵外部にアクセスするのは画像・XML・API・Remoting・バイナリ通信・たまにテキスト辺りだと思うので、プロジェクト毎に各 View クラスの 親クラスに必要な <a href="http://livedocs.adobe.com/flex/3_jp/langref/flash/utils/Proxy.html" target="_blank">Proxy クラス</a>を拡張した RemoteProxy のインスタンスを protected で出し入れしておくとかなり楽な気がする。Loader・URLLoader や独自ラッパークラスのインスタンス生成を View 毎にする必要が無くなる。

RemoteProxy の強みは何と言っても Dynamic クラスのため、プロパティや関数を動的に作成することが出来ること。いちいちその都度その都度外部にアクセスするために public 関数を独自に定義するを必要が無い。要は callProperty で設定する関数の syntax や setProperty で渡す変数名を個人的な決め毎で設定しておけば、かなりの確率で再度設定する必要が無い。

例えば、Zend_Amf_Server の UserController の debug という関数を呼び出すとすると、View クラスでは

<pre class="prettyprint">
this._cfZendAmfProxy.addEventListener(CFZendAmfProxyEvent.RESULT, _resultHandler, false, 0, true);
this._cfZendAmfProxy.addEventListener(IOErrorEvent.IO_ERROR, _ioErrorHandler, false, 0, true);
this._cfZendAmfProxy.UserController_debug('Hello World');
</pre>

で、RemoteProxy class 内部は

<pre class="prettyprint">
flash_proxy override function callProperty(method:*, ...params):*
{
    _call(method, params);
}
private function _call(method:*, params:*):void
{
    var methodName:String = method.toString();
    if(methodName.indexOf("_"))
        methodName = methodName.split("_").join(".");		
    this._nc.call(methodName, this._responder, params[0]);
}
</pre>

また、Zend_Amf_Server の UserController の sendMail という関数を呼び出すとすると、View クラスでは

<pre class="prettyprint">
this._cfZendAmfProxy.addEventListener(CFZendAmfProxyEvent.RESULT, _resultHandler, false, 0, true);
this._cfZendAmfProxy.addEventListener(IOErrorEvent.IO_ERROR, _ioErrorHandler, false, 0, true);
this._cfZendAmfProxy.UserController_debug(mailVO);
</pre>

という感じで RemoteProxy class の内部は変わらない。]]></description>
         <link>http://dev.convexstyle.net/2009/11/remoteproxy_class.html</link>
         <guid>http://dev.convexstyle.net/2009/11/remoteproxy_class.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">ActionSctipt 3.0</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Flash</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">ActionScript 3.0</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Flash Remoting</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Framework</category>
        
         <pubDate>Sun, 08 Nov 2009 17:13:48 +0900</pubDate>
      </item>
            <item>
         <title>Zend_Paginator を使ってみる。</title>
         <description><![CDATA[こんにちわ。
Sydney に渡って前半開発に頑張りすぎて肩こりが酷くなったので、たまには運動しないとと思い最近 15 年くらいやってて多少自信があったスケボーを購入してやり始めたんですが、2 週間目で疲労骨折気味になってしまい、全く動けなくなっている <a href="http://www.convexstyle.com/" target="_blank">convexstyle</a> です。意味ねえ…

・・・・・

最近のプロジェクトで <a href="http://framework.zend.com/manual/ja/zend.paginator.html" target="_blank">Zend_Paginator</a> を初めて使ってみました。
今までは <a href="http://pear.php.net/package/Pager" target="_blank">PEAR::Pager</a> を使っていたけど、Zend Framework に入ってなかなか便利だというのを聞いていたので使ったが便利だった。

Zend_Paginator_Adapter_DbSelect はかなり良いらしいが、今回は CMS の API 経由で XML をパースして表示する形式だったので、シンプルに Zend_Paginator_Adapter_Array をアダプタとしては使用した。

ページにどの様に表示するかは CSS/XHTML とテンプレートエンジン（Smarty など）の問題なので、色々やり方はあるしそこまで重要では無いが、重要な点はどの様に URI の syntax をテンプレートエンジンのレンダリング結果に受け渡すかだろう。

まずはどの様な値が Zend_Paginator から返されるか dump してみる。

<pre class="prettyprint">
$_paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($_data));
$_paginator->setCurrentPageNumber($_pageId);
$_paginator->setItemCountPerPage($this->_pagerIni->blog_per_page);
$_paginator->setPageRange($this->_pagerIni->page_range);
<strong>Zend_Debug::dump($_paginator->getPages('Sliding'));</strong>
</pre>

結果は stdClass 形式で下記の様に返される。

<pre class="prettyprint">
object(stdClass)#69 (12) {
  ["pageCount"]=>
  int(1)
  ["itemCountPerPage"]=>
  int(3)
  ["first"]=>
  int(1)
  ["current"]=>
  int(1)
  ["last"]=>
  int(1)
  ["pagesInRange"]=>
  array(1) {
    [1]=>
    float(1)
  }
  ["firstPageInRange"]=>
  float(1)
  ["lastPageInRange"]=>
  float(1)
  ["currentItemCount"]=>
  int(2)
  ["totalItemCount"]=>
  int(2)
  ["firstItemNumber"]=>
  int(1)
  ["lastItemNumber"]=>
  int(2)
}
</pre>]]></description>
         <link>http://dev.convexstyle.net/2009/11/zend_paginator.html</link>
         <guid>http://dev.convexstyle.net/2009/11/zend_paginator.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Zend Framework</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Zend</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Zend Framework</category>
        
         <pubDate>Fri, 06 Nov 2009 16:52:27 +0900</pubDate>
      </item>
            <item>
         <title>Fluent Interface が気になる。</title>
         <description><![CDATA[最近、この<a href="http://en.wikipedia.org/wiki/Fluent_interface" target="_blank">手法</a>が気になる。]]></description>
         <link>http://dev.convexstyle.net/2009/10/fluent_interface.html</link>
         <guid>http://dev.convexstyle.net/2009/10/fluent_interface.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">OOP</category>
        
         <pubDate>Wed, 28 Oct 2009 17:58:41 +0900</pubDate>
      </item>
            <item>
         <title>Zend_Amf + Win/Linux compatibility</title>
         <description><![CDATA[最近 PHP よりのネタばかりだ。。。

Windows サーバでの開発とかした時が無かったし、Flash デベロッパーのつもりなんであんま気にしてなかったんだけど、Zend Amf Server を設置して Flash と連携しようと思ってはまった。まあ、バックスラッシュとかそういった問題なんだけど一瞬途方に暮れたんでメモ。PHP 専門の人には基本中の基本だろうけど。

<a href="http://framework.zend.com/manual/ja/zend.amf.server.html" target="_blank">Zend Amf Server</a> 単体も個人的には通常の Zend Framework での開発と構成を同じにしたいので、ini_set でライブラリをいつもの様に下記の様に設定。でもこれだと Windows で動かず。

<pre class="prettyprint">
ini_set('include_path',ini_get('include_path').':../_application/libs:');
</pre>

すべてを吸収するのは不可能だとか途方に暮れてたら、PATH_SEPARATOR とか定数があるんですね。知りませんでした。なので下記の様に変更する事で対応出来ました。これで windows（xampp など）のローカルでの簡単なテストも行けますね。

<pre class="prettyprint">
&lt;?php
<strong>if(!defined('PATH_SEPARATOR')) {
    if(substr(strtoupper(PHP_OS), 0, 3) == 'WIN') {
        define('PATH_SEPARATOR', ';');
    } else {
        define('PATH_SEPARATOR', ':');
    }
}</strong>
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . '../_application/libs');
//. .(一部削除) . .
$_envIni = new Zend_Config_Ini(CONFIG_BASE . 'app.ini', 'env');
$_server   =& new Zend_Amf_Server();
$_server->setClass('UserController');
$_server->setClassMap('UserVO', 'UserVO');
if($_envIni->status == 'test') {
    $_server->setProduction(false);
}
$_response = $_server->handle();
echo $_response;
</pre>

・・・・・

2011 年初め辺りに日本に復帰するだろう。まだ１年以上あるんだけど、その時期が自分的にはいい時期です。また日本で働ける様に、それまで海外でもっとウェブを鍛錬します。]]></description>
         <link>http://dev.convexstyle.net/2009/10/zend_amf_winlinux_compatibilit.html</link>
         <guid>http://dev.convexstyle.net/2009/10/zend_amf_winlinux_compatibilit.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Zend Framework</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">Flash</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Zend Framework</category>
        
         <pubDate>Sat, 24 Oct 2009 17:22:56 +0900</pubDate>
      </item>
            <item>
         <title>fancybox + URL 書き換え + Zend Framework</title>
         <description><![CDATA[<a href="http://fancybox.net/" target="_blank"><img src="http://dev.convexstyle.net/images/entry/200910/fancybox_logo.gif" width="386" height="110" alt="Fancybox" title="Fancybox" class="link" /></a>

Javascript と言えば、自前か JQuery 関連以外はあんまり使ったことが無いので library とか良く分からないですが、最近 thickbox 風の <a href="http://fancybox.net/" target="_blank">fancybox</a> っていうのをプロジェクトで初めて使ってみた。使い方は物凄く簡単であえて説明をする必要もないので<a href="http://fancybox.net/howto" target="_blank">使用方法</a>を見てもらうとして、こんな感じの見た目。

<a href="http://www.convexstyle.net/test/fancybox.html" target="_blank">ここ</a>

で、決まった URL 静的に html に記述、もしくは動的な URL を PHP 等でレンダリングして fancybox を割り当てるのは簡単なんですが、DOM 生成後に fancybox への URL をイベント毎に変更して割り当てるにはどうするんだと思って少しはまったのでメモ。

例えばユーザーの入力要素を付加した動的な URL（Zend Framework では Get 変数や UserParam 変数）を iframe 表示する場合。表示エリアが十分で、非同期に Ajax 処理できる場合は特に fancybox を選択する必要が無いので問題ないんだけど、表示スペースの問題でポップアップが必要な場合に当てはまるかも。ちなみに fancybox には thickbox の tb_show や tb_remove 等の様に関数からの処理が出来ない模様。
]]></description>
         <link>http://dev.convexstyle.net/2009/10/fancybox_dynamic_url_zend_fram.html</link>
         <guid>http://dev.convexstyle.net/2009/10/fancybox_dynamic_url_zend_fram.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javascript</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Zend Framework</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">Javascript</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">JQuery</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Zend Framework</category>
        
         <pubDate>Thu, 22 Oct 2009 01:00:03 +0900</pubDate>
      </item>
            <item>
         <title>Zend_View の複製 - clone -</title>
         <description><![CDATA[シドニーに来て一番忙しかった週を乗り越えて、ようやく少しだけゆったり出来る！
クリスマスに向けて海外は追い込みなんですよねー。

・・・・・

そんな感じで、PHP でオブジェクトを複製するのに clone ってのが使えるんですね。
例えばメールを送る時や API の Post データのレンダリングを動的に行う時など、Zend_View_Interface を implements した Zend_View_Smarty（名前は任意）を複製して通常の View の処理と明示的に分けたりする。ここら辺の修理は以前非効率なやり方してた。

例えばこんな感じか。

<pre>
public function testAction()
{
    $_req       =& $this->getRequest();
    $_firstname = $_req->getPost('firstname');
    $_lastname  = $_req->getPost('lastname');
    $_email     = $_req->getPost('email');
    $_from      = $this->mailIni->from;
    $_subject   = $this->mailIni->subject;
    $_data = array(
    );
    $_mailData = array(
        'firstname' => $_firstname,
        'lastname'  => $_lastname
    );
    // View の複製
    <strong>$_view = clone $this->view;</strong>
    $_view->assign('_mailData', $_mailData);
    $_body = $_view->render('mail/_body.tpl');
    $_mail =& new Zend_Mail();
    $_mail->addTo($_email);
    $_mail->setFrom($_from);
    $_mail->serSubject($_subject);
    $_mail->setBodyText($_body);
    $_mail->send();
    // 通常の View
    $this->view->data = $_data;
}
</pre>

・・・・・

[<strong>参考サイト</strong>]
<a href="http://php.benscom.com/manual/ja/language.oop5.cloning.php" target="_blank">オブジェクトのクローン作成</a>]]></description>
         <link>http://dev.convexstyle.net/2009/10/zend_view_clone.html</link>
         <guid>http://dev.convexstyle.net/2009/10/zend_view_clone.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Zend Framework</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">Framework</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">PHP</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Zend</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Zend Framework</category>
        
         <pubDate>Tue, 20 Oct 2009 19:01:39 +0900</pubDate>
      </item>
            <item>
         <title>DoubleClick-InStream + AS3</title>
         <description><![CDATA[<img src="http://dev.convexstyle.net/images/entry/200909/doubleclick.gif" width="500" height="335" alt="DoubleClick-InStream" title="DoubleClick-InStream" />

通常の Flv ビデオを FlvPlayBack や Video オブジェクトで再生する際に、何からの宣伝やコマーシャル用のプリロールやミッドロールやポストロールビデオを流す際に便利な <a href="http://code.google.com/intl/ja-JP/apis/in-stream/docs/index.html" target="_blank">DoubleClick-InStream</a>。プラットフォームは Flash Player、Silverlight、Windows Media Player、Real Player に対応しています。リクエストする URL にアクセスすると doubleclick サーバが xml にリダイレクトして、広告タイプによって値を返してきて、それを Flash 側でどの様に表示するかをリスポンスの後に設定します。自分は FlvPlayBack を使用して他の Flv と連携する Flash in Flash タイプを使用したので、doubleclick サーバにアクセスすると勝手に Flv とリンク先が返ってきました。

自分も 100 ％理解した訳ではなくドキュメントを読んでも分からない部分があったんですが、今回のプロジェクトでは上手く通常の Flv と宣伝用 Flv を難しいコードを記述すること無く同期出来たので、自分の為に忘れない様にメモ。

<strong>（１）インストール</strong>

MXP で入れるタイプと SDK で入れるタイプが google code より提供されています。タイプも <a href="http://code.google.com/apis/in-stream/docs/sdks/googleflashas3.html" target="_blank">Google In-Stream</a> と <a href="http://code.google.com/apis/in-stream/docs/sdks/flashas3.html" target="_blank">DoubleClick In-Stream</a> があるようで、自分は Google In-Stream を使用したんですが、後者は書くソースが違って結果は同じようです。

<strong>（２）リクエストとリスポンス</strong>

下記の様な URL にアクセスします。ブラウザでアクセスすると Windows Media Player が起動しますが、Component や SDK ベースのコードベースでアクセスすると、内的な処理は XML で返ってるようです。その後の処理はどうなってるかはよく分かりません。

<pre>
http://ad.doubleclick.net/pfadx/AngelaSite;kw=dclkvideo;sz=120x350;ord=3577745;
</pre>

Google In-Stream の場合は <a href="http://code.google.com/intl/ja-JP/apis/in-stream/docs/sdks/googleflashas3_apis.html#AdsLoader" target="_blank">AdsLoader</a> と <a href="http://code.google.com/intl/ja-JP/apis/in-stream/docs/sdks/googleflashas3_apis.html#AdsRequest" target="_blank">AdsRequest</a> クラスを使用してアクセスするので、URLLoader クラスと URLRequest クラスのを使用する方法といたって基本は同じです。


<strong>（３）マッピング</strong>

リスポンスは AdsRequest.adType の値によって変わるようなので、この値を基に  AdsLoader.load した際のイベントハンドラ内でどのようなメディアが返ってくるか判断します。Video の表示は <a href="http://code.google.com/intl/ja-JP/apis/in-stream/docs/sdks/googleflashas3_apis.html#VideoAdsManager" target="_blank">VideoAdsManager</a> を使用して行います。ここで凄いな！って思ったのは、videoAdsManager.load(flvPlayBack or VideoObject) / videoAdsManager.play(flvPlayBack or VideoObject) を設定するだけで、勝手に Flv が通常の FlvPlayBack や Video オブジェクトに表示されちゃうことです。後は AdEvent.COMPLETE イベントハンドラが呼ばれたら Flv の表示は終了なのでこのタイミングで任意の処理をします。１つ忘れては行けないことは videoAdsManager.clickTrackingElement に任意の DisplayObject を設定してやることです。そうしないとエラーになります。自分の場合はプリロールなので、AdEvent.COMPLETE が dispatch された時点で、次の通常の Flv を表示する様にコーディングしました。

<strong>（４）集計</strong>

ドキュメントによれば load や complete のトラッキングや AFV(Adsense for Video) でクリックのインプレッションをトラッキングしてくれるそうです。]]></description>
         <link>http://dev.convexstyle.net/2009/09/doubleclickinstream_as3.html</link>
         <guid>http://dev.convexstyle.net/2009/09/doubleclickinstream_as3.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">ActionSctipt 3.0</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Flash</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Library</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">Advertisement</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Flv</category>
        
         <pubDate>Fri, 04 Sep 2009 21:33:08 +0900</pubDate>
      </item>
            <item>
         <title>Flash Builder 4 Beta/Flex Builder 3 + SVN</title>
         <description><![CDATA[自分のローカルの開発環境は Windows/MAC ともに、<a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/R/eclipse-php-galileo-macosx-cocoa.tar.gz" target="_blank">Eclipse For PHP Developer</a> で HTML/PHP 系の開発、Flex Builder 3/Flash Builder 4 Beta + Flash CS4 で Flash/Flex/AIR 系の開発、<a href="http://www.apachefriends.org/jp/xampp-windows.html" target="_blank">XAMPP</a> を入れて簡単なテスト作業はローカルで行ったり Shell でサーバに入って vim で開発であったり。

でもシドニーに来てから日本の個人サーバへのアクセスが物凄く遅くなったし、毎日  MacBook Pro 17 を会社に持って行ってたらメチャクチャ肩がおかしくなったし、会社のワークだけではなく個人のワークもちゃんと管理していこうと思って、SVN Repository Explorer を使おうと Flex Builder 3/<a href="http://labs.adobe.com/technologies/flashbuilder4/" target="_blank">Flash Builder 4 Premium Beta</a> にプラグインをインストール。

<img src="http://dev.convexstyle.net/images/entry/200908/svn_flashbuilder.gif" width="500" height="335" alt="SVN Repository Explorer" title="SVN Repository Explorer" />

特に面倒ではないけど普通には Software Update でプラグインをインストール出来なかったので一応メモ。

<strong>(1) Subclipse をダウンロード</strong>
<a href="http://subclipse.tigris.org/" target="_blank">tigris.org</a> の<a href="http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240" target="_blank">ダウンロードページ</a>から最新の安定板をダウンロードする。

<strong>(2) ファイル解凍。</strong>
解凍して features と plugins ディレクトリの中身を各自、Flash Builder 4/Flex Builder 3 がインストールされているアプリケーションディレクトリ内の features と plugins ディレクトリ内にコピー。

<strong>(3) Flash Flash Builder 4/Flex Builder 3 を起動。</strong>
Flash Builder 4/Flex Builder 3 が起動している場合が再起動。

<strong>(4) SVN Interface の変更。</strong> 
Windows の Eclipse For PHP Developer では <a href="http://eclipsewiki.net/eclipse/?Subclipse%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3" target="_blank">JavaHL</a> では ssh+svn でアクセス出来なかったので、一応、SVN interface を <a href="http://svnkit.com/documentation.html" target="_blank">SVNKit</a> に変更。Windows &gt; Perspective もしくは 右上のボタンから SVN Repository Explorer を起動して svn+ssh で自分のサーバのレポジトリにアクセスして、好きなワークフォルダをチェックアウト。http の場合は JavaHL で良い模様。

<strong>(5) チェックアウト。</strong>
SVN Repository Explorer 内にある好きなプロジェクトを Flex Project、Flash Project、Air Project のいずれかにして checkout。

<strong>(6) アップデート。</strong>
変更したら絶えず SVN Update。


ちなみに Eclipse For PHP Developer には Subclipse, <a href="http://aptana.com/" target="_blank">Aptana</a>, <a href="http://hp.vector.co.jp/authors/VA000137/eclipse/smarty_editor/smarty_editor.html" target="_blank">SmartyEditor</a> 辺りのプラグインを入れ、特に開発はめんどくさくない。後、FTP とか SSH とか調べてみよう。

・・・・・

前々からやろうと思ってやってなかったのですが、とにかく個人プロジェクトレベルでも同期しておいた方が楽だ。「以前どう処理したっけ！？」とかプロジェクトで忘れた時も、会社でも自分のソースが読めるし！]]></description>
         <link>http://dev.convexstyle.net/2009/08/flash_builder_4_betaflex_build.html</link>
         <guid>http://dev.convexstyle.net/2009/08/flash_builder_4_betaflex_build.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">開発環境</category>
        
        
         <pubDate>Sat, 29 Aug 2009 22:08:42 +0900</pubDate>
      </item>
            <item>
         <title>RemoteProxy + Zend_Amf in AS3</title>
         <description><![CDATA[<a href="http://livedocs.adobe.com/flex/3/langref/flash/utils/Proxy.html" target="_blank">Proxy</a> class を extends した RemoteProxy class を作って <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/net/NetConnection.html" target="_blank">Zend_Amf_Server</a> にアクセス。
所謂、RemoteProxy Pattern を使用して RPC で Zend_Amf_Server 側の controller の関数をコール。

NetConnection オブジェクトで Zend_Amf_Server にアクセスする際に NetConnection.Connect.Success が NetStatusEvent で返ったのを確実に確認してから RPC しようと思ってたんだけど、NetConnection.Connect.Success って返らないんですね。NetConnection.Call.Failed などはきちんと返るんですが、接続成功時は NetStatusEvent の evt.info.code が何故か取得出来ない。

]]></description>
         <link>http://dev.convexstyle.net/2009/08/remoteproxy_zend_amf_in_as3.html</link>
         <guid>http://dev.convexstyle.net/2009/08/remoteproxy_zend_amf_in_as3.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">ActionSctipt 3.0</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Flash</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Flash Remoting</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Zend Framework</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">ActionScript</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">ActionScript 3.0</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Zend Framework</category>
        
         <pubDate>Tue, 25 Aug 2009 22:07:53 +0900</pubDate>
      </item>
            <item>
         <title>FlvPlayBack Component エラー + AS3（解決）</title>
         <description><![CDATA[<a href="http://dev.convexstyle.net/2009/08/flvplayback_component_as3_1.html" target="_blank">先日のエントリー（FlvPlayBack Component エラー + AS3）</a>で記述した FlvPlayBack Component で存在しない Flv へアクセスした際の Error が Catch 出来なかったことについて、どなたか分かりませんが有難いコメントを頂きまして解決しましたので、メモ。関数の詳細を見落としてたー！！

FlvPlayBack に <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/fl/video/FLVPlayback.html#getVideoPlayer()" target="_blank">getVideoPlayer(index:Number)</a> というメソッドがあって、クラス内に FlvPlayBack が 1 つのみある状態（activeVideoPlayerIndex が 0 ）なので getVideoPlayer(0) で <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/fl/video/VideoPlayer.html" target="_blank">VideoPlayer</a> オブジェクト を作成し、このオブジェクトの netStream という getter メソッドで <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/net/NetStream.html" target="_blank">NetStream</a> オブジェクトを取得し、後は通常の <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/events/NetStatusEvent.html" target="_blank">NetStatusEvent</a> で状態を listen して対応するという事らしいです。今回は存在しない Flv の URL を設定された時対処したかったので、NetStatusEvent の info.code が NetStream.Play.StreamNotFound になる時に対応出来ました。NetStream オブジェクトを通常の様に管理できるので close, seek, resume などのメソッド等も同様に対応できる様。

これで明快ですね！]]></description>
         <link>http://dev.convexstyle.net/2009/08/flvplayback_component_as3.html</link>
         <guid>http://dev.convexstyle.net/2009/08/flvplayback_component_as3.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">ActionSctipt 3.0</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Flash</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">ActionScript 3.0</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">Flash</category>
        
         <pubDate>Thu, 20 Aug 2009 22:38:33 +0900</pubDate>
      </item>
      
   </channel>
</rss>
