読者です 読者をやめる 読者になる 読者になる

富山合同勉強会2016

JavaOne 2015 San Franciscoフィードバック、そしてJava EE 8についてのアップデート

  • JavaOne 2015は1万人超
  • Sunの頃よりはまだ少ないけど、近づいてきている。
  • IoTの活用が強めに話された。
  • 2016のJavaOneでは、さらに事例がふえると予想。
  • Java8が出た後で増えてきている。
  • JCPへの参画拡大。営利団体でも無償化
  • キーワードはIoT, DevOps, microservice
  • IoT
    • JavaMEとかJavaSE embededとか。
    • マイコン上でJavaが実装されている。
  • DevOps
    • Pirates of DevOpsという動画が公開されている。
    • 2014のJavaOneでは7つ、2015では107にセッションが増えた。
    • セッションの選考委員会側が意図的に選んだ?
    • 自動化するツールは徹底的に使用しましょう。
    • その成果を継続的にチェックをしましょう。
  • Microservices
    • Gilt.comのセッション。ブランド品ディスカウントのECサイト
    • 毎日昼12時から数十倍数百倍のアクセスがある。
    • 2011まではJavaEEベースのシステムを運用。
    • 2015にMicroservicesの導入。
    • Playでフロント、Scala,Java,JavaScriptの小さなサービスと連携。
    • 1つのサービスは1000や2000行。
    • オンプレ→AWS上に移行している。
    • dockerを利用する。
  • JavaEE8アップデート
  • 最初のドラフトのレビュー中やレビュー完了の状態。
  • クラウド絡みのものは遅れ気味。
  • 7,8団体がレビューしている。
  • early draftの策定中であれば、まだ意見が通りやすい。後ろになれば通りづらい。
  • HTML5 / Web Tier
    • JSON-BはJacksonがメインで考えられている。
    • プロバイダの変更も可能。XML
    • JSON-PにJSON-Pointerが追加される。
    • "/0/phones/mobile"とかで特定のデータを取得・更新できる。
    • JSON-Patchでは、JSON形式で変更出来る。
    • MVC1.0が策定中。
    • 既存のJavaEEテクノロジーを組み合わせて実現。
    • JAX-RSCDIJSPとか。
    • HTTP/2
    • Server pushがServlet4.0の中に入ってくる。
    • CDIの範囲がMVC / JAX-RS / JavaSEに広がる。
    • 2つのパーツに分けられる。Full CDICDI Light。
    • Junit内でインジェクションが、標準で出来るようになる。
  • Adopt a JSR https://glassfish.java.net/adoptajsr/
  • まずは見るだけでも。
  • JavaOne 2016に行こう。

Project Jigsawではじめるモジュール

http://www.slideshare.net/skrb/module-programming-with-project-jigsaw

  • 使い方を中心に。
  • Client Side Javaを中心にやってる。Java SE, JavaFX
  • Huge Standard Lib
  • Hadoopは130のjarを読みこんだり。
  • JARが抜けてたり、依存関係のバージョンがズレてたり。
  • No Dependency, No Version, Public is TOO Public
  • 始まりは2005年。friendsを入れよう、という話が出た。
  • JSR 277は炎上中断、JSR 294はmoduleとして続く。
  • 2009年にProject Jigsawが始まったけど、2017のJava SE9に入る。
  • スコープの問題(OSGiをどうする?とか)で混沌とし、スコープをかなり狭めてSE9に入れる。
  • SE9で入る、ということが重要。
  • module extends JAR { dependency; exportation; version; }
  • module-info.javaに書く。src直下に置く。
  • module (モジュール名=パッケージ名にすることが多い) {}
  • requires javafx.controls;とかで依存関係を明示する。
  • exports (パッケージ名);で外部に公開する。
  • mainメソッド持ってるクラスはexportsに入るようにする必要がある。
  • requires public javafx.graphics;とやると、第三者にもpublicになる。
  • gradleはJigsaw対応を進めている。
  • コンパイル時には"-mp"を付ける。
  • モジュール作るときは"--create"が必要。"--module-version"でバージョンを指定できる。以上・以下は比較出来ない。
  • 実行時にも"java -mp"とかする。
  • rt.jarを全部読み込む必要が無いので、メモリに優しい。ちょっとだけ。
  • classpathに指定すると、unnamed moduleとして扱われる。
  • JavaSE8から、rt.jarを分けれる。循環参照とかをきれいにした。
  • module-info.javaに書かなくても、jdepsというツールで確認できる。
  • JLINKというカスタムJREを作れる。IoTとかでメモリの使用量を減らせる。
  • https://jdk9.java.net/jigsaw/ に既にあるので、すぐ使える。

Microsoft Java

  • AzureはLinuxでもdockerでも立てれる。
  • MicrosoftはJavaVMのパフォーマンス改善とかにも参加してる。
  • Azure上でのホスティングの選択肢
    • IaaS
      • クラシック or not。新しい方は、マシンだけじゃなく、グルーピングまで出来る。
      • MarketPlaceからも選択できる。WebLogicがインストールされているものとか。Microsoft+ベンダーが管理している。
      • VM Depotはコミュニティが作ったイメージがある。
      • 設定情報をJSONテンプレートとかに書いておけば、そこから構築できる。
      • サンプルはGitHubで公開されているので、それをもとに作れる。
      • 3rd partyのクラウドサービス
    • Cloud Services(PaaS)
      • OSまでを提供。JDKとかはメンテが必要。
      • 監視ツール、OSメンテ用の機能が提供されている。
      • ステージング・本番みたいなものを持っている。
      • スケール設定も簡単。
      • リモートデスクトップも出来る。
      • Eclipse, IntelliJツールキットがある。
      • macEclipseの方がオススメ。
      • JDK, APサーバ, 作ったものをGUIで選択してデプロイ出来る。
    • App Services(PaaS)
      • Tomcat or Jettyを選択し、そこまで管理してくれる。
      • warファイルのデプロイで動く。
      • Windows Server上で実行される。
      • Java以外にも、PHP / .net / pythonを動かせる。
      • Tomcat / Jettyは古いバージョンしか選択できない。
      • 継続的(自動)デプロイ機能を持ってる。
      • 障害・監視機能なども提供
    • Container
      • DockerはJava界隈でもトレンドになってきている。
      • マイクロソフトがDockerと提携してる。
      • 仮想マシン配ろうとすると、数G・数十GByteかかる。
      • Dockerは容量をかなり削減できる。
      • Windows Server 2016 TP3からDockerを利用できる。
      • Dockerを使うときはtutumが便利。
  • マイクロソフトはFeedBackを、本気で求めている。

Ruby 2.3 のてざわり

  • Java to rubyIDEを使わなくなった。REPLで試しながら書くようになった。
  • self navigation operator=ぼっち演算子
  • SQUIGGLY HEREDOCはインデントを取り除ける。
  • digはJSONとかで便利
  • Enumerable#grep_vはgrepの否定。正規表現マッチしないものを取得できる。
  • the did_you_mean gemはirbとかrails consoleで便利。
  • NameError#receiverはdid_you_meanで使われている。デバッグのときにも使えそう。
  • Hash#to_procは使いどころが思いつかない。。。

わたしの Ruby の楽しみ方

  • rackアプリケーションでTwitterのOmniAuth使ったアプリが100行レベルで書ける。

エンジニアが出来る貢献

  • 災害支援をITで。
  • 維持費がかからないように。サーバを持たない。
  • Google Formをお客さん作ってもらうと、仕様が固まる。
  • Googleスプレッドシートをデータベースにすると楽。