hogashi.*

日記から何から

Bashで文字列のエスケープシーケンスを展開する、ついでに色々マニュアルを見る

 Bashecho '\t' とかやっても \t とそのまま出力されるだけでタブ文字にならなくて、うーんとか言いながら printf に書き換えるというのをずっとやっていたのだけど、さっき echo $'\t' と書くとタブ文字が出力されることを初めて知った。色々調べていくと結局 man を見ましょうということになって面白い。

 man bash を見ると、 QUOTING の節にこう書いてあって、ドル記号とシングルクオートを使って $'string' と書くと、 string の部分で、 ANSI C のバックスラッシュでのエスケープシーケンスを展開して置き換えてくれるということだった、なるほど助かった。

QUOTING
       (中略)
       Words of the form $'string' are treated specially.  The word expands
       to string, with backslash-escaped characters replaced as specified by
       the ANSI C standard.  Backslash escape sequences, if present, are
       decoded as follows:
       (中略)
       A double-quoted string preceded by a dollar sign ($"string") will
       cause the string to be translated according to the current locale.
       If the current locale is C or POSIX, the dollar sign is ignored.  If
       the string is translated and replaced, the replacement is double-
       quoted.
https://www.man7.org/linux/man-pages/man1/bash.1.html#QUOTING

 ちなみに、ドル記号とダブルクオート $"string" はまた違う意味を持っていて、いまの locale によって変換とか置換とかをやりますということが書かれている。 locale が何なのかちゃんと理解してなかったけどこことかを見ると国などによってテキストの表示含めた様々なものをうまくやるための設定のようだった。
wiki.archlinux.jp

 ちなみに(2)、 printf '\t' にするとちゃんとタブ文字で出力されていたのは、 printf が C のエスケープシーケンスを展開するからであるというのも man printf を見るとわかった。
man7.org

 ちなみに(3)、 man printf とやって見れるマニュアルは printf(1) なのだけど、この数字はセクションとのことで、数字ごとに意味を分けているというのが man man を見るとわかった。 1 はユーザコマンドで 3 は C のライブラリ関数というようなことになっていそうで、例えば printf コマンドとライブラリ関数としての printf それぞれのマニュアルが分かれている。それぞれを見るには man 1 printf とか man 3 printf とかやると見られる。 man -k printf とかやると存在するマニュアルが全部出る (apropos コマンドというのと同じ挙動をするらしい、 apropos は「折よく」「それはそうと」みたいな意味のようなので「ところでこれなんだっけ」みたいなコマンドなのかな……)。言われてみると確かに crontab のファイルの書き方を知りたくて man crontab したけど crontab(1) には書いてなくて crontab(5) を見たことがある気がする。数字を覚えていると launchd(8) とか書かれたときにシステム管理者ツール/デーモン系か〜とか分かって便利そうだけど数字を覚えるのが大変そう。

       1   Executable programs or shell commands
       2   System calls (functions provided by the kernel)
       3   Library calls (functions within program libraries)
       4   Special files (usually found in /dev)
       5   File formats and conventions, e.g. /etc/passwd
       6   Games
       7   Miscellaneous (including macro packages and conventions), e.g.
           man(7), groff(7)
       8   System administration commands (usually only for root)
       9   Kernel routines [Non standard]
https://man7.org/linux/man-pages/man1/man.1.html

 ちなみに(4)、 ANSI C が何なのかもちゃんと理解していなかったけどこことかを見ると C 言語の標準のひとつということ? のようだった。
blog.ansi.org

kataribeでクエリパラメータの値を無視してキーの様子だけうまくまとめる

 設定ファイル (toml) で [[replace]] が使える。 kataribe というのはこちら: GitHub - matsuu/kataribe: Access log profiler based on response time

github.com

 ISUCON10 予選の後の感想戦の時間に初めてちゃんと kataribe を使ってみた(予選中は僕じゃない人がやってくれていた)のだけど、 (正規表現にマッチしたものを name として扱うことにするルールである) [[bundle]] だけでちまっと設定を書いてある状態だったので、クエリパラメータの値を無視してキーだけうまくまとめてみたいな、と思い、登場するクエリパラメータそれぞれついている/いないの全通りの [[bundle]] を 2400行くらい書いて(というか js で雑に生成して)見てみていた。

 正規表現にマッチした部分を name で置き換えてくれる、というような動きをしてくれれば 1個のルールで済んで助かるな〜と思って issue を探してみたところ、記事冒頭の issue の通り [[replace]] という設定がもう実装されていることに気づいて、めちゃめちゃテンションが上がった。今後また kataribe を使うときは [[replace]] をバリバリ使ってうまくまとめて見たい。

 ちなみに issue ではクエリパラメータの値を無視するこういう例が紹介されている:

[[replace]]
regexp = '=[0-9]+&'
replace = '=<num>&'

[[replace]]
regexp = '=[0-9]+\s'
replace = '=<num> '
https://github.com/matsuu/kataribe/pull/18#issuecomment-527731712

 これで /hoge?foo=1&bar=2/hoge?foo=3&bar=4 のようなリクエストを同じ /hoge?foo=<num>&bar=<num> としてまとめることができる。

ISUCON10予選参加しました

 ISUCON10 の予選に参加し敗退しました。僕は今回もアプリケーションを眺めてなるほどこういう感じなのか〜とか言ったり、 id:kyontan2id:h-otter がバリバリコード書くのを眺めてなるほどよさそうとかこれ違いそうとか言ったりする役をやりました。あと今回は pt-query-digest を叩いて gist に貼る役もやっていて、初めて叩いてこういう感じなのか〜って言っていました。かなり気軽で便利ということがわかる。今回は地道に点数が上がっていった感じで、途中の点数の上下の理由も大体予測がついてその通りだった気がしている (インデックスなぜか剥げてるとか)。 go は相変わらず全然慣れて無くて読むのさえ遅かった。今は js で雑に 2400行の toml を生成して kataribe でクエリパラメータを正規表現でグルーピングして丁寧に見たりしています。皆様ありがとうございました、お疲れさまでした。

鯖寿司

f:id:hogashi:20200905195028j:plain

 昨夜鯖寿司の話をしていて、店構えが立派だったり売っているものの値段が高かったりする店は入りづらい気がする、なぜなのか、どの店も店だし入る人間は同じなわけだからそんなことはないはず、臆せず入りましょう、それはそれとして明日一緒に行ってもよいです、ということでじゃあと言って引率してもらって(ありがとうございました)昼間に鯖寿司を食べた、確かに特に何の障壁もなく店に入って食べて出られた。食べながら昨日かんぱちを買ったのでぽんず買いたいという話をして、それならここの店がおすすめです、ということでひとりで行って、その店もかなり勇気が要る感じだったのだけど入ってぽんずを買った、買うときに昨日かんぱちを買ってさっきおすすめされて来ましたという話をして、ありがとうございますかんぱちは合います、刺し身もしゃぶしゃぶもいいです、このぽんずはここにこだわっていて、ということを聞いて面白かった。ところで清水寺の近くで買える七味の話もしていて、清水寺にも行った、ミスって自転車で行っていて駐輪場を探したりして、めちゃめちゃ暑くてめちゃめちゃ疲れたけど、清水寺の奥の方の鬱蒼とした道まで行ったのは初めてで良かった。そういう感じで帰ってきて、引っ越してきて給湯器からお湯が出るようになって*1から初めてめちゃめちゃ疲れたので、初めて新居の風呂に(シャワーではなく)湯を張って入った。生活のうちできることを少しずつ増やしている状態。

f:id:hogashi:20200905195053j:plainf:id:hogashi:20200905195106j:plain
清水寺の常夜燈 / なぜかわからないけどくっつけてある

f:id:hogashi:20200905195119j:plain

f:id:hogashi:20200905195015j:plainf:id:hogashi:20200905195132j:plain
奉納放水銃
f:id:hogashi:20200905195142j:plain
馬駐
f:id:hogashi:20200905195155j:plainf:id:hogashi:20200905195208j:plain
天気が良すぎる五条大橋

*1:給湯器が壊れていて1週間くらいお湯が出なくて京都タワーの銭湯に行っていた

商と余りの様子をエディタで見る

 エディタのファイル内検索とかブラウザのページ内検索とかで割り算っぽいことが図で見れて便利というのに気づいた。余りがぐにゃぐにゃ増減するのがおもしろくて、あとはグループが溢れて商が減る様子も見れる。自分で動かしてどうなるのかお試しできると理解が進んで良い。

f:id:hogashi:20200904170943g:plain
商が減っていって余りが増えたり減ったり、その逆になったりする様子