<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DigiTechLog Dot Com &#187; AIR</title>
	<atom:link href="http://digitechlog.com/category/programming/adobe-air/feed" rel="self" type="application/rss+xml" />
	<link>http://digitechlog.com</link>
	<description>Adobe AIR、Flex、Flash、Java</description>
	<lastBuildDate>Tue, 08 Nov 2011 12:46:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Alcon: オープンソースのActionScript向けの軽量デバッギングツール</title>
		<link>http://digitechlog.com/2009/10/15/alcon-a-lightweight-debugging-tool-for-actionscript-developers.html</link>
		<comments>http://digitechlog.com/2009/10/15/alcon-a-lightweight-debugging-tool-for-actionscript-developers.html#comments</comments>
		<pubDate>Thu, 15 Oct 2009 14:27:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash Project]]></category>
		<category><![CDATA[オープンソース]]></category>
		<category><![CDATA[ツール]]></category>
		<category><![CDATA[デバッギング]]></category>

		<guid isPermaLink="false">http://digitechlog.com/2009/10/15/alcon-a-lightweight-debugging-tool-for-actionscript-developers.html</guid>
		<description><![CDATA[この前の「使いやすいオープンソースのActionScriptデバッグツールリスト」にも紹介していましたが、Alconとは、Sascha Balkau氏が開発され、パフォーマンス情報が見れたり、オブジェクトの詳細な情報をダンプ出来てオープンソースのActionScript 2及びActionScript 3向けの軽量デバッグツールです。
Alconの最初のバージョンはFlash Player 7の時代から書かれたものですので、そのバージョンはActionScriptのtraceによってログを取るだけのツールです。
AlconはAdobe AIRでも動作できます。FlexコンパイラのFlash IDEやMTASC(※MTASC（Motion-Twin ActionScript2 Compiler）: フリーのコマンドラインActionScript(Flash)コンパイラ)中にも使えます。
 

以下の様の特徴があります。

Rewritten for Adobe AIR.
Trace API to output any kind of data in the same fashion ActionScript’s own trace method does but with severity levels, filtering and recursive object tracing.
A new App Monitor that monitors Framerate, Frame Render Time and Memory Consumption.
A completely new Object [...]]]></description>
			<content:encoded><![CDATA[<p>この前の「<a href="http://digitechlog.com/2008/12/07/the-list-of-easy-to-be-used-actionscript-debug-tools-open-source-flash.html">使いやすいオープンソースのActionScriptデバッグツールリスト</a>」にも紹介していましたが、Alconとは、Sascha Balkau氏が開発され、パフォーマンス情報が見れたり、オブジェクトの詳細な情報をダンプ出来てオープンソースのActionScript 2及びActionScript 3向けの軽量デバッグツールです。</p>
<p>Alconの最初のバージョンはFlash Player 7の時代から書かれたものですので、そのバージョンはActionScriptのtraceによってログを取るだけのツールです。</p>
<p>AlconはAdobe AIRでも動作できます。FlexコンパイラのFlash IDEやMTASC(※<a href="http://digitechlog.com/2009/01/23/actionscript-2-open-source-free-compiler-mtasc.html">MTASC（Motion-Twin ActionScript2 Compiler）: フリーのコマンドラインActionScript(Flash)コンパイラ</a>)中にも使えます。</p>
<p><a href="http://digitechlog.com/wp-content/uploads/2009/10/Alcon.png"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Alcon" src="http://digitechlog.com/wp-content/uploads/2009/10/Alcon_thumb.png" width="484" height="561"></a> </p>
<p><span id="more-684"></span>
<p>以下の様の特徴があります。</p>
<ul>
<li>Rewritten for Adobe AIR.
<li>Trace <acronym>API</acronym> to output any kind of data in the same fashion ActionScript’s own trace method does but with severity levels, filtering and recursive object tracing.
<li>A new App Monitor that monitors Framerate, Frame Render Time and Memory Consumption.
<li>A completely new Object Inspector to view the properties of Objects, Arrays and Classes.
<li>Included Help-Panel for quick access to Help and <acronym>API</acronym> documentation.
<li>Supports ActionScript 2 and 3.
<li>Two File Loggers which can be activated optionally to monitor log files.
<li>Options Dialog to comfortably configure settings like background and text colors, output font and many other preferences.
<li>Auto-Update.</li>
</ul>
<p>実際使ってみるとアプリケーションの監視機能は「えー！」（強いな）という驚嘆を出るかもしれません。これはFlashアプリケーションに直接FPS計測機能を埋め込む必要がなくなりますから。</p>
<p>簡単でといえば、Alconは使いやすいツールですが、ドキュメントやサンプルなど資料はそんなに多くないです。興味がある方たちは自分の力を引き出しましょう。</p>
<p>【関連リンク】</p>
<p><a title="http://blog.hexagonstar.com/alcon/" href="http://blog.hexagonstar.com/alcon/">http://blog.hexagonstar.com/alcon/</a>　公式サイト</p>
<p><a title="http://www.infoq.com/news/2008/09/alcon3-released" href="http://www.infoq.com/news/2008/09/alcon3-released">http://www.infoq.com/news/2008/09/alcon3-released</a>　InfoQから開発者とのインタビュー</p>
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://digitechlog.com/2008/12/07/the-list-of-easy-to-be-used-actionscript-debug-tools-open-source-flash.html" title="使いやすいオープンソースのActionScriptデバッグツールリスト">使いやすいオープンソースのActionScriptデバッグツールリスト</a></li>
<li><a href="http://digitechlog.com/2010/03/12/7-asynchronous-processing-open-source-actionscript-library.html" title="７+ AS3で非同期処理のオープンソースのライブラリ一覧">７+ AS3で非同期処理のオープンソースのライブラリ一覧</a></li>
<li><a href="http://digitechlog.com/2010/02/13/as3unit-actionscript-3-junit-for-flash.html" title="AS3Unit: ActionScript 3.0上JUnit4の移植、単体テストを行うためのフレームワーク">AS3Unit: ActionScript 3.0上JUnit4の移植、単体テストを行うためのフレームワーク</a></li>
<li><a href="http://digitechlog.com/2010/02/07/foam-as3-2d-rigid-body-physics-engine.html" title="FOAM-AS3: ActionScript 3で開発されたオープンソースの２D物理エンジン">FOAM-AS3: ActionScript 3で開発されたオープンソースの２D物理エンジン</a></li>
<li><a href="http://digitechlog.com/2009/08/25/phpobject-is-a-flash-remoting-alternative-for-php.html" title="PHPObject: PHPとFlashのActionScript連携パッケージ">PHPObject: PHPとFlashのActionScript連携パッケージ</a></li>
<li><a href="http://digitechlog.com/2009/08/05/jags-open-source-java-actionscript-game-server.html" title="JAGS Game Server: JavaとAS3でオープンソースのゲームサーバ">JAGS Game Server: JavaとAS3でオープンソースのゲームサーバ</a></li>
<li><a href="http://digitechlog.com/2009/06/22/silex-an-open-source-cms-ria-software-build-flash-websites.html" title="SILEX: WYSIWYGでFlashサイトを構築できるオープンソースのRIA開発ツール">SILEX: WYSIWYGでFlashサイトを構築できるオープンソースのRIA開発ツール</a></li>
<li><a href="http://digitechlog.com/2009/06/19/movie-masher-open-source-video-editing-tools.html" title="Movie Masher: ActionScript 3ベースのオンラインビデオエディタ">Movie Masher: ActionScript 3ベースのオンラインビデオエディタ</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://digitechlog.com/2009/10/15/alcon-a-lightweight-debugging-tool-for-actionscript-developers.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>トップ７個アドビAIRビデオアプリケーション</title>
		<link>http://digitechlog.com/2009/07/25/top-7-adobe-air-apps-for-videos-you-should-know.html</link>
		<comments>http://digitechlog.com/2009/07/25/top-7-adobe-air-apps-for-videos-you-should-know.html#comments</comments>
		<pubDate>Sat, 25 Jul 2009 14:42:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://digitechlog.com/2009/07/25/top-7-adobe-air-apps-for-videos-you-should-know.html</guid>
		<description><![CDATA[その前の「Adobe AIRマルチメディアアプリケーションツールリスト（写真とビデオなど）」にアドビAIRで開発する写真とビデオ関係アプリケーションを紹介しましたが、AIRはFlashフォーマットなどビデオもプレーでき、使いやすいので、eBayやAOLなどいろいろ大手もその技術を利用しています。アドビAIRベースアプリケーションもいろいろ出てきました。今回はビデオ関係のみトップのAIRアプリケーションをピックアップして次にリストします。ぜひ使ってみてください。
※Adobe AIR（Adobe Integrated Runtime）とは米アドビシステムズが開発中のアプリケーション実行環境である。2007年6月にWindowsおよびMac OS X向けのベータ版が公開された。以前はApolloという開発コード名で呼ばれていた。正式版は2007年後半にリリースする見通し。Adobe AIRを使えば，Webアクセスに代表されるインターネットの使い方と密に連携しながらも，Webブラウザの枠にとらわれないアプリケーションを開発できるようになる。Adobe AIRを導入すれば、既存の技術や人、プロセスはそのままに、ブランディング機能を備えた画期的なアプリケーションで新次元のカスタマーエンゲージメントを実現出来る。
 

Adobe Media Player

それは前回も紹介しました。Adobe® Media Playerには、オンラインでもオフラインでも、見たい番組を好きなときに視聴できる多彩な機能が搭載されています。インターネットTVコンテンツのお気に入りリストを作ってダウンロードしたり、新しいエピソードが追加されるごとに自動的にダウンロードすることはもちろん、好きなときに視聴するための個人ビデオライブラリ作成もできます。
&#160;
&#160;
DeskTube 

DeskTubeについて日本語資料はぜんぜん見つからなかったです。 DeskTubeとはYouTubeにてインタネットブラウザみたいデスクトップクライアントです。DeskTubeを使ってYouTubeメディアのビュー、検索、コメント、アップロード及びダウンロードできます。IE、FireFoxやsafariなどを使わずYouTubeもご覧できます。簡単でマウスをダブルクリックして出来ます。
&#160;
&#160;
FLVPlay HD

FLVPlay HDはローカル／リモートのFLVとかMP４とかのプレーすることを可能です。 ローカルファイルもYouTubeみたいですよ。

&#160;
RichFLV 

FLV中の音楽はMP3へ変換したい場合があるのですか。RichFLVを利用してFLVデータの読み取り、カット、FLV→MP3とFLV→SWFの変換は可能です。

&#160;
SideShow 

SideShowは、flv, mp4, m4v, m4a, 3gp, mov, f4v, f4p, f4a, f4b, mp3などビデオフォーマットがサポートされています。　UIはSasami2Kベースで作られました。※Sasami2Kは２００１年から開発は止められました。
 
&#160;
Xe-MoviePlayer

Xe-MoviePlayerとは、Flickrクライアントにもなる動画プレイヤー、Web上に公開されている動画や様々な形式の動画ファイルに対応したマルチメディアプレイヤーです(F4V/ MP4/ M4V/ M4A/ Mp4v/ 3gp/ 3g2/ flvなどに対応)。スナップショット機能を備えており、お気に入りの場面を画像ファイルとして保存することができます。また、画像共有サイト「Flickr」にアップされた画像を見ることもできるので、動画プレイヤーと同時にFlickrクライアントとしても使えるところが魅力です。

&#160;
YouTube Widget

YouTube Widgetとは、YouTubeのビデオを検索、再生するWidgetです。
 
英語版： http://ntt.cc/2009/07/04/top-7-adobe-air-apps-for-videos-you-should-know.html
Related Posts

SWFフォーマット画像ファイルをローカルに保存とするAdobe AIRアプリケーション
リッチインターネットアプリケーション (RIA) 実行環境「Adobe AIR 1.5」のLinux版を公開した
Adobe AIRアプリケーションのインストールパスにファイルURIを取得するサンプルソースコード
Adobe AIR 1.5でSQLiteデータベースを暗号化とするサンプルソースコード
Adobe AIRソーシャル・ネットワーキング(Social Network Service: [...]]]></description>
			<content:encoded><![CDATA[<p>その前の「<a href="http://digitechlog.com/2008/10/29/the-list-of-photo-and-video-application-in-adobe-air.html">Adobe AIRマルチメディアアプリケーションツールリスト（写真とビデオなど）</a>」にアドビAIRで開発する写真とビデオ関係アプリケーションを紹介しましたが、AIRはFlashフォーマットなどビデオもプレーでき、使いやすいので、eBayやAOLなどいろいろ大手もその技術を利用しています。アドビAIRベースアプリケーションもいろいろ出てきました。今回はビデオ関係のみトップのAIRアプリケーションをピックアップして次にリストします。ぜひ使ってみてください。</p>
<p>※Adobe AIR（Adobe Integrated Runtime）とは米アドビシステムズが開発中のアプリケーション実行環境である。2007年6月にWindowsおよびMac OS X向けのベータ版が公開された。以前はApolloという開発コード名で呼ばれていた。正式版は2007年後半にリリースする見通し。Adobe AIRを使えば，Webアクセスに代表されるインターネットの使い方と密に連携しながらも，Webブラウザの枠にとらわれないアプリケーションを開発できるようになる。Adobe AIRを導入すれば、既存の技術や人、プロセスはそのままに、ブランディング機能を備えた画期的なアプリケーションで新次元のカスタマーエンゲージメントを実現出来る。</p>
<p><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Adobe-AIR" src="http://digitechlog.com/wp-content/uploads/2009/07/Adobe-AIR.png" width="480" height="296"> </p>
<p><span id="more-575"></span>
<p><a href="http://www.adobe.com/cfusion/exchange/index.cfm?event=extensionDetail&amp;loc=en_us&amp;extid=1500018" rel="nofollow" target="_blank"><font size="5"><strong>Adobe Media Player</strong></font></a><br />
<hr />
<p>それは前回も紹介しました。Adobe® Media Playerには、オンラインでもオフラインでも、見たい番組を好きなときに視聴できる多彩な機能が搭載されています。インターネットTVコンテンツのお気に入りリストを作ってダウンロードしたり、新しいエピソードが追加されるごとに自動的にダウンロードすることはもちろん、好きなときに視聴するための個人ビデオライブラリ作成もできます。
<p><a href="http://digitechlog.com/wp-content/uploads/2009/07/AdobeMediaPlayer.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="Adobe-Media-Player" src="http://digitechlog.com/wp-content/uploads/2009/07/AdobeMediaPlayer_thumb.png" width="404" height="308"></a>&nbsp;
<p>&nbsp;
<p><font size="5"><a href="http://thedesktube.com/" rel="nofollow" target="_blank"><strong>DeskTube</strong></a></font><font color="#669966" size="5"><strong> </strong></font><br />
<hr />
<p>DeskTubeについて日本語資料はぜんぜん見つからなかったです。 DeskTubeとはYouTubeにてインタネットブラウザみたいデスクトップクライアントです。DeskTubeを使ってYouTubeメディアのビュー、検索、コメント、アップロード及びダウンロードできます。IE、FireFoxやsafariなどを使わずYouTubeもご覧できます。簡単でマウスをダブルクリックして出来ます。
<p><a href="http://digitechlog.com/wp-content/uploads/2009/07/desktube.jpg"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="desktube" src="http://digitechlog.com/wp-content/uploads/2009/07/desktube_thumb.jpg" width="404" height="312"></a>&nbsp;
<p>&nbsp;
<p><a href="http://www.riaforge.co.uk/go/flvplay/" rel="nofollow" target="_blank"><font size="5"><strong>FLVPlay HD</strong></font></a><br />
<hr />
<p>FLVPlay HDはローカル／リモートのFLVとかMP４とかのプレーすることを可能です。 ローカルファイルもYouTubeみたいですよ。
<p><a href="http://digitechlog.com/wp-content/uploads/2009/07/FLVPlayHD.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="FLVPlay-HD" src="http://digitechlog.com/wp-content/uploads/2009/07/FLVPlayHD_thumb.png" width="404" height="280"></a>
<p>&nbsp;
<p><a href="http://www.richapps.de/?page_id=120" rel="nofollow" target="_blank"><font size="5"><strong>RichFLV</strong></font></a><strong> </strong><br />
<hr />
<p>FLV中の音楽はMP3へ変換したい場合があるのですか。RichFLVを利用してFLVデータの読み取り、カット、FLV→MP3とFLV→SWFの変換は可能です。
<p><a href="http://digitechlog.com/wp-content/uploads/2009/07/RichFLV6.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="RichFLV" src="http://digitechlog.com/wp-content/uploads/2009/07/RichFLV6_thumb.png" width="404" height="336"></a>
<p>&nbsp;
<p><a href="http://labs.coursevector.com/wiki/index.php5?title=SideShow" rel="nofollow" target="_blank"><font size="5"><strong>SideShow</strong></font></a><strong> </strong><br />
<hr />
<p>SideShowは、flv, mp4, m4v, m4a, 3gp, mov, f4v, f4p, f4a, f4b, mp3などビデオフォーマットがサポートされています。　UIはSasami2Kベースで作られました。※Sasami2Kは２００１年から開発は止められました。</p>
<p><a href="http://digitechlog.com/wp-content/uploads/2009/07/SideShow.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="SideShow" src="http://digitechlog.com/wp-content/uploads/2009/07/SideShow_thumb.png" width="404" height="250"></a> </p>
<p>&nbsp;
<p><a href="http://www.xe-media.ch/demoV3/index.php?option=com_content&amp;view=article&amp;id=55&amp;Itemid=91" rel="nofollow" target="_blank"><font size="5"><strong>Xe-MoviePlayer</strong></font></a><br />
<hr />
<p>Xe-MoviePlayerとは、Flickrクライアントにもなる動画プレイヤー、Web上に公開されている動画や様々な形式の動画ファイルに対応したマルチメディアプレイヤーです(F4V/ MP4/ M4V/ M4A/ Mp4v/ 3gp/ 3g2/ flvなどに対応)。スナップショット機能を備えており、お気に入りの場面を画像ファイルとして保存することができます。また、画像共有サイト「Flickr」にアップされた画像を見ることもできるので、動画プレイヤーと同時にFlickrクライアントとしても使えるところが魅力です。</p>
<p><a href="http://digitechlog.com/wp-content/uploads/2009/07/XeMoviePlayerV3.jpg"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="XeMoviePlayer-V3" src="http://digitechlog.com/wp-content/uploads/2009/07/XeMoviePlayerV3_thumb.jpg" width="404" height="296"></a>
<p>&nbsp;
<p><a href="http://pogopixels.com/download/YouTube-AIR-Widget_15.html" rel="nofollow" target="_blank"><font size="5"><strong>YouTube Widget</strong></font></a></p>
<hr />
<p>YouTube Widgetとは、YouTubeのビデオを検索、再生するWidgetです。</p>
<p><a href="http://digitechlog.com/wp-content/uploads/2009/07/YouTubeWidget.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="YouTube-Widget" src="http://digitechlog.com/wp-content/uploads/2009/07/YouTubeWidget_thumb.png" width="404" height="212"></a> </p>
<p><strong>英語版：</strong> <br /><a title="http://ntt.cc/2009/07/04/top-7-adobe-air-apps-for-videos-you-should-know.html" href="http://ntt.cc/2009/07/04/top-7-adobe-air-apps-for-videos-you-should-know.html">http://ntt.cc/2009/07/04/top-7-adobe-air-apps-for-videos-you-should-know.html</a></p>
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://digitechlog.com/2009/01/16/the-tutorial-on-how-to-save-swf-file-from-an-image-bitmap-in-adobe-air.html" title="SWFフォーマット画像ファイルをローカルに保存とするAdobe AIRアプリケーション">SWFフォーマット画像ファイルをローカルに保存とするAdobe AIRアプリケーション</a></li>
<li><a href="http://digitechlog.com/2008/12/20/rich-internet-application-ria-runtime-adobe-air-15-linux-platform-is-relaeased.html" title="リッチインターネットアプリケーション (RIA) 実行環境「Adobe AIR 1.5」のLinux版を公開した">リッチインターネットアプリケーション (RIA) 実行環境「Adobe AIR 1.5」のLinux版を公開した</a></li>
<li><a href="http://digitechlog.com/2008/12/17/how-to-get-file-uri-in-adobe-air-install-path-with-source-code.html" title="Adobe AIRアプリケーションのインストールパスにファイルURIを取得するサンプルソースコード">Adobe AIRアプリケーションのインストールパスにファイルURIを取得するサンプルソースコード</a></li>
<li><a href="http://digitechlog.com/2008/11/22/encrypt-your-sqlite-database-in-adobe-air-15.html" title="Adobe AIR 1.5でSQLiteデータベースを暗号化とするサンプルソースコード">Adobe AIR 1.5でSQLiteデータベースを暗号化とするサンプルソースコード</a></li>
<li><a href="http://digitechlog.com/2008/11/04/the-list-of-adobe-air-social-network-application-tools.html" title="Adobe AIRソーシャル・ネットワーキング(Social Network Service: SNS)アプリケーションリスト">Adobe AIRソーシャル・ネットワーキング(Social Network Service: SNS)アプリケーションリスト</a></li>
<li><a href="http://digitechlog.com/2008/11/03/the-list-of-micrologging-like-twitter-adobe-air-application.html" title="Twitterなどマイクロブログイン(Microblogging)とコミュニケーションしやすいAdobe AIRアプリケーションリスト">Twitterなどマイクロブログイン(Microblogging)とコミュニケーションしやすいAdobe AIRアプリケーションリスト</a></li>
<li><a href="http://digitechlog.com/2008/10/29/the-list-of-photo-and-video-application-in-adobe-air.html" title="Adobe AIRマルチメディアアプリケーションツールリスト（写真とビデオなど）">Adobe AIRマルチメディアアプリケーションツールリスト（写真とビデオなど）</a></li>
<li><a href="http://digitechlog.com/2008/10/29/the-list-of-google-pruduct-in-adobe-air.html" title="Adobe AIRが使ったGoogle関係製品のリスト">Adobe AIRが使ったGoogle関係製品のリスト</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://digitechlog.com/2009/07/25/top-7-adobe-air-apps-for-videos-you-should-know.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Masapi: Flex／Flash／AIRで大量ファイルをロード用のオープンソースのフレームワーク</title>
		<link>http://digitechlog.com/2009/05/16/masapi-flash-flex-air-as3-framework-for-the-massive-loading-massload.html</link>
		<comments>http://digitechlog.com/2009/05/16/masapi-flash-flex-air-as3-framework-for-the-massive-loading-massload.html#comments</comments>
		<pubDate>Sat, 16 May 2009 08:17:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash Project]]></category>
		<category><![CDATA[Masapi]]></category>
		<category><![CDATA[URLLoader]]></category>

		<guid isPermaLink="false">http://digitechlog.com/2009/05/16/masapi-flash-flex-air-as3-framework-for-the-massive-loading-massload.html</guid>
		<description><![CDATA[「Masapi」とは、Flex／Flash／AIRで大量ファイルをロードする用のオープンソースのAS３フレームワークです。URLLoaderやLoaderというクラスと同じインタフェースを持っています。
※URLLoader クラスは、指定した URL からテキスト、バイナリデータ、または URL エンコード形式の変数をダウンロードする際に使用します。動的なデータ駆動アプリケーションで使用するテキストファイル、XML、その他の情報をダウンロードする場合に便利です。
URLLoader オブジェクトは、データを ActionScript で使用できるようにする前に、それらのすべてのデータを URL からダウンロードします。URLLoader オブジェクトは、ダウンロードの進捗に関する通知を送信します。これらは、送出済みのイベント、さらには bytesLoaded および bytesTotal プロパティで監視できます。

「Masapi」は以下の特徴を持っています。
 
 ・Same interface for all load managers (URLLoader, Loader, &#8230;) ・Easy massive loading classes ・Advanced massive loading (priority, dependencies) ・Advanced massive loading management (loading policy, loading information, &#8230;) 
[使用方法]
１）、次のURLから最新版をダウンロードします。
http://code.google.com/p/masapi/downloads/list
２）、プロジェクトに追加する
プロジェクトに追加するため、クラスパスに「ch」というフォルダが必要です。「chフォルダをFLAと同じフォルダに置く」と「srcフォルダをクラスパスに追加する(File &#62; Publish settings &#62; Flash &#62; ActionScript 3 settings)」ってのいずれかもできます。
クラスパスに追加した上で、以下の様のソースで使えるかどうか確認します。
import ch.capi.net.*;
import&#160;ch.capi.events.*;
&#160;
var&#160;ml:MassLoader [...]]]></description>
			<content:encoded><![CDATA[<p>「Masapi」とは、Flex／Flash／AIRで大量ファイルをロードする用のオープンソースのAS３フレームワークです。URLLoaderやLoaderというクラスと同じインタフェースを持っています。</p>
<blockquote><p>※URLLoader クラスは、指定した URL からテキスト、バイナリデータ、または URL エンコード形式の変数をダウンロードする際に使用します。動的なデータ駆動アプリケーションで使用するテキストファイル、XML、その他の情報をダウンロードする場合に便利です。
<p>URLLoader オブジェクトは、データを ActionScript で使用できるようにする前に、それらのすべてのデータを URL からダウンロードします。URLLoader オブジェクトは、ダウンロードの進捗に関する通知を送信します。これらは、送出済みのイベント、さらには <code>bytesLoaded</code> および <code>bytesTotal</code> プロパティで監視できます。</p>
</blockquote>
<p>「Masapi」は以下の特徴を持っています。</p>
<p><span id="more-495"></span> </p>
<blockquote><p> ・Same interface for all load managers (URLLoader, Loader, &#8230;) <br />・Easy massive loading classes <br />・Advanced massive loading (priority, dependencies) <br />・Advanced massive loading management (loading policy, loading information, &#8230;) </p></blockquote>
<p><strong>[使用方法]</strong></p>
<p><strong>１）、次のURLから最新版をダウンロードします。</strong></p>
<p><a title="http://code.google.com/p/masapi/downloads/list" href="http://code.google.com/p/masapi/downloads/list">http://code.google.com/p/masapi/downloads/list</a></p>
<p><strong>２）、プロジェクトに追加する</strong></p>
<p>プロジェクトに追加するため、クラスパスに「ch」というフォルダが必要です。「chフォルダをFLAと同じフォルダに置く」と「srcフォルダをクラスパスに追加する(File &gt; Publish settings &gt; Flash &gt; ActionScript 3 settings)」ってのいずれかもできます。</p>
<p>クラスパスに追加した上で、以下の様のソースで使えるかどうか確認します。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">import</span><span style="color: Gray;"> </span><span style="color: Blue;">ch</span><span style="color: Gray;">.</span><span style="color: Blue;">capi</span><span style="color: Gray;">.</span><span style="color: Teal;">net</span><span style="color: Gray;">.*;</span></li>
<li><span style="color: Green;">import</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">ch</span><span style="color: Gray;">.</span><span style="color: Blue;">capi</span><span style="color: Gray;">.</span><span style="color: Blue;">events</span><span style="color: Gray;">.*;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">ml</span><span style="color: Gray;">:</span><span style="color: Blue;">MassLoader</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">MassLoader</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">ml</span><span style="color: Gray;">.</span><span style="color: Blue;">addEventListener</span><span style="color: Olive;">(</span><span style="color: Blue;">MassLoadEvent</span><span style="color: Gray;">.</span><span style="color: Blue;">FILE_OPEN</span><span style="color: Gray;">, </span><span style="color: Blue;">onFileOpen</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">onFileOpen</span><span style="color: Olive;">(</span><span style="color: Blue;">evt</span><span style="color: Gray;">:</span><span style="color: Blue;">MassLoadEvent</span><span style="color: Olive;">)</span><span style="color: Gray;">:</span><span style="color: Green;">void</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: Teal;">trace</span><span style="color: Olive;">(</span><span style="color: Gray;">”</span><span style="color: Teal;">open</span><span style="color: Gray;">”</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: Olive;">}</span></li></ol></div>
<p>正常で動作するとMasapiのインストールは完了します。</p>
<p><strong>以下は「CompositeMassLoader」というクラスを利用してリスト中の何個ファイルをロードする例です。</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">import</span><span style="color: Gray;"> </span><span style="color: Blue;">ch</span><span style="color: Gray;">.</span><span style="color: Blue;">capi</span><span style="color: Gray;">.</span><span style="color: Teal;">net</span><span style="color: Gray;">.*;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//creates the MassLoader</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cml</span><span style="color: Gray;">:</span><span style="color: Blue;">CompositeMassLoader</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">CompositeMassLoader</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//creates &amp; add the files to the MassLoader</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">addFile</span><span style="color: Olive;">(</span><span style="color: Gray;">”</span><span style="color: Blue;">myFile</span><span style="color: Gray;">.</span><span style="color: Blue;">txt</span><span style="color: Gray;">”</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// will use a URLLoader object with the URLLoaderDataFormat.VARIABLES property</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">addFile</span><span style="color: Olive;">(</span><span style="color: Gray;">”</span><span style="color: Blue;">myFile</span><span style="color: Gray;">.</span><span style="color: Blue;">xml</span><span style="color: Gray;">”</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// will use a URLLoader object with the URLLoaderDataFormat.TEXT property</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">addFile</span><span style="color: Olive;">(</span><span style="color: Gray;">”</span><span style="color: Blue;">myFile</span><span style="color: Gray;">.</span><span style="color: Blue;">css</span><span style="color: Gray;">”</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// will use a URLLoader object with the URLLoaderDataFormat.TEXT property</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">addFile</span><span style="color: Olive;">(</span><span style="color: Gray;">”</span><span style="color: Blue;">myFile</span><span style="color: Gray;">.</span><span style="color: Blue;">png</span><span style="color: Gray;">”</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// will use a URLLoader object with the URLLoaderDataFormat.BINARY property</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">addFile</span><span style="color: Olive;">(</span><span style="color: Gray;">”</span><span style="color: Blue;">myFile</span><span style="color: Gray;">.</span><span style="color: Blue;">png</span><span style="color: Gray;">”, </span><span style="color: Blue;">LoadableFileType</span><span style="color: Gray;">.</span><span style="color: Blue;">SWF</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// will use a Loader object</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">addFile</span><span style="color: Olive;">(</span><span style="color: Gray;">”</span><span style="color: Blue;">myFile</span><span style="color: Gray;">.</span><span style="color: Blue;">jpg</span><span style="color: Gray;">”</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// will use a URLLoader object with the URLLoaderDataFormat.BINARY property</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">addFile</span><span style="color: Olive;">(</span><span style="color: Gray;">”</span><span style="color: Blue;">myFile</span><span style="color: Gray;">.</span><span style="color: Blue;">swf</span><span style="color: Gray;">”</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// will use a Loader object</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">addFile</span><span style="color: Olive;">(</span><span style="color: Gray;">”</span><span style="color: Blue;">myFile</span><span style="color: Gray;">.</span><span style="color: Blue;">swf</span><span style="color: Gray;">”, </span><span style="color: Blue;">LoadableFileType</span><span style="color: Gray;">.</span><span style="color: Blue;">BINARY</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// will use a URLLoader object with the URLLoaderDataFormat.BINARY property</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//starts the loading</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Teal;">start</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//useful information for debugging</span></li>
<li><span style="color: #ffa500;">//trace(cml.massLoader);</span></li></ol></div>
<p><strong>次は「Masapi」のローディングイベントを監視する例：</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">import</span><span style="color: Gray;"> </span><span style="color: Blue;">ch</span><span style="color: Gray;">.</span><span style="color: Blue;">capi</span><span style="color: Gray;">.</span><span style="color: Teal;">net</span><span style="color: Gray;">.*;</span></li>
<li><span style="color: Green;">import</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">ch</span><span style="color: Gray;">.</span><span style="color: Blue;">capi</span><span style="color: Gray;">.</span><span style="color: Blue;">events</span><span style="color: Gray;">.*;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//creates the MassLoader</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cml</span><span style="color: Gray;">:</span><span style="color: Blue;">CompositeMassLoader</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">CompositeMassLoader</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">massLoader</span><span style="color: Gray;">.</span><span style="color: Blue;">addEventListener</span><span style="color: Olive;">(</span><span style="color: Blue;">ProgressEvent</span><span style="color: Gray;">.</span><span style="color: Blue;">PROGRESS</span><span style="color: Gray;">, </span><span style="color: Blue;">onOverallProgress</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">//overall progression</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">massLoader</span><span style="color: Gray;">.</span><span style="color: Blue;">addEventListener</span><span style="color: Olive;">(</span><span style="color: Blue;">MassLoadEvent</span><span style="color: Gray;">.</span><span style="color: Blue;">FILE_OPEN</span><span style="color: Gray;">, </span><span style="color: Blue;">onOpenHandler</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">//a file download starts</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">massLoader</span><span style="color: Gray;">.</span><span style="color: Blue;">addEventListener</span><span style="color: Olive;">(</span><span style="color: Blue;">Event</span><span style="color: Gray;">.</span><span style="color: Blue;">COMPLETE</span><span style="color: Gray;">, </span><span style="color: Blue;">completeHandler</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">//massload complete</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//… (creates the files and so on)</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//listen to the overall progression</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">onOverallProgress</span><span style="color: Olive;">(</span><span style="color: Blue;">evt</span><span style="color: Gray;">:</span><span style="color: Blue;">ProgressEvent</span><span style="color: Olive;">)</span><span style="color: Gray;">:</span><span style="color: Green;">void</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">percent</span><span style="color: Gray;">:</span><span style="color: Teal;">Number</span><span style="color: Gray;"> = </span><span style="color: Teal;">Math</span><span style="color: Gray;">.</span><span style="color: Teal;">round</span><span style="color: Olive;">(</span><span style="color: Blue;">evt</span><span style="color: Gray;">.</span><span style="color: Teal;">bytesLoaded</span><span style="color: Gray;"> </span><span style="color: #8b0000;">/</span><span style="color: Red;"> evt.bytesTotal * 100);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; trace(”Loaded at “+percent+”%”);</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">listen when a file begins to be loaded</span></li>
<li><span style="color: Red;">function onOpenHandler(evt:MassLoadEvent):void</span></li>
<li><span style="color: Red;">{</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; var file:ILoadableFile = evt.file as ILoadableFile;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; file.addEventListener(ProgressEvent.PROGRESS, onFileProgress);</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">listen to a specific file</span></li>
<li><span style="color: Red;">function onFileProgress(evt:ProgressEvent):void</span></li>
<li><span style="color: Red;">{</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; trace(”file progress”);</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">listen to the complete event</span></li>
<li><span style="color: Red;">function completeHandler(evt:Event):void</span></li>
<li><span style="color: Red;">{</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; trace(”MassLoad complete”);</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">starts the loading</span></li>
<li><span style="color: Red;">cml.start();</span></li></ol></div>
<p><strong>大量のファイルがあるので、ローディングのステータスの取得が必要となります。以下はステータスを取得する例：</strong> </p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">import</span><span style="color: Gray;"> </span><span style="color: Blue;">ch</span><span style="color: Gray;">.</span><span style="color: Blue;">capi</span><span style="color: Gray;">.</span><span style="color: Teal;">net</span><span style="color: Gray;">.*;</span></li>
<li><span style="color: Green;">import</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">ch</span><span style="color: Gray;">.</span><span style="color: Blue;">capi</span><span style="color: Gray;">.</span><span style="color: Blue;">events</span><span style="color: Gray;">.*;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//creates the MassLoader</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cml</span><span style="color: Gray;">:</span><span style="color: Blue;">CompositeMassLoader</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">CompositeMassLoader</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">cml</span><span style="color: Gray;">.</span><span style="color: Blue;">massLoader</span><span style="color: Gray;">.</span><span style="color: Blue;">addEventListener</span><span style="color: Olive;">(</span><span style="color: Blue;">ProgressEvent</span><span style="color: Gray;">.</span><span style="color: Blue;">PROGRESS</span><span style="color: Gray;">, </span><span style="color: Teal;">onProgress</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">//…</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Teal;">onProgress</span><span style="color: Olive;">(</span><span style="color: Blue;">evt</span><span style="color: Gray;">:</span><span style="color: Blue;">ProgressEvent</span><span style="color: Olive;">)</span><span style="color: Gray;">:</span><span style="color: Green;">void</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">info</span><span style="color: Gray;">:</span><span style="color: Blue;">ILoadInfo</span><span style="color: Gray;"> = </span><span style="color: Blue;">evt</span><span style="color: Gray;">.</span><span style="color: Teal;">target</span><span style="color: Gray;">.</span><span style="color: Blue;">loadInfo</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//var info:ILoadInfo = cml.loadInfo;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Teal;">trace</span><span style="color: Olive;">(</span><span style="color: Blue;">info</span><span style="color: Gray;">.</span><span style="color: Blue;">currentSpeed</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Teal;">trace</span><span style="color: Olive;">(</span><span style="color: Blue;">info</span><span style="color: Gray;">.</span><span style="color: Blue;">averageSpeed</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Teal;">trace</span><span style="color: Olive;">(</span><span style="color: Blue;">info</span><span style="color: Gray;">.</span><span style="color: Blue;">elapsedTime</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Teal;">trace</span><span style="color: Olive;">(</span><span style="color: Blue;">info</span><span style="color: Gray;">.</span><span style="color: Blue;">remainingTime</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Teal;">trace</span><span style="color: Olive;">(</span><span style="color: Blue;">info</span><span style="color: Gray;">.</span><span style="color: Blue;">percentLoaded</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Teal;">trace</span><span style="color: Olive;">(</span><span style="color: Blue;">info</span><span style="color: Gray;">.</span><span style="color: Blue;">ratioLoaded</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Teal;">trace</span><span style="color: Olive;">(</span><span style="color: Blue;">info</span><span style="color: Gray;">.</span><span style="color: Teal;">bytesLoaded</span><span style="color: Gray;">+” </span><span style="color: #8b0000;">/</span><span style="color: Red;"> “+info.bytesTotal);</span></li>
<li><span style="color: Red;">}</span></li></ol></div>
<p><strong>[関連リンク]</strong>
<p>・<a title="http://code.google.com/p/masapi/" href="http://code.google.com/p/masapi/">http://code.google.com/p/masapi/</a> 公式サイト</p>
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://digitechlog.com/2010/06/06/8-helpfull-adobe-flash-actionscript.html" title="8 Adobe ActionScriptのチュートリアルフラッシュ">8 Adobe ActionScriptのチュートリアルフラッシュ</a></li>
<li><a href="http://digitechlog.com/2010/03/12/7-asynchronous-processing-open-source-actionscript-library.html" title="７+ AS3で非同期処理のオープンソースのライブラリ一覧">７+ AS3で非同期処理のオープンソースのライブラリ一覧</a></li>
<li><a href="http://digitechlog.com/2010/02/13/as3unit-actionscript-3-junit-for-flash.html" title="AS3Unit: ActionScript 3.0上JUnit4の移植、単体テストを行うためのフレームワーク">AS3Unit: ActionScript 3.0上JUnit4の移植、単体テストを行うためのフレームワーク</a></li>
<li><a href="http://digitechlog.com/2010/02/07/foam-as3-2d-rigid-body-physics-engine.html" title="FOAM-AS3: ActionScript 3で開発されたオープンソースの２D物理エンジン">FOAM-AS3: ActionScript 3で開発されたオープンソースの２D物理エンジン</a></li>
<li><a href="http://digitechlog.com/2010/01/29/potras-convert-bitmap-data-vector-in-actionscript3.html" title="PotrAs: ２色のラスタ画像（BitmapData）からベクタ変換するActionScript 3ライブラリ">PotrAs: ２色のラスタ画像（BitmapData）からベクタ変換するActionScript 3ライブラリ</a></li>
<li><a href="http://digitechlog.com/2009/12/28/basic-arraybinder-class-for-flash-cs3-and-actionscript-projects.html" title="Flash CS3とアクションプロジェクト向けベーシックのArrayBinderクラス">Flash CS3とアクションプロジェクト向けベーシックのArrayBinderクラス</a></li>
<li><a href="http://digitechlog.com/2009/12/10/actionscript-cookie-util-class-free-download.html" title="ActionScriptのクッキー（Cookie）操作クラス">ActionScriptのクッキー（Cookie）操作クラス</a></li>
<li><a href="http://digitechlog.com/2009/12/03/textsearchengine-flash-text-search-engine-class.html" title="ActionScriptで実現するテキストサーチエンジンクラス">ActionScriptで実現するテキストサーチエンジンクラス</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://digitechlog.com/2009/05/16/masapi-flash-flex-air-as3-framework-for-the-massive-loading-massload.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cairngorm: Flex/AIR RIA構築用フレームワーク</title>
		<link>http://digitechlog.com/2009/05/01/cairngorm-is-the-lightweight-micro-architecture-for-rich-internet-applications-built-in-flex-air.html</link>
		<comments>http://digitechlog.com/2009/05/01/cairngorm-is-the-lightweight-micro-architecture-for-rich-internet-applications-built-in-flex-air.html#comments</comments>
		<pubDate>Fri, 01 May 2009 14:17:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash Project]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[フレームワーク]]></category>

		<guid isPermaLink="false">http://digitechlog.com/2009/05/01/cairngorm-is-the-lightweight-micro-architecture-for-rich-internet-applications-built-in-flex-air.html</guid>
		<description><![CDATA[Cairngorm Frameworkは、Flash開発元の adobe が提供している、もっとも長い歴史を持つ、もっとも成熟している、冒頭でも書いたとおりFlexアプリケーションにおけるクライアントサイド、Flex/AIR RIA構築用フレームワークです。　オープンソースであるため、誰でも無償で使用することができます。また、Apache License 2.0で配布されているため商用利用も可能です。
※Cairngorm Frameworkの名称の由来：Cairngorm とは、日本語で「煙水晶」という意味です。これはスコットランドにあるCairngorm山が煙水晶の産出地であったことに由来しています。 iteration::two社もスコットランドにあるので、それにちなんでフレームワークの名称にCairngormを採用したのではないかと筆者は推測しています。


Flexはプレゼンテーション層のみを対象とする製品のため、Flexアプリケーションを開発する際には、ビジネス層にSpringやSeasarなどのフレームワークを適用することも多いかと思います。また、Flexと同じプレゼンテーション層のフレームワークですが、既存のアプリケーションを生かすためにStrutsをFlexと併用させるケースもあると思います。
Cairngorm Frameworkは、クライアントサイドのフレームワークのため、動作環境はTomcatなどのアプリケーションサーバ上ではなく、Webブラウザ上の Flash Playerになります。また、StrutsなどのWebアプリケーションフレームワークと違って画面制御やバリデーション、例外ハンドリングといったアプリケーション開発を行うための基盤の機能を提供するフレームワークではありません。
Cairngormフレームワークに関連して経験豊かなJava開発者であるOlesen氏は以下のように述べている。
Cairngormにはmediatorやsupervising presenter、passive viewといった概念やそれに類するものは一切ありません。実際のところ、ビューコンポーネントの状態を直接モデルにデータバインディングすることを推奨していることでCairngormは多くの人に非難されています。さらに悪いことにモデルはグローバルな状態にあり、シングルトン（なクラス）を通して提供されます。

Cairngorm Frameworkの特徴
・オブジェクト指向
　Cairngorm Frameworkは、すべてAction Scriptのクラスまたはインターフェイスとして作成されています。スクリプトと聞くと手続き型のプログラミングをイメージしてしまいがちですが、最近ではオブジェクト指向プログラミング（OOP）の機能を搭載したスクリプト言語も増えています。Flex 1.5で採用しているAction Scriptのバージョンは2.0ですが、Action Scriptはバージョン2.0からこのOOPに対応しました。そのため、バージョン1.0までは手続き型でしか書くことができなかったAction Scriptも、JavaやC#と同じようにクラスやインターフェイスを定義するといったことが可能になりました（もちろん、従来どおり手続き型で書くこともできます）。ちなみに、Ruby On Railsの登場でいま非常に人気が高まっているRubyやWebサイトの構築によく使われているPHPもスクリプト言語ですが、OOPに対応しています。
・デザインパターンのコラボレーション
　Cairngorm Frameworkは、前述したとおり完全にオブジェクト指向に基づいています。そのため、Javaなどでおなじみのデザインパターン（主にJ2EEパターン）を多数利用しています。Cairngorm Frameworkのクラスを眺めてみると“Command”、“Service Locator”、“FrontController”、“BusinessDelegate”などパターン名がそのままクラス名やインターフェイス名になっていることが分かります。　J2EEパターンでは、より複雑で規模の大きな問題に対処するために複数のパターンを組み合わせて使用することをMicro Architecture（マイクロアーキテクチャ）と名付けていますが、Cairngorm Frameworkはまさにこのマイクロアーキテクチャに基づいています。
・イベント・リスナモデル
　イベント・リスナモデルとは、イベントを発生させる可能性があるオブジェクトをリスナに登録しておきマウスクリックなどのイベントが発生した場合、イベントの発生をリスナに通知し処理をリスナに委譲させる方式です。リスナ（Listener）はその名のとおり、イベントの発生を聞く（捕捉する）オブジェクトです。
　例えばVisual Basicでは、ボタンの中にonClickなどのイベントをハンドリングするメソッドがあり、そのメソッドの中にボタンがクリックされたときの処理を書きました。しかし、これではビューであるボタンの中にボタンを押されたときのロジックが入り込んでしまい、ビューとロジックが密接に関係してしまいます。
　イベント・リスナモデルでは、イベントが発生すると登録先のリスナがそのイベントを処理するので、イベントを発生させるビューとイベント処理のロジックを切り離すことができオブジェクトの独立性が高まります。Flex自体にもイベント・リスナの仕組みはサポートされていますが、Cairngorm Frameworkではよりそれを使いやすくしてフレームワークとして提供しています。
・軽量で導入がカンタン
　Cairngorm Frameworkは前述したとおり、特定のアプリケーションサービスを提供するためのライブラリ群などを持たず、処理の枠組みだけを提供する “Architectural Framework”のため非常に軽量なフレームワークになっています。APIリファレンスですべてのクラスを見てもたった12個しかありません。 Cairngorm Frameworkを使うために必要なものは、フレームワークを構成するクラスをアーカイブしたファイルとCairngorm Frameworkの設定ファイルの2つだけです。導入は、これらをアプリケーションの所定の位置に置き、Flexの設定ファイルを少し変更するだけですのでとてもカンタンです。
・オブジェクト指向の恩恵を享受できる
Cairngorm Frameworkは、完全にオブジェクト指向に基づいていますのでJavaやC#などと同様に継承、カプセル化、ポリモーフィズムなどオブジェクト指向のテクニックを使うことができます。
　例えば、各クラスに共通して実装されている処理を親クラスとして切り出し、継承を使ってサブクラスでは親クラスと差異部分のみをコーディングすれば親クラスの再利用性が高まります。また、ポリモーフィズムを使ってインターフェイスと実装を分けるプログラミングをすれば、実装クラスを後で容易に切り替えることができ保守性が上がります。
・アーキテクチャが統一される
　Flexに限らずリッチインターネットアプリケーション（RIA）においては、HTMLベースのWebアプリケーションと違ってクライアントサイドにも画面回りのロジックやクライアントサイドだけで完結できるビジネスロジックを実装します。従来のFlexアプリケーションのクライアントサイドの開発では、Flexの仕組みだけを使って開発するか、または独自のフレームワークを作るしかありませんでした。独自のフレームワークといってもJavaではなくActionScriptで作らなければならないため、“処理の枠組み”を作り出すことはかなり難しいのではないかと思います。
　小規模なアプリケーションを少人数で開発する場合なら、Flexの仕組みだけで開発してもさほど問題はないと思います。しかし、大規模なアプリケーションを大人数で開発するときには、何かしらの枠組みがないと個々の開発者が自由にコーディングしてそれぞれのアーキテクチャを作り出すことができてしまいます。その結果、“作った人にしか分からないトリッキーなコード”が量産されてしまいます。これでは、プログラムが作った人に依存してしまい、保守性が下がってしまいます。もし、そんなプログラムの保守を自分がすることになったら……。もうゾッとしてしまいますよね？
　Cairngorm Frameworkは、“Architectural Framework”であり処理の枠組みを定めているため、個々の開発者はフレームワークで決められたアーキテクチャに沿って開発をすることになります。アーキテクチャに沿った開発とは、例えば、フレームワークのクラスを継承してあるメソッドをオーバーライドしたり、フレームワークのインターフェイスを実装してあるメソッドを実装するということです。従って、プログラマーが自由にコーディングすることを制限し、プログラミングに関して個人の裁量の入り込む余地が少なくなっているため、誰が作ってもアーキテクチャが統一され、品質の均一化が望めます。また、プログラムから属人性が排除されるため、保守性の向上にもつながります。
・JavaエンジニアのActionScript学習コストを低減できる
　Flexアプリケーション開発では、クライアントサイドをMXMLとActionScriptを用いて作り込む必要があります。クライアントサイドのロジックについては、ActionScriptを使って書きますので、ActionScriptをいかに使いこなすかがFlexアプリケーション開発の1つのポイントにもなります。ActionScriptは、JavaScriptの国際標準規格であるECMA（エクマ）に準拠しているため、 JavaScriptと文法が非常に似ておりJavaScriptのスキルを持っていればActionScriptも理解しやすいということがあります。
　しかし、FlexがJ2EEアプリケーションサーバ上で動作するということもあって、Flexアプリケーション開発を行う開発者の多くは、 Javaエンジニアであり、それほどJavaScriptに明るい人が多いわけではないのが現状です。そのようなJavaエンジニアにとって ActionScriptをマスターするのは、かなり時間がかかり学習コストは高いといえます。
　Cairngorm Frameworkを使えば、Javaエンジニアにとってなじみの深いオブジェクト指向やデザインパターン（J2EEパターン）などに基づいて開発を行うことができますので、すでに持っている開発ノウハウを生かすことができActionScriptの学習コストを低減させることができます。
Cairngormサンプル解説(Service層)
Service層では「Serviceパッケージ 」と「Delegateクラス」で構成されています。
１） Serviceパッケージに配置されるクラスは ServiceLocatorタグを持ったMXMLである ApplicationService.mxmlのみです。 これはCairngormがHTTPServiceやRemoteObjectといった 「サーバサイドとの連携の入り口を１つにしてしまおう」 との意図があります。 サーバサイドとの連携はＨＴＴＰＳｅｒｖｉｃｅやRemoteObjectを利用しますが、 それらを管理しているのが、このApplicationService.mxmlファイルです。 中身を見て見ましょう。  [...]]]></description>
			<content:encoded><![CDATA[<p>Cairngorm Frameworkは、Flash開発元の adobe が提供している、もっとも長い歴史を持つ、もっとも成熟している、冒頭でも書いたとおりFlexアプリケーションにおけるクライアントサイド、Flex/AIR RIA構築用フレームワークです。　オープンソースであるため、誰でも無償で使用することができます。また、Apache License 2.0で配布されているため商用利用も可能です。</p>
<blockquote><p><b>※Cairngorm Frameworkの名称の由来：</b>Cairngorm とは、日本語で「煙水晶」という意味です。これはスコットランドにあるCairngorm山が煙水晶の産出地であったことに由来しています。 iteration::two社もスコットランドにあるので、それにちなんでフレームワークの名称にCairngormを採用したのではないかと筆者は推測しています。</p>
</blockquote>
<p><span id="more-408"></span>
<p>Flexはプレゼンテーション層のみを対象とする製品のため、Flexアプリケーションを開発する際には、ビジネス層にSpringやSeasarなどのフレームワークを適用することも多いかと思います。また、Flexと同じプレゼンテーション層のフレームワークですが、既存のアプリケーションを生かすためにStrutsをFlexと併用させるケースもあると思います。</p>
<p>Cairngorm Frameworkは、クライアントサイドのフレームワークのため、動作環境はTomcatなどのアプリケーションサーバ上ではなく、Webブラウザ上の Flash Playerになります。また、StrutsなどのWebアプリケーションフレームワークと違って画面制御やバリデーション、例外ハンドリングといったアプリケーション開発を行うための基盤の機能を提供するフレームワークではありません。</p>
<p><strong>Cairngormフレームワークに関連して経験豊かなJava開発者であるOlesen氏は以下のように述べている。</strong></p>
<blockquote><p>Cairngormにはmediatorやsupervising presenter、passive viewといった概念やそれに類するものは一切ありません。実際のところ、ビューコンポーネントの状態を直接モデルにデータバインディングすることを推奨していることでCairngormは多くの人に非難されています。さらに悪いことにモデルはグローバルな状態にあり、シングルトン（なクラス）を通して提供されます。</p>
</blockquote>
<p><b>Cairngorm Frameworkの特徴</b></p>
<p><b>・オブジェクト指向</b>
<p>　Cairngorm Frameworkは、すべてAction Scriptのクラスまたはインターフェイスとして作成されています。スクリプトと聞くと手続き型のプログラミングをイメージしてしまいがちですが、最近ではオブジェクト指向プログラミング（OOP）の機能を搭載したスクリプト言語も増えています。Flex 1.5で採用しているAction Scriptのバージョンは2.0ですが、Action Scriptはバージョン2.0からこのOOPに対応しました。そのため、バージョン1.0までは手続き型でしか書くことができなかったAction Scriptも、JavaやC#と同じようにクラスやインターフェイスを定義するといったことが可能になりました（もちろん、従来どおり手続き型で書くこともできます）。ちなみに、Ruby On Railsの登場でいま非常に人気が高まっているRubyやWebサイトの構築によく使われているPHPもスクリプト言語ですが、OOPに対応しています。
<p><b>・デザインパターンのコラボレーション</b>
<p>　Cairngorm Frameworkは、前述したとおり完全にオブジェクト指向に基づいています。そのため、Javaなどでおなじみのデザインパターン（主にJ2EEパターン）を多数利用しています。Cairngorm Frameworkのクラスを眺めてみると“Command”、“Service Locator”、“FrontController”、“BusinessDelegate”などパターン名がそのままクラス名やインターフェイス名になっていることが分かります。<br />　J2EEパターンでは、より複雑で規模の大きな問題に対処するために複数のパターンを組み合わせて使用することをMicro Architecture（マイクロアーキテクチャ）と名付けていますが、Cairngorm Frameworkはまさにこのマイクロアーキテクチャに基づいています。
<p><b>・イベント・リスナモデル</b>
<p>　イベント・リスナモデルとは、イベントを発生させる可能性があるオブジェクトをリスナに登録しておきマウスクリックなどのイベントが発生した場合、イベントの発生をリスナに通知し処理をリスナに委譲させる方式です。リスナ（Listener）はその名のとおり、イベントの発生を聞く（捕捉する）オブジェクトです。
<p>　例えばVisual Basicでは、ボタンの中にonClickなどのイベントをハンドリングするメソッドがあり、そのメソッドの中にボタンがクリックされたときの処理を書きました。しかし、これではビューであるボタンの中にボタンを押されたときのロジックが入り込んでしまい、ビューとロジックが密接に関係してしまいます。
<p>　イベント・リスナモデルでは、イベントが発生すると登録先のリスナがそのイベントを処理するので、イベントを発生させるビューとイベント処理のロジックを切り離すことができオブジェクトの独立性が高まります。Flex自体にもイベント・リスナの仕組みはサポートされていますが、Cairngorm Frameworkではよりそれを使いやすくしてフレームワークとして提供しています。
<p><b>・軽量で導入がカンタン</b>
<p>　Cairngorm Frameworkは前述したとおり、特定のアプリケーションサービスを提供するためのライブラリ群などを持たず、処理の枠組みだけを提供する “Architectural Framework”のため非常に軽量なフレームワークになっています。APIリファレンスですべてのクラスを見てもたった12個しかありません。 Cairngorm Frameworkを使うために必要なものは、フレームワークを構成するクラスをアーカイブしたファイルとCairngorm Frameworkの設定ファイルの2つだけです。導入は、これらをアプリケーションの所定の位置に置き、Flexの設定ファイルを少し変更するだけですのでとてもカンタンです。
<p>・<b>オブジェクト指向の恩恵を享受できる</b>
<p>Cairngorm Frameworkは、完全にオブジェクト指向に基づいていますのでJavaやC#などと同様に継承、カプセル化、ポリモーフィズムなどオブジェクト指向のテクニックを使うことができます。
<p>　例えば、各クラスに共通して実装されている処理を親クラスとして切り出し、継承を使ってサブクラスでは親クラスと差異部分のみをコーディングすれば親クラスの再利用性が高まります。また、ポリモーフィズムを使ってインターフェイスと実装を分けるプログラミングをすれば、実装クラスを後で容易に切り替えることができ保守性が上がります。
<p>・<b>アーキテクチャが統一される</b>
<p>　Flexに限らずリッチインターネットアプリケーション（RIA）においては、HTMLベースのWebアプリケーションと違ってクライアントサイドにも画面回りのロジックやクライアントサイドだけで完結できるビジネスロジックを実装します。従来のFlexアプリケーションのクライアントサイドの開発では、Flexの仕組みだけを使って開発するか、または独自のフレームワークを作るしかありませんでした。独自のフレームワークといってもJavaではなくActionScriptで作らなければならないため、“処理の枠組み”を作り出すことはかなり難しいのではないかと思います。
<p>　小規模なアプリケーションを少人数で開発する場合なら、Flexの仕組みだけで開発してもさほど問題はないと思います。しかし、大規模なアプリケーションを大人数で開発するときには、何かしらの枠組みがないと個々の開発者が自由にコーディングしてそれぞれのアーキテクチャを作り出すことができてしまいます。その結果、“作った人にしか分からないトリッキーなコード”が量産されてしまいます。これでは、プログラムが作った人に依存してしまい、保守性が下がってしまいます。もし、そんなプログラムの保守を自分がすることになったら……。もうゾッとしてしまいますよね？
<p>　Cairngorm Frameworkは、“Architectural Framework”であり処理の枠組みを定めているため、個々の開発者はフレームワークで決められたアーキテクチャに沿って開発をすることになります。アーキテクチャに沿った開発とは、例えば、フレームワークのクラスを継承してあるメソッドをオーバーライドしたり、フレームワークのインターフェイスを実装してあるメソッドを実装するということです。従って、プログラマーが自由にコーディングすることを制限し、プログラミングに関して個人の裁量の入り込む余地が少なくなっているため、誰が作ってもアーキテクチャが統一され、品質の均一化が望めます。また、プログラムから属人性が排除されるため、保守性の向上にもつながります。
<p>・<b>JavaエンジニアのActionScript学習コストを低減できる</b>
<p>　Flexアプリケーション開発では、クライアントサイドをMXMLとActionScriptを用いて作り込む必要があります。クライアントサイドのロジックについては、ActionScriptを使って書きますので、ActionScriptをいかに使いこなすかがFlexアプリケーション開発の1つのポイントにもなります。ActionScriptは、JavaScriptの国際標準規格であるECMA（エクマ）に準拠しているため、 JavaScriptと文法が非常に似ておりJavaScriptのスキルを持っていればActionScriptも理解しやすいということがあります。
<p>　しかし、FlexがJ2EEアプリケーションサーバ上で動作するということもあって、Flexアプリケーション開発を行う開発者の多くは、 Javaエンジニアであり、それほどJavaScriptに明るい人が多いわけではないのが現状です。そのようなJavaエンジニアにとって ActionScriptをマスターするのは、かなり時間がかかり学習コストは高いといえます。
<p>　Cairngorm Frameworkを使えば、Javaエンジニアにとってなじみの深いオブジェクト指向やデザインパターン（J2EEパターン）などに基づいて開発を行うことができますので、すでに持っている開発ノウハウを生かすことができActionScriptの学習コストを低減させることができます。
<p><strong>Cairngormサンプル解説(Service層)</strong></p>
<p>Service層では「Serviceパッケージ 」と「Delegateクラス」で構成されています。</p>
<p><strong>１） Serviceパッケージに配置されるクラスは ServiceLocatorタグを持ったMXMLである ApplicationService.mxmlのみです。</strong> <br />これはCairngormがHTTPServiceやRemoteObjectといった 「サーバサイドとの連携の入り口を１つにしてしまおう」 との意図があります。 サーバサイドとの連携はＨＴＴＰＳｅｒｖｉｃｅやRemoteObjectを利用しますが、 それらを管理しているのが、このApplicationService.mxmlファイルです。 中身を見て見ましょう。  </p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;?</span><span style="color: Green;">xml</span><span style="color: Gray;"> </span><span style="color: #00008b;">version</span><span style="color: Gray;">=”</span><span style="color: #00008b;">1</span><span style="color: Gray;">.</span><span style="color: #00008b;">0</span><span style="color: Gray;">″ </span><span style="color: #00008b;">encoding</span><span style="color: Gray;">=”</span><span style="color: #00008b;">Shift_JIS</span><span style="color: Gray;">”</span><span style="color: Olive;">?&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">ServiceLocator</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">xmlns</span><span style="color: Gray;">=”</span><span style="color: #00008b;">com</span><span style="color: Gray;">.</span><span style="color: #00008b;">adobe</span><span style="color: Gray;">.</span><span style="color: #00008b;">cairngorm</span><span style="color: Gray;">.</span><span style="color: #00008b;">business</span><span style="color: Gray;">.*” 　　　　　　　　　　　　　　････････････・・・・・・・・・・・・・・・・①</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #00008b;">xmlns:mx</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://www.adobe.com/2006/mxml</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">mx:Script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;![CDATA[</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp; /** サービスを取得するためのインスタンス名を定義します。</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * ここで定義する名称と下記&lt;mx:HTTPService&gt;タグのIDが一致しないと、</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * HTTPServiceのインスタンスは取得できませんので気をつけてください。</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; **/</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp; public static const APPLICATION_HTTP_SERVICE_NAME:String = &quot;appHttpService&quot;;　　　　････②</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; ]]&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">mx:Script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">mx:HTTPService</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">appHttpService</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> 　　　　　　　　　　　　　　　　　　　　　　･･･････････････････････････････③</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #00008b;">result</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">event.token.resultHandler(event)</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #00008b;">fault</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">event.token.faultHandler(event)</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #00008b;">method</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">POST</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #00008b;">showBusyCursor</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">true</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">ServiceLocator</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p><strong>①ServiceLocatorタグ</strong> <br />　　③にて記述されるHTTPServiceをCairngormが管理するために用意されたタグが <br />　　このServiceLocatorです。 <br />　　このタグの中で宣言されたHTTPServiceやRemoteObjectタグは <br />　　ServiceLocatorクラスより取り出すことができます。 <br />　　例） <br />　　var httpSrv:HTTPService =　ServiceLocator.getInstance().getHTTPService(&#8221;appHttpService&#8221;); </p>
<p><strong>②public static const APPLICATION_HTTP_SERVICE_NAME </strong><br />
<br />　　ここで宣言されているpublic static constの文字列は <br />　　③で記述されているHTTPServiceタグ（あるいはRemoteObjectタグ）のIDの文字列と <br />　　一緒である場合が必要です。 <br />　　上記①で記したようにServiceLocatorからHTTPServiceあるいはRemoteObjectを取り出す際に、 <br />　　ServiceLocatorタグの中で宣言したHTTPServiceタグ（あるいはRemoteObjectタグ）のIDを用いて、 <br />　　ServiceLocatorタグから取り出すからです。 <br />　　このIDは外部からのアクセス（例えばDelegateクラスからのアクセス）ではIDを <br />　　取得することが難しいです。 <br />　　しかし、public static constとして宣言しておけば、 <br />　　わざわざタグのIDを調べなくても、この宣言を利用するだけで取り出せるようになるからです。 <br />　　ですので、必ず宣言しましょう。 </p>
<p><strong>③HTTPServiceタグ</strong> <br />　　<br />
HTTPServiceを行うタグです。 <br />　　resultにはevent.token.resultHandler(event) <br />　　faultにはevent.token.faultHandler(event) <br />　　と指定されていますが、これはDelegateの中で使う際に指定するもので、 <br />　　IResponderのresultメソッドとfaultメソッドがそれぞれ関連付けされるようになっています。 <br />　　詳しくはDelegateの解説をご覧ください。 </p>
<p><strong>２） DelegateクラスはHTTPServiceやRemoteObｊｅｃｔ等、サーバサイドと連携を行うためのクラスです。</strong> <br />Ｃａｉｒｎｇｏｒｍではこの <br />「Ｄｅｌｅｇａｔe以外ではサーバサイドとの連携ロジックは組み込まない」 <br />というルールになっています。 </p>
<p>では、サンプルのDelegateクラスを見てみましょう。 </p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">package sample.service.samplecairngorm</span></li>
<li><span style="color: Gray;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">import mx.rpc.IResponder;</span></li>
<li><span style="color: Gray;">import mx.rpc.http.HTTPService;</span></li>
<li><span style="color: Gray;">import com.adobe.cairngorm.business.ServiceLocator;　　　　　　　　　　　　　　　　　　　　　　　･･････・・・・・・・・・・・・・・・①</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">import sample.service.ApplicationService;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">/**</span></li>
<li><span style="color: Gray;"> * サーバと連携するためのクラスです。</span></li>
<li><span style="color: Gray;"> */</span></li>
<li><span style="color: Gray;">public class SamplecairngormHttpDelegate</span></li>
<li><span style="color: Gray;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; private var _responder:IResponder;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; private var _httpService:HTTPService;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; /**</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; * コンストラクタです。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; * @param callingCommand サービス実行結果を返却する先を示すオブジェクトIResponderです。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; public function SamplecairngormHttpDelegate(callingCommand:IResponder)　　　･･･････････････・・・・・・・・・・・・・・・②</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // ApplicationServicecからHTTPServiceのインスタンスを取得します。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; _httpService = ServiceLocator.getInstance().getHTTPService(ApplicationService.APPLICATION_HTTP_SERVICE_NAME);</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // 返却オブジェクトを保持します。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; _responder = callingCommand;　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　････････････・・・・・・・・・・・・・・・・・③</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; /**</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; * Commandクラスから呼び出されるサーバ連携用メソッドです。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; * @param o サーバーに渡したい値などを入れたObjectクラスです。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; public function clickBtnHelloWorld(o:Object):void　　　　　　　　　　　　　　　　　　　　　･････････・・・・・・・・・・・・・・・・・④</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // 返却オブジェクトのTOKENを指定するため、一時的にObject型に変換しています。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; var service:Object&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = _httpService;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // URLを指定します。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; _httpService.url = &quot;./hello.xml&quot;;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // アクセスした結果をserviceに返却し、そのserviceのresultHandlerとfaultHandlerのtokenに設定します。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; service&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = _httpService.send();</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; service.resultHandler&nbsp; &nbsp; &nbsp; &nbsp; = _responder.result;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; service.faultHandler&nbsp; &nbsp; &nbsp; &nbsp; = _responder.fault;　　　　　　　　　　　　　　　　　　　････････････・・・・・・・・・・・・・・・・⑤</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">}</span></li></ol></div>
<p><strong>①インポート文</strong> <br />　　Delegateクラスでは、サーバサイドとの連携結果を返すためのオブジェクト設定のためにＩＲｅｓｐｏｎｄｅｒを、 <br />　　サーバサイドとの連携をするためのクラス保持のためにHTTPService（あるいはRemoteObject）クラスを <br />　　そしてCairngormの中で管理されたHTTPServiceあるいはRemoteObjectを取得するためにServiceLocatorクラスを <br />　　それぞれインポートしています。 </p>
<p><strong>②コンストラクタ</strong> <br />　　コンストラクタの引数としてIResponderを受け取っていますが、 <br />　　これはHTTPServiceやRemoteObjectのメソッドを実行した結果を返すオブジェクトを <br />　　設定するためです。 <br />　　このIResponderに指定されたresultメソッドあるいはｆａｕｌｔメソッドに <br />　　サーバサイドの実行結果が返却されるようになっています。 </p>
<p><strong>③サーバサイド連携オブジェクトの取り出しと返却オブジェクトの設定</strong> <br />　　ＳｅｒｖｉｃｅＬｏｃａｔｏｒからHTTPServiceあるいはRemoteObjectを取り出しています。 <br />　　また引数として受け取ったcallingCommandを <br />　　インスタンス変数に設定しています。 <br />　　このことにより、サーバサイドのサービス実行結果がcallingCommandのresultメソッドあるいはfaultメソッドに <br />　　返却されるようになります。 </p>
<p><strong>④サーバサイド連携メソッド <br /></strong>　　実際にサーバサイドと連携するためのメソッドです。 <br />　　Commandのexecuteメソッドの中でこのメソッドが呼び出されることでしょう。 <br />　　引数として渡されているObjectクラスは <br />　　HTTPServiceやRemoteObjectに渡すリクエストのパラメータを持ったObjectです。 <br />　　例として <br />　　_httpService.request = o; <br />　　と使えると思います。 </p>
<p><strong>⑤返却先の再設定</strong> <br />　　実際に取り出されたHTTPServiceあるいはRemoteObjectの結果ハンドラを設定しているのがこの部分です。 <br />　　service.resultHandler = _responder.result; <br />　　service.faultHandler = _responder.fault; <br />　　とサービスオブジェクトのそれぞれのハンドラに設定していることがわかります。 </p>
<p>※サーバサイド連携メソッドの中でプログラムで意識しなければいけないところは <br />　　service.url <br />　　か <br />　　service.request <br />　　のどちらかになります（HTTPServiceの場合） <br />　　それ以外のコーディングはお約束として必ず記述をしてください。 <br />　　そうでないとうまくIResponderに返却されません。 </p>
<p>以上がService層の解説です。 <br />Service層もDelegateが少々、特殊なことをしていますが、 <br />ここはひとつお約束の構文ということで。 </p>
<p><strong>Cairngormサンプル解説(View層)</strong> </p>
<p>View層は「viewパッケージ」と「helperパッケージ 」のように構成されています。 </p>
<p>今回のサンプルでは１）viewパッケージには何もないと思います。 SampleCairngorm.mxmlをそのままviewとして利用しているためです。 <br />一般的に、ViewStackやStateで別コンポーネント化したものが <br />このviewパッケージに入れる、とお考えください。 </p>
<p>ここでは２）helperパッケージについて解説します。 </p>
<p>２） <br />helperパッケージは <br />「View層の画面表示用MXMLのScript部分をそのまま集めたクラスをViewHelperと呼ぶようにした」 <br />といえるのではないでしょうか。 <br />Cairngormの根本的な考え方として <br />「ScriptタグはMXMLの中にはできるだけ書かないようにしよう」 <br />というのがありましたよね。 <br />MXMLの中でScriptで書いていたものがこのhelperパッケージで設定されるViewHelperクラスになります。 <br />このViewHelperクラスはViewHelperというクラスを継承したクラスはCairngormの中で一元管理されます。 <br />一元管理されるということなので、 <br />「ViewHelperにはユニークなIDを割り当てなければならない」 <br />ことに気をつけてください。 <br />サンプルのSampleCairngorm.mxmlの中では <br />&lt;viewhelper:SamplecairngormViewHelper id=&#8221;sampleViewHelper&#8221;/&gt; <br />と宣言されています。 <br />ここで指定したIDがCairngormの中で（つまりは１つのFlexプロジェクトの中で）ユニークになっていなければなりません。 <br />実際に見てみましょう。 <br />例えばサンプルプロジェクトに <br />「Test1.mxml」 <br />というMXMLコンポーネントを作成し以下のように記述します。 </p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;?</span><span style="color: Green;">xml</span><span style="color: Gray;"> </span><span style="color: #00008b;">version</span><span style="color: Gray;">=”</span><span style="color: #00008b;">1</span><span style="color: Gray;">.</span><span style="color: #00008b;">0</span><span style="color: Gray;">″ </span><span style="color: #00008b;">encoding</span><span style="color: Gray;">=”</span><span style="color: #00008b;">utf-8</span><span style="color: Gray;">″</span><span style="color: Olive;">?&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">mx:Canvas</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">xmlns:mx</span><span style="color: Gray;">=”</span><span style="color: #00008b;">http:</span><span style="color: Gray;">//</span><span style="color: Green;">www</span><span style="color: Gray;">.</span><span style="color: #00008b;">adobe</span><span style="color: Gray;">.</span><span style="color: #00008b;">com</span><span style="color: Gray;">/</span><span style="color: Green;">2006</span><span style="color: Gray;">/</span><span style="color: Green;">mxml</span><span style="color: Gray;">”</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #00008b;">xmlns:viewhelper</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">sample.view.samplecairngorm.helper.*</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: #00008b;">width</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">400</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">height</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">300</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">viewhelper:SamplecairngormViewHelper</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">sampleViewHelper</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">mx:Canvas</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">そしてこの「Test1.mxml」を</span></li>
<li><span style="color: Gray;">「SampleCairngorm.mxml」に追加してみましょう。</span></li>
<li><span style="color: Gray;">例）SampleCairngorm.mxmlの一部</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">viewhelper:SamplecairngormViewHelper</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">sampleViewHelper</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">　　　　　　　　　　　　　　　　　　　　　　　・</span></li>
<li><span style="color: Gray;">　　　　　　　　　　　　　　　　　　　　　　　・</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">&lt;!-- viewhelperクラスのイベントハンドル用メソッドを呼び出しています。 --&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">mx:Button</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">btnHelloWorld</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">label</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">sayHello</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">click</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">{sampleViewHelper.clickBtnHelloWorld(event);}</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">　　　　　　　　　　　　　　　　　　　　　　　・</span></li>
<li><span style="color: Gray;">　　　　　　　　　　　　　　　　　　　　　　　・</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&amp;bold(){</span><span style="color: Olive;">&lt;</span><span style="color: Green;">local:Test1</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">aaa</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span><span style="color: Gray;">}</span></li></ol></div>
<p>これをコンパイルしてみましょう。 <br />コンパイルは無事に通るかと思いますが、 <br />実行してみるとエラーが発生するはずです。 <br />それは <br />「sampleViewHelperという名前は既に使われているので、名前を変えてください」 <br />といった意味のエラーが出るはずです。 <br />このようにViewHelperのIDは必ずユニークでなければいけません。 </p>
<p>さて、肝心のViewHelperクラスの中身ですが </p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">package sample.view.samplecairngorm.helper</span></li>
<li><span style="color: Gray;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">import com.adobe.cairngorm.view.ViewHelper;</span></li>
<li><span style="color: Gray;">import com.adobe.cairngorm.control.CairngormEventDispatcher;　　　　　　　　　　　　　　　・・・・・・・・・・・・・①</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">import flash.events.*;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">import sample.controller.samplecairngorm.event.ClickBtnHelloWorldEvent;　　　　　　　･･････････････②</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">/**</span></li>
<li><span style="color: Gray;"> * Samplecairngorm画面用のViewHelperです。</span></li>
<li><span style="color: Gray;"> */</span></li>
<li><span style="color: Gray;">public class SamplecairngormViewHelper extends ViewHelper　　　　　　　　　　　　　　　･･･・・・・・・・・・・・・・・・③</span></li>
<li><span style="color: Gray;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; public function SamplecairngormViewHelper()</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; super();</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; /**</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; * Samplecairngorm画面のボタンID「btn」というUIコンポーネントの</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; * clickイベントをハンドルするためのメソッドです。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; public function clickBtnHelloWorld(event:MouseEvent):void</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // ここでは単純にイベントをDispatchしていますが、</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // この中でVaridationを行うこともできます。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // またViewHelperクラスは「view」というプロパティを持っていて、</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // このViewというプロパティはViewHelperクラスをインスタンス化した際の</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // MXMLのインスタンスを示しています。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // このプログラムで「View」プロパティが示すMXMLのインスタンスは</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // 「SampleCairngorm.mxml」のインスタンスです。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // MXMLのインスタンスですので、そのMXMLに書いてあるUIコンポーネントのインスタンスを取得することもできます。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // 例）</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // SampleCairngorm.mxmlのLabelのインスタンスを取得し、textプロパティを取得したい</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // var str:String = SampleCairngorm(view).lbl.text;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; // こんな風に直接、Viewから値を取得することも可能です。</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; CairngormEventDispatcher.getInstance().dispatchEvent(new ClickBtnHelloWorldEvent(new Object()));　　･･･④</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">}</span></li></ol></div>
<p><strong>① CairngormEventDispatcherのインポート</strong> <br />　　CairngormEventDispatcherというのは <br />「Cairngormがイベントとして認識するものを送出するためのクラス」 <br />　　です。 <br />　　このクラスを利用してイベントを送出しなければ、 <br />　　FrontControllerクラスを継承したControllerクラスはイベントを受け取ってくれませんし、 <br />　　イベントにマッピングされたロジックも実行されませんので、注意が必要です。 </p>
<p><strong>② ClickBtnHelloWorldEventのインポート</strong> <br />　　FrontControllerクラスを継承したControllerクラスでpublic static constに設定したイベント文字列を持つイベントをインポートしています。 <br />　　これがCairngormEventになるわけです。 </p>
<p><strong>③ ViewHelperを継承したSamplecairngormViewHelperクラスの宣言</strong> <br />　　CairngormにViewHelperクラスとして認識させるために、ViewHelperクラスを継承したクラス宣言を行っています。 </p>
<p><strong>④CairngormEventDispatcher.getInstance().dispatchEventメソッドを使ってのイベント送出</strong> <br />　　このメソッドを発行することにより、 <br />「FrontControllerクラスを継承したクラスでaddCommandしたCommandクラスを呼び出す」 <br />　　ことをしています。 <br />　　このことにより、該当するイベントにマッピングされたCommandクラスのｅｘｅｃｕｔｅメソッドが呼び出されるわけです。 </p>
<p>以下のURLでダウンロードできます。 </p>
<p><a title="http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm;jsessionid=1B8BB89807B455D98ED33F55CC3D6EF3" href="http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm;jsessionid=1B8BB89807B455D98ED33F55CC3D6EF3">http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm;jsessionid=1B8BB89807B455D98ED33F55CC3D6EF3</a></p>
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://digitechlog.com/2009/08/28/sabreamf-is-a-flash-remoting-server-and-client-for-php.html" title="SabreAMF: FlexをPHP5と連携させるフレームワーク">SabreAMF: FlexをPHP5と連携させるフレームワーク</a></li>
<li><a href="http://digitechlog.com/2009/05/07/flexunit-flex-actionscript-application-unit-test-tool-framework.html" title="FlexUnit: Flex/ActionScript3.0アプリケーションの単体テストを行うためのユニットテスティングフレームワーク">FlexUnit: Flex/ActionScript3.0アプリケーションの単体テストを行うためのユニットテスティングフレームワーク</a></li>
<li><a href="http://digitechlog.com/2009/01/20/flexcover-an-open-source-code-coverage-tool-for-flex-air-and-as3.html" title="Flexcover: Flex／AIR／AS3用のオープンソースのコードカバレッジ（テストのコード網羅チェック）ツール">Flexcover: Flex／AIR／AS3用のオープンソースのコードカバレッジ（テストのコード網羅チェック）ツール</a></li>
<li><a href="http://digitechlog.com/2010/02/13/as3unit-actionscript-3-junit-for-flash.html" title="AS3Unit: ActionScript 3.0上JUnit4の移植、単体テストを行うためのフレームワーク">AS3Unit: ActionScript 3.0上JUnit4の移植、単体テストを行うためのフレームワーク</a></li>
<li><a href="http://digitechlog.com/2010/01/12/cast3d-3d-animation-framework-library-for-adobe-flash-in-actionscript3.html" title="Cast3D: Flashのアニメーションフレームワークライブラリ">Cast3D: Flashのアニメーションフレームワークライブラリ</a></li>
<li><a href="http://digitechlog.com/2009/09/30/fluorine-flash-remoting-for-dot-net.html" title="FluorineFx: Flexと.NET間でAMF通信できるライブラリ">FluorineFx: Flexと.NET間でAMF通信できるライブラリ</a></li>
<li><a href="http://digitechlog.com/2009/09/28/weborb-for-php-is-server-side-technology-enabling-connectivity-between-flex-and-flash-remoting-clients-and-php.html" title="WebORB: FlashやFlexのリモートクライアントとサーバ側でのPHPを組み合わせ">WebORB: FlashやFlexのリモートクライアントとサーバ側でのPHPを組み合わせ</a></li>
<li><a href="http://digitechlog.com/2009/09/12/an-opensource-framework-can-be-used-to-develop-flash.html" title="CakePHP: PHP用のWebアプリケーションを効率よく作成するためオープンソースのフレームワーク">CakePHP: PHP用のWebアプリケーションを効率よく作成するためオープンソースのフレームワーク</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://digitechlog.com/2009/05/01/cairngorm-is-the-lightweight-micro-architecture-for-rich-internet-applications-built-in-flex-air.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SWFフォーマット画像ファイルをローカルに保存とするAdobe AIRアプリケーション</title>
		<link>http://digitechlog.com/2009/01/16/the-tutorial-on-how-to-save-swf-file-from-an-image-bitmap-in-adobe-air.html</link>
		<comments>http://digitechlog.com/2009/01/16/the-tutorial-on-how-to-save-swf-file-from-an-image-bitmap-in-adobe-air.html#comments</comments>
		<pubDate>Fri, 16 Jan 2009 13:25:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ニュース]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[BitmapData]]></category>
		<category><![CDATA[loadBytes]]></category>
		<category><![CDATA[Loader]]></category>
		<category><![CDATA[PNGEncoder]]></category>
		<category><![CDATA[SWF]]></category>

		<guid isPermaLink="false">http://digitechlog.com/2009/01/16/the-tutorial-on-how-to-save-swf-file-from-an-image-bitmap-in-adobe-air.html</guid>
		<description><![CDATA[Adobe AIRアプリケーションにLoaderクラスを利用してロードされた画像ファイル、内部的に圧縮されたSWFファイルではなくて独自なフレームとして保存されます（そのような話について、正式なドキュメントとか資料はないようですが、誰か知ってるとぜひ教えていただきますね）。
BitmapDataをPNGやJPEGなどをエンコードして、loadBytesメソッドでLoaderにロードして、終わったらLoaderInfoクラスのbytesというプロパティでSWFに出力するようになります。そうする、SWFフォーマット画像ファイルをローカルに保存することをできました。注意しなければいけないのは、そのような操作はAdobe AIRだけです。ほかのウェブ系とかはいけないです。

下記はBitmapDataクラスからローカルswfファイルを生成／保存するメソッドです。
/* create bitmap to be saved as an swf file */
&#160;var bd:BitmapData = new BitmapData(320,240);
&#160;/* capture application snapshot, this can be any other object */
&#160;bd.draw( Application.application as IBitmapDrawable );
作ったビットマップファイルをPNGやJPEGなどバーチャルファイルにエンコード処理を必要となります。ここの「バーチャル」というのは、ByteArrayクラスを使ってメモリ中に格納とすることです。サンプル中にはmx.graphics.codec.PNGEncoderを利用してバーチャルファイルを作成とします。
/* create virtual png file */
&#160;var png:ByteArray = ( new PNGEncoder() ).encode( bd );
最後はLoaderクラスでバーチャルファイルをロードします。下記のようなソースでロードを終了するとsaveContentToSWFメソッドが実行されます。
/* load virtual png image */
&#160;var l:Loader = new Loader();
&#160;l.contentLoaderInfo.addEventListener( Event.COMPLETE, saveContentToSWF [...]]]></description>
			<content:encoded><![CDATA[<p>Adobe AIRアプリケーションにLoaderクラスを利用してロードされた画像ファイル、内部的に圧縮されたSWFファイルではなくて独自なフレームとして保存されます（そのような話について、正式なドキュメントとか資料はないようですが、誰か知ってるとぜひ教えていただきますね）。</p>
<p>BitmapDataをPNGやJPEGなどをエンコードして、loadBytesメソッドでLoaderにロードして、終わったらLoaderInfoクラスのbytesというプロパティでSWFに出力するようになります。そうする、SWFフォーマット画像ファイルをローカルに保存することをできました。注意しなければいけないのは、そのような操作はAdobe AIRだけです。ほかのウェブ系とかはいけないです。</p>
<p><span id="more-242"></span>
<p>下記はBitmapDataクラスからローカルswfファイルを生成／保存するメソッドです。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/* create bitmap to be saved as an swf file */</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">bd</span><span style="color: Gray;">:</span><span style="color: Teal;">BitmapData</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Teal;">BitmapData</span><span style="color: Olive;">(</span><span style="color: Maroon;">320</span><span style="color: Gray;">,</span><span style="color: Maroon;">240</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">/* capture application snapshot, this can be any other object */</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">bd</span><span style="color: Gray;">.</span><span style="color: Teal;">draw</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Teal;">Application</span><span style="color: Gray;">.</span><span style="color: Teal;">application</span><span style="color: Gray;"> </span><span style="color: Blue;">as</span><span style="color: Gray;"> </span><span style="color: Blue;">IBitmapDrawable</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>作ったビットマップファイルをPNGやJPEGなどバーチャルファイルにエンコード処理を必要となります。ここの「バーチャル」というのは、ByteArrayクラスを使ってメモリ中に格納とすることです。サンプル中にはmx.graphics.codec.PNGEncoderを利用してバーチャルファイルを作成とします。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/* create virtual png file */</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">png</span><span style="color: Gray;">:</span><span style="color: Blue;">ByteArray</span><span style="color: Gray;"> = </span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">PNGEncoder</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">encode</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">bd</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>最後はLoaderクラスでバーチャルファイルをロードします。下記のようなソースでロードを終了するとsaveContentToSWFメソッドが実行されます。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/* load virtual png image */</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">l</span><span style="color: Gray;">:</span><span style="color: Blue;">Loader</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Loader</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">l</span><span style="color: Gray;">.</span><span style="color: Blue;">contentLoaderInfo</span><span style="color: Gray;">.</span><span style="color: Blue;">addEventListener</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">Event</span><span style="color: Gray;">.</span><span style="color: Blue;">COMPLETE</span><span style="color: Gray;">, </span><span style="color: Blue;">saveContentToSWF</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">l</span><span style="color: Gray;">.</span><span style="color: Blue;">loadBytes</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">png</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>以下はsaveContentToSWFメソッドソース：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">saveContentToSWF</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">event</span><span style="color: Gray;"> : </span><span style="color: Blue;">Event</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">:</span><span style="color: Green;">void</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">/* create output file on desktop */</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">file</span><span style="color: Gray;">:</span><span style="color: Blue;">File</span><span style="color: Gray;"> = </span><span style="color: Blue;">File</span><span style="color: Gray;">.</span><span style="color: Blue;">desktopDirectory</span><span style="color: Gray;">.</span><span style="color: Blue;">resolvePath</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">out.swf</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">fs</span><span style="color: Gray;">:</span><span style="color: Blue;">FileStream</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">FileStream</span><span style="color: Olive;">()</span><span style="color: Gray;">; </span><span style="color: Blue;">fs</span><span style="color: Gray;">.</span><span style="color: Teal;">open</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">file</span><span style="color: Gray;">, </span><span style="color: Blue;">FileMode</span><span style="color: Gray;">.</span><span style="color: Blue;">WRITE</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">/* pull out SWF bytes from Loader */</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">fs</span><span style="color: Gray;">.</span><span style="color: Blue;">writeBytes</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">evt</span><span style="color: Gray;">.</span><span style="color: Teal;">target</span><span style="color: Gray;"> </span><span style="color: Blue;">as</span><span style="color: Gray;"> </span><span style="color: Blue;">LoaderInfo</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">bytes</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">; </span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">fs</span><span style="color: Gray;">.</span><span style="color: Teal;">close</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>上記のメソッドは圧縮してないswfファイルが生成されます。実際運用するとき、圧縮しないとサイズが大きいですから、圧縮処理を必要です。以下は圧縮機能を付けって保存メソッドです。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">saveContentToSWF_compress</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">event</span><span style="color: Gray;"> : </span><span style="color: Blue;">Event</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">:</span><span style="color: Green;">void</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">file</span><span style="color: Gray;">:</span><span style="color: Blue;">File</span><span style="color: Gray;"> = </span><span style="color: Blue;">File</span><span style="color: Gray;">.</span><span style="color: Blue;">desktopDirectory</span><span style="color: Gray;">.</span><span style="color: Blue;">resolvePath</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">out_c.swf</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">fs</span><span style="color: Gray;">:</span><span style="color: Blue;">FileStream</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">FileStream</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">fs</span><span style="color: Gray;">.</span><span style="color: Teal;">open</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">file</span><span style="color: Gray;">, </span><span style="color: Blue;">FileMode</span><span style="color: Gray;">.</span><span style="color: Blue;">WRITE</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">/* compressed file header */</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">swf_head</span><span style="color: Gray;"> : </span><span style="color: Blue;">ByteArray</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">ByteArray</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">swf_head</span><span style="color: Gray;">.</span><span style="color: Blue;">endian</span><span style="color: Gray;"> = </span><span style="color: Blue;">Endian</span><span style="color: Gray;">.</span><span style="color: Blue;">LITTLE_ENDIAN</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">swf_head</span><span style="color: Gray;">.</span><span style="color: Blue;">writeBytes</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">evt</span><span style="color: Gray;">.</span><span style="color: Teal;">target</span><span style="color: Gray;"> </span><span style="color: Blue;">as</span><span style="color: Gray;"> </span><span style="color: Blue;">LoaderInfo</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">bytes</span><span style="color: Gray;">, </span><span style="color: Maroon;">0</span><span style="color: Gray;">, </span><span style="color: Maroon;">8</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">swf_head</span><span style="color: Olive;">[</span><span style="color: Maroon;">0</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Blue;">x43</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// 'C' letter, indicates that file is compressed</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">swf_head</span><span style="color: Gray;">.</span><span style="color: Teal;">position</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">/* compressed file body */</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">swf_body</span><span style="color: Gray;"> : </span><span style="color: Blue;">ByteArray</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">ByteArray</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">swf_body</span><span style="color: Gray;">.</span><span style="color: Blue;">endian</span><span style="color: Gray;"> = </span><span style="color: Blue;">Endian</span><span style="color: Gray;">.</span><span style="color: Blue;">LITTLE_ENDIAN</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">swf_body</span><span style="color: Gray;">.</span><span style="color: Blue;">writeBytes</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">evt</span><span style="color: Gray;">.</span><span style="color: Teal;">target</span><span style="color: Gray;"> </span><span style="color: Blue;">as</span><span style="color: Gray;"> </span><span style="color: Blue;">LoaderInfo</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">bytes</span><span style="color: Gray;">, </span><span style="color: Maroon;">8</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">swf_body</span><span style="color: Gray;">.</span><span style="color: Teal;">position</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">swf_body</span><span style="color: Gray;">.</span><span style="color: Blue;">compress</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">swf_body</span><span style="color: Gray;">.</span><span style="color: Teal;">position</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">/* write it down to file */</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">fs</span><span style="color: Gray;">.</span><span style="color: Blue;">writeBytes</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">swf_head</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">fs</span><span style="color: Gray;">.</span><span style="color: Blue;">writeBytes</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">swf_body</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">fs</span><span style="color: Gray;">.</span><span style="color: Teal;">close</span><span style="color: Olive;">()</span><span style="color: Gray;">;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li></ol></div>
<p><strong>リソース：</strong></p>
<p><a title="http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&amp;postId=9364&amp;productId=2&amp;loc=en_US" href="http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&amp;postId=9364&amp;productId=2&amp;loc=en_US">http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&amp;postId=9364&amp;productId=2&amp;loc=en_US</a></p>
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://digitechlog.com/2009/07/25/top-7-adobe-air-apps-for-videos-you-should-know.html" title="トップ７個アドビAIRビデオアプリケーション">トップ７個アドビAIRビデオアプリケーション</a></li>
<li><a href="http://digitechlog.com/2008/12/20/rich-internet-application-ria-runtime-adobe-air-15-linux-platform-is-relaeased.html" title="リッチインターネットアプリケーション (RIA) 実行環境「Adobe AIR 1.5」のLinux版を公開した">リッチインターネットアプリケーション (RIA) 実行環境「Adobe AIR 1.5」のLinux版を公開した</a></li>
<li><a href="http://digitechlog.com/2008/12/17/how-to-get-file-uri-in-adobe-air-install-path-with-source-code.html" title="Adobe AIRアプリケーションのインストールパスにファイルURIを取得するサンプルソースコード">Adobe AIRアプリケーションのインストールパスにファイルURIを取得するサンプルソースコード</a></li>
<li><a href="http://digitechlog.com/2008/11/22/encrypt-your-sqlite-database-in-adobe-air-15.html" title="Adobe AIR 1.5でSQLiteデータベースを暗号化とするサンプルソースコード">Adobe AIR 1.5でSQLiteデータベースを暗号化とするサンプルソースコード</a></li>
<li><a href="http://digitechlog.com/2008/11/04/the-list-of-adobe-air-social-network-application-tools.html" title="Adobe AIRソーシャル・ネットワーキング(Social Network Service: SNS)アプリケーションリスト">Adobe AIRソーシャル・ネットワーキング(Social Network Service: SNS)アプリケーションリスト</a></li>
<li><a href="http://digitechlog.com/2008/11/03/the-list-of-micrologging-like-twitter-adobe-air-application.html" title="Twitterなどマイクロブログイン(Microblogging)とコミュニケーションしやすいAdobe AIRアプリケーションリスト">Twitterなどマイクロブログイン(Microblogging)とコミュニケーションしやすいAdobe AIRアプリケーションリスト</a></li>
<li><a href="http://digitechlog.com/2008/10/29/the-list-of-photo-and-video-application-in-adobe-air.html" title="Adobe AIRマルチメディアアプリケーションツールリスト（写真とビデオなど）">Adobe AIRマルチメディアアプリケーションツールリスト（写真とビデオなど）</a></li>
<li><a href="http://digitechlog.com/2008/10/29/the-list-of-google-pruduct-in-adobe-air.html" title="Adobe AIRが使ったGoogle関係製品のリスト">Adobe AIRが使ったGoogle関係製品のリスト</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://digitechlog.com/2009/01/16/the-tutorial-on-how-to-save-swf-file-from-an-image-bitmap-in-adobe-air.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

