Kraków konferencjami Javowymi stoi. GeeCon, Devoxx, a 10 i 11 października odbyła się konferencja JDD (wcześniej Java Developer Day).
Na dzień dobry przywitała mnie monstrualna kolejka do rejestracji. Bardzo dużo osób nie zdążyło na pierwszą prezentację, która i tak nie odbyła się zgodnie z rozkładem. Na szczęście później było już tylko lepiej i ogólnie można powiedzieć, że konferencja trzymała poziom, chodź jeśli jeździ się na konferencje regularnie od kilku lat, niestety jest coraz mniej rzeczy, które potrafią człowieka zaskoczyć lub zachwycić. Od strony obsługi przerw kawowych też było ok, choć trochę złościło mnie, że nigdy nie mogłem zdążyć na kanapki, które znikały w ekspresowym tempie. Na stoiskach sponsorów można było zaobserwować ciekawy trend, coraz popularniejszym gadżetem stają się żółte gumowe kaczki!
Moją ciekawość najbardziej rozbudziła zajawka prezentacji Jarosława Ratajskiego pod tytułem “DROP DATABASE – przypowieść galaktyczna”. Nie zawiodłem się. Jarek ze swadą udowadniał, że baza danych to absolutnie nie miejsce na trzymanie danych aplikacji. Postawił tezę, że “Typowa baza danych zabija wydajność twojego systemu (tak 100 razy), niszczy przejrzystość i czystość kodu, a do tego to po prostu wielka strata informacji.”, a następnie przystąpił do udowodnienia jej przy pomocy przykładów implementacji systemu “Galakpizza” w dwóch równoległych wszechświatach. W “normalnym” wszechświecie kosmici-programiści użyli Javy a w “innym” wszechświecie Javy++ czy Javy podłączonej do relacyjnej bazy danych i ORM’a. Jak poszło jednym i drugim możecie zobaczyć na GitHubie https://github.com/airomem/galakpizza/. Program “normalnych” kosmitów był zdecydowanie szybszy, łatwiej też udało się zadowolić szefa żądającego zmian w aplikacji. W pewnym momencie padło pytanie z sali: “A co będzie jak prąd wyłączą”. Odpowiedź jest prosta. Mamy zapisane na dysku wszystkie eventy, które zostały wysłane do aplikacji, więc jeśli zabraknie prądu wystarczy odtworzyć je po kolei po restarcie aplikacji i mamy znów ten sam stan co przed wyłączeniem prądu. Mi skojarzyło się to ze sposobem w jaki zapisuje dane LMAX http://martinfowler.com/articles/lmax.html czyli giełda, która obsługuje 6 milionów transakcji na sekundę z latency na poziomie 5ms. Oni też nie mogą pozwolić sobie na utratę danych ale jednocześnie i na powolność bazy danych. Na sam koniec Jarek, jako “take-away” udzielił wszystkim paru rad:
- Zacznij od czegoś małego
- Usuń bazę z centrum Twojego systemu
- Zrezygnuj z serwera aplikacji
- Zrezygnuj z używania adnotacji
- Wyrzeknij się magii w swoim kodzie
- Naucz się Javy i algorytmów
- Poczuj moc CPU i RAMu
O tym jak wydusić najwięcej z CPU/RAM opowiadała też prezentacja
“Practical non-blocking microservices in Java 8” wykonaniu Michała Balińskiego i Oleksandra Goldobina z łódźkiego Oberthura. Publiczność stawiła się tłumnie i miejsca nie było już nawet na podłodze. Myślę, że ludzie upchnięci w dusznej sali nie zawiedli się, gdyż “mięsko” prezentacji dotyczyło tego czego mi zawsze najbardziej brakuje w konferencyjnych prezentacjach, czyli bardzo konkretne doświadczenia zebrane na prawdziwym projekcie, z omówieniem motywacji, które stały za podjętymi decyzjami i ich konsekwencjami. Mało tego, poparte pomiarami! Porównane zostało podejście blokujące i nieblokujące do obsługi wejścia/wyjścia i usług aplikacyjnych. Zostało bardzo podkreślone, że jeśli chcemy mieć nieblokującą aplikację musimy stosować nieblokujące komponenty na wszystkich stykach z zewnętrznym światem i omówione zostały podstawowe biblioteki, które pozwalają nam na dostęp w nieblokujący sposób w Javie. Wersje nie-blokujące okazały się znacznie szybsze od ich blokujących odpowiedników, ale zostało okupione to utratą czytelności kodu. W związku z tym nowe podejście zostało zastosowane tylko w wybranych, małych serwisach dla których nie tylko przepustowość, ale i stabilność odpowiedzi mają kluczowe znaczenie. Przykładowy kod możecie znaleść tu: https://github.com/balonus/blocking-vs-nonblocking-demo a slajdy tu: https://speakerdeck.com/goldobin/practical-non-blocking-microservices-in-java-8-jdd
Następnym łódzkim akcentem była prezentacja Wiktora Sztajerowskiego, który opowiadał o “Polyglot Persistence”. Wiktor przekonywał nas, że posiadanie jednej bazy z jednym zdenormalizowanym schematem jest przeżytkiem i nasza aplikacja może naprawdę zyskać jeśli dobierzemy mechanizm persystencji pod konkretne wymagania określonej funkcjonalności. Dodatkowe bazy mogą na przykład stanowić rodzaj cache’a i wprowadzając je do systemu możemy skorzystać z wypróbowanych wzorców jego użycia. Żeby nie było za kolorowo Wiktor zacytował Phil’a Karlton’a: "Są tylko dwie rzeczy trudne w informatyce – pierwsza to nazewnictwo, druga to inwalidacja cache.” co pokazuje, że zadanie postawione przed nami nie będzie trywialne, ale to już kolejna prezentacja pokazująca, że kurczowowe trzymanie się relacyjnej bazy danych jako serca systemu staje się coraz bardziej “passe”. Slajdy znajdziecie tu: http://www.slideshare.net/WiktorSztajerowski/polyglot-persistence-jdd-2016
Duże zainteresowanie wzbudziła prezentacja Jarosława Pałki “JIT me baby one more time“, mimo iż autor reklamował ją jako “festiwal wiedzy bezużytecznej, zbędnej i nazbyt odklejonej od naszej codziennej pracy“. Prezentacja miała zgromadzonym programistom Java pokazać jak niewiele wiedzą o tym co dzieje się w środku narzędzi z których na co dzień korzystają: “Celem tej prezentacji jest chwila zadumy i zachwytu nad pięknem technologii. Chwila refleksji jak niewiele wiemy i jak wiele skrywa się pod kolejnymi warstwami abstrakcji, bibliotek i framework’ów.”. Aby osiągnąć ten cel Jarek zaskakiwał publiczność co rusz trudnym do przewidzenia sztuczkami które JIT wyczynia z kodem który piszemy.
Ostatnią techniczną prezentacją, która zwróciła moją uwagę było: “Architecting your codebase” Kamila Szymańskiego. Cel prezentacji był bardzo prosty i konkretny: przerobić sztandarową aplikację prezentującą wzorce użycia Springa, czyli napisaną przez jego twórców PetClinic, tak aby lepiej spełniała wymogi współczesnej architektury. Wersję przerobioną przez Kamila możemy objerzeć tu: https://github.com/kamilszymanski/spring-petclinic
W kategorii wystąpień nietechnicznych nie zawiódł Sławek Sobótka, który przedstawił: “Prezentacje i Wystąpienia – jak nie tylko przetrwać ale i dobrze się bawić”. Najciekawsze było podsumowanie styli prezentowania w postaci archetypów
- DYREKTOR
- MISJONARZ
- LUZAK
- PROFESOR
Sławek przekonywał, że dla najlepszego efektu najlepiej mieszać je wszystkie podczas prezentacji, bo nikt nie wytrzyma monotonii jednego z nich przez całą prezentację.
Cieszy mnie, że było parę prezentacji, które poruszały tematy głębsze niż jak się robi X we framework’u Y. Na imprezie integracyjnej jeden ze spikerów, podsumował, że takie wydarzenie dla programistów “średniego szczebla” , którzy przyjeżdżają po “mięsko” – dowiedzieć się, co jest teraz na topie i jak się to robi. Mnie natomiast od dłuższego czasu męczy myśl, że 95% programistów (nie wyłączając mnie) bardziej skorzystałaby z nauki ogólnych zasad projektowania, niż z nauki konkretnych technologii. Dobrze, że pojawiają się prezentacje wyłamujące się ze schematu, ale ciągle za dużo jest takich, które próbują być skróconą instrukcją obsługi, którą przecież można poczytać w Internecie.
Jedną z największych atrakcji dwudniowej konferencji, jest większa dostępność spikerów, których można również pomęczyć na imprezie integracyjnej. Dlatego nie najlepszym pomysłem wydaje mi się organizowanie zamkniętej kolacji dla spikerów w trakcie trwania imprezy – przyjechali przecież dzielić się wiedzą z uczestnikami a nie się od nich izolować.
Ogólnie konferencję uznaję za udaną, choć brakowało mi trochę efektu WOW, i prezentacji z której wyszedłbym z przekonaniem, że dla niej warto było przyjechać do Krakowa.
Autor: Piotr Przybylak