第14回Flex2勉強会

Apolloプログラミング

今日のお題
  • 3月19日 
    • ApolloのAlpha版がLabsで出ました。
  • 2007年秋ごろ
    • Apollo正式版が出るようです。
  • ちなみに、
    • Apolloとはコードネームでリリース時には 名前が変わる可能性があります。
アジェンダ
  • Apolloって何?
  • Apolloで何ができるのか?
  • ダウンロードして使ってみる。
  • プログラミングしてみる。
  • せっかくの勉強会だし、 濃い目のネタも紹介。
Apolloって何?
Apolloランタイム環境
HTMLエンジン
JavaScript
WEBブラウザの制限を越える
  • ローカルファイルアクセル
    • OSの違いはAPIが吸収
  • ウィンドウ操作
  • タスクトレイ常駐(おそらく)
  • ウィンドウ枠自由
Apolloインストール
Apolloアプリの作り方
  • 普通のHTMLをアプリとしてラップ
  • 普通のFlex/Flashアプリをラップ
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
  • 配布用AIRファイル完成
  • インストーラの起動
  • 上書きインストールもできる
  • アンインストールオプションも出る
  • かんたんに手が出せます!
FlexApollo化する
  • プロジェクトの新規作成
  • アプリの設定を記述
    • 後でも設定可能
  • ルートは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
  • ウィンドウ
  • ローカルファイル
    • FileSystemComboBox
      • ローカルファイル
    • FileSystemDataGrid
      • ファイル情報をDataGridで表示する
        • ファイル名、作成日、更新日、タイプ、サイズ
    • FileSystemHistoryButton
    • FileSystemList
    • FileSystemTree
  • HTML
    • HTML表示
    • Spriteのサブクラス
      • フィルタ
      • 透明化
      • 変形
  • ウィンドウ
    • ウィンドウ操作
      • 最大化、最小化、リストア、クローズ
    • ウィンドウの新規作成
    • イベント
      • ACTIVATE / DEACTIVATE
      • CLOSING / CLOSE
      • FOCUS_IN / FOCUS_OUT
      • MOVING / MOVE
      • RESIZING / RESIZE
Apollo File API
  • 機能概要
    • ファイルパスの取得
      • OSに依存しないパスの指定
      • よく知られたパスはショートカット
        • デスクトップ
        • ドキュメントフォルダ
        • テンポラリーファイルとフォルダ
    • ディレクトリー一覧
    • 移動、コピー、削除
    • ファイルの読み書き
      • バイナリ、テキスト
    • 同期、非同期
  • 基本クラス
    • flash.filesystem パッケージ
      • File
      • FileMode
        • ファイルを開く際の読み書きモードの指定
      • FileStream
        • ファイルストリーム
  • パス指定
    • 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()
  • ファイル操作
    • コピーと移動
      • file.copyTo(destFile)
      • file.moveTo(destFile)
    • 削除
      • file.deleteFile()
      • file.deleteDirectory()
      • file.moveToTrash()
    • アップロードとダウンロード
      • extends flash.net.FileReference
    • ブラウザー
      • open, save, directory
  • ファイルIOFileStreamクラス
    • IDataInput/IDataOutputインタフェースを実装(ByteArrayやSocketと同じように)
    • バイナリデータ
      • read/writeBytes
      • read/writeInt, read/writeDouble, など
    • AMF データ (直列化されたオブジェクト)
      • read/writeObject
    • テキストデータ
      • read/writeMultibyte
      • read/writeUTFBytes
  • 同期/非同期モデル
    • ゴール
      • 同期プログラミングモデルをシンプルで信頼できるようにする
      • Flashイベントモデルの活用
      • 対話的かつ魅力的なユーザー体験を維持する
      • 同期と非同期の違いを最小にするAPI
    • 同期モデル
      • 例) file.delete(), fileStream.open(…)
      • 戻り値を待ってファイル読込みを完了する。
      • 例外としてエラーをスローする。
    • 非同期モデル
      • 例) file.deleteAsync(), fileSteam.openAsync(…)
      • 完了イベントでファイル読込みを完了する。
      • イベントとして結果とエラーを渡す。
  • 非同期File I/O
    • 同期ファイルI/OはByteArrayのように振舞う
      • “bytesAvailable”プロパティはファイルの最後まで読めることを表している。
    • 非同期ファイルI/OはSocketやURLStreamのように振舞う。
      • “bytesAvailable”はデータがバッファリングされて読み込み可能なことを表している。
      • “progress”イベントは新しいデータが読めることを表している。
      • “complete”イベントが起こればカンタンにファイルを読める。
    • 他の方法
      • readInt(), readDouble(), など、読み込み可能なファイルから読む。
JavaScript連携
<html>
     <body id="link">
       <p id="msg">Test</p>
     </body>
 </html>
  • DOM操作
html.window.document.getElementById(“msg”).innerHTML = "メッセージ";
var link:Object = html.window.document.getElementById("link");
link.onclick = clickHandler;
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>
<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

はてな技術勉強会

ActionScript3 / Flex / Apollo 勉強会ってのがあったみたいです。
資料が公開されている〜♪すばらすぃ。映像付きだし。


LL使いな方々にはfcwrapってのが良いらしい?
オイラ、Eclipseから離れられない体になってしまいました。orz


Hatena::Diary だいぶお世話になっております。


3月22日の技術勉強会 - ActionScript3 / Flex / Apollo 勉強会
http://hatena.g.hatena.ne.jp/hatenatech/

ApolloとFDS連携サンプル

クリストフさんがFDSApolloを連携するサンプルを公開しています。
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 って何だ?

AdobeSOAに対する答えかな。
主な機能は以下のとおり、


・新しい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

ユースケース分析

さて、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が既に存在するサービスの実装技術の使いまわしでできるからだと思う。


ビュー部分はJavaScriptFlash、サーバーロジック部分はJavaPHPを用いていて、
Apolloアプリに内包する形で作っているからちょっとの修正で新サービスが
完成するのはないだろうか。


もちろん、Apolloで万能ではない。例えば、
mov、mpeg、wmv、divxxvid、mp4などは再生できない。(たぶん)
PC同士のP2Pコミュニケーションはできない。


Democracy
http://www.getdemocracy.com/


でも期待して待ってみよう。
Apolloはデスクトップにインストールするランタイムだ。
ブラウザの制限は無い。やろうと思えば何でも作れるはずだ。


自由だー!

デスクトップ is フリーダム♪
デスクトップ is フリーダム♪
デスクトップ is フリーダム♪


でも、なんだかんだいって憶えること多いよね。


犬井ヒロシ
http://vision.ameba.jp/watch.do?movie=167720

Firefox3は対抗馬?それとも

Firefox3もローカルアクセスが出来るようになるそうです。
ドラッグアンドドロップもできるみたい。


ApolloFlexFlashWPFWPF/E、AjaxFirefoxCurlLaszlo、・・・


技術はいろいろあるけれど、


大事なのは新しいテクノロジーよりも
既存の知識の延長線上で手を出せることかな。


選択肢が増えていることは良いことですね。


Here Comes Competition, Apollo
http://www.techcrunch.com/2007/03/23/here-comes-competition-apollo/