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.





    Wednesday, April 9, 2014

    Wprowadzenie do tworzenia aplikacji wykorzystujących serwisy społecznościowe

    Kto i co

    • Prelegent : Mateusz Smolarczyk
    • Temat : Jak wykorzystać OAuth do rejestracji w serwisach społecznościowych, konkretna implementacja w scribe-java. Było też kilka przykładów gierek, które używają dane z fejsa.

    Zdjęcia

    Następne spotkanie

    Następne spotkanie to kolejny odcinek clean coders: The Liskov Substitution Principle. Uwaga Uwaga! Sponsorem tego odcinka jest - uwaga! - JUG Łódź! (Tak, w końcu członkowie stowarzyszenia zapłacili składki ;))

    link do spotkania -> Clean coders 10.04.2014