Java World Day 2008

Java World Day 2008に行ってきたのでメモ。
最後のセッションは異様に面白かった!アンケートに花丸つけようと思ったくらい。つければよかったかも・・
文字を赤くしても、キーワードのリンクは黒になるのか・・・・・


セッションの内容、所感など

※印象に残った箇所のみ記載

■基調講演(クラウド
  • クラウドコンピューティングに対する思い。アーキテクトはいろいろおいしいことを描くけど、デベロパからみると、複雑さが増す一方。山積みの課題を我慢して開発しているが、それらを解決するツールもいろいろある。
    • アーキテクトの夢(Architect's Dream)
      • 疎結合
      • 拡張性
      • 標準準拠
      • フォルト・トレラント
      • 無制限のコンピュータパワー
      • ユビキタス
    • デベロパの悪夢(Developer's Nightmare)
      • No Call Stack
      • No Transactions
      • No Promises
      • No Certainly
      • No Ordering Constrains
  • 新旧のACID。旧は、「正確に作る」ことを重視、新は、「不確かさに対応する」ことを重視。
      • A:Atomic
      • C:Consistent
      • I:Isolated
      • D:Durable
    • 新(現実世界の姿を映したものである)
      • A:Associative(結合性)
      • C:Commutative(交換可能性。タスクの順番が変わってもOK)
      • I:Idempotent(べき等性。何度実行しても同じ結果になる)
      • D:Distributed(分散性)
  • グーグル社内のテクノロジー(新ACIDを実現するためのテクノロジー
    • google file system
      • 大量データを保持できること
      • 信頼性を確保できること
        • 機器の信頼性を上げるのではなく、障害発生時にどんな対応ができるかを重視する
    • Distributed Shared Memory
      • 大量データへのシーケンスアクセスが高速にできることを重視
      • RDBMSは使わず、tableを使用する
      • いくらでも拡張可能なしくみとする
    • Programing Abtraction
      • ステートレスであることを重視
      • 並列処理に向いている
      • 高いレベルで抽象化し、いろいろなものに適用できること
    • Language for Paraller Log Procession:Sawzall
  • 利用できるもの
  • 日本語のGoogle Codeサイト
■Inside JavaVM
  • ガベージコレクションの説明。導入です。
    • New領域、Old領域etc...
  • ガベージコレクションアルゴリズム。いろいろなアルゴリズムがあることは知らなかった。
    • ノーマルGC
    • パラレルGC
    • コンカレントGC
  • メモリサイジング
    • Webアプリケーションの場合、メモリ領域は以下のように使われる。具体的な話で置き換えた説明は初めてだったので、実践的な印象を受けた。
      • New領域(のEden領域):短命なトランザクションデータ
      • Old領域:セッション情報(セッションスコープ、アプリケーションスコープのメモリ)
    • フルGCを避けるためには、OLD領域の適切なサイジングが必要
    • 求め方
      • フルGCが許容される頻度、セッションのサイズをもとにOld領域を求める
      • New:Oldの比率を元にトータルで必要なメモリを求める。
        • デフォルトの比率の例で求めてた。比率を変えるのはその次の話なのかな?
  • CosmiNexusの取り組み
  • CosmiNexusのデモ
  • おみやげに、本を貰った
    • Webアプリケーション開発の設計〜構築、チューニングなどをさらりと解説。全体を概観することをポイントにしているみたい。
    • 構築部分は、CosmiNexusのキャプチャ付きで説明されているので、コズミ使うならよいかも。。

WEBアプリケーション・サーバー 設計・構築ノウハウ

WEBアプリケーション・サーバー 設計・構築ノウハウ

Android
  • Androidの特徴
  • 組み込み系ではおそらく初のオープンソースである。画期的!
  • ムーアの法則(コンピュータの進化)よりGilderの法則(ネットワークの進化)のほうが上回る。
    • ネットワークは、半年〜9か月でスピードが倍
  • 環境を整えれば、その周辺に市場ができることもある。ミレニアムレポートは、その点を見逃している。
  • 次はアフリカだ!(Next Billion)
  • グーグルは、さまざまなサービスのラインアップを「1つの企業が持ってる」ことが強み。アンドロイドの強みも生きてくる。
  • 9月12日に日本アンドロイドの会を発足予定
Javaプログラムの品質向上の手法
  • 動機付け
    • 並列処理特有のエラー
      • デッドロック
      • 処理の競合(オブジェクトがロックされずに更新されるため不整合)
    • 検出の難しさ
  • 静的解析ツール(Prevent)の特徴、メリット
    • 重大なバグの原因になるポイントにフォーカスして検出
    • コーディングルールへの違反など、重大でないものは対象にしない(この点、FindBugsとは違う)
  • 動的解析ツール(Coverity Thread Analizer)の特徴、メリット
    • 静的解析ツールで検出できない以下の問題を検出できる
      • 外部ライブラリを利用しているため、ソースコードがない
      • まったくそのオブジェクトがロックされていない
    • 動的テストではマルチスレッドの場合の問題など、検出が難しいものが検出できる
      • マルチスレッドのプログラムの場合、バグの発現はタイミングに依存するので、再現が難しい
    • プログラムを動作させ、「デッドロックの可能性」を検出できる
    • レビュー、静的解析、動的解析、動的テストの得意分野はそれぞれ違うので、組み合わせて実施すると強力。
  • デモ
■WEBアプリケーション・フレームワークは、この先どう進化していくのか

このセッションは非常に面白かった。

  • Javaの大きな3つの波(過去)
    • XML
      • Servlet
        • サーバサイドJavaを確立し、XMLを浸透させた
      • EJB
        • 初期のバージョンはXMLをたくさん書く必要があり、成功したとは言えない
      • Struts
        • MVCを浸透させ、サーバサイドJavaを加速させた立役者
        • これ以前は企業や現場ごとにフレームワークを作成しており、開発者は最初にその現場のフレームワークを学ぶ必要があったが、その必要がなくなった点、価値が大きい。
        • Action、Formなどと分業が進んだことにより、以下の影響
          • 開発効率がUP
          • 開発者が部分を作成するだけで済むため、面白みに欠ける
    • POJO
    • POJO前後の変化
      • コードの見通し
        • POJO前は、コードの穴を埋めるコーディングで全体の見通しが悪い
        • POJO後は、コードで流れがわかるため、見通しがよい
      • オブジェクト指向パラダイム
        • POJO前は、継承によるオブジェクト指向。子は親の不足を埋める。
          • 差分プログラミング。
          • いや、テンプレートパターンはオブジェクト指向ではないよね。。
          • 継承は、オブジェクト指向でプログラミングするための基礎技術でしかないと思うが・・・
        • POJO後は、インターフェース指向に変わってきたのではないか?
          • ようやくオブジェクト指向の価値を生かせるようになったと考える。
          • 継承の縛りから解放されたこと、オブジェクトにみんなが慣れ、ポリモーフィズムを使える人が増えてきたことの影響だと思う。
    • アノテーション
      • DIの変化
        • Spring1.Xでは、アプリケーションが大きくなるとXMLも大きくなるという問題あり
        • Spring2.Xでは、アノテーションを利用するため、XMLのコード量は劇的に減った。代わりにJavaのコード量が増えた。
      • もたらしたもの
        • 実装と設定をすぐそばにおくことにより、見通しがよい
        • 分離すべきケースもある。
        • 選択肢が増えたと考える。例えば、以下のように。
          • 変化しやすいものは、設定ファイル
          • 変化しないものは、ソースコード
      • 背景
        • コンピュータリソースが乏しい頃は、「いかに効率よくシステムを動作させるか」を重視
        • コンピュータリソースが十分になってきた今は、「いかに効率よく開発するか」を重視
  • 今後来る波(河村さんが注目しているもの)
    • OSGI
    • メッセージ施行
  • 動向を見る
    • 軸をもって技術をみること
    • 軸を見つけるには、見つけようとして見ることが必要。個々の技術をおいかけるのではない。
  • ここ10年の一番大きな波は
    • 実は、コミュニティ
    • 何か得意分野をひとつもって参加すること
    • 次は自分が話せるようになっていく