「 ↑ これだけのプログラムなんだが、何日経っても Go言語に書き直せないんだぜ」
(※注: ↑ 右のは GTP command ではなく、CUI のクラスが使うイベント・ハンドラのようなものらしい)
「 ↑ オブザーバーは多分、オブザーバー(傍聴者)に向かって GTP コマンドを送信するんだぜ」
「 ↑ parse は、こう。
文字列を int 型に変換するとか、細かなことは省いたぜ」
「 ↑ parse_9 は 部分として parse_1 を含むぜ」
「 prompt の 5 とか 6 とか 7 って何なの?」
「 ↑ なんか ポツポツ 流れてくる いち、スペース、数字 ほっほ」
「 指し手を入力するときも、そうでないときも、同じように流れてくるのは 何でなんだぜ?」
「 じゃあ parse_1 は 入力のタイミングの合図だけなのね」
「 1 6
の後の 1 7
は きっと 整地とか 死に石のウチアゲとかをしてるのよ」
「 なんで 15,16,17 でサイクルしてんだぜ、 わかりづら」
「 1 7
は 対局してるんじゃなくて、 多分 死に石 のウチアゲをしてるだけだぜ。
指し手を入力する部分を 使い回しているのだろう」
「 間にスペースのない 15
は、一手指した後か、前ぐらいに ゲーム情報を投げてくるのかしら?」
「 まあ、相手が何秒 時間使ったかは 分かるな。
もっと他に 良い方法が 無かったのか」
「 この状態遷移図、 サーバー側の状態遷移が書かれてないから 見づらいぜ」
「 元のソースに忠実に従うより、 理解した通りに 書き直した方がよくない?」
「 この図に、 オブザーバー がどう対応するのか 図示したいぜ」
「 サーバーから GTPコマンドが送られてきたら、 思考エンジンは 何をしたらいいの?」
「 ↑ まあ、いろいろやって 最終的に 上図のように応答しろほっほ」
「 ↑ うーん、 送られてくる GTPコマンドと、 受け取っている GTPコマンドが 対応付いてない!」
「 ↑ あの謎の文字列は CUI のクラス の中に書かれてるぜ」
「 じゃあ GTP2NNGS は、いったん CUIか何かのクラス を仲介して 思考エンジンに通信してるわけかだぜ?」
「 ↑ なんか send の数が少ない気がするが 対応付けを調べてみるか」
「 囲碁エンジン用と、人間用の 文字列 が混ざってたんだな」
「 ↑ CUI で仲介して 思考エンジン用、人間用に振り分けるのを止めて、 思考エンジン専用にしたいぜwww」
「 ↑ 人間プレイヤーの動きを まとめてみたぜ。
対局が終わると ログアウト までするのは GTP2NNGS だけの動きなのか、
大会のルールなのか よく分からんところだぜ」
「 この まとめ を元に、ノードと エッジ の2種類に 分けれそうだな」
「 ↑ 対人戦は このように作ればいいのだから シンプルにできそうだな」
「 しかし プログラミングに入るには まだ むずかしいぜ。
もっと シンプル & リピート にしようぜ?」
「 ↑ うーん、まだ 状態遷移図になってないぜ、
もう少し 細かいところを詰めようぜ?」
「 ↑ うーん、 9 は INFO、 15 は MOVE、 1 は PROMPT」
「 ↑ PROMPT の次の数は 5 は WAITING、 6 は PLAYING_GO、 7 は SCORING」
「 ↑ うしろに改行が2つ入るタイミングで 正規表現が 計3回マッチしてしまうんで、完全一致にしたった」
「 そんなとこ変更して いいのか。また バグを盛り込みそうな気がする」
「 ↑ 正規表現 ヒットしなくなったな、と思ったら 事前に 文字列加工 とか されてるケースがあるから、
他人のコードを見て 自分のコードの書き方と思ってたら、 違って つまづく」
「 ↑ 応答は返ってくるようになったが、
作業ディレクトリに input ディレクトリや output ディレクトリを事前に作ってないと 強制終了するの 直したい。
あと、 Read は いつまで待機してりゃいいんだぜ?」
<書きかけ>
Crieitは個人で開発中です。
興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!