2011
11/14

AdobeはついにMacromedia Flashを殺してしまったのか?(Jethro Villegas氏)

先日の携帯端末向けFlashPlayer開発終了の発表を受けて、Adobeの関係者や著名なFlash開発者の方々がtwitterやブログなどで意見を表明しています。その中で、かつてAdobeでAndroid向けFlashPlayerの開発に携わり、現在はFirefoxの開発を行なっているJethro Villegas氏の下記の記事が個人的に非常に印象に印象に残りました。

Did Adobe finally kill Macromedia Flash? | junglecode.net

かつて共に働いたメンバーに対する仕打ちを憂いた側面もあることから、タイトルもセンセーショナルで内容も些か感傷的・感情的な印象もあります。ただ、SWFにJPEGと同じようなユビキティを望んでいたことや、SWFのオープンソース化への希望など、個人的に共感できる部分も多くありました。自身の理解を深めることに加え、同じように感じるかたもいらっしゃるかなと思ったので、全文翻訳してみました。

(続きを読む…)


Filed under: Flash,html5,Topics,TranslationComments (0)— tonpoo @ 10:18 PM

2011
11/10

Adobeの携帯端末向けFlashPlayer開発終了の発表を読んで考えたこと

昨日のリーク記事の内容ほぼそのままに、Adobeから正式に携帯端末向けFlashPlayer開発終了の声明が出ました。

Flash to Focus on PC Browsing and Mobile Apps; Adobe to More Aggressively Contribute to HTML5 (Adobe Featured Blogs)

本文内容はほぼ昨日の記事通りで、和文でもっと上手に要約・解説する記事なども出てきたので、内容について翻訳するのはやめます。その代わり、この発表を読んだ所感を書いてみようと思ったら、長文になってしまいました・・・(汗)。

追記
一部構成変更や修正をしました(2011.11.11)
(続きを読む…)


Filed under: Flash,html5,JavaScript,Topics,TranslationComments (0)— tonpoo @ 12:42 PM

2011
11/9

アドビ、携帯端末向けFlashの開発を終了??

つ、ついに、ついに衝撃的なニュースが飛び込んできてしまいました。アドビが携帯端末向けのFlashPlayerの開発を終了するというものです。

Exclusive: Adobe ceases development on mobile browser Flash, refocuses efforts on HTML5 | ZDNet

以下、記事内容を訳してみました。関係者情報ということで、まだアドビ社の正式なアナウンスメントというわけではないですが、明確に「終了する」と言われてしまってます・・・。

アドビ、携帯端末向けFlashの開発を終了、HTML5への注力に焦点

アドビ社に近い筋がZDNetに対して、近日案内される予定の発表内容について明らかにした。

携帯端末に関するFlashについて、我々は今後はFlash開発者に対して、大手のapp store向けにAdobe AIRを使ったネイティブアプリの開発を可能とすることに注力します。我々はもう、今後新たに登場する携帯端末ブラウザやOS、携帯端末の設定に対応するためのFlashPlayerの改修作業を行うことはありません。今後も、Flashのソースコードのライセンス許諾を持つ団体などが独自に開発や実装を行う可能性はあります。AndroidやPlayBookの設定に関しての致命的なバグフィックスやセキュリティアップデートについては、今後もサポートする予定です。

また、アドビのパートナーに送付されたe-mailでは、以下のように要約されていた。

  • アドビは携帯端末のブラウザ向けのFlashPlayerの開発を終了する。

アドビが現在注力しているのは下記の項目だという:

  • 携帯端末向けアプリケーション
  • デスクトップ端末での豊かな表現のコンテンツ(ブラウザ内およびブラウザ外での展開)
  • HTML5全般に対する投資の増加

発表内容の全貌については、明日アドビ社のウェブサイトに掲載される予定である。


Filed under: Flash,Topics,TranslationComments (0)— tonpoo @ 5:15 PM

2010
7/5

WPtouchのライセンスについて

wptouch_ss

先日ついにiPhone4を購入。このブログもとりあえずiPhone対応してみようと思い立って探してみたところ、たどり着いたのがWordPressのWPtouchというプラグイン。

WPtouch 2.0 Pro – Mobile iPhone/Android Themes and Development Framework For WordPress » BraveNewCode Inc.

この記事の執筆時現在、有料版のWPtouch 2.0 Proと、無料版のWPtouch 1.9というのがあります。今回導入したのは無料版の方。どこからダウンロードするのかわかりづらかったんですが、上記サイトのページ中程にあるメニューの中から「Requirements」をクリックすると、右側に「Get WPtouch 1.9(Free version)」という箇所があり、ここからダウンロードできるようです。

ちなみにWordPressのプラグインの新規追加画面で「WPtouch」を検索すると、「WPtouch iPhone Theme」という名前で出てきます。自分はこちらで見つけて、そのままインストールしました。

導入すると、iPhoneからアクセスしたときに、上記のスクリーンショットのような画面になります。素晴らしい!試してないけど、おそらくiPadからアクセスしてもこうなるのかな。

で、気になったのがライセンス形態。案件での商用利用が可能かどうかを調べてみました。たどり着いたのは先ほどと同じメニューの中から「Overview」をクリックして出てくる文書の中の「We <3 GPL」という箇所。「<3」ってのは「kiss」ってことだと思うんですが、例によって簡単に訳してみました。

我々はGPLが大好きです

我々はオープンソースを、ソフトウェアの自由を愛していますし、みなさんがそうであることもわかっています。

WPtouch ProがWordPressのGPLライセンスに適合しているのもそのためです。これはつまり、ひとたび購入してしまえば、(※GPLライセンスに適合する限り?)自由に使うことができるということです。我々からのサポートや自動アップグレードは、みなさんが購入するライセンスに紐づいて行われます。ただ、オリジナルのソフトウェアをどのように使うかは、みなさんの自由です。

文中の※および強調部分は自分がつけました。これを見る限り、WPtouch ProのライセンスはWordPressのラインセンスに準拠する=GPLってことで、WordPressを(GPLに沿って)使ってる場合には問題なく使える、って判断してもよさそうですね。

ただ気になるのは上記の文章があくまで有料版のWPtouch Proについての記述であるという点。無料版の場合はどうなるんでしょうか・・・。

追記:

WPtouch 1.9.14のライセンスについて、そういえばソースコードに載ってるんじゃないかと思って調べたら、wptouch.phpに記載がありました。当該箇所を転載:

# The code in this plugin is free software; you can redistribute the code aspects of
# the plugin and/or modify the code under the terms of the GNU Lesser General
# Public License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# See the GNU lesser General Public License for more details.

こちらもやはりGPL(GNU Lesser General Public License バージョン2.1)、ってことのようですね。


Filed under: TranslationComments (0)— tonpoo @ 12:37 PM

2010
6/24

Flash Communication Server:プロキシサーバに関する問題

HTTPトンネリングの件に関連して、FCS関連でプロキシサーバを経由した場合の接続方法についての下記の記事も簡単に和訳しました。

Macromedia – 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: Netscape-Enterprise/6.0
Date: Sat, 24 May 2003 01:51:17 GMT
Content-type: image/gif
Etag: "782311ca-126-0-f1ae"
Last-modified: Mon, 06 May 2002 21:10:38 GMT
Content-length: 61870
Accept-ranges: bytes

Macromedia Flash Communication Serverが返すデータはテキストデータではないが、HTTPヘッダにはContent-typeの記述が含まれない。そして、Content-typeが記述されていない場合にはtext/htmlと判断されてしまう。このため、RTMPTのトラフィックであっても、全てのプロキシサーバを通過できるという保証は無いのである。プロキシサーバとアプリケーションレイヤのファイヤーウォールというものが、システムアドミニストレータの設定した幅広いバリエーションのルールに従ってコンテンツのフィルタリングを行うように作られているということを考慮すれば、これはおかしなことではない。ITセキュリティの部署が正規のHTML文書といくつかの画像フォーマット(image/GIFなど)のみを許可すると決定したならば、それを実現するための精巧なツールが開発されるということだ。もしRTMPT接続さえも通さないプロキシサーバの場合は、組織のファイヤーウォール担当の管理者に連絡を取り、プロキシサーバの例外設定が可能かどうか確認するといい。

fig08

図8.プロキシサーバとファイヤーウォール

注:各端末(Workstation)はインターネットに直接接続することはできず、必ずプロキシサーバを通してリソース要求を行うことになる。プロキシサーバはインターネットからリソースを取得し、それを各端末に転送する。各端末がファイヤーウォールを越えて外部のシステムにアクセスすることは決してない。

一度に複数のポートを利用する

Macromediaは先日、Flash Communication Server バージョン1.5のリリースとともに、Flash Communication Serverコンポーネントのアップデート版をリリースした。このアップデートの目玉のひとつが、Simple Connectコンポーネント内部に新規に追加されたコードである。このアップデートによって、デフォルトのRTMPポート(1935)経由で到達できないサーバへの接続時間を短縮するための機能が追加された。Simple Connectコンポーネントのアプリケーションディレクトリのパラメーターに「rtmp」が指定されていて、かつポート番号が指定されていない場合、Simple Connectコンポーネントは次のように動作する:

  1. NetConnectionオブジェクトを生成し、指定されたアドレスに対して、1935番ポートを使って通常の接続を試みる。
  2. 2つめのNetConnectionオブジェクトを生成し、250ミリ秒待機した後、サーバに対して80番ポートを使ったRTMPT接続を試みる。
  3. 先に接続が成功した方を受け入れ、もう片方のNetConnectionオブジェクトは接続を閉じてから破棄する。

厳密に言えばこのようなやり方は必要ない。FlashPlayerはデフォルトでまず1935番ポートを使ったRTMP接続を試み、その後443番ポート、80番ポートを試みる。その後、80番ポートを使ったRTMPT接続を試みるからだ。ただしこれらの試みは時間がかかる。はじめのRTMP接続が失敗した場合、250ミリ秒後に80番ポートを使ったRMTPT接続を試みることで、接続プロセスにかかる時間は劇的に短縮されるのだ。このコンポーネントの作りを理解するため、FCSimpleConnectClassのactualConnect()メソッドを見てみよう。すべての人がSimple Connectコンポーネントを使うわけではないので、以下に示すコードは本来のコードを少々編集したものになっている。ただし行っている処理はほぼ同じだ。筆者はこのコードをメインのタイムラインに記述したが、よりオブジェクト指向的なアプローチで書き換えることも可能である。

//接続に成功するとonConnectファンクションが実行される
function onConnect(nc) {
	_global.main_nc = nc;// グローバル変数に接続成功済みのNetConnectionオブジェクトを記録
	// 確認のためURIをtraceし、使用中のプロトコルを確認
	trace("onConnect> "+nc.uri);
	// 接続に成功したNetConnectionオブジェクトのためのonStatusハンドラを生成
	main_nc.onStatus = function(info) {
		//ここに各種のイベントをハンドルするためのコードを記述
		//以下のコードはinfoオブジェクトの内容を出力するもの
		trace("----main_nc.onStatus----");
		for (var p in info) {
			trace(p+": "+info[p]);
		}
	};
	//あとは他のコンポーネントに接続したりプログラムを初期化するなど・・・
}

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

//RTMP接続用のNetConnectionオブジェクトを生成
rtmp_nc = new NetConnection();
//こちらの接続が先に成功した場合に、rtmpt_ncオブジェクトを破棄するための
//onStatusハンドラを生成
rtmp_nc.onStatus = function(info) {
	this.pending = false;
	if (info.code == "NetConnection.Connect.Success") {
		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 == "NetConnection.Connect.Success") {
		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("rtmp://host.domain.com/myApp/myInstance",userName,password);

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

//このファンクションが実行されたらインターバルを破棄してRTMPT接続を試みる
function connectRTMPT() {
	clearInterval(connectionID);
	rtmpt_nc.connect("rtmpt://host.domain.com/myApp/myInstance",userName,password);
}
//80番ポートが使えず、8080番ポートを使う場合などのconnectRTMPTメソッドの記述例は以下のとおり
function connectRTMPT() {
	clearInterval(connectionID);
	rtmpt_nc.connect("rtmpt://myHost.myDomain.com:8080/myApp/myInstance",userName,password);
}

Filed under: ActionScript2,ActionScript3,TranslationComments (0)— tonpoo @ 1:22 PM

2010
6/15

Flash Communication Server:HTTPトンネリングプロトコルについて

諸事情から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回の接続を試みる。

nc.connect("rtmp://mysite.com/myapp");

以下のようにしてポート番号を指定した場合には、指定されたポート番号を使った1回の接続のみを試みる。

nc.connect("rtmp://mysite.com:PORT/myapp");

現在のFlashPlayerでは、以下の3つのうちどれか一つのプロトコルを使った接続がサポートされるようになった。

  • RTMP(デフォルトポート:1935)
  • RTMPT(HTTPを経由したトンネリング。デフォルトポート:80)
  • RTMPS(HTTPSを経由したトンネリング。デフォルトポート:443)

コードの書式は以下のようになる。

  • nc.connect("rtmpt://flashteam.macromedia.com/myapp");
  • nc.connect("rtmps://flashteam.macromedia.com/myapp");

上記の場合、各プロトコルのデフォルトポートに対しての計1回の接続のみを試みる。

ポート番号を指定する場合の書式は以下の通り。

  • nc.connect("rtmp://flashteam.macromedia.com:PORT/myapp");
  • nc.connect("rtmpt://flashteam.macromedia.com:PORT/myapp");
  • nc.connect("rtmps://flashteam.macromedia.com:PORT/myapp");

上記の場合は、指定されたポートに対しての計1回の接続を試みる。

また、以下のような特殊な接続方法もある。

  • nc.connect("rtmp://flashteam.macromedia.com/myapp");

この場合、RTMP:1935を試みたあとにRTMPT:80(昔のHTTP:80に代わるもの)を試みる。

新しいFlashPlayerでは、これは「万が一の場合の代替手法」として機能している。もしデフォルトの方法が失敗した場合、FlashPlayerは80番ポートでの接続を試みる。おそらくこれがHTTPトンネリングのための最も一般的な手法であろう。

メモ:HTTPトンネリングはリアルタイムな音声・映像配信のパフォーマンスに影響をおよぼすことがある。


・・・結論としては、以下の方法がベスト、っていう認識でいいのかな。

nc.connect("rtmp://flashteam.macromedia.com/myapp");

Filed under: ActionScript2,ActionScript3,TranslationComments (0)— tonpoo @ 2:39 PM

2010
5/7

Jobs対Flashの戦いにOperaが参戦とな

TechRadarに、Apple(ジョブス)対Adobe(Flash)の論争にOperaが参戦したという記事が掲載されました。Operaのプロダクトアナリストの人にインタビューした内容ということですが、簡単に和訳してみました。いつも通り(?)、適当訳なので意訳・誤訳が満載です。正確な内容は元記事を当たってみてください。

Opera joins in Jobs v Flash argument | News | TechRadar UK

以下、和訳文です。「卵が焼ける」とはずいぶんですね・・・。

(続きを読む…)


Filed under: Flash,Topics,TranslationComments (0)— tonpoo @ 1:14 PM

2010
4/6

Flashbugを導入したらFlashPlayerが落ちるようになった件とその解決策

今日、Flashbugの設定をちょっと変更した瞬間から、Flashコンテンツのあるページを表示させるとやたらとブラウザ(Firefox)が落ちるようになってしまった。これがFlashbugを無効化したり削除したりしても直らない上、Google Chromeでも発生したことから軽くパニクったんですが、結論からいうと、Flashbugの設定画面からFlashPlayerの設定を変更してしまったことが原因のようでした。

ss
ええ、仰るとおり、まさに"very easy to crash"でしたよ(涙)。上記のスクリーンショットのように、Undocumented Trace Log Settings欄のチェックを全て外したら、クラッシュせずに動くようになりました。

で、原因究明の過程でFirebugのオフィシャルページ(Flashbug – An extension for Firebug | Course Vector)の文章について簡単に翻訳してみた(してしまった)ので、備忘録をかねて参考までにアップしておきます。
(続きを読む…)


Filed under: Firefox,Flash,Software,Translation,TroublesComments (0)— tonpoo @ 1:10 PM

2010
2/12

FlashPlayer10.1(Mac版)のCore Animation対応について-Tinic Uro氏のブログ記事より

AdobeエンジニアのTinic Uro氏がブログで書いた記事が一部で話題になっています。

kaourantin.net: Core Animation

Windowsユーザーの自分にはピンと来ないものの、どうやらMacでのFlashPlayerのパフォーマンスが(かなり?)向上するという話の様子。ということで、早速自分なりに意訳してみました。間違ってるところなどあるかもしれませんので、あくまで以下文章についての正確な内容は上記Tinic氏の元記事をご覧下さい。

(続きを読む…)


Filed under: Flash,Mac,Topics,Translation,未分類Comments (0)— tonpoo @ 2:09 PM

2009
8/21

SWFAddress 2.3 APIリファレンス

Flashコンテンツにディープリンク機能を持たせることができるAPIライブラリ「SWFAddress 2.3」のリファレンスの和訳を行いました。とはいえこのリファレンス、サンプルコードなどが一切載っていないので、あまり開発の助けにはならないかもしれませんが、よろしければ参考程度にご利用下さい。

【SWFAddress 2.3 APIリファレンス】

追記:SWFAddressの公式サイトからドキュメントにリンクを貼って頂きました!


Filed under: SWFAddress,TranslationComments (0)— tonpoo @ 6:50 PM