Flex 3の最近のブログ記事
FxUG 全国ツアー 2010 で発表した資料をアップしました。
熊本、沖縄 ( スライドとデモ )
http://labs.taiga.jp/presentationMaterial/FxUG/FxUG11520100703Slide.pdf
http://labs.taiga.jp/presentationMaterial/FxUG/FxUG11520100703Demo.zip
東京 ( スライド )
http://labs.taiga.jp/presentationMaterial/FxUG/FxUG11920100728Slide.pdf
フォントのライセンスや大人の事情により、公開しているデモは Ajax 版のソースのみです。ご了承ください。
@IT さんに寄稿した記事が本日公開されました。
http://www.atmarkit.co.jp/fwcr/rensai2/flex4_04/01.html
「 Flex アプリケーション開発で実際に使用されているライブラリを紹介してください」というお題をいただいて書いています。
自分の携わる仕事は、大抵自前で車輪づくりから始めたり、「非公式なライブラリの使用は禁止」などといった制約が設けられたりしている関係で、あまり人さまが公開しているライブラリを使うことがありません。
そんな中、実用的なものを選んだ結果が記事の内容…と解釈していただければと思います。
Flash MX (Flash Player 6) から導入されているアクセシビリティ機能ですが、今までまともに試したことがなかったので試しました。今回試して分かったことは、Accessibility クラスと通信するスクリーンリーダーの用意が意外と手間だったということです。
たとえば、Camera クラスを使用するためには Web カメラが必要であるように、Accessibility クラスを使用するためにはスクリーンリーダーが必要で、スクリーンリーダーを動作させるためには、いくつかのラインタイムやアプリケーションをインストールをしなければなりません。
ひとまず Windows XP(32bit) かつフリーの環境で、スクリーンリーダーと flash.accessibility パッケージの動作確認をするために私が辿った手順を備忘録として残しておきます。決して下記手段を推奨しているわけではありませんので、ご注意ください。
NDVA 日本語版を入手、インストール
http://groups.google.com/group/nvda-japanese-usersMicrosoft SAPI 4.0a runtime binaries を入手、インストール
http://activex.microsoft.com/activex/controls/sapi/spchapi.exe
※ SAPI 5.0 では日本語の読み上げをしてくれないので注意Text-to-speech engines の入手、インストール
※現在、Microsoft 本家のダウンロードページが消えてしまっているので、Internet Archive から入手
http://web.archive.org/web/20071230035858/http://www.microsoft.com/msagent/downloads/user.aspx
[Lernout & HauspieR TTS3000 TTS engine - Japanese (3 MB exe)] を選択NDVA 起動、設定
システムトレイ上の NVDA アイコンを右クリックしてメニューを開き、下記ダイアログの設定を行う出力先
[sapi4, Microsoft Speech API version 4] を選択
出力デバイスは任意音声
[Adult mail #1 Japanese LH] または [Adult Female #1 Japanese LH] を選択
サンプル ( 画面とソース : Flex 3.3.0.4852 でビルド、要 : スクリーンリーダー )
AccessibilityPropertiesSample
http://labs.taiga.jp/flex3/AccessibilityPropertiesSample/
http://labs.taiga.jp/flex3/AccessibilityPropertiesSample/srcview/
Flex アプリケーションのプリローダーがローディングしているときにステージをクリックすると、SystemManager がランタイムエラーを発生する問題を発見しました。
この問題は、デフォルトのプリローダーを使用しても発生しますし、プリローダーのローディング時間が長ければ長いほど発生するリスクが増えます。
新規作成直後で最小状態の Flex アプリケーションでも、プリローダーが一瞬表示されるので、この隙にマウスを連打するなどしてステージをクリックすればアウトです。
原因は、SystemManager の 5649 行目です。
5646 : private function stageEventHandler(event:Event):void
5647 : {
5648 : if (event.target is Stage)
5649 : mouseCatcher.dispatchEvent(event);
5650 : }
mouseCatcher は、プリローダーのローディングが完了するまで NULL なのですが、stageEventHandler はプリローダー動作中も呼び出されます。つまり、mouseCatcher の NULL チェック漏れです。
この問題は Gumbo にもあったようで、Flex 4 では fix されています。
https://bugs.adobe.com/jira/browse/SDK-22682
当面の回避策
プリローダークラスを自作して、ステージの MouseEvent.MOUSE_DOWN イベントを SystemManager 内のリスナーより早く拾って、イベントの伝播を止める。
面倒だと感じる方は、以下のように DownloadProgressBar クラスを継承することをおすすめします。
package {
import flash.events.Event;
import flash.events.MouseEvent;
import mx.preloaders.DownloadProgressBar;
public class MyPreloader extends DownloadProgressBar {
public function MyPreloader() {
super();
addEventListener(Event.COMPLETE, onCompleteHandler);
addEventListener(Event.ADDED_TO_STAGE, addedToStateHandler, false, int.MAX_VALUE, true);
}
protected function addedToStateHandler(event:Event):void {
stage.addEventListener(MouseEvent.MOUSE_DOWN, stageMouseDownHandler, false, int.MAX_VALUE, true);
removeEventListener(event.type, arguments.callee);
}
protected function stageMouseDownHandler(event:MouseEvent):void {
event.stopImmediatePropagation();
}
protected function onCompleteHandler(event:Event):void {
stage.removeEventListener(MouseEvent.MOUSE_DOWN, stageMouseDownHandler, false);
removeEventListener(event.type, arguments.callee);
}
}
}
今までアクセス制御の属性が mx_internal だった Label クラスの styleSheet プロパティが、Flex 3.4 から public に変更されました。
地味な変更ですが、地味に嬉しいことです。
早速サンプルを作りました。Label クラスのサブクラスである Text クラスを使用しています。
サンプル ( 画面とソース : Flex 3.4.0.9271 でビルド )
http://labs.taiga.jp/flex3/StyleSheetSample/
http://labs.taiga.jp/flex3/StyleSheetSample/srcview/
Flex SDK 3.3 がリリースされて、Flex Builder 3 Professional のライセンスを持っている人のみ使用できる datavisualization.swc も修正されました。ただし、修正内容を確認する場合、ソースコードは自力で解凍しなければなりません。
あと、私が Chart 系のコンポーネントをあまり使用していないので今まで気付けなかったのですが、Flex Builder 3 Plug-in をアンインストールして再インストールすると、ライセンス認証はパスされますが、"Flex Builder 3 Plug-in/sdks/3.x/fbpro" フォルダが消えてしまうようです。困りますね。そんな場合にも下記手順は必要です。
手順
Flex 3 Data Visualization Components をダウンロード
http://www.adobe.com/products/flex/flexdownloads/#flex_DataVisualizationダウンロードした ZIP を解凍
SDK 3.3 フォルダに解凍したデータをコピー
"{SDK 3.3 フォルダ}/lib" にコピーされた DMV-source.jar からソースを抽出
ソースを抽出するとき、実際自分が実行したコード (Windows XP)
C:\FlexSDKs\3.3.0\lib>java -jar DMV-source.jar "C:\Documents and Settings\All Users\Application Data\Adobe\Flex" "C:\FlexSDKs\3.3.0"
参考サイト
Adobe - Flex 3 SDK Release Notes
Using Datavisualization with the Flex SDK 3.3
Flex Doc Team
Extracting data visualization source code
Shigeru Nakagaki
Flex 3.1.0 : Chart や AdvancedDataGrid のソース
昨日の Flex 3 勉強会で、ライブコーディングするつもりが、ど忘れにより断念してしまった制約レイアウトのサンプルを作成しました。
ConstraintLayoutSample ( 画面とソース : Flex SDK 3.2 にてビルド )
http://labs.taiga.jp/flex3/ConstraintLayoutSample/
http://labs.taiga.jp/flex3/ConstraintLayoutSample/srcview/
constraintColumns, constraintRows プロパティは、IConstraintLayout インターフェースに基づいて Application, Panel, Canvas に実装されており、layout プロパティが absolute のときのみ使用できます。
テーブルレイアウトを組むとき、Grid, GridRow, GridItem を使用するとコンテナのネストが深くなりがちですが、これらを使用することにより余計なコンテナのネストが削減でき、アプリケーションのパフォーマンスを向上させることができます。
参加された皆様、お疲れさまでした。
勉強会で使用した発表資料をアップしましたので、下記 URL よりご覧下さい。
http://labs.taiga.jp/presentationMaterial/FxUG/FxUG06420090219Slide.pdf
http://labs.taiga.jp/presentationMaterial/FxUG/FxUG06420090219Demo.zip
MAX で公開した資料はこちらからどうぞ。
http://blog.taiga.jp/archives/2009/02/02/081500/
おまけ

taiga & arkw 勉強会後の反省会@新宿の某寿司店
参加されたみなさま、お疲れ様でした。
そして、D-4 セッションにお越しの方、ありがとうございました。

写真提供 : DNP ゆかりさん
当日使用したスライドとサンプルをアップしましたので、下記 URL よりお持ち帰りください。
http://labs.taiga.jp/presentationMaterial/FxUG/AdobeMAX2009JapanD4Slide.zip
http://labs.taiga.jp/presentationMaterial/FxUG/AdobeMAX2009JapanD4Demo.zip
ところで、セッションは 17:10-18:10 の 1 時間喋る予定でしたが、運営都合で講演中に時間を 10 分カットされるという事態に遭い、尻切れトンボで終わってしまいました。申し訳ありません。
なので、再来週… 2/19 ( 木 ) の FxUG 東京勉強会で補講する予定です。 興味のある方は参加していただけると幸いです。
< 追記 > 一緒に喋る予定だった杉浦さんですが、直前に L-2 セッションで話すことになり、欠員となりました。( 事後報告になってしまい申し訳ありません )
具体的な現象は解説できませんが、Flex SDK 3.2 以前のバージョンの Flex SDK 3 で作成 / 動作確認した RSL や Module を Flex SDK 3.2 でビルドして動作させると、SystemManager 内でエラーが発生するケースがあるようです。
このとき、はじめて SDK 3.1 と 3.2 の SystemManager.as の diff を取ったのですが、2,000 行以上追記されていて驚きました。
中垣さんのブログにて解説されていますが、思ったより大きな更新なので、Flex 3.2 以前のバージョンで作った既存 Flex 3 アプリケーションの SDK をバージョンアップをするときには注意が必要です。( というより、上位互換は考えない方がよいと思います。 )
それなりに影響でると思うのですが、日本語で正式アナウンスがないのは正直辛いですね。
