Go to Contents Go to Java Page

JavaOne 2002 in SF Report

 
 

3/27 第 3 日

 
 

San Francisco のダウンタウンを歩いていると、いろいろなところに JavaOne の広告があります。一番よく目に付くのがバス停です。かなりの割合で JavaOne です ^^;;

このようにいろいろと宣伝はしているのでしょうが、今年は参加者の数が去年より確実に減っているような気がします。いつもは、初日の Keynote で今年は何人登録しているかなどをいうのですが、今年はなかったところをみてもそう思います。

今まで、ずっと増加してきたので、減るのは初めてなのですが、たぶんこのぐらいが適当なのでしょう。それでも、多分、世界最大の開発者会議であることは変わらないと思います。

それよりも、去年まではどこにいっても常に混雑しており身動きがとりづらかったことを思えば、今年はかなり楽になっているので、そういう面ではいいです。

来年は、Moscone Center が Moscone West という新しい建物もできるので、そちらもいっぱいになるぐらいの参加者があつまるかどうかは、景気の行方によっているような気がします。

Advertisement of Java
バス停の広告
Moscone West
Moscone West

 

 
 

Keynote Session

 
 
Band Performance
開演前のパフォーマンス
今日と明日の Keynote は Sun の人がスピーカにいないので、席もかなり空いており、閑散な雰囲気があります。私自身もあまり興味がないので、流して聞いてました ^^;;

今日は待ち時間にバンドのパフォーマンスがありました。ランチの時にもバンドが入っており、いろいろなところで飽きさせない工夫が見られるのが JavaOne らしいところです。

内容については他のメディアに譲ることにして、筆者なりの感想を。今日のメインのスピーカは SAP と Sprint の方なのですが (その他にも Borland や Macromdeia などの方も短いしピーチをしています)、SAP の Hasso Plattner のスピーチがへたくそなんです (こんなことを書いていいのだろうか...)。いくら内容がおもしろくても、スピーチの技術がなければ、台無しになってしまうというスピーチの典型でした。

スピーチをする姿勢や態度などを Posture というのですが、Hasso Plattner のスピーチはこの Posture が悪いのです。スピーチするときに、演台にひじをついて喋る、無駄にゆらゆらと身体を揺らす、原稿を読みながら下をむいて話すなどです。スピーカはスクリーンに映されるのですが、身体を揺らしていると、スクリーンではとても落ち着かない感じに映ります。特にアップで映されているので、スクリーンアウトしてしまうこともたびたびあります。

動くのが行けないわけではないのですが、メリハリをつけた動きにすべきです。スピーチのうまい人、たとえば Rich Green はステージの上を歩き回りますが、常に歩き回るのではなく、止まるときはずっと止まっています。また、歩いていても上半身は不動です。もちろん、手と顔は動かしていいんですが。

JavaOne のように広いステージでは、アイコンタクトがなかなかできません。それを補うのが、ステージでの動きになっています。ようするに、動くことで自分がどの方向を向いているかを聴衆に見せることができ、聴衆の方を向いて喋りかけてくれていることを聴衆に分かってもらうためであると思います。そういう意味からいくと、逆に手や顔はある程度オーバーアクションになるぐらいにしないと行けないのではないでしょうか。ここまでいくと、舞台上の役者とかわならいですね。

アメリカの企業のエグゼクティブは皆スピーチのコンサルタントを受けていると聞きますが、自分の考えを人に伝えるときに、それを少なくとも誤解されないように、最大限に理解してもらうためにスピーチの技術が必要になるのだと思います。

筆者も何らかの発表やスピーチをするときは、そのようなことを考えながら行っているのですが、言うは易し、行うは難しで、まだまだ修行が足りないようです ^^;;

 

 
 

Technical Session

 
 

今日、聴講したのは

  • TS-2133 Prject Code-Name "Monty": A High-Performance Virtual Machine for the Java Platform for Small Deveces
  • TS-2248 Translucency, Alpha Compositing, and Animation: Taking Advantage of Java 2D Technology in Your Rich Client Application
  • TS-1697 About Faces: Simplifying Java Technology-Based Web Application Development with the JavaServer Faces Specification
  • TS-1799 The Java 2 Platform, Micro Edition (J2ME) Personal Digital Assistant Profile (PDAP): Technical Overview
  • TS-1516 SVG: An XML Format for Persistent Graphics on the Java Platform

今日の目玉はなんといっても Monty と Java Server Faces です。Monty は多分初お披露目、JSF は去年の JavaOne の Keynote で発表された以後音沙汰がなかったと思います。ということで、今日はこの 2 つをレポートします。

レポートはしないのですが、JFC/Swing や Java 2D のセッションではいつも多くの人が聴講しています。Java の Client-Side はほとんど生き残っていないような雰囲気がありましが、これだけ興味がある人がいるということはまだまだ捨てたものではないという気がします。

TS-2133 Prject Code-Name "Monty": A High-Performance Virtual Machine for the Java Platform for Small Deveces

Monty は KVM に代わる新しい J2ME CLDC 向けの JVM です。Monty の目標は

  • KVM の 10 倍のパフォーマンス
  • 少ないフットプリント

これらを行うためにいろいろな工夫がなされています。ただし、Keep it Simple は常に忘れないようにしているとのことです。

  • 単一の Heap。Object や Loaded Class もすべて同じヒープに保持することで、フラグメントが起こるのを防ぐ
  • Adaptive Compilation. HotSpot で使用されている Compilation
  • Generational GC. これも HotSpot で使われている技術
  • オブジェクトの hash を必要最低限のオブジェクトだけにする。 つまり、hash のないオブジェクトがあるということです
  • オブジェクトサイズの最適化。これにより他の JVM の半分以下になっています。
  • Compiled Code の remove。使用されていない Compiled Code は破棄します。使用されていないかどうかの判定は Least Recently Used Algorithm を使用します。

最後にベンチマークの結果とデモが行われました。

ベンチマークの実行には iPAQ 266MHz StrongARM/WinCE と Pentium 4 1.4GHz/ Windows 2000 が使用されています。ベンチマークには

  • Richards
  • DeltaBlue
  • Pentominoes
  • KXML
  • BenchPress

Pentominoes と KXML は何をやっているか分かるのですが、後はどんなベンチマークなんだかよく分かりません。

ベンチマークの結果は次のようになっています。それぞれの数次がミリ秒なのか秒なのか、それとも何らかのスコアなのかよく分かりません。

  StrongARM/WinCE P4/Win32
  KVM1.0.3 Monty Ratio KVM1.0.3 Monty Ratio
KXML
166.1
32.6
5.1
15.5
1.6
9.9
Richards
340.8
33.6
10.2
45.2
5.6
8.0
DeltaBlue
606.1
98.4
6.2
46.3
5.5
8.3
Pentominoes
938.6
117.2
8.0
170.1
11.4
14.9
BechPress
1841.2
205.6
9.0
361.7
32.6
11.1
Geomean
7.1
 
10.0

 

とにかく、かなり早くなっていることが分かります。このベータのフットプリントは Java の環境すべてで 1 MB だそうです。ここに MIDP が入っているかどうかは分かりません。

最後にデモが行われました。3D のゲームですが、KVM と Monty の iPAQ を並べて実行していました。KVM ではゲームにならないくらい遅いのですが、Monty ではちゃんとゲームになっていました。

TS-1697 About Faces: Simplifying Java Technology-Based Web Application Development with the JavaServer Faces Specification

Java Server Faces (以下 JSF と略す) は JSR-127 で策定されている、サーバ側での UI を構築するための API です。ようするに JSP では HTML を生成しますが、JSF は HTML のフォームを生成するものと考えていいと思います (HTML 以外にも WML も扱えるようです)。

JSR-127 はエクスパートグループに所属する団体がかなり多いらしく、なかなか Draft がまとまらないようです。スケジュール的には

  • Community Draft Spring '02
  • Public Draft Summer '02
  • Final Draft Fall '02

だそうですが、どこまでスケジュール通りに行くかは分かりません。Reference Implementation の Early Access も計画されているそうです。

JSF は次のような設計指向で進められているようです。

  • Tool Friendly
  • Client Device/Protocol Neutral
  • Usable with JSP
  • Usable without JSP
  • Usable in Context of HTML and Today's Browser
  • Scalable

JSF は JSP と同じように Servlet で実装されていますが、基本的には JSP とは独立した API だそうです。ただし、JSP の Tag Library を使用した JSF Tag は JSP に依存しています。

JSF の機能的には

  • Extensible UI Component Model
  • Event Model
  • Validation Framework
  • Page Navigation and Error Handling
  • I18N and Accessibility

イベントは、たとえばフォームに入力して Submit ボタンを押すなどによって発生します。また、Validation はたとえばフォームに数次しか入力できないようにするなどを行うためのものです。

最後に自動車の購入を行うためのデモを行いましたが、Sevlet だと HTTPServletRequest からリクエストを取り出す処理が必要ですが、JSF だとイベントになるので非常に簡単に扱うことができるようです。

また、デモではツールを使って HTML の画面を生成するようにしていました。要するに Bean を画面に貼るようなイメージです。JBuilder や Forte などがこれに対応すれば、生産性がかなり高くなるような気がします。

 

 
 

Birds of a Feather (BOF) Session

 
 

今日は次のセッションを聴講しました。

  • BOF-1711 Meet the 2D Team
  • BOF-1452 A New Solution for Using Threads with the Java Foundation Classes ("JFC/Swing") API: The Synchronous Model
  • BOF-1802 Scalable Vector Graphics and the Batik Project: Status and Roadmap
  • BOF-1090 Desktop Design for Complex Applications
  • BOF-2602 Java Server Faces

ここでは BOF-1452 と BOF-1802 をテクニカルセッションの内容と合わせてレポートします。

BOF-1452 A New Solution for Using Threads with the Java Foundation Classes ("JFC/Swing") API: The Synchronous Model

JavaOne では Sun 以外の方も発表されることが多くなってきましたが、特に BOF ではその傾向が強くなってきています。このセッションのスピーカも Compaq の方で、自分が開発したライブラリについて発表を行っていました。

Swing のアプリケーションを作っていると、アプリケーションが急に止まってしまうことがよくあります。そのままほおっておけば、数秒で復活するのですが、なんかいやな感じです。また、これを GC のせいだと思っている人がいますが、それは間違いです。

問題の原因は Swing のイベントモデルにあります。

基本的にイベントモデルには次の 2 つ処理があります。

  1. イベントが起こったらそれをキューに入れる処理
  2. キューからイベントを取り出して、リスナに配布する処理

AWT のイベントモデルはこの 2 つの処理を別々の Thread で行っていました。しかし、Swing では全てを Single Thread で行っています。Single Thread なので、Multi Thread 対応のための処理 (Thread Safe にするための処理) が省略でき、シンプルでパフォーマンスが高くなります。

しかし、これが諸悪の元凶になっているのです。

たとえば次のコードを見てみます。JButton がクリックされたときの処理です。

    public void actionPerformed(ActionEvent event) {
        button.setText("処理中...");
        doHeavyProcess(); // とても時間がかかる処理
        button.setText("処理できます");
    }

コードの全体はここにあります。 SwingTest.java

このコードではクリックしても「処理中...」とは表示されないで、クリックされた状態のままになってしまいます。

JButton の setText メソッドは中で repaint メソッドがコールします。このため、これを処理するためにイベントキューに入れるのですが、イベントの処理で止まっているので、再描画のイベントを処理することができなくなっているためです。

このセッションであげられた解決法には

  1. Thread + SwingUtility#invokeLater メソッド
  2. SwingWorker
  3. Foxtrot

3 番目の Foxtrot がスピーカが開発したライブラリです。

それぞれの方法の利点と欠点を挙げて、比較を行い。Foxtrot が一番いいことを示してました。

たとえば、1 の欠点としてはイベントが起こるたびに Thread を生成してしまうので、Thread のコントロールができない点などがあります。SwingWorker を使った方法では重い処理が 2 つ重なるとやはり処理が止まってしまうことを指摘していました。

しかし、どの方法も Swing 自体が Thread Safe ではないため、コンポーネントのプロパティを変更するなどには気をつけなくてはいけないことも示していました。

BOF-1802 Scalable Vector Graphics and the Batik Project: Status and Roadmap

Scalabel Vector Graphics (SVG と略す) は W3C で策定されているベクトルグラフィックスを XML で表すための標準です。間違っているのを承知で、大雑把にいってしまえば PostScript を XML で書きなおしたようなものです。

これを Java で扱うためのライブラリとして Apache の Batik があります。Batik の機能としては

  • SVG のエクスポート
  • SVG のインポート

があります。SVG で提供されている機能をすべて Java 2D でカバーできるわけではないので、それを補完するための処理や、XML のパースの処理なども含まれています。特に XML のパースには独自の DOM を使用しているそうです。

エクスポートは通常の Graphics2D クラスを使用した描画そのままで行うことができます。Graphics2D は実際には abstract クラスで描画を行う対象に応じた派生クラスがあります。たとえば、スクリーン描画やプリンタへの描画などです。Batik では同じように SVG のための Graphcis2D の派生クラスを提供しています。そのため、この派生クラスを使用すれば、普通の描画と何ら変わりなく SVG を生成することができます。

インポートには SVG 用のコンポーネント JSVGCanvas を使用します。

また、現在 W3C では SVG のサブセットとして携帯機機用の SVG Tiny や SVG Basic も策定しています。しかし、Batik は今のところこれらに対応する予定はないそうです。ただいま、ボランティア募集中だそうです。

 

 
 

おまけ

 
 
Breakfast
Breakfast

今日は JavaOne の食事事情に関してレポートしてみたいと思います。セッションのレポートよりこういう話題の方が望まれたりするんですよね。

JavaOne では朝と昼の食事が提供されています。参加費が高いので、これぐらいはしてくれないともとがとれません。

朝はマフィンもしくはパウンドケーキとフルーツ、飲み物、コーヒーという組み合わせです。写真のように山盛りになっており、食べ放題です。

フルーツはリンゴやバナナ、イチゴ、メロンなどいろいろあります。やはり食べやすいバナナに人気があるようです。逆にリンゴやナシ (といっても西洋ナシです) はあまり人気がないのかいつもあまっています。

朝は飲み物として、オレンジ、アップル、グレープフルーツとラズベリーのジュースがあります。

写真の奥に見える大きなポットがコーヒーです。JavaOne で出されるコーヒーはすべてスターバックスのコーヒーです。こちらも飲み放題。

去年はマフィンやパウンドケーキ以外にもベーグルやペストリーがあったのですが、経費削減のためでしょうか、残念ながら今年はありません。ベーグルがなくなってしまった今、甘いものが苦手の人にはつらいと思います。筆者は甘いもの大好きなので、全然平気なのですが ^^;;

昼はランチボックスか、バイキングです。バイキングといってもほとんど選択肢はありません。日によって少しづつ違うのですが、今日はフライドチキン、サラダ 2 種類、マフィンににんじんケーキでした。

ランチボックスにはサンドウィッチが 2 種類、サラダが主体のランチボックスが 3 種類あります。サンドウィッチはターキー & チーズとローストビーフで、写真のようにフランスパンに似たパンでサンドされています。ボックスには写真に映っているようにビスケットとポテトチップ、果物が入っています。果物は日によって違うのですが、バナナ、リンゴ、ナシのどれかです。

サラダが主体のランチボックスというのは主にベジタリアン向けのようです。今年初めて見たのがベジタブル寿しのランチです。ニンジンなんかが巻き寿しになっています。だれがこんなもの食べるのだろう?

ランチのときにも飲み物が出ます。朝と同じジュース以外にも、ペプシなどのソフトドリンクが選べます。

あとは午後におやつがでます。コーヒーとジュース、果物にお菓子です。果物やお菓子は争奪戦になります ^^;; 気づかずにいると、あっという間になくなってしまいます。

去年までは午前中にもコーヒーだけはサーブされていたのですが、今年はないようです。ただし、2 回以上参加した人だけが入れる Alumni Club という場所には常にコーヒーがおいてあります。

提供される食べ物を食べているだけで、かなりおなか一杯になります。日本に帰るまでに JavaOne 太りになりそうです。

Today's Lunch
今日のランチ
Lunchbox
ランチボックス

 

(2002.3.27)

 
 
Go to Contents Go to Java Page