検証の検証をした結果、最後のループが見てる Compilation が違うじゃねーかボケになりました。おわり
スクリプトモードでコンパイルしたとしても
T F<T>(Func<T> x) => x();
void G()
{
var (foo, bar) = F(() =>
{
return F(() => {
var foo = 0;
var bar = 1;
return (foo, bar);
});
});
}
だとエラーになる。通常のメソッドボディ扱いになるので
スクリプトモードにおける最上位での変数定義は、 async 対応、次のスクリプトへの受け渡しを含むから、ローカルではなくフィールド扱いになり、重複チェックを回避するっぽい
SQLITE_LOCKED したらリトライ作戦を決行した結果、なんと SQLiteConnection のコンストラクタですら SQLITE_LOCKED の可能性を持っていることが判明して相手したくない
あ〜 Docker for Windows はポートエクスポートしても localhost からしか受け付けないんだっけ……
メモリ使わんやろっていって 300MB しか割り当ててないから cc 走ると明らかにスラッシングするし、 VHD が乗ってるの USB 2.0 接続の HDD だから明らかにやばいんだけども
スクリーンショット保存機能を無効化して SQLite の負荷を減らした結果、サーバー側の負荷は問題なくなり、 Docker for Windows 上からの 2 ワーカーと、クソマシン上からの 3 ワーカーが安定して稼働している
実際にやるなら t3.large を 10 個並べたいですね。その前にバックエンドの DB を変えないとログ書き込みで死ぬだろうけど
jitaku .azyobuzi .net の 30416 ポートで進捗状況が見られます(リンクにするとクロールされそうで怖いので)
理論上 3072 ジョブ存在するけれど、僕が把握していない挙動があるんだとしたら検出したいという思いで、きっちり全部確かめに行く
https://mstdn.maud.io/@azyobuzin/100889138880280017 の画面は、この探索機能を作るために、各選択肢画面のスクリーンショットを撮影したり、カーソルの座標を調べたりするツールだった
1年半前は、 Windows 上でカーソルを自動操作してやったけれど、並列に実行できないこと、途中から再開できないことという問題があって、ならば Linux で動くようにしてしまえば Docker 使ってコンテナ化して、どこでもワーカー走らせられるじゃん!っていう計画のもと、 X11 を C# から触るコードを書いたのが去年。そして今年突然やる気が復活して、その続きを書き始めて今に至る
そもそも全探索をしようと思ったきっかけは、適当に選択肢を選ぶと大体未尋ルートに至って、未尋ちょろすぎでは?と思ったことなんですけど、現在 550/821 が未尋
クソマシン(僕の Linux 機の愛称)で 3 ワーカー動かしてるわけだけど、数時間ファンが回りっぱなしで、さすがに想定されてない使い方っぽい気がしてきた
もっと並列実行できるようにバックエンドを整えて、サーバー借りて設定してる間に家の中のマシンだけで探索終わりそうというのはある
あと今回は存在する選択肢はすべて事前にスクリーンショットを撮ってあって、そのすでにわかっている選択肢の上で動作しているけれど、それを把握するのが困難な場合はもっと技術的にチャレンジングになってしまう
選択肢情報はハッシュで持っていて、確認している選択肢画面が全部で 12 個
https://github.com/azyobuzin/whc/blob/master/src/Ashe.Contract/SelectionInfo.cs
うち、最初の選択肢で上を選んだときだけしか到達しない選択肢があるので、僕の把握している限りだと、選び方は 2^11 + 2^10 ということです
ついでに、 RouteSpecificSelectionInfo とあるところにあるハッシュは、中出し外出し選択画面のスクリーンショットのハッシュで、この画面に到達した時点で探索ジョブ終了です
探索のバグではなく、ゲーム本体のバグだったりメモリリークだったりで積もり積もってフリーズすることを想定して、フリーズしていそうだったら自殺させてる