なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Meilisearch でランキング生成アルゴリズムをいじりたい

プライベートのサービスでは、手頃な (かつ安く運用できる) 全文検索エンジンとして、 Meilisearch を使っています。 www.meilisearch.com わたしの Oracle の安いインスタンスでも (インデックス数が少ないのが大部分の理由ではあるとは思いつつ) 高速に動…

HonoX で MDX コンテンツでも Island コンポーネントを使いたい

HonoX、便利ですよね。 Next.js ほど巨大なフレームワークを使いたくない場面などで、セットアップも簡単、さっと初めてさっとデプロイできるという点で大活躍です。 github.com そんな HonoX ですが、 vite.config.ts に設定を加えることで MDX もルーティ…

Git で歴史ごと複数のリポジトリを1つのリポジトリにまとめたい

Git

例えば Node.js モジュールを書いていて、リポジトリ A と B があったとして、それをモノレポ C としてまとめたかったとします。 そういうときはファイルをコピーして新しいリポジトリに入れる方法もありますが、履歴を引き継いだ状態でやりたくなったので、…

AWS CDK で Lambda を URL 付きのコンテナイメージとしてデプロイしたい

AWS CDK を使って、 AWS Lambda のコンテナイメージを使用した関数 をデプロイしたのでメモしておく。 まずはプロジェクト初期化: $ pnpm install -g aws-cdk $ cdk init app --language typescript 初期化できたら、 lib/xxx-stack.ts を編集。 以下のよう…

Go で map にキーに該当する要素があるかどうか調べたい

Go

Go で map[string]string なディクショナリがあったとして、キー a が存在するかどうか調べたいときのスニペット value, ok := dictionary[key] if ok { // 要素があるよ! } 言語によって、ディクショナリのキーにないものにアクセスするとどうなるのか、が…

Blender Extensions Platform に自作アドオンを対応させよう

Blender は 4.2 から、無料かつ OSS なアドオンであれば、登録・承認をされることで Blender Extensions Platform から簡単にインストールやアップデートができるようになります。 詳しくは3D人さんのブログがわかりやすいです: 3dnchu.com 今回、昔から配…

Cloudflare Images にアップロードした画像を自前のドメインから配信したい

Cloudflare Images を使うことで、ある程度予測可能な金額で、あらかじめ指定したサイズにて最適化された画像を配信することができる (クエリパラメータで制御することもできる)。 www.cloudflare.com 画像は下記のような URL で配信されるが、これを自前の…

Blender 4.1 以降で D&D に対応したい場合は、 FileHandler API を使おう

Blender 4.1 で念願のドラッグ&ドロップを検出する FileHandler API が追加されました。 これによって、例えば *.txt なファイルを 3D View にドロップしたら、なんらかのインポート処理をはしらせる、などと言った事が公式で可能になります。 使い方は公式…

Prisma を Bun (Docker) で使いたいときは

Prisma を Bun (Docker 内) で使いたい場合、 prisma generate が確率的に失敗する。 成功率は 5% くらいで困る。そういうときの解決方法について。 結論としては、 Bun と Node.js 両方が含まれた Docker イメージを使って生成すること: github.com これは…

MySQL で複数のインデックスを明示的に使い分けたい

例えば次のようなテーブルとインデックスがあったとき: CREATE TABLE `CatalystStatus` ( `id` varchar(191) NOT NULL, `body` text NOT NULL, `userId` varchar(191) NOT NULL, `createdAt` datetime(3) NOT NULL DEFAULT current_timestamp(3), `updatedA…

HonoX で TailwindCSS を使おう

HonoX 0.1.19 で外部でビルドされる (ここでは HonoX によって直接ビルドされるのではなく、 Vite や PostCSS を指す)、CSS の差し込みに対応したので、 TailwindCSS のような PostCSS でビルドされてスタイルが決定されるようなスタイリング手法も使える…

Lego で DNS のマニュアル認証が通らない

Lego という Let's Encrypt の証明書を上手いこと取得してくれるツールがある。 基本的には DNS-01 チャレンジを使う場合、対応している DNS プロバイダーであれば環境変数を渡すことで自動化できるのだが、ちょっと手元で証明書欲しいナ~というときは手動 …

HonoX で `app/` ディレクトリ以外でももろもろを動作させたい

素直に app/ でやれば良いのだが、やんごとなき理由で app/ 以外の、例えば src/ や my-worldest-strong-app/ などで開発したいことがある (かもしれない)。 そういうときにやると良いハック。 PR は送るべきか悩んで放置している。 まずは HonoX にパッチを…

WPF で Binding 後に解決されたクラスとプロパティを取得したい

WPF で XAML 側に DataContext や ViewModel を代入した後、実際に Binding で解決された結果を使いたいケースがある (ほんとうに?)。 そういうときに使うテク。 例えば以下のような XAML があったとき:

System.Text.Json でフィールドもシリアライズ・デシリアライズしたい

C#

System.Text.Json は、デフォルトでは下記クラスメンバーのウチ、フィールドはシリアライズ対象とならない。 class ClassA { public int Field; public int Property { get; set; } } var json = JsonSerializer.Serialize(new ClassA { Field = 1, Property…

PowerShell で出力を無に葬り去りたい

PowerShell を使っているとき、例えば New-Item をしたときなど、別に必要ないのに丁寧な出力結果をしてくれることがある。 $ New-Item -ItemType Directory -Path ./dir Directory: C:\Users\natsuneko\dir Mode LastWriteTime Length Name ---- ----------…

Kubernetes で Pod から外部の名前解決ができない

k8s

なぜか Pod 内部から外部、つまりはインターネットへの名前解決が一切できなくなって困っていたのでメモ。 解決方法としては、 Pod を再起動すれば良かった。 $ kubectl -n kube-system rollout restart deployment coredns 参考: dns - Kubernetes: Pods Ca…

Tailscale を使っている状態で k3s クラスタを構築したい

k8s

k3s という軽量 Kubernetes があります。 これを Oracle Cloud 上にある、 Tailscale で接続している Compute Instance に構築しようとしていて、ハマってしまったので備忘録。 前提: Tailscale k3s ドキュメント通りに行くなら、マスターノードとなるイン…

Rust でバイト配列から数値に変換したい

[0x12, 0x34, 0x56, 0x78] みたいなバイト配列から数値へ変換したいケースがある。 その時、読み取り対象によってはビッグエンディアンだったりリトルエンディアンだったりするけど、自分で考えると面倒なので、それを良い感じにする方法。 といっても Rust …

Roslyn の IMethodSymbol で拡張メソッドを扱いたい

C# / VB.NET のコンパイラーである Roslyn はライブラリとして扱うこともでき、コード解析などを行うことができる。 その中でメソッドについての情報が格納されるのが IMethodSymbol だが、以下のような拡張メソッドの場合は、拡張メソッドそのものでは無く…

GitHub Actions の Problem Matcher でデフォルトの Severity を Warning にしたい

GitHub Actions には Problem Matcher といって、stdout やファイルなどに出力されたメッセージを Pull Request などで表示するための機能があります。 こういうの 多くの場合、エラーメッセージと一緒に Severity といって、このメッセージは警告なのかエラ…

AWS Route 53 で256文字以上の TXT レコードを設定したいときは

AWS

DNS の仕様として、 TXT レコードには単一の文字列として 255 文字が最大となっています。 AWS の Route 53 もその仕様に従っているんですが、 DKIM キーなどを設定する際、 256 文字以上になるケースがあるので、値を分割して設定することで、256 文字以上…

The inferred type of 'X' cannot be named without a reference to 'Y'. This is likely not portable. A type annotation is necessary.

pnpm 使って特定の tsconfig.json (Vite のデフォルトの tsconfig.json など) を参照した状態で tsc を走らせると、型エラーが出ることがある。 下記は、その例: The inferred type of 'default' cannot be named without a reference to '.pnpm/vite@5.0.1…

.NET MAUI Blazor Hybrid アプリで Tailwind CSS を使いたい

.NET MAUI Blazor Hybrid アプリというものがあります。 これは、 .NET でクロスプラットフォームなアプリを作成するためのフレームワークで、 Xamarin.Forms の後継です。 同様に、 ASP.NET Core Blazor というものがあり、これは .NET と C# を利用して、 …

dotnet build コマンドで特定のプロジェクトだけビルドから除外したい

例えば GitHub Actions などで定期的にビルドを行っている際、大部分は net8.0 だが特定のプロジェクトだけは net8.0-windows を指定している、などの理由で、ビルドから除外したいケースがあります。 そのとき、 Microsoft Learn では該当プロジェクトを除…

Traefik で Let's Encrypt の DNS チャレンジを Cloudflare でしたい

Traefik というクラウドネイティブ時代に合わせた良い感じのリバースプロキシーを使う機会があって、その際 Let's Encrypt での証明書生成もこいつだけでできるとのことだったので、やり方のメモ。 こういった docker-compose.yml (関係ない部分は略) があっ…

CI 上の Git 操作で差分があるときだけcommit したい

Git

GitHub Actions などで、ファイルを定期的に自動生成して、 commit & push する場面がちらほらあると思います。 そのとき、適当な外部の Action を使っても良いですが、そこまででもないな......というときのためのメモ。 自動生成して commit & push する場…

Terraform の Cloudflare Provider で CAA レコードを作成したい

Terraform で Cloudflare の DNS 設定を管理していたけど、微妙に詰まったのでメモ。 Terraform の Cloudflare Provider で CAA レコードを追加しようと思って調べてみると、以下のように出てくる。 Creation of CAA records · Issue #821 · cloudflare/terr…

Google Chrome 拡張機能 / Firefox アドオン作成ボイラープレート 2024

この記事ははてなエンジニア Advent Calendar 2023 の 12 月 37 日......もとい 2024 年 1 月 6 日の記事です。 みなさんは Google Chrome 拡張機能や Firefox のアドオンは書いたことありますか?わたしは 2 年に 1 回くらい、なぜか書くタイミングがありま…

Volta でグローバルインストールしたツールを Node.js バージョンを指定して実行する

例えば、 Volta で以下のように Node.js バージョンを管理していたとする。 # global $ node -v v20.10.0 # project-a $ node -v v18.19.0 ここで、 pnpm を公式サイトにあるようにインストールしたとする。 $ volta install pnpm $ pnpm --version 8.11.0 $…