2017年4月12日
最近ブログ書いてなかったから適当につらつら書く
pero
最近よく使うやつ。上の記事ではリリースされてない感じですがもう brew から入る peco にも入ってます。
用途としてはざっと該当箇所のコードを読みたいときに適当に検索してる。
インクリメンタルサーチなのでファイル構成とかクラス構成を把握してないようなときに便利。あと Ruby で include, extend してるけど結局実装どこだよというときにもよい。
ラッパーは微妙に変えてる。 less じゃなくて vim のほうがいろいろなれてるので。うっかり編集しちゃうのはご愛嬌。
#! /bin/sh exec ack "$@" . | peco --exec 'awk -F : '"'"'{print "+" $2 " " $1}'"'"' | xargs -o vim '
これの何がいいって、「メソッドAしらべる」→「どうも実際の処理はメソッドBっぽいな」っていうときにすぐ検索対象を変えられるとこ。めっちゃ便利。たぶん他の人はctagsとかつかってジャンプしてるのかしら
ack つかってるけど ack のオプション全然覚えてないから変えようか迷ってる。
とりあえず pero --ruby '.*' lib
みたいな感じでつかってることが多いです。
hkdnet.netのアレ
go 部分と js 部分を完全に分割した。あと go から html とかサーブしてたのを nginx に変えた。そしたら go のバイナリと public ディレクトリ内をまるっと更新すればいいだけになったので ansible で置いて適当に supervisor を restart すればデプロイが完了する。楽。
api サーバとして動くコードと1日1回バッチ処理を行うコードがあったんだけどそれも完全に分割して2バイナリ生成するようにした。管理がめっちゃ楽になってよかった。
ただなんとなく ansible が好きになれないので mitamae とか使いたい感じがある。
技術書典2
湊川さんのところで店番してた。なかなかない経験で楽しかった。本もいくつか買ったけど積んでます。すみません
Rust
書いてる。これを読んでテンションがあがったあとに Rebuild.fm で typester さんが言及してたので。
六本木ではたらくソフトウェアエンジニアへのよくある質問とその答え (FAQ) (2015 - 2017) — hayato.io
なんか書くかーと思って自分で tcp コネクションを張って自分で http のプロトコル書いて読むやつ書いてる。まあ curl ですね。
適当に実装して HTTP はしゃべれてるっぽい気がするんだけど https は handshake とかあってめんどくさ!!!ってなって投げてる。
これのあとに GitHub の API 叩くコード書いてるあたりでエラーの扱い方をようやく学んだ。面白い。
Rust 自体の感想としては、オブジェクトがメモリ上でどういう風になってるのかを意識させられる感じがある。そこがつらくておもしろい。
「全然わからない。俺達は雰囲気で C++ を書いている」という感じがあったけど Rust は 「雰囲気ですら書けていない」という感じ。コンパイル通らんし。
コンパイラが出すメッセージがかなり親切で「もしかしてこうじゃない?」って言ってくるあたりほんと賢い。
コンパイラに叱ってもらって関係ありそうな節を Rust book で読んでというトライアンドエラーをしている。叱責駆動の勉強。
ほんとに親切なんだけど一方でわかってんならよしなにやってくれという気持ちもあってそういうところは人間が機械に傅いている感じがあって趣がある。また数年後にはこのあたりが解決される新言語あるいは新バージョンが出るのだろうか。
curl 代替を書いているときにヘッダーも書いて1行あけてボディなくて、でなんか読み出しできねぇ!みたいなことがあってなんでだろーって感じだったんだけどボディが空のときに空行が必要だからでした。てへぺろ
あと RFC 読んでてはじめて HTTP は改行コードが CRLF なことを知った
Rust に対する不満は VSCode の拡張でフォーマットかけると Vim モードが解除されるとこ。Rust の不満じゃなくて VSCode の不満ですね。
Rubocop
0.48の変更がめんどくてあげたくないという気持ちがある
ますとどん
酔った。たぶんもうやりません。
追記
JSON Schema
2システム間においてやりとりするデータをJSON Schemaで定義しているものとして、JSON Schemaにはarrayのorder定義がない(と思う)のだから送信側がsortするかどうかに関係なく受信側は自身でsortする責務がある
— はくどー (@HKDnet) 2017年4月6日
のだろうか
@HKDnet Arrayはもともと、というかこの文脈だとJSON specか、で明確に順序付けされたものとして定義されているので本来はarrayを作る側 (送信側) の責務でソートするのが基本とは思います。で、値の内容までvalidateするJSON Schemaなんだからそこにチェックを依存
— WAKASUGI 5T111111 (@5t111111) 2017年4月6日
@HKDnet できればいいなと思うのはPropertyOrderの提案が出てることからもわかるんですが、JSON Schemaに限らずソート順はバリデーションでやることじゃないだろというのもあるんですよね。これあんま言葉にできないけど。コールバック関数いるだろうしどう実装するの都合もありそう
— WAKASUGI 5T111111 (@5t111111) 2017年4月6日
@HKDnet その上で、送信側と受信側がソート順という関心事を共有する手段を用意するのはそれはそれでめんどいので、相手のことを知らなくても少なくとも自分でソートできるならやっちゃってもいいのでは、というのが自分の意見ですね。これは責任の所在を曖昧にするけど現実問題都合良さそうってくらいの感覚で
— WAKASUGI 5T111111 (@5t111111) 2017年4月6日
@5t111111 うーん、たしかにJSON Schemaの範囲じゃないから、ってのはわかるんですが、2システム間の約束を文書化し明示し共有しテストしたいからJSON Schemaを使ってるわけで。すると約束の範囲外は未定義だと思って実装するほうが重複してるけど頑健なのかなあ、という迷いがあります。
— はくどー (@HKDnet) 2017年4月6日
@5t111111 似たような結論になりましたねw
— はくどー (@HKDnet) 2017年4月6日
という感じ。