理系学生日記

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

忍者TOOLS

json schema を jq で再帰的に処理し、省略されている `"type": "object"` を付与する

jq

Qiita の json schema に"type": "object" がない "type": "object" の付与 jq での再帰的な処理戦略 参考文献 Qiita の json schema に"type": "object" がない Qiita の API レスポンスは json schema で表現されています。 https://qiita.com/api/v2/sche…

PRへの修正内容をReviewer側で提示できるsuggested changes

Github で上で PR をレビューしている方も多いと思います。 その中で、よくあるのが typo への指摘です。 Typo を指摘する際、 `type` は `typo` の誤りではないでしょうか? というような形で指摘することになると思うのですが、これをやっていると reviewer…

「進化的アーキテクチャ」を読んだ

今年もあまり本が読めなかったけど、それでも今年に読んだ本の中でピカイチのものでした。 進化的アーキテクチャ ―絶え間ない変化を支える作者: Neal Ford,Rebecca Parsons,Patrick Kua,島田浩二出版社/メーカー: オライリージャパン発売日: 2018/08/18メデ…

merpay Backend Engineer Meetup #6~技術的負債について~

現在のプロジェクトでも様々な技術的負債が出てきていて、出るだけならまだしもなかなか返済を計画化できず、どうしたものかと思っています。 そんなとき、 merpay Backend Engineer Meetup #6~技術的負債について~ - connpass が開催されるというのを目にし…

散骨について

実は親族が海への散骨を希望してます。切羽詰まった状況ではないのですが、一体散骨ってどう進めれば良いのだろう、という点がわからなかったので、一応調べてみた次第です。 法制度 散骨自体は法律的でどうのこうの定義されているわけではありません。1991…

携帯・スマフォに送信される緊急速報通知の仕組み

台風19号、そして一昨日の関東圏での大雨等で、最近はスマフォに緊急速報が届くことが多くなりました。 PUSH 通知とは異なる仕組みで届いていることは明らかなのですが、イマイチきちんと理解していなかったので、今日はそのあたりを調べてみます。 緊急速報…

Gitでの各種操作の取り消し・修正方法

VCS を使ったときのメリットは多々ありますが、そのうちの一つは、いつでも修正内容をもとに戻せることだと思います。 ローカルで修正した内容をもとに戻したい git checkout git restore 直前の commit の内容を変更したい commit を取り消したい git reset…

LinuC 303 Security

昨日 Linuc 303 (Security) を受験してきました。いわゆる資格試験はかなり久しぶり、特に Linux 系の試験となると 5 年ぶりになります。そう、なぜ 5 年ぶりに Linux 系試験を受けたのかというと、ぼくの LPIC Level 3 の有意性期限が迫っているためでした…

「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 したらエラーが出るといるメンバの溜息を聞いて調べてみるとおもしろいことが分か…