Friday, December 5, 2014

2014-11-25 - Testowanie mutacyjne, czyli jak dobre w rzeczywistosci sa Twoje testy


 Sprawdzanie standardowego pokrycia kodu przez testy daje nam informacje, czy przez linie lub rozgalęzienie przeszedl jakiś test. Testowanie mutacyjne idzie o krok dalej I weryfikuje poprzez zmianę (modyfikację lub usunięcie danej lini), czy kod w niej zawarty był w rzeczywistości istotny dla którego kolwiek testu.
Metoda ta jest znana od ponad 30 lat w kręgach naukowych, a ostatnio odkryta na nowo dla rozwiązań komercyjnych. Pozwala dowiedzieć się jak dobre w rzecywistości są nasze testy oraz które fragmenty kodu tak naprawdę wydają się być testowane, co bardzo przydaje się szczególnie w rozwiązaniach dla których poprawność działania aplikacji jest kluczowym wymaganiem.

Na czym wogole polega testowanie mutacyjne?

 

Narzedzie do testowania mutacyjnego na poziomie byte code modyfikuje line kodu produkcyjnego, np.: usuwa linie, modyfikuje wyrażenia warunkowe zamienia > z < lub == z !=, modyfikuje wyrażenia reguralne, zamienia inkrementacje z dekrementacją i++ z i--, zwraca null objects, ustawia warunki brzegowe itd. Nastepnie wykonuje testy na zmodyfikowanym kodzie I generuje raport z rezultatami

Jednym z narzedzi, ktory testuje mutacyjnie jest PIT – projekt opensource, ktorego commiterem jest rownież Marcin. Projekt ten, można znależć na GIT_HUB.

Zalety:

  • rozwiniety ecosystem
    Pit jest wspierany oraz wykorzystuje najbardziej popularne narzedzia. 

    Bild systemy:

    • ant
    • mvn
    • gradle

       IDE:

    • intelij
    • eclipse

       Biblioteki do testowania:

    • jUnit
    • TestNG
    • spock

       Pokrycie kodu:

    • sonar
    • sbt
  • szybki
    • wykorzystuje historie mutacji - PIT nie testuje ponownie mutacji ktore zakonczyly sie sukcesem, uruchamia tylko te zakonczone blede
    • zatrzymuje nieskocznone petle
      PIT moze wykonac zamiane incrementacji w dekrementacje lub odwrotnie. Zmiana taka, moze zapetlic kod produkcyjny. PIT podczas podczas pierwszego uruchomienia, sprawdza czasy wykonania testow, nastepnie dokonuje mutacji. Jezeli podczas nastepnej iteracji test trwa dluzej niż w orginale PIT zakoncza wykonanie takiego testu.
  • Konfigurowalny
    Możliwa jest konfiguracja pakietow, które przeznaczone sa do mutacji
    PIT nie mutuje loggerow
  • rozwijany
    Dzieki szerokiemu community PIT jest zywym frameworkiem

Wady:

  • wymaga testow
  • glownie do testow unitowych
    Pit wykonuje kilka iteracji, dlatego tez wykonanie mutowania dlugich testow integracyjnych moze zabrac duzo czasu.

Podsumowanie

 

Prezentacje poprowadzil Marcin Zajaczkowski, ktory przy okazji prowadzenia szkolenia w Transition Technology zaproponowal wystapienie dla lodzkiego JUG.

Wykonujac demo Marcin promowal skróty klawiszowe Intelij, zachecal do korzystania ze Spock, TDD.

Spotkanie odbylo sie w 6 dzielnicy, dzieki temu uczestnicy mogli skorzystac z baru, usiasc w wygodnych fotelach i posluchac w luzniejszej atmosferze o testach mutacyjnych.

Podczas spotkania zostala wylosowana licencja za zakup ksiazki z Manning.

Wednesday, December 3, 2014

2014-11-15 - Global Day of Code Retreat

Global Day of Code Retreat to wyjątkowa inicjatywa, która raz do roku angażuje świat programistyczny na całym świecie. Idea, która powstała w 2009 w umyśle czterech programistów już w 2010 roku stała się globalna. Jeśli ktoś jest zainteresowany historią zapraszam tutaj.

Jug Łódź od 2010 roku jest jej częścią. Można nawet powiedzieć że ważną częścią ponieważ Code Retreat w 2011 roku było jednym z pięciu największych na świecie! Dodatkowo z naszej inicjatywy sponsorem w 2011r zostało Headway Software.

Historia GDCR w JUG Łódź wygląda następująco. 

Pierwszy Code Retreat odbył się w Mobice, przyszło około 12-15 osób. Najważniejszą rolę  -facilitatora czyli osoby wymyślającej podjął Piotr Przybylak (wtedy) z Pragmatists.
Rok później miał miejsce fantastyczny Code Retreat, o którym już wpomiałem na wstępie. Do Rule Financial przybyło 60 osób! Faciltatorami byli Paweł Włodarski, Michał Ostruszka i Marek Strejczek.
Można rzec, że Paweł wtedy rozpoczął swoją karierę etatowego facilatotora (czy jest na to jakieś polskie słowo?). 
W kolejnym roku do Pawła dołączyli Grzesiek Borkowski i Rafał Wokacz a wydarzenie zorganizowaliśmy przy udziale łódzkiego oddziału Cybercom Group.
W Cybercom oczekiwaliśmy 30 osób, niestety padliśmy ofiarą stałej Saramaka* i pojawiło się tylko 15 osób.
W tym roku też planowaliśmy 30 osób lecz kolejny raz z zapisanych 30 osób pojawiło się tylko 18 osób.

Jako JUG Łódź staramy się żeby nie kojarzono nas z jedną firmą dlatego też za każdym razem staramy się wybrać innego partnera do Global Code Retreat. W tym roku gospodarzem została firma Symphony Teleca.
Gospodarzem spotkania była Symphony Teleca
Zwyczajowo jest przygotowane śniadanie dla uczestników Code Retreat, którzy w sobotę rano . Kanapki były bardzo smaczne i było ich bardzo dużo (pewnie dlatego że spodziewaliśmy się 30 osób). 

Mnóstwo jedzenia!
Sala konferencyjna była super przygotowana przez sponsora. Była szatnia, aneks kuchenny oraz dużo miejsca.

Po krótkim wprowadzeniu do idei i ćwiczeń Code Retreat, które przeprowadzili Paweł Włodarski, Rafał Leanarczyk i Marek Defeciński, swój slot otrzymał gospodarz/sponsor spotkania czyli firma Symphony Teleca - zainteresowanych zawartością odsyłam do prezentacji.

Kolejnym świetnym zwyczajem Code Retreat jest rozmowa z innymi uczestnikami Code Retreat na świecie. Jest to super sprawa pozwalająca poczuć się częśćią Globalnej społeczności. W tym roku zaplanowane mieliśmy poranną sesję z Bangalore (u nich lunch), z Pragą (na lunch) i Austin na popołudnie (u nich na dzień dobry). Niestety żadna z tych sesji w tym roku się nie udała. Powodem było najprawdopodobniej to że sesje załatwialiśmy na ostatnią chwilę ani nie było wcześniejszej próby połączenia. Z doświadczenia organizacyjnego wiem, że zawsze czas wymyka się z kontroli a organizatorzy mają bardzo dużo na głowie oprócz tych rozmów tak więc ciężko jest doprowadzić do sukcesu tych połączeń.

Paweł Włodarski (JUG Łódź/TomTom) wraz z Jackiem Rondio (Symphony Teleca) pełnili w tym roku rolę facilitatorów. Oto sesje które przygotowali dla uczestników.
  • Sesja wstępna-dowolna
  • TDD i tylko jeden poziom zagłębienia kodu w metodach
  • Jeden poziom zagłębienia, metody maksymalnie 5 linii długości i brak else
  • Sesja "cicha" oraz do wyboru albo object-calisthenics lub not only OOP - wszyscy wybrali to pierwsze ;)
  • Zostawiamy kod z poprzedniej sesji i mamy dodatkowe wymagania
Formuła Code Retreat przewiduje 6 sesji jednak na naszych Code Retreat bardzo rzadko udaje się dopowadzić 6tą sesję do skutku (ludzie wychodzą, czas się kończy) dlatego w tym roku rozmyślnie planowaliśmy tych sesji tylko 5.

Moim zdaniem Code Retreat to wydarzenie, które największe wrażenie robi na uczestniczącym w nim po raz pierwszy. W tym roku z 18 uczestników tylko Sylwia była na Code Retrat po raz kolejny. Opinie jakie zebraliśmy po Code Retreat były na pewno budujące. Ankietę wypełniło 11 osób.

Wszyscy ankietowani odpowiedzieli, że było zdecydowanie warto przyjść

 Mimo kilku niedociągnięć organizacyjnych organizacja była oceniona dobrze.
Organizacja została dobrze oceniona!
Paweł Włodarski jest weteranem Code Retreat's nic dziwnego że zebrał świetne recenzje.
Paweł i Jacek świetnie ocenieni.
Zadaliśmy też inne pytania. Pod spodem najciekawsze odpowiedzi
  • Czego nauczyłeś się w sobotę?
    • Warto słuchac tego co mają inni do powiedzenia
    • ...ping pongiem angażowały się dzięki temu obie osoby
    • TDD też może być fajne
    • tworzenia unit testów
    • zdobyłem podstawową wiedzę na temat pisania testów jednostkowych
    • Nauczyłem się bardziej zwracać uwagę na czystość kodu oraz kilku trików, które tą czystość poprawiają
  • Co Cię najbardziej zaskoczyło?
    • Ze tylu ludziom chciało się wstać w sobotę przed 8 
    • Że było tak fajnie - wcześniej trochę się obawiałem, że będzie za trudno i sobie nie poradzę
    • metoda ping-pong jest bardzo owocna
    • że potrafię pracować w parze
    • organizatorzy z chęcią pomagali i nikt się nie wywyższał
    • największą radość sprawił mi pair programming
    • wyrzucanie kodu może pomagać w uczeniu się.
  • Co będziesz od tej pory robił inaczej w swojej pracy dzięki Code Retreat?
    • lepiej programował
    • zwracał większą uwagę na czystość kodu
    • Propagował TDD ping-pong
    • Test first przede wszystkim
    • przekonać chłopaków w firmie do pair programming
  • Co było fajne i co należy kontynuować?
    • luźna atmosfera bez naciskania na nikogo
    • idea spotkań
    • wspólne omawianie pracy
    • grupka ludzi, która chciała nauczyć się czegoś nowego
    • cenne uwagi
    • nowe podejścia do programowania
    • Retrospektywy
    • Sponsor postawil sie - bylo duzo i smacznie.
  • Co było słabe i co musimy poprawić?
    • żeby osoby bardziej zaawansowane nie poświęcały całej uwagi na pomaganie początkującym
    • timing! * zaczęlismy 9.30, zapowiadane 8.30
    • Ponownie 30% osób nie przyszlo a byli zapisani
    • 45 min to trochę za mało na napisanie znaczącej ilości kodu
    • następnym razem tak bardziej na 9:00.
Podsumowując wydaje mi się że był to znakomity Code Retreat. Wielkie podziękowania dla Pawła Włodarskiego, który był jak zwykle perfekcyjnie przygotowany. Podziękowania dla Rafała Lenarczyka, który prowadził event oraz dla Sponsora firmy Symphomy Teleca za naprawdę gościnne przyjęcie.

Code Retreat doczekał się nawet relacji prasowej w Gazecie Wyborczej pod tytułem Tak się bawią programiści oraz relacji na blogu Pawła Włodarskiego - Ludzka twarz IT.


Friday, September 19, 2014

2014-09-17 Keep things simple with Scalatra





Na ostatnim spotkaniu JUG Łódź dobrze nam znany Michał Ostruszka, opowiedział o Scalatra.
Jest to lekka biblioteka wspomagająca tworzenie serwisów REST-like (ale też klasycznych aplikacji webowych) w oparciu o język Scala.


Scalatra jest używana przez takie firmy jak:
  • BBC
  • Guardian newspaper
  • Box.com
  • SoftwareMill w której Michał pracuje.
Na początku Michał zrobił szybkie porównanie z powszechnie znanymi Struts, Spring MVC oraz Play Framework. Przeznaczeniem Scalatry jest udostepnienie narzędzi pomocnych przy tworzeniu serwisów REST, które udostępniają na przyklad JSON API. Pomimo że Scalatra również wspiera całe aplikacje webowe po dodatkowej konfiguracji, użytkownicy tej biblioteki przeważnie nie potrzebują skomplikowanych kontenerów, wsparcia do części prezentacyjnej aplikacji, wystarczą im narzędzia do konsumowania URL oraz do zbudowania odpowiedzi na żądanie klienta. Wspomniał, że dzieki Scalatra dostaje tylko to co tak naprawde chce, bez dodatkowych "śmieci", które zwiększają czas inicjacji, logują niepotrzebne informacje.
Popieram opinie Michała, również jestm zwolennikiem takiego podejścia.

Michał zrobił szybkie wprowadzenie do Scalatry pokazał nam kilka slajdów na temat biblioteki, po czym jak każdy developer lubi, przeszedl do kodowania.
Bazując na projekcie scalatra-sbt-prototype przedstawił przykład serwisu implementującego najbardziej popularne methody HTTP jak: GET, POST, DELET, PUT.
Był to bardzo prosty serwis umożliwiający listowanie podstawowych informacji o prezenterach występujących na spotkaniach JUG, dodawanie nowych, usuwanie. Taki typowy CRUD.
Serwis uruchamiany był przez SBT na kontenerze Jetty, dzieki czemu nie trzeba było odpalać ciężkiego serwera aplikacji jakim jest jBoss lub WebLogic.

Scalatra ma wiele przydatnych componentów, dzieki którym kod parsujący parametry HTTP oraz zwracający odpowiedz do klienta może być bardzo czytelny i zajmowac dosłownie kilka linijek.
Scalatra wspiera parsowanie pojedynczego parametru np.: /:id, /talk?id=:id
oraz wielokrotnych parametrów np.:/talk?id=1&id=2,id=3 (multiParams).
Bardzo ciekawym rozwiązaniem jest wbudowany "halt", który służy do zatrzymania wykonywania sie kodu w przypadku błędu i następnie zwrócenia zdefiniowanej odpowiedzi do klienta. Przykładowy błąd: braku spodziewanego parametru.
Dodatkowo twórcy biblioteki opakowali większość popularnych Response
Code w ActionResult np.: 200, 206, 404, dzieki czemu developer nie musi implementować
i dostaje gotowe rozwiązania do użycia.

Testując działający serwis, Michał używał postman - rozszerzenie do przeglądarki Chrome, restowy client wysyłający żądania HTTP bazując na wspomnianych wczesniej metodach.

Ciekawe uwagi od Michała:

  • scalatra wykonuje dopasowanie URL od dołu - jeśli serwis wspiera kilka URI np.:
    1. /talk/test
    2. /talk/:id
    i w takiej kolejności są zdefiniowane w klasie, wowczas URI /talk/test zostanie skonsumowany przez 2 definicje




  • używanie filtrów, zamiast serwletów - jeżeli serwlet zostanie wybrany do obslugi URL i nie znajdzie odpowiedniej deklaracji to zglosi błąd, filter natomiast jeżeli nie znajdzie to URL jest przekazywany do nastepnego i nastepny może być tym odpowiednim do obslugi tego URL

Przydatne wspomniane narzędzia:

Podsumowanie:


Z powodu braku terminu w 6 dzielnicy oraz w DMCS, JUG odbył sie w zupelnie nowej lokalizacji niż dotychczas PREXER. Sala była przygotowana, dobrze wyswietlający rzutnik, szkolne krzeselka, wszystko OK. Niestety przejeżdzające tramwaje na ulicy Pomorskiej zagłuszały nam prezentera.
To miejsce w przyszłości bedziemy traktowali jako backup. Niestety było bardzo mało uczestników tylko 13 osób, mam nadzieje, że tak słaba frekwencja była wynikiem zmian lokalizacji.

Podczas tego spotkania Marcin wygrał licencję MyEclipse.

Podsumowując prezentacja bardzo fajna, treściwa, scalatra jest ciekawą biblioteką.

Co dalej:


25 wrzesnia o godzinie 18 na DMCS, Sławomir Kłąb z Rule Financial opowie nam o JavaFX.
Już teraz zapraszam Was na kolejne spotkanie.

Sunday, September 7, 2014

2014-09-03 Firmao - czyli od startupu do produktu komercyjnego - recenzja

3 września w 6 dzielnicy mieliśmy okazję gościć Rafała Namiecińskiego. Współzałożyciela "Firmao".


Czym jest Firmao?
Jest to kompleksowy CMS/CRM w wersji przeglądarkowej, z bardzo rozbudowanymi opcjami konfiguracyjnymi pod indywidualne potrzeby danego klienta czy firmy

Prelekcja pomimo głównie aspektów biznesowych, miała całkiem dobrą publikę i padało wiele ciekawych pytań.
Zainteresowanych ciekawiło w jakich technologiach jest stworzone Firmao i chyba się nie zawiedli, bo padały
Java, Spring, Hibernate, Angular itp a także inne

Rafał przybliżył nam tajniki i udzielał dobrych rad odnośnie startupu, na czym się skupić a co sobie odpuścić i określił to powiedzeniem :

"Do what you do the best, outsource the rest".

Firmao swoją działalność zaczęło od dofinansowania z UE, gdzie jak podkreślał prowadzący nie warto pukać po pieniążki gdyż cała procedura i papierkologia oraz decyzja "czy projekt jest innowacyjny czy nie" podejmuje osoba, która kompletnie się może na tym nie znać.
Wracając do sedna sprawy, Rafał zdradził nam też kilka kruczków odnośnie składowania danych, a także bardzo sprytny patent na tanie międzynarodowe rozmowy telefoniczne do firmy.
Wystarczy mieć swoją centralkę oraz telefony VOIP i odpowiednio to skonfigurować. Klient np z Niemiec dzwoni na infolinię Firmao na numer, który wydaje się być numerem z Hamburga, a w rzeczywistości dzwoni do "serwera"

Sukces Firmao jak określił Rafał jest wynikiem wsłuchiwania się w potrzeby i uwagi klientów (schemat japońskiego koła jakośći i filozofia Kaizen), a także nie dawanie wszystkich dostępnych fajerwerków klientowi od razu, gdyż się wystraszy i pogubi.

Czym wyróżnia się Firmao na tle innych tego typu usług?

Przede wszystkim ceny są przystępne, szeroki wachlarz opcji, konfiguracji, oraz niezawodność (serwery Amazon) + bardzo dobry support (multilanguage: polski, angielski, niemiecki), który w ciągu kliku minut od założenia konta dzwoni do klienta, a także pomaga skonfigurować całość pod swoje potrzeby.

Firmao ma się dobrze, świadczy o tym liczba ponad 15000 zadowolonych klientów z Polski, Niemiec, Kanady i wielu innych krajów.

Padło pytanie o kilka dobrych rad dla planujących swój biznes udzielił bardzo cennych wskazówek np:

- skupianie się na głównych zadaniach i celach firmy (resztę jeżeli to wymaga zbyt dużych nakładów czasu i pieniędzy zlecić firmom zewnętrznym)

- szukanie środków finansowych u osób i firm, których projekt/pomysł może zaciekawić, niż liczyć na decyzję o przyznaniu dofinansowania ze środków z UE

- przede wszystkim - biznes wymaga poświęceń, a dokładniej rzecz biorąc, poświęcanie masy czasu na rozwój własnego biznesu.


Dziękujemy bardzo Rafałowi Namiecińskiemu za poświęcony czas i ciekawą prezentację oraz bardzo cenne wskazówki jak rozkręcić swój własny biznes w branży usług IT.

Wednesday, July 23, 2014

2014-06-26 Clean Code Episode 14, Solid Case Study

Po 5 epizodach poruszających kolejne zasady SOLID przyszła kolej na podsumowanie. Poniżej zestawienie zasad z linkami do relacji:
  1. Single responsibility principle
  2. Open/closed principle
  3. Liskov substitution principle
  4. Interface segregation principle
  5. Dependency inversion principle 
Odcinek sponsorowała firma Seamless, której przedstawiciel - Radek Kozłowski - na początku spotkania przedstawił obszar działalności firmy.
Radek Kozłowski o Seamless. Co robi u nich wujek Bob?!

W podusmowaniu wujek Bob zajmuje się projektem systemu płacowego z epizodu 7. Na podstawie wymagań klienta sporządzono zestaw use case'ów oraz struktur danych opisywanych za pomocą słownika danych (data dictionary). Dodatkowo zidentyfikował 3 aktorów. Na początku designu zajął się modelem use casów z punktu widzenia architektury wysoko poziomowej. Cały proces dość ciężko opisać bez kawałka kodu albo paru rysunków, więc zrobię to minimalistycznie, żeby czasu waszego nie tracić. Celem tego procesu było wydzielenie modułów o pojedynczej odpowiedzialności - SRP. Zasada OCP została zachowana dzięki wydzieleniu interfejsów fabrykujących, dzięki czemu kontrolery nie zależały od konkretnych implementacji use case'ów czy też typów żądań. Zasadę LSP zaprezentował na podstawie potrzeby użycia konkretnego typu, kiedy mamy wiedzę tylko o typie nadrzędnym. W tym wypadku zastosował rzutowanie, zamiast zaśmiecania interfejsu klasy nadrzędnej. ISP zostało przedstawione na przykładzie wcześniej wspomnianych interfejsów fabrykujących, które posiadały metody dla każdego z typów obiektu tworzonego. Sytuację naprawiona dwoma alternatywnymi rozwiązaniami. Pierwsze polega na rozdzieleniu interfejsów a następnie użyciu mniejszych, wymaganych dla danego kontrolera. Drugie rozwiązanie - bardziej dynamiczne - zakłada użycie stringów w celu rozróżnienia na ich podstawie typu potrzebnego obiektu. Zastosowanie DIP wujek pokazał na przykładzie jednego z use case'ów.


SOLID crew of Łódź JUG
Na końcu znalazła się polemika z podcastem 38 na stacku (dostępny tutaj), podczas której wujek Bob wskazuje, że zasady SOLID są jedynie drogowskazem. Często trzeba jakąś złamać, ale należy robić to świadomie. Jest to kolejny sygnał, że zasady są dla ludzi - dobrze je znać, żeby można je było z satysfakcją łamać;)

Na koniec prezentacja małego ficzera na DMCSie - ten dach naprawdę działa!

Schron przeciwatomowy?

Co dalej?

Obecnie organizujemy letnie, luźniejsze JUGi przy piwku. Niebawem pojawi się dokładniejsze info na portalach społecznościowych. Jeśli macie pomysł na prelekcje piszcie na juglodz@gmail.com.

Mobilization

 18 października organizujemy już 4 edycję Mobilization - konferencję skupioną wokół urządzeń mobilnych. Wszystkich zainteresowanych wystąpieniami zapraszamy na call 4 papers. Potrzebujemy również łapek do pomocy (kontakt juglodz@gmail.com). Jest to świetna okazja do poznania wartościowych ludzi oraz firm chętnie przyjmujących programistów.  



PS. Dzięki Pawłowi Włodarskiemu za zdjęcia.



Wednesday, July 9, 2014

2014-06-09 - 33rd Degree - recenzja

Dzięki JUGowi dostałem darmową wejściówkę na 33rdDegree. Kilka słów o tym jak było. Całe wydarzenie miało miejsce w multikinie w Krakowie. Miejsce wydarzenia było dobre: dużo miejsca w salach i na korytarzach. Dodatkowo przed kinem został ustawiony specjalny namiot gdzie można było spędzać czas pomiędzy talkami. Prezentacji było mnóstwo wszelakiego rodzaju, każdy oprócz programisty c++ znalazłby coś dla siebie – było nie tylko o javie ale i o javascripcie, sqlu czy objective-c (tego ostatniego unikałem jak ognia). Była też to prawdopodobnie pierwsza konferencja, jak chwalili się organizatorzy, w której można było posłuchać o Swiftcie. Na konferencji często był poruszany temat programowania reaktywnego i funkcyjnego, wyraźnie jest to nowy trend. Ciesze się z tego powodu ponieważ jestem bardzo tymi tematami zainteresowany, tym bardziej, że będę pisał pracę inżynierską na ten temat.

Kilka ciekawszych prezentacji:

Mary Poppendieck - Think For Yourself
Początkowo myślałem, że będzie to kolejna nudna abstrakcyjna prezentacja z serii "jak być lepszym developerem". O ile nie pomyliłem się z tematem, to na pewno nie była nudna. Prezentacja była na temat odpowiedzialności developerów za to, co robią. Nie powinniśmy ślepo podążać za sztywnymi wymogami, tylko pomyśleć czego tak naprawdę oczekuje klient i jak możemy stworzyć produkt który mu się spodoba. Prezentacja była dobrze zrobiona a prelegent mówił ciekawie i sprawiał wrażenie kompetentnego.

Ted Neward - Managers are from Mars, Developers are from Venus
Jak tytuł wskazuje, odwieczny konflikt developera i managera. Prelegent opisuje problemy występujące pomiędzy tymi dwoma gatunkami – jak powstają i jak można im przeciwdziałać. Prezentacja miała w sobie dużo humoru, dzięki czemu była ciekawa. Szczególnie zapadła mi w pamięć historia projektu PoC która bardzo się zarządowi spodobała i weszła do produkcji.

Kito Mann - JavaScript, the Assembly Language of the Web
Prezentacja która mnie bardzo ciekawiła. To interesujące, jak javascript, język wysokopoziomowy i dynamiczny stał się „assemblerem” internetu. Na prezentacji dużo było o kompilatorach, które kompilują inne języki do Javascriptu. Okazuje się, że większość znanych nam języków posiada jakąś bibliotekę lub mechanizm który pozwala na kompilowanie go do javascriptu. Z drugiej strony mamy języki pod to dedykowane: Dart, TypeScript (podobno Microsoft zrobił w końcu coś dobrze) i znany z prezentacji o Playu CoffeScript.

Maciej Bendkowski - Eclipse Orion - New and Noteworthy
Prezentacja o dość ciekawym produkcie – Eclipse Orion. Jest to IDE przeglądarkowe. Nie musimy niczego instalować, odpalamy przeglądarkę, gdziekolwiek i na czymkolwiek i możemy programować. Nasze ustawienia i kod trzymane są na serwerze.

Małgorzata Janczarska - JavaScript Bloopers – most common developers’ mistakes
Bardzo fajna prezentacja o problemach javascriptu. Z jednej strony, język prosty łatwy do nauki. Z drugiej strony, często zachowuje się w sposób bardzo ciężki do przewidzenia, początkujący developerzy mogą spędzić długie godziny na debugowaniu. Prelegent omawiał różne pułapki jakie zastawia na nas język i które mogą zaskoczyć nawet doświadczonych programistów.


Wyjazd bardzo udany, zwiedziłem też trochę Kraków. Jeśli za rok znów wygram wejściówkę to na pewno pojadę :)

Thursday, June 19, 2014

2014-06-12 Clean Code Episode 13, The Dependency Inversion Principle

Za nami kolejna z zasad SOLID - zasada odwracania zależności. To już ostatnia zasada z tej grupy, ale obiecujemy, że to nie koniec spotkań z wujkiem Bobem!
  1. Single responsibility principle
  2. Open/closed principle
  3. Liskov substitution principle
  4. Interface segregation principle
  5. Dependency inversion principle
Pogłębienie naszej wiedzy było możliwe dzięki firmie Transition Technologies, która sponsorowała odcinek. Na początku Rafał zaprezentował firmę - krótko, za to treściwie.

Wujek Bob wrócił wspomnieniami do końca lat 70 XX wieku - czasu kiedy wpadł na pomysł odwrócenia zależności. Była to epoka procesorów 8085 z 32kB RAM-u i 32kB ROM-u. Wyobrażacie to sobie?!
Wujek bob nawet to pamięta


O co chodzi z tym odwracaniem? 
Żeby to zrozumieć przyda nam się jakiś trywialny (i dość mierny) przykład - DI(los). Odwróciliśmy sobie SOLID i powstało coś w miarę sensownego - Dependency Inversion los, który nas w tym odcinku interesuje najbardziej. Tak to już jest, że czasami warto na coś spojrzeć z drugiej strony. Wiele technik i praktyk powstało dzięki takiemu założeniu (np. TDD) i podobnie jest z DI. Zejdźmy trochę głębiej w rozważaniach. Wujek wyróżnił 2 rodzaje zależności: run time oraz compile time. Zasada DI dotyczy tej drugiej - zależności czasu kompilacji.

Cash baby, cash...
W językach statycznie typowanych (takich jak Java, C#, C, C++) koszt zależności kodu źródłowego (typu compile time) jest znaczny. Kompilator musi poznać szczegóły modułów, do których się odnosimy za pomocą nazw w kodzie. Często w takim wypadku musi skompilować powtórnie wszystkie moduły zależne. Kiedyś kompilacja systemu mogła trwać nawet godziny. Dzisiaj w zasadzie moglibyśmy stwierdzić, że to nie problem - w końcu kompilatory czy to Javy czy C# są już naprawdę sprawne. Jednak ciągle czas kompilacji dużego systemu może być denerwujący - nawet jeśli trwa tylko pół minuty. Co innego jeśli weźmiemy na stół wdrożenie. Załóżmy, że zmiana w jednej klasie powoduje konieczność przebudowy wielu modułów, wtedy wszystkie musimy zdeployować - chore! Moim zdaniem jednak znacznie gorsze są utrudnienia z samym developowaniem. Załóżmy, że nad systemem pracuje większy zespół podzielony w celu rozwoju różnych komponentów. Jeśli zmiany jednego zespołu powodują konieczność kompilacji innego zespołu to mamy do czynienia z efektem opisywanym krótko - aczkolwiek zacnie - przez Pawła Włodarskiego - syf i zniszczenie.

Odwracamy...
Warto wiedzieć co jest podstawą do idei odwracania zależności. Wujek Bob wskazuje na projektowanie strukturalne (metoda top-down). Sposób zakłada rozpoczęcie dekompozycji problemu od głównej funkcji - main. Następnie projektuje się podprogramy, które mają być wywoływane przez main w celu realizacji pod-zadania. Podobnie każdy podprogram zostaje podzielony na jeszcze mniejsze podprogramy itd, aż zaprojektujemy wszystkie podprogramy konieczne do realizacji celu. Mając taki projekcik możemy zacząć pisać kod (yeah:D). Problem z tym podejściem jest taki, że zależności czasu kompilacji są dokładnie takie same jak czasu wykonania (w trakcie kompilacji wiemy, które kawałki kodu możemy wołać i potrzebujemy znać szczegóły ich implementacji).

Projektowanie strukturalne (top-down)
Wysoko-poziomowe moduły, np modelujące przypadki użycia, zależą od niżej poziomowych - szczegółów. Tego chcemy uniknąć, a z pomocą przychodzi polimorfizm. Weźmy moduł A, który woła metodę m z modułu B. Pierwotnie wygląda to mniej więcej tak:

No dobra, ale gdzie ten polimorfizm? Pomysł polega na wprowadzeniu punktu pośredniego w postaci interfejsu, który zostanie zdefiniowany w module A. Moduł A wiedziałby wtedy tylko o interfejsie i mógłby działać bez wiedzy o module B. Gadanie gadaniem, ale czas na obrazek:


Prosty zabieg, ale otrzymujemy bardzo ważną cechę. Abstrakcje w tym podejściu nie zależą od szczegółów - to szczegóły zależą od abstrakcji. Zależności czasu wykonania (A woła B) są w tym momencie w przeciwnym kierunku niż zależności czasu kompilacji (B zależy od interfejsu z A). I to ostatnie zdanie zawiera magiczne odwrócenie zależności. W drugiej części odcinka wujek Bob opowiedział jeszcze o tym jak budowali framework i jaką w nim rolę miało o DI oraz zaprezentował 2 proste przykłady.

Publika się obudziła - w końcu dostaliśmy jakiegoś koda...



SOLID by example: Flash talk Łukasza Strobina

Po zmęczonym już nieco wujku Bobie przyszedł czas na Łukasza Strobina z Transition Technologies, który zaprezentował zasady SOLID w przykładach z kodem. Dla każdej z zasad Łukasz wskazał kod naruszający jej zasady oraz rozwiązanie. W trakcie nawiązała się fajna dyskusja, padło kilka ciekawych stwierdzeń. Jedno wydaje mi się bardzo celne, że najważniejszy jest zdrowy rozsądek, czyli narzędzie, które pozwala świadomie łamać zasady.

Już za tydzień, 26 czerwca, kolejne spotkanie z Robertem Martinem dzięki firmie Seamless. Na ostatnim przed wakacjami spotkaniu wujek zaprezentuje case study zasad SOLID. Więcej o spotkaniu na meetupie. Zapraszamy, będzie jazdaaa.

PS. Dzięki za Pawłowi Włodarskiemu za zdjęcia.

Wednesday, June 11, 2014

2014-05-06 Pisanie i testowanie programów pod kątem integralności danych

Na ostatnim spotkaniu JUG Łódź Marek Strejczek z firmy Rule Financial wprowadził nas w ważny świat integralności danych. Prostymi przykładami oraz przystępnym wstępem teoretycznym przedstawił co to znaczy integralność danych, kiedy potrzebujemy takiej integralności i jakie są sposoby by ją osiągnąć.

Przypomnieliśmy sobie co znaczy ACID, oraz jak działają transakcje. Marek przedstawił też model BASE, który rozwinąć można do Basic Availability, Soft-state, Eventual consistency. Dowiedzieliśmy się jak do integralności danych podchodzą banki na przykładzie bankomatu a jak podchodzi Amazon na przykładzie kupowania książek.

Na spotkaniu nie obyło się bez działającego przykładu. Marek przedstawił nam prosty system zbudowany w oparciu o kilka interesujących technologii:

  • Active MQ
  • MySQL
  • JBoss
  • JBehave
  • Apache Camel

System składał się z dwóch kolejek, serwisu oraz bazy danych. Serwis miał na celu pobranie danych z kolejki wejściowej, umieszczenie danych w bazie danych a potem wrzucenie odpowiedzi na kolejkę wyjściową.

Za pomocą narzędzia Byteman Marek doprowadził do błędów w działającym systemie przez co została uszkodzona integralność danych w przykładowej bazie. Zaprezentowane zostały specjalne historyjki BDD napisane w JBehave sprawdzające reakcję systemu na wypadek porażki jak i sukcesu.

Na koniec prezentacji rozmawialiśmy o Shared Resource Pattern i jakie problemy rozwiązuje.

Jako, że było to pierwsze spotkanie w miesiącu, rozlosowaliśmy jedną licencję na jeden z produktów JetBrains. Na najbliższym spotkaniu JUG Łódź będziemy mieli okazję posłuchać wujka Boba na temat Dependancy Injection.

Jeżeli jesteście zainteresowani koniecznie zarejestrujcie się na spotkanie na naszym JUG-owym meetupie. Link do meetup-a:

http://www.meetup.com/Java-User-Group-Lodz/events/184627302/

Do zobaczenia na spotkaniu.

Monday, June 2, 2014

2014-05-29 - Vaadin on tour - przystanek Łódź

W czwartek 29.05.2014 mieliśmy zaszczyt gościć Macieja Przepiórę z firmy Vaadin, który nam przybliżył nieco tajniki tego frameworka.

Vaadin - w języku fińskim oznacza samicę łosia (klępa), stąd charakterystyczny znaczek }> mający kojarzyć się z łosiem, będący jednocześnie logiem Vaadina.

Wracając do rzeczywistości, sam Vaadin jest przeznaczony do aplikacji typu Rich Client / Fat Client oraz tak zwanych single page application z wykorzystaniem wzorca projektowego MVP (Model-View-Presenter).
Vaadin sam w sobie nie nadaje się na typową "stronę" html. Vaadin jest frameworkiem do pisania aplikacji internetowych.
Prowadzący podkreślał, że Vaadin ma masę widgetów, kontrolek które wyróżniają go z tłumu (ponad 400) i tylko wyobraźnia programisty co chce osiągnąć przy użyciu kontrolek jest jego ograniczeniem (Sky is the limit....)

Vaadin jest aplikacją podobną w działaniu do GWT, lecz jak przekonywał autor prelekcji nie jest tak do końca.
Otóż w GWT mamy różne części kodu
- serwer - wykonywany na serwerze,
- shared - współdzielony między klientem a serwerem
- client - wykonywany po stronie klienta

    Natomiast Vaadin ma kod serwerowy, którego klient to de facto kod Javy kompilowany do JavaScriptu, a następnie kompresowany i wykonywany przez przeglądarkę.
    Co jest dodatkowym plusem Vaadina kod serwerowy jest napisany w dowolnym języku opartym na JVM (Java,Scala, Groovy). Warte podkreślenia jest to, że całość wykonywanego kodu odbywa się po stronie serwera.

    Bardzo ciekawie wygląda prezentacja i objaśnianie "jak to działa" - po stronie serwera cały nasz kod to są komponenty, natomiast to co prezentowane jest po stronie klienta - to widgety. Gdy zechcemy zrobić jakiś widget niekonwencjonalny, wtedy musimy rozszerzyć klasę Widget z GWT, dość ciekawie Maciek zaprezentował temat działania aplikacji na load balancerach i dużym obciążeniu oraz podał przykładowo ile aktywnych sesji jest w stanie obsłużyć Vaadin bez wyraźnego spowolnienia.

    Podczas prelekcji prowadzący był bombardowany pytaniami z publiczności i wyjaśnianiem "how to", oraz porównań i analogii do GWT.
    Ogólnie poziom merytoryczny prelekcji był bardzo wysoki o czym może świadczyć interakcja na linii publika - prowadzący oraz bardzo duża frekwencja (71 osób - bardzo dziękujemy !!!) a także czas prezentacji (2 godziny !!)
    Chyba najlepsza frekwencja na JUGu!


    Saturday, May 24, 2014

    2014-05-22 - Flash Talki - pierwsze starcie



    Usain Bolt będzie w sierpnu w Warszawie na mitingu Kamili Skolimowskiej, my mamy swoich reprezentantów sprintu w kategorii prelekcji. Pierwsza odsłona Flash Talków - krótkich, wręcz sprinterskich prelekcji (20 minutowych wystąpień) za nami. Skrócona forma pozwala na jednym spotkaniu poznać większą liczbę tematów w pigułce.

     

     

    Krzysztof Telka - Nauka jako proces ciągłej ewolucji programisty

    Pierwszym prelegentem był Krzysztof Telka z firmy Cybercom, który zaprezentował temat Nauka - jako proces ciągłej ewolucji programisty. Prezentacja miała charakter motywacyjny. Krzysiek bazował na modelu kompetencji wg. Dreyfusa, który wyróżnia poniższe stopnie kompetencji:
    1.  Nowicjusz - skupiony na szybkim ukończenia zadania, potrzebuje dokładnych wskazówek i reguł.
    2. Zaawansowany nowicjusz - formułuje proste zasady, ciągle potrzebuje szybkich wskazówek, brak całościowego obrazu problemu.
    3. Kompetentny - nastawiony na cel, samodzielnie składa kroki, posiada zwykle jeden pomysł na rozwiązanie danego problemu.
    4. Profesjonalista - biegły, rozumie celu zależnie od kontekstu, zauważa analogie
    5. Ekspert - myśli inter-dyscyplinarnie, syntezuje pojęcia na wyższym poziomie abstrakcji, stosuje metafory, podejmuje decyzje intuicyjnie
    Następnie prelegent zachęcał nas do zadania sobie pytania na jakim etapie kompetencji jesteśmy i pokazał w jaki sposób możemy kontrolować nasz proces uczenia się - rozwijania. Zaprezentował  pasję w tym co robi i dzięki mu za to. Jeśli ktoś zapomniał o potrzebie rozwoju to po tej prelekcji z pewnością wrócił na dobry tor. Prezentacja Krzyśka dostępna tutaj.

    Więcej o modelu kompetencji możemy zobaczyć w prelekcji guru od aspektów miękkich w IT Sławka Sobótki z firmy Bottega - film, slajdy oraz artykuł dla SDJ.


    Łukasz Lisowski - ZABBIX


    Druga prelekcja Łukasza Lisowskiego o ZABBIXie odnosiła się poniekąd do wcześniejszej prelekcji Mariusza Panka z firmy TomTom - Javamelody - co mi w Javie gra!. Odniesienie polegało na zaprezentowaniu narzędzia alternatywnego dla JavaMelody. Łukasz już na wstępie zaznaczył różnicę między tymi narzędziami. JavaMelody potrzebuje konfiguracji bezpośrednio w trakcie implementacji aplikacji (trzeba dodać jakoś liby JavaMelody w kodzie), tymczasem ZABBIX może działać z dowolną zdeployowaną już apką, czyli może pomóc tam gdzie nie mamy czasu bądź możliwości wpiąć dodatkową bibliotekę. ZABBIX umożliwia korzystanie z wbudowanego w JVM  JMXa (Java Management Extensions). Dzięki takiemu rozwiązaniu może korzystać z dowolnych liczników wystawionych przez tego magicznego JMXa:). I tu bym się chętnie popisał jakąś wiedzą, której nie posiadam, więc pozostawię ten temat w błogiej ciszy albo zadam pytanie: komu dzisiaj kibicujecie? - Ja jestem za Madrytem!


    Paweł Michalski - Eclipse tips & tricks

    Paweł Michalski z firmy TomTom zademonstrował jak ważne w naszym rzemiośle programisty są narzędzia i ich znajomość. Na wstępie zademonstrował akcje podczas zapisywania, które mogą być przydatne i powinny być wspólne dla całego zespołu. W celu konfiguracji idziemy do preferencji i wyszukujemy "save actions". Paweł korzysta z formatera podczas zapisu oraz dodatkowych poleceń, które można modyfikować. Dobrze, żeby te ustawienia były wspólne dla całego zespołu, wtedy unikniemy problemów ze zmianami jedynie formatowania w repo.

    Następnie pokazał możliwości konfiguracyjne błędów oraz ostrzeżeń, które pomagają za wczasu wykryć błąd lub problem w kodzie. Konfigurację możemy przeprowadzić w Preferences a następnie korzystając z wyszukiwarki wpisać "warnings" i dla wybranego języka programowania możemy zmodyfikować domyślne zachowanie. Dla przykładu eclipse doskonale wie, że przypisanie boola w środku ifa to zwykle błąd i nie robi nic tylko po cichu się z nas nabija. Nie wiem jak wy, ale ja spędziłem na takim błędzie któryś wieczór. Warto więc spojrzeć na listę - w przypadku Javy jest ona dość rozbudowana.


    Paweł pokazał kolejną fajną funkcjonalność - quick diff w edytorze sprzęgnięty z ostatnią wersją z SVNa. Wyszukujemy frazy "quick diff", konfigurujemy jak na screenie poniżej i delektujemy się diffem w edytorze.

     
    Następnie to co na wszyscy czekają, czyli magiczne skróty klawiszowe. Jako leniwy programista nie lubię wykonywać czynności, które mogłyby się same wykonać (a ja będę mieć więcej czasu na wybór piwnego repertuaru na wieczór). Tak więc jeśli jeszcze nie znacie, to musicie spróbować:
    • ALT + SHIFT + ↑ (lub ↓) - WOW, po prostu spróbuj w edytorze, np. będąc w środku nazwy zmiennej ;)
    • CTRL + O - outline z wyszukiwarką bez użycia myszki
    • ALT + ← (lub →) - następne/poprzednie miejsce w którym byliśmy
    • CTRL + SHIFT + P - idź do odpowiadającej klamry (trzeba się ustawić za klamrą początkową lub przed kończącą
    • i inne których nie zanotowałem lub nie pamiętam ;)

    Na koniec wspomnę o losowaniu nagrody. Ebooka od Manninga wygrał Jarek - dziękujemy wydawnictwu manning.com za sponsorowanie nagrody oraz prelegentom za poświęcony czas i chęci.



    Friday, May 16, 2014

    2014-05-15 Arduino... 1,2,3 Start

    Choć JUG ma w swojej nazwie Javę, nie znaczy to, że osoby przychodzące na spotkania ukierunkowane są tylko na ten jeden język programowania. Świadczyć może o tym choćby całkiem nienaganna frekwencja na ostatnim wykładzie, który poświęcony był Arduino. Hmm, Arduino... a co to właściwie jest? Na to i inne pytania odpowiadał nam prowadzący, Rafał Wokacz z Cybercom.

    Hackathon na MCE - robot podążający za światłem

    Arduino to otwarta platforma sprzętowa, tak zwana „płytka” zawierająca mikrokontroler (procesor) oraz sporą ilość gniazd wejścia/wyjścia, za pomocą których można podłączyć ją do innych urządzeń peryferyjnych. W skrócie, jest to miniaturowy komputer (dosłownie - ma wymiary ok. 7 na 5 cm). Pewno zastanawiasz się po co komu coś takiego? Przecież większość z nas ma lśniące i coraz wydajniejsze laptopy. Czytaj dalej, za moment wszystko stanie się jasne :)

    Arduino jest tak naprawdę nazwą całej rodziny urządzeń, z których podstawowym modelem jest Arduino Uno, o dość skromnych parametrach: częstotliwość taktowania procesora 16 MHz i pamięć 2 KB SRAM nie robią już dziś wrażenia, jest wręcz trudno wyobrazić sobie tak małe wartości! Nie to jednak decyduje o sile tego urządzenia. A więc co?

    Jest to przede wszystkim produkt adresowany do ludzi kreatywnych, lubiących eksperymentować i majsterkować. Niekoniecznie potrzebna jest tu wiedza z elektroniki. Arduino zaprojektowane jest tak by można było je łatwo łączyć z innymi elementami, sensorami, silnikami i diodami. Dedykowane układy (tzw. shields) pozwolą dodać do bazowego Uno peryferia takie jak bluetooth, wi-fi, ekrany LCD, i kto wie co jeszcze. Na prezentacji przedstawione zostały różne przykłady zastosowań, od mrugania diodkami LED, po sterowanie silnikami, roboty podążające za źródłem światła, balansujące, zdalnie sterowane (także z funkcją koszenia trawy). Na tej długiej liście znalazła się też zautomatyzowana plansza do zdalnej gry w szachy, atrapa R2D2 z Gwiezdnych Wojen, oraz „inteligentna” koszulka z wszytym (sic: wszytym nićmi) Arduino LilyPad. Szczerze mówiąc w takim portfolio projektów aż wstyd wspominać o tak prostackich zastosowaniach jak zdalne otwieranie garażu. A Ty, jaki masz pomysł?

    Zdalnie sterowana kosiarka

    Co lepsze, lista zalet Arduino nie kończy się na tym. Olbrzymim plusem jest fakt otwartości platformy. Na stronie projektu znajdziemy wszystko od SDK po dokumentację i schematy według których można zbudować własną płytkę od podstaw. Walory edukacyjne są nie do podważenia, każdy znajdzie tu coś dla siebie, zależnie od poziomu zaawansowania i obszaru zainteresowań (od prostego software'u po hardware). W dalszej części wykładu przyjrzeliśmy się bliżej narzędziom, tj. Arduino IDE, które umożliwia nam pisanie kodu i uruchomienie go na mikrokontrolerze. Poza bazowym edytorem dostępne są też inne, zależnie od platformy, m.in. pluginy do popularnych środowisk jak Eclipse, Xcode, Visual Studio. Razem z IDE dostajemy kompilator oraz biblioteki Arduino, które pozwalają bardzo łatwo obsłużyć piny wej/wyj oraz skonfigurować je np. do obsługi połączenia szeregowego. Wszystko to robi się praktycznie kilkoma linijkami kodu (C/C++), co na pewno zachęca do próbowania nowych (szalonych?) pomysłów.

    Ostatnim smaczkiem prezentacji było live-demo zdalnie sterowanego robota zbudowanego przez Rafała. Nasz mały dwukołowy przyjaciel składał się z Arduino Uno, silniczków, modułu bluetooth, paru dodatkowych elementów i zasilany był bateryjką 9V. Kontrolerem był smartfon z lekko skastomizowaną aplikacją na Androida. Trzeba przyznać, że zaostrzyło to mój apetyt na warsztaty Robothon organizowane przez Cybercom w najbliższą sobotę :)

    Jak zwykle na spotkaniu wylosowaliśmy też jedną licencję na produkt firmy JetBrains.

    Duża frekwencja mimo Geecona - wiele nowych twarzy

    Wednesday, May 14, 2014

    Clean Coders Episode 12 - The Interface Segregation Principle

    Nieuchronnie zbliżamy się do końca omawiania zasad SOLID, albowiem za nami już czwarty odcinek tym razem o zasadzie segregacji interfejsów.

    1. Single responsibility principle
    2. Open/closed principle
    3. Liskov substitution principle
    4. Interface segregation principle
    5. Dependency inversion principle
    Dobra frekwencja jak na Wujka Boba - 30 osób



    Sponsorem tego odcinka była firma Samsung, która przedstawiła 4 oferty pracy w Łodzi. Polityka firmy nie pozwoliła na podanie widełek płacowych.
    Prezentacja firmy Samsung

    Co ciekawego w odcinku?

    Nie obyło się bez przebierania. Tym razem wujek Bob wystąpił w roli sensei, w swoim dojo. Przedstawił nam projekt systemu obsługującego bankomat i pokazał co dzieje się gdy klasa "wie" za dużo. Co to znaczy wie za dużo? Chodziło głównie o zależności jakie mamy w projekcie, nie obyło się więc bez wspomnień i cofneliśmy się do czasów C. Jedna klasa, wykorzystywana w nieomalże wszystkich elementach systemu była często zmieniana przez co podczas kompilacji przebudowywany był cały projekt, a to trwało wieki.

    Na przykładzie bankomatu wujek pokazał nam jak ciężko jest niedopuścić do opisanego wyżej stanu. Oraz, że często w pogoni za doprowadzeniem do zgodności z jedną z zasad SOLID możemy złamać inną (w przykładzie
    była to open/close principle).
    Wujek Bob zza krzaka
    Co zrobić aby obejrzeć następny odcinek:

    - najważniejsze to przyjść na spotkanie JUG Łódź
    - przekonać swoją firmę do zasponsorowania kolejnego odcinka (60USD) - szczegóły juglodz@gmail.com
    - zarejestrować się na naszym meetupie

    Monday, May 12, 2014

    Łubudubu - wybory i przyszłość

    Poniżej relacja z prezentacji o przeszłości i przyszłości łódzkiego JUGa, którą zrobił niedawno Marek znany w półświadku łódzkiej javy jako prezes.

    Przyszłość, przeszłość i teraźniejszość

    Dawno dawno temu w 2011 padło postanowienie - głównie za sprawą Marka i Mariusza - by zrobić w naszym przepięknym mieście taką zajebistą konferencję IT coby ludziom gały wyszły i aby wszystkie kwestie papierkowe były w porządku przydałoby się stowarzyszenie. Na spotkanie przyszło chyba około 40 osób z czego część widziałem chyba po raz pierwszy i ostatni w życiu.

    Od tego czasu udało się zrobić 3 edycje Mobilizacji i na karmić przy pomocy grochówki setki programistów.

    W tym roku jest plan aby zorganizować 4 edycję mobilizacji ale potrzebna jest świeża krew do pomocy, także jak ktoś z was jest chętny i chciałby dodać trochę kolorów do szarej codzienności życia w Łodzi to niech śmiało się kontaktuje z zarządem, JUGiem, ze mną lub kimkolwiek.

    Też fajnie jest jak ktoś pomaga w ogarnianiu społecznościówek czy tam przesyłaniu dalej wiadomości na fejsie.

    Każdy występek i dobry uczynek będą zanotowane w skoroszytach

    A poniższy slajd szczególnie adresowany do ludzi, którzy ciągle narzekają jak jest chujowo - "Obywatelu! - weź swój los w swoje ręce!"

    I pamiętajcie - wypełniajcie ankiety. Czasem padnie fajny pomysł w opiniach po spotkaniach i kolejne prezentacje będą miały lepszą jakość.

    Także Obywatelko, Obywatelu - w walce o lepsze jutro IT i realizację planu 5 miesięcznego - ściągajta deklaracje i dołączajcie do ludu pracującego!

    A w najbliższy czwartek Arduino - strona spotkania na meetupie

    Monday, May 5, 2014

    Co mi w Javie Gra - Java Melody

    Gdy usłyszałem tytył Java Melody, pomyślałem, że to biblioteka do obsługi audio w javie :)

    Na szczęście, ktoś przed prezentacją wyjaśnił mi, że ten program sprawdza "co i jak gra" w naszej aplikacji.
    Dobra frekwencja
    Generalnie jak bym miał streścić Java Melody do kilku słów, to jest to tool, który podaje nam statystyki o naszym programie.
    Java Melody potrafi wyświetlić nam najdłużej wywołującą się funkcje, średni czas wywołania się funkcji i przedstawić nam te statystyki na ładnych wykresach. Java Melody jest darmowe i widać po api, że było stworzone do aplikacji Jee. Niestety dla androida nie jest przystosowane.

    Zadowolony prelegent po prezentacji :)
    Mariusz Panek z TomTom-a przedstawił Java Melody w prawdziwym środowisku, pokazał że da się tego używać i wykrywać problemy.

    A po JUGu razem z Wojtkiem Młynarczykiem zostaliśmy zaproszeni na imprezę firmową Cybercomu, w tym że stwierdzenie "zostaliśmy zaproszeni" jest trochę mylące po prostu się wbiliśmy :) 
    Impreza odbyła się w Chmilowej Dolinie https://www.facebook.com/PubChmielowadolina tam próbowaliśmy różnych piw min. imperium atakuje.
    Ludzie z Cybercomu wyluzowani, HR fajny ;) i impreza pozytywna.



    Friday, April 11, 2014

    Warsztaty ze SCALĄ oraz frameworkiem PLAY


    We wtorek 8 kwietnia dzięki inicjatywie Pawła Włodarskiego z firmy TomTom odbyły się warsztaty z programowania w języku Scala oraz tworzenie aplikacji przy użyciu frameworku Play.

    Pierwsze zetknięcie ze Scalą może być nieco dziwne, jednak po paru minutach prowadzący rozwiał wiele wątpliwości odnośnie składni Scali. Od razu co rzuca się w oczy, to definicje podobne do tych używanych w innych językach programowania np JavaScript typu:
  • var

  • val

  • def

  • var - deklaracja zmiennej, która może być zmodyfikowana.
    val - deklaracja zmiennej, która nie może być zmodyfikowana (coś jak deklaracja zmiennej jako final w Javie)
    def - deklaracja metody / funkcji - tak jak void w Javie.

    Scala wykorzystuje programowanie funkcyjne oraz lambdy, coś co dopiero pojawia się w Java 8. Składnia Scali nie wydaje się być jakoś bardzo dziwna czy skomplikowana np:
     package poligon  
     object warsztaty {  
      println("Welcome to the Scala worksheet")    //> Welcome to the Scala worksheet  
      val list = List(1, 2, 3, 4, 5)         //> list : List[Int] = List(1, 2, 3, 4, 5)  
      def dodajJeden(arg: Int) = arg + 1       //> dodajJeden: (arg: Int)Int  
      list.map(arg=>arg+1).filter(arg=>arg>3)     //> res0: List[Int] = List(4, 5, 6)  
     }  
    

    W tym kawałku kodu powyżej deklarujemy sobie listę Integerów bez jawnej deklaracji typu. JVM w locie wychwytuje, że chodzi o typ Integer.
    Dodatkowo Paweł podkreślał, że możemy tutaj wykorzystać dowolną kolekcję z Javy - czyli robi się ciekawie.
    def - to tak jak opisałem deklaracja metody, która przyjmuje argument typu Integer i zwiększa go o 1.
    Piękną sprawą jest natomiast ostatnia linijka kodu, gdzie w 1 linii deklarujemy za pomocą lambda expressions wynik i przekazujemy rezultat jednej metody do drugiej. Efektu WOOOOW.... jeszcze nie ma, ale niektórym już się spodobał bardzo krótki zapis powodujący szybką iterację i filtrację według danych parametrów.

    Ciekawą sprawą jest to, że kompilator szybko kompiluje całość i pokazuje nam wynik poszczególnych działań.

    To jeszcze nie wszystko.


    Bardzo ciekawym rozwiązaniem w Scali są placeholdery na zmienne / funkcje. Wygląda to dość dziwnie na pierwszy rzut oka, jednak od razu widać było użyteczność tego podejścia.

    UWAGA EGZAMPYL

     package poligon  
     object warsztaty2 {  
      val list = List(1, 2, 3, 4, 5)           
      def dodajJeden(arg: Int) = arg + 1         
      val dodajJedenFunc: (Int => Int) = (arg: Int) => arg + 1                        
      val list2 = list.map(_ + 1).filter(_ > 3)      
      list2.reduce(_ + _)     
      }  
    

    Powyższy przykład robi prawie to samo co 1 kawałek kodu - śmieszy natomiast dziwny zapis "reduce(_ + _) "
    (Wynik --> 15, czemu sprawdźcie, bo kim jesteś? - Jesteś zwycięzcą)
    Te magiczne dolne podkreślniki to właśnie placeholdery. Powoli moja twarz robiła efekt WOW - jak to Paweł określił tutaj pojawia się efekt .... *pierdyknięcia. Chociaż nie każdy chciał dać po sobie znać, że ten efekt odczuł.

    W międzyczasie przyjechał catering i najsłynniejszy "włoski placek" przysłużył się w akcji dokarmiania programistów.

    Paweł pokazywał nam kolejne ciekawe sztuczki związane ze Scalą, funkcja która działa na placeholderze, który może być funkcją lub liczbą, a w ciele metody wykonuje kokatenację wyników zwracanych przez funkcję X.

    Tutaj już było bardzo duże woow.
     val wypisz = (str: String) => str + " aaa"     
      wypisz("bbb")                   
      def wypiszDwaRazy(arg: String)(fun: String => String) = {  
       fun(arg) + fun(arg)  
      }                          
      val wersjaShardkodowana = wypiszDwaRazy("ccc")_   
      wersjaShardkodowana { wypisz }           
      wersjaShardkodowana { arg => arg + "aaa" }   
    
    Co będzie rezultatem tego kawałka kodu? - Polecam samemu sprawdzić.

    PLAY - 7 na 10 osób przeszło ze Struts2 na PLAY

    Po kolejnej przerwie na regenerację sił i II fazie dokarmiania programistów nadszedł czas na prezentację frameworka PLAY.
    Paweł w ciągu dosłownie 1 minuty 3 komendami w commandline zbudował szkielet aplikacji.
    komendy:

    play new NAZWA_APKI - viola! mamy naszą aplikację gotową (szkielet)
    cd NAZWA_APKI a potem eclipse - mamy szkielet aplikacji gotowy do zaimportowania do Eclipse.
    Oczywiście w tle gdzieś tam działa Maven lub mavenopodobny tool który to builduje, ale.......
    Po zaimportowaniu apki do Eclipse'a mamy gotową do użycia aplikację w PLAY framework z testami!!

    Paweł pokazał nam w PLAY jak bardzo łatwo zbudować mappingi do odpowiednich kontorllerów, kilka linijek kodu, odpowiedni wpis w pliku routes + typ wywołania GET/POST i mamy gotowe, albo dynamiczne wiązanie już użytych odnośników typu href z akcjami. Jeżeli coś będzie nie grało, kompilator po kilku sekundach od razu nam wywali czerwony stacktrace.
    Nie warto rozpisywać i opisywać każdego przykładu z warsztatów - to trzeba zobaczyć!
    Oczywiście dość często uczestnicy zadawali pytania i często wywiązywała się dyskusja podczas warsztatów.
    Jak dla mnie - osoby która miała 1 raz styczność ze Scalą i Play - efekt wow był podczas demonstracji zastosowania placeholderów.
    Natomiast konkretne pier.... znaczy się - piorunujące wrażenie wywarł na mnie PLAY, gdyż kilkoma komendami tworzymy kompletną apkę wraz z testami, osoby które pisały kiedyś testy do apki MVC (np Spring MVC) bardzo docenią to ułatwienie.

    Podsumowując 1 warsztaty ze Scali i frameworka Play - były bardzo ciekawe. Scala/Play z pewnością będzie jeszcze bardziej zyskiwać na popularności, gdyż wykorzystujemy zalety języka funkcyjnego, lambda expressions i inne. Wszystkiego za jednym zamachem nie da się pokazać, dlatego bardzo gorąco zachęcam do udziału w kolejnych warsztatach (meetup, limit miejsc)

    Bardzo dziękujemy Pawłowi Włodarskiemu za inicjatywę oraz firmie TomTom za organizację warsztatów.