Java Day Tokyo 2015に行ってきました。

※このブログでIT(仕事)ネタを書くのは初めてかもしれない。。


標題のイベントに参加してまいりましたのでレポートさせて頂きます。レポというかダラダラメモを取っただけですが。^^;

        • -

イベント名:Java Day Tokyo 2015
日時:4/18 9:30〜20:00
場所:東京国際フォーラム(有楽町)

        • -


※内容については基本的にスピーカーの講演内容に準拠します。
※明らかな間違い(認識違い・誤記)があればご指摘・補足して頂ければ幸いです。
※詳細を追えるように取ったメモをあえてほとんど間引いていません。読みにくくてごめんなさい。
※#〜はtwitterのタグです。
※敬称略


■9:30-11:30 KeyNote 基調講演 オラクル・コーポレーション Georges Saab、Cameron Purdy #JavaDayTokyo


●Java8
 日本向けに様々な書籍を発行
 関数型プログラミング クロージャの追加(ラムダ式) 既存のコードのパフォーマンス・セキュリティ向上
 Java SDK for Pepperのデモ。
 ソフトバンクグループのペッパー(Pepper) 開発コンセプト:家庭において友達になれ、家事を手伝えるロボット。
 チャオと喋り、腕を広げて伸びをするような動作。多言語言語変換も出来る
 プログラミングが出来る。マルチ言語対応でJava以外にPythonJavaScriptC++。リモートでのコントロールが出来る。


Javaのロードマップ
 JDK8 2015.3リリース Java9 2016前半リリース予定 「Jigsaw」パッケージ化の方式が変更、改善される。
 Java9アーリー版のダウンロード・フィードバックのお願い。


●SE Embedded
 デモ1 ルネサス IoT RZA1 汎用デバイス 外付け部品が無く簡易に使える Java向けのプラットフォーム
 バスでのツイート 渋滞 赤外線センサーで分析
 デモ2 ジャスパー 車(Java Car) エンジンを掛ける Cloudを利用したタッチパネル・ナビゲーション 音楽を流す


●Cameron Purdy
 Tシャツ投げ 2,3階の椅子の裏にカード有る人も貰える。
 Java EE7 2013リリース済(HTML5サポート) EE8のリリース2016後半予定 RESTFUL API json コミュニティで承認済
 デモ Oracle Public Cloud ログインコンソール DashBoard Oracleデータベース Cameronの友達が増えるとメモリが減る


●Takashi Ito
 最後のセッション Java for Kids 子供たちのプログラミング実習
 ゲスト3人によるスピーチ
 楽天中曽根さん、JJUG会長鈴木さん、関西Javaエンジニア会長阪田さん


楽天中曽根さん
 JCP参加 楽天のミッションクリティカルなサービスはJavaで出来ている 楽天カード・スーパーポイント
 PHPRubyも使われているがコア技術はJava
 楽天はサービス企業。Javaの仕様策定に時間を割けるのか。Javaに貢献するが結果的にサービスを向上できる JCPチームを社内で作り、JSRをウォッチ
 JSR-372 参照実装開発 JSF2.3の上で自社サービスを開発する


JJUG会長鈴木さん
 JJUG 3000人が参加している クロスコミュニティサークル ナイトセミナー オラクル本社 水曜夜 関東から地方に講師を派遣(交通費補助)
 今年度の取り組み JSR アダプターJSR JJUG2015 CCC Spring 50%初参加


●関西Javaエンジニア(関ジャバ)会長阪田さん
 JUG入り イベントの参加者数20〜70名 おらが町のJUGが必要。ローカルだからこそ出来る事。
 双方向のコミュニケーション。スピーカー×参加者、参加者×参加者 現場エンジニアの発表 地域特有 横のつながりが出来る
 JUGは2つしかない JUGを作る事を呼びかけよう やりたいという事をSNS・ブログなどで言おう
 地域JUGの先例として関ジャバ ゆるい運営からコミュニティの質を向上・知名度を上げる


■13:00-13:50 FXML for Structure,CSS for Styling, and JavaFX as Standard GUI Library Java in the Box 櫻庭 裕一 #jdt61


Oracle SceneBuilderのバイナリ非公開
JavaFX New GUI Library(前半未聴)
FXMLの構文説明
xmlns:fx
fx:id Bind
fx:constant:Class Valiable
fx:include…ChildFXMLの読込み Childコントローラクラスが取れる
fx:root Custom Control
class MyConrrol
FMXLLoader 部品として登録できる
CSS Analizerを使うとCSSをどう書けばいいのかヒントになる。


■14:05-14:55 Oracle Developer Cloud Service,What can you do? 日本オラクル 関屋 信彦 #jdt42


●概要
Javaアプリケーションをチーム開発するためのツール群をクラウドで提供
テスト用サーバを持たない開発サイクルを提供 複数のプロジェクト(Git)を利用可能 オールインワンの開発プロジェクト構成
メンバーを登録すると対応するプロジェクトだけが利用でき、ツール等の切替えが簡単に出来る 単体の提供は無い
Developer Cloud ServiceのUI Eclipse NetBeans に利用するためのプラグイン


●デモ・機能紹介
プライベートGitレポジトリ 次バージョンの予定機能 マージ機能 JavaCloudServiceへのデプロイ プロジェクトテンプレート
コードレビュー GitHub PULLリクエス
Hudsonビルド 基本プラグインは使えない
Eclipse OPE プラグイン 管理ページ 直近のアクティビティでコミットの内容も見える
maven3・ant実行 warファイルの生成 デプロイ 実行環境 Cloud上で共有
利用シーン 数日で開発が始められ、テストサーバも不要 低リスク 定量課金 場所に縛られない プロジェクト参画が容易
※普通のCloudのメリット
開発フェーズ間の情報提携がしやすい プロジェクトの中でテンプレートコピーし、必要な情報だけを引き継ぐ 開発の実行環境をオンデマンド(オンプレミスだっけ?)に拡張
エンタープライズアプリケーション開発に最適化されたクラウドサービス


■15:10-16:00 Lambda:A Peek Under The Hood 日本オラクル デイビッドバック #jdt63


●JSR-292(動的なメソッド呼出し)の紹介
 JVMはいい仮想マシン ダビンチマシンプロジェクト
 パフォーマンスがいい ポータビリティー(移植性) セキュリティ(バイトコード) 既存のフレームワークやライブラリ
 言語ランタイム Java以外の言語をより扱いやすくする ネック 動的言語のパフォーマンス悪化
 Java言語には適切なハードコーディング ディスパッチのエミュレーション JIT最適化が出来ない エミュレーション自体のオーバーヘッドが出来ない
 呼び出しロジックを直接参加する Groovy Ruby SmallTalk 問題 ディスパッチロジックが言語によって違う
 InvokeAPI ディスパッチロジックを定義する
 InvokeDynamic Indyと呼ばれる 最初はJavaで利用する予定はなく、Java言語に該当するものは無い 歴史的なもの
 MethodHandle メソッド呼び出す 「関数ポインタ」的なもの(秘密らしい) 多相シグネチャ
 CallSite Indyの呼出しを具象化する MethodHandleを持つ 複数の呼出し CS GetterSetterがある。
 BootStrapMethod(BSM) BootStrapping Indy命令の1回目の実行で呼ばれる CallSiteをreturn
 まとめ
  Indyのライフサイクル 2回目からCallSiteのMethodHandleが指定するメソッドへジャンプ
  リンク処理は言語ランタイムに任せる
  汎用的なので、動的片付け言語でなくても、利用できる
  CallSite変更しない限り2回目は再利用され早くなる オーバーヘッドは無い


ラムダ式の実装
 バイトコードレベル
 ラムダ式の型 新しい種類の型(関数型)を追加すると。。
  バイトコード側でどうやって型を表現するか?
  新規の関数インスタンスをどうやって生成する?
  variance(変位)をどうすべきか?
   String Instance Object == True
   String instanceof Object == true(※言語によって違う)
   ArrayList instanceof ArrayList == false
 関数型インターフェース
  一つのAbstractメソッドしか持たないインターフェース
  別名Single Abstract Method[SAM]インターフェース
 関数型インターフェースのインスタンスを作成するには?
  Thread t = new Thread{
   new runnable インナークラスを作る方法が検討されたか問題・弱点有り。
 ラムダ式ごとに一つのクラスが生成される(パフォーマンスに悪影響) ラムダ式ごとにnewが呼ばれる タイプ汚染
 他の選択肢
 デモ(内部クラス)
 dowork(Runnable t){
  t.run();
 }
 ラムダ式はどうやってバイトコードで表現するか
  ラムダ式 何をやってほしいのか バイトコードの表現を固定する
  お客様に再コンパイルをお願いしない 一度バイトコードを決めたら、それを変更しない Javaの理想 何年か前に作成したclass、jarファイルは早くなる
 どう実行するか
  ベストの答えが無い 実装を固定したくはない 後回し
 コンピュータ科学のいかなる問題も他のレベルのインダイレクションで解決
 バイトコードで実行方法を固定しない
 String msg = "hello world";
 Thread t = new Thread{
  ()->System.println(msg);
 }
 ラムダ式のレシピをJSR-292で表現する
  Indyの呼び出し
   関数型インターフェースのインスタンスを戻す Lambda Factory(ラムダの工場)と呼ばれる
  ラムダ工場を作る工場
   Bootstrap Method Lambda meta-Factory


●現在のJava SEの実装
 内部クラスを生成 ASMを利用する 
 InnerClassLambdaMetaFactory 実装を覗いてみよう


●まとめ
 バイトコードレベルでラムダ式のレシピだけがある
 実行方法はJavaのランタイムに依存
 パフォーマンス 現在の実装 >= 内部クラス



■16:15-17:05 エンタープライズアーキテクチャの選択について グロースエクスパートナー 鈴木雄介 #jdt64



アーキテクチャとは何か(Javaに依存した話ではない)
 システムの分け方と組み合わせ方の事
 簡単に言うとシステム全体ののバランスを取る事
  空間的:利害関係者の関心事を意識する
  時間的:現在から未来への時間経過に伴う変化を意識
 システムの「構造とプロセスの決定」
 構造
  システムの機能がどのような要素に分解されるのか
 プロセス
  それらの要素をどのように組み立てるのか
 ※上記にリソースとスケジュールを加味すると、WBSガントチャート)になる
 企業システムを対象としたアーキテクチャ
 特徴
  利害関係者が多い
  連携先システムが多い
  急激に変化できない/しない
  現状維持が重要
  様々なシステム(B2B、B2C、B2E)
 アーキテクチャが全てのスタート
  「構造とプロセス」が明確でなければチームは動かない
  プロジェクトマネジメントはアーキテクチャを前提とした実行段階における「計画→実行→計測→調整」の営み
 最初に「すべてを固定的に決める」必要はない
  「選択肢を残す決定」は出来る
  YNGNIの法則は今でも有効(予測し過ぎても当たらない。作り過ぎない)


●どうやって選択したらよいのか
 どういう観点で考えるべきか
 様々な観点でバランスを取る作業
 3つの観点
  ITサービス運営の観点
   「アプリケーションを作る」から
    決めた仕様に従う
    開発者が開発する
    プロジェクトが終了するまでの活動
   「ITサービスを運営する」へ
    利用者からフィードバックを受ける
    様々な人が関わる
    終わる事のない持続的な活動
   ITサービス運営モデル
    構造・プロセス⇒機能⇒ITサービス(サービス含む※ECサイトにおける配送など)⇒満足度
    利害関係者 運用・開発・企画・業務(それぞれ関心度が違い・連携している)
   よりITサービス運営を意識したアーキテクチャ設計になっていく必要性
    利害関係者はさらに多くなる
    ユーザが利用する子tで評価される
    様々な要素の相互関係によって成り立つ
    継続的に運営される
  品質の観点
   品質とは何か
    多面的で1つのパラメータでは制御できない
    8つの品質特性と31の副特性(QA)
   技術の選択において品質特性同士が打ち消しあう場合が有る 両立は難しい
   特筆するなら
    コストの観点では保守性が重要
    性能効率性は仮想化/クラウドによって少し自由に
    互換性はあらゆるシーンで重要(標準準拠)
    エンタープライズでは信頼性・セキュリティが重要
  技術の観点
   共有と固有のバランス
    共有された資源を最大限に活用
    固有ドメインの特性を最大限に発揮
   プラットフォームとマイクロサービス
    プラットフォーム=共有資源の定義 Docker CloudFactory
   マイクロサービス=固有の構造とプロセス
   プラットフォーム
    ミドルウェアAWSの機能とか)SOA SaaS PaaS Iaas
    どのレベルで共有資源として定義すべきか
   マイクロサービス
    サービスによってシステムを構成する
     サービス同士はAPIによって連携する
     サービス同士は独立した構造とプロセスを持つ
     サービスは独自のライフサイクルを持つ
     サービスは個別のドメインに従う
    ※標準フレームワークが古かったり、使いづらかったり。


●選択の実践
  多面的に組み立てることが大事
   全ての要素に利害関係者がいることを理解しておく
  完璧な選択は出来ない


●選択の覚悟
  最大公約数を目指す でも誰も理解してくれない
   最小公倍数は皆が満足するようで誰も幸せにしない
  銀の弾丸は無い
   誰かの成功事例が自分に当てはまるとは限らない
   銀の弾丸を込めたら打ち抜くまでやめないのが責任※一生メンテする覚悟が有るか
  妥協せず「適切に」諦める
   判断材料を集め、持続的に考え続ける。諦めるときは丸投げせず、未来に託す
 チームでアーキテクチャに取り組み、継続的な努力をする。



■17:20-18:10 Java Embeddedで始めるIoT アットマークテクノ 竹之下 航洋 #jdt75

・モノとモノがインターネットで接続し、そこから生まれる情報を活用し、新しい付加価値やサービスを生み出していくための基盤。
・IoT 3Dプリンタ
※夕食のため途中で退出した。



■18:30-20:00 Java20周年記念セッション


●Java20周年 生誕祭 クイズ
 1.ジェームス・ゴスリングは? 写真から選ぶ A
 2.Javaの前の名前? Oak
 3.Dukeの最初の名前 なんだっけ
 4.日本最初のJUGは JavaHouseML
 5.国際仕様を入れるために集まった場所? 熱海(1996年11月11〜12日)
 6.JVMで初めて動いたスクリプト言語 Pnuts
 7.astah*の最初の名前  JUDE
 8.JavaRingはどれか 写真から選ぶ。C
 9.JavaOneのイベントに出たことのあるアーティスト エアロスミス
 10.JavaOne一回目のパス A
 11.アメリカスカップのOracleのスポンサー ヤンマー
 12.Javaはどれ? 写真から 全部○
 13.JUGで一番ユーザが多い国は? ブラジル
 14.Duke Logoのライセンスはどれ? BSD※情報漏洩。
 15.オランダのJUG女子部のマスコットはどれ? Duchess※情報漏洩
 16.Javaが使われない分野 命にかかわる分野
 17.JSR-1はどれ? RealTime Java
 18.Java Insideはどれ? ブルーレイプレイヤー PlayStation 旅券 Exalogic
 30まで解答欄あったけどここで終了だった気がする。


●LT
 しょぼちむ(和田みずき) 研修がJava Java楽しい
 平鍋健児 astah開発者 アーユーモデリング Idobata
 吉田 勉強会に行こう・喋ろう・手伝おう 
 佐野祥子 Java女子部 Java教えてる
 野崎さん 関ジャバ 5年やって今日2回喋ることになった


以上です。関係者の皆様ありがとうございました。m(_ _)m