Category Archives: 勉強会レポート

Java One Tokyo 2012 (#JavaOneJP) に参加しました

2012年4月4,5日に開催されたJava One Tokyoに参加させて頂いてきました。タイトルは "Moving Java Forward" ということで、Javaはどのように前進しているのでしょうか?

感想

このエントリは最後グダグダになるので、いきなり冒頭から総括します(^^; メインの内容は去年のJavaOne(サンフランシスコ)の報告会として開催されたJJUG CCC 2011 fallで得られた情報とかなりかぶっていました。本場に行けば半年前に情報が得られたわけですね。しかし、Oracle本社からキーパーソンが来日していることはやはり重要なことです。質問の機会もありますし、彼らの熱意を感じることができました。参加者も全国からJava好きの人が集まっているというのが大きいです。さすが祭典です!

その他、一般公募セッションやハンズオンなども開催されているので、5000円ほどの参加費用を払っても参加する価値は十分だったと思います。

だって7年ぶりですし!次は7年後でないことを願います……。

僕が参加したセッション

1日目(4/4)

  • Strategy Keynote
    • 途中から参加したらサテライトに回されました...
  • 長期運用を実現するNECのEnterprise Java
    • これが噂に聞くえすあいあーというものかー
  • Java EE Web Container in the Cloud -What's New in Servlet 3.1
    • Servlet 3.1 から NodeJSみたいなイベントハンドリングなプログラミングが出来るみたいです。
  • The Heads and Tails of Project Coin
    • 後述
  • Pragmatic Cloud and PaaS with Java EE 7 (and GlassFish)
    • 難しかった
  • Project Lambda: To Multicore and Beyond
    • 早く使いたい!
  • JAX-RS 2.0: What's in JSR 339?
    • クライアントもサーバもJAX-RSでつなげる!ということくらいしかわからなかったorz
  • トラブルシューターの頭の中身 〜7年間のJavaトラブルシュートサービスから
    • 面白かったです。後述
  • Special Session
    • 面白かったです。

2日目(4/5)

  • Technology Keynote
    • 途中から参加したらサテ(ry...
  • ビッグデータ時代におけるJava技術
    • ICTとか「ひゅーまんせんとりっく」とかいうキーワードが聞こえましたが、気がついたらセッションが終わって(ry
  • [一般公募セッション] Java SE 7 InvokeDynamic in JRuby
    • 難しかった
  • Project Jigsaw: Putting it all Together
    • 結局Mavenと何が違うんでしょう?JDK自体がモジュール化するらしくてjarがjmodになる!?
  • How to Write Low Latency Java Applications
    • 後述
  • UI Controls and Charts: Drag-and-Drop, Filtering, Sorting, Table Hookup with Charts
    • JavaFX系のセッションは面白いと聞いて、参加したら文字ばかりでした。。。JJUGのskrbさんのセッションと被っていた印象
  • The Future of JavaScript in the JDK
    • あまり話題になっていないけど個人的にすごい興奮しました。後述
  • Special Session
    • しごとないしょくしていてあまりきけなかっ(ry....

心に残ったセッション

The Heads and Tails of Project Coin

前半はJava7で導入されたダイヤモンド演算子、String switch、Try with resourcesの紹介を、NetBeansによるデモを交えて紹介。大分コードが完結になって良いですね!早く使いたい!(もう使えます)

後半は、この言語仕様を導入するためにいかに苦労したかという話。自分のような初心者が横で「こうだったら便利なのに」などと簡単に言うけどいざ言語設計に落としこんでみると矛盾したりして大変なんですね。それをどのように解決したか!どこが難しかったかと、言語マニアの熱意が伝わりました。

Project Lambda: To Multicore and Beyond

これは以前から聞いていた話の通りですが早くJDK8でLambda使いたいな〜

トラブルシューターの頭の中身 〜7年間のJavaトラブルシュートサービスから

自分も年に何度か、原因不明の不具合に対処してきましたが、いきなりソースを精読したり、スレッドダンプ見に行ったり無駄なことをしている例そのものでした。
jmap, visualvmでヒープダンプも見ます!
ハイテンションの谷本さんとクールな江里口さんのペアが面白かったです。

How to Write Low Latency Java Applications

知らなかったのは、Finalizerを実装すると、GCの後に再度GCが走ってパフォーマンスを悪くするということでした。Effective Java 第2版には

ファイナライザの使用には深刻なパフォーマンスのペナルティがあります。私のマシンでは、単純なオブジェクトを生成して開放するのに要する時間は約5.6ナノ秒です。ファイナライザを実装すると、その時間は2,400ナノ秒に増加します。つまり…

と記載されていますが、理由までは書かれていませんでした。ちなみに、同書では、ファイナライザを使用する正当な理由はネイティブメソッドを委譲しているオブジェクトの開放の時と、明示的終了を呼び出した時の「安全ネット」の2種類のみとのことです。安全ネットを取るべきか、パフォーマンスを取るべきかで迷うところです。AutoCloserが導入されたJDK7ではその必要も低下しているでしょう。

The Future of JavaScript in the JDK

実は個人的に2日間で一番聞きたいセッションでした。Project Nashornとは、JDK6よりバンドルされているRhinoというJVM上のJavaScript実装を、再実装するというプロジェクトがJDK8に向けて動いているというようです。

このブログでも、ここでちょっと触れさせてもらいました http://d.hatena.ne.jp/s-ishigami/20111203/p1

発表の概要は、

  • JDK6からJVM上のJavaScriptが提供され、JavaからJavaScriptが動かせるし、そのJavaScriptからJavaクラスが使え、メソッドのoverrideもできる
  • InvokeDynamicの導入を受けてJVM8搭載の実装としてRhinoをリプレースしてNashornを開発中
  • Nashornはオープンソース化してOpenJDKプロジェクトに取り込まれる予定(時期は不明)
  • まだ非公開だけど、オープンソース化したらみんな試せる
  • Node.jsをポーティングしてJVM上でNodeのアプリケーションが動くようにしたよ!
  • Node on NashornではJavaのクラスも参照できる!

淡々とした発表なのに内容はすごく熱くないっすか!Java APIが使えるNode使ってみたい><;

こんなのは僕だけかもしれませんが、僕はJavaAPI大好きっ子で、ちょっとしたスクリプトを書くときは Rhinoスクリプトを jrunscript コマンドで書いています。JDKが入っているすべてのマシンでどのOSでも使い慣れたJavaAPIでスクリプトがかけて便利なんです。心配なのは、それらの資源がNashornでも使えるかってことで、終了後に時間があったので発表者のAkhil Arora氏に、たどたどしい英語で質問チャレンジしてきました。

Do scripts written for Rhino run on Nashorn perfectly?
(ここで「えっ?」というような反応をされたので)
I'm afraid my scripts for rhino don't run after JDK8.

というようなことを言ったのですが、話しながら、自分はBe動詞で話し始めたのか、一般動詞で話し始めたのか、単数形だったか複数形だったか、中学生レベルの文法で頭の中が混乱して、「a..Are,,Do,,,,Does, no Do ....(゚∀゚)アヒャ 」という感じでした。motto eikaiwa benkyo shinaito dame desune!

答えは

Yes, it "shuold" be run!

でした。望みの解答が得られても"Thank you" しか言えないのも情けないですねえ。

ひとまず、これからも安心してRhino(→Nashorn)用scriptを書いて行けそうです。

それから早くJVM上のNode書いてみたいなー。

自分が参加しなかったセッション

今回は勤務先の会社の後輩S氏と一緒に参加してきました。彼に聞いたところ、JavaFXのセッションが全般的に熱いみたいです。やはり動く技術は楽しそうですね!彼にはJavaEEハンズオンを受けてもらってきたので、今後自社に最新標準技術を業務に取り入れてくれるよう動いてくれることを期待します。

飲み会とか

1日目の後の飲み会に参加してきました。大阪など全国からJava好きのエンジニアの方が集まっていてすごいです!普段TLの中でしか会えない有名な方と飲むことができたなんて、後輩S氏の口癖を借りれば「最高です!」

失礼ながら、皆さんリアルだと普通のおっさんでしたw
見た目おっさんなのに中身はすごいレベルの高いエンジニアが集まっている。
すごいエンジニアだけどお酒を飲むおっさんズ
Java One Tokyoすごいです。楽しいです。なんか Java One に参加していない人も結構いたみたいですが(笑)

結論

わあい JavaOne あ○り JavaOne だいすき!

BootCamp 2011 に参加してきました

去年はGDDの前日に会場と同じ東京国際フォーラムで行われましたが、今年はGDD会場の横浜ではなく、六本木のGoogleオフィスにて行われました。
DevQuizを100.0点で落ちた僕としては、せめて横浜に是非行ってみたかったのですが、六本木のような綺麗なところは滅多に行かないのですし、ましてや森ビルの高層階の、あまつさえGoogleオフィスに入れるということではもう刺激的すぎてお腹いっぱいです。(*´Д`*)

さて、参加したセッションについてですが、この案内の存在を前日に知ったので(告知メールがスパムに振り分けられていた!)直感で選びました。
https://sites.google.com/site/tokyogtugusersite/bootcamp-2011?pli=1

ハンズオン:Google Apps Script #gas1

Google Apps Scriptは、VBAのGoogle Docs & Spreadsheet版です。手軽にサーバーサイドアプリケーションを作るプラットフォームとしてはいいかもしれません。最近はGUIエディタも標準搭載していてこれって、明からさまにVBAを意識していますよね。。。?

開発環境は、ブラウザ上で動作し、デバッグ機能なども備えています。が、スプレッドシートも含めてちょっともっさりなのがなんとも残念ですね。通信の速さにも夜と思いますが。正直、Excel+VBAには大変うんざりしているので、GASには期待しています。

cronのようにタスクをスケジューリングしたり、メールを送信したりできるのは、Excel+VBAではできない強力さですね。ハンズオンでもやりましたが、URLからJSONを取得したり、PDFを出力したりもできるので、かなりのポテンシャルがある技術だと思います。

気になるのは、シートの共有方法ですね。会社で導入するとして、共有フォルダ的にトップダウン的に管理できるのか、Groupなどと連携できるのかどうかが気になりました。標準のGoogle Docsは、個人個人ベースの共有管理だと思いますが、それだと属人的すぎますよね?

セッション:「はじめての Chrome Extension」 #chr1

Chrome Extensionの作り方。非常に簡単に作れると思います。Chrome Extensionというと、URLバーの右に並ぶボタンが特徴的だと思うのですが、それだけではなく、いろいろなイベントをフックして、処理をすることができるようです。

これも開発が簡単で、可能性が広い技術ですね。

セッション:「App Engine 倹約のすゝめ」 #gae1

「AppEngineが高い苦情を私に言われても困ります」と、うさぎアイコンの中の人が言っていました。

AppEngineは以前から追いかけてきたのですが、実案件経験がないからか不勉強で、インスタンス内で並列にリクエスト処理ができず、簡単にspin upしてしまうということを知りませんでした。
Concurrent RequestsをONにし、インスタンス数を制限することで、場合によっては無料枠内か、かなり安い金額で運用が可能みたいです。

個人的にConcurrentというとConcurrentHashMapと連想してしまいますが、関係ありません。

ハンズオン:「新聞風の1ページを作ってみよう!」 #chr2

HTML5を使って新聞記事のような、美しい段組をしたニュースページを作ろうというハンズオンでした。HTML5というと、Canvasとか、WebGL、WebStrageとか、WebSocketなどの技術(これらは厳密にはHTML5ではありません)を連想してしまいますが、硬派にも、headerとかsectionとかarticleとか、HTML5マークアップと、CSS3を利用した近代的Webページ作成術の実践方法でした。

普段こういう仕事はデザイナーさんにお願いしてしまうのですが、自分も数年前までは大学の部活の「ホームページ」を作成していたので、多少のCSSやマークアッピングは出来るだろうと思っていたのですが、しっかりその傲慢さはくじかれました。

最近のWebページ作成は、CSSセレクタを多用して、HTMLマークアップを汚さずにデザインを調整するのが標準のようです。これについては違和感があったので、発表者の方に後の懇親会で質問しました。

CSSセレクタは難しいですね。こんなのを平然と書くんですか!最近のWebデザイナさんたちは。。。(;´Д`)

div#container > div:nth-of-type(3) > div > aside p {
...
}

CSS3は、このCSSセレクタがより一層充実して、今までにもましてマークアップを汚くせずにデザインを実装することが可能のようです。日頃から、Webデザイナーさんといえど、HTMLやCSSが何を出来るのか知らないと何も作れないので、HTMLコーダという中間職種の存在には否定的に思っているのですが、こんなの書いているんですね。ちょっとマークアップが変わるだけで動かなくなるような。。。デバッグも大変だ!

さて、このCSS指定のあり方について、僕は疑問があると先ほど書いたのですが、これについてはまとまった内容になるので別エントリにしようと思います。

懇親会

すべてのセッションが終わるとそこには用意されたビール、ピザが用意され、スピーカーの一人あんざいゆき(yanzm)さんの声で「乾杯」でした。(どこまで至れり尽くせりなんだ!)

立食パーティー形式は座席という制約がない分、話題を見つけるまで人見知り気味の人はキョドって徘徊してしまいます。なんとか1時間徘徊したあとで、shin1ogawaさんと、HTML5ハンズオンのいちじょうさんに話しかけることができたので良かったです。

帰り道も、一緒に麻布十番駅まで歩いた人と、テストとプログラムの品質について熱く語ることができたので非常に楽しかったです。勉強会に行くと同じようなことを考えている人が本当に多くて面白いです。仕事だと、何故かなかなか会えないんですけどね。なんででしょうねえ。

小学生の作文みたいになってしまいましたが、勉強会のレポートなんてこんなもんでしょう?中身のあることは別エントリにします。それでは、みなさんも勉強会ライフをエンジョイしましょう!

PostgreSQL Conference 2011 Tokyoに参加してきました。

簡単ですが、レポートします。

有料カンファレンスですが、チケット完売ということで、一部セッションは立ち見でした。どんな人が来るのかと思っていましたが、参加者は、スーツの人も私服の人もいました。日本PostgreSQLユーザ会は頑張っているんだなという印象を受けました。

PostgreSQLを活用した国内初の流通小売業向けSaaS型基幹システム

 当初はポスグレ7系を利用していたが、8.4に移行したという話です。
 かなりのデータ量を扱っているようで、vaccum reindex reanalyzeをするだけでも、ユーザ画面に影響が出ないようにするため、手動でテーブルごとに行う作業が9人で216時間を要するそうです。(これって、9*216時間という意味なのか、合計なのか不明)これだけ大きなデータだと、移行にpgdump,pgrestoreを使うとダウンタイムが長すぎる…そういうことで、Slowlyを使った非同期レプリケーションで移行する方法を採用したとのこと。7系から8.4に移行したことで、600分のバッチ処理が200分で処理できるようになり、ユーザからの問い合わせも減ったそうです。

 相当苦労したということが伝わりました。貴重な話を聞けたと思います。

PostgreSQL 9.0 ストリーミングレプリケーションの実力

 PostgresQL 9.0のレプリケーション機能のベンチマーク発表です。レプリケーション環境を構築して台数を増やしたとき、参照は早くなりますが、更新は遅くなります。その更新系の性能低下は、ほぼ一次関数的らしいです。(2〜12ノードにおいて)
遅くなる原因:

  • CPUでもロック待ちではない
  • 大きな要因は見られない

⇒ IO衝突、ネットワーク混雑、WALセンダーのCPU取り合い等が複合的に起こっているのでは?とのこと。

PostgreSQL アーキテクチャ入門

 ものすごい人気セッション!立ち見、満員電車状態でした。(´Д`;)
 名前だけは聞く程度だった「共有バッファ」「postmaster」などの意味がわかりました。
 パフォーマンス改善の手順について、log_min_durationオプションや、pgFouineを今度使ってみようと思いました。

徹底比較 PostgreSQL vs MySQL

 日本での利用率でMySQLがPostgreSQLを上回ったらしい。負けた要因は!?

  • 「PostgreSQLが遅いというのは事実ではない」(MySQLもInnoDBを使えば劇的に速くはない)
  • PostgreSQLはJIS2004対応!一方、MySQLの日本語対応はあまりやる気がないらしい。
  • Oracleに買収されてから、MySQLの商用版が高くなったらしい
  • レプリケーションはMySQLの方が就實している。PostgreSQLはこれから実績が増えることを期待!

結局どちらが有利というわけではなく、得意不得意がありますということでした。全体的にレプリケーションの話が多かったです。トランザクション周りがポスグレの方が充実しているという話が聞かれなかったのが予想と外れました。

書き込みスケールを実現したPostreSQL-XCクラスタ

 PostgreSQLサーバを複数並べて、更新系も参照系も分散できるクラスタ環境を作る技術で、アプリケーション側からは、ほとんど普通のPostgreSQLに見えるということです。夢のようです。
 トリガーと、GTM(トランザクション制御ノード)のフェイルオーバー機能が開発中とのことです。
 テーブルごとに、レプリケーション(参照が速くなる。マスタ向け)するか、テーブル分割するか(更新が速くなる。トランザクション向け)を選択するらしいです。
 開発も精力的に行われているみたいです!今後に期待!

Let's PostgreSQL

 こんなサイトがあったなんて知らなかった!
 http://lets.postgresql.jp/

ライトニングトーク

 SQLはLLだそうです。かわいいですね。