2008年12月4日木曜日

JavaFXって既にレガシーだよねwww

タイトルは釣りです。すみません。

さて、12月2日と3日に東京で「Sun Tech Days 2008 in Tokyo」というイベントがあり、Twitterの方で会場にいる参加者の方々の実況を見たりしていたのですが、Silverlightユーザの端くれでJavaはほとんど知らない私から見て、JavaFXアプレットについて、よく分からないところが3点程あったので、以下に挙げてみます。

その1
Silverlightには全画面モードがあります。
このモードには色々な制限があって、例えば、
  • 全画面モードへの移行にはイベントハンドラを使う必要があって、Silverlightアプリケーションの起動後に即全画面モードにはできない
  • 全画面モードは背景透過(Windowless)にはできない
  • 全画面モードに移行すると画面中央に警告が表示され、Escキーで全画面モードが解除できることと、Silverlightアプリケーションのホストのドメイン名が強制的に表示される
  • 全画面モードのキー入力には制限があって、通常の文字は入力できない
といった具合です。

これらの制限は、全画面モードでアプリケーションに好き勝手させると、本物そっくりの偽画面でユーザを騙してパスワードを盗むような悪質なアプリケーションが登場しかねないので、機能に制限を加える事で対策をしているというのが主な理由のようです。
これはSilverlightに限った話ではなく、AdobeのFlashの全画面モードにも同様の制限があります。

というか、むしろMicrosoftがFlashの全画面モードの制限仕様をパクったんじゃないの?なんて事は口が裂けても言いませんが、先月話題になったニコニコ動画の全画面モードにコメント欄が無い件も、上記の制限の影響を受けていたわけです。

ただ、AdobeはFlash10で全画面モードで使用可能なキーをいくつか増やしていて、これはどうやら、Silverlightの全画面モードでは使えるが、Flashの全画面モードでは使えなかった一部のキーを追加したようです。
AdobeとMicrooftがお互いの仕様を意識しつつ、セキュリティを考慮しながら利便性も高めようとしている様子が伺えます。

ここで質問ですが、JavaFXアプレットの全画面モードってどうなっているんでしょうか?

その2
SilverlightのUIコンポーネントは、全てベクターベースでスケーラブルになっています。
これは本来、GPUの支援下で高解像度で10フィートUIを実現するような場合に有利な方式のはずです。
例えば、1900x1200ピクセルの画面で、64x64ピクセルのグラデーションがかかったチェックボックスを描くような状況を考えてみます。
チェックボックスをピクセルベースの画像として持つ場合、少なくとも未選択状態と選択状態の2種類の画像が必要で実際には他にも画像が必要でしょうが、ベクターベースであれば、描画命令のリストで済みデータの量も少なくなるはずです。

しかし、MicrosoftはSilverlightをモバイル端末や車載端末のような低解像度のデバイスにも展開しようとしています。そのため、
「これだと、スケーラブルなUIの利点が活かしにくいと思うけど、どうなんだろう? もちろん、UIがスケーラブルだと拡大縮小のアニメーションが綺麗になるのは確かだけれど、そんなエフェクトのためにUIをスケーラブルにするのは、いくらRIAでもリッチ過ぎるんじゃないだろうか?」
等と考えていたのですが、最近になってHighDPIというキーワードを目にするようになって、
「あー、携帯端末の小さい画面でも将来的に解像度が縦横4倍くらいになったら、スケーラブルなUIの方が有利になるかもしれないし、Microsoftとしてはそれぐらい先を見越しておくべきだよね。AcrobatでPC画面上に紙を再現する事にこだわってるAdobeとしても、HighDPIは当然意識してるんだろうし、そういう研究開発もしてるんだろう。」
と考えを改めました。

ここで質問ですが、JavaFXアプレットのUIってベクターベースなんでしょうか?

その3
Silverlightには分離ストレージという機能があります。
分離ストレージを大雑把に説明すると、信頼できないアプリケーションがクライアント側でデータの永続記憶を必要とする場合に、ローカルストレージの代わりに提供される仮想的なファイルストレージということになります。
他の記憶手段、例えばCookieの場合、データの容量制限を別にしても、HTTPヘッダに常に全ての内容を載せる方式なので大量のデータには向きませんし、かといってWebサーバ側に永続記憶を持たせてしまうと、少なくともWebアプリケーションの起動時にクライアントにデータを転送し、終了前にクライアントが変更したデータをサーバ側に転送する必要があります。
データへの操作が、「画像のこの範囲にグラデーションをかける」のような単純なコマンドでで済む内はいいですが、大量のデータを全面的に修正するような状況、例えば何かの映像にクライアント側のローカルストレージ内の任意の画像を重ね合わせて表示するような話になると、さすがに無理が出てきます。

分離ストレージはクライアント側の永続記憶で、Cookieのように毎回Webサーバに内容を送るような事はしないので、上記のような用途には特に向いています。(Webアプリケーションで映像を編集するのが現実的かどうかは別にしてですが)

それから、分離ストレージは通常はアプリケーション別に管理され、ローカルストレージとは独立していますので、ローカルストレージへのアクセス権限がなくても利用できますし、他のアプリケーションからデータを保護する事もできます。容量については初期状態で1MBの容量制限があり、拡張が必要な場合にはユーザにダイアログで問い合わせる仕組みになっています。

Flashの方にはSharedObjectという機能があって、これが分離ストレージと大体同じ機能のようです。
今時、Webアプリケーションに、「PC内の貴方のデータ全てを好きにいじる許可を頂けますか? OK/Cancel」とか言われても困ってしまいますよね?

ここで質問ですが、JavaFXアプレットはこの辺の仕組みはどうなっているんでしょうか?



上記の3点、かなり気になってますので、詳細をご存じの方がいらっしゃいましたら、どうか教えてください。よろしくお願いします。m(__)m

0 コメント:

コメントを投稿