22 lipca 2010

Book review: Spring Enterprise Recipes: A Problem-Solution Approach

1 komentarzy
Na dzień przed moim urlopem zakończyłem lekturę książki Spring Enterprise Recipes: A Problem-Solution Approach, którą otrzymałem od wydawnictwa Apress jeszcze w zeszłym roku.

Długo trwało zanim przekonałem się do jej lektury i pewnie tylko za sprawą ostatnich moich warsztaty dotyczących Spring Framework i Hibernate dałem się na nią namówić. I (chyba) nie żałuję (aczkolwiek w moich ustach nie brzmi to najbardziej wiarygodnie, gdyż rzadko udaje mi się przyznać do popełnionych pomyłek). Znalazłem w niej kilka ciekawostek i odświeżyłem ogólną wiedzę nt. Springa, ale żeby zaraz ją rekomendować, to niekoniecznie. Na pewno nie jest dla osób, które chciałyby przestudiować działanie Spring i jego integracji z innymi projektami. Tutaj prawdopodobnie poleciłbym inną książkę (brakuje mi dobrego typu jednak). Ta jest dobra, kiedy już wiemy, o co chodzi w Springu i albo odświeżamy wiedzę, albo uzupełniamy ją o integracje, z których nie dane nam było skorzystać produkcyjnie. Dzięki tej książce poznałem kilka sztuczek i z łatwością poradziłem sobie z warsztatami. Czyta się ją stosunkowo szybko, bo podejście typu "problem, rozwiązanie, omówienie" czyni z tej książki swego rodzaju encyklopedię, którą da się przeczytać zakładając, że nie przekracza odpowiedniego poziomu stron. Książka "Spring Enterprise Recipes" ma ich 450, więc w drodze do pracy i po niej można zmierzyć się z nią bez większego wysiłku. Rozdział w kwadrans to nie jest zbyt karkołomne założenie, szczególnie jeśli omawiany aspekt Springa jest nam dobrze znany i większość stron to kod źródłowy, albo wycinek z pliku XMLowego.

Zainteresowanych angielską wersją recenzji zapraszam do mojego Wiki - Book review: Spring Enterprise Recipes: A Problem-Solution Approach, a samą lekturą do Biblioteki Warszawskiego JUGa.

W końcu upragnione wakacje! Bawcie się dobrze.

21 lipca 2010

Clojure REPL z JLine zaiste przyjaźniejsze

2 komentarzy
Logo ClojurePrzypuszczam, że każdy rozpoczynający naukę Clojure wcześniej czy później brata się z Clojure REPL (=read-eval-print loop), czyli powłoką Clojure, w której wpisane polecenia są od razu wykonywane, linia po linii za każdym wciśnięciem ENTER (potwierdzeniem polecenia). Wystarczy uruchomić java -cp clojure.jar clojure.main i już jesteśmy w środowisku Clojure REPL.
devmac:clojure jacek$ java -cp clojure.jar clojure.main
Clojure 1.2.0-beta1
user=> 
Przeglądając dzisiaj grupę użytkowników Clojure zauważyłem, że kilka osób podało sposób uruchamiania Clojure REPL z JLine. Od teraz poprzednie polecenie wygląda nieznacznie inaczej, ale różnica jest niebagatelna - można modyfikować polecenia i działa ich historia!
devmac:clojure jacek$ java -cp ~/apps/jars/jline.jar:clojure.jar jline.ConsoleRunner clojure.main
Clojure 1.2.0-beta1
user=> 
Z tą zmianą, można korzystać z kursora góra/dół/lewo/prawo i modyfikować dowolnie polecenia.

Wystarczyło dodać niewielką bibliotekę, a nauka Clojure staje się bardziej przyjazna dla nowicjuszy. Spróbuj, a doświadczysz niezapomnianego (i nieczęsto spotykanego) uczucia wszechogarniającego szczęścia. Zaiste niezwykłe.

19 lipca 2010

Clojure w aplikacji webowej Java EE 6 z Eclipse Helios, Apache Maven i Apache Tomcat

4 komentarzy
Ufff, udało się! Ależ radości przyniosło mi uruchomienie aplikacji webowej Java EE 6 z logiką napisaną w...Clojure! A później to spisywanie - tego najbardziej nie lubię, kiedy każdy szczegół ma znaczenie i trzeba przerabiać materiał kilkakrotnie. Chciałoby się to po prostu nagrać, zamiast spisywać (ale to po urlopie).

Właśnie ukończyłem prace nad nowym artykułem w moim Wiki - Clojure w aplikacji webowej Java EE 6 z Eclipse Helios, Apache Maven i Apache Tomcat, który przedstawia moje ostatnie doświadczenia z "produkcyjnym" wykorzystaniem Clojure z JEE6. Do całości dorzuciłem jeszcze integrację Eclipse Helios z Apache Maven (przez wtyczkę m2eclipse) i counterclockwise do obsługi Clojure. Powinno się podobać.

Nie przeciągając dłużej (i bez zbytniego zachwalania treści artykułu :-)) wierzę, że każdy znajdzie tam coś dla siebie. Niektórzy poznają Eclipse i jego środowisko (aż dwie wtyczki użyte), niektórzy samo uruchomienie aplikacji JEE6, a inni Clojure z Javą. Zapraszam do lektury i komentowania.

Jeszcze jutro recenzja książki o Springu i w nadchodzący czwartek znikam na długooczekiwany urlop. Jeszcze tylko 2 dni!

15 lipca 2010

Google Guice i JSR-330 Dependency Injection for Java

6 komentarzy
W Recenzja "Dependency Injection, Design patterns using Spring and Guice" z Manning pisałem o moim zachwycie Google Guice. Okazało się, że jest to jedno z tych rozwiązań, którego istnienia nie doceniałem, a gdyby zapytać mnie o cechy wyróżniające go od innych, podobnych jemu, z pewnością nie potrafiłbym wskazać tych, które mogłyby sprawić, że stanie się właściwym rozwiązaniem w projekcie. Obecna moja znajomość Guice sprowadza się do umiejętności wymówienia jego nazwy i opisania jako kontener DI (ang. dependency injection). Niewiele.

Po tej książce, potrzebowałem bliższego, bardziej praktycznego spotkania z Guice. Kiedykolwiek myślę o kontenerze DI, na myśl przychodzi Spring Framework (czasami, ale baaaardzo rzadko, takie egzotyczne rozwiązania jako HiveMind, PicoContainer, może nawet JBoss Seam, Apache XBean czy dawno zapomniany Avalon). Moje ostatnie dokonania na gruncie Spring Framework w postaci warsztatu i po nim następujących artykułów (patrz Tworzenie samodzielnej aplikacji ze Spring Framework i Hibernate w NetBeans IDE 6.9) trochę mnie zmęczyły i kiedykolwiek zabierałem się za kolejną konfigurację w XMLu, wspominałem stare, dobre czasy z serwerem aplikacyjnym Java EE. Ktoś mógłby wspomnieć o możliwości konfiguracji Springa przez adnotacje, ale jakby tego nie ująć, każdorazowe spotkanie ze Springem zawsze u mnie kończy się jednak na XMLu. Brrr...

Kiedy zabrałem się za poznawanie specyfikacji Java EE 6, zacząłem od JSR 299: Contexts and Dependency Injection for the Java EE platform (w skrócie CDI). Tam naczytałem się o wielu innych specyfikacjach i czego mi brakowało, to jego użycia poza serwerem aplikacyjnym JEE6. W końcu jakoś się udało i nawet spisałem moje doświadczenia w artykule Contexts and Dependency Injection (CDI) praktycznie - zestawienie środowiska z JBoss Weld, Arquillian i Apache Maven 2. Należy jednak zwrócić uwagę na słowo "jakoś", bo ono oddaje klimat tego artykułu - CDI w obecnym kształcie jest możliwe do uruchomienia poza serwerem aplikacyjnym, ale jego główne użycie jest właśnie w ramach serwera (chociażby JSF2). Nie pasowało mi tu stworzenie kolejnej specyfikacji JSR-330 Dependency Injection for Java. Możnaby powiedzieć, że DI to CDI, ale coś je jednak musi różnić, skoro obie istnieją pod parasolem JEE6. I różnią się - zespołem pracującym nad nimi :-) Przy CDI pracował Gavin King (JBoss Seam, Hibernate), a przy DI pracowali Bob Lee (Guice) i Rod Johnson (współtwórca Spring Framework). To może tłumaczyć pojawienie się obu, zamiast stworzenia jednej właściw(sz)ej.

Ostatnio zasugerowano mi, aby sprawdzić wsparcie CDI przez Springa i przez myśl przeszło mi, aby się tym zająć, ale zamiast CDI skończyło się na JSR330 DI. Zacząłem od dokumentacji pakietu javax.inject. To właśnie wtedy stwierdziłem, aby zamiast Springa, zbadać Guice.

Po javadoc wzięło mnie na lekturę Dependency injection with Guice, który okazał się bardzo przystępny  merytorycznie, wciąż jednak stosunkowo krótki, aby się nie znużyć jedynie czytaniem. Później przyszła pora na Google Guice :: Getting Started i Google Guice :: Spring Comparison. Z nimi i wcześniejszą lekturą książki Dependency Injection - Design patterns using Spring and Guice byłem gotów do wstępnych testów, tym razem z IntelliJ IDEA.

Zacznijmy od końca - od uruchomienia Guice i pobrania kompletnego obiektu z już wstrzelonymi zależnościami.
package pl.jaceklaskowski.javaee.di;

import com.google.inject.Guice;
import com.google.inject.Injector;

public class Main {
    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new DictionaryModule());
        EnglishPolishDictionaryService dictionaryService = injector.getInstance(EnglishPolishDictionaryService.class);
        System.out.println(dictionaryService.translate("turn out"));
    }
}
Konfigurację Guice realizuje się przez moduły - klasy javowe, w których przypisujemy interfejsy do ich implementacji, typów, które będą przedmiotem wstrzeliwania zależności.
package pl.jaceklaskowski.javaee.di;

import com.google.inject.AbstractModule;

public class DictionaryModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(VocabularyProvider.class).to(EnglishVocabularyProvider.class);
    }
}
Każdy moduł rozszerza klasę com.google.inject.AbstractModule. To w module konfigurujemy Guice na potrzeby naszej aplikacji, gdzie następuje przypisanie co będzie przypisane gdzie za pomocą konstrukcji
bind([GDZIE]).to([CO]).in([OBSZAR])
W powyższym przykładzie, jakiekolwiek wystąpienie zmiennej typu VocabularyProvider zostanie zainicjowane zmienną typu EnglishVocabularyProvider, domyślnie jako singleton.

Ostatnim, aczkolwiek najważniejszym elementem aplikacji korzystającej z Guice, jest wykorzystanie adnotacji @com.google.inject.Inject, która oznacza miejsca podlegające mechanizmowi wstrzeliwania zależności (stąd też nazwa dla specyfikacji JSR 330 DI - atInject). Poniższa klasa prezentuje adnotację @Inject w akcji.
package pl.jaceklaskowski.javaee.di;

import com.google.inject.Inject;

import java.util.Locale;
import java.util.Map;

public class EnglishPolishDictionaryService implements DictionaryService {

    private final Map<String, String> vocabulary;

    @Inject
    EnglishPolishDictionaryService(VocabularyProvider vocabularyProvider) {
        this.vocabulary = vocabularyProvider.provideVocabularyFor(Locale.ENGLISH);
    }

    public String translate(String word) {
        return "[PL]" + word; 
    }
}
Każde wystąpienie @Inject jest miejscem, gdzie nastąpi wstrzelenie zależności przez Guice. Czy to konstruktor (którego wszystkie parametry podlegają wstrzeliwaniu przez Guice), czy metoda (o dowolnej nazwie i sygnaturze), czy pole instancji, wszystkie te miejsca są inicjowane przez Guice.

p.s. W ostatniej klasie EnglishPolishDictionaryService popełniłem błąd związany z niepoprawnym użyciem wstrzeliwania zależności (oferowanym przez Guice, ale to nie ma w tym przypadku znaczenia). Sama aplikacja działa, ale właściwe użycie DI powinno odpowiadać zasadzie Inject only direct dependencies. Przykład obrazuje, ile jeszcze przede mną nauki, aby tę całą tajemną wiedzę przyswoić.

14 lipca 2010

Tworzenie samodzielnej aplikacji ze Spring Framework i Hibernate w NetBeans IDE 6.9

1 komentarzy
Właśnie ukończyłem prace nad kolejnym, trzecim i ostatnim artykułem Tworzenie samodzielnej aplikacji ze Spring Framework i Hibernate w NetBeans IDE 6.9, który wprowadza czytelnika w arkana integracji Spring Framework z Hibernate (albo odwrotnie), aby tym samym pozwolić mi na przeprowadzenie warsztatów w bardziej składny sposób - z użyciem materiałów, które są dostępne publicznie, dla każdego. Są to bardzo wprowadzające artykuły przygotowane specjalnie dla początkujących w temacie. Bardziej zaawansowani użytkownicy tandemu Spring + Hibernate pewnie nie znajdą w nich wiele pożytecznego. Uwagi i sugestie mile widziane, a zainteresowanych warsztatami uprasza się o kontakt na priv.

Sama idea warsztatów wypływała już kilkakrotnie i zawsze problemem było właśnie przygotowanie materiałów i działających przykładów. Tradycyjnie jak co roku, Warszawa JUG organizuje konferencję warsztatową Warsjava w okolicach października/listopada i w tym roku zamarzyło mi się, aby być przygotowanym, a może nawet poprowadzić warsztaty płatne?! Jest kilku zainteresowanych pomysłem i teraz przyszło mi realizować jej część merytoryczną. Zainteresowany? Zainteresowana?

W serii warsztatowej o Spring i Hibernate, przez ostatnie tygodnie stworzyłem zapowiadane trzy artykuły:
  1. Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9
  2. Tworzenie samodzielnej aplikacji z Hibernate w NetBeans IDE 6.9
  3. Tworzenie samodzielnej aplikacji ze Spring Framework i Hibernate w NetBeans IDE 6.9
W ten sposób zamknąłem pewien rozdział w mojej działalności edukacyjnej związanej ze wspomnianymi produktami - Spring i Hibernate, które wykorzystałem do stworzenia samodzielnych aplikacji w środowisku NetBeans IDE 6.9. Trochę mnie to integrowanie znużyło i coraz bardziej tęskno mi do pełniejszego środowiska serwera aplikacyjnego JEE6.

Muszę przyznać, że NetBeans 6.9 dał mi się tak we znaki (przede wszystkim ciągłe błędy z odświeżaniem zawartości w projekcie), że nie tylko, że musiałem zaktualizować go do najnowszej, rozwojowej wersji z wczorajszego dnia (co niestety zniszczyło mi wszystkie dodatki jakie przychodzą z wersjami produkcyjnymi w temacie integracji NB z systemem operacyjnym, czyli ikonę startową), ale coraz częściej pojawia mi się myśl, aby go całkowicie zakopać i już więcej nie oglądać. Stał się tak toporny w swojej obsłudze projektów, że zwykłe zamykanie/otwieranie projektów prowadziło często do tak kuriozalnych sytuacji, jak oznaczenie niektórych jako nie-NetBeans-owych! A były w nim tworzone! Gdyby nie fakt, że NetBeans i Java EE "w jednym stali domu", to już dawno zapomniałbym o istnieniu NetBeans. Rozważam przejście na Eclipse, albo IDEA. Skłaniam się ku IDEA, ale nie wszyscy ją mają i artykuły byłyby mocno zawężone pod względem grupy odbiorczej. Sugestie?

Tym samym wracam do mojej wcześniejszej aktywności wokół specyfikacji JSR 299: Contexts and Dependency Injection for the Java EE platform. Celem jest stworzenie podobnego zestawu artykułów, aby możliwe było wprowadzenia nowicjusza w tajniki CDI. Pomysły, sugestie, uwagi mile widziane. Jeśli chcesz przeczytać coś interesującego, daj mi poznać swoje potrzeby, a *może* uda mi się je spełnić?! Ku uciesze obu stron ;-)

09 lipca 2010

Clojure ponownie na tapecie - jest nowa książka, jest oferta projektu, pozostaje zestawić IDE

15 komentarzy
Logo Clojure
Jest wiele języków funkcyjnych (na myśl przychodzą chociażby Lisp czy Haskell) i niemało z nich doczekało się odpowiedników działających na wirtualnej maszynie Javy. Mnie zainteresował jeden - Clojure. I trudno powiedzieć dlaczego, ale ma to coś, co sprawia, że mimo moich trudności w myśleniu funkcyjnym, chce mi się go nauczyć. Na razie moje "chce" nie wyszło poza ramy faktycznego "chce", więc jedynie od czasu do czasu coś tam sobie poczytam, czy skrobnę.

Tydzień przed Javarsovią 2010 w księgarniach pojawiła się nowa pozycja o tym języku - Practical Clojure od Apressu. Pamiętam ten dzień, kiedy publikując recenzję na Amazonie zobaczyłem, że ta książka już jest. Postanowiłem ją zdobyć i napisałem do wydawnictwa. Jeszcze tego samego dnia, otrzymałem odpowiedź:

Hey Jacek,

You got it, where would you like the book to be shipped?

Simon Yu
Apress | friends of ED
Public Relations Assistant
Apress


I już ją mam u siebie. Część mojej duszy odpowiedzialna za posiadanie jest już usatysfakcjonowana :]

2 dni temu dostałem wiadomość:

Witaj,

widzialem ze interesujesz sie Clojure, a wlasnie chcialbym zaczac pisac projekt w tym jezyku, tylko szukam kogos kto moglby mi pomoc (oczywiscie nie charytatywnie). Czy masz czas i checi?

Pozdrawiam,
Wojtek


Stwierdziłem, że prośba dotyczy nauki języka, więc bez wahania odpowiedziałem:

Cześć Wojtku,

Czas i chęci to nie problem, bo tego mam wystarczająco wiele, aby się podzielić, jednakże w tym konkretnym przypadku na niewiele by się to zdało - sam poznaję Clojure, a największym problemem nie jest sam język, ale funkcyjne myślenie, którego mi brakuje. Jak widzisz, nie mogę tym samym pomóc Ci, bo składnia języka to prosta sprawa do nauki, jak mniemam.

Jacek


Kilka kolejnych maili i wiedziałem, jak bardzo się myliłem, sądząc, że moja rola miałaby sprowadzić się do roli nauczyciela. Okazało się, że temat dotyczy projektu, który miałby być realizowany z udziałem Clojure i Vaadina:

Jestem w trakcie tworzenia softu do komunikacji w firmie - taki basecamp na sterydach. W tej chwili mam to napisane w Pythonie/Django i jQuery ale rozwazam przejscie na Clojure i Vaadin. Tyle ze zanim sie na to zdecyduje to musze tego Vaadina potestowac (na dniach to pewnie zrobie) no i znalezc kogos kto bedzie mogl pisac ze mna bo chce to zakonczyc w sensownym czasie i wypuscic na rynek (juz mam w paru krajach dograna dystrybucje itp). Jest na to budzet, nie jakis kosmiczny ale jest, no i mozna mowic tez o opcjach na akcje przy dluzszej wspolpracy.

Interesujące, co? Czekam na wymagania funkcjonalne i wtedy okaże się, gdzie byłaby rola dla Clojure i mnie. Gdyby projekt wypalił, byłbym w pierwszym rzędzie, aby się do niego przyłączyć. To byłby mój pierwszy funkcyjny projekt z Clojure. Super!

I znowu myślami przy Clojure, więc rozejrzałem się po grupie dyskusyjnej użytkowników Clojure, aby rozeznać się, jak to teraz stan rozwoju Clojure wygląda. Jakby na żądanie, Sebastian "pedro" Pietrowski pisał o wydaniu Compojure 0.4.0 w swoich podsumowaniach tygodnia - Pedro Newsletter 08.07.2010, więc od razu pobrałem go do przejrzenia kodów źródłowych (nota bene, fajne są te tygodniówki od Pedro - już kilkukrotnie okazały się nieocenione w rozeznaniu się, co nowego w okolicy). Nie tak dawno pobrałem nową wersję Eclipse Helios (3.6), więc postanowiłem dograć do niego wtyczkę Counterclockwise, która udostępnia obsługę Clojure w Eclipse. Instalacja jest niezwykle trywialna - wystarczy wskazać na repozytorium z wtyczką i tyle. Więcej w Getting Started with Eclipse and Counterclockwise.

Clojure w Eclipse z Counterclockwise
Jest możliwość stworzenia nowego projektu z Clojure, są edytory z podświetlaniem składni i jest możliwość uruchamiania programów w Clojure REPL. W zasadzie jest wszystko, aby zacząć swoją przygodę ze światem programowania funkcyjnego z Clojure i Javą.

A pamiętam, jak opierałem się nauce programowania funkcyjnego na studiach. Teraz miałbym prościej...

08 lipca 2010

Mnogość przeglądarek przyprawia mnie o ból głowy - Safari Reader warty uwagi

8 komentarzy
Ostatnimi czasy zauważam u siebie swego rodzaju znużenie mnogością przeglądarek i niemożnością wyboru tej jednej, uniwersalnej, która byłaby złożeniem wszystkich potrzebnych funkcjonalności. Nie mogąc zdecydować się na tą jedną, skaczę pomiędzy wszystkimi i zaczynam mieć problemy z zarządzaniem nimi (szczególnie zakładkami). Kiedyś powiedziano mi, że podobnie jest z moją stabilnością techniczną, która objawia się ciągłym skakaniem po technologiach (aczkolwiek wciąż w ramach wirtualnej maszyny Javy), ale to akurat mnie cieszy.

Jestem od wieków użytkownikiem Firefoksa. Każdy go zna i każdy wie, że ma swoje dobre i złe strony. Do dobrych zaliczyłbym całą masę wtyczek, z których i tak nie korzystam, ale wiem, że wtyczki, kiedy potrzebuję, to są - chociażby Greasemonkey czy Firebug.

Pracowałem z Firefoksem od wieków i zdążył mnie do siebie przyzwyczaić na tyle, że kiedy pojawił się Google Chrome nie wzruszyło mnie to wcale. Aż do momentu, kiedy zobaczyłem u Grzegorza Białka skróty na pulpicie, które były niczym innym, jak skrótami do odpowiednich stron webowych, np. Facebook, które uruchomione w ramach Chrome wyglądały jak typowe aplikacje dektopowe. To było niesamowicie poruszające doświadczenie, które uświadomiło mi jak niewiele trzeba, aby potraktować przeglądarkę jako medium dotarcia do aplikacji webowych w Sieci. To może wydawać się trudne do zrozumienia, biorąc pod uwagę, że tworzenie aplikacji webowych Java EE jest moim zajęciem numer 1, ale zawsze, kiedy z nich korzystałem najpierw miałem obraz przeglądarki, aby później zobaczyć samą aplikację. Teraz było inaczej - przeglądarki było niewiele, a dodatki w JavaScripcie (jquery) w Facebooku zmieniły moje postrzeganie, co jest obecnie możliwe i jak niewiele dzieli aplikacje desktopowe od aplikacji webowych. Spodobało mi się to na tyle, że jedynie dla tej cechy, postanowiłem przenieść się na Chrome. Długo trwało zanim całkowicie zrezygnowałem z Firefoksa (i wciąż jeszcze z niego korzystam), ale pierwszy krok zrobiłem - domyślną przeglądarką stał się Chrome.

Kiedy 1.stycznia 2010 roku przeniosłem się na MacOS X Snow Leopard na firmowym MacBook Pro (tutaj ukłony dla osób decyzyjnych w mojej firmie - nazwa znana redakcji, które zdecydowały się na ten krok i pozwoliły mi cieszyć się jego owocami - posiadaniem własnego Maca) pojawiła się kolejna przeglądarka - Apple Safari. Była domyślną przeglądarką w MacOS i przez moment nawet mi się podobała, ale tylko krótki moment. Próbowałem przełączyć się z moich przyzwyczajeń firefoksowo-chromowych na Safari, ale było ciężko. Przeglądarka różniła się od poprzedników, aż w końcu uległem pokusie i przesiadłem się na...Firefoksa (!) I znowu na starych śmieciach, aczkolwiek w odwodzie miałem zainstalowane Safari i Chrome.

Ostatnimi czasy dużo się mówiło o porównaniach wydajnościowych przeglądarek i z nowym wydaniem Chrome wszyscy wskazywali na niego, jako tego, który jest najszybszy (oczywiście większość newsów szła od samego producenta - Google). Uległem ponownie i przesiadłem się na Chrome. I świat znowu wydał się przyjemniejszy. Moje korzystanie z przeglądarki sprowadza się do regularnego odwiedzania GMail, GReader, Bloggera i wielu blogów, serwisów społeczościowych, ale niewiele w tym tworzenia aplikacji z interfejsem użytkownika pisanym w JavaScripcie, który musiałbym optymalizować, więc należę do typowej grupy odbiorców przeglądarek. Ulegam też reklamom dosyć często (Agata twierdzi, że nawet za często i kiedy tylko ktoś sensownie i pewnie mówi, szybko mnie ma). Chrome pozwalał mi nawet na edycję tekstu moich wpisów na blogu ze skrótami klawiszowymi - Cmd+B znowu dało mi możliwość wytłuszczania (co w Firefoksie jedynie otwierało mi przeglądarkę zakładek).

Praca z Chrome była przyjemna i spełniała moje oczekiwania (poza irytującym zaznaczaniem tekstu bez pierwszej litery, tj. przy zaznaczaniu muszę kursor myszki przesunąć o pół znaku w lewo, abym zaznaczył dokładnie tekst, który mnie interesuje). Kiedy pojawiła się wersja Safari 5, temat wyboru przeglądarki znowu wrócił - Safari oferuje "obdzieranie ze skóry" stron, co pozwala na łatwiejsze czytanie zawartości. Owa cecha, nazywana Safari Reader, aktywuje się samoczynnie i w pasku adresu pojawia się ikona Reader, kiedy Safari potrafi pokazać jedynie treść artykułu bez okalających reklam. Nie wiem dlaczego dzisiaj, ale skoro pracuję na Macu i Safari się samo zaktualizowało do nowszej wersji, więc nic nie stało na przeszkodzie, aby spróbować tej cechy na własnej skórze. Spróbowałem na swoim blogu http://jaceklaskowski.pl i nic. Zero ikonki do uruchomienia Safari Reader. Spróbowałem na moim Wiki http://jaceklaskowski.pl/wiki i też nic. Zacząłem szukać informacji na ten temat i poza lakoniczną informacją na oficjalnej stronie produktu, że jest i aktywuje się automatycznie...na niektórych stronach. Hmmm, próbuję http://www.infoq.com, bo tam znajdę wiele artykułów i reklamy. Wszedłem na stronę artykułu o CDI (JSD-299) - Dependency Injection in Java EE 6 Provides Unified EJB and JSF Programming Model i moim oczom ukazała się owa magiczna ikonka Reader!


Wciskając przycisk Reader albo wciskając kombinację klawiszy Cmd+Shift+R, Safari przechodzi w tryb, który wyrzuca niepotrzebne "rozpraszacze" i pozostawia jedynie czytaną treść.


Bajecznie! I znowu jestem na Safari.

07 lipca 2010

Tworzenie samodzielnej aplikacji z Hibernate w NetBeans IDE 6.9

1 komentarzy
Wspominałem już w poprzednim wpisie Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9 o moich ostatnich doświadczeniach warsztatowych, podczas realizacji zadania "wzmocnienia technicznego" grupy osób w temacie Spring Framework i Hibernate. Zabrałem się do przygotowania materiałów, ale co mnie najbardziej męczyło, to faktyczny poziom zaawansowania uczestników. Nie trwało długo, abym zorientował się, że potrzeba mi dobrych acz krótkich artykułów wprowadzających w tematykę i, jak to zwykle bywa, nic nie mogłem znaleźć, co odpowiadałoby moim skromnym (?) oczekiwaniom.

Zabrałem się za samodzielne przygotowanie potrzebnych artykułów i po wprowadzającym do Springa nadszedł obiecywany artykuł wprowadzający w tematykę Hibernate - Tworzenie samodzielnej aplikacji z Hibernate w NetBeans IDE 6.9. Jest to artykuł z bardzo podstawową wiedzą o Hibernate i jego wykorzystaniu do budowania aplikacji javowych. Nie ma tam żadnych wodotrysków czy wzmianek o technologiach typu JPA czy wręcz zaawansowanego odwzorowywania klas w relacji jeden-do-wielu czy wiele-do-wielu, a jedynie kroki, aby przygotować grunt pod dalszą naukę Hibernate - po prostu niezbyt intensywne wprowadzenie.

Z dzisiejszym i poprzednim, pozostał mi jeszcze jeden artykuł sprzęgający oba, który będzie przedstawiał kroki użycia Springa i Hibernate w ramach samodzielnej aplikacji. Pomysły kolejnych mile widziane. Byłoby dobrze, aby udało mi się złożyć taki zestaw artykułów, aby w komplecie pozwalały na przeprowadzenie kursanta przez zaułki Springa i Hibernate, co w efekcie wprowadzi go na poziom średniozaawansowany. Czegoś brakuje? Gdybyście mogli mi pomóc zebrać taki zbiór artykułów byłoby cudnie. W ten sposób możnaby stworzyć ścieżkę warsztatową, która doprowadzi delikwenta do wymarzonego celu - gościa gotowego na udział w projekcie.

05 lipca 2010

Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9

8 komentarzy
Miałem ostatnio ciekawe przedsięwzięcie (coś ala szkolenie-warsztaty) wprowadzające w arkana użycia Spring Framework oraz Hibernate. Dano mi do dyspozycji 2 dni i kiedy podjąłem się wyzwania sądziłem, że to będzie pół dnia omówienia tematu i...właśnie, co ja z nimi będę robił dalej?! Taka myśl towarzyszyła mi do pierwszego dnia, kiedy w połowie okazało się, że to, co łatwe i proste dla jednego (mnie) nie jest takim dla słuchaczy (oni). Okazało się, że należało zapoznać słuchaczy ze wspomnianą tematyką, ale czasami nawet z samym programowaniem w Javie. Można sobie wyobrazić, jak na miejscu, udoskonalałem materiały. Skończyło się na czymś niezwykle odświeżającym dla mnie i (zgodnie z ich oficjalną oceną) czymś pouczającym dla nich.

Jako, że nie mogłem znaleźć wystarczająco wprowadzających artykułów w tajniki użycia tandemu Spring Framework i Hibernate, postanowiłem stworzyć kilka na własne potrzeby. Jeden z nich już udostępniłem, a drugi się robi.

W artykule Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9 przedstawiłem kroki niezbędne do stworzenia samodzielnej aplikacji korzystającej ze Spring Framework w zintegrowanym środowisku programistycznym NetBeans IDE 6.9. Starałem się wykorzystać wszystkie możliwości NetBeans, aby jak najmniejszym kosztem stworzyć pełnoprawną aplikację springową. Niestety nie ma ich wiele, ale chociaż pomoc przy tworzeniu pliku konfiguracyjnego Springa okazała się nieoceniona. Tylko dlaczego podpowiedzi w edytorze XML wymagają dostępu do Sieci?!

Kolejny będzie o użyciu Hibernate, aby skończyć na połączeniu obu. Uwagi mile widziane. Chciałbym, aby artykuł stanowił kanwę do nagrania kolejnego skrinkastu, bo skoro mam już scenariusz, to nie pozostaje nic innego, jak skręcić 5-minutówkę.

p.s. Tematyka Spring Framework i Hibernate tak mnie wkręciła, że zabrałem się za lekturę książki Spring Enterprise Recipes: A Problem-Solution Approach panów Josha Longa i Gary'ego Maka wydawnictwa Apress. Jest to moja pierwsza książka w stylu problem-rozwiązanie i bardzo mi ten sposób pisania przypadł do gustu. Czasami trochę rozwlekła i za bardzo wnikająca w pewne aspekty (dosłownie i w przenośni) użycia Springa, ale pomimo tego zdaje się być bardzo pouczająca.

02 lipca 2010

Tłumnie na Javarsovia 2010 - święto polskiej społeczności javowej za nami

2 komentarzy
Logo konferencji Javarsovia 201026 czerwca, dzień po urodzinach mojej Agatki, odbyła się w Warszawie konferencja polskiej społeczności javowej Javarsovia 2010. Kosztowała wiele wysiłku kilkudziesięciu organizatorów, a mimo to wciąż pozostała bezpłatną! Trudno wskazać tego, kto przyczynił się do jej sukcesu najbardziej, nawet grupę osób, bo czy to sami organizatorzy, wolontariusze, sponsorzy, czy może Wy - uczestnicy - każdy dołożył swoją cegiełkę, aby przyczynić się do jej sukcesu i wykreowaniu największej, bezpłatnej konferencji javowej w Polsce. Goszcząc 650 uczestników z 24-oma prelegentami (dwóch z zagranicy) oraz 21 sponsorów i partnerów wierzę, że Javarsovia 2010 stanowiła ciekawą platformę wymiany doświadczeń i zdobywania wiedzy oraz kontaktów. Tyle, tytułem wstępu.

A skoro o wstępie, to już podczas rozpoczęcia konferencji, około godziny 10:00, odnotowaliśmy właściwie komplet uczestników. Niebywałe, biorąc pod uwagę sobotni poranek i bezpłatną konferencję. Nie mam wątpliwości, że uczestnicy stanowili śmietankę polskiej sceny javowej - ludzi, którzy na wiele sposobów starają się okiełznać rozwój techniczny i Javarsovia 2010 okazała się być dla nich ciekawą alternatywą.


Pamiętam, że wtedy właśnie poszedł triumfalny tweet na kanale @javarsovia:

621 uczestników i jeszcze wielu oczekujących w kolejkach na rejestrację! #Javarsovia

Wtedy było już wiadomo, że nasze szacunki, które krążyły koło liczby 650 uczestników, okazały się nie tak wcale przestrzelone. Do tej edycji Javarsovii panowało powszechne przekonanie, że 70% zarejestrowanych, którzy faktycznie przyjdą, to odpowiedni poziom na konferencjach bezpłatnych. Zaczęło się od 900 zarejestrowanych w pierwszej turze, później podczas kolejnej rejestracji potwierdzającej liczba spadła do 700, aby ostatecznie już "w realu" zatrzymać się na poziomie 650. Liczba, która stanowi grubo powyższej planowanych 70%!


Sądzę, że wielu nie spodziewało się takiego obrotu sprawy i wszyscy (organizatorzy, uczestnicy i Ci, którzy nie dotarli) są pod wrażeniem rozmachu Javarsovii. Liczba uczestników nie stanowi o merytorycznej stronie konferencji, ale można było dostrzec, że niektóre sale były zbyt małe, aby pomieścić zainteresowanych. U Piotra Jagielskiego łatwo dostrzec tłumy:


Trafność wyboru tematów i prelegentów oraz dopasowanie miejsca i terminu daje się odczuć w relacjach pokonferencyjnych, ale i w prywatnych rozmowach podczas i po konferencji. Zresztą wystarczy poczytać samemu poniżej:

Dziękuję Wam bardzo za organizację konferencji na tak wysokim poziomie. Moje wrażenie są bardzo pozytywne i bardzo się cieszę, że mogłem wziąć udział w tym święcie Javy. Wszystko dzięki Wam organizatorom. Jestem pod wielkim wrażeniem warszawskiego JUGa i to wrażenie potwierdzają znajomi, z którymi byłem. Osobiście obserwuję co dzieje się w moim lokalnym JUGu i muszę powiedzieć, że do pięt Wam niestety nie dorastamy. Nie chciałbym tu skrzywdzić naszych liderów, którzy wykonują również świetną pracę, ale jeśli organizujecie takie wydarzenie to coś w Was musi być. Jeszcze raz dziękuję i do zobaczenia za rok.

Jestem bardzo zadowolony z uczestnictwa w tej konferencji mimo, że stawiam dopiero swoje pierwsze kroki w programowaniu w Javie. Prowadzący poruszali tematy praktycznego programowania a nie suchej teorii, której można się dowiedzieć z każdej książki. Jest to moja pierwsza tego typu konferencja i na pewno nie ostatnia.

Odwaliliście w sobotę kawał dobrej roboty.
Klasa sama w sobie!
PS. Już czekam na następną edycję ;)


Zrobiliście kawał dobrej roboty. Atmosfera, poziom merytoryczny, catering, organizacja wszystko na super poziomie. Takie eventy są bardzo potrzebne. Jakby środowiska z innych branż się podobnie zaktywizowały, to nasz kraj szybciej dogoniłby światowe czołówki. Właśnie takie oddolne ruchy stanowią o jakości społeczeństwa, to tacy jak Wy budują jego siłę. Jeszcze raz gratuluję. Do zobaczenia za rok.

Takie komentarze mogą jedynie nastrajać pozytywnie, ale są o tyle niebezpieczne, że mogą również prowadząć do zadufania i braku akceptacji wytykanych błędów, jeśli pojawią się w ogóle, albo, co gorsze, nie pojawią się, bo zostaną stłumione przez wszechobecną falę szczęśliwości i afirmacji Javarsovii 2010. Jest to swego rodzaju apel do wszystkich, którzy chcieliby wyrazić swoją dezaprobatę dla braków i niedociągnięć konferencyjnych, o których powinniśmy wiedzieć, a wciąż nie wiemy. Piszcie do mnie na priv, a ja ze swej strony gwarantuję dyskrecję i obiecuję nie publikować nadawcy.

Dla mnie konferencja Javarsovia jest miejscem, gdzie mogę spotkać osoby z naszej społeczności javowej, które do tej pory znałem jedynie z Sieci, wirtualnie. W ten sposób poznałem Michała Karolika oraz Michała Januszewskiego. Poznałem wiele innych osób, ale te były mi znane już wcześniej, a teraz je zobaczyłem, zwizualizowały mi się i stąd pamiętam. Okazało się, że na konferencji pojawiło się wiele osób, z którymi chciałem pogadać, czy jedynie przywitać się i jestem zły na siebie, że o ich obecności dowiedziałem się już po konferencji. Wiem, że wielu z nich było również na SPOINie (= spotkanie integracyjne), ale nawet tam nie dane mi było z nimi się spotkać. Czyżby syndrom zbyt licznej konferencji?!

Rozpoczęcie konferencji należało do dwóch panów - Łukasza Żuchowskiego i Mateusza Zięby, którzy raczyli nas wyrafinowanymi "alegoriami spożywczymi". Przez moment miałem wrażenie, że NIE jestem na konferencji informatycznej, a przeniosło mnie raczej na jakiś biologiczny zjazd, ale szczęśliwie trwało to krótko.


Sukcesu Javarsovii 2010 należy szukać w wielu miejscach, ale czego nie można w żaden sposób pominąć, to rola wolontariuszy, którzy pozwolili mi całkowicie zapomnieć o roli organizatora przeddzień, jak i w trakcie konferencji. Było to niesamowite uczucie móc brylować wśród uczestników dumnie afiszując się mianem organizatora, podczas gdy cały ciężar faktycznego prowdzenia konferencji był na ich barkach, a nie moich. Gdyby nie owa zgrana 11-tka, z pewnością mielibyśmy wszyscy mniej ciekawe relacje teraz. Skład owej dzielnej 11-tki stanowili (w kolejności alfabetycznej nazwisk):
  • Dawid Bielecki
  • Wojciech Erbetowski
  • Klaudia Kociniak
  • Krzysztof Miksa
  • Tomasz Milczarek
  • Marcin Molak
  • Tomasz Rybak
  • Tomasz Stolarczyk
  • Marcin Szymaniuk
  • Anna Walkowska
  • Mariusz Woda
Gdybym tylko wiedział, który to który na poniższym zdjęciu...


Imiona organizatorów już są i do pełni szczęścia brakuje mi jeszcze odwzorowania numerów na właściwe nazwiska pozostałych współorganizatorów. Pomożecie?

W kapitule Javarsovia 2010 zasiedli (w kolejności za stroną Kapituła):
  • Michał Margiel
  • Łukasz Lenart
  • Łukasz Żuchowski
  • Bartek Zdanowski
  • Paweł Wrzeszcz
  • Mateusz Zięba
  • Sebastian Pietrowski
  • Jacek Laskowski
Każdy miał swój kawałek organizacji konferencji i kwestię koordynacji zadań rozwiązaliśmy przez wyznaczenie osoby odpowiedzialnej za temat, która weryfikuje swoje decyzje z innymi, jednakże ostatecznie to ona podejmuje decyzję. Była to swego rodzaju demokracja autorytatywna, a może dyktatura demokratyczna, gdzie w kwestiach spornych, to dowódca odcinka odpowiadał za właściwe decyzje. Każdy z nas miał już swój udział przy organizacji innych konferencji, więc zdrowy rozsądek i pragmatyczne postrzeganie świata brało górę. Były sytuacje krytyczne, ale taki podział gwarantował sukces, czego ocenę pozostawiam jednak samym uczestnikom.

W trakcie konferencji mieliśmy krótkie nagranie do Radia Kampus o sprawach konferencyjnych i nie tylko (i pewnie to "nie tylko" wprowadziło mnie w stan zadumania, a może zdumienia?! :)) Poniżej na zdjęciu Łukasz przedstawia naszą wizję konferencji i jej celów, a ja "odpowiadam" za wizualną część nagrania :)


W końcu jednak dochodzę do siebie i wychodzi moje "funkcjonalne ja"...


Agenda konferencji gwarantowała dobrą zabawę i trudno było znaleźć osoby, które nie znajdowałyby dla siebie miejsca.


Przy 4 równoległych ścieżkach z prelegentami znanymi na naszej scenie javowej trudno było znaleźć żywą duszę poza salami wykładowymi. Mnie pognało do Mariusza Markowskiego, który przedstawił nowości specyfikacji EJB 3.1. Bardzo odświeżająca i pouczająca prezentacja. Pojawiłem się również u Sławka Sobótki, który rozbawił mnie spostrzeżeniem "Kiedy dzieciaki chcą pograć w piłkę, stawiają serwer". Jeszcze do tej pory, na samą myśl, kulam się po podłodze na trafność tej uwagi. Widziałem Sławka już podczas 4Developers i miałem wrażenie, że wiele już słyszałem, ale zgodnie z powiedzeniem "Dwa razy nie wchodzi się do tej samej wody" mimo, że tytuły obu wystąpień łudząco podobne, to zawartość już inna. Podobnie było z Waldkiem Kotem. Ten również dawał popalić merytorycznie i trudne tematy stawały się po kilku jego wyjaśnieniach jasne. Wtedy dopiero zorientowałem sie, że odpowiednikiem Oracle Coherence jest IBM WebSphere eXtreme Scale, o którym się jednak tak wiele w Polsce nie mówi. A szkoda. Sam jestem przykładem osoby, która niewiele wie w temacie. Poza tymi prezentacjami nie miałem wiele możliwości do udziału w sesjach i liczę na nagrania, które pojawią się niebawem (?) na Sieci. Kiedy? Na razie termin nie jest znany.

Korzystając z okazji chciałbym wszystkim podziękować za aktywne zaangażowanie się w organizację i przeprowadzenie konferencji Javarsovia 2010. Było miło - technologicznie i socjalnie. Pojawiają się pomysły na jeszcze ciekawszą 5. edycję Javarsovia 2011, więc mam pewność, że Javarsovia trafiła tym samym na stałe do naszego technicznego kalendarza.

Zbieram linki do relacji czy zdjęć z konferencji, które chciałbym umieścić w tym wpisie. Proszę o kontakt, gdybyś nie widział/widziała któregoś.