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ć.

02 czerwca 2012

Softdevcon z 20 uczestnikami oraz ja z Clojure o współbieżności i testowaniu

14 komentarzy
Jakoś tak bez echa przebiegły przygotowania do konferencji softdevcon w Warszawie, na której przedstawiłem temat "O tym jak języki funkcyjne upraszczają testowanie i programowanie współbieżne - na przykładzie Clojure". Wejście miałem o godzinie 9:00, co przy bardzo specjalistycznym temacie wokół Clojure mogło stanowić nielada wyzwanie dla śpiochów.

Konferencja (chociaż przy takiej liczności, chyba raczej nie powinienem tego tak nazywać) odbyła się w czwartek, w budynku Millenium Plaza na Al. Jerozolimskich 123a, na 4 piętrze i już sama sala nie zachęcała do tłumnego przybycia - mogła pomieścić maksymalnie 40 osób i już przy tej liczbie dałoby się odczuć dyskomfort braku miejsca. Kiedy się w niej pojawiłem trochę mnie zmroziło. Wyglądało skromniej niż nasze spotkania WJUGowe. Cóż było robić?! Zacząłem obawiać się braku zainteresowanych. Co nie było dalekie od prawdy.

O 8:45 było już 5 osób, więc dawało mi nadzieję, że to jest właśnie kwiat polskiej branży informatycznej, bo wszystko sprawiało, że myślenie, że uczestnicy są właśnie dla Clojure, mogło być uzasadnione. Na 9:00 sala była "wypełniona" dwunastoosobową grupą zaintrygowanych (przynajmniej tak chciałem i chcę o nich myśleć).

Zaprezentowałem około 10 slajdów wprowadzających, głównie przygotowujących do sesji kodowania na żywo. Jak uzmysłowił mi kolejny prelegent - Jakub Binkowski, który wyśmienicie przedstawił temat "Programowanie równoległe - projektowanie i testowanie" (na platformie .Net) - należało rozpocząć od prezentacji gotowego kodu w IDE, aby potencjalnie zejść na poziom Clojure REPL. Ja jednak nie wyłapałem tej potrzeby i odwróciłem kolejność. Zresztą pamiętam podobne uwagi na poprzednich konferencjach i nie wyciągnąłem z tego właściwych wniosków! Oj, niedobrze, niedobrze.

Wyniki mojej prezentacji można znaleźć w podsumowaniu, które przygotowali organizatorzy. Pozostawię je bez komentarza, pozwalając na własne wnioski.

"Podsumowanie ankiet uczestników - sposób przedstawienia tematu (na podstawie czternastu wypełnionych ankiet)
- 4 osoby oceniło prelekcję jako bardzo dobrą (29%)
- 9 osób oceniło prelekcję jako dobrą (64%)
- 1 osoba oceniła prelekcję jako słabą (7%)

Najczęściej pojawiające się komentarze:
- mało czasu (czyli jest zainteresowanie! może warto zainwestować w warsztaty w tej tematyce - kilka osób wyraziło chęć dalszego zagłębienia się w temat)
- powinno pojawić się więcej informacji na temat 'współpracy z Java'
- 'brak IDE'
- dobry sposób prezentacji
- jasne i klarowne przedstawienie tematu
- wzbudzenie zainteresowania - interakcja z uczestnikami"


Zostałem na kolejnej prezentacji Jakuba o programowaniu równoległym. Doskonale przygotowane slajdy, dykcja, przygotowanie merytoryczne i właściwe przeplatanie slajdów z przykładami sprawiło, że bez wahania mógłbym od razu wystawić najwyższą notę. Kiedy dodać, że przedstawiał programowanie giełdy, natychmiast ujął mnie za serce! Trudno byłoby przebić Jakuba w jakości prezentacji. Przyglądałem mu się chwytając każdy jego gest, zmianę intonacji, przejścia między slajdami a przykładami, aby samemu wdrożyć kilka tricków w swoim repertuarze prezenterskim. Przez 1 godzinę nauczyłem się więcej niż przez ostatnie własne publiczne wystąpienia. Podobało mi się!

Nie szukałem specjalnie wpadek (może na początku, kiedy zobaczyłem slajdy i gościa, sądząc, że będzie nadrabiał miną, bo były takie przesłodzone), ale na minus mógłbym wskazać metody, którym uzasadniał swoje tezy, które kilkukrotnie nie przypadły mi do gustu. W wielu miejscach były w stylu (baaaardzo upraszczam) "Bo tak jest dobrze i koniec, a skoro ja mówię, to wiem". Z wieloma tezami się nie zgadzałem, ale że nie odpuszczałem sobie z pytaniami do Jakuba, wielokrotnie gryzłem się w język, aby nie spacyfikować prezentacji. W końcu to nie ma być dyskusja wyłącznie między nami. Widząc nikłe zaangażowanie uczestników, odpuszczałem z krytyką, zostawiając sobie jedynie możliwość zadawania pytań uzupełniających. Dodatkowo, na minus położę całkowitą ignorancję języka funkcyjnego F#, bo..."Jestem zawalony robotą." usłyszałem. Porażka! Szczególnie, że F# jest językiem pierwszej kategorii, obok C#, na platformie .Net i wspieranym przez najnowszą wersję Visual Studio. Kiedy zobaczyłem pewne funkcyjne konstrukcje w C# - użycie typu Func (podobnie jak w Scali) oraz wyrażenia lambda (podobnie do tych z Java 8) - aż się prosi o F#. A jednak "zawalenie robotą" bierze górę :(

Możliwość poznania nowych osób uważam za bezcenne i to jest głównym motorem, aby uczestniczyć w konferencjach. Nauczyłem się, aby wyznacznikiem jakości konferencji była liczba osób, które poznam. W zasadzie uważam, aby czas konferencyjny spędzić na ciągłej rozmowie - niechby była o niczym, ale interakcja z żywą istotą informatyczną wynoszę na plan pierwszy.

Dowiedziełm się, że kilku uczestników mojego wystąpienia wyraziło zainteresowanie tematem - w tym jedna firma! - co dobrze wróży na przyszłość. Widać, że wciąż nie prezentuję właściwych argumentów na użycie Clojure, ale mój upór zdaje się zamieniać w realne działania u obserwatorów. I o to właśnie chodzi - zainteresowanie tematem, aby samodzielnie móc ocenić przydatność narzędzia - języka funkcyjnego Clojure, który jest "niewielką biblioteką do programowania współbieżnego" (to wersja dla programistów Java) i pozwala konstrukcjami funkcyjnymi na łatwiejsze testowanie (to wersja dla napaleńców TDD i okolic). Jak można było usłyszeć (trochę nawet doświadczyć, kiedy zszedłem na poziom REPL) na mojej prezentacji "O tym jak języki funkcyjne upraszczają testowanie i programowanie współbieżne - na przykładzie Clojure" łatwość testowania i użycia współbieżności w naszych aplikacjach są niezwykle zbieżne, żeby nie napisać, że są nierozłączne. Czym bardziej testowalny kod, tym łatwiej go użyć wespół z równoległością i na odwrót. Ciekawym Twojej opinii.

I pytanie podsumowująco-zaczepne: Czy kiedykolwiek programowałeś/-aś aplikacje korzystając ze współbieżności? Spodziewam się, że większość niestety odpowie "Tak, ale czasy, kiedy to było zaliczyć można do średniowiecza". Zastanawia mnie, dlaczego programiści Javy mając do dyspozycji wsparcie Javy dla współbieżności - chociażby ostatnie zmiany w pakiecie java.util.concurrent - tak niewiele wiedzą i z takim oporem korzystają z tego. Dlaczego? Tak bardzo ograniczani jesteśmy przez szkielety programistyczne (ang. frameworks)?! Czy to musi nas, aż tak ograniczać?!

29 maja 2012

Warsztaty z IBM WebSphere na PWSZ w Tarnowie - dzień 1

0 komentarzy
W ramach zadania "Przyszłość młodych w naszych rękach. Program zacieśniania współpracy uczelni z pracodawcami", które jest częścią projektu KLEKSS BIS Kapitał Ludzki - Edukacyjny Komponent Strategii Szkoły na uczelni PWSZ w Tarnowie mam okazję w ciągu 2 dni przedstawić aktualny stan zaawansowania prac IBM wokół nowych technologii - BPMN 2.0, Java EE 6 oraz aplikacji mobilnych z produktami, których data wydania jest zaplanowana dopiero na...15 czerwca! Mam okazję zaprezentować IBM WebSphere Business Process Manager V8, IBM WebSphere Application Server V8.5 Liberty Profile oraz IBM Worklight V5.0. Jako uzupełnienie stosu technologicznego, dodałem jeszcze programowanie funkcyjne z Clojure i dwudniowy maraton technologiczny trwa na dobre w Tarnowie! Wszystko praktycznie, z tworzeniem aplikacji na żywo i całkowicie bez slajdów - nie wliczając tego wprowadzającego o mnie :-)


Najbardziej podkręcony jestem możliwością zaprezentowania tych wszystkich technologii i produktów na żywo. Nie obyło się bez potknięć, chwil zadumy, ale mam wrażenie, że ogólnie poszło bardzo sprawnie.

O dziwo, jedynie jedna osoba wiedziała, a na drugiej trochę wymusiłem, określenie się z oczekiwanymi stawkami. Padło magiczne 4k PLN netto, co od razu skarciłem, że mi dumpingują rynek (!) Zakazałem mówić o tak niskich kwotach głośno i rozważyć bezpośrednie połączenie z Warszawą (chwilowo przerwane w Krakowie na okres remontu) jako potencjalny argument za większymi stawkami. Liczę na zastosowanie rad w działaniu.

Dzień 1 z BPMN 2.0, Java EE i IBM WebSphere


Dzisiaj miałem okazję przedstawić BPMN 2.0 oraz Java EE 6 z produktami IBM. Jutro zaplanowałem aplikacje mobilne (poprosiłem uczestników o przyniesienie swoich smartfonów), które będę tworzył w Javie (Android) oraz HTML5, CSS3 i JavaScript (IBM Worklight z użyciem PhoneGap, a w zasadzie Apache Cordova). Na podsumowanie turnee nie mogło zabraknąć Clojure. Nie wyobrażam sobie wystąpień publicznych bez jego udziału i nie mogło być inaczej w Tarnowie.

Podsumowaniem każdej trzygodzinnej sesji jest ankieta, którą uczestnicy wypełniają ku uciesze organizatorów i wykładowcy. Zebrałem wyniki i jestem trochę nimi zaskoczony. Myślałem, że to Java EE 6 wyjdzie mi dużo lepiej, a okazuje się, że udało mi się oczarować uczestników moją wiedzą o BPMN 2.0. Poniżej zestawienia średnich. Ciekawym Twojej interpretacji, gdzie wskazuje się największe niedociągnięcia (tych szukam najbardziej, aby kolejne inicjatywy tego pokroju były o niebo lepsze).

Wyniki pokazują potencjał naukowy drzemiący w studentach 2 roku PWSZ w Tarnowie i mogą stanowić ciekawy materiał badawczy dotyczący przyszłych adeptów informatyki praktycznej w Polsce. Grupa nie jest wielka, ale lepsze to niż nic. Prosiłem ich o najszczerszą szczerość.

Modelowanie procesów bieznesowych BPMN 2.0 w IBM WebSphere Business Process Manager V8.0


Uczestników (podpisanych na liście obecności): 22

Sposób prowadzenia zajęć: 13 osób na "Tak, odpowiadał" z 7 za "Średnio odpowiadał".

Wiedza merytoryczna (średnia): 5,23 (maksymalnie 6)

Umiejętność przekazywania wiedzy (średnia): 5,14 (maksymalnie 6)

Chętnie odpowiadał na pytania i udzielał wyjaśnień: wszystkie 22 osoby na "Tak".

Program wykładu: 16 osób na "Odpowiedni" z 6 osobami na "Za mało nasycony".

Oczekiwania: 4,5 (maksymalnie 6)

Uwagi:
  • więcej zastosowań programu (BPM)
  • przykłady gotowych projektów w BPM
  • przedstawienie gotowego projektu
  • przykłady z życia wzięte
  • więcej przykładów gotowych procesów biznesowych
  • przykłady praktyczne modelowania procesów biznesowych oraz aplikacji od strony klientów
  • gotowy projekt
  • sensowne użycie programu
  • realne przykłady biznesowe z projektów
  • krótki przegląd narzędzi BPMN
  • większy nacisk na programowanie
  • dokładnie sprecyzowany model rzeczywistego projektu biznesowego
  • wyjaśnienie modelowania procesu biznesowego na konkretnym przykładzie biznesowym
O czym innym wartoby posłuchać?
  • aplikacje mobilne
  • 2 osoby za "Programowanie w Javie"
  • 2 osoby za "Różne języki"

Java EE 6 z IBM WebSphere Application Server V8.5 i Eclipse IDE


Uczestników (podpisanych na liście obecności): 18

Sposób prowadzenia zajęć: 17 osób na "Tak, odpowiadał" z 6 za "Średnio odpowiadał".

Wiedza merytoryczna (średnia): 5,23 (maksymalnie 6)

Umiejętność przekazywania wiedzy (średnia): 5,09 (maksymalnie 6)

Chętnie odpowiadał na pytania i udzielał wyjaśnień: wszystkie 23 osoby na "Tak".

Program wykładu: 2 osoby na "Zbyt przesycony", 18 osób na "Odpowiedni" z 3 osobami na "Za mało nasycony".

Oczekiwania: 4,5 (maksymalnie 6)

Uwagi:
  • Więcej rozbudowanych przykładów
  • zagadnienia z projektowania serwisów internetowych opartych na Java EE i EJB
O czym innym wartoby posłuchać?
  • 3 osoby za "Tworzenie aplikacji mobilnych"
  • języki programowania
  • 4 osoby za "Java od podstaw"
  • AWT/Swing
  • Spring MVC

22 maja 2012

Clojure na WJUGu - mogło być więcej "gdzie" zamiast "jak"

4 komentarzy
Właśnie zbieram myśli po moim dzisiejszym spotkaniu WJUGowym, gdzie w gronie 19 osób mogłem przedstawić swoje postrzeganie budowania aplikacji korporacyjnych Java EE 6 z Clojure. Jak wspominałem, celem nie było przekonanie o słuszności zastosowania Clojure w Java EE 6, ani całkowite zaniechanie Javy na rzecz Clojure przy budowaniu aplikacji webowych, a jedynie zainspirowanie myśleniem wokół języków funkcyjnych do ich rozwijania na przykładzie Clojure.

Klimat spotkania sprawił, że miałem możliwość przedyskutowania kilku kwestii z uczestnikami. Padały wątpliwości o sensowność Clojure jako język programowania w projektach - a że za młody, niewiele doświadczeń z nim, itp., ale również stawiano pytania o miejsca, w których mógłby się odnaleźć. I tu znajduję pewną lukę w moim rozumowaniu Clojure - za mało było "gdzie" zamiast "jak". To cenna lekcja, której nie doświadczyłbym, gdyby nie spotkanie. Mam zadanie na Confiturę 2012! Oby tylko temat Clojure został przyjęty. Głosujcie na temat "Dlaczego nie programujemy funkcyjnie? (z Clojure w tle)" na Vote 4 Papers.

Dziękuję wszystkim uczestnikom za przybycie i za stworzenie atmosfery umożliwiającej wymianę poglądów. Właśnie tego potrzebowałem w mojej karierze wokół Clojure.

21 maja 2012

Jutro spotkanie Warszawa JUG ze mną i Clojure

0 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG)
Warszawska Grupa Użytkowników Javy (Warszawa JUG) zaprasza na 94. spotkanie, które odbędzie się w najbliższy wtorek, 22 maja o godzinie 18:00 w sali 3180 Wydziału MIM UW przy ul. Banacha 2 w Warszawie.

Temat: Budowanie aplikacji (Java EE 6) z Clojure
Prelegent: Jacek Laskowski

Spotkanie ma być okazją do poznania Clojure od strony jego wsparcia dla bytów javowych. Aplikacje korporacyjne Java EE korzystają z mechanizmów języka Java, więc jeśli tylko udowodnimy tezę, że można tworzyć byty javowe w Clojure i to całkiem przyjemnie, to całkiem przyjemne może być budowanie aplikacji korporacyjnych z wykorzystaniem obu - Java EE 6 i Clojure.

OSTRZEŻENIE: Należy oczekiwać użycia Java EE jedynie jako tła dla wprowadzenia do Clojure. Dla wielu użycie Java EE w tytule może być zdecydowanie na wyrost i służy autorowi jako narzędzie do przykucia uwagi. Równie dobrze możnaby użyć innego chwytliwego terminu, które
kojarzy się z Javą.

Jacek Laskowski jest założycielem i współprowadzącym Warszawskiego JUGa. Interesuje się Javą w wydaniu podstawowym (Java SE) i korporacyjnym (Java EE), a od kilku lat zadużony w programowaniu funkcyjnym z Clojure (i w tle F#). Swoje przemyślenia publikuje na polskojęzycznym blogu Jacek Laskowski jawnie oraz angielskojęzycznym Japila :: verba docent, exempla trahunt. Krótkie myśli znajdziesz na kanale @jaceklaskowski. Występuje podczas polskich konferencji, co traktuje jako wyróżnienie i miejsce prezentacji własnych poglądów. Będzie wdzięczny za wszelkie komentarze do jego publicznych aktywności.

Planowany czas prezentacji to dwie godziny, po których planuje się 15-30-minutową dyskusję.

Wstęp wolny

Zapraszam w imieniu swoim i grupy Warszawa JUG!

15 maja 2012

Po dwóch sesjach "Informatycznych Technologii Biznesowych" (ITB) na UAM w Poznaniu

0 komentarzy
Umożliwiono mi poprowadzenie pewnego projektu naukowego, którego celem jest zrealizowanie 24 godzin wykładów i ćwiczeń w ramach programu dwusemestralnych studiów podyplomowych "Informatyczne Technologie Biznesowe" (ITB) na Wydziale Matematyki i Informatyki Uniwersytetu im. Adama Mickiewicza.

W ten sposób mogę podzielić się swoją wiedzą w temacie programowania w Javie, Java EE 6 oraz produktów z rodziny IBM WebSphere, głównie IBM WebSphere Application Server V8 oraz V8.5 Libery Profile. Wybaczcie określenie, ale uczestnicy są pewnego rodzaju moim "materiałem poznawczym", który pozwala mi uzmysłowić sobie, jak rzeczy proste wcale takimi nie muszą być, a wszystko zależy od doświadczenia.

Kiedy ustalałem materiał do omówienia, planowałem wiele, sądząc, że 24 godziny to szmat czasu. I myliłby się ten, kto tak sądzi. Doświadczenie w wystąpieniach publicznych pomaga, ale tutaj zmienna czasu się znacząco wydłużyła, więc należało podzielić całość na małe prezentacje. Poza tym, jeśli zebrany materiał przygotowawczy nie pozwala na dopasowanie tematyki, to sprawa staje się karkołomna. Rozpoznanie audytorium jest kluczem do sukcesu sprawnego przekazu. Marzy mi się, aby po moich wystąpieniach znalazły się osoby, które pozwolą sobie na chwilę zastanowienia nad omówionym tematem. Marzy mi się, aby uczestnicy byli aktywni, wiedzieli, czego oczekują w zamian za poświęcony czas - swój czas. To jest inwestycja, którą wielu sprowadza do poziomu "odsiedzę swoje i będzie z bańki". Jeszcze mniej osób chce i potrafi wyrazić swoją opinię. Szkoda.

To sprawia, że praca z klientem (w tej konfiguracji są to słuchacze-studenci ITB) jest nieprzewidywalna i stąd okrywcza. A dodatkowo można wiele się nauczyć o materiale, który zdawało się, że rozumiem. Ot, choćby ostatnie próby z uruchomieniem executable jar, co w nomenklaturze Eclipse nazywa się Runnable Jar, a jest wykonywalnym plikiem jar z Main-Class w MANIFEST.MF.


Nie tylko nie wiedziałem o istnieniu asystenta Runnable JAR file w Eclipse, ale również później o powiązaniu między nim a konfiguracją uruchomieniową projektu.


Nie wiedziałem, bo nie było potrzebne, ale jak tu przeprowadzić wprowadzenie do Javy bez wyjaśnienia tego mechanizmu?! Teraz już wiem i kolejni będą mogli podziwiać moją wiedzę (a ja nie powiem, że jeszcze chwilę temu tego nie wiedziałem - niech sobie myślą, że się z tym urodziłem!).

I tak nieprzewidywalnie było jeszcze kilkakrotnie, kiedy kwitowałem pytania, uwagi, dyskusje stwierdzeniem "Wy to mi robicie specjalnie!" Innymi słowy, często padały pytania, które wcześniej zostały już wyjaśnione, które wymagały jedynie przeczytania, co napisane na ekranie, czy wręcz pomyślenia. Dzięki dwóm sesjom w ramach ITB nauczyłem się, że nie wszystko oczywiste, co jest dla mnie oczywiste, a wszystko wymaga czasu, skupienia i cierpliwości. Trzeba pozwolić na pytania i umiejętnie sugerować chwilę zastanowienia. Wciąż uczę się tej magicznej sztuki nauczania. Z trójką dzieci w domu wydaje się, że powinno być prościej, ale moje osiągnięcia na tym polu świadczą, że chyba jestem oporny na tę naukę.

Jeszcze przed pierwszą sesją ostrzegano mnie, żeby sobie nie urządzić wprowadzenia do programowania w Javie. Dla mnie poznawanie produktów IBM WebSphere przez osoby, które chcą wiedzieć więcej (rozumiem, że ITB, to właśnie wyrażenie tej potrzeby, że chce się coś więcej) sprowadza się do znajomości mechanizmów języka Java, w którym zostały napisane. Dlaczego? Wychodzę z założenia, że jeśli zna się podstawy, tj. składowe, to zrozumienie złożonej materii przychodzi łatwiej. Nie jest to warunek konieczny, ale przy odrobinie otwartości umysłu można poznać więcej, szybciej. Ja tego doświadczam i mam wrażenie, że inni również mogą.

Kiedy zapytałem uczestników, jakie są ich oczekiwania, zapadła cisza. Wyobraź sobie moją minę, kiedy próbuję dopasować materiał do uczestników, a oni sami nie wiedzą, czego chcą! Po sesji przedstawiania się oraz możliwego materiału edukacyjnego, odniosłem wrażenie, że wielu byłoby skłonnych poznać tajniki programowania w Javie.

I się zaczęło (w pozytywnym tego słowa znaczeniu!)

Zaczęliśmy od tworzenia projektów javowych w Eclipse. Kilka klas do uruchomienia z linii poleceń, później wspomniany wykonywalny jar, do tego aplikacja graficzna i na koniec servlet z IBM WebSphere Application Server 8.5 Liberty Profile.

Odnoszę wrażenie, że było to niesamowite doświadczenie dla obu stron. Przekrój naukowy, wiekowy oraz płciowy nie pozostawia złudzeń, że tak zróżnicowanej grupy nie miałem jeszcze wcześniej. I Java się podobała (co składam również na barki nieinwazyjnego sposobu, w jakim ją wprowadziłem - chwila pochwały dla siebie ku poprawieniu nastroju).

Na kolejnym spotkaniu mamy do dyspozycji 6 godzin i na moją propozycję, aby zabawić się z Androidem, grupa odpowiedziała gromkim "TAK!" Zaproponowałem, aby uczestnicy przynieśli swoje smartfony, bo nic tak nie daje kopa ku dalszemu rozwojowi, jak możliwość korzystania z tego, co samemu się stworzyło. Dawno to było, kiedy siedziałem przy Androidzie, a teraz będzie okazja do odświeżenia materiału. Już nie mogę doczekać się, kiedy zobaczę ich twarze, po tym, jak uruchomią pierwsze HelloWorld na swoich smartfonach. Oj, będzie się działo!

Na zakończenie wycinek z korespondencji, którą dostałem od jednego z uczestników:

"Chciałbym poznać środowisko Java od podstaw, ale ukierunkowując swoje zainteresowania w kierunku tworzenia dynamicznych stron WWW. Coś mi mówi, że w tym języku drzemie większy potencjał niż w PHP. Może i się mylę, ale jak nie sprawdzę to się nie dowiem. Tak czy siak skutecznie mnie zachęciłeś by choć spróbować."

I właśnie to było moim celem! Nie mam złudzeń, że 24 godziny to zdecydowanie za mało, aby pozwolić rozkoszować się pięknem języka Java (trzeba najpierw nauczyć się jej odpowiednio smakować), ale zaintrygować nią, to już wystarczy. Ten mail jest dopełnieniem mojego szczęścia. Kiedy dodam, że na sali znalazła się pani nauczycielka, która zechciała popróbować się samodzielnie z poznaniem Javy w ramach zadania domowego, mojego szczęścia jest więcej niż jedna osoba mogłaby skonsumować :-)

Kolejne "doświadczenie naukowe" już podczas tegotygodniowego GeeCON, podczas którego wystąpię z prezentacją "A whirlwind tour of Clojure", aby po niej pojawić się na spotkaniu Warszawa JUG 22 maja z tematem "Budowanie aplikacji Java EE 6 z Clojure" (zapraszam do dyskusji o jego formie i tematyce), aby pojawić się w Ustroniu 28 maja, Tarnowie 29-30 maja i Warszawie na konferencji Softdevcon 31 maja. Do zobaczenia!

p.s. Swoje doświadczenia zbieram w postaci materiałów szkoleniowych, które mam nadzieję opublikować niebawem. Pisz na priv, jeśli jesteś zainteresowany/a poznaniem szczegółów lub udziałem w projekcie jako beta tester. "Amicorum omnia communia" jak mówią.