タグ

ブックマーク / blog.utgw.net (6)

  • 有効期限を過ぎても消えないインメモリキャッシュの謎 - 私が歌川です

    tl;dr キーワードは「monotonic clock」です。 あらすじ Goで以下のようなコードを書いていた*1*2。あるAPIを叩くクライアントで、APIコールに必要なアクセストークンを4時間キャッシュしている。c.getToken() で得られたトークンを使ってAPIコールを行えばよい。 type Client struct { mu sync.RWMutex expiresAt time.Time token string } // トークンのキャッシュがあればキャッシュから返し、なければ更新してから返す func (c *Client) getToken() string { if cachedToken, ok := c.getTokenFromCache(); ok { return cachedToken } return c.refreshToken() } // トー

    有効期限を過ぎても消えないインメモリキャッシュの謎 - 私が歌川です
    peketamin
    peketamin 2023/02/25
  • 味玉のレシピをMakefileで記述する - 私が歌川です

    最近よく味玉を作っているのだけど、ジップロックに日付を記入し忘れたり、ボウルに水を入れてから氷を入れようとしたりしていて、手順の依存関係を意識しないとめちゃくちゃになる。 Makefileは依存関係と成果物を記述できるので、レシピをMakefileの形で書いたらおもしろいのでは、と思ったけど記述量が多い気がする。 .PHONY: お湯を湧かす 卵を茹でる 8分待つ ボウルに氷を入れる ボウルに水を入れる ボウルに卵を入れる 卵の殻を剥く ジップロックに日付を書く ジップロックにめんつゆを入れる ジップロックに卵を入れる 一晩寝かせる 味玉 お湯を湧かす: @echo お湯を湧かします 卵を茹でる: お湯を湧かす @echo 卵を茹でます 8分待つ: 卵を茹でる @echo 8分待ちます ボウルに氷を入れる: 8分待つ @echo ボウルに氷を入れます ボウルに水を入れる: ボウルに氷を入れ

    味玉のレシピをMakefileで記述する - 私が歌川です
    peketamin
    peketamin 2022/06/23
  • GitHub Actionsを使ったDDoSに巻き込まれた - 私が歌川です

    事例集です。 きのう、GitHubの通知を見たら、個人のリポジトリに My First PR というタイトルのPRが来ているのに気づいた。PR出すところを間違えたのかな、と思って見てみたがどうも様子がおかしい。 prog という名前のバイナリファイルを置いている .github/workflows/ci.yml*1の中身をガッと書き換えている on: [pull_request] でworkflowを起動している 20並列でjobが走るようにmatrixを設定している fail-fast: false なので、どれか1つのmatrixが失敗しても他のジョブは続行される base64 encodeした文字列をdecodeしてevalしている ドメインの名前解決を行ったあと ./prog を実行するコマンドにdecodeされた PRをめちゃくちゃな回数closeしてreopenしている PRを

    GitHub Actionsを使ったDDoSに巻き込まれた - 私が歌川です
  • MySQLのEXPLAINが直感とは異なっていた事例 - 私が歌川です

    おもしろかったのでメモ。 CREATE TABLE `tbl` ( `id` BIGINT UNSIGNED NOT NULL, `done` BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (`id`), KEY `done_and_id` (`done`, `id`) ); tbl テーブルに done = FALSE で100万行INSERTしておく SELECT id FROM tbl WHERE done = FALSE ORDER BY id ASC LIMIT 50 でidを順に集める 処理する UPDATE tbl SET done = TRUE WHERE id IN (...) で処理済にする これを done = FALSE な行がなくなるまで繰り返す KEY `done_and_id (`done`, `id`) ありでEXP

    MySQLのEXPLAINが直感とは異なっていた事例 - 私が歌川です
    peketamin
    peketamin 2020/10/24
  • Python の依存パッケージ管理/環境切り分けツール pipenv の紹介 - 私が歌川です

    この記事は 2017/9 に書かれたものであり、2019/11/26 現在とは状況が変わっています。公式ドキュメント(日語訳)を参照してください。 時代は pipenv や— うたがわきき🔰💊 (@utgwkk) September 5, 2017 もう誰も,requirements.txt や,source ENV/bin/activate に頭を悩まされる時代は終わった! というわけで virtualenv の時代は終わり*1,pipenv の時代になりました. この記事は Python を書く人間が全員 pipenv を使うべきだという思いを込めて書きました.日語で書かれた記事がまだぜんぜんないという事情もあります. pipenv とは Python のパッケージ管理ツールの pip と,環境切り分けツールの virtualenv を融合させたツールです.Ruby でいうとこ

    Python の依存パッケージ管理/環境切り分けツール pipenv の紹介 - 私が歌川です
    peketamin
    peketamin 2017/09/05
  • Python の map とfor内包表記(リスト内包表記)は結局どっちが速い? - 私が歌川です

    tl;dr map が遅いとされるのは関数呼び出しの差があったため 現在では(list にこだわらなければ) map は (2017/3/10 11:00追記)イテレータを生成するときは 圧倒的に速い 総合的に見ると,式のみのときはfor内包表記が速く,関数のときは map が速い様子か 追記が増えてきたので,追記部分も読んでもらえるとよさそう. はじめに 「Pythonmap とfor内包表記(リスト内包表記)は結局どっちが速い?」というのは,Python 使いなら誰しもが抱く疑問かと思われる.そういう記事もいっぱいある. そこで,今回はバイトコードと実行時間を見ることで,どちらが速いのかを検証してみた. Python2.7.12 の場合 次のようなコードを用意した.どちらも0から9までの自然数の2乗のリストを返す. 初めに逆アセンブルされたバイトコードを出力し,次に timeit

    Python の map とfor内包表記(リスト内包表記)は結局どっちが速い? - 私が歌川です
    peketamin
    peketamin 2017/03/10
  • 1