goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

JUnit4とJUnit5の違い(境界値テストのパラメータ化の際等、いろいろと)を聞いてきた!

2018-05-27 09:55:57 | JavaとWeb
5月26日、JJUG CCC 2018 Springに行ってきた!ので、その内容をメモメモ

はじめに

まだまだこれからJUnit5入門

をメモメモ




・まあ、まだそんなに使ってないよねJUnit5
・JUnit5とは
 Javaのテスティングフレームワーク
 ながらく4が使われていたが、その光景
 API/アーキテクチャの全面的な再設計
 17年9月からGAリリース
 1.8いこうでないとX、ラムダ式のアサーション

・テスティングフレームワークに何を求めますか
 簡潔さ
 可読性
 一貫性

・イントロダクション
  何がよくなったのか
   テスティングフレームワークにとって大事な部分がちゃんと進化

   代わりに失ったもの:互換性
    1.8+、パッケージ異なる。構造化テスト、パラメータテスト異なる
    フレームワーク、IDEの対応状況
    mavenはびみょーなところも

・セットアップ(maven前提)
  JUnit4 pom.xml シンプル
  JUnit5 pom.xml なんか増えてる・・これ何?
    →マルチモジュール構成:用途、環境に合わせて適切なものをインポート
  JUnit5 = JUnit Platform   実行基盤
       + JUnit Jypiter 新テストAPI
       + JUnit Vintage マイグレーション

 代表的なモジュール
   JUnit jupiter-api アノテーション多い
   JUnit Jupiter -engin
   JUnit platform launcher これないと、eclipseで動かない

モジュール間の依存関係:公式に出てる・・・よくわかんない
   pomで指定するのは多くない

 pom.xml
   junit jupter engin
junit platform lancher
Mavenならjunit platform surefine provider
Gradleは4.6からネイティブサポート
 →5.2からはBOMを使う

・シンプルなテスト
 @Test
  JUnit4と、ほぼ同じだか、パッケージ異なる
  @org.junit.jupiter.api.Test ハブリックでなくてもOK(プライベートはX)

 事前処理、事後処理
   @BeforeAll
   @BeforeEach
   afterもおなじ

 実行を無視する @Disabled reasonにメモ書きできる

 テスト名の表示:@DisplayName(Mavenではまだ)

 --- ここまでは大体JUnit4と同じ ------

・アサーション
 org.junit.jupiter.api.Assertions
 assertEquals 基本使い方は同じだが、引数の順番が変わった
 グループ化:
   JUnit4:途中のassertに失敗すると、次のassertは実行されない
   JUnit5:assertAllラムダ式を渡す。渡した式が、検証に成功すると、成功になる

 例外の検証
   JUnit4:@Testのexpectedに例外クラスを指定する→投げられたメッセージの検証はできない
       →外側でcatchしてしまう
   JUnit5:assertThrows 例外を投げるメソッドは、ラムダ式の中で実行

・使いたくなってきました?

・構造化テスト・パラメータ化テスト
 構造化テスト
  テストクラスは複雑になりがち→似たようなテストは何とかしてまとめたい
  JUnit5: @Nested
      @Testと並べて書ける

 パラメータ化テスト
  引数だけ違うテストをまとめて実行したい
   境界値テストなど
  JUnit4:@Theory
  JUnit5:pom.xmlにパラメータを追加
   @ParameterlizedTest
   @ValueSource:ほかにもソースの指定あり(@methodSource)

・拡張モデル
  JUnit4では拡張方法2つ
   Runner
   Rule
  JUnit5
   extention
    @extendsWithで指定する(複数可)
    BeforeEachCallbackなど拡張ポイントいろいろある

・マイグレーション
 戦略
  1.JUnit5で書き換える
  2.Vintageで動かす

 書き換える場合
   引数の順番が変わった

 JUnit Vintage
   既存はVintage,新規はJupiter
   4と5、ごちゃませにしないようにしたい

・まとめ
  (おぼえるのが)はやい、(かき)やすい、うまい
  IDEの対応状況
  ユーザーガイド一読

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

「なくなるJava SE無償版」って、まじ!(@_@!)

2018-05-21 22:12:25 | JavaとWeb
米オラクル(Oracle)はこれまで、Java開発実行環境「Java SE」(Java Platform, Standard Edition)を無償で提供してきた。ところが、2018年9月からは有償版しかなくなる

ま、まじ(@_@!)

【詳しくは&上記引用元(5月24日5時まで見れる)】
なくなるJava SE無償版、ユーザーはどうなる
http://tech.nikkeibp.co.jp/atcl/nxt/column/18/00294/051700002/

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaEE8の後、Eclipseが引き取り、EE4JじゃなくってJakarta EEになった?

2018-04-30 16:54:27 | JavaとWeb
前に、

JavaEE8のあと、Eclipseが引き取って、EE4Jになる件
https://blog.goo.ne.jp/xmldtp/e/5bcbb2505950b26418ab54bf615079d6


っていうのを書いたけど、

Jakarta EEをサポートするワーキンググループがEclipse Foundation内に設立
http://www.fujitsu.com/jp/products/software/middleware/busi
ness-middleware/interstage/resources/news/topics/2018/0424/

の話をみると、EE4Jじゃなく、Jakarta EEになった?


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

イマドキのJavaScript

2017-12-28 09:30:11 | JavaとWeb
書き方まとめがあったので、URLをメモ

イマドキのJavaScriptの書き方2018
https://qiita.com/shibukawa/items/19ab5c381bbb2e09d0d9

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaSE9のつぎは、18.3じゃなく、やっぱ10にする、テヘペロ(^^;)だって

2017-11-20 12:05:38 | JavaとWeb
11月18日にJJUG CCCに行ってきた!
つづき
(表題の件は、一番初め「JDK新しいリリースモデル」)





■JDK新しいリリースモデル
・Java One前後から情報が出ている
 この資料は、共有できません
 →情報的に動くため

・JavaSE9
 けいでんす:リリースモデルを変えるぞ!
 JDK 9
   7のとき、理想高かった
   7で考えていたものが乗った
 91の機能UP

・リリースサイクル長い
 大きな機能を待つ:小さい機能が待たされる
 言った通りに出してくれ!!!
   2年おき、本当かよ!(理想です)
 ライセンスモデルの問題:再配布不可

・他の言語と比べてみる
  Go:半年に一度
  Java:間延びしてきている

・JavaSEの選択肢
  Oracleから
  OpenJDK

・JCPがOKすると出せる
  ジグソー:1回目ひけつ

・新しいリリースモデル(きのう現在)
 まえから・・・だいぶかわった!!

 より計画的なリリースサイクル:6か月ごとメジャーバージョン

 だすのはOpenJDK
 削除提案と、削除も6か月の中で行う

 OpenJDK=無償で使ってもらうもの、バイナリーも出す
 オラクルも暫定期間出しているが、ゆくゆくは。。。
 同じ機能に機能強化:1年後

 GPLにする
  & クラスパスえくせぷしょん
 
 商用サポート継続、コミュニティ継続

・OpenJDKの強化
  アプリケーションクラスデータ共有
  Zガベージコレクター

・従来のリリースモデル
  従来:技術的な差があった
  2年に1度のリリースが目標だった
  長期サポート
  更新リリース

・新しいリリース
 技術的な差なくなる
 6か月に1度
 リリース重複期間なくなる
 Oracleはサポート8年間、帰納更新はしないセキュリティパッチ

・11が出てくるタイミングでOracle JDKはなくなり、
 LTS版のみになる

・18.3、18.9を、インクリメンタルな数字に戻した
 JavaSE9のつぎは、18.3じゃなく、やっぱ10にする、テヘペロ

・これからは、シングルソースコード

・いまは、OracleJDKもバイナリ提供

リリース情報
・OpenJDK:いままでどおり
 10のearly access版も
・リリースノート
 削除されるAPIがリストアップ
   CORBA関連なくなる
→1年後に機能がなくなる

・JCPが仕様の承認は今のところ変わってない

・公式アップデート終了のスケジュール
 8 無償アップデート終了 2018年9月
 9 無償アップデート終了 2018年3月
10 無償アップデート終了 2018年9月

8までのバージョンの移行先は、11以降

商用サポート

デプロイメントテクノロジー:サポート短くなる
 (アプレット使ってる場合注意)

・直近のアップデート
 JDK 10 Early Access ビルド
 OpenJDKでもLTSサポートという話が出てきた
  今後の情報に期待
 jlinkを使ったパッケージ
 32ビット版のバイナリ提供はない(9でもない)

■ついにきたリアルタイムSpark
 ビッグデータ処理の新定番SnappyDataとは

・SnappyData知ってる人・・・0
・自己紹介
・現在のビッグデータ処理の課題
  複数プロダクトを組み合わせて複雑
  時間かかる
  パフォーマンス悪い
  キャッシュだと速いが・・・

 よくある要求

  RDB→分析はDWH

 ビッグデータ
  NOSQLでスケールアウト→分析SQLおんHadoop→ストリーミング

・技術を積み上げると、つぎはぎのシステムになりがち
  TCO増大
  非効率
 Spark登場後はかなりシンプルになったものの
  Spark,ふりんく
 →SnappyDataは1つでできる

・SnappyData:データベース機能を備えたSpark
 ベースとなっている製品がインメモリ

・主要機能
 Sparkのコア、マイクロバッチ
 分散インメモリ:ローテーブル、インデックス

・SnappyData
 インメモリデータベース
 データ保持形式
 クラスター統合
 SparkSQLを高速化

・(1)インメモリデータベースにデータを保持している


・(2)Sparkと同一のデータ形式で保持している
 違う形式だと:型変換、シリアライズ・でシリアライズ

・(3)Sparkとインメモリ―DBのクラスターを統合できる
 もう一つのクラスターモード(参考)
  別々にして個別にスケールアウトもできる

・(4)SparkSQLを高速化している
 DAGがそもそもちがう
 ステージまとまってる:通信起きていない
 SQLワークロードを一部いじって高速化


・SnappyDataの使い方
 クレジットカード不正使用検知システム
  SQLで書ける
 ・ストリームデータ処理:マイクロバッチストリーミング
  コンテニュアスクエリー:Window指定
  テーブルをつくるのもDDLと同じ
  
 ・トランザクション処理
  データの追加。更新、削除が可能

  データの特性によっててーうる形式を使い分けることも可能
   Row table,column table

  レプリケーション、パーティションを使い分ける

  トランザクション処理もRDと同様に使用可能
   一部出来ないものもあるが、近い形で

  P2P型アーキテクチャ
   書き込みもスケールアウト

 ・アナリティクス処理
  リアルタイム分析:近似クエリ、TOP Kテーブル

  サンプリング技法を活用
   →サンプルテーブルを作る方法と直接クエリーする方法がある

  TOPKテーブル
   →CREATE TOPKテーブルでOK
    たぶろう、ちぇっぺりん、ずーむでーたでみよう
  
  JDBCアクセス

 ・サマリー
  Spark100%コンパチブル
  SparkといんめもりーDB統合
  テーブルとSQL
  高速化

■最近のDeep Learning事情とJava
・自己紹介

・仕事でDeepLearningしてるひと ちらほら

・DeepLearningの歴史と経緯
 人工知能:1956~
 機械学習:
 深層学習:

2012年のDeepLearning
 ILSVRC:ヒントン教授(2006年から)
 Googleの猫

2014年のDeepLearning
 AIに仕事がう会われる
 DeepMind買収
 ドワンゴ人工知能研究所
 画像から文章

2015年 あるふぁごー

AIの定義は明確に決まっていない

・アトム:強いAI
・弱いAI:これだけならできる、専用機:ディープラーニング

・ディープラーニング

・ディープラーニングの基本的な原理
 基本的な原理の一部のみです

 ニューラルネットワーク
 ニューロンモデルをつなげた
  入力層:データのベクトル化
  出力層:どう表現するか

 学習するとは:落ち着くところに向かっていく

 畳み込みニューラルネットワーク
  畳み込み層 プーリング層

 再帰型ニューラルネットワーク(RNN)

・ディープラーニングの教科書が出た
 パターン認識と機械学習は9年前
 ディープラーニング

 これならわかる深層学習入門
 仕事で始める機械学習(Python前提)

 ハード面
  GPU
  なぞのUSB
  Alphago Zero

 DeepLearning資格
  ジェネラル、エンジニア

・DeepLearningとJava

 DeepLearning for Java
 DL4J
 
 Python:ライブラリ豊富

 フレームワーク
  exampleでやれることを確認(今日からDL4J)
  githuで質問
  ユーザーグループある
  11月30日にイベントある

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaSE9に移行するには、module-info.java書いてrequires等するとか

2017-11-20 09:05:22 | JavaとWeb
11月18日にJJUG CCCに行ってきたので、
その内容をメモメモ
まずは、前半(表題の件は、最後のほう
「JavaSE9の紹介:モジュール・システムを中心に」で記述)




■サンプルアプリケーションで学ぶ
Apache Cassandraを使ったJavaアプリケーションの作り方

・コード Github スライドslideshareにあがっているよ
・Cassandraなにか知ってること前提
・自己紹介
・今日の目標
 →サンプルアプリケーションがあるというところを持って帰ってください
・アプリケーションの変遷
 モバイル、IoT:ユーザー増えてきた
 →スケールするアプリケーションを支える
  データベースもスケールしないと

・Cassandra:スケールしてもパフォーマンスを落とさない
サンプルになるソース あります
 http://killrvideo.com
  →https://killrvideo..github.io/
  →これを、持って帰ってください


・KillrVideo
 スケーラブルなマイクロサービスアーキテクチャ
 アーキテクチャ
  スケーラブルにできるように想定
 Javaでも環境
https://github.com/killervideo/killrvideo-java
  デモ:起動してみる

・Web層
 node.jsで実装(フロントエンド)
 React,Rcore
 セッション管理にCassandra利用:CassandraSession
 ユーザー認証はマイクロサービス利用
 →Javaだろ、spring-session,apache shiro

・マイクロサービス
 gRPCを利用
  プログラミング言語非依存
  プロセスを分けるならKafka連携とか

・gRPCとは
 Googleの内部RPC(Stubby)をもとにオープンソース
 ProtocolBuffer v3を利用、HTTP/2、双方向ストリーミング
  gRPCサービスの定義
  スタブの自動生成:mavenプラグインで
 基本はStreamObserverを利用した非同期呼び出し、
  非同期実行、同期実行
 Springから呼び出し、

・Cassandraに接続
 ドライバ作っているよ(やりとりは、こみにてぃで議論)
  クラスタービルダーを作って、接続するIPアドレス、認証情報などを設定
  クラスター作る
  生成
 セッション:コネクションプーリングを管理

・Cassandraのデータモデリング
 データモデリングの原則
  データを知る
  クエリを知る
  非正規化
   データをネストする
   データを重複してもつ
  →Joinの機能がない

 なぜ:クエリがスキーマのデザインを決める
  →クエリの変更はスキーマの変更を伴う
  →特異なアクセスパターンは限られている
    Xテーブルスキャン、複数テーブル
 詳しくは
  RDB開発者のための・・・ スライドシェアでみてね!

・ドライバーの利用
 バッチ登録
 クエリービルダーの利用:ステートメントの組み立て
 ページング:取得件数の指定とページング resultsetで
   オフセットページング(いきなり5ページに飛ぶとか)は実装されてない
 実行結果の取得:resultsetの中に、自動ページング機能→裏側で自動フェッチ
 データマッパー:エンティティクラスの準備、マッパーの準備

・まとめ

  https://killrvideo..github.io/

 マイクロサービスを利用したスケーラブルなアプリケーションを作るときの参考に
  アーキテクチャ
  フレームワーク・ドライバー
  データモデリング

■サーバーサイドkotlin
・書けば普通に動く
・日本語の響き:かわいい→そこがネック
・まえおき
 kotlinはそれほどとがった言語ではない
・結論
 サーバーサイドでも問題なくkotlinは使えます
・今日喋ること
 なぜkotlinメインに
・自己紹介

・作ってるもの、秘密(Webアプリ)
 AWS、バックエンドPostgres,認証cogniteに任せてる
 思い処理はらむだに
 webアプリケーションサーバー、らむだ、でkotlin使う
 →クライアント側は書いていない

・なぜkotlinを採用したか
 Javaの言語について:20年以上たっている。冗長
  classのなかにメソッドを書くのはめんどくさい
  検査例外:kotlinはない(上に投げられる)
  Lombok:冗長性をある程度解放
   Javaでもある程度ハッピー
   関数がオブジェクトでない
   荒ぶるlombok
 不満があっても、JVM自体は悪くない
  python2→3の互換性に比べて
 Javaの豊富なライブラリ
 JVM言語でBetter Java→学習コストが低いこと

・Scalaは悪くない、でも、難しい…
 型合わせゲーム

・そこでkotlin
 Javaの不満をある程度解消、scalaほど複雑でない
 Androidの正式開発言語
 Javaとの相互運用性
 
・開発環境・フレームワーク・ライブラリ
 IDE:Eclipse,IntelliJAndroid Studio
 フレームワーク:
   kotlin製 kter、から、わさび
   Java製:Spring Boot
 ORマッパー
   Exposed:バgつが多い
 ビルド
   基本的にgradle(こだわりない)
   finalを外した状態で

・使ってみて
 kotlinのstream的なもの
  ベンチマークのテストやってみた
  kotlinおそい→asシーケンスで早くなる
 annotationの違い
 デフォルト引数とDI

・不満なところ
 ぱいぷらいんがほしい
 ()は省略したい

・けつろん。もんだいないだいじょうぶだ。


■JavaSE9の紹介:モジュール・システムを中心に
・自己紹介
・あらまし
 JavaSE9:モジュールシステム
 地味なアップデートも外観

・そもそもJavaSEって?
 JavaSE 処理系の規格(すたんだーど えでぃしょん)
 JavaEE エンタープライズえでぃしょん サーブレット、JMX,EJBなど

 JavaSEタイムライン
  2004 JavaSE5 じぇねりくす、マルチスレッド
  2014 JavaSE8 ラムダ式、ストリームAPI
  2017 JavaSE9 モジュールシステム じぐぞー
 →字面は比較的地味、基盤はおおきい

・目的
 心の準備ができること
 
・CCC_E4のハッシュタグにリンク貼ってある
 そのスライドで「高度」な話観てね

・背景
 Jave8までの課題
   JAR地獄
   内部パッケージ
 Java8内部向けパッケージ

・モジュールシステムの基本
 JARファイルを配置の単位に
  モジュール単位で依存関係を整理
 内部向けパッケージを使えないようにする

 パッケージ衝突の検知
 モジュール名を付ける
 module-info.java
 exports命令で公開パッケージを指定できる
  →自分自身が使うモジュールをrequires命令で指定する
   require先がないと、コンパイルエラーになる

 標準ライブラリもモジュールに
  java.baseはrequireされている

・リフレクション
 こまるときDI
  パッケージをexportしたくない、publicしたくないけど、リフレクションしたい
  →opens命令
 →リフレクションは魔法の杖ではない

・コンパイルと実行
 モジュールパスという配置方法
  クラスパスとは別
 実行:初期モジュール(mainモジュール)から推移位的に参照されるモジュール
 だけが実行モジュールに入る

・経過措置
 無名モジュール:クラスパスのクラスは、無名モジュールに入る
 自動モジュール:モジュールパス上にありながらmodule-infoにない
   オートマチックモジュールネームまたはjarファイル名から

・移行
 ライブラリ:今すぐモジュール化
 プラグイン
 APサーバー上のアプリケーション
 
・ライブラリのモジュール化
 jarファイル名ベースの自動モジュールをrequiresしてはいけない!
 8以前のサポート

・テスト
 2種類のテスト
  ブラックボックステスト
  ホワイトボックステスト
 JUnitなんかにどうやって入れる?

 方法
  正攻法:一時的に書き換える
  次善の策:クラスパスに入れる

 Java9モジュラりてぃ おらいりー

・他のUPDATE
 コレクションのファクトリ
 try-with-resources
 インターフェースのprivateメソッド
 匿名クラスにダイヤモンド演算子
 リソースバンドル:いままでlatin1だったが、UTF-8でOKになった
 (プロパティはlatin1のまま)
 Reactive Streamsサポート

 プロセスAPIの強化


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaEE8のあと、Eclipseが引き取って、EE4Jになる件

2017-10-23 01:43:18 | JavaとWeb
10月21日、
Java SE 9/EE 8リリースイベント 兼 JavaOne 2017 報告会 @ 東京
https://jjug.doorkeeper.jp/events/66256
に行ってきた!話のつづき(表題の件は、真ん中からうしろのほうにかけて)




(前の話のあとから)

■Java9 and Future
・情報保障
 Web公開
https://www.slideshare.net/YujiKubota/java9-and-future-jjug
 コードはgithubに公開
github.com/ykubota/jigsaw-sample_jp

・自己紹介

・Java9リリース、1か月たったけど、
 アンケート
   プロダクションで使っている人:1人
   ローカルで使った人:結構いる
   調べた人:おおくいる
 今回は詳しく
 次のJavaちら見 18.3

・追加された機能の確認方法
 JEP(Java Enhancement Proposal)を見る

・移行する際に注意するポイント
 Migration Guideを読む
  ・非互換性、マイグレーション手順が書いてある

・全体的な解説
 「Java9に備えよう」の資料

・より細かく見る(サポートレベル)
 SpecificationやRelease Noteを読む

・ログが変わる
「Unified JVM Logging」で発表した

・メリット
 モジュール化
 REPL(JShell)
 ライブラリ改善:Collection初期化、Stream機能拡張
 セキュリティ強化
 付属ツールの刷新(診断とコンパイル) AOT
 G1GCコンパイラなどの性能改善(デフォルト化)
  →おおきなヒープ

・デモ
 JIGSAW
  いままで内部APIをそのまま実行できた
  →モジュール化すると:公開APIを限定できる
 ひとつひとつビルドすることも可能
 どのモジュールのメインクラスを実行するか指定して実行
 結構強力な機能が備わった・・・らしい?

■JShell with JDK9 Libraries
・自己紹介
・JShellの説明
 9入れた人はJShell使っている
 Java言語に向けたREPLツール
  Lisp,Python,haskellなど
 教育分野ではREPLツールがある環境が人気
  API・構文挙動確認
 https://tryjshell.org
  Web上からJShellが使える
 Jshellにようこそ
  補完機能:利用できるimport、変数定義の保管
・Java9ライブラリ
 コレクションのファクトリ
 Streamの評価
・コレクションのファクトリ
  List.of,Set.of
 特徴
  いみゅーたぶる:もとが変わっても変わらない、変更もできない
  ふぇいるせーふ:例外として検出できる
  最適化
・ストリーム:いままでむげんにやっていたものを
  dropWhile:条件が出たら、処理を終了する

■(Java9 and Futureつづき)
・これからのJava Java18.3→走り始めている
 JDK Projectで確認できる
 スケジュールと機能の一覧
・Project Amberが入る予定
 将来  
 Project Panama
  Project vaslhalla

・リポジトリやバイナリ(EA)は独立予定

・Project Amber
 varで変数宣言できる
 switch caseで型推論

■Intel's Persistent Memory
・パーシステントメモリー
 知らない人多い:新しいタイプのメモリー
  容量4倍、2分の1の価格で求められるメモリー
  電源が切れても、内容保持
  市場に登場するのは、来年頃
 Oracle Open worldでも話しあった:
  Oracle DataBase18cでPMサポート
 3Tバイトのデータベース、1.5T DRAM+PM
  →クエリ5倍速くなる
・PM in Java Platform
 Java oneのセッション
 2つのつかいかた
   ぼらたいる(揮発性):メモリ
   パーシステント ストレージ

・ボラタイルな使い方
 1 ヒープを全部のせる→データが大きいアプリ:インメモリ、ビッグデータ
    JVMのオプションにマウントポイント指定

 2 ヒープを一部のせる→ユーザーが指定できるまたはプロファイリングで自動指定
   アクセス頻度高い:DRAM
   頻度低い、データ大きい:PM

 プロトタイプ

・パーシステントメモリ
 https://github.com/pmem/pcj にデモ
 (絶賛開発中)プロトタイプ

 デモ:RAMディスクでエミュレートできる
  高速に書き込み、読み込みができる

・パーシステントに書き込む:永続化可能なクラスの定義
 extends PersistentObject
 Panamaでやろうとしているクラス定義の仕方

・まとめ
 PMすごい:IntelがJavaに力いれてる
 PMをメモリとして使うか、ストレージとして使うか
  メモリと使うなら結構早くに
  ストレージはPanamaまち?




ここからJavaEE8

■JavaEE/EE4J
・ここで聞いたことが変わっても、ごめんねっていうかんじ
・自己紹介
・あじぇんだ
 EE8でましたね
 EE4Jってなに
 JavaOneのはなし

・まずEE8
 9月21日、でました(4年かかった)
 去年のJavaOne :8やる
  どれやるという投票
   MVC1.0おちて、こみにゅてぃに引き渡し
   WebProfile:へる
 メインはJAX-RSでリアクティブ、CDI、非同期イベント
 セキュリティひとまず
 メンテナンスリリース
  →Java SE9でアップデートの物も

 →JavaEE、Githubに移管

・JavaEE8→参照実装GlassFish 5.0
 オープンソースでも
 Java9 5.0.1で動作保障
 Dockerイメージ使える

・赤いJava、アオイJava
 ことし:Glassfish
 赤いJava(Oracle):WebLogic来年
青いJava(くらうど):そのさき

 →あかいJavaおしまい

・Eclipse Enterprise for Java(EE4J)
 Java
  オープン
  evolving
  Nimble
  Scalable

 EE8
  オープンか?
  にんぶるか?
 →eclipseファウンデーションに移管。
  移管プロジェクトがEE4J
  ブランド名ではない

 移管して
  Open
  Compatible
  Flexible
  Nimble

・Open
 プロセスを透明化。たくさんの人、みんなでつくる
 →Oracleはスペックリードの座から降り、ほかの会社と同じ立場で
  スポンサーはeclipseファウンデーション
 プロジェクトチャーター(憲章)を作る

・コンパチブル:互換性を持たせる
  GlassFishを再ライセンス、
  ただし、資産自身はすべてOracle

・フレキシブル
 ハードルを下げる
 配布もEclipseライセンス

・Nimble
 2018年中旬までに移管したい

→マルチベンダー

・EE4J FAQがある

・EEをどうサポートするの?
 今の段階でわかっていること
 既存の契約は尊重
 ライセンス契約も
 JavaEE8 
  2025年までにEE4Jに移行するように計画
  その先はEE4Jの情報

・そのあと
  MVC1.0→EE4Jに入る
  Yasson,EclipseLink→EE4Jに入る

・JavaOneのパネルディスカッション
   eclipse,IBM,Redhat,tomitribe
 去年のマイクロプロファイルとJavaEE8のパネルディスカッション
   payara,oracle,IBM,Redhat,tomitribe

・マイクロプロファイル:タイムボックスリリース
  →将来的にはマージ
   EE8の機能が入っていないので、今後はいる
 標準化団体:できればつくりたくない→スピードを上げる

・まとめ
 EE8でた
 EE4Jはじまった(なにもきまっていない)

■JavaOne2017参加報告
・自己紹介
・行って分かったこと
 ホテルは早めに予約する:宿泊料高い
 なるべく疲れないようにする:Uberいい
 参加セッションは必ず事前登録する
 技術系・飼料ありセッションは分かりやすい

・参加したセッションの紹介
 マイクロサービス系
  12Factors系
  Microservice Data Patterns CQRS:データの扱い
  spotify:組織、文化の話、独自フレームワーク

・マイクロサービスの話題や取り組み事例
 モノリスからマイクロサービスへ
  スタート時点はモノリス
  サービス拡大でスケール
  それにともないマイクロサービス
  組織・文化漏れに合わせて変わる
・組織、文化
 システムのスケールに合わせて、組織も変わるには
 コンウェイの法則
  自主性、自立性:Autonomy squad:非セントラライズで自主的
  非同期型を同期型よりも推奨
  
・マイクロサービスを取り巻く仕組み
  CI/CD
  コンテナとオーケストレーション;Dockerとくーばねーてぃぶ
  サービスレジストリ:ポート隠ぺい
  とにかく非同期推奨
  フォールトトレラント(サーキットブレーカー)
  モニタリング:ぷろめてうす
  トレーシング

・議論の対象の変化
  フレームワークやライブラリより
  サービスや部品をどう強調させるか

・同期<非同期

・データ処理パターン
  Eventual Consistencyでよくないか?→マイクロサービスと相性がいい
  Event Sourcig:Insertのみ、Updateしない。ひたすらログを取る
  CQRS:登録と問い合わせ処理の責任分離

・マイクロプロファイル
 1.2:10月3日に公開
 今後

・複数サービスにまたがったトランザクション
  Long Running Action

・考察
 必要性を考える
   →最初からマイクロサービスを考えたわけではない
 組織や文化とセットで考える
 トレードオフも考える

・まとめ
 ホテルははやく
 必要性とトレードオフ

■サーバーレス@Oracle
・Function使っている人!
 1割いない
・Functions
 Function as a serviceのプラットフォームで動く
 プラットフォーム
  あまぞん
  あじゅーる
   :
 問題
  プロプラエタリ
  Javaの実装甘い

・理想のfunction
 オープンソース
 Docker クーバネーティブ

。fnプロジェクト
  function as a serviceのオープンソース
  dockerでもうごかせる
・Java用
  FDKで開発できる
・CIツール、CD
  9割は使っている
  数分間
・フロー:複数の処理をまとめられる
  コンカレントAPI
・より細かい詳細
 www,fnproject.io
・情報発信:ソーシャル使っている
・デモ

■Attend JavaOne as a Community Master
・自己紹介
・11月18日、JJUG CCCやるよ!
・JavaOne初参加
 JavaDayTokyo:CfPだしなよ~
 はじめてづくし
・コミュニティDay
 コミュニティの紹介、技術セッション有(求められるレベル低そう)
 話したこと Java女子部のこれまでとこれから
 よかったこと
   Java女子部が新しいことに挑戦できた
・コミュニティキーノート
  Javaコミュニティ用の楽しい場
  IoT系のおもしろいやつのしょうかい
  帰りの会
 Javaコミュニティ大集合!爆笑寸劇
   お楽しみ会:おととしはじまった
   4分の1を日本が獲得
    からておしえておんせんいく
     BulletTimeDemo:ラズパイを使って360度画像を作る
     JOnsenの紹介
 よくなかったこと
   はずかしずぎる
   ゆるふわすぎる
 よかったこと
   いろんな人に声をかけてもらえた:日本のイベントで登壇したい
 日本のコミュニティアツい:特殊で活発
・所感・まとめ
 絶対また行きたい
 なぜいかないんですか?
  費用:スピーカーになればチケット無料
  海外:日本人多い
  英語:1ねんある。
  興味:なんで今日来ている?


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Javaのリリース方法とバージョン、サポートが来年から大幅に変わる件

2017-10-21 13:36:36 | JavaとWeb
今、
Java SE 9/EE 8リリースイベント 兼 JavaOne 2017 報告会 @ 東京
https://jjug.doorkeeper.jp/events/66256

に行っていて、話聞いてる最中だけど、大きな話なので、ここでメモメモ
(上記の件は後半)




■JavaOne2017 Overview & announcements
・JavaOne2017 イベント的には、ほぼほぼ1週間
 Javaキーノート:ゲストスピーカーが出てきて中核の話
 デベロッパーキーノート:クラウド
 コミュニティーキーノート:Javaチャンピオンとたのしくすごす

・まーくきゃべっじ キーノートしきっていた
 R&Dのトップ
 じょーじさーぶ
 まーく:機嫌よかった。(きょねんぴりぴり)9出たので

 ステージ 4000人くらい入るホールで
 SE9、今後のプロジェクト
 JavaEE
 チーフアーキテクトコメント
 くーばねーてぃすの人のスピーチ

・今年のメッセージ
 より、速度を上げていこう:進化を早く
 Core Foundation
 Javaチャンピオンふえてる
 コントリビューションも増えている OpenJDK
 現在の状況:世界で一番使われている。1200万人のでべろぱー380億のVM
 くらうどだけでも210億のVM

 これからの方向性
  オープン
  進化の加速(evolving)
  にんぶる(軽量化)

 JavaEE
  8のリリース
  オープンで
  にんぶる
 →Eclipseへの移行(Eclipse Enterprise for Java)

 JavaSE
  9リリース
  より早いタイミングで→OpenJDKの位置づけ

・JDKリリースモデルの変更
 JDK9
  9月リリース
  7のときにcoin,Lambda,Jigsawはあった
   →実際には一部
 →段階を踏んで、9にはいった。

・従来のリリースモデル
 OpenJDK:ソースコード提供、OracleJDKと技術的な差
 機能リリース 2年に1度のリリースが目標
  →まもれたためしない:だいじょうぶなの?
 Oracle JDK前後のバージョン1年間のダブりがある
 セキュリティパッチ3か月

・新しいリリースモデル
 OracleJDKとOpenJDKの技術的な差分なくなる
 6か月に1回にリリース:固定
 バージョンの表記;来年の3月から18.3、18.9のように
  リリースノート、ドキュメントで新しい機能、削除される機能
 OpenJDKのバイナリ配布 無償配布の場合
  →GPL

・長期サポート 2018年9月から開始
 18.9から
 更新リリース 3か月ごと
 OpenJDK,OracleJDKとも、機能更新はいらない(セキュリティパッチ)

・Oracle JDKの無償利用
 今は可能だが、将来辞める→評価、開発の利用はできるが、
 ただで、今まで通り利用したいなら、OpenJDKつかってね!

・ソースコードの管理モデル
 OpenJDK、OracleJDKの2つ
 →新しいモデル、1本のソースコードへ

・JavaSE18.3のスケジュール
 3月20日のGA、
 2月22日のファイナルキャンディテートにはアーリーアクセスでる

・OpenJDKバイナリダウンロード始まっている

・公式アップデートの終了(無償でアップデート)
  8  18年9月終了
  9  18年3月終了
18.3 18年9月終了

・商用サポート
  プレミアポート8、9もあるけど。。
  エクステンデッドサポート 8はあるけど、9はない

・お知らせ JavaSE9日本語ドキュメント公開


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ドメイン駆動設計 powered by Springを聞いてきた!

2017-03-29 10:34:37 | JavaとWeb
3月28日、

JSUG勉強会 2017年その3 ~ ドメイン駆動設計 powered by Spring

を聞いてきた!ので、内容をメモメモ




■ドメインロジックに集中せよ
・ドメイン駆動設計
 ソフトウェアの核心にある複雑さに立ち向かう

・設計を複雑にする要因
  技術的な複雑さ
  ドメインの複雑さ

・核心の複雑さに立ち向かう
 ドメインロジックに集中する
 モデルに基づき設計する
 インクリメンタルに開発する

・ドメインロジックに集中する
 ビジネスルール :分析の対象→遵守すべき約束事
 ドメインロジック:実装の対象→ビジネスルールのサブセット
                プログラミング言語で記述

・モデルに基づき設計する
 モデルとオブジェクト
 モデルのない開発プロセス
  情報収集
  分析整理
  仕様  モデル(アドオンの作業)
  設計
  実装
 →ドメインモデルを一切持っていない

 モデリングという作業を入れる
 →全体の見通しがよくなる

・インクリメンタルに開発する
 フェーズに分ける開発
  担当者が変わる:伝言ゲーム
  一方向 つじつまあわせ
 インクリメンタルな開発
  すべては発展途上になる
  同じチームで対応する

・素敵なお知らせ
 複雑さに立ち向かう強力な援軍
 Spring Framework Spring Boot
 Spring Framework
  ドメインモデル以外のことを全部用意するフレームワーク

 Spring Boot
  いったんは動かせ。Github作って。

・残念なお知らせ
 こんな開発もできる
  技術課題に集中する
  バックログをせっせと消化する
  フェーズに分けて伝言ゲーム・基盤とアプリの分離

・アンチパターン
 データ処理に焦点をあてる
  プレゼンテーション層:画面の入出力 @Controller
  アプリケーション層 :データベースの更新・参照の手続き @Service
  データソース層:データベースの入出力 @Repository
    |
    ↓ ドメインロジックを
  ドメインモデル
     ここに集約する

・ドメインモデル
 マーチンファウラー
  オブジェクトモデル
  振る舞いとデータ

・ドメインモデル
 ドメインロジックをオブジェクトで表現する

・ドメインモデルだと何がよいのか
 変更が楽で安全になる

・ドメインモデル:変更容易性
  ドメインロジックが重複しない
  どこにロジックが書いてあるか特定しやすい
  変更の影響を狭い範囲に限定できる

・トランザクションスクリプト
 同じロジックが重複する
 データ処理の流れを追いかけて探し回る
 後続の処理をすべて追いかける

・ドメインオブジェクト設計パターン
  ビジネスルール
  ドメインロジック

・ドメインロジックの最小単位
  演算の対象
   数値
   日付
   文字列
  演算
   等値の判定
   大小・順序
   範囲内
   有効
   型変換
   四則演算・変換
   
・最小単位→3つの型にまとめられる
 値オブジェクト
   汎用の型 → 独自に定義した型
 コレクションオブジェクト→リスト、セット
 区分オブジェクト → 振る舞いを持ったenum
            Strategy,Stateパターン

・設計原則
  モジュール化:複雑さに立ち向かうための工夫
    ドメインモデル:オブジェクトモデル/関心ごと
    トランザクションスクリプト:機能
  構造化:記述レベルを階層化する
    業務で使う用語
    ドメイン固有API→このレイヤをしっかり書く
    JavaコアAPI
    Java言語仕様
  ※動かすだけならドメイン固有APIはオーバーヘッドだが、
   ドメイン駆動設計には必要
  文書化
   ソースコードに自己文書化
    パッケージ名/クラス名/メソッド名

・ドメインロジックの文書化
 ドメインオブジェクトを使うほかの三層のコード
   ドメインロジックとの関係性を語るようになる
    (自己文書化が波及する)
 ソースコード以外の文書化
   業務マニュアル
   利用者ガイド
   (不要)開発・保守ドキュメント

・ドメインを隔離する
  基盤側にドメインロジックを持っていかないこと
   →つまり、アノテーションのかかったメソッドに
  データの入出力とドメインモデル

  画面やデータベースの都合をドメインに持ち込まない

・プレゼンテーション層とドメインオブジェクト
  ドメインオブジェクトを直接使う
  プレゼンテーション層の記述をドメインモデルに依存させる
  プレゼンテーション層に判断・加工・計算のロジックを置かない
   HTTPリクエスト→ドメインオブジェクト:DirectFieldAccess
   ドメインオブジェクト→HTTPレスポンス:HTMLテンプレート

・PRG

・DirectFieldAccess
@ControllerAdvice
 @initBinder
あとは#kanjava MVCで検索

・アプリケーション層とドメインオブジェクト
 @Service
 @Validated :引数にかけてしまう
 リポジトリを@Autowiredする

 ドメインの関心事としての永続化
  インターフェース宣言
  データベースの都合をドメインオブジェクトに持ち込まない

・データソース層とドメインオブジェクト
 @Repository
 MyBatisSQLmapping
  オブジェクトとテーブルは別の世界
  手作業で明示的にマッピングしている
 resultMapに明示的に書く

・まとめ

■トークセッション
・変える気があるか
・リードする人がいないと・・
・ぐれいるずをつかおう
・数百人にDDDの厚い本を実践する?
・経験者を作る
・リファクタリングの形で書き換える
・本開発が始まる前に作るしかない
  →縛りをかけてしまうと、
・ウォーターフォールでDDD
  いけるんじゃないか?
・データさんがかじを切るだけでも変わる
 →てらそるなに「リッチなドメインモデルは書かない」とかの記述に
  たいして、こういうときならというのをちょこっと書いてくれるだけでも、
  世の中は変わる。
・自分の知らないドメインは
  →パクってくる。Day1はできてない。でも1週目にはできていないと・・
   用語集とかは渡していない
・業務で使う日本語:横幅いっぱいになる:日本語でクラス作る?
  enumは日本語で書いている。日本語でやると違和感
  大規模はローマ字、子音だけはあるけど、
・ドメインモデルを作るコツ
  値オブジェクト:ドメイン駆動はオーバーヘッド 結果的によくなる
・実装 MyBatisでなくてもJPAでもできるけど、
・オブジェクトの組み合わせでロジックを作る
 順序依存性があるものは、サービスに書いている

  

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Java EE 8とMicroprofileをきいてきた!

2017-03-22 01:07:25 | JavaとWeb
3月21日

JJUG ナイト・セミナー 「Enterprise Java最新動向~Java EE 8とMicroprofile~」
https://jjug.doorkeeper.jp/events/58535


を聞いてきた!のでメモメモ




■JavaEE8最新状況について
・JavaEE8 What's coming
・JavaEE8 FIXしていないので、かわるかも

・3月時点での最新情報
 2017年3月13日GlassFish5のPromotedビルド
 2種類のビルド Promootedビルド、Nightlyビルド

・JavaEE8のスケジュール
 4月5月 パブリックレビュー
 今年7月 ファイならいず
→ことしの9月か10月にGlassFish5

・JavaEE8の仕様
 JSON-B、セキュリティ
 現状のステータス
  MVC1.0はドロップ→コミュニティに移管

・Java EE8 各Specificationとサンプルコード
 JAX-RS2.1:REST
  2.1で追加された
   Reactive Client API
   サーバーセントイベント
   ノンブロッキングIO
 Jax-RS振り返り
  1.1 サーバーサイドの実装のみ
   クライアントは標準化されていない
    Jersey,ApacheCXFが独自に用意しているもの
  2.0 クライアントAPI登場
    複雑な呼び出しもできる
    同期型
    非同期呼び出し async()インボーカーを呼び出すだけ
            返り値はFuture、コールバックも
     →リアクティブ・プログラミング・モデル
 JAX-RS2.0
  リアクティブ・プログラミング・モデル
   →コールバックのネストで実装
    コールバック・ヘル
 JaxRS-2.1 rxインボーカー
  CompletionStageが返り値
 ScalaのFutureはチェインを組めるが、JavaのFutureはできない
  →そこでCompletionStageが出てきた

・Server Sent Eventの特長
 Jerseyではすでに→標準化を行った
 SseEvent:
   SseEventSourceが受ける
 2月時点でのAPI変更:Jersey独自実装がなくなった

・JSON-P1.1
  JSON新仕様(RFC 7159)に対応
   JSON-P1.0ではJSON RFC 4627
 →新仕様では、TOPレベルに何でもおける
   RFC 6901
  JSONポインタで中を見れる

  JSON Patch
   RFC 6902:部分的変更、演算、JSONドキュメントの変更
   Diff
   StreamAPIに対応
    JSON collectors

・JSON-B
 コンベンションオーバーコンフィグレーション
   アノテーション、コンフィグ不要
   プロパティ名のカスタマイズ
    無視する、フィールドの可視化、NULL
    フォーマット指定(ddmmyy)
    アダブタ

・プロバイダ
 もきしー
 べうのプロバイダを指定できる

・サーブレット4.0
 HTTP2サポート
  HTTP1 テキストベース
  HTTP2 1つの物理接続を論理でいくつもに分ける
   →優先度
    HTTPあっぷぐれーど

・JSF2.3
 CDI統合:今までのManaged Bean非推奨
 JavaEEコンテナの外部でもCDI動作

・CDI2.0
 BeanValidation 2.0 JSR380

・セキュリティAPI
 JSR375
 いままで標準化なされていなかった
  AAuthentication
  Identity Store
  セキュリティコンテキスト





■MicroProfile 背景と意義、そしてこれから
 講師 富士通の人

・自己紹介
・Microprofile.io
 ミッション
  エンタープライズじゃヴぁ、マイクロサービス、ゴールは標準化
 →JavaEEでよいのでは?

・マイクロサービスアーキテクチャ
 疎結合、
 意思決定の早さ
 フィードバックループ(OODAループ)を早く

・MSAレイヤーと要素技術
 サービス分割、ステートレス、API アプリケーション
 メモリー、REST、非同期 アプリケーションサーバー→マイクロプロファイル
 サーバーレス、IaaS,PaaS,Docker VM/コンテナ

・JavaEEにもプロファイル
 JavaEEにプロファイルを追加できるのはOracleだけ

・JCPステージ
 イニシエーション
 どらふと
  アーリードラフトレビュー
  パブリックレビュー
 ファイナルリリース
  RI(参照実装)&TCK(テスト実装)

・JavaEEでるの?:今EDR
 GlassFishのイシュー V4以降はない:活発でない?
 JavaEEに乗れない
  →JCPのプロセスがアジャイル的ではない

・仕様が先?実装が先?
 仕様が先:適切な競争     JCP
 実装が先:イノベーション向き Linuxカーネル
 →もともとはOpenJDKで

・JCP VS OpenJDK
 OpenJDK
  JavaSEのRI JSRによる開発 JCP
  JDKのオープンソース JEPによる開発 OpenJDK

・OpenJDKとMicroProfile
 似ているところ
  Microprofileの仕様がJavaEEの仕様
  開始からFIXまでの時間が短い→議論しないから
 違い
  OpenJDK:競争原理働かない
  Microprofile:競争あり。複数ベンダーで実装

・MicroProfileとは
 2016年6月設立 レッドハット、IBM,ぱやらなど
 2017年1月 富士通参加表明
      2Q  1.1リリース予定

・アジャイル的にOODAループをまわす。最終的にはJCP
  マイクロプロファイル提供
  市場評価→最終的にはJCP

・1.0 2016年9月 JavaOneでリリース
  JAX-RS、CDI,JSON-P
 1.1 2017年2Q
   フォルトトレランス

・configration API
 設定の外だし、設定動的反映、複数の設定で構成
 アノテーションも使えるように
・JWT RBAC OpenID ConnectベースのRoleBased Access Control
 優先度高いといわれたが、進んでいない

・サービス ヘルスチェック
 アプリケーションのヘルスチェックをするREST エンドポイント仕様
 Kubernetes helth check互換
  プロデューサーとコンシューマー
  @Healthが書いてあると

・フォルトトレランス
 エラーハンドリングを分離する機能
  リトライポリシー
  フォールバック
  サーキットブレーカー:3つの状態 クローズド、オープン、ハーフオープン
  バルクヘッド
  タイムアウト

・サマリ
 オープンイノベーション
  フィードバックループによるマイクロサービスを実践
 アプリケーションポータビリティ
  実装を選択可能
・最終的にはJCP


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaをWindows上で動かす際に「1つのファイルをダブルクリック」にする方法

2017-03-07 11:22:44 | JavaとWeb
Javaがインストールされている場合、2通りあると思う
実行できる形式のjarで渡す場合
・exeファイルにラップして渡す場合

後者は、exeファイルなんだけど、そのexeファイル内部でjavaを呼び出すこと
によって実行するもの。launch4jなどがこれにあたる

launch4jで、Javaプログラム(.jar)をexeファイルでラップする
http://symfoware.blog68.fc2.com/blog-entry-1020.html


で、このlaunch4jで困ったこと。
今久々にあるソフトを立ち上げようとしたら・・・

もう、java6なんて、消してしまいました・・・
また入れるのもなんだしなあ・・・
実行できるjarの形式でくれたほうが、うれしいんだけど・・・
Spring Boot最強!(Spring Bootは、targetの下に、実行できるjarを作ってくれる)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kotlinについていろいろ聞いてきた

2017-02-21 14:30:28 | JavaとWeb
昨日(2月20日)JJUG ナイトセミナー「Kotlin(ことりん)」に行ってきた!ので、その内容をメモメモ



■クラスの作り方に見るKotlinの表現力
・Kotlin入門
・Kotlinとは
 JVM言語(すからー、ぐるーびーとかのなかま)
 androidもサポート
 JetBrainsが開発(IntelliJ IDEAを開発している)
 2011年に発表され、2016年2月にVer1.0(1.1もうじきでそう)
 静的型付け
 簡潔安全Javaとの相互運用

・Hello World
package sample

fun main(args: Array<String>){
if(args.isEmpty())return
val name=args[0]
println("うつせなかった・・ここまでしか");
}

・自己紹介
 Kotolinスタートブック

・もくじ
 有理数(分数)
 片方向リストのノード

・題材その1:有理数を表現するクラス
 有理数クラス:Rational
 プロパティ
   分子
   分母

・クラス定義
// プライマリコンストラクタ
 class Rational(val numerator : Int,
val denominator: Int)

//使い方
fun main(args:Array<String>){
// newと書かなくても生成
val half = Rational(1,2)
// getter setterが書かないでもいい
printf(half.denominator)
}

・オーバーライド
 class Rational(val numerator : Int,
val denominator: Int){

//オーバーライドのとき
// overrideのことば必須
override fun toString():String
= "${numerator}/$(denominator}"

//式が評価された文字列内に展開
// ストリングテンプレート
}

・イニシャライザイー
 不正なものを生成させない
init{
require・・・・
}

・非公開メソッド private fun

・if elseは、式(値を返す)

・末尾再帰の場合、tailrecとかくと、最適化可能
  →スタックオーバーフローなくなる

・非公開プロパティ
valとかかないと、非公開プロパティ
 class Rational(numerator : Int,
denominator: Int){

・演算子オーバーロード Operator
  plus +演算子を使ったメソッド呼び出し
 →ユーザー定義クラスにも

・2 * Rational(2,5)
 →拡張関数
 operator fun Int.times

・題材その2片方向リストのノード
 プロパティ
   値 value
   次のノードへのポインタ next

・抽象クラス
//共変指定
 abstract class Node<out T>{
abstruct val value:T
abstruct val next:Node<T>
}

・継承してノードを表現

・シングルトンオブジェクト object
 クラスとは違う
 Nothing あらゆる型のサブタイプ

・リストを作れる!

・コンパニオンオブジェクト
  スタティックな宣言に近い

・呼び出し時に引数が省略されるとデフォルト値が使用される

・通常の抽象クラスは見える人なら継承OK

・クラスの前にsealedとつけると、外側にいる人は継承できない

・ノード数プロパティsize
  再帰呼び出しで計算
  when式:switchの強い版

・委譲プロパティによる遅延初期化
 byのあとにかく

■spark Framework with kotlin
・自己紹介
 サーバーエージェントのFresh!(動画配信プラットフォーム)について
  マイクロサービス
  フルDocker
  AWSのEC2コンテナ(ECS)
  主にGo
・GoとFRESH
 1個のサービス、1個のコンテナ 1個のリポジトリ
 十数個のマイクロサービス
・つらくなってきた
 →基本的に筋力に頼る言語:書く量多い
  生産性を挙げる:コード生成
 →新たな基軸言語を求めた
・マイクロサービス:言語変えられる
  ミドル、低レイヤはGo
  新たに1つの基軸言語(乱立はいけない→学習コスト)
・Kotlinを選択
 API実装の基軸言語として
 新しいマイクロサービスは基本ことりんで
・選んだ理由
 モダンな文法
 IDE(IntelliJ IDEA)
 一番現実的
  社内リソース(JVM系人材、Androidでの実績)
・助走期間
 サービスをKotlinで
  SpringBoot
  Springfox
  domaframework
 感想
  生産性高い
  そこそこの学習コスト
  もうちょっと薄いものでいいかもしれない?
   モノリシックなサービスを作るわけではない
・Spark Framework
  小規模Javaフレームワーク
  Java8ベースのマイクロWebフレームワーク
  Apache Sparkとは別物
  ラムダ式
  DIない

・Spark Framework With Kotlin
 ラムダ式では満足できない
 SparkFrameworkとことりんのよさ
 相性の悪さ、迷いはあまりない

・Spark With Kotlin
 コントローラー・ルーティング
 フィルター(横断的関心ごと)
 レスポンストランスフォーまー(JSON)
 データクラス
 拡張関数
 Guice(DI):Google
 愚直なDI(とばす)
 okhttp
 hystrix
 メトリクス

・コントローラー
package io.stormcat.controller
import spark.*

class EchoController{
val echo = Route{ req,res ->
"Hello・・・・

・ルーティングmainからgetで

・Filter
handleをオーバーライドする
 mainメソッドで定義 after
  →around的なものがない

・レスポンストランスフォーマー
 どのように整形するか
 jacksonのkotlinモジュール
 dataclassをサポート

・data class
 Javaだと入れ物定義
 echoの返すところ EchoResultを作って返す
 JSONにシリアライズ

・拡張関数
 リクエストに対して、authUser
 beforeでユーザーオブジェクト取ってきて
 拡張関数の仕組みを使うと、メソッドに

・じゅーす
 SparkにDIのしくみない→DIほしい
 GuiceでDIを利用
 コンストラクタインジェクション

・愚直なDI
 Guiceのインジェクター

・okhttp
 マイクロサービス間の通信
 ことりんのでーたくらすにでしりあらいず

・Hystrix
 ネットフリックスがつくっている
 分散システムにおいて、回復力のアルアーキテクチャを実現するライブラリ
 サーキットブレーカーをサポート

・サーキットブレーカー
 どこかがダウン→ダウンしたところにリクエスト→タイムアウト→連鎖的におかしくなる
 コレを防ぐ
 閾値超えたらアクセス遮断
 ダッシュボード

・Hystrix Command
 をいれていく

・メトリクス(Jolokia じょろきあ)
 Dockerビルドの際にいれておいて、とれるようにする

・FrashにおけるSparkとKotlin
 公開APIとして本番稼動

・まとめ
 Spark+ことりんは現実的な選択肢
 マイクロサービス:シンプルなもの
 サーバーサイドことりんの波は少しずつきている
 Kotlin気持ちいい

■Spring はーとまーく Kotlin
・自己紹介

・今日のお話
 SpringBootをKotlinで
 Spring5で入っているKotlinサポート

・せばすちゃんの受け売り

・SpringBootをKotlin
 Spring Initializr
  →IDEも裏でコレたたいている
 デフォルトでJava
 →スイッチ フルバージョン
  →言語Kotlin選択できる

・MVCコントローラー

・DIコンテナーに管理してもらいたい
 Javaconfig
 ことりんの場合 openつけないといけない
 →なぜ、Openいるの?
 シングルトンオブジェクトになる
  →同じインスタンス:Cglib
 ことりんは、Finalを勝手に付ける
  →勝手に付けなくするのがopen
 →spring のopen問題

・セバスチャンが解決
 springだったらfinalつけないというspringプラグイン
 →JPAのプラグインも
 →今はOpenいらない。

・Spring5のことりんサポート
 Spring5
 Java8ベースライン、Java9コンパチ
  :
  :
 Http2サポート
 Kotlinサポート

・ことりんサポート
 拡張関数のサポート
 Reified type parameters

・ことりんKクラス
 Bar::class.java
 Javaのクラスは.javaが必要
 →拡張関数:もともとの関数を書き換えることなく

・Reified(らいふぁいど)type parameters
inline fun <reified T:Any> Foo.create()

 ことりんらしいコード
 idiomatic Kotlin code

・Reactiveサポート
 今:サーブレットベース
 →リアクティブランタイム(ノンブロッキング)
  →Webflux
   リアクティブストリーム
 サーブレット3.1→Netty

 いままでと同じようにサーブレット
  +
 ルーターファンクションモデル
 SpringMVCも

・WebMVC+@Controller
 →いままでどおり:ブロッキング
 WebFlux+@Controller
 →帰り値:ノンブロッキング、引数ちょっと変わる
 WebFlux+RouterFunction in Java

 ルーターファンクションはDIなしで動く

・mix-it

・そのほかのことりんサポート
 本家見てね

・5.0 M5がリリースされれば、使えるはず

http://start.spring.io/#!language=kotlin

・JJUG CCC 2017 Spring
 CFP募集中

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Spring Bootには、入門してきた。Spring Cloudは・・・

2017-01-24 10:26:17 | JavaとWeb
1月23日、
JJUG ナイト・セミナー 「入門Spring Boot&Spring Cloud」
を聞いてきた!

SpringMVCを中心とした、フレームワークのフレームワークであるSpring Bootについては
  確かに入門したが・・・
Springのクラウドを使う為のユーティリティ(ロードバランサとか)のSpring Cloudについては
  う~ん、入門できなかったかも・・

ということで、とにかく、聞いた内容をメモメモ





■さくっと理解するSpringBootのしくみ
・自己紹介
・今日話すこと
 SpringとSpring Bootの関係
  使われる機会増えた:Bootでてきてから
 Spring Bootがカイゼンする開発プロセス
 Spring Bootの構成要素

・そもそもSpringってなに?
 Springフレームワーク
・SpringとSpring Bootの関係
 ざっくり言えば
  Spring - spring config(面倒な設定排除) + Tomcat = Spring Boot

・一般的な開発のプロセス
 1.必要なライブラリのリストアップ
 2.起動に必要なBeanの定義をする
 3.プログラミング
 4.パッケージング・デプロイ
 5・モニタリング

1.必要なライブラリをリストアップ
 最小限で記述できる仕組み:
  pom,gradleに記載する記述少なくなる
  ライブラリのバージョン互換性をキープしたまま依存性注入

2.起動に必要なBeanの定義をする
 同じようなBean定義→Boot側が持っている
 Bean定義が自動的になされる:オリジナルの動作変更もできる

3.プログラミング
 Tomcat内包。生産性が上がる

デモ:は上手くいかなかったので省略

4.パッケージング・デプロイ
 実行可能Jarでパッケージングできる

5.モニタリング
 ヘルスチェック、REST APIエンドポイント自動生成

・Spring Bootの仕組み
 Spring Bootの構成要素 7つのコンポーネント
  core:DIコンテナの起動楽に
  Starter:ライブラリ同士のバージョン互換
  AUto-configure:自動でBeanを定義
  CLI:CLIで作れる
  Actuator:エンドポイントを提供(モニタリング)
  Test:JUintユーティリティ
  Tools:自動再起動など

・Core
 起動が簡単に
 Tomcatがないほうされている
  Jetty,Undertowに置き換えできる
  Tomcat7から組み込み版対応→Spring Bootが組み込んだ
 Fully Excutable jar
  1つにパッケージング
   ubar jar(fat jar)→どんなものかわからなくなる
  →Spring BootはNested jar(Jarの中にJarを入れる)
  特殊なクラスローダーがある
 Maven Gradle、Excutableをtrueにする

・Starters
 実体:pomしかない
 自分でStarterを作れる

・Auto-configure
 進化した設定の簡易化
  いままでXMLで定義→Java config→進化した設定の簡易化Boot
 @conditipnalOnClass/Bean
  必要なBeanだけを定義
  クラスパスにクラスがあるかないかでBeanの定義を切り分け
   →実行時に自動的に判断

・Actuator アプリのモニタリング
 クラウドネイティブなアプリを付けるとき
 Spring Cloudフレンドリ
   マイクロサービスの状態チェック

・Tools
 Dev Tools:
  オートマチックリスタート
  設定で有効になる:2つのクラスローダー(再起動用、非再起動用)
  2つのクラスローダーの使い分け
  JRebel Spring Loaded:リロードになっている

 Live Reload
  自動でリロードしてくれるブラウザのプラグインに対応
  →F5を押す手間なくなった

 開発時のデフォルトプロパティ

・Maven/Gradle plugin
  Maven→Gradle
  地味にビルドを助けてくれるプラグイン

・まとめ
 Spring Bootのはじめかた
 IDE:いんてりJ、STS,Eclipse
 イニシャライザー
 CLI
    ↓
 Maven・Gradle
    ↓
 メインメソッド実行でTomcat

・むすびに
 ちょっとしたカイゼンの積み重ねで開発が楽になる
 アイデアがGood
 クラウドサービスの登場:Javaがお手軽に

Q&A
・内部構造でのポイント
 Auto-configureのソースコード
 Bean Definitions

・SpringMVCとAOPは?
 AOP:SpringフレームワークのCoreプロジェクト
 MVC:Coreのソースコード

・UIはTimeleafをつかうけど、JSPをつかったら?
 JSPがHTMLとロジックをまぜこぜにする点で・・・
 不都合はないが、選ぶ理由がない
 マニュアルに避けろと書いてある
 組み込みで動かないことがある

■ぱぱっと理解するSpring Cloudの基本
・自己紹介

・Spring Cloudとは
 クラウドネイティブアプリのツールの集合体

・クラウドネイティブなメリット
  変化に強い、
  性能のスケールアウト
  障害に強い

・Spring Cloudで抑えておきたい基本技術
 そもそもできること
 クラウドネイティブなアプリ
  マイクロサービスアーキテクチャ→疎結合
  サービスの多重化:処理性能・耐障害性

・要素を簡素化した題材で基礎技術
 結合した文字列を返す
  りんごとペンを結合する Uh
  もし、爆発的な人気が出たら・・・

・サービスディスカバリとクライアントサイドロードバランシング
 発生しうる問題:集中
  →多重化

 Eurekaサービス:DNSみたいなもん
  アプリ名、IPアドレス、ポート番号

【実際のコーディング】
 3ステップ
  1)Eurekaサービスの立ち上げ :イニシャライザー
    依存関係にEurekaサーバー追加
  2)サービス登録:Eurekaディスカバリ
  3)ロードバランスで負荷分散:リボンを追加 Rest Templateを介して

・サーキットブレーカーで障害検知
 1箇所の障害でサービス全体が応答しなくなる可能性
 →障害時の規定の動作を定義、継続性を担保
  →サーキットブレーカーパターン

【実際のコーディング】
 2ステップ
  1)EnableCircuitBreaker:Hystrix追加
  2)HystrixCommandで障害の規定動作の指定


・Config Serverで設定情報の集中管理
 サービスの数だけ設定ファイル:設定変更が大変、不整合の恐れ
 →設定ファイルの集中管理

 configサービスとgit 
 設定ファイルの更新
  Git更新
  refresh要求:管理者→アクチュエーターで
  設定の再取得

【実際のコーディング】
 2ステップ
 1)EnableConfigServiceでConfigサービス立ち上げ
   →イニシャライザーで設定ファイル
   Git側アプリ名.propertiesでプッシュ
 2)EnableConfigClientでクライアント作成
  アクチュエーター経由で環境変数の確認
  http://アプリ名/env

Spring Cloudを使ってみて感じた疑問

・信頼性は大丈夫(SPOFの問題)
 →必要に応じて冗長化の必要がある 
 実際にはLBの後に複数のConfigインスタンスをおく場合が多い

・Eureka冗長化の考え方
 可用性>整合性
 Eureka動詞の間にお互い登録
  →障害時、Eureka同士が持っている情報がずれている場合がある

・Config First or Discovery First
 Config firstでしょう(ただし、両方とも動く)
  config first:Configサーバーを起動→Eurekaへ登録
  Discovery First:Eurekaを起動→Configを登録
 →必要に応じて検討

・EurekaとDNSの違い
 サービスレジストリと負荷分散
  Eurekaだと、アノテーションを付けるだけ
 ミドルウエアか、アプリか→検討

・おわりに
 本セッションは基礎に絞って紹介

Q&A
・パフォーマンスは?
 アプリレイヤでやるので、パフォーマンスは・・
 それなのにアプリでやるのは、柔軟にできる点

・Spring Cloudのデザインパターンみたいなまとめはないの?
 CloudFoundryが流行ってるよね。
 SpringCloud公式ドキュメンテーションにいろいろある

・アクセスキューの動的制御は?
 動的スケールアウト:ないかなあ・・・?

・悪意のあるユーザーがいたら?
 デフォルトで認証機能が有効でない
 認証してね

・ロードバランシングのカスタマイズは?
 メトリクスの取得は?
 クラスで定義、注入する
 パフォーマンス:Spring Actuatorはリアルタイムで情報見える

・開発コスト
 マイクロサービスをどう考えるか

・整合性担保
 おなじリポジトリを見るので、いつかは整合性:Config
 Eureka:一人でも動くようになっている

■CM
・JSUGでSpring勉強会
・年1回 Spring Day→10月中旬

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

「JAX-RSでCognitive ServiceやExcelを操作しよう」を聞いてきた

2016-12-03 21:49:52 | JavaとWeb
今日(12月3日)JJUG CCC 2016 Fallに行ってきて
JAX-RS REST ClientでCognitive ServiceやExcelを操作しよう
講師:寺田 佳央さん

を聞いてきたのでメモメモ




■JAX-RS REST ClientでCognitive ServiceやExcelを操作しよう

・ビデオ
 IT:仕事の効率化 改善
 ITが人の生活をよりよくしてきたか?
→今日のテクノロジを使うと、よりよい社会を創っていける
 ほんやくコンニャク

・Speech API
  音声(日本語)→(日本語文字)翻訳(英語文字)→音声(英語音声)
 みなさんすぐにどらえもんになれる:エンジニア IS ヒーロー

・コグニティブサービス
 プロジェクト オックスフォード
 裏でディープラーニングが動いている
 日本語の精度を上げる:日本語試す必要ある
 VisionAPI 画像
 FaceAPI   顔
 エモーションAPI 感情

 実ビジネス→監視カメラ 生で情報収集
 教育分野でも使えるかも? 化粧品販売、車販売
  →PowerBIでリアルタイム

 Computer Vision 画像を86カテゴリに
 OCR:光学式文字認識
  日本語と英語が混ざった場合は気をつけたほうがいい
  日本語だけなら精度高い
 RESTで呼び出せる

・使いたい人
 ログイン:Microsoftアカウント以外でも、Fasebook、Githubでも
 各サービスに無料の枠がある
 サービスを有効化すると、キーが取れる:コピペする
 FaceAPI APIリファレンス
  OpenAPIテストコンソール
    JSONのパラメータ入力
    写真のURL
 ※明るさによって、年齢変わるかも?

・Javaでどうやって?
JAX-RS
 Mavenのpom.xmlにじゃーじーとか、JAXBとか(JSONBはまだ)
 HTTP Getによる呼び出し
 POST:送るデータをエンティティとして
今回はブロッキング処理→パフォーマンスわるくなる
 EE8では、ノンブロッキング対応
 ジャージーではRX対応しているので、リアクティブで書ける
  →サンプルにノンブロッキングおいてある

顔認識のサンプル実装
・サンプル写真ををAzureStorageへ
 PrimeFacesのJSF Componentを利用
・URLをエモーション、Faceに送る
 Async REST Invocation URLをおくるFutureつかってる

これが基本。この基本を覚えれば、マイクロサービスでも

Excel REST API
・Office 365のデータの読み書き
 →OAuthが必要

 Office365のデータがRESTでアクセスできる(追加もできる)
 ので、JAX-RSで操作できる

サンプルコード
 OCR https://github.com/yoshioterada/OCR-Sample-of-Cognitive-Service
 Excel:Tomcat上でも動く
  無償で試せる:画面ダンプは取っているので、それみてね
  認証用、OneDrive,Excel操作

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Java(SE8 Gold)の認定試験のポイント解説セミナーに行ってきた!

2016-11-17 10:18:59 | JavaとWeb
11月16日OCJP Gold SE8 認定資格試験ポイント解説セミナーに行ってきた!
のでその内容をメモメモ




<<始まる前に>>
基礎的なところも出る
・基礎的なところでは、スレッド・ファイルIOがよく出る

<<はじまり>>
・後日スライドシェアで確認できる
・Dukeのデザイン変わる

■Java資格のご案内
・旧Sunの試験1つ(シルバーとゴールド)
  →今、ブロンズつけた(新人向け):ブロンズはオプション
  →移行のパスがでるのは、Goldのみ

・申し込み
 1Z0-809-JPN(JPNつけないと日本語にならない)
 試験時間とか確認してね:1問あたり2分かけられない

・テスト内容チェックリスト
 13個トピック
 Javaクラスの設計:復習→設計の仕方は聞かず、どうやってコード書くの?を聞く
 SE8ではインナークラスをよくきく:ラムダ式に関係して

・ラムダ式聞く

・ジェネリックはそんなに

・でもコレクション、ストリームAPIは細かく
 ラムダ式の書き方も含めて

・アサーションと例外処理
 try with リソーシズ

・Date&Time API
 試験では基本をさらっと抑えれば対応できる

・NIO2
 NIO2を聞かれているのか?ストリームAPIを聞かれているのか?
  →減っている、深さも

・マルチスレッド
 ボリューム:シンクロナイズド、排他、同期:コレクションでも
 スレッドプール、Fork/Join
  →サンプルコードがかけるくらいに

・JDBC
  一連の流れ

・ローカライズ

13個あると、均等に出るけど
・スレッドちょっとおおめ
  →ストリームAPIとラムダ式わからないと、40%~50%答えられない
・ファイルIO
  NIO2をやったほうがいい
・スレッドは山をはらずに全部

説明の流れ


1.Javaクラスの設計
 青時はむずかしめ
 カプセル化、Objectのハッシュコード
 シングルトンクラス

 Objectメソッドのequals()メソッド→ハッシュ値が同じか
 equals()をオーバーライドしたらhashcode()もあわせてオーバーライドする

 シングルトン:インスタンスが1個しか出来ないつくりかた

2.高度なクラス設計
 enumの使い方
 インナークラス:通常、static、匿名の使い分け
  →外側からアクセスできるか
 インターフェース:デフォルトメソッドをチェック
  競合の優先度

 インナークラスのインスタンス化
  内部クラス
  staticがついた内部クラス
 →どこにアクセスできるかも
  実質的finalであること

 関数型インターフェースの要件も確認

3.ジェネリックとコレクション
 List,Set,Map,キュー
 Comparator:ラムダ式もからむ

 自分と他者を比較するときのメソッドの違い
 無名クラス、ラムダ式
 ダイヤモンド演算子

4.コレクション、ストリームおよびフィルタ
・ストリームとリストのforEach
・パイプライン処理、遅延評価
・ラムダ式、フィルター
・メソッド参照

 置き換え問題がでる
 中間操作は遅延実行

 ストリームの作り方
 int stream:for文の置き換え
 メソッド参照:ラムダ式全体が置き換わる

5.ラムダ式
 基礎的なものをカバー:5個の組み込みインターフェース
 プリミティブ型を扱う関数型インターフェース
 2つの引数を扱う関数型インターフェース
 呼べるメソッドfilter,map,forEach→取れるものが決まってくる

6.JavaストリームAPI
 全部むずかしめ:ここ6割くらい取れれば
 →キーワードは何をするか、確実に
 Optional:SE8の新機能

 flatMapの使い方
 map,reduceの使い方

 中間操作・終端操作→終端操作を呼んでしまうと、その後呼べない
 groupBy,partitioningBy

7.例外とアサーション
 try-with-resourcesとAutocloseableって何?
 アサーションの構文
 ファイルIO,JDBC→Autocloseable
 開いたときの逆順で

 アサーション:ルール覚えておく java -ea

8.日付・時刻API:あんまり難しくない
 直感的に計算できる
 タイムゾーンとくにSummerTime
 イミュータブルオブジェクト

9.ファイルIO
 ラップしたReader/Writer
 追記モード false:追記しない
 コンソールからの読み込み

10.NIO2
 JavaSE7ではおおかったが、トピック的には減った
 基本的操作
 Streamを返すファイルI/O関連メソッド
  絶対パスと正準表現パスの違い(.の存在)

11.Javaの同時実効性
 スタベーションの単語の意味に注意
 Executors
 Fork/Joinはコード書いておいたほうがいい(フィボナッチ)
 分割統治アプローチ:map reduce
 スレッドセーフに出来るか:
  Java.util.concurrent
 よまなきゃいけないところ
  startしないでrunだけしている場合とか

12.JDBC
 突っ込んだ出題はしていない
 接続
 select,ResultSet,RowSet
 更新系はあまりない
 Class.forNameいらない

13.ローカライズ
 リソースバンドルの使い方→ファイルの置き方もあわせて

まとめ
・時間あまりない
・とりあえず、全部答える。これ最優先

補足情報
・問題集の活用 2社
・キャンペーン
 合格したらTシャツ
 年末までにバウチャー 35%オフ
 12月10日に筆者が解説

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする