概要 よく使うウィンドウ処理の種類をユースケースとともにまとめます。 ウィンドウ処理 ウィンドウとは集計範囲のことであり、その範囲をどう捉えるか色々な方法があります。 グローバルウィンドウ 一番シンプルな、ウィンドウの区切りがなくすべてのデータ…
背景 Go 1.18からジェネリクスが導入されました。 とはいえ具体的にどういう時に使えば良いの?と疑問に思う人も多いと思うので、ユースケースの例をいくつか挙げてみます。 環境 Go v1.23.0 ユースケース ユースケースを挙げていきます。 コレクション操作 …
背景 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.…
概要 データモデリングをする際に、エンジニアは次のことに注意しなくてはいけません。 パラメータの順序 パラメータを組み合わせの意味 一部のパラメータの値を有限集合にする これらを解決する手法として、関数型プログラミングでは代数的データ型がありま…
概要 GoogleCloudのIAMにおいて、ユーザやサービスアカウントの権限の棚卸しをする際に、とあるIAMパーミッションがどのロール・ユーザ(メンバー)に含まれるか調べる方法です。 事前に以下を知っておくとイメージが付きやすいです。 christina04.hatenablo…
背景 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のテストを書いていると大半のフィールドは検査したいけれど 自動生成しているUUIDのようにランダムになる部分 UpdatedAt, CreatedAtのように時刻のずれが影響する部分 を対象外としたいケースが出てきます。 単純に考えると以下のような方法が浮かび…
概要 JWS(JWT系アクセストークンやAppleのレシートなど)の中身をサクッと見たいけれど、Web上のサービスを使うとログに残ったりして情報漏洩のリスクがあるのでローカルでデコードしたい場合の手順です。 環境 macOS 14.5 python 3.9.16 ダミーデータ eyJh…
背景 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の区別がごっちゃになることがあるのでメモします。 違い 仕様上の違い alt else if および else を設定できる。 opt else if および else が設定できない。
背景 僕は通常Todoistでタスク管理をしていますが、小さな作業はThino(旧Memos)経由でデイリーログにチェックボックスとして追加します。 例えば「後で読む」みたいなやつです。 しかしながらその日中に終わらなかったタスクは忘れ去られてしまいがちです…
概要 自分がSlackアプリで開発する時によく参照するものをまとめました。 メッセージ 改行 https://api.slack.com/reference/surfaces/formatting#line-breaks コード こんにちは\nご機嫌いかが 結果 こんにちは ご機嫌いかが
概要 コンテナのポータビリティのため、設定値を環境変数で管理することは一般的ですが、 細かいパラメータを一括で管理したい 改行を含むが、base64エンコードせずそのままの方が視認性が高く運用しやすいデータがある PEM、PGPの公開鍵など といった際にYA…
背景 slack botが投稿するメッセージによって伝えたい内容が異なるため、アイコン(アバター)をそれぞれ変えたい けれどslackアプリはたくさん管理するのは大変 という状況の時に、1つのslackアプリでもメッセージ投稿でアイコンを変更する方法について紹…
概要 CELは標準的な演算子や関数に加え、独自のカスタム関数を定義して機能を拡張することが可能です。 今回はカスタム関数を使ってみる際に必要な前提知識を踏まえながらサンプルコードを紹介します。 環境 go v1.22.1 cel-go v0.20.1 カスタム関数の作り方…
概要 CELでは評価式で扱う変数をEnvironment内で定義しますが、既存のデータモデルを使いたい場合は 同じ定義を都度作らないといけない 変更があった際の追従漏れが発生する といった手間が発生してしまいます。 しかしそのデータモデルがprotobufで定義され…
概要 CELのキーコンセプトでは Control PlaneでCEL式をParse & Checkし、生成されたASTを保存 Data Planeで保存したASTを読み取り、インプット値を評価する と説明されていました。 主に管理ツール等で前者のControl Planeを実装し、オペレーターに自由に評…
概要 CEL(Common Expression Language)とは、Google によって開発された軽量で高速な式評価言語です。 そのシンプルさと効率性から、セキュリティポリシー、リソースフィルタリング、データ検証などに使われます。 例えばプロダクションでは以下のような利用…
概要 LLMにおけるプロンプトの構成要素を理解して扱うことで 期待通りの回答を得られる(精度が高くなる) なぜTemplateはこの書き方をするのかが分かる なぜagent_scratchpadのような変数がいるのかが分かる といったようになります。 プロンプト 構成要素 …
概要 LlamaIndexを使うと非常に簡単にRAG(Retrieval-Augmented Generation)を使った検索システムを作ることができます。 今回はLLMにない情報(PDF)をベクトル化して検索できる方法を紹介します。 環境 python 3.11.8 streamlit 1.31.1 llama-index 0.10.14…
概要 PythonはGoと違ってライブラリのdeprecatedや破壊的変更が多いため、環境やライブラリバージョンの固定が非常に重要です。 Dev Containers poetry 仮想環境(venvなど、今回はpoetryのvirtualenv) を使うことで、それらを固定してチーム内で安定した開発…
概要 GKE Ingressを使うとGCE LBのヘルスチェックが自動的に作成されますが、一定のルールがあります。 これらを理解していないと期待しないヘルスチェックが作成され、疎通ができなかったりするのでまとめておきます。 生成ルール GKE Ingressは次の流れで…
背景 Function callingでJSONを定義する際はJSON Schemaを用いますが、JSON Schemaは覚えることが多く不慣れだと非常に扱いにくいです。 pydnaticを使うとクラス定義から簡単にJSON Schemaを生成できるので、PythonでJSON Schemaを利用する際はおすすめです…
背景 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の翻訳の方へ渡されてしまう問題に悩まされてました。 今は有料版なのでコピーしたものが学習データに使われることはありませんが、偶にDeepL…
概要 WebコンソールのChatGPTでは入力したデータを学習させない方法として2種類のやり方が提供されています。 設定からChatの履歴を保持しないようにする フォームでオプトアウト申請を行う 前者は簡単にできる一方で、Chatの履歴が使えず不便になります。 …
概要 christina04.hatenablog.com ではGitHubのIDを持っていればログインできる認証機能を追加しました。 今回は「そのGitHubアカウントが特定のGitHub Organizationに所属しているかどうか」を使ってページを閲覧できるかどうか認可する仕組みを導入します…
概要 Backstageに認証機能を導入します。 Backstageでは様々な認証方法を提供していますが、今回はGitHubを使った認証を実装します。 環境 backstage v1.21.1 認証 GitHub Authentication Provider | Backstage Software Catalog and Developer Platform に…
概要 年の瀬なので2023年に買ってよかったものを挙げてきます。 SESAMEタッチ & オープンセンサー 2021年買ってよかったものリスト - Carpe Diem でも紹介したスマートロックで 指紋認証 ICカード認証 に対応したデバイスがリリースされました。 【New】SESA…
概要 前回紹介したBackstageをローカルで使うための説明です。 開発者ポータル Backstage とは - Carpe Diem 環境 backstage v1.21.1 yarn v1.22.19 Get Started とりあえず起動してみる アプリケーション作成 以下のコマンドでアプリケーションを作成できま…