TopConf 2012

Wszyscy wierzymy w bezstronność serwisu www.random.org, jednakże po raz drugi z rzędu za jego sprawą (oraz liderów WJUG) udało mi się wyjechać na zagraniczną konferencję. Tegorocznym celem okazał się Tallinn i odbywający się tam w pierwszych dniach listopada event TopConf 2012. 31 października wyruszyłem w osiemnastogodzinną podróż autokarem do stolicy Estonii. Wszelkie komentarze uprzedzę stwierdzeniem, że nie znalazłem dogodnego połączenia lotniczego gwarantującego mi uczestnictwo w porannych wykładach pierwszego dnia imprezy. Pod względem organizacyjnym konferencja okazała się bliźniaczo podobna do ubiegłorocznej GOTO Prague, relacje z której znajdziecie na niniejszym blogu. Dość jednak słów na temat logistyki – przejdźmy do opisu wyróżniających się wykładów.

Dzień pierwszy

Konferencję oficjalnie rozpoczął John-Henry Harris opisując proces projektowania modeli zabawek w firmie Lego. Wystąpienie utrzymane w bardzo zabawnym stylu, pokazujące istotę kreatywności oraz sposobność czerpania inspiracji z otaczającego Nas świata (np. koparka). Lego kładzie ogromny nacisk na jakość wypuszczanych produktów oraz ich perfekcyjne wykonanie. Modele powinny wytrzymywać wysokie temperatury, co weryfikowane jest poprzez opiekanie gotowego prototypu w piekarniku :).

Głodny wiedzy technicznej, postanowiłem jeszcze raz usłyszeć Vaclav’a Pech’a i “Unleash your processor(s)”. Prezentacja nie zmieniła się przez ostatni rok, jednakże zachęciła mnie do upgrade’u grubych klientów zaimplementowanych w Java’ie do JDK7 i skorzystania z Fork/Join Thread Pools. W implementacji Fork/Join każdy wątek posiada swoją własną kolejkę zadań, przez co wykonywanie dużej ilości krótkich task’ów nie powoduje opóźnień wynikających z blokowania końca współdzielonej kolejki (charakterystyka poprzednich wersji JDK i Executors#newFixedThreadPool(int)). BTW, organizator udostępnił niektóre prezentacje na głównej stronie konferencji w dziale “Conference program”.

Na następnej prelekcji Jakub Nabrdalik przestrzegał przed pułapkami, jakie niesie za sobą niewłaściwie stosowany Test Driven Development. Część uwag, takich jak np. Assertion Roulette, znałem już wcześniej. Inne, odnoszące się do ciągłego mock’owania serwisów zależnych, pisania jedynie testów integracyjnych oraz nadmiernego zliczania wywołań funkcji, wydały mi się sensowne i postaram się kierować nimi na co dzień.

Hitem dnia okazała się dla mnie prezentacja Alvin’a Richards’a “MongoDB Design Decisions and Use Cases”. Wystąpienie miało na celu ogólne przedstawienie produktu oraz jego możliwości. Do najciekawszych zaliczyłbym niemal liniową skalowalność, różne poziomy commit’owania (od fire & forget, przez znane z RDBMS redo log, aż po replikację zmian na zapasowe instancje) i automatyczną reallokację danych w celu zrównoważenia obciążenia wewnątrz klastra. Dzięki zastosowanemu modelowi danych JSON, MongoDB nie musi implementować rozproszonych operacji JOIN ani standardu 2PC, gdyż wszystkie dane powiązane z konkretnym dokumentem przechowywane są na jednym węźle. Alvin zdradził, że pięć instytucji finansowych zaimplementowało swoje systemy typu ERP lub CSM w oparciu o MongoDB.

Bardzo mieszane uczucia zawładnęły mną po wysłuchaniu prezentacji “What’s new in JEE 6. Spring ends, Summer comes?” Michała Szkopińskiego. Wystąpienie zawierało kilka ciekawych informacji, takich jak dążenie Oracle i IBM do konsolidacji JVM w wersji 8, nowe podejście odnośnie deployment’u aplikacji JEE7 w chmórze (automatyczne tworzenie i konfiguracja serwisów JDBC i LDAP – dobrze zrozumiałem?), oraz rozszerzanie zasobów w przypadku przekroczenia zdefiniowanego SLA. Z technicznego punktu widzenia prezentacja pozostawiała wiele do życzenia – odejście od deskryptorów XML w stronę adnotacji, @Stateless, @PostConstruct i @PreDestroy nie należą do nowości w JEE6.

Dzień zakończyłem około północy w jednym z Tallinnskich pubów wraz z grupą około dwudziestu uczestników konferencji :).

Dzień drugi

Drugi dzień konferencji rozpocząłem od wysłuchania prezentacji Alvin’a Richards’a “Scaling for Humongous amounts of data with MongoDB”. Prawdę mówiąc nie maiłem wcześniej styczności z MongoDB, dlatego też wystąpienie przybrało dla mnie charakter bardziej hasłowy. Alvin pokazywał różne podejścia do tworzenia modeli danych JSON wraz z ich pozytywnymi oraz negatywnymi konsekwencjami. Wybór konkretnej reprezentacji danych (np. zagnieżdżanie vs. link’owanie powiązanych fragmentów dokumentu) znacząco wpływa na wydajność zapytań, ich liczbę oraz sposób wykonania. Mam nadzieję, że prezentacja zostanie zamieszczona na stronie konferencji i będę mógł się z nią jeszcze raz zapoznać podczas nauki MongoDB.

Na uwagę zasługiwała też trzygodzinna ścieżka poświęcona bezpieczeństwu systemów informatycznych. Podobno uczestnicy na żywo włamywali się na publiczne strony internetowe. Żałuję obecnie, że wybrałem inną serię wykładów. Polecam także przejrzenie listy przejętych stron na www.zone-h.org/archive oraz zabawę exploit’ami z Armitage :). Na konferencję zdecydowanie opłacało się zabrać własny komputer, gdyż organizatorzy w ramach konkursu udostępnili wewnętrzny, specjalnie spreparowany serwis do hack’owania.

Konferencję zakończył Dan North luźną, aczkolwiek pouczającą, prezentacją “Simplicity: the Way of the Unusual Architect”. Podczas implementacji nowych rozwiązań nie należy od razu opierać się o standardowy stos technologii J2EE. Kluczowe pytanie, na które powinno się udzielić odpowiedzi, to co muszę zrobić aby w najkrótszym czasie osiągnąć zamierzony cel. Proste rozwiązania z reguły okazują się najbardziej skuteczne :).

Pragnę jeszcze raz serdecznie podziękować WJUG i Marcinowi Zajączkowskiemu za umożliwienie mi wyjazdu na TopConf 2012.

GOTO Prague 2011

GOTO Prague LogoCzwartego października otrzymałem mail’a od Marcina Zajączkowskiego z zaproszeniem na konferencję GOTO Prague 2011. Pierwotnie darmowa wejściówka WJUG trafiła do Artura Wójcika, lecz okazało się, że nie uda mu się wziąć udziału w imprezie. Zachwycony wiadomością od Marcina, zaplanowałem dwudniowy urlop i przystąpiłem do organizacji wyjazdu.

W poniedziałek 21 listopada wyjechałem pociągiem z Warszawy, aby dotrzeć do centrum Pragi następnego dnia o 07:40 rano. Podróż w wagonie sypialnym wspominam dość komfortowo, chociaż jestem zbyt długi na standardowe łóżka PKP. Miejsce konferencji organizatorzy wybrali znakomicie. Ze względu na lokalizację hotelu Dorint Hotel Don Giovanni zaraz przy stacji metra, nie miałem żadnych problemów z dojazdem.

Szacuję, że w konferencji brało udział maksymalnie 150 osób. Powodów niewielkiej popularności doszukiwałbym się w cenie oraz niedawno zakończonym Devoxx’ie czy też JDD.

Rozpoczęła się pierwsza prezentacja… Erich Gamma i “Design Patterns – Past, Present & Future”. Wystąpienie miało na celu określenie dalszego rozwoju wzorców projektowych oraz ich pozycji w obecnej inżynierii oprogramowania. Nadarzyła się także chwila refleksji, w której to Erich żartobliwie zasugerował wykreślenie Singleton’a ze zbioru wzorców. Często nadmierne jego wykorzystywanie nie prowadzi do odpowiedniej strukturyzacji kodu, a usunięcie Singleton’a lub Mediator’a zajmuje całe tygodnie. Erich wspomniał także o konieczności projektowania przejrzystego API, które jest na tyle stabilne, aby nie ulegało modyfikacji z każdą nową wersją oprogramowania. Z prezentowanego materiału szczególnie przypadł mi do gustu pomysł obsługi żądań asynchronicznych typu: promise.then(completitionHandler, errorHandler, progressHandler). Na koniec wystąpienia Erich wyświetlił listę podstawowych, obecnie najbardziej użytecznych według niego wzorców: Composite, Strategy, State, Command, Tempalte Method, Null Object (nie udało mi się niestety zapisać wszystkich :(). BTW po zakończeniu każdej z prezentacji słuchacze wychodzący z sali mieli możliwość oceny prelekcji poprzez wybranie na ekranie iPhone’a jednej z trzech buziek – uśmiechniętej, poważnej i smutnej. Nie wiem czy organizatorzy opublikowali gdzieś wyniki owej ankiety.

Podczas głównej części konferencji równolegle odbywały się trzy prezentacje w sąsiadujących pomieszczeniach. Wystąpienia podzielono tematycznie na cztery ścieżki: Agile, Architecture, Solution Track oraz Technology. Swojego udziału nie ograniczałem do jednej ścieżki. Pierwszego dnia najbardziej podobała mi się prezentacja Vaclav’a Pech’a “Unleash your processor(s)”. Vaclav zachęcał do wielowątkowego programowania oraz korzystania z biblioteki GPars (http://www.gpars.org). W pamięci utkwił mi następujący fragment “niebezpiecznego” kodu:

public class ClickCounter implements ActionListener {
   public ClickCounter(JButton button) {
      button.addActionListener(this); // ClickCounter instance might not be constructed.
   }

   public void actionPerformed(final ActionEvent e) {
      ...
   }
}

GOTO Prague Bad Words

Na koniec pierwszego dnia konferencji, organizatorzy zaplanowali imprezę integracyjną w odremontowanej piwnicy w centrum Pragi. Wąskie, okrągłe stoły nie sprzyjały integracji w szerszym gronie. Po wypiciu zaledwie jednego piwa opuściłem lokal wraz z czterema wcześniej poznanymi Polakami w celu zwiedzenia Mostu Karola oraz zabawy w lokalnych pubach. Cała wyprawa zakończyła się szczęśliwym powrotem (ostatnim metrem) do hotelu Fortuna Rhea gdzie miałem nocleg.

Drugi dzień konferencji okazał się zdecydowanie bardziej udany. Prelegenci otrzymywali ode mnie prawie same uśmiechnięte buźki :). Na szczególną uwagę zasługuje prezentacja Attila Szegedi’a “JVM performance optimizations at Twitter’s scale” (slajdy do pobrania ze strony konferencji http://gotocon.com/prague-2011/schedule). Po jej wysłuchaniu doszedłem do wniosku, że koniecznie muszę pogłębić wiedzę z zakresu optymalizacji JVM. Wiedza ta przydać się może nie tylko podczas tuningu aplikacji, lecz także w trakcie jej modelowania. Attila uświadomił mi, iż dziedziczenie klas niesie za sobą narzut pamięciowy.

Konferencja powoli dobiegała końca, gdy na scenę wyszedł Kevlin Henney z prezentacją “Cool & Useless”. Wystąpienie to porównać można do naprawdę niezłego kabaretu. Kevlin pokazywał cały szereg przykładów ciekawych, lecz w znacznym stopniu bezużytecznych projektów oraz fragmentów kodu. Szczególnie w pamięci zapadł mi następujący algorytm sortowania, mistrzostwo świata :).

#!/bin/bash
function f() {
   sleep "$1"
   echo "$1"
}

while [ -n "$1" ]
do
   f "$1" &
   shift
done
wait

Do Warszawy wyjechałem jeszcze tego samego dnia wieczorem. 24 listopada o 09:00 rano miałem już przed oczami “ukochaną” konsolę WebLogic 11g.

Na koniec pragnę bardzo serdecznie podziękować Marcinowi Zajączkowskiemu za zorganizowanie darmowej wejściówki! Tak trzymać!

HHH-4073 and so you code…

Dłuższy czas nie pisałem nic na blogu. Na fakt tez złożyło się szereg okoliczności – GeeCON, nawałnica w pracy związana z produkcyjnym uruchomieniem trzyletniego projektu, oraz nowe odcinki seriali Californication i Stargate Universe. Główną przyczyną moich zaniedbań stało się jednak aktywne uczestnictwo w open source’owym projekcie Hibernate Envers (moduł wchodzący w skład Hibernate Core).

Zaczęło się od krótkiego tutorialu dotyczącego serwera kontroli wersji Git, fork’u repozytorium Hibernate oraz ciężkich starć z Gradle. Po około tygodniu zmagań z przygotowaniem środowiska wrzuciłem pierwszą zakończoną sukcesem poprawkę HHH-4073. Nie czekając na oklaski rozwiązywałem dalej HHH-4787, HHH-5276, HHH-5808 oraz HHH-6069. Doszedłem w końcu do pierwszego poważnego pull request’u, w którym to zaimplementowałem (z pomocą team leader’a Adama Warskiego) mechanizm śledzenia zmodyfikowanych, w ramach kolejnych rewizji, encji – https://github.com/hibernate/hibernate-core/pull/84.

Co będzie dalej zobaczymy… Muszę przyznać, że zastanawianie się dobre kilkanaście minut nad pojedynczą linijką kodu oraz wymiana doświadczeń z innymi, bywają bardzo pouczające.

Zdjęcie z GeeCON 2011 (University Day):

Łukasz Antoniak, GeeCON 2011

1000 odwiedzin

17 stycznia 2011 – na panelu administracyjnym WordPress liczba odwiedzin przekroczyła tysiąc. Nie wliczam tutaj własnych wizyt na blogu. Pierwszy wpis ukazał się 21 maja 2010, kiedy to zaczynałem przygotowania do egzaminu SCBCD. Niewątpliwie największą popularnością cieszy się post pod tytułem “Budowanie aplikacji Java EE wykorzystując Apache Maven”. Dziękuje wszystkim i mam nadzieje, że moje tutoriale i miniartykuły okazały się Wam pomocne.

Zabawa w administratora

Wczoraj miałem okazję zabawić się w młodego administratora Windows. Niestety moja wiedza na temat systemu firmy Microsoft, jego GUI oraz poleceń konsoli jest na tyle ograniczona, że postanowiłem odwołać się do wujka Google. Odnalazłem projekt UnxUtils (http://sourceforge.net/projects/unxutils), który udostępnia implementację Windows’ową szeregu popularnych narzędzi Linux’owych takich jak grep, ls, tail (znaleźć je można w podkatalogu usr/local/wbin). Programiki te bardzo uprzyjemniają proste czynności administracyjne. Polecam dodanie ich na ścieżkę $PATH. Przez projekt UnxUtils w dalszym ciągu nie wiem jak w Windows sprawdzić uprawnienia i właściciela danego katalogu :).

Mój backup UnxUtils (na wypadek padu SourceForge) znaleźć można tutaj.

Post odnośnie zabijania zdalnych, pozostawionych sesji Remote Desktop: http://kodethoughts.blogspot.com/2006/12/kill-remote-user-session-remotely.html.