KanJava 10th Anniversary Party 参加してきました #kanjava #mixleap #mixleapなう

f:id:orangeclover:20191130123542j:plain

Mix Leapについて

https://yahoo-osaka.connpass.com/
ヤフー大阪オフィスで、毎週勉強会を開催してるコミュニティ。
関西圏のクリエイター(エンジニア・デザイナー)の成長を目的にしたるのでジャンルは幅広そう。
https://yahoo-osaka.connpass.com/

毎週開催してるのはすごいな。






関ジャバ10周年について

阪田 浩一(じゅくちょー) @jyukutyo

まじめなcero_tさんからの返信コメントとkiy0takaさんの3人から始まった。
その二人は東京、名古屋へと関西を離れてしまったが、他のメンバーも加わり
Javaとそれに関係する勉強会を10年続けてきた。

何はともあれ、10周年おめでとうございます!!!






モデリングのきほん

いろふ @irof
f:id:orangeclover:20191202233703j:plain

資料





自分の理解を独自モデリングしてみた。
f:id:orangeclover:20191202231243p:plain

感想

タイトルとから、勝手にドメインモデルとかクラス図とかそういう話が出てくるのだと想像してた。 モデリングとはなんぞやというメタなモデリングだった。モデリングをそういうふうに考えたことがなくて これ聞けてよかった。こういうのを視座が高くなったというのだろうか。





JVMJITコンパイラにダイブする

阪田 浩一(じゅくちょー) @jyukutyo
f:id:orangeclover:20191202234523j:plain

資料

JITコンパイル

  • JVMでのJITコンパラの仕組み。地獄の13階層の1階層目ぐらいでみんな楽しめるよ!
  • 一番最初の処理はインタプリタで実行する
  • アプリケーション実行中は、プロファイルで、実行ルート、実行状態にあわせた効率の良い機械語を生成し、コードキャッシュする
  • JITコンパイル自体もリソースを消費するので、頻繁に使う(HotSpot)コードだけを機械語にする
  • コンパイル時間と速いコードのトレードオフになる
    • C1 コンパイル時間は短く、ほどほどの速度のものを生成する
    • C2 コンパイル時間は長いけど、速いものを生成する
  • Java SE 8からTierd Complicationがはいったので、今は「-server」、「-client」の指定は不要で、JVMがC1とC2の両方を自動的に使い分ける
  • プロファイリング自体にもオーバーヘッドがある。
  • IR:コードをデータ構造で表現できる
  • 最適化、脱最適化
    • 今までと違う条件、処理が走ると脱最適化でインタプリタに戻る
    • プロファイルによってより上のレベルで再コンパイルされる
    • level0からlevel4をいったり来たりすることも

オプション

  • JITの最適化レベルを見るには-、XX:PrintCompilaton
  • JITが生成するアセンブリコードを見るには、-XX:+PrintAssembly -XX:+UnlockDiagnosticVMOptions

ツール

みなさんがやること

  • javavpを実行したことがない人はjavap
  • HSDISをビルドして、JITWatchで見ること

Q&A

  • Q.JVMの気持ちになったコードを書くには?
  • A.JVMの最適化を意識したコードを書いてはいけない! バージョンアップで最適化の仕組みが変わったら使えなくなるから。

感想

明日から、潜れ!と言われて、ダイビングスクールに来てみたら、酸素ボンベという便利なものがあると教えられ、これなら生き残れるかも!?と救いがすこし見えた気分。
気分だけなので、実際には溺れるんだろうけれども。
もし13階層目をやるなら低レイヤーな集まりの カーネル/VM探検隊 だろうか。






Kubernetesを導入して1年間本番運用した話

kiy0taka @kiy0taka f:id:orangeclover:20191202233732j:plain

資料

docs.google.com

メモ

  • 送信元IPがLBになってしまう原因は?X-Fowarded-Forを付け忘れている?どこで?

    • tcpdumpでネットワークが調べられるとインフラエンジニアっぽい、インフラエンジニアとしても一人前になった
  • k8s完全に理解した

  • 山ごもり制度

    • 年1で9連休とらないとならない。休み中は社内人へ連絡もも社内からも連絡をとってはならない
    • 属人製をとりのぞくため
  • 山ごもり制度をとった瞬間、大規模障害

    • クラスタがいきなり落ちた
    • システムからのアラートなので、人からの連絡ではないのでギリセーフ
  • 新しいクラスタを作って全部移動

    • 原因不明
    • 避難訓練的なことをしてなかった。バックアップはしっかりとってあった。
  • 新たな障害:帰ってこないノード@朝の5時
    →なんやかんやで復旧

  • k8sやめる?

    • 実績あるIaaSなら起きなかったかも
    • k8sで構築したサービスを理解しているメンバーがいない
  • でも、やめない 『「便利」も大事。「面白い」も大事。でも、どちらかなら必ず「面白い」を選ぶ。』という会社だから

  • Google Cloud Shell(無料)が便利

    • スマホでも使える。MacBookを持ち運ばず、Pixel+携帯キーボードでいつでもどこでも障害対応できる

Q&A

  • Q.基盤のアップデートをどうしている?
  • A.月1回か2ヶ月に1回アップデートしてる

  • Q.属人化の解決は?

  • A.事業部から会社になったが、人は増えてない。 人を増やすしかないので採用がんばってます。

  • Q.負荷対策は?

  • A.真ん中のPod対応で、Kubernetesの標準のでAutoScaleの設定にしている。
    アップデートするときに、新たなコンテナが立ち上がってるときぐらい

  • Q.スケールしてもログは見れる?

  • A.ファイルサーバにログを書いている

感想

サウナの話から始まったから、サウナー向けのサービスをKubernetesで運用したのかと思ったけど違った。
まじめな業務の話だった。
詳細なところを抑えてるのが一人で、Pixel+携帯キーボードでいつでもどこでも障害対応は嫌だな。
tcpdumpでとったキャプチャは、Wireshark か、 もし、ターミナルしか使えないという制約があるなら、Termshark 使うと幸せになれると思う。 『「便利」も大事。「面白い」も大事。でも、どちらかなら必ず「面白い」を選ぶ。』っていいですね。







DIコンテナ入門(裏面)

うらがみ @backpaper0
本人の写真はNG

資料

https://backpaper0.github.io/ghosts/bytecode-enhance/#1

クラスファイルの構造

  • constant_pool 呼び出すクラス名、呼び出すメソッド名、文字列リテラルなどの配列
  • constant_poolの配列の添字でメソッドを呼び出す

javapでバイトコード

  • aload:局所変数から参照値を取り出してスタックに積む
  • aload_0:thisをスタックに積む
  • clacの例
    • iload_1:1つ目のintのローカル変数をスタックに積む
    • iload_2:2つ目のintのローカル変数をスタックに積む
    • iadd:スタックから取りだした1番目の値に2番目の値を加え、スタックに積む。
    • iretrun:スタックのint値を戻り値にする
    • こう言われると足し算してるのがわかりますよね

バイトコードをエンハンスする方法

-すでにあるバイトコードを改変するのではなくサブクラスを書き出す方式 - DIコンテナで採用が多い - Instrumentation APIを使用してバイトコードを改変する - JMockitで採用 - https://docs.oracle.com/javase/jp/8/docs/api/java/lang/instrument/Instrumentation.html - 動的にバイトコードを弄るので「黒魔術」

スコープとプロキシ

  • Seasar2では自身よりも狭いスコープのコンポーネントをインジェクションできなかった
  • SpringやCDIなどのモダンなDIコンテナはProxyによってスコープに関係なくインジェクションできる

Proxyをインスタンス化する場合、コンスタラクタには何を渡せば良いのだろうか?

  • 何も渡さない
    ずるい!!どんだけブレークポイント設定したと思ってるんだ!!
  • シリアライズではコンストラクタは呼ばれない。その仕組みを使用してる
  • Objenesis:やばい方法、脱法。

Q&A

感想

裏面(りめん)うらがみさんの真骨頂?、黒魔術の解説。
デシリアアライズしたときにコンストラクタ呼ばれないなんてどういう契機に知るんだろう。 Q&Aの回答で、「知識と観察と発想」とさらりと決める。カッコいい。





ドキッ!失敗だらけのシステム開発!!

こざけ https://twitter.com/s_kozake:title=@s_kozake
f:id:orangeclover:20191202233737j:plain

発表資料は、盛っている持っている可能性あり

どんなシステムを開発してるか

入力チェックの役割

  • データの整合性

    • ゴミを入れるとゴミが出てくる
  • ユーザビリティ

    • 操作ガイドを兼ねる
    • 適切なエラーメッセージで操作を導く

画面のレンダリングが遅い

締め

f:id:orangeclover:20191202233810p:plain

感想

失敗がテーマの発表で、最後の締めのスライドで失敗するというすごいオチ。
笑かしてもらった。 仕込みではなく天然らしい。愛されるキャラだわ。職場では知らんけど。






DAPRを動かしてみた話

せろ @cero_t f:id:orangeclover:20191202233741j:plain

資料

dapr

  • dapr:ダッパー
  • フレームワーク疲れ
  • サイドカーなのかビルディングブロックなのか
  • ステート管理
  • Pub/Subの非同期
  • 分散トレーシング
    • Zipkin
    • x-correlation-id
  • アプリとインフラが充分に分離されてたら統制とらなくていい
  • ジョークがクール
    • 他の登壇者「すべった?」cero_t「滑ってないよ」

感想

daprの機能は盛りだくさん。 サイドカー?ビルディングブロック?まずはそこからの状態なので、daprの売りが全然つかめていない。 スベリ芸は初めて見た。こういう雰囲気なのね。

全体の感想

第1回プログラミングGroovy勉強会(大阪) のまとめ第1回「Play framework勉強会」IN 関西で大阪の勉強会に参加したことはあるけど、関ジャバは初めて。
わざわざ静岡から行ったかいがあった。(嘘です。前日に神戸に用事があったので参加できた。)
一番遠くからの参加かなと思ったけど、どうやら違ったようだ。
@YujiSoftware よし、大阪に着いたどれ、関東の技術者の実力を大阪勢に思い知らせてやるわ〜ww #kanjava

関ジャバの人って、技術的な「面白さ」と笑いの「面白さ」と両方を詰め込んで発表している印象。
なので、非常に面白かったし、参加できてよかった。
終わったら、時間的に帰らないとならないのが残念だった。

togetter & 他の感想ブログ