Pokazywanie postów oznaczonych etykietą WrocJUG. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą WrocJUG. Pokaż wszystkie posty

wtorek, 22 marca 2016

Nagrania moich prezentacji o ElasticSearchu

Pamiętacie wpis odnośnie dbconf 2015 i 69 spotkania Wrocławskiego JUG'a? Pisałem wtedy o moich wystąpieniach w ramach konferencji dla bazodanowców, jak i w ramach WrocJUG. Temat ten sam, tylko zakres trochę inny.

Dzisiaj znów o tym piszę, bo pojawiło się nagranie z dbconf, które prezentuję poniżej:


Pojawienie się tego nagrania zmotywowało mnie do umieszczenia w końcu swojego wystąpienia na ten sam temat w rozszerzonym wydaniu z WrocJUG. Jeżeli po obejrzeniu pierwszego filmu Wam mało, to możecie obejrzeć wydanie poniżej. Jakościowo jest co prawda trochę gorsze, ale tak niestety GoPro nagrywa w niedoświetlonym pomieszczeniu. Kamera jest raczej przystosowana do alpejskiego słońca, niż do ciemnego pomieszczenia. No i dźwięk gorszy z powodu obudowy. Musiałem również wyciąć kilka sekund w początkowych minutach, jak miałem problemy z mikrofonem. Mam nadzieję, że to nie wpłynie na odbiór merytoryczny.


Poniżej jeszcze raz slajdy z edycji wrocławskiej.


Wszelkie komentarze mile widziane.

poniedziałek, 21 marca 2016

Chamberconf 2016

W weekend 5-6 marca 2016 miałem zaszczyt po raz drugi uczestniczyć w konferencji Chamberconf, którą również organizowałem. Rozpoczęliśmy już w piątek od pre-party. Kto chciał, mógł przyjechać wcześniej i już zacząć integrację z innymi uczestnikami. Bo głównie o to w tej konferencji chodzi, aby integrować się, poszerzać swoje horyzonty myślowe oraz wymieniać się doświadczeniami. W tym celu nie przekraczamy liczby 90 uczestników i spotykamy się daleko od miejskiego zgiełku, aby nic nie rozpraszało naszej uwagi. Dodatkowo zwiedzamy zamki - w końcu całkiem sporo ich na Dolnym Śląsku. Tym razem byliśmy w Pałacu Łagów pod Zgorzelcem. Miejsce trochę awaryjnie wyszło, ale nie było na co narzekać.

Po pre-party i krótkiej przerwie na sen, przyszedł czas na pierwszy dzień. Po krótkim przywitaniu uczestników pierwszy na scenę wszedł Jarek Ratajski z tematem "ScalaJS i architektura #noserver". Prelegent opowiadał, jak to dojrzewał jego pomysł, aby robić aplikacje internetowe bez serwera. Na początku był trochę hejt na REST’a, bo przykładowo czym jest nawiązywanie znajomości na facebooku? PUT czy POST?

Jarek pracując jakiś czas temu mocno z frontendem, mockował backend i te wydmuszki szły do klienta. Można w ten sposób już sporo przetestować (w sensie UX'a) i mieć szybki feedback od klienta. Skoro to już jakoś działa, to co jeszcze trzeba było dorobić aby można było używać?

Następnie było trochę o ScalaJS. Jest to kompilator, a dokładniej transpiler (czyli kompilator jednego języka programowania w drugi) Scali do JavaScriptu. Zyskujemy silne typowanie, wykrywanie literówek w nazwach i inne. Działa z bibliotekami JavaScript'owymi jak React czy AngilarJS. Jarek przekonywał nas, że warto wybrać to narzędzie, jeśli zespół zna Scalę, a musi robić frontend w JavaScripcie. Ale teraz mamy już ECMAScript 6 i TypeScript, więc wybór nie jest już taki oczywisty dla pozostałych niescalowych developerów.

Ale mniejsza o technologie wykonania, liczy się pomysł. Jarek pokazał na przykładzie czata (standardowy przykład tego typu problemów), jak można go zrealizować w trochę inny sposób. Może być wiele niewielkich serwerów (node’ów, aktorów) z których korzystają końcowi użytkownicy, którzy generują eventy. Zdarzenia, zależnie od logiki aplikacji, są zapisywane na node’ach. I teraz potrzeba, aby te node’y się wymieniały informacjami bezpośrednio, lub za pomocą dedykowanych do tego węzłów.

Demo wyszło bardzo fajnie. Prelegent pokazał, co się stanie, gdy wszystkie węzły padną i jak większości użytkownikom wyczyści się local storage w przeglądarce. Wystarczy, że jeden będzie miał te dane u siebie i gdy serwer wstanie to sobie odtworzy poprzedni stan. Gdy kolejne węzły się dołączą, to u nich też się to odtworzy i zapisze się w lokalnej pamięci w przeglądarce. I gdy teraz te poszczególne węzły będą działały na maszynach użytkowników, to można w całości, albo prawie w całości zrezygnować z serwerów.

Jarek fajnie opisał, jak mogło by to działać na przykładzie Wikipedii. Każdy wchodzący na stronę / podstronę miały zapisane u siebie te artykuły, które przeglądał. I jak ktoś będzie chciał przeglądać jakiś artykuł, to go ściągnie od innego użytkownika i też będzie miał kopie u siebie. W takiej konfiguracji mogły by zaginąć stare, mało popularne artykuły. Ale skoro nikt tego dawno nie czytał, to widocznie nie jest jakoś specjalnie potrzebne ;)

Jarek opowiadając o swoich przemyśleniach, doszedł do wniosku, że implementując to podejście to chyba (albo prawie na pewno) na nowo napisał model aktorowy. W takim systemie jeszcze sporym wyzwaniem jest zapewnienie bezpieczeństwa, ale da się to zrobić. Fajny był przykład o myśleniu o koncie w banku w skali galaktycznej. Jarek jeszcze bardzo polecał filmiki pana: Haoyi Li odnośnie ScalaJS. Ja chwilę ten: SBTB 2014, Haoyi Li: Cross-platform development with Scala.js oglądałem.

Jako następny na scenie pojawił się Artur Suchwałko z tematem "Budowa modeli predykcyjnych w R". Artur jest organizatorem grupy Data Science Wroclaw. Artur pokazał co można robić w języku R. Za pomocą niewielu linijek, można sobie przeanalizować pewien zbiór danych, aby odpowiedzieć (albo chociaż próbować) na jakieś pytanie biznesowe. Dane trzeba sobie wcześniej jakoś przygotować, zrozumieć, wyczyścić (np. zapchać czymś, gdy brakuje wartości), zanalizować, utworzyć cechy pochodne (kombinacja podstawowych), wybrać cechy, model i ocenić jakość. Do tego wszystkiego można zapiąć język programowania R, który jest obecnie standardem w bioinformatyce. Tak mówi Wikipedia, więc to prawda ;-) A wszystko ponoć za sprawą projektu bioconductor.org. Konkurencją dla R jest Python jak i komercyjne narzędzia jak: SPSS, SAS, RapidMiner, Statistica.

Wykład był fajny, poszerzający horyzonty myślowe. Warto uczestniczyć w trakcie konferencji na takich prelekcjach, bo w domu / w pracy niekoniecznie będzie czas na poznanie takich narzędzi. Jak dla mnie łatwość (a może szybkość) z jaką R radzi sobie z wizualizacją jakiś analiz była zaskakująca. Trzeba jednak mieć wg. mnie sporą wiedzę z zakresu statystyki, aby się zajmować tego typu problemami.

Po wykładzie Artura nastał czas na część, za którą byłem w dużej mierze odpowiedzialny, czyli Pecha Kucha. Formuła polega na pokazaniu 20 slajdów gdzie każdy przeskakuje co 20 sekund. Jest więc niecałe 7 minut na przedstawienie swojego tematu. Było to po raz pierwszy w Polce na konferencji IT na taką skalę, bo wystąpiło 11 osób. Podobno wcześniej ktoś coś pojedynczo próbował robić - ale tylko podobno. Tematyka była dowolna, choć w większości przedstawiane tematy były techniczne, lub półtechniczne. Po rozmowie z uczestnikami okazało się, że forma ta bardzo im przypadła do gustu. A jak kogoś temat nie interesował, to mu nie było żal tak krótkiego czasu. Mam nadzieję, że ta formuła na stałe zagości do polskiego światka IT.

Nie będę tu opisywał wszystkich prezentacji, wszystkie dały radę mniej lub bardziej. Jako że trzeba się chwalić, to napiszę o swojej prelekcji. Jako jedyny miałem temat totalnie nietechniczny, ani nawet nie miękki. Po prostu zachęcałem uczestników do morsowania, czyli kąpieli w lodowatej wodzie w otwartych zbiornikach wodnych. Poszło mi chyba całkiem nieźle, bo publika się śmiała parę razy jak i później uczestnicy do mnie podchodzili na unconference pogadać. Zarzucić sobie mogę trochę „tańczenie” na scenie, co jest wytykane jako błąd w podręcznikach do wystąpień publicznych. Chyba też za mało miałem kontakt z publicznością, bo często patrzyłem na ekran komputera jak i na małe ściągi - aby wiedzieć co będzie na następnym slajdzie. Będzie to widać na nagraniu za rok ;)

Później była przerwa obiadowa, a po niej kolej na rzeźnika, czyli Marcina Rzeźnickiego z tematem "Fun with Arrows". Niestety więcej nie pisałem w Scali niż pisałem, temat mnie wymęczył i nie dałem rady być do końca. Był to zaawansowany wykład, możliwy do strawienia przez osoby mające już wcześniej kontakt z tematem. Zamiast tego IT Arystorkacja mogła się pobawić:

Film zamieszczony przez użytkownika Ola K. (@akunysz)

Ostatni wykład pierwszego dnia (jak i całej konferencji) był Jarka Pałki pt. "Tęcza, kucyki i Equestria i co to wszystko ma wspólnego z programowaniem”. Czyli było o języku Pony.

Pony to język kompilujący się do natywnego kodu z niewielką pomocą Low Level Virtual Machine (LLVM). Jest tworzony w C/C++. Język dużo naobiecał, a najbardziej Jarek skupił się na Capabilities, czyli prawach dostępowych do obiektów. Jest zdefiniowanych 6 poziomów: iso (Isolated), val (Value), ref (Reference), box (Box), trn (Transition ), tag (Tag). Dzięki temu, na poziomie języka / kompilacji mamy kontrolę, czy dany kawałek kodu może odczytywać lub zmieniać wartość. Są pewne regóły kiedy referencja się przekształca z jednego typu na inny. Koncept bardzo mi się podoba, mimo że go jeszcze nie zrozumiałem, ale generalnie pozwala nam to na łatwiejsze pisanie aplikacji bezpiecznych wielowątkowo. Ponadto model aktorowy jest wbudowany w język. Aby coś więcej się dowiedzieć o języku warto przejrzeć prezentację My Little Pony - Codemesh 2015.

I to tyle jeśli chodzi o wykłady. Później była kolacja i unconference, czyli zapisaliśmy na karteczkach tematy o których chcielibyśmy porozmawiać i przylepiliśmy na drzwi. Po pogrupowaniu tematów zostały one przydzielone do stołów i już ludzie zaczeli dyskutować i przesiadać się między stolikami. Trochę osób podchodziło do mnie pogadać o morsowaniu i tak m.in. dowiedziałem się o panu Porfirii Ivanov. Gościu był rosyjskim mistykiem, który nawoływał do nawiązywania bliższego kontaktu z naturą poprzez zrzucenie ubrań w czasie gdy jest zimno. Uskuteczniał polewanie się zimną wodą w zimie na powietrzu jak i kąpiele w takiej wodzie. Próbował też leczyc ludzi, Kościół Prawosławny uznał go za heretyka, a na koniec skończył w szpitalu psychiatrycznym. Poczytałbym coś więcej, ale na Wikipedii sensowny artykuł jest po rosyjsku ale ja не понимаю.

Nocne rozmowy uczestników (zainicjowane unconference) trwały bardzo długo. W niedzielę zaczął się dzień warsztatowy. Do wyboru był LeanPoker, Hackergarten i RoboCode. Pierwszy z nich polegał na implementacji algorytmu grającego w pokera. Celem nie było pisanie testów, ani praca w parach, tylko dostarczenie jak najszybciej działającej wersji algorytmu i ulepszanie jej wraz z biegiem czasu. Warsztat ten potrwał najdłużej ze wszystkich.

Ja wziąłem udział w Hackergarten. Zabawa polega na zaangażowaniu się w jakiś projekt Open Source i stworzenia Pull Request’a. Ja pomagałem Patrykowi i Rafałowi porozwijać IceBoar’a. Pomagałem im z setupem projektu i dostałem dzięki temu feedback, jak go można ulepszyć. Udało się stworzyć PR, ale jeszcze go nie akceptowałem, bo wymaga kilku poprawek.

Później jeszcze chciałem zaangażować się w walki czołgów (RoboCode), ale zostało mało czasu, więc trochę pomogłem Piotrkowi patrząc przez ramię. Podczas finałowej rozgrywki jego czołg wygrał. Dla 3ch pierwszych miejsc znalazły się nawet nagrody, ale nie powiem przez kogo ufundowane, bo konferencja była bez sponsorów ;-)

Podsumowując, konferencja bardzo się udała. Miejsce konferencji okazało się bardzo fajne i uczestnicy bardziej sobie chwalili niż zamek w Mosznej (przynajmniej jeśli chodzi o noclegi). Miały być 3 warsztaty i tyle ich było. Co prawda zamiast Scalatrona był RoboCode, ale i tak było fajnie. No i Pecha Kucha wyszła wspaniale.

Z minusów, to ludzie trochę narzekali na kolację w ramach pre-party. Niektórzy później przybywający do pałacu nie mieli już co jeść :-( Następnym razem trzeba zrobić konferencję od razu z pre-party bo i tak większość ludzi przyjechała już w piątek. Co do Pechy Kuchy, to jednak zabrakło dyskusji od razu po każdym wystąpieniu. Po 11 szybkich prezentacjach ludzie już zapominali co było wcześniej i o co chcieli zapytać.

Mam nadzieję, że za rok znów się spotkamy, a konferencja będzie jeszcze lepsza.

czwartek, 5 listopada 2015

Po dbconf 2015 i 69 spotkaniu Wrocławskiego JUG'a

Ostatnio, miesiąc po poprzednim wystąpieniu na WrocJUGu, miałem okazję dzielić się swoją wiedzą na temat ElasticSearch’a. Najpierw było to w ramach dbconf - konferencji dla bazodanowców, a później na swoim podwórku, czyli Wrocławskim JUG’u. Początkowo kolejność miała być inna (najpierw WrocJUG, potem dbconf), ale nie wyrobiłem się z przygotowaniem. Nie wpłynęło to jednak na jakość obydwu wystąpień.

W ramach dbconf byłem właściwie tylko na swoim wykładzie i imprezach integracyjnych, gdyż nie czuję się typowym bazodanowcem. Zresztą konferencja odbywała się w Jurze Krakowsko-Częstochowskiej, więc była okazja aby zwiedzić okolicę.

Co do samego wykładu, to poszło mi chyba całkiem dobrze. Płynnie uruchamiałem wcześniej przygotowane przykłady i było trochę pytań z sali. Końcówkę musiałem jednak już gnać i pominąć parę szczegółów, bo niestety sztywne ramy czasowe nie pozwoliły mi na przekazanie wszystkiego. Po prezentacji było trochę pytań, na które już odpowiadałem po za salą.

Z całego pośpiechu zapomniałem zabrać zasilacza, ale na szczęście organizatorzy mi go odesłali, więc mogłem kilka dni później poprowadzić ten sam temat we Wrocławiu.

W ramach JUG’a pierwszy raz spotkaliśmy się w nowym miejscu tj. w Sanatorium Kultury na rynku. Bardzo fajne miejsce, ze sceną jak w teatrze i klimatycznym oświetleniem. Było trochę problemów z mikrofonem, ale jak już wymienili baterię, to działało.

Na spotkanie była chętna ponad setka ludzi, ale na sali była już tylko połowa z tego.

Na szczęście nie ograniczał mnie czas i cała prezentacja zajęła mi 2 godziny! Było sporo pytań z publiczności, zwłaszcza od Kamila i jeszcze jednej osoby, która wcześniej pracowała sporo z Apache Solr. Nie na wszystkie umiałem odpowiedzieć, bo nie jestem specjalistą w temacie i nie spotkałem się z niektórymi omawianymi przypadkami.

Udało mi się na szczęście zebrać trochę feedbacku, tego dobrego i złego, więc uważam, że warto go tutaj zapisać, aby za jakiś czas zrobić sobie retrospekcję i sprawdzić czy się coś poprawiło. Dziękuję wszystkim dzielącym się ze mną swoją opinią!

Uwagi:

  • “Podczas przełączania slajdów machałeś ręką, jakbyś chciał rapować” - fakt, widać to na nagraniu, do poprawki.
  • “Warto by mieć ciągle agendę gdzieś z boku, bo często pytania wybiegały mocno w przód (dotyczyły tematu który nie był jeszcze omawiany)” - choć nie spotkałem się z takim podejściem na konferencjach, ale to może mogę być pierwszy ;) Rzeczywiście można wywiesić agendę gdzieś z boku i wtedy osoby zadające pytanie mogą 2 razy się zastanowić, czy to aby na pewno jest dobry moment na dane zapytanie. Można jeszcze wydrukować kartki z agendą i umieścić na siedzeniach jak w teatrze lub operze, ale to jeszcze wyższy poziom ;)
  • “Dużo pytań o specyficzne tematy, których ktoś kto pierwszy raz spotyka się z narzędziem i tak nie zapamięta” - to fakt. Było sporo szczegółowych pytań, których osoby początkujące i tak nie zapamiętają. Z drugiej strony osoby zaawansowane też chcą coś wynieść z prezentacji, więc wypada odpowiedzieć. Ja się cieszę, że czasem była zażarta dyskusja, bo sam się przez to czegoś dowiedziałem. Fajne jest również to, że uczestnicy odpowiadają sobie nawzajem. Z drugiej strony liczne pytania trochę zaburzają tok prezentacji. Ciężko tutaj znaleźć złoty środek:/ Może powinienem rzadziej pytać, czy są jakieś pytania?
  • “Zabrakło przykładów z poziomu Javy” - no fakt skupiłem się na zapytaniach RESTJSON’owych, a zapomniałem, że jesteśmy na Java User Group. Dobra uwaga, powinno być więcej kodu z Javie. Chyba coś muszę dodać w kolejnej wersji (jeśli będzie kolejna wersja).
  • “Lepiej niż miesiąc wcześniej, gdzie puszczałeś wcześniej nagrany film” - tak, tym razem były przygotowane przykłady, które odpalałem na żywo. W prezentacji o Liquibasie bardzo dużo mogło pójść nie tak, więc lepiej było nagrać krótki filmik. Jest więc jakiś postęp.
  • “Widownia mogłaby bardziej uczestniczyć w tworzeniu przykładów” - mogłem pytać się np. jaki film utworzyć w indeksie, co poszukać itp. Do poprawki.
  • “Przydałyby się jeszcze jakieś fajerwerki. Nawet najlepsza prezentacja jeśli trwa długo, potrzebuje przerywnika” - był żart o masturbacji… Ale fakt zapomniałem o zasadzie, która kiedyś była dla mnie bardzo ważna, aby był jakiś śmieszny przerywnik w trakcie. Zwłaszcza, że prezentacja zajęła mi 2 godziny. Nie wiedziałem wcześniej, że może mi to tyle zająć.
  • “Sekcja "teoretyczna" powinna zostać lepiej omówiona” - nie wiem co miałbym jeszcze omawiać w kwestii teoretycznej… postawiłem bardziej na praktykę.
  • “Wymowa: "bede", "must", "fuzzy", "schema” i język potoczny: "klepał w klawiaturę", “mianowicie” - chyba trochę za dużo oglądania Pana Wiesława Wszywki. Nad wymową niektórych słów muszę trochę popracować, ale języka potocznego nie zmienię - innym osobom luźny styl prowadzenia prezentacji się podobał (wliczając w to mnie), więc tak już zostanie. Nie chcę gadać jak nudny wykładowca.
  • “Próby kodowania na żywo kiepsko wychodzą” - fakt chciałem coś tam małego zakodować w trakcie - pod wpływem pytania z publiczności - i były z tym pewne problemy. Podpowiadania składni brak, nie robiłem tego wcześniej, po za tym inne obszary mózgu są odpowiedzialne za mówienie i za pisanie - nie jestem w stanie robić tego równocześnie.


Była jeszcze masa pozytywnych komentarzy. Większości bardziej się podobało niż nie podobało. Nie będę jednak przytaczał tych pozytywnych komentarzy.

A już za niecały miesiąc, 33 degree 4 charity zawita do Wrocławia. Będę tam mówił o Liquibase, czyli mój temat z 67 spotkania WrocJUG. Trzeba będzie go trochę zmodyfikować, aby zmieścić się w wyznaczonym czasie. I będę mógł zobaczyć swoją prezentację na dużym ekranie :) Już dzisiaj wszystkich serdecznie zapraszam!

Poniżej slajdy dla zainteresowanych odnośnie ElasticSearch’a:

sobota, 3 października 2015

Po 67 spotkaniu Wrocławskiego JUG'a


Ostatnio miałem przyjemność poprowadzić 67 spotkanie Wrocławskiego JUG'a na temat: Liquibase - zarządzanie zmianami w relacyjnych bazach danych.

Co prawda podobny temat przedstawiałem niemal rok temu na dbconf.pl, ale chciałem w ramach JUG'a zrobić bardziej praktycznie i z przykładami. Tworzyłem więc (przez rok z wieloma przerwami) przykładową aplikację, aby zaprezentować to, co chciałem. Zabrało mi to tyle czasu, bo walczyłem ze Spring Boot'em, Java Movie Database, Postregssem, MySQLem, mapowaniem Hibernate'a, a do tego wszystkiego chciałem pokazać choć proste GUI, a więc jeszcze AngularJS i HTML. Ostatecznie na prezentacji i tak puszczałem nagranie, jak można dodać Liqibase'a do istniejącego projektu, bo znając życie to podczas wystąpienia i tak by coś nie zadziałało, albo nie wiedziałbym jak zwiększyć czcionkę w Idei ;) Dodatkowo miałem mikrofon, który musiałem trzymać w ręce, więc było by ciężko.

Wnioski jakie z tego płyną, to:
- przygotowanie super przykładów, zajmuje wiele czasu - zbyt wiele
- przykłady nie muszą być super dopieszczone i powinny koncentrować się na głównym problemie, a nie dodatkowych aspektach wizualnych
- lepiej skupić się na samej prezentacji - na careercon.pl miałem 5 dni na przygotowanie prezentacji o Javie 8 i się udało (może nie na takim poziomie jakbym sobie tego życzył, ale feedback nie był najgorszy)

Dziękuję sponsorowi spotkania, firmie:

IT Kontrakt

za zapewnienie żłocistego napoju chłodzącego dla uczestników.

Poniżej slajdy ze spotkania...

... i kod z przykładów: https://github.com/mstachniuk/movies-database

Wykład był też nagrywany, ale jego jakość może być wątpliwa, więc jeszcze nie wiem czy udostępnię.

Dziękuję wszystkim uczestnikom za udział i za pozytywny feedback. Widziałem, że pod koniec trochę już niedawaliście rady, ale jakoś dotrwaliście szcześliwie do końca. Wszelki dodatkowy feedback (zwłaszcza ten konstruktywno-krytyczny - co można na przyszłość ulepszyć), mile widziany!

A w najbliższym czasie ponownie się szykuję na dbconf.pl i pewnie będzie pra premiera na WrocJUGu. Jakoś polubiłem tą konferencję, bo może nie jestem do końca typowym bazodanowcem, ale jako że konferencja odbywa się tym razem w Jurze Krakowsko-Częstochowskiej, to jest okazja zwiedzenia okolicy i pooddychania czyst[sz]ym powietrzem. Chcę również pokazać bazodanowcom, że po za bazami SQL (od firmy na O. lub I.) są też jeszcze ciekawe rozwiązania.

Na koniec mały bonus zachęcający do robienia prezentacji




poniedziałek, 2 lutego 2015

ChamberConf wrażenia jako organizator, prelegent i uczestnik w jednym

W końcu się zebrałem, aby napisać relację z ChamberConf. Była to pierwsza konferencja organizowana przez Wrocławski JUG. Sam również po raz pierwszy miałem okazję uczestniczyć w organizacji takiego wydarzenia. Ostatnie 2 tygodnie przed wydarzeniem do łatwych nie należały...

Z założenia konferencja miała być bez sponsorów, czyli bez wszelakich konkursów, stoisk, prezentów itp. Początkowo konferencja była planowana na 65 osób, ale ostatecznie wyszło 80. Miejsce było niezwykłe, bo to były psychiatryk (gdzieś niedaleko jest jeszcze działający oddział), a jednocześnie bardzo ładny zamek, z dala od wielkich miast i cywilizacji. Konferencja trwała dwa dni, ale sporo osób przyjechało już w piątek wieczorem, więc nieoficjalnie zaczęło się trochę wcześniej.

Na pierwszej prezentacji w sobotę Tomka Borka i Jacka Jagieły pt. To nie zawsze wina aplikacji, robiłem za pilot do przełączania slajdów, ponieważ żaden wskaźnik nie chciał akurat współpracować z Ubuntu. Slajdy można sobie przejrzeć na prezi.com, jak i na slideshare. Z prezentacji wynikało, że należy pamiętać o monitoringu aplikacji i infrastruktury, bo często problemy z wydajnością nie leżą w naszym kodzie. Fajne było zadawanie pytań na koniec przez prelegentów do publiczności, czyli w odwrotnym kierunku niż zwykle.

Następnie Adam Warski opowiadał o Reactive Manifesto z użyciem Akki. Było trochę wstępu teoretycznego i sporo kodowania na żywo. Występ się trochę przedłużył, ale zależało nam na tym, aby konferencja nie miała sztywnych ram.

Następnie Konrad Malawski opowiadał o algorytmach głosowania w sieci. Było m.in. o Paxosie (którego prawie nikt nie rozumie), jak i jego uproszczonych wersjach. Początkowo bałem się, że to będzie prezentacja czysto akademicka, ale koniec końców okazało się, że bodajże raft consesus jest gdzieś tam w Akkce zaimplementowany.

Następnie był obiad i ostania prezentacja pierwszego dnia, Michała Bartyzela pt. Z czym mierzą się zespoły? Michał opowiadał sporo swoich doświadczeń i trudności jakie spotykamy w naszej pracy, oraz jak zmieniał się jego światopogląd na przestrzeni lat.

Następnie było unconference, czyli coś co nie wiedzieliśmy czy się uda czy nie. Ale wychodzi na to że się udało. Było sporo pytań do Konrada, rozmów o pracy zdalnej, CQRSie i inne, a to wszystko w luźnej atmosferze. Później całość się przeniosła na kolację i dalsze rozmowy z ludźmi zwłaszcza nowopoznanymi.

Drugi dzień rozpocząłem od zapowiadanego morsowania. Niestety nikt chętny się nie zgłosił, chociaż o 2:00 w nocy ktoś się podobno deklarował. Może za mało przypominałem uczestnikom o tym temacie...


Drugiego dnia udałem się na Archi-Katę do Tomka Borko. Warsztat był na kartkach bez użycia komputerów, ale zmuszał do sporego myślenia, a później dyskusji i oceniania prac innych. Bardzo fajny warsztat.

Równolegle do warsztatów była ścieżka z prezentacjami. Tam frekwencja była mniejsza, ale podobno bardzo sprzyjało to żywej dyskusji.

Po przerwie obiadowej sam prowadziłem warsztaty. Jak się okazało, był to jedyny temat związany z Java, gdyż inne były o Scali, architekturze lub miękkie. Chyba trzeba będzie zmienić Java User Group na JVM User Group. Warsztat był rozszerzoną powtórką z Warsjawy. Sam na początku warsztatu się czegoś nowego nauczyłem, a mianowicie poznałem: Presentation Assistant, dzięki któremu można było wyświetlać wciskane skróty na ekranie. Kiedyś jak szukałem takiego narzędzie pod windę, to każde okazywało się jakieś kiepskie. A wspomniany plugin pokazywał skróty w wersji na Winde i Mac'a.

Implementowaliśmy ten sam problem co na Warsjawie, czyli StringCalculator. I jak doszliśmy do wydarzeń regularnych, to znów zaczeły się schody. Okazje się, że jak "ma się jakiś problem, który rozwiązujemy za pomocą regexpa, to de facto rozwiązujemy dwa problemy". Jakoś w końcu udało się wybrnąć z tego, ale nie było łatwo. Sam kilka dni przed konferencją zaimplementowałem problem, rozwiązanie (pewnie nieidealne) dostępne na githubie: mstachniuk/StringCalculatorKata. A slajdy poniżej:



Szkoda tylko, że nie wszyscy uczestnicy dotrwali do końca, ale wiadomo - niedziela i trzeba było wrócić z tego końca świata do domu. Mój warsztat trochę się przedłużył, ale to ze względu na masę pytań. Na koniec było czuć zmęczenie, ale i zadowolenie.

Podsumowując konferencję wypadła bardzo dobrze. Pierwszy dzień był mocny i miał służyć owocnym rozmowom podczas unconference. Ten cel został osiągnięty. Drugi dzień wypadł już trochę słabiej, więc pewnie można coś w nim poprawić. Można to ewentualnie tłumaczyć znakomitym pierwszym dniem. Mam nadzieję do zobaczenia za rok!

środa, 14 stycznia 2015

Duplikowanie bloku kodu w IntelliJ Idea

Dzisiaj mam do zaprezentowania mały lifehack w IntelliJ Idea. Wyszło to podczas przygotowywania (a raczej odświeżania) mojego warsztatu na konferencję ChamberConf'15, której też jestem współorganizatorem (wraz z ekipą z Wrocławskiego JUGa).

Otóż gdy się przesiadałem (dawno dawno temu) z Eclipse'a do Idei, to z początku denerwował mnie sposób duplikowania linii w kodzie. Ale nie o sam skrót klawiaturowy mi chodzi (Ctrl + D który to w starym środowisku usuwał linię), a o sposób duplikowania zaznaczonego kodu. A działa to tak:


Wiem, że mógłbym szybciej zaznaczyć dany fragment za pomocą Ctrl + W, ale wówczas efekt końcowy jest mniej zauważalny.

Generalnie powielany fragment kodu jest wstawiany zaraz za zaznaczeniem. Kiedyś bardzo mnie to denerwowało ale z czasem się przyzwyczaiłem i jakoś z tym żyłem. Ale dzisiaj rano znów zaczęło mnie to irytować... Zacząłem przeglądać YouTrack dla Idei i pogrzebałem trochę w ustawieniach.


Jak patrzymy na mapowanie klawiszy to mamy "Duplicate Line or Block" jak i "Duplicate Lines". Pod pierwszą pozycję jest podpięty skrót Ctrl + D. Gdy go stamtąd usuniemy i użyjemy w drugiej opcji, to otrzymamy ostrzeżenie o konflikcie:



Klikamy na "Leave" i uzyskujemy poniższy efekt działania Ctrl + D:


Jak widać, ten sam (tak samo zaznaczony) fragment kodu, po wciśnięciu magicznej kombinacji, wstawia się w nowej linii!

Mam nadzieję, że ten prosty wpis się spodobał. Jak chcesz poznać więcej trików, to zapraszam na wspomnianą już konferencję: ChambeConf'15, lub odezwij się bezpośrednio do mnie.

czwartek, 11 września 2014

Rusza rejestracja na tegoroczną Warsjawę oraz moje tematy

Już niedługo (21.09.2014 21:00) ruszy rejestracja dla uczestników Warsjawy - darmowej konferencji, która składa się z samych warsztatów! Liczba miejsc jest ograniczona, dlatego warto się spieszyć, zwłaszcza, że jest szansa na warsztaty, które będzie prowadził Venkat Subramaniam! Jest to założyciel Agile Developer, autor wielu książek jak i świetny prelegent, którego mieliśmy okazję wielokrotnie oglądać na polskich konferencjach. Styl jego prezentacji jest specyficzny, a o części jego wystąpień można przeczytać na moim blogu.

Dzięki wizycie Venkata w Warszawie, udało się go zaprosić także do Wrocławia i poprowadzi on wykład Programming with Lambda Expressions w ramach WrocJUG. Będzie również warsztat: Programming Concurrency - Workshop, ale na niego nie ma już miejsc, a lista oczekujących jest długa.

Jednocześnie zapraszam na warsztaty, które sam będę prowadził w ramach Warsjawy. Poniżej przedstawiam tematy, które będę prowadził, wraz z krótkim komentarzem.

Czas: Piątek, 26 września 2014 13:00
Temat: Upiększ swoje testy. Testowanie jednostkowe dla średnio zaawansowanych

Opis: Warsztat jest przeznaczony dla średniozaawansowanych programistów Java, którzy napisali już trochę testów i chcieliby je upiększyć. Podczas warsztatu będziemy ćwiczyć tworzenie ładnej sekcji given (za pomocą Builder'ów), jak i czytelniejsze zapisywanie assercji (za pomocą Hamcrest'a, FEST'a i AssertJ). Bedzie jeszcze o testowaniu wyjątków i testach parametrycznych. Warsztat będzie prowadzony po polsku, względnie może być po niemiecku;) Wymagane jest zabranie ze sobą własnego komputera ze skonfigurowanym środowiskiem programistycznym i opcjonalnie konto na GitHub'ie (do przesyłania gist'ów).

Być może, jak starczy czasu, będzie można poćwiczyć jeszcze inne rzeczy, ale to już zależy głównie od prędkości grupy, jak i zainteresowania tym, co będą chcieli usłyszeć uczestnicy.

Czas: Sobota, 27 września 2014 16:00
Temat: Poznaj lepiej swoje środowisko programistyczne i zwiększ swoją produktywność z IntelliJ Idea

Opis: Każdy programista powinien poświęcić 10 godzin na dogłębne poznanie swojego zintegrowanego środowiska pracy, aby móc z niego efektywnie (i efektownie) korzystać! A Ty ile czasu na to poświęciłeś? Warsztat jest przeznaczony dla programistów Java, korzystających z IntelliJ Idea, lub chcących się go nauczyć. Warsztat będzie miał formę Coding Dojo, podczas którego będziemy wspólnie pisać Katę i wzajemnie uczyć się korzystania z Idei bez użycia myszki. Warsztat będzie prowadzony po polsku, względnie może być po niemiecku;) Własny komputer nie jest wymagany, gdyż będziemy kodować wspólnie na jednym, podpiętym do rzutnika. Przyda się za to notatnik i długopis do zapisywania nowopoznanych kombinacji klawiszowych.

Na pomysł tego warsztatu wpadłem po tym, jak go z wielkim sukcesem przeprowadziłem w ostatnim projekcie. Po prostu, gdy udało się kupić IntelliJ Idea dla całego zespołu (o co bardzo ciężko walczyłem - skutecznie), musiałem wdrożyć kolegów w nowe środowisko. Wcześniej pokazywałem jedynie czym się różni Idea od Eclipse'a, ale to nie to samo co praktyka przy klawiaturze. Nie chciałem również słyszeć narzekań, że teraz trzeba się na nowo uczyć wszystkich kombinacji klawiszowych.

Zebrałem więc cały zespół, wyjaśniłem zasady i poszłooo! Było bardzo intensywnie, śmiesznie i co najważniejsze pouczająco. Ludzie wychodzili wówczas z sali z ugotowaną głową, ale widziałem później, że te warsztaty bardzo im pomogły. Zebrałem również bardzo pozytywne opinie na retrospektywie.

Mam nadzieję, że na Warsjawie będzie równie gorąco.

P.S. W razie jak byście chcieli się wcześniej zapisać na warsztaty, to przeczytajcie ten status.

sobota, 18 grudnia 2010

Wrażenia po pierwszej mojej prezentacji w ramach Wrocław Java User Group


We wrotek (14.12.2010) miałem przyjemność prowadzić prezentację w ramach Wrocław Java User Group (WrocJUG). Było to moje pierwsze wystąpienie na tym poziomie trudności. Wielokrotnie prowadziłem prezentacje w ramach koła naukowego ISA^2 czy PWrJUG, ale na WrocJUG jest trochę inaczej. O ile studenci w miarę wierzą w to co się do nich mówi, to na WrocJUG padają już trudne pytania i byle odpowiedź jest tu niewystarczająca. Tutaj trzeba mieć większą wiedzę i mocne argumenty, aby przekonać do siebie słuchaczy.

Mój temat prezentacji to: Inicjatywa NoSQL na przykładzie db4oDb4o zajmuję się już od jakiegoś czasu, a zaczynałem od studenckiego projektu, później była magisterka i kilka małych projekcików dla własnych celów. O rozwiązaniach NoSQL miałem okazję trochę posłuchać w ramach polskich konferencji. Prezentacją chciałem trochę przybliżyć i rozpropagować te obydwie rzeczy we Wrocławiu.

Do samej prezentacji przygotowywałem się dość długi czas. Już podczas wakacji miałem pierwsze pomysły, jakie triki mogę wykorzystać w prezentacji, aby widownię trochę rozbawić i zmusić do dyskusji. Samą prelekcję musiałem trochę odwlec w czasie, gdyż chciałem się najpierw obronić, a dopiero potem przemówić na WrocJUG. Jak już zgłosiłem gotowość do prezentowania, to trzeba było jeszcze chwilę poczekać na wolną salę (spotkania nie są regularne, więc nie mamy jej na stałe zarezerwowanej).

Jak poszła prezentacja? Po prelekcji zgarnąłem kilka pozytywnych opinii, z czego się cieszę. Zależało mi na tym, aby zmusić widownię do dyskusji, co mi się udało. Padało tyle pytań, że całe wystąpienie przeciągnęło się do 2 godzin i 15 minut! Udało mi się ponadto poprowadzić prezentację na luzie i sala często się śmiała.

Czy udało mi się przekonać uczestników do korzystania z db4o? Chyba nie do końca. Jeżeli przedstawił bym produkt, który ma funkcjonalność zbliżoną do obecnych komercyjnych, relacyjnych baz danych, to wtedy może tak. Db4o jednak ma troszkę inne przeznaczenie (małe i średnie projekty, aplikacje standalone) niż duże relacyjne kombajny, przechowujące ogromne ilości danych.

Podczas prezentacji dało się odczuć, jak bardzo jesteśmy zakorzenieni w relacyjnym modelu danych i jak ciężko jest nam się odnaleźć w nowym środowisku. Znamy bardzo dobrze programowanie obiektowe, ale ciężko nam jest sobie wyobrazić, aby przechowywać dane w postaci obiektów. Bardzo też się przyzwyczailiśmy do innych możliwości jakie oferuje nam relacyjna baza danych i nie chcemy z nich tak łatwo rezygnować.

Uwagi jakie zebrałem na temat samej prezentacji:

  • Nie wszystko było czytelne na slajdach, np. czarny tekst na czerwonym tle na jednym z obrazków. Wynikało to trochę z wypalenia się lampy rzutnika. Z drugiej strony chciałem zachować kolorystyke stosowaną w dokumentacji db4o.
  • Nie zawsze udawało mi się ładnie złamać linię kodu na slajdach. No niestety miałem trochę „tasiemcowate” warunki w if-ach, a nie chciałem czcionki w kodzie pomniejszać, ze względu na pogorszenie widoczności.
  • Ładniej również kod uruchamiany można było dopracować, np. nie tworzyć metod statycznych. Wynikło to trochę z mojego lenistwa, gdyż chciałem aby wszystko co ciekawe w danym przykładzie, działo się w metodzie main(). Niektórzy jednak oceniają programistę po jego kodzie i niezaspecjalnie na tym polu wypadłem. Trzeba się poprawić na przyszłość! Na przykład zamiast pokazywać kolejne możliwości w metodzie main(), można przygotować testy uczące (chyba tak to się nazywa). Chodzi mi o testy, które piszemy dla siebie, gdy chcemy poznać działanie nowej biblioteki. W ten sposób sprawdzamy, czy dobrze zrozumieliśmy dokumentację.
  • Zamiast używać SVN’a można by kopiować odpowiednie pliki projektów z uprzednio przygotowanych katalogów. Nie chciałem tworzyć kodu na żywo, gdyż bardzo dobrze wiem, że to ciężkie zajęcie pisać kod i jednocześnie opowiadać o nim, a najczęściej i tak wychodzi, że o czymś zapominamy i nie działa. Zaczyna się wtedy desperackie poszukiwanie przyczyny, a publika się zaczyna nudzić. Dlatego postanowiłem skorzystać z SVN’a i przełączać się pomiędzy kolejnymi rewizjami kodu. Z widowni słyszałem szmery, że to fajny pomysł, ale rzeczywiście kopiowanie pliku mogło by być trochę szybsze.
  • Mało wiedziałem o komercyjnym zastosowaniu db4o i jakie sprawia problemy. No cóż nie mam komercyjnego doświadczenia z db4o, ani informacji jak to się sprawdza na produkcji.
  • Odpalanie prostych przykładów kodu nie zawsze jest potrzebne.
  • Warto zainstalować program typu ZoomIt, aby jakby coś nie było czytelne, można było powiększyć ekran.
  • Brakowało mi trochę takiej aplikacji, która wyświetlała by slajdy w trybie prezentacji. Tzn. abym na ekranie laptopa widział aktualny slajd i następny, a na rzutniku był tylko aktualny slajd wyświetlany. Z tego co mi wiadomo to pakiet MS Office i OpenOffice mają taką funkcjonalność, ale niestety one nie obsługują pdf'ów. Jakby ktoś znał taką aplikację proszę o info.

Więcej uwag nie pamiętam, jak mi się cos przypomni to dopiszę :)

poniedziałek, 25 października 2010

Wrażenia po CodeRetreat we Wrocławiu

W sobotę 23.10.2010 odbyło się pierwsze otwarte CodeRetreat w Polsce. Wyszło bardzo dobrze (nasuwa mi się tu pewne słowo „potęgujące emocje”, którego jednak nie chcę użyć ze względu na charakter bloga). Wyłącznym sponsorem była firma Tieto,  dzięki której całe wydarzenie miało taki a nie inny przebieg. Ale zacznijmy od początku.

Czym jest CodeRetreat? Jest to spotkanie warsztatowe, dla programistów, którzy w trakcie trwania ćwiczą programowanie w parach, tworzenie kodu wysokiej jakości i inne dobre praktyki. Spotkanie składa się z kilku sesji podczas których wspólnie tworzy się kod w parach. Nie chodzi o to aby, napisać jakiś działający program, tylko ćwiczyć pewne elementy programistycznego rzemiosła. Ktoś to ładnie porównał do wytwarzania garnków. Nie robimy konkretnego garnka, tylko uczymy się w jaki sposób ugniatać glinę. Więcej o zasadach CodeRetreat można przeczytać  na stronie CodeRetreat Wrocław  i na blogu Herbi’ego.

Inicjatorem całego zamieszania był Grzegorz Dziemidowicz który rzucił pomysł, który został podłapany przez Wrocław JUG i Grupę Kunszt. CodeRetreat z założenia powinien być bezpłatny i tak też było. Organizatorzy wykonali kawał dobrej roboty. Brawo!

Wydarzenie odbywało się w Hotelu Patio we Wrocławiu. O 8.00 rano była rejestracja uczestników. Przyszło 51 z 60 zarejestrowanych osób, mimo wielu e-maili proszących o potwierdzenie przybycia. Nie przyszedł nikt z listy rezerwowej, a szkoda, bo było jeszcze trochę miejsca i nawet posłuchanie / przypatrywanie temu co się dzieje mogło by być całkiem pouczające. Po rejestracji można było się rozłożyć z komputerem na jednej z dwóch sal. Około 8.30 było przywitanie, parę słów o sponsorze i wytłumaczenie zasad. Następnie dobraliśmy się w pary i o 9.00 zaczęliśmy kodować. Pretekstem do pisania była Gra w życie.

Na początkowych sesjach trafiałem na początkujących w temacie TDD (które między innymi ćwiczyliśmy), wiec dzieliłem się swoją wiedzą. Nie znaczy to, że nic z tego nie wyniosłem, bo zawsze można się choćby nowego skrótu klawiaturowego nauczyć, lub innego toku myślenia. Później trafiałem na osoby z podobnym do mojego poziomem rozeznania tematu i można było już coś konkretniejszego poćwiczyć. Po każdej sesji kodowania był czas na retrospektywę, podczas której dzieliliśmy się swoimi spostrzeżeniami i odczuciami podczas wspólnego kodowania.

Po 3ciej sesji był obiad i dłuższa przerwa. Jedzenie było dobre i z deserem, przygotowane przez hotel. Po przerwie Szczepan Faber prezentował jedną ze szkół mokowania w testach. Dzięki temu w kolejnych sesjach postanowiłem skorzystać z mockito i w końcu miałem okazję je poznać (przynajmniej podstawy). Na przyszłość mogła by być jeszcze jedna tego typu prezentacja.

Całość skończyła się planowo przed 17.00. Pod koniec było losowanie gadżetów od sponsora, podsumowanie i dyskusja na temat co się podobało, a co nie. Był jeszcze pomysł zostania i zrobienia jeszcze jednej sesji, ale chętni się nie znaleźli. Sześć sesji kodowania okazało się wystarczające i ja pod koniec miałem już dość.

Wieczorem była jeszcze impreza integracyjna w klubie Ambra (podziemia hotelu Patio). Było dużo piwa do odebrania przy barze, więcej niż nasza moc przerobowa mogła obsłużyć. Na imprezie można było spokojnie porozmawiać o sprawach organizacyjnych, planach na przyszłość itp. To był bardzo udany dzień i wieczór.

W trakcie całego dnia poznałem różne podejścia w jaki sposób można ugryźć dany problem i nie sądziłem, że na tyle sposobów można go rozwiązać. Stwierdziłem również, że nie mógłbym razem z Szymonem w parze pracować. Tzn. On twierdzi, że się da, tylko musielibyśmy trochę spoważnieć i bardziej profesjonalnie do tego podejść. Wydaje mi się, że tak by musiało być.

Co ciekawsze jeszcze to, że podczas sesji gdzie trzeba było pisać kod na maks 4 linijki było bardzo ciężko. To ograniczenie bardzo utrudniało myślenie i pisanie. Jednak podczas kolejnego innego ćwiczenia, po fazie refaktoryzacji, udało nam się osiągnąć 4linijkowe metody, przy czym to nie było celem ćwiczenia, tylko tak wyszło samo z siebie naturalnie. Niektórzy na retrospektywie mówili, że udawało im się niemal wszystkie rzeczy na raz otrzymywać i nie sprawiało to problemu. Trzeba dążyć do takiego ideału.

Poniżej co udało mi się poćwiczyć / poznać na CodeRetreat:
  • Programowanie w parach
  • TDD
  • Mockito
  • Ping pong pair programming
  • Tworzenie kodu maks 4 linijki na metodę i 4 metody na klasę
  • Pisanie kodu bez if’ów
  • Pisane bez użycia myszki

Podczas warsztatów nie udało mi się wszystkich proponowanych technik poćwiczyć, ale będę w wolnej chwili próbował rozwinąć temat. Moja lista TODO:
  • Napisanie gry w życie bez używania liczb
  • Szersze poznanie Mockito i innych tego typu wynalazków
  • Poćwiczyć pisanie bez if’ów
  • Więcej skrótów klawiaturowych poznać
  • Pisanie z wykorzystaniem obiektów immutable

Podsumowując polecam bardzo innym uczestnictwo w tego typu warsztatach. Nawet osoby mające na co dzień możliwość programowania w parach znajdą coś dla siebie (nowe osoby do pary, nowe spojrzenie na pewne sprawy). Również osoby kompletnie zielone z TDD i z programowania w parach mogą bardzo wiele się nauczyć dzięki CodeRetreat. Na razie nie ma jeszcze konkretnych planów na kolejną taką imprezę, ale mam nadzieję, że jeszcze kiedyś będę mógł uczestniczyć w tego typu wydarzeniu.