Moje odczucie po pierwszym dniu było takie że poziom wykładów się obniżył. Szczególnie rozczarowany byłem dwoma pierwszymi wykładami, które były obowiązkowe, tzn. nie było jeszcze odrębnych ścieżek. Pierwszy z nich, jak się domyślam, był przeforsowany przez sponsora ale co robił tam drugi, wizualnie niezwiązany z żadnym sponsorem, to zupełnie nie mam pojęcia. Dalej też zdarzały się bardzo słabe prezentacje (szczegóły niżej).
Z praktycznych aspektów konferencji należy wymienić na plus:
- kilku dobrych znanych prezenterów,
- bardzo dobre jedzenie (obiady i cały czas dostępne słodycze oraz napoje),
- działające WIFI,
- stanowiska baristów na kilku stoiskach sponsorskich (taka nowa, miła moda…),
- różnej długości sloty programowe (30, 40 oraz 100 minut) pozwalające na wykłady o różnej obszerności.
Zaobserwowane minusy:
- ciasnota w salach wykładowych i częściach wspólnych (standardowa w hotelu Galaxy),
- sporo kiepskich wykładów,
- złe ułożenie wykładów w slotach czasowych: te ciekawe były krótkie, a te mało ciekawe dłużyły się niemiłosiernie,
- brak wyraźnego zaznaczenia które pozycje w agendzie to warsztaty (!),
- niespójność informacji na wydrukowanej agendzie, aplikacji mobilnej i w serwisie WWW (np. informacje w w/w warsztatach),
- brak informacji o języku prezentacji na wydrukowanej agendzie (mi to szczególnie nie przeszkadzało ale obcokrajowcy mogli być rozczarowani, bo anglojęzyczne tytuły nie oznaczały automatycznie tego samego języka prezentacji),
- zabrakło koszulek w małych rozmiarach :-(.
Z bardziej osobistych doświadczeń: porównałem użyteczność dwóch urządzeń w kolejnych dniach konferencji do robienia notatek. Tablet, mimo poręczności oraz braku konieczności ładowania, okazał się mniej użyteczny od klasycznego laptopa z prostej przyczyny: nie można szybko pisać bezwzrokowo :-(. Także nadal jestem skazany na ciągnięcie niewygodnej torby…
Poniżej podsumowanie poszczególnych wykładów.
Torny path to Data Mining projects (Alexey Zinoviev)
Wykład był poprowadzony bardzo szybko, najwidoczniej zbyt szybko dla mnie, ponieważ nie wyodrębniłem w nim jakiejś głębszej myśli, poza szybkim przeleceniem przez narzędzia i biblioteki związane z Data Mining. Krótki wstęp mówił o głównym założeniu, czyli na podstawie faktów tworzenie nowych faktów i zilustrował to dobrym przykładem z koszykiem zakupowym. Później było wymienionych sporo narzędzi:
- Octave – opensource’owych klon Matlab,
- Hive oraz HiveQL – ala SQL’owy język do odpytywania hurtowni danych,
- Hadoop i Spark,
- JDM (Java Data Mining) API dla Javy do budowania własnych aplikacji,
- SPMF opensource’owa biblioteka do operacji data miningowych z 109 przykładami 109 algorytmów,
- Mahaut – środowisko do implementacji systemów uczących się,
- MLlib biblioteka do implementacji systemów uczących się.
Where Test Doubles can lead you… (Sebastian Malaca)
Zabrakło mi w tej prezentacji wstępu i jakiegoś wprowadzenia, ponieważ nie zrozumiałem czym tytułowy Test Doubles różni się od tego co standardowo robimy w ramach testów jednostkowych korzystając z mock’ów i stub’ow, nagrywając pewne zachowania po czym weryfikując poprawność wywołań.
Don’t Panic – Hitchhiker’s guide to the JVM monitoring (Wojciech Oczkowski)
Świetny wykład z przykładami uruchamianymi live, z naprawianiem „zepsutej” aplikacji, prowadzący odwoływał się do własnych doświadczeń i opowiadał o nich z wielkim entuzjazmem, dzięki czemu miło się go słuchało.
Wstęp opisywał kolejne poziomy na których możemy spotkać się z problemami:
- kod aplikacji: niewydajne algorytmy, wycieki pamięci, niewydajny model danych,
- kontener i „okolice”: pule wątków, cache,
- poza kontenerem: JVM, jit, gc, locki i synchronizacja,
- poza JVM: system operacyjny, I/O, konfiguracja pamięci,
- poza OS: hardware, dyski, sieć, wydajność pamięci, cache procesora,
- poza hardware: zewnętrzne systemy: np. baza danych, zdalne usługi.
Ilość miejsc gdzie można spotkać problemy determinuje sporą ilość narzędzi z których trzeba korzystać do analizy. W ramach prezentacji mogliśmy zobaczyć „żywy” pokaz analizy aplikacji obciążanej przez SoapUI, która osiągała około 30 requestów/s powinna około 70, w której wstępna analiza vmstat’em wykazała czekanie na synchronizacje (prowadzący wytłumaczył znaczenie kolumn: us – user time, czyli faktyczny czas działania aplikacji na którym nam zależy, sy – system time, czas na żądania do kernela, id – idle, czyli nic-nie-robienie, wa – wait, oczekiwanie na operacje I/O). Do zdiagnozowania miejsca w kodzie Java w którym wystąpił błąd użyty został program jstack do zrzucania obrazu wątków oraz ciekawe narzędzie do wizualizacji takiego zrzutu Threaddump Analyzer – działa jako usługa SaaS w internecie ale jest zrobiona w całości jako JavaScript po stronie przeglądarki, więc w praktyce można je zgrać sobie na dysk i używać lokalnie.
W kolejnym kroku, po poprawieniu aplikacji, został pokazany i zdiagnozowany błąd wycieku pamięci.
W samej prezentacji zostało pobieżnie opisanych kilka konsolowych narzędzi dostarczanych przez JVM:
- Jcmd – zwraca pid procesów javy (jps to stare narzędzie),
- jinfo – do zwracania informacji o wątku,
- jstat – do monitorowania JVM, np z opcją
-gcutil
zwraca informacje o działaniu garbage collectora, - jmap – util do zrzucenia statystyk pamięci, np. z opcją
-dump:format=b,file=/tmp.x id_procesu
Poza tym omówione zostało kilka wizualnych narzędzi, które są pomocne przy analizie problemów:
- jvisualvm od Oracle – sam się podłącza i robi analizę JVM, w szczególności zużycia pamięci,
- Eclipse MAT do analizy obrazu pamięci, pozwala na łatwe zdiagnozowanie np. problemu „przedawkowania” z cachem,
- gcviewer – odpalany jako jar, pomaga analizować logi GC,
- Java Mission Control – największy kombajn, pozwala szybko sprawdzić co statystycznie robi kod; ma funkcję nazwaną „Flight Recorder” podobną do czarnej skrzynki w samolocie do nagrywania zdarzeń z przeszłości; można ustawiać triggery sprawdzające warunki i robiące po ich spełnieniu jakąś akcje, np wysłanie e-maila po przekroczeniu jakiegoś wskaźnika; minusem jest podwójna licencja do pracy developerskiej i na produkcji (płatna).
Rady „do zabrania” od prowadzącego:
- przy analizie problemów zaczynać od analizy zachowania gc,
- Java jest bardzo wrażliwa na problemy związane z wirtualizacją, np. niefizyczną pamięć czy np. typy dysków.
Z własnego doświadczenia mogę dodać jeszcze do powyższej listy problemy z wirtualnymi kartami sieciowymi :-).
Inne narzędzia wspomniane w czasie wykładu do analizy poszczególnych obszarów to: system operacyjny: top, vmstat, iostat, iotop, strace, pidstat; pamięć: jhat; kod aplikacji: jstack, jconsole; APM (application performence manager): Dynatrace, appdynamics, newrelic, plumbr, xrebel.
Inne ciekawe pomysły które wynotowałem z wykładu to użycie ConcurentHashMap do cacheowania ☺ oraz użycie SoapUI do testów obciążeniowych.
Reasumując: bezapelacyjnie było „mięso”.
Selenium and the Four Rules of Simple Design (Thomas Sundberg)
Zdecydowanie najsłabsza prezentacja konferencji: przez pierwsze 40 minut obejrzeliśmy ponad dziesięć trywialnych refaktoringów kodu kilku testów funkcjonalnych kodu wygenerowanego przez SeleniumIDE. W mojej opinii materiał powinien być skierowany do bardzo początkujących albo zaprezentowany w ciągu maksymalnie 10 minut.
Someday I will find You! (Łukasz Libront)
Krótki ale ciekawy wykład pokazujący jak na podstawie publicznie dostępnych danych o wpisach użytkowników na Twitterze można robić złożone analizy:
- co ludzie robią w poszczególnych dzielnicach miasta,
- jak się poruszają pomiędzy domem i pracą,
- mapy nastrojów,
- jakimi posługują się językami,
- jakimi telefonami się posługują (gdzie Apple powinno wzmocnić sprzedaż…).
Powyższe dane można wykorzystać pozytywnie albo wręcz przeciwnie, ponieważ prowadzący przytoczył przykład gangu włamywaczy którzy na podstawie twittów ustalali jakie nawyki ma potencjalna ofiara i kiedy nie ma jej w domu. Wszystko to jest możliwe dlatego że aktualnie 27% twittów ma informacje o geolokalizacji.
Jako inne ciekawostki związane z geolokalizacją wymieniona została strona norsecorp wizualizująca online ataki komputerowe na świecie oraz wtyczka The Marauders Map do Chrome, która pokazywała gdzie są nasi znajomi z którymi korespondujemy na Messenger’rze – niestety w międzyczasie Facebook zauważył pole do nadużyć i wyłączył prezentacje tych danych.
REST, JSON API i Internety (Patryk Orwat)
Temat był ciekawy i szedłem na prezentacje z dużą nadzieją. Jednak mimo zaangażowania i (pewnie) dużej wiedzy prowadzącego widać było że to początkujący i mocno zestresowany prezenter. Eksperymentował z prezentacją kodu której jednak zaniechał bo zawiesił się komputer ;-), a kod ostatecznie prezentował w WordPad.
Twenty-one years of „Design Patterns” (Ralph Johnson)
Prezentacja wygłoszona w ostatnim slocie tego dnia (o 18:00) przez Ralpha Johnsona – gwiazdę IT, jednego ze współautorów książki Design patterns wydawaną od 21 lat, wykładowcę akademickiego i świetnego mówcę.
Opowiadał o początkach tej książki, jak zaczynali pracę z użyciem grup e-mailowych i serwera FTP. Potem opowiedział pokrótce o niektórych wzorcach, ale nie czym są, tylko jakie były przesłanki ich powstania i jaki jest osobisty stosunek autora do nich. Zaznaczył że życie pokazało, że ta książka też się niekiedy myli i nie warto podążać za nią bezkrytycznie oraz że jakości kodu absolutnie nie można mierzyć ilością użytych wzorców.
Nawiązując do idei przewodniej naszej konferencji wspomniał o późniejszym powstaniu języka Java i że te wzorce były tam wykorzystane.
Prowadzący zachęcał także do zapoznania się z innymi książkami z tej dziedziny wymienionymi na stronie http://hillside.net/patterns/books.
Atrakcyjność wykładu została potwierdzona bardzo dużą widownią, z której część musiała siedzieć na podłodze, bo nie było już miejsc. Jedną z takich osób był Joseph W. Yoder, który – mimo zachęt – nie chciał żeby ustąpić mu miejsce siedzące:
… czytaj opis drugiego dnia konferencji.