Hackathon Spring4 – podsumowanie

W niedzielę o 19:00 skończyliśmy 3 dniowy hackathon zorganizowany w firmie e-point i dla jej pracowników, którego celem było zapoznanie się „w boju” z najpopularniejszym frameworkiem do pisania aplikacji w języku Java – Spring4. Pomysł wziął się stąd, że na co dzień pracujemy z własnym frameworkiem OneWeb i nie jesteśmy na bieżąco z tym co się dzieje „na zewnątrz” – jak ktoś to ładnie ujął, jesteśmy izolowani jak Japonia… Biznesowym celem było napisanie aplikacji do obsługi naszej firmowej biblioteki.

Praca grupowa - dzień 1

Praca grupowa – dzień 1

Pierwszego dnia, w piątek, większość dnia spędziliśmy na prezentacjach, kiedy to kolega Piotrek wprowadzał nas „teoretycznie” w nowe narzędzia i technologie: środowisko programistyczne IntelliJ Idea, środowisko budowania aplikacji Gradle, framework Spring4 oraz Hibernate. Resztę pierwszego dnia oraz połowę drugiego spędziliśmy na „poskramianiu” Spring oraz Hibernate, tak aby można było w końcu zobaczyć strony aplikacji generowane danymi z bazy. Resztę czasu spędziliśmy na dodawaniu kolejnych ekranów i funkcji i to był dopiero naprawdę efektywny okres.

Podsumowując hackathon jednym zdaniem, to fajnie spędziliśmy czas i dużo się nauczyliśmy ale cel biznesowy nie został zrealizowany. Ilość problemów „wieku dziecięcego” spowodowała że straciliśmy masę czasu na osiągnięcie zdolności bojowych i na implementacje kolejnych ekranów aplikacji zostało zbyt mało czasu.

Pod koniec dnia trzeciego zrobiliśmy sobie retrospektywę podsumowującą nasze prace.

Wyniki retrospektywy

Pozytywy, to co nas „napędzało”:

  • Pozytywne nastawienie i praca grupowa – bez stresu i przymusu – wszyscy pracowali tak jak wcześniej zadeklarowali, mimo niedogodności nikt nie marudził…
  • Bezpośrednia komunikacja – siedząc w jednym pokoju obok siebie wzajemnie sobie pomagaliśmy oraz konsultowaliśmy pomysły.
  • Wspólne obiady (na koszt firmy…) i rozmowy kuluarowe.
  • Poznawanie nowych technologii:
    • Spring 4: ładny MVC, automatyczne rozwiązania (jeżeli działały…), szybkie i proste tworzenie kontrolerów, użycie annotacji do konfiguracji (szczególnie mapowania URL i parametrów oraz bezpieczeństwo),
    • Thymeleaf – nowe narzędzie do tworzenia szablonów HTML – szybkie i bezproblemowe wpięcie w Spring, ładna składnia wymuszająca myślenie „divami” i działanie jako zwykły HMTL,
    • Gradle: ładna i zwarta składnia, proste uruchamianie, integracja z IntelliJ Idea,
    • użycie IntelliJ Idea, aczkolwiek widać było minusy wersji „community”.
  • Dobre przygotowanie hackathonu: model bazy z danymi testowymi, prototyp, user stories i zaczyn aplikacji (choć – jak się okazało – za mały…)

Problemy:

  • Brak JRebel i konieczność restartów serwera Tomcat po każdej zmianie w kodzie Java.
  • Problemy z kleszczeniem się uruchomień Gradle: jeżeli działał tomcat, to nie można uruchomić nic innego, np. clean.
  • Dużo czasu spędzonego przez brak wygenerowanych klas POJO annotowanych dla Hibernate – hibernate-tools nie działało, a poratowanie się narzędziem z Idea Ultimate wprowadziło wiele błędów: Collection zamiast Set, nieprawidłową obsługa typów TEXT z PostgreSQL, masowanie błędów utrudniając ich analizę, brak odwzorowania relacji wiele-do-wielu powodujący cykle.
  • Dużo czasu spędzonego na walce z uruchomieniem JBoss 5 (nieudanego, bo Spring4 usunął wsparcie dla mechanizmu VFS) i JBoss 7.
  • Zbyt mała wiedza wejściowa o Spring4:
    • brak dobrej wstępnej konfiguracji,
    • magiczne nieoczywiste rozwiązania,
    • dziwny i nieoczywisty sposób zabezpieczania kontrolerów annotacją @secured,
    • brak jednoznacznych wzorców dotyczących specyficznych rozwiązań, np. czy filtrowanie/pagerowanie/sortowanie tabeli ma być zapisywane w URL, modelu czy sesji,
    • zbyt dużo konfiguracji Spring zostało napisane w XML zamiast przy pomocy błogosławionych annotacji,
    • brak klasy bazowej dla kontrolerów ze wspólnymi annotacjami.
  • Użycie dbm-plugin z maven1 do inicjalizacji bazy danych który nie działał pod Windows, przez co część osób nie miała dostępu do danych testowych.
  • Nie zdążyliśmy napisać testów jednostkowych.
  • Niższa wydajność developowania na wolniejszych laptopach vs. firmowych stacjach roboczych.

Zagrożenia:

  • Brak implementacji autoryzacji przez firmowy LDAP/IMAP.
  • Brak komponentów wizualnych w Thymeleaf.

Pomysły, idee na przyszłość:

  • Szkolenie mogłoby być wcześniej niż sam hackathon żeby dać szansę na przetrawienie wiedzy.
  • Powinniśmy lepiej poznać Spring 4 żeby użyć pewnych rozwiązań czy idei we własnym frameworku:
    • mniej zależne obiekty i łatwiejsze pisanie testów,
    • konfiguracja przez annotacje.
  • Trzeba się motywować do zdobywania nowej wiedzy.
  • Powinniśmy wdrożyć Gradle w całej firmie i zapomnieć o maven1.
  • Vertabelo powinno umożliwić generowanie POJO z annotacjami dla Hibernate, w tym dodawanie specjalnych metainformacji do modelu – killer-feature biznesowy.
  • Projekt powinien być tak udostępniony żeby móc go developować dalej z domu.
  • Kiedy robimy kolejny hackathon? 🙂

Moje prywatne podsumowanie

  • Budowanie aplikacji i deployowanie  na serwer aplikacyjny jest bardzo niewdzięczną pracą: długotrwałą i wymagającą cierpliwości w rozwiązywaniu dużej ilości błahych problemów – przez to że dałem się w to wpędzić straciłem wiele czasu, który mógłbym przeznaczyć na kodowanie.
  • IntelliJ Idea wcale nie jest tak bardzo lepsza od poczciwego Eclipse: ciężko się jest przesiąść i poznać wszystkie odpowiedniki umożliwiające efektywną pracę a obiecywana „inteligencja” wcale nie jest taka super. Jednak miałem zbyt mało czasu żeby obiektywnie poczuć plusy.
  • Hibernate ma te same problemy które pamiętam sprzed 8 lat, ciągle dostaje się problemy z LazyInicialization :-). Cieszę się że na co dzień używam naszego OR-mappingu którego prostota jest najmocniejszą zaletą.
  • Kiedy robimy kolejny hackathon żeby dokończyć aplikacje? 🙂
Tablica kanban z zadaniami pod koniec dnia 1

Tablica kanban z zadaniami pod koniec dnia 1

Zalążek działającej aplikacji pod koniec dnia 2

Zalążek działającej aplikacji pod koniec dnia 2

Przed rozpoczęciem dnia 3

Przed rozpoczęciem dnia 3

Obiad - dzień 3

Obiad – dzień 3

Wynik retrospektywy - końcówka dnia 3

Wynik retrospektywy – końcówka dnia 3

Tablica kanban - końcówka dnia 3

Tablica kanban – końcówka dnia 3

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 “Hackathon Spring4 – podsumowanie

  1. Darek Chojnacki

    Dodam od siebie:
    + latwosc pisania testow do kontrolerow – prawdziwe TDD,
    + mockito i assertj,
    + atmosfera,
    + istnieje mozliwosc organizowania hackatonu w wiekszej sali firmowej,
    – potrzeba wdrozeniowca/hostingowca by przygotowac wdrozenie,
    – brak spotkania organizacyjnego przed, by podzielic sie tematami do opracowania,
    – szkielet aplikacji nie powinien byc demem a opierac sie na jakims prostym CRUDzie,
    – repo do trzymania kodu na jakims prywatnym githubie dostepnym spoza firmy.

    Calosc oceniam bardzo na plus! Chetnie bede uczestniczyl w kolejnej edycji. Dzieki za organizacje.

    Odpowiedz

Dodaj komentarz

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