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

やったことメモなどなど

「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 の目的としてパフォーマンス改善が挙げられるが、 それだけではなく、使いやすくなることも目的がある。