理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

「Kubernetes 完全ガイド」を読んだ

k8s を本格的に使うことになり、プロジェクト内でも、Helm Docs | Helm だの Spinnaker だの Kustomize - Kubernetes native configuration management だの Skaffoldという言葉がどんどん slack 上に登場してきています。 しかしですね、ぼくは時代を読み間…

EC2 Instance Connect とは何なのか

通常のプロジェクトにおいては踏み台サーバを用意するのが一般的だと思います。 この踏み台サーバにおいて面倒なのは鍵の扱いです。多くの場合、公開鍵認証を用いると思いますが、ユーザを追加する都度、当該ユーザの公開鍵を踏み台サーバに登録するのは面倒…

はじめての ISUCON 体験記

先週の日曜日、ISUCON の予選に@kkasai さんと @hondaYoshitaka さんと参加しました。 記憶が確かなうちに書いておきたかったのですが、なかなかそういうわけにもいかなかったので、記憶とログを頼りに記載します。 当日 サーバ構築とログイン システム構成…

非JSONの文字列が含まれるファイルに対してjqを使いたい

jq は CLI で使用できる JSON processor でみなさんも日々お使いのことと存じます。 stedolan.github.io 問題 解法 解説 問題 jq は標準入力に対して様々なフィルタや加工を行えるわけですが、基本的にはその入力フォーマットが JSON になっていることがベー…

logrusでナノ秒まで時刻を出力したい

golang の構造化ロガーのうち有名なものの一つに logrus があります。構造化ログとして JSON フォーマットを指定するとするとだいたいこんな感じになります {"level":"info","msg":"hello world","time":"2019-09-01T06:56:59+09:00","user":"kiririmode"} …

.ssh/configの記述量を減らしたいしホスト鍵警告メッセージも減らしたい

今日もみなさんどんどん ssh でどっかのホストにログインするのにお忙しい事と思います。最近のプロジェクトでは、ぼくもどんどん ssh でどっかのホストにログインするのにお忙しくて、ログインし続けていたら一日が終わる。 さて、ssh を使うときの個人用設…

gRPC と HTTP/2 と ALPN

gRPC の TLS を NLBで終端しようと思っていたらずいぶんとトラブってしまいました。 結局のところその原因は ALPN にあったのですが、ぼく自身が ALPN に詳しくないため、なかなかよくわからなかった。 このため、きちんと ALPN を理解しようというのが本エ…

gRPC におけるタイムアウト時の挙動

gRPC には、当然ながらクライアントサイドでタイムアウトが設定できます。このとき、HTTP/2 上でどういうフレームが流れるのかを整理してみます。 タイムアウト設定 golang node HTTP/2 での挙動 まとめ タイムアウト設定 golang Golang の場合は、 context.…

gRPCにおけるmetadata、そしてそれを node.js client から取得する

gRPC には metadata という概念が存在します。 これは RPC においての付加情報ということになっており、golang からの扱いは簡単です。ただし、node.js を client として使う場合にどのようにして metadata を「取得する」かあまり情報がなく苦しみました。 …

TCPのTIME-WAITを温かく見守る

このエントリは、 Qiita に投稿したエントリのマルチポストです。 tl;dr TIME-WAIT を含む状態遷移 TIME-WAIT の存在目的 Wandering Duplicate 問題への対策 その時間って TCP 切断に至るフローの最後の ACK が届かないケースへの対策 A の立場 B の立場 問…

gRPC で golang server/node client を SSL に対応させる

今回は、gRPC で SSL 通信を行おうと思います。 環境としては、サーバは golang、クライアントは node.js という構成です。 ルート認証局、証明書を作成する。 golang の gRPC サーバに組み込む Node.js client を SSL に対応させる node のソース ルート認…

node.js の gRPC clientで client side keep-alive (定期的な PING frame 送出)を実現する

gRPC では HTTP/2 を使っており、HTTP/2 では 1 本の TCP のコネクションの上で stream を多重化します。このため、TCP のコネクションはずっと張りっぱなしになることが多く、どのようにしてこのコネクションを維持するかが重要な場合があります。 問題とな…

gRPC 関連でデバッグを行うときに指定すると便利かもしれない環境変数たち

Go で gRPC 周りをデバッグするときに設定しているとデバッグするのが楽になる環境変数がいくつかあります。このあたり、情報が色んな所に散財しているので、ちょっとまとめますね。 GODEBUG その他 GRPC_VERBOSITY, GRPC_TRACE GRPC_GO_LOG_SEVERITY_LEVEL,…

golang でのデバッグに非常に便利な go tool trace

なぜかおかしな振る舞いをするサーバプログラムをデバッグするというのは、それなりに骨の折れる作業です。大量のソースを前に「ここが怪しい」と言いながらデバッグログを埋め込むこともあるでしょう。また、lsof や ss といったコマンドやスタックトレース…

zshのターミナル環境を変更したらモチベーションアップした

雑談ネタです。 4 月に入り、自宅の Mac をクリーンインストールし直しました。 最近どうも多忙にかまけてしまい、この Blog も含めて自宅での IT 関連のモチベーションが湧かない状況でした。全てを一新することで、もう一度あの熱い想いを思い出せないか、…

vscode-proto3 利用時に `spawnSync clang-format ENOENT`

Protocol Buffer の proto ファイルを VS Code で編集するにあたって便利なのが vscode-proto3 です。 こちらを割と使っていたのですが、いつの間にか spawnSync clang-format ENOENT というエラーが出るようになってしまいました。ver. は 0.2.2。 原因 メ…

Protocol Buffer で時刻(タイムスタンプ)を扱いたい

API でのリクエスト、レスポンスのフィールドとして、タイムスタンプを定義したいときがあります。 しかし、Protocol Buffer の言語仕様上、Scalar として日付、時刻関連の型は定義されていません。このようなとき、どのように対処すれば良いでしょうか。 日…

gRPC の Server Streaming RPC で HTTP/2 の挙動を確認してみる

先日は gRPC の Unary RPC で HTTP/2 の挙動を確認してみました。 gRPC Unary RPC で HTTP/2 の通信を追ってみる - 理系学生日記はてなブックマーク- gRPC Unary RPC で HTTP/2 の通信を追ってみる - 理系学生日記 今日は、gRPC の Server Streaming RPC を…

gRPC Unary RPC で HTTP/2 の通信を追ってみる

gRPC でいろいろとトラブルが起きており、そのトラブルシュートをしようと思っています。 しかし、gRPC は HTTP/2 の上で動作するプロトコルであり、HTTP/2 の RFC を見ても、イマイチ HTTP/2 が見えてこない。HTTP/2 のプロトコルが見えないと、gRPC の挙動…

Wireshark で gRPC・HTTP/2 通信をキャプチャしても TCP としか判定されない

gRPC、および、その下で使われている HTTP/2 について、パケットキャプチャして解析しようとしていました。 パケットキャプチャといえば、wireshark ですが、gRPC の通信をキャプチャしても、gRPC でも HTTP/2 でもなく、TCP としか判定されないということになって…

最新セマンティックバージョンのタグを取得する

デスクトップアプリを作ってて、デスクトップアプリ上で version を表示させたいということがありました。 version 自体は git でタグ付けしているので最新のタグを取得すれば良いはずだったのですが、今回のアプリは、semantic version 以外に integration …

git-bash 配下の npm run で cmd.exe が使われる…だと…

npm script が楽やなと思って、便利系ツールの起動 (docker-compose.yaml がリポジトリに散らばったコンテナ群の一斉起動とか) を npm script に寄せているのですが、npm run したらエラーが出るといるメンバの溜息を聞いて調べてみるとおもしろいことが分か…

特定ディレクトリ配下にあるすべて package.json について yarn install を実行する。ただし node_modules 配下のものは除く

開発プロジェクトには便利ツールみたいなものを作って生産性アップの夢を見ることが多いです。 いまのプロジェクトでもその例外に漏れず、WIndows と Mac の二者がいるということもあって、node.js で CLI ツールを作っています。 そこで抱えている課題は、…

安全でない通信路上で安全に鍵を共有できるECDHとは

Bitcoin に触れるようになってから、ようやく ECDH の全貌を把握できるようになってきました。 ここでいう ECDH というのは、楕円曲線を用いた「安全でない通信経路上で安全に鍵を共有する方法」になります。 身近な例では SSL/TLS における暗号化スイートの…

Electron から native module を使うときの NODE_MODULE_VERSION のエラー

Electron でとある node のモジュールを使おうと思ったら (snip) hoge.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 45. This version of Node.js requires NODE_MODULE_VERSION 64. Please try re-compiling or re-i…

Bloom Filterの数理

プロジェクトの中で、Mastering Bitcoin の読書会を進めていまして、ぼくはこの本を読むのは 3 周目になります。 ただ、読み直す度に新しい発見があるのがこの本であり Bitcoin の技術でして、その中で Bloom Filter についての話題がありました。 Bloom Fil…

「Programming Bitcoin」を読んだ

Programming Bitcoin を読みました。 Programming Bitcoin: Learn How to Program Bitcoin from Scratch作者: Jimmy Song出版社/メーカー: O'Reilly Media発売日: 2019/03/15メディア: ペーパーバックこの商品を含むブログを見る 実はこの本はまだ出版されて…

誕生日攻撃が成功する回数の期待値は?

このあいだ、Advent Calendar に UUID の衝突確率の話を書きました。 もちろんこれは、昔に書いた以下のエントリをちょっとだけ修正しただけで、早速バレたりしていた。 とはいえ、UUID の衝突には続く話がありまして、それが誕生日攻撃というものです。 誕…

bitcoinにおける署名アルゴリズム (ECDSA)

bitcoin において使われているのは楕円曲線暗号で、この楕円曲線暗号を使った署名(ECDSA)が bitcoin の一つの柱になっています。 ようやくですがこのあたりの署名について少しずつ少しずつ理解が進んできたので、忘れる前にその理解を書き残しておこうと思い…

「シリコンバレー式最強の育て方」を読んだ

1 on 1 を本格的に行うにあたって、こちらの本を読むことになりました。 これまで、1 on 1 を行ったことはあったんですが、きちんと体系だてて学んだことはありませんでした。この本は、いわゆる「上司」が部下に対してどのようにして 1 on 1 を行っていけば…