Carpe Diem

備忘録

MongoDB Causal Consistency Session

概要 MongoDB Write Concern - Carpe Diem MongoDB Read Concern - Carpe Diem でデータの耐久性・一貫性・分離性・最新性などを保証する方法について説明しました。 しかし、これらの設定だけでは Causal Consistency - Carpe Diem で紹介した因果関係の一…

Causal Consistency

概要 Eventual Consistency(結果整合性)はレプリケーションラグにより「自分が書き込んだデータが読めない」といったような因果関係がおかしくなるケースがあります。 そこでより一貫性の強いものとしてCausal Consistency(因果一貫性)があります。 ※Cas…

MongoDB Read Concern

概要 前回 MongoDB Write Concern - Carpe Diem にてWrite Concernについて説明しました。 今回はRead Concernについて説明します。Read Concernはデータの分離性・一貫性・最新性を考慮する際に気をつけるべき設定です。 環境 MongoDB 3.6+ 前提知識 Point-…

MongoDB Write Concern

概要 MongoDBはデータがどこまで書き込まれたらクライアントにackを返すかという設定ができます。 その設定をWrite Concernといい、メモリまで保存されたのかディスクまで保存されたのか・何台のデータノードにデータが書き込まれたらといった指定が可能です…

ターミナルエミュレータをAlacrittyに

概要 これまでデフォルトのTerminal.appを使っていましたが たまに重い 設定をファイルで管理したい True Color対応してない などの不満が出てきたので、上記課題を解決できるRust製のAlacrittyに移行してみました。 環境 Alacritty + tmux + vimの環境です…

SSHにYubikeyを使う

背景 OpenSSH 8.2からU2F/FIDO2デバイスを用いたハードウェア認証に対応しており、仮に秘密鍵が漏洩しても鍵の生成時に利用したデバイス(Yubikeyなど)がないとsshできなくなるというセキュアな対応が実現できます。 以前はOpenPGPに委譲させたり、PIVで対…

YubikeyにGPGの副鍵を転送する

概要 前回作ったGPGの副鍵をYubikeyに移してセキュアに管理できるようにします。 環境 Yubikey 5C NFC(Firmware: 5.4.3) GPG 2.2.32 前提知識 Yubikey 5が持つ機能 Yubikey 5には以下の機能があります。 ref: ワンタイムパスワードトークンYubiKey |(株)ソ…

GPGで主鍵と副鍵を作成する

背景 Yubikeyを新しくしたのでGPGの運用もYubikeyに寄せようと思ったのがきっかけです。 環境 GPG 2.2.32 前提知識 主鍵と副鍵 GPGには主鍵と副鍵の関係があります。またそれぞれ秘密鍵と公開鍵のペアになっています。 これは鍵が漏洩した際にローテーション…

Bigtableで複数クラスタ構成におけるデータ整合性の保証

背景 Bigtableはレプリケーションを有効にしたマルチクラスタ構成にすることで負荷分散、高可用性を保証することが可能です。 一方でマルチクラスタにすることで 単一行のトランザクションが効かなくなる 書き込み後読み取り操作でレプリケーション遅延によ…

Bazel を使う上での Tips

概要 Bazelを導入する過程で学んだTipsをまとめます。 環境 Bazel v4.2.2 Tips bazeliskを使う Bazelのバージョンを環境別に管理したい場合、bazelbuild/bazeliskを使うのが良いです。 .bazelversionに以下のようなバージョンを書いておけばそのバージョンで…

Bazelを使ってみる その6(テスト)

概要 Bazel解説第6弾です。 Bazelを使ってみる その1(Goのビルド) - Carpe Diem Bazelを使ってみる その2(protobufのビルド) - Carpe Diem Bazelを使ってみる その3(docker imageのビルド) - Carpe Diem Bazelを使ってみる その4(gRPCのビルド)…

fatal: could not read Username for 'https://github.com': terminal prompts disabledが出たら

概要 CIツールでプライベートリポジトリをgo getしようとするとたまに遭遇する fatal: could not read Username for 'https://github.com': terminal prompts disabled の対応方法をまとめます。 原因 go getはデフォルトだとHTTPSで通信しようとしますが、…

Bazelを使ってみる その5(リモートキャッシュ)

概要 Bazel解説第5弾です。 Bazelを使ってみる その1(Goのビルド) - Carpe Diem Bazelを使ってみる その2(protobufのビルド) - Carpe Diem Bazelを使ってみる その3(docker imageのビルド) - Carpe Diem Bazelを使ってみる その4(gRPCのビルド)…

Bazelを使ってみる その4(gRPCのビルド)

概要 Bazel解説第4弾です。 Bazelを使ってみる その1(Goのビルド) - Carpe Diem Bazelを使ってみる その2(protobufのビルド) - Carpe Diem Bazelを使ってみる その3(docker imageのビルド) - Carpe Diem 今回はgRPCをビルドしてみます。 gRPCは2…

GitHub ActionsでConventional Commitsを満たしているかチェックする

概要 Conventional Commits というコミットメッセージの規約があります。 これを守ることで 意味のあるコミット粒度&メッセージになる あとから振り返りやすい Change Logsなどで自動化ツールを活用しやすい といったメリットを享受できます。 しかし新しい…

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

概要 年の瀬なので2021年に買ってよかったものを挙げてきます。 ゲーミングチェア リモートワークで自宅でも座ってる時間が長くなったので自宅の椅子を買い替えました。 座り心地がめちゃくちゃいいので個人的にNo.1な買い物でした。 Bauhutte ( バウヒュッ…

Bazelを使ってみる その3(docker imageのビルド)

概要 Bazel解説第3弾です。 Bazelを使ってみる その1(Goのビルド) - Carpe Diem Bazelを使ってみる その2(protobufのビルド) - Carpe Diem 今回はDocker imageをビルドしてみます。 環境 Bazel v4.2.2 前提知識 通常docker imageを作成する際はDocker…

Bazelを使ってみる その2(protobufのビルド)

概要 前回に引き続き今回もBazelについて書きます。 christina04.hatenablog.com 今回はProtocol BuffersをビルドしてGoで利用できるコードを生成します。 環境 Bazel 4.2.2

Bazelを使ってみる その1(Goのビルド)

背景 Bazelは優れたビルドツールである一方で、導入したチームには1人はBazel職人が必要と言われるほどキャッチアップコストが高くハマったときに開発が止まると言われます。 そのためKubernetesからも削除されるほどです。 しかしながら導入の善し悪しを判…

Chrome検索のサジェストをCtrl-n/Ctrl-pで選択できるようにする

Mac

背景 MacのChromeやSlackの検索サジェストは便利ですが、いわゆるEmacsキーバインドにおけるCtrl-n/Ctrl-pによる上下移動ができません。 Chromeの場合 Slackの場合 もちろん矢印キーは使えますが、手をホームポジションから移動させるのは地味に不便なので解…

Bigtableの条件付き書き込みパターン

概要 BigtableにはCheckAndMutateRow APIがあり、書き込む際に条件をつけることで更新のロストなどを防ぐ仕組みが用意されています。 ※更新のロストについては以下を参考にしてください トランザクションの分離レベルで出てくる用語 - Carpe Diem 今回はよく…

go-redisのRingの挙動を検証してみる

概要 Redis Clusterが生まれるまではRedisの水平スケール手段としては前回紹介した Consistent Hashing (コンシステントハッシュ法) - Carpe Diem を用いた手法が使われていました。 これはRedis Ringと呼ばれる形でいくつかのライブラリでサポートされて…

Consistent Hashing (コンシステントハッシュ法)

Consistent Hashingとは Consistent Hashingはハッシュテーブルアルゴリズムの1つです。 ハッシュテーブルのサイズの変更をしても柔軟にマッピングできるため、ノードの追加・削除が発生する分散データベースやキャッシュの保存先を決定するといった用途に…

ProtobufとStreamで扱うJSONはどちらが省メモリなのか

背景 JSONよりもProtobufの方が ファイルサイズが小さい シリアライズ・デシリアライズが速い ということは色んな検証記事から明らかになっています。 一方でGoのProtobufはデータをstreamで扱うのではなく、全部メモリに載せてシリアライズ・デシリアライズ…

Stream Deck MobileでZoomのミュートなどを使いやすく

概要 Stream Deckというスイッチャーのモバイルアプリがあり、それを使うことでZoomのミュートON/OFF、ビデオのON/OFFをやりやすくします。 背景 仕事ではZoomでオンラインミーティングをすることが多いのですが、ミュート等の切り替えが地味にストレスだっ…

GoのロギングライブラリzapのTips

概要 zapを使っていて 書き込み先をio.Writerで自由に設定したい テストで時刻を固定値にしたい ログレベルによって標準出力、標準エラー出力を分けたい GCP Cloud Loggingのフォーマットでログ出力したい 全ログに付けたいフィールドがある 独自logパッケー…

OPAでREST APIのAuthorizationを行う

OPA

概要 REST APIのAuthorizationをOPAに任せ、ミドルウェアなどで統一した処理にすることで認可処理の運用や柔軟性を向上させることができます。 今回はその実装方法を紹介します。 環境 opa v0.32.0 go v1.17 アーキテクチャ アーキテクチャのイメージとして…

OPA (Open Policy Agent) を使ってみる

OPA

背景 Policy as a Code(ポリシーをコードベースで管理する)の汎用的なエンジンとしてOPA - Open Policy Agent(オーパ)があります。 用途としては APIの権限管理(Authorization)を汎用化&共通化したい ネットワークの疎通に関するホワイトリスト(ブラ…

bugsnagのWeb UIでスタックトレースを表示する方法

背景 サーバサイドでエラー検知・トラッキングのSaaSを利用する場合、bugsnagが候補に挙がると思います。 ただそのままerrorをNotify()してみてもスタックトレースがきちんと表示されない問題にぶつかります。 今回はGoでbugsnagを利用する場合に、bugsnagの…

fmt.Errorfとxerrors.Errorfと独自エラーと

Go

背景 エラーハンドリングでは エラーが発生した箇所を追うことができる スタックトレースが出力できればなお良し エラーの原因によって処理を分岐することができる といったことが重要です。 Go 1.13から入ったラップする仕組みにより、エラーメッセージにア…