Javaの勉強会を開催しました:Java Do #02(10/04,札幌)

開催後、なかなかまとめる時間がとれず、もう2週間前のことの報告になります。

Java Do の第2回目の勉強会、Java Doでしょう #02 を開催しました。

f:id:gishi_yama:20151004134131j:plain

内容は、@john_smith さんによる「怖くない人工知能実装~wekaを使った機械学習入門~」、私による「60分で体験するLombok」の二本立てでした。

お越しいただいた皆さん、ありがとうございました。機械学習というテーマ設定からか、今回はスタッフを除く12名の参加者のうち、半数ぐらいが学生さんでした。道央圏外の大学から来てくださった学生さんもいらっしゃたようで、ありがたい限りです。

スタッフがちょっと忙しい時期に入るので、次回の企画は11月中旬からさらにもう少し後ろになるかもしれません。 ひきつづきぜひよろしくお願いします。

以下、感想とまとめです。

怖くない人工知能実装~Wekaを使った機械学習入門~

機械学習にじっくり触る機会はここ十年ほどなかったので、学生に戻ったつもりでハンズオンに参加しました。

できるだけ数学を使わず、機械学習とはそもそもなんぞや?というインストラクションから話していただきました。

今回体験できたwekaの役割は、テストデータから推論モデルを作成すること。最初は単に学習結果やそれに基づいた本番データの解析結果をグラフィカルに可視化できるツールなのかなーと思っていましたが、学習された結果の推論modelを保存して、それを簡単にJavaプログラムに取り込めるのは非常に便利ですね。

本格的なプロダクトに入れるには力不足の部分も目立つとのことでしたが、大学などで研究レベルでの導入はすぐにできそうと感じました。(調べてみたら結構な歴史があるツールなので、そちら専攻の方々には当然のツールなのかもしれません。私も修論の際に存在に気づいていたかった...)

ハンズオンで触れられなかった内容として、推論modelを何らかの発火条件などに合わせて動的に変更してくような仕組みをweka+Javaだけで作れるのかどうか気になりました。もうwekaの領分じゃないのかもしれませんが。

@john_smithさんにはぜひ、帰省などの機会で中級編をお願いしたい次第です。

60分で体験するLombok

唐辛子のマークが象徴的なコード生成ライブラリ、Lombokです。

javaでありがちなコードをアノテーションベースで生成することで、コード量を減らし、生成の手間やミスをなくせる効果があります。

Lombokは日本語でかなり分かりやすい解説記事や導入例も多いですから、今更感ありすぎかな...と心配しながら資料を作っていたのですが、今回参加された方のほとんどはLombokを実際に触るのが始めてだったようです。腕をふるって、全アノテーションのサンプルコードを作った甲斐がありました :-) 。それぞれの変数の網羅までは無理でしたが。

サンプルコードを作る段で、普段使わないアノテーションも触りましたが、黒魔術感あふれたり、用途が限定的かなあと思うものもやっぱりありますね。

個人的によく使うのは @Log, @EqualsAndHashCode, @NonNull, @XXConstructor, @Builder, @Getter, @Setter@Value, @Data などでしょうか。

型推論的なfinalローカル変数を作れる val も、たとえばフレームワークコンポーネントを使うような場合(下の例はApache Wicketですが)は

IModel<List<FooBarBaz>> fooBarBazModel = new LoadableDetachableModel<>() {
  <!-- snip-->
};

ListView<FooBarBaz> fooBarBazListView = new PropertyListView<>("fooBarBaz", fooBarBazModel) {
  <!-- snip-->
}

val fooBarBazModel = new LoadableDetachableModel<List<FooBarBaz>>() {
  <!-- snip-->
};

val fooBarBazListView = new PropertyListView<FooBarBaz>("fooBarBaz", fooBarBazModel) {
<!-- snip-->
}

みたいに少しでも楽に書けるのでどんどん使っていきたいんですが、val をいれると途端にエラー検索などでIDEが誤報したりトラブる感もあったりします。

はじめてLombokを導入する場合、他のクラスに与える影響が少ないアノテーション@Log, @EqualsAndHashCode, @NonNull)あたりから、お試しでいれていけばいいんじゃないかと思います。

まさに唐辛子ということで、チームやプロジェクトが慣れてる辛さから始めて入れすぎ注意でやっていけば、非常においしいライブラリだと思います。

懇親会

f:id:gishi_yama:20151004181905j:plain

ジンギスカンおいしい!

ビール複数種類飲み放題、ジンギスカン食べ放題で4千円ぐらいってなかなかうれしい値段設定ですよね。

反省点

  • Mavenプロジェクトをその場で作ってねーって指示は結構しきいが高い感じ。
  • 時間配分ちょっとミスりました。会場を貸してくださったインフィニットループさん、ご迷惑をおかけしました&ありがとうございました。