torutkのブログ

ソフトウェア・エンジニアのブログ

JJUG CCC 2015 Springに参加して(#jjug_ccc)

昨日4月11日(土)は、日本Javaユーザーグループ(JJUG: Japan Java User Group)が主催するカンファレンスが開催されました。年2回、春と秋に開催されています。
http://www.java-users.jp/?page_id=1647

今回は29セッションあります。僕もJavaFXのセッションでお話してきました。

午前はセッション準備で午後から参加・・・

3月半ばから準備に着手はしていたのですが(言い訳モード)、発表資料作成が終わったのが当日0時半でした。いったん就寝し、朝子供を学校に送り出した後に発表資料全体をデモ操作を含めて通し稽古。

この時点で一番の課題はこの冬購入の手持ちのノートPC(dynabook KIRA L93)から会場のプロジェクターに出せるか、でした。このPCは、外部ディスプレイ出力コネクタがmicro HDMIというものです。事前に会場のプロジェクターの情報がアナウンスされ、XGA(1024×768)でVGA端子なので、Amazonでmicro HDMIVGA変換アダプター(KanaaN)を購入しました。自宅の液晶ディスプレイ(NANAO S2000)で解像度を1024×768にして写してみたところ、画面の左右と下がかなり欠けた表示となってしまいました。いろいろ試行錯誤してみたけどだめな感じ。ネット上の情報断片を拾い集めてみたけれど、アダプターとの相性でいろいろ問題が発生している様子です。

そこで、初回の通し稽古後、10年前に購入したノートPC(VAIO Type S S73PB)を持ち出し、JDK 8u40とNetBeans 8.0.2をインストールしプレゼン環境を用意しました。Windows XPへのJDK 8のインストールは初期はエラーとなっていましたが今は警告が出るだけでインストールはできました。このPCにはPower Point 2003が入っていますが、Power Point 2010で作成、2013で編集したpptxファイルを読んでスライドショー表示することはできました。

こんなことをしていたので自宅を出るのは12時近く、午前のセッションへの参加はできませんでした。西新宿へはGoogleマップのナビで推奨の経路で向かい(西新宿だけ把握していて、電車経路は調べてませんでした)、午後のセッション開始前の時間でプロジェクターへの接続確認をしました。といってもすでにスピーカーの方もいたのでデスクトップが大体出ているなレベルの確認ですぐに撤収。自宅よりは状況はよかったです。

午後のセッションは、

  • Javaにおけるnull。これまでとこれから」
  • 「GS CollectionsとJava 8:実用的で流暢なAPIで楽しい開発を!」
  • 「あなたとAndroid!?今すぐダウンロード〜Android開発で変わるSIerJava技術事情について〜」
  • Java開発の強力な相棒として今すぐ使えるGroovy」

を聴講し、

  • JavaFXグラフィックスとアニメーション入門 デスクトップにアナログ時計を出してみよう」

の発表をしました。
そのあとは懇親会に参加しました。

僕のセッションの準備が不足しているので、ついその確認をしながらとなり、聴講していても半分は内職状態でした。時間が空いているのは、お昼ごはん&発表練習、喫茶&発表練習です。

なので、ちょこっとメモだけ

Javaにおけるnull。これまでとこれから」(#ccc_cd1)
  • RDBは三値論理(true, false, unknown)なので、RDBのNULLはJavaのnullと思うと「痛い目」を見る
  • java.util.Map#getOrDefault どうして最初から入らなかったの?と思う位有用
  • java.util.Objects#toString nullを渡したときの表示を指定できる
  • Optional型を戻り値にするメソッドでは絶対にnullを返さない
  • Optionalの間違った使い方
    • isPresent 問題を増やすだけ
    • ifPresent あまりよくない
  • orElseはいいよ、Cool!
  • @NonNull
  • Javaにない欲しい機能
    • Safe navigation operator C# 6には入るらしい(いいね)
    • Elvis operator
「GS CollectionsとJava 8:実用的で流暢なAPIで楽しい開発を!」(#ccc_f3)
  • ゴールドマンサックス(金融会社)
  • オープンソースのコレクションフレームワークを開発(GS Collections)
  • 機能も豊富だが、メモリ効率がJava SE標準のCollection APIよりよい
  • Java SE標準Collection APIのだめなところ
    • HashMap Entryインスタンスで管理している点、entrySetがひどい
    • HashSet もっとひどい、内部でHashMap使っているがKeyのみでValue使っていない
    • プリミティブ型のコレクションがない
「あなたとAndroid!?今すぐダウンロード〜Android開発で変わるSIerJava技術事情について〜」(#ccc_g4)

今年に入ってAndroid上のアプリケーション開発をする仕事があり、JavaC++の固いシステム開発をしてきたメンバーが取り組みます。そこで今後起きるであろう事がまさに紹介されており個人的にとてもタイムリーな内容でした。

  • 機種とバージョンを固定すれば大したことはない
  • 開発環境
  • ライブラリの選定に注意
    • サイズが大きくなると起動時間遅く、配布に時間もかかる
    • タブレット、スマフォは性能非力、バッテリーの持続時間重要なので、汎用の(リソースを喰う)ライブラリはよくない
  • お勧めライブラリ
    • AndroidAnnotations, Active Android, Jackson
  • データベース
  • 帳票作成
    • PDF作成ライブラリはAWTを必要とするものが多く、Androidに対応できない
  • 一意IDの生成
    • UUIDタイプ4の生成だけなのでつらい(タイプ1欲しい)
    • 端末ID(?)、MACアドレスは個人情報になるので扱い注意となる
    • アプリで年月日+ユーザーID+UUIDタイプ4の組み合わせでシステムワイドな一意ID作成
  • Web通信
    • AndroidにあるHTTPClient(DefaultHttpClient、AndroidHttpClient)は使うべきでなさそうなので、HttpURLConnectionを使う(バッテリーにも優しい)
  • 今までのサーバーサイドJava開発と同じと思っていると血を見ます
Java開発の強力な相棒として今すぐ使えるGroovy」(#ccc_g6)
  • この1年ほどでAndroidに対応
  • Java SE 8のラムダ式には未対応(今後も対応しないかも)
  • セミコロンなし、「Javaやっていると欲しくなるけど、すぐに馴れます」
  • ヒアドキュメント風の"""(ダブルクォート3連打)
    • ソースコード上はインデントさせたいけど文字列としてはインデントの空白を避けたいので、|とStripMargin使うとよい
  • XMLパースが簡単、XmlParser(DOM風)、XmlSluper(SAX風)
  • Excelの操作、GExcel API(発表者が開発)、Apache POIのラッパー、使い勝手を大いに向上(アクセスするセルの指定など)

JavaFXグラフィックスとアニメーション入門 デスクトップにアナログ時計を出してみよう」(#ccc_g7)の発表

19:00からのファイナルセッションなのですが、そこそこ人が集まっていました。
プロジェクターに移った画面は両端が少し欠けた状態でした。

マイクは両手が使えるようピンマイクを装着しましたが、ピンマイクは顔を左右に動かすと音の拾い方が変わるので(まあ当たり前ですが)、かなり聞き苦しいセッションになってしまったかと思います。顔を常にまっすぐに向けてしゃべるというのが大事なのですね。
また、デモ操作ではちょっとはまるとしゃべりが止まって無音時間ができてしまいました。ここは練習時に漏れていました。操作しながらもしゃべることを意識はしていましたが、プチ想定外な状況が起きてしゃべり対応ができなかったです。あとは、会場を見る余裕がやっぱりなくて、立ち位置もふらふらしていました。

今回のセッションは、JavaFXプログラミングが初めて、という方を対象に、Hello Worldのプログラム構成を紹介し、それからアナログ時計をグラフィックスとアニメーションで実現するサンプルのプログラムを紹介するという内容です。スライドは次にアップしています。

Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)

ソースコードは次です。
https://github.com/torutk/jjugccc2015spring-javafx

JavaFXプログラミングをしたことがないに挙手された方がぱっと見て会場の半分以上でしたので、想定対象どおりでした。

アニメーションについて怪しい箇所(3つのTransitionをplayで実行するときに、ばらばらに実行するかparallelでまとめて実行するべきか)など作っていて抱えていた疑問をぽろりとしゃべると、櫻庭さんがしっかりそれを拾ってフォロー解説していただけました。ありがたいです。

  • Transitionのinterpolator属性がデフォルトEASE_BOTHになっているため、明示的にsetInterpolatorでLINEARを設定する必要がある
  • 時計の時刻精度を気にするならば、AnimationTimerを追加するとフレーム毎にSystem.nanoTime()の値を取れるので補正するなど
  • 3つのRotateTransitionをParallelTransitionで包んで使わなくても同じ動きをするのはアニメーションスレッドが1つだから。
  • 円(Circle)や矩形(Rectangle)は、SVGPathで表現できないがJavaFXのプリミティブにあるのでそれを使う
  • ピンチで拡大縮小するとき、小さくなりすぎるとピンチ(マルチタッチ)を認識できなくなるので、これ以上小さくできないという下限を設けるのが一般的な対処

日本Javaユーザーグループのセッションなので、すごい人がセッションをして聴講者はひたすら拝聴するという姿勢ではなく、たどたどしいけどこんなの取り組んでみました、という内容のセッションで、聴講者もいろいろ意見交換できる、という雰囲気のセッションが増えるとよいなと思っています。

懇親会

会場で立食での懇親会です。ビールはエビスとギネスがあっていい感じです。(食べ物については言及しないでおきます)
LT(ライトニングトーク)も多数の方がならんで楽しい話をいろいろしていました。

JJUG CCC 2015 Spring参加報告ブログ集

JJUG CCC 2015 Springに参加しましたと書かれているブログを見つけたらリストに追加していきます。

AB-1セッションスピーカーの井上さん

CD-1セッションスピーカーの太一さん

CD-2セッションスピーカーの多田さん

CD-3セッションスピーカーの宮川さん

F-1セッションスピーカーのきしださん

F-5セッションスピーカーの久保さん

G-6セッションスピーカーの中野さん