Overview ema-hiro.hatenablog.com 上記で書いた gRPC サーバーを local で立ち上げる方法を下に、local で起動したその gRPC サーバーを利用して pubsub の動作(今回は subscriber の動作)をエミュレートするテストを書いてみます。 local でテスト用の pu…
Overview タイトルのとおりです。 このエントリは local で簡単に gRPC サーバーを起動して GCP のライブラリの簡易的な動作検証環境を整えたときの備忘録になります。 モチベーションとしては、単体テストと書いてますが、主に GCP のライブラリの動作を lo…
Overview やったこと 事前準備 当日 結果 振り返り 良かった(と思ってる)こと 反省点 その他 (感想戦) Overview isucon 14 に参加した。 今年の目標は去年の点数を超えることと最終30位に入ることだった。 結果: 未達(惨敗) やったこと 事前準備 SRE のメ…
pkg.go.dev Go のファイルを text ファイルにアーカイブするコマンドが純正で用意されているということを教えてもらって初めて知りました。 以下のように使うと指定したディレクトリ配下の Go のファイルをすべて任意のファイル形式でにアーカイブ出力してく…
この記事がちょうど400記事目です。 300記事のときの振り返りはこちら。 ema-hiro.hatenablog.com 300記事から 400 記事まではだいたい 2年半くらい時間が空いていました。200 記事から 300 記事までは2年ちょっとくらいだったので、エントリを各頻度という…
Go 1.23 から導入された range-over func を使うときの注意点として、range にわたす iterator 型のメソッドは nil を返してはいけない、というものがありました。 具体的には以下のコードで range-over func にアサインしてる NilFn は返り値が nil になる…
ということを知りませんでした。 // You can edit this code! // Click here and start typing. package main import ( "fmt" "slices" ) type X struct { ID int Name string } type xarr []X func main() { x := X{ ID: 1, Name: "taro", } xx := X{ ID: 2…
Overview 『アーキテクトの教科書』を読んで、アーキテクトに紐づくソフトスキルの重要性について考えてみた。 アーキテクトの教科書 価値を生むソフトウェアのアーキテクチャ構築作者:米久保 剛翔泳社Amazon 本書は全体を通してソフトウェア開発においける…
Overview Dead Letter Topic とは? Pub/Sub における DLT の設定方法 DLT に入ったメッセージを最初に回す方法 1つ目のパターンの場合 2つ目のパターンの場合 まとめ Overview Cloud Pub/Sub でトピックを立てて、メッセージの送受信を行うケースにおいて、…
Overview タイトルのとおりです。 AWS SDK for Go V2 を使ってるケースで従来の Endpoint Resolver の実装方法が非推奨になり、新しい実装方法が公開されていました。 aws.github.io Endpoint Resolver とは? 文字通り AWS SDK 経由で AWS のサービスにアク…
Overview Go で文字列の中で特定の文字を別の文字に置換したいケース、例えば改行コードやタブが混じっている文字列の中で特殊文字だけをエスケープしたいケースなどで strings.Replace を多用するのではなく、一括で置換する実装について記載します。 strin…
Overview endpoint のテストをするときに httpserver でサーバーを立ち上げて request と response の検証をする、ということをするときに、httptest で立ち上げるサーバーに割り当てられる port はランダムに決まります。 ただ、テストによっては port を固…
Overview GCP の Container Registory が廃止されるので Artifact Registory に移行しました。 cloud.google.com 移行手順 以下のドキュメントに沿って進めました。 cloud.google.com なお、移行するときに Container Registory -> Artifact Registory へコ…
Mac で作ったイメージを使って CloudRun をデプロイするときに terminated: Application failed to start: failed to load /docker-entrypoint.sh: exec format error というエラーが発生してコンテナが起動しない、ということがあったのですが、これはビル…
概要 タイトルのとおりです。 Buf CLI を最新(v1.36) にしたところ、v1.32 以上で大きな変更があった模様で、それに対応しました。 buf.build zenn.dev 対応 github.com ハマったところ 新しい Mac で作業していたところ、Connect (依存含め)を動かすための…
Overview Go1.23 で range-over func を取り込んだ slices package 内の SortedFunc と SortedStableFunc の挙動について少し調べました。 SortedFunc SortedStableFunc Sort における Stable とは? Godoc を読んでも完全には理解できなかったので ChatGPT …
Overview Go1.23 から導入される Iterator を使って Chunk 処理を書く - emahiro/b.log を書いた当日(日本時間だと翌日だけど)Go 1.23 が正式にリリースされていたので、サンプルとして range-over func を使った高階関数のセットを書いてみた。 Go 1.23.…
Overview Sample Benchmark See Also Overview Go1.23 から導入される Iterator を使って同様に Chunk 処理を実装してみます。 Sample func chunk[T any](src []T, chunkSize int) iter.Seq[[]T] { return func(yeild func([]T) bool) { for i := 0; i < len…
Overview sync package 内にある semaphore を使って Go のアプリケーション側で goroutine の起動数を排他制御します。 Go の並行処理の起動数を制御するのは 使い方 https://pkg.go.dev/golang.org/x/sync/semaphore#section-documentation のサンプルにあ…
Overview 今月にもリリースされる予定の Go1.23 に同梱されている iterator package をだいぶ今更ながら触ってみました。 どういうものか、ということの概要は知っていましたが、まぁ一旦自分でも触ってみるか、ということで触ってみて、実際動かしながら触…
サマリ 更新内容 依存関係をアップデートしました ImageResponse を next/server -> vercel/og に移管 @notionhq/client のバージョンを最新にしました Note に「しずかなインターネット」の記事を追加しました 今回やろうと思ってやらなかったこと npm -> p…
ずっと自分の写真だったけど昨今のいろいろリスクも増えてきたのでブログ用のアイコンを作って favicon 等々に適用してみた。 なお、どういうロゴがいいかわからなかったのでとりあえず ChatGPT に「いい感じのロゴ作って〜」とお願いしていくつか出してもら…
サマリ 現職で OpenAPI からのコード生成ツールとして ogen を採用して使っているのですが、この ogen がしばらく見ないうちに v1 (現時点の最新は v1.2.1) に進んでいたので、v1 以前との違い等々を調べてみました。 github.com v1 以前と変わったところ 設…
Go Conference 2024 に参加してきました。 個人としてはだいぶ久しぶりに大きなソフトウェアのカンファレンスに参加してきました。 コロナ禍でのオンライン開催での現地の熱気を感じれなくなったり、その後子供が生まれてそもそも週末に1人でなにかのイベン…
Overview タイトルのとおりですが、PC のランチャーアプリを長年愛用していた Alfred を一旦辞めて流行りの Raycast に移行してみました。 www.raycast.com 特にこれ!というものはなかったのですが、流行りに乗ってみようという単純な動機です。 便利なとこ…
これはなに? zsh のプラグインマネージャーとして Prezito を使っていましたがこれをやめて sheldon に移行したログです。 sheldon とは? Rust 製のシェルのプラグインマネージャー。 Rust 製だけあってそもそも高速です。 brew でインストールできますが …
社会人 10 年目が終わって、11年目になった。 2014年から社会に出たときには、先のことなんか何も考えられてなかったけど気づいたら10年が過ぎてしまった。 10年目まではちゃんと数えておくか、と思っていたのもあり、来年以降は「社会人N年目」みたいなカウ…
Overview Go + Delve の利用環境を VSCode について記載します。 動機 普段の開発ではずっと古き良き? print debug を使って動作確認を行ってきていました。 もちろん手元の開発だけでなく remote での動作確認等では今でもこれよりシンプルで一般的な手法…
Overview 用語の整理 実装方法 利用する API ファイル形式 ハマったところ Pinpoint -> S3 に触る role を設定する 余談 Overview Amazon Pinpoint という AWS が提供してるマネージドCRM ツールを使ってセグメント(配信対象)を S3 上のファイルから作成す…
Overview やること Query Operation の場合 ハマったところ BigQuery のライブラリでどの API を Call しているのかわからなかった。 BigQuery の API のレスポンスを生成する Overview BigQuery を使った実装をしているときに、API リクエストを mock した…