目指せ☆(^~^)!第12回UEC杯コンピュータ囲碁大会☆(^~^)!

あぴゃあ☆(^~^)! 公開下書き

2020-11-24 tue

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ リンク貼っとけだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 NNGS 1.1.22 囲碁サーバー立てようぜ、ローカルに☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Windows勢は どうやって立てんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 最近覚えた Docker を使ってみようと思うぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Git hub も開けとこ☆」

20201125go1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ C言語なんだが Linux 風なんで Linux上で動かした方がいいだろ☆」

NNGS Development Page

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 仕様書はこれだぜ☆ 分かるやつは 仕様書読めば分かる☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 時間がないので 仕様書読めないやつは 無視で☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Red Hat、 Debian 系の OS なら……☆ Ubuntu の上で動くのか……☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 決まりだな☆」

20201125go2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Docker Hub で欲しいものを見つける方法から 親切に解説した方が 良くないかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 時間がないので Docker Hub の使い方が分からないやつは 無視で☆」

NNGS SERVER README

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ サーバーの立て方を読むか……☆
src/nngsconfig.hsrc/nngsmain.h 読んで勝手にコンパイルしろとのことだぜ☆」

20201125go3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ プリプロセッサ・ディレクティブ読めば分かるだろ、というのは C言語 な感じがするよな、めんどくせ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 多分、 http://localhost:9696/ にゲームサーバーが立って、 6969 ポートは何かに使われてるんだろう……☆」

20201125go5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 mlrate-1.1.0.tar.gz って何だぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どっかから ダウンロードしてくんじゃないの?」

What is mlrate?

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 過去の遺物なのでは……☆ 探すか……☆」

20201125go4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 2005年時点では ダウンロードできたという報告があるな……☆」

NNGSのインストール方法

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 2010年時点でも ググれば簡単にでてくるらしいぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ 簡単に出せだぜ☆」

Index of /fgs/mlrate/src

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これか……☆? 名前しか一致してないが……☆ MD5 とか無いのか……☆ こんなセキュリティ ガバガバな方法でいいのか……☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ダメだ、展開したあとのやつだぜ、ダウンロードめんどくせ☆ zip で欲しいぜ☆」

2020-11-25 wed

http://pem.nu/cms/index.php/freeprogs

20201125go6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ mlrate という字を見て メールのソフトかと思ってたんだが 違うのか……☆?」

20201125go7.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ make したら、ただのエラーが出てきた わらう☆
調べるか……☆」

20201125go8a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ソースコードが悪いことはないと思うので、オプションから調べていこうぜ☆?
まず CFLAGS から☆」

Safe CFLAGS

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 自動で探す設定にしたいよな……☆」

mgorny/cpuid2cpuflags

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これをダウンロードするには git コマンドがいるな☆」

Gitコマンド早見表

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ git コマンドの生叩きとか知らんぜ☆ クローンでいいんだろうか……☆?」

git config --global user.name "XXXX"
git config --global user.email "[email protected]"

git clone https://github.com/mgorny/cpuid2cpuflags.git

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ダウンロードはでけた……☆」

20201125go9.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ この Makefile.amautomake なのでは……☆ めんどくさ……☆」

20201125go10.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 自分が何やってるのか 分からん……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 configure.ac の中身を読んでみろだぜ☆」

20201125go11.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 勝手にやってくれ、という内容だぜ☆」

Automakeでmakeする

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ C言語の文化は分からんな……☆ 調べるか……☆」

[email protected]:/app/mlrate/cpuid2cpuflags# autoscan

configure.ac: warning: missing AC_CHECK_FUNCS([uname]) wanted by: src/hwcap.c:57
configure.ac: warning: missing AC_CHECK_HEADERS([limits.h]) wanted by: src/hwcap-dump.c:11
configure.ac: warning: missing AC_CHECK_HEADERS([stddef.h]) wanted by: src/hwcap.c:13
configure.ac: warning: missing AC_TYPE_SIZE_T wanted by: src/arm.c:156

[email protected]:/app/mlrate/cpuid2cpuflags# ls

COPYING  Makefile.am  README  autom4te.cache  autoscan.log  configure.ac  configure.scan  src  tests

[email protected]:/app/mlrate/cpuid2cpuflags# aclocal
aclocal: warning: couldn't open directory 'm4': No such file or directory

[email protected]:/app/mlrate/cpuid2cpuflags# aclocal

[email protected]:/app/mlrate/cpuid2cpuflags# ls
COPYING  Makefile.am  README  aclocal.m4  autom4te.cache  autoscan.log  configure.ac  configure.scan  m4  src  tests

[email protected]:/app/mlrate/cpuid2cpuflags# automake -a
configure.ac:3: error: required directory ./build-aux does not exist
configure.ac:9: error: installing 'build-aux/compile'; error while making link: No such file or directory
configure.ac:5: error: installing 'build-aux/install-sh'; error while making link: No such file or directory
configure.ac:5: error: installing 'build-aux/missing'; error while making link: No such file or directory
configure.ac:20: error: required file 'config.h.in' not found
Makefile.am: error: installing 'build-aux/depcomp'; error while making link: No such file or directory
parallel-tests: error: installing 'build-aux/test-driver'; error while making link: No such file or directory

[email protected]:/app/mlrate/cpuid2cpuflags# mkdir build-aux
[email protected]:/app/mlrate/cpuid2cpuflags# automake -a
configure.ac:9: installing 'build-aux/compile'
configure.ac:5: installing 'build-aux/install-sh'
configure.ac:5: installing 'build-aux/missing'
configure.ac:20: error: required file 'config.h.in' not found
Makefile.am: installing 'build-aux/depcomp'
parallel-tests: installing 'build-aux/test-driver'

[email protected]:/app/mlrate/cpuid2cpuflags# automake -a
configure.ac:20: error: required file 'config.h.in' not found

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 適当に 叩いても 上手くいかんな……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 適当だったのか……☆」

GNU autotools 入門 その 2

autoreconf --install

20201125go12.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ このコマンドはどこまでやってくれたのか……☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 黄緑色のファイルは 実行ファイルよ」

20201125go13.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ わたしが欲しいのは cpuid2cpuflags コマンドなんだが……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 もう bin ディレクトリーに入ってたりしないのかだぜ☆?」

which cpuid2cpuflags

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 無いぜ☆」

make

20201125go14.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ あっ、 make コマンドが利いたぜ☆」

20201125go15.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ よし、 cpuid2cpuflags 実行ファイルが できてるぜ☆!」

KIFUWARABE_80x100x8_01_Futu.gif
「 シェイクスピアの小説が書けるまでキーボードを叩く猿 に肯定的なお父んの為せる技だぜ☆」

./cpuid2cpuflags
CPU_FLAGS_X86: aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt rdrand sse sse2 sse3 sse4_1 sse4_2 ssse3

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これが やりたかっただけ……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 CFLAGS には何書くの?」

-O2 -pipe -march=native

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃないか☆?」

[email protected]:/app/mlrate# vim Makefile
bash: vim: command not found
[email protected]:/app/mlrate# vi Makefile
bash: vi: command not found

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ふー、コーヒーでも飲むかだぜ☆」

20201125go16.png

20201125go17.png

KIFUWARABE_80x100x8_01_Futu.gif
「 エラーメッセージが何も変わってない……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 パス(path)は通したの?」

cp /app/mlrate/cpuid2cpuflags/cpuid2cpuflags /usr/local/bin/cpuid2cpuflags

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 投げ込んだろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 エラーメッセージに変わりはないぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ソース腐ってんじゃないか☆?」

20201125go18a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 確かにソースは腐っているが、なんで腐ったソース配ってるんだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 直せ☆!」

20201125go19.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 見た目上のエラーの数は減ってきているぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 全部減らせ☆!」

GETOPT

20201125go21a1.png

20201125go20a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 extern 文の書き忘れかだぜ☆?」

/* 2020-11-25 Add --> */
int getopt(int argc, char * const argv[],
           const char *optstring);

extern char *optarg;
extern int optind, opterr, optopt;
/* --> 2020-11-25 Add */

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 頭を使うのが嫌なので、関数プロトタイプ宣言文を ソースファイル(.c) の include 文の下に置いとこうぜ☆?」

20201125go22.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 今度は何だぜ……☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ワーニングは全部無視していいんじゃないの?」

20201125go23.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ mlrate 実行ファイルができてるぜ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これまだ nngs じゃないからな……☆」

cd /app/nngs
ln -s ../mlrate mlrate
./configure --prefix=$HOME/go/nngs/
make install

20201125go24a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ C++スタイルのコメントは許可されていません、という カッコいいエラーが出たんだが☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ C言語のスタイルのコメントで書けだぜ☆」

20201125go25a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 今度は ファイルが無いぜ☆」

20201125go26.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 先人の通った道を 通るか……☆」

cd /app/mlrate
mkdir src
cp /app/mlrate/libmlr.a /app/mlrate/src/libmlr.a

cd /app/nngs
make install

20201125go27.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ *** [Makefile:238: install-recursive] Error 1 って出たぜ☆ 」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 make clean してないんじゃないの?」

make clean
make

20201125go28.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 進展なしだぜ☆」

20201125go29.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 実践問題だぜ☆」

20201125go30.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 仕方ない、英語読もう、Sorry☆!」

20201125go31.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こういうエラーメッセージから 不具合を特定するのが 実践問題だぜ☆ やってみようぜ☆」

20201125go31a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これは エラーが起きました、という定型文みたいなもんで 原因ではないぜ☆ それより前に原因があるぜ☆」

20201125go31a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ワーニングは無視してしまおう☆ 見なくていい☆」

20201125go31a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 見るからにリンカが並んでるんだが、同じもん定義すんな、と書いてるぜ☆
じゃあ 他に当てもないし 直してみるかだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 しかし どれも自分じゃないかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 様子を見るぜ☆」

20201125go31a5b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 複数回定義しそうに見えないが、もっと詳しく見てみるかだぜ☆」

20201125go32a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 6個の中間ファイルのソースを見てみようぜ☆?」

20201125go33.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ インクルード文と完全一致☆」

20201125go34.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ヘッダー・ファイルと ソース・ファイルの両方に 構造体の定義文があるんだけど☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ヘッダー・ファイルに 定義文を書くやつ 狂ってない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ  ヘッダー・ファイルの方の 構造体の定義文を……、 extern とかできるのかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 ヘッダー・ファイルの方の 構造体定義文は コメントアウトで☆」

20201125go35.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ エラーの種類が変わったぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 やべっ☆! extern で☆!」

/*
 * 2020-11-25 Add extern keyword.
 * struct channel carray[MAX_CHANNELS];
 */
extern struct channel carray[MAX_CHANNELS];

20201125go36.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ エラー取れたかだぜ☆? お粗末なミス・コーディングだったな☆」

cd /root/go/nngs/bin
./nngssrv

20201125go37.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 今度は何だぜ……☆? ログ・ファイル作ってやればいいのかだぜ☆?」

cd /root/go/nngs
mkdir nngssrv
cd nngssrv
mkdir stats
cd stats
touch logfile

cd /root/go/nngs/bin
./nngssrv

Fork1 = 13725
Fork2 = 13726
[email protected]:~/go/nngs/bin# NNGS: can't bind local address. errno=98(Address already in use)
NNGS: can't bind local address. errno=98(Address already in use)
Network initialize failed on ports 6969,9696.

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ もうサーバー立ってる……☆?」

telnet localhost 9696
bash: telnet: command not found

apt-get update
apt-get install telnet -y

telnet localhost 9696
bash: telnet: command not found

Reading package lists... Done
Building dependency tree
Reading state information... Done
telnet is already the newest version (0.17-41.2build1).
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
[email protected]:~/go/nngs/bin# telnet localhost 9696
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Login: muzudho

"muzudho" is not a registered name.  You may use this name to play unrated games.
(After logging in, do "help register" for more info on how to register.)

This is a guest account.
Your account name is muzudho.




No Name Go Server (NNGS) version 1.1.22
#>

20201125go38.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ よし行けた☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 やったな☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 やったわね!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker化は また今度だな……☆」

20201125go39.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こういうのは ターミナル2つ自分で開いて 1人2役するんだぜ☆
match コマンド打つのめんどくさいが、石を置くのは A1 とかでいけるぜ☆」

20201125go40.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ pass pass で終わって、死に石判定は無視して done で1対局 終わりだぜ☆」

2020-11-27 fri

20201127go41.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Docker 化したんだが、 文字入力のとき 打った文字が表示されないので 暗号 打ってるみたいな感じだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 何がダメだったんだろなあ☆」

20201127go42.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ /dev/null に葬ってるのが 悪くない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 クライアント側には関係ないだろう……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なんでだろな☆」

20201127go43.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Dockerコンテナに入って telnet したら ふつう だぜ☆」

20201127go44.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 送信されてくる文字は 表示されるんだぜ☆ 入力した文字が表示されないのでは☆?」

20201127go45.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 通信されていて、クライアント側の入力が表示されないんだよな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Twitter で聞いたら、それって エコー っていうようよ」

telnetコマンドを実行しても何も返ってこない

20201127go46.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こんな画面 初めて見た☆」

20201127go47.png

KIFUWARABE_80x100x8_01_Futu.gif
「 早よ打てだぜ☆ タイムアウトするぜ☆」

20201127go48.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ よっしゃ、いけたぜ☆」

2021-02-18 thu

20210218go32a1.png

ramen-tabero-futsu2.png
「 ↑ ひょっとして これ 壊れてんの?」

kifuwarabe-futsu.png
「 そこは B1 と表示されるのが正しいのでは……?」

ohkina-hiyoko-futsu.png
「 6667 が合っていて、盤面が間違ってるかも知れないわよ?」

ramen-tabero-futsu2.png
「 仕様を当たるか……」

20210218go34.png

ramen-tabero-futsu2.png
「 ↑ 全然違う……。
=4 C3 というところを見ると多分 C3 とか返せば良いはずだぜ」

20210218go33a1.png

ramen-tabero-futsu2.png
「 ↑ よく分からないが、形だけ整えた……」

20210218go35a1.png

ramen-tabero-futsu2.png
「 ↑ コンピューター将棋で言うところの 将棋所に当る 自作の GTP engine to NNGS で中継すると
文字化けが直らないが B1 が取れてるので、標準入出力を使った 文字列の受け取りはできているのだろう……」

kifuwarabe-futsu.png
「 B1 を NNGS まで届けてくれなければ 対局できないが……」

2021-02-19 fri

20210219go36a1.png

ramen-tabero-futsu2.png
「 ↑ 空行は キャッチ できていることを確認したぜ」

ohkina-hiyoko-futsu.png
「 思考エンジンが デバッグ用に出力している文字まで gtp-engine-to-nngs に送られてきてない?」

ramen-tabero-futsu2.png
「 標準出力は 全部 gtp-engine-to-nngs に流れてくるぜ」

kifuwarabe-futsu.png
「 デバッグ出力を 標準出力へ垂れ流すの止めたら……。 ログへ流せだぜ」

20210219go37a1.png

ramen-tabero-futsu2.png
「 ↑ 囲碁で Illegal Move 見れるの面白いだろ。
多分、石が置いてあるところに また置いたんだぜ。 Play をまだ実装してないからな。
順調 順調」

kifuwarabe-futsu.png
「 驚かせないでくれだぜ」

ramen-tabero-futsu2.png
「 play b a1 が送られてきたら 黒番が A1 に石を置いたという意味で エンジンは 盤を更新して = \n\n を返すんだぜ」

ramen-tabero-futsu2.png
「 genmove w が送られてきたら 白番は 着手を返せだぜ。 例えば = A2\n\n

kifuwarabe-futsu.png
「 じゃあ = \n\n

ramen-tabero-futsu2.png
「 それは play b a1 に応えたのか、それとも = \n\n に応えたのか?」

kifuwarabe-futsu.png
「 play b a1 に決まってるだろ。 そのあと = A2\n\n を送ろうと思ってたんだぜ」

ramen-tabero-futsu2.png
「 genmove w を送ったあとに = \n\n を送ってくんなだぜ」

kifuwarabe-futsu.png
「 お父んが間隔を開けずに 連続して送ってくるのが 悪いのでは?」

ramen-tabero-futsu2.png
「 相手が A1 を打ったんだぜ。
だったら play b a1 をお前に送って、すぐに genmove w だろ」

kifuwarabe-futsu.png
「 いや おかしい。 連続して送ってくんなだぜ。
わたしが = \n\n を送り返すまで 待てだぜ」

ramen-tabero-futsu2.png
「 むむむむ!」

ohkina-hiyoko-futsu.png
「 きふわらべちゃんの いう通りじゃない」

ramen-tabero-futsu2.png
「 ぎぎぎぎ!」

    // 0: 白番は対局を承諾へ
    // 10: 黒番は着手へ
    // 20: 白番は盤更新へ
    // 30: 白番は着手へ
    // 40: 黒番は盤更新へ
    turnState uint

ramen-tabero-futsu2.png
「 ↑ これぐらいの状態遷移があるのかだぜ?」

kifuwarabe-futsu.png
「 白番から ログインして 黒番が申し込むのは GTP2NNGS の仕様であって
UEC杯は独自仕様の adminmatch を使うんだけどな」

受信[]
受信[]
受信[1 6]

ramen-tabero-futsu2.png
「 ↑ 空行が 2連続で返ってくるケースがある。
わたしの考えが ずれてしまうぜ」

kifuwarabe-futsu.png
「 そんな考え、ダメなのでは?」

(*dia.EngineStdin).Write([]byte("play %s %s"))

ramen-tabero-futsu2.png
「 ↑ あれっ、応答がこないぜ?」

kifuwarabe-futsu.png
「 コマンドが完結しね」

(*dia.EngineStdin).Write([]byte("play %s %s\n"))

ramen-tabero-futsu2.png
「 ↑ 末尾に改行を付けるの 忘れてしまうよな!」

kifuwarabe-futsu.png
「 じゃあ 動かね」

[2021-02-20 02:59:52] <Engine> x=1 y=1 z=0119

ramen-tabero-futsu2.png
「 ↑ なんか z 表記、間違いの元だと思う」

kifuwarabe-futsu.png
「 だったら z表記 止めろだぜ」

20210219go38.png

ramen-tabero-futsu2.png
「 ↑ x, y 表記と A1 表記だけにした……
なんとか 石を打ちあうところまでは 進んだぜ」

ohkina-hiyoko-futsu.png
「 盤面が見えないの 不便ね~」

2021-02-20 sat

20210220go39a1.png

ramen-tabero-futsu2.png
「 ↑ サーバー対局しない前提のプログラムだから 持ち時間は 自己計測してるが、
サーバーから返ってきた 残り時間 を 入れたくもあるよな、ぐぬぬぬぬ!」

kifuwarabe-futsu.png
「 お父んが いじると バグを盛り込む可能性が大きいので 今大会は そこの改修は 諦めろだぜ」

ramen-tabero-futsu2.png
「 ぐぬぬぬぬ」

20210220go40.png

ramen-tabero-futsu2.png
「 ↑ モンテカルロが何たるかを 分かってない打ち方だな」

kifuwarabe-futsu.png
「 プログラミングされた通りに 置いてるだけだぜ」

20210221go41.png

ramen-tabero-futsu2.png
「 ↑ うーむ、整ったログが書けるかどうかは プログラミングの 基礎スキルだぜ。
もっと整理しよ」

20210221go43.png

ramen-tabero-futsu2.png
「 ↑ 入出力だけ 押さえておけばいいか……」

20210221go44.png

ramen-tabero-futsu2.png
「 ↑ file と rank を逆にしていたかもしれない」

kifuwarabe-futsu.png
「 おいおい 止めてくれだぜ」

20210221go45a1.png

ramen-tabero-futsu2.png
「 ↑ GTプロトコル的には Pass でも PASS でもなく pass かだぜ」

kifuwarabe-futsu.png
「 おいおい しっかりしてくれだぜ」

2021-02-21 sun 04:39

20210221go46.png

ramen-tabero-futsu2.png
「 ↑ やっと 対局が成立した」

ohkina-hiyoko-futsu.png
「 やったわね」

kifuwarabe-futsu.png
「 やったぜ」

2021-02-21 sun 15:40

ramen-tabero-futsu2.png
「 つぎは 終局したら 自動でログアウトしたいぜ。
つなぎっぱ にしないのが GTP2NNGS の状態遷移図みたいだしな」

20210221go49a1.png

ramen-tabero-futsu2.png
「 ↑ done と quit を連続して エンジンに投げてたんだが」

kifuwarabe-futsu.png
「 だから そんなことは するなと」

ramen-tabero-futsu2.png
「 フーム、 done の返事を受け取ってから quit 投げないといけないんだな」

20210221go50a1.png

ramen-tabero-futsu2.png
「 ↑ エンジンだけでなく、わたしの GE2NNGS も 終了させないとな」

ohkina-hiyoko-futsu.png
「 きふわらべ ちゃんを置いて 外食に行きましょう。
うまくいってれば アプリケーションは ログを残して 終了してるわよ」

20210221go51a1.png

ramen-tabero-futsu2.png
「 ↑ 終わってないぜ。ターミナルが残ったまま」

kifuwarabe-futsu.png
「 プログラムの途中で Exit するのって、だいたいイレギュラーな 強制終了 なんじゃないのか?」

ramen-tabero-futsu2.png
「 じゃあ 愚直に ループから抜けて スレッドから抜けるぜ」

ramen-tabero-futsu2.png
「 ダメだ、 エンジンと接続するスレッドから抜けただけで、 本体が止まんね」

ramen-tabero-futsu2.png
「 あー、ちがうぜ わたしの GE2NNGS は終了していて、 VSCode のターミナルは終了していないだけだぜ」

ohkina-hiyoko-futsu.png
「 あとは プロセスが終了したら 再起動するような プログラムがあれば 自動対局はできるの?」

ramen-tabero-futsu2.png
「 両方のプロセスが終了したら、 白番、黒番の順で 起動するプログラムがあれば 自動対局できそうなんだがな」

kifuwarabe-futsu.png
「 Go言語で そんなこと できるのかだぜ?」

20210221go52a1.png

ramen-tabero-futsu2.png
「 ↑ あれっ、 わたしの GE2NNGS 終了してね。 サーバーにまだ つながってるぜ」

20210221go53a1.png

ramen-tabero-futsu2.png
「 ↑ Scan( ) をどうやって 諦めさせるんだぜ?」

20210221go54a1.png

ramen-tabero-futsu2.png
「 ↑ quit に気づくまで 30分かかった」

20210221go55a1.png

ramen-tabero-futsu2.png
「 ↑ 自作パッケージの パブリッシュの 更新、遅。
いらいら」

kifuwarabe-futsu.png
「 いつも それ 遅いぜ」

Go関連の比較的新しいTips

ohkina-hiyoko-futsu.png
「 ↑ pkg.go.dev への反映は 数時間かかるみたいよ」

ramen-tabero-futsu2.png
「 今日中に終わらんかった…… パッケージのパブリッシュに時間差があるという 思わぬタイムロスだぜ」

20210221go57.png

ramen-tabero-futsu2.png
「 Go言語では コードブロックの最後に実行されたいものを defer を使って書いておくと そうやってくれるみたいだが、
上から下へ順に読む、という感覚は狂うが、合理的だよな」

2021-02-23 tue 00:06

20210223go58a1.png

ramen-tabero-futsu2.png
「 ↑ 月曜日に 一晩中考えて Scan( ) でブロッキングが発生したら解除する方法が分からないことから、
人間が標準入力からコマンドを打てる機能を廃止に」

kifuwarabe-futsu.png
「 全自動にするんだな」

2021-02-23 tue 16:30

20210223go60.png

ramen-tabero-futsu2.png
「 ↑ 自作の別パッケージの 同じ型のグローバル変数入れてて エラーになってた。
別パッケージのグローバル変数見れるって 豪快だな」

Goで子プロセスを確実にKillする方法

ramen-tabero-futsu2.png
「 ↑ きふわらべコロシアムを終了しても、 エンジンは生きてて ログを吐き続けるの 怖」

ramen-tabero-futsu2.png
「 プロセスも 全体調和 させなダメなのかだぜ? 低レイヤー」

2021-03-02 tue

20210302go2a1.png

ramen-tabero-futsu2.png
「 ↑ コネクターが コネクター 呼び出してたんで、そりゃ 無限ループするぜ」

2021-03-03 wed

20210303go3a1.png

ramen-tabero-futsu2.png
「 ↑ コロセウムは エンジンではなく コネクターを起動しなくちゃいけないぜ。 書き直し」

2021-03-04 thu 02:50

20210304go4a1.png

ramen-tabero-futsu2.png
「 ↑ exec.Command の第二引数は 愚直に半角空白でスプリットしたトークンを入れなきゃいけないみたいだぜ。書き直し」

20210304go5.png

ramen-tabero-futsu2.png
「 ↑ ようやく ローカルPCで 自己対局できるようになったぜ」

kifuwarabe-futsu.png
「 やったな!」

ohkina-hiyoko-futsu.png
「 やったわね!」

ramen-tabero-futsu2.png
「 やったぜ!」

23:20

20210304go8a1.png
20210304go7a1.png

ramen-tabero-futsu2.png
「 ↑ パスワード設定できね……。こんな脆弱性あっていいのか」

kifuwarabe-futsu.png
「 ぜんぜんやってないな」

ohkina-hiyoko-futsu.png
「 よくなかったわね」

ramen-tabero-futsu2.png
「 ソース読むか……」

<書きかけ>

何度でもクリック!→

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位 の最近の記事