uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

JJUG CCC 2013 Springに参加してきました #jjug #jjug_ccc

今日は朝早くから、西新宿でJJUG CCC 2013 Springに参加してきました。(まとめ)
久々の1日の勉強会で楽しかったです。あと都庁を間近かで見れてよかった。
ブログ書くまでが勉強会、という基本を新ためて学んだので、書きます。

基調講演-1 Javaのこれからを考える #ccc_k1

変容することが確実なこれからのシステム開発、それに耐え得る「サステイナブルSI」を考える。
途中から入りました(すみません)ので半端なメモです。

  • 資料: http://www.slideshare.net/yusuke/java-jjug-ccc-2013-spring
  • サービス全体がJavaだけで完結することはないが、 Javaはプラットフォーム、Javaはオープン、Javaはエコシステム、である、という特長は活きる。
  • Javaの未来もその変化に追随変化していく
    • Java9(Cloud, Multitenancy, GPU, Jigsaw.)
    • Oracleはコミュニティと上手くやっているのだが、驚きとイノベーションは少ないなあ。
    • JVM上の言語は進化しているし。

基調講演-2 What’s New for JavaFX in JDK 8 #ccc_k2

JavaFX、ちゃんと生きてます!、という話。

  • 資料: http://www.slideshare.net/OracleMiddleJP/jjugwhatsnewforjavafxinjdk8
  • JavaFXイベントハンドラがJava8 Lambda式でわかりやすくなる
  • 「モデナ」というUIテーマが追加。
  • 3Dグラフィック機能追加(ジオメトリ、カメラ、ライト)
  • 質問: iPadJavaFXを去年デモしてたけどあれはどうなった?
    • あれはコンセプトプルーフプロトタイプであって、提供予定はない(キリっ。OSSなので、誰でも可能性がありますよ。いつ参加する?今でしょ!!

Java EE 6 から Java EE 7 に向かって #ccc_h1

Java EE 7の情報。押えておくべき。

  • 資料: http://www.slideshare.net/OracleMiddleJP/java-ee-6-to-java-ee-7
  • プロファイルによるサブセット化はJavaSEの方にも将来的に入るよ。ラズベリーパイ用のJavaはそれを使ってるはず。
  • Java EEAPIは枝刈り(プルーニング)をして、古い・使わないものは整理します。
  • JAXRPC,JAXR,EJB Entity Beanは、Jax-WS, JPAになります。
  • 古いのはそのうち削除しますので移行してください。
  • JavaEEのコンテナ(APサーバ)をJavaSEから立ち上げられるようになります。
    • 各社のAPサーバ製品を共通のJavaEEコンテナと見做してインスタンス化・起動するための共通APIができます。
  • APIについては
    • Concurrency,Batch,JSON,WebSocket→新規
    • JSF2.2,JAX-RS→大幅な変更
  • JSON JSR 353。前とは結構変化した。
    • Streaming API..低レベル(StAXみたいな)
    • Object Mode API…かんたん。Streamig API上に構築(DOMみたいな)
  • EL3.0ではメモリ上のオブジェクト群に対してLINQっぽい操作ができる(例を見る限り、Lambda式が使える、ということに思えたけど…)。

Project Lambda Essential #ccc_h2

基本をしっかりと。これを聞いてからGroovy資料作れたなら楽ができたのにorz。

  • Lambda式の目的は、並列計算の記述を簡単にするため。
    • クロージャとはあえて呼びたくない。なぜなら、ローカル変数をキャプチャしない(実効final)なのでレキシカルスコープとは言えない、関数型(高階型)が無い、など一般的なクロージャと思うとがっかりするよ。
  • Lambda式の「構文」より「並列API(JSR166y、Fork/Join Framework)」の方が重要
  • 2コアのCPUで、100万個の要素の平均分散をparrallellStream()で処理とると半分の時間になる!
    • 100とか200個とかでは意味無いってことね。
  • Lambda式が表すクラスをコンパイルしても.classファイルが生成されない。メモリ上に動的に生成される。またinvokeDynamicが使われている。
  • streamは遅延評価される。
  • 今までstreamは別バイナリだったけどb89でJava8 eaの本体の方に取り込まれ一体化しました。

Type Annotation って何? それを使うとプログラムはどう変わる? #ccc_r53

Java8で新規導入される「型アノテーション」なる言語機能について。
個人的には今回このセッションがツボでした。使いやすいかどうかはともかく、野心的なところがイイね! 個人的要望としてはJava10あたりでASTを変更可能にして欲しいw。

例:

MyObject m = new @Interneed MyObject(); //new対象のクラス
MyObject n = new @NonEmpty @ReadOnly  MyObject(); //new対象のクラス
class Hoge implements @Readonly List<@Readonly String> {} //ジェネリクスの型引数
MyObject xxx = (@NonNull String) myObject; //キャスト
int @ReadOnly[]@ReadOnly[] a = ..
int @ReadOnly[][] a = ..
int []@ReadOnly[] a = ..
  • 何をするものかというと、コード中の型情報に追加情報を指定してやって、それを元に代入やアクセスなどの操作を制限する。実効的にはGroovy 2.1の型チェック拡張みたい。
    • Java8で何らかのASTをアクセスするAPIが提供されるはず。
  • Java8の型アノテーション仕様のサポートは、「型アノテーションを含むコードがコンパイルできますよ」というだけ。驚くべきことにアノテーション自体は1つも標準APIで定義されない。
    • サードパーティさん頼み状態
    • 現時点ではJava8に対応してないが、サードパーティツールの候補一つとして、Java6時代から利用可能な「Checker Framework」というのがある。
      • javaコマンドで実行する。javacではなく。
    • @Interned, @Immutable, @Readonly, ...
  • Checker FrameworkはJava6,7でも実行できるが、以下のような特殊コメントを使う。

//*>>> @ReadOnly...
/*>>> @ReadOnly... */

Groovy2.Xの新機能 #ccc_r25

あてくしの発表。人数多い。JGGUGとは違うのだよ!状態。

しかしまさかのプロジェクタ出力できず。
急遽Windows PCをお借りして2分ロスしてスタート。
PC貸してくださいました方ありがとうござました。
USB接続のRGBコネクタを持ってくるべきだったな。

でも結果としては無事になんとか。(かな?)

失敗から学ぶAPI設計 #ccc_r26

地方における勉強会事情 #ccc_r26

これはツイッターを見てもらった方が良いかも。(ハッシュタグ#ccc_r26)
コミュニティの運営の問題として、様々な話が聞けました。
子供連れイベントいいですね。Scratchとかプログラミンのハンズオンとか。

LT

いろいろ楽しかったです。しかし酒が入ったので記憶があんまりない。

  • 自己生成コードGolf
  • DTrace
  • 破壊的イノベーションw
  • Matzは中部地方では神
  • アーランと寿司
  • いろふさん
  • Play 1 Javaは小数派だが良いものである
  • javapをiPhoneで動かす(違
  • ニセコで寿司?

たいへんおつかれさまでした。運営のJJUGのみなさん、ありがとうございました。是非また参加したいです。