Carpe Diem

備忘録

C5/M5インスタンス用のAMIをpackerで作成する

概要

先日東京リージョンにもC5/M5インスタンスが対応されました。
コスト的にC4/M4より10~15%ほど安くなるため、可能であれば逐次移行した方が良いです。
ただC5/M5からは

  • Elastic Network Adapter (ENA) 対応
  • NVMe対応のOSが必要
  • バイス名の変更

といった大きな変更が入っており、単純にインスタンスタイプを変更するだけだと動かない・パフォーマンスが十分に発揮できない可能性があります。

環境

続きを読む

Goのpprofの使い方【基礎編】

概要

pprofの使い方の備忘録として何回かに分けて書いてきます。
今回は前提知識として知っておくべきことを書きます。

環境

  • go 1.10.1

pprofは2つの計測方法がある

以下の2つのやり方があります。

  1. runtime/pprof が提供しているAPIを使ってファイルに出力する
  2. net/http/pprof を使ってプロファイル取得用の http サーバーを立てる

前者は短時間で実行が終了するようなケースで使います。
後者はWebサーバのようにずっと動かすプログラムのケースで使います。

続きを読む

Angularでのコンポーネント→ビューのバインディング

概要

Angularではコンポーネント→ビュー方向のバインディングは以下の4種類があります。

これらの違いと使い分けを説明します。

環境

  • Angular v5.2.9
  • angular-cli v1.7.3
続きを読む

BigQueryのデータをUpdateする

概要

BigQueryは基本的にはログなど解析目的で利用するため、データ自体を更新することはありません。ただ

  • 一部間違ったログが入ってしまった
  • データの洗い替えが必要になった

みたいなケースが起き、解析結果が期待するものにならない場合は更新処理が必要です。
2016/11からDML(データ操作言語)が使えるようになったので、それを使って更新します。

注意事項

BigQueryは基本的に取得系メソッドをメインで利用するものなので、DMLに関しては以下のような制限があります。

f:id:quoll00:20180323112546p:plain

ref: Data Manipulation Language  |  BigQuery  |  Google Cloud

なので1レコードずつ更新するクエリをループで回すなんてことはせずに、一気に複数のレコードを更新するクエリを発行するようにしてください。

続きを読む

GoでFacebook OAuthログインをセキュアに実装する

概要

Facebookを用いたOAuthログインの実装方法はネット上に多々ありますが、セキュリティに関してあまり考慮されてないものが多いです。
今回はセキュアに実装する例を示します。

環境

成果物

今回のソースコードはこちらです。

github.com

続きを読む

Goのcontext.Contextはいつ使うべきか

概要

go 1.7からcontextパッケージが標準パッケージになりました。
タイムアウト、キャンセルなどのハンドリングができることから、ブロッキングする処理や外部APIリクエストなどを扱う時は基本的に第一引数に置くべきです。
またAPIやプロセス間通信のリクエストスコープの値を引き継がせる際にも利用されます。

例えばgoogleAPIを叩くコードでは全ての関数にcontextが引数に存在します。

github.com

ブログでもこのように言っています。

At Google, we require that Go programmers pass a Context parameter as the first argument to every function on the call path between incoming and outgoing requests.

ref: Go Concurrency Patterns: Context - go.dev

一方でcontext.Valueになんでも詰め込めるため、汎用的な関数のインタフェースの引数として使うのは?という考え方もあります。

type Hoge interface {
    DoSomething(ctx context.Context)
}

こんな感じですね。引数になんでも詰め込めるので、簡単に共通のインタフェースを持たせることができます。

結論から言うとこの使い方は良くないです。今回はcontext.Contextの使う基準について考えてみます。

続きを読む