いつものようにチラ裏的勉強会メモです。
NetBeans 最新情報
片貝氏のセッション。blog http://blogs.sun.com/katakai twitter http://twitter.com/katakai NetBeans のグローバリゼーションや日本語コミュニティのプロジェクトオーナーをしている方。
NetBeans とは - 無償、オープンソースのIDE.Java 以外にも最近はPHPやRubyにも対応している。Glassfish や JRuby などオールインワンな簡単インストールが特徴。
過去のリリース。大きなものとしては…2006/1 Swing GUI ビルダー 6.0 2007/11 オールインワン化、Ruby/Rails 対応 Java 関連標準のリリースにあわせて各種機能の搭載が行われている。6.7 Mavan,Hudsonなどインフラ周りの対応 6.8 Java EE 6 サポート 6.9 2010/6 に予定
NetBeans 6.9 の構成。バンドルしてる機能のバージョンの説明。
NetBeans 6.9 の動作環境 Java 1.5サポートしない。Java 6のみで動く。
6.9 の新機能、変更点 Ruby でもエラーバッジ(コンパイルエラーあるとエディタで赤でバツが出る機能)などなど、他にも色々。
NetBeans プラットフォーム。アプリの基盤。6.9 ではインストーラも自動で作ってくれる。OSGiをラッパーみたく使えたり、OSGiコンテナ上で実行できる仕組みをサポート。
JavaFX Composer - GUI ビルダー、ステートによるアニメーション、データバインディング、データソースサポート。
JavaFX Composer のデモ。内容は、GUI ビルダー、アニメーション、HTTP で JSON 持って来てリストにデータバインディング、インジケータ、など。
質問タイム。GIT のプラグインは? NetBeans標準のディストリビューションには入ってないけど存在はする。
GlassFish v3 で実感 エンタープライズ Java の進化
寺田氏のセッション。資料は http://yoshio3.com/ の 「GlassFish v3 で実感!! エンタープライズ Java の進化」資料公開 | 寺田 佳央 - Yoshio Teradaを要参照。資料の量が多いため、セッションでは資料の内容すべてについて触れていません。つまり、このエントリ読むよかリンク先の資料見ようね! てことです。
本日のコンセプト。Java EE は以前に比べて重くなくなったよ、というのが主旨。
デモ。Entity のクラス作ると DB 上のテーブル定義にそれが自動反映・生成される。NetBeans 上で保存するとすぐに画面が確認できる(S2 の HotReloading 的なかんじ?) セッション情報の引継ぎ機能 - ファイル保存してもセッションが引き継がれる(たとえばログイン状態がそのまんまになるので開発がやりやすくなる) EJB 3.1 の組込みコンテナ - 何が嬉しいか? glassfish の持ってる機能を Java SE 上で走らせられる(たとえば JUnit を走らせられる)
glassfish のインストール。Tomcat のインストーラも最近簡単になったけど glassfish も簡単になった。zip ファイル解凍するだけでおkになった。
ここから駆け足気味に Java EE 6 のトピックについて触れていく。
プロファイル。Java EE の技術を用途ごとに分割提供。必要となる機能だけロードできるようになる。
Pruning 古くなって使われなくなった API・仕様 の削減。
EJG3.1 パッケージの簡略化。ear が必要だったのが、war の中に ejb 入れるなんてことが可能に。
EJB3.1 Lite - フル Java EE 機能のサブセットを提供。入ってるものの一覧は要資料参照。
GlassFish v3 の特徴。Java ee6 のリファレンス実装。(Apache Felix)OSGi コンソール。
GlassFish の今後のリリース。v3.1 - 2010, v.3.2 - 2011, v4 - ?? Java EE7 対応
アプリケーションバージョニング。バージョン指定・複数バージョンのデプロイができる。
Java エンジニアのための Scala 入門
町田氏によるセッション。「Scala 入門(仮)」を執筆中 2010 夏刊行予定とのこと。
Scala の近況 - Twitterで採用されている。書籍も少しずつ増加中。和書でも既に 4 冊でている。
良いコードとは何か? 簡潔性、明瞭性、高いモジュール性、少ないバグ…テスト容易性も捨て難い。
簡潔性 - プログラムを短く保ち、扱いやすくしておくこと。設定のためのコードなど(ボイラープレートコード)が増えすぎると品質低下の一因。
明瞭性 - プログラムのわかりやすさ。人間が読んで意図が容易に理解できることが重要。
高いモジュール性 - 変更や修正に対する局所化。モジュールの粒度は関数・ライブラリ・フレームワーク、Web サービスなんかのコンポーネントなどさまざま。Java 言語が提供する仕組みだけで十分かどうか。
少ないバグ - 要因はいろいろ。プログラムの簡潔・明瞭・モジュール性と強い関連があるのではないか。
現時点の Java - (Ruby や Groovy にくらべると)全体的にコードが冗長、他の言語でサポートされてる機能が使えない。解決策→言語のバージョンアップを待つ、他言語に切り替える、多言語(マルチバラダイムプログラミング)
多言語 - 適材適所で言語を使い分ける。JVM サポートする言語増えたし。マルチパラダイム - 複数のプログラミング上の概念を設計や実装に取り入れる。
Scala概要 - オブジェクト指向と関数型の融合。静的片付け。動的言語のようなコーディングの軽快さ。JVM 上で動作する。
関数型のパラダイム。関数は firts-class values. 値として関数を引き回すことができる。プログラム内の操作や関数は副作用を持つべきでない。
簡潔 - 動的言語のような略記。高度な型推論(コンパイラが解釈可能な冗長な変数定義の省略) 静的片付けなので var str ="hoge" str = 1 て書くとコンパイラレベルでエラーになる。値としての関数。強力なパターンマッチング。
明瞭 - 新しい制御構造。演算子の定義(C++ の演算子オーバーロードに近い感じ)。DSL. コレクションの高階メソッド。
モジュラープログラミングのサポート - オブジェクト指向。トレイト。より柔軟なアクセス保護、修飾子
Java との高い親和性 - Scala から Java のコードを呼べる。
関数型言語としての敷居の低さ - Java + Scala のような気分で使い始められる。
応用例の一つを紹介 - Scala のアクターライブラリによる分散並列処理のサンプル。
クロージャあらため、Project Lambda
櫻庭氏のセッション。デュクレレ(でいいのかな? 綴りわからないけど)かっこいいなw
クロージャ騒動 JSR 166y と extra166y Project Lambda Java におけるクロージャがどうしてこうなったか? の経緯を話すセッション。文法についてはそれほど触れない。
クロージャ騒動。実は俺よくしんないんだけど、色々ゴタゴタがあったとのこと。これを知ってる人は相当昔から Java を知ってる人、ということになるらしい。
Closure 前史 - delegates 論争。MS の J++ には delegates が入っていて、MS は必要つったけど Sun はいらん(inner class があるから)といっていた。Java House での議論がすごかったらしい(JavaHouse-Brewers:20252 Summary: "delegate" in J++ language)
Closure History - 2005.06 JavaOne 2005 Graham 氏が「JavaSE7 にクロージャ入れるかも」と発言。2006.08 Neal Gefter, James Gosling が Closure for Java (BCGA - 提案者の頭文字)を提案→大騒動勃発。また、Joshua Bloch と Neal が大喧嘩。色々と収集がつかない状況になってくる。
2008.11 Mark Reinhold が「クロージャやめます」 2009.11 同氏が「クロージャやります」「えっ」 その間になにがあったのか? マルチコアCPUの一般化 - ハードの性能向上にあわせてプログラミングの方法が変化する、という背景が一つあった模様。
1996 Java 1.0 Thread がお手軽に使える PenPro 200MHZ まだ並行の世界
2004 J2SE 5.0 Concurrency Utils の導入 UltraSPARC 4 が 2 core 化。製品化されたマルチコアとしてはタブンこれが最初らしい。これにより、並行から並列の世界へ。new Thread から Executor へ。concurrent にやらないと性能が伸びない時代に。こうなると concurrencyt Utils では役不足になってきた。そこで JSR 166y でマルチコアに対応しようという動きが出てきた。
JSR 166y と extra166y - JSR 166 での非同期処理 Executor Service は比較的粒度の大きいタスクで使うもの。小さく使うとオーバーヘッドが大きくなってしまい、並列度が上げられない・細かい粒度のタスクを扱えない。
JSR 166y Fork-Join Framework - Work Stealing がベース。粒度の小さい concurrent が扱えるようになる。
extra166y - 並列テクニック:ループの展開 extra166y ParalleArray クラス、ただしインタフェースの爆発の問題があり、解決策としてクロージャが浮上してきた。Java のクロージャはハードのマルチコア化に対する策として出てきた、というのが重要。構文として必要かどうか、ってのはあんまり重要じゃないのを抑えてくのが肝のようだ。
Project Lambda - OpenJDK サブプロジェクト
ラムダ式 - # でラムダ式を記述 #(引数)(式) #(引数){ 式 } みたいな。
関数型 - #戻り値(引数) ex. #int(int) twice = #(int x)(x + x)
インボケーションは int z = twice.(3);
インタフェースへの変換。単一メソッドのインタフェースに変換可。
ただ、まだ議論中なところが色々残っている。レキスカルスコープなど
より詳しい記事は同氏の記事 クロージャからProject Lambdaへ - Java技術最前線:ITpro を参照。