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

czwartek, 18 listopada 2010

Wzorce projektowe - Prezentacja w ramach przedmiotu "Komunikacja interpersonalna"

Przedmiot "Komunikacja interpersonalna", który ma za zadanie przygotować nas, studentów do przyszłej pracy - a co za tym idzie, obcowania nie tylko ze sprzętem, stanowi przyjemną odskocznię
od typowo technicznych zajęć, w których bierzemy udział na uczelni.

W ramach omawianego przedmiotu miałem ostatnio przyjemność wygłosić prezentację na wybrany przez siebie temat. Zgodzę się,
że temat wzorców projektowych nie stanowił dużej odskoczni od codziennych zajęć, ale wybór był świadomy, zatem czułem się o niebo lepiej niż w przypadku prezentacji z odgórnie narzuconym tematem.

Moje przygotowania ograniczyły się wyłącznie do stworzenia prezentacji multimedialnej, odnośnie samego wystąpienia postanowiłem zupełnie improwizować. Na szczęście obrana przeze mnie taktyka była jak najbardziej słuszna, obyło się bez potknięć merytorycznych a forma przekazu wiedzy nie pozwoliła nikomu usnąć.

Podczas swojego wystąpienia przedstawiłem kolejno:
- krótki zarys historyczny (istotne publikacje);
- podział wzorców ze względu na ich przeznaczenie;
- wzorce Strategia, Kompozyt oraz Obserwator;
- wzorzec Model-Widok-Kontroler oraz jego adaptację do środowiska WWW, mianowicie Model 2.

W ramach krótkiego podsumowania przedstawiłem podstawowe zalety oraz wady stosowania wzorców w swoich projektach. Mam nadzieję, że kolegom prezentacja przypadła do gustu oraz czekają razem ze mną na kolejne wystąpienia. Jak zwykle ewentualnych zainteresowanych tematem zapraszam do dyskusji.

środa, 30 czerwca 2010

Hibernate oraz Java 4-Ever

Zdobywanie wiedzy w okresie letnim nie jest zadaniem prostym - słoneczna pogoda wygrywa dzień po dniu z moją chęcią do dalszej lektury książki "Hibernate w akcji" (Christian Bauer, Gavin King). Czysto teoretyczne rozpoznanie tematu jakim jest odwzorowanie obiektowo-relacyjne (ORM) zatrzymało się w moim przypadku na czwartym rozdziale pt. "Stosowanie obiektów trwałych".

Zdobyte dotychczas wiadomości utrwaliłem w następujący sposób: zapoznałem się z oficjalną dokumentacją Hibernate oraz przeczytałem artykuł Jacka Laskowskiego pt. Hibernate - tniemy koszty dostępu do danych relacyjnych.

Do ukończenia lektury pozostało sześć rozdziałów oraz kilka dodatków, zatem już jutro ponownie sięgam po książkę licząc
na zwielokrotnienie tempa pozyskiwania istotnych informacji.

Nie sposób również nie wspomnieć o bijącym ostatnio rekordy popularności zwiastunie "Java 4-Ever". Obserwatorzy kanału #java
na blip.pl chyba znają już na pamięć każde wypowiadane w nim zdanie - komentować tego zjawiska nie będę, wszyscy odczuliśmy popularność zwiastuna na własnej skórze.

sobota, 12 czerwca 2010

Oficjalne zakończenie praktyk w IBM Poland

Wraz z początkiem marca informowałem za pośrednictwem bloga
o moim udziale w programie praktyk edukacyjnych organizowanym przez firmę IBM. Przez trzy miesiące poznawałem system Kerberos, produkt IBM WebSphere Application Server V7 oraz technologię Web Services.

Oficjalne zakończenie pracy nad projektem odbyło się wczoraj
w siedzibie IBM w Warszawie. Podczas spotkania mieliśmy możliwość wysłuchać kilkunastu prezentacji przygotowanych przez studentów
z Wrocławia, Warszawy oraz Zielonej Góry.

Nie brakowało technicznych tematów, odrobiny humoru oraz interesujących spostrzeżeń odnośnie praktyk. Żałuję, że nie mogłem zostać do samego końca - straciłem w ten sposób (jeżeli dobrze liczę) dwie prezentacje kolegów z Warszawy.


Swoje wystąpienie zapewne będę wspominać z uśmiechem na twarzy.
O wewnętrznym spokoju podczas prezentacji mogłem zapomnieć już na jej samym początku, gdy zamiast kolejnego slajdu pojawił się czarny ekran. Sądząc po głośnych brawach oraz uśmiechach publiczności na koniec, nie wypadłem aż tak źle jak mogłem się spodziewać.


Certyfikaty potwierdzające odbycie praktyk zostały wręczone nam przez Justynę Rachwalską, która (cytując jednego z praktykantów) "naprawdę żyje i nie jest robotem odpowiadającym na listy" :) Zabawne, że po trzech miesiącach intensywnej korespondencji pojawiły się głosy "Czy ktoś wie jak wygląda Justyna?". Przyznam się dobrowolnie, że też nie wiedziałem :) Nawet pomimo tego, że zdjęcia wszystkich pracowników były dostępne poprzez komunikator Sametime oraz BluePages.

Sama podróż do Warszawy również była przygodą - w tym przypadku zafundowaną przez PKP. Jadąc pociągiem z Zielonej Góry do Poznania można było odnieść wrażenie, że gorzej już być nie może - pomimo godzin porannych warunki w pociągu przypominały te ze szklarni, temperatura oraz zaduch niemalże nie do zniesienia.

Wybawieniem okazał się pociąg regionalny z Poznania do Warszawy - wygodne siedzenia oraz upragniona klimatyzacja! W takich warunkach podróż stanowiła samą przyjemność. Nie mógłbym nie wspomnieć
o solidnym opóźnieniu, ale do tego już chyba wszyscy zdążyliśmy się przyzwyczaić.

Chcąc wrócić do Zielonej Góry jeszcze tego samego dnia, zdecydowałem się na podróż powrotną pociągiem InterCity. Niemalże trzykrotnie większy koszt biletu upewnił mnie w przekonaniu, że tym razem nie będę miał możliwości narzekać na temperaturę oraz zaduch. Natychmiast po zajęciu swojego miejsca otrzymałem "soczek z rurką" oraz ciasteczko firmowane marką InterCity, wszystko w cenie biletu oczywiście.

Kontrola biletów również była nietypowa, pierwszy raz spotkałem się
z tak sympatyczną obsługą klienta - "Rybko, a gdzie masz rezerwację miejsca?". Szkoda jedynie, że klimatyzacja bardzo szybko zawiodła moje oczekiwania, dalszą podróż kontynuowaliśmy z uchylonymi oknami w całym wagonie.

Po niemalże osiemnastu godzinach wróciłem do domu - zmęczony
i zadowolony, że w końcu mogę położyć się w swoim łóżku.

sobota, 20 marca 2010

Podsumowanie ubiegłego tygodnia

Wreszcie nadszedł upragniony weekend! Teoretycznie powinienem przewracać się z boku na bok ciesząc się chwilą odpoczynku, ale dobrze wiem, że tym razem nie będę leniuchować. Mam zamiar opracować interfejs graficzny do kolejnego z ćwiczeń dotyczących wielowątkowości oraz bliżej zapoznać się z MIT Kerberos 5 Release 1.8.

Całe szczęście, że ubiegły tydzień mogę zaliczyć do udanych - utwierdziło mnie w tym przekonaniu przeprowadzone z Jackiem Laskowskim podsumowanie wykonanej pracy. Instalacja oprogramowania WebSphere Application Server 7 była równie intuicyjna co instalacja systemu SUSE Linux Enterprise Server 11, aczkolwiek nie obyło się bez drobnych przeszkód. Z pierwszą
- was7 nie rozpoznał SUSE, jako wspieranego systemu operacyjnego - poradziłem sobie bez problemu. Przed przystąpieniem do instalacji zapoznałem się z dokumentacją produktu stąd wiedziałem,
że wystarczy jedynie podmienić plik WAS/was.primary.pak/maintenance.xml na nowszą wersję, w tym przypadku dla architektury IA32. Plik służący do nadpisania maintenance.xml można pobrać tutaj.

Mniej zrozumiałym problemem okazał się być komunikat narzędzia IVT, uruchomionego przeze mnie po instalacji w celu zweryfikowania czy wszystko przebiegło zgodnie z planem. IVT nieczule poinformował mnie, że "IVTL0170I: Cannot find profile home. IVT cannot continue.". Dość mocno się zdziwiłem - przecież stworzyłem profil podczas instalacji, która zakończyła się sukcesem. Próba dodania profilu za pomocą Profile Management Tool nie przyniosła zamierzonego efektu. Rozwiązania problemu szukałem w InfoCenter dla was7, nie odnalazłem jednak żadnej istotnej z mojego punktu widzenia informacji.

Błędem, jaki popełniłem było szukanie odpowiedzi na nurtujące mnie pytanie z dala od źródła - wszystko, czego potrzebowałem znajdowało się w pliku /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/wsadmin.traceout zawierającym informację o zaistniałym wyjątku (java.net.UnknownHostException). Okazało się, że przyczyną kłopotów był brakujący wpis w /etc/hosts, którego brak istnienia zawdzięczam narzędziu YaST (oraz poniekąd swojej spostrzegawczości :), które domyślnie odznaczyło polecenie "Write Hostname to /etc/hosts" przy konfiguracji ustawień sieciowych.

Poprawnie utworzony profil dał mi możliwość uruchomienia przykładowej witryny sklepu internetowego "Plants by WebSphere"
co ostatecznie upewniło mnie, że tym razem wszystkie czynności zostały wykonane należycie.

Praca w korporacji ma swoje mocne dobre strony. Na początku tygodnia zwróciłem się z prośbą o przydział komputera z większą ilością pamięci RAM na pokładzie a już w piątek podczas kilkuminutowej rozmowy telefonicznej zostałem zapewniony,
że maszyna zostanie wysłana z Warszawy w poniedziałek. Podoba mi się podejście, które można krótko opisać w następujący sposób: "Damy Ci wszystko, czego potrzebujesz tylko przekonaj nas, że to,
co otrzymamy w zamian jest warte tego, o co prosisz"
. Gorzej, gdy nie wiesz, w jaki sposób uzasadnić swoje potrzeby, tutaj nie ma zmiłuj się - liczą się konkrety. Sprzęt to podstawa, ale jeszcze większe znaczenie mają narzędzia, którymi IBM nas obdarowuje. Łatwość komunikacji i dostęp do ogromnej bazy informacji
to z pewnością jedne z głównych zalet, które zrobiły na mnie wrażenie. Dostrzegam, że wraz z czasem coraz lepiej wykorzystuję dane mi narzędzia, co ma bezpośrednie przełożenie na fakt, iż coraz lepiej wykonuję swoją pracę.

wtorek, 16 marca 2010

Programowanie współbieżne

Poniedziałkowe laboratorium z przedmiotu "Programowanie współbieżne i rozproszone" zawsze zostawia w mojej głowie pewien mętlik. Zazwyczaj staram się wykonać jak najwięcej w czasie trwania zajęć, aby mieć mniej pracy w domu, fakt, iż jest to ostatnie laboratorium w danym dniu sprawia, że jedyną rzeczą na jakiej potrafię się skupić, jest myśl o powrocie do domowego zacisza. Ta czasowa nieprzydatność do pracy sprawia, że o wiele trudniej jest mi wpaść na prawidłowe rozwiązanie postawionego zadania, choć po dłuższej chwili namysłu okazuje się ono być całkiem banalne. Sytuacja zazwyczaj komplikuje się, gdy w głowie zaczynają pojawiać się dziesiątki pomysłów, a nie mam pewności, który jest tym właściwym.

Zabawne może wydawać się, że nie tylko ja mam wspomniany mętlik w głowie - cała grupa pozostaje z pracą do wykonania w domu. Co więcej, jeszcze ciekawiej robi się, gdy niejasności pojawiają się tuż przed terminem oddania pracy, a treść zadania mimo swojej prostoty opisu dopuszcza pozornie mnogość interpretacji. Doskonale zdaję sobie sprawę z faktu, iż sam proces planowania trwa znacznie dłużej niż kodowanie, dlatego zawsze próbuję zrobić małą burzę mózgów, w celu wyłonienia kilku najlepszych koncepcji oraz odrzucenia tych całkiem skrajnych, ale po chwili rozmowy odzywa się zmęczenie spowodowane niewyspaniem i wszystkie chęci zgłębienia tematu wnet gdzieś znikają. Wychodząc z założenia, że w programowaniu tak jak w życiu, nie zawsze liczy się fakt osiągnięcia celu, ale styl w jakim się tego dokonało, na weekend ponownie podchodzę do zadania tym razem wypoczęty i z otwartym umysłem.

Wyżej opisana historia powtarza się, co tydzień i wiem, że nie tylko ja zostawiam sobie pracę na jego koniec. Dla osób, które mimo szczerych chęci nie znalazły jednak czasu na dopracowanie swojego kodu, zamieszczam krótki opis moich pomysłów na realizację dwóch ostatnich ćwiczeń laboratoryjnych. Zaznaczam, że programy powstałe na ich bazie, zostały ocenione na ocenę bardzo dobrą, co świadczy o fakcie, iż koncepcja i wykonanie są co najmniej poprawne.

Pozornie skomplikowane zadanie, które byliśmy zobligowani wykonać na pierwszym laboratorium dotyczącym współbieżności, polegało na odwzorowaniu sytuacji mającej miejsce na parkingu. Samo rozwiązanie jest bardzo krótkie i proste, tym bardziej, że mogliśmy dopuścić do sytuacji, gdzie klienci nie honorują kolejki - najmniej zuchwały klient parkuje/wyjeżdża jako ostatni. Zuchwałość, o której piszę, to nic innego jak przydział czasu procesora, miejsce na parkingu oraz dwie bramy to zasoby, do których każdy wątek-samochód chce mieć dostęp. Jedyne wymagane na starcie programu wartości to ilość pojazdów oraz miejsc na parkingu, czas jazdy potencjalnego klienta poza parkingiem i czas jego postoju. Postanowiłem również założyć odpowiednią ilość zmian stanu pojazdów, aby generowany ruch nie był zbyt wielki, a jedynie przedstawiał mechanizm działania programu. Prostotę wykonania najważniejszych elementów tj. samochodu i obu bram ilustruje kod poniżej, na którym można dostrzec, że instrukcje informujące o zmianie stanu samochodów zawarte są w sekcjach krytycznych - w przeciwnym razie wyświetlane komunikaty nie odzwierciedlałyby chronologicznej kolejności zachodzących zdarzeń.

Klasa Parking:

Wątek:

Kolejne laboratorium było już bardziej wymagające. Tym razem zadanie polegało na odwzorowaniu sytuacji mającej miejsce na stacji benzynowej z trzema dystrybutorami. O zagłodzeniu wątków nie może być tutaj mowy - gra toczy się o dużą stawkę, brak benzyny w baku oznacza wyeliminowanie danego samochodu. Wartości liczbowe wymagane na starcie programu to maksymalna długość kolejek, ilość samochodów, ich czas tankowania oraz czas jazdy poza stacją. W przypadku zapełnienia wszystkich kolejek na stacji klient zmuszony jest do dalszej jazdy przez czas równy dwukrotności czasu tankowania, następnie może spróbować ponownie dostać się do kolejki. Samochody powinny dążyć do maksymalnego wykorzystania paliwa, dlatego założyłem, że z każdym kolejnym tankowaniem maksymalny poziom paliwa w baku się zmniejsza. Nie chciałem przecież dopuścić do sytuacji, gdzie w ruchu pozostają np. dwa samochody mające do dyspozycji całą stację dla siebie - mogłyby jeździć wtedy bez końca. Wybór do realizacji tego zadania struktury wyższego poziomu, jaką jest kolejka blokująca (w tym przypadku ArrayBlockingQueue), był dla mnie oczywisty, aczkolwiek do intensywniejszego myślenia zmusił mnie fakt, iż samochód wjeżdżający na stację, powinien wybrać najkrótszą kolejkę. Pierwszym pomysłem było wykorzystanie metod kolejek blokujących w sekcji krytycznej, która zlicza poziom ich zapełnienia i na żądanie klienta wybiera najkrótszą. Następnym krokiem przy założeniu, że pojazd został już przyporządkowany do jednej z kolejek, jest sprawdzenie, czy samochód zgłaszający chęć skorzystania z dystrybutora, jest pojazdem znajdującym się na czele kolejki - tu przychodzi z pomocą metoda peek(), która zwraca element z kolejki bez usuwania go. W przypadku zgodności wykonana zostaje metoda poll() (usuwa samochód z kolejki), po czym dany samochód uzyskuje dostęp do dystrybutora blokując go jednocześnie na czas użytkowania. W przeciwnym przypadku - stwierdzenia niezgodności - zostaje ponowiona weryfikacja, czy samochód zgłaszający chęć skorzystania z dystrybutora, jest pojazdem znajdującym się na czele kolejki. Pomysł ten sprawia wrażenie akceptowalnego, ale czy nie dałoby się zrobić tego subtelniej? Jestem otwarty na wszelkie sugestie.

piątek, 12 marca 2010

Rozpoczęcie praktyk

Praktyki edukacyjne organizowane przez firmę IBM ruszyły na dobre
i wg planu potrwają trzy miesiące. Postanowiłem wziąć w nich udział ze względu na możliwość zdobycia nowych doświadczeń, które mam nadzieję pomogą mi na drodze do dalszego rozwoju oraz ze względu na wewnętrzną potrzebę zrobienia czegoś "konkretnego", czym m.in. mógłbym pozytywnie zaskoczyć przyszłego pracodawcę. Dodatkowym bodźcem była czysta ciekawość i chęć uzyskania odpowiedzi na pytania "W jaki sposób działa tak wielka machina?" oraz
"Czy się w niej odnajdę?"
.

Warunkiem przyjęcia na praktyki było złożenie dokumentu potwierdzającego wysokie wyniki w nauce lub rekomendacji od prowadzącego zajęcia na uczelni, przygotowanie kilkunastominutowej prezentacji w języku angielskim oraz odbycie rozmowy kwalifikacyjnej. Łącznie ze mną biorą w nich udział cztery osoby z Uniwersytetu Zielonogórskiego. Wizytę w poznańskiej siedzibie firmy mamy już za sobą, teraz przyszedł czas na właściwą pracę, którą będziemy wykonywać zdalnie.

Jeden z dostępnych tematów do zrealizowania, który wydał się szczególnie interesujący brzmiał : "Using Kerberos token profile to secure enterprise applications in IBM WebSphere Application Server V7". Znajomość idei Kerberos'a oraz chęć bliższego poznania oprogramowania WAS7 utwierdziły mnie w wyborze tego tematu. Integracja Kerberosa z WAS7 będzie przeprowadzona na wirtualnej maszynie kontrolowanej przez system RedHat Enterprise Server lub Suse Enterprise Server.

W chwili obecnej zajmuję się kompletowaniem oprogramowania,
w kolejce pozostał już tylko linux, którego czas pobierania
z pewnością urozmaici lektura dokumentacji WAS7. Wraz z rozwojem wydarzeń będę opisywać postęp pracy oraz wszelkie odczucia względem samych praktyk. Dodam jeszcze tylko, że moim mentorem jest Jacek Laskowski a wszystko co robię w ramach praktyk można obserwować na bieżąco za pomocą twittera i blipa.

czwartek, 11 marca 2010

Ruszam z inicjatywą!

Zainspirowany ideą posiadania własnego bloga postanowiłem wprowadzić pomysł w życie. Za pomocą internetowego pamiętnika zamierzam dzielić się z szerszym gronem odbiorców swoimi przemyśleniami odnośnie programowania (i nie tylko), komentować napotkane problemy związane z aktualnie realizowanymi projektami oraz opisywać najciekawsze ćwiczenia laboratoryjne, które przyjdzie mi wykonać na uczelni. Mam cichą nadzieję, że moja inicjatywa zostanie pozytywnie odebrana przez czytelników oraz przyczyni się do poszerzenia - nie tylko mojej - wiedzy w kwestii poruszanych przeze mnie zagadnień.