hogashi.*

日記から何から

医者、時計屋、蕎麦屋、床屋、渡月橋、電電宮

 この記事は長めの日記を 川見てる Advent Calendar 2020 - Adventar の 2日目に登録したものです。


 このあいだ有給を取って、様々な雑用を一気にこなし、ついでにお参りもした。引っ越してからかかりつけの医者や床屋などが無い状態になってしまったのでかなり腰が重かったのを、お休みパワーで押し切った。

 まず花粉症を治すための舌下免疫療法を続けるために、アレルギー科の医者に行き、引っ越しなどを説明して薬をもらった。京都の花粉の量は東京より少ないらしく、なるほど、とか言って帰ってきた。

 薬を家に置いて、電池のなくなった腕時計を持ってまた外出。成人祝で親に買ってもらった Knot という時計屋の時計で、長らく元気に動いていたものの、数日前に電池がなくなって止まってしまっていた。京都にも店舗があり、さっと交換の申し込みをすることができた。これを書いている日にはもう交換が済んで、また元気に動いている。

 その足でお昼ごはんを食べに蕎麦屋に行って、しっぼく蕎麦を食べた。肌寒いと思っていたものの、つゆまで飲み干したらすっかり温まって、店を出てしばらくは上着を手に持っていた。

 さらにその足で今度は床屋に入り、緊張しながらすっかりきれいにしてもらう。特に床屋は会話が苦手な人間としてはかなりハードルがあって、新しい店に行くのが非常に難しいのだけど、京都でも床屋に入れる自信がちょっとついた。


 身の回りの細々とした事柄が済んだので、すっきりした気持ちで電車に乗り、電電宮に向かった。路面電車で嵐山の駅にたどり着き、降りて歩くとそこは渡月橋、そして見慣れた三条通りが意外と登場。

f:id:hogashi:20201028193400j:plain
家の近くの三条通りはこんなに西にも続いている

 人はそれなり、歩きづらいことはないけど賑わってはいる、というくらいで、苦なく通行できた。

f:id:hogashi:20201029024424j:plainf:id:hogashi:20201029024546j:plain
渡月橋 / 石垣が曲線で橋詰まで上がってくる

 川は渡月橋の上流側で二手に分かれているので、渡月橋を渡ってから、さらに渡月小橋という小さな橋もある。こちらは下を船が通る。

f:id:hogashi:20201029024717j:plain
下には船が通り、上には親柱に「大堰川」の文字

 橋詰に階段があり、船から上がることができるようになっていた。川でよく見る水位を測る定規がここについていて、結構高い位置まで色がついているので少し緊張感がある。ちなみにこの川は桂川というのだけど、この親柱には大堰川と書かれている。 Wikipedia で見てみると通例の呼び名として大堰川含めいくつかあり、法令上は桂川とのことだった。

通例として、京都市右京区京北地区の流域にかけては「上桂川(かみかつらがわ)」、南丹市園部地区に入ると「桂川」、南丹市八木地区から亀岡市にかけては「大堰川(おおいがわ)」、亀岡市保津町請田から京都市嵐山までは「保津川(ほづがわ)」[1]などと名を変え、嵐山から合流地点は再び「桂川」と称される。

桂川 (淀川水系) - Wikipedia

 確かに文化庁国土交通省など公的な資料でも大堰川保津川という記述がちょこちょこある。堰くという動詞もありそうでおもしろい、そういえば「せきとめる」という言葉がある……。

 この川の堰をもっとちゃんと見たかったものの、ひとまず日が暮れる前に先に電電宮がある法輪寺にお参りすることにした。階段のふもとの右手には、エジソンヘルムホルツをたたえる塔が立っている。脇の斜面を眺めつつ上り、法輪寺電電宮それぞれにお参りしつつ、電電宮のステッカーを買って下りた (今は PC に貼ってある)。

www.kokuzohourinji.com

f:id:hogashi:20201029034101j:plainf:id:hogashi:20201029034954j:plain
法輪寺の階段

 帰りしな、川をよく見るために右往左往した。まず渡月小橋につけてある屋根船のある景色が綺麗だった。

f:id:hogashi:20201101064337j:plainf:id:hogashi:20201101064355j:plain
屋根船のある景色 / "かつらがわ"の看板が立っている

 中洲みたいになっているところには、一ノ井堰の紹介と洛西用水の地図がある。地図を見ると、他にも久我井堰とかもあり他にも堰はあるのだろうなとか、水路とか分水とか見てみたいものが色々ある。ただすでに暗くなりつつあったので、一ノ井堰だけ見て帰ることに決めて、地図にある一ノ井堰の部位を細かくみることにした。

f:id:hogashi:20201122053533j:plain
京野菜を育む堰
f:id:hogashi:20201122054821j:plainf:id:hogashi:20201122054534j:plain
一ノ井堰

 一ノ井堰には洪水吐 / 舟通し / 魚道などがあるとのことで実物を見ると、各部位のつくりが地図よりもずっと迫力を持っている。あんまり詳しくないけど、開いたり閉まったりしそうな機構が見えるのが洪水吐だろうと思うのだけど、常に開いていた。魚道は左右にS字になるタイプではなく、上下に波打つ感じ。

f:id:hogashi:20201122060733j:plain
魚道 / 洪水吐
f:id:hogashi:20201122062153j:plain
舟通し / 洪水吐 / 余水吐

 舟通しは比較的緩やかな坂になっているけど、実際にここを舟で通ると結構怖い感じで素早く降りるのではというくらいには角度がある気がする。手前には余水吐というのもあって、川に下りずに横を走っていって橋の下をくぐっている。ちなみにその隣に機械っぽい何かもあるけどこれがなんなのかはさっぱりわからなかった。

f:id:hogashi:20201122062545j:plainf:id:hogashi:20201122062550j:plain
余水吐は橋の下をくぐる
f:id:hogashi:20201122063400j:plain
屋根船のひき波

 最後に船が川を上っていく様子でお別れです。

 趣味プロダクトの Chrome 拡張機能の Renovate 活動をしていたら TypeScript 4.0.5 が出ていて、 Releases を見たら TypeScript 4.0.4 NOT FOUND とか書かれていてよかった。こういうことをどこで決めているのか気になる (issue を探してみたけどこういうことにしようぜみたいな会話の様子は見つからなかった)。
github.com

For the complete list of fixed issues, check out the

  • fixed issues query for TypeScript v4.0.0 (Beta).
  • fixed issues query for TypeScript v4.0.1 (RC).
  • fixed issues query for TypeScript v4.0.2.
  • fixed issues query for TypeScript v4.0.3.
  • TypeScript 4.0.4 NOT FOUND
  • fixed issues query for TypeScript v4.0.5.
https://github.com/microsoft/TypeScript/releases/tag/v4.0.5

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 でクエリパラメータを正規表現でグルーピングして丁寧に見たりしています。皆様ありがとうございました、お疲れさまでした。