W miniony weekend setki osób na całym świecie zamiast pójść na imprezę lub odespać męczący tydzień, siedziało dwa dni (i dwie noce) bez przerwy przy swoich laptopach kodując w Node.js gry i programy. Druga edycja Node Knockout już za nami, zobaczmy więc jak to wszystko wyglądało od środka.

node knockout 2011


Zasady konkursu

Zadanie polegało na tym, by w czasie 48 godzin w zespole 1-4 osobowym stworzyć działającą aplikację lub grę w oparciu o serwerowy Javascript (najpopularniejszym jest niewątpliwie Node.js i na nim opiera się cały ten konkurs, ale istnieją także inne). Do dyspozycji zawodnicy (ponad 300 zespołów) mieli różnego rodzaju technologie i narzędzia, dzięki którym mogli poradzić sobie z takim zadaniem. Całość kodu trzymana była w repozytoriach GitHub, a organizator zapewniał miejsce na serwerze (kilku usługodawców do wyboru: Joyent, Heroku lub Linode) i skrypty ułatwiające budowanie oraz zarządzanie aplikacją.

Miejsce

Siedziba Gadu-Gadu w Warszawie przy ulicy Kamionkowskiej 45 była jedynym oficjalnym miejscem w Polsce potwierdzonym przez organizatorów Node Knockout. Oczywiście można było siedzieć w domu, lub zebrać się nieoficjalnie w dowolnie wybranym miejscu, jednak opcja wspólnego kodowania w siedzibie GG (gdzie już raz się pojawiłem na szkoleniu z tworzenia gier w Javascript) i to w doborowym towarzystwie była bardzo kusząca. Do tego mieliśmy zapewnione jedzenie i picie, a także nocleg. No i dostaliśmy na dzień dobry koszulki z bajeranckim nadrukiem!

Ludzie

Zebraliśmy się w kameralnym gronie pięciu osób. Oprócz mnie byli także: Kamil, Kuba, Michał oraz Adam (nazwiska znane redakcji). Nie będzie linków do ich profili - w końcu fanki nie śpią, a nikt nie chce przecież być męczony i dręczony przez napalone szesnastki. Ekipa zacna, przez te 48 godzin nie opuszczał nas dobry humor. Mimo, że każdy zajęty był swoją grą lub aplikacją, to i tak bez problemu pomagaliśmy sobie podczas testów lub rozwiązując co ciekawsze problemy programistyczne.

Aplikacje konkursowe

Na początku plan zakładał trzy gry i dwie aplikacje, jednak drugiego dnia trochę się pozmieniało. Wszystko przez to, że tak na dobrą sprawę można się było do tego wszystkiego lepiej przygotować. W moim przypadku poszedłem praktycznie na żywioł - chciałem zainteresować się dokładniej serwerowym Javascriptem wcześniej, ale jakoś nie było czasu lub okazji. Przez to grubo ponad połowę czasu straciłem przebijając się przez przykłady i dokumentację, oraz rozwiązując teoretycznie proste problemy. Gdyby zająć się tym wcześniej, napisać już jakąś prostą testową aplikację, to na pewno na maratonie można by się skupić tylko na konkretach. Skończyło się na tym, że moja gra jest praktycznie niegrywalna.

Dune vs Tron

Postanowiłem zająć się czymś bardzo prostym, wejść w temat na zasadzie poznania technologii, a nie stawiania przed sobą niewykonalnych zadań. Plan był prosty: klasyczny Snake w wersji multiplayer z podziałem na dwie drużyny rywalizujące na jednej planszy - tak powstało Dune vs Tron. Gracze zbierają jedzenie z planszy jednocześnie blokując przeciwników i próbują zdobyć więcej punktów niż drużyna przeciwna. Ciężko było dorobić fabułę do tak klasycznej gry jaką jest Snake, więc skończyło się na dwóch tematach zamiast jednego, w których występuje coś, co może działać jak chodząca po planszy glizda. Z tego powodu wężopodobne stwory z Diuny ścigają wirtualne pojazdy z Trona. To była teoria, w praktyce pojawiały się problemy z odpowiednim napisaniem komunikacji serwer-klient, niepotrzebnie także zostawiłem sobie na sam koniec kolizje poszczególnych graczy, przez co gra okazała się być wersją pacyfistyczną: gracze mogli przez siebie przechodzić nie czyniąc sobie żadnej krzywdy. Odrębnym problemem do rozwiązania będzie kwestia lagów, która wydaje się nadzwyczaj istotna przy chociażby trzech graczach i przesyłaniu jednej tablicy z kilkoma elementami. Lagi bywały tak duże, że każdy gracz inaczej widział ruchy przeciwników. Cóż, jest to problem, nad którym trzeba się będzie dłużej zastanowić. Na pewno będę chciał napisać tą grę od początku, tym razem porządnie, ze wszystkimi pierwotnymi założeniami.
Nie głosujcie na tą grę, nie warto. Nie próbujcie też zbyt długo grać, bo i tak Wam się nie uda. Nie patrzcie także na liczniki osób online czy punktów, bo i tak nie zobaczycie poprawnych wartości. Tak na dobrą sprawę mogłem tego nawet nie zgłaszać, ale szkoda byłoby odpuścić po dwóch dniach kodowania. Mimo wszystko tą wersję Dune vs Tron można uznać co najwyżej za wczesną pre-alphę lub pokraczne tech-demo. Chociaż i z tym ciężko, bo specjalnie zostawiłem Express w spokoju i pisałem w czystym Node.js wspierając się jedynie Socket.io. Docelowa wersja będzie korzystać z frameworka aplikacji Express, komunikacji za pomocą Socket.io, jakiejś bazy danych (MongoDB?) i z wykorzystaniem frameworka do tworzenia gier (Mibbu lub ImpactJS).

Pozostałe aplikacje

Dwie aplikacje (Logion autorstwa Badasses oraz ExtStats.js autorstwa K:line) logujące statystyki, mój pseudoSnake, kolejna gra z ciekawym pomysłem, która ostatecznie nie została zgłoszona z powodu nieukończenia wszystkich funkcjonalności (a która zostanie podobno dokończona w najbliższym czasie, a więc nie będę zdradzał szczegółów - no, może poza faktem, że zamiast WebSocketów komunikacja będzie realizowana emacsem przez sendmail), a także trzecia gra z interesującą koncepcją porzucona na rzecz niekonwencjonalnego, abstrakcyjnego pomysłu zrealizowanego w ciągu ostatnich kilku godzin: Awesome File Downloader (głosujcie!). Rewolucyjna aplikacja umożliwiająca ściąganie plików z Internetu - wystarczy wkleić link, a cała magia dokona się sama po stronie serwera w Node.js! To zdecydowany faworyt do nagrody Abstrakcja Roku, powala swoją oryginalnością, jest pozytywnie zakręcona i ma ogromne szanse wygrać kategorię Popularity. Mówiłem już, by na nią głosować?

Rozgłos, zainteresowanie i reakcje

Przed rozpoczęciem zmagań wydawało mi się, że przyjdziemy do siedziby GG, pokodujemy sobie spokojnie i grzecznie wrócimy do domu. Nikt się o tym nie dowie, oprócz samych zainteresowanych, bo i po co. W jakim to ja byłem ogromnym błędzie. Okazało się, że nasze zmagania będą dostępne na żywo w formie transmisji na specjalnej stronie serwisu gadu-gadu.pl. Do tego dostaliśmy na ten czas specjalny numer GG: 10, na który ludzie mogli do nas pisać. I tutaj miało być spokojnie, przecież kto normalny będzie oglądał pięć osób siedzących przy swoich laptopach, a tym bardziej komu będzie się chciało do nich cokolwiek pisać. A jednak. Podobno streaming wideo oglądało minimum 18 osób (w godzinach porannych), a maksimum... 218 osób jednocześnie. Dodatkowo numer GG był cały czas zasypywany pytaniami, komentarzami, czy po prostu prośbami o pomachanie do kamery. W pewnym momencie potrzebowaliśmy pomocy ze strony organizatorów, Gadu-Gadu, w celu odpisywania tym wszystkim ludziom. Wystarczyło podejść na chwilę do specjalnego laptopa z uruchomionym wspomnianym numerem GG, by w jednej chwili dostać 50 nowych wiadomości.
Wszystko to mocno nas zaskoczyło, a z każdą kolejną godziną robiło się jeszcze weselej. Okazało się nawet, że ktoś wrzucił stronę Gadu z transmisją i opisem (ponad 160 komentarzy) na Wykop, a wpis z liczbą 170 wykopów (i ponad setką komentarzy) trafił na główną. Oczywiście komentarze na Wykopie były takie jak zwykle, czyli "oho, ludzie bez życia osobistego, biedne dzieci z laptopami kupionymi przez mamę". Na szczęście, o dziwo, na GG z drugiej strony zdecydowana większość wiadomości była bardzo pozytywna, nawet jeśli pisali młodzi ludzie z pociesznymi pytaniami. W międzyczasie była sesja zdjęciowa, wywiady, a to wszystko wylądowało we wspomnianym już specjlanym wpisie. Oprócz GG i Wykopu informacja o maratonie pojawiała się w wielu miejscach, a ludzie żywo na to reagowali. Przez 48H byliśmy gwiazdami Big Brothera dla programistów, czy się to komuś podobało, czy nie. Niektórzy podchodzili do tego tak, jakbyśmy reprezentowali cały polski naród i ratowali świat przed zagładą. To się dopiero nazywa zaangażowanie.

Podsumowanie

Jestem zadowolony z tego, że wziąłem udział w tegorocznym Node Knockout w takiej formie. To była świetna motywacja, by w ekspresowym tempie przyswoić Node.js i stworzyć serwerową aplikację w Javascript. Dobrze się bawiłem, organizacja stała na wysokim poziomie, do tego ta kamerka i nadspodziewanie duże zainteresowanie ludzi, a także w większości pozytywne reakcje. To był bardzo ciekawy, niekonwencjonalny weekend i mam nadzieję, że powtórzymy to za rok. Tylko następnym razem będziemy lepiej przygotowani, dzięki czemu zgarniemy wszystkie możliwe nagrody. Kto wie, może za rok pokażą relację na żywo w telewizji, a po wszystkim zaproszą nas nawet do kolejnej edycji programu "Taniec z funkcjami" lub "Jak oni kodują".
Ps. Znowu mi przydługi wpis wyszedł, a miałem się ograniczać. Kto to będzie czytał...