Sporo pisano ostatnio o podbij.pl, tylkogrosz.pl i pokrewnych serwisach (patrz na przykład opis Grzegorza Marczaka albo artykuł Marcina Opolskiego). Reklamowo są bardzo nośne (wow, laptop za 15 złotych, aparat cyfrowy za 8 zł, telewizor za podobne grosze). Nie będę tu powtarzał, czemu nie jest wcale tak słodko, patrz powyższe artykuły (w skrócie: to jest po prostu hazard, możesz kupić za kilkanaście-kilkadziesiąt złotych, a możesz sporą sumę po prostu stracić, jest nawet znany z pokera psychiczny element pieniędzy już rzuconych na stół).
Zajmę się pewnym aspektem technicznym działania tych serwisów. Otóż wymagają one bardzo dokładnej synchronizacji czasu między uczestnikami. Aukcja kończy się ustaloną ilość sekund (na podbij - 20) po ostatnim podbiciu. Do tego uczestnicy starają się licytować jak najpóźniej (ten kto pierwszy nie wytrzyma i podbije, płaci), więc licytacje skupiają się na ostatnie sekundy przed upłynięciem czasu na podbijanie. No i od ustalenia, czy Kowalski podbił w 19, czy w 20 sekundzie, zależą losy aukcji.
Rzecz jest mi ... skądś znajoma. Jak już parę razy pisałem, grywam w szachy online, w szczególności grywam blitze. I tu problem synchronizacji czasu przez sieć jest od lat dobrze znany. Masa partii kończy się, gdy obaj gracze mają ostatnie sekundy na zegarze, od kalkulacji ułamków sekund zależy, kto przekracza czas i przegrywa.
Rywalizacja o ułamki sekund jeszcze bardziej wyrazista bywa w bughouse, mam na myśli zwłaszcza scenariusz, gdy dwóch graczy ma przegraną i wyczekują do ostatka z wykonaniem ruchu.
Najbardziej prymitywnym rozwiązaniem jest używanie czasu serwera: zaczyna on mierzyć mój czas w momencie, gdy wysyła mi komunikat o ruchu przeciwnika, przestaje, gdy odbierze mój. Praktyczną konsekwencją tej techniki jest, że gracz z wolniejszym linkiem sieciowym niemal zawsze przegrywa - co z tego, że faktycznie zrobi ruch w ćwierć sekundy, skoro jego odebranie zajęło dwie, a wysłanie odpowiedzi trzy.
Stąd FICS, ICC czy playchess stosują techniki stemplowania czasem (timestamp, timeseal itp). W program działający na pececie gracza jest wbudowany moduł mierzący czas od otrzymania ruchu przeciwnika do zrobienia własnego, informacja ta jest dołączana do ruchu, serwer kalkuluje na jej podstawie, czas transmisji jest dzięki temu pomijany.
Działa to w typowych warunkach dość dobrze, pozwala na w miarę równą grę osobom o drastycznie różnej jakości łącza. Ale - są i problemy. Ten naturalny, to sytuacja, gdy połączenie jednego z graczy przywisa (ot, jakiś chwilowy zator sieciowy). Przeciwnik czeka kilkanaście, kilkadziesiąt sekund, nawet całe minuty (z przekroczeniem czasu włącznie) i ... nagle pojawia się ruch i okazuje się, że grający go stracił nań raptem sekundę czy dwie.
Gorzej, że niektórzy gracze uczą się celowo manipulować mechanizmem. Od sztuczek z wypinaniem kabla sieciowego czy uruchamianiem ciężkich downloadów w wybranych momentach, po manipulacje zegarem systemowym albo prucie i podmienianie algorytmu (czyli celową podmianę wysyłanych informacji). Przed tym w pełni skutecznej obrony nie ma, można stosować jedynie pewne heurystyczne zabezpieczenia (jak widełki ograniczające opóźnienia, czy próby wyłapywania osób, którym problemy zdarzają się regularnie akurat w specyficznych momentach).
Ciekawe którą z opcji obrały powyższe serwisy aukcyjne. Opisywany scenariusz aukcji, która była zamknięta ale się otworzyła pachnie mi trochę techniką stempla, choć oczywiście pewności nie mam.
Dopisek: skoro zdarza się, że patrzę na zegar i widzę 15 sekund do zakończenia akcji, następnie 16 sekund a potem 13, to jakaś forma stempli czy innego używania czasu klientów wydaje się niewątpliwa. Może kusić.