30 marca 2010

IBM WebSphere Application Server V8.0 Alpha ze wsparciem dla Java Enterprise Edition 6.0

3 komentarzy
Jeśli czegokolwiek kiedykolwiek sobie marzyłem, to pracować z narzędziami i produktami, które lubię - najlepiej, aby były ze stajni Java EE i to w młodych wydaniach, np. Java EE 5, albo obecnie Java EE 6.

Można powiedzieć, że w większości czasu to marzenie było wciąż tylko marzeniem i niestety przychodziło mi bawić się z fajnymi technologiami głównie poza firmą. Nie powiem, że nie znajdowałem sobie ciekawych zajęć w ramach tych nieciekawych, ale w dużej jednak mierze część mojej aktywności sprowadzała się do poszukiwania, a to miało swój pierwiastek traconych chwil na poszukiwanie nieznajdowanego :) Projekty były wystarczająco ciekawe, aby do pewnego stopnia mnie angażować (mimo tego nie zaniedbywałem swoich obowiązków i starałem się wykonywać moją pracę na najwyższych notach, co nie zawsze było tak odbierane), ale to co najbardziej mnie kręciło było poza nimi, gdzieś w zaciszu domowego kominka, podczas pracy z projektami spod parasola Apache Software Foundation, Eclipse.org, NetBeans.org, JBoss.org czy SpringSource.org z elementami innych kuźni oprogramowania, jak np. niezbyt popularny, ale mocny narzędziowo OW2 czy SourceForge.

Kiedy przeszedłem do IBMa wiedziałem jedno - będzie dużo softu. Tak dużo, że tylko w moim obszarze technologicznym - IBM WebSphere - jest tyle tego, że z większością dałem sobie spokój i umieściłem na półce "Nieosiągalne". Swój zakres działania zawęziłem do działki IBM WebSphere Business Process Management ze sztandarowym produktem IBM WebSphere Dynamic Process Edition, a od niedawna IBM WebSphere ILOG JRules 7.0. Z wersji na wersję jest coraz ciekawiej i tylko czekać, aż owe słodkości technologiczne wejdą do projektów w Polsce.

Najnowsze wydanie produktów z rodziny WebSphere oznaczone jest numerem 7. Mamy IBM WebSphere Application Server V7, IBM WebSphere ESB V7, IBM WebSphere Process Server V7 i jeszcze kilka innych środowisk uruchomieniowych a z nimi i programistycznych. Dużo trzeba czasu poświęcić na to, aby je wszystkie opanować i mimo moich 4 lat w IBMie wciąż jako mocną stronę uważam administrację nimi, a stronę programistyczną oceniam jedynie na mocne 3, albo powiedzmy (przy dobrym humorze oceniającego) na 4. Jest czym się zajmować. I to mnie kręci.

Z pojawieniem się wersji V7 wszedłem z produktami na poziom Java EE 5, co mój zachwyt wyniosło na poziom prawie, że uwielbienia (patrz: Z Pro JPA 2: zapytania natywne w SQL vs JP QL i peany nt. WAS V7). Czy to z powodu ciągłego oczekiwania, kiedy to IBM ze swoimi produktami dobije do najnowszych acz finalnych specyfikacji Java EE, czy coś zupełnie innego (może ciągła i niezauważalna indoktrynacja korporacyjna), ale ostatecznie mogę zaproponować moim klientom ciekawą platformę, której znajomość pozwala na wejście w bardzo interesujący obszar Java EE 5. A jak pieję z zachwytu! Takiego pracownika mogłaby pozazdrościć każda firma! :-)

Już słyszę głosy w stylu: "I co z tego, skoro Java EE 5 leży na półce od kilku lat, a już pojawiła się nowa odsłona Java EE 6?" I tu leży przyczyna dla mojego wpisu - IBM WebSphere Application Server V8.0 Alpha, która wnosi coś we wspomnianym temacie:

Continued programming model productivity and ease of use enhancements through support for portions of key Java Enterprise Edition 6.0 specifications.

oraz

Simplified development of server-side REST applications using Java API for RESTful Web Services (JAX-RS).

i

Ease of use and security enhancements for Java API for XML Web Services (JAX-WS)

Kiedy to przeczytałem, aż jęknąłem z zachwytu. Gdyby do tego dodać program IBM WebSphere Application Server V7 Feature Pack for OSGi Applications and Java Persistence API (JPA) 2.0 Open Beta wprowadzający w tajniki OSGi Blueprint service specification and Java EE 6 JPA 2.0 along with the ability, optionally, to assemble, deploy and manage applications as a collection of versioned OSGi bundles możnaby spędzić następne miesiące nic innego nie robiąc, jak tylko czytając specyfikacje i próbując sprawdzić ich możliwości i obietnice. A czyż nie tego nam trzeba do własnego rozwoju intelektualno-technologicznego, aby móc w projektach zastosować narzędzie stosowne do problemu?!

Ja poświęciłem się ostatnio rozpoznaniu IBM WebSphere ILOG JRules 7.0, czego namacalnym dowodem jest (angielskojęzyczny) dokument Getting Started with IBM WebSphere ILOG JRules 7.0.2 Trial - Installation. W tym tygodniu 5-dniówka szkoleniowa ZB300 Developing Business Rule Applications with IBM WebSphere ILOG JRules V7.0, aby podsumować to certyfikatem IBM Certified Application Developer - WebSphere ILOG JRules V7.0, więc umoczonym po pachy przez kolejne 2 tygodnie, ale kolejne....ach już nie mogę doczekać się kolejnych - już planuję je z JEE 6. Teraz możnaby napisać, że to obowiązek pracowniczy, a nie inicjatywa i to lubię :-)

A jak Wam idzie rozwój inżynieryjno-technologiczno-produktowy? Przez "inżynieryjno" rozumiem rozwój w kierunku znajomości technik projektowych ze wzorcami projektowymi czy technikami w stylu TDD, BDD czy inne *DD, "technologiczno" technologie w stylu Java EE czy Spring lub OSGi, a "produktowy" to nic innego jak sfera produktów realizujących daną technologie, np. GlassFish, JBoss AS, Geronimo, Mule czy inne morskie robale. Na pewno coś zaplanowaliście, ale jak z realizacją w tak słoneczne dni? Się niechce, co? I tym sposobem wykreślam kilku leniuchowiczów, którzy mogliby aplikować na to samo stanowisko, co ja! ;-)

p.s. Kiedy nie starczy czasu na czytanie i ewaluację produktów samodzielnie, warto rozważyć udział w konferencjach, np. poznański GeeCON 12-14 maja czy warszawska Javarsovia 26 czerwca. Ja będę na tej drugiej (zgadnij której), więc koniecznie musimy przegadać to i owo. Jakby tak połowa moich czytelników zawitała na Javarsovię osiągnęlibyśmy oczekiwane minimum. Ty będziesz, ja będę, wszyscy będą! Zapraszam.

28 marca 2010

Ochy i echy z piątkowego 4Developers w Poznaniu

10 komentarzy
Krótko: Było wspaniale!

Trochę obszerniej: Było wspaniale - społecznościowo i merytorycznie.

A teraz wylewniej: Wyjazd z Warszawy o 8:35 i wjechałem do Poznania o 11:30. Przejazd do hotelu i po krótkiej rozmowie z Anią Kołodziejczyk (organizatorką konferencji 4Developers) pojawiłem się na mojej pierwszej prezentacji, w której Waldi (Waldemar Kot) przedstawił JPA 2 w TopLink Grid – skalowanie aplikacji korzystających z Java Persistence API. Ciekawie i na temat, a najbardziej podobały mi się ostatnie 10 minut z Eclipse i przykładami z Coherence i Oracle XE w tle. Zacząłem się zastanawiać, jaką to ma maszynę, że wszystko działa wystarczająco szybko, aby włączać i wyłączać. Wolałbym, aby teorii było mniej (już znałem), a więcej praktyki, szczególnie pod względem wykorzystanych narzędzi i ich konfiguracji.

Później przerwa i obiad z Pawłem (Szczecin), Marcinem (Toruń/Kraków) i Jackiem (Opole/Płock). Po tym zdecydowałem się na prezentację Wiedza o ASP.NET MVC: Budowanie aplikacji w 45 minut ze ścieżki .Net & C#. Zastanawiam się, dlaczego nic nie było o F#, na którego ostrzę sobie zęby?! Jedynym podsumowaniem prezentacji to, że ASP.NET MVC było łudząco podobne do Grails, ale w Grails wiele było obsłużone przez DSL, który nie przypominał programowania, jak to miało miejsce w ASP.NET MVC. Przekonałem się, że wybór na Javę jest znacznie przyjemniejszym wyborem.

Kolejna prezentacja to Marcin Kalas z Co nowego w Java SE 7?. Kiedy tak przysłuchiwałem się zmianom, nie mogłem oprzeć się wrażeniu, że wszystkie te zmiany dają dużo ciekawych rozwiązań programistom, którzy już siedzą w temacie. Dla nowicjuszy nie będzie lepiej, a SCJP 7 będzie na prawdę wyzwaniem. W SCJP5 nie było tematu współbieżności, co sądzę, że zagości na egzaminie z 7-ki z tymi innymi zmianami. Zdobycie egzaminu z języka Java będzie niezwykle karkołomnym przedsięwzięciem. Dla mnie, programisty javowego, sama możliwość skorzystania z tych zmian uatrakcyjnia język i sposób wyrażania się nim. Podobają mi się zmiany w zakresie niepowtarzania typów w typach generycznych (inferencja typów będzie w rękach kompilatora, który po deklaracji dowie się, z czym ma do czynienia) oraz wprowadzenie domknięć. Czekam z niecierpliwością na 7-kę!
Odnośnie samego prowadzenia prezentacji przez Marcina to, jakkolwiek zawartość merytoryczną oceniam bezsprzecznie na 5+, strona werbalna pozostawiała wiele do życzenia. Wybacz Marcin, ale czuć było Twój stres, który objawił się wielokrotnym, 3-krotnym powtarzaniem pojedynczego zdania z dłuższymi przerwami, co było bardzo uciążliwe dla słuchaczy (potwierdziłem to podczas rozmowy z kilkoma innymi słuchaczami). Chylę czoła dla Twojego przygotowania merytorycznego, ale strona werbalna kuleje i trzeba nad nią popracować.

Kolejne wystąpienie to prezentacja Sławka Sobótki o "Craftsmanship i wzorce projektowe". To była prezentacja, z której można się było wiele nauczyć - merytorycznie o samych wzorcach od strony ich użycia, jak i sposobu prowadzenia wystąpienia. Jako, że po nim występowałem ja, byłem jego wystąpieniem tak samo zachwycony, co zaniepokojony - podniósł mi poprzeczkę tak wysoko, że zacząłem się poważnie zastanawiać, co ja tutaj robię, z czym do ludu?! Zacząłem odczuwać tremę. Kwieciste słownictwo i tematyka tak mnie wciągnęły, że chciałbym więcej. Jako plan odnotowałem sobie ponowne przyjrzenie się wzorcom projektowym Chain of responsibility (dlaczego nie ma w polskiej Wikipedii?!), Strategia oraz Dekorator. Niezwykle inspirujące wystąpienie, po którym wolałbym mieć chwilę na wewnętrzne dywagacje niż występować ze swoim tematem.

I się stało, pojawiłem się ja. Wybiła 17-ta, a ja wciąż nie startuję na prośbę organizatorów - postanowili skorzystać z chwili (napięcia?) i wylosowali szczęśliwca w konkursie na historyjkę z Garfieldem. Zacząłem od...wpadki ze slajdami. Jak to ktoś poradził - kiedy się ma pierwszy slajd jak ostatni, łatwo można wpaść w pułapkę próbując rozpoczynać od ostatniego (!) :) Mnie się to przytrafiło i poczułem, jak atmosfera gęstnieje. Poczułem dreszczyk emocji, ale z pomocą publiczności udało się opanować temat i...po...szło! Jak było nie mi oceniać, ale udało mi się nawiązać pewną interakcję z uczestnikami, co uważam za duży sukces. Kolejnym była publika z żeńską częścią, która zdawała się być żywo zainteresowana tematyką, więc to kolejny. Zacząłem żałować, że poszedłem zbyt szeroko w tematykę i nie mogłem tym samym pokazać owego wychwalanego przeze mnie programowania deklaratywnego, w którym deklarujemy zamiast oprogramowywać. Szkoda, a mam wrażenie, że tego ode mnie wielu oczekiwało. Pilnowałem się z czasem (ostatecznie miałem 45 slajdów na 45 minut) i nietrzymaniem rąk w kieszeni. Ciekawym oceny końcowej. Z rzeczy, które postanowiłem poprawić to uatrakcyjnienie slajdów o grafikę i znalezienie czasu na krótki przykład wprowadzający - uruchomienie demo, przejrzenie kodu, a później dopiero część teoretyczna, którą podsumowuję ponownie częścią praktyczną (może być ponownie to samo, co na początku). Sądzę, że takie podejście wymaga zawężenia tematu i koniecznie określenia, dla kogo jest prezentacja i poziomu zaawansowania uczestników. Obowiązkowe jest również ponumerowanie slajdów, aby wiadomo było, ile przed nami i wyrównanie czasu do aktualnej pozycji. Gdybym jeszcze dowiedział się, jak poradzić sobie z dzieleniem ekranu na dwa w OpenOffice byłoby cudnie. Chciałbym uzyskać efekt prezentacji slajdów dla publiczności, a dla siebie zegar i kolejny slajd na własnym ekranie. Wiem, że jest to możliwe w MS Office, ale na OpenOffice nie udało mi się tego uzyskać. Za mało się starałem? Prezentację zrobiłem na Macu, więc jeszcze mogę pójść w ścieżkę Keynote, ale to kolejne płatne narzędzie. Czyżbym nie miał wyboru?

Uaktualnione slajdy znajdują się do pobrania jako JacekLaskowski-4Developers-Modele-SCA-OSGi-a-JavaEE-26.03.2010.pdf.

Powrót nieoczekiwanie o 18:28 (planowałem o 19:28) z Jackiem Lisem, co mimo wydłużenia podróży o 30 minut, zeszło niezwykle szybko. W końcu spotkały się dwie gaduły :-)

Dziękuję organizatorom - Ani, Andrzejowi i pozostałej (nieznanej mi) części zespołu 4Developers - za zorganizowanie wspaniałej konferencji i stworzenie niezapomnianej atmosfery z ludźmi z całej Polski. Brakowało mi osób z północno-wschodniej ściany Polski. Czyżby tam Java nie należała do stosowanych języków?! Mówiło się, że cena obiadu była wygórowana i wielu zrezygnowało, a dotarcie do miejsca, gdzie można było zjeść taniej było wyzwaniem samym w sobie. To był zdecydowany minus płatnej konferencji. Sam pomysł zorganizowania w hotelu był doskonały. Podobno niektórzy schodzili do sal w...kapciach! Już mi się marzy zorganizowanie konferencji w jakimś malowniczym miejscu, np. Pieninach, czy gdzieś w centrum Polski, ale poza dużymi aglomeracjami miejskimi. 2-dniowy weekend w hotelu w ciekawym miejscu mógłby połączyć potrzeby krajoznawcze z zawodowymi. Ktoś jeszcze o tym myśli i miałby miejsce na wrześniowo-październikową konferencję? Podlasie, Polesie, Bory Tucholskie, Pieniny, Bieszczady to są miejsca, gdzie możnaby tanio i w ciekawej atmosferze (np. przy ognisku) obgadać niuanse programowania korporacyjnego w Javie i nie tylko.

Jak widać 4Developers odcisnął swoje piętno na moim postrzeganiu imprez javowych w Polsce i był przyczynkiem do kolejnych. Dziękuję!

p.s. Jeśli ktokolwiek wyraził swoje zdanie nt. konferencji na swoim blogu i czyta tego, proszę o podlinkowanie w komentarzu. Warto rozważyć.

25 marca 2010

OSGi Service Platform Release 4 Version 4.2 Enterprise Specification wydane, jak i moja prezentacja na 4Developers

1 komentarzy
Bodajże 2 dni temu drukowałem wybrane rozdziały z 4. szkicu dokumentu OSGi Service Platform Release 4 Version 4.2 Enterprise Specification, kiedy to Łukasz Dywicki napisał w komentarzu do W piątek 4Developers ze mną z Enterprise OSGi i in.:

Jacku masz dobre wyczucie panowie z OSGi Alliance sprezentowali Ci finalną wersję specyfikacji. :)

I faktycznie! Specyfikacja już jest, a mi zostało 2 dni, aby przedrzeć się przez chaszcze specyfikacji i rozeznać się w zmianach. Nie będzie to zbyt odkrywcze, kiedy napiszę, że wersja oznaczona jako Early Draft 4, nie należała do najlepszych pod względem treści i układu dokumentu, więc liczę, że chociażby w tym obszarze się poprawiło.

Sama specyfikacja jest lekkostrawna i czyta się ją niezwykle szybko. Nie sądzę, aby komukolwiek sprawiała trudność w zrozumieniu i zachęcam do jej lektury. Jutro (piątek) moje wystąpienie o niej i o kilku innych technologiach wokół, a już dzisiaj prezentacja slajdów!

Slajdy na piątkowe wystąpienie podczas 4Developers z tematem "Modele komponentowe SCA, OSGi, Distributed OSGi i OSGi Enterprise a Java EE" dostępne są jako JacekLaskowski-4Developers-Modele-SCA-OSGi-a-JavaEE-26.03.2010.pdf.

Proszę o uwagi odnośnie zawartości merytorycznej i tej niemerytorycznej, m.in. w postaci szaty graficznej. Każda uwaga zostanie rozpatrzona (niekoniecznie pozytywnie :)). Planuję się nimi posłużyć do nagrania screencastu wprowadzającego w temat, a przynajmniej podcastu, więc proszę, bardzo proszę o chociażby kilka. Aktywność zostanie wynagrodzona lepszą zawartością.

22 marca 2010

W piątek 4Developers ze mną z Enterprise OSGi i in.

7 komentarzy
W nadchodzący piątek, 26. marca w Poznaniu odbędzie się konferencja 4Developers, w której biorę udział w roli prelegenta z tematem Modele komponentowe SCA, OSGi, Distributed OSGi i OSGi Enterprise a Java EE.

Zabrałem się za odświeżenie specyfikacji, bo ostatnimi czasy cały zaaferowany byłem IBM WebSphere ILOG JRules 7.0.2, czego upust dałem w serii wpisów na...innym blogu (!) Na razie bez wielkich fanfar wszedłem na dobre w BRMS i rozpoznaję. Mam wrażenie, że jakkolwiek temat potrzebny i użyteczny, to jego rozpoznanie nie jest zbyt imponujące w Sieci. Na pewno nie w kontekście nowicjuszy BRMSowych takich, jak ja. O tym jednak później. Mam pewne plany w kontekście tego tematu i po 2-tygodniowym rozpoznawaniu, zawieszam go na ten tydzień, do piątku.

Dzisiaj na warsztat wziąłem specyfikację OSGi Service Platform Release 4, Version 4.2 – Enterprise Early Draft 4 (Revision 3) z 3 listopada 2009, której zadaniem jest zdefiniowanie pojęcia Enterprise OSGi. Znajdziemy w niej ustandaryzowanie czegoś, co wielu mogło doświadczyć w Spring Dynamic Modules for OSGi(tm) Service Platforms tyle, że w kontekście Java EE 5 i wyżej, a nie tylko (?) Spring Framework. Niektórzy również mogli zakosztować Enterprise OSGi przez wykorzystanie możliwości PAX - The OSGi station at OPS4J. Jak widać wiele możliwości, a celem grupy OSGi Enterprise Expert Group (EEG) jest ustandaryzowanie łączenia OSGi i Java EE na bazie ich doświadczeń ku uciesze nas wszystkich. Nic dodać, nic ująć. Wielu próbowało i wielu się udało, ale również wielu brakowało specyfikacji. Ze wspomnianym dokumentem i kilkoma innymi z półki standaryzacyjnej OSGi ma być inaczej.

OSGi 4.2 to przełomowa chwila w dziejach OSGi. Po pierwsze (ale nie w sensie znaczenia, a raczej przychodzenia mi do głowy), definiuje Blueprint Service z implementacją referencyjną w postaci Spring-DM. Po drugie (patrz uwaga w nawiasie wcześniejszym), w szeregach OSGi pojawia się również pojęcie Distributed OSGi, dla którego referencyjną implementacją jest Apache CXF, a teraz Enterprise OSGi. Dodając do tego znany nam świat Java EE i Service Component Architecture (SCA) i można się nieźle napocić, aby to wszystko uchwycić w dobrym świetle i zrozumieć sens tych działań. Właśnie to jest celem mojej prezentacji - przedstawić wymienione modele komponentowe mające w zamyśle uprościć tworzenie aplikacji korporacyjnych, rozproszonych, modularnych, transakcyjnych, bezpiecznych i co tam jeszcze może przyjść nam do głowy, aby ostatecznie sprowokować dyskusję, której echa powinny rozbrzmiewać jeszcze po konferencji. 45 minut to niewiele, więc nie mam złudzeń, że niewiele powiem, ale celem nie jest, aby mówić, ale powiedzieć i słuchać. Zapraszam!

p.s. A czego Ty oczekujesz podczas prezentacji? Kodu w 45 minut raczej nie? Pewnie wycinków. Demo? Być może, ale każdy wie, jak wygląda aplikacja webowa, więc też raczej nie. Pewnie wad i zalet? Zamieniam się w słuch...

21 marca 2010

64. spotkanie Warszawa JUG - Adam Kędziora z "Wtyczka IBM Rational Team Concert dla NetBeans IDE"

0 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG)Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG) zaprasza na 64. spotkanie, które odbędzie się we wtorek, 23. marca o godzinie 18:00 w sali 5440 Wydziału MIM UW przy ul. Banacha 2 w Warszawie.

Temat: Wtyczka IBM Rational Team Concert dla NetBeans IDE, czyli ciekawy projekt integracyjny narzędzia komercyjnego z otwartym
Prelegent: Adam Kędziora

W ramach pracy sekcji "Inżynieria oprogramowania" koła naukowego informatyków Uniwersytetu im. Adama Mickiewicza w Poznaniu, zespół Adama Kędziory postanowił napisać wtyczkę NetBeans IDE do obsługi Rational Team Concert (RTC). W trakcie prezentacji Adam przedstawi architekturę rozwiązania, problemach, na jakie napotykał oraz planach dalszego rozwoju wtyczki. Rational Team Concert jest oprogramowaniem IBM do zarządzania procesem tworzenia oprogramowania od A do Z - obsługuje takie rzeczy jak bugtracker, repozytorium kodu, zarządzanie zasobami, automatyczny system budowania, aby wymienić tylko te najważniejsze. NetBeans jest platformą programowania aplikacji oraz IDE wspierającym różne języki programowania.

Adam Kędziora jest studentem 5. roku Informatyki na UAM i liderem tamtejszego koła naukowego informatyków. Poprzednio, lider sekcji inżynierii oprogramowania koła naukowego. Pasjonat technologii Java, w tym NetBeans RCP i projektowania oprogramowania. Przeszedł Metal Slug 1 na 5 kredytach.

Planowany czas prezentacji to 1,5h, po której planuje się 15-30-minutową dyskusję.

Wstęp wolny

Zapraszam w imieniu prelegentów i grupy Warszawa JUG!

17 marca 2010

"Getting Started with the WebSphere Application Server Feature Pack for Service Component Architecture" dostępny do publicznej konsumpcji

6 komentarzy
Okładka Getting Started with the WebSphere Application Server Feature Pack for Service Component Architecture"Getting Started with the WebSphere Application Server Feature Pack for Service Component Architecture" właśnie ujrzał światło dzienne! Do 30. marca jest faza publicznego ukamieniowania, więc jest jeszcze miejsce dla Twojego wkładu (to tak w nawiązaniu do niezapomnianej sceny ukamieniowania z Monty Pythona "Żywot Briana").

Ślęczałem nad tym tematem przez ostatnie miesiące (bodajże 4!) - najpierw rozpoznanie dostępnych funkcjonalności od strony administracyjnej z WAS 7.0.0.7, SCA 1.0.1.1 i IBM Rational Application Developer 7.5.5 z rozszerzeniem SCA Tools, aby później spisać je w postaci rozdziałów 5. "Administering SCA applications with the administrative console" i 6. "Administering SCA applications with wsadmin". Na koniec przegląd całej książki i możemy w końcu zakosztować owoców mojej wspólnej pracy (z 3 innymi członkami zespołu).

Pisanie tego typu książek - redbook (obszerniejszy, a tym samym dokładniejszy) i redpaper (mniejszy objętościowo i zwykle służy jako zajawka tematu do dokładniejszej analizy) - jest niezwykłym doświadczeniem nie tylko w kategoriach literackich, ale zdobywania wiedzy w temacie i umiejętności dzielenia się nim z szerszą publicznością - czytelnikami. Praca w rozproszonym zespole, zwykle w różnych strefach czasowych dostarcza niezwykłej dawki wiedzy i doświadczenia.

Pierwszy mój redbook o WAS 6.1 i EJB3 pisałem w San Jose, w Kaliforni (czytaj w 1. dzień w US - będzie wiele o EJB3 w wykonaniu WAS 6.1), a ten był już zdalnie (w cieple domowego kominka, bo zima nie rozpieszczała). W międzyczasie pojawiłem się przy 2 innych publikacjach w roli recenzenta technicznego w WebSphere Business Process Management V6.2 Production Topologies oraz współautora rozdziału nt. Web Services Security Kerberos Token Profile 1.1 w WebSphere Application Server V7.0 Web Services Guide, który ostatecznie i tak nie ujrzał światła dziennego.

Na uwagę zasługuje fakt, że każdy może uczestniczyć w tym programie - bezpośrednio na miejscu lub zdalnie. Chętnym polecam monitorowanie strony IBM Redbooks Residencies i zgłaszanie swoich kandydatur. Wierzcie mi, że nie trzeba wielkich umiejętności pisarskich czy merytorycznych, aby stać się autorem książki, a tym samym rozpoznaną personą w danym obszarze. Warto pokazać się światu w ten sposób i cieszyć się splendorem bycia częścią zespołu (nawet w roli współautora pojedynczego rozdziału, albo duchowym wsparciem, kiedy rozdział nie pójdzie do publikacji), bo po prostu jest to dla nas i aż prosi się, aby z tego skorzystać. Można przy tym poznać ciekawe miejsca, a to jest nie do przecenienia. Jedynym kosztem jest nasz czas, ale zamiast szukać pracy (i poświęcać temu czas) ona może przyjść do Ciebie (i zaoszczędzić sporo czasu). Jak widać typowe "coś kosztem czegoś" działa, ale w tym przypadku, zamiast rezygnować z przyjemności możemy wyrzucić niepotrzebny bagaż emocjonalny (i finansowy!). Zresztą, potrzebującym wsparcia duchowego polecam wizytę u psychologa, albo trenera od motywacji, a reszcie wybranie tematu i zapisanie się. Nieprzeciętne doświadczenia gwarantowane!

Powiedziałbym, że nie jest naszym prawem móc dzielić się wiedzą, ale obowiązkiem! Zmotywowany? A może wciąż się wahasz? Zapisz się już teraz i miej to z głowy! :)

15 marca 2010

Sobota ze mną na SFI 2010 w Krakowie - zbyt pobieżnie i marketingowo?!

4 komentarzy
Wejściówka Jacka Laskowskiego na SFI 2010Podczas sobotniego dnia Studenckiego Festiwalu Informatycznego (SFI) 2010 w Krakowie, na którym wystąpiłem z Service Component Architecture (SCA) z Apache Tuscany i WebSphere Application Server 7, mój zachwyt dla nowego wydania IBM WebSphere Application Server V7 dał nieźle popalić uczestnikom tak, że dało się usłyszeć opinie w stylu "Zbyt pobieżnie i marketingowo". Nie jest to o tyle przyjemne, że wcale nie było to moim zamiarem! Poważnie. Cóż, ten się nie myli, kto nic nie robi i przekonałem się o tym. A może jednak Adrian Nowak (z Polish JUG) miał rację, że w końcu odbiorcami byli głównie studenci, którym lepiej naszkicować pewne pojęcia, pozwalając na dalsze zgłębianie wiedzy we własnym zakresie zamiast próbować wydrążyć dziurę w specyfikacji i powiedzieć: "A teraz sami się z niej wygrzebcie"?! Tego się nie dowiem bez informacji zwrotnej od uczestników. To oni słuchali i to im dane jest oceniać, więc tylko im dane jest wpłynąć na kolejne prezentacje ze mną. Zamieniam się w słuch i zachęcam do komentowania wystąpienia. Może być w komentarzu do tego wpisu, albo na priv.

Na dzień przed, w piątek, podszedłem do testu na IBM Certified System Administrator - WebSphere Application Server Network Deployment V7.0 i w głowie mi huczało od WAS7 to, WAS7 tamto. Test zdałem na poziomie 75%, więc świat wydawał się kolorowy :) W tym samym tygodniu ukończyłem swoje rozdziały do książki "Getting Started with the WebSphere Application Server Feature Pack for Service Component Architecture", której publikacja planowana jest na 30. marca, więc ponownie, głowa pełna pomysłów nt. SCA i...WAS7. Pisałem już niejednokrotnie, że nie potrafię ukryć mojej radości, że doczekałem się wreszcie technologicznego wyrównania w obszarze specyfikacji Java EE 5 z innymi rozwiązaniami serwerowymi jak GlassFish (implementacja referencyjna, więc tutaj nie ma co mieć złudzeń, że zawsze musi/powinien być specyfikacyjnie do przodu) oraz JBoss AS. I widać, że ten zachwyt wziął górę nad merytoryczną stroną prezentacji i mógł przyćmić większą koncentrację nad SCA i Apache Tuscany. Z takim bagażem doświadczeń moje kolejne publiczne wystąpienie z tematem "SCA Component Models, OSGi, Distributed OSGi, the OSGi Enterprise Java EE and Java" podczas nadchodzącej konferencji 4Developers 2010, 26. marca w Poznaniu powinno być choć odrobinę lepsze ;-)

Całe wystąpienie było nagrywane, więc cierpliwi zostaną wynagrodzeni i sami będą mogli ocenić poziom wystąpienia. To jednak niebawem i kiedy tylko się o tym dowiem, poinformuję. 1 godzina to zdecydowanie za mało na wejście głębiej w temat SCA, więc długo mi nie zajęło, abym zmienił temat na "Wprowadzenie do...". Slajdy dostępne tutaj.

Pozdrowienia dla osoby, której, z przykrością muszę przyznać, nie znam imienia i nazwiska, która po moim wystąpieniu podeszła i przekazała swoje uwagi, co mam nadzieję będzie miało pozytywny wpływ na kolejne prezentacje publiczne. Tego typu rozmowa jest najbardziej wartościowym podarukiem bezpośrednich spotkań z uczestnikami własnych wystąpień. Po prostu bezcenne!

12 marca 2010

I mnie okrzyknięto IBM Certified System Administrator - WebSphere Application Server Network Deployment V7.0

3 komentarzy
Wynik Testu 000-377 - IBM WebSphere Application Server Network Deployment V7.0 Core AdministrationPrzez ostatnie miesiące, od kiedy rozpocząłem pisanie książki-redbooka "Getting Started with the WebSphere Application Server Feature Pack for Service Component Architecture" (czeka na publikację pod koniec marca) zajmowałem się wytrwale najnowszą wersją serwera aplikacyjnego IBM WebSphere Application Server 7.0. Cudeńko mnie zachwyciło ze swoim wsparciem dla Java EE 5 i innymi świecidełkami, m.in. BLA, CIM, Job Manager i Administrative Agent, że postanowiłem podsumować moją działalność z nim certyfikatem IBM Certified System Administrator - WebSphere Application Server Network Deployment V7.0. Do jego zdobycia potrzebne było zdanie jednego testu Test 000-377 - IBM WebSphere Application Server Network Deployment V7.0 Core Administration, który trwa 1,5 godziny. Dzisiaj się zebrałem i go...zdałem! Jutro teoretyczna prezentacja WAS 7.0 z jego wsparciem dla SCA na Studenckim Festiwalu Informatycznym, więc jak znalazł.

Wynik bardzo zadowalający, bo w końcu osiągnąłem magiczny pułap 75%, co mnie niezwykle naładowało pozytywnym myśleniem, o kolejnych wyczynach certyfikacyjnych :) Uczyłem się głównie praktycznie, podczas rozpracowywania WAS7 pracując z nim (w wersji 7.0.0.7 i SCA 1.0.1.1) na VMware z Linuksem. Część teoretyczna to:
Polecam oba źródła w tej kolejności, najpierw IEA a później InfoCenter. Są bezcenne. Planowałem zajrzeć do WebSphere Application Server V7: Concepts, Planning and Design, ale jakoś tak na planowaniu się ostało. Ach, w międzyczasie przeczytałem dwie książki o WAS7:
Dokładając do tego doświadczenia teoretyczne i praktyczne/projektowe z WAS 6.1 i jakoś tak wyszło, że się zrobiło 75%.

Kolejnym będzie już programowanie Web Services z WAS7 - IBM Certified Solution Developer - Web Services Development for WebSphere Application Server V7.0. Pewnie nie wcześniej niż za 1-2 miesiące, bo postanowiłem sięgnąć po więcej niż 80%, a to dla mnie stanowi nielada poprzeczkę (znajomi robią 100%, a mnie 80% zadowala).

Już pisałem o tym, ale powtórzę - w końcu IBM doczekał się serwera, który nie odstaje możliwościami darmowym rozwiązaniom w stylu JBoss AS czy GlassFish. One od dawna były na poziomie Java EE 5, a WAS dopiero od wersji 7.0, czyli od pół roku. Świat od razu wydaje się bardziej kolorowy. Jakby to było jeszcze cudniej, gdyby tak każdy klient chciał zmigrować na WAS7. Zgłaszam się na ochotnika, aby pomóc...za kaskę oczywiście! :)

11 marca 2010

Praktyki studenckie w IBM - ta edycja będzie nowatorska pod każdym względem - technologicznie i komunikacyjnie

5 komentarzy
Rozpoczęły się kolejne praktyki studenckie w IBM, które w edycji wiosennej trwają 3 miesiące, od marca do końca maja. Student wybiera temat z puli tematów, które do bazy wprowadzają potencjalni mentorzy (zainteresowani rolą mentora pracownicy IBM) z opisem swoich wymagań odnośnie proponowanego tematu. To trochę tak, jak z pracą licencjacką (nie robiłem, więc nie piszę z własnego doświadczenia, ale domyślam się, że tak jest), czy pracą magisterską (robiłem kilka, jedną ukończyłem, więc wiem :)). Promotorzy szukają studentów, albo odwrotnie i tak samo jest w programie IBM - Educational Student internship Program (w skrócie IBM ESI). Mnie interesują głównie rozwiązania z zastosowań produktów rodziny IBM WebSphere i staram się je wprowadzać w głowy młodych-gniewnych z rozwiązaniami otwartymi (o których mogę później pisać na blogu, jakbym się na nich znał i rozpoznał samodzielnie :)). Obie strony zyskują - IBMer (w tej roli ja) poznawanie nowych obszarów, na które nie miał czasu, a student-praktykant sposób pracy IBMera, wejście w tematy z "górnej półki" i pewnie cała masa innych rzeczy, którymi napycha się CVki. W końcu chodzi o wypromowanie obu - produktu i praktykanta, aby obaj mogli znaleźć się na rynku. Widzę jedynie plusy tego rozwiązania, więc kiedy dowiedziałem się o kolejnej edycji, nie miałem złudzeń i od razu krzyknąłem "Wchodzę!".

Wspominałem niejednokrotnie o tym, że unikam promowania pracodawcy, aby nie być posądzonym o stronniczość, brak dystansu, itp., więc niewiele można o nim tutaj przeczytać. Na razie niech tak zostanie, ale o praktykach nie mogę nie wspomnieć, bo temat jest w pełni jawny (dosłownie i w przenośni). Każdy student uczelni wyższej w Polsce i zagranicą może skontaktować się z prowadzącym program (nazwiska świadomie nie podam, a jedynie na życzenie) i wybrać temat (i jednocześnie prowadzącego).

Szaty mentora przybierałem już kilkanaście razy (przynajmniej 12) i głównie pracowałem z osobami z uczelni warszawskich. Trafiło mi się raz prowadzić 2 studentów z Serbii, ale wyniki były tak kiepskie, że prawie sam się załamałem i bodajże 1-2 osoby spoza Warszawy. Zawsze jednak liczba jednocześnie prowadzonych studentów-praktykantów nie przekraczała 2, każdy z osobnym tematem.

Tym razem jest zdecydowanie inaczej. Nie tylko że jednocześnie prowadzę 3 studentów, każdy pracujący samodzielnie, ale jeszcze wszyscy są zdalni! 3 osoby z Zielonej Góry. Tego jeszcze nie próbowałem, a kiedy napiszę, że zaraz wdrożyłem niecny plan poprowadzenia ich trybem "zwinnym" (nazwa robocza), to nie mam już złudzeń, że będą to najbardziej intrygujące praktyki, jakie do tej pory prowadziłem. A przecież jeszcze nie wspomniałem o tych wybranych tematach - też cudne:
  • Creating user interface for Human Tasks in IBM WebSphere Process Server V7 with Grails
  • Using Kerberos token profile to secure enterprise applications in IBM WebSphere Application Server V7
  • Installation of new versions of a BPEL process, and allowing the migration of running processes to a new version in IBM WebSphere Process Server V7 and JBoss Seam-based client
Mój "zwinnie nowatorski" sposób na praktyki z 3 osobami zdalnie, każdy indywidualnie ze swoim tematem, wygląda następująco:
  • Każdy podopieczny pracuje na Linuksie (RHEL lub SLES - certyfikowane dystrybucje dla produktów WebSphere) na VMware (na wypożyczonych laptopach mają Windows i szkoda byłoby marnować czasu na przeinstalowywanie systemu, a i późniejsze przekazanie pracy jest łatwiejsze - dostaję dokumentację z gotowym obrazem). W ten sposób poznanie produktu od strony administracyjnej jest dokładniejsze, bo praca z linią poleceń na MS Windows to jak stąpanie po kruchym lodzie - można się załamać.
  • Temat dzielony jest na części tak, aby można było skończyć go w ciągu tygodnia/dwóch. Są to tak proste zadania, jak instalacja, pierwsze próby z przykładowymi aplikacjami, ale i bardziej wyrafinowane, jak rozpoznanie działania produktu w danym obszarze, czy połączenie rozwiązania komercyjnego z darmowym, np. WPSa z Grails, Apache Wicket czy JBoss Seam. Tematy łączą przyjemne (Grails, Wicket, Seam) z pożytecznym (WPS) :). Na końcu prac tworzona jest dokumentacja opisująca co i jak autor miał na myśli.
  • Nauka głównie z ogólniedostępnych materiałów - IBM Education Assistant czy Information Center dla danego produktu, np. WAS7 InfoCenter, WPS7 InfoCenter, WID7 InfoCenter.
  • Śledzenie postępów prac przez...bloga, twittera i blipa! W każdy piątek zdzwaniam się z praktykantem (najpóźniej w środę wysyła mi zaproszenie z wybraną godziną między 10-14) i przez najwyżej 1h omawiamy co zostało zrobione i co planujemy. Omawiamy problemy i ich rozwiązania (albo ich brak i wtedy szukamy miejsc, gdzie można je znaleźć). Podsumowanie naszych rozmów trafia na bloga (więc przynajmniej jeden wpis pojawia się tygodniowo) z wpisami na blipa (po polsku) i twittera (po angielsku) o codziennych postępach prac w odpowiednich kanałach. W ten sposób ja wiem, co się dzieje, a praktykanci rozgłaszają swoje nabywane umiejętności (co może przypominać Inversion of Control, gdzie to nie oni szukają zatrudnienia, ale ich się znajduje przez ich publiczną aktywność - zgodnie z zasadą Demeter zwaną również Hollywood Principle: "Nie dzwoń do nas, my zadzwonimy do Ciebie"). To powinno również wymóc na praktykantach dzielenie podejmowanych zadań na cząstki, które da się zrealizować w ciągu godzin i opisać w 144 znakach.
Właśnie ten ostatni element jest dla mnie najbardziej intrygujący. Reszta była już wałkowana kilkakrotnie przedtem i nie jest dla mnie wielkim novum. Niezwykle ciekawym wyników.

Namiary na 2 pierwszych praktykantów (na razie konta na twitterze):
Nie pozwólcie im sądzić, że ich praca jest niezauważona przez społeczność :)

Jak Wam się podoba takie podejście do tematu? Moglibyście coś zasugerować, abym mógł poczuć klimaty zdalnego prowadzenia zespołów programistów w zwinnym stylu i nowymi technologiami (w tym i komunikacyjnymi)? Ciekawe, czy dałoby się tak prowadzić firmę?

07 marca 2010

Grails a TDD z perspektywy "Growing Object-Oriented Software, Guided by Tests"

2 komentarzy
Growing Object-Oriented Software, Guided by TestsKsiążka jest od dzisiaj obowiązkowa dla kogokolwiek, komu przyjdzie pracować ze mną, aby...zrozumiał moje postępowanie :)

Rozpocząłem rozdziały praktyczne w części Part II. The Process of Test-Driven Development i nie mam wątpliwości, że teoria, a teraz praktyka (wciąż jednak tylko w postaci lektury książki), pozostawią trwały ślad w moim postrzeganiu programowania. Uległem książce całkowicie i czuję się lekko rozdarty.

Z jednej strony książka nawołuje do rozpoczynania projektów od przekrojowych testów integracyjnych, gdzie testuje się wybrane funkcjonalności docelowej aplikacji...bez jej istnienia (chociażby jednej maluczkiej klaski), a z drugiej mam świadomość (albo i nie, ze względu na brak praktycznego doświadczenia), że potrzebna wiedza na początku projektu i do zrobienia tego pierwszego kroku jest niebagatelna, a nerwy trzeba trzymać mocno na postronku. Moje rozpalone są do czerwoności. Chciałoby się trochę poszaleć programistycznie, a tu każą uzbroić się w cierpliwość i zbudować szkielet testujący wybraną funkcjonalność. I nie ma to być trywiał w stylu odczyt z bazki, ale w przypadku aplikacji webowej, najlepiej uruchomić przeglądarkę, wskazać właściwą stronę i sprawdzić wynik! Dla mnie to novum, bo pisanie testów sprowadzałem zwyczajnie do testów jednostkowych, jeśli w ogóle.

W przypadku Grails sprawa się znacznie upraszcza, bo wykonanie dowolnego polecenia budującego typu grails create-controller czy grails create-domain-class tworzy nie tylko wskazany artefakt, ale i...test integracyjny (!) Człowiek, czy chce, czy nie, ugrzązł w TDD na dobre. To, czy wyjdzie to na dobre i czy w ogóle skorzysta się z tego dobrodziejstwa jest tematem na inne przemyślenia, ale fakt faktem Grails zdaje się być pomocnym. Czy aby rzeczywiście można nazywać to "pomocnym"?

I tu pojawiła się moja wątpliwość. Nawet, jeśli Grails faktycznie tworzy testy integracyjne dla wybranego artefaktu czy stworzymy go explicite z grails create-integration-test, to zastanawia mnie, czy to faktycznie odpowiada początkowemu testowaniu integracyjnemu z TDD jak opisano w tej książce. Zdanie z dokumentacji grails create-integration-test:

An integration test differs from a unit test in that the Grails environment is loaded for each test execution.

uspokaja mnie nieznacznie, bo w końcu cała infrastruktura Grails jest uruchamiana w całości przy każdym teście, ale zastanawiam się, czy nie powinienem raczej zbudować war (grails war), uruchomić Tomcata z podłączoną zewnętrzną bazą danych, wdrożyć i uruchomić aplikację i po uruchomieniu przeglądarki uruchomić testy integracyjne (pewnie z pomocą Selenium)?! Znacznie to więcej roboty, ale faktycznie odpowiada bardziej docelowej architekturze, a tak zrozumiałem potrzebę rozpoczęcia prac z testami integracyjnymi, które najbardziej zbliżą nas do docelowego środowiska produkcyjnego. Czy przypadkiem nie poniosło mnie za bardzo? Pomocy!

06 marca 2010

SpringSource Tool Suite (STS) i niewidoczny katalog domowy Grails pod Mac OS

3 komentarzy
Trochę mnie to zaskoczyło i wciąż nie mogę uwierzyć, że tak to działa. Jak się przekonałem, niuanse systemowe Mac OS mogą wprowadzić w pewne zakłopotanie.

Pod Mac OS niektóre katalogi są ukryte w menedżerze plików Finder, np. /usr/local.
Zwykłem instalować własne oprogramowanie właśnie w /usr/local i tak też zrobiłem z Grails 1.2.1. Siedzi sobie grzecznie w /usr/local/grails.
 devmac:~ jacek$ type grails
grails is hashed (/usr/local/grails/bin/grails)
"Nielada problem" możnaby powiedzieć. Kiedy przyszło mi konfigurować Grails w SpringSource Tool Suite (STS) pojawił się problem z niewidocznością /usr (pola Version i Grails home są tylko do odczytu)!
Nie mam bladego pojęcia, jak to rozwiązać poprawnie(j), ale u mnie wystarczyło podlinkować katalog /usr/local/grails na dowolny inny w widocznym katalogu i jego wskazać jako katalog domowy Grails.
 devmac:~ jacek$ ln -s /usr/local/grails grails
Wskazując na niego, wejdziemy do wskazywanego (ukrytego w Finder).
I Eclipse jest szczęśliwy, ale nie bardziej niż ja :)

Może być potrzebne odświeżenie zależności w projekcie, jeśli Grails został zdefiniowany po jego imporcie - menu kontekstowe Grails Tools > Refresh Dependencies.
Wtedy pojawi się wirtualny katalog w projekcie Grails Dependencies [Grails], gdzie jak rozumiem to, co występuje między nawiasami kwadratowymi jest nazwą, którą podałem podczas definiowania katalogu domowego Grails.

Oczywiście po wykonaniu tej sztuczki katalog ~/grails nie jest już potrzebny i można go skasować. Problem rozwiązany, ale wciąż pozostaje pytanie, czy nie ma prostszego rozwiązania. To wydaje mi się lekko przekombinowane.

p.s. Dla spragnionych wrażeń: istnieje możliwość włączenia opcji wyświetlania wszystkich plików i katalogów w Finder - więcej w artykule Show all files in the Finder.

05 marca 2010

63. spotkanie Warszawa JUG - Jacek Szczukocki z "JGAP, czyli gen javy w każdym z nas"

0 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG)Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG) zaprasza na 63. spotkanie, które odbędzie się we wtorek, 9. marca o godzinie 18:00 w sali 5440 Wydziału MIM UW przy ul. Banacha 2 w Warszawie.

Temat: JGAP, czyli gen javy w każdym z nas
Prelegent: Jacek Szczukocki

Algorytmy genetyczne (GA's) są algorytmami wyszukiwania, które działają w procesie doboru naturalnego. Rozpoczynają się od zestawu możliwych rozwiązań, który następnie ewoluuje w kierunku zestaw bardziej optymalnych rozwiązań. W zestawie rozwiązań te, które są słabe zazwyczaj wygasają podczas, gdy lepsze rozwiązania są propagowanie ich korzystne cechy, wprowadzają więcej rozwiązań do zestawu, który oferują większe możliwości (czy tu nie ma jakiegoś błędu językowego? to jeszcze mutuje :)). Przypadkowe mutacje pomagają zagwarantować, że zestaw ten nie popadnie w stagnację.

Prezentacja ma na celu zainteresowanie słuchaczy tematyką wykorzystania systemów sztucznej inteligencji, a w szczególności algorytmami genetycznymi. W trakcie prezentacji opiszę zasadę działania oraz podstawy biologiczne algorytmów genetycznych oraz innych technologii wchodzących w skład szkieletu JGAP. Prezentacja obejmie przykłady z wykorzystaniem algorytmów genetycznych z naciskiem na ich mocne i słabe strony.

Jacek Szczukocki jest absolwentem Wydziału Informatyki katedry Systemów Sztucznej Inteligencji i Systemów Ekspertowych Wyższej Szkoły Humanistyczno-Ekonomicznej w Łodzi. Programista Java od 4 lat. Zafascynowany technologią sztucznej inteligencji i zagorzały propagator jej wykorzystania..

Planowany czas prezentacji to 1,5h, po której planuje się 15-30-minutową dyskusję.

Wstęp wolny

Zapraszam w imieniu prelegentów i grupy Warszawa JUG!

04 marca 2010

"Nie ma geniuszu bez ziarna szaleństwa" - "wątpliwa" lektura o TDD z "Growing Object-Oriented Software, Guided by Tests"

3 komentarzy
Growing Object-Oriented Software, Guided by TestsO Test-Driven Development (TDD) każdy gdzieś tam słyszał i niejeden obiecywał wdrożenie jego zasad. Jednym się udaje (albo sądzą, że tak jest), a inni polegli i zarzucili temat. Smutna prawda, ale prawda. Pewnie w dużej mierze dlatego, że pomimo wiadomych zysków - przede wszystkim skoncentrowanie na celu, jakim jest stworzenie działającego oprogramowania, zamiast rozdmuchiwania modelu, później kontrolerów, później widoku i jeszcze tysiąca innych warstw, aby ostatecznie przekonać się, że połowy nie potrzebowano, albo że i tak nie wiadomo, po co i na co, a termin i klient dawno poszli w zapomnienie - wdrożenie takiego podejścia wymaga niezwykłego zdeterminowania zespołu do zrealizowania postawionego celu. Innymi słowy - rygoru i dyscypliny! A kto by tam lubił rygor i dyscyplinę?! Niewielu osobom kojarzy się to z czymś przyjemnym. Mi na pewno nie.

Po recenzji Tomka Kaczanowskiego "Growing Object-Oriented Software Guided by Tests - Book Review" i namowie Bartka "Koziołek" Kuczyńskiego (Fwd: A free copy of "Growing Object-Oriented Software, Guided by Tests" for review doable?), aby ją zamówić do Biblioteki Warszawskiego JUGa dotarła i do mnie. W zeszłym tygodniu rozpocząłem jej lekturę i...jestem pod ogromnym jej wrażeniem. Niesamowicie nabałaganiła w mojej głowie. Stąd to użycie słowa "watpliwa" w tytule wpisu, bo narodziło mi się wątpliwości cała masa (i oby nie zakończyło się psychiatrą :)).

Książkę "Growing Object-Oriented Software, Guided by Tests" panów Steve Freeman i Nat Pryce (Oct 12, 2009 by Addison-Wesley Professional) czyta się lekko i przyjemnie. Jestem przy rozdziale 11. "Passing the First Test" (z 27-miu i 2 dodatków), więc praktycznie (dosłownie i w przenośni) niewiele mogę o niej napisać, ale mimo jej początkowego namolnego przekonywania o wyższości TDD nad tradycyjnym podejściem do tworzenia oprogramowania (najpierw model, później interakcje w jego ramach z testami jednostkowymi w międzyczasie), widać jedną wyraźną różnicę w moim postrzeganiu TDD, a tym, co autorzy rozumieją pod tym akronimem.

Do tej pory sądziłem, że TDD to przede wszystkim testy, co jest do tego momentu prawdziwe. W moim jednak rozumowaniu były to przede wszystkim testy jednostkowe przy tworzeniu konkretnych klas (dowolnej warstwy). W tej książce dowiedziałem się prawdy i to nie takiej, jakiej oczekiwałem początkowo. Miałem świadomość różnic w moim postrzeganiu TDD a jego zasadami, głównie z braku praktycznego doświadczenia i niezbyt dalekoidącym zainteresowaniem tematyką, ale to, w jaki sposób TDD przedstawia ta książka przeszło moje najśmielsze oczekiwania. Sprawa rozbija się o te "nieszczęsne" testy. Książka podzielona jest na 5 części, z których pierwszą mam już za sobą Part I. "Introduction", w której dowiedziałem się o teorii TDD i testach...funkcjonalnych, ale nie takich, które weryfikują przydatność gotowego produktu przez klienta (prawdopodobnie wykonanych wspólnie z nim manualnie), ale takich, które zweryfikują automatycznie, że dana funkcjonalność jest gotowa do testowania końcowego z klientem (!) To było dla mnie zabójcze doświadczenie, kiedy dodać do tego, że owe testy tworzy się zanim cokolwiek w naszej aplikacji powstanie, nawet infrastruktura. Czyż to nie (sarkazm włączony) "odświeżające" podejście (sarkazm wyłączony)?!

Zatem, jeśliby potraktować podejście książkowe, to zaczynamy od przekrojowego testu wybranej, pierwszej, zwykle łatwej do osiągnięcia, funkcjonalności końcowej aplikacji. Nie piszę tutaj o testach klasy XYZ, czy testach użyteczności technologi ABC, ale o pokrojeniu całej ostatecznej aplikacji (znanej na bazie dotychczasowych wymagań klienta) na kawałki funkcjonalne - rozpoczynające się od interfejsu użytkownika, a kończące się na systemach wewnętrznych - i bez rozstawionej infrastruktury stworzenie dla wybranego kawałka testu. Z oczywistych względów nie będzie to działający test - nic nie mamy - ale właśnie o to chodzi. Tylko, który zespół to wytrzymuje?! Chyba tylko te najbardziej zdeterminowane, zdyscyplinowane i...tu należałoby dopisać inne zalety zespołów, o których istnieniu nie miałem pojęcia. Jeśli takie istnieją, koniecznie muszę się dowiedzieć o ich stanie duchowym, kiedy nic nie ma, a trzeba stworzyć dla tego czegoś nieistniejącego kod testujący, w którym czerwonego więcej niż czarnego (czerwone to podkreślenie błędu w IDE, a czarne to wpisane litery składające się na test). W/g mnie praca w takim zespole może być tylko przywilejem, a dostosowanie się do reguł TDD...szaleństwem. W tym ujęciu jednak "szaleństwo" jest dla mnie czymś niezwykłym i zagadkowym. "Choć to szaleństwo, jest w nim przecie metoda" powiedział William Shakespeare w Hamlecie, ale podobają mi się też takie powiedzenia (zaczerpnięte z Wikicytaty) - "Kto ukrywa własne szaleństwo, umiera niemy" czy "W szalonym świecie tylko szaleńcy są rozsądni" i "Nie ma geniuszu bez ziarna szaleństwa". Naczytanie się takich powiedzonek nie może pozostać obojętne na nasze postrzeganie świata i podobnie jest z tą książką.

Zgodnie z nią, pierwsza faza TDD to stworzenie testu przekrojowego zwana The Walking Skeleton. Ów "chodzący szkielet" to szkielet przyszłego rozwiązania funkcjonalnego. Jego zadaniem jest sprawdzenie naszej świadomości architektonicznej tworzonej aplikacji i zaproponowanie architektury docelowej. Najlepiej jest, aby test był niewielki, ale dotykał wszystkich warstw, począwszy od interfejsu końcowego użytkownika a skończywszy na systemach zewnętrznych. W książce tworzony jest system aukcyjny jako samodzielna aplikacja desktopowa w JFC/Swingu i komunikująca się przez XMPP (w tej roli Smack) z płatnym systemem aukcyjnym. Do testowania GUI w Swingu wykorzystuje się WindowLicker, o którym nigdy wcześniej nie słyszałem (co, choćby z tego tylko powodu, już stanowi wartość z czytania tej książki). Dopiero w rozdziale 11. "Passing the First Test" przekonam się, jak autorzy zestawiają całe środowisko, więc nie napiszę, co o takim podejściu myślę teraz, poza tym, że jestem równie zdruzgotany, jak niewiele wiedziałem o TDD, jak zaintrygowany nowatorskim podejściem do tworzenia oprogramowania. Oby mi się nie udzieliło, bo nieznającym tematu ciężko będzie zrozumieć...szaleńca :)

Na bazie doświadczeń z tej książki chciałbym zrealizować pewien swój pomysł na aplikację desktopową z GUI w JFC/Swingu. Jednym z problemów, z jakim się obecnie borykam, to wybór między Eclipse RCP a NetBeans RCP. O tych słyszałem, że warto je rozważyć, ale może są inne? Chciałbym, aby tworzenie GUI było równie proste, co ostatnio stworzona przeze mnie aplikacja w Objective-C/Cocoa w Xcode na bazie lektury Introduction to Cocoa Application Tutorial. To było tak niezwykle proste, że uwierzyłem w swoje ukryte pokłady wiary na powrót do C w wersji obiektowej i na MacOS :) Nie chciałym jednak wchodzić w ten temat, kiedy tworzę aplikację GUI przede wszystkim na MS Windows i Linuksa, a Mac OS przy okazji, więc pewnie wybór padnie na Eclipse RCP vs NetBeans RCP. Jako, że nie chciałbym wracać do silnie typizowanego programowania w Javie i Swingu, więc przyjdzie mi skorzystać z Griffon, który jest (jak rozumiem) połączeniem NetBeans RCP i Groovy. Jak się coś nawinie z Clojure może zrobię przeskok, ale na chwilę obecną tnę moje żądze do realizowalnego minimum.

A jak Wam idzie TDD z tworzeniem aplikacji desktopowych w JFC/Swing, NetBeans RCP czy Eclipse RCP? Co polecacie na warsztat? Gdyby jeszcze było na tyle lekkie, aby dało się to puścić przez Java Web Start byłoby cudnie (aczkolwiek jest to wymaganie niewielkiego znaczenia).

03 marca 2010

Sun Education Open Day - zaproszenie na warsztaty certyfikacyjne

13 komentarzy
To już druga inicjatywa Suna...ekhm...Oracle i kiedy się o niej dowiedziałem od razu zaproponowałem jej publikację na swoim blogu. Darmowe inicjatywy wspierające społeczność javową zawsze mile widziane!

Zanim zaproszenie, jedna uwaga - w tym samym terminie jest konferencja 4Developers w Poznaniu, na której wystąpię z tematem Modele komponentowe SCA, OSGi, Distributed OSGi i OSGi Enterprise a Java EE. Pozostaje jedynie mądrze wybrać :) Ja już mam to za sobą.

Warsztaty certyfikacyjne - Java
26.03.2010 Warszawa

Sun Learning Services zaprasza wszystkich zainteresowanych na warsztaty z zakresu Javy. Celem spotkania jest zapoznanie się z nowościami w Javie, sprawdzenie się na próbnych testach egzaminacyjnych, otwarta dyskusja z instruktorami i innymi uczestnikami spotkania, jak również zapoznanie sie z możliwościami szkoleniowymi.

Głównym gościem panelu poświęconemu Javie będzie Luc Duponcheel - jeden z najbardziej doświadczonych instruktorów Javy. Szkolenia prowadzone przez Luca cieszą się ogromnym zainteresowaniem. Nasz gość poprowadzi warsztaty o nowościach w Javie 6, jak również w kuluarach poprowadzi dyskusję o certyfikacji SCEA.

Szczegółowe informacje o spotkaniu na stronie www.javapoint.pl (najlepiej zajrzeć tam dopiero od poniedziałku, 8.03).

Gorąco zachęcamy wszystkich tych, którzy interesują się certyfikacją i chcieliby spotkać się z ludźmi o podobnych zainteresowaniach.

Sesja jest bezpłatna.

Pytania prosimy kierować na ses_pl@sun.com
Rejestracje przyjmujemy do 19. marca 2010 - liczba miejsc jest ograniczona!

01 marca 2010

Inicjacja w F# już za mną - pierwsza aplikacja kliencka, która działa

3 komentarzy
Właśnie zakończyłem moją inicjację w F# (również znanego jako fsharp).
#light

open System
open System.Net
open System.IO
open System.Diagnostics

let HttpPost (url:string) =
let request = WebRequest.Create(url) in
request.Method <- WebRequestMethods.Http.Post;
request.ContentType <- "application/x-www-form-urlencoded";

let response = request.GetResponse() in
let reader = new StreamReader(response.GetResponseStream()) in
reader.ReadToEnd()

do let response = HttpPost "http://java.sun.com" in Console.WriteLine("odpowiedź: {0}", (response))
Nie jest to arcydzieło programowania funkcyjnego czy obiektowego, a przypomina stare dobre czasy programowania proceduralnego w C, więc możnaby powiedzieć, że nie ma się czym chwalić, ale chodziło mi raczej o zwrócenie uwagi w stronę tego języka i zdobycie kilku komentarzy, czy warto, czy idę w dobrą stronę, itp. Owe (arcy)dzieło stworzyłem na bazie przykładu Simple Web Service Consumer i zmierzam do czegoś bardziej wyrafinowanego, co w odpowiedzi otrzyma obiekt ze świata Javy. Taka skromna integracja światów .Net/F# ze SCA.

Skąd pomysł na fsharp? Wszystko zaczęło się od Clojure i mojego pierwszego na poważnie spotkania z językami funkcyjnymi. Coś we mnie pękło, coś się przestawiło i z programowania obiektowego zwróciłem się w stronę programowania funkcyjnego (PF). Podobno nie jest tak ciężko, a na pewno bardziej wieloprocesorowo i mniej pamięciożernie. Zalety są, a jedyną wadą, na jaką wciąż trafiam, to w zasadzie słabe rozpoznanie tego obszaru. Może dlatego mnie tak na to wzięło (objaw duszy odkrywcy?).

Komentarz Mateusza Mrozewskiego do Nowy serial "SCA praktycznie" - Zestawienie środowiska z Apache Tuscany i Eclipse IAM uzmysłowił mi, że brakuje mi języka spoza JVM, który mógłby być klientem usługi ATOMowej z artykułu. Przecież nie będę wracał do C czy C++, a do C# nie mam narzędzi, a nawet i systemu operacyjnego (od stycznia siedzę wyłącznie na MacOS), więc przypomniało mi się z F#. A może jest coś jeszcze alternatywnego i równie ciekawego?

Zainteresowanym programowaniem w F# proponuję książkę F# Programming na WikiBooks, bo sam poza istnieniem języka i kilku jego cech oraz tym pierwszym programem/skryptem, nic więcej nie wiem.

W planach mam opisanie konfiguracji środowiska do F# na MacOS, ale na razie walczę z zadaniem od Mateusza i lekturą kolejnej książki "Growing Object-Oriented Software, Guided by Tests", więc albo należy cierpliwie poczekać, albo przekonać mnie do zmiany planów :)