2007年7月アーカイブ

新しく Adobe Flash Ajax Video (FAVideo) コンポーネントが Adobe Labs に公開されました。(Flash-Ajax Video Component@Labs) FAVideo は Ajax アプリケーションから Flash ビデオを利用するためのコンポーネントで、JavaScript からビデオの表示位置や大きさを指定したり再生をコントロールすることができます。Flash Player 8 以降がインストールされている環境であればビデオを表示できるようになります。

FAVideo コンポーネントはソースコードが BSD ライセンスの元で (Flash-Ajax Video Component:License) 公開されています。サンプルを含む zip ファイルが Labs よりダウンロードできます。 ( favideo_072707.zip : 2.19MB - FAVideo コンポーネント自体は 15KB 程です。念のため。)

使い方は、下の一行を追加して、

<script src="FAVideo.js" type="text/javascript"></script>

スクリプトブロック内で、下のように記述します。

videoPlayer = new FAVideo("id", "name.flv");

スキンの変更も可能です。Dreamweaver に Flash ビデオ埋め込み機能がありますが、これと同じようなものだと考えてよさそうです。

SWF と FLV のバージョン 9 ファイルフォーマットがようやく公開されました。こちらの URL からライセンス契約を行うと入手できます。 (Adobe Player Licensing

このライセンスは SWF を生成するソフトウェアの開発を支援するためのもので、SWF を実行するソフトウェアの開発には利用できません。一応念のため。

Flex 2.0.1 SDK Hotfix 3 が US のサポートページに公開されていますのでお知らせします。

まだ日本では発表されていませんが、US で一緒に発表された LCDS 2.5.1 を利用する際は Flex Builder 2.0.1 に Hotfix 3 を適用する必要があります。将来 LCDS 2.5.1 を採用するプロジェクトがあれば、ご面倒でも Hotfix 3 の件は忘れずにご対応ください。逆に、Hotfix 3 は LCDS 2.5.1 との使用が基本です。サーバ側に FDS 2.0.1 をご使用の場合はご注意ください。

そのほかの注意事項としては以下のものがあります。

  • Flex Builder 2.0 はサポートされません
  • Hotfix 3 を適用する前に Hotfix 2 を適用する必要があります
  • Hotfix で修正されている件に該当する問題が起きていない場合は適用をお勧めしません

インストール手順などの詳細は以下のテックノートをご覧ください。

すでにいくつかのニュースやサイトで紹介されていますが、先週 Flash Player のアップデーターが公開されました。今回のアップデートはいくつかのセキュリティ上の脆弱性に対応するためのものです。

既存のバージョンは基本的に今回のアップデートで対応された問題の対象になります (Flash Player 9.0.45.0 以前、8.0.34.0 以前、7.0.69.0 以前) ので、最新版の 9.0.47.0 (Linux は 9.0.48.0) にアップデートすることをお勧めします。ダウンロードは Flash Player ダウンロードセンター (Player Download Center) から行えます。

Flash Player 9 がサポートしないプラットフォーム用に Flash Player 7 の対応版 (7.0.70.0) も公開されています。ダウンロードは US のサポートページからどうぞ。(Flash Player upgrade for operating systems that do not support Flash Player 8

その他にスタンドアローンプレーヤやオーサリング環境用のアップデートも公開されています。それぞれバージョンごとに以下のアップデートが用意されています。こちらもダウンロードは US のサポートページからお願いします。(Adobe Flash Player Support Center

Flash Player 9

  • Flash CS3 用アップデート
  • デバッグプレーヤ (FlexBuilder 2 向け)
  • スタンドアローンプレーヤ

Flash Player 8

  • Flash 8 用アップデート
  • Mac 用スタンドアローンプレーヤ

Flash Player 7

  • Mac 用スタンドアローンプレーヤ

前回の続きです。なぜ "" == foo が true と評価されるのか、まず、暗黙の型変換が行われる際のルールを一つ確認します。

暗黙の型変換の基準

暗黙の型変換が行われる際の基準となる型は、変数に関連付けられた型注釈ではなく、値であるオブジェクト自体の型です。ですので変数の型に注目していても暗黙の型変換の結果は分かりません。

例えば、今回問題になっている例 foo:Object = 0 では、値である 0 の型が暗黙の型変換の基準になります。foo の型ではありません。そのため if 文の条件は文字列とと数値の比較として扱われます。

var foo:Object = 0;
if ("" == foo) { // 実際には "" == 0 が評価される
  trace("foo is null String");
}
 

そうすると、今回のケースでは "" と 0 が等価であるかどうかが評価されていることになります。

今回は AS3 の型システムの特徴についての話です。strict モードの人には関係ない話が続きましたが、ここからはコンパイラの環境設定に依存しない話題です(たぶん)。

まず、下のコードについて考えてみます。 オブジェクト型の変数 foo に数値の 0 を代入して空文字列と比較しています。

var foo:Object = 0;
if ("" == foo) {
  trace("foo は空文字列です");
}
 

上の If 文は空文字を検出するためのものに見えますが、実際にはこれを実行すると "foo は空文字列です" が表示されます。

この結果は予想通りだったでしょうか?想定外だった人はこの先を。

上記の結果は、AS3 が弱い型の性質を持っているために起こります。AS3 では '+' 等のオペレータに対して複数のデータ型が混在すると処理の前に暗黙の型変換が行われます。これによって例えば trace("count:" + 0) のように文字列と数値を"足して"もそれらしい結果を得ることができるわけです。

暗黙の型変換は上の trace() の例のようにしばしば便利な機能として使われますが、一方で予期せぬ結果になるケースもある面倒なものだったりもします。例えば、この記事の最初に挙げた例も暗黙の型変換の結果によるものですが、実際にどのような変換が行われて true と評価されたのかは直感的には理解し難いものです。

前回に引き続き変数宣言の有無による違いを少し追求してみたいと思います。今回はパフォーマンスの違いについてです。よく知られている話だとは思いますがいちおう。

変数宣言の有無とパフォーマンス

まずは、以下のコードを考えます。Date のオブジェクトを生成して getTime() メソッドを 10 万回呼び出しています。変数宣言は行われていません。

date = new Date()
for (i=0; i<100000; i++)
  date.getTime()
 

手持ちの環境で上のコードを実行してみます。すると、for ループの箇所の実行に約 470ms かかりました。

これを下のように変えてみます。2 行目で var を使った変数宣言を追加しています。それから for ループ内では、2 行目で新しく追加した変数経由でメソッドを呼び出しています。

date = new Date()
var dateVar = date  // 追加
for (i=0; i<100000; i++)
  dateVar.getTime()
 

こちらはループの実行に約 340ms かかりました。処理時間が 130ms 程短縮されています。

ちょっと前の記事 (AS3 で動的言語のススメ) に書いたように strict オプションを指定しないことで AS3 の記述の自由度は格段に上がります。とはいえ、"With great power comes great responsibility" の言葉どおり、選択肢が増えた分だけ、コードを記述する側の責任が大きくなることは意識しておく必要があります。

手抜きの書き方を勧めたことに少し責任を感じて、今回は var による変数宣言の有無による変数の振舞いの違いに少し触れてみたいと思います。

var 無し変数の初期化

Flash CS3 でも Flex でも AS3 コンパイラの厳密な型チェックのオプションをオフにすれば var 宣言無しで変数が使用できるようになります。例えば下のコードは問題なくコンパイルできます。

public class Foo
{
  public function setMyGlobal(val:int):void
  {
    i = val;
  }
  public function printMyGlobal():void
  {
    trace(i);
  }
}
 

Adobe からの Flash CS3 用 AIR 機能拡張はまだ公開されていませんが、grant skinner が Flash CS3 用の AIR extension を自作して公開してくれました。

試してみたところ、日本語環境でも使えるようですので報告しておきます。grant の blog はこちらです。(Creating AIR Projects with Flash CS3

7月4日追記:早くもアップデート版が公開されたようです。(Creating AIR Panel for Flash CS3 Updated

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261