Open17

雑多なメモ

Hirotsugu KawasakiHirotsugu Kawasaki

リクエストの中身を確認したい時、nc -l <ポート番号>を叩いてそのポートにリクエストを送れば中身が見れる。

> nc -l 8088
POST /test HTTP/1.1
Host: localhost:8088
Connection: keep-alive
Content-Length: 143
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
sec-ch-ua-platform: "macOS"
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryqnqyPLpi3cMiEA5c
Accept: */*
Sec-Fetch-Site: none
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: ua=Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_15_7)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F91.0.4472.114%20Safari%2F537.36; company_code=weeds; pharmacy_id=2; pharmacist_id=369; pharmacist_name=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E7%AE%A1%E7%90%86%E8%80%85369; pharmacist_admin_flg=2; fuel_csrf_token=a8288d28b4b163be30349d184ddae4615bb5c53ff3eac178585535605034765b6c5e20e244f2d2eef4c987110c7f6c2e709e4351f7de5ae7290c67bc8232a176

------WebKitFormBoundaryqnqyPLpi3cMiEA5c
Content-Disposition: form-data; name="field1"

aaaaaa
------WebKitFormBoundaryqnqyPLpi3cMiEA5c--![](https://storage.googleapis.com/zenn-user-upload/7e0666fbe7e1-20211117.png)

Hirotsugu KawasakiHirotsugu Kawasaki

if elseのコメントの書き方でしっくりきたのが以下の書き方

// Aの場合:
//  ...
// Bの場合:
// ...
// Cの場合:
// ...
if A {
   // Aの場合
   ...
} else if B {
   // Bの場合
   ...
} else {
   // Cの場合
   ...
}

先頭に書くことでif elseブロックの中を読み進めなくても、処理の概要が分かる。
各分岐の中で長々とコメントを書かなくて良い。

Hirotsugu KawasakiHirotsugu Kawasaki

サーバーのポートが解放されていることを外部から確認する時、telnet, curlだけでなくncコマンドも使える。
サーバーによって入っているコマンドが違うので、使い分ける

Hirotsugu KawasakiHirotsugu Kawasaki

kafkaのブローカーで耐障害性を持たせるには少なくとも3台以上でクラスタを作る必要がある。

Hirotsugu KawasakiHirotsugu Kawasaki

パイプはforやwhileのワンライナーの中でも書ける

 while true; do sleep 1 | df | awk '{print strftime("%H:%M:%S"), $0}'; done
Hirotsugu KawasakiHirotsugu Kawasaki

sshしてコマンドを実行中にexitすると、カーネル(間違ってるかも)が子プロセスであるコマンドたちにsighupを送って、停止させる。
停止させないと、waitする親プロセスがいなくなってコマンド達はゾンビプロセスになってしまうため。

たしかシェルの機能ではなかった。詳しく調べる。

Hirotsugu KawasakiHirotsugu Kawasaki

bash -c コマンドは必ずしも新しいbashプロセスを立ち上げてからforkしない。
dashとかいうシェルは違うらしい。

メリット・デメリットがある。

Hirotsugu KawasakiHirotsugu Kawasaki

いろんなランタイムのバージョンを管理できるasdf入れてみた
https://github.com/asdf-vm/asdf

nodeのバージョン管理
http://asdf-vm.com/guide/getting-started.html#plugin-dependencies

> asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git

> asdf list all nodejs 14
14.0.0
14.1.0
14.2.0
14.3.0
14.4.0
14.5.0
14.6.0
14.7.0
14.8.0
14.9.0
14.10.0
14.10.1
14.11.0
14.12.0
14.13.0
14.13.1
14.14.0
14.15.0
14.15.1
14.15.2
14.15.3
14.15.4
14.15.5
14.16.0
14.16.1
14.17.0
14.17.1
14.17.2
14.17.3
14.17.4
14.17.5
14.17.6
14.18.0
14.18.1
14.18.2
14.18.3
14.19.0

> asdf install nodejs latest

> asdf global nodejs latest

> asdf install nodejs 14.19.0

> cd <repo> && asdf local nodejs  14.19.0

> echo .tool-versions >> ~/.config/ignore
Hirotsugu KawasakiHirotsugu Kawasaki

vscodeでjestを使おうとしたらこんなエラーが出る

env: node: No such file or directory

https://gist.github.com/hayakawatomoaki/d5ccb508cb897bf9c6f6

asdfでnodeを入れ直したときに、npmがおかしくなったと予感。

// Homeで実行
> which npm
/Users/kawasaki/.asdf/shims/npm
 
// プロジェクトのディレクトリで実行
> which npm
/usr/local/bin/npm

> ll /usr/local/bin/npm
lrwxr-xr-x  1 kawasaki  admin  46  2  4 18:25 /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js

npmの実態が違う。

追記:
先輩に聞いてみたら、プロジェクトの設定的に無理っぽい。たぶん、超頑張ればって設定いじればいけるけど。
コマンドでいけるからそっち使ってるとのこと。

Hirotsugu KawasakiHirotsugu Kawasaki

ソケットについて
https://qiita.com/angel_p_57/items/1faafa275525469788b4#ソケット
Linuxの特殊ファイルの一つで、通信のために使う。同一ホスト内でも、異なるホスト間でもいい。
通信する場合、通信する両者がソケットを作る必要がある。

システムコールのbindとlistenは違う。
bindはプロセスとポートを紐づけて、listenは指定のソケットが接続を待ち受けるソケットであることをカーネルに伝える。