JJUG CCC 2011 Spring に行ってきました

正確には日本Javaユーザグループ Cross Community Conference 2011 春、という感じでしょうか。
http://www.java-users.jp/contents/events/ccc2011spring/

仕事の状況にちょっと後ろ髪をひかれつつ、こういう場に参加できることのほうが価値があり、仕事は別の日にちょっとがんばればいいや、ということで。

G-1:基調講演2

ざっと捜したところで発表資料は見つからなかったので、あとで。
丸山先生の発表資料はけっこうさくっと出てくるような気がするのだが。

Evernote 上にメモっていたのは以下の2点。
 技術、デバイスコモディティ化とオープン化が重要。
 コンシューマ中心のビジネスモデルが必要。(たしか)BtoC ではなく C from B というか。
 利用から所有へ。

1/3 くらいは Android Bazaar & Conference 2011 でも話されていた内容でした。

G-2: 基調講演2

id:kkawa さんの講演。

計算能力の費用対効果は上がる。
人件費の費用対効果はそんなに変わらない。
ということは、いかに計算能力を使うか、という点が重要になってくる。

人間が対話的に同時に使えるマシンは数台だろう。
ということは、対話的というより、羊飼い的な管理ができなければならない。

自動化のさらなる拍車。
EC2 から RightScale(http://www.rightscale.com)
開発者向けのクラウド
Sauce OnDemand(http://saucelabs.com/ondemand)
DeviceAnywhere(http://www.deviceanywhere.com/)

非対話ビルド
MSからもコマンドラインビルドがでてきた
実行結果を機械可読にする。ビルドやテストレポート。
これからは、他のプログラムから呼び出される前提のプログラム、実行経過の機械可読性が増えるのでは?

環境プロビジョニングの自動化
開発ツールの自動化

こうなってくると

執事が必要。多くのサービスと潤沢な計算機を指揮する執事。
Jenkins はそういう位置づけ。

コミットと共有を分離
人間の使う端末で無駄なことはしない。テストはサーバでやる。コミットしないとできない?というわけで、コミットと共有の分離。
共有したいけど、共有したくない。コードレビューのときとか。全員ではなく一部の中で共有とか。

コミットされたら何も考えずにテストして、プッシュするとか。開発者はブランチにコミットするモデルとか。
サーバでできることはどんどんサーバにやってもらう。人間の時間さえ無駄にならなければレイテンシは問題ではない。

余談:バイナリ(モジュール)を共有するという流れ。大規模ソフトウェアの場合とか。

機械によるトレーサビリティの可能性。システム間に散在する情報を機械で追跡。

ソースはコミットID、バイナリはチェックサム
バイナリを使うたびにチェックサムをとっておいて、チェックサムを使って名寄せして情報を集める。

まとめ。
計算能力は増え続ける。
計算能力の新しい使い方が求められる。
クラウド仮想マシン、分散VCS、自動化といういろいろな技術の流れが後押ししている。

Jenkins はこういうニーズを吸収していく。

A-1:Java SE 7 で切り開く新しい Java の世界について

ラクルの寺田さん(http://yoshio3.com/)による発表。
A-1, A-3 の資料は http://yoshio3.com/2011/05/25/jjug-ccc-2011-javase7/ で公開されています。

寺田さんの発表は Java 7 (2011.7.7 リリース予定)で何が変わるか、というのを駆け足で見ていく、という感じでした。
最近、まじめに(?) Java のプログラムを書くことが減ってきた気がするけど、このあたりの話は面白かった。
たしかに catch をつらつらと書くのはめんどくさいです。
NIO2、いろいろとプログラムが楽に書けそうだ。

NetBeans は使ったことがないけど、これを機会にちょいといじってみようかなぁ、とふと思ったり。

A-2:Project "HotRockit"

ラクルの杉さんによる話。
あくまで現時点の話であり、始まったばかりでもあるので、この先変更される可能性はあるよ、という話。

2011.05.30更新:資料が公開されたということで組み込み。

Project HotRockit
View more presentations from Oracle Fusion Middleware


JRockit が無償で公開されたというニュース。
http://journal.mycom.co.jp/news/2011/05/20/022/ とか。

JRockit は、もともと BEA で開発。
BEA が Oracle に買収され、JRockit のみのライセンスがなくなったそうです。

HotRockit は、HotSpot + JRockit です。

Oracle が企業買収後にどのようなことを行うかについて、BEA を例に。
まず企業統合し、ブランド、ロゴを統一する。
その後、競合製品(Oracle Application Server と BEA WebLogic など)において、それぞれのいいところをとり、時間をかけて1つのものにしていく、という流れ。
もちろん、既存利用者のために、既存ソフトウェアの保守価格、期間は変わらないそうです。

あと、Oracle は紳士協定のような形でソフトウェアにライセンス縛りはしないそうです。
ので、評価(お試し)が自由にできます。が、実際に使うときはちゃんとライセンス買ってね、という感じでしょうか。

んで、JDK(Sun Microsystems)については、企業統合、ブランド、ロゴの統一は完了。
OpenJDK との関係、既存バージョンとの保守、アップデートリリースなどは変わらず、とのこと。

WebLogic のほうは1年半ほどかけて(たしか)統合したそうですが、JVM はさすがにそう簡単にはいかないということで、Java 9 (Java 8 が 2012年末ごろ?)くらいを予定として、とのことです。

JRockit の利点をざっと。
 パフォーマンス
 独自GC(Deterministc GC)
 Flight Recorder
 実行中のVMにコマンド送信
 プロファイラ
 メモリリーク検出

統合するとはいえ、上記すべてを無償で利用できるわけではないとのこと。
このあたりはソフトウェア企業なので察してくださいとのことです。しょうがないですね。

それぞれについて紹介されていましたが、つらつらと長くなりそうなので割愛します。

A-3:Oracle が考えるこれからの Java について

スライドは前出(A-1)の寺田さんのホームページに。
発表は同時通訳でした。

OracleJava をとても大切にしている。
JCP を改革したよ、という話。

新しい技術は GlashFish に取り込み、安定したら(?) WebLogic に取り込んでいくとのこと。
QAのときに、BEA 時代の WebLogic は新しい仕様をアグレッシブに実装したりしていたが、Oracle に買収されてからそれがなくなった気がするのですが、どうでしょうか?という質問に対して、WebLogic (商用)のほうについては、18か月(だっけか)というリリースサイクルに則り安定的に供給したいと考えている。先端仕様に関しては GlassFish のほうで行う、とのことです。

寺田さんもつぶやいていましたが、これまで Tomcat で十分だった Web アプリケーションにおいて GlassFish を使わない理由はない、とのこと。

Java 8 の話もされていましたが、メモ失念のようです。残念。

B-4:Node.js とはなにか / NodeConf 報告会

残る2つは Note.js 関連。
Node.js は前々から知ってはいますが、まだ実際には触ったことはないです。

最初は @bad_at_math さん(id:badatmath)による Node.js とは何か。
以下、メモしたものをつらつらと書きます。Node.js が生まれた背景というかなんというか。

C10K : クライアント 1万問題
Apache などは 1 client - 1 thread モデル。
メモリ効率を考えてみる。1 thread 20MB とした場合、10,000 thread だと 200GB
スレッドの接続・生成・破棄にもオーバーヘッドがかかる。

1 thread ⇒ シングルスレッドによる多接続 ⇒ イベントループ
という考え方になる。

Blocking I/O:
 プログラムは I/O 処理が終わるまで次に進めない。
 Disk、Network へのアクセスは I/O コストが高い(I/O 待ちが長い)

イベントループモデルだと、Blocking I/O は使えない。
というわけで、non-blocking I/O (非同期I/O)を使いたい。
⇒I/O 処理の終了をどのようにハンドリングする?
 ⇒イベントループの通知を利用
  ⇒具体的にはコールバックを使った非同期プログラミング
   ⇒呼び出しの引数にコールバック関数のポインタを渡し、終わったらコールバックを呼び出してもらう

同期するというのモデルを a is b とすると
非同期のモデルは a is b when b gets available である。

イベントループモデルの(?) HTTP サーバ:nginx, lighttpd

Node.js のアーキテクチャ
V8(Chrome の JS エンジン)+libev + libeio の上に Node.js があるイメージ。
Node.js の上にはサードパーティのライブラリが乗っかる。

V8 以外にも JavaScript エンジンは存在するが、なぜ V8 を採用したのか?
⇒組み込み前提で作られているので使いやすかった

なぜ JavaScript で実装したのか。
JavaScript は ファイルI/O、スレッド、DBアクセス周りが提供されていない。ということは、最初から非同期版のみを提供すれば、みんなこれを使ってくれる。
同期 I/O を(JavaScriptで)使ったことがある人がいないので、使おうとすると必然的に非同期 I/O を使うことになる。

ここで他言語における非同期 I/O について。
⇒メモしてませんでした。Ruby, Python, Perl, Java あたりの紹介がありました。

なぜ Node ?
 クライアントからサーバまで一貫して JavaScript で書ける
 敷居の低さ
 スレッド気にしない
 利用可能なライブラリはすべて非同期
利点
 HTTPがファーストクラス
 プログラムにサーバ機能
 多数の接続に対応(WebSocket とか)

最後に、サンプルプログラムを提示されていました。

つづいて、@Jxck_ さん(id:Jxck)による NodeConf への参加報告。
ブログのほうにアップされているみたいですので、以下、リンク。
http://d.hatena.ne.jp/Jxck/20110525

英語バリバリというわけではないそうですが、1人で行く行動力はすごいと思いました。

BOF-B-1:Node.js 日本ユーザグループによるLT大会

というわけで、最後は LT 大会。

1) @koichik さんによる、node-handlersocket

HanderSocket の話(B-3)は聞いていなかったのですが、MySQL を NoSQL のようにアクセスできる(らしい)HandlerSocket の Node 版クライアントの話でした。

苦労した点を質問されて、MySQL や HandlerSocket のインストールと答えられていました。
やっぱり環境構築ってハマりますよねぇ・・・

2) id:sugyan さんによる Enjoy Livecoding

http://d.hatena.ne.jp/sugyan/20110525/1306255207

Web 上で Live Coding をするためのシステム。
github で公開されているそうです。
サーバへの送信イベントは使用しているエディタがやってくれるそうです。
今は編集するのは1人のみ。複数同時編集については今後の課題だそうです。

3) id:yaakaito さんによるNODEもんのうた

http://d.hatena.ne.jp/yaakaito/20110524/1306246620

EBIFLY ← github で公開されているそうです

構成がはっきりとは理解できなかったのですが、iPhone 上の Safariデバッグするのってやりにくいですよね?
⇒というわけで、画面にアプリを組み込むと、画面の調整をリモート(PC上のブラウザ)で行うことでその修正がクライアント(iPhone)に反映され、リアルタイム(?)に調整することができます

というのが私の認識です。間違っていたらごめんなさい。

4) id:scalar さんによる Node で始める Device Side JavaScript

Kinect がひろった情報を受ける、という感じのもの。
デモがうまくいかなかった点については、後日動画をアップしていただけるみたい。

5) @y_sakamttio さんによる Nodeこじゃらしをしっかりつくろう

うごく猫じゃらしの画像を、iPad 側でタッチすると、サーバにその情報が送信され、反応があったことがわかる、という感じのコンセプト。
サーバ側で jQuery が使えるようにしたい、ということでいろいろ画策されているようです。

ねこじゃらしのイメージなど。
http://singen-zaregoto.com/?p=306


6) sleep-sort の話

お名前など失念(メモ忘れ)。すみません。
sleep-sort を Node でやってみました、という話。
setTimeout の挙動?はブラウザに依存するかと思いますので、環境かなぁ、という気がします。

7) id:spagetty さんによる WebSocket で平成教育委員会的なもの

2010年度、未踏に採用されているそうです。
生徒一人ひとりがタブレットを持っていて、各人の回答が先生側では一覧で見れたり、とか。

物理で大学院まででて、そのあと音大に行って・・・という異色の?プロフィールな方でしたので、質問が発表内容ではなく spagetty さんのバックグランドに向かっていった感もありましたが。

8) id:muddydixon さんによる 10分でつくる Node.js アプリ

実際、タイムを計って10分でインストールするところから実際にアプリが動くところまでを挑戦!
という感じでした。結果は残念ながら13分。

ニフティクラウドはいいよ!とのことです。
個人向けには提供されていないそうですが。


というわけで、長々と書いてきましたが、これにて終わり。
間違っている部分があったらごめんなさい。

感想としては、去年(?)より参加人数がかなり増えた気がしました。前回の午前中、基調講演の会場はけっこう席に余裕があった覚えがあるけど、今回は川口さんの話の途中あたりからかなり人が増えた感じがしました。
A-1 のセッションもかなりの盛況でした。

また次回も参加できるようにしたいなぁ・・・