約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 に移動しました。

odan.dev

blog.odan.dev

AWS が嫌いになったとか AWS じゃ要件に合わないというわけではなく、単純に Cloudflare ファミリーを使うきっかけが欲しくて移動させました。

ついでに odan.dev ドメインも Namecheap で管理していたのを Google Domains に移管しました。もともとは Google Domains で管理する予定だったんだけど、.dev ドメイン販売開始直後は Google Domains が重すぎて、仕方なく Namecheap でドメインを購入したものでした。

デプロイ方法

Cloudflare Pages は GitHub Apps からデプロイすることもできましたが、今回は GitHub Actions を使用してデプロイすることにしました。こっちのほうが色々インテグレーションが便利なはず。

github.com

ダウンタイム

DNS の設定を変更してから30秒ぐらいのダウンタイムが発生しました。これをなくすることはできるんだろうか

2022年 ふりかえり

去年のやつ

odan3240.hatenablog.com

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 対応できて便利ですね。

github.com

nuxt/modules 系

当時の会社では Nuxt.js を使用していたのでこの辺の感度が高かった。
あるモジュールが Nuxt.js v3 対応したことがドキュメントに反映されてなかったり、Nuxt.js v2 向けのモジュールに初歩的にバグがあるものの issues すら建てられず放置されているのを見て憤りを感じたりしてた。

github.com

github.com

仕事

色々あって転職しました

試用期間の3ヶ月が過ぎたら転職しましたエントリーを書くかもしれないです

11月入社でようやく仕事の進め方が見えてきました。ちゃんとパフォーマンス発揮できているかは試用期間が終わるまで or 最初の評価時期が終わるまでわからないので不安が続いています。

アウトプット

インタビュー

前職時代にテックリードをしていた件についてインタビューをしてもらいました。転職するとどんどん前職の記憶が薄れていくので、他の人の手で文字として記録を残してもらえるのはありがたい限りです。

Zenn のスクラップ

Zenn のスクラップにやったことをメモるのは継続していていい感じです。

来年は JSer Info の感想を書き綴るとかしていこうかなと思っています。

odanさんのスクラップ一覧 | Zenn

まとめ

今年は転職を経験したり人生の転機となる1年間でした

転職してアウトプットや OSS 活動がおろそかになっているので、来年はこの辺を意識したいです。あとそれ以外だと30代が見えてくるので健康やプライベートも充実させる方向に頑張りたいなと考えてます。

ISUCON12 予選 参加記

今年も参加しました

結果

チーム「情報処理部」で参加して、競技中のスコアの最終値は3270、結果は322位相当でした。 メンバーは id:mizdra との2人で参加しました。

やったこと

github.com

  • Datadog の導入
  • MySQL に乗っているテーブルに index を追加
    • Datadog で APM からスロークエリを列挙して上の方にあるクエリに有効なインデックスを追加
  • ID の採番を ulid にする
    • Datadog を見ると REPLACE INTO という見慣れないクエリが見えて「なんだこれ」ってなったけどよく見たら ID を採番しているだけだった
    • uuid でもいいかなと思ったけど ulid にした
  • リーダーボードを Redis に乗せる
    • リーダーボードといえば Redis かなと思ってやってみたけど間に合わなかった...
    • 解説や他の人の参加記を見ても採用しているケースは少なかったし方針が悪かったっぽい
    • 初期データで player_score に入っているデータを Redis に乗せる必要があり、その処理を POST /init で呼ぶと30秒を超えてつらかった
      • ほとんどこの対応に時間を費やして時間内に終わらなかった
      • row_num が一番大きいやつを選べばいいことはわかっていたけど、圧縮するという発想がなかった...

できなかったこと

  • テナントのロックがきつい
    • mizdra さんが MySQL に変更していて、完了すればトランザクションで排他処理ができると思って何もしてなかった
    • 今思うととりあえずアプリケーションレイヤーで RW Lock 実装すればよかった
  • billing が重たいまま
    • 方針を考える時間がなかった
    • N+1 も残ったまま
    • サマリー作れば軽くなりそうだなという気はしていた

感想

  • 自分は Redis 化、mizdra さんは SQLite => MySQL 化をやっていて、どちらも一発逆転ホームラン的な作業をしていたのが良くなかったかも
    • どちらも完了すればスコアが大きく伸びることが期待できるけど、作業が完了しなければスコアの増分は0
    • 小さく積み重ねる系のタスクも別ラインで進めたほうが良かった
  • ほぼ触ったことのない Redis をぶっつけ本番で選んでしまった
    • ↑と似てる
    • SQLite のまま進められる改善をやればよかった
      • RW Lock の実装など
  • Datadog の無料枠が終わった
    • 来年は課金して挑みます
  • SQLite という新しいミドルウェアが出てきて新鮮だった
    • MySQL v8 なのも初?
  • 今回はいつもに増して無力感が強い予選だった
    • 個人的に ISUCON の予選突破がソフトウェアエンジニアとしての1つの目標で毎年参加している
    • しかし予選突破に近づいたことがなく、あと何を学べば目標に近づけるかがわからない...

自宅の通話環境を整備した

背景

forkwell.connpass.com

このイベントに参加するにあたって通話環境を改善したときのログです。

今は普段は3000円ぐらいのヘッドセットをつけて会社のミーティングなどに参加していますが、顔の周りがゴテゴテしているのでやめたいです。理想はいい感じのマイクを買って顔出しゲーム配信者的な環境を手に入れることです。

ゴール

  • 何かしらのマイクを買って運用する
  • マイクは仕事用の MacBook Pro と私物の MacBook Pro を繋ぎ変えられるようにする
  • あまり生活音は拾わず自分の声だけ拾ってくれると嬉しい

買ったもの

マイク

マイクの予算を1万円前後と見ていたのと、ワイヤレスイヤホンは audio-technica 製のものを使用していたのでこちらを購入しました。

www.amazon.co.jp

購入したマイクがコンデンサーマイクだったので、こちらのケーブルも購入しました。 www.amazon.co.jp

ミキサー

ミキサーもマイクと同様によくわからないので、インターネットでおすすめされていたこちらを購入しました。

www.amazon.co.jp

スタンド

マイクにはスタンドが付いてないことを知らずに慌ててこちらを購入しました。

www.amazon.co.jp

最初はこのスタンドを運用してました。しかし「声が遠い」とのフィードバックをもらったのでマイクの位置を顔に近づけるためのスタンドを別途購入しました。

www.amazon.co.jp

その他ケーブル類

マイク関係のケーブルを一切持っていなかったので、適当にそれっぽいやつをたくさん購入しました。

www.amazon.co.jp

www.amazon.co.jp

www.amazon.co.jp

感想

f:id:odan3240:20220117235602j:plain

ミキサーから生えている USB Type-C のケーブルを MacBook Pro に挿せば電源が入りマイクとイヤホンが使える環境が手に入って満足です。

マイクの音は前よりはマシになったけど遠いというフィードバックをもらっています。おそらく部屋鳴りな気がするので、部屋にカーテンを導入するなどして防止することを検討しています。

2021年 ふりかえり

去年のやつ

odan3240.hatenablog.com

OSS 関係

https://github.com/issues?q=author%3Aodanado+archived%3Afalse+-user%3Aodanado+-user%3Aodan-sandbox を眺めて思い出深いやつをピックアップ

shibayu36/merged-pr-stat

仕事で shibayu36/merged-pr-stat を使ってリードタイムの定点観測をしている関係でいくつかプルリクを投げた

リードタイムの内訳がわかるとなにか見えてこないか?という話になって投げたやつ

github.com

リポジトリを眺めていて、図があると単語がわかりやすいよねって気付いたので 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 の検証を行う機会があって、検証中にバグを見つけたので報告したやつ

起票から修正まで爆速ですごかった

github.com

nulab/backlog-js

仕事で Backlog の SDK をちょっと触ることがあって issue 立てたりプルリクを投げたりした

GitHub Actions に migration する issue が生えたまま着手されてなかったので、やるだけだしやるかと思ってやった

github.com

非推奨なメソッドは @deprecated アノテーションがあるとわかりやすいので issue でお願いしたやつ。爆速で対応してもらえた

github.com

レスポンスの型注釈が全部 any になっているので、具体的な型がほしいと思って issue を立てたやつ。けど作業できてなくて申し訳ない...。 github.com

nuxt/vite

Vite がリリースされてから、Nuxt.js の対応はいつなんだろうってワクワクしていたので、リリース直後に趣味プロジェクトに導入してみてエラーを報告したやつ

github.com

github.com

Nuxt.js v3 の正式リリース楽しみですね

dethcrypto/TypeChain

仕事で使っていて、あれなんか型が変だなって気付いて issue 立ててからプルリクを投げたやつ

github.com

github.com

reviewdog/errorformat

reviewdog を使用して厳しい tsconfig や eslint rule を段階的に適用する方法の紹介 を書くために reviewdog を触っていてバグを見つけたので報告したやつ

errorformat のことはよくわからないけど、再現条件と細かく書いたのでこれぐらいの情報量があれば修正されるやろ〜って思って issue を作った。実際すぐ修正されて助かりました

github.com

reviewdog のオーナーがスプラトゥーン関係の知り合いなので、見たことあるアイコンだなって思いながらコミュニケーションを取ってました

仕事

入社当初から目標にしていた役職を今年の夏に得て肩書的にも「もう新米じゃないんだな〜〜」って気持ちになった1年でした

色々大変だけど来年もがんばります

アウトプット

もともと 記事一覧 - odan blog をメンテしていく予定だったけど、Zenn のスクラップ機能がリリースされてからはスクラップに、記事の素振りのメモなどを残していくようになりました

odanさんのスクラップ一覧 | 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 から返す
  • 画像ファイルをローカルに保存する
    • セッションの関係で単純に nginx から返すことはできなくて、アプリから返すようにしていました
    • 結局スコアは改善しなかったのでマージはしませんでした
    • X-Accel-Redirect については知識はあったけど、うまく引き出しから引っ張ってこれなかったのが悔やまれる...
  • 複数台構成にする
    • 1台のサーバで nginx/MySQL を動かして、2台のサーバで app を動かす予定でした
    • だた、top で CPU 負荷を見ると MySQL の CPU が遊んでいたのですべてのサーバで app を動かしました

ふりかえり

競技終了直後にチームメンバーでふりかえりを行いました。その内容 + 個人的なものを書いていきます。

  • 担当分野を決めておく
    • app 担当、ミドルウェア担当的な感じ
    • 自分はもっと司令塔ポジに集中するべきだった
      • 競技後半手を動かしすぎて考える時間が足りなかった
  • ツール群はコマンド1つでインストールされるようにしておく
  • nginx とかの config はサーバごとに Git 管理するではなく役割ごとにする
    • config/isucon1/nginx/nginx.conf のように管理していました
    • config/nginx/nginx-primary.conf を管理してデプロイ時によしなに配るほうが良さそう
  • 複数台構成にするのは初手でやったほうが良かったかも?
    • 1台構成と複数台構成でのスコアの出やすさは違うので、最初から複数台構成にして仮説検証のサイクルを回すほうが正確かも
  • 1週間前ぐらいに一度集まって予行演習する
  • コア数が2だったので pm2 を導入したほうが良かった
    • そもそも pm2 の素振りもしたことがないのでやらないといけない
  • 各施策の KPI をスコアにしない
    • 何か改善を行ってもスコアに反映されないことがあります
    • これは他のボトルネックの方がスコアに対して支配的だからです
      • kataribe の集計結果やスロークエリが改善されているなら master に取り込むべきだったなと思いました
      • 他のボトルネックが解消されたときに爆発的にスコアが伸びる可能性があります
  • 前日はよく寝る

来年に向けて

チームメンバーは来年の参加も前向きだったので来年こそ予選突破を目標にがんばります。