第14回Flex2勉強会
Apolloプログラミング
今日のお題
Apolloって何?
- マルチプラットフォームのランタイム環境
- HTMLエンジン搭載
- Flash,HTML,JavaScript,PDFをまとめる
- Apolloアプリはローカルにインストールされる
- WEBブラウザの制限を越える
HTMLエンジン
- Webkit
- WindowsでもMacでも
- 同じHTML、JavaScriptを掛ける
- ブラウザごとに書かなくて良い
- JavaScriptも動く
- Ajaxアプリもそのまま動く
- GoogleMaps
JavaScript
- Flash→JavaScript
- イベント投げる。
- イベント受け取る。
- Flash←JavaScript
- イベント投げる。
- イベント受け取る。
HTMLをApollo化する
- 3分クッキング
- Hello.htmlを作成
<html> HELLO!! </html>
- Apollo用設定ファイルの作成
<?xml version="1.0" encoding="utf-8" standalone="no"?> <application xmlns="http://ns.adobe.com/apollo/application/1.0.M3" appId="hello1" version=".4"> <properties> <name>hello</name> <description/> <publisher>FlexCoder</publisher> <copyright/> </properties> <rootContent systemChrome="standard" transparent="false" visible="true">Hello.html</rootContent> <icon/> </application>
- さぁApolloアプリ実行しよう!
adl.exe Hello-app.xml
- アプリケーションを配布しよう
adt.exe Hello.air Hello-app.xml Hello.html
FlexをApollo化する
- プロジェクトの新規作成
- アプリの設定を記述
- 後でも設定可能
- ルートはApolloApplicationタグ
<?xml version="1.0" encoding="utf-8"?> <mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml“ layout="absolute"> <ここにプログラムを記述> </mx:ApolloApplication>
- 実行
- いきなり完成
- ちょっと見た目を変える
- 設定ファイル
- HelloApollo1-app.xml
- ステータスの表示
- Application.status
- 設定ファイル
<?xml version="1.0" encoding="utf-8"?> <mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" status="現在のステータス“title="Apolloアプリ"> <mx:Style> Application { background-image:""; background-color:""; background-alpha:"0.2"; } </mx:Style> <mx:Label text="Hello Apollo World." fontSize="20" /> </mx:ApolloApplication>
- 配布形式にする
- エクスポートでAIR指定
- ソースも付けられる
Apolloコンポーネントを使う
- ローカルファイル
- HTML
- ウィンドウ
- ローカルファイル
- HTML
- HTML表示
- Spriteのサブクラス
- フィルタ
- 透明化
- 変形
- HTML表示
- ウィンドウ
- ウィンドウ操作
- 最大化、最小化、リストア、クローズ
- ウィンドウの新規作成
- イベント
- ACTIVATE / DEACTIVATE
- CLOSING / CLOSE
- FOCUS_IN / FOCUS_OUT
- MOVING / MOVE
- RESIZING / RESIZE
- ウィンドウ操作
- Alpha版の制限
- OSX版のツールバー
- システムトレイアプリ
- アイコンの操作
- デスクトップ情報
- ネイティブウィンドウメニュー
- アプリへのドラッグアンドドロップ
Apollo File API
- 機能概要
- 基本クラス
- パス指定
- Fileクラスはパスを表します
- プロパティ
- nativePath:OS独自のパス
- url:URL
- parent:上位パス
- 操作
- resolve(‘a/b.txt’) :現在パスから指定
- resolve(‘..’) :上のフォルダを指定
- relativize(otherFile) :現在のパスに追加
- canonicalize :正規化、標準化(Document and Setting など)
- カタログ情報
- ユーザーフォルダ
- File.userDirectory
- File.desktopDirectory
- File.documentsDirectory
- アプリケーションフォルダ:
- File.appResourceDirectory
- File.appStorageDirectory
- File.createTempDirectory()
- ファイル情報
- size
- creationDate, modificationDate
- ディレクトリーリスト
- listDirectory()
- ユーザーフォルダ
- ファイルシステム情報
- ファイル操作
- ファイルIOFileStreamクラス
- IDataInput/IDataOutputインタフェースを実装(ByteArrayやSocketと同じように)
- バイナリデータ
- read/writeBytes
- read/writeInt, read/writeDouble, など
- AMF データ (直列化されたオブジェクト)
- read/writeObject
- テキストデータ
- read/writeMultibyte
- read/writeUTFBytes
- 同期/非同期モデル
- 非同期File I/O
- 同期ファイルI/OはByteArrayのように振舞う
- “bytesAvailable”プロパティはファイルの最後まで読めることを表している。
- 非同期ファイルI/OはSocketやURLStreamのように振舞う。
- “bytesAvailable”はデータがバッファリングされて読み込み可能なことを表している。
- “progress”イベントは新しいデータが読めることを表している。
- “complete”イベントが起こればカンタンにファイルを読める。
- 他の方法
- readInt(), readDouble(), など、読み込み可能なファイルから読む。
- 同期ファイルI/OはByteArrayのように振舞う
JavaScript連携
- 概要
- ActionScriptとJavaScriptは共にECMAScriptベースの言語である。
- Apolloでは相互に呼び出すことが可能。
- Apollo内のJavaScriptはバージョン1.7
- DOM
- ActionScriptからHTMLをDOM操作する
- HTMLのJavaScriptイベントにActionScriptを関連付ける
<html> <body id="link"> <p id="msg">Test</p> </body> </html>
- DOM操作
html.window.document.getElementById(“msg”).innerHTML = "メッセージ";
-
- JavaScriptイベントをリスニング
var link:Object = html.window.document.getElementById("link"); link.onclick = clickHandler;
- ActionScript→JavaScript
- JavaScriptの標準メソッド呼び出し
html.window.alert("Hello from ActionScript");
-
- JavaScriptのカスタムメソッド/プロパティ呼び出し
<script> greeting = "hello"; function reverseStr(str) { returnStr = ""; for (i = 0; i < str.length; i++) { returnStr = str.charAt(i) + returnStr; } return returnStr; } </script>
- JavaScript→ActionScript
- ActionScriptの標準メソッド呼び出し
<html> <script> runtime.trace("Hello from JavaScript."); </script> </html>
その他の機能
- ネットワークの検出
- ネットワークの状態変化を検出できる
Shell.shell.addEventListener(Event.NETWORK_CHANGE,onNetworkChange); function onNetworkChange(event:Event) { //検出時の処理 }
HelloApollo9.exe aaa bbb ccc
- アプリケーションの更新
- 現在インストールされているアプリを、プログラム経由で更新することができる。
- ローカルにインストールされているバージョンと、サーバーにある最新バージョンを比較すれば、最新版を自動的にインストールできる。
こんなかんじです。
資料はコチラからダウンロードできます。
http://fxug.net/archives/study_mtg_14/apollo_programming.pdf
複数エフェクト
複数のエフェクトを同時に適応する例です。
Parallelクラスを使います。
Simple Parallel Effect Using Actionscript
http://www.cflex.net/showFileDetails.cfm?ObjectID=642&ChannelID=1
ApolloとFDS連携サンプル
クリストフさんがFDSとApolloを連携するサンプルを公開しています。
AMFChannelとかRTMPChannelっていうクラスを使って、
サーバーにアクセスしてプッシュデータを受け取っています。
Real Time Market Data using Apollo and Flex Data Services
http://coenraets.org/blog/2007/03/real-time-market-data-using-apollo-and-flex-data-services/
LiveCycle Data Services って何だ?
AdobeのSOAに対する答えかな。
主な機能は以下のとおり、
・新しいFlex SDK
・サーバーサイドPDF生成
・DataServiceのランタイム変更
・WSRPポータルサポート
・QoSサポート
・AjaxDataService
・Flex-Ajax Bridge
・オフラインメッセージキュー for Apollo
・ローカルデータキャッシュ for Apollo
・RTMPトンネリング
・SQLアダプタ
・新しいJSPタグライブラリ
・DataServiceのパフォーマンスを拡張性の向上
業務でどの程度PDF連携が要求とされているか、
ってか、お客さんはPDFでできること全体を把握していないと思う。
まずPDFを使うと何ができるか広く認知してもらって、
そのうえでLiveCycle Data Servicesのメリット考えないとね。
JasperReportと何が違うか説明できます?
帳票って出力するだけの紙の代わりから、
入力・表示・データ・チェック・送信・セキュリティを備えた
ビジネスツールとして見れるか、ってかそれが必要か。
必要性はこちらから提案するもんだよね。
トヨタのプリウスっていきなり買わないでしょ?
ちゃんと筋の通った説明があって、魅力があって、
必要性を感じて購入する。
思ってもみなかった良い体験ができる。
それが当たり前になる。
Adobe SOA platform launches Data Services
http://technoracle.blogspot.com/2007/03/adobe-soa-platform-launches-data.html
HTML表示ターゲットの変更
Apollo内で読み込んだHTMLに正規表現かまします。
ターゲットが_blankになっている部分を_selfに変更します。
これ応用すれば面白い。
Apollo HTML Gotcha
http://www.brandonellis.org/?p=26
ユースケース分析
さて、Apolloプラットフォームを使ったユースケースを分析してみよう。
例えばDemocracy Playerは、デスクトップアプリで
WMV、MPEG、AVI、XVIDなどあらゆる動画を見ることができる。
BitTorrentからダウンロードもできるしYouTubeも見れる。
Apolloじゃないけど、Apollo以上のことができている。UIもかっこいい。
クラスプラットフォームじゃないと思うけどC#とかできれば比較的
簡単にこんなアプリつくれるはず。
では、Apolloを使った場合どんなことができるか?
例えばfinetuneは、iTunes統合、カスタムプレイリスト、プレイリストの共有などできる。
開発にはおそらくFlexを使っている。
finetune
http://www.finetune.com/desktop/
例えばyourminisはオンラインウェジットだ。ブログに貼り付けて使ったり、WebOS内のマイポータルに貼り付ける。最近Apollo化したようで、WebOS内ではなくてデスクトップに貼り付けられるようになった。
yourminis
http://www.yourminis.com/minis
Aopllo出たばっかりなのにこの開発スピード感はなんだろうか?
おそらくApolloが既に存在するサービスの実装技術の使いまわしでできるからだと思う。
ビュー部分はJavaScriptやFlash、サーバーロジック部分はJavaやPHPを用いていて、
Apolloアプリに内包する形で作っているからちょっとの修正で新サービスが
完成するのはないだろうか。
もちろん、Apolloで万能ではない。例えば、
mov、mpeg、wmv、divx、xvid、mp4などは再生できない。(たぶん)
PC同士のP2Pコミュニケーションはできない。
Democracy
http://www.getdemocracy.com/
でも期待して待ってみよう。
Apolloはデスクトップにインストールするランタイムだ。
ブラウザの制限は無い。やろうと思えば何でも作れるはずだ。
自由だー!
デスクトップ is フリーダム♪
デスクトップ is フリーダム♪
デスクトップ is フリーダム♪
でも、なんだかんだいって憶えること多いよね。