2023-03
2023-03-31
3月も終わりやね
今までずっとGTK_IM_MODULE=fcitxを設定していなかったことが明らかに
嘘だろ???
Tail Modulo Constructor でList.mapが末尾再帰になって速い!みたいな話,元々何かのライブラリ(Jane Street Core あたり?)がコンストラクタの内部表現とrefの内部表現が同じことを悪用してObj.magicとかでやってたのが文脈としてありそう(そういう記事を読んだ記憶がある)のだが,ちょっと探しただけでは見つけられなかった
募集しています
あった!!!
http://www.a-k-r.org/d/2020-03.html#a2020_03_30_1
Coq かよ
今(?)明かされる歴史
https://twitter.com/tanaka_akr/status/1245004087633965056
ところで,Jane Street Core のList.mapを読んだら ExtLib や Batteries とは違う意味でえげつなかった
base/list.ml at fedfc39f9bf86a9a1eb72e9ad493529266ca1b0f · janestreet/base · GitHub
定数倍で再帰深度を減速させるmap(count_map)を適用していき,再帰深度が閾値を超えたら末尾再帰版に切り替え
末尾再帰版もオブジェクト確保回数を減らすために9個ずつまとめて処理している
なんで9なんだろう,OCaml の内部表現を知ってるとなるほどみたいになる値なんだろうか?
真面目に.mliを書いているが,まあ普通にダルい
書かなくてもええ!という向きもあるが,それはそれで全てが公開されるノーガード戦法になってどうなん?という気持ち
なんかこう,pubとか書いたらいい感じに生成してくれたりしませんか?
というか OCaml は全体的にアクセス制御とか無いという感じがする
モジュール制約とかはあるので抽象化で困ることはあんまりなさそうだけど
dune のライブラリの境界は存在するな
そういう中で.mliは貴重な公開制御の方法であるとは言える
2023-03-30
CDCLアルゴリズムを実装した
ありえん速い
やはり自分は文献を読み込んでその結果を一気に吐き出すみたいな感じでコードを書いたほうがいいんじゃないかという気がしている
十分に手を動かしてからそれをその通りに実装する
こうしたほうがバグらせにくい
問題が十分に単純で,調べつつやったほうが早いみたいなケースもありはするけど
みた
女子高生の無駄づかい 第11話「ゆめ」
いい話すぎる
冰剣みたいな変なワイプあって感動
女子高生の無駄づかい 第12話「なかま」
ありえない終わりかた
良すぎる
2023-03-29
CDCLアルゴリズムを実装しようとする
First UIP cut を取ろうとする
トポロジカルソート的なやつがあるといい?と思って実装したが,よく考えると導出のログを下から見れば Conflict Graph のトポロジカルソートになっているのでそれを使えばいいということに気付いた
花粉症なのか睡眠不足なのか体調が破滅していて,↑を確認するくらいしかできなかった
みた
OCaml - The “Tail Modulo Constructor” program transformation
2023-03-28
SATソルバをいじる
監視リテラル周辺
監視リテラルの変数→節の対応を保持する構造をint list arrayからint Queue.t arrayにしてみる
別に速くならなかったしStateful Programmingの度合いが上がるだけだった
監視リテラルにおいて,次に辿る変数の集合をスタックで管理していたのをキューにしてみる
Implication Graph を DFS で辿っていたのを BFS で辿るようになる
conflict に繋がらない部分をひたすら探索しないようになるので少し速くなるかも?と思ったがあまり変わらず
多くの場合全部辿るので大差ないのかも
監視リテラルの変数→節の対応と節→リテラルの対応の更新が別々になっていて,薄氷を踏むように丁寧に更新していた
最悪状態マシマシプログラミング
遷移をグッと睨むと一般化できたので,監視リテラルを更新する関数を呼ぶだけで構造が更新されるようになった
次は CDCLアルゴリズム
みた
女子高生の無駄づかい 第10話「ろぼ」
2023-03-27
みた
アルスの巨獣 第12話「指輪の審判」
やばすぎ
SATソルバ書き進め
監視リテラルを実装
4倍速くなって感動
ハチャメチャにバグらせたりした
デバッグモードを用意して適当なステップで冗長なアルゴリズムを使って状態を検査してあげるといい
契約プログラミングのありがたみだ
2023-03-23
冰剣、楽しみだ
みた
冰剣の魔術師が世界を統べる 第12話「世界最強の魔術師である少年は、真理世界《アーカーシャ》を斬り啓く」
字幕を読まないと話が全くわからないすごすぎるアニメ
でも面白いんだよな
低予算レヴュースタァライト
2023-03-22
みた
アルスの巨獣 第11話「泡沫の華」
転生王女と天才令嬢の魔法革命 第十二話「彼女と彼女の魔法革命」
そう?
大雪海のカイナ 第11話「希望の目盛り」
次は劇場版でってことらしい、そんなことある?
昨日に引き続きSATソルバ
「関数型」なデータ構造が使えるか?ということを考えていた
永続な感じのやつ
使う利点としては
バックジャンプが行われるときに少ないコストで戻せる
プログラムが明確(諸説あり)
かなり微妙そう
巻き戻す必要のある状態が少ない
これは逆で、刹那的なデータ構造で状態を持つ場合巻き戻す処理が重く、これを行わないで済むような最適化手法が研究されているということだと思われる
監視リテラルや VSIDS
変数の割当を格納する構造くらい
レベル単位でしか巻き戻しが起きない
あらゆる操作のタイミングの状態を記録できる構造はオーバースペックに思える
CDCLアルゴリズムは複数のレベルを跨いたバックジャンプを行うので、各レベルで状態を保存するのも微妙
コストはバックジャンプのタイミングで必要な分だけまとめて払いたい
激しい読み込みが発生する
監視リテラルは新たに割り当てられたリテラルの処理を遅延させる効果を持つので、この手法を導入することを前提にした場合、節を表現する配列を端から読んでいって各変数の割当を確認するという操作が大量に発生する
割当を配列で管理すればこの操作のコストは最小と言える
これにトータルで勝てる気がしない
どうしたらいいんだ?
2023-03-21
SATソルバ書いてた
First UIP cut ってどうやって求めればいい?
素朴に割当を計算していくと Implication Graph は求められるが、これは Conflict Graph ではない
$ \botに向かわないノードを持つ
たぶんこう:
変数の割当を決めるとき、その割当が発生したレベルと割当を発生させた節を覚えておく
割当を発生させる節は複数存在する可能性があるないわ
そんなことある?と思う、もしかしたらないかも
割当が決まったとき、その変数を含む節は全てその変数とは関係のない節になる
充足される or それ以外の未割当の変数を見る
どう覚えておく必要があるかに特に制限はないが、単位節伝播が発生する度に Implication Graph の First UIP cut を前提とすると Implication Graph の構造は最新の決定レベルに関するものしか覚えておかなくてよい
conflict が起きたとき、割当$ a=(x:=t)\in\Lambdaについて次の2つの節が Conflict Graph における$ \botに直接向かう辺になる
$ \lnot aを導く「直接の」原因節
$ aを導く原因節
これは前述した部分で覚えている
なんかかなり違う気がしてきたtosuke.icon
conflict が起きた位置から Implication Graph を辿って、current level に関する decision からの Conflict Graph を再構成し、decision から UIPs を辿っていけば First UIP が求められる
この仮定で current level に属さない割当を他に保持しておけばいい、のか?
2023-03-20
dune のノリがなんとなくわかってきた
dune {build,test} --watchの体験がいい
昔マシンパワーにものを言わせてyarn jest --watchとyarn webpack --watchとyarn storybookを同時に動かしていたのを思い出した
可視性の制御がわからない
duneの libraries 項に書く/書かない以外になかったりするのか?
dune における library は cargo における crate に相当する概念に見えるが……
つまるところ,モジュール単位の可視性制御が無い気がする?
もちろん signature によるモジュールの外に見せる/見せないの制御は可能なわけだが
dune 自体のソースコードを読めばいいのでは?
設計者の思想が現れるプロジェクト構造になっているはず
GitHub - ocaml/dune: A composable build system for OCaml.
めっちゃ library を切り出してる!
完
ocamllex って OCaml 本体に同梱されてるんだ
すごすぎるだろ
2023-03-19
なにもなし
2023-03-18
みた
NieR Automata Ver1.1a Chapter.8 aji wo Kutta ?
2023-03-17
移動、疲労
2023-03-16
みた
お兄ちゃんはおしまい!第11話「まひろと女子のたしなみ」
萌萌萌萌萌萌萌萌萌萌萌
冰剣の魔術師が世界を統べる 第11話「世界最強の魔術師である少年は、過去と共鳴する」
声〜〜〜! ←天才
冰剣、楽しみだ
ぼっち・ざ・ろっく 第11話「十二進法の夕景」との共通点
予告のサムネイル
FYI: https://twitter.com/SnO2WMaN/status/1636349186823319553
主人公のクラスがメイド喫茶をやる
メイド喫茶のメニューがオムライス
お化け屋敷がある
世紀末な感じの人間が出てくる
主人公が抜け出して他の店を巡る
2023-03-15
みた
NieR Automata Ver1.1a Chapter.7 Questionable actions
転生王女と天才令嬢の魔法革命 第十一話「失意と決意の精霊契約」
苦しい、くるs……バトル!?!?!?!
大雪海のカイナ 第10話「建設者」
エーッ
アルスの巨獣 第10話「守り人の使者」
オオッッッッ
2023-03-14
CDCLを勉強する
FIrst UIP cut は徹底的に「損をしない」という方針で組み立てられているように見える,面白い
大会とかだと意地悪な問題が与えられることを前提とするわけで,攻めた戦略を取るとそこを突かれて遅くなってしまうということなのかもしれない
sushi-sumo hell
2023-03-13
やばくなE(?)
SATソルバの CDCLアルゴリズムについて勉強していた
CDCLを勉強する
カレーを一皿だけ作る
割とよかった
2023-03-12
簡単な DPLL アルゴリズムの SATソルバを書いた
本当に単純だった,面白くなさすぎる
知った
rlwrap
2023-03-11
みた
女子高生の無駄づかい 第8話「みずぎかい」
冰剣の魔術師が世界を統べる 第8話「世界最強の魔術師である少年は、薔薇を鼓舞する」に通じる,というかほぼ同じことをやっていて面白い
女子高生の無駄づかい 第9話「おしゃれ」
2023-03-10
やばE
出した
ICTSC2022に参加しました - it.todo("should be a (web)log");
各方面から作問をしろという無言有言の圧力を受けています!!!
しかしまあもしかしたら……
みた
冰剣の魔術師が世界を統べる 第10話「世界最強の魔術師である少年は、メイド喫茶を準備する」
NieR Automata Ver1.1a Chapter.6 Lone wolf
転生王女と天才令嬢の魔法革命 第十話「諦観と激情の王位継承」
大雪海のカイナ 第6話「籠の中のリリハ」
大雪海のカイナ 第7話「要塞の国」
大雪海のカイナ 第8話「漂流」
大雪海のカイナ 第9話「古王宮の旗標」
BLAME! の建設者が出てきて、感動
アルスの巨獣 第8話「同一性の証明」
アルスの巨獣 第9話「士と医」
2023-03-09
借りた
GPUを支える技術
論理と計算のしくみ
全然別ベクトルだけど計算って好きやねんになったため
2023-04-17 までだけど 2023-04-15 とか 2023-04-14 とかに返せるといいね
みた
お兄ちゃんはおしまい!第10話「まひろとおっぱいとアイデンティティ」
ニア僧侶
2023-03-08
実行した社交性(社交性とは?)の「反動」が出て,ここ数日静止していた
だめすぎる
2023-03-07
2023-03-06
2023-03-05
ICTSC2022
4人友達がいてよかった
2023-03-04
ICTSC2022
Splatoon3
ビッグ・ラン
たのしい
2023-03-03
家事
2023-03-02
お兄ちゃんはおしまい!第9話「まひろと年末年始」
今回は普通だな……って思ったら無言パートがやばすぎた
冰剣の魔術師が世界を統べる 第9話「世界最強の魔術師である少年は、呪縛を開放する」
《第一質料<プリママテリア>=エンコーディング=物質<マテリアル>コード》
《物質<マテリアル>コード=ディコーディング》
《物質<マテリアル>コード=プロセシング=四原因説<アイティア>=質量因<ヒュレー>=形相因<エイドス>=作用因<エフィシェン>=目的因<テロス>》
《エンボディメント=因果律<コーザリティ>》
第3部までやるらしいです
冰剣の魔術師が世界を統べる 第10話「世界最強の魔術師である少年は、メイド喫茶を準備する」って何?
2023-03-01
k3s はデフォルトでは IPv6 が無効らしいので有効にしてデュアルスタッククラスタにする
デフォルトでは flannel が使われているのでそれに従えばいい,と思いきや,NetworkPolicy の実装に kube-router が使われていて,これを無効にする必要がある
ということが Discussion のコメントに書いてある
ドキュメントに書け!!!
kube-router は IPv6 未対応なので動かないのは当然
ところでどうして Canal を使わなかったんですか?
servicelb という謎の Loadbalancer Service を提供する機能があるので,一応これを使っていこう
NodePort Service で DNAT 書くの面倒だし
なぜか IPv4 のアドレスしか振られなかった
klipper-lb が本体……と思いきや,アドレスを振る部分は k3s 本体に存在する
k3s/servicelb.go at ee28c20b62d32aea012c96cb85d705f4c4db16cd · k3s-io/k3s · GitHub
どうやら LB として選出されたノードのアドレスを持ってくるらしい
--node-ipオプションを使うと Internal なアドレスが振られるが,なぜか IPv4 を1つしか受け取ってくれなかったので,--node-external-ipオプションを使って External なアドレスを振って解決
External アドレスが優先的に使われる k3s/servicelb.go at ee28c20b62d32aea012c96cb85d705f4c4db16cd · k3s-io/k3s · GitHub
Kubernetes 上で tailscale の名前解決をする
転生王女と天才令嬢の魔法革命 第九話「姉弟と誰がための王冠」
死を賜る←そんな表現あるんだ
#日報