角待ちは対空

おもむろガウェイン

dotfile棚卸し2021

  • 自分はdotfileのリポジトリをpublicにできない側の人間だと受け入れる
  • alias g=git みたいなありがちだけど使ったことのないエイリアス消す
  • 逆に alias c='code' とかは使うし c. の打ち間違いがめちゃくちゃ多いから alias c.='code .' 設定する
  • gitのエイリアスも大体使ってないので消す。 open = !gh repo view -w -b $(git symbolic-ref --short HEAD) 入れる
  • シンボリックリンク貼るスクリプトは自作を止めてthoughtbot/rcmに乗り換える。rcmでできないことはやらない
  • Windows用のファイルは一旦諦める。なくなったら辛いものだけ手動でバックアップ作っておく
  • promptのカスタマイズはStarshipにする。できないことはやらない
  • Karabiner-Elements、iTerm2、Alfredの設定もgitで管理する
  • tmuxのステータスの右側一切見てないので set-option -g status-right "[#h][%m/%d %H:%M:%S#[default]]" くらいにする。多分次回は消してる
  • fzfとpecoを併用してたけどfzfに一本化する
  • tmux popupかっこいいのでfzfの選択画面に設定する
  • ghq.root をデフォルトの ~/ghq にする
  • zsh completionの管理がだるいので見なかったことにする。brewが良い感じにしてくれたり自前でどうにかしないといけなかったりしてめんどくさい
  • zsh_historyのバックアップをLaunchAgentsで設定する。ヒストリーないと生産性5割くらい下がるような生き方してる
  • brewでzsh入れるの止めてシステムデフォルトのやつ入れる

ターミナル環境にそこまでこだわりないのでなるべくデフォルトで過ごしたいけど無理にデフォルトに寄せるほどこだわりもない。VS Codeのターミナルで生活したいと思う一方、一本化もできないのでiTerm2使ってる。定期的にBash移行したいと思ってたけどMacOSのデフォルトがzshになってしまったのでモチベーションなくなった。

それはそうとなんか昔ほどこだわりdotfileをご紹介みたいなエントリが流れてこない。

MySQLとPostgreSQLの述語ロックについて

MySQLはともかくPostgreSQLはあまり詳しくないのだが、PostgreSQLの述語ロック(Predicate Locks)が気になったので調べた。

述語ロック

一般的にロックには粒度とモードという概念がある。前者はレコードロックとかテーブルロックとかロックの範囲に関わるもので、後者は排他ロックだとか共有ロックだとか両立性に関わるものである。述語ロックは前者に属する概念であると理解している。

述語ロックがなにの役に立つのか?それはファントムの防止である。粒度ロック(典型的にはレコードロックとテーブルロック)が存在するシステムにおいて2相ロック:Two-Phase Lock(2PL)に従ってレコードロックしているだけでは、ファントムのようなAnomalyが防止できることは保証できない。リレーショナルデータベース入門には「SQLのSERIALIZABLEという隔離性水準は、2PLに加えて、述語ロックをかけて幽霊現象の発生を抑えるところまで求めた水準である」と書いてある。

これは単にレコードをロックしていくだけではレコードとレコードの間への書き込みを阻止できないからである。したがってレコードロックのように、そのとき実在するレコードだけでなくレコードとレコードの間もロックできる必要がでてくる。ちなみにテーブルロックもこの条件に当てはまるが今度はパフォーマンスの問題が出てくるのでロックの粒度はなるべく小さくしたい。

レコードロックがwhere句に対応するレコードに対してロックをとっているのに対して、述語ロックはいわばwhere句そのものにロックをとるイメージである。つまりc = 2、3というレコードがあったとして where 1 <= c and c <= 5でロックをとろうと思ったとき、レコードロックは存在する2と4にしかロックをとらないが、述語ロックは1 <= c <= 5という範囲にロックをとることが求められる。

さて述語ロックについて重要な性質の一つに実装が困難なことがある。ロックの両立性を考えるとき述語ロックは<t, lock mode, predicate>のような組で考えることができる。tはトランザクションで同じトランザクション同士ならば両立する。lock modeは共有ロックか排他ロックか。predicate(述語)はwhere句だと思えば良い。異なる二つの述語が真になる集合に共通の要素があるかどうかを判定するのはSAT問題であるからこれを実装するのは容易ではない。述語が単純である場合は比較的簡単に実装できるらしいが、実際どういう述語=where句ならば現実的に実装できるのかは詳しくない。

したがって現実的には述語ロックではなく、もうすこし単純化した手法でレコード間へのロックを防ぐことになる。その実装がMySQLでいえば、あの有名なギャップロックである。ギャップロックは述語ロックより大きめの範囲をロックすることで処理を容易にしている。またMySQLの場合はネクストキーロックという仕組みでロックをとっている。解説はネット上にいくらでもあるのでそちらを参照して欲しい。MySQLのコードを読むとMySQLのロックの粒度やモードはtype_modeで表現されることがわかるが、ロックのtypeはtableとrecordしかない。では、ギャップはどのように表現しているのかというと、record typeに対してのフラグで表現されている。ネクストキーロックはレコードを識別子(レコードが定まればギャップが一意)にできるので、テーブルロックとレコードロックという2種類の粒度しかないロックテーブルの実装においてもフラグという形でギャップという概念を導入できるし、レコードロックのわずかな拡張でロッキングプロトコルを実装できる。と、理解している。

そういう事情があるのでPostgreSQLには述語ロックがあると聞いたとき、どうやって実装したのかが気になったという次第である。前述したとおり「述語が単純である場合比較的簡単に実装できるらしいがあまり詳しくない」というのがあったので、述語(where句)が単純な場合は完全な述語ロックが、そうでない場合はなにかしらの近似が実装されていることを期待した。

PostgreSQLの述語ロック

まずPostgreSQLの述語ロックはリソースに対するアクセス制限を課すような普通のロックではない。この辺はロック(というかロックマネジャー)の仕組みが一つしかないMySQLとは対照的だと思う。PostgreSQLの述語ロックはどちらかといえばトラッカーというイメージである。トランザクションが触った部分に対してマークをつけておきコミットするときに違反が起きてないかチェックする。いわゆる楽観的ロックの類いだと思っている。トランザクション中に読みこんだレコードがあればそれを表現する部分にSIReadLockを取得していきコミット前に矛盾がないかチェックし、abortかcommitかを決定していく。ロックマネジャーもMySQLのように1つしかないわけではなく、専用のロックマネージャーをメモリ上のハッシュテーブルとして持っている。

各トランザクションがどういうデータの触り方をしたらabortすべきかは長くなるので省く(ヒドい)が、述語ロックではrw-antidependenciesだけ防げれば良い(それ以外のデータ依存性については他の仕組みでカバーされている)。rw-antidependenciesだけ考慮すれば良いのでSIReadLockはあってSIWriteLockはない理由だろう。書き込みをマークする必要ない。

で、どのように述語ロックを表現するかというとこれは単純にレコードにマークするだけである。あとからきたトランザクションが競合するかどうかは単純にレコードの間かどうかで判定する。また読み混んだレコードすべてにマークをつけていくとメモリを使いすぎるのでマークをつけたレコードが多くなりすぎたらより大きい粒度へ昇格(escalation)していく。はじめはレコード、次にページ、次にテーブルというように。この辺の粒度を荒くしてパフォーマンスを上げる方法はネクストキーロックと同じものを感じる。max_pred_locks_per_pageなどのパラメータが昇格の閾値を決めるパラメータである。昇格によってロックの範囲が広くなればabortする必要のないトランザクションもabortすることになるがそれは諦めているっぽい。

結局最初のモチベーションは

前述したとおり「述語が単純である場合比較的簡単に実装できるらしいがあまり詳しくない」というのがあったので、述語(where句)が単純な場合は完全な述語ロックが、そうでない場合はなにかしらの近似が実装されていることを期待した。

だったが、そういう感じではなかった。が、MySQLとの違いを知れて楽しかった。

参考本

述語ロックは以下が詳しい。

特に述語ロックからネクストキーロックの説明に入ってるのは「トランザクション処理」しか知らない(覚えてない)。MySQLの実装時にも参考にされた本なので一度読むとMySQLのコードがめちゃくちゃ読みやすくなる。翻訳版はまぁまぁ手に入らない

PostgreSQLには詳しくないので以下のサイトで学んだ。

あとPostgreSQLは解説が親切。

この記事ではMVCCとか分離性一般の話はしなかった。長くなるので。その辺の話は

あたりがおすすめだが、分散データベースを意識してるし、記述されている範囲が広いので初めて学ぶMVCCという感じではないかも知れない。ウェブ上であれば以下のシリーズがおすすめ。

MySQL使ってるのであれば以下が一番読みやすいと思う。

詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド (NEXT ONE)

詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド (NEXT ONE)

  • 作者:奥野 幹也
  • 発売日: 2016/08/26
  • メディア: 単行本(ソフトカバー)

教科書的で良いのであればリレーショナルデータベース入門。

GWにちいかわをキャッチアップしたい人に送るまとめ

ついにはじまった「おっきい討伐」編。ますます注目の集まるちいかわをこのGWでキャッチアップしたいという人も多いのでは?このエントリでは過去のちいかわを振り返って行きます。

ちいかわとは
「なんか小さくてかわいいやつ」です。もともとはナガノ氏のこういう風になりたいという願望のキャラだったはずですが、今はあまり願望の投影という面は強調されず、キャラクターたちの可愛い掛け合い、その裏にある緻密なストーリーラインと独特の世界観が魅力のWeb漫画です。

twitter.com

単行本も出てます。

初期の願望っぽい形式

https://twitter.com/ngnchiikawa/status/1218762360187281409
https://twitter.com/ngnchiikawa/status/1219168559097577472
https://twitter.com/ngnchiikawa/status/1219541971363979264
https://twitter.com/ngnchiikawa/status/1220250277439082496
https://twitter.com/ngnchiikawa/status/1220663187776761861


主要キャラクター
主要メンバーはちいかわ、ハチワレ、うさぎです。
ちいかわは架空の生物っぽいですが、ハチワレは猫、うさぎはうさぎがモデルの生物です。基本的にお互いの名前は呼び合わないのでTwitterでは名前がついてることを確認するのが難しいですが単行本には表記されてます。

ちいかわ
主人公。ちいさくてかわいいやつ。
基本的にしゃべらないけどまったくしゃべれないというわけではなさそう。

ハチワレ
主要メンバーの中では唯一流暢に喋べれるので物語の牽引役になることが多い。初期は感情死んでるのか?ってくらいポジティブでしたが今はそうでもない。


https://twitter.com/ngnchiikawa/status/1259130664357474304
https://twitter.com/ngnchiikawa/status/1268592227523022854

完全にねこです。

結構うっかりさんなので名称を勘違いすることが多い。

ディスコミュニケーションが多い印象。
https://twitter.com/ngnchiikawa/status/1256934119499378688

穴編くらいから喜楽以外の感情も表現されるようになった。
https://twitter.com/ngnchiikawa/status/1288970331424567296
https://twitter.com/ngnchiikawa/status/1289700808020250624
https://twitter.com/ngnchiikawa/status/1290259809145479170
https://twitter.com/ngnchiikawa/status/1290779189646245894
https://twitter.com/ngnchiikawa/status/1291132291851235328
https://twitter.com/ngnchiikawa/status/1291491225447485441
https://twitter.com/ngnchiikawa/status/1291676165413810179

うさぎ
テンションが高くて態度が悪いけど憎めないやつ。


その他のキャラクター

栗まんじゅう
いつも酒飲んでるおっさん。本当にこうなりたいのはこっちだろという感じ。

https://twitter.com/ngnchiikawa/status/1223931215998140417
https://twitter.com/ngnchiikawa/status/1227510955929563136
酒飲んでるおっさんだけど、その様はちいかわ達からは憧れの対象になることが多い

鎧さん
世界観に全然マッチしない(ようにみえる)鎧。色違いで複数いる。灰色はちいかわたちにポシェット渡してたりする個体。


https://twitter.com/ngnchiikawa/status/1288038867832934400

全体的にかわいい趣味してる。
https://twitter.com/ngnchiikawa/status/1310607134288089090
https://twitter.com/ngnchiikawa/status/1337749422877261824
https://twitter.com/ngnchiikawa/status/1338411272723783685

後述しますが、この世界の管理者っぽい立場で、ちいかわ達とは「仲良くしすぎだ」と釘を刺されていたりする。

モモンガ
一見すると、本当はかわいくなりたいけど素直になれない、若干うさぎとかぶってるキャラ。


https://twitter.com/ngnchiikawa/status/1349774296810364929
https://twitter.com/ngnchiikawa/status/1383383866841329670

後述しますが、このキャラはかなり不穏。今後注目のキャラです。

上位ランカー
討伐もあとで解説しますが、討伐で名をあげている生き物。結構親しみやすい。


https://twitter.com/ngnchiikawa/status/1361312821191995393

巨大なたべものが出てくることが多い。メルヘン世界観。


https://twitter.com/ngnchiikawa/status/1221617681654108160
https://twitter.com/ngnchiikawa/status/1221832141786378241
https://twitter.com/ngnchiikawa/status/1224093523995054080
https://twitter.com/ngnchiikawa/status/1237394872690069508
https://twitter.com/ngnchiikawa/status/1267117517530525705
https://twitter.com/ngnchiikawa/status/1274749184353038339
https://twitter.com/ngnchiikawa/status/1282707975853883392
https://twitter.com/ngnchiikawa/status/1339919710767382528

すでに栗まんじゅうを紹介したのでわかると思いますが、かなり渋いたべものや酒もある。ナガノ氏の趣味の反映では?という面はある。

ジンジャエールって想像上のお酒の味。


https://twitter.com/ngnchiikawa/status/1368568075151282185

実在する商品もバンバン出てきます。

https://twitter.com/ngnchiikawa/status/1225233644689559552
https://twitter.com/ngnchiikawa/status/1225932325600579586
https://twitter.com/ngnchiikawa/status/1225540776173670401

ラーメン二郎編。なぜかここは郎という抽象表現になってる。


https://twitter.com/ngnchiikawa/status/1308471235295105024
https://twitter.com/ngnchiikawa/status/1308777306362646531
https://twitter.com/ngnchiikawa/status/1309179315859283973

ちなみにチャリメラ改めチャルメラはコラボもしてる。

沸きどころ
ちいかわ屈指の狂った概念である沸きどころの概念は押さえておきたい。
https://twitter.com/ngnchiikawa/status/1252210821951717376
https://twitter.com/ngnchiikawa/status/1296832618319683584

名作、無限白米沸きドコロ。


https://twitter.com/ngnchiikawa/status/1361988255365828612
https://twitter.com/ngnchiikawa/status/1362524595866148865
https://twitter.com/ngnchiikawa/status/1365295940425326592

むちゃうまシリーズも重要。むちゃうまプリン懸賞すき焼き回からの問題の「仲良くしすぎだ」につながる。


https://twitter.com/ngnchiikawa/status/1352249713664249858
https://twitter.com/ngnchiikawa/status/1353664931489452037
https://twitter.com/ngnchiikawa/status/1354419035446763526
https://twitter.com/ngnchiikawa/status/1354806388564709393
https://twitter.com/ngnchiikawa/status/1355406957998342146
https://twitter.com/ngnchiikawa/status/1356201987788873733


キャラによってかなり差があるのが印象的。ちいかわは何の努力もなしにいい部屋に住んでいる一方、ハチワレは洞窟とかなり悲惨。


仕事

鎧さんがちいかわ達に斡旋しているという世界観。

討伐、草むしり、シール貼り、おっきい討伐、採取などが確認されている

採取
夜勤もある。


https://twitter.com/ngnchiikawa/status/1348063360965742594
https://twitter.com/ngnchiikawa/status/1348584621135564801

シール貼り
オフィスグリコもある。

https://twitter.com/ngnchiikawa/status/1383749103046119432
https://twitter.com/ngnchiikawa/status/1387387501422145538

ちなみに黒抜きのモブっぽいキャラはちゃんと個体が区別されていてちょくちょく物語に関わってくる
https://twitter.com/ngnchiikawa/status/1384551713055539200

草むしり
思ったより危険なのかもしれない。

ハートフル長編。草むしり検定編。「同じ気持ちじゃないときどうしたらいいんだろう」
https://twitter.com/ngnchiikawa/status/1299008797373956097
https://twitter.com/ngnchiikawa/status/1299394083547312128
https://twitter.com/ngnchiikawa/status/1314937356802121729
https://twitter.com/ngnchiikawa/status/1316213700408176640
https://twitter.com/ngnchiikawa/status/1316788384115818497
https://twitter.com/ngnchiikawa/status/1318115062855266306
https://twitter.com/ngnchiikawa/status/1318583264605425666
https://twitter.com/ngnchiikawa/status/1319251030580752384
https://twitter.com/ngnchiikawa/status/1319601801218306049
https://twitter.com/ngnchiikawa/status/1320320428481507333
https://twitter.com/ngnchiikawa/status/1320746124655751168
https://twitter.com/ngnchiikawa/status/1321103203409145856
https://twitter.com/ngnchiikawa/status/1321461741415403520
https://twitter.com/ngnchiikawa/status/1321887916851781632

ちなみに再受験もしてる。え、そういうオチにする?とみんなびっくりした。
https://twitter.com/ngnchiikawa/status/1356541148907462657
https://twitter.com/ngnchiikawa/status/1357275085862670337
https://twitter.com/ngnchiikawa/status/1357740181810421761
https://twitter.com/ngnchiikawa/status/1358050262271754241
https://twitter.com/ngnchiikawa/status/1358395958413955076

まだ継続的勉強してるので今後も展開があるかもしれない
https://twitter.com/ngnchiikawa/status/1366759543288463369
https://twitter.com/ngnchiikawa/status/1367497991104438286

討伐

そもそもこの世界友好的な生物だけじゃなくて敵対する生物もいる。

よくわからない生物もいる。
https://twitter.com/ngnchiikawa/status/1256592902983045120

武器はさすまたを使う。


https://twitter.com/ngnchiikawa/status/1269320179814563840

ハチワレの家には時々現れる。悲惨な住環境。


https://twitter.com/ngnchiikawa/status/1272537957543538688

討伐成績ランキング4位までにはいると、武器に自分の顔マークが入れられるのが(復習)、うさぎは勝手にマーク入れてるし武器の文化レベルが高い。
https://twitter.com/ngnchiikawa/status/1363424740673687553

失敗することもあり。

単純な敵性生物だけじゃなくて友好型や擬態型もいる。鎧さん達は擬態型に気を配っている様子。
https://twitter.com/ngnchiikawa/status/1345063528579776512


https://twitter.com/ngnchiikawa/status/1346089852798812161

友好型

友好型、擬態型に関する長編。おっきい討伐も示唆されている。結末のスピード感がよい。
https://twitter.com/ngnchiikawa/status/1368947510228647939
https://twitter.com/ngnchiikawa/status/1369410542687895573
https://twitter.com/ngnchiikawa/status/1369953094834950144
https://twitter.com/ngnchiikawa/status/1370437969488740352
https://twitter.com/ngnchiikawa/status/1370632732456329218
https://twitter.com/ngnchiikawa/status/1371396854257098752
https://twitter.com/ngnchiikawa/status/1371754158785654785
https://twitter.com/ngnchiikawa/status/1372165886921039873
https://twitter.com/ngnchiikawa/status/1372593194249064448
https://twitter.com/ngnchiikawa/status/1373203116389109760
https://twitter.com/ngnchiikawa/status/1373669010181554180
https://twitter.com/ngnchiikawa/status/1374087394165551104
https://twitter.com/ngnchiikawa/status/1374706916039872515
https://twitter.com/ngnchiikawa/status/1375079426128371717
https://twitter.com/ngnchiikawa/status/1375746972146049024
https://twitter.com/ngnchiikawa/status/1376477881329545217
https://twitter.com/ngnchiikawa/status/1376937544345026564


ちいかわ今後の注目ポイント

追うべきラインの一つはついに始まったおっきい討伐。一体どんなスペクタクルが展開されるのか目が離せないですね。(実際は一瞬で終わるかも知れない。わからない)


もう一つはモモンガです。このキャラの周辺はかなり不穏なのでいくつか伏線であろう回をまとめておきます。
結構初期から入れ替わりや変身などの可能性が示唆されている。

(自我を保ったまま)人形にさせられた回。
https://twitter.com/ngnchiikawa/status/1276179453144469505
https://twitter.com/ngnchiikawa/status/1276896523498876928


https://twitter.com/ngnchiikawa/status/1278728805192851465
https://twitter.com/ngnchiikawa/status/1279411900007108609

ちいかわとウサギが異形に変身する回。
https://twitter.com/ngnchiikawa/status/1301174831753211904
https://twitter.com/ngnchiikawa/status/1301570949095911424
https://twitter.com/ngnchiikawa/status/1301834956772003840


https://twitter.com/ngnchiikawa/status/1302963721396867072
https://twitter.com/ngnchiikawa/status/1303341127454453760
https://twitter.com/ngnchiikawa/status/1304044546594992129

夜勤星回。
https://twitter.com/ngnchiikawa/status/1311656824098103302
https://twitter.com/ngnchiikawa/status/1312319124261937153
https://twitter.com/ngnchiikawa/status/1313126407564783620
https://twitter.com/ngnchiikawa/status/1313453091686019074

その最後が重要。涙を流して何かを願っている描写がある。

この生物はなんなのかというと「返せ」とモモンガを追いかけ回していた生物です。

一方でモモンガの初登場回をみると、かなりあさった様子ながら「ついにやったゾ」と叫んでます。


さて一体モモンガはなにをやったのか、異形の生物が涙していた理由とは、なぜモモンガを追っているのか、何を返せといっているのか、今後の展開が楽しみです。

おまけ

その他
紹介の都合上細切れになってしまったのですが、ハチワレはずっとカメラが欲しいと思っていました。

そのために草むしりや討伐を頑張っていた感じですね。
https://twitter.com/ngnchiikawa/status/1295750384145666050

魔法の杖回でもカメラを出しています。結局手には入りませんでした。
https://twitter.com/ngnchiikawa/status/1304044546594992129

また夜勤星会でもカメラが欲しいと願っています。
https://twitter.com/ngnchiikawa/status/1313453091686019074

その後三つ星レストランに行く長編があります。草むしり検定ともちょっとつながっている
https://twitter.com/ngnchiikawa/status/1326803698891157504
https://twitter.com/ngnchiikawa/status/1327526305374498816
https://twitter.com/ngnchiikawa/status/1328298269835808768
https://twitter.com/ngnchiikawa/status/1328641302129303553
https://twitter.com/ngnchiikawa/status/1329427204619472896
https://twitter.com/ngnchiikawa/status/1330063698908639239
https://twitter.com/ngnchiikawa/status/1330885021834440704
https://twitter.com/ngnchiikawa/status/1331569793808285696
https://twitter.com/ngnchiikawa/status/1332013157603151873
https://twitter.com/ngnchiikawa/status/1332574620499681282
https://twitter.com/ngnchiikawa/status/1333338273125597185
https://twitter.com/ngnchiikawa/status/1335159536756256769

さらにその後ちゃんとカメラを買ってます。恩返しとして星に叶えてもらったとハチワレは思ってそうですが、地道に労働した結果買っているので偉いです。よかったね。ハートフル回です。


https://twitter.com/ngnchiikawa/status/1341068280832819201
https://twitter.com/ngnchiikawa/status/1341308691291623424
https://twitter.com/ngnchiikawa/status/1342408869675376640
https://twitter.com/ngnchiikawa/status/1342757133830393857
https://twitter.com/ngnchiikawa/status/1343577158208245760
https://twitter.com/ngnchiikawa/status/1343897086605946880
https://twitter.com/ngnchiikawa/status/1344207024553222144