Unyablog.

のにれんのブログ

# type: ignore じゃなくて typing.cast を使おう

Python で型アノテーションを使うとき、なんだかんだ # type: ignore したいときがあると思う。フィールドの全部が optional だけど、実際にはこのコードパスなら絶対 optional じゃない、とか。 API まわり触ってると割とよくある。 if foo is None とか as…

devcontainer で ZSH のプロンプトが root 用になってしまう対策

Zsh

自分は ZSH のプロンプトを以下のように設定して、 現在 root user かどうかを判別できるようにしている。 PROMPT='${prompt_header} %~ %(!. !root! #.>) ' ! は Shell が権限を持ってる時に true になり、その時は ! root ! # が、そうでない時は > を出す…

Homebrew (Linux) を専用ユーザーで使う

Homebrew は便利だが、通常ログインしているユーザーでインストールするのでカジュアルに環境を変更できてしまうのがよくないと思っている。 (最近ではオプションが必要になったものの) pip install とかすると break system package してしまうし、セキュ…

Podman で devcontainer の起動が遅い対策

Devcontainer を rootless 系のコンテナツールで利用するには podman がおすすめ(Docker rootless だと userns=keep-id がないのでコンテナ内から見たファイルが root 所有になってしまう)。 以前は userns=keep-id などをわざわざ runArgs に追加しないと…

Cloud Run で IAP が使いやすくなっていた

Cloud Run で内部ユーザーを認証する際は IAP を使うが、 今までは LB が必要だった。今月のアップデートで LB がなくても Cloud Run で IAP が使えるようになったので便利という話。 まえがき Cloud Run での内部ユーザー認証・認可 Cloud Run と IAP の組…

Power Automate for Desktop を起動するショートカットが Task Scheduler 経由だと動かない対策

Power Automate for Desktop ではショートカットキーを設定することができるので、そのショートカットキーを押すスクリプトを Task Scheduler を経由して実行することで定期実行ができる。 「Power Automate for Desktop Task scheduler」とかで検索すると方…

wsl.exe の出力を UTF-8 にして Powershell の Select-String や -match が動くようにする

Powershell で wsl.exe の出力をそのまま操作しようとするとうまく動かない。 PS C:\Windows\System32> wsl.exe --list --running | Select-String "U" Windows Subsystem for Linux Distributions: Ubuntu (Default) PS C:\Windows\System32> wsl.exe --lis…

シームレスな植生図を作った

Map

日本の植生図を見るための Web ビューワー、「シームレス植生図」を作って公開した。 シームレス植生図: https://vg67.map.nonylene.net/ 植生図の楽しさ 植生図というのは、それぞれの土地の植生(生えている植物の集団)を分類して地図に表示したもの。 日…

ISUCON 14: ClickHouse と OpenTelemetry で ISUCON の計測環境を作ったら快適だった

ISUCON 14 に id:utgwkk, id:wass80 と「ミレニアムサイエンススクール」というチーム名で参加した。 結果は 28875 点で 22 位!去年は fail して最下位だったので反省を活かすことができたのでは? 一昨年に Kibana / Elasticsearch / Filebeat で解析環境…

kubectl の wrapper を作る際の tips (ZSH 補完など)

kubectl に自動で namespaceや context を付与するような wrapper を作るとする。 そんなコマンドのインターフェースとして、 $ kubewrapper [...wrapper flags] [kubectl args / flags] (例) $ kubewrapper -p staging describe pod ... とすると $ kubec…

WSL2 を Windows 11 で起動させ続ける

この方法は使えなくなりました Windows 11 からかはわからないが、WSL2 がしばらく放置していると自動でシャットダウンされるようになった。 ターミナルや VS code を全て閉じるとシャットダウンされる傾向にあるようで、例えば ssh-agent や systemd の ser…

git-browse-remote の python 版を作った

git-browse-remote を長らく使っていたが、最近の Ruby では動かなくなっており、インストール後に手で該当箇所を修正してしのいでいた。 ただ、もう Ruby / Gem はこれにしか使ってなかったというのがあり、環境を新しくした機会に Python で書き直した。 g…

Pulumi で Google Cloud と k8s のリソースを管理するようにした

プライベートで Google Cloud を使っていて、今まではあまり IaC は使わずポチポチでやっていた。GKE ぐらいしかまともに使ってるリソースがなかったのでそれでよかったけど、最近 VPS をやめて各種クラウドに寄せるようにしており、クラウドのリソースが増…

検索システムのフロントを SSR・Remix で作り直した

かなり昔に Elasticsearch ベースの検索システム(Heineken)を作っていた。 Elasticsearch で部内 Wiki 検索高速化 - Speaker Deck 特に更新せず数年動かしていたのだけど、サーバーの置き換えに伴って Kubernetes に置きたいよねという話になり、ついでに …

ISUCON 13 に参加した

去年11月、Smiling Face with Halo というチームで ISUCON 13 に参加した。チームメンバーはいつもの id:utgwkk と id:wass80 。 スコアは 0! よって最下位!! 直前には 73k くらい出てはいた。 ちょっと遅くなってしまったけど、個人的に楽しい問題だったし…

サポート外のリソースを含んだ Helm release を無理やり削除した

久々に helmfile sync を行った結果、PodSecurityPolicy リソースなんか知らないという理由で Upgrade に失敗した。 $ helmfile dep && helmfile sync ... Error: UPGRADE FAILED: resource mapping not found for name: "descheduler" namespace: "" from "…

curl の trace / trace-ascii が便利だった

curl で通信の内容を見ながら詳細なデバッグをしたいとき、 tcpdump や Wireshark でパケットキャプチャを行うのが定番だと思う。ただ、通信が多い環境だと実際にデバッグしたい通信を絞り込むのが面倒だし、TLS だと暗号化されていてさらに面倒。 curl のオ…

eBPF の tc を使ってパケットを触ってみる開発入門資料

eBPF の tc (classifier) を使ってパケットを触ってみる話をしたので、資料を貼ります。 docs.google.com eBPF は一度慣れるとかなり便利な仕組みで、見るべき場所が分かっていればそれなりに気軽に使うことができる。ただ、ドキュメントがだいぶ整備されて…

Renovate で Flux 配下の Helm Chart をアップデートする

この記事は KMC アドベントカレンダー 14 日目の記事です。 adventar.org 前回の記事は id:crashrt さんでした。自分も百舌谷さん好きです! crashrt.hatenablog.com 背景 現在、Kubernetes クラスタに入れる Manifest を Flux (Fluxcd) を使って管理してい…

dex と oauth2-proxy と ingress-nginx で OIDC ID token を取得して kubernetes-dashboad にログインする

Kubernetes では kubernetes-dashboard という各種リソースを見るためのダッシュボードが提供されている。 ブラウザ上で色々確認できるので便利なのだが、ログイン時は下のように自身の token か kubeconfig ファイルをアップロードする必要がある。 Kuberne…

Filebeat の Nginx module でアクセス先パスを正規化する

今回の ISUCON では Filebeat を使って Nginx のログを Elasticsearch に放り込み、 Kibana ダッシュボードで表示していた。 nonylene.hatenablog.jp なかなか役に立ってよかったものの、 /user/:userID/home のようなパスだと userID に様々な値が入ってし…

ISUCON12 本選に出場した (:old_noto_innocent: Team)

ISUCON 12 本選に出場した。結果は 167492 点で 7 位(結果修正後)。そこそこかな? isucon.net アプリケーション周りは utgw の記事を見ると分かりやすいです blog.utgw.net 予選の記事は↓。ブログ賞受賞とのことで、個人スポンサーグッズをもらえるらしい…

pt-query-digest の出力結果を Filebeat を使って Elasticsearch に集約し Kibana で出す

今年の ISUCON では Elastic Stack を使って MySQL のスローログを Kibana で可視化したが、いくつか課題があった。 パラメーターによってクエリが分散し、ボトルネックが分かりづらい MySQL スローログは生のクエリが記載されていて、Filebeat の MySQL モ…

ISUCON 予選突破のために Elastic Stack と GCP で分析環境を整えた (:old_noto_innocent: Team)

ISUCON 12 予選にいつもの id:utgwkk, id:wass80 と :old_noto_innocent: チームで参戦した*1。 結果は 50696 点で本選出場! ここ数回と同様、自分はインフラと分析・観測を担当していた。ただ、毎年似たようなことをやっていてあまり貢献できていないなあ…

Elasticsearch の Docker container でパスワードを指定する

環境: Docker の elasticsaerch image 8.3.2 久々に Elasticsearch を Docker で立ち上げると、初期状態でセキュリティ機能が有効になっていて、そのまま curl しても認証が通らず API が打てなかった。 $ curl -k https://localhost:9200/ {"error":{"root_…

pip install --user を config でデフォルトにする

最近(2年以上前)、pip がデフォルトで --user でインストールするようになった。 github.com ただ、この機能が有効になるにはいくつかの条件がある。 The user has not explicitly specified otherwise in the command line, environment variable, or a c…

GKE の Preemptible VM を Spot VM にした

プライベートで GKE を Preemptible VM ベースで運用していた。だいぶ昔に Preemptible VM が Spot VM に変わるよという通知が GCP から来ていて 値段変わらないし 放置していたのだが、GKE のバージョンを上げるついでに Spot VM に変更した。 cloud.google…

TypeScript 型わくわく日記

TypeScript でオブジェクトのバリデータを作っている。それぞれの値ごとのバリデータは値の特性ごとに様々な関数がある((value: string) => Error[] のような形)。 時折 Optional な値があるものの、バリデータ自体は non-null な値のバリデーションに専念…

AlertManager: Slack の Incoming webhook URL が Kubernetes の Secret で扱いやすくなっていた

Prometheus の AlertManager は Slack などに通知を送る重要なコンポーネントである。 当然 Slack の Webhook URL といった Credential を設定ファイルに書く必要があるのだけど、AlertManager は強い意志で環境変数や複数設定ファイルに対応していないので…

Git でブランチがリモートリポジトリの HEAD から派生しているかどうかを確認する

Git

Git でトピックブランチを切るときに、元ブランチで git pull し忘れて古いコミットから生やしてしまうときがある。 最新の変更を認識できなかったり、後々コンフリクトが起きたりと不便なことがままあるので、 Commit 前に HEAD がリモートリポジトリの HEA…