タグ

ブックマーク / zenn.dev/catatsuy (4)

  • Goの標準のutf8.RuneStart関数がエレガントすぎる

    先日以下の記事を書きました。 ここでUTF-8の最初の文字かどうかの判定を以下の自作した関数で実装していました。 const ( t1 = 0b00000000 tx = 0b10000000 t2 = 0b00000110 t3 = 0b00001110 t4 = 0b00011110 ) func isUTF8LeadByte(tmp byte) bool { if tmp&tx == t1 { return true } tmp >>= 3 if tmp == t4 { return true } tmp >>= 1 if tmp == t3 { return true } tmp >>= 1 if tmp == t2 { return true } return false }

    Goの標準のutf8.RuneStart関数がエレガントすぎる
  • nginxでHTTP/3を使う方法 2023年5月版

    ついさっき、ついにHTTP/3対応のブランチ家のnginxにmergeされました。 このまま何事もなければ次のMainline versionである1.25.0がリリースされたタイミングで使えるようになるはずです。 検索するとnginxでHTTP/3を使う方法を解説しているサイトがいくつかヒットしますが、実はmergeするちょっと前くらいから非互換な変更をいくつも入れていたので、そのままだと動かないはずです。なので簡単に使い方を解説しておきます。 なお分かっていると思いますが、こちらの記事は記事執筆時点(2023/05/20)の内容です。 OpenSSLの代わりを選ぶ HTTP/3を使うには自分でbuildする必要があります。いずれpackageが配布されるだろうと思っている人がいるかもしれませんが、nginxのHTTP/3対応はBoringSSLのAPIで対応されています。OpenS

    nginxでHTTP/3を使う方法 2023年5月版
    mapk0y
    mapk0y 2023/05/20
  • ファイルが多すぎてlsが打てなくなったディレクトリでファイル名のリストを出すllsを作りました

    2021/09/18追記: v0.0.2を出しています https://zenn.dev/catatsuy/articles/7e3292778396b4 この記事を読みました。 私はファイルが増えすぎてlsが打てなくなってしまったディレクトリを見たことをこれまで何度かあります。その度に無力感を味わうことになりました。それに対して挑む方法をずっと求めてきました。そんな中、記事を読みました。記事内ではC言語での実装方法が紹介されていますが、実際に使われたC言語の実装は公開されていなそうでした。 しかしやるべきことはgetdents64というシステムコールを実行することだけで、別に実装することは難しくなさそうです。 Goの場合はsyscallパッケージを使うことでシステムコールを実行できます。今回のgetdents64はLinuxにしか実装されていないので実装すればMacなど他のOSで実行でき

    ファイルが多すぎてlsが打てなくなったディレクトリでファイル名のリストを出すllsを作りました
  • ISUCON11予選惨敗してきました

    ISUCON11予選は惨敗でした。反省を込めてやったことを軽く振り返っておきます。 リポジトリはこちらです。 最終スコアは36630点で上位層には遠く及ばずでした。 https://isucon.net/archives/56021246.html メンバー 自分以外は今回ISUCON初出場の2人の計3人チームでした。 やったこと スロークエリから jia_isu_uuid, timestamp の複合インデックスを貼る assetファイル配信をnginx経由でexpireを付ける isuテーブルでGROUP BYしていたのでcharacterにもindexを貼る テーブルのレコード数が小さいので多分インデックスは使ってなかった気がする echoのアクセスログなどを無効に ログが多すぎてCPUを使いすぎていた。エラーログも無効にしてしまったのでechoのいいログの出し方を知りたい wind

    ISUCON11予選惨敗してきました
  • 1