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.
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.
1. Michał Kordas (Luxoft): Blazing Fast Feedback Loops in the Java Universe
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?
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:
- książka: Matt Stine „Migrating Cloud Native Application Architectures” (http://www.oreilly.com/programming/free/migrating-cloud-native-application-architectures.csp),
- https://12factor.net/ – ważne cechy dobrej aplikacji,
- Netflix podobno obsługuje 30% ruchu w internecie (!!!).
Netflix stosuje stos ze Spring Cloud (http://projects.spring.io/spring-cloud/):
- discovery: Eureka – tylko annotacja w serwerze
@EnableEurekaServer
, klient@EnableDiscoveryClient
, - bezpieczniki: Hystrix + turbine – wizualizacja stanu bezpieczników,
- client side load balancer: ribbon (https://github.com/Netflix/ribbon),
- feign – declarative rest client (https://github.com/OpenFeign/feign).
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
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
Ś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
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
Ś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
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
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
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
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?
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
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
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.
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ą 🙂