JDD 2016

Jak co roku na jesieni, miałem przyjemność wziąć udział w konferencji JDD w Krakowie przeznaczonej dla entuzjastów języka Java i pochodnych. 2 dni i niemal 16 wykładów to niezłe wyzwanie ale jak zwykle udało mi się coś wynieść (bynajmniej nie w znaczeniu gadżetów od sponsorów) i zainspirować na kolejny do pracy przy własnych projektach.

Główna sala przed rozpoczęciem

Główna sala przed rozpoczęciem

Uwagi ogólne:

  • fajne wykłady, na kilkanaście miałem tylko 2-3 nietrafione,
  • stałe grono prelegentów ale też trochę nowych twarzy,
  • część prelekcji powtarzała się z 4Developers i Confiturą,
  • nowy hotel ale te same problemy: ciasno w przejściach i kolejki do rejestracji (mimo QR-kodów z biletami), obiadów i szatni,
  • konferencja zmieniła swoje logo.
Kolejka do rejestracji

Kolejka do rejestracji

Losowanie zestawu Lego Mindstorm

Losowanie zestawu Lego Mindstorm

Chillout zone

Chillout zone

1. Michał Kordas (Luxoft): Blazing Fast Feedback Loops in the Java Universe

Michał Kordas (Luxoft)

Michał Kordas (Luxoft)

Dobry prezenter, fajna prezentacja (slajdy), sprawne tempo, informacje były prezentowane w narastający sposób, od powszechnie znanych, do trudniejszych i mniej znanych. Myślą przewodnią było jak stale podnosić jakoś kodu, szybko zbierać feedback i w ogóle organizować pracę zespołu.

Ciekawsze rzeczy które wynotowałem:

  • należy ogarnąć warningi w kodzie (często sięgają > 10.000) albo wyłączyć ich sprawdzanie w maven/gradle bo tylko spowalnia proces budowania: -Xlint:all, Xlint:-processing -Xlint:-serial, można też flagą -Werror przełączyć, aby wszystkie warningi były interpretowane jak errory (dzięki krzysp za uwagę do moich notatek…).
  • należy sprawdzać aktualność wersji zależności żeby nie zostawiać bardzo starych: gradlew dependencyUpdates,
  • warto stosować w zespole tablicę/monitor/wskaźniki informujące czy wszystko działa poprawnie (keep it green) lub alarmować że coś idzie źle, np. przez gadżety z http://sirenofshame.com/,
  • warto wymusić żeby testy odpalały się wielowątkowo: tasks.withType(Test) { maxParallelForks = Runtime.runtime.availableProcessors() },
  • warto wymuśić żeby budowanie aplikacji odbywało się wielowątkowo, np. gradlew build --parallel --parallel-threads=N, pamiętając jednak że utrudnia to czytelność logów w przypadku błędów,
  • używanie jcenter() zamiast mavencentral(), używanie gradle’a w trybie deamon,
  • warto współdzielić konfigurację code-style, np. online na WIKI (checkstyle, PMD, FindBugs, CodeNarc),
  • warto wszystkie taski związane z jakością kodu zebrać do jednego „gradlew quality” (checkstyleMain, pmdMain, findbugsMain, codenarcMain, checkstyleTest, pmdTest, findbugsTest),
  • W Idei można włączyć before-commit: „Scan with checkstyle”, „Run findbugs analysis”,
  • W Idei warto używać SonarLint (http://www.sonarlint.org/) – bezpośrednio w IDE sprawdza reguły zdefiniowane w Sonar,
  • gdy potrzebujemy całego feedbacku z wywołania gradle (żeby nie wywalił się przy pierwszym błędzie) można dodać flagę: gradlew quality --continue (dociąga do końca a nie wywala się na pierwszym odstępstwie),
  • można stosować testy mutacyjne – losowe modyfikacje kodu i puszczenie testów czy wykryją błędy: http://pitest.org/,
  • można stosować nonDex – sprawdzanie użycia ryzykownego API Java które może inaczej działać w rożnych wersjach (https://github.com/TestingResearchIllinois/NonDex),
  • warto stosować plugin Jenkins Pipelines który graficznie prezentuje zależności pomiędzy fazami budowania: https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin.

3. Jacek Bukowski (GlobalLogic): Flying to clouds can it be easy?

Jacek Bukowski (GlobalLogic)

Jacek Bukowski (GlobalLogic)

Fajny przykład ustawienia i spięcia usług (microservices) z dashboardem generowanym przez Eureka (https://github.com/Netflix/eureka) od Netflix, z klientem REST’owym w Java. Live demo pokazywało przykład wiązania usługo oraz przypadek obsługi niedostępności.

Prezentacja była trochę za szybka, zbyt przeładowane slajdy, czarna czcionka na granatowym tle nieczytelna i na domiar złego z przyczyn technicznych migał ekran.

Ciekawsze rzeczy które zanotowałem:

Netflix stosuje stos ze Spring Cloud (http://projects.spring.io/spring-cloud/):

Prowadzący udostępnił kod na https://github.com/buczyn/spring-cloud-netflix-demo więc można się pobawić gotowym działającym przykładem.

4. Jakub Marchwicki (Young Digital Planet): 6 tips for you JavaEE project be less depresing

Jakub Marchwicki (Young Digital Planet)

Jakub Marchwicki (Young Digital Planet)

Fajny wykład ale dałem się oszukać tytułowi w języku angielskim – ta była ta sama prezentacja co na 4Developers w kwietniu: http://www.mberkan.pl/2016/04/15/konferencja-4developers-2016/.

4a. Joanna Czarnecka (Provocare), Norbert Grzybek : Myślenie prowokatywne w świecie IT – czyli rzecz o tym jak budować komunikację z kosmitami (ludźmi innymi niż z świata IT)

Niestandardowo poprowadzona prezentacja jako dialog z uczestnikami prezentacji o komunikacji z osobami nietechnicznymi. Przyszedłem już po rozpoczęciu i nie zabrałem się na wstęp więc nie byłem w stanie podłapać specyficznego klimatu i zrezygnowałem.

5. Christin Gorman (Kodemaker): Concurrency options on the JVM

5. Christin Gorman (Kodemaker)

5. Christin Gorman (Kodemaker)

Świetna mówczyni, najbardziej dynamiczna ze wszystkich prezenterów których widziałem. Jej prezentacja była bardzo szybka i przez to niestety nie byłem w stanie wyłapać wszystkich niuansów językowych :-(. Wstęp zaczął się od prostego przykładu z uruchomieniem 3000 wątków czekających 1s powodującym że aplikacja wywali się z OutOfMemeryError. Później były przykłady z ExecutorService, Task (z ConcurrencyLinkedQueue) i VertX (http://vertx.io/) oraz fiber – biblioteka z takim samym API jak Java SE (http://www.paralleluniverse.co/quasar/) – dziki niej można łatwo zastąpić istniejący „blokujący się” kod.

6. Michał Matłoka (SoftwareMill): Small intro to Big Data

Michał Matłoka (SoftwareMill)

Michał Matłoka (SoftwareMill)

Wykład miał być „entry level” i takim był, tzn. wstęp do big data oraz opis wszystkich popularnych bibliotek, których dostępna liczba jest przerażająca. Sądzę że najważniejszym wnioskiem z prezentacji było że przygodę z BigData należy rozpocząć ze stosem „SMACK”: Spark, Mesos, Akka, Cassandra i Kafka.

Wspomniana została ciekawa strona na której autor zadał sobie trud spisania wszystkich technologii związanych z BigData: https://github.com/onurakpolat/awesome-bigdata
Sama prezentacja jest pod adresem: http://www.slideshare.net/SoftwareMill/small-intro-to-big-data

7. Jarek Pałka (Allegro): JIT me baby one more time

Jarek Pałka (Allegro)

Jarek Pałka (Allegro)

Świetna prezentacja (jak zwykle) – po łagodnym wprowadzeniu i typowych dla Jarka dowcipach było „mięso”: przykłady kompilacji, wyniki w kodzie assemblera, zastosowanie różnych kompilatorów, porównanie szybkości działania, itp.

Ciekawsze rzeczy które sobie wynotowałem:

  • w Javie trzeba robić krótkie metody, bo tylko takie mają szanse być efektywnie skompilowane przez Jit,
  • -Xint – wajcha zakazująca uruchamiać JIT,
  • -Xx:+printcompilation – wyświetla info, np. że kod był zbyt duży (trzeba robić małe metody!),
  • wyzwalanie kompilacji odbywa się mniej więcej po: 2000 wywołań -> C1, 10000 wywołań -> C2.

8. Marcin Zajączkowski (Codearte): Continuous Delivery dla projektów open source – szybko i prosto

Fajna prezentacja dla początkujących lub chcących zoptymalizować swoje zadania opiekunów projektów Open Source. Prowadzący po wstępie teoretycznym przedstawił swoje narzędzie automatyzujące budowanie, release’owanie, publikowanie wersji projektu: „C(ontinous)DeliveryBoy” http://github.com/szpak/CDeliveryBoy

9. Joseph W. Yoder: Deliver Fast with Confidence

Joseph W. Yoder

Joseph W. Yoder

Stały już bywalec JDD w atrakcyjny sposób opowiedział o inżynierii oprogramowania i dobrych praktykach programistycznych.

Ciekawe rzeczy które zanotowałem:

  • fajny slajd „Agile develpment Accelerate delivery”: https://s-media-cache-ak0.pinimg.com/736x/e9/5e/e3/e95ee32ff1664253c4b2dac98eec5576.jpg,
  • kluczowe jest robienie retrospektyw – to klucz to continous improvement,
  • fajna sentencja: „Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” Martin Fowler, 2008,
  • ciekawy przykład nietechniczny jak drobne usprawnienie pracy może zwiększyć jakość: w szpitalach znacząco spadła ilość zachorowań gdy lekarze zaczęli regularnie myć ręce pomiędzy przyjęciami pacjentów, a wcześniej „nie mieli na to czasu,
  • konieczność codziennej pielęgnacji kodu porównał do mycia zębów: jeżeli tego nie będziemy robić, to po dłuższym czasie czeka na „interwencyjne” leczenie kanałowe.

10. Arkadiusz Borek: Scale-out, a mówili, że się nie da

Arkadiusz Borek

Arkadiusz Borek

Bardzo fajna prezentacja i bardzo udana jak na debiutanta, ponieważ jako live demo był tworzony system w chmurze. Minusem prezentacji było trochę chaotyczne przechodzenie pomiędzy slajdami. Obejrzeliśmy fajny przykład jak korzystając z Dockera i Kubernetes postawić klaster 10 instancji MongoDB w Google Cloud, a następnie aplikacje wystawić jako usługę w Internecie i jeszcze zmienić jej wersję.

11. Ondrej Mihályi: How to bake reactive behavior into your Java EE applications

Ondrej Mihályi

Ondrej Mihályi

Miał być pokaz live demo ale prezenter się wycofał argumentując problemami technicznymi. Zabrakło prostej receptury której się spodziewałem, wniosek tylko taki że programowanie reaktywne w JEE jest trudne i w Javie EE7 będzie wsparcie do programowania reaktywnego.

Kod do prezentacji można pobrać z adresu https://github.com/OndrejM-demonstrations/Reactive-CargoTracker

12. Michał Gruca: Continuous improvement, developing yourself and others

Fajny wykład dla każdego z cyklu samodokonalenia się programistów, główna idea to że możesz wszystko zrobić sam. Po wstępie opisującym różne typy osobowości został omówiony szereg sposobów na ciekawe urozmaicenie sobie życia: indywidualnie, w zespole i w firmie. Interesująca była konkluzja: każdy z uczestników powinien za rok próbować wystąpić w JDD 2017.

13. Dominika Puzio: Machine Learning dla programistów

Dominika Puzio

Dominika Puzio

Bardzo fajna prezenterka, z przekonaniem i łatwością opowiadała o skomplikowanych zagadnieniach omawiając od wstępu teoretycznego do praktycznego przykładu z live-demo H2O i TAP (http://trustedanalytics.org/) w którym wciągnęła dane dotyczące przykładowego rozpoznawania Irysów, a następnie już jako wygenerowany model jako kod Java w aplikacji na spring-boot REST’ową rozpoznała dane z obrazka testowego.

Grzegorz Rożniecki: Java 8 – what could possibly go wrong?

Grzegorz Rożniecki

Grzegorz Rożniecki

Ciekawie poprowadzona prezentacja dla przepełnionej sali przedstawiała niedoskonałości Javy 8, jednak ja albo za mało programuję albo się do pewnych rzeczy przyzwyczaiłem.

15. Grzegorz Piwowarek: Javaslang – Functional Java Done Right

Grzegorz Piwowarek

Grzegorz Piwowarek

Prowadzący w entuzjastyczny sposób opowiadał o bibliotece Javaslang (http://www.javaslang.io/) która powstaje z udziałem firmy http://touk.pl/ w której pracuje. Punktem wyjścia prezentacji było omówienie niedostatków Javy 8 w aspekcie programowania funkcyjnego (przypadkowo zazębiało się to z poprzednią prezentacją), a treścią omówienie rozwiązań oferowanych przez wspomnianą bibliotekę. Znaczna część faktycznie wyglądała atrakcyjnie, szczególnie propozycja obsługi wyjątków checked wewnątrz wyrażeń lambda przez Try.of(...), jednak kończący prezentacje przykład Match(...).of(Case(...),Case(...)) wzbudził już moje wątpliwości czy ta forma jest na pewno czytelna.

16. Celine Boudier: Code for life – inspiring the next generation of developers

Celine Boudier

Celine Boudier

Bardzo ciekawie został przedstawiony projekt edukacyjny tworzony przez firmę Ocado Technology (http://www.ocadotechnology.com/) w ramach którego powstała gra Rapid Router (https://www.codeforlife.education/rapidrouter/) dla dzieci w wieku 5-10 lat polegająca na do sterowaniu pojazdem po mieście przy pomocy kodu w postaci prostych bloków, podobnie jak w języku Scratch (https://scratch.mit.edu/). Gra jest elementem szerszego planu edukacyjnego dla nauczycieli przekazywanie dzieciom wiedzy na temat podstaw programowania, wraz z możliwością weryfikacji postępów (testami). Projekt jest prowadzony przez pracowników firmy częściowo na zasadzie wolentariatu, poszukiwani są także ochotnicy spoza firmy – zespoły działają we Wrocławiu i Krakowie. Stos technologiczny używany w projekcie to Stos: django, Python, JS, Raphael.js, blocky, crowdin, Kubernetes.

O autorze

Marek Berkan Marek Berkan: programista, entuzjasta tworzenia oprogramowania, zarządzania zespołami technicznymi. Prywatnie motocyklista, kolarz MTB, biegacz, żeglarz, rekreacyjny wspinacz, zamiłowany turysta. Witryny: , , .

Jeden komentarz do “JDD 2016

  1. Krzysiek

    Bardzo dobra recenzja ultraciekawej konferencji JDD. Przeczytałem z przyjemnością. Z drobiazgów to jeśli dobrze zapamiętałem z prezentacji „Blazing Fast Feedback Loops in the Java Universe” to Michał proponował, aby nie wyłączać warningów tylko flagą -Werror przełączyć, aby wszystkie warningi były interpretowane jak errory. Wtedy build się wywala i trzeba to poprawić, bo jest generalnie dobrą praktyką 🙂

    Odpowiedz

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *