Carpe Diem

備忘録

ウィンドウ処理の種類

概要 よく使うウィンドウ処理の種類をユースケースとともにまとめます。 ウィンドウ処理 ウィンドウとは集計範囲のことであり、その範囲をどう捉えるか色々な方法があります。 グローバルウィンドウ 一番シンプルな、ウィンドウの区切りがなくすべてのデータ…

Goのジェネリクスのユースケース

Go

背景 Go 1.18からジェネリクスが導入されました。 とはいえ具体的にどういう時に使えば良いの?と疑問に思う人も多いと思うので、ユースケースの例をいくつか挙げてみます。 環境 Go v1.23.0 ユースケース ユースケースを挙げていきます。 コレクション操作 …

go get でアップデートすると、なぜか別のライブラリがダウングレードする

Go

背景 go get でアップデートすると、なぜか別のライブラリがダウングレードする不思議な現象に出会いました。 $ go get github.com/userA/hoge go: downgraded github.com/userB/foo v1.2.1 => v1.0.0 go: downgraded github.com/userB/bar v1.10.0 => v1.1.…

代数的データ型を用いたデータモデリング

概要 データモデリングをする際に、エンジニアは次のことに注意しなくてはいけません。 パラメータの順序 パラメータを組み合わせの意味 一部のパラメータの値を有限集合にする これらを解決する手法として、関数型プログラミングでは代数的データ型がありま…

あるIAMパーミッションがどのロール・ユーザに含まれるか調べる方法

概要 GoogleCloudのIAMにおいて、ユーザやサービスアカウントの権限の棚卸しをする際に、とあるIAMパーミッションがどのロール・ユーザ(メンバー)に含まれるか調べる方法です。 事前に以下を知っておくとイメージが付きやすいです。 christina04.hatenablo…

Bazel + CEL でgo_default_libraryが必要になる問題の対処方法

背景 Bazelで依存関係を管理している環境で、celライブラリを導入したところ次のようなエラーが発生しました。 '@com_github_google_cel_go//cel:cel': target 'cel' not declared in package 'cel' defined by /external/com_github_google_cel_go/cel/BUIL…

Goのテストで一部のフィールドを対象外にしたい

Go

背景 Goのテストを書いていると大半のフィールドは検査したいけれど 自動生成しているUUIDのようにランダムになる部分 UpdatedAt, CreatedAtのように時刻のずれが影響する部分 を対象外としたいケースが出てきます。 単純に考えると以下のような方法が浮かび…

JWSをローカルでデコードする方法

概要 JWS(JWT系アクセストークンやAppleのレシートなど)の中身をサクッと見たいけれど、Web上のサービスを使うとログに残ったりして情報漏洩のリスクがあるのでローカルでデコードしたい場合の手順です。 環境 macOS 14.5 python 3.9.16 ダミーデータ eyJh…

Bazelで他パッケージのテストファイルを参照したい

背景 Bazelでは次のようなディレクトリ構成で、 . ├── package_a │ ├── a.go │ ├── a_test.go │ └── test.yaml └── package_b ├── b.go └── b_test.go パッケージAのファイルtest.yamlをパッケージBのテストで参照したい時に、 go_test( name = "b_test", sr…

PlantUMLのaltとoptの区別

UML

背景 たまにPlantUMLでシーケンス図を書くと、altとoptの区別がごっちゃになることがあるのでメモします。 違い 仕様上の違い alt else if および else を設定できる。 opt else if および else が設定できない。

Obsidianでチェックボックスを一覧化したい

背景 僕は通常Todoistでタスク管理をしていますが、小さな作業はThino(旧Memos)経由でデイリーログにチェックボックスとして追加します。 例えば「後で読む」みたいなやつです。 しかしながらその日中に終わらなかったタスクは忘れ去られてしまいがちです…

Slackアプリで開発する時によく参照するもの

概要 自分がSlackアプリで開発する時によく参照するものをまとめました。 メッセージ 改行 https://api.slack.com/reference/surfaces/formatting#line-breaks コード こんにちは\nご機嫌いかが 結果 こんにちは ご機嫌いかが

ConfigMapでYAMLファイルを管理する

概要 コンテナのポータビリティのため、設定値を環境変数で管理することは一般的ですが、 細かいパラメータを一括で管理したい 改行を含むが、base64エンコードせずそのままの方が視認性が高く運用しやすいデータがある PEM、PGPの公開鍵など といった際にYA…

Slack Botでアイコンをメッセージごとに変更したい

背景 slack botが投稿するメッセージによって伝えたい内容が異なるため、アイコン(アバター)をそれぞれ変えたい けれどslackアプリはたくさん管理するのは大変 という状況の時に、1つのslackアプリでもメッセージ投稿でアイコンを変更する方法について紹…

CELでカスタム関数を使う

CEL

概要 CELは標準的な演算子や関数に加え、独自のカスタム関数を定義して機能を拡張することが可能です。 今回はカスタム関数を使ってみる際に必要な前提知識を踏まえながらサンプルコードを紹介します。 環境 go v1.22.1 cel-go v0.20.1 カスタム関数の作り方…

CELで独自のオブジェクトをprotobufを使って変数定義する

概要 CELでは評価式で扱う変数をEnvironment内で定義しますが、既存のデータモデルを使いたい場合は 同じ定義を都度作らないといけない 変更があった際の追従漏れが発生する といった手間が発生してしまいます。 しかしそのデータモデルがprotobufで定義され…

CELでASTを外部に保存する

CEL

概要 CELのキーコンセプトでは Control PlaneでCEL式をParse & Checkし、生成されたASTを保存 Data Planeで保存したASTを読み取り、インプット値を評価する と説明されていました。 主に管理ツール等で前者のControl Planeを実装し、オペレーターに自由に評…

CEL(Common Expression Language)

CEL

概要 CEL(Common Expression Language)とは、Google によって開発された軽量で高速な式評価言語です。 そのシンプルさと効率性から、セキュリティポリシー、リソースフィルタリング、データ検証などに使われます。 例えばプロダクションでは以下のような利用…

LLMのプロンプト

概要 LLMにおけるプロンプトの構成要素を理解して扱うことで 期待通りの回答を得られる(精度が高くなる) なぜTemplateはこの書き方をするのかが分かる なぜagent_scratchpadのような変数がいるのかが分かる といったようになります。 プロンプト 構成要素 …

LlamaIndexでPDFに対してベクトル検索を行う

概要 LlamaIndexを使うと非常に簡単にRAG(Retrieval-Augmented Generation)を使った検索システムを作ることができます。 今回はLLMにない情報(PDF)をベクトル化して検索できる方法を紹介します。 環境 python 3.11.8 streamlit 1.31.1 llama-index 0.10.14…

VS CodeのPython環境をDev Containersで構築する

概要 PythonはGoと違ってライブラリのdeprecatedや破壊的変更が多いため、環境やライブラリバージョンの固定が非常に重要です。 Dev Containers poetry 仮想環境(venvなど、今回はpoetryのvirtualenv) を使うことで、それらを固定してチーム内で安定した開発…

GKE Ingressのヘルスチェック生成ルール

概要 GKE Ingressを使うとGCE LBのヘルスチェックが自動的に作成されますが、一定のルールがあります。 これらを理解していないと期待しないヘルスチェックが作成され、疎通ができなかったりするのでまとめておきます。 生成ルール GKE Ingressは次の流れで…

Function callingのJSON Schemaをpydanticで生成する

背景 Function callingでJSONを定義する際はJSON Schemaを用いますが、JSON Schemaは覚えることが多く不慣れだと非常に扱いにくいです。 pydnaticを使うとクラス定義から簡単にJSON Schemaを生成できるので、PythonでJSON Schemaを利用する際はおすすめです…

pyenvからインストールする際にSSLがないというエラー

背景 pyenvでpython 3.10.13をインストールしようとしたところ、次のようなエラーを受けました。 $ pyenv install 3.10.13 python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Downloading Python-3.10.13.tar.xz... ->…

tmuxでコピーモードを使った時にDeepLに渡されてしまう

背景 tmuxでコピーモードで範囲選択によるコピー機能をよく使っていますが、そこでコピーしたものがそのままDeepLの翻訳の方へ渡されてしまう問題に悩まされてました。 今は有料版なのでコピーしたものが学習データに使われることはありませんが、偶にDeepL…

ChatGPTのオプトアウト申請方法(2023/10以降版)

概要 WebコンソールのChatGPTでは入力したデータを学習させない方法として2種類のやり方が提供されています。 設定からChatの履歴を保持しないようにする フォームでオプトアウト申請を行う 前者は簡単にできる一方で、Chatの履歴が使えず不便になります。 …

Backstage でGitHub Orgを用いた認可を導入する

概要 christina04.hatenablog.com ではGitHubのIDを持っていればログインできる認証機能を追加しました。 今回は「そのGitHubアカウントが特定のGitHub Organizationに所属しているかどうか」を使ってページを閲覧できるかどうか認可する仕組みを導入します…

Backstage でGitHub認証を導入する

概要 Backstageに認証機能を導入します。 Backstageでは様々な認証方法を提供していますが、今回はGitHubを使った認証を実装します。 環境 backstage v1.21.1 認証 GitHub Authentication Provider | Backstage Software Catalog and Developer Platform に…

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

概要 年の瀬なので2023年に買ってよかったものを挙げてきます。 SESAMEタッチ & オープンセンサー 2021年買ってよかったものリスト - Carpe Diem でも紹介したスマートロックで 指紋認証 ICカード認証 に対応したデバイスがリリースされました。 【New】SESA…

Backstage をローカルで動かす

概要 前回紹介したBackstageをローカルで使うための説明です。 開発者ポータル Backstage とは - Carpe Diem 環境 backstage v1.21.1 yarn v1.22.19 Get Started とりあえず起動してみる アプリケーション作成 以下のコマンドでアプリケーションを作成できま…