Pokazywanie postów oznaczonych etykietą eclipse. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą eclipse. Pokaż wszystkie posty

24 listopada 2012

WebSphere Liberty Profile z Enterprise OSGi i Java EE na Eclipse DemoCamp w Poznaniu

2 komentarzy
Pamiętasz wpis z poprzedniej edycji Eclipse DemoCamp w roku 2011? Nie?! Zajrzyj do Wrażenia pokonferencyjne - o Eclipse DemoCamp w Poznaniu. Tam też znajdziesz zdjęcie, którym Łukasz postanowił utrwalić naszą znajomość. I właśnie podczas czwartkowego spotkania, zrobiliśmy sobie kolejne, ku głębszemu utrwalaniu.


A tak poza tą bojową miną Łukasza, miły z niego gość. Zebrał się wspólnie z Natalią i zorganizowali kolejną edycję Eclipse DemoCamp. Kolejny Eclipse DemoCamp w Poznaniu!

Można o tej konferencji wiele pisać, ale na pewno bez trudu można zauważyć, że EDC na stałe wpisało się w kalendarz imprez informatycznych w Poznaniu. Zawsze w ciekawych miejscach (aczkolwiek tegoroczne zaszumione karaoke w tle, co trochę irytowało) i z pełną salą (dobieraną zapewne pod liczbę uczestników, więc zawsze wydaje się, że ludzie się wylewają).

Ze względu na 95 minutowe opóźnienie pociągu Warszawa-Berlin pojawiłem się na konferencji na długo po tym, kiedy o pizzy przypominały jedynie sterty pustych opakowań, więc po pierwszym piwie moje ciało doznało lekkiego zaskoczenia alkoholowego i kiedy po Jarku Bąku i Darku Łukszy przyszło mi wystąpić, nie mogłem znaleźć języka w gębie. Atmosfera spotkania pozwoliła mi dość szybko dojść do siebie i zaaplikowałem publiczności odpowiednią dawkę mojej wiedzy.

Slajdów nie było, a kontynuacją wystąpienia będą przyszłe artykuły i skrinkasty, których należy oczekiwać więcej niebawem. Co do samej formy prezentacji, polecam przygotować kawałki kodu na slajdach i wspierać się nimi do uwypuklania wartościowych elementów prezentowanego tematu. Dodatkowo warto zawsze otwierać wystąpienie slajdami wprowadzającymi oraz podsumowującymi na koniec. I najważniejsze - różne metody prezentacji uatrakcyjniają jej zawartość, więc korzystaj ze slajdów, na których są rysunki, tekst, zdjęcia, mnóstwo kolorów czy figur oraz porcja kodowania na żywo w międzyczasie. Nie udaje mi się tego wdrożyć w pełni, ale mam wrażenie, że jest to podstawa udanego wystąpienia publicznego. Ciekawe doświadczenie móc tego skosztować.

Dziękuję Natalii i Łukaszowi za zaproszenie i zachęcam innych do przyszłego, *czynnego* współudziału, czy to w roli aktywnego uczestnika, czy współorganizatora, albo prelegenta.

Udział w tegorocznym EDC w Poznaniu odkładam do archiwum i uważam go za bardzo wartościowe doświadczenie. Polecam!

15 grudnia 2011

ManagementFactory.getPlatformMXBeans() w Javie 7 i nauka generyków

4 komentarzy
Jestem technicznym recenzentem książki Java 7 New Features Cookbook przed jej oficjalnym wydaniem na początku 2012 (pisałem o tym w Pierwszy rozdział o Java 7 od Packt) i w rozdziale 9. Database, Security and System Enhancements trafiłem na metodę java.lang.management.ManagementFactory.getPlatformMXBeans().

Jej użycie od razu przykuło moją uwagę, przede wszystkim dlatego, że korzysta z typowego użycia typów generycznych w Javie. Zwykle generyki sprawiały mi trudność i postanowiłem tym samym sprawdzić swoją ich znajomość. Po przejrzeniu kodu źródłowego tej metody postanowiłem spróbować swoich sił i napisać własną metodę o podobnej funkcjonalności. Co jednak istotne, to zależało mi na użyciu generyków.

I tak powstała klasa poniżej.
package pl.japila.java7;

import static java.lang.System.out;

public class Demo {

    public static void main(String[] args) throws Exception {
        int i = getInstance(Integer.class);
        out.println("i=" + i);
    }

    public static <T extends Number> T getInstance(Class<T> clazz)
            throws InstantiationException, IllegalAccessException {
        return clazz.newInstance();
    }

}
Czy dostrzegasz błąd, który popełniłem? Czy potrafisz wskazać go bez uruchamiania tej klasy? Ja niestety nie wykazałem się odpowiednią dbałością o szczegóły i umknęło mi to jedno ważne założenie. A jak u Ciebie?

Przy okazji pisania tej klasy znalazłem również sposobność, aby przetestować skrót klawiszowy w Eclipse do utworzenia statycznego importu dla System.out - Cmd+Shift+M. Spróbowałem również odszukać tej funkcjonalności przez odpalenie Quick access i tam też to można znaleźć.


Dzięki Marcinowi Stachniukowi (z Agile Development Day) mogłem nauczyć się czegoś nowego o Eclipse! Dziękuję!

Przeczytałem wpis Marcina, skomentowałem go, zrecenzowałem rozdział, popróbowałem się z generykami i jeszcze zapamiętałem dwa skróty klawiszowe w Eclipse. Nie za dużo jak na jeden dzień?! :)

14 grudnia 2011

Wrażenia pokonferencyjne - o Eclipse DemoCamp w Poznaniu

3 komentarzy
Jak ten czas szybko płynie! Wydaje się, że to wcale nie tak dawno, kiedy pisałem o konferencji JDD w Krakowie, a to już prawie 2 tygodnie mija i dopiero teraz przedstawiam wrażenia z kolejnej, ze mną w roli prelegenta. Potwierdza się stara, dobra zasada, że zadania trzeba robić, a nie o nich mówić i w przypadków moich relacji pokonferencyjnych niestety nie udało mi się jej zastosować. Nadrabiam.

Dobrego złe początki

Że też zawsze muszę sobie wybrać temat na wystąpienie, w którym doświadczenie zdecydowanie odbiega od standardów, których oczekuje się od prezentującego! W końcu zejdę na serce od tego stresu :)

Do Poznania przyjechałem około 17:30 i wydawało się, że była to odpowiednia chwila. Jeśli jednak dodać do tego właśnie rozpoczynające się targi poznańskie (nie wiem, czy to były te targi, czy inne z puli wielu targów w Poznaniu), to niestety było to złe założenie. Kiedy taksówka zajechała przez dworzec, a później ślimaczym tempem dowlokła się pod drzwi pubu na Szyperskiej, było już dawno po rozpoczęciu Eclipse DemoCamp 2011 w Poznaniu.

Zastałem już tłoczną salę słuchaczami, którym Tomek Zarna przedstawiał karierę Eclipse. Nie miałem okazji wysłuchać jego prezentacji, bo nie tylko, że trochę głośno, że jedynie na przodzie można było usłyszeć, co ma do powiedzenia, ale też sama sytuacja spotkania z organizatorami: Natalią Klimasz i Łukaszem Stachowiakiem, a później Adamem Dudczakiem, aby jeszcze później trafić na Darka "egit" Łukszę i...patrz, że też musiałem zapomnieć imienia!...nie pozwalała na wsłuchiwanie się. Zresztą, kto by tam słuchał, kiedy można pogadać z dawno niewidzianymi znajomymi?! Trafiłem również w międzyczasie na Dawida Weissa, ale to było chyba już po jego prezentacji. Wszystkich gorąco pozdrawiam!

"Przebijanie" się przez wrzawę powodowało tylko dalsze jej nakręcanie, więc o rozmowie nie było co marzyć. Za głośno. Jednak próbowaliśmy, co później odbiło się na moim gardle. Do domu zajechałem w stanie, jakbym był po niezłej bibce.

Przysłuchiwałem się prezentacji Dawida, ale wciąż w zasadzie myślałem o moim przygotowaniu tematu i przyglądałem się reakcjom uczestników na to, co ma do powiedzenia. W sali znajdowały się dwa monitory, na których można było zobaczyć slajdy, ale tylko jeden miał obok prezentera, więc było nie lada wyzwaniem zdecydować się, gdzie patrzeć, aby widzieć, albo słyszeć (monitory były różnej rozdzielczości i ich ułożenie sprawiało, że miało to znaczenie). Miałem wrażenie, że atmosfera jest lekko akademicka, tzn. za bardzo nastawiona na odbiór, bez choćby chęci zadawania pytań, co sama atmosfera ogólnego zgiełku dodatkowo "sprzyjała".

Pizza time. Już wspólnie ze Szczecinianami. Spałaszowaliśmy kilka kawałków, aby dalej dywagować na tematy różne. Prezentacje sobie, a my sobie.

Wchodzę na scenę

Przyszła pora na moje wystąpienie. Sądziłem, że EDC to rodzaj spotkania, w którym dużo kodu jest wielce pożądane. Z drugiej strony zastanawiałem się, na ile skuteczny jest przekaz z otwartym IDE i kodowaniem na żywo. Tym razem postawiłem na to drugie. Miało być dużo IBM Rational Application Developer V8 z Java EE 6 na IBM WebSphere Application Server V8. I to był mój błąd. Właśnie przez te monitory i ogólną wrzawę. Kompletnie nie spodziewałem się takiego miejsca i atmosfery, w której ja miałbym prezentować Java EE 6 tworząc aplikacje na żywo. Chciałem dobrze. To wszystko ich wina :)

Najbardziej obawiałem się mojego przygotowania z JAX-RS (z zanurzonym Apache Wink w WAS V8), ale ostatecznie i tak nie pokazałem tego. Dzisiaj bardzo tego żałuję, bo mogło uzupełnić przekaz.

Zaczęły się problemy z mikrofonem - a to za głośno, a to za daleko i tym samym cicho, a ja potrzebowałem wolnych rąk do kodowania. W końcu się dopasowaliśmy - doszedłem do porozumienia z mikrofonem i zabrałem się za demo.

Zacząłem od prostej aplikacji webowej z servletem określonym przez @WebServlet. Zero deskryptora i tylko @WebServlet. Później urlPatterns i @WebFilter. Dalej przyszła pora na demonstrację @Stateless bez jawnego interfejsu biznesowego w ramach WAR. Dalej chwila z CDI i tak przeszliśmy z @EJB do @Inject (ciekawym, ile osób rozróżnia zastosowanie obu?) Dotarłem bodajże do @WebService wygenerowanym z POJO w projekcie javowym i na tym się zakończyła moja batalia o zademonstrowanie produktów IBM wspierających Java EE 6.

Nawet się nie obejrzałem i wnet było już po godzinie.

Losowanie

Na zakończenie organizatorzy przeprowadzili losowanie. Pamiętam, że losowano książki, bo podczas ich rozlosowywania zdążyłem tylko powiedzieć do Darka, że nigdy, ale to nigdy nie udało mi się czegokolwiek wygrać i chyba musiałem mówić to z takim przekonaniem, że kiedy skończyłem, padło "Jacek Laskowski".

Wygrałem książkę!

Cóż za radocha. Miałem do wyboru jedną i padło na "97 Things Every Programmer Should Know". To było doskonałe zakończenie mojego wystąpienia i całego spotkania mimo, że, jak się później okazało, nie był to wcale koniec.

Nocne dyskusje i powrót

Po zakończeniu prezentacji, siedzieliśmy jeszcze dłuższą chwilę. Rozmawialiśmy o różnych rzeczach, aż padło magiczne: "Wychodzimy na miasto". Trafiliśmy na rynek, gdzie przesiedzieliśmy do...4 nad ranem! (mam nadzieję, że nie naciągam, bo już sam nie jestem pewien do której siedzieliśmy). Szczecin odjechał. I ja również zasypiając nad ranem. To na prawdę bolało szczególnie, że zakończyło się moim przespaniem porannego pociągu do Warszawy. W końcu jednak dotarłem do niej i EDC przeszło do historii jako bardzo udane przedsięwzięcie. Upewniło mnie o potrzebie częstszego udziału w nich i coś mi mówi, że nie powinienem odstępować od publicznych wystąpień. Chyba zaczęły mi ponownie sprawiać niesamowitą przyjemność.


Dziękuję Natalii i Łukaszowi za zaproszenie. Możliwość wyłożenia mojej niewiedzy szerszej publiczności była bezcenna :) Czuję się zobowiązany!

02 listopada 2011

84 spotkanie Warszawa JUG - Warszawski Eclipse DemoCamp 2011 - Java 7, JavaFX i Eclipse

0 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG)
Warszawska Grupa Użytkowników Javy (Warszawa JUG) zaprasza na 83 spotkanie, które odbędzie się w najbliższy wtorek, 8 listopada 2011 o godzinie 18:00 w sali 5440 Wydziału MIM UW przy ul. Banacha 2 w Warszawie. Spotkanie jest jednocześnie oficjalnym otwarciem sezonu spotkań 2011/12 oraz świętowaniem dwóch wielkich wydarzeń w kalendarzu entuzjasty Javy - wydania Java 7 oraz dziesiątej rocznicy Eclipse.org.

Temat: Warszawski Eclipse DemoCamp 2011
Prelegenci: Piotr Chmielewski, Paweł Szklarz, Jacek Laskowski

Agenda

18:00-18:25 JavaFX Piotr Chmielewski
18:25-19:00 pizza
19:00-19:25 Garbage-First Garbage Collection w Java 7 Paweł Szklarz
19:30-20:00 java.util.concurrent w Java 7 z Eclipse Indigo SR1 Jacek Laskowski

Sponsorem naszego spotkania została firma mLife.

mLife.pl

Strona minikonferencji na eclipse.org - Eclipse DemoCamps November 2011/Warszawa.

Uprasza się o rozsądną rejestrację (wymaga potwierdzenia) na stronie Warszawski Eclipse DemoCamp 2011, aby dopasować liczbę pizz i napoi.

Wstęp wolny

Zapraszam w imieniu prelegentów i grupy Warszawa JUG!

Kontakt z organizatorem: Jacek Laskowski.

20 października 2011

Przygotowanie środowiska z Eclipse Indigo SR1 i Java 7

0 komentarzy
Zbyt wiele komputerów (stacji roboczych) może doprowadzić do lekkiego zamieszania w głowie i właśnie dzisiaj tego doświadczyłem.

Byłem przekonany, że nie tylko, że mam już zainstalowane Java SE 7, ale i zaktualizowanego Eclipse IDE do wersji Indigo SR1, które udostępnia wsparcie dla Java 7. Jakież było moje zdumienie, kiedy przypomniałem sobie, że tak mam, ale...nie na tym kompie (!)

Cóż było robić - chwila z aktualizacjami Eclipse IDE, aktualizacja Java 7 i można popróbować się z kilkoma przykładami. Nic wyrafinowanego - ot, takie małe przykładziki, których celem jest przyzwyczajenie mnie do zmian w składni i nowego API.

Java 7 na Mac OS X dostępna jest na stronie openjdk-osx-build. Instalacja przebiega niezwykle sprawnie, bo sprowadza się do przekopiowania pakietu do właściwego katalogu. Dalej? Zalecam lekturę na wspomnianej stronie.

Aktualizacja Eclipse przebiegła sprawnie. Wystarczy Help > Check for Updates i zatwierdzamy znalezione aktualizacje.


Można również pobrać najnowszą wersję ze strony http://eclipse.org/downloads/.

Na początku nie byłem pewien, czy oferowane aktualizacje dają mi SR1, ale kolejny ekran nie pozostawiał złudzeń - 3.7.1 to właśnie to, czego potrzebowałem.


Na koniec aktualizacji, restart Eclipse i upewnienie się, że aktualizacja dotarła poprawnie w About Eclipse.


Po uruchomieniu Eclipse na Java 7 w zakładce Configuration widnieje OpenJDK 1.7.0 jako środowisko uruchomieniowe.


Teraz jeszcze definicja Java SE 7 w Installed JREs...


...i możemy rozpocząć tworzenie projektów z Java SE 7.


Na MacOS X nie jest to wciąż trywialne, aby zestawić środowisko do pracy z Java 7, ale z pomocą stronki openjdk-osx-build jest zdecydowanie prościej.

Dla wzmocnienia swojej wiedzy o zmianach w Eclipse Indigo SR1 oraz Java 7 polecam dokument What's new for Java 7 oraz JDK 7 Adoption Guide. W kilka chwil można całkiem sporo się nauczyć i nabrać przynajmniej pobieżne rozeznanie w nich. Powodzenia!

15 czerwca 2011

Definiowanie komponentów usługowych z OSGi Declarative Services

6 komentarzy
Właśnie opublikowałem kolejny artykuł Definiowanie komponentów usługowych z OSGi Declarative Services podsumowujący moje dotychczasowe dokonania (pseudo)naukowe w obszarze OSGi R4 Declarative Services.

Jest to specyfikacja komponentów usługowych w OSGi - część specyfikacji OSGi Service Platform Service Compendium wydanie 4, wersja 4.2 opisana w rozdziale 112. Declarative Services Specification. Na niecałych 50 stronach można zapoznać się z deklaratywną rejestracją usług na platformie OSGi.

OSGi Declarative Services zdejmuje z barków programisty utrzymywanie kodu, który wymagany był przez użycie OSGi w warstwie usługowej. W tonie zdejmowania obowiązków z barków programisty i parającym się OSGi zdecydowanie ulżono (nie wliczając w to poznania nowej specyfikacji). Już na etapie mojego skromnego doświadczenia w obszarze OSGi jestem w stanie zauważyć prostotę OSGi przy użyciu OSGi Declarative Services. To nic innego jak kolejna warstwa na warstwie usługowej OSGi.

Artykuł stanowi przyczułek do dalszych doświadczeń poznawania OSGi wierząc, że podsumowaniem będzie kompletna aplikacja desktopowa (najpierw) oraz korporacyjna (później). Liczę również na odzew osób, które już parają się OSGi, czy też po prostu są zaintrygowane możliwościami OSGi, czy w końcu rozważają ich poznanie. Więcej nas, to ciekawsze dyskusje, a to na pewno przyczynia się do łatwiejszej nauki i wejścia w świat dynamicznych aplikacji.

Ostatnie konferencje w Polsce, wliczając minioną Confiturę 2011, nie pozostawiają złudzeń, że nie jest to szeroko rozpowszechniony temat u nas. Zastanawia mnie dlaczego?! W końcu era OSGi na poziomie serwerów aplikacyjnych już nastała, a nierzadko, ale wciąż ze przyciszonym głosem, mówi się o niej w obszarze szkieletów aplikacyjnych, np. OSGi integration for Grails applications. Marsz ku OSGi idzie jednak niezwykle powoli (może faktycznie wysiłek w stworzenie działającego rozwiązania nie przynosi aż takich zysków?).

Zapraszam do lektury mojego nowego artykułu Definiowanie komponentów usługowych z OSGi Declarative Services i udziału w dyskusji o wartości OSGi w naszych aplikacjach. Zechciałby mnie ktoś łaskawy wyprowadzić z przekonania, że warto inwestować swój czas w OSGi i okolice?

09 marca 2011

Słabo typizowane DI w EJB 3.x - o beanName w @EJB jeszcze raz

0 komentarzy
Posiłkując się doświadczeniami z Embeddable EJB 3.1 z GlassFish 3.1 i NetBeans IDE 7.0 oraz Element beanName w @EJB do rozróżnienia deklaracji ziaren EJB stworzyłem przyczułek do dalszych doświadczeń ze specyfikacjami EJB 3.1 oraz CDI 1.0. Tym razem na warsztat wziąłem zbadanie mechanizmu przekazywania zależności (ang. DI, dependency injection) w EJB 3.x.

Potrzebowałem środowiska, w którym będę mógł uruchomić testy automatycznie bez konieczności zestawiania skomplikowanego środowiska uruchomieniowego. Zaletą takiego podejścia może być chociażby uruchomienie testów w dowolnym momencie, na dowolnym komputerze i przez dowolnego (nawet nowego!) członka zespołu. Starałem się utrzymać minimalny nakład pracy, aby łatwiej było przedstawić problem, z którym się zmagam.

Zainteresowany/-a szczegółami? Zapraszam do lektury mojego artykułu Słabo typizowane DI w EJB 3.x - o beanName w @EJB jeszcze raz. Uwagi bardzo mile widziane.

29 listopada 2010

Po wykładzie na PWSZ w Tarnowie

14 komentarzy
O planach związanych z wykładem pisałem w poprzednim wpisie - Wykład akademicki na PWSZ w Tarnowie - 29.11 od 9:30 do 18:00 i jak to w życiu bywa - plany swoje, a życie swoje.

Mając niemałe obawy o zakres merytoryczny wykładu, postanowiłem przelecieć większość z tego, co nazwałbym interesującym wycinkiem mojej wiedzy technicznej, aby choć na moment móc podzielić się czymś nowym z uczestnikami. Sądziłem, że uczestnicy większość tematów mają już za sobą, więc pojawiły się produkty IBM, o których, jeśli słyszano, to niewiele praktycznie i choć one gwarantowały mi możliwość przekazania czegoś niezbadanego. Po ostatnich szkoleniach z IBM WebSphere BPM z programowania i administracji nie miałem złudzeń, że w ostateczności wejdę na niskopoziomowe "rozbieranie" trzewi WPS V7 czy WAS V8. Sądziłem, że coś w końcu będzie wartościowe, aby spędzić kilka chwil i wziąć udział w wykładzie.

Do ostatniej chwili nie byłem pewien, czy dobrze dopasowałem tematykę. Czym bliżej wystąpienia, tym nachodziła mnie większa ochota, aby w niej pomajstrować. Wziąłem kilka książek, aby tam znaleźć coś unikatowego, a jednocześnie wartościowego, zabrałem się za lekturę podręczników, itp. Zacząłem odczuwać tremę przed niewstrzeleniem się w oczekiwania (które mogły być podkręcone moimi wycieczkami w różne strony rozwiązań javowych).

Zaplanowałem całkiem pokaźny bagaż tematyczny (vide poprzedni wpis z harmonogramem) i wszystko miało odbyć się bez nawet najdrobniejszego slajdu, aby ostatecznie okazać się, że z grupy około 50 osób niewiele ponad 3 osoby miały styczność z Javą (!) To było chyba najbardziej dla mnie szokujące. Ja tu zmagałem się z JEE6 i poziomy wyżej, przy SCA i BPEL, a okazało się, że należało zacząć od samego początku - samego poznawania języka Java. Trafiłem do mekki programistów C!

Jako, że przygotowany byłem na wprowadzenie do dostępu do bazy danych, przez JDBC, Hibernate, Spring Framework, Hibernate+Spring Framework, JPA i EJB, w zasadzie byłem gotowy zacząć pierwsze kilka kwadransów na wprowadzenie do Javy - bez wycieczek w programowanie OO. Pozostałem przy prostych konstrukcjach typu wyświetl na ekran, pobierz z ekranu i na tym się skończyło wprowadzenie.

Zabrałem się za dostęp do bazy danych. MySQL sprawowało się znakomicie, a NetBeans IDE (wersja rozwojowa z dnia poprzedniego) całkiem sprawnie uwijała się przy składaniu kolejnych części aplikacji. Tutaj i Java Tutorial się przydał, aby pokazać, w jaki sposób można przejść podobną ścieżkę, którą właśnie przechodziliśmy (gdyby komuś przyszło do głowy odtworzyć nasze wspólne poczyniania samodzielnie). Od czasu do czasu NetBeans IDE czkał zamrażając się na dobre kilkadziesiąt sekund, co złożyłem na braku dostępu do Sieci i jego młodzieńczego wieku (w końcu to wersja rozwojowa). Na moment przełączyłem się do Eclipse IDE, ale i jemy przypomniało się, aby zaktualizować/sprawdzić coś w Sieci i zamarzł. Wróciłem do NetBeans IDE.

Na zakończenie pierwszego bloku wykładów pokazałem coś, co określiłbym - impress me. Skąd wzięło się to cudo? Chcąc dopasować się do oczekiwań uczestników, zapytałem, co jeszcze mógłbym im pokazać i padło "Zaimponuj nam czymś w Javie, co sprawiłoby, że zechcielibyśmy się nią zająć". Od razu zabrałem się za...Clojure.

Pewnie pomyślisz sobie, zwłaszcza jeśli znasz mój poziom znajomości tego języka, że to był najgorszy z możliwych wyborów. Co to, to nie. Zdecydowanie NIE. Ja wręcz uważam, że właśnie tym najbardziej ująłem ich za serce i przy tym właśnie temacie miałem wrażenie zdobyłem ich największą uwagę. Takie odniosłem wrażenie i jeśli jakikolwiek temat miał swoje komentarze, to Clojure był zdecydowanym liderem. Dlaczego? Kwintesencją dobrej prezentacji jest dopasowanie przykładu do tematu. I tak właśnie było z Clojure.

Podczas sesji z Clojure pokazałem, jak interaktywie tworzyć aplikację okienkową, gdzie rozpoczynam od "gołej" aplikacji na bazie JFrame i dodaję kolejne elementy graficzne. Kiedy pierwszy raz wpadłem na ten pomysł, wiedziałem, że to będzie cudo. Na dole miałem terminal z Clojure REPL, na górze właśnie otworzone okienko przyszłej aplikacji okienkowej, a pod nimi Eclipse z odtwarzanym skryptem, w którym widać było wpisywane linie kodu w Clojure. Zamierzam, to nagrać w postaci skrinkastu, więc chwila i sam przekonasz się, o czym się tutaj pisze.

Clojure nie jest tutaj jakimś specjalnym czymś, co sprawiłoby, że jest to możliwe. Po prostu, jako język skryptowy - podobnie jak Groovy, JRuby, Rhino, Scala, Jython - daje możliwość nauki API przez wprowadzanie kolejnych wywołań w czymś ala Clojure REPL i natychmiastowego otrzymywania rezultatów z ich uruchomienia. Możnaby to przyrównać do środowiska ciągłej nauki API. Bajka!

Po przerwie, przeszliśmy przez Hibernate, Spring Framework i tworzenie aplikacji z servletami (obsługa formularza) z niewielkim EJB uruchamianym w ramach aplikacji webowej (nowość JEE6). W zasadzie 7 osobom udało się wytrwać do 18:00, kiedy to punktualnie zakończyłem wykład.

Bardzo pomocny okazał się stoper firmy Apimac, który odmierzał równe 40-tominutówki i późniejsze 10-ciominutowe przerwy. Super rozwiązanie, aby zagwarantować pewność utrzymania czasu przez prowadzącego. Polecam!

Czego mi brakowało podczas tego wykładu, to większego udziału publiczności. Znalazło się kilku bardziej aktywnych, ale ogólnie panowała cisza i trudno było zorientować się, czy temat ciekawił, czy warto byłoby poruszyć inne aspekty i w ogóle sprawić, aby spędzony czas był wartościowy merytorycznie. Nieskromnie powiem, że bardzo ucieszyła mnie moja lekkość w zmianie tematu, tempa i dopasowanie do poziomu, ale wolałbym bardziej skrupulatne zajęcie się pojedynczym tematem, np. JEE6 niż przejściem od Java, Clojure, Hibernate, Spring, servlety i EJB. Trochę przypominało groch z kapustą, aczkolwiek zagwarantowało, że wykład spędziłem nie nudząc się ani na chwilę. Liczę, że uczestnicy również.

Sam Tarnów bardzo spokojny. Akurat dzisiaj spadło sporo śniegu, więc wszystko zasypane, ale i tak udało mi się dostrzec tlące się piękno tego miejsca. Po 18:00 w zasadzie zero otwartych sklepów i niepokojąca cisza na ulicy. Może poza Rynkiem jest inaczej?! Ach, zastanawiam się, dlaczego zegar na Ratuszu wybija połówki, kwadrans przed pełną i pełną godzinę?

p.s. Wykład prowadzony był w ramach programu Unii Europejskiej wspierającej wymianę doświadczeń między praktykami i firmy a uczelniami, z korzyścią dla nowej kadry informatycznej - studentów. Pewnie i na Twojej uczelni jest to możliwe. Wystarczy zapytać. Resztą się zajmę. Pisz na priv z prośbą o szczegóły. Na prawdę warto.

27 listopada 2010

Wykład akademicki na PWSZ w Tarnowie - 29.11 od 9:30 do 18:00

5 komentarzy
W nadchodzący poniedziałek, 29.11 będę na Wydziale Informatyki Państwowej Wyższej Szkoły Zawodowej (PWSZ) w Tarnowie (ul. Eljasza Goldhammera) u Tomasza Potempy i jego studentów, z którym zorganizowaliśmy mój wykład dotyczący tematu Java i okolice. Głównymi odbiorcami mają być studenci 4 roku, którzy kończą semestr z końcem grudnia, aby w styczniu skupić się na pisaniu pracy inżynierskiej.

Jak to ze mną bywa przy tego typu otwartych tematach, pomysłów mam wiele i byłbym rad, o kilka wskazówek pod kątem możliwości czasowych i znaczenia rynkowego poszczególnych tematów. Celem nie jest przekazanie pełnego obrazu danego rozwiązania, ale raczej naszkicowanie możliwości, aby wybrać do dalszego rozpoznania to, co może być interesujące.

Mam do dyspozycji 2 bloki 5-godzinne (w sensie lekcyjnym nie zegarowym, czyli 45 minut). Można założyć, że w każdym bloku będzie to samo, ale to zależy od ogólnego zainteresowania uczestników oraz mojego przekonania o sensowności dalszego brnięcia w temat. Tym samym nie ma gwarancji, że drugi blok będzie odpowiadał merytorycznie pierwszemu.

Zaczynam o godzinie 9:30, aby zakończyć o 18:00 z 1-godzinną przerwą obiadową w okolicach 13:15. Okazuje się, że będzie okazja spotkać się z Tomkiem Łabuzem, którego można było poznać podczas konferencji Javarsovia 2010, podczas której prezentował temat "AOP, ThreadLocal i JPA".

Planuję przeprowadzić autorski cykl tematyczny, którego mottem byłoby "Od prostoty do większej prostoty, tj. w każdym kroku ukrywamy złożoność problemu". Nie planuję prezentować slajdów, a jedynie siedzieć przed komputerem, prezentując budowanie aplikacji i machając rekoma ze wstawkami krasomówczymi.

Konspekt

Środowiska programistyczne i uruchomieniowe, darmowe i komercyjne:
  • NetBeans IDE i Eclipse IDE
  • IBM Rational Application Developer 8 i IBM WebSphere Integration Developer 7
  • GlassFish i IBM WebSphere Application Server 8 
Klient bazodanowy - tradycyjne podłączenie do bazy danych z użyciem JDBC
  • Apache Derby (wbudowane)
  • MySQL
Hibernate - warstwa pośrednia między baza danych a aplikacja
  • ORM - zapytania bliższe programiście nie adminowi bazy danych
Hibernate + Spring Framework
  • zniesienie konieczności zarządzania bytami Hibernate
  • środowisko IoC/DI
Apache Maven - zarządzanie zależnościami projektowymi
  • zniesienie konieczności dbania o zależności poza ich deklarację
  • tworzenie projektu od zera
    • z linii poleceń
    • z IDE (NetBeans IDE)
Leiningen - Maven w Clojure
  • bez XML z językiem Clojure (wrócimy do niego niebawem)
GlassFish (w NetBeans IDE) i WAS 8 - serwer aplikacyjny JEE6 (z RAD8):
  • dostęp do bazy danych (zarządzanie transakcjami)
    • JPA
    • EJB31
  • servlet - obsługa HTTP
  • JSF - budowanie widoku
    • facelets
  • CDI
EJB 3.1
  • Apache OpenEJB
  • Serwer aplikacyjny - GlassFish i WAS8
OSGi - modularność
  • podział projektu na moduły w Apache Maven był podziałem funkcjonalnym (jak OSGi)
  • samodzielna aplikacja
Clojure - język funkcyjny
  • dynamiczne tworzenie aplikacji okienkowej
Service Component Architecture (SCA) i procesy BPEL (WID/WPS)
  • odseparowanie kontraktu (interfejsu) od implementacji
  • odseparowanie szczegółów komunikacyjnych od implementacji
Wyjeżdżam z Tarnowa dopiero we wtorek, więc jeśli ktoś reflektuje na spotkanie, proszę o kontakt.

20 listopada 2010

72. spotkanie Warszawa JUG - Jacek Laskowski z "Clojure praktyczniej: REPL, Eclipse CCW, Eclipse Mylyn, monady i defrecord"

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

Temat: Clojure praktyczniej: REPL, Eclipse CCW, Eclipse Mylyn, monady i defrecord
Prelegent: Jacek Laskowski

Kontynuacja relacji z mojej nauki języka funkcyjnego na wirtualnej maszynie Javy - Clojure. Tym razem przedstawię bardziej praktyczną część mojej nauki Clojure, od strony środowiska, w którym go poznaję z pewnymi elementami języka. Zaprezentuję Clojure REPL, wsparcie narzędziowe oferowane przez wtyczki Eclipse: CounterClockWise (CCW) i Mylyn oraz wstęp do monad i defrecord. Sądzę, że dzięki tej wiedzy będzie łatwiej rozpoczać samodzielną naukę Clojure.

Jacek Laskowski jest założycielem i liderem grupy warszawskich użytkowników Javy - Warszawa JUG. Prowadzi bloga Notatnik Projektanta Java EE, w którym przedstawia swoje użycie Javy i okolic. Zawodowo w IBM jako specjalista produktów z rodziny WebSphere, głównie WebSphere BPM z flagowymi produktami: IBM WebSphere Dynamic Process Edition i IBM WebSphere Lombardi Edition. Nadaje na falach twittera jako @jaceklaskowski.

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

Wstęp wolny

Zapraszam w imieniu swoim i grupy Warszawa JUG!

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!

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

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.

23 lutego 2010

Nowy serial "SCA praktycznie" - Zestawienie środowiska z Apache Tuscany i Eclipse IAM

3 komentarzy
Apache TuscanyPisałem o SCA wielokrotnie - cała masa wpisów w kategorii sca, więc przed zbliżającymi się konferencjami - Studenckim Festiwalu Informatycznym (SFI) 11-13. marca w Krakowie oraz 4Developers 26. marca w Poznaniu, ze mną w roli prelegenta o SCA, wystarczyło jedynie (?) odświeżyć sobie wiedzę nt. Apache Tuscany i zmian w nim.

Pomysł narodził się, kiedy w trakcie pisania redbooka (książki o technologiach IBM) dotyczącym IBM WebSphere Application Server V7 Feature Pack for Service Component Architecture (w skrócie SCA FeP) dostałem jednocześnie zaproszenie na obie konferencje. Mając głowę w SCA nie miałem wątpliwości, o czym chciałbym powiedzieć. Jest wiele tematów, które nazwałbym bardziej chwytliwymi i właśnie to był główny powód, dla którego postawiłem na SCA - niewielkie jego użycie w naszych rozwiazaniach. A może okazać się, że niepotrzebnie. Nadchodzą cieplejsze dni - wiosna, a po niej lato (nic odkrywczego), więc niejednemu marzy się większa aktywność poza komputerem. Gdyby tak móc zrzucić część naszych obowiązków na barki kogoś innego?! Albo jeszcze lepiej, gdyby tak coś, a nie ktoś, zrobił za nas większość roboty, na pewno byłoby więcej czasu (który i tak wielu zmarnowałoby na pierdoły w Sieci - biedaczyska :)).

W tym klimacie, pomyślałem sobie, że ja (ów ktoś z poprzedniego akapitu) i SCA (owe coś) damy Wam szansę z artykułem Service Component Architecture (SCA) praktycznie - zestawienie środowiska z Apache Tuscany i Eclipse IAM, z serii "SCA Praktycznie". Nigdy nie zgłębiałem protokołu Atom i nie sądziłem, że kiedykolwiek będę, a tu proszę, wystarczyło kilka pytań przy Redbooku, abym zechciał sprawdzić to w Apache Tuscany - darmowego kontenera SCA. Jeśli dodam, że z nim i binding.atom, możemy praktycznie poznać podejście REST, to nie mam złudzeń, że tyle akronimów wystarczy, aby skłonić Was do lektury. Zajmie niespełna kwadrans, a może zaoszczędzić całe godziny. Chętnie posłucham, czy faktycznie. Komentarze mile widziane - priv, albo do tego wpisu.

p.s. A czy Ty już oddałeś/-aś swój głos na Notatnik w konkursie Bloger 2009 Roku? Ja też lubię prezenty. ;-)

21 lutego 2010

Eclipse pomocny przy NPE w AtomBindingListenerServlet.doPost() z Apache Tuscany

0 komentarzy
Siedzę przy Service Component Architecture (SCA) z Apache Tuscany i nie pamiętam już, dlaczego wybrałem na rozpoznanie binding.atom. Nie ma to znaczenia, ani nie ma znaczenia, czym jest SCA i owe (magiczne) binding.atom. Przeczytacie w nadchodzącym artykule, a niektórzy usłyszą na nadchodzących konferencjach - Studenckim Festiwalu Informatycznym (SFI) 11-13. marca w Krakowie oraz 4Developers 26. marca w Poznaniu, na których będę prezentował tę technologię (i liczę na Wasz aktywny udział).

Tym razem przyszło mi rozwiązać problem z NPE w Tuscany. Zaczęło się stworzeniem odpowiednich (tak przynajmniej sądziłem początkowo) klas i podczas uruchomienia wciąż tylko:
java.lang.NullPointerException
at org.apache.tuscany.sca.binding.atom.provider.AtomBindingListenerServlet.doPost(AtomBindingListenerServlet.java:590)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.apache.tuscany.sca.core.work.Work.run(Work.java:63)
at org.apache.tuscany.sca.core.work.ThreadPoolWorkManager$DecoratingWork.run(ThreadPoolWorkManager.java:215)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:637)
Pracuję z Tuscany 1.6, którego źródeł nie ma w repozytorium mavenowym, a wtyczka Eclipse IAM uparcie przy swoim "Nie ma mowy o podłączeniu źródeł do zależności mavenowych!".

Eclipse IAM - Java Source AttachmentKoniecznie potrzebowałem podpiąć źródła modułu tuscany-binding-atom-abdera-1.6.jar, aby namierzyć przyczynę NPE. Mogłem ręcznie, i tak faktycznie początkowo zrobiłem, ale po kwadransie zarzuciłem to, bo nie tylko, że zaczęło zajmować zbyt wiele czasu, ale i zażyczyłem sobie przejrzenie struktur i ich danych na żywo.

Pamiętam, że miałem podobne "chciejstwo" w IDEA i chyba NetBeans, i nie poszło mi z jego realizacją tak prosto, jak w Eclipse. Wystarczyło podpiąć źródła do projektu przez Build Path > Link Source...

Eclipse - Build Path | Link Source..., aby związać zewnętrzny katalog ze źródłami z projektem...

i w końcu uruchomić projekt w trybie śledzenia (ang. debug).

Eclipse - DebugNie długo trwało, abym się przekonał, że obsługa protokołu Atom przez binding.atom w Tuscany (oparta na Apache Abdera) wymaga właściwego komunikatu przy POST, ale to już historia na inną okazję.

Najważniejsze, że użyte narzędzie - Eclipse IDE - pozwoliło mi na namierzenie i rozwiązanie problemu w kilka chwil, bez znajomości niuansów Atoma. Nie obyło się bez ich poznania, ale to było przy okazji i wchodziło samo do głowy, z nieukrywaną przyjemnością.

Jeszcze tylko zgłosić kilka problemów w JIRA dla Apache Tuscany, aby inni nie musieli przechodzić przez to samo ponownie.

03 lutego 2010

De gustibus non est disputandum - Eclipse Groovy 2.0.0 dostępny

5 komentarzy
Wszystko zaczęło się od artykułu Groovy 1.7, Grails 1.2 and Groovy Eclipse 2.0 Updates Include Dependency Management,Language Support. Już miałem lekturę zmian w Groovy 1.7 i Grails 1.2 za sobą (nota bene, 1 lutego pojawiło się wydanie 1.2.1), więc pewnie nie dałbym się namówić na jego przeczytanie, ale dodatek w postaci Groovy Eclipse w temacie sprowokował mnie. Szczęśliwie artykuł, a raczej zajawka nowych wydań projektów, nie jest długi, więc wystarczył kwadrans i było po krzyku.

Podobają mi się takie dywagacje nad kodem, co można, a co nie i dlaczego. W tym artykuliku dowiedziałem się o java.util.concurrent.atomic.AtomicInteger (wciąż lektura zmian w Java SE 6 przede mną i tylko tyle wiem, ile się przydaje po drodze - pewnie niejedno przysłowiowe koło odkryłem w międzyczasie) i kolejny raz o Grape. W przypadku Grape, autor ciekawie przedstawia zalety dekorowania importów z adnotacjami, które zwykle trafiają do zewnętrznych plików w Maven czy Ant. Ciekaw jestem, ilu z Was podziela zdanie o "This in turn triggers the download of the dependency and makes your code's build more self-documenting." Mam wrażenie, że autor przekonuje, że użycie wszystkiego, co związane z klasą, bezpośrednio w niej, to dobra rzecz. Moje skromne doświadczenie programistyczne nie pozwala mi dostrzec tych zalet, bo jakkolwiek korzystam z adnotacji Java EE 5+, to tylko i wyłącznie w fazie prototypowania czy wczesnego rozwoju aplikacji. Później, preferuję podejście czysty technologicznie kod źródłowy ze wszelkimi dodatkami technologicznymi w postaci plików XML i to jeszcze w osobnych modułach projektowych. Stawiając sprawę jasno, adnotacje w kodzie dobre, ale docelowo nalegałbym, aby się ich stamtąd pozbyć i wynieść na zewnątrz, np. do plików XML.

O Grails 1.2 jedynie się wspomina, więc nie ma co liczyć na chociażby taki przekrój wiedzy, jak to ma miejsce w przypadku Groovy 1.7. Podobnie z Groovy Eclipse. Zdaje się, że autorowi bliżej do Groovy niż do pozostałych produktów i dodał je, bo...kazano (?). Początek (o Groovy) był świetny z końcówką (o Grails i Eclipse Groovy) do kosza. Można skończyć czytać na akapicie o Grails 1.2.

Gdyby ktoś mogł mi jeszcze wyjaśnić, co autor zamierzał wyrazić przez dwukrotne użycie angielskiego słowa 'sport' w artykule, byłoby cacy. Kompletnie nie mogę docieć, co to słowo znaczy w tym artykule.

Po artykule, zabrałem się za instalację wtyczki Eclipse Groovy. Instalacja zabrała niespełna kilka minut. Wystarczyło pobrać aktualną wersję Eclipse IDE for Java EE Developers 3.5 SR1 (3.6m4 nie działała) i dopisać http://dist.springsource.org/release/GRECLIPSE/e3.5/ jako stronę z aktualizacjami Eclipse Groovy (zainteresowani skrinkastem nt. tej instalacji, proszeni są o komentarz do wpisu). Po instalacji, chwila na restart Eclipse i miałem go uzbrojonego o wtyczkę Eclipse Groovy 2.0.0.

Przejrzałem kilka nowości, które oferuje i wybrałem najważniejsze z mojego punktu widzenia (pisanie dokumentów typu "New and Noteworthy" to wielka odpowiedzialność, bo ma tę wadę/zaletę, że "rozleniwia" potencjalnych użytkowników do badania tylko tych funkcjonalności, które zostały przedstawione w dokumencie - wiele ciekawostek może zostać nieodkrytych do czasu przypadkowego trafienia podczas pracy, a wciąż mogą być interesujące dla szerokiej publiczności):

- z Groovy-Eclipse 2.0.0M1 New and Noteworthy:

Incremental compilation, co zgodnie z nazwą sprowadza się do kompilacji jedynie tych elementów projektu, które zostały zmienione bez względu na język, w jakim zostały napisane - Java czy Groovy. Innymi słowy, ma być szybciej, dzięki integracji kompilatora Eclipse JDT i Groovy.

JUnit Monospace font do wyświetlania wyników uruchomienia testów z Spock Framework. Nigdy nie używałem go wcześniej, a jedynie słyszałem wzmianki o nim, więc teraz chociażby z ciekawości, ile będzie mnie kosztowało uruchomienie go w Eclipse i docenienie zmian we wtyczce Eclipse Groovy znajdę czas dla niego.

Wyłączanie Groovy Script z kompilacji przy budowaniu/uruchamianiu projektu. Wystarczy wybrać opcję Build Path > Exclude z menu kontekstowego na wybranym skrypcie groovy.

Breakpoints and debugging - mamy możliwość ustawiania miejsc zatrzymania (ang. breakpoints) debugera i podejrzenia stanu zmiennych skryptu/aplikacji napisanej w Groovy.

Runtime evaluation of Groovy code - wyliczanie wyniku uruchomienia wycinków kodu Groovy.

- z Groovy-Eclipse 2.0.0M2 New and Noteworthy:

Refactoring Support - zmieniamy zmienną/metodę/klasę w Javie i zmiany propagują się do kodu Groovy, i na odwrót.

Task Tags - znamy i używamy - TODO, FIXME i XXX w kodzie Groovy rozpoznawane są dokładnie jak w Javie.

Wszystkie ze zmian opisane są dokładniej na blogu autora wtyczki Contraptions for programming, więc spragnieni wiedzy (a tylko tacy tutaj zaglądają :)) mogą pozwolić sobie na więcej...wiedzy.

- z Groovy-Eclipse 2.0.0RC1 New and Noteworthy:

Jars from .groovy/lib directory added to classpath - dodajemy wybrane jary do katalogu ~/.groovy/lib i automatycznie trafiają do ścieżki klas (CLASSPATH) naszego projektu. Niekoniecznie potrzebne biorąc pod uwagę możliwość skorzystania z Apache Maven 2, ale...nie wszyscy z niego korzystają (= straceńcy :))

To tylko wybrane usprawnienia we wtyczce Eclipse Groovy i zostały przeze mnie namaszczone mianem tych ważniejszych, co niekoniecznie musi spełniać kryteria Waszej ważności. Szczegółów należy szukać bezpośrednio u źródła - na stronie wtyczki Eclipse Groovy.

Interesujący jest fakt, że mamy publicznie dostępną wersję finalną wtyczki, a w JIRA jest 1 otwarte zgłoszenie na poziomie Major. Widać JIRA swoje, a wtyczka swoje. I tak, głównymi i jedynymi opiniodawcami są sami użytkownicy i bez względu na ilość włożonej pracy nawet największe dzieło może nie doczekać się właściwego poszanowania. W końcu piękno to kwestia gustu, a o nim się nie dyskutuje...De gustibus non est disputandum, albo Beauty is in the eye of the beholder. Wspaniale pasuje jako podsumowanie dyskusji nt. assert w komentarzach do Niemy film(ik) na weekend - Java Persistence (JPA) 2.0 praktycznie - zestawienie środowiska z EclipseLink i Apache Maven 2. Dzięki Wujek za "uzyles asercji bo chciales i tyle." Właśnie! ;-)

21 listopada 2009

Eclipse DemoCamp we Wrocławiu aż nazbyt emocjonujący

1 komentarzy
Właśnie doświadczyłem niezwykle interesującego zakończenia Eclipse DemoCamp 2009 we Wrocławiu. Siedzę sobie w hotelu Diament, po tym, kiedy odwołano ostatni lot do Warszawy ze względu na niewielką widoczność na lotnisku Okęcie. Zawrócono samolot spod Łodzi, abym ponownie zjawił się we Wrocku i po godzinie zamieszania znalazł miejsce w hotelu na koszt Lotu (taksówka z/na lotnisko i śniadanie w cenie). Hotel nowy i przyzwoity, ale to, że zamiast siedzieć w weekend w domu, siedzę w hotelu do najprzyjemniejszych nie należy. Wykańczający jest również brak pożądnego miejsca, gdzie możnaby coś zjeść na lotnisku. Pozostają kanapki i futrowanie się słodyczami :( Kolejnym razem pomyślę dwa razy zanim wybiorę przelot powrotny do Warszawy ostatnim rejsem.

A wracając do samej konferencji, to byłbym nieprzyzwoicie nieprzyzwoity, gdybym nie napisał, że warto było wstać o 5:30, aby móc w niej uczestniczyć. Możliwość spotkania się z Grzegorzem Białkiem, Krzyśkiem Kowalczykiem, Jackiem Pospychałą i innymi programistami Java z Wrocławia bezsprzecznie kwalifikuję jako bezcenne doświadczenie w moim życiu. Było wiele o wnętrzu platformy Eclipse, że w pewnym momencie mnogość akronimów mnie przygniotła. Nie zdawałem sobie sprawy, że jest tyle projektów pod parasolem Eclipse Foundation - EMF, XPAND, ATF, to tylko niektóre, które odnotowałem. Widać różnicę w podejściu do Eclipse DemoCamp w Warszawie a Wrocławiu. My (Warszawa) proponujemy raczej narzędziową stronę Eclipse IDE, podczas gdy oni (Wrocław) oferuje zajrzenie w głąb Eclipse jako platformy. Ciekawe doświadczenie móc zobaczyć produkt od tej strony. Nie ukrywam, że czułem się lekko zmieszany tą niewiedzą produktową o Eclipse.

Jacek Pospychała rozpoczął EDC z prezentacją na temat niedoskonałości darmowej "oferty" Eclipse IDE, aby pokazać nam swoje cudo oparte o Eclipse Ajax Tools i Web Tools Platform - Zend Studio. Podobało mi się, bo umożliwiało śledzenie wykonywania HTML, CSS i JavaScript, czyli tych technologii, wokół których krążę, ale ze względu na brak narzędzi programistycznych zwykle traktuję notatnikiem, albo innymi zewnętrznymi do IDE narzędziami, jak Firebug. Z Zend Studio możemy mieć to w ramach Eclipse IDE (pomijając fakt, że to narzędzie rodem z PHP).

Później na scenie pojawił się Grzesiek Białek - organizator wrocławskiego EDC i rozpoczął swoją krucjatę nt. Eclipse Modeling Framework (EMF). Generatory rządzą. Tak mogłem odebrać prezentację Grześka. To, że nie tylko ja odjechałem na jego prezentacji niech świadczy, że komputer wiedział, jaki materiał go czeka i chyba zlitował się nad publiką prezentując...Blue Screen of Death. I to na samym początku! Grzesiek rozpoczął od prezentacji swojego dzieła licencjackie - ruch ręką w 2001, później 2003 większa aplikacja na modelu, aby w 2004+ wszedł na Eclipse Platform.
Na sali była część osób, które buduje/-owały rozwiązania na Eclipse Platform. Zdaniem Grześka, Eclipse EMF napędza niektóre zmiany w samej Java SDK, np. w Java 7 będzie coś co powstało początkowo w EMF, a teraz jest "wczytywane" w Java SE (niestety nie pamiętam, co to było). Jako podsumowanie jego wystąpienia niech przytoczę zdanie, które padło po kilku moich pytaniach - "Nie brakuje mi niczego, co mógłbym otrzymać od Eclipse EMF, bo jeszcze nie wiem, czego mogłoby mi brakować" :)

Po Grześku pizza i moja prezentacja nt. powiązania Enterprise JavaBeans i OSGi z Apache OpenEJB. Po zaplanowanych 1,25h mógłbym skończyć, ale nie wykazano zainteresowania tym planem, więc skończyłem po 2h. Miałem wrażenie, że przekazywałem wiedzę składnie (brak skromności to moje drugie ja) i kontakt z publicznością został nawiązany, więc liczę na kilka ciekawych inicjatyw wokół tematu EJB3, OSGi i OpenEJB z kierunku południowo-zachodniej strony Polski. Ja jestem zadowolony z dyskusji, jakie się wywiązały i pomijając odpowiedź z XMLem było cacy (pozdrowienia dla zwycięzcy wafelka :)). Chciałbym wierzyć, że publika również wyszła zadowolona z mojej prezentacji zakończonej demonstracją rozwiązania w akcji.

A faktycznie wyszła, więc kiedy pojawił się Krzysiek Kowalczyk było już ciemno za oknem i część publiki się rozeszła. Pewnie trochę zmęczyłem ich tym moim gadaniem i jeszcze pora, więc sorry Krzysiek za przepłoszenie potencjalnych zainteresowanych tematyką, którzy nie mogli doświadczyć cudów techniki w Eclipse z Twojej perspektywy. Ponownie pojawił się EMF i...niestety, ale odpuściłem sobie występ Krzyśka. Odsiedziałem swoje przed kompem na holu.

W międzyczasie wywiązała się dyskusja na tematy różne, która zakończyła się dyskusją nt. anglicyzmów w naszym języku branżowym. Argumenty padały za i przeciw stosowaniu polskich odpowiedników, ale te, które użyłem w mojej prezentacji OSGi zostały zaakceptowane bez dwóch zdań. Ufff.

Bardzo ucieszyłem się, kiedy widziałem grupki rozmawiających ze sobą osób. Czuć było klimat społecznościowy EDC. Było około 35 osób. Z tego, co mówił Grzesiek chciało przyjść więcej, ale ze względu na wymogi żywieniowe zdecydował się na zamknięcie rejestracji przy 40tu zarejestrowanych.

Podsumowując, było fajnie. Były również zdjęcia, ale na nie poczekamy, aż Grzesiek i Krzysiek wrzucą je na Sieć. Dziękuję Grześkowi za zaproszenie na EDC i możliwość wystąpienia z prezentacją o moich ostatnich dokonaniach w Apache OpenEJB. Nie żałuję!

Włączam tryb oczekiwania na foty...

p.s. Jesienny Eclipse DemoCamp 2009 w Warszawie już w nadchodzący wtorek, 24.11 od 18tej na MIMUWie.

12 listopada 2009

56. spotkanie Warszawa JUG - Jesienny Eclipse DemoCamp 2009

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

Temat: Jesienny Eclipse DemoCamp 2009
Prelegenci: Michał Margiel, Łukasz Lenart, Jacek Laskowski, Sebastian Pietrowski, Tomasz Bujok

Tym razem forma spotkania będzie minikonferencją wokół produktów Eclipse Foundation, w której 5 prelegentów zaprezentuje rozwiązania w ciągu...20 minut każdy. Jeśli to nie przekonuje Cię o spędzeniu wtorkowego wieczoru w niezwykle porywającej atmosferze w gronie entuzjastów javowych, to może agenda?

18:00-18:20 Bądź leniwy - wykorzystaj ukrytą moc Eclipse, czyli jak robić by się nie narobić i wycisnąć max ze środowiska Michał Margiel
18:25-18:45 GoogleAppEngine - chmura na Ja(v)wie Łukasz Lenart
18:50-19:10 OpenEJB Eclipse Plugin - EJB 3.1 z Apache OpenEJB w Eclipse IDE Jacek Laskowski
19:15-19:35 Wprowadzenie do Cloud Foundry Sebastian Pietrowski
19:40-20:00 Po prostu monitoring, czyli jak zbudować skalowalną architekturę monitoringu w 20 minut za pomocą Spring, AOP i ActiveMQ Tomasz Bujok

Harmonogram niezwykle napięty, więc o nudzie nie może być mowy. W miłej atmosferze wiedza sama wchodzi do głowy, mimo późnej godziny.

Wstęp wolny, ale rejestracja wskazana.

Zapraszam w imieniu prelegentów i grupy Warszawa JUG!

19 października 2009

Java Type Proposals wyłączone w Eclipse IDE 3.6?!

7 komentarzy
To już nie pierwszy raz, kiedy się z tym spotykam i nie wiem, czemu miało by to służyć?! Korzystam z Eclipse IDE 3.6m2 i wciskając Ctrl+Spacja w edytorze javowym nie są podpowiadane typy javowe?!

Rozwiązaniem jest włączenie opcji Java Type Proposals w Preferences > Java > Editor > Content Assist > Advanced.

Czy mógłby mi ktoś wyjaśnić, dlaczego to jest domyślnie wyłączone? To tak, jakby zaoferować samochód ze wskazaniem, że służy wyłącznie do spania (zamiast jeżdżenia).