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() {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.
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();
}
}
Witam!
OdpowiedzUsuńCzytam twojego bloga juz od jakiegos czasu. Zaliczam go do ciekawszych sposrod tych ktore odwiedzam. Ten komentarz pisze w dwoch sprawach:
Pierwsza przyjemniejsza dla mnie. Jestem juz od dluzszego czasu uzytkownikiem Linux'a z poczatku byl to Aurox. Potem byly rozne inne dystrybucje. W pracy uzywalem przez ponad pol roku Fedory z wlasnego wyboru, teraz po zmianie narzedzia pracy przesiadlem sie na Ubuntu. Ubuntu uzywalem juz wczesniej na komputerze w domu. W zyciu codzienny zrezygnowalem juz calkiem z innych systemow. W pracy niestety musze jeszcze odpalac Windowsa pod vmwarem poniewaz pisze sporo aplikacji Flashowych. Osobiscie uwazam ze dla sredniozaawanosowanego uzytkownika Ubuntu jest system mozliwym do opanowania w maksimum miesiac. 90% zwyklych uzytkownikow windowsa nie zauwazy roznicy bo uzywaja tylko gadu gadu i przegladarki ktorej nie znaja nazwy. Dla ubuntu posiada wszystkie cechy systemu do pracy. Plusem jest to ze posiada wieksze mozliwosci konfiguracji odd Windowsa. Uwazam ze do prostych rzeczy Windows jest fajny, ale juz porzadne srodowisko developerskie jest trudniej zestawic nie wspominajac o postawieniu serwera. Tutaj wlasnie przydaje sie ta przeklinana przez uzytkownikow windowsa konsola. Na ubuntu naprawde ogromna ilosc zadan mozna w prosty sposob prostymi skryptami zautomatyzowac. No ale dosc juz tego wychwalania linuksa. Z wad moge wymienic ze ten filmik o berylu nijak ma sie do rzeczywistosci. Na ubntu 8.04 wydanym dwa dni temu, beryl chodzi zle, wystepuja bledy graficzne, dodatkowo przelacznia miedzy tabami w firefoxie i wogole we wszystkim co uzywa natywnych tabow: Opera, gnome-terminal trwa wieki. Jest to problem znany nie tylko u mnie on wystepuje. Narazie nie zostal rozwiazany. Beryl/Compiz musi poczekac tak z rok zeby byl w miare stabilny.
Dobra teraz druga spraw mniej przyjemna dla mnie. Ostatnio pierwszy raz zyciu odwiedzilem wieksze spotkanie poswiecione programowaniu. Bylo to netbeans road show krakowie. Pierwszy wyklad na ktory udalo mi sie dotrzec byl twoim wykladem. No i tu sie zawiodlem. Temat miales ciekawy, nic ciekawego nie powiedziales. Ctrl+click na nazwie klasy o ktorym kilka razy wspominales mnie znudzil. Nie chcialo mi sie tez sluchac o tym sa inne ustawienia klawiatury. I ja wiedzialem ze sa predefiniowane schematy w Netbeans zeby skroty byly takie jak w Eclipsie. Dodatkowo napisales w swoim poscie na podsumowujacym pierwszy dzien netbeans ze sporo osob uzywalo netbeans. Bylem jedna z tych osob ktore sie zglosily ze robi to od czasu do czasu. Ide o dobre piwo ze wiekszosc osob uzywa netbeans tylko od czasu do czasu. Nie zadales poprostu pytania ile osob uzywa na codzien eclipsa.
Nie bylo tez czasu na pytania bo musiales sie spieszyc. Ja naprzyklad chcialem sie dowiedziec jak uzywac JSF z jakims systemem templatow, wiem ze jest cos do tilesow oraz ze sitemesh'a niezbyt idzie uzywac. Chcialem tez zadac pytanie jak sie ma JSF do duzych projektow. Bo tak z poczatku to moze byc fajne jak naprzyklad flex ale jak juz masz zrobic cos niestandardowego to trzeba robic hacki i dziwne obejscia. Chcialem zapytac czy ktos zrealizowal jakis duzy projekt w JSF i na jakie natrafil problemy.
To chyba tyle. Mam nadzieje ze sprobujesz ubuntu. Jak cos to oferuje swoja pomoc.
Krystian
ps. To ja ziewalem na twoim wykladzie. I mnie zwrociles uwage. Wiem ze to bylo moze troche niegrzeczne ale czasem tak bywa. I to nie byla wina wczesniejszych prowadzacych. Jak wyzej napisalem przyszedlem dopiero na twoja prezentacje, ktora byla najslabsza. Na przyszlosc mniej smiechu wiecej dzialania. Roman zrobil naprawde zaj... prezentacje o narzedziach ktorych mozna uzyc do profilowania java i wogole o dodatkowych narzedziach w jdk 6. Ten kolega ktorego nazwiska nie pamietam za co przepraszam pokazal sporo na temat platformy netbeans, ale juz bylem troche zmeczony zeby dokladnie sluchac. Ale i tak mial fajne, praktyczne przyklady ktorych tobie braklo.
Cześć Krystian,
OdpowiedzUsuńNieczęsto mi się tak obrywa, więc tym bardziej cenię sobie tego typu uwagi niż miałbym dowiadywać się o nich pokątnie, za plecami.
Odnośnie prezentacji NetBeans, to moim zamysłem było zademonstrowanie możliwości NetBeans 6.1 w kontekście wspierania budowy aplikacji JSF. Jak czytam sposób nie wszystkim przypadł do gustu, ale na swoją obronę napiszę, że trudno znaleźć ten jeden punkt odniesienia dla grupy powyżej 50-cioosobowej. Jeśli dobrze pamiętam, to niewiele osób podniosło rękę na moje pytanie o znajomość JSF, więc nie ma co zagłębiać się w jego tajniki, skoro sama idea JSF jest nieznana. NetBeans jest jedynie środowiskiem wspierającym tworzenie aplikacji, więc zależało mi również na uwypukleniu tych jego cech, które powodują, że JSF staje się dziecinnie prosty - różni asystenci (wizard), skróty klawiszowe znane z innych edytorów, a które można używać w ramach faces-config.xml i podobnie. Gdybym skupił się na technicznych aspektach JSF i pokazał w jaki sposób realizuje się szablony to z pewnością nie byłoby to związane z samym NetBeans. Tutaj centrum uwagi był NetBeans, a JSF było jedną z technologii, które wspiera. Zapewne stąd ta rozbieżność w oczekiwaniach.
Jeśli wszystko pójdzie z planem 8 maja pojawię się na Uniwersystecie Śląskim (Sosnowiec), aby zaprezentować rozwiązania IBM w kontekście tworzenia aplikacji korporacyjnych Java EE. Tam będę miał jedynie 1,5h (max. 2h) i po Twoim komentarzu coraz bardziej jestem przerażony, że w takim czasie można jedynie omówić *pobieżnie* temat, a co tu dopiero przejść przez technologie i ich pokryciu w narzędziach. Dałeś mi wiele do myślenia. Może miałbyś wskazówki jak poprowadzić techniczną prezentację-warsztaty, które mają na celu prezentację techologii i jej wsparcia w wybranym narzędziu, podobnie jak miało to miejsce na NetBeans RoadShow z JSF i NetBeans? Wszelkie uwagi mile widziane.
Dziękuję za komentarz. Trochę mnie zmroził, kiedy przeczytałem, że nota jest tak niska. To jest właśnie cel w moich wystąpieniach publicznych czy prowadzeniu Notatnika - prezentacja wiedzy i podniesienie własnych umiejętności (a że przy okazji inni się czegoś mogą nauczyć - to i dobrze!).
Życzyłbym sobie więcej takich komentarzy, bo Ci, którzy są już teraz zadowoleni, na pewno nie stracą, a bardziej wymagający w końcu znajdą coś dla siebie (i przestaną ziewać na moich wystąpieniach ;-))
Jacek
Lekko rozbawiła mnie uwaga w komentarzu że Beryl/Compiz potrzebuje jeszcze z roku... Mi się tak wydawało rok temu ;)
OdpowiedzUsuńOdsetek ludzi korzystających z tych bajerów to ci szczęśliwcy którzy trafili na odpowiednią kombinacje sprzętu i sterowników na których to akurat chodzi. Na mojej karcie marki nvidia na Ubuntu 8.04 cały czas występują koszmarne wycieki pamięci. Wyjściem jest magiczna opcja przerzucająca rendering z GPU na procka ale i tak się czasem wiesza.
Jacek nie daj się zwieść propagandzie linuxa i oceń czy wolisz poświęcać czas na opisywanie nowych technologii czy też na szperanie po forach konfigurując system ;)
Smutna prawda jest taka że dopóki dostawcy sprzętu nie zaczną traktować sterowników dla linuxa poważnie, albo nie będzie porządnych otwartych implementacji (droga jaką wybrał intel...) to te wodotryski nie będą dobrze działać. W tym temacie sami twórcy dystrybucji mają mocno związane ręce.
jaka tam propaganda. Z ubuntu 7.10 miałem 1/2 sukcesu (na 1 kompie działał Compiz od razu po instalacji (TOSHIBA) na drugim nie (LENOVO). Z Ubuntu 8.04 skuteczność mam 100% (a zacząłem od LENOVO). Już od jakiegoś czasu nie wyobrażam sobie pracy deweloperskiej na Windowsie. Analizowanie logów, kopiowanie tekstu z konsoli, wirtualne pulpity - nowa jakość.
OdpowiedzUsuńPraca developerska jak najbardziej. Sam nie wyobrażam sobie przesiadki z powrotem na windows w tej materii. Chodziło mi o co innego. Aktualnie Compiz dostaje ode mnie kolejną szanse... Wszystkie poprzednie próby a było ich już kilka kończyły się stwierdzeniem nie zdatności do użycia. Prawdopodobnie to wina tego co mój laptop ma pod klawiaturą ale po tym co widzę na forach nie jestem odosobnionym przypadkiem...
OdpowiedzUsuńCo do reszty funkcjonalności to z wydania na wydanie jest znacznie lepiej. Zastanawia mnie tylko fakt że w momencie kiedy Fedora i Ubuntu dosyć dobrze zaczynają dawać sobie radę z obsługą mojego sprzętu ma on już 1.5 roku. Mam takie złe przeczucie, że kiedy dokonam przesiadki na coś nowszego znowu napotkam spory zbiór "drobnych rzeczy które stwarzają problemy", który będzie się zmniejszać wraz z wiekiem laptopa... ;)