hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

â– 

保育園行事があって、そのまま近所の定食屋に行った。
子があまりに大声で演説するので、20歳男性、くらいの、子どもに慣れてない店員たちは、店外に避難して休憩していた。
優しい声で喋ろうね、とか言うとちょっと静かになるけど、だんだん音圧が上がっていく。
今からみんなでタローマンのお腹の中に行こうよ、でもタローマン電車にも乗りたい、だから、今からみんなでタローマンのお腹の中に行こうよ、みたいな、話を繰り返し聞かされる、それもけっこう通る声で、というのに、我々は慣れてるけど、通常の人はあまり聞かないだろうから、ダメージが大きいだろうと思う。

その翌日、中華料理屋で和室に通された。座卓が4つで、老人たちがものすごい大声で剣道の話をしている。
コンマ0.02秒までの感覚の世界、そこにパーンと飛び込んでいく、コンマ0.05秒からは論理の世界、それは量子力学でも説明されている!みたいな脈絡のない話を、信じられない大声で展開している。なんで演説してるのか?と思ったら、剣道のイベントが終わった方たちのようだった。あまりに音圧がすごいと、何食べてるかわからなくなる。大きな発見だった。
クラブでハンバーガーとか食べても味はよくわからない、そういう状態。
録音して、いつでも流せるようにしたい。それくらいすごい体験だった。

â– 

レンジでパスタを茹でるアイテムでフィットチーネを茹でたらめちゃめちゃにひっついていた。
意外とこれまで、フィットチーネを茹でようと思ったことはなくて、早ゆで最速パスタみたいな麺を茹でていた。
レンジで茹でたい、そして、もちもちの太麺を食べたい、という組み合わせが、これまで生きてて今日初めて発生した、ということ。

無理な目標を決めるとそれ以外のバランスが悪くなる

たとえば

  • 目標を「毎日5時に起きて勉強する」にする
  • がんばって起きると日中眠い、といった副作用がある
  • 早起きのための労力が大きく、家事がおざなりになる
  • 精神的な余裕がなくなっていき、5時に起きられてはいるが、満足感は低い

みたいなことがよくある気がする。
一歩目を引くと、他のことはわりとめちゃくちゃなのだけど、5時に起きられているという満足感はあり、達成感もある。
急に、7時まで寝てればいいじゃん、みたいに方針転換するのも、いや、これは一般的には善い行いで、やらないよりはやっているほうがいいように感じるので…みたいになってしまうと、なかなかやめられない。
単体で見ると良いことだけど、状況とあってないときに苦しい、ということになるのかもしれない。

加湿器を買った

家の乾燥をなんとかするため、朝からヨドバシに加湿器を買いに行った。
パナソニックの気化式が、電気代が低く、タンクがでかくて良さそう、という前情報は得ていたのだけど、朝6時に起きて加湿器について調べたところ、シャープの加湿器は上からどばどば水を入れられて便利そう、と思い、これにした。
ヒーターのついたハイブリッドだけど、ヒーターを切ることができる。そうすると気化式になる。

もう一段階大きい製品もあるけど、これは大げさな気がするし、7リットルの水を運んで上から注ぐイメージは持てなかった。

それで買ってきて動かしてみたら、部屋の湿度が常時29%だったのが44%まで上がった。
けど、フルパワーで回り続けても、そこから上にはいかない。
もう一段階でかい製品を買うべきだったのか…?

â– 

今週の初めから、風邪っぽいような、頭が痛いような、肩が凝っているような、リンパが詰まっているような調子の悪さだった。
家が乾燥していて、調子が悪くなると喉が痛いまま全然治らなくて困っている。

ISUCON14 26位だった

前回に出たのが2020年で、子が生まれてからは参加していなかったのだけど、声をかけてもらって、id:tkzwtks, id:akiymと出た。
この2人とは2017年にも一緒に出場して、そのときは朝からビールを飲み、惨敗していた。

準備

準備はほぼなにもしてなくて、やらなければ…とか何度かチャットに書き込んだくらいだった。
自分のブログを見返して、ああこんなのやってたな、とか眺めていた。見返すと、慌てない、とか、精神面のTRYが多い。
個人のスキルとしては、技術的には4年前から何も進歩していないけど、普段の仕事が忙しすぎるため、落ち着いて行動する、みたいなスキルは上がってきていると思う。

朝風呂

銭湯の朝風呂に行って、鴨川を眺めてからオフィスに向かった。
鴨川のすがすがしさがとてつもなくて、この気持ちよさ、合法なのか?規制したほうがよいのでは、と不安になる。

言語

残りの二人はGoが得意だけど、僕がGoは挨拶程度にしか読み書きできない、ということからNode.jsを選んだ。こういうところで無理して使っていかないと習得できないのだな…と思う。
TypeScriptで型がついてるのは便利だけど、SQL内のカラム名とかテーブル名とかを急いでタイピングして、どんどん間違えるので、実行時エラーはよく出ていた。
Promiseを作ってawaitせずほったらかしにすることで雑に非同期処理を書けるのが好きなのだけど、今回はあまり使わなかった。
決済システムを呼び出すあたりはレスポンスを待たず、裏でリクエスト投げっぱなしに変えてみたら、failしてしまった。

ドキュメントを読む

以前、本戦に出たときに、APIの仕様書にヒントが隠されているのを見逃していたのが記憶に残っていて、それから、ドキュメントを最初に読む人間になった。
実装が間に合わないよりは、知らない知識があるまま終わるほうがマイナスが大きいと思う。
リージョンが2個ある、とか、Server Sent Eventsに対応可能、とか、決済サーバーは冪等性のために、このヘッダを受理できます、とか、ヒントが書かれていた。冪等性を担保するためのヘッダは初めて見た。
こういう大会に出て一つ持ち帰れる知識が増えたのは嬉しい。
docs.stripe.com

コードを眺める

行儀が最悪なのだけど、VSCodeのRemote SSHでサーバーに入って、そのままつなぎっぱなしにしていた。git pullしなくても、デプロイされたコードをそのまま読めるので、反映が早い。
コードを検索したり、VSCode内のターミナルでログを眺めたり、便利に使っていた。ミスってサーバー内のファイルを書き換えてしまうことがしばしばあった。
SQLが直接書かれていたので、UPDATE、とか、SELECT、とかで探して、つっこみどころをメモしておいた。
ここのやり方はもっといいのがあるはず、とか、コメントにつっこみどころが書かれていて助かった。

キーボードに触らない

2人に画面につないで実装してもらって、僕は横からおしゃべりしたり、ドキュメントによるとここはこうらしい、とか解説したり、コードを眺めて、変な場所を探したり、という体制で、ほぼ一日過ごした。

  • データの非正規化
    • chairsにlatitude, longitudeをもたせる
    • chairsにcan_assignカラムを足して、予約可能ならtrueとすぐわかるようにする
  • マッチングの調整
    • 一度に全ridesを集めて順にマッチングさせるように
    • 座標を見ると、0付近と300付近にクラスタができていたので、配車距離で足切りして、近くの椅子を割り当てるように
    • 距離/スピードで所要時間を計算して最小化するように
      • なぜかあまり高評価にはつながらず、謎だった
  • サーバー3台に
    • DB、アプリx2、という3台
  • マッチング頻度を下げて、良い条件の椅子が余るのを待つように
    • 頻度を上げたというチームもいておもしろい

夕方くらいになって、Server Sent Eventやっておかないと、打ち上げで話についていけないからやっとこう、と言って、実装を始めたものの、うまく動かず断念した。
honoにstreamSSEというインターフェイスがあって、実装したら、なんか動いているようには見えたのだけど、マッチングが動かなくなった。
みたかんじ、コネクションが切れたあともサーバーサイドの処理が続行しているように見えて、SQLが流れ続けていた。使ったことない技術をこういう機会にいきなり使うのは不可能ということがわかる。
もう時間もないし、あきらめよう、と言って、リビジョンを1時間分くらい戻して終了。
なので、今回僕のコードは1行も入ってない。

マッチングはもうちょっとよくできたんじゃないかと思って、椅子たちの行き先や到着予定時刻は計算できるので、終わるのを待ってからあてがう、といった予約アルゴリズムはどう?とか、予約ができてから一定時間は良い条件を探すけど、みつからなければ打ち切ってマッチングさせるのはどう?とか話してたのだけど、実装が間に合わなかった。
こういう考慮をしたらもっとよくなるのでは、と考えるのは楽しかった。

セカイ系

銭湯に行った効果もあってか、いつになく落ち着いて進められた。
最初の方に、とくにリーダーボードを見てなかったのだけど、それがだんだんおもしろくなってきて、このまま見ないまま終えよう、と決めた。
その結果、まったく焦ることなく、うちはうち、よそはよそ、というセカイ系な気分になれた。
あんまり点数を気にせず、落ち着いて行動した結果、26位に入れたので、意外な結果だった。30位以内は本戦出場相当のスコアということだし、Node.jsで出たチームの中では一位のスコアだった。


今回は、ただエンドポイントを速くすればいい、というものでもなく、ビジネスロジックを理解して改善する、という問題で、ああしたらこうしたら、と楽しめた。
シミュレータもよくできているし、出題の動画もクオリティが高い。ものすごい労力がかかっている…とおののいていた。
出題者、スタッフ、スポンサー、参加者のみなさま、楽しい大会を用意してくださり、ありがとうございました。
久しぶりに出たけど、皆が同じ問題を解いてると、今後一年間は世間話のネタになるし、参加してよかったと思う。