torutkのブログ

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

JJUG CCCでJavaFXで地図を描く話をしてきたことについてあれこれ #jjug_ccc #ccc_e2

今月のはてな日記は2日しか書けていないということに衝撃を受けて、思い出しながら書ける内容で盛ってみます。

今月3日に日本Javaユーザーグループ(JJUG:Japan Java User Group)主催のカンファレンス(CCC:Cross Community Conference)で、JavaFXで地図を描くというセッションに登壇しました。JJUG CCCは、公募のセッションとスポンサーセッションから構成されているようです。9月頃に2つのテーマで公募し、そのうち1つが採択され、登壇することとなりました。もう1つのテーマはJava読書会BOFで読んできた書籍一気通貫紹介だったのですが、こちらは非採択でした。

公募の動機

Javaといえば、OSの縛りを超えて動くプログラムを作ることができる言語で、しかもGUIを標準で持っています。ですから、作ったGUIプログラムがWindowsLinuxなどで再コンパイルなしに動きます。しかも、そのGUIは取って付けたような代物ではなく、QtやWPFと並んでも遜色のない本格的な機能を持っています。

しかし、なぜか日本で開催されるJavaの技術カンファレンス系ではWeb系技術が多く、以前のSwing、昨今のJavaFXについては数えるほどもありません。JavaOneサンフランシスコでは、全444セッションのうちタイトルにJavaFXを含むセッションが37ありました。それに比べると日本はちょっと寂しい限りです。

そこで、JJUG CCCでJavaFXのセッションが1つも無いという事態が起こらないよう、自ら公募することとしました。(JJUG CCC 2015 Springのときが1回目、その後JJUG CCC 2016 Spring、そして今回がJavaFX関係セッションの3回目です)

準備

準備期間も十分あるし、地図を表示するプログラムもサンプルレベルでは動いているので、今回は余裕と思って着手したのですが、自分が理解することと人に説明することとのギャップが以外とあって、地図の説明をまとめるのにかなり時間がかかってしまいました。

また、動いていたはずのサンプルですが、地図の拡大縮小・スクロール操作で意図しない動きとなっていて、その対処にかなりの時間を使って、それでも解決しきれず当日を迎えました。この課題はJJUG CCC終了後にJavaFX Advent Calendar 2016のテーマとして記載しました。

JavaFXのCanvasで拡大縮小と平行移動を行う(リベンジ編) - Qiita

当日

今回は午前中のセッションでした。
聴講者の方々に、JavaFXプログラミング経験を聞いたところ、半数以上(2/3位?)挙手がありました。結構いるのですね。嬉しいことです。

時間配分のため、スマートフォンにプレゼンタイマーアプリを入れて、それを見ながら進めていました。
ちらちら見ているとまだ20分台で、あと半分あるなぁと思い、ゆっくり目で話していました。また見ると、まだ20分台で、あれ、そんなに時間たってないのか、と油断していたら、スタッフの方が「あと10分」の紙を掲げているではないですか。えっ、スマートフォンを見ると、表示が29分のまま、秒が進まずフリーズしているではないですか。

なんと、完全に時間進行が崩れてしまいました。
そこから急に説明を急ぎ、ステップ・バイ・ステップの途中デモも飛ばして、最後のデモに入りました。

が、が、が、なんと地図が表示されない。途中のデモでは表示されていたのに、最後のデモがなぜか出ない。

よく見ると、地図の縮尺が1/0と異常な表示(通常は、1/50,000,000 のように地図の縮尺が表示される)、分母がゼロ?

ふと、外部ディスプレイにプロジェクタを使用した場合、画面のDPIが正常に取れてないのでは?と疑い、画面のモードを複製からデュアルディスプレイに変更、いったんノートPCの画面に地図プログラムを動かして表示、それを移動させてプロジェクタに表示させてみたところ、なんとか地図が表示されました。

ということで、当日襲った2つの現象

  • 「永遠の29分」
  • 「プロジェクタ絡みでディスプレイのDPI値が取れないことがある(かも)」

でした。せっかくJavaFXと地図に興味をもって聴講いただいた方々には申し訳なく思います。

セッション資料、サンプルコード(追記:2017-01-25)

日記を見返してみると、セッション資料とサンプルコードのリンクが書いていなかったのに気づきました。

当日のセッション資料は次です。
http://www.slideshare.net/torutk/java-fx7

ステップ・バイ・ステップで作成したサンプルコードは次です。
https://github.com/torutk/jjugccc2016fall-javafx

各ステップをGitのタグとして付けています(step-1、step-2、・・・)。

今度のJJUG CCCに望むこと

JJUG CCCで、朝から晩までJavaFXのセッションが続くことです。
ぱっと思いつくテーマ

  • 開発環境(Scene Builder、Scenic View、JavaFXのログ〜pulse log、Flight RecoderのJavaFXイベント)
  • 標準レイアウト(StackPane, AnchorPane, BorderPane, ...)の使いこなしかた、画面の大きさの制御
  • JavaFX CSSの使い方講座、HiDPI対応
  • JavaFX 3D
  • アニメーション
  • エフェクトを使いこなそう
  • SVGInkscapeで描いてJavaFXに取り込む的な)
  • 画面遷移の技
  • MVCあるいはMVVC的なJavaFXプログラムの骨格作成
  • NetBeans RCP上でJavaFXを使ったアプリケーション開発
  • タッチパネルの操作イベントに対応する
  • OSネイティブなデスクトップとの連携
  • カスタム部品の作り方
  • シューティングゲームを作ってみました