25 lipca 2012

Kilka ciekawostek z Java Concurrency API w Java 7 od Packt

0 komentarzy
Trudno mi było uwierzyć, że dałem się namówić na kolejną recenzję książki z wydawnictwa Packt. Nie jestem ich fanem, a ich książki są zwykle zbyt lekkie merytorycznie, aby kilka ciekawostek, których doszukanie się i tak zajmuje sporo czasu, było w stanie zrekompensować mój ból.

Tym razem jestem mile zaskoczony zawartością planowanej książki o współbieżności w Java 7 - Java 7 Concurrency Cookbook. Wydaje się być odpowiednio dopasowana merytorycznie do moich potrzeb, a że o współbieżności mowa (z którą mam niezwykle rzadko okazję się spotykać), tym lepiej dla niej (i mnie)!

Jako recenzent techniczny odpowiadam za jej właściwą zawartość merytoryczną i jakkolwiek pierwszy rozdział mógłbym z uciechą wrzucić do kosza, to kolejne zdają się bronić bez większego problemu.

Mam za sobą przeczytane 3 rozdziały (z ośmiu) i zaczynam z niecierpliwością oczekiwać lektury kolejnych. Właśnie w rozdziale 3 pojawiły się java.util.concurrent.CyclicBarrier oraz mój ulubieniec z Java 7 - j.u.c.Phaser.

Sposób przekazywania wiedzy przez autora nie nastraja do zagłębniania się w treść, a raczej służy jako zajawka do dalszego studiowania na własną rękę. Najbardziej "rozbraja" mnie prezentacja kodu źródłowego, który poszatkowany jest na kilkanaście punktów, które okraszone są skromnym opisem, często wręcz trywialnym nawet dla laika. Zatem, czytasz co będzie, demonstracja tego, co miało być i kolejny punkt. Dodając do tego, opisywanie konstrukcji "Stwórz klasę, która implementuje Runnable" i pojawia się kawałek początku klasy z "implements Runnable" i ręce opadają. Trzeba przywyknąć.

Z ciekawostek, które musiałem sprawdzić na własną rękę, zanim wprowadziłem zmiany w obecnej wersji, to klasa j.u.c.TimeUnit (którą swego czasu przedstawił mi Tomek Nurkiewicz), multi-catch oraz kombinacja TimeUnit z Phaser, a także j.u.Collections.nCopies.

Poniżej przykładowy kod, który służył jedynie celom sprawdzenia API. Nic ponadto! I niech tak zostanie.

package pl.japila.java7;

import java.util.Collections;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Phaser;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class Main {

    public static void main(String[] args) {
        System.out.println("Millis in a day: " + TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS));
        System.out.println("Sleeping for 2 secs");
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Collections.nCopies(3, true));
        CyclicBarrier barrier = new CyclicBarrier(1);
        try {
            barrier.await();
        } catch (InterruptedException | BrokenBarrierException e) {
            e.printStackTrace();
        }
        Phaser phaser = new Phaser(2);
        try {
            phaser.awaitAdvanceInterruptibly(phaser.arrive(), 2, TimeUnit.SECONDS);
        } catch (InterruptedException | TimeoutException e) {
            e.printStackTrace();
        }
    }

}

06 lipca 2012

Confitura 2012

4 komentarzy
Świetna sprawa te dzieci. Jestem pełen podziwu dla osób, którym czas upływa na wychowywaniu 3 i więcej dzieci. Jakoś przy dwójce było co robić, ale przy trójce mam wrażenie, że to kosmos.

U mnie dwójka dużych pomaga przy wychowywaniu najmłodszego, więc przy stanie 4:1 (liczba wychowujących do wychowywanych) jest z pewnością łatwiej. Ot, choćby możliwość zostawienia młodego pod opieką córki czy syna - bezcenne!

Jak na zdrowego bobasa przystało, Maksym broi na maksa. Już pełza i podnosi tyłek do raczkowania, a przy przejściu przez granicę 9 miesięcy (3 dni temu!), kiedy to żona wyczytała, że powinien sam siadać, jakby na zawołanie zaczął siadać. Do tego stopnia, że kiedy jest w łóżeczku i oznajmia, że się obudził, albo że chce jeść, siedzi. Dużo radości!


Ach, zapomniałbym - jeśli potrzebujesz uporządkować sobie harmonogram dnia, dziecko okaże się nieocenione. Nie ma czasu na marnowanie dnia, bo za moment stałe momenty, których dzieciak zmarnować nie da. Żadna książka, szkolenie, planowanie nie może równać się z wychowywaniem dziecka. Polecam!

To już prawie tydzień od naszej konferencji społecznościowej - Confitury 2012. Obfitowała w wiele naj, możne nawet w same naj?! Tym bardziej mnie to cieszy, bo nie tylko, że nie uczestniczyłem w jej współtworzeniu, ale również nie przeszedłem sita kwalifikacyjnego z moimi wykładami o Clojure oraz lekkimi kontenerami Java EE - Apache TomEE i IBM WebSphere AS 8.5 Liberty Profile. Czyżby to było powodem, dla którego można nazwać ją naj?! Cóż, samo życie. Mało nie doszło do tego, że w ogóle nie pojawiłbym się na konferencji. Synuś Maksym zagwarantował pobudkę wczesnym rankiem, tak abym przed 9:00 był gotów do dnia, więc na rozpoczęcie Confitury jak znalazł.

I tak się zaczęło.

(Wrażenia na bieżąco można było podziwiać na moim kanale na twitterze - @jaceklaskowski)

Raczej spontanicznie pojawiłem się na konferencji od samego rana. Wpadłem po rozpoczęciu, około 10 i po kilku powitaniach ruszyłem na pierwszą prezentację dnia - "Clojure praktycznie. Clojure jako silnik szablonowania HTML" Łukasza Barana. Byłem mile zaskoczony widząc prezentację o Clojure w harmonogramie konferencji, ale zły (na siebie wyłącznie!), że to nie ja ją prowadzę. W zasadzie z takim lekko agresywnym nastawieniem wszedłem na wykład, chcąc się przekonać, że to ja powinienem to poprowadzić. Pewnie to podejście miało wpływ na odbiór, bo zupełnie mi się niepodobało. Wybacz Łukasz i zrzuć to na barki mojej złości, ale prezentacja była nudna, monotonna i w ogóle nie zachęcała do wejścia w Clojure. Powiem więcej - odrzucała od tego języka. Szkoda, bo ma potencjał, a rozmowy za kulisami utwierdziły mnie w przekonaniu, że prelegent nie przygotował się do tej roli. Pytałem ludzi, którzy siedzieli koło mnie dlaczego przyszli i jakie ich są wrażenia, i dostałem najpierw odpowiedź, że "Ja tutaj, bo kolega jest", aby później dowiedzieć się, że ani kolega, ani pozostali dwaj za mną, nie byli zachwyceni z prezentowanej treści. Noty były niskie, baaardzo niskie. Od wykładu sponsorowanego wymagam więcej. Ja straciłem czas.

Później poszedłem na Waldka Kota i jego "Invokedynamic = bardziej dynamiczna JVM", ale niestety nie dostałem się do sali - cała była wypełniona. Gratulacje Waldek. Po latach ciszy, należało Ci się. Ja niestety zmęczony upałem i staniem na korytarzu, odpuściłem. Później słyszałem głosy, że nic nie było widać, za duszno i trochę za mało programowania. Żałuję, że nie mogłem się przekonać na własnej skórze, ale spokojniejszym po tych komentarzach. Dobrze było jednak móc zamienić słowo z Waldkiem później. Oby było go więcej i niechby jedynie rozprawiał o invokedynamic. Potrzebuję ich więcej!

Przez dłuższą chwilę bawiłem u Kuby Nabrdalika, który roztrząsał temat Grooviego, a wcześniej dodatków funkcyjnych do Javy. Szkoda, że zabrakło Clojure. Może, zgodnie z powtarzanymi tezami, przyjdzie mu poznać ten język w tym roku? Ciekawie prowadzona prezentacja, ale treść nie porywała. Zbyt wielki nacisk na bajeranckie slajdy, a kiedy przyszło do kodu źródłowego, za dużo na pojedynczym slajdzie, a często nawet zbyt skomplikowanie, aby było zachęcające. Pewnie świadomy ruch, aby zachęcić do Groovy i Grails. Mnie nie urzekło i przed wejściem Grails na scenę, uciekłem.

I w tym momencie miałem wracać do domu, do obowiązków, ale wymigałem się i zostałem. Do tej pory czuję razy na plecach. Wybacz Agatko!

Obiad był smaczny. Najadłem się do syta, a przy okazji nagadałem się ze znajomymi. Atmosfera boska!

O 14:10 wszedłem na długooczekiwanego Grzegorza Balcerka i jego prezentację "Jak i po co pozbywać się wzorców projektowych". Poznałem Grześka w Szczecinie i obiecywałem sobie zobaczyć go w akcji. Słyszałem już to i owo, więc tym bardziej nie mogłem doczekać się, co zobaczę. Dodając do tego jego książkę o Scali, którą napisał, bo...uczył się języka (!), liczyłem, że nauczę się wiele. Nauczyłem się. Czy wiele? Niekoniecznie. Najbardziej przypadł mi do gustu jego spokój, kiedy obrzucany obelgami o czelność forowania własnych myśli musiał się zmagać z gorącymi głowami Konrada i spółki. Nie podobała mi się treść prezentacji, więc tutaj duży minus dla Grześka. Jak potwierdziłem u innych uczestników, wielu zauważyło rozbieżność między tematem prezentacji a treścią i wielu oceniło ją jako najgorszą (!) Ja jednak znalazłem w niej kilka ciekawych kąsków prezenterskich, więc nie żałuję poświęconego czasu. Co mnie irytowało, to zachowanie publiki, która nie mogąc zgodzić się z tezami Grześka, próbowała deprecjonować jego zdolności do przekazywania wiedzy. Słychać było zarzuty w stylu "Dlaczego w ogóle śmiesz…", co przekreśla dalszą część pytania. Pytania o monady były niepotrzebne i nie wnosiły nic merytorycznego do spotkania. Niezgoda była wyczuwalna w powietrzu. Grzesiek opanowany próbował ratować sytuację, ale było za późno. Wypadło słabo, a publika również maczała w tym palce. Dla mnie było to o tyle pouczające, że nigdy wcześniej nie byłem na takiej prezentacji - jako prelegent i uczestnik - więc obserwowałem zachowanie obu stron i…będę teraz ostrożniejszy. Czego zabrakło u Grześka, to wzmiankowania, że "wzorce są uzupełnieniem cech języka o elementy, których brakuje mu, a istnieją w innych językach." Weźmy znaną mi Javę i Clojure - większość (wszystkie?) wzorce projektowe w Javie są próbą załatania braku domknięć i funkcji wyższego rzędu.

Później poszedłem na "Uwolnić się od "if"" Tomka Nurkiewicza. Temat zgodny z moim myśleniem, więc nie mogłem doczekać się posłuchać, co ma do powiedzenia. Bardzo interesująca i interaktywna prezentacja. Dużo zabawy i wiedzy. W taki sposób można spędzać całe weekendy, a nie tylko godzinę. Duże brawa dla Tomka za opanowanie i właściwe przedstawienie tematu. Czasami było trochę za bardzo kabaretowo, ale wspominam to jedynie dlatego, że sam nie miałem możliwości zaprezentowania swojego. Chciałbym móc wystąpić na Confiturze i być porównywanym merytorycznie z Tomkiem. Gość ma wiedzę i potrafi ją przekazać. Duże brawa! Jest od kogo się uczyć.

Po Tomku jeszcze kilka chwil na pogaduchach, aby przed kąpielą Maksyma (19:00) pojawić się w domu. Trochę żałuję, że nie mogłem uczestniczyć w Spoinie, ale mówią, że dobrze jest umiejętnie skończyć dobrą zabawę, aby były wyłącznie miłe wrażenia - ja takie mam!

Gratulacje dla prelegentów za chęć podzielenia się wiedzą (mimo moich krytycznych uwag). Gratulacje dla organizatorów za stworzenie bajecznej atmosfery wymiany wiedzy. Gratulacje dla uczestników za liczne przybycie i aktywny udział w prezentacjach (czasami nawet za aktywny). Poza temperaturą na zewnątrz i tłokiem w salach i na korytarzu brak innych uwag. Czekam na kolejną edycję, której nie zamierzam już przepuścić prezentacyjnie. Muszę się jedynie bardziej postarać.