Java Kuche Day メモ

# Java Kuche Day メモ

2018/12/8 (土) 13:00～18:00

## CODEBASE

プロトソリューション運営

プログラミング教室：HTML・JS・Ruby (1000時間)

インターン

β版ハッカソン

実践者向けイベント (AWS・Android)

イベント募集・コワーキングスペース開放

## Oracle Code One 報告 (伊藤様)

Java One.

富士通・楽天から展示

40~50人の参加者(日本人)・10セッション(発表者は参加費無料)

Oracle Open Worldも併設

事前登録日＋4日セッション

9時6時

[セッション情報](https://developer.oracle.com/codeone)

### Oracleの方針

Javaをオープン化・有償機能の開放

イノベーションを起こす

エコシステムのサポート

### JDK11の各社コミット

2500件・500組織(RedHat、Google等)

内2000件のコミット(Oracle)

### Java in a World of Containers

JDKは大きいのでコンテナに入りづらい

Javaランタイムのカスタマイズ

JDK(530MB) -> とても重い

-> Jigsawを用いてカスタムのJDKを作成

Full(300MB) -> java.baseのみ(48MB)

OS分が250MB -> slim版でさらに最適化

#### Project Portola

+ HotSpotも更に削減

+ ##### minimal VM

  * 5MBの超軽量VM
  * Java SE 仕様に最低限準拠
  * 研究向け？

20MBのHelloWorld

### Monolith vs Microservice

#### Monolith

+ 1つのアプリケーション毎にデプロイ

#### Microservice

+ 複数の機能ごとに分割

+ 数珠繋ぎな依存関係により、エラー特定がし辛い

  * ##### Open Tracing

  * ログ出力・追跡が大変

#### JDK Flight Recoder

+ エラーログ等を完全に保存
+ JDK11から無償化

##  JDK 新しいリリースモデル解説 (伊藤様)

JDK 11 API ドキュメント日本語版公開

インストールドキュメント等も順次公開

### Oracle JDK の作り方(従来)

+ Open JDK (ソースコードのみ。GPL)
+ Oracle JDK (バイナリ。FX、インストーラ等を追加。BCL)
+ 年4回セキュリティアップデートをOracleからOpenに提供
+ セキュリティアップデートの同期が不完全
+ バージョン更新までは機能追加なし(まとめて追加される)

##### BCL

+ 社内のみ、非商用で複製可能

### これから

+ OracleもOpen JDKのバイナリを公開
  * GPL
  * OpenJDKをそのままビルドしたもの
  * 3月と9月にバージョンをリリース (機能追加のみ)
  * 1月、4月、7月、10月にセキュリティアップデート
  * LTSなし
  * セキュリティアップデートあり
+ Oracle JDKも提供
  * 3年に1回更新 (最低8年間のサポート) LTS
  * 6か月ごとの更新も行う
  * 長期間の固定バージョンへのニーズに応える
  * 有償
  * 商用の開発・運用？
  * 一部用途は無償 
    + OracleJDK 11 ライセンスに関する重要な変更
    + 社内または個人の開発・テスト・デモ用途
    + OTNLA for Oracle Java SE
+ ソースコードはOpen JDKから
+ 小刻みに機能追加がなされる

JDK 12 Early Access版公開

#### 削除される機能

リリースノートに記載 Removed API

最短1年(2version)で削除

### Non-Corporate

JDK 8のライセンス

個人利用に限り2020年までOracle JDKを利用可能

### Java SE Subscription

提供されるもの

+ サポート窓口
+ 商用ライセンスと長期サポート
+ 商用機能やツール
+ Javaが実行されうるすべてのハードウェアに対応
+ 価格体系
  * Java SE Desktop Subscription
    - デスクトップ向け
    - 台数×人数
    - 3600円/(年・人)
  * Java SE Subscription
    + サーバー向け
    + 台数×人数
    + 36000円/(年・人)

詳しくはSlide Shareで [スライド公開]() がされる

## Twitter 4J (山本様)

Duke's Choice Award 受賞

日本OSS奨励賞受賞

### Duke's Choice Award

Javaのテクノロジーに貢献した人に与えられる

日本では4回目

カンファレンスパス・トロフィー(木製)がもらえる

5~8月に募集

Webフォームを用いた応募 (無料)

### Twitter 4J

Twitter APIをラップするJavaのライブラリ

大手企業の利用実績

今年で11年目

月に10万件のDL

3度目の自薦

#### Practical Library Design

##### 例外処理について

情報量がおおい (利点・欠点)

原因の特定に時間がかかる

工夫

+ バージョン番号を入れる

+ ###### フィンガープリント (Twitter Exception)

  * クラス名・メソッド名と行番号それぞれから参照したハッシュを算出

## Spring Framework の今 (津波古様)

Spring One + Oracle Code One の報告

### Spring One

2019はTexas州で開催

### Spring Framework

Javaのフレームワークの集合体

2004～

1.x Web系のフレームワーク

4.x Spring Boot

4.3 2020年までサポート

5.x

+ JDK 8 以上
+ Kotlinサポート
+ リアクティング・プログラミング・モデル

5.1 Java 11対応

5.2

+ 来年公開
+ Java 12・Kotlin 1.3 対応
+ Graal VMとの完全互換

Spring WebFlux

+ リソース使用量の最適化

### JDK12

#### Amber

#### 325：Swiching Expressions

カンマ区切りのcase

+ breakなしでスルーする場合に読みやすくなる

ラムダ式風の記法

+ breakなしでコードが書ける

Switch文に戻り値が追加

+ defaultラベルなしだとコンパイルエラー

break文での戻り値が可能

+ ラムダ風記法との併用はNG

#### 326：Raw String Literals

今まではパスを書く場合に大量のリテラルが必要

バッククォートを用いたリテラルが追加

+ 改行やエスケープ文字を生で記述可能

## ブロックチェーン (大谷様)

### サーキュレーション

### ブロックチェーンの基礎

#### ブロックチェーン

+ 分散型コンピュータの仕組み
+ 管理者が不要
+ パブリックブロックチェーン (世界規模)
+ プライベートブロックチェーン
+ アドレスによりユーザーを識別

  * アカウントやアプリでアドレスを管理
+ 全ての取引がブロック単位で記録
+ 改竄不可
+ データとプロセスが透明化されている
+ 国際送金の手間が削減できる
  - マネロンの温床にもなっている
+ 自浄作用が働くのか？
  * 価格操作
  * ポルノの公開
  * 削除が不可能 (機密情報であっても消せない)
+ 価格の変動が激しい

#### コンセンサスにかかる時間

+ Bitcoinなら10分かかる
+ Eathereumで15秒
+ ペイメント層・Lighting NertWork などが提案されている

#### マイニング

+ チェーンにするための計算
+ 最初に解いた人に報酬が与えられる

#### Gasコスト

+ マイナーに支払われるコスト
+ 一回で数百円かかることもある

#### スマートコントラクト

+ ブロックチェーン上でプログラムを実行

#### トークン

+ 価値を定義する仕組み
  - 貨幣化 (仮想通貨など)
  - 証券化

#### セキュリティ

- 「鍵」でセキュリティを管理
- 管理コストが膨大

#### ハードフォーク

+ 仕様変更時に分裂が行われる
  * 入出金の停止
  * 会計での扱いが難しい (ユーザーが両方にトークンを持つため)

#### 国家×ブロックチェーン (エストニア)

+ エストコインを発行予定

#### 自治体×ブロックチェーン (加賀市)

+ ブロックチェーン都市宣言

### ブロックチェーンを用いた取り組み

#### Aragon

+ 仮想の会社が作れる
+ 組織の基本機能を代理

#### COLONY

+ ブロックチェーン上にチームを作成
+ タスクに対してメンバーをアサイン

#### Blocklancer

+ 案件の受発注
+ 発注元との問題を裁判する
+ レビューを公正に保つ

#### 

+ 労働契約の透明化
+ 労働契約の変更手続き
+ Solidityを利用

##### 開発で検討したポイント

###### dApps

+ ブロックチェーン技術を最大活用できる

###### Web apps

+ Web技術が利用できる
+ ブロックチェーン技術はわずか

###### ウォレット

+ ユーザー管理・料金徴収が楽
+ 利便性は悪い

###### 運営側アドレスの利用

+ 利便性が高い
+ 運営にGasコストがかかる

Ethereumの操作にはGOが便利！

エンジニアの学ぶことが多い

事業としての数値予測が難しい

外部のセキュリティ診断は受けづらい

## Oracle Code One Java SE Update (櫻庭様)

### Java Champion

日本に4人いる

Jetbrains IDEが無料？

### Moscone Center



OpenJDKをGitHubに移す？

### Java is still free

発表者はemacs使い (IDEを使わない)

\#WorksLikeHeavenOnJDK11

### JEP

##### Normal

+ 完成

##### Preview

+ 9割完成
+ JVM

##### Incubator

+ もう少し
+ API

##### Experimental

+ まだまだかかる

Preview・Incubatorは1、2バージョンでは正式版になる


##### Amber

##### Loom

##### Panama

##### Valhara



### Local Variable Type interface

+ ローカル変数の型推論
+ 右辺から推論
+ 実はjava 5から型推論はある
  * ジェネリクスやラムダ式で型推論があった
+ 互換性のある型は再代入が可能
+ List.of()にArrayListを代入することはできない
+ [Style Guidlines](https://openjdk.java.net/projects/amber/LVTIstyle.html)
  * 有用な情報を持つ変数名にする
  * 初期化子が読み手によって十分な情報がある
+ [Style FAQ](https://openjdk.java.net/projects/amber/LVTIFAQ.html)
+ ダイヤモンド演算子・引数なしofのコレクションは\<Object>になる

### Project Panama

ネイティブとJavaを繋ぐプロジェクト

#### Vector API

==java.util.Vectorではない==

複数のデータを纏めて演算する

+ 機械学習
+ 暗号
+ ハッシュ計算

##### Scalar Loop

```java
for(i = 0; i < a.length; i++){
    c[i] = a[i] + b[i];
}
//遅いのでまとめて計算したい

for(i = 0; i < a.length; i+=4){
    c[i] = a[i] + b[i];
    c[i+1] = a[i+1] + b[i+1];
    c[i+2] = a[i+2] + b[i+2];
    c[i+3] = a[i+3] + b[i+3];
}
//4倍速
```

Vector APIを使うと、コード量は増えるが、データを同時に演算できる

#### Foreign API

Native呼び出しのプロジェクト

Nativeなコードを使うメリット

+ 速度チューニング
+ ライブラリ呼び出し

##### JNI

+ JavaコードとNativeコードを記述する -> 面倒

##### Foreign API

+ JavaのコードからNativeのライブラリを直接呼び出す

+ でも普通はバインドクラスを挟む
+ JNIに比べて非常に簡単にネイティブなコードを呼び出せる

###### jextract

+ Cのヘッダーからバインドクラスを作成

### まとめ

Moving Java Forward Faster (Javaはとても速い速度で成長している)

## 今後の時代において価値のあるエンジニアとして成長していくために (寺田様)

Java Champion

Kubernetes？

### 人それぞれの幸せの形は違う

今後のアプリ開発

会社・開発者が2極化

デジタル革命

この30年で日本の位置づけが変わった (落ちた)

Netflixがディズニーに迫る勢い

### 設立年数が若い企業がより早く成長している

Microsoftも危機感

Microsoft ♡ Linux

会社が作ったものを届ける -> お客様の声を聞く

#### 企業運営のリスク

#### システム導入のリスク

エンジニアにとって、変化(IaaS, Containerなど)は大変 (LOW RISK)

でも、会社にとって、変わらないことはハイリスク

他社の成功例を真似ても意味がない！

自社にとっての最適な構成を考えるべき

#### 優秀な人材は宝

人材の獲得合戦が起きる

年収4000万～5000万からの引き抜き

#### 代行できないことをやるか、自分にしかできないことをやるか

#### 他人から言われたことをやるか、自分から率先してやるか

何歳になっても学び続ける姿勢が大切

35歳定年説など嘘

ITの進化は激しい

#### 今正しいことが将来も正しいわけではない

Javaチャンピオンだって昔は英語もプログラムも得意ではなかった

#### 英語の読み書きの差がエンジニアの差

新しいことでハマった時、英語が出来る方が直ぐに解決策が見つかる

トラブルシューティングだけじゃない！

#### いつでも変わることが出来る

#### Dreams Come True

今までは業務の改善がメインだったIT

これからは、身近な世界を変えていける

AI for Accessibility