富山合同勉強会お疲れ様でした

富山合同勉強会 .NET & Java 〜ぶりしゃぶで休もう〜
が1/31(土)に開催されました。

.NETのセッションとJavaのセッションを2部屋並行してやるという富山ではなかなか例を見ない大規模な勉強会です。いろんな話題があって良かったですね。

僕はスタッフとしてJava部屋の担当をしていたのでずっとJavaセッションを聞いていましたが、こういう時こそ普段の自分の守備範囲外のセッションを聞くべきかと思います。とはいえ並列セッションはどの部屋を選ぶか悩ましいですね。

参加者は県外勢が過半数で修学旅行に似た様相でした。

以下、ツイッター上のツイートを引きつつセッションの概要とか感想とか。

「JavaOne 2014 サンフランシスコの最新レポートについて 」

OracleJavaエバンジェリスト寺田さんのセッション。

JSRはJavaの仕様の話になるとよく出てきますね。

三項演算子禁止ルールを敷いている会社にてラムダ禁止とかなんとか。禁止しないで使ってください!とのこと

寺田さん「ラムダでコード量の削減が〜」
櫻庭さん「そこは本質的なところではないので」

Java SE 8u20からの新機能。Advances Management Console。別途契約が必要。大きな会社さんだと便利かもしれない。

Oracle Mobile Application Framework

このあたりで勉強会のハッシュタグが相互フォロー支援botに拾われて大量に汚染されるトラブルががが。

サンフランシスコのときのJava carのデモムービー

こういう指摘が入ることはジャンル跨ぎで合同勉強会やる利点ですね。

Java8にアップデートしてくださいね。

Javaの新しい風 - Project ValhallaとProject Panama」

現在策定中の仕様のお話。櫻庭さん(@skrb)の未来のJavaのお話
New Wind of Java

このあたりは現状.NET側が先行している状況ですね。

Oracleさん、もうちょっとコミュニティ支援をお願いします!

最近ではCPUが早くなったので相対的にメモリが遅いという話。このあたりはVMとかローレベルの技術の話題なので一般のJavaプログラマは意識する必要が薄い部分だけども、Java8のStream APIのような部分がマルチコア時代のパフォーマンスを背景としていることは知っておくべき。

Project Valhalla のこの中二病的なネーミング良いですね

ValueTypeはJavaのオブジェクトの配列をインライン展開するようなイメージ。
finalキーワードが必要で不変(イミュータブブル)。現代ではイミュータブルに出来るところはイミュータブルにするのが主流になりつつありますね。

ジェネリクスでプリミティブ型とか扱えるようにしようという動きですが、既存との互換性を考えると問題が山積みです。落とし所を探るのが大変そう。

Javaのネイティブコードへのアクセスというと古典的にはJNIだけどもより便利に使えるJNR。これはJava9に入るかもしれないとのこと。

お昼休み

雪が少なくて助かったという印象(富山基準)
お昼休みLTが少々(割愛)

C# / F# / Java ジェネリクス談義」

私(@nagise)と猪股さん(@matarillo)となかやんさん(@pocketberserker)によるジェネリクス談義。

これ大事。

猪股さんのセッション資料および補足

「なぎせさんはツイッターアイコンの宇宙服のイメージなんですよね」
「すいません!今日は着てくるの忘れちゃいまして!」

どちららかが完全上位互換というわけではないです。

C#はランタイムで型変数の型を持ってるので困ったときのリカバーがし易いというのはあると思います。でも、本質的にはイレイジャでも問題ない。一部を除いて…

パラメタライズドタイプでワイルドカードが使えるのはJavaジェネリクスの強み。use-site varianceは人類には早すぎるという噂もありますが。

そもそもパラメタライズドタイプと型変数とそのバインドと、全部構文上は山括弧なので混同している人が非常に多いです。この異なる3種類を総称してジェネリクス(総称型)と呼ばれるのはなんの冗談か。

C#はnew制約をつければ引数でわざわざclassを渡す必要がないのは大きな利点ですね。このJavaにnew制約がない点をdisるのは良いのですが、これを解決するための逃げ道としてランタイム時の型変数へのバインド型の取得ができない(=Javaジェネリクスのイレイジャ方式)ことをdisるのはお門違い。逃げ道をdisらずにnew制約がないことをdisるべき。
原理的にはイレイジャ方式でもnew制約のようなことは出来るはず…。今からの後付けで導入するのは大変そうですが。

配列というのは言語にビルドインされた限定的なジェネリクス機能なんですね。ですから本質的に配列型を共編にしてはいけないのです。

再帰ジェネリクスの話題も少々。ここを踏み込んでも言語比較論にはならないので割愛。C#再帰ジェネリクスでequal演算子のオーバーライドがうまくいかないというような話題が上がったのでジェネリクスのサンプルとして宿題に。

高階型はJava/C#世代の言語ではさっぱりなので面白そうですね。

Javaジェネリクスで具体的に困る事例としてはO/Rマッパーのようなケースでフレームワークがオブジェクトを生成するようなケース。これはnew制約があれば解決するのでC#が羨ましい点。
もうひとつは、アノテーションで処理を分岐するようなケース。ただ、アノテーションJava/C#時代のオブジェクト指向の思想の外にはみ出るので致し方無い気はする。

総じて、ランタイム時に型変数にバインドされた型を持っているC#方式のほうが行き詰まった場合のリカバーが楽。これはJava/C#オブジェクト指向でinstanceof/typeofを使う逃げに相当する。
逆にJavaVMはイレイジャ方式なのでScalaのような独自の言語拡張が可能。ランタイムによって機能が決まってしまうのでF#はILのレベルに合わせざるを得ない。

「なにから始める? Jenkins」

さぼてんさん(@cactusman)のJenkinsセッション。

warファイルなのでTomcatなどJavaEEサーバを用意してデプロイするのだけど、内部に組み込みのサーバーが入っていて単体で起動することもできる。

CIだけではなくて定期実行するような処理に用いるような事例も。

タスクを実行するための管理コンソールとして使うというカジュアルな利用もアリ。気負わずにもっと気軽に使って欲しいとのこと。

「Hello, Minecraft

俺九番さん(@orekyuu)のセッション。MinecraftのMOD開発。

前提MOD(MODを作るためのフレームワーク的なやつ)としては現在はMinecraftForgeの1強。

やり始めると止まらないとか。

冴え渡るダジャレで場内爆笑(言い過ぎ

そういえば、階段ブロックとかいろんな向きに置けるようになったのも比較的最近でしたっけ。

デモもあって楽しく見れるセッションでした。この時間帯、みんな疲労してツイートが少ない…。

ハッピーアワー

ジュースとお菓子が配られてLT5本。割愛

懇親会

お座敷宴会でございます。

懇親会費用が高額になってしまいましたがそのぶん料理は豪華になりました。

若人に絡むエバンジェリスト。そしてやおら脱ぎ出すなぎせ(下に着ていたデユークTシャツを見せる)

二次会

宿泊施設なので宿泊組は部屋を変えて二次会に。合宿だとこのあたりがスムーズで良いですね。時間も気にしなくていいし。

スピーカーをしてくださった皆さん、ありがとうございました!
陰で運営を支えてくださったスタッフの皆さんお疲れ様でした!
参加してくださった皆さん、楽しんでもらえたなら何よりです!

来年もまた遊びに来てください!