Carpe Diem

備忘録

Homebrewで過去のバージョンを使いたい【tap版】

概要

以前以下の記事でhomebrewの過去バージョンの使い方を紹介しました。

christina04.hatenablog.com

あれからHomebrewも変わり、以前の方法ではうまくいかなくなったため新しい過去バージョンのインストール方法を紹介します。

環境

  • macOS Catalina 10.15.6
  • Homebrew 2.5.2
続きを読む

メールにおけるSPFのドメイン認証の仕組み

概要

SPF(Sender Policy Framework)はメールのなりすましを防ぐための送信ドメイン認証の手法です。

さらに細かく説明すると

SMTPTCPコネクションの送信元IPアドレス送信元メールアドレス(エンベロープFrom)のドメインのTXTレコードに含まれるIPアドレスが合致するかどうかを確認する手法です。

この仕組みを図を交えながら説明します。

事前知識

前もって知っておいた方が良いことを書きます。

エンベロープFromとヘッダFrom

From 役割
エンベロープFrom バウンスを処理する場合などに使われるシステムが利用するアドレス
ヘッダFrom メールクライアントでFromとして表示される人間が利用するアドレス

SPFはこのエンベロープFromが正しいかチェックする仕組みです。

続きを読む

GoのCLIで標準入力とファイル読み込みの両方に対応する

概要

Goでは簡単にコマンドラインツールが作れますが、人によって引数やオプションといったインタフェースがバラバラになりがちです。

POSIX Utility Syntax Guidelinesというガイドラインがあるので、これに則るとUnixライクな統一されたインタフェースのCLIツールになります。

環境

インタフェースのイメージ

例えば文字列の入ったファイルがあり

$ cat sample.txt
hogefuga

入力文字列をすべて大文字にするコマンドcapitalizeを作る場合、以下の3つのインタフェースをサポートするイメージです。

$ cat sample.txt | capitalize
HOGEFUGA

$ cat sample.txt | capitalize -
HOGEFUGA

$ capitalize sample.txt
HOGEFUGA
続きを読む

gRPCのkeepaliveで気をつけること

概要

gRPCでは1つのHTTP/2コネクション上でstreamを多重化します。
しかしidleなコネクションは、LBなど間に介在するネットワーク機器によって気づいたら切断されているケースがあります。
そうならないよう、定期的にパケット(PINGフレーム)を流して「idleではないよ」とコネクションを維持しようとするのがいわゆるkeepaliveという仕組みです。

gRPCではデフォルトの設定では無効になっている&地味に設定が細かいので1つ1つ説明します。

gRPCのkeepaliveの役割

大きく2つあります。

1つ目先に述べたようにidleコネクションを維持するためです。

2つ目は死んだコネクションがあったら切断し、再接続するためです。

例えばNLBでは350秒以上idleなコネクションが切断される仕組みがあり、これによって普段あんまりトラフィックの無いサービスでいつの間にか切断されており、次回のリクエストでもその死んだコネクションをそのまま使おうとしてエラーになるケースをちらほら見かけます。

1つ目の対応でコネクションを維持するのも解決策の1つですが、切断された古いコネクションを使い続けないよう、再接続するというのも1つです。

環境

  • golang v1.15.0
  • grpc-go v1.29.1
続きを読む

Bigtableに時系列データを保存する

概要

Bigtableで時系列データを保存する手段として

  1. 縦長のテーブルを使用する
  2. 横長のテーブルを使用する
  3. 列バージョンを利用する

の3種類あるのでそれぞれの特徴、使い方を紹介します。

環境

続きを読む