Carpe Diem

備忘録

2025-01-01から1年間の記事一覧

2025年買ってよかったものリスト

概要 年の瀬なので2025年に買ってよかったものを挙げてきます。 Osmo Pocket 3 DJI vlogカメラ Osmo Pocket 3 1インチ CMOS 4K 120fps 動画対応 Vlog用デジカメ 3軸スタビライザー ジンバルカメラ アクションカメラ 高速フォーカス 顔 被写体トラッキング 回…

ネガティブキャッシュによるデータベース負荷対策

概要 通常データベースへの負荷を軽減するためにキャッシュレイヤを導入します。 しかしよくあるのは正常系のみキャッシュしており、 ゲームのイベント前でまだ404 ゲームのイベント期間が終了して404 動画の配信前でまだ404 動画の配信期間が終了して404 と…

キャッシュアーキテクチャパターン

概要 キャッシュにおけるアーキテクチャパターンをまとめておきます。 表形式にすると次のようになります。 パターン 読み取り速度 書き込み速度 データ整合性 主な用途 Cache Aside 高 中(キャッシュ層がオーバーヘッドにならない) 中(期限切れ考慮) 一般的…

Bitwardenでsshキーを管理する(2025年最新版)

背景 以前次のようにライブラリを利用して、Bitwarden上でsshキーを管理するやり方を紹介しました。 christina04.hatenablog.com 2025年1月からに公式もsshキーをサポートしていたので、公式のやり方を紹介します。 環境 macOS(M2) v15.7.2 Bitwardenデスク…

bash-completion@2 の設定ファイルの置き方

背景 ツールの補完を使う上でcompletionファイルの管理が必要です。 ただ生成AIやネット上ではbash-completionのv1なのかv2なのか情報が混ざっており、よく分からないことがあったので自分で整理することにしました。 環境 macOS v15.7.2 bash v5.3.8 bash_c…

Claude Codeの権限設定ルール

背景 Claude Codeの権限の設定は自動化による効率化とリスクのガードレールを設計する上で非常に重要です。 { "permissions": { "allow": [ "Bash(find:*)", "Bash(grep:*)", "Bash(ls:*)", "Bash(cat:*)", "Read(~/.go/src)" ], "deny": [ "Read(**/*env*)"…

glob によるパターンマッチング

概要 glob はファイルシステムディレクトリ内の名前(パスなど)に対するパターンマッチングです。 身近な例で言うと.gitignoreなどがglobを使っています。 最近だとClaude Codeの権限管理であるRead()もこれを利用しています。 globは正規表現とごっちゃに…

Notionの議事録の主要トピックをまとめる

概要 Notionでデータベースに議事録を残す事はよくありますが、どこにどんな内容が書いてあったかを一覧の状態で見たいことがあります。 そこでNotion AIを使って一覧にできるようにする方法を紹介します。 方法 データベースを作成してる前提で、まずはプロ…

Data Clean Room によるプライバシー保護と効果測定の両立

課題 従来広告の効果測定は、主にCookieやIPを使って以下の様にデータを突合していました。 しかしながら最近はプライバシー保護のためGDPRなどによってCookieレスが進んだり、これまでメディア(媒体)から連携されていたIPも連携されないような流れが出て…

proto-gen-validate を使う

概要 HTTPやgRPCなどのAPIでvalidationを実装する際、次のような課題に直面することがよくあります。 validationの実装を忘れる 正常系だけを考え、異常系のイメージがない validationがどこに実装されているか分からない クライアント側との認識がずれたり…

screenshot-to-yoink でツールチップがスクリーンショットに含まれない

背景 以前以下の対応を行いましたが、 christina04.hatenablog.com ツールチップがスクショできないという問題に遭遇しました。 期待する挙動は以下なのですが、 実際はこのようにツールチップが消えてしまいます。 そのため別の方法で実現する必要がありま…

PreparedStatement とクエリキャッシュ

概要 PreparedStatement はSQLを実行する際に「SQL文の構造」と「パラメータ」を分離して扱える仕組みです。 それによって パフォーマンスの向上 セキュリティの向上 コードの可読性・保守性の向上 を図ることが可能です。 今回はその理由を説明します。 Pre…

データベースのコネクションプーリング

概要 データベースを扱うと、パフォーマンス向上を考えた際に必ず出てくるコネクションプーリングについてです。 今回はコネクションプーリングの種類とその特徴についてと、各データベースの特性に合わせてどんな選択を取るのが良いかを説明します。 コネク…

Bloom Filter の仕組み

背景 christina04.hatenablog.com で紹介したアーキテクチャの中にBloom Filterというものがありました。 今回はこちらの仕組みを説明します。 Bloom Filterとは Bloom Filterは 偽陽性(無いのにあると回答)はあるが、偽陰性(あるのに無いと回答)はない …

LSM treeを図解する

概要 LSMツリーを理解しやすくするためにアーキテクチャ、Write/Readフロー、コンパクションなどを図解します。 LSMツリーとは LSMツリー(Log-Structured Merge Tree)は、データベースやストレージで大量の書き込みを高速に処理するための仕組みです。 ア…

AIと人間の読みやすさの違い

概要 最近は生成AIでドキュメントを書く人が増えています。 一方で「AIが書いた文は長くて読みにくい」と感じることがあります。 ここではそれについて以下の視点から説明します。 AI向け・人間向けドキュメントの違い 図とチャンク 図があると人間にとって…

Slack でファイルのダウンロードができない状態を解決する

概要 Slack上でダウンロードしようとしても、↓の状態でずっとローディング状態で固まる問題に遭遇しました。 なのでChrome上でSlackを開き直してダウンロードする、という手間をかけていました。 今回はこの問題の解決方法を紹介します。 環境 macOS 15.5 Sl…

osascript で通知が表示されない状態を解決する

Mac

概要 ターミナル上で osascript が使えなかった場合の対処方法です。 $ osascript -e 'display notification "Debug" with title "osascript"' としても無反応で、 $ osascript -e 'display notification "Debug" with title "osascript"' 2>&1 ; echo $? 0 …

Cursor上でClaude Codeのアイコンが出ない

背景 CursorとClaude Codeを連携しようとしたのですが、 このように連携されてはいるはずなのに、Claude Codeのマークが出ずチャットスタイルで連携することができませんでした。 環境 macOS v15.5 Cursor v1.1.6 Claude Code v1.0.35

protobuf のバージョン管理スキームを理解する

背景 protobufのバージョンを見ると、 3.29.5 6.31.1 のような小さなケースと、 29.5 31.1 のような非常に大きなものが分散しています。 https://github.com/protocolbuffers/protobuf/tags どのバージョンを使えば良いのか理解できるよう説明します。

MCPアーキテクチャパターン

背景 MCP(Model Context Protocol)を使う上で、ローカルMCPサーバやリモートMCPサーバ、更にはそれらを集中管理するゲートウェイ的なサービスもあったりと複雑だと感じたので、それぞれのパターンを一度洗い出してみました。 事前知識 MCP(Model Context Pro…

Istioがあるときのヘルスチェックフロー

概要 Istioを使ってサイドカーを利用している場合、ヘルスチェックの仕組みが通常のKubernetesとは異なります。 一見するとよく分からない仕組みになっているので図を用いながら説明します。 環境 Kubernetes 1.31.7 Istio 1.20.8 ヘルスチェックフロー 以下…

Server-Sent Eventsを使ってみる

Go

概要 ChatGPTでは以下のGIFのように、文字列が少しずつ出てくるUXになっています。 このUXの実現方法として Server-Sent Events というものがあるので、それに必要な知識や使い方を説明します。 環境 Go 1.24.3 Server-Sent Events Server-Sent Eventsとは S…

OAuth 2.0 for Native Apps

背景 以前紹介したように、モバイルアプリにログインする際にOAuth 2.0の認可フレームワークを使ったものがあります。 christina04.hatenablog.com これはRFC 6749のOAuth 2.0 Authorization Framework を使ったものですが、この中で曖昧だった(それによっ…

Cloudflare の管理を Terraform に移行する

概要 手動運用している Cloudflare の管理を Terraform に移行する手順についてです。 環境 terraform 1.11 cloudflare provider v4.52.0 cf-terraforming v0.23.3 前提知識 APIキーの種類と使い分け Cloudflare には Global API Key(legacy) と API Token …

OpenFeature で Evaluation Context を使う

概要 Feature Flagを使いたいモチベーションとして、 Fractional Evaluation で一部のユーザにだけロールアウトしたい 年齢・性別によって表示させる物を変更したい のようなターゲティング機能があります。 OpenFeatureでターゲティングを実現する際には Ev…

OpenFeature の Provider を使ってみる

概要 OpenFeature の Provider の使い方を以下のチュートリアルに沿って実現してみます。 openfeature.dev Provider には flagd を使います。 環境 Go v1.24.0 open-feature/go-sdk v1.14.1 flagd v0.11.1

OpenFeature の構成要素やデータモデル

概要 OpenFeatureはフィーチャーフラグマネジメントにおける標準規格として生まれました。 openfeature.dev 今回はそのOpenFeatureについて紹介します。 なぜ生まれたか? 従来 通常フィーチャーフラグ管理システムはこのようにアプリケーションと密に結合し…

OpenFGA でAPIのアクセス制御を実装する

概要 前回 christina04.hatenablog.com でOpenFGAについて紹介しました。 今回は実際にアプリケーションでどのように実装するかを説明します。 環境 OpenFGA Server 1.8.4 Go 1.24.0 全体イメージ アプリケーションサーバ、認証サーバ、認可サーバ(OpenFGA…

OpenFGAでアクセス制御を柔軟に

概要 OpenFGAという認可システムでは、ReBACという認可モデルが採用されています。 ベースとなっているのはZanzibarというGoogle Driveなどので使われているグローバル認証システムで、Google Driveを使ったことがある人はご存じの通り非常に細かい粒度での…