Od dawna grywałem w szachy przez internet, od roku zacząłem grać na żywo. Zaczęło się przypadkiem – lokalny klub, do którego podsyłałem dzieciaki, miał problem z zebraniem składu na Otwartą Ligę Mazowiecką – a skończyło całkiem fajnie (zrobiłem II kategorię, dającą przepustkę do dalszych lokalnych rozgrywek). Przy okazji przekonałem się, że kilkugodzinne partie grane twarzą w twarz z przeciwnikiem mają swój specjalny urok i … próbuję dalej.
Staram się przy tym podchodzić systematycznie, tj. nie tylko gram, ale też analizuję rozegrane partie i próbuję wyciągać z nich jakieś wnioski. Na specjalny rozwój umiejętności w moim wieku trudno już liczyć ale zawsze ciekawie jest zrozumieć gdzie i co podstawiłem a także zderzyć swoje przemyślenia robione w trakcie gry z oceną programu szachowego.
Dygresja o systematyce programów szachowych
Aplikacje szachowe zasadniczo dzielą się na następujące grupy:
-
GUI do gry przeciwko komputerowi (Fritz, Shredder, ChessMaster, …),
-
programy do gry przez internet przeciwko ludziom, zwykle związane z jakimiś serwisami szachowymi (PlayChess Client, ICC Dasher, BabasChess, …),
-
szachowe bazy danych i programy analityczne (ChessBase, ChessAssistant, Scid, Aquarium),
-
programy edukacyjno-treningowe (wszelkie Training CD z Chessbase, kursy Peshka, kursy i zadania online),
-
maszynki obliczeniowe (Rybka, Houdini, Stockfish, Hiarcs, Junior, TogaII, Zappa, …).
Podział ten nie jest precyzyjny, poszczególne rodziny zapożyczają nawzajem różne funkcje ale główny cel zawsze wpływa na sposób używania programu.
Maszynki obliczeniowe nie mają żadnego interfejsu, są to biblioteki DLL (interfejs ChessBase) lub programy konsolowe z tekstowym interfejsem (interfejsy UCI i WinBoard) umiejące robić tylko jedno: oceniać pozycje i wyliczać najlepsze ruchy.
Dodatkowe zamieszanie wprowadza sposób sprzedaży – np. kupując pudełko Fritz 10 tak naprawdę kupuję pakiet złożony z Fritz GUI 10 oraz Fritz Engine 10, kupując pudełko Shredder 11 kupuję dokładnie to samo Fritz GUI 10 (program, poza ikoną i splash-screenem, wygląda i zachowuje się identycznie) ale tym razem z dołożoną maszynką Shredder Engine 11. Przy programach bazodanowo-analitycznych dodatkowy wymiar wprowadza rozmiar dołączonej bazy partii szachowych.
Zadziwiająco trudno jest znaleźć w internecie informację o wersjach interfejsów Fritz/Chessbase w poszczególnych pudełkach tej firmy. Wynotowałem to kiedyś z dyskusji na jednym z forów szachowych (poniższa tabelka nie obejmuje paru najnowszych wersji z wersją 12 GUI Fritza):
GUI 7 – Fritz 7, Junior 8, Fritz&Chesster
GUI 8 – Fritz 8, Shredder 8, Shredder 9, Junior 9, Tiger 15
GUI 9 – Fritz 9, Shredder 10, Junior 10, Hiarcs 10, Zap!Chess
GUI 10 – Fritz 10, Shredder 11
GUI 11 – Fritz 11, Hiarcs 12, Rybka 3 (chodzi o Rybkę sprzedawaną przez ChessBase)
Słowo Deep w nazwie oznacza wieloprocesorową wesję maszynki obliczeniowej.
Narzędzia do analizy (z perspektywy Linuksiarza)
Na rynku komercyjnych GUI szachowych dominują od lat produkty firmy ChessBase a interesującym konkurentem jest rosyjska Convekta. Fritz czy Chessbase są dla mnie – jako Linuksiarza – mało interesujące, bo albo nie działają pod Wine w ogóle, albo zachowują się pod nim bardzo kapryśnie. Produkty Convekty wypadają dużo lepiej: tak ChessAssistant, jak Aquarium, od lat działają pod Wine bez problemów (są też zazwyczaj tańsze).
Jedynym dojrzałym programem open-source (i zarazem jedynym dojrzałym linuksowym) jest Scid – całkiem ciekawa aplikacja, której rozwój nieco hamuje technologia (jest to program w Tcl/Tk). Ściskam też kciuki za ChessX ale …
… ale chcąc dostać sensownie anotowaną przez program partię wolę odpalić ChessAssistanta lub Aquarium.
Z maszynkami obliczeniowymi pod Linuksem nie ma problemów. Jest dostępnych parę potężnych programów open-source (w tej chwili najsilniejszym jest Stockfish) a wiodące komercyjne engine działają pod Wine.
Przykładowo, 32-bitową Rybkę można uruchamiać po prostu przez:
$ wine Rybka_4_w32.exe
a 64-bitową przerobić na program Linuksowy pobierając microwine i wykonując polecenia (ścieżki i nazwy do poprawy):
$ cat $HOME/src/microwine-0.9/microwine \
$HOME/Szachy/Engines/Rybka/Rybka_4_x64.exe \
> Rybka4_x64_Linux
$ chmod a+x Rybka4_x64_Linux
(tak, trzeba skonkatenować microwine z oryginalną Rybką a wynik połączenia jest programem linuksowym). Dłuższy opis jest tutaj.
Słyszałem o problemach z wydajnością Deep Rybki pod Linuksem (znaczne spowolnienie działania gdy ustawimy większy bufor pamięciowy). Nie mogę tego zweryfikować, mam tylko wersję standardową (jednowątkową).
Zdalnie uruchamiane engine
Partie analizuję zwykle siedząc w fotelu z laptopem na kolanach. Dość słabym laptopem – co zwykle w niczym nie przeszkadza ale akurat na jakość podpowiedzi szachowych engine wpływa bardzo znacząco. Wyjący wiatrak i opóźnienia reakcji komputera na mysz czy klawiaturę też nie są szczególnie zachęcające.
Tymczasem w kącie pokoju stoi dość silny desktop. Narzucała się chęć odpalania maszynek obliczeniowych na nim (z pozostawieniem samego GUI na laptopie).
Tę samą metodę można używać także dla całkiem odległych maszyn (protokół UCI jest dość oszczędny więc nawet nienajlepsza sieć wystarczy).
Scid
W przypadku Scida poszło bardzo łatwo. Napisałem prościutki skrypt shellowy:
#!/bin/sh
exec ssh -t platon Szachy/Engines/Stockfish/stockfish
(platon
jest nazwą zdalnej maszyny a stockfish
jest na niej
zainstalowany w $HOME/Szachy/Engines/Stockfish/stockfish
– używam
ręcznie skompilowanej wersji trochę nowszej niż spakietowana,
tak naprawdę powyższe jest symlinkiem do stockfish-211-ja/Linux/stockfish-211-64-ja
), zadałem go scidowi jako engine:
i to już było wszystko. Teraz program analizuje obciążając zdalne a nie lokalne CPU.
Programy Convekty
Z programami Convekty jest trudniej. Nie da się im nakazać
uruchamiania skryptu shellowego. Musi być .exe
.
W sieci jest trochę porad sugerujących wykorzystanie netChess ale niespecjalnie mi się to rozwiązanie podobało (GUI na serwerze? otwarte porty bez autoryzacji?). Idealnie byłoby po prostu odpalać engine po ssh bez robienia czegokolwiek po stronie serwera.
Ostatecznie zadziałała następująca technika (która jest w całości do zastosowania także na prawdziwych windowsach):
\1. Pobrałem Windowsowe putty ze strony Putty.
\2. Skonfigurowałem je do logowania się kluczem. W tym celu uruchomiłem
$ wine PUTTYGEN.EXE
Programu można do wygenerowania nowego klucza (po prostu klikamy Generate
), ja
zdecydowałem się nie mnożyć kluczy i skonwertować istniejący (Linuksowy) klucz
OpenSSH (menu Conversions → Import Key
, na pytanie o passphrase na Ubuntu trzeba
podać hasło logowania).
PUTTY nie umie używać kluczy w formacie OpenSSH, kończy się to błędem
Unable to use key file "H:\.ssh\id_rsa" (OpenSSH SSH-2 private key)
.
Potem wyczyściłem pola Key passphrase
i Confirm passphrase
(stanowiłoby problem przy uruchamianiu się engine, ryzyko związane z
brakiem passphrase nieco ograniczam trzymając klucz w szyfrowanym
katalogu) i przy pomocy przycisku Save private key
zapisałem
powstały klucz jako H:/.ssh/id_rsa.ppk
(mam w konfiguracji wine H
zmapowane na katalog domowy, więc plik trafił do ~/.ssh
, obok normalnych kluczy).
Potem pozostało jeszcze poprawić uprawnienia:
$ chmod go-r ~/.ssh/id_rsa.ppk
i przetestować czy działa logowanie bez pytania o hasło:
$ wine PLINK.EXE marcink@platon -i 'H:\.ssh\id_rsa.ppk'
a także samo uruchamianie zdalnego programu szachowego (słowo uci
wpisałem ja,
powoduje ono wypisanie przez program informacji identyfikacyjnych i dostępnych parametrów):
$ wine PLINK.EXE marcink@platon -i 'H:\.ssh\id_rsa.ppk' \
-batch -t Szachy/Engines/Rybka4_x64_Linux
uci
id name 4/linux Rybka _4_x64
id author Vasik Rajlich
option name UCI_Query type button
(…)
Ważna jest opcja -t
(alokacja wirtualnego terminala), bez niej
reakcji na uci
się nie doczekamy (i nie doczeka jej GUI szachowe).
\3. Ostatnim problemem do rozwiązania pozostało … jak z komendy
takiej, jak powyższa, zrobić pojedyncze .exe
(niestety
ChessAssistant nie pozwala na podanie jakichkolwiek parametrów
uruchamianego programu, nie pozwala też na podanie skryptu .bat
).
Tu pomocny okazał się znaleziony na chybił-trafił
Quick Batch File Compiler. Programik bez problemu zainstalował się
pod Wine. Uruchomiłem go, stworzyłem plik stockfish_on_platon.bat
o
treści (to jest jedna linijka, złamałem ją dla czytelności):
@H:\Szachy\Engines\PLINK.EXE marcink@platon
-i H:\.ssh\id_rsa.ppk -batch -t
Szachy/Engines/Stockfish/stockfish
i kliknąłem Build
.
Powstał wymarzony program stockfish_on_platon.exe
. Sprawdziłem, czy działa poprawnie –
uruchomiłem go pod Wine i napisałem uci
. Zadziałało.
Ciekawostka: Quick Batch File Compiler niczego nie kompiluje ani nawet chyba nie rozumie składni plików
.bat
. Wygenerowane nim programy po prostu rozpakowują załączony skrypt do katalogu tymczasowego i odpalają go przy pomocy standardowych narzędzi Windows. Stawia to w dziwnym świetle tezy autorów o utrudnianiu reengineringu ale do moich celów programik jest idealny.
Powyższą operację powtórzyłem dla Rybki i innych potrzebnych mi zdalnie uruchamianych engine.
I to już wszystko. Zdalne engine działają poprawnie w ChessAssistancie:
działają poprawnie w Aquarium:
i dobrze współdziałają z trybem IDEA tego ostatniego (który przy lokalnym uruchamianiu zazwyczaj zarzynał mi laptopa).
Czy – grając czarnymi – miałem jakąś szansę wygrać powyższą pozycję, do dziś nie wiem i komputer niewiele tu pomaga.
Posłowie
Napiszę jeszcze, że szachowe życie w Warszawie (i nie tylko) interesująco się ożywia. Coraz więcej jest turniejów dla amatorów, nie tylko blitza i szachów szybkich ale także klasycznych – przy czym te ostatnie często są organizowane w sposób akceptowalny dla ludzi mających obowiązki zawodowe i rodzinne (np. partia o 17:30 co poniedziałek albo liga w pierwszą i trzecią niedzielę miesiąca).
Informacji gdzie i kiedy można zagrać dostarczają serwis turniejowy chessarbitra (zresztą ogólnopolski) oraz strona MZSzach).