プロポーザル提出
社内で「いっぱい出そうぜ!」という話になり、普段ソースコードで業務に貢献できてる自信がない私は一生懸命他人のプロポーザルのレビューをしました。
その結果、自分含めて社内からのべ18人くらい採択されたので頑張った甲斐がありました。(全員分見たわけじゃないが)
とはいえこの成果はみんなが出そうと思い立ってくれたからこそです。トークのアイデアを持ってる人がいなければレビュー係の出番はない……
iOSDC Japan 2024 Swiftコードバトル 予選
まず、day0を迎える前にコードバトルの予選に参加しました。
すでにつよい人がたくさんエントリーしていて怖かったので観戦枠で申し込みました。
が、長谷川さんに「出ないの?」と言われたので出るだけ出ることにしました。
その結果どうなったかは本記事の最後に書きます。
day0
会場入りする前に、食い意地が張っているのでラーメンを食べに行きました。
学生街なので無数にラーメン屋さんがあるのですが、理工系山盛りラーメンは食べきれないので一般的な分量かつミシュラン&食べログ百名店に選ばれた実績のあるこちらのお店を選びました。美味しかったです。
その後はオープニングまでアフォガードを食べて時間を潰しました。
この日はコードバトルに参加して終わりました。その結果どうなったかは以下同文。
飲み会にも行きました。
気づくと店の1/3くらいが同業者になってました。いつものメンツに挨拶したり、学生の方に「やっていこうぜ!」という話をしました。
day1
食い意地が張っているので、朝からやっているパン屋に行ってパンを食べました。
美味しかったですが、朝早すぎて一部のパンしか焼き上がってませんでした。いつかお昼ごろを狙って行こうと思います。
その後は食い意地が張っているのでミスタードーナツを食べ、オープニングを見に行きました。
今年はやはりConcurrencyが注目のトピックで、どんなところに注目したトークが採択されるかも含めてとても楽しみにしていました。
fortee.jp ↑ガチめのクイズで、細かい挙動を全然把握できてなかったので敗北しました。ヤバい。
食い意地が張っているので、お昼は少し歩いたところのカレー屋さんのグリーンカレーをテイクアウトしてきて食べました。
グリーンカレーですら辛さがメニュー内最低の星2となっているところからお察しください。ちなみに無印良品基準だとグリーンカレーはMAX🌶️5です。ロームスクエアで1人で泣きながら食べました。
この日に備えて(というわけではないですが)
- 業務で自分が担当しているモジュールを2つ
strict-concurrency=complete
にする - GitHub - stzn/swift-migration-guide-jp: Japanese translation of https://github.com/apple/swift-migration-guideの翻訳作業に励む
で最低限の基礎をおさえて聞きに行ったつもりでしたが、自分の中で全然言語化できてなかったり見落としがあったりしたのでとても勉強になりました。
そのあとはアンカンファレンスのポケカ.swiftに参加しました。ルールをちゃんと覚えられておらず山札を切るのもおぼつかず1勝もできませんでしたが、ジラーチデッキをお披露目する目的は達成できました。
これまで接点のなかった皆さんと交流できてよかったです。(念のために言っておくと、それが第一目的でポケカを始めたんですよ!)
ルーキーズLTはAの方に行きました。Bも行きたかったのですが、神山.swiftでお世話になったあきどんさんがいるほうにしました。
皆さんルーキーズとは思えないクオリティで、たくさん勉強になることがありました。
その後は顔馴染みの皆さんとスリランカ料理を食べに行きました。
料理も飲み物も美味しかったです。久しぶりな人も含めてみんな元気そうで安心しました。
day2
day1は高田馬場モーニングをしたのでday2は新大久保モーニングをしようとしたのですが、間違えて新大久保に着く時間に起きました。経路検索アプリに入れる時間をタイマーに設定してしまった。
モーニングのぶん早めに着くようにしておいてよかったです。オープニングにギリ間に合わなかったけど。
(やべ…DroidKaigiでやらかさんようにしないと…)
最近久しぶりにSwiftのエラー4分類が素晴らしすぎるのでみんなに知ってほしい #swtws - Qiitaを読んで、koherさんならtyped throwsをどう説明するのだろうと思って聞きに行きました。とてもわかりやすい説明があっていい予習になりました。
お昼はキッチンカーのルーロー飯にしました。美味しかったです。
fortee.jp ↑やはり非同期処理関係のトークが気になるのでAsyncStreamの話も聞きに行きました。これも良い復習予習になりました。
fortee.jp ↑日向強さんのトークは毎度面白いのと、あすけんガチ勢なのでヘルスケアの話を聞きました。まだ自分の全データをエクスポートしてません。しなくちゃ。
その後はLT大会に備えました。今回のLTは話がうまくて技術的にもためになる人しかいなくて嫉妬しました。
私の発表:
speakerdeck.com
「みんな『自分はもうダメだ!』って思ってるよね!?」と伝えたかったのですが、「『自分はもうダメだ!』の後に型推論やわいわいswiftcの方向に行くのはおかしい」と複数人に言われてしまいました。
でも、数年かけてinamiyさんの圏論に挑戦したりわいわいswiftcのコンパイラの話に挑戦したりするのもいいじゃないですか。頑張って予復習してたった1%しか理解が進まなくても、確実に1%ぶん進化してるし、1年後にはまたiOSDC Japanが私たちを迎えてくれるんです。よね?9回目の開催おめでとうございます。10回目も楽しみにしています。
懇親会の後はHUBに行きました。店内が同業者だらけでした。
Swiftコードバトル
Swiftコードバトルは、要するにコードゴルフです。Swiftコードバトルでは空白やタブを除いたバイト長で競い(ありがたや)、バイト数で並んだ場合は実装が早かった方の勝ちになります。
コードゴルフの経験はなかったのと、予選の面々からして強い人しかいなかったのと、飛び入りの参加でもちろん予習などしていなかった(注:後述しますが予習してないは実は嘘です)ので、
- 最低限ACは通す(どんなに長くてもいいから正しく動くソースコードを提出する!)
- みんなより先に提出する(バトル開始直後の一瞬だけでもバイト長ランキングで上位に載る!)
を目指すことにしました。
iOSDC Japan 2024 Swiftコードバトル 予選
予選では3つの問題を解いて、各問題の解答のバイト長の合計で順位を競いました。本選に進めるのは上位8人です。
問題ごとの順位ではどれも7〜8位だったのですが、安定した順位を取り続けた甲斐あってか予選4位に入ることができました。また、おおむね1番乗りでAC回答を提出できたと思います。
予選の最後にはエキシビションマッチがありました。私は予選4位だったので3位の岸川さんとバトルしました。
予選の問題では岸川さんには1度も勝てなかったのですが、この試合だけは憧れの岸川さんに勝てたのでちょっと嬉しかったです。ボスの「Swiftじゃなければな」で会場が沸く #iosdc pic.twitter.com/IkVFTevQdy
— Toshihiro Suzuki (@toshi0383) August 12, 2024
day0 本選
本選は予選上位8人によるトーナメント戦です。
予選4位だったので、準々決勝で予選5位のAkkeyLabさんとバトルしました。「みんなより先に提出する」の心がけ通り先に提出し、そしてその後うまくバイト長を短縮できなくて悩む羽目になりました。
が、終了直前にひらめくことができて逆転勝利となりました。めっちゃ余計な処理してました、短時間で落ち着いて解くって難しいですね。私はXcodeのPlayground上のソースコードと睨めっこしていたので観客の皆さんの様子はあまりわからなかったのですが、逆転勝利ということで結構盛り上がっていたらしいです。
次の準決勝は予選1位のtoshi0383さんと対戦しました。最終的に同じバイト長の解答を提出できたもののtoshi0383さんの方が解答が早かったため敗北となりました。
優勝者はtoshi0383さん、準優勝はkntkさんでした。お二方とも予選本選ずっと強かったので納得の順位です。そのお2人や岸川さんに食らいついてベスト4に入れたので、私としてはとても満足な結果でした。ベストを尽くせたと思います、頑張りました。
試合後に会場内をふらふらしていたら色々な人から(知らない人からも)「見てたよー!」と言ってくれて嬉しかったです。他のトラック部屋にいた人やスポンサーさんのブース番をしていた人もニコ生で見てくれていたようです。
ベスト4に入れた理由
多分この辺です。これから挑戦する人は参考にしてください。
- 初開催ということだからか参加者が少なかった
- 本選を観戦している人の中にはtoshi0383さんやkntkさんなみの"野良の猛者"がいました。この人たちが参加してたら予選突破できなかったと思います。
- 今年の頭から1日1問SwiftでLeetCodeの問題を解いてた
- 「競プロがマジで苦手」「人生で一度もGitHubの草を埋め尽くしたことがない」というコンプレックスがあり、「なら1日1問解いてGitHubに解答をpushしておけば一石二鳥だ!」とずっと解いていました。私は記憶力が壊滅的で1度に1つの言語の文法しか覚えていられないのでC++やJavaやPythonなどの競プロ定番の言語は使わずSwiftを使っていました。その結果DictionaryやArrayやStringのコードバトルで便利な(実務では使い所のない)メソッドや書き方を身につけることができました。
- log5さんが「競プロでは頻出の実装をあらかじめ用意してコピペしてるのでコードバトルで苦戦した」的なことを言っていました。私の場合ははなからコンテストに出る気がなくて(←上位に入れないし解けなくてへこむから)毎回ゼロから地道に解答を書いてたのが功を奏したかもしれません。
- 岸川さんが「Swiftじゃなければな」と言ってました。私はRubyやPythonを書けない(←静的型付けじゃないと絶対に書き間違えるから)のでそれらの言語の便利関数に惑わされずに済みました。
- 正直そこまで緊張してなかった
- 名の知れたiOSエンジニアたちに勝てると思ってなかったし・・
DroidKaigiの準備が終わってないのと業務で今度から新しいタスクを複数振られることになる不安をiOSDCが忘れさせてくれたためめちゃくちゃリラックスしてた
というわけで、だらだらと続けていた競プロが思いがけず予習となったのでした。
↑一念発起した途端に草が生えてる
まとめ
食べすぎた。
※赤い棒グラフが摂取カロリーで緑の折れ線グラフが体重
来年に応募するパンフ原稿のネタはもう思いついてるのと、記念すべき10回目らしいので、めちゃくちゃに期待してます。それまでiOSやSwiftの勉強頑張る!
業務とDroidKaigi?何故かいつもなんとかなってるので余裕っしょ、いけるいける