2012年4月30日月曜日

AOEの日記


JavaOne Tokyo 2012参加レポート (2日目)

JavaOne Tokyoの2日目のレポートです。色々忙しくって随分遅れてしまいました。すみません...。

2日目は次のようなセッションに参加してきました。

  • Technology Keynote
  • The Java EE 6 Programming Model Explained
  • Project Jigsaw: Putting it all Together
  • How to Write Low Latency Java Applications
  • ForgeとArquillianを利用したJava EEアプリケーションの迅速な開発
  • UI Controls and Charts: Drag-and-Drop, Filtering, Sorting, Table Hookup with Charts
  • Learn how the JVM is fundamental to our architecture.

Technology Keynote

Technology KeynoteについてはやはりSFの内容をなぞったものでした。その後、スポンサー講演として富士通の方の講演がありましたが、こちらは昨日のNECさんの様子を見たせいか、スーツスーツしないような内容に気を遣ってものとなっていましたねー。

Technology Keynoteの内容では次のようなことが気になりました。

最後の富士通さんの講演ですが、やはり前日の雰囲気を見ていたのか、ちょっとおっかなびっくりな感じで話されていたような。(^^;)
初音ミクの話をしたり、チェスのプログラムを趣味で作った話をしたりと、余り堅くならないように気を遣って話をされていたので、前日のよりは好意的に受け入れられていたように思われます。
Interstage on Azureの話や、Hadoopの独自ファイルシステムの話が出てきて、これはとても気になったのですが、さらっと流されてしまったのが残念。

The Java EE 6 Programming Model Explained

標題通り、JavaEE6のプログラミングモデル全般のお話しでした。中国訛りの英語を話される方だったので、少し聞き取りにくく、同時通訳の力を借りることになりました。
内容的には既に知っていることも多かったのですが、次のような内容が印象に残りました。

  • パッケージングについて、実はJavaScriptのリソースとかもJARに固めることができる。
  • コンテナがどんなPOJOも管理できるようになり、それがManagedBean。実はEJBもManagedBeanの一種。
    • これはインクリメンタルなプログラミングモデルをサポートしていると言うこと。例えば、最初はManagedBeanで作り始めて、途中からEJBのTx管理の機能とか欲しくなったらアノテーションを付け替えてEJBに昇進させることが可能になる。
  • CDIは最も進んだDIフレームワークだ!
  • 柔軟な拡張機能を利用してより強力に (ペガサスの絵を出してました)。ServletとCDIが拡張可能。Servletだとコンテナの初期化時に処理を噛ますようなこととかができる。

正直に白状すると、実は裏番組であるJavaFXのセッションの内容がずっと気になっていました。
TwitterのTLを見ていると、ライブコーディングで作成したJavaFXアプリケーションをiPadに載せて動かすデモをやっている様子の実況が流れてきていました。すごい見たかった...。

Project Jigsaw: Putting it all Together

Lambdaと共にJava8に導入予定のJigsawのお話しです。実はこれまでJigsawについてはきちんと調べていなかったので、このセッションを聞いて結構衝撃を受けました。実はLambdaよりも遙かに大きな変革のように思われます。


説明何等級4.0

Project Jigsawは一言で言うとこれまでのJARを使ったJavaのパッケージングの仕組みを根底から見直そうというものです。
JARを使ったパッケージングには色々問題があります。依存性の指定ができないし、バージョニングもできないので、このあたりMavenさんの力を借りて何とかしてきたのが実情です。
そこで、新たにモジュール宣言の仕組みを導入して、これらの問題を解消することを目指すようです。

module-info.javaにモジュールの内容を宣言するのが基本になります。ここで自分のモジュールの定義やバージョン、依存性といったものを記述します。外部に公開する範囲の指定とかも可能になります。
パッケージングはjmodファイルという単位でパッケージすることになり、これはdebとかrpmとかに相当するものです。また、ネイティブ� ��ッケージ自体にも対応して、debとかにコンバートができるようにするとのことです。

また、これによりJDK自体もモジュール化して、desktopとかheadlessとかのくくりに整理するようになるそうです。これで、本当に必要なモジュールだけダウンロードして、ラインタイムをスリム化することが可能になるということでしょうね。組み込みではこれは重要ですねえ。iOSとかだと規約の関係上、JREごとアプリにぶち込む必要がありますし...。

このような感じで実に大きな変化だと思いました。自分的にはこの変化の大きさはLambdaの比じゃないです。
ネイティブのパッケージもサポートするというのは面白いですね。特にデスクトップJavaに効いてくると思います。デスクトップJavaアプリケーションをOSのパッケージャー経由でインスト ール、アップデートできるようになるというのは大きいと思います。

How to Write Low Latency Java Applications

低レイテンシなアプリケーションを作るためには何を知り、どう作る必要があるのかを詳しく説明してもらいました。とても面白かったです。
アプリケーションが低レイテンシになるようにチューニングするには、まずJVMの仕組みの部分を知った上で、測定が重要です。
知るべき仕組みとしてGCとJITの解説を、最後に測定を支援するツールの話をしてもらいました。

GCについては、世代別管理の説明をした上で、その特徴を踏まえた上でコーディング上で注意すべきことの解説を行っていました。

次にJITについての解説があり、一番効果が大きいのはメソッドのインライン化。で、そのために注意すべき点として次のようなものを挙げていました。


"あなたは、任意の追加のテストと考えることができます。"
  • 抽象メソッドはインライン化の障害になることがある。
    • 実装が1つしか見つからないときは抽象化を解くけど、新たに実装が見つかったら最適化していたのを戻しちゃう。
    • 抽象メソッドの追加実装の探索はスローダウンを招く可能性が。
    • 巨大なポリモーフィック呼び出しはインライン化の機会を奪ってしまう可能性がある。
  • とは言え、気にしすぎても仕方が無いので最も自然なフォームで書くようにすればいいよ。ほとんどのケースでよしなにやってくれるし。(^^;)

最後に計測を支援するツールとして、JRockitのツール類やGC Histo、Solaris Studioのアナライザなどを紹介していました。とにかく計測が大事だと何度も繰り返していました。

とても勉強になりました。ただ、低レイテンシを重視する場合にはここに挙げたことを考慮する必要がありますが、レイテンシだけが重要とは限らないことには注意が必要でしょうね。レイテンシよりもスループットの方が大事な場面も多いですし。

ForgeとArquillianを利用したJava EEアプリケーションの迅速な開発

JBossの方の発表でした。前半はJavaEE6のプログラミングモデルの解説、後半はJBoss Forgeの解説でした。何とArquillianの話はここではありませんでした。別のセッションでその話をするので、そっちで聞いてねーということで。Arquillianの話の方を楽しみにしてたのに...。

JavaEE6の解説については、他のセッションと内容がかなり被っていました。
CDIのDeltaSpikeの話は興味深かったですね。これはベンダーニュートラル (Seam3 + CODI + CDISource) なCDI拡張機能を提供するというオープンソースのプロジェクトです。こういうのが出てくるということは、CDIも徐々に浸透してきているということでしょうか。
あと、JavaEEサーバーはもう重くないよ、みんな秒単位で起動するよ、の話も印象に残っています。

後半はJBoss Forgeをライブデモを交えて紹介していました。これはSeamにあった、Seam Genの進化形のようですね。
要はRailsやSpring Rooのように、コマンドラインで対話式にアプリケーションの構成要素を追加していけるというツールです。
まあ、この手のツールにある機能を一通り備えているな、という感じでした。ライブラリを色々選べるのがよさげでした。

UI Controls and Charts: Drag-and-Drop, Filtering, Sorting, Table Hookup with Charts

申し込んだ時点ではJPAのセッションに申し込んでいたのですが、それはパスしてこちらの方にキャンセル待ちで入りました。
JavaFXで提供されているコンポーネント類の解説と、JavaFX2.1の新機能の解説もありました。
解説をされたのはFX Experienceによく記事を書かれているJonathan Gileさんだったのですが、めちゃめちゃ早口で、すごいペースで飛ばしたので、かなり時間が余り、QAでいっぱい質問が飛んでいました。

まずはJavaFXで用意されているUIコントロール類を一通り、ざっと紹介していました。でも、JavaDocレベルの解説をざーっとされるよりも、いくつかにポイントを絞って深く説明をして欲しかったですね。特にListやTableコンポーネントで必要となるCellFactoryやCellValueFactoryの話は詳しくすべきだったと思います。なじみのない人には難しい概念なので。


ビジネスキャリアの中で自己を評価する方法

続いて2.1の新機能の話ですが、一番驚いたのはMacのシステムメニューバー対応の話でした。これは当分無いだろうと思っていたのに、こんなに早いタイミングで対応が来たので面食らいました。
というか、個人的にはこれに対応するくらいなら他に対応することいっぱいあるだろー、と思ったのですが、まあ、熱心な林檎信者にとってはとても重要なことですからねえ...。

時間が余ったのでQAでは質問がいっぱい飛んできました。大抵は「○○はありますか?」という質問に、「まだ無いんです。JIRAでリクエストあげてね」という回答だったのですがw 欲しいものがあればどんどんアピールしよう、とのことでした。
自分はMacのシステムメニューバーについて質問しました。というのも、JavaFXではSwingとメニューの扱いが異なるからです。Swingの場合、メニューはコンテンツ区画とは別になっていていますが (ここの解説を参照) 、JavaFXの場合はMenuはシーングラフ上に載ります。なので、Macでシステムメニュー化した場合にどう扱われるのかが気になりました。で、答えは「Macのシステムメニューに設定した場合は、Menuはシーングラフから抜けてしまう」とのことでした。なのでWindows、Mac両方で稼働させる場合にはレイアウトに注意が必要ですね。

Learn how the JVM is fundamental to our architecture.

TwitterのRob Bensonさんによる、Twitterのシステムの中で中核とも言えるタイムラインを捌くシステムについての解説です。
化け物級の大量メッセージを遅延無く処理するためにどのようなアーキテクチャになっているのか、結構突っ込んでお話ししてもらったように思います。めちゃめちゃ面白かったです!

Twitterはとんでもない量のツイートが日々サーバーに飛んできています。しかも世界のどこかで何かイベントがあるととんでもなくスパイクします。バルスとかバルスかバルスとかwww
そういうのに耐え、リアルインフォメーションを提供するためのプラットフォームを作ることがTwitterの目標だとのことです。

そのTwitterのアーキテクチャですが、一番下のストレージから、モデル、コンポジション、ルーティングの4層構造になって� �り、また、それぞれのレイヤもユーザーやツイート、タイムラインなどのサービスに応じたモジュールに分かれているようです。最初このあたりはRailsを使ったモノリシックな構造になっていたのが、RubyではどうしてもGCやスレッドモデルに限界があったため、少しずつJVMに置き換えていったとのことです。
Twitterはすさまじい同時接続と大量のI/Oが発生しますが、データの永続処理はそれに比べると少ないという特長があるそうです。なのでサーバーのワークロード管理が重要であると。
Javaは最高レベルのJITと成熟したコンカレンシーモデルを持ち、Web層で採用しているNettyのようなプロダクトも豊富であるところが良い点であると評価していました。ただ、GCなどメモリ管理部分については改善の余地が有り、OpenJDKに参加して作� �するようになったということだそうです。


続いて中核となるFinagleについての解説に入りました。これは関数型、非同期のRPCサーバーで、分散型サーバーに求められている接続プールやリトライと言った機能も備えているとのことです。GitHub上でOSSとして公開しています。中間レイヤのサービスの類はみんなこれが見ているそうです。

そしてこれがタイムラインをどのように捌いているかの説明になりました。タイムラインはツイートIDの時系列リストで、140Mのアクティブユーザー、秒間200Kのクエリが発生するというくらくらするような世界です。そんな中でクエリのレイテンシはピーク99%で4msに押さえているとのこと!
ツイートを行うと、フォロワーのタイムラインに対してメッセージをファンアウトするようになっていま� �が、レディー・ガガになるとそれが2000万を超えたりします。これをリアルタイムで配信する必要があります。全体で1分あたり1800万のツイート配信を行っているそうですが、それでも配信のレイテンシは3.5秒程度に押さえている。...すごい話です。

クライアントからツイートが送られてくると、プロキシが受けてAPI経由でキューに投入します。この時点でクライアントに応答を返すようです。それをツイートデーモンに渡してファンアウトしていきますが、フォロワーが多い場合は4000ごとに配信サービスに渡しているようです。配信されたツイートはタイムラインキャッシュと呼ばれるキャッシュに入ります。タイムラインのデータは99%インメモリで処理しているとのことです (Redisを使っているとのこと)。
タイムラインの読み込みについては、タイムラインを担当するサービスを経由して先述のキャッシュから読み込んできます。キャッシュ上のタイムラインのデータはパーティショニングを行っているようです。
こんな感じで役割に応じたサービス間を渡り歩いて処理をしていきますが、これら全てのサービスの中核としてFinagleがあり、ルーティングを行っています。データはThriftでやりとりしているとのことです。

こんな調子でとっても中身の濃い話を時間いっぱいして頂き、分散処理アーキテクチャについてのとても良い勉強になりました。とっても楽しかったです。

スペシャルセッション

2日目のスペシャルセッションはコミュニティ活動についてのパネルディスカッションでした。
最後だったということもあって、割とまったりとした感じでコミュニティ活動の意義について語り合っていました。

打ち上げ

最後にJJUG主催の打ち上げにも参加してきました。普段Twitterでしかやりとりしていない人達ともご挨拶ができて良かったです。
そして何と言っても最後の寺田さんの胴上げ! 寺田さんは日本のJava界のOracleに対する不満を正面から受け止め、少しでも良くするために奔走されていたと思います。ホントに良い仕事していました。

忙しい中2日も空けての参加でしたが、参加してとっても良かったです。様々な刺激を受け、色んなことを吸収できたと思います!
最後に1日目に続いて当日のTwilogのリンクを貼っておきます。やはり大半がJavaOneについてです。



These are our most popular posts:

第 1 章 JTAG テストの必要性

誰でもそのデバイスに内蔵されているシリコン製のテストプローブを用いたボードテスト. を行うことが可能 ... 加させている一方,高密度実装の需要からパッケージの小型化も 進んでいるのが現状と言. えるでしょう. ... ようにテストプローブを押し当てるテストパッド の配置を工夫するなどの対策を行って何. とか凌いで .... TAP用シリ/パラ変換(JTAG 専用IC) ... SPARCベースドコントローラ(SparcLITE) ... Texas. Instruments. Toshiba. Xilinx. 型. 名. PGT200. VGT450/50. VSC350/370/450. PPZ3032/5032. SAA7201/ 5/6/7 ... read more

半導体用語集

半導体用語集といえば、40年以上アナログ回路の開発をし業界をリードしている アナログ・デバイセズの半導体やエレクトロニクス技術に関する用語集。今後も用語集の コンテンツを増やしてゆく予定です。是非、アナログ・デバイセズ半導体用語集をご活用 ... read more

価格.com - プリメインアンプのクチコミ掲示板

トピ主(私)の不徳の致すところでどちらも途中で何度も話が「脱線」しているのは申し訳 ないのですが(^^;)、少しでも ..... あとは、特殊な販売ルート向けの製品をそれだけでは 仕方がないので一般販売をしてるとか、開発に拘りすぎて高額になっ .... : amazon.co.jp/SANWA-SUPPLY-TAP-AD2N-%E5%A4%89%E6%8F%9B%E3% 82%A2%E3%83 ... よく オーディオ用タップに交換したけどタップの効果が出てないや イマイチは振動からくる歪みがノイズと一緒に出てるわけです。 テストした結果 ... read more

Agilent E1966A 1xEV-DO テスト・アプリケーション

RTAPでは、チ. ャネル・パワー、波形品質、コード・ドメイン・パワー、Txスプリアス・ エミッショ. ンなどの測定が行えます。 ... オプション103でサポートしているFMCTAP およびRMCTAPマルチキャリア・テスト・ .... タイムベース基準と同じ .... Limited TAP モード ... read more

0 件のコメント:

コメントを投稿