2008年12月3日水曜日

SunTechDays 12/3に行って来た

SunTechDays 2008 in Tokyoに昨日に引き続き2日目に行ってきました。

ということで、本日の勝利品〜!

セッション毎に投げられるTシャツ一枚と、帰りにもらったdukeキーホルダー(LEDライト付き)と、VertialBoxという名の(多分)ティッシュ。

ずっとセッションに入っているのに、なかなかセッション毎に投げられるモノをGETできなくてですねぇ... でも本日も一つGETできて良かったです。

さて、2日目はやっぱり1日目に比べると人は少なめでしたね。
なんだか、日本のエンジニアはあんまり熱心じゃないみたいに思われちゃたんじゃないだろうか?となんとなく心配してみたり。。。
逆に言うと、海外では平日でやってもエンジニアが集まるんですかねー。海外のエンジニアの方が自分のスケジュールを自分で決めるぐらいの位置の人が多い...とか?

あと、セッション中に挙手を求める質問とかあるんですが、同時通訳を挿んでるからタイミングが客席の反応は結構遅れるんですよ。
「なんか、ぱらぱらと時間差で手が上がりましたねー」って苦笑いしている講師がいたけど、同時通訳だって事気づいてよー!
しかし、同時通訳って大変ですよね。英語と日本語って文章の出だしの単語が違うから、通訳も文の最後まで聞かないと日本語に変換しにくそうで..
しかも、セッションの時間が少なくなって講師が早口で飛ばしている場合なんて..そりゃもぉ大変でしょぅ。
あ、そういえば、普通に翻訳していた後に、"ちょっと落ち着けや.."と言う声が聞こえてプチっと一瞬翻訳が途切れた気がしたんですがww
あれは講師が言っていた翻訳だったんでしょうか? それとも翻訳者の本音?!?!
終わり頃になると、翻訳者のため息が聞こえたりもして...ちょっと笑っちゃいました。

では今回も各セッションを簡単に。

1-G-1
基調講演
予定していたMatt Thompsonがキャンセルということで、Solaris CTO の James Hughesの講演でした。内容は、Hardware,OS,Programのトレンド。
2004年〜 クロック数が横ばいで成長していないのをみて、ムーアの法則の時代が終わった?という人がいるけどそれは違う。
MultiThread,MultiCoreが進化している時代であって、ムーアの法則はまだ生き続けてる。
つまり、ThreadCount数が高くなっていく傾向がTrendであり、この先数年はこのまま成長して行くだろう。
そんな中、プログラマーはこの事を意識せずに アプリケーションを作成する=パラレル化できないようなアプリケーションを作成する のは良いはずがない。
アプリケーションで全くスケールできない というものは私が見た限りない。
...という話でした。
中で、Goldilocks Application という単語が出て来たんですが、このGoldilocksという言葉の横に3匹の熊の挿絵があって、「日本の方はこの話をご存知とお聞きしたので...」とスルーされてしまいました。皆知っているんですかねぇ?私は恥ずかしながら知らないんですが。
というので、ちょっと検索してみました。
多分本はコレ。
内容としては、Goldilocks(ゴルディロックス)の女の子が留守にしている熊の親子の家に迷い込んで、スープを飲んでみたら、お父さんのスープは、熱すぎて飲めず、お母さんのスープは、ぬるすぎて、子供のスープが丁度よく。美味しい。椅子やベットも子供のものが丁度いい。 ってものらしいです。つまり、「ちょうどいいってのがいい」って話。
どうやら、経済用語にもなっているらしく、有名なんですね。。おやまぁ。

インフレ(熱すぎる)ではなく、デフレ(冷たい)のではなく、適正(丁度いい)
ところをGloldilocks って言うらしいですよ。


2-j-1
Sun SPOTs:Toy for Geeks
Roger Meike
Sun SPOTsというのは、無線センサーデバイスです。
こういうセンサーを使って好きなものを作成するのって憧れません?私は憧れるんですよねー。自分で作成できるものがPCを抜け出せるのはいい!昔から好きなんですよ、工作がww
で、このSunSPOTsはJavaを知っていれば出来るそうで!すっごく楽しそうです。
自動車を運転するゲームをWiiみたいに端末を動かすことによって動かしたり、webcamでペットの犬を見て声かけて来てくれたら餌を与えるようなものを作ってみたり、Twitterへメッセージ投稿してみたり。
また、真面目なプロジェクトもいくつもやっているようで、塩田でダメになった土地をもとに戻すようなものも現在進行中だそうです。

サブタイトルの Toy for Geeks ってまさしくそう! んで気になって値段を見てみたら、Sun SPOT Java 開発キットベースステーション x1、ワイヤレスセンサーデバイス x2 つまり3台ついて 76,500 円 。
そうかぁ...おもちゃにしたら高いけど、買えなくもない微妙な値段www

なにはともあれ、この講演者がカッコいい! 思わず検索したけど、このRogerって人じゃないと思うんだけど。。若かったし、黒髪だったし。。
女性必見!って書こうとしたんだけど名前分からないよぉ。。ヤラレタ。


2-j-2
Lightning Talks
「Javaの世界で有名な方ばかり集まってます!」いう司会のもと始まりましたが、顔ぶれみると確かに知っている名前ばかり。
というか、JavaExpert#03に記事だしてるjava-jaの人が集まった!?
というか、それならば事前にこのメンバーの名前をセッションの予定に入れておけばいいのにー。もっと人集まっただろうに。
あ、YoshioriさんがMavenコマンドでJythonを使うプラグインを紹介されてましたよ。

2-j-3
AMD Technical Session:Achieving Better Performance For Your Java Application
AMD社の方のセッションでした。
なぜハードのメーカのAMDが?というのは、CodeAnalystというものは、そのEclipseのプラグインとかをオープンソースで提供しているからのようです。http://developer.amd.comから見れるようですよ。知らなかったですよ、存在も。

ハードの機能を最大限に引き出すソフトの開発は...って視点からの話でした。

ハードが弱い私として認識したのは、
・チューニングとか考えるんだったら、とりあえず最新のJDKを使っとけ!良く知らずにあれこれ触らない方がいい。特に、J2SE1.6以降ね
・深く知らない人がスレッドプールやキューを自作しちゃダメ。パフォーマンスに影響がでるから。
・ベンチマークの結果は、自分のアプリと関連のある内容の結果で無いと全く意味無し。
・適切なデータ構造を選択すること。Elementが固定数ならArrayとか。
・ParallelArray...JDK7より入った。基調講演の話も踏まえると使って慣れといた方が良さそう。
かな。


2-j-4
Developping Web Applications using Comet and Ajax
Cometについて...でした。私は思いっきり「コメット」と読んでますが、講師の人は 米!って感じの発音。
Cometは一番最初のトリガーはクライアントからになる。まぁ、プログラムテクニックの一つ。

クライアントからみて、非同期に勝手に動作してくれるように見えるものとしては、大きく分けて3つある。
  1. Ajax
    Ajaxで一定間隔でサーバに最新の情報をとりに行く。
    この場合のデメリットは、無駄に通信が発生してしまうこと、取得データはリアルタイムに最新にはならない。

  2. AjaxPush(Long Polling)
    一番最初のクライアントのアクセス時に非同期アクセスを行い、常にコネクションを張りっぱなしにしておく。データが更新されたらサーバからクライアントに送る。これにより、常に最新の状態になる。

  3. AjaxPush(Streaming)
    1GBなどの大量のデータをダウンロードする時には、少しずつ返す...時のパターン。
    Long Pollingと同じように常にコネクションを張りっぱなしの状態で使用。


下の2つがComet.

スケーリングできるのか?という問いには、NewIOのnon-blocking sockets.
Cometは、Tomcat/GlassFishで使える。
GrassFishでは Grizzly(グリズリー) comet Frameworkというものを使用する。

LongPollingを実装するためのベストプラクティスとしては、最初のアクセス=LongPollingを開始するアクセスは doGet で行ない、それ以降の処理は doPostで行なう。


2-j-5
Improving JavaPerformance
SunのJavaでのパフォーマンスチューニングをする時のお話でした。
JVMのオプションとして、StandardOptionの他に -X Option, -XX Optionがありますが、その中でチューニングの際に使えるものの説明でした。
ちなみに、-XX Optionは、JDK1.4の時には159個だったらしいんですが、J2SE6で410個、J2SE7では480個と、爆発的な追加が行なわれているようです。
説明中も大量のOptionが出て来て、ここに書ききれるような感じじゃないくらいww
中にはJ2SE5やJ2SE6では標準で設定されているようなものもあって、こぅいぅのを検討する前に最新のJDK使った方がまぁ安心だねって感じ。

ちょっとメモしたのを書いておきます。
(間違っていたら指摘してください〜 ちょっと自信なし)

MultiCore,MultiThreadで同じデータを扱う時に、各スレッドで同じポインタを参照していると競合して遅くなる場合がある。そこで別々のポインタにさせるのは
-XX:+UseTLAB。
Eden領域でのサイズ指定は
-XX:ResizeTLAB
-XX:TLABSize

Young領域
-XX:+UseSerialGC ... SerialCollectorを使う時。よほどでない限りこれで十分。
-XX:+UseParNewGC ... ParallelCopyCollector。並列でCopy作業してくれる。Java5以降はデフォルトで設定あり。
-XX:ParallelGCThread={n}...GCをするCPUの数。デフォルトではそのマシンのCPUの数。

Old領域
-XX:+UseParallelOldGC...ParallelCompactingCollector。Java5Update10で導入
Compactingはバラバラの位置にあるのを一つにまとめること。一つにすると、速度も早くなるし不具合も出にくくなる。でも一カ所にまとめるにはCopy作業が必要で、これはこれでコストはかかる。

-XX:+DisableExplicitGC...GCの実行を止める。


最後の方はもぅ集中力が保てなくて、メモるのを挫折。無念。
明日はいかないので、SunTechDaysは今日で終了。面白かったけど疲れたー。
普段こんなに講義を聞き続けることなんかなかったからなぁ。
• • •