はじめに
JJUG CCC 2024 Springで登壇しました。こういうカンファレンスで登壇したのは初めてです。
せっかくなのであれこれ記録しておこうかなと思います。一応、これから登壇したいという人の役に立つことを目指しており、何かの参考になれば幸いです。
なお、セッションの資料はこちらです。
書いている人について
社内LTみたいなことは一応やったことがあるので、人前で話すこと自体は多少できます。ただ、カンファレンスで登壇したことがなかったので、そもそもどういう準備をすればいいのかもよくわからず、という感じでした。
経緯
JJUG CCCに初めて参加したのは2016年くらいで、それから何度も聴講者として参加してきました。参加を重ねるにつれて、自分も登壇してみたいという気持ちが少しずつ強くなっていきました。しかし、ハードルが高い。精神的なハードルもありますが、何よりネタが思いつきません。精神的なハードルは根性でなんとかできるかもしれないけど、ネタがないのであればどうしようもない。まあ、そのうちネタを思いついたら応募してみるか、と先送りにしていました。
そして今年の2月頃、JJUG CCC 2024 SpringのCfPが募集されているのを見ました。そして唐突にひらめきました。ここ数年は競技プログラミング(競プロ)に取り組んでいたのですが、これをネタに登壇できるのではないかと。直接Javaに関係あるわけではないものの、プログラミングの話なので全くの無関係ってわけでもありません。また、自分がKotlinで参加しているのでそういう面でもJavaと絡めることができそうで。思い立ったら止まらず、若干の葛藤はあったものの、そのままCfPを提出しました。
応募にあたり
とはいえ、仮に登壇できるとしたら迷惑がかからないようにあれこれ考慮が必要です。たとえば、JJUG CCCではスピーカーガイドラインがありますので、応募するなら目を通す必要があります。
内容は「宣伝の禁止」と「行動規範の遵守」です。後者はスピーカーではない参加者でも同意する必要がある内容なので、「スピーカーとして」という意味だと特に意識すべきは前者のほうです。要するにスポンサーではない会社の宣伝は禁止です。ただ、自己紹介で所属会社の名前を言うくらいはOKとのこと
また、応募要項もあります。
こちらに、セッションはJavaコミュニティ向けのものとする、という主旨のことが書かれていました。そういう意味だと競プロの話についてJavaコミュニティの関心が強いかどうかは確信が持てなかったのですが、まあダメなら落とされるでしょという感じでやはり出してみることに。
タイトルは「JVM言語でもできる、競技プログラミング」としました。Javaコミュニティ向けなのを意識しましたが、自分がJavaではなくKotlinを使っていることから、「JVM言語」という表現にしました。
セッションは45分枠と20分枠とがあります。内容的に、ライトな感じのほうがいいだろうと思って20分枠にしました。
セッションレベルは「Beginner(初級者向け)」にしました。競プロを知っている人向けに競プロにおけるKotlinのマニアックな話をする路線も考えられるのですが、そもそも競プロについてよく知らない人のほうが多いのではないかと思い、初心者向けに競プロとはどのようなものかを中心に話す路線としました。
応募時の入力事項
Sessionizeというサービスで応募情報を入力しますが、一部何を入力したらいいかわからない点があったので以下を参考にして入力しました。
またSpeaker photoですが、自分の顔写真を載せるのがなんか嫌だったので適当なアイコンを載せてみました。特に何も言われなかったのでとりあえずそれでよいのかと思います。
採択後の準備
採択されるかどうかは半々くらいかなと思っていましたが、結果的には採択されました。応募から約1ヶ月後の3月のことでした。さあここからが大変です。本番まで3ヶ月ほど。この間に準備を進める必要があります。
直前になって慌てるとろくなことがないのは明らかだったので、先延ばしにはせずにちょっとずつ準備を進めていきました。
その後、JJUG CCC 2024 Springの参加者募集がDoorkeeperで開始されていました。登壇者でも登録が必要かわからなかったですが、一応そちらでも参加登録しました。結果的には、必要だったようです。今回はキャンセル待ちが何十人も出るほどの人気だったので、早めに参加登録しておいて正解でした。
機材の準備
発表資料を投影するための機材が必要です。プロジェクターは会場にあるとしても、そこへ出力するためのPCは自分で用意する必要がありました。
とりあえず、HDMI出力が可能なノートPCさえあればOKとのことでした。(HDMIポートがなければアダプタは必要)
私の手元にはPCが何台かありましたが、HDMIポート付きでそこそこ小型のPCがあったのでそちらを持っていきました。ただそのPCは古くて、ちゃんとHDMI出力ができるか自信がなかったので、他のPCと接続してOBS Studioを使って出力確認をしました。
また画面共有する上での一般的な考慮事項として、個人情報やプライバシーに関わるような情報が見えてしまわないように注意が必要です。OSで登壇専用のユーザアカウントを作ってそれを使う、発表のために必要最小限のサービスにだけログインする、といったことをすればわりと大丈夫です。
今回は特にデモをする予定はなかったので、Speaker Deckにだけログインして、Libre Officeだけインストールしました。
発表資料の準備(ツール面)
スライドをどういうツールで作るかですが、今回はLibre Officeを使って作り、Speaker Deckで共有としました。Speaker DeckへアップロードするにはPDF形式である必要がありますが、Libre Officeで簡単にPDF化できます。
Speaker Deckでは非公開でアップロードもできますので、一旦そのモードでアップロードした後に、発表直前のタイミングで公開モードに変更して共有しました。
なお、Speaker Deckはあくまでも共有用として、発表自体はローカルのLibre Office上でやりました。どっちでもよかったのですが、まあローカルのほうがラグなどの心配が少ないだろうと思ってそうしました。一応、何らかの理由でファイルが開けなかった場合なども考慮して、スマホでテザリングしてSpeaker Deckのスライドページも見られるようにはしておきましたが。
発表資料の準備(内容面)
20分枠だとどれくらいのボリュームの話ができるのか感覚として全然わからなかったので、まずは発表時間を全く気にせず一旦資料を作りきりました。それから発表練習をしてみて、時間を超過したら削っていく方針でやりました。結果的には20分というのは非常に短いということがわかり、削りに削りまくってなんとか20分に収まるように苦労する羽目に…
最初はAtCoderについての説明、レーティングの話、プログラミング言語ごとの提出数のグラフ、とかも盛り込んでいたのですが全部削りました。
最も話したかったのは自分が競プロをやって得られた楽しさや学びについてでしたが、そもそも競プロについてよく知らない人向けなので、まずは競プロの概要を説明する必要があります。形式の説明用に非常に簡単な問題例をまず出します。ただ、それだけだと面白さや難しさが何も伝わらないので、もう少し難しい問題例を出してそちらを解く流れを説明することとしました。
そちらの問題例の選出にはなかなか苦労しました。問題文を容易に理解しやすいこと、TLE(実行時間超過)する愚直解が容易に思いつくこと、TLEする原因の説明が容易にできること、TLEしない解法の説明が容易にできることetc. などの面で良さげな問題を探して回って、自分が探した範囲内では一番それに近かったのが今回選出した以下の問題でした。
ただ、それでもまだ難しかったというフィードバックもいただきました。まあ、正直その通りだと思います…
ここの説明に時間をかけすぎると後半の一番話したいことを話す時間がなくなるので、かなり簡略化して説明してしまったのも理由の一つです。苦肉の策ではありましたが、要するに愚直に実装すればいいとは限らなくてちゃんと考える必要があるんだよ(そのことさえわかれば問題内容がよくわからなくても大丈夫ですよ)という建付けとしました。
一番話したかったのは、要するに競プロはいいぞ(+ Kotlinはいいぞ)という話でしたがここでは詳細は省略します。
発表練習
まずは20分の間に全て話しきる必要があるので、時間を測りながら一旦内容を全て話してみる練習をしました。前述の通り、最初は全然20分に収まらなかったので適宜削りつつ20分に収まるように調整しました。
内容を削る必要もありましたが、ボリューム的には問題なかったとしても言葉に詰まったりして20分を超過するのでは意味がないので、スライドを見なくてもスラスラ言葉が出てくるように、あまりスライドは見ずに練習しました。発表にあたってはできるだけ聴いている人の目を見て話したかったというのもありまして、そういう意味でもスライドをあまり見ないで練習というのは有効だったと思います。
スライドを見ないで練習するのであれば、練習の際にPCの前に座っている必要はないので、実は練習のほとんどはウォーキングしながらほぼ脳内でやっていました。ぶつぶつ声に出ていたとは思いますが。そういう意味だと発声練習はできていなかったのですが、結果的にはそれでも十分でした。
タイムテーブル公開
採択が決まった時点だと、タイムテーブルはまだ公開されていませんでした。なので、何時からの枠になるのか気になっていました。タイムテーブルは5月頃に発表されました。それによると私の発表は10:25からとなっていて、ちゃんと朝起きられるか少し不安になりました。いや10時台とか普通に考えれば全然問題ないのですが、私の場合は休日たまに全然起きられないことがあるので…
前日
資料の総仕上げ、発表用PCの準備、資料のアップロード、明日持って行くものの確認、場所や交通ルートの確認、などの準備をしました。
当日は朝からなので前日は早く寝たかったのですが、結果的には眠れませんでした。前日は土曜日でしたが、土曜日の夜はほぼ毎週競技プログラミングのコンテストがあり、そちらに参加したのが原因(の一端)でした。
コンテストの開催時間は21:00~22:40で、現実的な時間に終わるのですが、この時間帯に頭を使うというのが正直睡眠には明らかに悪影響があります。(※個人差があります)
普段から、コンテストに参加するとその日の寝付きは悪いです。翌日は日曜日(休み)なのでまあ普段はセーフなのですが、今回の場合翌日は朝から登壇なのでさあ大変。
そのコンテストによる影響と、たぶん緊張もあってか寝付けず、最終的に寝付いたのはたぶん午前3時くらいだったと思います。(一旦布団から出て2時半くらいまで過ごして、ようやく眠くなって布団に入って寝付けた)
当日
寝坊が少し怖かったですが、経験上は深夜まで寝付けなかった日の翌日はなぜか逆に目覚めが良いので、そこまで深くは心配していませんでした。実際、十分に早い時間に布団から出られました。よかった…
発表用PCは前日に充電しておきましたが、念のためさらに充電してから出かけました。
会場には自分のセッションの一つ前のセッションに間に合うように着きました。
スピーカーであることを告げて受付を済ませます。そのタイミングで、登壇者特典としてJJUG Tシャツを受け取りました。やったね!
それから、前のセッションを聴講しました。前のセッションが終わる間際くらいに緊張が襲ってきました。前のセッションが10:20に終わり、それから前に出て発表の準備を済ませます。時間は5分くらいしかありませんでしたが、やることとしてはスタッフさんと軽く打ち合わせして、PCにHDMIケーブルを繋いで出力されることを確認、Libre Officeでスライドショーを開始、くらいだったので十分間に合いました。プロジェクターで表示されないなどのトラブルもありませんでした。
ここから発表するまでの間に、Speaker Deckで非公開としていた自分のスライドを公開設定にして、スライドをXに載せるというのをスマホでやりました。なんとなく、スライドは事前に共有されていたほうがいいかなと思って。
話し始める直前に、マイクの準備をしていなかったことに気づいて慌ててマイクを取りに行くという焦りムーブをかましましたが、それ以外には特に問題はなく、発表に入ることができました。緊張は前のセッションが終わる前のタイミングがピークで、話し始めてからは緊張は解けていました。思ったよりもはるかにスムーズに言葉が出て、あまり詰まらずに話しきることができました。言葉に詰まって遅れて時間が過ぎないか心配でしたが、スムーズに話せすぎてむしろ少し時間が余ってしまいました。しかし、スタッフさんが場をつないでくれたり、何人かの方に質問をいただけたりして、いい感じに終わりました。ありがとうございました。
発表場所はミーティングルームという細長い部屋で、そんなに収容人数が多くありません。人がそんなに多くなかったことで、あまり緊張せずに話せたというのもありそうです。
その後はブースを見たり、他のセッションを聴いたりしました。Findyさんのブースのくじ引きで一等が当たってびっくりしました。
今後
とりあえず登壇の経験が積めたので、今後また登壇しようと思った時の精神的なハードルが下がったのは良かったです。今後もネタが思いついたらまた登壇してみたいところです。まあ、今回ネタが思いついたのはたまたまですし、採択されたのもたぶん運が良かったからなので、そう何度も再現できるものではないかもしれませんが…
そういう意味だと、なかなか得がたい経験ができたのかもしれません。運営の皆様、準備や発表に際して支えてくださった方、聴いてくださった方、質問をくださった方、皆様に感謝です。ありがとうございました。