2023/06/19

合同勉強会 in 大都会 2023 Summer

このエントリーをはてなブックマークに追加

イベント続きの最後は、大都会での合同勉強会です。

久しぶりのIn Personの合同勉強会です。Javaな人は少数派なので、もうちょっと一般的な話ということでプレゼンの話をしてきました。

 

時間が20分と短いので、ほんとに導入編という感じです。

ちゃんとプレゼンテーションの目的意識を持ちましょうということをはじめに話しました。

誰(ターゲット)に対して話すのかということと、その人にどうしてもらいたいのか(アクション)を明確にしましょうということです。

ターゲットが変われば使う言葉も変わります。アクションもそうです。社内で予算確保のためのプレゼンであれば、ターゲットは予算を持っている上司、アクションは予算承認になります。予算承認のためのプレゼンで技術のおもしろさを説いてもしかたないですよね。その技術を使えば、どのくらい工数が減るとか、品質が上がるとか、なんらかの会社に対するメリットを説明するはずです。

ということで、ターゲットとアクションをちゃんと意識しましょうということです。

後半は資料の組み立てという体裁で話しましたが、どちらかというとプレゼンのストーリーの組み立てについてです。

ちゃんとストーリーを考えましょうということで、いきなりパワーポイントで資料を作り始めるのではなく、下書きをしましょうということです。

個人的には、プレゼンは準備8割、本番2割ぐらいに感じています。

もちろん準備8割の中に資料作成も含まれているのですが、あくまでも資料は話の補助的な役割であると思っています。

でも、資料先行しちゃう人が多いんですよね。

ということで、今回のまとめはこちら。

とりあえず、好評だったようでよかったです!

2023/06/18

JJUG CCC 2023 Spring

このエントリーをはてなブックマークに追加

2019年からずっと登壇してなかったのですが、久しぶりにJJUG CCCで登壇することになりました。

 

今回のお題はVirtual Threadsです。

話の流れなどは、今年の1月に行われたブリ会議で話したことをベースにしています。ただ、ブリ会議が20分のセッションだったのが、CCCでは45分なので、コンテンツ的にはかなり変更してあります。

 

前半はVirtual Threads導入の背景、後半がVirtual Threadsの使い方になっています。

なぜ今になってVirtual Threadsが導入されたかというのは、歴史的経緯があるので、そこをちゃんと抑えましょうということです。

というのも、Virtual Threadsの目的はスループット向上なのですが、現状の技術でスループットは向上できるからです。たとえば、CompletableFutureやリアクティブ系のライブラリやフレームワークを使えばスループットは向上できます。

これらの技術を使いこなせればいいのですが、なかなか難しい点もあります。たとえば、

  • 関数を連ねて処理を記述するので、従来とは考え方を変えなければならない
  • 例外処理が難しい
  • デバッグが難しい

最初の考え方は慣れてもらうしかないのですが、最後のデバッグはなかなか難しい問題です。というのも、処理が複数のスレッドに分割して実行されるので、スタックトレースが切れてしまうからです。

スタックトレースはスレッドごとに存在するので、スレッドをまたがって処理を行えば当然スタックトレースは分割されてしまいます。それがデバッグを難しくしてしまいます。

そういう問題を解決するのがVirtual Threadsというわけです。

 

とはいっても、Virtual Threadsは今までのスレッドと使い方が同じなので、特にこうしましょうというのはないです。

サーバー系のシステムでリクエストに応じてスレッドをよしなに作ってくれるようなフレームワークを使っているのであれば、なおさらVirtual Threadsを意識する必要はないです。

というわけで、そういうフレームワークがVirtual Threadsに対応してくれるのを待ちましょうというのが結論ですw

フレームワークがVirtual Threadsに対応したら、何もしなくてもスループットが向上するかもしれません。

というようなことをセッションで話したら、今週になってTomcatがVirtual Threadsに対応したというじゃないですか。

Tomcatでさえ対応したのだから、他のフレームワークもVirtual Threadに対応するのは意外に早いかもしれません。

 

ただし、Virtual Threadsに限らず並行処理で注意する点というのもあります。

並行処理で重要になるのは、安全に処理できるかということと、スケールするかどうかということです。しかも、この両者はなかなか両立しません。

同期化やロックなどを使用して安全な処理を記述すると、その部分はスケールせずに並列処理のボトルネックになってしまいがちです。

特にVirtual Threadsを使い始めると、スレッド数が今までとは桁違いに多くなるため、スケールできるかというのは重要になります。

では、どうすればいいか。

設計を見直して、synchronizedを使った同期化をなるべく減らしていくしかありません。そのためには、イミュータブルなデータをベースに考えるようにすればいいと思います。特にJava 16で導入されたRecord型が役に立つはずです。

どうしてもsynchronziedが外せない処理があるのであれば、そこはロックAPIのReentrantLockに書き換えましょう。というのも、synchronizedを使用するとVirtual Threadsが動作するOSのスレッドをブロックしてしまうためです。

ReentrantLockであれば、ブロックするのはVirtual Threadsだけになります。

というようなことを45分で喋ってきました。あまりにも、ギリギリまで喋ってしまったので、質疑応答の時間が取れなくなってしまいました。ごめんなさい。

 

当日は気持ちの余裕がなくて、あまり他のセッションは聞けなかったのですが、ちょっとした感想を書いておきます。

 

Apache Commons Math を使って、機械学習をやってみた

浅野さんの機械学習のセッション。といっても、扱っているの古典的なクラスタリングのk-means。

k-meansぐらいならライブラリ使わなくても、自力で書けるぐらいですね。というか、書いたことがありましたww

やっぱりPythonと比べると記述量が多くなってしまうのはしかたないですね。でも、OpenCVSとか使えば、もうちょっと減らせると思います。

 

浅野さんが列挙してくれた機械学習系のライブラリの1つにWekaがあるのですが、これは使ったことがありました。

でも、Wekaはソースがひどいんですよねぇ...

アルゴリズムをそのままコードに落とした感じで、読みやすさとかそういうのはまったく考慮してない感じ。まぁ、大学で作ってるし、しかたないんですけどね。

 

AI を利用した Java 開発の最新情報

てらださんのOpenAI系のお話なんだけど、なんだかなぁ...

てらださん、もうちょっとプレゼンのしかた考えようよ...

 

Java Bytecode Crash Course

もともとChristoph Engelbertさんのセッションだったのですが彼が体調不良ということで、急遽David Buckさんのセッションに差し替え。

バイトコードの読み方入門的な内容でした。内容的にはほとんど知っていることでしたが、やっぱりこういうのはおもしろいよね。人を選ぶとは思いますがw

 

今回のJJUG CCCは現地開催でストリーミングありでしたが、なかなか大変そうでした。コストもかかるしね。

今回ストリーミングで見ていただいた方も、次回はぜひ現地でお会いしましょう!

2023/06/17

JOnsen 2023

このエントリーをはてなブックマークに追加

コロナのおかげで開催できなかったJOnsenですが、4年ぶりに6月1日から2泊3日の日程で開催されることになりました。なお、今回からJJUGが主催のイベントになっています。

JOnsenは温泉に入りながらJavaについて語り合うアンカンファレンスで、今回で4回目の開催です。

第1回から参加しているさくらばは、当然今回も参加することにしました。

 

今回の開催場所はリゾナーレ八ヶ岳。参加人数は13人で、ちょっと少ないです。まぁ、コロナがあって、こういうイベントに参加するのを躊躇してしまう人も多いと思うので、しかたないですね。

 

初日

初日のスタートは14時から。他の参加者はみなお昼ぐらいに到着して、ランチを食べてから参加という感じですが、私だけちょっと早く現地入りしました。というのも、リゾナーレ内にあるマルサマルシェというフルーツパーラーでパフェ作り体験ができるからなのでした。

事前に予約しておいて、Bigパフェを作ってきました。

平日ということもあって、リゾナーレは未就学児を連れた家族連ればかり。パフェ体験も子供たちと一緒に作っている人たちばかりで、おじさんが1人で作っているなんて私だけですよw

下の写真のようにフルーツとパフェグラス渡されます。後は、冷蔵庫にあるホイップクリームとコンフィチュール、またコーンフレークやスプリンクルなどは使い放題です。

_DSC8361

事前にいろいろ考えてきたのですが、実際にパフェを作るのなんてはじめてなので、悪戦苦闘。ホイップクリームだけでなく、せめてジュレがほしかった...

ということで、パフェできました!

_DSC8402

 

さて、JOnsenの本編です。

会場はリゾナーレのイスキアという普段は宴会などに使われる場所です。

だいたいの日程は初日の午後と、2日目の午前、最終の午前にアンカンファレンス。2日目の午後はアクティビティを行うというものです。

ただ、2日目は台風の接近に伴う大雨の予定。雨でなければ乗馬などのアクティビティもあったのですが、急遽インドアのアクティビティになることになりました。

で、パフェ作りの人気が高いww さすがに2日連続でパフェというのも変なので、私はトンボ玉作成にしました。

_DSC8541 _DSC8546

 

アクティビティを決めた後に、まずは全員の自己紹介タイム。そして、アンカンファレンスで議論するトピック出しと続きます。最低でも1人1トピック。

トピックを付箋に書き出したら、各々トピックの説明を行います。もちろん、全部英語です。

_DSC8582 _DSC8584

付箋はホワイトボードに貼りだして、似ているトピックをグルーピング。その後、どのトピックを議論するかの投票です。

_DSC8639

実際に提案されたトピックがこちら。丸いシールが投票された票です。

_DSC8666

人気があったトピックからディスカッションしていきます。

今回は、人数も少ないので2グループに分けて、だいたい一方が技術的なトピックで、もう一方がコミュニティや働き方などの非技術的なトピックになっていました。

さくらばは結局、全部技術的なトピックの方に参加してました。

 

ディスカッションは写真のように丸テーブルで。そんなに固い感じではなく、緩い感じで。それにしても、久しぶりの英語だったので、ぜんぜん英語が出てこない。やっぱり日ごろから練習していないとダメですね。

_DSC8670 _DSC8686

 

そういえば、Steve Chinさんが車で参加予定だったのですが、いろいろと遅れて、1日目のディカッションの最後にやっとあらわれました。とりあえず、無事についてよかったです。

 

1日目のディナーはリゾナーレ内のイタリアン。なかなか本格的なイタリアンでした。

_DSC8714 _DSC8791 _DSC8819 _DSC8834

 

ディナー後にまたどこかで集まって飲んだりするのかなぁと思ったら、何もなく。みんな疲れたのか、そのまま就寝してしまいました。

でも、さくらばはJJUG CCC用の資料が終わってなかったので、泣く泣く資料作成。CCCの前のJOnsenはつらい...

 

2日目

朝からあいにくの雨。

朝ごはんはリゾナーレ内のYY Grillのビュッフェ。平日ということもあって、未就学児を連れたファミリーが多いです。

朝からしっかり食べましたよ。しかも、ここには自由に使えるソフトクリーマーがあるので、朝からソフトクリーム。

でも、ソフトクリームが固すぎて、うまく巻けませんでした...

_DSC8929 _DSC8935 _DSC8958

朝ごはんは同室のDavid Buckさんと行ったのですが、彼は実際にJavaを作っている人。しかも、HotSpotを作っているのです!

ちょうどJJUG CCCでVirtual Threadについてプレゼンするので、自分がVirtual Threadに関して考えていたことを聞いてもらい、間違いがないか確かめてもらいました。

この朝のセッションが、JOnsenで一番役に立ったかもしれませんw

 

さて、2日目の午前中はアクティビティの時間。

というわけで、トンボ玉を作る場所へ向かってみると... なんと今日はトンボ玉を作る先生がお休み!

他にも作る系のアクティビティは先生が休みのところ多くて、行き場を失った私たちは結局パフェの人たちを冷やかしにいくことに。

と思ったら、急にキャンセルが出たらしくテーブルが空いていたので、急遽クレープ作り体験ができることになりました!

とはいっても、クレープはすでに焼いてあって、それを飾り付けする感じです。

それにしても、普段はお客の大半がファミリーの店で、大人がほぼ占拠しているというのはなかなかレアな感じですね。ちなみに、私は店員さんにしっかり覚えられていましたw

_DSC8962 _DSC8970 _DSC8993 _DSC9003 _DSC9005 _DSC9012

それぞれ、パフェとクレープを作ってから、三々五々とランチへ。

私は、やはりリゾナーレ内にあるジビエの店で鹿肉バーガー。竹炭入りの黒いバンズというのはなかなかインパクトありますね。

_DSC9035 _DSC9045

 

さて、午後のアンカンファレンスも昨日と同じように2グループに分かれて行います。だいたい1つのトピックで40~50分ぐらい。

今日はProject CRaCや、関数型についてなどのディスカッションに参加。

Project CRaCは全然知らなかったのですが、起動時間を短縮させるためのプロジェクトなんですね。Graalのネイティブイメージとの比較などが議論の中心でした。

_DSC9117 _DSC9119 _DSC9129 _DSC9138

 

2日目のディナーはリゾナーレのすぐそばにあるジビエの八ヶ岳小僧という店。

店主が自ら狩りを行って、季節、季節のジビエを食べさせてくれるのだそうです。

で、私は鹿、猪、熊の盛り合わせと、鹿ユッケ。ご飯はたけのこご飯です。

鹿や猪は食べたことありますけど、熊ははじめて。脂がうまいww

_DSC9164 _DSC9188 _DSC9180 _DSC9208

 

最終日

最終日、朝ごはんを食べに行った時はまだパラパラと雨が降ってましたが、食べ終わったことろには晴れてきました。

そして、この日もソフトクリーム。昨日よりはうまく巻けたとは思いますが、やっぱり硬くてやりにくい...

_DSC9253

 

最終日のディスカッションは1トピックだけで、その後はラップアップ。

最後のディスカッションはVirtual Threadに関してですが、自分的には昨日の朝のDavidさんとの議論で話したいことを話してしまったのでしたw

Virtual Threadの技術的なこともそうですが、BrianのJava並行処理プログラミングの本が絶版で困るようねぇとか。本が売れないから再販もないだろうねぇとか。

_DSC9282 _DSC9278 _DSC9266 _DSC9275

そして、最後のラップアップで、ディスカッションのまとめを各々が発表する感じです。

_DSC9293 _DSC9306 _DSC9308 _DSC9326

 

JOnsenは全部英語なのでなかなかつらいのですが、それでも日本人ばかりなのでスピードはゆっくり。

ネイティブの人たちばかりだとスピードも速いし、話している間もかぶせてくるので、なかなか議論に参加するだけでもたいへん。その点、JOnsenはゆったりしているし、ちゃんと意見を言い終わるまで待ってくれるし、英語でのディスカッションに慣れていない身としては、とてもありがたいです。

今年はいつものメンバーになってしまったのはしかたないですけど、来年はぜひ他の人も参加してほしいなぁ。

というわけで、最後に記念写真を撮っておしまい。

_DSC9333