タグ

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

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

    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() } // トー

    有効期限を過ぎても消えないインメモリキャッシュの謎 - 私が歌川です
    rryu
    rryu 2023/02/25
    Goのtimeパッケージはおそらく閏秒でも問題ないように時刻の差分をmonotonic clockを使って求めるように気を利かせているが、monotonic clockはOSが更新しているのでスリープすると実時間と差ができる罠ができてしまったという
  • 味玉のレシピをMakefileで記述する - 私が歌川です

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

    味玉のレシピをMakefileで記述する - 私が歌川です
    rryu
    rryu 2022/06/23
    ターゲットは「ゆで卵」や「漬け込み液」みたいに名詞であるべきな感じがする。
  • CPANに上がっているモジュールが対応しているPerlの最小バージョンの統計情報 - 私が歌川です

    CPANに上がっているモジュールが対応しているPerlの最小バージョンの傾向が知りたくなったので、調査することにした。直感では、最低でもPerl 5.8に対応しているモジュールが最も多いと思っていた。 情報を取得する metacpanにはAPIがある*1ので、これを叩いて情報を取得する。 以下のコマンドで、この記事を書き始めた日までの1年間 (2020/5/4 - 2021/5/4) のリリースのうち、最新バージョンのリリースについて検索した。 $ curl -XPOST https://fastapi.metacpan.org/v1/release/_search -d @query.json > result.json query.json にはこういうクエリを書いた。Elasticsearchのクエリは普段あまり手書きしないのでちょっと苦労した。 { "query": { "bool

    CPANに上がっているモジュールが対応しているPerlの最小バージョンの統計情報 - 私が歌川です
    rryu
    rryu 2021/05/05
    おそらく最新のバージョンだと動かないに対応した結果だと思うのだが、微妙な書き方が結構構文変更にひっかるという。
  • 1