25 kwietnia 2008

Doświadczenia szkoleniowe i trochę o jpcap oraz Ubuntu Beryl

Skończyłem wyjątkowo pracowity tydzień przejmując pałeczkę trenera w szkoleniu WB111 Integration Using IBM WebSphere Integration Developer and Process Server. Dopiero po tych 5-ciu dniach doceniłem pracę szkoleniowców, których praca (zakładając, że podchodzą do tematu rzeczowo, z czuciem tego, co prezentują) bezsprzecznie kosztuje niemało wysiłku. Szczególnie cenię sobie w prowadzeniu szkoleń możliwość przeszkolenia osób, które w ten sposób stają się moimi potencjalnymi, przyszłymi rozmówcami i dopiero wtedy zaczyna się prawdziwa zabawa. Dyskusje, w jakich miałem możliwość uczestniczyć podczas prowadzenia szkolenia niejednokrotnie doprowadziły do sytuacji, w której po prostu musiałem zakończyć stwierdzeniem "Nie wiem", "Nie potrafię sobie tego wyobrazić" czy podobnie. Nie ma w tym nic złego, pod warunkiem, że są one jedynie podsumowaniem rozmowy, a nie jej "twardym" zakończeniem, bez chociażby próby podjęcia wysiłku umysłowego zrozumienia pojmowania świata przez rozmówcę. Często inne spojrzenie na temat, który wydaje się być całkowicie zrozumiałym, może postawić go na głowie. Pytania "Dlaczego?", "Jak to działa?", "Jak możnaby to zrealizować?" czy "Chwileczkę, ale czy nie powinno to działać tak?" pozwalają poszerzyć postrzeganie tematu po obu stronach - pytającego i odpowiadającego. Nie ma nic zdrożnego w tych pytaniach, jak i w samej odpowiedzi "Nie wiem". Co mnie jednak najbardziej uradowało w prowadzeniu szkolenia to fakt usystematyzowania znajomości WPSa i WIDa. Nie są to produkty nowe dla mnie, ale tematyka Service Component Architecture (SCA), Service Data Object (SDO) czy ich pochodne (przynajmniej w wykonaniu wspomnianych produktów) jak BPEL i ich realizacja (procesy biznesowe czy maszyny stanów) oraz ostatecznie modelowania rozwiązania z abstrakcyjnych modułów (komponentów) SCA, których implementacją może być kolejny abstrakcyjny byt może zakończyć się niezłym bólem głowy. Dodając do tego mnóstwo specyfikacji pomocniczych i technologii, i mamy niezłą jazdę. Tak czy owak, prowadzenie szkolenia to niesamowity zastrzyk uporządkowanej wiedzy, który z pewnością wspaniale przygotowuje do certyfikacji produktowej. Jeszcze tylko lektura kilku dokumentów i jestem gotów na podjęcie wyzwania w postaci podejścia do egzaminu IBM Certified Solution Developer - WebSphere Integration Developer V6.0.1. Jak wyjdzie, okaże się w praniu, ale postanowienie już złożone. Jeśli masz okazję poprowadzić szkolenie, nie wahaj się ani chwili - na pewno nie stracisz! Ja tam się piszę na kolejne.

W międzyczasie miałem możliwość stworzenia aplikacji sieciowej w Javie z użyciem biblioteki jpcap. Jpcap jest biblioteką napisaną w Javie do przechwytywania i wysyłania pakietów sieciowych. Wymaganiem aplikacji było przechwytywanie pakietów sieciowych i zapisywanie pakietów spełniających treść spełniającą podane wyrażenie regularne. Dodając do tego Commons CLI do obsługi parametrów wejściowych i miałem i ten temat z głowy. Owe monitorowanie pakietów spełnione zostało w niecały dzień (!) Sprawa początkowo trudna okazała się trywialnie prosta - nawet jak na moje środowisko na Windows XP. Do dyspozycji mamy kilka wspierających projektów dla jpcap, które sprowadzają temat do znanej wszystkim techniki Copy-Paste z bezsprzecznie doskonałej dokumentacji Jpcap Tutorial. Wersja Jpcap ver.0.7 została wydana 9 czerwca 2007, ale z mojego niewielkiego doświadczenia uważam, że należałoby nazwać ją wersją 1.0, bo spełniła moje wymagania w 100%.
Programowanie z jpcap rozpoczynamy od zestawienia środowiska, które wymaga Java 6 oraz WinPcap. Następnie instalujemy jpcap i voila możemy kodować. Więcej informacji o potrzebnych projektach na stronie Jpcap - How to Install. Oczywiście porty dla Linux, Mac OS X i innych systemów są również dostępne. Korzystając ze wspomnianego Jpcap Tutorial miałem zrąb aplikacji w kilka minut, a później pozostało jedynie jej wygładzanie. Temat stał się banalnie prosty i w zasadzie nie ma co wyjaśniać po lekturze Jpcap Tutorial. Tam jest po prostu wszystko wyłożone w postaci przykładów. Jest to idealny przykład projektu, który dostarcza wymaganą funkcjonalność i...strawną i aktualną dokumentację. Projekt Jpcap stał się dla mnie wzorem do naśladowania i będę dążył, aby projekty, w których uczestniczę właśnie tak prezentowały się światu - krótka, 5-10-minutowa dokumentacja opatrzona przykładami. Najbardziej znaczący wycinek aplikacji z użyciem jpcap prezentuje się następująco:
 public void run() {
NetworkInterface device = Infiltrator.getDeviceByNumber(getNumerUrzadzenia());
System.out.println("Przechwytuję komunikaty z urzadzenia " + device.description + " - "
+ device.addresses[0].address);
JpcapCaptor captor = null;
try {
captor = JpcapCaptor.openDevice(device, 65535, false, 20);
captor.loopPacket(10, new PacketReceiver() {
int liczbaPakietow;

public void receivePacket(Packet packet) {
if (debug) {
System.out.println(++liczbaPakietow + ". " + packet);
}
System.out.println("Dane: \n" + new String(packet.data));
}
});
captor.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Na zakończenie nie mógłbym wspomnieć o pewnym ciekawym spotkaniu z rozwiązaniem ze świata Linuksa. Było to jakiś czas tematu, kiedy bawiłem się nim i pamiętam, że ostatnim jądrem (=kernelem), z którym pracowałem, była wersja 2.4. Od czasu do czasu mam nieodpartą pokusę przenieść się na inny system niż Windows i póki co nie mam co liczyć na Maca, więc pozostaje mi Linux (co nie jest niczym złym). Nie chciałbym tracić czasu na konfigurację systemu i najlepiej potraktowałbym siebie jako początkującego użytkownika, dla którego wszystko powinno zostać skonfigurowane, tak aby system został podany na tacy. Za moich starych czasów linuksowych takim systemem był RedHat Linux, ale teraz słyszę, że króluje Ubuntu. I właśnie o nim przyszło mi rozmawiać w tym tygodniu podczas przerwy w szkoleniu i kiedy wspomniałem o moich zachwytach zmianami wyglądu Visty i podobieństwa do zarządcy okien Maca pokazano mi krótki film z YouTube - WINDOWS VISTA AERO VS LINUX UBUNTU BERYL. Normalnie zdębiałem. To, co mogłem zobaczyć w wykonaniu Beryla po prostu mnie zmroziło (pozytywnie). To jest na prawdę coś, co chciałbym mieć u siebie. Lubię tego typu gadżety, a jak mnie zapewniano, nie obciążają one systemu bardziej niż Vista, więc wchodzę w to. Od razu nowinę przyniosłem do domu, że zabieram się za formatowanie domowego PCta i ku mojemu zdziwieniu nie było ani przerażenia, ani euforii w reakcji rodzinki. Wydaje się, że faktycznie migrujemy do rozwiązań systemów w Sieci, gdzie PeCet jest jedynie oknem do aplikacji, które uruchamiane są w przeglądarce. Jest kilka aplikacji uruchamianych przez moją rodzinę lokalnie, ale jest ich tak niewiele, że mógłbym je albo zastąpić odpowiednikami linuksowymi, albo po prostu potraktować VmWare. Nie uśmiecha mi się instalacja Ubuntu (jakkolwiek łatwa i przyjemna), ale pomysł jest i realizacja kiedyś też się pojawi. Na razie podekscytowany jestem możliwościami Beryla i tylko czekam, kiedy kolejny laptop uruchomię właśnie z nim. Skoro daleko mu do Javy, albo technologii javopodobnych, więc odkładam na stos zadań do zrobienia pewnego razu. Może ktoś zechciałby podzielić się swoimi przemyśleniami linuksowymi w połączeniu z Ubuntu i Berylem? Chętnie posłuchałbym kilku rad, aby uprościć proces instalacji, migracji danych i rozpoczęcia pracy do niezbędnego minimum.