怒Mは思いつきでモノを言う

やったことメモなどなど

JJUGナイトセミナー「Javaの言語仕様策定とリリースモデルを学ぼう」に行ってきた。

リリースモデルが変わったという話しはチラホラ耳にしていましたが、
ちゃんと知らなかったので、参加しました。
本日は3本立て。

「新しいJDKリリースモデル解説」by 伊藤 敬さん

www.slideshare.net

セミナーは今回用の更新版スライドだったと思います。
公開され次第、貼り直します。*1

OpenJDKとOracle JDKの関係を正しく理解していなかったので、 今回の説明で理解することができたのは良かったです。

リリースモデル変更による、 OpenJDKとOracle JDKのバイナリの状態やサポート内容について対比して説明されていたので、 非常にわかりやすかったです。

Oracle JDKは原則有償サポートですが、 「開発・テスト・試作・デモの利用目的であれば無償で利用可能になる予定」とのことでした。
※「予定」なので、変更の可能性がある点はご注意ください。

Oracle JDKのLTSに対応するバージョンの他に、OpenJDKと同様に各バージョンが有償でリリースされるようです。 てっきり、3年毎のバージョンアップだけかと思っていました。

Oracle Java SE Subscriptionについても話題がありました。
購入は年単位で購入する必要があり、購入するとライセンス、サポート、商用機能の利用が可能になるようです。 対象はデスクトップとサーバで、それぞれ料金体系が公開されています。 2018年7月17日現在はドルの料金表だけですが、近日中に円の料金表が公開されるとのことです。

Java SE Subscription FAQ

質疑応答の内容です。間違っていたら指摘ください。

Q1. 有償サポートを打ち切った後のOracle JDKバイナリの使用権はどうなるのか?
A1. 確認します。
(2018/7/20追記)
FAQに記載がありました。 オラクル Java SE Subscription FAQ

サブスクリプションを更新しない場合はどうなりますか?
Java SE Subscription が終了した時点で、 Java SE Subscription が有効だった期間にダウンロードしたすべての商用ソフトウェアの権利とオラクル Premiere サポートへのアクセスが終了します。もし Java SE Subscription を継続する意思がない場合、 Java SE Subscription が終了する前に、使用中の Java SE アプリケーションをオラクルの OpenJDK バイナリ (GPLライセンス)に移行することをお勧めします。これによって中断することなく、引き続きアプリケーションを実行することができます。

Q2. Deprecatedになった機能はLTSのバージョンであればアップデートリリースはされるのか?
A2. わからない。多分だが、そのような状況にならないように考慮すると思います。

Q3. JREはどうなる?
A3. JREは無くなります。JDKに内容されているJREを使うことになる。なので、今後はJDKをインストールしてもらう。

「これからのJCPについてー活動内容のアップデート」 by Naoko Hamamoto さん

JCP = Java Community Process
「JSR = Java Specification Requests」
JCPとはJSRを通じてJava技術規格を開発、改定するためのオープンなプロセスです。
JSRは誰でも提案は可能ですが、Excecutive Community(EC)の投票による承認が必要です。
JCPの運営プロセスもJSRで決まり、現在改訂版を提案しているところ。(JSR387)

JCPへの参加は簡単に個人でもできるので、ぜひ参加してほしいとのこと。

Java新機能観察日記 by きしだなおきさん

www.slideshare.net

Java開発プロセスの実態の印象として、JCPはカヤの外の印象があるらしい。
理由としては、OpenJDKはコードをガンガン書いて仕様を固めていく感じになっていて、 仕様を決めてからコードという現在のJCPのプロセスに合っていない感じがある。
JCPのプロセス改定には「Code first」が盛り込まれているので、今後はもっとJCPが絡むようになるかもしれません。
この辺、浜本さんがどう考えているのか聞いてみたかったです。友人の誕生会に行くのに懇親会は欠席したので。。

最新の動向や決定までの裏事情なんかは、メーリスなどを見ることでわかるので楽しそう。

最後に

会社内でリリースモデルについての説明とかやってみようかなー。
後、Type-CからVGAに変換するアダプタは需要があって、普段使わなくても持っているといざという時にモテる。

*1:公開されたためスライドを差し替えました。2018/7/20

Fn Projectについて調べて見た。①

Fn ProjectのTutorialを通して知った内容をメモります。
不明点はソース見ながら調べるので、ゆっくりやる予定です。

Fn Project について

Fn ProjectオープンソースのFaaSプラットフォームです。

Fn Projectの特徴については@hhiroshell氏が本家を和訳してくれていますので、そちらを参照していただくのがいいと思います。

Fn Projectは4つのコンポーネントで構成されています。

  • Fn Server
  • Fn Load Balancer
  • Fn FDK's
  • Fn Flow

今回は、Fn ServerとFn FDK(Java)を使ってTutorialをやってみます。

Tutorials

準備インストール

Docker

Before you Begin Before we can install Fn you’ll need:

  1. A computer running Linux or MacOS. If you have a Windows machine the easiest thing to do is install VirtualBox and run a free Linux virtual machine.
  2. Docker 17.10 (or higher) needs to be installed and running.

私の実行環境はMac上で動かすので、Dockerをインストールします。

Docker Store

Fn CLI

Homebrewがインストールされれば、以下のコマンドでインストールされます。

$ brew install fn

Linuxでは以下のコマンドでインストールできます。(Macでも大丈夫)

$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh

インストールできたか試してみましょう。
以下のように出たらOKです。
初回はローカルにfnserverのDockerイメージがない場合は、Docker Hubから取得します。

$ fn start

Unable to find image 'fnproject/fnserver:latest' locally
latest: Pulling from fnproject/fnserver

(中略)
        ______
       / ____/___
      / /_  / __ \
     / __/ / / / /
    /_/   /_/ /_/
        v0.3.495

time="2018-06-30T11:42:17Z" level=info msg="Fn serving on `:8080`" type=full

Dockerがインストールされていない or デーモンが動いていない場合は以下のエラーが出て失敗します。

$ fn start
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
2018/06/30 19:54:58 Error: processed finished with error exit status 125

fn start 実行時には Dockerイメージ fnproject/fnserver を使って fnserver というコンテナを生成・起動します。

「Java Day Tokyo 2018」に行ってきた。③

2018年5月17日(木)に開催されたJava Day Tokyo 2018に行ってきました。 基調講演は途中から参加で、用事があった夕方頃までセッションを聞きました。 で、気になった点をメモ書き。ラスト。書くの遅くなりました。

[TEC-4] Java in Serverless Land

Serverlessとはサーバを管理しなくてよく、サーバを意識せずにアプリケーションが作れる という特徴を持つアーキテクチャです。 Function as a Service(Fass)はServerlessアーキテクチャの1つです。
FaaSは短命(Short-lived)で、状態を持たず(Stateless)、イベント駆動型(Event Driven)というのが特徴です。

Serverlessで使用されているプログラミング言語の内訳は以下のような状態です。

lang %
1 Python 35%
2 JS 35%
3 Java 10%

ServerlessにおいてJavaが何故利用されていないのでしょうか。

  • ServerlessでJavaを使用することはできますか?⇨Yes!
  • FaaSはWebのスクリプト言語以上の物ですか?⇨Yes!
  • FaaSにJava開発の習慣を使用できますか?⇨Yes!
  • JVMが短命のアプリケーションを効果的に実行できますか?⇨Yes!

今日の成長したJava開発はどのように見えているでしょうか。

  1. 普通のJavaを使用したプログラム
  2. オープンソースの強力な受け入れ
  3. 利用可能なツール/ライブラリの豊富さ
  4. 複雑なアプリケーション
  5. JVMを効果的に使用する

Fn ProjectはオープンソースのFaaSプラットフォームです。 これはJavaで簡単に導入・使用することができます。

Fn Flowは以下の特徴があります。

  • 信頼性の高いスケーラブルなアプリケーションを構築できる
  • 豊富な並列処理オプションをサポート
  • 関数でワークフローを定義できる
  • 関数は純粋にコードとして書かれる

Fn FlowはJDK8のCompletionStage APIに着想を得ています。
CompletionStageは、非同期アクションのワークフローはメモリに構築され、ForkJoinPoolを使用して非同期にて完了します。
Fn Flowは非同期のワークフローはFlow Serverで構築され、FaaSを使用して非同期に完了します。

これまで、CompletionStage APIで行なっていたことを、Fn Flowで出来ます。

Fn Functionは単なるコンテナです。 私たちは、早く起動し、コンテナイメージを小さく、環境を汚さないことを望んでいます。

早く起動するためにメモリをJVMとシェアします。 また、起動アクティビティをキャッシュして、起動時間を短縮します。(CDS、AppCDS、AOT)

コンテナイメージを小さくするために、Alpineを使ったり、jlinkで不要なJDKモジュールを排除したり工夫をします。

最後に

Fn Projectが面白そうなので、とりあえず動かしてみよう。

JJUG CCC 2018 Spring に参加してきた。

2018年5月26日にJJUG CCC 2018 Springが行われました。
今回で2回目の参加です。そして今回もボランティアとして参加しました。
今回セッション内容については、書いていません。日記です。

前日

前回、入口・出口を手書きで準備したので、事前に用意しようと思ってslackに投げたのですが、さすがの幹事会の方々準備済みでしたw
常に改善をしていく姿勢はJJUGの良いところだなと感じました。

お客さんとの約束で麻雀を0時まで打って、 帰りに電車の人身事故により帰宅が2時過ぎになってしまいました。(自業自得)

当日

f:id:do_m_gatoru:20180529235735j:plain f:id:do_m_gatoru:20180529235819j:plain f:id:do_m_gatoru:20180530001155j:plain

コンディション最悪の中の参加でした。 朝一、赤坂見附で乗り換えのつもりが、青山一丁目まで行ってしまって集合時間に 5分遅れたのがこの日の最大のハイライトだったでしょうか・・・

今回は色々セッションを聞こうと思っていましたが、何故だろう働くことが楽しくなっちゃって落ち着いて聞いていられないという。 ある意味ボランティア参加向いていないまであります。
スピーカーの方々が公開してくださっているスライドを漁って見ているところです。

github.com

部屋付き担当だとセッション聞けるんですけど、部屋でじっとして聞いていて尚且つ、 退場時の準備とかやれる自信がないのです。 なので比較的自由に動く遊軍が好きでしょうがないのです。

ボランティア感想

2回目のボランティアなので、全体の動き方や仕事の把握はスムーズでした。 椅子を大きく移動させることもなかったので、会場自体も大きな混乱がなかったと思います。 一時、待機列が長くなった際に「最後尾列を分かるようにしてほしい」と参加者の方から言われたので、 終盤にはなりますが気をつけて見ました。
コミケみたいな最後尾列カードを次回導入すると良さそうでね。

セッション終わりの誘導で端っこで1人ずつ遊軍がいると、もっとスムーズになるのかと思います。 あと遊軍が少し楽になりますw
今回はボランティアの方が少し秋に比べて少なかったのでしょうがないのですが、人数に余裕があれば 遊軍2人がベストの配置だと思いました。

懇親会

f:id:do_m_gatoru:20180530002742j:plain f:id:do_m_gatoru:20180530002755j:plain f:id:do_m_gatoru:20180530002811j:plain f:id:do_m_gatoru:20180530002825j:plain

これが噂のLINEさんの寿司か・・・凄かったです。
興奮が冷めない私。そして、穴子推し。

LT大会も楽しかったです。
前回と違うのは少しは知らない人とも会話するようになったことでしょうか。
進歩でしょう。
ボッチ仲間いたー(失礼)という気持ちになった。

takeda-san.hatenablog.com

懇親会2

すでにクタクタ過ぎていつも以上に静かでしたw
英語力の話になりましたが、無いよりは有った方が楽しいことは多いだろうなと思いました。
けど、「じゃあどうしたら・・・」となってしまい・・・。
じゅくちょーさんが3年前まで英語ができなかった中で、 どうやって勉強していたのかを聞いてみたく質問しました。 教えていただき、ありがとうございます。

以下のブログでも書いていますが、JavaOneなどの海外セッションの内容を通勤中などに聞いたり、
英会話ラジオを聞いたりしていたとのことで、参考にしたいと思います。

www.sakatakoichi.com

後は圧倒的に単語力とか文法力が中学生以下レベルなので、そこをどう補おうかと考え中です。 とりあえず、TOEICの優しい単語集みたいなのを買ってみました。 寝る前に2ページ読むことにしています。

懇親会2の印象に残っているのは、宮川拓さんによる「秋は何喋るんですか?」というプレッシャーw
CfP書いて登壇しよう!と。うーん。ネタも技術も勇気も無いです・・・

最後に

今回も非常に楽しかったです。次もボランティア参加かどうかは悩み中ですが、きっとボランティアかなw
そういえば今回、知り合いと1名会えたのが結構嬉しかったです。

「Java Day Tokyo 2018」に行ってきた。②

2018年5月17日(木)に開催されたJava Day Tokyo 2018に行ってきました。 基調講演は途中から参加で、用事があった夕方頃までセッションを聞きました。

で、気になった点をメモ書き。パート2。

[JSE-2] Project Valhalla

以下の2点の話し。

Project Valhallaには「VarHandles」があるけど、今回は対象外。
JJUG CCC 2018 Spring で話す予定。

プロジェクト名の由来

「Valhalla == Value Types」が似ているから、だそうですw

オブジェクトとプリミティブ

オブジェクト
  • ヒープで格納される
  • ヘッダがある
  • ポインタ参照
  • ミュータブル
  • Monitor がある
プリミティブ
  • どこでも格納できる
  • ヘッダがない
  • 値を直接渡す
  • イミュータブル
  • Monitor がない

オブジェクトの配列の場合、 配列の要素の中にヘッダを含めたオブジェクトが格納される。
オブジェクト ⇨ 参照の利用 ⇨キャッシュ・参照のミス ⇨ パフォーマンスの問題。
これは非効率。

そこで、Value Types。

Value Types

Value Typeの特徴として、 プリミティブと違ってクラスのような構成を持ち、 プリミティブのパフォーマンスを出す。

また、「だいたいintのような動きをするだろう」みたいな、 大雑把なルールで動く。
オブジェクトとプリミティブの要素を持つ感じ。

ジェネリクスの特殊化 (Generic Specialization)

Value Typesがオブジェクトの要素を持つとなると、ジェネリクスはどうなるのか?
構想としてはValue Typesをジェネリクスでも使えるようにしたい

ArrayList<int>みたいなことをやりたい!

Java 8からStream APIが実装されたけど・・・

  • java.util.stream.IntStream
  • java.util.stream.FloatStream
  • etc・・・

作る方もツライ!
Customer<T>ToIntFunction<T>は作りにくいよう。

ジェネリクスの問題として、プリミティブの親クラスって何?
これはまだ解決していない。

最後に

Project Valhalla の目的としてパフォーマンス改善が挙げられるが、 それだけではなく、使いやすくなることも目的がある。

「Java Day Tokyo 2018」に行ってきた。①

2018年5月17日(木)に開催されたJava Day Tokyo 2018に行ってきました。 基調講演は途中から参加で、用事があった夕方頃までセッションを聞きました。

で、気になった点をメモ書き。

[JSE-1] Java in a World of Containers

コンテナサイズを小さくしたい話

Docker ImageにJDK9の全てをインストールすると600MBくらいになっちゃうから 小さくしたい!という場合に、いくつか選択肢があるよーという話し。

Install JDK サイズ
Full JDK 568MB
java.base 46MB
netty 60MB

最小のJDKモジュールとして、java.baseというのがあるとのこと。
JDK9から導入されていて、java.io、java.lang、java.utilとか基本的なパッケージが含まれています。

java.base (Java SE 9 & JDK 9 )

Nettyは、非同期のイベントドリブンWebアプリケーション用Frameworkです。
知らなかったのですが、軽量なんですねー。

Netty: Home

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

jlinkを使って必要なモジュールだけに絞るやり方があるようです。

docs.oracle.com

一連のモジュールとその依存関係をカスタムランタイムイメージにしてくれる!ようです。
必要な分のモジュールだけにするから軽くなるってことなんですね。
モジュールの依存関係についてはjdepsを使うと分かるとのこと。

docs.oracle.com

そもそもモジュールを理解していないので、そこから学ばねばならないです。

LinuxのDocker Imageは「Alpine Linux」がおすすめ。なんと4MB。

これらの情報をもとにすることで、小さいDocker Imageが作れます。

スタートアップ時間とかJVM間のデータ共有の話

ここはキーワードだけ。

Class Data Sharing(CDS) docs.oracle.com

Ahead of time(AOT)
まだ実験中?

コンテナリソースの制限の話

ここもメモメモ。 CPUとMemoryのリソースを適切に行いましょう。 CPUについては、PCのCPUは把握していたけど、 使っていいCPU数がわからなかったけど、ちゃんと割り当てできるようになった。

[JSE-6] Java Mission Control 6.0 と新しい Java Flight Recorder

JDK9からJMCのバージョンが6.0になりました。 前回のJava Day Tokyo 2017はリリース前で概要の話とか、 JMC5.5の使い方がハンズオンであったと記憶しています。

Java Mission Control(JMC)、Java Flight Recorder(JFR)については、 以下のサイトを参照してください。

docs.oracle.com

Eclipseのpluginでインストールして使用することができます。

f:id:do_m_gatoru:20180520231450p:plain

jmcコマンドでJMCそのものを起動することもできます。(こっちが普通?)
JFRは現時点では本番環境で利用する場合は、商用ライセンスが必要です。
個人利用や検証目的の利用の場合は無償で利用できます。

JDK11からはOpen JDKでも利用でき、無償で利用できるようになります。
JDK11は2018年9月リリース予定です。

Java Mission Control 6.0 リリース・ノート

気になるところをピックアップします。

フライト記録の自動分析

Java Mission Controlにフライト記録の自動分析機能が追加されました。搭載されたルールとヒューリスティックによりアプリケーション内> で問題が起こっている場所やパフォーマンスの問題の発見を手助けしたり、チューニングのヒントをくれたりします。

Automated Analysis Results f:id:do_m_gatoru:20180520231337p:plain

新しいナビゲーション

ページ間のナビゲーションは側面・ビューという新しいJFRエディタの中に移動しました。自動分析結果は各ページに関連付けられており、それぞれのページに関係する結果が見つかった場合、ページアイコンのオーバーレイに表示されます。

f:id:do_m_gatoru:20180520232131p:plain

f:id:do_m_gatoru:20180520232214p:plain

f:id:do_m_gatoru:20180520232231p:plain

問題がありそうな場合や、そうではない場合で、アイコンが変わります。 アイコンをClickすると自動分析の内容が表示されます。

仕事とかで使ったことないんですけどね!

終わりに

他にも、以下の2つを聞いてましたが、メモ書きはまた今度。

  • [JSE-2] Project Valhalla
  • [TEC-4] Java in Serverless Land

これから、どんどんJavaの機能が追加されて、できることが増えていくんでしょうね。
最近特に思うのは、英語力が欲しいという点。 高校の実力テストで27点とった時に「お前、ふざけてんの?」と英語教師に言われたのがトラウマで英語の勉強に身が入らなくなった病気にかかってしまい。 けど、Globalのコミュニティに参加するのも楽しそうだなーと感じる今日この頃。