<?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/tag/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>トップ７個アドビ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>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>Flexcover: Flex／AIR／AS3用のオープンソースのコードカバレッジ（テストのコード網羅チェック）ツール</title>
		<link>http://digitechlog.com/2009/01/20/flexcover-an-open-source-code-coverage-tool-for-flex-air-and-as3.html</link>
		<comments>http://digitechlog.com/2009/01/20/flexcover-an-open-source-code-coverage-tool-for-flex-air-and-as3.html#comments</comments>
		<pubDate>Mon, 19 Jan 2009 16:12:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Flash Project]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Alluren]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flexcover]]></category>
		<category><![CDATA[オープンソース]]></category>
		<category><![CDATA[カバレッジ]]></category>

		<guid isPermaLink="false">http://digitechlog.com/2009/01/20/flexcover-an-open-source-code-coverage-tool-for-flex-air-and-as3.html</guid>
		<description><![CDATA[ Flexcoverとは、Allurent社のJoe Berkovitz氏が発表された、Flex・AIR・AS3用のオープンソースのコードカバレッジ（テストのコード網羅チェック）ツールだ。
Flex、AIR、AS3に対応していて、mxmlc/compc コンパイラとフレームワークに独自に手を加えたカスタムバージョンのFlexSDKを含んでいて、出力したSWF、SWCファイルに測定用の呼び出し関数を挿入することで、コードの実行とその回数を検知する仕組み。

Flexcoverの開発でBerkovitz氏は他言語で使われている既存のコードカバレッジツールの情報を入念に集めてみた。特にEmmaやCoverturaをはじめたくさんのJavaのオープンソースカバレッジツールを調べ、提供されている情報からわかる方法を調べました。それから私はより良いツールに着手し、リアルタイムなカバレッジの機能を加えました。それによりアプリケーションをテストしている時でもソースコードの更新をカバレッジ率と一緒に知ることができるようになりました。」と彼は語った。

Flexcoverの設計で目指している主な目的には以下のようなものがあるという。
AS3アプリケーションのカバレッジ情報をリアルタイムに収集し視覚化する
カバレッジ率の低い部分が一目で分かるようにする
カバレッジ情報を蓄積する
蓄積したカバレッジレポートを視覚化する
自動テストからでも手動テストからでもカバレッジデータを収集できるようにする
分析する
測定の実行は、基本的には次のような流れ。
１．Flexcover SDKで対象プロジェクトをコンパイルすると測定コード入りのSWFとカバレッジメタデータファイル(ソースコードと実行ラインの対照表のようなもの)が出力される
２．CoverageViewerというスタンドアロンのAIRアプリケーションを起動して１.で出力したメタデータファイルをロード、最初はカバー率０％になる。
３．測定対象のSWFを起動し、いじりたおす。
４．再びCoverageViewerに戻ると、いま行った操作により呼び出されたコードラインとその回数が表示される
 
自動化されたユニットテストスイートのカバレッジツールとしても使用できるようで、その場合はテキストベースのレポートファイルとして出力され、あとでそれをビューワーで閲覧できる。
リソース：
Google Code：http://code.google.com/p/flexcover/
joseph.berkovitzブログ：
http://joeberkovitz.com/blog/2008/04/12/flex-air-code-coverage-announce/
参考（英語）：http://www.infoq.com/news/2008/05/flexcover-code-coverage
Related Posts

オープンソースのASライブラリBetweenAS3のチュートリアル
FZip: ZIP読込み、作成用AS3のライブラリ
as3httpclient: オープンソースのHTTP/HTTPS AS3クライアント
FluorineFx: Flexと.NET間でAMF通信できるライブラリ
Flex-spreadsheet: オープンソースのExcelのようなスタイルのFlexスプレッドシート
APE(ActionScript Physics Engine): FlashやFlexで利用できるAS3で書かれたオープンソースの2D物理エンジン
Cairngorm: Flex/AIR RIA構築用フレームワーク
オープンソースソフトウェアPHP ScrewでPHPスクリプトを暗号化する

]]></description>
			<content:encoded><![CDATA[<p> Flexcover<em><a href="http://www.joeberkovitz.com/blog/2008/04/12/flex-air-code-coverage-announce/"></a></em>とは、Allurent社のJoe Berkovitz氏が発表された、Flex・AIR・AS3用のオープンソースのコードカバレッジ（テストのコード網羅チェック）ツールだ。</p>
<p>Flex、AIR、AS3に対応していて、mxmlc/compc コンパイラとフレームワークに独自に手を加えたカスタムバージョンのFlexSDKを含んでいて、出力したSWF、SWCファイルに測定用の呼び出し関数を挿入することで、コードの実行とその回数を検知する仕組み。</p>
<p><span id="more-263"></span>
<p>Flexcoverの開発でBerkovitz氏は他言語で使われている既存のコードカバレッジツールの情報を入念に集めてみた。特にEmmaやCoverturaをはじめたくさんのJavaのオープンソースカバレッジツールを調べ、提供されている情報からわかる方法を調べました。それから私はより良いツールに着手し、リアルタイムなカバレッジの機能を加えました。それによりアプリケーションをテストしている時でもソースコードの更新をカバレッジ率と一緒に知ることができるようになりました。」と彼は語った。</p>
<p><a href="http://digitechlog.com/wp-content/uploads/2009/01/flexcover.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="flexcover" src="http://digitechlog.com/wp-content/uploads/2009/01/flexcover-thumb.png" width="504" height="292"></a></p>
<p>Flexcoverの設計で目指している主な目的には以下のようなものがあるという。</p>
<li>AS3アプリケーションのカバレッジ情報をリアルタイムに収集し視覚化する
<li>カバレッジ率の低い部分が一目で分かるようにする
<li>カバレッジ情報を蓄積する
<li>蓄積したカバレッジレポートを視覚化する
<li>自動テストからでも手動テストからでもカバレッジデータを収集できるようにする
<li>分析する</li>
<p>測定の実行は、基本的には次のような流れ。</p>
<p><em>１．</em>Flexcover SDKで対象プロジェクトをコンパイルすると測定コード入りのSWFとカバレッジメタデータファイル(ソースコードと実行ラインの対照表のようなもの)が出力される
<p><em>２．</em>CoverageViewerというスタンドアロンのAIRアプリケーションを起動して１.で出力したメタデータファイルをロード、最初はカバー率０％になる。
<p><em>３．</em>測定対象のSWFを起動し、いじりたおす。
<p><em>４．</em>再びCoverageViewerに戻ると、いま行った操作により呼び出されたコードラインとその回数が表示される
<p><a href="http://digitechlog.com/wp-content/uploads/2009/01/flexcover-2.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="flexcover-2" src="http://digitechlog.com/wp-content/uploads/2009/01/flexcover-2-thumb.png" width="504" height="535"></a> </p>
<p>自動化されたユニットテストスイートのカバレッジツールとしても使用できるようで、その場合はテキストベースのレポートファイルとして出力され、あとでそれをビューワーで閲覧できる。</p>
<p>リソース：</p>
<p>Google Code：<a title="http://code.google.com/p/flexcover/" href="http://code.google.com/p/flexcover/">http://code.google.com/p/flexcover/</a></p>
<p>joseph.berkovitzブログ：
<p><a title="http://joeberkovitz.com/blog/2008/04/12/flex-air-code-coverage-announce/" href="http://joeberkovitz.com/blog/2008/04/12/flex-air-code-coverage-announce/">http://joeberkovitz.com/blog/2008/04/12/flex-air-code-coverage-announce/</a><br />
参考（英語）：<a href="http://www.infoq.com/news/2008/05/flexcover-code-coverage">http://www.infoq.com/news/2008/05/flexcover-code-coverage</a><br />
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://digitechlog.com/2010/05/17/open-source-library-betweenas3-tutorials.html" title="オープンソースのASライブラリBetweenAS3のチュートリアル">オープンソースのASライブラリBetweenAS3のチュートリアル</a></li>
<li><a href="http://digitechlog.com/2010/04/19/fzip-actionscript-3-open-source-class-library.html" title="FZip: ZIP読込み、作成用AS3のライブラリ">FZip: ZIP読込み、作成用AS3のライブラリ</a></li>
<li><a href="http://digitechlog.com/2010/03/22/actionscript3-utils-classes-to-extend-http-https-flash-player-9.html" title="as3httpclient: オープンソースのHTTP/HTTPS AS3クライアント">as3httpclient: オープンソースのHTTP/HTTPS AS3クライアント</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/05/08/flex-spreadsheet-is-similar-to-the-flex-datagrid-open-source-componet.html" title="Flex-spreadsheet: オープンソースのExcelのようなスタイルのFlexスプレッドシート">Flex-spreadsheet: オープンソースのExcelのようなスタイルのFlexスプレッドシート</a></li>
<li><a href="http://digitechlog.com/2009/05/05/ape-actionscript-physics-engine-is-an-as3-open-source-2d-physics-engine-for-use-in-flash-and-flex.html" title="APE(ActionScript Physics Engine): FlashやFlexで利用できるAS3で書かれたオープンソースの2D物理エンジン">APE(ActionScript Physics Engine): FlashやFlexで利用できるAS3で書かれたオープンソースの2D物理エンジン</a></li>
<li><a href="http://digitechlog.com/2009/05/01/cairngorm-is-the-lightweight-micro-architecture-for-rich-internet-applications-built-in-flex-air.html" title="Cairngorm: Flex/AIR RIA構築用フレームワーク">Cairngorm: Flex/AIR RIA構築用フレームワーク</a></li>
<li><a href="http://digitechlog.com/2011/11/08/php-screw.html" title="オープンソースソフトウェアPHP ScrewでPHPスクリプトを暗号化する">オープンソースソフトウェアPHP ScrewでPHPスクリプトを暗号化する</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://digitechlog.com/2009/01/20/flexcover-an-open-source-code-coverage-tool-for-flex-air-and-as3.html/feed</wfw:commentRss>
		<slash:comments>0</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>
		<item>
		<title>リッチインターネットアプリケーション (RIA) 実行環境「Adobe AIR 1.5」のLinux版を公開した</title>
		<link>http://digitechlog.com/2008/12/20/rich-internet-application-ria-runtime-adobe-air-15-linux-platform-is-relaeased.html</link>
		<comments>http://digitechlog.com/2008/12/20/rich-internet-application-ria-runtime-adobe-air-15-linux-platform-is-relaeased.html#comments</comments>
		<pubDate>Sat, 20 Dec 2008 04:22:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ニュース]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://digitechlog.com/2008/12/20/rich-internet-application-ria-runtime-adobe-air-15-linux-platform-is-relaeased.html</guid>
		<description><![CDATA[「古い」のニュースだと思いますが、イベントのメモとして記録します。
リッチインターネットアプリケーション (RIA) 実行環境「Adobe AIR 1.5」のLinux版、米アドビ システムズは12月18日(米国時間)に正式で公開しました。ダウンロードパッケージはFedora 8、Ubuntu 7.10、openSUSE 10.3に対応していて（統合デスクトップ環境はGNOMEとKDEに対応する）、AdobeはこれまでにWindows版とMac OS X版を提供しています。

Adobe AIRというのは、Adobe AIRが使ったGoogle関係製品のリストにGoogleの関係製品を紹介するとき説明するような、AIRは「Adobe Flash Platform」の中核コンポーネントで，HTML，JavaScript，Flash（ActionScript）などのWeb関連技術をベースとしたアプリケーション実行環境。Webブラウザを使わずに操作性の高いWebアプリケーションを動作できる。AIR対応のアプリケーションの開発には，「Flex 3 SDK」や「Flex Builer 3」などを利用する。
Linux版Adobe AIR 1.5は、Flash Player 10の新機能を統合。Pixel Benderを利用したカスタムフィルタ / エフェクトが可能になったほか、新しいテキストエンジンの採用によりレイアウト機能が向上している。WebKitプロジェクトで開発された JavaScriptエンジン「SquirrelFish」の採用により、JavaScript / Ajaxを使用したWebアプリの処理速度も大幅に向上している。
Adobe AIR 1.5のリリースにあわせ、開発環境のAdobe AIR 1.5 SDKのLinux版も公開されている。動作にはSun Java/JRE 1.4.2以降が必要。
同社のWebサイトから無償でダウンロードできます：
http://get.adobe.com/air/
Related Posts

GPLFlash: GNU/Linux上でAdobeのFlashムービーを再生しよう
PyAMF: PythonのためにAdobeのFlash Playerに対応しているサポートアクションメッセージ形式（ AMF ）を提供する
トップ７個アドビAIRビデオアプリケーション
SWFフォーマット画像ファイルをローカルに保存とするAdobe AIRアプリケーション
Adobe AIRアプリケーションのインストールパスにファイルURIを取得するサンプルソースコード
Adobe AIR 1.5でSQLiteデータベースを暗号化とするサンプルソースコード
Adobe AIRソーシャル・ネットワーキング(Social Network Service: SNS)アプリケーションリスト
Twitterなどマイクロブログイン(Microblogging)とコミュニケーションしやすいAdobe AIRアプリケーションリスト

]]></description>
			<content:encoded><![CDATA[<p>「古い」のニュースだと思いますが、イベントのメモとして記録します。</p>
<p>リッチインターネットアプリケーション (RIA) 実行環境「Adobe AIR 1.5」のLinux版、米アドビ システムズは12月18日(米国時間)に正式で公開しました。ダウンロードパッケージはFedora 8、Ubuntu 7.10、openSUSE 10.3に対応していて（統合デスクトップ環境はGNOMEとKDEに対応する）、AdobeはこれまでにWindows版とMac OS X版を提供しています。</p>
<p><span id="more-210"></span>
<p>Adobe AIRというのは、<a href="http://digitechlog.com/2008/10/29/the-list-of-google-pruduct-in-adobe-air.html">Adobe AIRが使ったGoogle関係製品のリスト</a>にGoogleの関係製品を紹介するとき説明するような、AIRは「Adobe Flash Platform」の中核コンポーネントで，HTML，JavaScript，Flash（ActionScript）などのWeb関連技術をベースとしたアプリケーション実行環境。Webブラウザを使わずに操作性の高いWebアプリケーションを動作できる。AIR対応のアプリケーションの開発には，「Flex 3 SDK」や「Flex Builer 3」などを利用する。</p>
<p>Linux版Adobe AIR 1.5は、Flash Player 10の新機能を統合。Pixel Benderを利用したカスタムフィルタ / エフェクトが可能になったほか、新しいテキストエンジンの採用によりレイアウト機能が向上している。WebKitプロジェクトで開発された JavaScriptエンジン「SquirrelFish」の採用により、JavaScript / Ajaxを使用したWebアプリの処理速度も大幅に向上している。
<p>Adobe AIR 1.5のリリースにあわせ、開発環境のAdobe AIR 1.5 SDKのLinux版も公開されている。動作にはSun Java/JRE 1.4.2以降が必要。
<p>同社のWebサイトから無償でダウンロードできます：</p>
<p><a title="http://get.adobe.com/air/" href="http://get.adobe.com/air/">http://get.adobe.com/air/</a></p>
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://digitechlog.com/2009/12/01/gplflash-another-alternative-flash-runtime.html" title="GPLFlash: GNU/Linux上でAdobeのFlashムービーを再生しよう">GPLFlash: GNU/Linux上でAdobeのFlashムービーを再生しよう</a></li>
<li><a href="http://digitechlog.com/2009/10/04/pyamf-an-amf-actionscript-message-format-decoder-and-encoder-for-python.html" title="PyAMF: PythonのためにAdobeのFlash Playerに対応しているサポートアクションメッセージ形式（ AMF ）を提供する">PyAMF: PythonのためにAdobeのFlash Playerに対応しているサポートアクションメッセージ形式（ AMF ）を提供する</a></li>
<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/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/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>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://digitechlog.com/2008/12/20/rich-internet-application-ria-runtime-adobe-air-15-linux-platform-is-relaeased.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

