JJUG CCC 2016 Springに参加しての感想

2016/05/21 に開催された JJUG CCC 2016 Spring に参加してきました。ちょっと遅くなりましたが参加した各セッションについて感想を簡単にまとめました。

参加したセッション

基調講演2: Raspberry Pi with Java

Java エバンジェリストである Stephen Chin さんによるキーノートセッション。Stephen さんは Night Hacking Tour というのを行っていて、世界の色んな国をバイクで駆け巡り、Java を使った面白い勉強会を行っていますが、今回日本でそれを行っています。既に岡山や大阪などを回っていますが、今回この JJUG CCC で東京版を行うことになったというものでした。

内容は Raspberry Pi を使って、ファミコンのゲームコンソール (筐体の形はゲームボーイアドバンス風) を作るというもの。ソフトウェア、ハードウェアの両面から様々なハッキングを行ったという内容でとても楽しい内容でした。

ソフトウェア面では Raspberry Pi 上の JavaJavaNES エミュレータ halfnes を使用した点が目を引きました。オリジナルは Swing 製でデスクトップ向けでしたが、これを Raspberry Pi 向けに GUI 部分を JavaFX で作り直したとのこと! X を使わず直接フレームバッファに書き込む JavaFX の利点をアピールしていました。 *1

ボタンの数に対する GPIO の不足を左・右ボタンは同時に押さない点に着目して回避したり、3D プリンタでのヒンジの作成で様々な試行錯誤したりなど、ハードウェア面でのハックの話も面白かったです。

こう言っちゃあれかもしれませんが、Oracle にもまだこういう遊び心たっぷりな方がエバンジェリストとして残っていて良かったなあと思いました。

E-3 Spring Boot で Boot した後に作る Web アプリケーション基盤

エムスリーの吉田さんによる、Spring Boot で構築した Web アプリケーション開発について、開発環境を構築した後の開発方針についてどうしていったかについてのお話でした。

Spring Boot では開発環境構築のお膳立てをしてくれますが、その後は Spring Framework を用いたアプリケーション開発になっていきます。そこで例外処理やトランザクション設計、URL 設計、バッチ処理、設定ファイル、ログ、セキュリティといった、共通的に考慮しないといけないことをどう設計したかを説明してもらいました。

バッチ設計のところなど、所々自分の考えとは違うところはあったものの、参考になる情報が多かったです。実は近々自分も Spring Framework を久々に使うことになりそうなので、Spring については浦島状態になっている自分にはとても助かる内容でした。

AB-4 Introduction to JShell: The Java REPL Tool

Kulla プロジェクトのコミッタになった bitter_fox さん自身による JShell の解説です。今年から就活する点をちょっとアピールしてましたw

JShell でやれることを全体的にとても分かり易く説明していました。他の言語では大体あったものですが、ようやく Java にも来てくれて嬉しいです。今まで自分自身は IntelliJ の Groovy コンソールを使ってこの用途を満たしていましたが。 *2

少し驚いたのが、JShell の開発者に JavaFX Script コンパイラの作者が入っていた点です。JavaFX Script が無くなった後、こういうことをしていたのかあ。

I-5 JavaデスクトッププログラムをふつーのWindowsプログラムのように配布・実行する方法とPCの動きが重くならないよう気を付けること

高橋さんによる、Windows 環境へ javapackager を用いてパッケージングした JavaFX アプリケーションを配布する際に工夫したことを説明するというセッションです。

このセッションで取り上げられていた javapackager については手前味噌ながら自分のブログエントリでも紹介しています。

aoe-tk.hatenablog.com

この javapackager、中々良くできているのですが、上書きインストールができない、インストールディレクトリの指定をさせることができない、など細かい点で足りないところが目に付きます。そこを Wix Toolset 側の設定に手を入れることで乗り切ったという話がとても参考になりました。

javapackager の存在については驚いた人が多かったようで、セッションの最後に沢山質問が出てきたのが印象的でした。やはりこういうものを求めていた人が多かったんでしょうねえ。*3 その割に知られていないというのが残念です。もっと Oracle はこのツールの存在をアピールした方がいいですよー。

M-6_1 十徳ナイフとしてのGradle

grimrose さんによる Gradle についてのショートセッションです。何と立ち見状態になっていて、床にべたっと座って聞く形になっちゃいました。Gradle 本当に注目を浴びてますねえ。

https://nbviewer.jupyter.org/github/grimrose/JJUG-CCC-2016-Spring/tree/master/Gradle%20as%20Army%20Knife.ipynb

内容としては Gradle 徹底入門を補完するような内容になっていて、Gradle のタスクランナーとしての側面に着目し、日常のタスク処理に Gradle を活用するためのお話になっていました。特にスクリプト実行環境があまり強力ではない Windows 環境での活用を推してましたねえ。

ホットな話題である、Kotlin Gradle についても少し触れましたが、「うーん、これ嬉しいですか?」と聞いたところで場が爆笑で包まれたのが印象的でした。 *4

I-6_2 OpenJDK コミュニティに参加してみよう

OpenJDK のコミッタである久保田さんによる、OpenJDK コミュニティに参加するための最初の一歩について説明するというセッションでした。

OpenJDK のような巨大なプロジェクトになると、参加するのはとても敷居が高い印象がありますが、やはりパッチを送るのが一番良いとのことでした。ML へパッチを送るくらいならば、OCA にサインすればできるようになるようです。

多数あるリポジトリの歩き方、パッチや意見の送り先となる ML の雰囲気など、OpenJDK プロジェクトに参加されている方ならではの話が満載でとても面白かったです。

GH-7 Java Puzzlers

最後はさくらばさん、てらださんのコンビによる、Java Puzzlers のセッションでした。

Java Puzzlers と言えば、Joshua Bloch さんと Neal Gafter さんによる JavaOne の名物セッションでしたが、今や前者は Google 、後者は Microsoft に籍を移しているため *5 、行われなくなっちゃいました。

日本版はさくらばさんとてらださんコンビになりましたが、意図的なのか自然にそうなったのか、てらださんがボケ、さくらばさんがツッコミというスタイルでの進行になっていましたw

内容としては基本的な演算子やクラス、Java8 で加わったラムダ式のコーナーケースについて問うものでした。選択肢式だったこともあり、間違った理解で回答したものもいくつかあったのですが、終わってみたら全問正解は私一人という結果になっちゃいました。(^^ゞ

全問正解ということで、さくらばさん作「Java SE 7/8 速攻入門」を頂いちゃいました。ありがとうございました。

最後に

こういう技術者が集まる場に参加するのは恐らく昨年の CCC Spring 以来だったと思いますが、やはり他のエンジニアの方々と交流すると色々な刺激が得られていいですね。

非常に規模が大きくなって驚いたのですが、これを運営するのも大変だったと思います。JJUG 運営の皆様、本当にご苦労様でした。

*1:セッションの後の休憩時間で harfnes のソースも覗いてみましたが、色々興味深かったです。

*2:自分の周囲を見ていると、Java で REPL 使いたい、というときは Groovy 使う派と Scala 使う派に分かれているように見受けられます。

*3:このセッションの影響か、私の javapackager についてのブログエントリへもアクセス、ブックマークが増えているような。

*4:でも、今後 Gradle は Kotlin ファーストで行くらしいですね。

*5:特に前者が効いとりますな (^^;;

JJUG ナイトセミナー 「Reactive Streams特集」の感想

6/24 に開催された 【東京】JJUG ナイトセミナー 「Reactive Streams特集」 に参加してきました。これはその感想エントリになります。
ここ最近は勉強会に参加しても、それについてのエントリを書くのをサボってましたが (^^;; 、今回の勉強会は自分にとって非常に考えるところが多かった内容でしたので、ちょっと思ったところをだらだらっと並べてみました。

勉強会について

勉強会の内容は 2 部構成になっていました。前半は岡本雄太 (id:okapies) さんによる「Reactive Streams 入門」で、Reactive Streams について、似た言葉である Reactive Programming や Reactive Manifesto と併せて、それぞれの概念の違い、関わりについて分かり易く説明してもらいました。

https://speakerdeck.com/okapies/reactive-streams-ru-men-number-jjug

またこの発表内容について、岡本さん自身が素晴らしいフォローアップエントリを書いてくださっています。 okapies.hateblo.jp

後半はよしだ (@) さんによる「Reactive Streamsを使ってみよう」で、こちらは RxJava を題材に実際のコード例について解説するという内容でした。

http://www.grimrose.org/jjug-2015-reactive-streams/#!index.md

よしださんも自身の発表内容についてのフォローアップエントリをあげています。 http://www.grimrose.org/blog/2015/06/jjug-2015-reactive-streams/www.grimrose.org

勉強会の感想

今、ソフトウェア開発の世界では「Reactive なんちゃら」という言葉がすごく流行っている印象があります。
私が主に目にしていたのは、当日岡本さんが発表していたところの "Reactvie Programming" であったわけですが、次に示すような、一見交わらない世界でそれぞれブームになっている印象があってとても興味深いなと思っていたところでした。

  • GUI 開発の世界
    • 特にデスクトップアプリ、スマートフォンアプリ、Web の SPA のようなリッチクライアントの実装
  • 大規模分散並列処理の世界

そんなところで Typesafe 社らが中心になって、 Reactive Manifesto なる宣言をどーん、と出してきたりして、「あれ、これって流行りの Reactive Programming の話と関係するの?」「でもその割にはターゲットとしているところが違うような...」「ていうか何このメンツ?」と正直混乱していたところでした。

岡本さんは「Reactive なんちゃら」なキーワードとして次の 3 つについて、それぞれの違いについて次のようにとても分かり易く説明してくれました。

  • Reactive Programming は「プログラミングモデル」
  • Reactive Manifesto は「アーキテクチャ
  • Reactive Streams は「ランタイム」

Reactive Programming について

Reactive Programming はデータフローの仕組みを構築するために、関数を DAG としてつなぎ合わせる形で記述し、データの伝搬はランタイムに任せるというプログラミングスタイルです。データの変更を自動的に伝搬させることができる、非同期化、並列化しやすいというメリットがあります。

少し違うところがありますが、このプログラミングスタイル、GUI の世界では「データバインディング」という形でかなり馴染みのある概念だったと思います。
例えば、岡本さんの発表で紹介されたサンプルの式を JavaFXバインディングを使って表現してみると、次のように記述することができます。

   @FXML
   Label answer;
   @FXML
   Spinner<Integer> valueA;
   @FXML
   Spinner<Integer> valueB;

   private void bind() {
       IntegerProperty a = new SimpleIntegerProperty(0);
       a.bind(valueA.valueProperty());
       IntegerBinding a1 = a.add(1); // a1 = a + 1
       IntegerProperty b = new SimpleIntegerProperty(0);
       b.bind(valueB.valueProperty());
       IntegerBinding b1 = b.add(-1).multiply(2); // b1 = (b - 1) * 2
       answer.textProperty().bind(a1.add(b1).asString()); // a1 + b1
   } 

これを動作させると次のように動きます。

全体のコードは Gist にアップしておきました。
https://gist.github.com/aoetk/9c74ee1bb17afb304bff

このように GUI の世界ではこのプログラミングスタイルがかなり前から浸透していましたが、同じようなプログラミングスタイルをもっと他の場所でも使えないか?ということで .NET の世界で Reactive Extensions が登場し、一気に Reactive Programming が流行りだした、というのが私の認識です。
ただ、データバインディングはアプリケーションが扱っているデータの変化に着目していますが、Reactive Programming を GUI に適用する場合はイベントのストリームに着目しているという違いがあるかなと私は考えています。
ちなみに JavaFX の世界でも、イベントストリームに対して Reactive Programming を行うための ReactFX が登場しているようで、機会があれば自分で作るアプリケーションにも使ってみたいな、と思っています。

Reactive Manifesto について

Reactive Manifesto については今回の説明を聞いて、「ああ、これは REST のような、アーキテクチャ原則についてまとめたものだったんだあ」とやっと腑に落ちました。
Reactive Manifesto の中では、昨今見られる大規模システムに共通してみられる設計を備えたシステムを Reactive Systems と名付けています。それらには即応性、弾力性、耐障害性、メッセージ駆動といった特徴を備えているとのことです。
具体例が特に挙げておられず、マーケティング色の濃い文書であるとの説明がありましたが *1 、Microservices というスタイルのアーキテクチャが評価されてきていたり、TwitterFacebook では大量のメッセージを捌くために、非同期でメッセージ駆動ベースのアーキテクチャを構築していますし、昨今のシステム開発においてこのようなアーキテクチャスタイルが求められるようになってきているもの確かだな、と思いました。
成功したパターンから原則を見出しているところも REST と似ていますね。あれも WWW が何故成功したのか?を出発点として出てきたものなので。

Reactive Streams について

で、本題の Reactive Streams ですが、これは Java における Non-Blocking かつ Back Pressure 付きの非同期ストリーム処理を標準化するためのものであるとの説明でした。何と Java9 での標準化を目指しているとのことで、これは驚きました。 *2
非同期ストリーム処理版 JDBC のようなものですが、JDBC とは比較にならないほど対象が広くふわふわとしてるなあと正直思いました。(^^;;

今のところ API 自体はインターフェースが 4 つあるだけのとてもシンプルなものです。まあこれだけ広い対象から最大公約数的に抽出するとこうなっちゃいますかね。
一般的な Publish-Subscribe パターンに加えて、Subscriber 側の処理能力を超えないように、Subscriber 側が Subscription という形で要求を示す (これを Back Pressure と呼ぶそうです) というアーキテクチャになっています。

シンプルではありますが、API を標準化することのメリットは小さくないと思います。今回のよしださんの発表では RxJava と Akka Streams をつなげるサンプルがありましたが、このように異なる世界を同じプログラミングスタイルでつなげられるのは大きいと思いました。

まとめ

だらだらと書き連ねてきましたが、Reactive Programming はプログラミングスタイルに、Reactive Systems はアーキテクチャスタイルについて言及したもので直接的にはつながるものではない (ただし、後者は思想的には前者の影響を受けている) 。Reactive Streams は Reactive Systems のようなシステムを構築する上での道具立てを、Reactive Programming なスタイルで可能にすることを目指したものというのが自分の理解です。
今まで断片的にしか目にしていなかった情報がかなりつながったので、参加してとても良かったと思いました。
素晴らしい発表をしてくださった岡本さん、よしださん、そしてこのような場を設けてくださった JJUG 幹事の皆さん、ありがとうございました。

*1:確かに Typesafe 社の Typesafe Reactive Platform を売り込むものなんだろうなという感じがします

*2:java.util.concurrent パッケージに入れようとしているようです

Asakusa Framework 勉強会 2014真夏でLTを行ってきました

8/22 に実施された Asakusa Framework 勉強会 2014真夏 で LT を行ってきましたので、発表内容の補足と勉強会の感想について書きたいと思います。

当日の発表資料は以下の通りです。

AsakusaのドキュメントをDashで見たい from Takashi Aoe

直前に発表することを決めたので、内容は完全に小ネタです。
Mac 用の API ドキュメント閲覧ツールである Dash の紹介と、その Dash に Asakusa Framework の公式ドキュメントAPI ドキュメントを組み込めるようにする方法について紹介しました。
その説明を通して、Asakusa の公式ドキュメント自身も GitHub 上で公開されていること、ドキュメントも OSS として公開されている以上、みんながその内容を充実させるための貢献ができることを伝えることも狙いでした。
図らずも今回の LT 大会では公式ドキュメントに対する指摘が色々ありました。OSS への参加で一番貢献しやすいものの一つがドキュメントだと思っています。中の人的にはドキュメントに対して貢献してもらうことはとても有り難いことなので、どしどし指摘なりパッチなりを送って欲しいと思います。
現在 Issue がみんな英語で記述されているので、躊躇されている方もいらっしゃるかも知れませんが、日本語で全然おっけーですので、どんどん寄せてください。

LT で紹介した Dash はとても良いツールなので、Mac を使っている開発者の皆様は是非試してみてください。
様々な言語やライブラリの API ドキュメントを 1 つのツールで一元的に閲覧できるのは便利です。
それに、第 3 者がコントリビュートできるようになっているため、かなりマニアックなものまでカバーしています。
以下に Dash の Web ページで紹介されている、サポートしている言語やライブラリの一覧のスクリーンショットを貼っておきますが (これでも上半分です) 、実に様々なものをカバーしていることが分かりますね。 *1

さて、他の方の発表を聴いていての感想ですが、皆さんかなり Asakusa をガッツリと使い出しているなあと驚きました。
非構造化データの取り扱いへのチャレンジがあったり、演算子の使い方に対する深い考察をした発表があったり、テストドライバの実装を調査した発表もあったりと、こちらも聴いていて「そういう視点があったか」と何度か気付かされることがありました。
土佐さんの演算子チートシートはとてもいいですね!私も可能ならば内容の充実に貢献したいと思っています。 *2

*1:個人的にはちゃんと JavaFX もカバーされていたことがポイント大 :-)

*2:プロジェクトページは https://github.com/ironpeace/asakusa_operators_cheetsheet のようですね

JavaOne報告会でJavaFXについての発表&LTを行ってきました

10/19 に実施されたJavaOne 2013 サンフランシスコ報告会 Tokyoにて、JavaFXのアップデートについての発表とLTを行ってきました。

当日のJavaFXアップデートの資料は以下の通りです。

JavaOne2013報告会 JavaFX Update from Takashi Aoe

JavaOne初参加の身でありながら、例年は櫻庭さんが担当されているポジションを引き継ぐことになったので、とても緊張しました。
自分の前に寺田さん、大山さん、櫻庭さんが発表がありました。3人の発表で場が大盛り上がりした状態で自分の発表に入ったのですが、自分の発表になると雰囲気がしーんとした感じになってしまったので、「うわ、これは失敗かなあ...」とショックを受けたのですが、後から聞いた話だと結構皆さんそれなりに楽しんで聞いて頂けたようで、ほっとしています。
そうは言ってもこのような大きな場で長丁場の発表をするのにはまだまだ修行が必要だと言うことがよーく分かりました。精進します。

本編のJavaFXアップデートに続いて、LTでもお話しをしてきました。こちらはJavaOneではちょっと珍しい感じのHadoopのセッションについてです。
JavaFXの方は真面目な感じで行ったので、こちらはちょっとくだけた感じにしました。
発表資料は次の通りです。

JavaOne2013報告会 LT資料 Hadoopの話を聞いてきた from Takashi Aoe

今のところSlideShareでのページビューはLTの方がちょっと上ですね。何だかんだ言ってHadoopは注目ネタですかね。

さて、ブログの方のJavaOne報告もまだ半分ほど残っていますね。こちらも早めにアップします。(^^;;

Java Day Tokyoに参加&発表してきました

5/14 (火) に開催されたJava Day Tokyoに参加し、さらにその中のセッションの1つである、Java The Nightに登壇しました。
まさかこんな大きなイベントで自分が発表する側に立つことになるとは思わず、とても緊張しましたが良い経験になりました。
このエントリではイベントの感想についてまとめたいと思います。

Java The Nightでの発表について

Java The Nightで自分は「監視ツールでみるJavaFXJava EEの魅力」と題して発表しました。セッション資料はSlideShareにアップしています。

Java Day Tokyo 2013 Java the Night 監視ツールでみるJavaFXとJava EEの魅力 from Takashi Aoe

登壇することになった経緯ですが、Oracle寺田さんからTwitterのダイレクトメッセージで突如お願いされましたw
寺田さんからの要望は、「デモの際におもしろ、おかしく、やっていただくことはできますでしょうか。」でした。
随分ハードル高いなあと思いつつも、折角の機会なので登壇させて頂くことになりました。

発表の内容としては、JavaFXで作ったGlassFishの監視アプリケーションのデモを通して、自分がJavaFXJava EEの魅力と思っている点について伝えるというものでした。
インパクト重視という要望だったので、JavaFXで作るアプリは派手めな、中二病っぽい感じの路線で行くことにしました。

JavaFXについてここで伝えたかったことは、プログラムを使って何かやりたいタスクがあったときに、JavaならばJavaFXが加わったことで、このように綺麗なGUIで成果をアウトプットできるようになるということです。
CUIもいいけど、GUIでやると楽しいですよ。
このアプリケーションのルックスについては予想以上に反響があったようですが、実はそんなに手数を掛けなくてもこのような見た目にすることが可能です。この点については後ほど別エントリで解説します。

Java EEについては、運用フェーズにおける監視という側面からの利点を伝えようとしました。Java EE APサーバーはいずれもサーバー上で稼働するサービス、アプリケーションに対して豊富な監視オプションを提供しています。
Webアプリケーションフレームワークはともすると開発の側面ばかりに目が行きがちですが、ソフトウェアのライフサイクル全体で考えると運用も重要です。その点も考慮して選択を考えてもらったらと思います。

各セッションについての感想

それでは自分が参加した各セッションについて軽く感想を書いていきます。

基調講演

基調講演ではJava SE、Java FX/Embedded、Java EE、コミュニティについて、それぞれのOracleのキーパーソンから現状と今後の展望について説明するというものでした。
特に自分の印象に残ったのが、OracleがM2Mを重視しているように見えたことです。今後は様々なデバイスがネットワークでつながるようになるため、確かに次にソフトウェア開発の分野でホットになるのはここかも知れません。そして恐らくこの分野でもライバルになるのはAndroidでしょうね...。

Raspberry Pi NightHacking

Pro JavaFX 2の著者の一人であるStephen Chinさんによる、Raspberry Pi上でのJavaFXアプリケーションの実行についてのセッションでした。
目の前でJavaFXアプリケーションを構築して、それをRaspberry Piに移植動かすところまでを見せてもらいました。
驚いたのは、本当にそのままのJavaFXアプリケーションが動いているということです。エフェクトとかも普通に動いていました。質問したところ、動かないのはWebViewとMediaViewだけとのことです。
Raspberry Pi向けのJava SEのプロファイルは結構小さいのですが、それでもJavaFXアプリケーションがここまで動くというのには色んな可能性を感じさせてもらいました。

Java IDE の最新トレンド

EclipseNetBeansIntelliJ IDEAというJava界三大IDEについて、Eclipse派代表として竹添さん、NetBeans派代表としてきしださん、IntelliJ派代表として今井さんが語り合うというとても楽しいセッションです。
モデレータの山本裕介さんがIntelliJユーザーと言うこともあり、ややIntelliJにバイアスが掛かっていたような気がしましたが。(^^;;
スライドが三者三様でこちらもそれぞれの個性が出ていて面白かったです。竹添さんはきっちりPowerPointで、今井さんはrstテキストで、そしてきしださんは安定の手書き資料w
なお、自分は基本的にNetBeans派ですが、IntelliJもちょこちょこ触りますし *1 、もちろん仕事の必要上Eclipseも結構触ります。
ディスカッションで自分の印象に残ったのは以下の点です。

  • Eclispeは確かにセッティングが面倒だけど、Eclipseが出たての頃はみんなその作業をとても楽しんでいた。
    • 確かに自分もEclipseが登場したての頃は、とてもわくわくしながら拡張を楽しんでいたのを覚えています。
  • InteillJはJava、Groovy、Scalaを1つのプロジェクトに混在させて開発できる。
  • NetBeansはJenkins連携ができる。ただしメニュー名は "Hudson" だけどw
  • (テキストエディタ派の人に向けて) IDEの利点は「IDEが良い書き方を教えてくれる」ところにありますよ。
Groovy, Clojure, Scala, VisageでのJavaFX活用

こちらもStephen Chinさんによるセッションです。Groovy、ClojureScalaVisage *2JRubyでのJavaFXのサポート状況について順に説明してもらいました。
ちなみにChinさんはScalaFXVisageのコミッタをされています。
JavaFXのサンプルアプリケーションとしてよく使われる、Vanishing Circleを例に、他の言語で実装した例を見せてもらいました。

特に自分がいいなと思ったのがGroovyFXです。@FXBindableアノテーションを付けることで、JavaFX形式のプロパティを生成してくれるのはとても嬉しい!
自分の以前のエントリでも解説しましたが、JavaFX形式のプロパティの記述はちょっと面倒なのです。
ScalaFXもとてもScalaらしいアプローチでDSLを設計していて、こちらも好感が持てました。
VisageJavaFX Script時代から言語仕様が強化されているのですね。

なお、Chinさんは日本の漫画やアニメが相当好きなようで、各言語についてアニメに例えてらっしゃいました。以下の通りですが自分のよく知らないモノもあるw

タブレット用の JavaFX アプリケーション開発

JavaFXエヴァンジェリストであり、Pro JavaFX2の著者の一人である、Jim Weaverさん *3 による、JavaFXのマルチタッチ関連APIの解説と、タブレット向けアプリケーションを作る上での注意点について説明するというものでした。
タブレットのターゲットはWindows8でした。実際にSurface Proを操作しながら解説していました。

マルチタッチ関連APIの解説の内容は自分が先日JavaFX勉強会で行ったものとほぼ同内容でしたw
タブレット向けアプリケーションを開発する上での注意点は、やはりコントロールの大きさでした。そのためにデザインにはなるべくCSSを活用し、まずはrootクラスのフォントを32px程度にするのが良いとのことでした。

結構説明が早く終わってしまったので、質問がいっぱい出ていました。自分は高解像度端末におけるスケーリングの対応について聞いたのですが、現時点では端末に合わせて自分でサイズを調整するしかないようです。でも、後で気付いたのですが、確かJavaFX8で導入されるModenaテーマはスケーリングの変化に対応していたような?

Java The Night

最後は自分も登壇したJava The Nightです。みなさん実に色んな持ちネタを披露してもらって、とても楽しめました。
驚いたのはほとんどの人がJavaFXを使っていたことです!自分が考えている以上にJavaFXJava開発者の間で認知度を上げているのかも知れません。

最後に寺田さんから発表されたJava7のAPIドキュメント日本語化のニュースは驚きました。Oracle本体を説得して日本語化にこぎつけた日本Oracleの皆様方には感謝です!


このように、聴講、発表共にとても楽しい一日を過ごすことができました。このような素晴らしい場を提供して頂いた日本Oracleの皆様には厚く御礼申し上げます。ありがとうございました。

*1:特にJavaFXサポートが入ってからは、JavaFXサポート機能がなかなか強力なので結構触るようになりました。

*2:OracleディスコンにしてしまったJavaFX Scriptオープンソース化したものです

*3:ちなみに先日のJJUG CCCでは櫻庭さんのお誘いで、Jimさんとお昼ご飯を食べに行きました。

Cloudera Manager勉強会に参加してきました

7/27に開催された第1回Cloudera勉強会に参加してきたので、その内容について軽くレポートしたいと思います。
お題はCDHの運用管理ツールである、Cloudera Manager4.0の紹介でした。Hadoopは運用周りのサポート状況がまだまだ弱い状態であり、その部分に着目したCloudera Managerには強い関心を持っていたので参加することにしました。

場所はCloudera社が入っているビル (ビュレックス京橋) の地下会議室でした。少し遅れて入室したのですが、入ったら机に飲み物とお菓子が既に沢山置いてあったりして、リラックスした雰囲気で進行していました。講師は嶋内 (id:shiumachi) さんです。

SlideShareにも上がっている以下の資料をベースに概要を解説した後に、実際に画面を動かしながらの説明になりました。
http://www.slideshare.net/Cloudera_jp/cloudera-manager4namenodeha

リラックスした雰囲気で進めていたこともあって、途中質問が沢山飛び交い、随分盛り上がりました。結局予定よりかなりオーバーしていたような。
以下、上の資料に載っていない話や質疑応答を中心にまとめます。

  • ClouderaManagerについて
    • 多数のマシンの集合体を1つのシステムとして管理するという考え方の元で作られている。
      • Hadoopでは1台のサーバーが落ちてもパーツの1つが落ちたようなものなので。
    • いわゆるインストール作業が要求されるのはサーバーのみで、エージェントはインストール後に画面から対象サーバーを選択してSSHでばらまくようになっている。
    • もちろんHadoopクラスタを構成するノードに共存させてもいいが、専用ノードにインストールすることを強く推奨する。
      • 管理DBは複数種類あり、大規模なクラスタを管理する場合は別々のノードに分けた方が良い。
  • Service and Configuration Manager (SCMについて)
    • システムの起動停止を担当する。ちゃんと依存性を見て、順番に起動や停止を行ってくれる。
    • フリー版でもほとんどの機能が使えるが、Enterprise版ではバージョン管理が行える。
      • バージョン管理というより、SCMのリビジョン管理に感覚は近い。1つ1つのアクションを戻せるようになっている。
    • クライアント設定はバージョン4からちゃんと設定を反映してくれるようになった。(3では設定ファイルの生成だけ)
      • /etc の下に設定を出す。環境変数の設定なども不要にしている。
    • 面倒なHDFS HAの設定も3ステップでOK。
    • アップグレードはパッケージのアップグレードはできないが、サービスのアップグレードはできる。
    • サーバーの設定については、GUIからの設定を、/var/scm の下に設定XMLを吐き出して利用するようになっている。
      • 動的に生成するので、設定のマスタはDBにあると考える。
    • ログの取得について、ログのデータをClouderaManagerのDBに入れるようなことはしない。DBにはログファイルのインデックスのみ入っており、都度読み込みに行く。
      • ログは時系列検索が可能になっている。
  • API
    • フリー版の全ての操作をREST API化している。
    • APIドキュメントはexampleしか載っていないw (まあ、カラム名を見れば大体分かりますが...)
  • Enterprise版
    • 個別に購入するのではなく、サブスクリプションを購入したら利用できるようになる。
    • サブスクリプション版を購入したら、Cloudera側としてはClouderaManagerを使って欲しい!
      • サポート時のやり取りがスムーズになる。
      • 例の閏秒問題の時、ClouderaManagerを使っていた顧客はそうでない顧客と比較してとても早く問題を特定できたとのこと。
    • サービスモニタ画面があり、ヘルスチェックや稼働状況がポータル画面の形式でまとまっている。
    • ホストモニタ機能もある。CPU、メモリ使用率はロードアベレージといった割と基本的な項目ではありますが。
      • 項目は今のところ決めうちで、ユーザー側でカスタマイズして追加することはできないとのこと。
    • 稼働しているコンポーネントのバージョンチェック機能がある。実はこれが結構便利で、クラスパスの設定ミスなどによるバージョン不整合なども検知できるようになる。
    • ジョブのアクティビティモニタは残念ながらMapReduce1のサポートにとどまっており、MapReduce2はまだ。
    • アクティビティモニタで面白いのは類似ジョブの比較機能。95%信頼区間から外れているかを見て、性能劣化の傾向とかをチェックすることができる。
      • 「類似」の基準はジョブ名とのこと。Hiveだとクエリを見る。
    • 面白い機能として、サポート連携機能というのがある。Clouderaのサポートに渡すための診断情報を収集して送信できる。
  • デモ
    • (Terasortを流してデモしていました。)
    • Mapのローカリティを表示するチャートがある。
    • ラックアウェアネス設定もGUIから簡単に可能!ダイアログからラック名を入力して設定できてしまう。
    • ダイアログを閉じられないことがあったり、ちょっとバグっぽい動作もw
    • Oozieも管理項目に入っているが、現状は起動停止とヘルスチェック程度しかサポートしていない。
    • Hueは2.0になって、ジョブ実行管理に徹するようになった (管理機能はClouderaManagerに譲るように)。
    • ユーザーの権限管理はまだシンプル。管理者権限と閲覧権限のみ。
    • ログ検索はクラスタ、ノードをまたがって行えるので便利!
    • レポート機能があるが、ディスク周りが中心。MapReduceのレポートは1つだけあったが、デモではいつまで待っても出力されず...。
    • Pigのぶたさんのアイコンがちょっと可愛かったようなw
  • 質疑応答とか
    • 設定をXMLから読み込んだりはできる?
      • その機能はない。GUIからの設定のみ。インポート機能があるが、これはClouderaManager自体の設定のインポート。
    • ClouderaManager自体の冗長化はできる?
      • 特にそのような機能は設けていない。普通のRDBMS冗長化対策で。現状はClouderaManagerがSPOFになっているのは認識しているので、改善を検討している。
      • SCM本体のDBが生きていれば稼働はできる。なので、サービスごとにDBは分割することを勧める。
    • Enterprise版の評価版はある?
      • 個別問い合わせでお願いします、とのことです。

このような感じでした。Hadoopの管理用ツールとして欲しいところを一通りカバーできているようで、なかなか良くできているとの感想を持ちました。GUIも結構頑張って作り込んでいる印象です。
Cloudera社のサポートの経験をうまく活かしているなと思いました。サポートが遭遇したユースケースを中心に機能を作り込んでいったという感じで、とても参考になりました。

第7回JavaFX勉強会でLTしてきました

ちょっと遅くなりましたが先日行われた第7回JavaFX勉強会に参加し、LTもしてきましたので、こちらで軽く報告します。

自分の発表資料は以下の通りです。
http://www.slideshare.net/takashiaoe/macjavafx-at-7javafx-13518044

発表内容はMacでのJavaFXの開発や配備についてのお話しです。ちょっとMacユーザーならではの自虐ネタも交えてw
内容は結構絞ったつもりですが、それでもLTの5分間となると駆け足でしゃべるしかないですね。もう少し時間があればJARバンドラーのデモをやりたいと思っていました。
JARバンドラーについては後日このブログでサポートするエントリでも書こうかな。
発表でも最後に話しましたが、MacでもJavaFXの開発環境はほぼ整いました。と言うことでMacユーザーの皆様もJavaFXでの開発を楽しんでくださいね。
JDK7がLionしかサポートしていないのはつらいですが、Macの世界はいつもこんな感じですからねえ...。iCloudとかもSnow Leopard以前はガン無視ですし。

では他の方々の発表についてもそれぞれ軽くコメントを。

  • 片貝さんのNetBeansについての発表 (発表資料)
    • NetBeans7.2ではSceneBuilderとの連携強化や、CSSの補完が効くようになったり (個人的にはこれは嬉しい!) 、とJavaFXの開発環境としての強化が順調に図られているようです。あとはFXMLの補完が効くようになってくれれば...。
    • 地味にSwingベースのJavaFXアプリケーションプロジェクトが作成できるようになっているのは嬉しいですね。今後JavaFXが最も良く使われるのがSwingのリプレースだと思いますが、印刷などまだまだAWT/Swingをカバーできていないところが多いので、これの重要性は高いと思っています。
    • みんなここぞとばかりにNetBeansへのリクエストを出してましたw 自分も懇親会でいくつかリクエストしたような。
  • 櫻庭さんのSceneBuilderについての発表 (発表資料)
    • SceneBuilderについて、デモを中心にした説明でした。相変わらずJavaFXで作った資料のクオリティが高い! 驚いていた参加者も多かったように見えます。
    • NetBeansとSceneBuilderの分担が少し中途半端とのことですが、これはMaciOSの開発でのXCodeとInterfaceBuilderの分担を真似たからこうなっているのかなと個人的には思っています。
    • 質問が沢山飛んでいました。そのやりとりの中でカスタムコンポーネントのパレットへの登録ができない、と言うの話が出てきましたが、これは確かに早く実装して欲しいですね。
      • 質問の中に、コンポーネントの整列はないか? と言うのがありましたが、コンポーネントを選択してGridPaneを適用することはできるので、これで代替できそうだと後で気付きました。
      • それからSceneBuilderは結構すいすい動きますよー。機能を純粋にFXMLの編集だけに絞っているというシンプルな作りだからというのもあるでしょうが。
  • mike_neckさんのFx-JS-JUnitについてのLT (発表資料)
    • ニャル子さんネタ全開の怒濤のスライド! これはやられましたw トークも軽妙で場の雰囲気持って行っちゃいましたね。
    • でも中身は普通に数十分掛けてやるようなとても濃い内容です。JavaFXのWebEngineを使ってJavaScriptのテストに活用するという発想は面白いと思います。期待しています。
  • taiz77さんの画面遷移ライブラリのLT
    • 大学院でJavaFXを研究の題材にされているそうです!
    • JavaFXのアプリケーションフレームワークを考えておられるようで、現時点ではJavaFXに対するフレームワークというのは発表でも紹介されていたJFX Flowくらいしか見当たらないので。こういう取り組みは貴重だと思っています。
    • ただ、タイムアップでそのフレームワーク自体の紹介までたどり着かなかったのが残念でした。
  • kimukou2628さんのGriffonについてのLT (発表資料)
    • デスクトップGUI向けGrailsのような位置付けを目指しているフレームワークであるGriffonについての紹介でした。
    • 先にJavaFXではまだフレームワークらしきものはない、と書きましたが、このGriffonも有望だなーと思いました。FXMLとの連携も考えているのがいいですね。
  • 寺田さんのJavaFXエンタープライズアプリケーションについてのLT (発表資料)
    • 何とApplication Client Containerを使ってJavaFXとサーバーのEJBを連携させる方法についての発表でした。ある意味今後JavaFXが最も使われそうな用途のようにも思えます。
    • 実は自分は過去のSI案件でSwingアプリケーションとサーバーのEJBを直接RMIで接続する形態の開発に関わったことがあります。ですがそれは古のJ2EE1.3の時代の話。JavaEE6でのEJBへのリモート接続についての情報はとても貴重だと思いました。
      • リモートEJBのインジェクション対象のフィールドはstaticである必要があったんですねえ...。

このような感じで他の方々の発表も内容が多岐にわたり、充実していました。発表資料へのリンクを張っておいたので、是非見て頂ければと。

回を重ねるごとに参加人数が増えてきているのに驚きです。Swingをやっていた方はもちろん、Flexのような他のRIAの世界から来た感じの方とかもいましたねえ。
懇親会も参加者が多くて、色んな方と交流ができて楽しかったです。どんどん盛り上がってきて嬉しい限りです。