chigichan24のお気持ち表明

おきもちを表明している

DroidKaigi2022に参加しました

久しぶりのオフラインDroidKaigi

久しぶりのDroidKaigiオフラインでした。非常に楽しみにしてました。

思えば、初めてDroidKaigiに参加したのは、DroidKaigi2018でした。当時はコロナのコの字もなく、非常に楽しく会場でワイワイしていた記憶があります。
そして、今思えば若気の至りで、色んな人に突撃してお話を聞いていたなぁと懐かしく思います。

chigichan24.hatenablog.com

2019は卒業研究の発表と日程がかぶり、泣く泣く行くのをやめました。

そして、DroidKaigi2020 は当時は大学院生でしたが、インターンシップなどの成果をいい感じにまとめられ、その内容で運良く DroidKaigi で登壇する予定でした(継続的に機能開発を進めながら行うマルチモジュール化)。
しかし、ちょうど新型コロナウイルスが盛り上がりを見せてしまい、中止となってしまいました。

chigichan24.hatenablog.com
droidkaigi.jp
speakerdeck.com


DroidKaigi2021 は完全オンラインで開催され、新しいカタチでのワイワイを見つけられました。この回も運良くCfSが採択され、DroidKaigiアプリのアーキテクチャ変遷について話すことができました(DroidKaigiカンファレンスアプリの歴史からみるアプリアーキテクチャのこれまでとこれから)。

droidkaigi.jp
www.youtube.com
speakerdeck.com

DroidKaigi 2022 当日まで

今年も何か話したいなぁと思っていて、いくつかアイデアがあったのですが、ちょうどGW頃に、「いっちょAOSPでもビルドしてみっか〜」とビルドだけとりあえずしてみたことがありました。また、別の側面として、AOSPのコードってCode Searchをつかってちょいちょい読むよなぁという経験もありました。
そのへんの話をまとめて「Android "を" ビルドしてAndroid Systemを覗いてみよう」という話をすることにしました。

無事に採択が決まった後は、あらためて細かい部分を調査しながら資料を作成しました。去年と同様にホテルに引きこもって細部を詰めました。
ホテルに泊まりましたが、結局日中はコワーキングスペースで圧倒的進捗を出していたので、来年も資料作成する機会がある場合はホテルシステムはやめようと思いましたw

DroidKaigi 2022

自分の発表関連の感想

DroidKaigi 2018 のときの記事にSpeakerのとこに並びたいと書いていましたが、無事にフラグ回収できました。

DroidKaigi2018の記事に書いていたフラグ回収

AppBarsの部屋が思ったよりでかくて、発表まではなんだか落ち着かない感じがしましたが、いざ舞台に立ったら「よし話すか〜」という普段の雑談と変わらないメンタルになったので良かったです。

のんきにピースする筆者

反省点は、通訳の人のためにもう少しちゃんとしたスクリプトを用意しておきたかった、ゆっくり話すべきだった、聞いている人を引き込むような機転の効いたアドリブをいれたかった、AOSPのビルドを試せるサンプルとかを用意したかった、実機にカスタムビルド版をいれて用意しておきたかった 等あります。

droidkaigi.jp
speakerdeck.com

他の方の発表の感想

ブースの手伝いなどあってちょくちょくしかセッションを見れてませんでしたが、感想を書いていこうと思います。

詳解Google Playの新しい定期購入 ~オファーの活用や実装例を添えて~

PBLv5 に移行していく上でのツラミ、特に自動移行の話が心に残りました。というか、PBLは頻繁にメジャーバージョン上がるな....

詳解Google Playの新しい定期購入 ~オファーの活用や実装例を添えて~ | DroidKaigi 2022

The world of Android wireless communications without Internet

BLE、WiFi Direct の話などがコードと一緒に話されていてわかりやすかったです。

The world of Android wireless communications without Internet | DroidKaigi 2022

アプリエンジニアとQAチームがデバッグ機能の改善に取り組むぞ!

エンジニアがデバッグ機能を好き勝手作っちゃってQAから怒られる流れ....となりました。改善のイテレーションを回したときにどうなるのかの話がまた聞きたいなぁと思いました。

アプリエンジニアとQAチームがデバッグ機能の改善に取り組むぞ! | DroidKaigi 2022

実例から学ぶJetpack Composeのパフォーマンス改善

全体的にスライドがわかりやすかったです。Flamingo での機能も積極的に使いたいと思いました。

実例から学ぶJetpack Composeのパフォーマンス改善 | DroidKaigi 2022

実践 `edge-to-edge`: 端から端まで解説

edge to edge やっていこう!になりました。

実践 `edge-to-edge`: 端から端まで解説 | DroidKaigi 2022

The art of hiding sensitive info in plain sight

offense / defence の両面からAndroidアプリのデータをどうやって扱っていくのいいのかが述べられていてよかったです。

The art of hiding sensitive info in plain sight | DroidKaigi 2022

Molecule: Using Compose for Presentation Logic

Molecule について徹底解説されていて、使ってみようになりました。また、スライドがすごい綺麗でした。

Molecule: Using Compose for Presentation Logic | DroidKaigi 2022

ブースのお手伝い

これはまた、どこかで話そうと思います。

まとめ

オフラインだったので、直接会話して、交流できたのが非常に良かったです。ブースに居るエンジニアの方と話せて、いろんな企業の話がきけてよかった。至るところに知人がいて、「おぉ、やっほ〜。久しぶり〜。オフラインでははじめまして!!」となるのは面白かったです。
来年もまた機会があれば登壇できるように色々ネタを温めたいと思います。もうそろそろ、お仕事での話とかをしたい。。。
また、スタッフの方々がいろんな方面でDroidKaigiを支えてくれていて、一参加者としては、安心して参加できました。ありがとうございます。

2021年振り返り

振り返っていくぞ.com

今年の反省ポイントは、コンフォートゾーンよりのストレッチゾーンに長くいてしまっている感じがするので、来年はパニックゾーンに常にいたい。 あとは、ソフトウェアを完全に理解したい。

1月

  • 記憶なし
  • @at_sushi_at の書いていた Kotlin Cortoutinesの本をレビューするなどの活動をした。
  • 修士論文を書いていた。
  • ISUCONに「いすこんがさき、しゅうろんはあと」というチームで出ていたせいで、後輩や同期から「まあ、chigichan24くんは修論は後だからなぁ」と煽られまくる。
  • これは、修論は後ではなく修論はあと(ハート)だからね(解釈違い)
  • 修論発表のためのスライドを作成した
  • 未踏advもやっていたが記憶がない。@0meo が全ていい感じにやっていた。

2月

  • 記憶なし
  • @chigichan24「未来のコンピュータの性能に賭けて、今後のツイートは全部SHA-512で暗号化してつぶやこうかしら」
  • 振り返り不可能
  • grpc-swiftを読み漁っていた zenn.dev
  • 確定申告とてもつらい気持ちに
  • 引越し準備で、なくなく持っていたぬいぐるみたちを捨てた。@imishinist や @at_sushi_at がくれたお気に入り達ごめんね。
  • ぬいぐるみがでかすぎて「可燃ごみ」ではなく「粗大ごみ(布団枠)」で持っていかれた。

3月

  • 引っ越し。東京在住。便利になった。
  • WebRTC関連のRFC読み漁ってた webrtc.shiguredo.jp
  • Next.js で web front 入門5000兆回目した。
  • 完全に余談だけど高木先生の解析概論にも高校生の時から入門5000兆回したけど、結局途中からよくわからんかった。
  • Android wagashi に参戦する。 https://scrapbox.io/android-wagashi/

  • 卒業式(修了式?) にオンサイト参戦。実は修了できていませんでしたドッキリかと思っていたけど、お前修了やでの紙切れをもらった。

4月

  • 社会人
  • キーボードを規則的に叩くとお金をもらえる仕事を始める。
  • JetBrains の全部入りパックに課金
  • Spotify を月更新ではなく年更新のサブスクに変更

5月

  • GW を利用して Android をビルドしようとするも、色々容量が足りないマシンを借りて敗北
  • お気持ちツイートがうっかりバズってしまい 380RT / 1274 fav くる
  • Google I/O で Material You 楽しみ(楽しみ?) になる
  • Android12 全体的に良さそうやんの気持ちになる
  • GPT2 / GPT3 周りに興味を持ち始め論文を読み漁る

6月

  • openapi-generator がバグっている(考慮漏れ) を見つけて PR を投げる
  • quic の rfc9000 を読み解いて完全に理解する。
  • @chigichan24 「Kotlin Swift の違いで一番許せないのが fun func なんよな。両方書いてると頭壊れる。」になる

7月

  • quic なんもわからん。なんだこれ。
  • kaptにだんだん嫌気が指してきて、これからの人生をKSPに賭けるべく、コードや概念を深堀りする。
  • Activityの状態保持に興味を持つ。Activity そのもののコードを読み漁る
  • ActivityResultContracts で startActivity するときの requset code はある値域で自動生成だから1ch 衝突させてヒャッハーできるのでは?と思いめちゃくちゃInstrumentedTestを回す。

  • DroidKaigi って同じ機能を提供するアプリなのに毎年その年の時流(最先端)に合わせて書き直しているしめっちゃ勉強になるよなぁと改めて思う。
  • これで DroidKaigi の CfP 出してみる。ぶっちゃけ、これ私みたいな意味分からん外野がやらずに、 中の人のほうがより深堀りできるのではとか思ったけど、歴史考証の意味でも外部の人がやってもいいのではの結論に至る。実際、public で進めてるわけだし。
  • 他には Activity の話とかのやつを出す。

8月

  • ISUCON予選の対策のために毎晩狂ったようにISUCONを解く
  • 前日には有給を取得し、入念に準備をすすめる。
  • ISUCON当日

  • ISUCON予選に大敗北し、久々に意気消沈する
  • DroidKaigi に歴史のほうが通る。二年連続Accept。
  • AndroidのNavigationBar の挙動意味分からんすぎて、コードをひたすら読む。各メーカは頼むからここいじらないでくれ(無理)

9月

  • DroidKaigiの資料作成のために、都内のホテルを押さえて執筆作業をしようとしたが結局「水曜どうでしょう」がおもろいことを再確認してしまう。
  • KSP が stable になって勝利を確信する
  • iOSDC おもれぇ。
  • あんまり記憶なし

10月

  • Android dev summit おもれぇ
  • DroidKaigi の収録に行く。
  • カメラマンに「ジャニーズに所属してた?」っておだてられながら写真を撮ってもらう。アイドルみたいな写真があるので、個人的に聞いてくれればシェアします。
  • DroidKaigi に参戦する。楽しい。

speakerdeck.com

  • 今年一番おもろいツイートに出会う

  • Pixel6 を購入する。手元のPixel3aをAndroid11にダウングレードしたら何かの手順をミスってすべてのデータが飛ぶ。さようなら。
  • お仕事が嬉しい感じになる。
  • 久々にオフラインのライブに行って、最高の気持ちになる

11月

  • 登山する
  • Compose for Web を完全に理解してしまう
  • A Philosophy of Software Design を読むのに夢中になる。
  • swift ばちばち書くビッグウェーブが来る
  • 高専のときの友人が結構ソフトウェアエンジニアぽいことしてて感動する

12月

  • 設計って難しいね期。
  • 石川県に遊びに行く。楽しかった。
  • 飲み物他をこぼしまくる。
  • Android / iOS / webfront を広く浅くちまちまと書く機会が増える。
  • WebRTC を完全に理解する。

まとめ

いかがでしたか?

自己満足のためにコードを書くのではなくて、ユーザ(自分以外の開発者・サービス利用者)のためにコードを書くことをもっと意識したい。

ISUCON10-finalに参加しました ~ありがとうまたあいま賞~

ISUCON10-finalに予選と同じくk5342Pelkiraと共に参加しました.途中の順位highestは5位くらいまで上がっていた気がしますが,最終的には18 / 22位.failのチームも含めると18 / 33位でした. highestは15:43に記録した12835で,最後は11077でフィニッシュしました.

スコアが付いた中では下から5番目で,LINEさんから”またあいま賞”といういい感じの賞を貰えるみたいです.LINEさん大好き.

またあいま賞の画像
またあいま賞

とはいえシステムがfailするのはxsuconとしても問題ありなので,重くても動いている方が偉い(?).最後の試験failしなくてよかった〜

k5さんも本選の様子をふりかえっているので,ちゃんとした内容を読みたい人はこちらへ.

k5342.hatenablog.com

前日まで

  • あまり忙しくて例のごとく練習する時間はほとんど取れなかった.しゅうろん♡を控える大学院生は忙しいのだ.
  • 予選が終わった & 本戦出場が決まったときに,各々の役割をもう一度考え直して,以下のようにすることとしました.
    • Pelkira先生 : 上がっているIssueからどれを取捨選択するか,実装者のタイムマネジメント,clarの情報共有といったオペレーション周り,意見を吸い上げて困ったときの道筋の最終判断者
    • k5さん : 計測・実装
    • わたし : 椅子あたため係 (計測・実装)
  • 練習では上記役割での初動確認及び,秘伝のタレやいい感じにするスクリプトをまとめたMakefileを作ってました.後にこのMakefileが火を吹くことになりました.k5さん天才か?

当日

  • 色々仕事が舞い込んできて朝6時くらいまで眠れなかった.終わり.
  • ポストイットを買って会場入りする.
  • 例のごとく人が何やってたかあんまり覚えてない.

レポジトリ

github.com

個人的にはこのIssueがすき.Pelkiraくんのマネージ力. インデックスを張ったか確かめる画像

説明フェーズ (9:30 - 10:00)

  • いつもの導入動画.xsuconの改善が必要になる.毎秒isuconしろ.
  • 非常にメタ的だなぁと思った.

序盤 (10:00 - 13:00)

  • sshする.
  • とりあえず,localでもどんなWebアプリケーションなのかを確認する.
  • レギュレーションを読む.
    • web pushは実装する必要あるかなぁと思いつつクリティカルに問題になりそうならやるかぐらいの気持ちでいた.
    • 埋め込まれている定数(TeamCapacity)を変更することによって,トレンドが変化しそうということを把握する.
  • DBのスキーマを調べたり,構成要素を調べたり,秘伝のタレ(my.cnf)を微妙に修正しながら流し込んだりする.
    • テーブルに入るitemのオーダーはどこから改善するかの指標にもつながるので,注意してみたほうがいいのだ.
    • slowquery出てこないなと思ったら,slow_query_log = ONの箇所がコメントアウトされていてウケた.
  • pprofを仕込んだりする.
  • git pushしていたら,サーバーが壊れるなどしたので,伝家の宝刀本番サーバに~/chigiを作って開発するのをやめて,localに開発環境を作る.
    • ついでに,不必要に管理してたrubynodejsfrontendといったディレクトリをgit管理下から外す.
    • frontendがそこそこデカかったから,static fileのcacheをenvoyに挟めばよかったなぁって今記事を書いていて思った.
  • クソデカ・クエリが支配的だったので,とりあえずindexを貼ってみる.

中盤 (13:00 - 16:00)

  • 全然スコアがのびない.よく見るとインデックスの貼り漏れがあるので修正
  • ついでに,PelkiraからTeamCapacityを上げてみてはどうか?という話があったので,上げてみる.
    • スコアが10000位になる.
  • この結果トレンドが変化し,ボトルネックが移った.
    • k5さんが行ロック周りをいい感じにできないかしている間に,私は,コードでsleepしてretryしている部分をアドホックに修正したりしていた.
    • 変化したトレンドの中にN+1もいくつか上がってきていたので,一つを担当して修正,何事もなく変更ができたと思っていた*1
  • INSERTが厳しいと話していたので,capacityを上げたり,writeのスレッドを増やしたりした.
  • この辺を調査して適当しているときに,実はindexがはられていなかったことに気がつく.
    • 悲しい.
    • schema.sqlがあるしどっかで呼ばれているやろみたいな適当な発言をしてしまったので,ごめんなさい.
  • 修正するとスコアは12000位.その時の順位は10位以内に,学生枠では1とか2位だったので嬉しかった.ここで競技終了になればよかったんや(?)

f:id:chigichan24:20201003183251j:plain
タスクとタイムマネジメントをいい感じにしてくれるPelkiraくんの作業場

終盤 (16:00 - 18:00)

  • notification周りがずっと変な感じがしていて,ERR: validation: critical: invalid-response: あるべき通知を受信していないことが検知されましたがでて確率的にfailするようになってきていた.
  • failというのは非常に心臓に悪く,順位がつかないのでこれは解決しなければという感じなっていました.
  • TeamCapacitylock_waitの値をごちゃごちゃいじることで落ちないようにすることはできたけれど本質的になぜこうなるのかわからない状態でした.
  • この問題を解決しないと最悪スコアが0になるなと思っていたと同時に,依然としてクソデカ・クエリのDB負荷がしんどくこれにはキャッシュの実装が確実に必要だなあとなっていました.どっちをとるかという選択を迫られ,結果的に二兎を追うこととしました.
    • 私はランダムfail問題を解決することを目指して実装を進めました.一部のトランザクションのはられ方が悪く,データ不整合を起こしているのでは?と思い実装しましたが結果的にそれは改善には繋がりませんでした.諦めて,値をチューニングすることで,一旦ある程度はfailしない状態にしました.
    • 一方k5さんはキャッシュの実装をやってくれました.ごりごり実装を進めてくれてベンチに入れると,スコアはぐんぐん伸びて18000を記録していましたがfailの文字が.うーん悔しさがそこにはありました.
  • ギリギリまで粘って実装バグを探すk5さんの横で,いつでも再起動(sudo reboot)できるようにログ周りを全て切って回りました.
  • ギリギリまでk5さんの実装を見ていましたがある程度のところで見切りを付けて再起動試験をはじめました.あのときのk5さんの悔しそうな表情がすごく脳裏に焼き付いています.この時すでに残り15分,もともと1時間は再起動試験に時間をとりたいと考えていた私達にとっては緊張感のある時間となっていました.
  • rebootでベンチが安定して通る(当社比)ところを見た後に最後にTeamCapacityの値を上げて少しでもlatestの数字を上げることにしました.しかし,自分のチューニングした値からすこしでもずらすとすぐに0となったため,すぐに戻しました.この15分の間はずっと本番サーバで直接masterをいじっていたので,非常に怖かったです.

緊迫したベンチ画面

  • 残り2分,latestのスコアはチューニングに失敗した値である4281の数字,ベンチは回せてラスト一回,悔しさと次のベンチでfailしたらチームのみんなに申し訳ないという気持ち,もっと自分ができたことがたくさんあったなと8時間が走馬灯のように駆け巡る中「ベンチを入れて」とk5さんにお願いしました.結果は18時が過ぎた時間に11077が出てきました.ひとまずfailじゃなかったことへの安堵でいっぱいでした.

その後 (18:00 - )

  • Pelkiraくんはその後に予定があったため帰宅,私とk5さんは時間に余裕があったので,本選通過者に送られた出前館のクーポンでご飯を頼みました.ありがとうございます.
  • 下から5位のチームに贈られる賞の枠で発表され,無事にその後のチェックもfailせずに通過したことを知りました.
  • 学生が1, 2, 3位フィニッシュだったことに衝撃を受けると同時に,自分の不甲斐なさを実感していました.

最後に

  • 楽しい問題をいつも提供してくださるISUCONの運営の方々には感謝です.これが毎年あるおかげで強くなっていることを実感します.
  • 初めて本選に行ったのはISUCON6,このときはなんにもわからず,@orisano@imishinistに連れて行ってもらっただけで,真の意味で椅子を温めていました.
  • 初めて自分の知識を多少生かして,編入同期である@k5342@euglena1215と本選に進んだISUCON7では,本選問題の何のボトルネックもわからずに懇親会ではこの人達は一体何を話しているんだ?状態で放心状態でした.
  • そして,久々の本選である今回のISUCON10では過去とは比較にならないくらい色々できました.感想戦で出てきた話題も「あ〜わかるわかる」,「あ〜頭良すぎか」みたいな状態になれていました.ただ,勝てなかったこと,学生として最後に*2参加するISUCONでもっといいフィニッシュをしたかったなぁと後悔も多くあります.
  • そういう意味では「またあいま賞」という素敵な賞をもらえて,また頑張ろうと強く思いました.絶対本選にまた帰ってくるからな.そのときは皆さん対戦よろしくおねがいします.

ネームカードの図
かっこいいネームカード

*1:後に,実はその修正は間違っていた上にスコアにあまり寄与しないことがわかった.悲しい.

*2:修論はちゃんと出して絶対卒業するぞ