<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>TONPOOBLOG &#187; ActionScript2</title>
	<atom:link href="http://www.tonpoo.com/blog/category/flash/actionscript2/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tonpoo.com/blog</link>
	<description>神宮前にあるWEB制作事務所「株式会社ブリコルール（bricoleur inc.）」に所属しているFlash（ActionScript）開発＆WEB制作プロジェクト「Tonpoo.com」のブログです。</description>
	<lastBuildDate>Wed, 01 Feb 2012 11:18:08 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/category/flash/actionscript2/feed/" />
		<item>
		<title>Flash Communication Server：プロキシサーバに関する問題</title>
		<link>http://www.tonpoo.com/blog/2010/06/proxyservertrouble/</link>
		<comments>http://www.tonpoo.com/blog/2010/06/proxyservertrouble/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 04:22:04 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Translation]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=1137</guid>
		<description><![CDATA[HTTPトンネリングの件に関連して、FCS関連でプロキシサーバを経由した場合の接続方法についての下記の記事も簡単に和訳しました。 Macromedia &#8211; Developer Center : Tunneling Macromedia Flash Communications through Firewalls and Proxy Servers. Page 3 例によって文書自体が古い上に意訳・適当な訳文ですが、HTTPトンネリングと同じく何かの参考までに。 ※注：HTTPトンネリングの記事同様、こちらもリンク先が無くなってしまいました。アドビサイトにどこかに原文残ってないのかな・・・。 プロキシサーバに関する問題 内部のネットワークとインターネットとの中継役としてプロキシサーバを利用することで、組織のネットワーク環境をより安全にすることができる。WEBプロキシサーバというのは通常、ネットワークの通信料を削減するためのキャッシングサーバとして利用される。とはいえ、プロキシサーバの使い道は他にもある。 ネットワークレイヤーのファイヤーウォールとプロキシサーバを組み合わせることで、WEBへのアクセス自体は確保した上で、組織のネットワーク内にあるワークステーションから外部のネットワークに対して直接アクセスする必要がなくなる。ブラウザはリモートのサーバに対してWEBページのデータを直接要求するのではなく、プロキシサーバに対して要求しなければならない。ページのデータがキャッシュされていなかった場合には、プロキシサーバがリモートのサーバに対してリクエストを行ない、返ってきたデータをブラウザに戻すことになる。プロキシサーバが中継役として存在する場合、ファイヤーウォールは基本的にネットワーク内部から外部に対して直接送出されるリクエストは全てブロックするように設定されていることが多い―――たとえそれが80番ポートに対するものであったとしても。プロキシサーバだけが80番ポートを通じて外側の世界との接続を許されているのだ（図8を参照）。 HTTPトンネリングを使わない場合、プロキシサーバの内側にいて、インターネットへの直接接続が許可されていない環境にあるユーザーはコミュニケーションサーバへの接続ができない。HTTPトンネリングを使えばできるようになることがしばしばある。プロキシサーバからしてみれば、RTMPTを使った接続要求というのは通常のHTTPリクエストと同様に捉えられる。コミュニケーションサーバからのレスポンスもHTTPレスポンスと同様に判断される。このため、プロキシサーバはRTMPTリクエストの送出もコミュニケーションサーバからのデータ受信についても対応できるはずである。ところが、HTTPトンネリングがうまくいくかどうかは保証されていないのだ。プロキシサーバにはWEBページをキャッシュする中継役以上の機能がある。それは、外部のネットワークリソースに対するアクセスの制御ということだ。例えば、プロキシの管理者はアクセス禁止サイトのリストを作成し、プロキシサーバ内の全ユーザーに対して、それらのサイトへのアクセスを拒否することができる。プロキシサーバの中には、さらに詳細にデータの調査やフィルタリングが可能なものもある。例えば、特定のコンテンツや、text/thmlのようなMIMEタイプのみを許可することもできる。WEBサーバがWEBページのデータをブラウザに対して返す際、HTTPヘッダにはContentTypeというデータが含まれる。WEBサーバがWEBページのデータを送出する場合のHTTPヘッダの書式は以下のようになる： HTTP/1.1 200 OK Server: Netscape-Enterprise/6.0 Date: Sat, 24 May 2003 01:09:43 GMT Content-type: text/html Etag: "c96066c3-1-0-1e8" Last-modified: Tue, 25 Jun 1996 19:11:18 GMT Content-length: 488 Accept-ranges: bytes また、画像データを送出する場合のHTTPヘッダの書式は以下のようになる： HTTP/1.1 200 OK Server: [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://www.tonpoo.com/blog/2010/06/httptunnelingprotocol/">HTTPトンネリングの件</a></strong>に関連して、FCS関連で<strong>プロキシサーバを経由した場合の接続方法</strong>についての下記の記事も簡単に和訳しました。</p>
<p><strong><a href="http://www.adobe.com/devnet/flashcom/articles/firewalls_proxy03.html" target="_blank">Macromedia &#8211; Developer Center : Tunneling Macromedia Flash Communications through Firewalls and Proxy Servers. Page 3</a></strong></p>
<p>例によって文書自体が古い上に意訳・適当な訳文ですが、HTTPトンネリングと同じく何かの参考までに。</p>
<p><span style="color: #ff0000;">※注：HTTPトンネリングの記事同様、こちらもリンク先が無くなってしまいました。アドビサイトにどこかに原文残ってないのかな・・・。</span></p>
<hr />
<h2>プロキシサーバに関する問題</h2>
<p>内部のネットワークとインターネットとの中継役としてプロキシサーバを利用することで、組織のネットワーク環境をより安全にすることができる。WEBプロキシサーバというのは通常、ネットワークの通信料を削減するためのキャッシングサーバとして利用される。とはいえ、プロキシサーバの使い道は他にもある。</p>
<p>ネットワークレイヤーのファイヤーウォールとプロキシサーバを組み合わせることで、WEBへのアクセス自体は確保した上で、組織のネットワーク内にあるワークステーションから外部のネットワークに対して直接アクセスする必要がなくなる。ブラウザはリモートのサーバに対してWEBページのデータを直接要求するのではなく、プロキシサーバに対して要求しなければならない。ページのデータがキャッシュされていなかった場合には、プロキシサーバがリモートのサーバに対してリクエストを行ない、返ってきたデータをブラウザに戻すことになる。プロキシサーバが中継役として存在する場合、ファイヤーウォールは基本的にネットワーク内部から外部に対して直接送出されるリクエストは全てブロックするように設定されていることが多い―――たとえそれが80番ポートに対するものであったとしても。プロキシサーバだけが80番ポートを通じて外側の世界との接続を許されているのだ（図8を参照）。</p>
<p>HTTPトンネリングを使わない場合、プロキシサーバの内側にいて、インターネットへの直接接続が許可されていない環境にあるユーザーはコミュニケーションサーバへの接続ができない。HTTPトンネリングを使えばできるようになることがしばしばある。プロキシサーバからしてみれば、RTMPTを使った接続要求というのは通常のHTTPリクエストと同様に捉えられる。コミュニケーションサーバからのレスポンスもHTTPレスポンスと同様に判断される。このため、プロキシサーバはRTMPTリクエストの送出もコミュニケーションサーバからのデータ受信についても対応できるはずである。ところが、HTTPトンネリングがうまくいくかどうかは保証されていないのだ。プロキシサーバにはWEBページをキャッシュする中継役以上の機能がある。それは、外部のネットワークリソースに対するアクセスの制御ということだ。例えば、プロキシの管理者はアクセス禁止サイトのリストを作成し、プロキシサーバ内の全ユーザーに対して、それらのサイトへのアクセスを拒否することができる。プロキシサーバの中には、さらに詳細にデータの調査やフィルタリングが可能なものもある。例えば、特定のコンテンツや、text/thmlのようなMIMEタイプのみを許可することもできる。WEBサーバがWEBページのデータをブラウザに対して返す際、HTTPヘッダにはContentTypeというデータが含まれる。WEBサーバがWEBページのデータを送出する場合のHTTPヘッダの書式は以下のようになる：</p>
<blockquote>
<pre>HTTP/1.1 200 OK
Server: Netscape-Enterprise/6.0
Date: Sat, 24 May 2003 01:09:43 GMT
<strong>Content-type: text/html</strong>
Etag: "c96066c3-1-0-1e8"
Last-modified: Tue, 25 Jun 1996 19:11:18 GMT
Content-length: 488
Accept-ranges: bytes</pre>
</blockquote>
<p>また、画像データを送出する場合のHTTPヘッダの書式は以下のようになる：</p>
<blockquote>
<pre>HTTP/1.1 200 OK
Server: Netscape-Enterprise/6.0
Date: Sat, 24 May 2003 01:51:17 GMT
<strong>Content-type: image/gif</strong>
Etag: "782311ca-126-0-f1ae"
Last-modified: Mon, 06 May 2002 21:10:38 GMT
Content-length: 61870
Accept-ranges: bytes</pre>
</blockquote>
<p>Macromedia Flash Communication Serverが返すデータはテキストデータではないが、HTTPヘッダにはContent-typeの記述が含まれない。そして、Content-typeが記述されていない場合にはtext/htmlと判断されてしまう。このため、RTMPTのトラフィックであっても、全てのプロキシサーバを通過できるという保証は無いのである。プロキシサーバとアプリケーションレイヤのファイヤーウォールというものが、システムアドミニストレータの設定した幅広いバリエーションのルールに従ってコンテンツのフィルタリングを行うように作られているということを考慮すれば、これはおかしなことではない。ITセキュリティの部署が正規のHTML文書といくつかの画像フォーマット（image/GIFなど）のみを許可すると決定したならば、それを実現するための精巧なツールが開発されるということだ。もしRTMPT接続さえも通さないプロキシサーバの場合は、組織のファイヤーウォール担当の管理者に連絡を取り、プロキシサーバの例外設定が可能かどうか確認するといい。</p>
<p><strong><img src="http://www.tonpoo.com/blog/wp-content/uploads/2010/06/fig08.gif" border="0" alt="fig08" title="fig08" width="360" height="150" style="display: inline; border: 0px;" /> </strong></p>
<p>図8.プロキシサーバとファイヤーウォール</p>
<p><strong>注：</strong>各端末（Workstation）はインターネットに直接接続することはできず、必ずプロキシサーバを通してリソース要求を行うことになる。プロキシサーバはインターネットからリソースを取得し、それを各端末に転送する。各端末がファイヤーウォールを越えて外部のシステムにアクセスすることは決してない。</p>
<h3>一度に複数のポートを利用する</h3>
<p>Macromediaは先日、Flash Communication Server バージョン1.5のリリースとともに、Flash Communication Serverコンポーネントのアップデート版をリリースした。このアップデートの目玉のひとつが、Simple Connectコンポーネント内部に新規に追加されたコードである。このアップデートによって、デフォルトのRTMPポート（1935）経由で到達できないサーバへの接続時間を短縮するための機能が追加された。Simple Connectコンポーネントのアプリケーションディレクトリのパラメーターに「rtmp」が指定されていて、かつポート番号が指定されていない場合、Simple Connectコンポーネントは次のように動作する：</p>
<ol>
<li>NetConnectionオブジェクトを生成し、指定されたアドレスに対して、1935番ポートを使って通常の接続を試みる。</li>
<li>2つめのNetConnectionオブジェクトを生成し、250ミリ秒待機した後、サーバに対して80番ポートを使ったRTMPT接続を試みる。</li>
<li>先に接続が成功した方を受け入れ、もう片方のNetConnectionオブジェクトは接続を閉じてから破棄する。</li>
</ol>
<p>厳密に言えばこのようなやり方は必要ない。FlashPlayerはデフォルトでまず1935番ポートを使ったRTMP接続を試み、その後443番ポート、80番ポートを試みる。その後、80番ポートを使ったRTMPT接続を試みるからだ。ただしこれらの試みは時間がかかる。はじめのRTMP接続が失敗した場合、250ミリ秒後に80番ポートを使ったRMTPT接続を試みることで、接続プロセスにかかる時間は劇的に短縮されるのだ。このコンポーネントの作りを理解するため、FCSimpleConnectClassの<code>actualConnect()</code>メソッドを見てみよう。すべての人がSimple Connectコンポーネントを使うわけではないので、以下に示すコードは本来のコードを少々編集したものになっている。ただし行っている処理はほぼ同じだ。筆者はこのコードをメインのタイムラインに記述したが、よりオブジェクト指向的なアプローチで書き換えることも可能である。</p>
<pre class="brush: as3; title: ; notranslate">//接続に成功するとonConnectファンクションが実行される
function onConnect(nc) {
	_global.main_nc = nc;// グローバル変数に接続成功済みのNetConnectionオブジェクトを記録
	// 確認のためURIをtraceし、使用中のプロトコルを確認
	trace(&quot;onConnect&gt; &quot;+nc.uri);
	// 接続に成功したNetConnectionオブジェクトのためのonStatusハンドラを生成
	main_nc.onStatus = function(info) {
		//ここに各種のイベントをハンドルするためのコードを記述
		//以下のコードはinfoオブジェクトの内容を出力するもの
		trace(&quot;----main_nc.onStatus----&quot;);
		for (var p in info) {
			trace(p+&quot;: &quot;+info[p]);
		}
	};
	//あとは他のコンポーネントに接続したりプログラムを初期化するなど・・・
}

//接続に失敗するとonConnectFailedファンクションが実行される
function onConnectFailed(info) {
	//infoオブジェクトを検証し、接続失敗の原因についてレポートする
	//以下のコードは単にinfoオブジェクトの内容をtraceしているだけなので、
	//各自でエラーハンドリングコードを書き換えること
	trace(&quot;----onConnectFailed----&quot;);
	//infoオブジェクトの全プロパティの分ループ処理
	for (var p in info) {
		trace(p+&quot;: &quot;+info[p]);
		// If the application rejects the connection and passes back
		// and application object loop through all its properties too.
		if (p == &quot;application&quot;) {
			var appObj = info.application;
			for (var q in appObj) {
				trace(&quot;   &quot;+q+&quot;: &quot;+appObj[q]);
			}
		}
	}
}

//RTMP接続用のNetConnectionオブジェクトを生成
rtmp_nc = new NetConnection();
//こちらの接続が先に成功した場合に、rtmpt_ncオブジェクトを破棄するための
//onStatusハンドラを生成
rtmp_nc.onStatus = function(info) {
	this.pending = false;
	if (info.code == &quot;NetConnection.Connect.Success&quot;) {
		if (rtmpt_nc.pending) {
			rtmpt_nc.onStatus = null;
			rtmpt_nc.close();
			rtmpt_nc = null;
			clearInterval(connectionID);
		}
		onConnect(this);
	} else if (!rtmpt_nc.pending) {
		onConnectFailed(info);
	}
};

//RTMPT接続用のNetConnectionオブジェクトを生成
rtmpt_nc = new NetConnection();
//こちらの接続が先に成功した場合に、rtmp_ncオブジェクトを破棄するための
//onStatusハンドラを生成
rtmpt_nc.onStatus = function(info) {
	this.pending = false;
	if (info.code == &quot;NetConnection.Connect.Success&quot;) {
		if (rtmp_nc.pending) {
			rtmp_nc.onStatus = null;
			rtmp_nc.close();
			rtmp_nc = null;
		}
		onConnect(this);
	} else if (!rtmp_nc.pending) {
		onConnectFailed(info);
	}
};

//どちらのNetConnectionオブジェクトについてもペンディングフラグを立てておく
rtmp_nc.pending = true;
rtmpt_nc.pending = true;

//rtmp接続を試みる
rtmp_nc.connect(&quot;rtmp://host.domain.com/myApp/myInstance&quot;,userName,password);

//rtmpt接続を400ミリ秒後に行うように設定
connectionID = setInterval(connectRTMPT, 400);

//このファンクションが実行されたらインターバルを破棄してRTMPT接続を試みる
function connectRTMPT() {
	clearInterval(connectionID);
	rtmpt_nc.connect(&quot;rtmpt://host.domain.com/myApp/myInstance&quot;,userName,password);
}
//80番ポートが使えず、8080番ポートを使う場合などのconnectRTMPTメソッドの記述例は以下のとおり
function connectRTMPT() {
	clearInterval(connectionID);
	rtmpt_nc.connect(&quot;rtmpt://myHost.myDomain.com:8080/myApp/myInstance&quot;,userName,password);
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2010/06/proxyservertrouble/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2010/06/proxyservertrouble/" />
	</item>
		<item>
		<title>Flash Communication Server：HTTPトンネリングプロトコルについて</title>
		<link>http://www.tonpoo.com/blog/2010/06/httptunnelingprotocol/</link>
		<comments>http://www.tonpoo.com/blog/2010/06/httptunnelingprotocol/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 05:39:32 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Translation]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=1114</guid>
		<description><![CDATA[諸事情からFlashCommunicationServerへのHTTPトンネリング接続の方法について調べる機会があり、下記のドキュメントを簡単に和訳してみました。 HTTP Tunneling protocols ※注：リンク先が無くなってしまいました・・・。げ、原文まだどっかに残ってないかな・・・。 旧Macromedia時代の文書で、例によってかなり意訳・適当な訳文ですが、何かの参考までに。 HTTPトンネリングプロトコル RTMP、RTMPT、RTMPS FlashPlayerはFlashCommunicationServerと通信する際、デフォルトではRTMPプロトコルを使い、1935番ポートに接続する。 失敗したら443番ポートと80番ポートでの接続を試みる。 ファイヤーウォールが設定されている場合、非標準のポートを経由したTCP/IP通信が許可されていないことがあるため。 これらの手法で、およそ96%のユーザーをカバーすることができるはず。 100%に近いユーザーをカバーするためには（もしあれば）プロクシを通すか、ファイヤーウォールのためにHTTP通信しかできない場合などはHTTPトンネリングを使ってHTTPプロトコル越しにRTMPパケットを送信することになる。 以前のFlashPlayerでは、サーバへの通信要求は常にRTMPプロトコルで行われ、オプションとしてポート番号を指定することが可能であった。以下のコードでは、RTMPを利用し、1935番、443番、80番の3つのポートを使った計3回の接続を試みる。 以下のようにしてポート番号を指定した場合には、指定されたポート番号を使った1回の接続のみを試みる。 現在のFlashPlayerでは、以下の3つのうちどれか一つのプロトコルを使った接続がサポートされるようになった。 RTMP（デフォルトポート：1935） RTMPT（HTTPを経由したトンネリング。デフォルトポート：80） RTMPS（HTTPSを経由したトンネリング。デフォルトポート：443） コードの書式は以下のようになる。 上記の場合、各プロトコルのデフォルトポートに対しての計1回の接続のみを試みる。 ポート番号を指定する場合の書式は以下の通り。 上記の場合は、指定されたポートに対しての計1回の接続を試みる。 また、以下のような特殊な接続方法もある。 この場合、RTMP:1935を試みたあとにRTMPT:80（昔のHTTP:80に代わるもの）を試みる。 新しいFlashPlayerでは、これは「万が一の場合の代替手法」として機能している。もしデフォルトの方法が失敗した場合、FlashPlayerは80番ポートでの接続を試みる。おそらくこれがHTTPトンネリングのための最も一般的な手法であろう。 メモ：HTTPトンネリングはリアルタイムな音声・映像配信のパフォーマンスに影響をおよぼすことがある。 ・・・結論としては、以下の方法がベスト、っていう認識でいいのかな。]]></description>
			<content:encoded><![CDATA[<p>諸事情から<strong>FlashCommunicationServerへのHTTPトンネリング接続</strong>の方法について調べる機会があり、下記のドキュメントを簡単に和訳してみました。</p>
<p><strong><a href="http://kb2.adobe.com/cps/166/tn_16631.html" target="_blank">HTTP Tunneling protocols</a></strong></p>
<p><span style="color: #ff0000;">※注：リンク先が無くなってしまいました・・・。げ、原文まだどっかに残ってないかな・・・。</span></p>
<p>旧Macromedia時代の文書で、例によってかなり意訳・適当な訳文ですが、何かの参考までに。</p>
<hr />
<h2>HTTPトンネリングプロトコル</h2>
<h3>RTMP、RTMPT、RTMPS</h3>
<p>FlashPlayerはFlashCommunicationServerと通信する際、デフォルトではRTMPプロトコルを使い、1935番ポートに接続する。 失敗したら443番ポートと80番ポートでの接続を試みる。 ファイヤーウォールが設定されている場合、非標準のポートを経由したTCP/IP通信が許可されていないことがあるため。 これらの手法で、およそ96%のユーザーをカバーすることができるはず。</p>
<p>100%に近いユーザーをカバーするためには（もしあれば）プロクシを通すか、ファイヤーウォールのためにHTTP通信しかできない場合などはHTTPトンネリングを使ってHTTPプロトコル越しにRTMPパケットを送信することになる。</p>
<p>以前のFlashPlayerでは、サーバへの通信要求は常にRTMPプロトコルで行われ、オプションとしてポート番号を指定することが可能であった。以下のコードでは、RTMPを利用し、1935番、443番、80番の3つのポートを使った計3回の接続を試みる。</p>
<pre class="brush: as3; title: ; notranslate">nc.connect(&quot;rtmp://mysite.com/myapp&quot;);</pre>
<p>以下のようにしてポート番号を指定した場合には、指定されたポート番号を使った1回の接続のみを試みる。</p>
<pre class="brush: as3; title: ; notranslate">nc.connect(&quot;rtmp://mysite.com:PORT/myapp&quot;);</pre>
<p>現在のFlashPlayerでは、以下の3つのうちどれか一つのプロトコルを使った接続がサポートされるようになった。</p>
<ul>
<li><strong>RTMP</strong>（デフォルトポート：1935）</li>
<li><strong>RTMPT</strong>（HTTPを経由したトンネリング。デフォルトポート：80）</li>
<li><strong>RTMPS</strong>（HTTPSを経由したトンネリング。デフォルトポート：443）</li>
</ul>
<p>コードの書式は以下のようになる。</p>
<ul>
<li>
<pre class="brush: as3; title: ; notranslate">nc.connect(&quot;rtmpt://flashteam.macromedia.com/myapp&quot;);</pre>
</li>
<li>
<pre class="brush: as3; title: ; notranslate">nc.connect(&quot;rtmps://flashteam.macromedia.com/myapp&quot;);</pre>
</li>
</ul>
<p>上記の場合、各プロトコルのデフォルトポートに対しての計1回の接続のみを試みる。</p>
<p>ポート番号を指定する場合の書式は以下の通り。</p>
<ul>
<li>
<pre class="brush: as3; title: ; notranslate">nc.connect(&quot;rtmp://flashteam.macromedia.com:PORT/myapp&quot;);</pre>
</li>
<li>
<pre class="brush: as3; title: ; notranslate">nc.connect(&quot;rtmpt://flashteam.macromedia.com:PORT/myapp&quot;);</pre>
</li>
<li>
<pre class="brush: as3; title: ; notranslate">nc.connect(&quot;rtmps://flashteam.macromedia.com:PORT/myapp&quot;);</pre>
</li>
</ul>
<p>上記の場合は、指定されたポートに対しての計1回の接続を試みる。</p>
<p><strong>また、以下のような特殊な接続方法もある。</strong></p>
<ul>
<li>
<pre class="brush: as3; title: ; notranslate">nc.connect(&quot;rtmp://flashteam.macromedia.com/myapp&quot;);</pre>
</li>
</ul>
<p>この場合、RTMP:1935を試みたあとにRTMPT:80<strong>（昔のHTTP:80に代わるもの）</strong>を試みる。</p>
<p>新しいFlashPlayerでは、これは「万が一の場合の代替手法」として機能している。もしデフォルトの方法が失敗した場合、FlashPlayerは80番ポートでの接続を試みる。おそらくこれがHTTPトンネリングのための最も一般的な手法であろう。</p>
<p><strong>メモ：</strong>HTTPトンネリングはリアルタイムな音声・映像配信のパフォーマンスに影響をおよぼすことがある。</p>
<hr />
<p>・・・結論としては、以下の方法がベスト、っていう認識でいいのかな。</p>
<pre class="brush: as3; title: ; notranslate">nc.connect(&quot;rtmp://flashteam.macromedia.com/myapp&quot;);</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2010/06/httptunnelingprotocol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2010/06/httptunnelingprotocol/" />
	</item>
		<item>
		<title>BitmapDataの「2880ピクセルの罠」もとい、「幅or高さ8,192ピクセル＆ピクセル総数16,777,216の罠」</title>
		<link>http://www.tonpoo.com/blog/2010/03/bitmapdata-2880/</link>
		<comments>http://www.tonpoo.com/blog/2010/03/bitmapdata-2880/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 03:37:11 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Troubles]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=887</guid>
		<description><![CDATA[またまた今更ながらの備忘録メモ。FlashPlayer8から使えるようになったBitmapDataクラスによって、動的にフィルターをかけたり、グラデーションのついたマスク表現などを使えるようになりました。 が、フィルターやグラデーションマスクといった機能、サイズ（ファイルサイズではなく、width x heightのサイズ）の大きな画像やオブジェクトに対しては効きません。具体的には、対象となるオブジェクトのwidthまたはheightが2880ピクセルを超過すると、こうした機能が無効になります。 で、その詳しい理由については下記のURLが詳しい： Flash 8 のイメージ API の概要 &#124; デベロッパーセンター 該当する部分の引用： メモ : Flash Player では、ビットマップの最大サイズは幅、高さいずれも 2880 ピクセルに制限されています。この制約よりも大きい BitmapData インスタンスを作成しようとすると、ビットマップは作成されません。これは、クライアントの RAM を使い切るような Flash ムービーを作成できないようにするために設定されています。2880 × 2880 ピクセルのビットマップには、約 32 MB 程度の RAM が必要です。 残念ながらFlashPlayer10でもまだこの点についての変更は無い模様。なぜこの記事を書いてるかというと、今現在この問題で引っかかってるため。さて、どうして回避したものか・・・。 ＜追記＞ kaedeさんからコメントで情報いただきましたが、FlashPlayer10からはBitmapDataサイズの制限が拡大されていますね。 BitmapData &#8211; ActionScript 3.0 言語およびコンポーネントリファレンス 当該部分を引用： AIR 1.5 および Flash Player 10 では、BitmapData オブジェクトの最大サイズは幅または高さが 8,192 ピクセルで、ピクセルの総数は 16,777,216 を超えないようにする必要があります（したがって、BitmapData [...]]]></description>
			<content:encoded><![CDATA[<p>またまた今更ながらの備忘録メモ。FlashPlayer8から使えるようになった<strong>BitmapDataクラス</strong>によって、動的にフィルターをかけたり、グラデーションのついたマスク表現などを使えるようになりました。</p>
<p>が、フィルターやグラデーションマスクといった機能、サイズ（ファイルサイズではなく、width x heightのサイズ）の大きな画像やオブジェクトに対しては効きません。具体的には、対象となるオブジェクトのwidthまたはheightが<strong style="color:#FF0000;font-size:20px;">2880ピクセル</strong>を超過すると、こうした機能が無効になります。</p>
<p>で、その詳しい理由については下記のURLが詳しい：</p>
<p><strong><a href="http://www.adobe.com/jp/devnet/flash/articles/image_api_02.html" target="_blank">Flash 8 のイメージ API の概要 | デベロッパーセンター</a></strong></p>
<p>該当する部分の引用：</p>
<blockquote><p>メモ : Flash Player では、<strong>ビットマップの最大サイズは幅、高さいずれも 2880 ピクセルに制限されています。この制約よりも大きい BitmapData インスタンスを作成しようとすると、ビットマップは作成されません。</strong>これは、クライアントの RAM を使い切るような Flash ムービーを作成できないようにするために設定されています。2880 × 2880 ピクセルのビットマップには、約 32 MB 程度の RAM が必要です。</p></blockquote>
<p><del datetime="2010-03-03T04:22:29+00:00">残念ながらFlashPlayer10でもまだこの点についての変更は無い模様。</del>なぜこの記事を書いてるかというと、今現在この問題で引っかかってるため。さて、どうして回避したものか・・・。</p>
<h3>＜追記＞</h3>
<p>kaedeさんからコメントで情報いただきましたが、FlashPlayer10からはBitmapDataサイズの制限が拡大されていますね。</p>
<p><strong><a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/display/BitmapData.html#BitmapData%28%29" target="_blank">BitmapData &#8211; ActionScript 3.0 言語およびコンポーネントリファレンス</a></strong></p>
<p>当該部分を引用：</p>
<blockquote><p>AIR 1.5 および Flash Player 10 では、BitmapData オブジェクトの最大サイズは<strong style="color:#FF0000;font-size:16px;">幅または高さが 8,192 ピクセル</strong>で、<strong style="color:#FF0000;font-size:16px;">ピクセルの総数は 16,777,216</strong> を超えないようにする必要があります（したがって、<strong>BitmapData オブジェクトの幅が 8,192 ピクセルの場合、高さは 2,048 ピクセル以下にする必要があります</strong>）。Flash Player 9 以前および AIR 1.1 以前では、高さの制限は 2,880 ピクセル、幅の制限は 2,880 ピクセルです。幅または高さに 2880 より大きい値を指定すると、新しいインスタンスは作成されません。</p></blockquote>
<p>なるほど、8192 x 8192ピクセル、ってのはダメなんですね。で、改めて今回作業してるファイルを見ると、cacheAsBitmapかけようと思ったインスタンスの横幅が<strong>9600ピクセル</strong>・・・。そ、そりゃあダメですよね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2010/03/bitmapdata-2880/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2010/03/bitmapdata-2880/" />
	</item>
		<item>
		<title>FlashからExternalInterfaceクラスを使ってLightboxを呼び出す</title>
		<link>http://www.tonpoo.com/blog/2009/12/flash-externalinterface-lightbox/</link>
		<comments>http://www.tonpoo.com/blog/2009/12/flash-externalinterface-lightbox/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 13:55:06 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[SWFObject]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=649</guid>
		<description><![CDATA[「Flash（swf）からLightboxを呼び出す」というニーズがこれまでに何回かあり、またついさっきもあって、その都度ちょっと面倒だったりしたのでメモ。なお、ウチの会社ではswfファイルの埋め込みには通常swfobject2を使ってるので、以下は「Lightbox2.04 + swfobject2 + ActionScript（ExternalInterfaceクラス）」という組み合わせが前提となっています。 Lightboxを入手 まず使用するLightboxのバージョンは2.04。Lokesh Dhakar氏によるLightbox 2の公式サイトで入手。 ベースHTMLの作成 次にベースとなるHTMLを作成。今回はとりあえずSWFObject 2 HTML and JavaScript ジェネレーターを使ってサクっと作りました。ポイントとしては、「SWFの定義」のオプションを一部変更すること。 まず、Lightboxを表示した際に、swfコンテンツが上に来てしまうのを避けるため、wmodeをtransparentに設定。また、ExternalInterfaceクラスを使うので、allowscriptaccessをalwaysに設定。できあがったHTMLは下記の通り： Lightbox用のライブラリを組み込み 上記のベースHTMLのheadセクションに、Lightbox動作のためのjsファイルとcssファイルを組み込む下記の記述を追加。 Lightboxを起動させるJavaScriptメソッドを追加 Lightboxを直接起動させるJavaScriptのメソッドがないので、下記ページを参考にそのためのメソッドを追加。 Execute Lightbox Scripts From Flash at Codefidelity （情報元：Flash から Lightbox を起動する方法 &#8211; minorio のプログラミング・メモ） 具体的に追加する内容は下記の通り。 最終的にできあがったhtmlは下記の通り。 ExternalInterfaceで呼び出し 次はFlash側の用意。sample.flaというファイル（ActionScript3）を用意、ステージ上にボタン用のMovieClipインスタンスを３つ配置し、それぞれbtn0, btn1, btn2という名前を付ける。sample.flaのドキュメントクラスとしてSampleクラスを指定。Sample.asの内容は下記の通り。 これで完成！ オマケ：IE7～8でのLightboxの表示バグフィックス Lightboxを使った縦に長いページをIEで閲覧した場合、ページをスクロールしてからLightboxを起動すると、Lightboxの背景（黒い透過）部分が途中で切れてしまう。これを回避するためにとりあえずやったのがlightbox.cssの改造。具体的には#overlayのpositionをabsoluteからfixに変更（+IE6ではおかしくなってしまうので、スターハックを使ってabsoluteのまま）部分を下記のようにしました。 以上、備忘録もかねて参考までに。]]></description>
			<content:encoded><![CDATA[<p>「Flash（swf）からLightboxを呼び出す」というニーズがこれまでに何回かあり、またついさっきもあって、その都度ちょっと面倒だったりしたのでメモ。なお、ウチの会社ではswfファイルの埋め込みには通常swfobject2を使ってるので、以下は<strong>「Lightbox2.04 + swfobject2 + ActionScript（ExternalInterfaceクラス）」</strong>という組み合わせが前提となっています。</p>
<h3>Lightboxを入手</h3>
<p>まず使用するLightboxのバージョンは2.04。<strong><a href="http://www.huddletogether.com/projects/lightbox2/#download" target="_blank">Lokesh Dhakar氏によるLightbox 2の公式サイト</a></strong>で入手。</p>
<h3>ベースHTMLの作成</h3>
<p>次にベースとなるHTMLを作成。今回はとりあえず<strong><a href="http://www.tonpoo.com/docs/swfobject_generator/" target="_blank">SWFObject 2 HTML and JavaScript ジェネレーター</a></strong>を使ってサクっと作りました。ポイントとしては、「SWFの定義」のオプションを一部変更すること。<br />
<img src="http://www.tonpoo.com/blog/wp-content/uploads/2009/12/ss1.jpg" alt="ss1" title="ss1" width="350" height="287" class="alignnone size-full wp-image-656" /></p>
<p><span id="more-649"></span></p>
<p>まず、Lightboxを表示した際に、swfコンテンツが上に来てしまうのを避けるため、wmodeをtransparentに設定。また、ExternalInterfaceクラスを使うので、allowscriptaccessをalwaysに設定。できあがったHTMLは下記の通り：</p>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;ja&quot; xml:lang=&quot;ja&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
		&lt;title&gt;&lt;/title&gt;
		&lt;meta http-equiv=&quot;Content-Script-Type&quot; content=&quot;text/javascript;&quot; /&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;swfobject.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
			var flashvars = {};
			var params = {};
			params.wmode = &quot;transparent&quot;;
			params.allowscriptaccess = &quot;always&quot;;
			var attributes = {};
			swfobject.embedSWF(&quot;sample.swf&quot;, &quot;myAlternativeContent&quot;, &quot;800&quot;, &quot;600&quot;, &quot;9.0.0&quot;, false, flashvars, params, attributes);
		&lt;/script&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;div id=&quot;myAlternativeContent&quot;&gt;
			&lt;a href=&quot;http://www.adobe.com/go/getflashplayer_jp&quot;&gt;
				&lt;img src=&quot;http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif&quot; alt=&quot;Get Adobe Flash player&quot; /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<h3>Lightbox用のライブラリを組み込み</h3>
<p>上記のベースHTMLのheadセクションに、Lightbox動作のためのjsファイルとcssファイルを組み込む下記の記述を追加。</p>
<pre class="brush: xml; title: ; notranslate">&lt;script type=&quot;text/javascript&quot; src=&quot;js/prototype.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/scriptaculous.js?load=effects,builder&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/lightbox.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;css/lightbox.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;</pre>
<h3>Lightboxを起動させるJavaScriptメソッドを追加</h3>
<p>Lightboxを直接起動させるJavaScriptのメソッドがないので、下記ページを参考にそのためのメソッドを追加。</p>
<p><strong><a href="http://blog.codefidelity.com/?p=16" target="_blank">Execute Lightbox Scripts From Flash at Codefidelity</a></strong><br />
（情報元：<strong><a href="http://d.hatena.ne.jp/minorio/20080927/1222513402" target="_blank">Flash から Lightbox を起動する方法 &#8211; minorio のプログラミング・メモ</a></strong>）</p>
<p>具体的に追加する内容は下記の通り。</p>
<pre class="brush: xml; title: ; notranslate">&lt;script type=&quot;text/javascript&quot;&gt;
function LightboxDelegate(url,caption) {
	var objLink = document.createElement('a');
	objLink.setAttribute('href',url);
	objLink.setAttribute('rel','lightbox');
	objLink.setAttribute('title',caption);
	Lightbox.prototype.start(objLink);
}
&lt;/script&gt;
</pre>
<p>最終的にできあがったhtmlは下記の通り。</p>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;ja&quot; xml:lang=&quot;ja&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
		&lt;title&gt;&lt;/title&gt;
		&lt;meta http-equiv=&quot;Content-Script-Type&quot; content=&quot;text/javascript;&quot; /&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;swfobject.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/prototype.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/scriptaculous.js?load=effects,builder&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/lightbox.js&quot;&gt;&lt;/script&gt;
		&lt;link rel=&quot;stylesheet&quot; href=&quot;css/lightbox.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
			//swfobject関係
			var flashvars = {};
			var params = {};
			params.wmode = &quot;transparent&quot;;
			params.allowscriptaccess = &quot;always&quot;;
			var attributes = {};
			swfobject.embedSWF(&quot;sample.swf&quot;, &quot;myAlternativeContent&quot;, &quot;600&quot;, &quot;400&quot;, &quot;9.0.0&quot;, false, flashvars, params, attributes);
			//LightboxDelegate関係
			function LightboxDelegate(url,caption) {
				var objLink = document.createElement('a');
				objLink.setAttribute('href',url);
				objLink.setAttribute('rel','lightbox');
				objLink.setAttribute('title',caption);
				Lightbox.prototype.start(objLink);
			}
		&lt;/script&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;div id=&quot;myAlternativeContent&quot;&gt;
			&lt;a href=&quot;http://www.adobe.com/go/getflashplayer_jp&quot;&gt;
				&lt;img src=&quot;http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif&quot; alt=&quot;Get Adobe Flash player&quot; /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<h3>ExternalInterfaceで呼び出し</h3>
<p>次はFlash側の用意。sample.flaというファイル（ActionScript3）を用意、ステージ上にボタン用のMovieClipインスタンスを３つ配置し、それぞれbtn0, btn1, btn2という名前を付ける。sample.flaのドキュメントクラスとしてSampleクラスを指定。Sample.asの内容は下記の通り。</p>
<pre class="brush: as3; title: ; notranslate">package {
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.external.ExternalInterface;

	public class Sample extends MovieClip{
		public function Sample() {
			//Lightbox用の設定
			lightboxArray = new Array();
			lightboxArray[0] = {
				src:&quot;images/photo0.jpg&quot;,
				caption:&quot;写真その0&quot;
			};
			lightboxArray[1] = {
				src:&quot;images/photo1.jpg&quot;,
				caption:&quot;写真その1&quot;
			};
			lightboxArray[2] = {
				src:&quot;images/photo2.jpg&quot;,
				caption:&quot;写真その2&quot;
			};
			//ボタンの設定
			for (var i:uint = 0; i &lt; 3; i++) {
				var btn:MovieClip = this[&quot;btn&quot; + i];
				btn.id = i;
				btn.buttonMode = true;
				btn.addEventListener(MouseEvent.CLICK, onBtnClick, false, 0, true);
			}
		}

		public var lightboxArray:Array;
		public var btn0:MovieClip;
		public var btn1:MovieClip;
		public var btn2:MovieClip;

		//ボタン用メソッド
		public function onBtnClick(e:MouseEvent):void {
			var btn:MovieClip = e.target as MovieClip;
			var id:uint = btn.id;
			var src:String = lightboxArray[id].src;
			var caption:String = lightboxArray[id].caption;
			//LightboxDelegateメソッドを呼び出し
			ExternalInterface.call(&quot;LightboxDelegate&quot;,src,caption );
		}
	}
}</pre>
<p>これで完成！</p>
<h3>オマケ：IE7～8でのLightboxの表示バグフィックス</h3>
<p>Lightboxを使った縦に長いページをIEで閲覧した場合、ページをスクロールしてからLightboxを起動すると、Lightboxの背景（黒い透過）部分が途中で切れてしまう。これを回避するためにとりあえずやったのが<strong>lightbox.css</strong>の改造。具体的には#overlayのpositionをabsoluteからfixに変更（+IE6ではおかしくなってしまうので、スターハックを使ってabsoluteのまま）部分を下記のようにしました。</p>
<pre class="brush: css; title: ; notranslate">#overlay {
	position: fixed;
	top: 0;
	left: 0;
	z-index: 90;
	width: 100%;
	height: 500px;
	background-color: #000;
}
* html #overlay {
	position: absolute;
}</pre>
<p>以上、備忘録もかねて参考までに。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2009/12/flash-externalinterface-lightbox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2009/12/flash-externalinterface-lightbox/" />
	</item>
		<item>
		<title>ECMAScript 第5版承認－ActionScript次期バージョンはどうなるか？</title>
		<link>http://www.tonpoo.com/blog/2009/12/ecmascript-5-actionscript/</link>
		<comments>http://www.tonpoo.com/blog/2009/12/ecmascript-5-actionscript/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 10:40:58 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Topics]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=646</guid>
		<description><![CDATA[前にECMAScript HarmonyとActionScriptという記事を書きましたが、そのECMAScriptの最新版、ECMA-262第5版の仕様策定が完了したそうです。 ・ECMAScript 第5版 承認 &#8211; スラッシュドット・ジャパン ・InfoQ: ECMAScript 5リリース 上記ページを読んでも正直よくわかんないんですが、前者の記事では Microsoft/Yahooが主導するマイナーチェンジとバグフィックスが主のECMAScript 3.1と、 Adobe/Mozilla/Opera/Googleが主導する野心的な機能拡張である ECMAScript 4の間で対立があったが、 ECMAScript Harmonyと呼ばれる統合計画によって ES3.1をベースに ES4のサブセットを取り込む形で両者が合意した経緯がある。 ・・・と書かれている一方、後者の記事では ECMAScript 4を合理化しようという初期の試みは大失敗に終わった。結局、Adobe社のActionScriptだけが提案された変更点に対応しただけだった。 ・・・と書かれています。これはつまり、 ●ECMAScript本体の方は3.1をベースにES4の一部機能（仕様）を取り込むにとどまった。 ●ES4に対応したのはActionScriptだけだった。 ・・・というようなことなんでしょうか？ とりあえず、ActionScript次期バージョンへの影響が心配されます。AS3にやっと慣れてきた手前、この学習資産が無駄にならなきゃいいんだけど・・・。]]></description>
			<content:encoded><![CDATA[<p>前に<strong><a href="http://www.tonpoo.com/blog/2009/07/ecmascript-harmony-actionscript/">ECMAScript HarmonyとActionScript</a></strong>という記事を書きましたが、そのECMAScriptの最新版、<strong>ECMA-262第5版</strong>の仕様策定が完了したそうです。</p>
<p><strong>・<a href="http://slashdot.jp/developers/article.pl?sid=09/12/19/0113202" target="_blank">ECMAScript 第5版 承認 &#8211; スラッシュドット・ジャパン</a></strong><br />
<strong>・<a href="http://www.infoq.com/jp/news/2009/12/ecmascript5" target="_blank">InfoQ: ECMAScript 5リリース</a></strong></p>
<p>上記ページを読んでも正直よくわかんないんですが、前者の記事では</p>
<blockquote><p>Microsoft/Yahooが主導するマイナーチェンジとバグフィックスが主のECMAScript 3.1と、 Adobe/Mozilla/Opera/Googleが主導する野心的な機能拡張である ECMAScript 4の間で対立があったが、 ECMAScript Harmonyと呼ばれる統合計画によって <strong>ES3.1をベースに ES4のサブセットを取り込む形で両者が合意した</strong>経緯がある。</p></blockquote>
<p>・・・と書かれている一方、後者の記事では</p>
<blockquote><p>ECMAScript 4を合理化しようという初期の試みは大失敗に終わった。結局、<strong>Adobe社のActionScriptだけが提案された変更点に対応した</strong>だけだった。</p></blockquote>
<p>・・・と書かれています。これはつまり、<br />
●ECMAScript本体の方は3.1をベースにES4の一部機能（仕様）を取り込むにとどまった。<br />
●ES4に対応したのはActionScriptだけだった。<br />
・・・というようなことなんでしょうか？</p>
<p>とりあえず、ActionScript次期バージョンへの影響が心配されます。AS3にやっと慣れてきた手前、この学習資産が無駄にならなきゃいいんだけど・・・。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2009/12/ecmascript-5-actionscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2009/12/ecmascript-5-actionscript/" />
	</item>
		<item>
		<title>ECMAScript HarmonyとActionScript</title>
		<link>http://www.tonpoo.com/blog/2009/07/ecmascript-harmony-actionscript/</link>
		<comments>http://www.tonpoo.com/blog/2009/07/ecmascript-harmony-actionscript/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 01:02:38 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[ActionScript3]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/2009/07/ecmascript-harmony-actionscript/</guid>
		<description><![CDATA[先日、とある機会に友人と話をしていたときのこと。（webページの記述言語が）html4.01からxhtml1.0になり、かつては書籍などにも↓ HTMLは1999年12月公表の4.01で終了しており、マークアップ言語の開発はXHTMLに引き継がれている ・・・とまで書かれていたにもかかわらず、当のxhtmlの策定が打ち切られ、webページの記述言語は再びhtmlに戻ることになるらしい。「今後はこっちが主流になるよ、って言うんで勉強しても、数年たったら結局あっちに戻る」とかって言うのは嫌ですねえ。なんていう話をしたら、「そうですよねえ。ActionScriptもそんな感じらしいですよ」と言われてビックリ！ で、その時は酒が入ってたので、その後調べるのを忘れてしまっていたんだけど、さっきたまたま関連する記事を発見。 BeInteractive! [ECMAScript Harmony と ActionScript] 今新たに策定されようしている ECMAScript Harmony は、ECMAScript 3.1 がベースで、今まで策定されてきた ECMAScript 4 とは異なる部分が多々あります。そのため、ECMAScript 4 準拠を目指していた ActionScript 3.0 は、当然のことながら ECMAScript Harmony と異なる部分が多々あります。そして、現時点で、ECMAScript Harmony には、パッケージや名前空間といった仕様は入れず、今後も議論の対象としない、ということが決定しているので、ActionScript 3.0 は機能を削らない限り、ECMAScript Harmony 非互換非準拠になることが既に決定している訳です。 ・・・ってコレ一年前の記事じゃないですか！えええええ。し、知らなかった・・・。むー、もしかして次期バージョン（ActionScript4？）では、ECMAScript3準拠のActionScript1ないし2の書き方に戻るようになったりするんでしょうか。うー、憂鬱・・・。]]></description>
			<content:encoded><![CDATA[<p>先日、とある機会に友人と話をしていたときのこと。（webページの記述言語が）html4.01からxhtml1.0になり、かつては書籍などにも↓</p>
<blockquote><p>HTMLは1999年12月公表の4.01で終了しており、マークアップ言語の開発はXHTMLに引き継がれている</p></blockquote>
<p>・・・とまで書かれていたにもかかわらず、当のxhtmlの策定が打ち切られ、webページの記述言語は再びhtmlに戻ることになるらしい。「今後はこっちが主流になるよ、って言うんで勉強しても、数年たったら結局あっちに戻る」とかって言うのは嫌ですねえ。なんていう話をしたら、「そうですよねえ。ActionScriptもそんな感じらしいですよ」と言われてビックリ！</p>
<p>で、その時は酒が入ってたので、その後調べるのを忘れてしまっていたんだけど、さっきたまたま関連する記事を発見。</p>
<p><a href="http://www.be-interactive.org/?itemid=402">BeInteractive! [ECMAScript Harmony と ActionScript]</a></p>
<blockquote><p>今新たに策定されようしている ECMAScript Harmony は、ECMAScript 3.1 がベースで、今まで策定されてきた ECMAScript 4 とは異なる部分が多々あります。そのため、ECMAScript 4 準拠を目指していた ActionScript 3.0 は、当然のことながら ECMAScript Harmony と異なる部分が多々あります。そして、<span style="font-weight: bold;">現時点で、ECMAScript Harmony には、パッケージや名前空間といった仕様は入れず、今後も議論の対象としない、ということが決定しているので、ActionScript 3.0 は機能を削らない限り、ECMAScript Harmony 非互換非準拠になることが既に決定している</span>訳です。</p></blockquote>
<p>・・・ってコレ一年前の記事じゃないですか！えええええ。し、知らなかった・・・。むー、もしかして次期バージョン（ActionScript4？）では、ECMAScript3準拠のActionScript1ないし2の書き方に戻るようになったりするんでしょうか。うー、憂鬱・・・。</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=62e7a42d-c8d0-8002-9a80-75f58313c651" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2009/07/ecmascript-harmony-actionscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2009/07/ecmascript-harmony-actionscript/" />
	</item>
		<item>
		<title>FlashDevelopのコードアシスト機能</title>
		<link>http://www.tonpoo.com/blog/2009/06/flashdevelop/</link>
		<comments>http://www.tonpoo.com/blog/2009/06/flashdevelop/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 11:45:09 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=436</guid>
		<description><![CDATA[昨日のSpark project 勉強会 #10の中で、Adobeの西村さんがFlash Builderの特徴（？）として挙げていた項目の中に、「ASDocの参照機能」と「getter/setterを一発で設定できる」というものがあった様に記憶してるんですが、これらの機能はFlashDevelopでも存在するんですね。 Flash Develop + CS3 &#8211; Flash OOP Japan 以下、上記ページからの引用： 【FlashDevelopコードアシスト.xls】 ［Ctrl］＋［Space］ 文脈に応じたコードヒントが表示されます。&#8221;.&#8221;の後や途中まで入力したプロパティ名など、色んなところで使ってみてください。 ［Ctrl］＋［Shift］＋［Space］ メソッドの () の中で使用すると、そのメソッドの引数に関して説明が表示されます。メソッドにASDocがあればそれに応じた説明が表示されます。説明が多い場合は省略して表示されますが、その際は［F1］キーで拡大できます。なお、IMEが全角の場合は無効となるので注意してください。 ［Ctrl］＋［Alt］＋［Space］ そのプロジェクトで使えるクラスのリストが表示されます。 ［Ctrl］＋［Shift］＋［1］ 最新版 Beta6 より追加された新機能で、文脈に応じたコード生成を行います。 例えば、 ・addEventListener() の、引数内のイベントタイプ・ハンドラ関数名よりイベントハンドラ関数のコード生成 ・変数名より getter/setter 関数のコード生成 ・関数内のローカル変数をインスタンスプロパティへ変換しコード生成 マウスカーソルの位置を変えて実行してみてください。なお、公式Wikiにはキャプチャ画像つきで詳しく載っています。 http://www.flashdevelop.org/wikidocs/index.php?title=Features:Generation FlashDevelop、すばらしい！（Adobeさん、スイマセン・・・）]]></description>
			<content:encoded><![CDATA[<style type="text/css">
<!--
table,td,th{
border:1px solid #666666;
}
table{
border-collapse:collapse;
}
th{
white-space:nowrap;
}
-->
</style>
<p><a href="http://www.tonpoo.com/blog/2009/06/flash/">昨日のSpark project 勉強会 #10</a>の中で、Adobeの西村さんがFlash Builderの特徴（？）として挙げていた項目の中に、「ASDocの参照機能」と「getter/setterを一発で設定できる」というものがあった様に記憶してるんですが、これらの機能はFlashDevelopでも存在するんですね。</p>
<p><a href="http://cs3book.flashoop.jp/wiki/index.php?Flash%20Develop%20%2B%20CS3#y0a9a123">Flash Develop + CS3 &#8211; Flash OOP Japan</a><br />
以下、上記ページからの引用：</p>
<blockquote><p>
【FlashDevelopコードアシスト.xls】</p>
<table>
<tbody>
<tr>
<th>［Ctrl］<br />＋<br />［Space］</p>
<td>文脈に応じたコードヒントが表示されます。&#8221;.&#8221;の後や途中まで入力したプロパティ名など、色んなところで使ってみてください。</td>
</th>
</tr>
<tr>
<th>［Ctrl］<br />＋<br />［Shift］<br />＋<br />［Space］</p>
<td>メソッドの () の中で使用すると、そのメソッドの引数に関して説明が表示されます。<strong>メソッドにASDocがあればそれに応じた説明が表示されます。</strong>説明が多い場合は省略して表示されますが、その際は［F1］キーで拡大できます。なお、IMEが全角の場合は無効となるので注意してください。</td>
</th>
</tr>
<tr>
<th>［Ctrl］<br />＋<br />［Alt］<br />＋<br />［Space］</p>
<td>そのプロジェクトで使えるクラスのリストが表示されます。</td>
</th>
</tr>
<tr>
<th>［Ctrl］<br />＋<br />［Shift］<br />＋<br />［1］</p>
<td>最新版 Beta6 より追加された新機能で、文脈に応じたコード生成を行います。<br />
				例えば、<br />
				・addEventListener() の、引数内のイベントタイプ・ハンドラ関数名よりイベントハンドラ関数のコード生成 <br />
				・<strong>変数名より getter/setter 関数のコード生成</strong> <br />
				・関数内のローカル変数をインスタンスプロパティへ変換しコード生成 <br />
				マウスカーソルの位置を変えて実行してみてください。なお、公式Wikiにはキャプチャ画像つきで詳しく載っています。<br />
				<a href="http://www.flashdevelop.org/wikidocs/index.php?title=Features:Generation" rel="nofollow">http://www.flashdevelop.org/wikidocs/index.php?title=Features:Generation</a></td>
</th>
</tr>
</tbody>
</table>
</blockquote>
<p>FlashDevelop、すばらしい！（Adobeさん、スイマセン・・・）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2009/06/flashdevelop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2009/06/flashdevelop/" />
	</item>
		<item>
		<title>MovieClip.scrollRectプロパティ</title>
		<link>http://www.tonpoo.com/blog/2009/05/movieclipscrollrect/</link>
		<comments>http://www.tonpoo.com/blog/2009/05/movieclipscrollrect/#comments</comments>
		<pubDate>Fri, 29 May 2009 09:41:00 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/2009/05/movieclipscrollrect%e3%83%97%e3%83%ad%e3%83%91%e3%83%86%e3%82%a3/</guid>
		<description><![CDATA[「超訳：Tweenerドキュメント＆言語リファレンス」の翻訳作業を進める中で、MovieClip.scrollRectプロパティというものの存在を知った。 ここまでだとマスクと何ら変わりない。scrollRectの「scrollって何？」って思ったら、こういうことらしい↓ おお、スクロールする！うん、割とこれは便利かもしれないですね。今後、活用しよう。 ちなみにTweenerの特殊プロパティを使ってscrollRectをトゥイーンさせた例は下記の通り。]]></description>
			<content:encoded><![CDATA[<p>「超訳：Tweenerドキュメント＆言語リファレンス」の翻訳作業を進める中で、MovieClip.scrollRectプロパティというものの存在を知った。</p>
<pre class="brush: as3; title: ; notranslate">
import flash.geom.Rectangle;

//ステージ上にムービークリップ（灰色・100×300）を生成
var mc:MovieClip = this.createEmptyMovieClip(“movie_mc”,this.getNextHighestDepth());
mc.beginFill(0×999999);
mc.moveTo(0,0);
mc.lineTo(100,0);
mc.lineTo(100,300);
mc.lineTo(0,300);
mc.endFill();

//生成したムービークリップの中にテキストフィールドを生成し、ダミーテキストを表示
var txt:TextField = mc.createTextField(“movie_txt”,mc.getNextHighestDepth(),0,0,100,300);
txt.wordWrap = true;
txt.multiline = true;
txt.text = “Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.”;

//scrollRectとして設定するためのRectangleオブジェクトを生成
var rect:Rectangle = new Rectangle(0,0,mc._width,100);

//生成したムービークリップのscrollRectとしてrectを設定
mc.scrollRect = rect;
//scrollRectプロパティを設定したムービークリップのcachaAsBitmapプロパティをtrueに設定
mc.cacheAsBitmap = true;</pre>
<p>ここまでだとマスクと何ら変わりない。scrollRectの「scrollって何？」って思ったら、こういうことらしい↓</p>
<pre class="brush: as3; title: ; notranslate">
this.onMouseDown = function():Void{
    this.onEnterFrame = function():Void{
        //scrollRectに設定したRectangleオブジェクトのyプロパティを変更
        rect.y ++;
        //scrollRectオブジェクトを再設定
        mc.scrollRect = rect;
    };
};

this.onMouseUp = function():Void{
    delete this.onEnterFrame;
};</pre>
<p>おお、スクロールする！うん、割とこれは便利かもしれないですね。今後、活用しよう。</p>
<p>ちなみにTweenerの特殊プロパティを使ってscrollRectをトゥイーンさせた例は下記の通り。</p>
<pre class="brush: as3; title: ; notranslate">
import flash.geom.Rectangle;
import caurina.transitions.Tweener;
import caurina.transitions.properties.DisplayShortcuts;
DisplayShortcuts.init();

//ステージ上にムービークリップ（灰色・100×300）を生成
var mc:MovieClip = this.createEmptyMovieClip(“movie_mc”,this.getNextHighestDepth());
mc.beginFill(0×999999);
mc.moveTo(0,0);
mc.lineTo(100,0);
mc.lineTo(100,300);
mc.lineTo(0,300);
mc.endFill();

//生成したムービークリップの中にテキストフィールドを生成し、ダミーテキストを表示
var txt:TextField = mc.createTextField(“movie_txt”,mc.getNextHighestDepth(),0,0,100,300);
txt.wordWrap = true;
txt.multiline = true;
txt.text = “Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.”;

//scrollRectとして設定するためのRectangleオブジェクトを生成
var rect:Rectangle = new Rectangle(0,0,mc._width,100);
mc.scrollRect =rect;
//scrollRectプロパティを設定したムービークリップのcachaAsBitmapプロパティをtrueに設定
mc.cacheAsBitmap = true;

//Tweenerの特殊プロパティを使ってscrollRectを操作
this.onMouseDown = function():Void{
    Tweener.addTween(mc,{
        _scrollRect:rect,
        _scrollRect_y:(mc._height),
        time:2
    });
};</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2009/05/movieclipscrollrect/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2009/05/movieclipscrollrect/" />
	</item>
		<item>
		<title>配列の（浅い）コピー</title>
		<link>http://www.tonpoo.com/blog/2009/05/array-copy/</link>
		<comments>http://www.tonpoo.com/blog/2009/05/array-copy/#comments</comments>
		<pubDate>Wed, 20 May 2009 08:48:00 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/2009/05/%e9%85%8d%e5%88%97%e3%81%ae%ef%bc%88%e6%b5%85%e3%81%84%ef%bc%89%e3%82%b3%e3%83%94%e3%83%bc/</guid>
		<description><![CDATA[ActionScriptで配列をコピーする方法について。 Flash CS4 Professional ActionScript 2.0 下記のように単に元配列を参照しただけでは、copy_arrayへの変更が元配列（base_array）にも及んでしまう。 Array.slice()メソッドを引数なしで使うことで、配列の（浅い）コピーを作ることができる。]]></description>
			<content:encoded><![CDATA[<div>ActionScriptで配列をコピーする方法について。</p>
<p><a href="http://help.adobe.com/ja_JP/AS2LCR/Flash_10.0/help.html?content=00000754.html">Flash CS4 Professional ActionScript 2.0</a></p>
<p>下記のように単に元配列を参照しただけでは、copy_arrayへの変更が元配列（base_array）にも及んでしまう。</p>
<pre class="brush: as3; title: ; notranslate">
var base_array:Array = new Array(“a”,“b”,“c”);
var copy_array:Array = base_array;
copy_array.shift();
trace(base_array); //”b”,”c”←base_arrayの方も変更されている
trace(copy_array); //”b”,”c”
</pre>
<p>Array.slice()メソッドを引数なしで使うことで、配列の（浅い）コピーを作ることができる。</p>
<pre class="brush: as3; title: ; notranslate">
var base_array:Array = new Array(“a”,“b”,“c”);
var copy_array:Array = base_array.slice();
copy_array.shift();
trace(base_array); //”a”,”b”,”c”←base_arrayの方は元のまま
trace(copy_array); //”b”,”c”
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2009/05/array-copy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2009/05/array-copy/" />
	</item>
		<item>
		<title>Tweener 1.32.74</title>
		<link>http://www.tonpoo.com/blog/2009/05/tweener-13274/</link>
		<comments>http://www.tonpoo.com/blog/2009/05/tweener-13274/#comments</comments>
		<pubDate>Wed, 20 May 2009 01:28:00 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Tweener]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/2009/05/tweener-13274/</guid>
		<description><![CDATA[Tweenerがバージョンアップ（1.31.74→1.32.74）との報告が公式MLでありました。 [Tweener] Tweener 1.32.74 変更点についての記述は下記の通り（一部抜粋）。 変更点は至ってわずか（ほんのコード2行分）。でも重要な変更です。 ＊Tweenの上書きを「オプション」扱いとし、デフォルトでは無効とした。＊addTween()に「overwrite:」パラメーターを新規に追加。この値が「true」だったら、新しいtweenとオーバーラップする同一オブジェクトの同一プロパティに設定されているすべてのtweenを上書きする。 Tweenの上書きをたくさん使ってるような場合には、この変更によって互換性が失われることがあるかもしれません。ただ、特に大量の数のtweenを生成する場合のパフォーマンスが大幅に向上されるので、こうすることが重要だと考えました。 公式サイトの方にはまだ反映されてないし、上記メールの文中にあるURLはSVN用のものなので、Subversion使ってる人向けってことですかね。]]></description>
			<content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">Tweenerがバージョンアップ（1.31.74→1.32.74）との報告が公式MLでありました。</p>
<p><a href="http://lists.caurinauebi.com/pipermail/tweener-caurinauebi.com/2009-May/001342.html">[Tweener] Tweener 1.32.74</a></p>
<p>変更点についての記述は下記の通り（一部抜粋）。</p>
<blockquote><p>変更点は至ってわずか（ほんのコード2行分）。でも重要な変更です。</p>
<p>＊Tweenの上書きを「オプション」扱いとし、デフォルトでは無効とした。<br />＊addTween()に「overwrite:」パラメーターを新規に追加。この値が「true」だったら、新しいtweenとオーバーラップする同一オブジェクトの同一プロパティに設定されているすべてのtweenを上書きする。</p>
<p>Tweenの上書きをたくさん使ってるような場合には、この変更によって互換性が失われることがあるかもしれません。ただ、特に大量の数のtweenを生成する場合のパフォーマンスが大幅に向上されるので、こうすることが重要だと考えました。</p></blockquote>
<p>公式サイトの方にはまだ反映されてないし、上記メールの文中にあるURLはSVN用のものなので、Subversion使ってる人向けってことですかね。</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2009/05/tweener-13274/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2009/05/tweener-13274/" />
	</item>
	</channel>
</rss>

