2012年5月28日月曜日

JavaQne(じゃばきゅん) Fukuoka 2012 に参加しました(後編)

JavaQneはまだまだ続きます。
JavaQne(じゃばきゅん) Fukuoka 2012 に参加しました(前編)
JavaQne(じゃばきゅん) Fukuoka 2012 に参加しました(中編)

JavaFX and Web Integration

リッチなUIでJavaの表現力を大幅に強化するJavaFXと、FXに含まれるWebコンポーネントを利用した新しいマッシュアップのかたちについての講演でした。

以下、簡単なまとめです。

今後の方向性

  • JavaSE8の標準APIに。
  • GUIビルダーの提供(SceneBuilder)
  • オープン化

JavaFXのWebコンポーネントの概要

  • 本格的なブラウザを内蔵
  • Webkitベース。HTML5の一部をサポート。JavaScriptエンジン。
  • DOMアクセス、SVGサポート

利用シーン

  • Webコンテンツの表示(ローカル生成コンテンツ含む)
  • Webアプリケーションの埋め込み
  • JavaからWebアプリをコントロール
  • Webアプリと多彩なJavaライブラリを融合

Web Integration

上記のJavaFXに含まれるWebコンポーネントを利用したWebアプリとの連携について各種デモを交えながらのお話。

Webコンポーネントは、Javaアプリの中にブラウザ機能を組み込むことができます。
そして、JSObjectオブジェクトを通して、ブラウザのJavaScriptとJavaアプリがやり取りができるのです。
これにより、JavaアプリからWebページを動的に操作することができるようになります。

Androidをやるかたは、WebViewのaddJavascriptInterface()メソッドによる操作をイメージしてもらえばわかりやすいかと思います。

また、JavaFXのWebViewはシングルスレッドポリシーであり、WebコンポーネントにはJavaFXのアプリケーションスレッドからアクセスする必要があるとのことでしたが、これもAndroidのUIスレッドとHandlerと同様の関係性ととらえることができます。

iOSとJavaFX

上記のJavaFXに含まれるWebコンポーネントを利用したWebアプリとの連携について各また、実験的な取り組みとしてiOSのアプリにJavaランタイムごと含めてJavaFXのアプリを動かすデモも見せていただくことができました。(あくまで実験とのこと)
いつか、iOSアプリもJavaで開発できる日が来るかもしれません。

JavaFXはまったく使ったことがなかったですが、Androidをやったあとなら意外とすんなりと入れるかもしれません。



The New JSR-107 Caching Standard

パフォーマンス確保のためのJavaのオブジェクトキャッシュの仕様についての講演でした。

以下、簡単なまとめです。

JCacheについて

Javaでのオブジェクトキャッシュ仕様であるJCache。
既に存在する各ベンダーによるキャッシング技術を標準APIにより隠蔽するものことです。
キャッシュ統計の取得や、アイソレーションレベルを指定したトランザクションの仕組みなどが提供されるみたいですね。

実装

以下のAPIを利用してキャッシュを管理します。

  • CacheManager:キャッシュの検索、ライフサイクル管理
  • CacheBuilder:キャッシュの生成
  • Cache:キャッシュ操作用のメソッドを提供

またアノテーションが提供されており、それらを利用することで利用側、提供側がキャッシュを意識しないロジックで記述することが可能。

  1. Service クラスでキャッシュ対象にアノテーションをつける。
  2. 使う側では、Serviceをインジェクションする。

これによりDIコンテナがメソッド呼出し前に割り込んでキャッシュを取り出す。
アノテーションのみで処理を意識しないというのはありがたいかも。

比較的小さなAPIみたいなので、興味があれば使ってみたいと思います。
(Mavenでjavax.cacheをいれればつかえるみたいです。 by @yuutoさん)



近頃のNetBeans

きしださんのライブコーディングによるNetBeansの新機能紹介。
ここは、JavaQneに来られた方だけが得られた情報がたくさんでした。
内容はあえて書きません!w

きしださんサイコー。



所感

新しい情報をたくさん得ることができました。ひとりだとどうしても、情報収集の幅が限られてくるので、こういう機会は非常にありがたいです。
このイベントを開催してくれた方々、参加してくれた方々に感謝したいと思います。
ぱちぱちぱちぱち!

それと、最近だと普通なのかもしれませんが、講演の間、平行して#javaqneハッシュタグで関連する情報やらツッコミやらが飛び交ってて、静かに会場の一体感が高まっていく感じが楽しかったです。
学生時代の授業中に手紙まわしてたのを思い出しました。
リアルタイム性は比較になりませんが。

今回、自分も有用な情報を提供したかったのですが、唯一のファボられが冒頭のJavaRapをYoutubeで見つけたつぶやきでした。精進しよう...。


おまけ:The "Java Life" Rap Music Video (Japanese Subtitles)

冒頭のJavaラップ(字幕入り)はこちら


JavaQne(じゃばきゅん) Fukuoka 2012 に参加しました(中編)

前編からの続きです。
JavaQne(じゃばきゅん) Fukuoka 2012 に参加しました(前編)

Java SE 7、そしてJava SE 8

今までのJavaの仕様策定に関する紆余曲折の歴史を楽しそうに語る櫻庭さんが印象的な講演でした。

講演内容は、Java SE7, 8 の追加機能についてです。
基本的にはIT Proの「Java SE 7徹底理解」を読んでくださいとのことでしたw

ポイントまとめてみます。

Java SE 7について

Project Coin

Project Coin(文法の小さな変更)は以下のとおりです。
詳細は「Java SE 7徹底理解」に譲ります。

  • switchでの文字列
  • 例外のmulti catch
  • safe rethrow
  • ジェネリクスの省略記法(ダイヤモンド演算子)
  • try-with-resources
  • 簡潔な可変長引数メソッド

try-with-resourcesのみ解説がありました。
こんな感じでAutoCloseableを実装したクラスを以下の構文で記述するとclose処理をJava側で自動でやってくれるとのことです。
コードが簡潔になってclose漏れがなくなるので積極的に使っていくべき構文だと思います。
close処理が必要な標準のストリーム系のクラスは既にAutoCloseableがimplementされているみたいなので、その辺も意識しなくてよいみたいです。


NIO.2

NIO.2は新しいファイルシステムAPIです。
ファイルのコピー、シンボリックリンクなどのファイル操作ユーティリティが(やっと)提供されました。

さようなら、FileInputStream、さようならDecoratorで記述する長い処理。
FileVisitorクラスが提供され、ディレクトリツリーの検索も簡単にできるようです。
ここについては、別途調べてみようと思います。

InvokeDynamic

InvokeDynamicは、JVM上で動作するJava以外の言語でのメソッド呼出しのための仕組みみたいです。
Java言語でプログラム記述している分には意識することがない機能ですが、例えばJRubyのような言語はこの機能を使うことで呼出しが最適化されて、かなり性能があがるみたいです。

Fork/Join Framework

Fork/Join Frameworkは、マルチコア環境での効率的なタスク処理をサポートするためのフレームワークのようです。
この辺は、もう少し勉強が必要なので、機会があれば別途まとめたいと思います。


Java SE 8について

Project Lambda

ラムダと読みます。読めませんでした。ランバダと心の中で読んでいました。
以下、これがラムダと読めなかった人レベルの理解で書いてあるので、詳しい方のつっこみを期待します。

Java SE 8 では ラムダ式(記述方法)が導入されます。
よくセットで使われるクロージャが導入されるわけではないことに注意。
クロージャは「レキシカルスコープを伴うファーストクラスの関数(無名関数)」らしいです。
相変わらずJavaでは関数をオブジェクトとして使えないということです。
無名クラスまでですね。

Javaでのラムダ式は、ある条件での記述を簡単にするための新しい構文という理解です。

どういうときの記述を簡単にできるかというと、メソッドがひとつしかないインターフェースを実装した無名クラスのインスタンス生成時に簡易に記述することができます。

ラムダ式によるビフォーアフターが以下です。
AndroidのOnClickLitenerの場合、(注:Androidではまだラムダは使えません)

なんということでしょう。定義のためだけに記述していた無名クラスの記述が
こんなにすっきりしていましました。まさに匠。

匠はさらに技を見せてくれます。

型すら不要になってしまいました。まさに匠。

ラムダ式は以下の記述で利用できます。
(引数, 引数, ...) -> メソッド本体

この簡潔なコードは、前に述べたFork/Join Frameworkで処理ごとにたくさんのタスクを記述するのに効果を発揮するみたいです。

コードがすっきりとするので、これも積極的に導入していきたい機能です。
櫻庭さんの以下のサイトで勉強しました。上記以外にもっと機能があるみたいなので興味があるかたは是非。
Java in the Box Annex


Jigsaw Project


パッケージングに関する仕様をまとめたものみたいですが、時間切れであまり触れられませんでした。
おいおい調べます。



ラムダが長くなってしまった... 後編に続きます。
JavaQne(じゃばきゅん) Fukuoka 2012 に参加しました(後編)

JavaQne(じゃばきゅん) Fukuoka 2012 に参加しました(前編)

5/26に、JavaQne(じゃばきゅん) Fukuoka 2012 に参加してきました。

JavaQne(じゃばきゅん) Fukuoka 2012

東京であったJavaOneを福岡でやろうという企画で、実際にJavaOne東京で話をした人もお呼びして、Javaの話をいろいろ聞いちゃおうというイベントでした。

福岡にいるとなかなか東京の情報を直接聞く機会もないので、非常に有意義なイベントだったと思います。なにより、雰囲気が堅苦しくなくてよかったですね。

タイムテーブルはこんな感じです。

Java EE 6 からクラウド対応に向かって日本オラクル寺田 佳央 (@yoshioterada)
Java SE 7、そしてJava SE 8Java in the Box櫻庭 祐一 (@skrb)
JavaFX and Web Integration日本オラクル関谷 和愛 (@kazuchika)
The New JSR-107 Caching Standardレッドハット
日本オラクル
木村 貴由(@nekop)
寺田 佳央 (@yoshioterada)
近頃のNetBeansJavaコミュ@九州きしだ なおき(@kis)

以下、それぞれの講演のまとめメモです。

Java EE 6 からクラウド対応に向かって

冒頭、謎のJavaのラッパー(Adapterパターンではない)が踊り歌うイメージビデオが流れ、にこやかな雰囲気で講演が始まりました。

以前の難しい、開発効率が悪い、面倒というJava EE のイメージは捨ててください、
Java EE 5 からはかんたん開発へ方向転換し、EE 6 からは本番適用レベルになっていますよというお話でした。
具体的には、仕様の軽量化、拡張性、開発効率の向上が挙げられています。

仕様の軽量化

仕様の軽量化という観点では、不要なAPIの整理はもちろんのこと、プロファイルという単位で仕様が分割され、アプリケーションサーバなどの実装側が必要最小限のプロファイルのみを採用することで、軽量化が図られるそうです。
Webアプリの仕様はWebプロファイルとしてまとめられており、例えばこれを実装したアプリケーションサーバは4秒程度で起動するとのことです。

拡張性

拡張性は、外部のフレームワーク(Spring, Seasar2 ...)の組み込み定義が容易になる例を提示されていました。
Web.xmlへ定義をincludeするようなイメージで、組み込みのための定義を外部ファイルに切り出すことができるようです。

開発効率の向上

開発効率の向上という点では、Java Server FacesによるリッチなUIを持ったアプリケーションの開発環境(VB的な画面ビルダー)を例に紹介しています。

また、個人的に一番よいなと思えたのは、EJBの単体テストを容易にするための仕組みが提供されていることでした。
今までのEJBはデプロイとコンテナ起動が必要で単体テストのコストが非常に高いのが問題でした。

EE 6 ではSE環境でも
"EJBContainer container = EJBContainer.createEJBContainer(); "
のようにコンテナを取得することができるので、JUnitを利用した単体テストが容易になっているみたいです。

デプロイが不要なのはうれしいところです。

Tomcat見直し運動

上記をふまえた、講演者の寺田さんがひとり奮戦しているw、Tomcat見直し運動。Tomcatの提供するServlet, JSPに結局は各種フレームワークを加えて利用しているのであれば、Java EE の標準技術で十分対応できて、かつ軽量ですよ。
環境構築にやたらと時間かけなくていいですよということみたいです。

Java EE 7 からはクラウドのPaaS環境へ対応し、オートスケール、DBのマルチテナントを含めたJavaプラットフォームとして提供していくJava EE環境。

今後のアプリケーション開発ではEEという選択肢が増えました。



長くなってきたので中編にまわします。次は櫻庭さんの講演についてです。
JavaQne(じゃばきゅん) Fukuoka 2012 に参加しました(中編)


2012年5月19日土曜日

Android Night in Fukuoka Vol.25 に参加しました。

5/14に、Android Night in Fukuoka Vol.25 に参加してきました。
Android Night in Fukuoka Vol.25

久々の参加で、顔ぶれもずいぶん変わっていましたが、飲み物片手のLTなど、
ゆるーい雰囲気は変わらずで安心しました。

今回はLT中心。皆さん積極的で3時間弱の会があっという間でした。

気になったLTは、「ユーザ目線のアプリ開発」と「Native Driverを使ってみた」
の2本。
自分なりの考えを、他の納得できる事例を交えながら、また、詳細にプレゼンする
スキルは見習っていきたいところです。

今回、自分もLTを行いました。
資料をSlideShareにアップしたので、よければご覧ください。

さくさくAndroid開発 

AndroidでMVCモデルの開発を行うためにつくったフレームワークを紹介して
います。
フレームワークは今後も拡張予定です。ブログでも経過報告していきます。

ちなみに次回のAndroid Night は、6/4です。興味のある方はぜひ。
Android Night in Fukuoka Vol.26