約10年間契約してた「さくらのVPS」を解約した
約10年間契約していた「さくらのVPS」を解約しました。
理由はログインパスワードを忘れ ssh キーも紛失し、VPS の上で動いていたサービスもいつの間にか 503 エラーを返すようになっていたからです。
当時は高校生で、どうして契約したかははっきり覚えていません。契約してからは個人開発したサービスを動かしたり、大学のサークルで使う Slack の Bot を置いていたりしました。
あと、高校生の頃はクレジットカードを持っていなかったので、毎月コンビニで料金を支払っていました。一度支払期限ギリギリの夜23時50分頃にコンビニに駆け込んだこともありました。
どれもいい思い出です。
レンタルサーバーじゃなくて本物の Linux が動く仮想サーバーを月額1000円から借りることができたのはお金のない学生の頃は本当に助かりました。ありがとうございました。
odan.dev と blog.odan.dev を AWS から Cloudflare Pages に移動した
ただの日記です。
個人開発の一貫で運用していた2つの静的サイトを AWS から Cloudflare Pages に移動しました。
AWS が嫌いになったとか AWS じゃ要件に合わないというわけではなく、単純に Cloudflare ファミリーを使うきっかけが欲しくて移動させました。
ついでに odan.dev
ドメインも Namecheap で管理していたのを Google Domains に移管しました。もともとは Google Domains で管理する予定だったんだけど、.dev
ドメイン販売開始直後は Google Domains が重すぎて、仕方なく Namecheap でドメインを購入したものでした。
デプロイ方法
Cloudflare Pages は GitHub Apps からデプロイすることもできましたが、今回は GitHub Actions を使用してデプロイすることにしました。こっちのほうが色々インテグレーションが便利なはず。
ダウンタイム
DNS の設定を変更してから30秒ぐらいのダウンタイムが発生しました。これをなくすることはできるんだろうか
2022年 ふりかえり
去年のやつ
OSS 関係
https://github.com/issues?q=author%3Aodanado+archived%3Afalse+-user%3Aodanado+-user%3Aodan-sandbox を眺めて思い出深いやつをピックアップ
あんまりないかも
ipfs/kubo
去年の年末年始は go-ipfs(今は kubo) の Docker コンテナの ARM 化対応をしてました。
当時の会社で M1 マックを使いつつ、ローカルで IPFS を動かしたい要件があって、Rosetta なしにいい感じにならないかな〜って思ってやってました。
go は簡単(?)に ARM 対応できて便利ですね。
nuxt/modules 系
当時の会社では Nuxt.js を使用していたのでこの辺の感度が高かった。
あるモジュールが Nuxt.js v3 対応したことがドキュメントに反映されてなかったり、Nuxt.js v2 向けのモジュールに初歩的にバグがあるものの issues すら建てられず放置されているのを見て憤りを感じたりしてた。
仕事
色々あって転職しました
今日で4年7ヶ月在籍していたモバファクの最終出社日でした
— odan (@odan3240) October 28, 2022
次どこ行くとかは直接聞かれれば答えるのでご飯とか誘ってください!!
画像は移転前のオフィスの写真です pic.twitter.com/lpKmWGpi7r
試用期間の3ヶ月が過ぎたら転職しましたエントリーを書くかもしれないです
11月入社でようやく仕事の進め方が見えてきました。ちゃんとパフォーマンス発揮できているかは試用期間が終わるまで or 最初の評価時期が終わるまでわからないので不安が続いています。
アウトプット
インタビュー
前職時代にテックリードをしていた件についてインタビューをしてもらいました。転職するとどんどん前職の記憶が薄れていくので、他の人の手で文字として記録を残してもらえるのはありがたい限りです。
インタビューされてきました!他の方の事例もあって面白い内容になっています https://t.co/I8HuJ0NBKN
— odan (@odan3240) December 20, 2022
Zenn のスクラップ
Zenn のスクラップにやったことをメモるのは継続していていい感じです。
来年は JSer Info の感想を書き綴るとかしていこうかなと思っています。
まとめ
今年は転職を経験したり人生の転機となる1年間でした
転職してアウトプットや OSS 活動がおろそかになっているので、来年はこの辺を意識したいです。あとそれ以外だと30代が見えてくるので健康やプライベートも充実させる方向に頑張りたいなと考えてます。
ISUCON12 予選 参加記
今年も参加しました
結果
チーム「情報処理部」で参加して、競技中のスコアの最終値は3270、結果は322位相当でした。
メンバーは id:mizdra との2人で参加しました。
やったこと
- Datadog の導入
- alp/pt-query-digest は使わずに APM をベースに改善の勘所を見つける方針
- [tracer.trace を使ってボトルネックになりそうな関数のスパンを追加した] (https://github.com/odanado/isucon12-qualifier/blob/cd479a577fb5e418651665a46e26560c7a86c771/node/src/main.ts#L281-L285)
- これを使って
flockByTenantID
がボトルネックなことを判断できた
- これを使って
- 使い勝手良かったので来年も継続して利用したい
- MySQL に乗っているテーブルに index を追加
- Datadog で APM からスロークエリを列挙して上の方にあるクエリに有効なインデックスを追加
- ID の採番を ulid にする
- Datadog を見ると
REPLACE INTO
という見慣れないクエリが見えて「なんだこれ」ってなったけどよく見たら ID を採番しているだけだった - uuid でもいいかなと思ったけど ulid にした
- Datadog を見ると
- リーダーボードを Redis に乗せる
- リーダーボードといえば Redis かなと思ってやってみたけど間に合わなかった...
- 解説や他の人の参加記を見ても採用しているケースは少なかったし方針が悪かったっぽい
- 初期データで player_score に入っているデータを Redis に乗せる必要があり、その処理を
POST /init
で呼ぶと30秒を超えてつらかった- ほとんどこの対応に時間を費やして時間内に終わらなかった
- row_num が一番大きいやつを選べばいいことはわかっていたけど、圧縮するという発想がなかった...
できなかったこと
- テナントのロックがきつい
- billing が重たいまま
- 方針を考える時間がなかった
- N+1 も残ったまま
- サマリー作れば軽くなりそうだなという気はしていた
感想
- 自分は Redis 化、mizdra さんは SQLite => MySQL 化をやっていて、どちらも一発逆転ホームラン的な作業をしていたのが良くなかったかも
- どちらも完了すればスコアが大きく伸びることが期待できるけど、作業が完了しなければスコアの増分は0
- 小さく積み重ねる系のタスクも別ラインで進めたほうが良かった
- ほぼ触ったことのない Redis をぶっつけ本番で選んでしまった
- ↑と似てる
- SQLite のまま進められる改善をやればよかった
- RW Lock の実装など
- Datadog の無料枠が終わった
- 来年は課金して挑みます
- SQLite という新しいミドルウェアが出てきて新鮮だった
- MySQL v8 なのも初?
- 今回はいつもに増して無力感が強い予選だった
- 個人的に ISUCON の予選突破がソフトウェアエンジニアとしての1つの目標で毎年参加している
- しかし予選突破に近づいたことがなく、あと何を学べば目標に近づけるかがわからない...
自宅の通話環境を整備した
背景
このイベントに参加するにあたって通話環境を改善したときのログです。
今は普段は3000円ぐらいのヘッドセットをつけて会社のミーティングなどに参加していますが、顔の周りがゴテゴテしているのでやめたいです。理想はいい感じのマイクを買って顔出しゲーム配信者的な環境を手に入れることです。
ゴール
- 何かしらのマイクを買って運用する
- マイクは仕事用の MacBook Pro と私物の MacBook Pro を繋ぎ変えられるようにする
- あまり生活音は拾わず自分の声だけ拾ってくれると嬉しい
買ったもの
マイク
マイクの予算を1万円前後と見ていたのと、ワイヤレスイヤホンは audio-technica 製のものを使用していたのでこちらを購入しました。
購入したマイクがコンデンサーマイクだったので、こちらのケーブルも購入しました。 www.amazon.co.jp
ミキサー
ミキサーもマイクと同様によくわからないので、インターネットでおすすめされていたこちらを購入しました。
スタンド
マイクにはスタンドが付いてないことを知らずに慌ててこちらを購入しました。
最初はこのスタンドを運用してました。しかし「声が遠い」とのフィードバックをもらったのでマイクの位置を顔に近づけるためのスタンドを別途購入しました。
その他ケーブル類
マイク関係のケーブルを一切持っていなかったので、適当にそれっぽいやつをたくさん購入しました。
感想
ミキサーから生えている USB Type-C のケーブルを MacBook Pro に挿せば電源が入りマイクとイヤホンが使える環境が手に入って満足です。
マイクの音は前よりはマシになったけど遠いというフィードバックをもらっています。おそらく部屋鳴りな気がするので、部屋にカーテンを導入するなどして防止することを検討しています。
2021年 ふりかえり
去年のやつ
OSS 関係
https://github.com/issues?q=author%3Aodanado+archived%3Afalse+-user%3Aodanado+-user%3Aodan-sandbox を眺めて思い出深いやつをピックアップ
shibayu36/merged-pr-stat
仕事で shibayu36/merged-pr-stat を使ってリードタイムの定点観測をしている関係でいくつかプルリクを投げた
リードタイムの内訳がわかるとなにか見えてこないか?という話になって投げたやつ
リポジトリを眺めていて、図があると単語がわかりやすいよねって気付いたので README を更新したやつ github.com
nuxt/eslint-config
仕事の Nuxt.js を使っているプロジェクトで eslint 周りの設定をいじっているときに、yarn create nuxt-app
直後でも eslint のエラーが発生することに気付いたやつ
eslint の config をいじればすぐ直るのはわかってたけど、いきなりプルリク投げてもなあという気持ちになったので issue でお伺いを立てた github.com
数日過ぎたけど特に返事がなくて、他のユーザーから :+1: をもらっているのもあって、プルリクを作った。しばらく経ってからマージされた。コアチームは Nuxt.js v3 関係のタスクで忙しかったのかな github.com
aspida/pathpida
副業先で pathpida の検証を行う機会があって、検証中にバグを見つけたので報告したやつ
起票から修正まで爆速ですごかった
nulab/backlog-js
仕事で Backlog の SDK をちょっと触ることがあって issue 立てたりプルリクを投げたりした
GitHub Actions に migration する issue が生えたまま着手されてなかったので、やるだけだしやるかと思ってやった
非推奨なメソッドは @deprecated
アノテーションがあるとわかりやすいので issue でお願いしたやつ。爆速で対応してもらえた
レスポンスの型注釈が全部 any
になっているので、具体的な型がほしいと思って issue を立てたやつ。けど作業できてなくて申し訳ない...。
github.com
nuxt/vite
Vite がリリースされてから、Nuxt.js の対応はいつなんだろうってワクワクしていたので、リリース直後に趣味プロジェクトに導入してみてエラーを報告したやつ
Nuxt.js v3 の正式リリース楽しみですね
dethcrypto/TypeChain
仕事で使っていて、あれなんか型が変だなって気付いて issue 立ててからプルリクを投げたやつ
reviewdog/errorformat
reviewdog を使用して厳しい tsconfig や eslint rule を段階的に適用する方法の紹介 を書くために reviewdog を触っていてバグを見つけたので報告したやつ
errorformat
のことはよくわからないけど、再現条件と細かく書いたのでこれぐらいの情報量があれば修正されるやろ〜って思って issue を作った。実際すぐ修正されて助かりました
reviewdog のオーナーがスプラトゥーン関係の知り合いなので、見たことあるアイコンだなって思いながらコミュニケーションを取ってました
仕事
入社当初から目標にしていた役職を今年の夏に得て肩書的にも「もう新米じゃないんだな〜〜」って気持ちになった1年でした
色々大変だけど来年もがんばります
アウトプット
もともと 記事一覧 - odan blog をメンテしていく予定だったけど、Zenn のスクラップ機能がリリースされてからはスクラップに、記事の素振りのメモなどを残していくようになりました
Tweet をする感覚でどんどんコメントを書いていけるので助かってます
スプラトゥーン
今年嬉しかったことは次の3つ
- XP26達成
- 大王戦で優勝
- 固定チームを作って大会に出た
XP26達成
XP24→XP25の期間が長かっただけに、思っていたより早くXP26を踏めて嬉しかったです。他のルールもXP25を何回も踏めるようになってきたので、全体的に今年1年間でスプラはうまくなったなと実感した1年間です。
XP25前後になると対面全然勝てず試合にも勝てない、のが来年の課題で、もう一度XP26を踏んでXP27にも挑戦したいと考えています。
大王戦で優勝
スプラトゥーンの社会人コミュニティの Splathon 内部で開催されたウデマエ制限付きの大会で優勝できました。今回が第三期で、第一期が準優勝、第二期が優勝だったので今回も良い成績を収めることができてよかったです。
コミュニティ内部の大会は練習相手に何度も凸って、ステージの特性や人ごとに対面のアプローチを学習していくタイプなんですが、今回はあまり練習時間が取れずどうなることやらと思っていましたが、無事に結果に繋がりました。
次も開催されたら三連覇を目指したいです(そろそろ永世称号もらえる??)。
固定チームを作って大会に出た
↑のコミュニティ内部の知り合いを集めて固定チームを作って大会に出ました。
勝っても負けても楽しいので楽しいです。
ISUCON11 予選 参加記
結果
チーム「ひとは」で参加して、競技中のスコアの最高値は23308、結果は失格でした。
ISUCON11 オンライン予選 全てのチームのスコア(参考値) : ISUCON公式Blog
環境情報の確認に失敗: セキュリティグループへのルールの追加
:cry:
isucon-env-checker
を実行したのは最初の一回だけだったので気付くことができませんでした。セキュリティグループは netdata 用に直接ポートを開けていました。今思うと nginx でプロキシするとかすればよかった。
チームの方針
言語選択は Node.js でした。普段 Perl を書いているメンバーもいましたが TypeScript をかけるメンバーのほうが多いためこの選択になりました。
用意されているサーバ3台について、夕方まではそれぞれのメンバーが並列にタスクに取り組みスコアを改善し、夕方以降に複数台構成にスイッチすることでリソース効率を最大化する方針を採用しました。
担当領域については明確な分担はなくお互いがなんとなくタスクを取っていました。ただ、パフォーマンス改善のアイディア出しやタスクの優先度付けは自分が行うことで全体の進行を調整していました。
開発のフローは、GitHub Project でバックログを作成、変更をブランチを切ってプルリクを作成して、master にマージする流れでした。プルリクを作るのは GitHub Project の Automated kanban
のためで、特にレビューはしていません。
個人でやったタスク
- NewRelic の有効化
- 慣れてないのもあって使いこなせなかったです
- 8時間という短い競技時間でうまく使いこなせてたチームはあったんでしょうか...?
- 練習ではかなり勉強になったので良かったです
- デプロイスクリプトを書く
- いつもの
- ただテンプレ化できる作業なので、事前に準備しておきたいと思いました
- kataribe を入れる
- いつもの
- 静的ファイルを nginx から返す
- SPA なので
try_file
を使うのがコツ
- SPA なので
- 画像ファイルをローカルに保存する
- セッションの関係で単純に nginx から返すことはできなくて、アプリから返すようにしていました
- 結局スコアは改善しなかったのでマージはしませんでした
X-Accel-Redirect
については知識はあったけど、うまく引き出しから引っ張ってこれなかったのが悔やまれる...
- 複数台構成にする
ふりかえり
競技終了直後にチームメンバーでふりかえりを行いました。その内容 + 個人的なものを書いていきます。
- 担当分野を決めておく
- app 担当、ミドルウェア担当的な感じ
- 自分はもっと司令塔ポジに集中するべきだった
- 競技後半手を動かしすぎて考える時間が足りなかった
- ツール群はコマンド1つでインストールされるようにしておく
- nginx とかの config はサーバごとに Git 管理するではなく役割ごとにする
config/isucon1/nginx/nginx.conf
のように管理していましたconfig/nginx/nginx-primary.conf
を管理してデプロイ時によしなに配るほうが良さそう
- 複数台構成にするのは初手でやったほうが良かったかも?
- 1台構成と複数台構成でのスコアの出やすさは違うので、最初から複数台構成にして仮説検証のサイクルを回すほうが正確かも
- 1週間前ぐらいに一度集まって予行演習する
- コア数が2だったので pm2 を導入したほうが良かった
- そもそも pm2 の素振りもしたことがないのでやらないといけない
- 各施策の KPI をスコアにしない
- 前日はよく寝る
来年に向けて
チームメンバーは来年の参加も前向きだったので来年こそ予選突破を目標にがんばります。