You are on page 1of 84

06/2009 (174)

SPIS TRECI
06 Aktualnoci
Rafa Kocisz

27 Opis CD

jce identyfikacj oraz zarzdzanie produktem niezgodnym na etapie testowania oprogramowania w taki sposb, by zapewni spenienie wymaga normy i udoskonali proces SQA.

BIBLIOTEKA MIESICA
12 Java Plugin Framework wiat z klockw
David de Rosier

36 W poszukiwaniu straconego czasu strategie poszukiwania przyczyn bdw i ich rozwiza


Micha Bartyzel, Mariusz Sieraczkiewicz

JPF to biblioteka, szkielet i zbir narzdzi programistycznych uatwiajcych tworzenie aplikacji opartych na wtyczkach w jzyku Java. Dziki JPF mona znaczco poprawi skalowalno tworzonych programw. Niewielki rozmiar biblioteki i czytelna struktura tworz z niej narzdzie atwe do opanowania i wdroenia nawet w istniejcym projekcie.

Ile czasu straci kady z nas na poszukiwaniu bdw? Mona by go liczy w godzinach, dniach, a nawet miesicach. Wicej czasu tracimy na poszukiwanie bdw, ni na tworzenie oprogramowania. Efektywno dziaania w sytuacji, kiedy pojawiaj si problemy, jest jednym z kluczowych czynnikw wpywajcych na powodzenie lub niepowodzenie zadania.

KLUB TECHNICZNY
22 Wprowadzenie do Adobe AIR tworzenie aplikacji desktopowych z wykorzystaniem Adobe Flex
Mateusz Maczak

WARSZTATY
40 Agilo for Scrum zarzdzanie zmian w metodyce Scrum
ukasz Lechert

Flex jest obecnie najciekawszym rodowiskiem do tworzenia aplikacji typu RIA. Jego ograniczeniem jest jednak to, e aplikacja dziaa w przegldarce. Pociga to za sob ograniczony dostp do zasobw znajdujcych si na komputerze uytkownika oraz rygorystyczne zasady bezpieczestwa. Ograniczenia te doskonale uzupenia technologia Adobe Integrated Runtime (AIR).

Scrum metodyka lekka, znana prawie kademu menederowi projektu, staje si co raz bardziej popularna. Oprcz optymistycznej wizji oszczdnoci zasobw, myn w rkach pocztkujcych adeptw niesie puapki. Artyku przyblia problemy, ktre mog powsta w projektach opartych na metodyce Scrum oraz prezentuje narzdzie Agilo for Scrum.

NARZDZIA
28 ISO 9001 w IT Nadzr nad wyrobem niezgodnym w procesie produkcji oprogramowania cz II
Karolina Zmitrowicz

46 MS SQL Server kontenerem Web Service budowanie usug sieciowych w oparciu o MS SQL Server
Grzegorz Tomaszewicz

Zgodnie z norm ISO 9001:2000 organizacja powinna sprawowa nadzr nad wyrobem niezgodnym. W IT takim wyrobem jest system informatyczny i inne produkty procesu produkcji oprogramowania. Niniejszy artyku opisuje podstawowe narzdzia i techniki wspiera-

Artyku ten przedstawia przydatn, lecz mao znan funkcjonalno MS SQL Servera, jak s usugi sieciowe. Posiadanie zewntrznego serwera utrzymujcego Web Service nie jest niezbdne. Sam serwer SQL moe wystawi interfejs w formie usugi sieciowej, upraszczajc cao budowanego systemu.

Miesicznik Software Developers Journal (12 numerw w roku) jest wydawany przez Software-Wydawnictwo Sp. z o.o. Dyrektor wydawniczy: Anna Adamczyk Redaktor naczelny: ukasz opuszaski lukasz.lopuszanski@software.com.pl Kierownik produkcji: Marzena Polaska marzena.polanska@software.com.pl

Adres korespondencyjny: Software-Wydawnictwo Sp. z o.o., ul. Bokserska 1, 02-682 Warszawa, Polska tel. +48 22 427 36 91, fax +48 22 224 24 59 www.sdjournal.org cooperation@software.com.pl

Projekt okadki: Agnieszka Marchocka Skad i amanie: Monika Grotkowska monika.grotkowska@software.com.pl Wyrnieni betatesterzy: R. Zacharczyk

Dzia reklamy: adv@software.com.pl Obsuga prenumeraty: EuroPress Polska software@europress.pl Doczon do magazynu pyt CD przetestowano programem AntiVirenKit firmy G DATA Software Sp. z o.o. Redakcja dokada wszelkich stara, by publikowane w pimie i na towarzyszcych mu nonikach informacje i programy byy poprawne, jednake nie bierze odpowiedzialnoci za efekty wykorzystania ich; nie gwarantuje take poprawnego dziaania programw shareware, freeware i public domain.

Nakad: 6 000 egz.

06/2009

52 Windows Installer Xml budowanie natywnych instalatorw dla rodowiska Windows


Bartomiej Szafko

Windows Installer Xml jest projektem pozwalajcym na tworzenie instalatorw na platform Windows. Projekt ma status open source i jest bardzo szeroko uywany zarwno przez sam Microsoft, due firmy, oraz inne projekty open source. Wersja 3 zostanie wczona do rodowiska Visual Studio 2010 firmy Microsoft.

rwnie przysugiwa pracodawcy twrcy programu. Polskie prawo wprowadza regulacje dotyczce zarwno formy, jak i samej treci umowy o przeniesienie majtkowych praw autorskich. Podstawowa znajomo tych przepisw suy zabezpieczeniu interesw zarwno samych programistw, jak i ich pracodawcw.

JZYKI PROGRAMOWANIA
70 Biblioteka senseGUI czyli GUI z automatu cz. II
Mariusz Trzaska

BAZY DANYCH
60 Database Mail konfiguracja i wykorzystanie usugi w SQL Server 2005/2008
Igor Kruk

Podczas implementacji aplikacji biznesowych niejednokrotnie pojawia si wymaganie wysyania do uytkownikw wiadomoci e-mail, zawierajce potwierdzenia lub inne informacje pochodzce bezporednio z systemu rdowego. W artykule tym autor przedstawia sposb, w jaki mona speni to wymaganie wykorzystujc do tego serwer bazy danych.

W poprzedniej czci artykuu (SDJ 1/2009) przedstawilimy podstawowe moliwoci biblioteki senseGUI. Przypomnijmy, e umoliwia ona deklaratywne tworzenie GUI na podstawie adnotowanych klas jzyka Java. Ten odcinek powicimy na omwienie jej pozostaych funkcjonalnoci oraz przedyskutujemy budow i sposb dziaania.

FELIETON
74 Sabotaaa!
Arkadiusz Merta

AKADEMIA UML
66 Modelowanie rl na diagramach klas w jzyku UML cz II
Szymon Zioo

W poprzednim odcinku Akademii UML przekonalimy si, e dziedziczenie zwykle nie sprawdza si podczas modelowania rl i poznalimy proste sposoby radzenia sobie z rolami penionymi przez obiekty. Zobaczmy, jakie jeszcze techniki mona wykorzysta w takich sytuacjach.

Czy jeste proaktywny, czy reaktywny twoja podwiadomo moe sabotowa podejmowane przez Ciebie decyzje. Aby waciwie reagowa, potrzebne jest co wicej ni emocjonalny zapa czy lepa konsekwencja.

WYWIAD
76 Janusz Korwin Mikke
O blogach

PRAWO W IT
68 Prawo autorskie dla programistw umowa o przeniesienie majtkowych praw autorskich do programu komputerowego
Piotr Przegaliski

Zawarcie umowy o przeniesienie majtkowych praw autorskich jest jedn z form przejcia tych praw z twrcy na inn osob. W odniesieniu do programw komputerowych twrc bdzie co do zasady programista (autor programu). Majtkowe prawa autorskie mog

Uszkodzone podczas wysyki pyty wymienia redakcja. Wszystkie znaki firmowe zawarte w pimie s wasnoci odpowiednich firm. Zostay uyte wycznie w celach informacyjnych. Redakcja uywa systemu automatycznego skadu Osoby zainteresowane wspprac prosimy o kontakt: cooperation@software.com.pl Druk: Artdruk

Wysoko nakadu obejmuje rwnie dodruki. Redakcja nie udziela pomocy technicznej w instalowaniu i uytkowaniu programw zamieszczonych na pycie CD-ROM dostarczonej razem z pismem. Sprzeda aktualnych lub archiwalnych numerw pisma po innej cenie ni wydrukowana na okadce bez zgody wydawcy jest dziaaniem na jego szkod i skutkuje odpowiedzialnoci sdow.

www.sdjournal.org

Aktualnoci
Koniec wsparcia Windows XP i Office 2003

W poowie kwietnia br. Microsoft zakoczy okres podstawowego wsparcia dla systemu Windows XP oraz pakietu biurowego Office 2003. Od tego momentu bezpatne poprawki dla tych produktw bd dotyczy tylko bezpieczestwa. Poprawki dotyczce funkcjonalnoci bd dostpne tylko dla klientw, ktrzy wykupili wsparcie rozszerzone przynajmniej 90 dni przed kocem okresu wsparcia podstawowego. Wsparcie rozszerzone bdzie dostpne jeszcze przez 5 lat, do 8 kwietnia 2014. Z kolei poprawki bezpieczestwa bd wydawane do 4 sierpnia 2014. Wyjtkiem jest Windows XP Embedded, dla ktrego okres podstawowego wsparcia trwa nadal. Przy okazji Microsoft ogosi koniec wsparcia dla Windows Server 2003 Service Pack 1. Uytkownicy tej wersji systemu powinni zainstalowa Service Pack 2. http://www.techit.pl/

Symbian OS chyli si ku upadkowi?

Netbooki w szkoach: ruszy program pilotaowy

O planach wprowadzania notebookw do szk mwio si wiele; na pocztku kwietnia br. zaprezentowano oficjalnie pierwsze efekty tej dyskusji. Szkoa Podstawowa nr 33 w Katowicach, a w zasadzie uczniowie trzeciej klasy tej szkoy, mieli okazj jako pierwsi w Polsce odoy z awek ksiki i w zamian wczy komputery. 6 kwietnia we wspomnianej szkole odbya si lekcja pokazowa, podczas ktrej uczniowie klasy IIIa ze Szkoy Podstawowej nr 33 w Katowicach korzystali z netbookw, tym samym rozpocz si program pilotaowy Szkoa XXI wieku wykorzystanie technologii informatycznych w nauczaniu. Komputery zostay wyposaone w oprogramowanie edukacyjne (Young Digital Planet, Wydawnictwa Szkolne i Pedagogiczne oraz Longman) i na najblisze 3 lata zastpi maj trzecioklasistom tradycyjne podrczniki. System i oprogramowanie biurowe dostarczy Microsoft. Prowadzca lekcj Elbieta Bryl zwrcia uwag na fakt, e ucze moe take zadawa nauczycielowi pytania poprzez poczt elektroniczn; w podobny sposb otrzymuje informacj o popenionych bdach, co stanowi due udogodnienie dla uczniw niemiaych. W komputerze poza podrcznikami zainstalowano take gry edukacyjne. Przedstawiciele wydawnictw uczestniczcych w projekcie wyraali zadowolenie z tego, e ta interesujca od lat istniejca na rynku jako pewien margines oferta edukacyjna doczekaa si w kocu waciwego wykorzystania. Na przykad jzyka angielskiego katowiccy uczniowie uczy si bd z pomoc bohaterw bajek Walta Disneya. W komputerach zainstalowa mona pomoce naukowe takie jak: tablice, atlasy, sowniki czy encyklopedie. Dzieci otrzymay dostarczone przez Intela netbooki Classmate PC, odporne na zalanie, wstrzsy i upadki. Prawdopodobnie we wrzeniu programem finansowanym przez Kuratorium Owiaty w Katowicach i Wojewod lskiego objtych zostanie kolejnych sze szk na lsku. http://www.kuratorium.katowice.pl/

irma analityczna Gartner przedstawia wyniki bada wiatowego rynku systemw operacyjnych dla smartfonw. Okazuje si, e Symbian wci prowadzi w tym zestawieniu, ale jego popularno maleje z kwartau na kwarta. Do smartfonw z Symbianem naley obecnie (dane za: Q4 2008) 47,1% rynku. Drugie, odlege miejsce, naley do prawie nieznanej u nas, ale popularnej w USA firmy Research In Motion (RIM) jej urzdzenia BlackBerry to ju 19,5% rynku. Na trzecim miejscu znajduj si smartfony z Windows Mobile (12,4%), czwarte naley do Mac OS X (10,7%), pite za do rozmaitych urzdze linuksowych, w tym Androida (10,7%). Jednak postrzeganie tego rankingu jedynie w kontekcie suchych liczb, bez uwzgldnienia dodatkowych danych, moe by mylce. Nokia (i inni producenci telefonw z Symbianem) wbrew pozorom nie maj powodw do radoci. Udzia w rynku tego systemu operacyjnego zmniejszy si rok do roku a o 21,6% W tym czasie konkurencja rosa najwicej przypado Apple'owi, ktry odnotowa wzrost swojego rynkowego udziau a o 111,6%. Powody do radoci ma te RIM sprzeda urzdze BlackBerry wzrosa o 84,9%. Skromniej wyglday wyniki Linuksa (wzrost o 19,4%) i Windows Mobile (wzrost o 7,8%). cznie w czwartym

kwartale 2008 roku sprzedano ponad 38 mln smartfonw, o 3,7% wicej ni w analogicznym okresie roku poprzedniego. Nie jest to duy wzrost. Dlatego konkurencja na rynku urzdze mobilnych bdzie si zaostrza jak przewiduje firma analityczna IDC, w roku 2009 rynek smartfonw skurczy si o 8,3%. Wedug jej specjalistw, na rynku nie ma miejsca na tyle platform, dlatego te deweloperzy bd si koncentrowa na dostarczaniu aplikacji na najpopularniejsze systemy. Tendencje rynkowe nakazuj za zajcie si przede wszystkim Mac OS X-em i systemem urzdze BlackBerry. Czy w tej sytuacji dojdzie do zwikszenia przepaci pomidzy Mac OS X i RIM a reszt wiata na rynku urzdze mobilnych? Zarwno Windows Mobile, jak i Linux maj due zaplecze wrd deweloperw zwizanych ze stacjonarnymi wersjami tych systemw jednak Symbian istnieje tylko w wiecie mobilnym. Dla platformy Nokii kurczenie si rynku moe zatem okaza si najbardziej bolesne. news.cnet.com

1,4 mln zotych kar dla polskich firm-piratw

rganizacja Business Software Alliance (BSA) opublikowaa informacje na temat kar, jakie zapacili w ubiegym roku przedsibiorcy z tytuu korzystania z nielegalnego oprogramowania. W wyniku 264 dziaa prawnych podjtych w 2008 roku przez BSA, polscy przedsibiorcy uywajcy nielegalnego oprogramowania narazili si na koszt cznie prawie 1 miliona 400 tysicy zotych, z czego 1 milion 200 tysicy zotych to koszty odszkodowa zapaconych przez przedsibiorcw, a dodatkowe 183 tysice zotych to koszty ju nabytego przez nich legalnego oprogramowania, przy czym dalsze oprogramowanie bdzie nabywane w przyszoci. Bartomiej Witucki, rzecznik i koordynator BSA w Polsce, komentujc opublikowane dane stwierdzi, i w Polsce systematycznie wzrasta liczba przypadkw, w ktrych przedsibiorcy pac odszkodowania z tytuu korzystania z nielicencjono-

wanego oprogramowania. W roku 2008 najwiksz ugod byo porozumienie z firm RMG, opiewajce na rwnowarto 80 tysicy dolarw amerykaskich oraz zobowizanie do zakupu w okrelonym terminie legalnych licencji na kwot 310 tysicy zotych. W 2008 roku w wyniku dziaa BSA w Europie, na Bliskim Wschodzie oraz w Afryce przedsibiorcy musieli zapaci rwnowarto okoo 68,4 milionw zotych, z czego okoo 23,8 miliona zotych to koszty ugd, a ponad 44,6 milionw zotych to koszty zakupu legalnego oprogramowania. W ubiegym roku w wyniku 5 546 zgosze o przypadkach piractwa BSA podjo na tym obszarze ponad 3 000 dziaa prawnych. Oznacza to, e miesicznie zgaszano do BSA rednio 460 firm podejrzewanych o uywanie nielegalnego oprogramowania. http://www.bsa.org/

06/2009

Aktualnoci

Microsoft Security Intelligence Report, edycja H2 2008

48% Polakw to Internauci

icrosoft opublikowa kolejne, szste ju wydanie dokumentu Security Intelligence Report. Raport skupia si na drugiej poowie 2008 roku i powsta na bazie danych zgromadzonych przez cae spektrum narzdzi pracujcych na kilkuset milionach komputerw na caym wiecie. Przedstawia zagroenia pynce z bdw w oprogramowaniu, exploitw, szkodliwych aplikacji malware oraz niepodanego oprogramowania. Wedug raportu, najwiksze zagroenie stanowi faszywe oprogramowanie zabezpieczajce. Wywietla komunikaty o rzekomych zagroeniach, do ktrych usunicia niezbdny jest zakup penej edycji programu, wykorzystujc w ten sposb naiwno uytkownikw. Cakowita liczba usterek ujawnionych w drugim kwartale spada o 3% w stosunku do pierwszego kwartau. W roku 2008 ujawniono o 12% mniej informacji o lukach anieli w roku ubiegym. Zanotowano wzrost bdw o wysokim wskaniku wanoci o 4 procent w stosunku do pierwszego kwartau 2008. Kolejny cel atakw stanowiy ataki z wykorzystaniem formatw dokumentw. Najczciej wykorzystywano luki w pakiecie Microsoft Office. Powd 91,3% atakw stanowia luka bez-

pieczestwa zaatana ponad 2 lata temu. W wikszoci ataki dotyczyy pakietu bez zainstalowanych dodatkw Service Pack. Stanowiy 100% powd atakw na Office 2000. O ponad dwa razy wzrosy ataki z wykorzystaniem plikw PDF w stosunku do wczeniejszego kwartau. Najczciej ofiar atakw padali uytkownicy angielskojzycznych i chiskich przegldarek. Ofiar atakw pada najczciej Windows XP w rnych konfiguracjach (RTM, SP1, SP2, SP3), Windows Vista, 2000 oraz Windows Server 2003 i 2008. Powodem utraty danych byy najczciej kradziee. Raport zamykaj statystyki dotyczce bezpieczestwa poczty elektronicznej, gdzie ponad 97% wszystkich wysyanych wiadomoci zawieraj niepodane treci, phishing lub spam. Pena tre raportu oraz tzw. Key Findings dostpne s do pobrania w formacie PDF lub XPS (http://www.microsoft.com/ downloads/details.aspx?FamilyID=aa6e0660dc24-4930-affd-e33572ccb91f&displaylang=en). Ze strony gwnej Microsoft Malware Protection Center (http://www.microsoft.com/ security/portal/sir.aspx) mona natomiast pobra wszystkie poprzednie wydania. http://www.techit.pl/

Jak wskazuj wyniki bada przeprowadzonych przez NetTrack przeprowadzonych przez MillwardBrown SMG/KRC, ju prawie poowa Polakw (48%) posiada dostp do Internetu. Wedug bada za okres grudzie 2008 luty 2009, 74,4 proc. osb majcych dostp do Internetu korzysta z niego codziennie lub prawie codziennie, 16,25 proc. kilka razy w tygodniu, 5,1 proc. raz na tydzie, a 2,6% kilka razy w miesicu. 1,7% badanych korzysta z Internetu raz na miesic lub rzadziej. Zdecydowana wikszo badanych (90,3%) korzysta z Internetu w domu, niespena jedna czwarta (22,7%) w pracy, 7,8% w szkole lub na uczelni, 4,9 proc. u znajomych, a 1,7% w kawiarence internetowej lub innym miejscu z bezprzewodowym dostpem do sieci. Najsilniejsz grup Internautw stanowi niezmiennie osoby w wieku pomidzy 25 i 39 rokiem ycia (38%). Najwicej Internautw ma rednie wyksztacenie (42%), wyszym legitymuje si 27%, podstawowym 17%, zasadniczym 15%. Co ciekawe, po raz pierwszy badania wskazay, e polscy Internauci to dokadnie w poowie kobiety. Najczciej odwiedzana witryna to Google (87,2%), bardzo du popularnoci ciesz si rwnie Allegro i Onet. http://www.millwardbrown.com/pl

Restrukturyzacja w Live Labs

Specyfikacja OpenGL 3.1 oficjalnie wydana

pecyfikacja OpenGL 3.0 nie zostaa dobrze przyjta przez deweloperw. Nie do, e pojawia si z ponad rocznym opnieniem, to na dodatek nie wniosa wczeniej zapowiedzianych przez Khronos Group zmian. Grupa odpowiedzialna za rozwj tego otwartego standardu, w skad ktrej wchodz midzy innymi tacy producenci jak AMD, Intel, NVIDIA czy Sun, ostro wzia si jednak do pracy, czego efektem jest uaktualniona specyfikacja w wersji OpenGL 3.1. W najnowszej odsonie API odwieono Shading Language do wersji 1.4. Kolejn nowoci jest moliwo kopiowania danych pomidzy OpenGL i OpenCL poprzez zastosowanie funkcji GL_EXT_copy_buffer. Zostay rwnie wprowadzone nowe formaty i typy tekstur, a take dodano funkcj Primitive Restart. Kolejna nowo to moliwo rysowania wielu obiektw wielokrotnie z ponownym uyciem danych wierzchoka. Ciekawym usprawnieniem jawi si wpro-

Microsoft reorganizuje zesp badawczy Live Labs, znany midzy innymi z projektu Photosynth. Reorganizacja nie oznacza (wbrew temu, jak na pocztku spekulowano) cakowitego zamknicia zasuonej grupy badawczej znanej z wielu interesujcych projektw internetowych. Microsoft poinformowa, e mniej wicej poowa programistw i inynierw z zespou zostaa przeniesiona do rnych innych zespow wewntrz Microsoftu. Pozostali nadal bd skupieni w jednej grupie Live Labs i bd pracowa nad nowymi projektami. Niektre projekty, na przykad flagowy Photosynth, s teraz rozwijane ju samodzielnie w innych czciach Microsoftu. Pomimo restrukturyzacji Live Labs nie zmieni si natomiast szef zespou badawczego nadal jest nim Gary Flake, niegdy zaoyciel podobnego zespou w Yahoo!. http://news.zdnet.co.uk/

Wsppraca Yahoo! i Microsoftu? wadzenie funkcji CopyBuffer, ktra umoliwia przyspieszenie kopiowania obiektw z jednego bufora do drugiego. NVIDIA zawara ju wsparcie dla nowej specyfikacji w najnowszych sterownikach do swoich kart, AMD natomiast jeszcze pracuje nad swoimi. W pierwszej kolejnoci pojawi si one dla modeli z serii FireGL. Wicej informacji na temat wprowadzonych zmian mona znale w penej specyfikacji OpenGL 3.1 dostpnej pod adresem http://www.opengl.org/ registry/doc/glspec31.20090324.pdf. http://www.gamikaze.pl/

Carol Bartz z Yahoo! i Steve Ballmer z Microsoftu spotkali si, aby omwi pomysy na wspprac obu firm w zakresie reklamy oraz wyszukiwania. Jednym z takich pomysw jest to, aby Yahoo! przejo obsug reklam, a Microsoft wyszukiwanie dla obu firm. Microsoft ju zatrudni Qi Lu, eksperta od wyszukiwarek, poprzednio pracujcego w Yahoo!. Planuje take stworzenie nowej wyszukiwarki opartej o rozwizania opracowane przez zakupion niedawno firm Powerset. Z drugiej strony, Yahoo! zainwestowao duo we wasn wyszukiwark. Korzysta te z historii zapyta do niej, aby lepiej dopasowywa reklamy. Zapewne nie bdzie wic zbyt chtne, aby korzysta teraz z usugi Microsoftu. http://www.guardian.co.uk/

www.sdjournal.org

Aktualnoci
Office 14 nazwany Office 2010

Kolejna wersja pakietu biurowego i systemu aplikacji serwerowych Office, kodowo oznaczona liczb 14, zyskaa ju swoj oficjaln nazw: Office 2010. Wanie tak nazwany zostanie nowy Office, gdy po premierze planowanej na pierwszy kwarta 2010 roku trafi do sprzeday. Do tej pory nastpca Office 2007 znany by jedynie pod nazw kodow, ktra tradycyjnie w przypadku pakietw Office jest po prostu kolejnym numerem wersji. Niektrzy mog jednak zastanawia si, dlaczego w numeracji pominito liczb 13 (Office 2007 to przecie Office 12) o odpowied na to pytanie trzeba poprosi przesdnych Amerykanw, ktrzy nie tylko przy wersjonowaniu czsto pomijaj t najwyraniej kontrowersyjn liczb. Aktualnie Office 2010 znajduje si w fazie testw beta z bardzo wskim gronem testerw. Wkrtce czeka nas jednak publiczny program beta, podobnie jak w przypadku Office 2007. Przy okazji Microsoft zapowiedzia take, e nowa wersja serwera komunikacyjnego Exchange 14 analogicznie do Office'a nazwana zostanie Exchange 2010. http://bink.nu/

Microsoft i TomTom zawieraj ugod FAT zniknie z Linuksa?

Netbooki w USA opanowane przez Windows

Powoujc si na badania firmy NPD, Brandon LeBlanc z Microsoftu pochwali si, e system Windows obecny jest ju na 96% netbookw, ktre zostay sprzedane w lutym 2009 roku na terenie USA. W badaniu za netbooki uznano laptopy o przektnej ekranu poniej 10,2 cala i kosztujce mniej ni 500 dolarw. Jest to duy sukces, biorc pod uwag, e jeszcze w pierwszej poowie 2008 roku Windows mona byo znale na mniej ni 10% netbookw. Firmy, ktre instaloway Linuksa na swoich netbookach, przeszy na Windows. Zaobserwowano te, e zwroty netbookw s kilkukrotnie czstsze w przypadku urzdze wyposaonych w Linuksa ni w Windows. LeBlanc uwaa, e dobre wyniki Windows s spowodowane tym, e system ten jest atwiejszy w instalacji, uywaniu oraz utrzymaniu. W rzeczywistoci zapewne jednak decydujce znaczenie ma przyzwyczajenie uytkownikw, ktrzy chc, aby ich netbooki dziaay tak samo jak laptopy i desktopy. http://www.osnews.com/

o kilku tygodniach batalii na pozwy firmy Microsoft oraz TomTom zawary ugod i zakoczyy spory TomTom docza do programu ochrony patentowej Microsoftu. Przypomnijmy, e caa sprawa zacza si w lutym br. od pozwu Microsoftu przeciwko producentowi oprogramowania do nawigacji. Pozew dotyczy rzekomego naruszenia kilku patentw nalecych do korporacji z Redmond. W odpowiedzi TomTom wytoczy proces Microsoftowi z podobnymi zarzutami. W ramach zawartej ugody TomTom zobowiza si do opacenia patentw nalecych do Microsoftu, ktre wykorzystywane s w oprogramowaniu nawigacyjnym. Microsoft uzyska take swobodny i bezpatny dostp do patentw TomToma, ktre byy przedmiotem kontrpozwu. Inne szczegy ugody nie zostay ujawnione. Wiadomo tylko, e umowa zostaa zawarta na pi lat. TomTom tym samym sta si dzisiaj kolejn firm biorc udzia w programie ochrony patentowej Microsoftu TomTom paci Microsoftowi, a klienci TomToma nie musz obawia si pozww w zwizku z wykorzystywaniem w oprogramowaniu patentw Microsoftu. Ugoda ugod, ale efekt uboczny caej sprawy moe nieoczekiwanie wywrze cakiem spory wpyw na spoeczno Open Source i ca bran IT. Jeden z zarzutw Microsoftu wobec TomToma dotyczy naruszenia patentu zwizanego z do wiekowym ju systemem plikw FAT. Co wane, warunki ugody byy tak sformuowane, e TomTom de facto przyzna si do naruszenia i zobowiza si do wniesienia stosownej opa-

ty licencyjnej. Jak wida, sprawa nie jest wic rozdmuchana. Taki obrt sprawy rodzi jednak powany problem: FAT wykorzystywany jest nie tylko w urzdzeniach nawigacyjnych TomToma, ale take w niezliczonej liczbie innych urzdze od telefonw komrkowych przez odtwarzacze MP3 na aparatach cyfrowych koczc. Poza tym wbudowan obsug FAT oferuje sam Linux, ktry zarazem jest fundamentem dla wielu wymienionych wczeniej urzdze. Po umowach patentowych, takich jak ta z Novellem, i w zasadzie przegranych (ugoda z przyznaniem si do winy) procesach sdowych, nic dziwnego, e coraz czciej pojawiaj si gosy takie jak wypowied Jima Zemlina, dyrektora wykonawczego Linux Foundation. W swoich wypowiedziach twierdzi on, i FAT daje si atwo zastpi wieloma innymi technologiami, by pniej ju bez ogrdek zasugerowa programistom cakowit rezygnacj z tego rozwizania. Gdyby jednak usun z Linuksa obsug FAT, nie mona byoby odczyta danych z pendrive'a czy aparatu raczej trudno to sobie wyobrazi. Rodz si wic dwa pytania czy aby na pewno Zemlin przemyla to, co powiedzia oraz co zrobi spoeczno Open Source, gdy Microsoft zacznie pewnego dnia goniej upomina si (rzekomo) o swoje. http://www.cnet.com/ http://apcmag.com/

Firefox 3 liderem w Europie

Trzy lata z domenami .eu

Domena najwyszego poziomu .eu obchodzi w tym tygodniu trzecie urodziny. Domenami .eu od samego pocztku zarzdza organizacja non-profit EURid. Pomimo stosunkowo krtkiej obecnoci na rynku, .eu jest dziewit na wiecie domen najwyszego poziomu pod wzgldem liczby zarejestrowanych domen. W 2008 roku liczba rejestracji wzrosa o 10%, coraz wicej domen europejskich rejestruje si ju praktycznie w kadym kraju Europy. Z okazji trzeciej rocznicy powstania domeny .eu uruchomiono specjaln witryn 8reasons.eu, na ktrej zebrano osiem powodw, dla ktrych warto zarejestrowa nazw wanie z t kocwk. http://www.eurid.eu/

edug najnowszych danych firmy StatCounter, zajmujcej si badaniami Internetu, nastpia zmiana lidera wrd przegldarek internetowych na rynku europejskim. Badania wskazuj, i najpopularniejsz obecnie przegldark internetow w Europie jest Firefox 3 uywa jej obecnie 35,09% uytkownikw. Wyprzedzia ona przegldarki: Internet Explorer 7 (34,51%), Internet Explorer 6 (11,92%), Oper 9 (4,88%) oraz Firefox 2 (3,1%). Przegldarka Safari 3.2 zdobya w Europie 1,45% udziau w rynku, a Google Chrome 1.0 1,45%. Jednoczenie jeeli bra pod uwag grupy przegldarek, to liderem pozostaje Internet Explorer z udziaem w rynku na poziomie 48,84%. Wyniki pozostaych przegldarek przestawiaj si nastpujco: Firefox 38,85%, Opera 7,19%, Safari 2,19% oraz Google Chrome 1,83%. Badanie przeprowadzono pomidzy 23 a 29 marca br. W Polsce Fire-

fox 3.0 jest najpopularniejsz przegldark od pocztku grudnia ubiegego roku. Obecnie notuje on udzia w rynku na poziomie 38,8%. Drugi jest Internet Explorer 7 (23,4%), a trzeci Internet Explorer 6 (22.2%). Tu za podium uplasowaa si Opera 9 (7,9%), a kolejne miejsca zajmuj odpowiednio: Firefox 2 (5,1%), Google Chrome 1 (0,9%), Firefox 1 (0,8%), Safari 3 (0,2%) oraz Internet Explorer 8 (0,1%). Jeeli chodzi o grupy przegldarek, to liderem jest Internet Explorer (45,9%), drugie miejsce zajmuje Firefox (44,7%), nastpnie Opera (7.7%). Badanie zostao przeprowadzone pomidzy 10 a 16 marca br. przez firm Gemius SA. http://statcounter.com/

06/2009

Aktualnoci

Android SDK 1.5 Preview

Zgodne z Windows 7, czyli zgodne z wersj x64

rogramici Google Android przygotowali wczesn wersj testow pakietu SDK (Software Development Kit) dla Androida w wersji 1.5. Nowe SDK zawiera ga robocz (tzw. cupcake) otwartej platformy komrkowej i bazuje na jdrze Linux 2.6.27. SDK dziaa z rnymi wersjami platformy Android, pozwalajc programistom atwo przecza si midzy obecnym wydaniem 1.1 Androida oraz wczesn pogldow edycj 1.5. Oprogramowanie zawiera szereg nowych funkcji: widety, klawiatur programow, mechanizm obsugi katalogw (ang. live folders) i rozpoznawanie mowy. Wrd nowych elementw API i narzdzi dla programistw warto wspomnie o frameworkach Home Screen sucym do tworzenia wspomnianych ekranowych widetw, Media pozwalajcym na atwe nagrywanie i odtwarzanie dwiku, a take klipw wideo oraz Speech oferujcym narzdzia do rozpoznawania mowy. Warto doda, e skrcono czas uaktywniania kamery, poprawiono szybko namierzania pozycji za porednictwem odbiornika GPS i usprawniono przewijanie stron internetowych we wbudowanej przegldarce Androida. Ponadto dodano moliwo rozszerzania

funkcji Androida przez producentw sprztu OEM oraz operatorw telekomunikacyjnych. Google Maps API wczeniej wbudowane w podstawowy pakiet SDK zostao przeksztacone w dodatek. Pozwala to producentom OEM i operatorom oferowa ich wasne mapy, a nawet usun usug Google Maps, jeli zaistniaaby taka konieczno. Wicej informacji o wydaniu znale mona w witrynie Android 1.5 Highlights (http://developer.android.com/ sdk/preview/features.html). Zainteresowani platform programici mog ju teraz pobra pakiet Android 1.5 Early Look SDK ze strony projektu (http://developer.android.com/sdk/ preview/). http://www.heise-online.pl

Microsoft wyda wersj alpha zestawu certyfikacyjnego Windows 7 Logo. Windows Logo to bardzo dobrze znany program certyfikacyjny jeli nie z nazwy, to przynajmniej z logo na pudekach z oprogramowaniem. Logo to oznacza, e dany produkt jest kompatybilny z systemem i funkcjonuje na nim prawidowo. Niestety, w przypadku systemu Windows Vista wiele aplikacji chwalio si certyfikatem, ale mimo wszystko nie udawao si ich uruchomi na najnowszym systemie Microsoftu. Dlaczego? Bo certyfikowane byy na 32-bitowym systemie, a uytkownicy coraz czciej sigaj po 64-bitow edycj. Teraz nareszcie ma si to zmieni. Najwaniejsz zmian w zaoeniach programu Windows 7 Logo ma by wymg poprawnej pracy take na wersji 64-bitowej. Co oprcz tego? Poprawne rozpoznanie wersji systemu, czysty, cakowicie odwracalny proces instalacji do prawidowych folderw, cyfrowo podpisane pliki i sterowniki, wsppraca z User Account Control i Restart Managerem, waciwe traktowanie usug podczas pracy w trybie awaryjnym i obsuga wielu uytkownikw zalogowanych jednoczenie. Wicej szczegw mona znale w dokumencie dostpnym pod adresem http://go.microsoft.com/?linkid=9630189. http://blogs.msdn.com/

Google Apps z Jav i nie tylko

Nowa edycja ECMAScriptu

waj pracownicy Microsoftu Pratap Lakshman i Allen Wirfs-Brock s redaktorami nowej wersji ECMAScriptu, standardu, na ktrym bazuj jzyki takie jak JavaScript, JScript i ActionScript. Nowa wersja ECMAScriptu jest pierwsz powan zmian w specyfikacji standardu od dziesiciu lat. Utrzymanie standardu ECMAScriptu to zadanie organizacji Ecma International. Jego ostatnie kompletne wydanie miao miejsce w 1999 roku, zatem informacja o ukoczeniu prac nad odnowion specyfikacj standardu, ktry otrzyma nazw ECMAScript, Fifth Edition Candidate Specification, to niemaa nowina. Teraz dokument zostanie przedstawiony publicznoci, a koncepcje poddane szczegowym testom, tak aby do koca 2009 roku moga ukaza si jego wersja finalna. Pite wydanie ma odzwierciedli zmiany, jakie zaszy w implementacji jzyka w nowoczesnych przegldarkach i sta si fundamentem dla dalszej ewolucji jzyka. Znalazo si w nim miejsce m.in. dla formatu kodowania obiektw JSON, wasnoci dostpowych (ang. accessor properties), dodatkowych funkcji manipulacji tablicami, programowej kontroli atrybutw wasnoci czy trybu strict,

ktry pozwala na zaawansowane sprawdzanie bdw i zwikszenie bezpieczestwa. Dla typowego webdewelopera zmiany te nie bd od razu dostrzegalne pracuje on bowiem z tym, co jest obecnie obsugiwane przez przegldarki. Jednak w przyszoci odnowiony ECMAScript, wdroony przez producentw oprogramowania, stanie si tym, czego bd musieli oni przestrzega, piszc swoje skrypty. Ju dzisiaj wiele elementw nowej specyfikacji przenikno do przegldarek takich jak najnowsze wersje Firefoksa czy Internet Explorera np. natywna obsuga JSON czy funkcjonalnoci DOM Prototypes. Cho nad redakcj pitej edycji czuwali przede wszystkim pracownicy Microsoftu, to jest to jednak projekt caej brany. Nad specyfikacj pracowali te specjalici z Google'a, Opery, Mozilli, Yahoo! i Apple'a. Dlatego powinna ona zapewni w przyszoci znacznie wyszy poziom interoperacyjnoci, ni dotychczasowo stosowane rozwizania. Z dokumentem opisujcym najnowsz propozycj Ecma International mona zapozna si pod adresem http:/ /www.ecma-international.org/publications/files/ drafts/tc39-2009-025.pdf. http://webhosting.pl

Z okazji pierwszych urodzin usugi Google Apps do rozwizania tego wprowadzono szereg nowoci. Jedn z najwaniejszych jest plan wprowadzenia dla Google Apps Engine obsugi aplikacji napisanych w Javie, dziaajcych po stronie serwera. Z tej moliwoci bdzie mogo skorzysta pierwszych 10 tysicy programistw, ktrzy zgosz si do Google. Dotychczas jedynym obsugiwanym jzykiem by Python. Oprcz Javy pojawia si te obsuga dynamicznego jzyka Groovy. Ciekawym nowym narzdziem jest Google SDC (Secure Data Connector), ktre suy do budowania aplikacji dajcych uytkownikom dostp do danych firmowych, nawet jeli pracuj na zewntrz firmowego firewalla. SDC daje dostp do danych z poziomu Google Gadgets, Google App Engine i Google Spreadsheets, ale dostarcza agenta, ktry czy domen Google Apps ze rdami danych poza firewallem. Ponadto SDC pozwala systemom autoryzacyjnym sprawdza uytkownikw oraz aplikacje wykonujce zapytania do usug wewntrznych. Programici mog uywa SDC do tworzenia aplikacji korzystajcych zarwno z danych prywatnych, jak i publicznych. Dodano nowe narzdzie importujce informacje z baz danych, ktre pozwala importowa due zbiory danych do App Engine. Funkcja eskportu nadal jest opracowywana, powinna zosta ukoczona w cigu kilku tygodni. Programici dostali take do dyspozycji usug App Engine Cron Service suc do automatycznego uruchamiania zada o zadanej porze. http://dobreprogramy.pl

www.sdjournal.org

Aktualnoci
Kod rdowy Google Updater dostpny dla kadego

Google udostpnio kod rdowy usugi Google Updater, sucej do aktualizacji oprogramowania na platformie Windows. Kod udostpniono na licencji Apache License 2.0. Google Updater ma za zadanie zarzdza procesem aktualizacji oprogramowania w przyjazny dla uytkownika sposb. Dziaa w tle, nawet jeli aplikacja nie jest uruchomiona. Aktualizacje wykonywane s dopiero po zakoczeniu pracy z programem i zapisaniu wszystkich danych. Nie wymaga specjalnej uwagi ze strony uytkownika dziki temu posuy do utrzymania midzy innymi dwunastu wersji beta Chrome w czasie czterech miesicy. Proces aktualizacji produktw Google od dawna budzi wiele kontrowersji, szczeglnie w obliczu spornej licencji Chrome. Teraz wgld do kodu moe mie kady zainteresowany. Poza Google Chrome, Google Updater wykorzystywany jest do aktualizacji sporej grupy pozostaych aplikacji Google, midzy innymi Google Earth, sucej do ogldania satelitarnych zdj Ziemi. http://www.google.com/

Apple: iPhone OS 3.0 Beta dla programistw

Service Pack 1 dla SQL Server 2008

Microsoft wyda dodatek Service Pack 1 dla serwera baz danych SQL Server 2008. Wraz z SP1 wprowadzone zostay trzy interesujce usprawnienia. Po pierwsze, Service Packa mona teraz zintegrowa z instalatorem podstawowej wersji SQL Server 2008. Po instalacji natomiast moliwe jest odinstalowanie dodatku bez koniecznoci deinstalacji caej instancji. Trzecia nowo dotyczy Report Builder 2.0, ktry wyposaony zosta w obsug ClickOnce. Warto przypomnie, e Microsoft udostpnia SQL Server take w bezpatnej wersji Express, i to z moliwoci wykorzystania serwera do zastosowa komercyjnych. W zwizku z tym udostpniono trzy pliki instalacyjne Service Packa dla penych wersji SQL Server 2008 oraz kolejne trzy dla wersji Express. Warto wspomnie take, e rwnolegle wydany zosta kwietniowy Feature Pack dla SQL Server 2008. http://www.techit.pl/

Microsoft otwiera ASP.NET MVC

Scott Guthrie, twrca ASP.NET, ogosi otwarcie przez Microsoft ASP.NET MVC i udostpnienie na licencji MS-PL. ASP.NET MVC to zbir bibliotek i narzdzi do atwego tworzenia stron internetowych w ASP.NET przy wykorzystaniu wzorca projektowego ModelView-Controller. Pozwala na pen kontrol kodu HTML, obsuguje testy jednostkowe oraz programowanie w oparciu o przeprowadzane testy. Licencja MS-PL nie narzuca adnych powanych ogranicze i umoliwia swobodne rozprowadzanie i modyfikowanie kodu biblioteki. ASP.NET MVC 1.0 mona pobra i zainstalowa samemu lub te zainstalowa, korzystajc z Microsoft Web Platform Installer V2. http://dobreprogramy.pl

7 marca br. firma Apple zaprezentowaa przysz funkcjonalno oprogramowania iPhone OS 3.0 i ogosia dostpno wersji beta dla zarejestrowanych programistw. Wersja beta oprogramowania iPhone OS 3.0 zawiera uaktualniony pakiet Software Development Kit (SDK) z ponad 1000 nowych wywoa API, ktre umoliwiaj realizacj takich funkcji jak zakupy z poziomu programw; poczenia rwnorzdne (ang. peer-to-peer); komunikacja z akcesoriami; dostp do biblioteki muzycznej na iPodzie; nowy interfejs API dla map i aktywne powiadomienia (ang. push). Firma Apple zapowiedziaa take ponad 100 nowych funkcji, ktre ju latem tego roku bd dostpne dla uytkownikw telefonw iPhone oraz iPodw touch. Do nowych funkcji nale m.in.: wycinanie, kopiowanie i wklejanie; MMS*; ukad poziomy poczty, SMS i notatek; Bluetooth stereo; synchronizowanie notatek z komputerami Mac i PC; tasowanie po wstrzniciu; nadzr rodzicielski nad programami telewizyjnymi, filmami i programami z App Store; oraz automatyczne logowanie do hotspotw Wi-Fi. Wersja beta oprogramowania iPhone OS 3.0 bdzie take zawiera nowy program Voice Memo i rozbudowane funkcje wyszukiwania we wszystkich najwaniejszych programach telefonu iPhone, jak rwnie mechanizm wyszukiwania Spotlight dziaajcy na caej zawartoci telefonu iPhone lub iPoda touch. Oprogramowanie iPhone OS 3.0 beta i pakiet SDK zawieraj ponad 1000 nowych wywoa API i s dostpne ju dzi dla wszystkich uczestnikw programw iPhone Developer Program, ktrzy mog korzysta z nich przy tworzeniu i testowaniu swoich programw dla urzdze for iPhone i iPod touch. Nowe wywoania API umoliwiaj m.in. korzystanie z modelu zakupw App Store wewntrz programw. Zakupy z poziomu programw umoliwi programistom zaoferowanie treci subskrybowanych i sprzeda nowych treci oraz funkcji w prosty i bezpieczny sposb. Korzystajc z interfejsu Bluetooth, programici mog take atwiej tworzy gry sieciowe (peer-to-peer) dla telefonw iPhone i iPodw touch. Inn wan zalet oprogramowania iPhone OS 3.0, wan z perspektywy programistw, jest moliwo wsppracy midzy programami oraz akcesoriami sprztowymi. Tym sposobem projektanci akcesoriw dla telefonu iPhone i iPoda touch zyskuj zupenie nowe moliwoci sterowania, za klienci mog spodziewa si powstania nowego ekosystemu rozwiza. Programici maj te do dyspozycji nowy interfejs API dla map, ktry integruje usugi Google Mobile Maps z programami, udostpniajc takie funkcje jak pola z mapami Google, informowanie o biecym pooeniu, niestandar-

dowe adnotacje i geokodowanie. Oprogramowanie iPhone OS 3.0 zawiera usug aktywnych powiadomie Apple, ktra oferuje mechanizm powiadamiania uytkownikw drog dwikow, tekstow lub poprzez wywietlenie specjalnego pola. Nowe oprogramowanie iPhone OS 3.0 bdzie dostpne dla uytkownikw telefonw iPhone i iPodw touch latem tego roku i bdzie zawiera ponad 100 nowych funkcji, m.in. wycinanie, kopiowanie i wklejanie wewntrz jednego programu lub midzy programami; obsug wiadomoci MMS do wysyania i odbierania zdj, kontaktw, plikw audio i danych o pooeniu za pomoc programu Messages, oraz moliwo rejestrowania i wysyania nagra dwikowych za pomoc programu Voice Memo. Praca z poczt, wiadomociami SMS i notatkami bdzie moga odbywa si w ukadzie poziomym. Poszerzone zostan moliwoci wyszukiwania moliwe bdzie przeszukiwanie poczty, iPoda i notatek oraz zawartoci wszystkich najwaniejszych programw po wpisaniu sowa lub wyraenia w polu Spotlight dostpnym na ekranie pocztkowym. Oprogramowanie iPhone OS 3.0 beta i pakiet SDK s dostpne dla zarejestrowanych programistw w witrynie developer.apple.com. Uytkownicy telefonw iPhone bd mogli pobra nowe oprogramowanie iPhone OS 3.0 bezpatnie latem tego roku, a uytkownicy iPodw touch bd mogli zakupi uaktualnienie oprogramowania za 9,95 USD (cena w USA). Ceny obowizujce w innych krajach zostan ogoszone w dniu wprowadzenia do oferty. Warto przy okazji przypomnie, i przeomowy serwis App Store zawiera obecnie ponad 25000 programw dla klientw indywidualnych, a wraz z udostpnieniem serwisu w kolejnych 15 krajach jego zasig zwikszy si do 77 krajw. Oznacza to, e programici mog t drog zaoferowa swoje produkty ponad 30 milionom uytkownikw urzdze iPhone i iPod touch na caym wiecie. Twrcy oprogramowania sami ustalaj cen swoich programw i otrzymuj 70 procent wszystkich przychodw z ich sprzeday. Apple pokrywa wszystkie koszty obsugi kart patniczych, utrzymania serwisu WWW i infrastruktury zwizane z oferowaniem programw w App Store. http://www.inwestycje.pl

10

06/2009

Aktualnoci

Canvas: zaawansowana grafika 2D/3D w przegldarkach

Microsoft zapaci za zabezpieczenia antypirackie

oogle udostpnio interesujc stron z demonstracjami wykorzystywania animacji JavaScript oraz elementu Canvas. Na stronie Chrome Experiments (http://www.chromeexperiments.com/) pokazano moliwoci uywania tych technologii, ktre pozwalaj na dynamiczne generowanie grafiki zarwno dwuwymiarowej, jak i trjwymiarowej. Wrd ciekawych animacji mona wyrni: pik, ktra potrafi przeskakiwa pomidzy rnymi oknami przegldarki; wielokolorowy szecian, ktry moemy dowolnie obraca; gr Domtris - klona gry Tetris, raytracer czy map pogody dla Stanw Zjednoczonych. Ponadto kada chtna osoba moe zgosi swoj prac poprzez formularz zgoszeniowy, dostpny na stronie Chrome Experiments. Warto rwnie wspomnie, jak uzyskano takie moliwoci animacji. Ot element Canvas zosta

po raz pierwszy zaproponowany i opracowany przez firm Apple i nastpnie wdroony w przegldark Safari, opart o silnik Webkit. Nastpnie Fundacja Mozilla postanowia go wdroy w Firefoksie w wersji 1.5, a Opera wspiera ten element od wersji 9. Wraz z grafikami wektorowymi SVG, obiekty Canvas w przyszoci mog stanowi powan konkurencj dla animacji Flash czy appletw Java nie wymagaj one od twrcy strony dodatkowej wiedzy, poza znajomoci jzyka JavaScript, za od uytkownika kocowego nie wymagaj instalacji dodatkowych pluginw. W przyszoci programujce element Canvas moliwe bdzie korzystanie z API OpenGL, co pozwoli odciy gwny procesor komputera. Warto przypomnie, i element Canvas jest skadnikiem opracowywanego obecnie standardu HTML 5. http://www.google.com/

Federalny sd w Rhode Island orzek, e Microsoft musi zapaci 388 milionw dolarw za naruszenie patentw nalecych do Uniloc USA Inc. Konkretnie chodzio o mechanizmy tworzenia unikalnych tosamoci dla licencjonowanych uytkownikw, ktre miay za zadanie zapobiega nieautoryzowanemu uywaniu lub kopiowaniu oprogramowania. Sprawa rozpocza si w 2003 roku. Uniloc oraz jej singapurska firma matka oskarya wwczas Microsoft o naruszenie posiadanego przez ni patentu dotyczcego mechanizmw zabezpieczajcych, jakie zastosowano w systemie Windows XP i pakiecie Office. Po szeciu latach sporw, w marcu 2009 r. w kocu rozpocz si proces. Sdzia federalny Rhode Island uzna, e Microsoft naruszy chroniony patent i nakaza zapat odszkodowania. Rzecznik Microsoftu poinformowa, e patent jest niewany, a odszkodowanie pozbawione sensu. Zapowiedzia te wniesienie odwoania. http://www.reuters.com/

Webowy, mobilny Gmail

Kryzys szans Linuksa?

edug najnowszych bada przeprowadzonych przez IDC na zlecenie Novella, wiatowy kryzys gospodarczy spowodowa znaczce zwikszenie zainteresowania wdraaniem w firmach rozwiza opartych na Linuksie. Ponad poowa ankietowanych szefw ds. informatyki planuje przyspieszy wdraanie systemu Linux w roku 2009. Ponad 72 procent respondentw twierdzi, e powanie rozwaaj wdroenie Linuksa na serwerach w biecym roku lub ju podjli tak decyzj, za 68 procent ankietowanych podaje analogiczn deklaracj w stosunku do komputerw osobistych. Badaniem objto ponad 300 kierownikw ds. informatyki z firm dziaajcych w przemyle, handlu i brany usug finansowych, a take z instytucji pastwowych. Jako najwaniejszy powd skaniajcy do migracji do Linuksa respondenci podaj przyczyny ekonomiczne, w tym zwizane z obnieniem biecych kosztw wsparcia. Dlatego ponad 40 procent uczestnikw badania twierdzi, e w cigu najbliszych 12-24 miesicy planuje uruchamianie kolejnych obcie IT na platformie Linux, za 49 procent przewiduje, e w cigu piciu lat Linux stanie si ich podstawow platform serwerow. Respondenci wahajcy si przed wdroeniem Linuksa, jako gwne powody swych obaw podawali brak wsparcia aplikacji oraz kopoty z jego zgodnoci interoperacyjn z Windows i innymi rodowiskami. Bran wykazujc naj-

wikszy potencja przyspieszenia wdraania systemu Linux jest handel, gdzie 63 procent respondentw planuje przyspieszenie wdraania go na komputerach osobistych, za 69 procent na serwerach. Sektorem najsabszym pod tym wzgldem s instytucje rzdowe. Niemal 50 procent respondentw IDC planuje przyspieszenie wdraania systemu Linux na komputerach osobistych, szczeglnie przy podstawowych pracach biurowych, na stacjach roboczych w zastosowaniach technicznych oraz w szkolnictwie i na wyszych uczelniach. Badanie zostao przeprowadzone w Internecie na ponad 300 osobach zajmujcych kluczowe stanowiska z zakresu IT w swoich przedsibiorstwach. Raport (w jzyku angielskim) dostpny jest pod adresem http://www.novell.com/linux/pdf/IDC_ white_paper_Linux_Adoption_in_a_Global_Recession.pdf. http://www.novell.pl/

Na konferencji Web 2.0 Expo firma Google zaprezentowaa prototyp webowego klienta usugi Gmail dla urzdze przenonych. Dotychczas dostpne byy natywne aplikacje do obsugi Gmaila na platformy BlackBerry i Android. Teraz Google chce zrobi aplikacj webow, ktra bdzie moga dziaa na wikszej liczbie platform. Na konferencji zaprezentowano dziaanie prototypu na iPhonie oraz telefonie z Androidem. Mona sobie zada pytanie o celowo tworzenia webowego klienta, skoro webowy interfejs Gmaila jest w sumie tak wanie aplikacj. Ot rnica polega bdzie nie tylko na dostosowaniu do moliwoci urzdze przenonych, ale take na wykorzystaniu jzyka HTML w wersji 5. Dziki niemu wiadomoci pocztowe bd dostpne take w trybie offline, bez poczenia z Internetem. Jest to funkcja, ktra nie jest dostpna w zwykym webowym interfejsie Gmaila. http://www.cnet.com/

Silverlight 3 beta

Zgodnie z zapowiedziami prosto z konferencji MIX'09 w Las Vegas, Microsoft wyda pierwsz wersj beta technologii Silverlight 3 platformy Microsoftu do wywietlania i tworzenia bogatych graficznie multimedialnych treci internetowych. Razem z Silverlight 3 Beta udostpniono rozszerzenie do Visual Studio 2008, dostpne jest te SDK zawierajce dokumentacj online, przykady, biblioteki i narzdzia do tworzenia treci za pomoc Silverlight, pakiet usug .NET RIA Services oraz rodowisko uruchomieniowe. Czytelnikom zainteresowanym szczegami na temat nowoci w Silverlight 3 polecamy lektur bloga Scotta Guthrie (http://weblogs.asp.net/scottgu/archive/2008/ 11/16/update-on-silverlight-2-and-a-glimpse-of-silverlight-3.aspx), pracownika Microsoftu zwizanego z Silverlightem. http://dobreprogramy.pl

www.sdjournal.org

11

Biblioteka miesica

Java Plugin Framework wiat z klockw


Tworzenie aplikacji opartych na wtyczkach w jzyku Java
JPF to biblioteka, szkielet i zbir narzdzi programistycznych uatwiajcych tworzenie aplikacji opartych na wtyczkach w jzyku Java. Dziki JPF mona znaczco poprawi skalowalno tworzonych programw. Niewielki rozmiar biblioteki i czytelna struktura tworz z niej narzdzie atwe do opanowania i wdroenia nawet w istniejcym projekcie.
Dowiesz si:
Jak tworzy w jzyku Java programy bazujce na wtyczkach; W jaki sposb zarzdza projektami JPF z pomoc rodowiska Eclipse lub z uyciem skryptw Ant.

Powiniene wiedzie:
Jak programowa w jzyku Java; Jak uywa narzdzia Apache Ant; Jak konfigurowa rodowisko Eclipse.

Poziom trudnoci

rogramy udostpniajce mechanizmy instalacji rozszerze staj si coraz bardziej popularne i pozwalaj uytkownikom dostosowa ich aplikacje do osobistych wymaga. Pisanie tego typu aplikacji wymaga jednak od programisty nieco innego podejcia, w ktrym poszczeglne elementy programu bd atwo daway si zamienia poprzez nowe lub przynajmniej komunikowa z dodatkowymi rozszerzeniami. JPF to biblioteka pozwalajca w atwy sposb zarzdza wtyczkami (ang. plug-ins) jzyka Java. Jest to rwnie szkielet wymuszajcy na programicie pewien sposb konstruowania aplikacji, celem zachowania moliwie najwikszej moduowoci programw. Koncepcja wtyczek, przynajmniej w teorii, jest prosta udostpniamy programistom (zazwyczaj zewntrznym) moliwo uzupeniania aplikacji o dodatkowe funkcje. Autorzy JPF proponuj model programu, w ktrym kada jego cz jest de facto wtyczk i moe zosta zamieniona przez zewntrzny modu. W takim podejciu praca nad jednym projektem w wieloosobowym zespole powinna sprowadza si rwnie do pisania nieza12

lenych wtyczek, a aplikacja sama w sobie jest co najwyej rodowiskiem uruchomieniowym dla tzw. wtyczki aplikacji (ang. application plugin). Dobrym przykadem takiego rodzaju oprogramowania moe by rodowisko programistyczne Eclipse, ktre w caoci bazuje na koncepcji wtyczek. Jest to poniekd kolejny krok w pracy grupowej nad programem bazujcej zazwyczaj na koncepcji tworzenia komponentw, ktre jednak czsto posiadaj wsplny interfejs i final-

nie s kompilowane do jednego pliku wynikowego. W przypadku wtyczek mamy natomiast do czynienia z cakowitym uniezalenieniem poszczeglnych moduw aplikacji, co w praktyce powinno uatwi prac czonkom zespou (lub niezalenym zespoom) nad jednym zoonym projektem. JPF to narzdzie stabilne, o ugruntowanej pozycji w wiecie Java i z powodzeniem wykorzystywane w aplikacjach komercyjnych. Niewielki rozmiar biblioteki (okoo 200kB) pozwala na wykorzystanie jej nawet w niewielkich programach. JPF rozwijany jest od 2004 roku. Wersja najnowsza, z maja 2007 roku, uznana jest za wystarczajco stabiln, kompletn i wydajn ,dlatego te projekt zosta zamroony. Niewykluczone jednak, e z czasem, wraz z nowymi wymaganiami, powstanie nowa wersja JPF. Biblioteka dystrybuowana jest w dwch

Szybki start

Omawiana w artykule wersja JPF wymaga do pracy maszyny wirtualnej Java w wersji 5 lub nowszej. Jeli mamy j zainstalowan, pozostaje pobra ze strony internetowej http:// jpf.sourceforge.net/ odpowiednie archiwum (plik jpf-bin-1.5.1.zip), rozpakowa je i zacz uywa wszystkie powizane pliki, jak rwnie dokumentacja, znajduj si wewntrz archiwum. By zacz przygod z JPF, zachcam rwnie do pobrania dodatkowej paczki z przykadow aplikacj (plik jpf-demo-bin-1.5.0.zip) wykonan bardzo solidnie i demonstrujc w sposb atwy do zrozumienia filozofi JPF. Ponadto przykady z oficjalnego tutoriala odwouj si do teje aplikacji. Program demonstracyjny szuka znajdujcych si w katalogu plugins wtyczek i kad z nich uruchamia w postaci oddzielnej zakadki w gwnym oknie aplikacji. Standardowo otrzymujemy trzy wtyczki. Pierwsza, najprostsza, jest przegldark wtyczek pozwala podejrze informacje na ich temat. Drugi podprogram to maa aplikacja przeksztacajca kod programu Java na HTML, RTF itp. z opcj podkrelania skadni. Trzeci, najbardziej zaawansowany przykad, to przegldarka baz danych, bazujca na wasnych, wewntrznych wtyczkach (np. do obsugi poszczeglnych typw baz danych itp.). Aplikacja ta demonstruje bardziej zoone wykorzystanie JPF, w ktrym poszczeglne moduy maj swoje wasne wtyczki. By uruchomi aplikacj demonstracyjn, naley wpisa z poziomu katalogu gwnego aplikacji ponisz komend:
java -jar lib\jpf-boot.jar

rda poszczeglnych wtyczek s dystrybuowane w postaci osobnego archiwum (plik jpf-demosrc-1.5.0.zip). Warto je pobra, by analizowa wraz z kodem dziaanie programu.

06/2009

Java Plugin Framework wiat z klockw

wersjach dla jzyka Java 5 (i nowszych) oraz dla Java 1.4 (i starszych). JPF jest oprogramowaniem darmowym i otwartym, dystrybuowanym na zasadach licencji GNU Lesser General Public License.

Pierwsza wtyczka
Zanim zagbimy si w niuanse programowania z uyciem JPF, napiszmy prosty program obrazujcy, jak w najatwiejszy sposb zaadowa i uruchomi wtyczk. Aby nie gmatwa listingw kodem niezwizanym z JPF, stworzymy program naprawd banalny gwna aplikacja bdzie miaa za zadanie jedynie pobra dwie liczby z konsoli. Zadaniem wtyczek jest dokonanie jakiej operacji na tych liczbach. Oczywicie obowizkiem gwnego programu bdzie rwnie zaadowanie i uruchomienie wtyczki. Mechanizm JPF dziaa bowiem w taki sposb, e aduje kod wtyczki tylko w sytuacji, kiedy jest to wymagane. Odpowiada za to dedykowany ClassLoader biblioteki. Dziki takiemu rozwizaniu osigamy podwjny zysk: po pierwsze moemy pisa lekkie programy, ktre nie aduj wszystkich moduw do pamici, pki nie s one wymagane, po drugie moemy instalowa i uruchamia nowe wtyczki w locie bez koniecznoci ponownego uruchamiania programu. Wtyczk moe by dowolna klasa Java rozszerzajca biblioteczn klas Plugin (jak si pniej okae, nawet ten warunek nie jest konieczny). Klasa ta posiada dwie abstrakcyjne metody doStart() i doStop(), jak si mona domyla uruchamiane jednorazowo poprzez silnik JPF w momencie aktywacji i dezaktywacji wtyczki. W wikszoci przypadkw metody te bd jednak pozostaway puste. Czym, co w praktyce przyda si w wikszoci przypadkw, bdzie natomiast jaki interfejs, pozwalajcy skomunikowa si aplikacji z wtyczk. Bez niego gwna aplikacja nie bdzie nawet wiedziaa, w jaki sposb zmusi zaadowan wtyczk do dzia-

ania (uycie w tym celu metody doStart() nie jest najlepszym rozwizaniem). W naszej konkretnej sytuacji moemy wyobrazi sobie interfejs z dwiema metodami. Jedna bdzie zwracaa nazw operacji, a druga dokonywaa oblicze na otrzymanych liczbach. Interfejs ten bdzie jedynym punktem wsplnym midzy aplikacj a wtyczk. Jego kod zaprezentowano na Listingu 1. Implementacj programu rozpoczniemy od kodu wtyczki jest on bowiem najprostszy. Ustalilimy ju, e klasa powinna implementowa nasz interfejs (nazwany MathOperation) oraz rozszerza klas Plugin. I to w zasadzie wszystko po stronie kodu Java wygld przykadowej wtyczki dla operacji dodawania zosta umieszczony na Listingu 2. Dodatkow czynnoci wymagan od programisty jest przygotowanie tzw. manifestu wtyczki. Jest to plik XML o nazwie plugin.xml, czytany w pierwszej kolejnoci przez silnik JPF w trakcie adowania pluginu. W naszym przypadku musimy okreli jedynie unikalny identyfikator wtyczki (zwyczajowo uywa si tu nazwy w stylu pakietu Java), nazw klasy oraz lokalizacj katalogu z klasami Java w stosunku do katalogu gwnego wtyczki (zwyczajowo katalog classes, ewentualnie katalog gwny). Plik plugin.xml powinien znajdowa si w katalogu gwnym wtyczki. Przykadowy manifest wtyczki zosta przedstawiony na Listingu 4.

Naley pamita, e kod aplikacji jest niezaleny od kodu wtyczki powinnimy go zamieci w zupenie innym katalogu czy projekcie Java. Z drugiej jednak strony, wtyczka powinna widzie kod aplikacji, znajduje si tam bowiem definicja interfejsu MathOperation. W naszym przykadzie atwo mona wyobrazi sobie cay szereg wtyczek dla poszczeglnych operacji matematycznych. Bdziemy je umieszcza w katalogu plugins. Kada wtyczka bdzie tu miaa swj wasny podkatalog z dwoma dodatkowymi folderami wewntrz src dla rde i classes dla skompilowanych klas. Kod aplikacji gwnej umiecimy w katalogu src na zewntrz foldera plugins. Oczywicie kad wtyczk, jak i sam aplikacj, powinnimy kompilowa oddzielnie, do niezalenych katalogw classes czy plikw .jar. Struktur katalogw i plikw dla naszego przykadu zobrazowano na Rysunku 1. Czas na kod gwnego programu (patrz Listing 3). Oprcz pobrania dwch liczb od uytkownika, znajdziemy tam metod executePlugins, odpowiedzialn za adowanie i uruchamianie wtyczek. Dla uproszczenia w naszym przypadku skupimy si tylko na jednej wtyczce o okrelonej nazwie. W pierwszej kolejnoci musimy pobra obiekt klasy PluginManager, ktra zarzdza adowaniem, aktywacj, dezaktywacj i innymi podstawowymi operacjami na wtyczkach. Jedna aplikacja powinna operowa na jednej in-

Listing 1. Interfejs uywany przez wszystkie wtyczki oraz aplikacj gwn, dostarczajcy metod zwracajc nazw operacji matematycznej i jej wynik
package org.sdjournal.jpf.math; public interface MathOperation {

public String getOperationName();

public double calculate(double a, double b);

Listing 2. Prosta wtyczka dla operacji dodawania


package org.sdjournal.jpf.math.addition; import org.java.plugin.Plugin;

import org.sdjournal.jpf.math.MathOperation; public class AdditionPlugin extends Plugin implements MathOperation { @Override protected void doStart() throws Exception { @Override

protected void doStop() throws Exception { public double calculate(double a, double b) { return a + b;

public String getOperationName() { return "dodawanie";

Rysunek 1. Struktura plikw i katalogw dla pierwszego przykadu (program JPF bez wtyczki aplikacji)

www.sdjournal.org

13

Biblioteka miesica
stancji klasy PluginManager. Dostp do niej uzyskamy z uyciem dedykowanej fabryki (ObjectFactory):
PluginManager pm = ObjectFactory.newInstanc e().createManager(); PluginManager.

Kolejnym krokiem jest wskazanie na lokalizacj wtyczki:


PluginLocation pl = StandardPluginLocation ( new File("plugins/org.sdjournal.jpf.ma thop.add") ); .create

Klasa StandardPluginLocation pozwala odczyta kod wtyczki z katalogu, pliku JAR/ZIP, bd dowolnego URL. Gdyby to nie wystarczao, mona uy wasnego rozwizania, implementujcego interfejs PluginManager.Plug inLocation. W kolejnym kroku rejestrujemy wtyczk z uyciem metody publishPlugins klasy

Metoda ta przyjmuje jako parametr tablic, std w naszym przypadku niezbdna konwersja. Po tej operacji wtyczki staj si widoczne dla aplikacji, jednak nie s aktywowane. Ze wzgldu na wydajno aplikacji i zajto pamici, zaleca si, by aktywowa wtyczki bezporednio przed ich uyciem. Aktywacji mona dokona z uyciem metody activatePlugin managera lub poprzez wywoanie metody getPlugin. Ta ostatnia jednoczenie zwraca obiekt wtyczki. Parametrem obu metod jest identyfikator wtyczki, ktry oczywicie powinien by unikalny w obrbie aplikacji. W tym momencie dochodzimy do kodu specyficznego dla naszej aplikacji. Zaoylimy, i kada wtyczka powinna implementowa interfejs MathOperation, dlatego moemy zrzutowa obiekt wtyczki i wywoa dedykowane metody. I to ju wszystko mona przetestowa program. W tym prostym przykadzie zamiecilimy w kodzie gwnego programu nazw wtyczki i jej lokalizacj, co nie powinno mie miej-

sca w rzeczywistej aplikacji (programista w trakcie pisania programu zazwyczaj nie zna nazw wtyczek). W tym miejscu powinien raczej by efekt zapytania do uytkownika o lokalizacj wtyczki lub co wydaje si by najbardziej logiczne program powinien przeszuka zadany katalog (np. plugins) w poszukiwaniu wszystkich wtyczek i je zaadowa. Rnica jednak polega wycznie na dodaniu ptli i nie wymaga specyficznego uywania biblioteki JPF.

Aplikacja jako plugin


Jak wspomniaem we wstpie, koncepcja pluginw moe by wykorzystywana dwojako jako interfejs dla pniejszej rozbudowy aplikacji, zazwyczaj przez zewntrznych programistw, lub jako sposb na pen modularyzacj programu. W pierwszym przypadku na og zostawiamy otwart furtk programistom, pozwalajc im rozbudowa aplikacj o dowolny, nawet irracjonalny, modu (jak np. Tetris dla rodowiska Eclipse). W drugim mamy zazwyczaj pewn koncepcj poszczeglnych czci programu, chcemy jednak je traktowa niezalenie, pozwalajc w przyszoci podmienia je na inne. Przykadowo w programie graficznym paleta barw bdzie niezbdnym elementem, ktry z pewnoci bdzie zaimplementowany od samego pocztku. Wygld tej palety moe jednak mie wiele form, a rni uytkownicy mog tutaj mie odmienne preferencje. Aplikacja zyska wiksze grono potencjalnych uytkownikw, jeli bd oni mogli wybra spord wielu wariantw, a nawet napisa wasne. Kontynuujc te rozwaania, mona doj do wniosku, e aplikacja sama w sobie nie jest niczym innym, jak tylko rodowiskiem uruchomieniowym dla wtyczek. T form rozumowania preferuj autorzy JPF. Nie jest przecie powiedziane, e gwny modu programu musi by niezmienny moe przecie on by wtyczk. Tak oto dochodzimy do koncepcji wtyczki aplikacji (ang. application plugin), pozbawiajc nasz program jednej gwnej metody main, ktra go uruchamia. Zamiast niej, zdecydujemy poprzez konfiguracj aplikacji, jakie s moliwoci jej uruchomienia, a silnik JPF poczy wszystko w cao. Praktycznych przykadw nie trzeba szuka daleko. Gwna klasa naszej przykadowej aplikacji matematycznej operuje na konsoli tekstowej. Gdyby bya napisana w postaci wtyczki, monaby j byo atwo podmieni i zastpi rodowiskiem graficznym. rodowisko Eclipse jest jeszcze lepszym przykadem. Mona przecie je tak skonfigurowa, by po uruchomieniu byo albo edytorem i kompilatorem jzyka Java, albo C++, albo jeli trzeba jednym i drugim. Przykady mona tu mnoy. Wtyczka aplikacji rni si od standardowej wtyczki. Po pierwsze, musimy rozszerzy klas ApplicationPlugin oraz dostar06/2009

Listing 3. Program gwny pobierajcy na wejciu dwie liczby i uywajcy ich na potrzeby wtyczki dodawania
package org.sdjournal.jpf.math; import java.io.File; import org.java.plugin.*; public class SimpleCalc {

protected final double numA; protected final double numB; public static void main(String[] args) { try { if( args.length != 2 ) { System.exit(0);

System.out.println( "Wprowadz dwie liczby jako parametr wywolania programu" );

new SimpleCalc(Double.parseDouble(args[0]), Double.parseDouble(args[1])).execut ePlugins();

} catch( Exception ex ) { } ex.printStackTrace();

public SimpleCalc(double numA, double numB) { this.numA = numA; this.numB = numB;

private void executePlugins() throws Exception {

PluginManager pm = ObjectFactory.newInstance().createManager(); .jpf.mathop.add") );

PluginLocation pl = StandardPluginLocation.create( new File("plugins/org.sdjournal pm.publishPlugins( new PluginLocation[]{pl} );

MathOperation op = (MathOperation)pm.getPlugin("org.sdjournal.jpf.mathop.add"); } } System.out.println( op.getOperationName() + ": " + op.calculate(numA, numB) );

14

Java Plugin Framework wiat z klockw

czy implementacj interfejsu Application. Klasa ApplicationPlugin rozszerza standardow klas Plugin, dodajc metod initApplication, ktra przyjmuje jako parametr obiekt klasy ExtendedProperties oraz tablic stringw. Ta ostatnia, jak mona si domyli, bdzie odpowiednikiem parametrw wejciowych funkcji main. Metoda initApplication jest odpowiedzialna za uruchomienie aplikacji i powinna w rezultacie zwrci obiekt j reprezentujcy. Obiekt ten musi implementowa interfejs Application. Przykad prostej wtyczki aplikacji zosta zamieszczony na Listingu 5 (modyfikacje w metodzie executePlugins dotycz pniejszego przykadu). By uruchomi tak napisan aplikacj, musimy jeszcze poinformowa silnik JPF, ktr wtyczk aplikacji zamierzamy uruchomi (moemy mie ich przecie wicej). Suy do tego specjalny plik konfiguracyjny boot.properties, ktry powinien znajdowa si w katalogu gwnym aplikacji. W wersji minimalnej musi on zawiera przynajmniej nazw wtyczki aplikacji, ktr zamierzamy uruchomi. W naszym przypadku bdzie to wygldao nastpujco:
org.java.plugin.boot.applicationPlugin = th.app

Listing 4. Manifest wtyczki dodawania


<?xml version="1.0" ?> <!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 1.0" "http:// <plugin id="org.sdjournal.jpf.mathop.add" version="0.1" class="org.sdjournal.jpf.math. <runtime> addition.AdditionPlugin"> jpf.sourceforge.net/plugin_1_0.dtd">

</plugin>

</runtime>

<library id="addition" path="classes/" type="code"/>

Listing 5. Zmodykowana wersja programu z Listingu 3, uruchamiana jako wtyczka aplikacji. Program aduje wtyczk dodawania, uwzgldniajc zaoenie, i pasuje ona do gniazdka mathOp
package org.sdjournal.jpf.math; import java.io.File; import org.java.plugin.*; public class SimpleCalc extends ApplicationPlugin implements Application { protected double numA; protected double numB; private void executePlugins() throws Exception { PluginManager pm = this.getManager(); ExtensionPoint clockEP = this.getManager().getRegistry().getExtensionPoint( Extension ext = clockEP.getConnectedExtension( "org.sdjournal.jpf.mathop.add@addi PluginDescriptor pd = ext.getDeclaringPluginDescriptor(); ClassLoader classLoader = pm.getPluginClassLoader( ext.getDeclaringPluginDescriptor() ); Class mathOpClass = classLoader.loadClass( ext.getParameter("class").valueAsString() ); MathOperation op = (MathOperation)mathOpClass.newInstance(); System.out.println( op.getOperationName() + ": " + op.calculate(numA, numB) ); pm.activatePlugin( pd.getId() ); tion" ); getDescriptor().getId(), "mathOp" );

org.sdjournal.jpf.ma

Naley zwrci uwag, e posugujemy si tutaj nazw (identyfikatorem) wtyczki, a nie nazw klasy. W kocu nasza aplikacja jest od tej pory pluginem. W takiej sytuacji musimy doda do gwnego katalogu wtyczki plik plugin.xml, zawierajcy definicj aplikacji jako wtyczki (jest on w nieco rozbudowanej wersji przedstawiony na Listingu 6). Finalnie moemy wreszcie uruchomi aplikacj, a waciwie plugin aplikacji. Tylko jak? Fizycznie gdzie powinna przecie by funkcja main za to odpowiedzialna. I rzeczywicie jest w klasie org.java.plugin.boot.Boot, dostarczanej w osobnym pliku JAR o nazwie jpf-boot.jar. Uruchomienie programu bazujcego na wtyczce aplikacji zawsze wic bdzie wygldao w podobny sposb:
java -jar jpf-boot.jar

@Override

protected Application initApplication(ExtendedProperties properties, String[] args) try { throws Exception {

if( args.length != 2 ) { System.exit(0);

System.out.println( "Wprowadz dwie liczby jako parametr wywolania programu" );

this.numA = Double.parseDouble(args[0]); this.numB = Double.parseDouble(args[1]); this.executePlugins(); ex.printStackTrace();

} catch( Exception ex ) { } }

return this;

lub ewentualnie tak:


java -cp jpf-boot.jar org.java.plugin.boot .Boot

@Override }

protected void doStart() throws Exception { @Override

Wtyczki i gniazdka
W pierwszym przykadzie mielimy do czynienia z sytuacj niezwykle prost aplikacja oczekiwaa wsppracy wycznie z jednym rodzajem wtyczek. Szybko jednak moemy wymyli program, ktry bdzie operowa na wielu typach wtyczek jedne mowww.sdjournal.org

} } }

protected void doStop() throws Exception { public void startApplication() throws Exception {

15

Biblioteka miesica
g przykadowo dodawa now funkcjonalno, inne obsugiwa nowe formaty danych wejciowych (typy plikw), kolejne produkowa dodatkowe raporty. Nic nie stoi te na przeszkodzie, by wtyczka do programu sama bya zbudowana z zestawu wtyczek. Kady z typw wtyczek bdzie zapewne uywa wasnego interfejsu i bdzie adowany na rnych etapach dziaania programu. W takiej sytuacji powinnimy zatem okreli gniazdka (ang. extension points), do ktrych bdziemy podpina poszczeglne wtyczki. Kade gniazdko bdzie posiadao swj identyfikator, a kada wtyczka bdzie pasowaa tylko do wybranego rodzaju gniazdka. Finalnie aplikacja bdzie pozwalaa na operowanie w jednym momencie tylko wybranym typom wtyczek dla konkretnego gniazdka. W poprzednim rozdziale wprowadzilimy definicj wtyczki aplikacji. W naszym przykadzie aplikacja sama w sobie jest zatem gniazdem dla wtyczek obliczeniowych. W obecnej formie programu, gdybymy chcieli pobra w ptli wszystkie wtyczki z katalogu plugins i uy ich do przeprowadzenia oblicze otrzymalibymy bd pobralibymy bowiem rwnie wtyczk aplikacji, ktra przecie nie implementuje interfejsu MathOperation i suy zupenie innym celom. Mamy zatem do czynienia z dwoma typami wtyczek i powinnimy dokona rozrnienia w metodzie executePlugins aplikacji. Modyfikacj programu zaczniemy od definicji gniazdka dla wtyczek obliczeniowych. Suy do tego sekcja extension-point w pliku konfiguracyjnym plugin.xml. Naturalnie chodzi tutaj o plik dla pluginu aplikacji, bowiem to ona jest gniazdem dla pozostaych wtyczek. Na Listingu 6 zosta przedstawiony przykad takiej konfiguracji. Gniazdko posiada swj identyfikator oraz zbir definicji parametrw. Identyfikator gniazd wraz z identyfikatorem wtyczki powinny tworzy unikalny cig znakw w obrbie aplikacji. Parametry gniazda s mocn stron caego mechanizmu. Pozwalaj one wymusi na wtyczkach podpinanych do konkretnych gniazd istnienie pewnych waciwoci. Moe to by nazwa wtyczki, jej autor, nazwa klasy gwnej itp. W naszym konkretnym przykadzie bdzie to jedynie nazwa klasy (parametr class). Uwany Czytelnik moe zapyta, po co nam ta informacja, skoro w manifestach konkretnych wtyczek rwnie podaje si nazw klasy? C sprbujemy pozby si takiej definicji, aby nie by zmuszonymi do rozszerzania klasy Plugin. Ale po kolei. Dla JPF wtyczk nie jest klasa Java, ale plik plugin.xml. Mona zatem stworzy wtyczk pozbawion kodu, a skadajc si wycznie z listy parametrw lub zasobw (np. plikw graficznych). Rwnie operujc na kodzie, mamy pen dowolno i nie musimy ogranicza si do klas rozszerzajcych klas Plugin. Jedynym niezbdnym elementem, by plik JAR lub folder na dysku zosta potraktowany jako wtyczka, jest istnienie pliku manifestu. Na Listingu 7 znajduje si zmodyfikowana definicja wtyczki dla operacji dodawania. Jak wida, atrybut class zosta usunity ze znacznika plugin, a co za tym idzie, nasza wtyczka przestaa by cile powizana z kodem Java. Najwaniejszym elementem nowego manifestu jest sekcja extension, ktra wie wtyczk z konkretnym gniazdem. Para atrybutw plugin-id i point-id powinna jednoznacznie wskazywa na gniazdko, do ktrego nasza wtyczka zostanie podczona. Wewntrz sek06/2009

Rysunek 2. Konguracja folderw rdowych i wynikowych dla aplikacji JPF w rodowisku Eclipse Listing 6. Manifest programu z Listingu 5. Wtyczka aplikacji deniuje tutaj wtyczk mathOp z jednym parametrem class
<?xml version="1.0" ?>

<!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 1.0" "http:// <plugin id="org.sdjournal.jpf.math.app" version="0.1" class="org.sdjournal.jpf.math.S <runtime> impleCalc"> jpf.sourceforge.net/plugin_1_0.dtd">

<library id="main" path="classes/" type="code"> </library> <export prefix="*" />

</runtime>

<extension-point id="mathOp"> </extension-point> <parameter-def id="class"/>

</plugin>

Listing 7. Zmodykowany manifest wtyczki dodawania (patrz Listing 4). Sekcja extension deniuje poczenie z gniazdem mathOp
<?xml version="1.0" ?> <!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 1.0" "http:// <plugin id="org.sdjournal.jpf.mathop.add" version="0.1" class="org.sdjournal.jpf.math. <requires> addition.AdditionPlugin"> jpf.sourceforge.net/plugin_1_0.dtd">

</requires> <runtime>

<import plugin-id="org.sdjournal.jpf.math.app" />

</runtime>

<library id="addition" path="classes/" type="code"/>

<extension plugin-id="org.sdjournal.jpf.math.app" point-id="mathOp" id="addition"> </extension> <parameter id="class" value="org.sdjournal.jpf.math.addition.AdditionPlugin" />

</plugin>

16

Java Plugin Framework wiat z klockw

cji extension znajdziemy wartoci atrybutw zadeklarowanych w definicji gniazda. To wanie tutaj przenielimy atrybut class wtyczki, czynic z tej wartoci jedynie parametr konfiguracyjny. W tej sytuacji moemy usun z klasy wtyczki (AdditionPlugin) rozszerzenie klasy Plugin i powizane z ni metody (doStart i doStop). Ostatnim krokiem jest modyfikacja kodu Java w metodzie executePlugins (patrz Listing 5). Dla uproszczenia znw zajmiemy si tu adowaniem konkretnej wtyczki o zdefiniowanej nazwie, pozostawiajc Czytelnikom kwesti implementacji ptli adujcej wszystkie wtyczki dla wybranego gniazda (podpowiedzi mona znale w rdach aplikacji demonstracyjnej JPF). W pierwszym kroku, podobnie jak w poprzednim przykadzie, pobierzemy instancj klasy PluginManager. Poniewa tym razem gwna klasa rozszerza klas Plugin (poprzez klas ApplicationPlugin), moemy uy tu metody getManager zamiast, jak poprzednio, korzysta z fabryki ObjectFactory. Instancji klasy PluginManager uyjemy do pobrania obiektu definiujcego gniazdko:
ExtensionPoint ep = pm.getRegistry().getExt getDescriptor().getId(), "mathOp" ); ensionPoint(

moemy zatem zaadowa jej za pomoc uywanej poprzednio metody getPlugin(). Musimy w tej sytuacji dokona caej operacji sami, majc z drugiej strony pen kontrol nad miejscem, w ktrym aplikacja aduje klasy wtyczek. JPF dostarcza wasn wersj klasy ClassLoader, dedykowan na potrzeby wtyczek. Mona j pobra z uyciem klasy managera:
ClassLoader classLoader = pm.getPluginClass Loader(pd);

Ostatnim krokiem bdzie utworzenie instancji klasy wtyczki:


MathOperation plugin = (MathOperation)c.new Instance();

Finalnie adujemy klas wtyczki, korzystajc z parametru class zdefiniowanego w manifecie:


Class c = classLoader.loadClass g());

Reszta programu pozostaje niezmieniona w porwnaniu z poprzedni wersj. Naley zwrci uwag, e w przedstawionym tu rozwizaniu nie wskazywalimy na lokalizacj katalogu z wtyczkami. W takiej sytuacji silnik JPF przyjmie warto domyln, ktr jest katalog plugins, znajdujcy si w gwnym katalogu aplikacji.

Konfiguracja rodowiska Eclipse na potrzeby JPF


Praca z JPF moe wydawa si pocztkowo nieco zawia, operujemy tu bowiem na duym zbiorze maych podprojektw Java, kt-

(ext.getParameter("class").valueAsStrin

Listing 8. Przykad zoonej konguracji wtyczki na bazie (zmodykowanego) pliku manifestu z aplikacji demonstracyjnej JPF. Wtyczka deniuje gniazdo Tool oraz jednoczenie deklaruje zgodno z gniazdem Info wtyczki org.jpf.demo.toolbox.core
<?xml version="1.0" ?> <!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 1.0" "http:// <plugin id="org.jpf.demo.toolbox.codecolorer" version="0.0.5"> <requires> <import plugin-id="org.jpf.demo.toolbox.core" /> jpf.sourceforge.net/plugin_1_0.dtd">

</requires> <runtime>

W tym momencie moemy pobra konkretne rozszerzenie (a wic porednio i wtyczk), pasujce do danego gniazda:
Extension ext = clockEP.getConnectedExtension ( "org.sdjournal.jpf.mathop.add@additio n" );

<library id="codecolorer" path="classes/" type="code"> <doc caption="API documentation"> </doc> <doc-ref path="api/index.html" caption="javadoc" />

</library>

<library id="java2html" path="lib/java2html.jar" type="code"> <doc caption="Java2html Library by Markus Gebhard"> </doc> <doc-ref path="http://www.java2html.de" caption="Java2Html Homepage" />

Naley zwrci uwag, e identyfikator rozszerzenia jest kombinacj identyfikatorw wtyczki i jej sekcji extension, rozdzielon za pomoc znaku @. W kolejnym kroku otrzymujemy obiekt deskryptora wtyczki. W odrnieniu od poprzedniego przykadu, nie jest to obiekt typu Plugin, ktry reprezentuje klas wtyczki, tylko PluginDescriptor, zawierajcy jedynie zbir metadanych.
PluginDescriptor pd = ext.getDeclaringPlugi nDescriptor();

</library> </runtime> <doc>

<library type="resources" path="icons/" id="icons"/>

<extension plugin-id="org.jpf.demo.toolbox.core" point-id="Info" id="PluginInfo"> <doc-text><![CDATA[

</doc>

]]></doc-text>

Przykad uycia dokumentacji dla sekcji extension.

<parameter id="name" value="Test" /> <parameter id="author"> </parameter> </extension> <value>John Smith</value>

W tym momencie mamy ju wszystkie niezbdne obiekty, by mc aktywowa wtyczk w aplikacji:


pm.activatePlugin( pd.getId() );

<parameter id="plugin_home" value="www.test.org" />

<extension-point id="Tool" multiplicity="any"> <parameter-def id="class" /> <parameter-def id="name" type="String"/>

Aktywna wtyczka jednak nie oznacza, e zaadowalimy jej klas. W kocu przenielimy jej nazw do dodatkowego atrybutu, a ponadto wtyczka nie rozszerza ju klasy Plugin, nie
www.sdjournal.org

<parameter-def id="description" multiplicity="none-or-one" /> </extension-point> <parameter-def id="icon" multiplicity="none-or-one" />

</plugin>

17

Biblioteka miesica
re finalnie czone s w jedn aplikacj. By nimi sprawnie zarzdza, moemy posugiwa si np. dedykowanym skryptem Ant. Moemy jednak tak skonfigurowa projekt Java w rodowisku Eclipse, by wszystko dziaao automatycznie. Przyjmijmy pocztkowe zaoenia co do struktury projektu (zgodne z zaleceniami autorw biblioteki). Nie chcemy dla kadej wtyczki tworzy oddzielnego projektu, a raczej implementowa pojedynczy projekt Java podzielony na wtyczki. Zamy przy tym, e nasza aplikacja bdzie miaa standardow struktur, sugerowan przez twrcw JPF bdzie zatem bazowaa na pluginie aplikacji, a kada wtyczka bdzie miaa swj wasny podkatalog wewntrz katalogu plugins. Z kolei katalog kadej wtyczki bdzie skada si z obowizkowego pliku manifestu (plugin.xml) oraz katalogw na rda i skompilowane klasy Java (kolejno src i classes). Dodatkowo moemy tu rozway katalog na zasoby (resources) i zewntrzne biblioteki (lib). W katalogu gwnym projektu umiecimy plik boot.properties potrzebny do uruchomienia wtyczki aplikacji, oraz podkatalog lib z niezbdnymi bibliotekami (przynajmniej jpf.jar, jpf-boot.jar i common-loggings.jar). W takim rozwizaniu mamy do czynienia z wieloma katalogami zawierajcymi rda jzyka Java. Kady z nich musi by kompilowany oddzielnie do specyficznego katalogu wynikowego. Na szczcie rodowisko Eclipse pozwala na tak konfiguracj. Dla uatwienia, w pierwszej kolejnoci zbudujmy struktur katalogw zgodnie z przedstawionym wyej modelem. Nastpnie musimy przej do okna waciwoci projektu i zdefiniowa reguy kompilacji. W zakadce Source sekcji Java Build Path klikamy na przycisk Add Folder i wskazujemy na wszystkie katalogi src wewntrz katalogu plugins. Pod list katalogw rdowych znajduje si pole wyboru Allow output folder for source folders, ktre powinnimy zaznaczy. Po tej operacji bdziemy mogli dla kadego katalogu rdowego okreli katalog docelowy musimy zatem wskaza na odpowiednie katalogi classes, osobno dla kadej wtyczki. Ostateczn wersj konfiguracji folderw zobrazowano na Rysunku 2. Kolejn kwesti jest uruchamianie aplikacji bezporednio ze rodowiska Eclipse, zwaszcza jeli korzystamy z wtyczki aplikacji. By skonfigurowa ten proces, naley z menu Run aplikacji wybra opcj Open run dialog. W oknie dialogowym wybieramy na licie po lewej stronie opcj Java Application i klikamy na przycisk New launch configuration znajdujcy si powyej listy (lub przycisk New poniej listy w starszych wersjach Eclipse). W zakadce Main wskazujemy na nasz projekt oraz klas z metod Main.
18

Dla programw JPF z wtyczk aplikacji zawsze bdzie to klasa org.java.plugin.boo t.Boot. W kolejnym kroku przeczamy si do zakadki Classpath. W sekcji User entries powinna by widoczna nazwa projektu. Oznacza to, e w momencie uruchamiania aplikacji wszystkie klasy projektu s dostpne co jest rozwizaniem niepoprawnym chcemy bowiem traktowa kad wtyczk niezalenie. Klikamy na element User entries i usuwamy go przyciskiem Delete. Nastpnie klikamy na przycisku Add Jar i wskazujemy na plik jpfboot.jar jedyn bibliotek niezbdn do uruchomienia programu. Pozostae zasoby bd adowane dynamicznie, wraz z aktywacj poszczeglnych wtyczek. Opcjonalnie mona zdefiniowa lokalizacje plikw rdowych, co jest przydatne zwaszcza pod ktem pniejszego debugowania programu. W tym celu w zakadce Sources klikamy na przycisk Add, wybieramy na licie opcj Java project i wskazujemy na nazw naszego projektu. Eclipse automatycznie rozpozna wszystkie katalogi rdowe. Po opisanych operacjach mamy gotowe rodowisko do uruchamiania aplikacji bazujcej na wtyczkach. Pozostaje ju tylko klikn na przycisk Run.

sekcji library w manifecie wtyczki, od ktrej zale inne. Sekcja library, osadzona wewntrz sekcji runtime, pozwala okreli, jakie zasoby (kod, biblioteki, pliki zewntrzne) skadaj si na wtyczk. Na Listingu 8 pokazano bardziej zoony plik manifestu, z rozbudowan sekcj library. Widzimy tam zarwno lokalizacj kodu wtyczki, jak rwnie zewntrzn bibliotek, a take zasoby (w tym wypadku katalog icons). Kady blok library wymaga okrelenia typu danych w nim zawartych (do wyboru code lub resources). Ponadto, dziki znacznikowi export, okreli mona, ktre z elementw danej biblioteki zasobw bd widziane przez powizane wtyczki. Dotyczy to sytuacji,w ktrej wtyczka deklaruje tak relacj poprzez sekcj requires. Zazwyczaj udostpnia si wtyczkom pen zawarto biblioteki:
<export prefix="*"/>

W wyjtkowych sytuacjach mona ograniczy klasy tylko do wskazanych pakietw lub katalogw (w przypadku zasobw), np.:
<export prefix="org.sdjournal.*"/>

Konfiguracja aplikacji JPF


Dotychczas raczej do pobienie pisaem o konfigurowaniu aplikacji JPF, skupiajc si wycznie na niezbdnych wartociach. Czas przyjrze si szerzej bogatym moliwociom konfiguracyjnym biblioteki. Konguracja wtyczek Jak ju wiemy, kada wtyczka reprezentowana jest poprzez plik plugin.xml. Jego gwny znacznik (plugin) zawiera dwa niezbdne atrybuty identyfikator wtyczki (id) i jego wersj (version) oraz, opcjonalnie, nazw gwnej klasy pluginu (class). Mimo e wtyczki implementowane s jako niezalene byty, czsto moe si zdarzy, e jaka wtyczka bdzie musiaa korzysta z kodu gwnego aplikacji lub gniazda. Tak sytuacj mamy w programie przykadowym. Plugin implementuje interfejs MathOperation, jednak definicja tego interfejsu znajduje si poza kodem wtyczki dodawania (jest we wtyczce aplikacji). Do rozwizywania takich sytuacji suy kombinacja sekcji requires i export w pliku manifestu. Sekcja requires znajdzie si po stronie pliku konfiguracyjnego wtyczki zalenej i definiuje, w postaci dowolnej iloci deklaracji typu <import plugin-id=nazwa_wtyczki/>, nazwy wtyczek zawierajcych elementy niezbdne do dziaania wtyczki. Zaleno midzy wtyczkami moe dotyczy kodu, ale rwnie i zasobw. Udostpnianie tych elementw definiuje si za pomoc znacznika export wewntrz

Pojedynczy blok library moe zawiera wiele elementw export, moe te nie zawiera go w ogle, co oznacza brak widocznoci dla jakichkolwiek zasobw z poziomu innej wtyczki. Kada biblioteka JPF moe mie swoj wasn dokumentacj osadzon pord znacznikw doc. Mona te zdefiniowa odnonik do dokumentacji zewntrznej, opisujcy dan bibliotek (znacznik doc-ref). Przykady dokumentacji przedstawiono na Listingu 8. Dokumentacja zawarta w manifestach wtyczek moe zosta wyeksportowana do stron HTML z uyciem dedykowanej instrukcji Ant. Format tak wygenerowanej dokumentacji nie jest niestety zbyt estetyczny, pozwala jednak przeglda struktur aplikacji i skadajcych si na ni wtyczek. Pewnym ograniczeniem jest te to, i standardowo nie mona wygenerowa dokumentacji bez uycia narzdzia Ant (mona ewentualnie napisa wasny program korzystajcy z klasy org.java.plugin.tools.docgen.Do cGenerator). JPF pozwala precyzyjnie skonfigurowa definicj gniazda i jego parametry. Sekcja extension-point, oprcz opisanych w przykadzie (Listing 6) podstawowych atrybutw identyfikacyjnych, dostarcza opcjonalny atrybut multiplicity, pozwalajcy kontrolowa ilo podczanych wtyczek do danego gniazda. Domyln wartoci jest tutaj any, co daje nam moliwo podczenia dowolnej iloci wtyczek (rwnie adnej). Pozostae moliwoci:
06/2009

Java Plugin Framework wiat z klockw

tylko jedna wtyczka moe by podczona do gniazda; one-per-plugin tylko jedna wtyczka w obrbie tego samego pluginu moe by podczona do gniazda; none adna wtyczka nie moe by bezporednio podczona do tego gniazda; jest to definicja abstrakcyjnego gniazda, ktre moe by porednio uyte przy wielopoziomowym dziedziczeniu definicji gniazd.
one

Listing 9. Przykad skryptu Ant korzystajcego z narzdzi JPF. Skrypt demonstruje te, w jaki sposb mona skompilowa program Java podzielony na niezalene wtyczki
<?xml version="1.0" encoding="UTF-8"?> <project name="Simple Calc" basedir=".">

<property name="build.home" value="${basedir}/build" />

<property name="plugins.dir" value="${basedir}/plugins" /> <typedef resource="org/java/plugin/tools/ant/jpf-tasks.properties"> </typedef> <classpath><fileset dir="lib" includes="*.jar"/></classpath>

Atrybut multiplicity wystpuje rwnie w znacznikach parameter-def, okrelajc liczebno wystpowania danego parametru w sekcji extension wtyczki. W tej sytuacji wartoci domyln jest one, zatem dokadnie jeden atrybut jest oczekiwany. Inne moliwe wartoci: dowolna ilo parametrw (rwnie zero); none-or-one jeden lub zero; one-or-more minimum jeden parametr danego typu jest wymagany.
any

<target name="init">

<mkdir dir="${build.home}"/>

<mkdir dir="${build.home}/plugins"/> </target> <mkdir dir="${build.home}/docs"/>

<target name="check" depends="init"> includes="*/plugin.xml" verbose="false" </target>

<jpf-check basedir="${basedir}/plugins"

usepathresolver="true" />

Poza wielokrotnoci mona rwnie zdefiniowa typ wartoci parametru. Suy do tego atrybut type, przyjmujcy nastpujce wartoci: dowolny acuch znakw (warto domylna); boolean przyjmuje wartoci true lub false; number dowolna liczba (cakowita lub rzeczywista); date data w formacie yyyy-MM-dd; time czas w formacie HH:mm:ss; date-time data i czas w formacie yyyyMM-dd HH:mm:ss; any warto parametru nie bdzie walidowana przez bibliotek, pozostawiajc t czynno programicie; pozwala to na obsug nietypowych wartoci; plugin-id identyfikator wtyczki; extension-point-id identyfikator gniazda; extension-id identyfikator rozszerzenia; fixed warto parametru musi by jedn z wartoci okrelon w dodatkowym atrybucie custom-data znaczka parameterdef (wartoci oddzielane s znakiem |); resource URL wskazujcy na dowolny zasb.
string

<target name="doc" depends="init"> includes="*/plugin.xml"

<jpf-doc basedir="${basedir}/plugins" destdir="${build.home}/docs" />

</target>

<target name="zip" depends="build"> includes="*/plugin.xml"

<jpf-zip basedir="${basedir}/plugins" destdir="${build.home}/plugins" />

</target>

<target name="pack" depends="build"> includes="*/plugin.xml"

<jpf-pack basedir="${basedir}/plugins" destfile="${build.home}/all-plugins.jpa" />

</target>

<target name="build" depends="init">

<antcall target="-build-plugin" inheritall="true"> </antcall>

<param name="plugin" value="${plugins.dir}/org.sdjournal.jpf.math.app"/>

<antcall target="-build-plugin"> </antcall>

<param name="plugin" value="${plugins.dir}/org.sdjournal.jpf.mathop.add"/>

</target>

<target name="-build-plugin" if="plugin">

<echo>Compiling plugin: ${plugin}</echo> <classpath>

Brak wartoci parametru utosamiany jest z wartoci NULL, niezalenie od typu. Ostatnim nieopisanym wczeniej atrybutem znacznika parameter-def jest defaultvalue, okrelajcy warto domyln parametru. Przykad uycia zoonych definicji parametrw pokazano na Listingu 8. W tym miejscu warto jeszcze wspomnie, e wartoci parametrw mog by przekazywane poprzez
www.sdjournal.org

<javac srcdir="${plugin}/src" destdir="${plugin}/classes"> <fileset dir="${basedir}/lib" includes="*.jar" /> <fileset dir="${plugin}/lib" includes="*.jar" />

</project>

</target>

</javac>

</classpath>

19

Biblioteka miesica
atrybut value znacznika parameter lub wewntrz znacznika value. To ostatnie rozwizanie moe mie znaczenie w przypadku bardzo dugich wartoci. Globalna konguracja aplikacji Opisany wczeniej plik boot.properties, umieszczony w gwnym katalogu aplikacji, zosta uyty do okrelenia nazwy wtyczki aplikacji. Oprcz tego parametru istnieje wiele innych, ktre maj wpyw na globalne dziaanie aplikacji lub na metod jej uruchamiania. Poniej zostan opisane najbardziej uyteczne z nich. Pen list parametrw znale mona w dokumentacji dostarczanej wraz z bibliotek. Najbardziej czytelnie wypunktowano je w opisie klasy org.java.plu gin.boot.Boot. Jednym z prostych i uytecznych ustawie jest moliwo zdefiniowania grafiki wywietlanej podczas startu i adowania aplikacji (tzw. splash screen). Suy do tego parametr org.java.plugin.boot.splashImage, przyjmujcy jako warto nazw pliku graficznego i ewentualnie jego ciek (wzgldem lokalizacji pliku boot.properties). Dodatkowe parametry pozwalaj na pen konfiguracj obsugi grafiki. Przykadowo parametr org.java.plugi n.boot.splashLeaveVisible, przyjmujcy wartoci logiczne, pozwala wyczy standardowe zachowanie biblioteki, w ktrym grafika pocztkowa zostaje usunita z ekranu po zaadowaniu wszystkich moduw aplikacji. Moe by to przydatne w przypadku mniejszych programw, w ktrych ekran startowy moe si wywietla zbyt krtko, powodujc co najwyej nieestetyczne mignicie ekranu. Jednym z istotniejszych ustawie startowych jest parametr jpf.boot.mode, definiujcy tryb dziaania aplikacji. Parametr ten mona zamieci w pliku boot.properties lub przekaza w postaci zmiennej systemowej w trakcie uruchamiania aplikacji, np. tak:
java -Djpf.boot.mode=shell -jar lib/jpfboot.jar

restart restartuje aplikacj uruchomio-

n w tle; jeli aplikacja nie jest aktualnie uruchomiona, operacja bdzie identyczna z komend start.

Naley pamita, e w przypadku aplikacji uruchamianej w tle wtyczka aplikacji powinna implementowa interfejs ServiceApplication. Interfejs ten dostarcza metod stopApplication pozwalajc na zewntrzne zatrzymanie programu. Moliwe jest kontrolowanie serwisw poprzez sie. W tym celu naley wskaza na adres IP i port komputera docelowego, uywajc do tego parametrw org.java.plugin.boot. controlHost i org.java.plugin.boot.cont rolPort. Aby unikn sytuacji blokowania zasobw aplikacji, silnik JPF w trakcie uruchamiania programu tworzy katalog tymczasowy (tzw. shadow folder). Jeli nasza wtyczka jest dostarczana w postaci archiwum (ZIP lub JAR), zostanie ona tutaj zdekompresowana (lub przynajmniej cz jej plikw). Standardowo katalog ten nosi nazw .jpf-shadow i umieszczany jest w systemowym katalogu tymczasowym. Z uyciem parametrw konfiguracyjnych mona zmieni lokalizacj tego folderu oraz okreli, ktre z plikw bd tam kopiowane. Na przykadzie poniej zdefiniowano na potrzeby opisanego tu mechanizmu katalog tmp wewntrz gwnego foldera aplikacji:
org.java.plugin.standard.ShadingPathResolve = ${applicationRoot}/tmp/ r.shadowFolder

W razie koniecznoci odwoania si do parametrw konfiguracyjnych aplikacji z poziomu kodu, mona posuy si atrybutem config w metodzie initAplication inicjalizujcej wtyczk aplikacji. Jest to obiekt klasy ExtendedProperties, ktra rozszerza standardow klas Java Properties, dodajc moliwo uywania zmiennych wewntrz plikw konfiguracyjnych (.properties). Jest to szczeglnie przydatne przy okrelaniu lokalizacji plikw. W takiej sytuacji moemy przykadowo odwoa si do katalogu gwnego aplikacji:
org.java.plugin.boot.splashImage =

${applicationRoot}/img/splash.png

Narzdzia JPF i wsppraca z Ant


Wraz z bibliotek JPF otrzymujemy zestaw dodatkowych narzdzi, pomocnych programicie w trakcie pracy nad projektem zbudowanym z wtyczek. Aby nie obcia samej biblioteki, narzdzia zostay przeniesione do oddzielnego pliku jpf-tools.jar. Znajdziemy tam przykadowo narzdzie do generowania dokumentacji, archiwizacji wtyczek itp. Wszystkie te podprogramy uruchamiane s z uyciem dedykowanych zada dla rodowiska Ant. Poniej pokrtce przedstawi najbardziej uyteczne narzdzia JPF (ich uycie zostao zobrazowane na Listingu 9). W pierwszej kolejnoci musimy jednak uzupeni rodowisko Ant o stosowne rozszerzenia. W tym celu naley doda do pliku build.xml ponisz deklaracj:
<typedef resource="org/java/plugin/

Wiemy ju z poprzednich przykadw, e podczas startu aplikacji silnik JPF przeszukuje katalog plugins w celu zaadowania wtyczek. Z uyciem dedykowanego parametru mona okreli inne katalogi przeszukiwania:
org.java.plugin.boot.pluginsRepositories= ./plugins, ./wtyczki, ./features

tools/ant/jpf-tasks.properties" />

Program JPF moe by uruchamiany jako standardowa aplikacja lub w tle jako serwis. W drugim przypadku niezbdna bdzie moliwo sterowania aplikacj (uruchomienie, zatrzymanie etc.). Parametr jpf.boot.mode pozwala sterowa trybem dziaania aplikacji. Mamy tu do dyspozycji nastpujce wartoci: standardowa aplikacja z interfejsem uytkownika; warto domylna; start uruchamia aplikacj w tle; stop zatrzymuje aplikacj uruchomion w tle;
shell

Jeli ten mechanizm jest wci niewystarczajcy, mona uy dedykowanego pliku XML, definiujcego list katalogw oraz nazw plikw manifestu (nie jestemy zatem ograniczeni do plikw plugin.xml). Parametr org.j wskazuje na nazw takiego pliku XML. Poniej przedstawiono na przykadzie jego struktur:
tors <plugins>

Archiwum biblioteki (plik jpf-tools.jar) musi oczywicie by widoczne dla narzdzia Ant. Mona w tym celu skorzysta ze znacznika classpathu w definicji typedef. Zacznijmy od wspominanego ju kilkakrotnie narzdzia do generowania dokumentacji wtyczek. Odpowiedzialny za to jest znacznik Ant o nazwie jpf-doc, przyjmujcy kilka bazowych parametrw spotykanych w wikszoci narzdzi JPF: bazowy katalog dla wtyczek (zazwyczaj plugins); destdir katalog docelowy (tu miejsce generowania dokumentacji); verbose przyjmuje wartoci logiczne; jeli true, wygenerowana zostanie bardziej szczegowa dokumentacja; includes oddzielona przecinkami lista nazw plikw manifestu, ktre maj by uwzgldnione przez narzdzie (standardowo plugin.xml).
basedir

ava.plugin.boot.pluginsLocationsDescrip

<plugin manifest="./plugin1.xml" <plugin manifest="./plugin2.xml"

context="./plugin1/"/> context="./plugin2/"/>

</plugins>

20

06/2009

Java Plugin Framework wiat z klockw

Poza przedstawionymi powyej typowymi dla wikszoci narzdzi ustawieniami, istnieje kilka atrybutw dedykowanych wycznie narzdziu jpf-doc. Przykadowo mamy tu moliwo okrelenia kodowania dokumentacji wynikowej (atrybut docencoding) czy stylw CSS (stylesheetfile) itp. Narzdziem niezwykle przydatnym przy tworzeniu finalnej wersji wtyczek jest moliwo archiwizacji ich do plikw ZIP. Kada wtyczka zostanie zamknita w osobnym archiwum, nazwanym zgodnie z poniszym schematem:
<id-wtyczki>-<wersja-wtyczki>.zip

Narzdzie archiwizujce nosi nazw jpf-zip. Jego zastosowanie zostao zobrazowane na Listingu 9. Oprcz archiwizacji pojedynczych wtyczek, moemy cay projekt zamkn w jednym archiwum JPA (Java Plugins Archive). Jest to plik ZIP rozbudowany o dodatkowe mechanizmy pozwalajce na szybkie pozyskanie z archiwum informacji na temat metadanych poszczeglnych wtyczek, bez koniecznoci rozpakowywania pliku. Suy do tego narzdzie jpf-pack. Ekstrakcj tak R E

stworzonego archiwum do wskazanego katalogu moemy przeprowadzi z uyciem narzdzia jpf-unpack. W trakcie pracy nad projektem JPF warto korzysta z narzdzia jpf-check, ktre sprawdza integralno aplikacji. Narzdzie to czyta pliki konfiguracyjne wtyczek i generuje raport, informujc o wszelkich niezgodnociach, jak choby niepoprawnie zbudowanych rozszerzeniach w stosunku do definicji gniazd. Pen list narzdzi JPF i ich parametrw konfiguracyjnych odnajdziemy w rozdziale JPF Tools Reference standardowej dokumentacji biblioteki. Warto poeksperymentowa te z rozbudowanym plikiem build.xml dostarczanym wraz z aplikacj demonstracyjn. Listing 9, poza przykadami uycia narzdzi JSP, pokazuje rwnie jedn z wielu moliwych metod kompilacji projektu podzielonego na wtyczki, z ktrych kada ma swj wasny katalog rdowy. Utworzono tutaj oglny mechanizm kompilacji dowolnej wtyczki (target -build-plugin) oraz korzystajcy z niego mo-

du uruchamiajcy kompilacje poszczeglnych wtyczek (target build).

Podsumowanie
JPF jest narzdziem przydatnym zarwno dla programistw tworzcych aplikacje z moliwoci przyszego uzupeniania o dodatkowe funkcje, jak i ciekaw propozycj podziau programu na niezalene i rozszerzalne moduy. Biblioteka jest lekka i atwa w opanowaniu zwaszcza w porwnaniu z konkurencyjnym, znacznie wikszym, rozwizaniem, jakim moe by bazujcy na OSGi Eclipse Equinox. Niewtpliw zalet uywania JPF jest moliwo oszczdnoci pamici poprzez adowanie moduw programu dopiero w momencie ich dania. Finalnie za JPF jest rozwizaniem stabilnym i wyprbowanym w komercyjnych projektach, co powoduje, e mona go bezpiecznie uywa. Zachcam do eksperymentowania, nauki i... modularyzacji wasnych programw.

DAVID DE ROSIER
Programista-podrnik. Pasjonat WEB 2.0, estetycznego kodowania i algorytmw szachowych. Zawodowo szkoleniowiec i specjalista od aplikacji JEE i MDA w sektorze bankowym. Kontakt z autorem: ddrosier@gmail.com

www.sdjournal.org

21

Klub techniczny Adobe

Wprowadzenie do Adobe AIR


Tworzenie aplikacji desktopowych z wykorzystaniem Adobe Flex
Flex jest obecnie najciekawszym rodowiskiem do tworzenia aplikacji typu RIA. Jego ograniczeniem jest jednak to, e aplikacja dziaa w przegldarce. Pociga to za sob ograniczony dostp do zasobw znajdujcych si na komputerze uytkownika oraz rygorystyczne zasady bezpieczestwa. Ograniczenia te doskonale uzupenia technologia Adobe Integrated Runtime (AIR).
Dowiesz si:
Jak tworzy aplikacje w technologii AIR z wykorzystaniem FlexBuilder'a; Jak podpisywa i publikowa aplikacje w technologii AIR; Jak tworzy natywne okna w aplikacji.

Powiniene wiedzie:
Podstawy technologii Flex.

Poziom trudnoci

AIR jest moliwe z wykorzystaniem jednego z darmowych edytorw. Na stronach Adobe mona rwnie, podobnie jak w przypadku Flex'a, pobra darmowe SDK dla technologii AIR.

lex dziki technologii AIR moe wyj poza ramy przegldarki i jako aplikacja desktopowa znacznie rozszerzy swoj funkcjonalno. AIR w aktualnej stabilnej wersji 1.5 jest rodowiskiem dostpnym na platformach: Mac OS X, Linux oraz Windows. Dziki temu aplikacje stworzone w tej technologii mona dostarczy kademu uytkownikowi, bez wzgldu na preferowany przez niego system operacyjny. AIR daje moliwo dostpu do danych lokalnych, umoliwia korzystanie z baz danych SQLite i wiele innych. Warstw prezentacji jest tu Flash Player 10, mona zatem take korzysta z wprowadzanego w tej wersji renderingu 3D. Daje to take pewno, e aplikacja zawsze wyglda tak samo. Aby moliwe byo zainstalowanie i uruchomienie aplikacji w technologii AIR, musimy uprzednio na komputerze zainstalowa runtime AIR dostpny na stronie http: //www.adobe.com/products/air. Jest on odpowiedzialny za instalowanie i uruchamianie aplikacji. W artykule tym pokazujemy, jak stworzy aplikacj w technologii AIR z wykorzystaniem Flex Buildera. Jednak tak jak i w przypadku Flex'a, tworzenie aplikacji w
22

Pierwsza aplikacja
Jako pierwszy przykad wykorzystania technologii AIR stworzymy prosty program do

cigania plikw z Internetu. W aplikacji wykorzystamy wsparcie dla operacji drag&drop w celu przekazania do naszej aplikacji adresu URI pliku do pobrania. Dziki dostpowi do dysku, pobrane zasoby bdziemy zapisywa w katalogu domowym uytkownika. Aby rozpocz tworzenie aplikacji AIR, wybieramy z menu gwnego Flex Buildera opcj File > New > Flex Project. Po podaniu nazwy nowo tworzonego projektu naley pamita o zmianie typu aplikacji na aplikacja desktopowa (opcja Application type). Po utworzeniu nowego projektu, w katalogu projektu pojawi si dwa pliki [nazwa projektu].mxml oraz [nazwa projektu]-app.xml. Pierwszy z nich jest gwnym plikiem rdowym aplikacji, podobnie jak w aplikacji tworzonej we Flex'ie. Drugi z nich nosi nazw deskrypto-

Rysunek 1. Gwne okno aplikacji

06/2009

Wprowadzenie do Adobe AIR

ra aplikacji. W pliku tym zawarte s informacje opisujce nasz aplikacj nazwa, autor, wersja itp. Plik ten opisuje take wygld gwnego okna aplikacji. W przypadku pracy z Flex Builderem plik ten jest doskonale opisany, przez co atwo zrozumie przeznaczenie poszczeglnych pl. Przejdmy jednak do pliku rdowego, gdzie mona zauway pierwsz rnic midzy aplikacj AIR a aplikacj Flex. Punktem startowym aplikacji desktopowej jest klasa WindowedApplication. Rozszerza ona klas Application, ktra jest punktem startowym dla aplikacji pisanych we Flex'ie, dodajc moliwo obsugi natywnego okna aplikacji. Natywne okno aplikacji to okno tworzone przez system operacyjny, na ktrym dziaa runtime AIR. W widoku edycji graficznej zaprojektujmy wygld naszej aplikacji. Chcemy, aby nasza aplikacja bya zawsze widoczna, ale jednoczenie nie moe przeszkadza. Zaprojektujmy mae (50x50px) okienko, w ktrym umiecimy komponent wywietlajcy grafik (Image) oraz statyczne pole tekstowe (Label). Nadajmy im odpowiednio nazwy: 'stateIcon' oraz 'labelField'. Odpowiednie komponenty wybieramy z listy komponentw i 'przecigamy' na scen. Ostatecznie okno naszej aplikacji wyglda, jak pokazane na Rysunku 1. Brakuje nam jeszcze jednego skadnika, ktrym jest okno powiadomienia wywietlane po zakoczeniu pobierania pliku. Aby go utworzy, wybieramy z menu File > New > MXML Component. Po nadaniu nazwy, musimy wybra komponent bazowy, w naszym wypadku wybieramy z listy Window. Dziki temu nasz komponent bdzie wywietla si jako natywne okno. Po utworzeniu naszego komponentu, przechodzimy do trybu edycji graficznej i tworzymy powiadomienie podobne do pokazanego na Rysunku 2. eby nie martwi si zamkniciem okna, dodamy do naszego komponentu kod, ktry spowoduje automatyczne zamknicie okna po okrelonym czasie. W tym celu wykorzystamy obiekt klasy Timer, ktry po 1.5 sekundy spowoduje zamknicie okna. Realizacja tego jest pokazana na Listingu 4, metoda inicjujca timer jest wywoywana, gdy natywne okno zostanie utworzone. Wywoanie metody dodajemy do gwnego tagu naszego komponentu windowComplete="startHi deTimer()".

nia APPLICATION_COMPLETE. Zdarzenie to pojawia si, kiedy aplikacja zostaa poprawnie utworzona i zainicjowana. W obsudze tego zdarzenia zaimplementujemy take poprawne pozycjonowanie okna naszej aplikacji. Chcemy, aby nasza aplikacja umieszcza-

a swoje okno w prawym dolnym rogu ekranu. W tym celu musimy pobra rozdzielczo ekranu. Aby tego dokona, wykorzystamy klas Screen z pakietu flash.display. Dziki niej moemy pobra informacje o rozdzielczociach dostpnych ekranw. Natywne

Listing 1. Obsuga zdarzenia APPLICATION_COMPLETE


/* definiujemy skadow klasy URLLoder */ protected var loader : URLLoader; protected function appCompleteHandler():void { /* pozycjonujemy gwne okno aplikacji, w tym przypadku w prawym dolnym rogu */ var srect:Rectangle = Screen.mainScreen.bounds; nativeWindow.x = srect.width - nativeWindow.width - 10;

nativeWindow.y = srect.height - nativeWindow.height 10; /* tworzymy instancj klasy URLLoder, zminna ta bdzie wykorzystywana do pobierania danych ze wskazanego adresu URL */ loader = new URLLoader(); /* ustawiamy format danych pobieranych jako dane binarny, nie interesuje nas co pobieramy. Pobrane dane bd dostpne w zmiennej klasy ByteArray */ loader.dataFormat = URLLoaderDataFormat.BINARY; /* ustawiamy obsug wszystkich interesujcych nasz zdarze */ loader.addEventListener(Event.OPEN, downloadOpenHandler ); loader.addEventListener(Event.COMPLETE, downloadCompleteHandler); loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler); /* ustawiamy odpowiedni ikon */ }; stateIcon.source = iconIdle;

loader.addEventListener(ProgressEvent.PROGRESS, downloadProgressHandler );

Listing 2. Obsuga drag&drop dla naszej aplikacji


protected function dragEnterHandler(event:NativeDragEvent):void { /* ustawiamy odpowiedni ikon */ stateIcon.source = iconIdle; /* sprawdzamy format 'przeciganych' danych, interesuj nas tylko linki. Jeli przecigany jest link powiadamiamy system e aplikacja 'jest zainteresowana' i pozwala 'upuci' dane u siebie */ if ( event.clipboard.hasFormat( ClipboardFormats.URL_FORMAT ) ) }; NativeDragManager.acceptDragDrop( this );

protected function dragDropHandler(event:NativeDragEvent):void { /* pobieramy 'upuszczone' dane, wiemy ze jest to link zatem dane s dostpne jako zmienna typu String */ var url:String = event.clipboard.getData( ClipboardFormats.URL_FORMAT ) as String; /* budujemy danie dla podanego linku */ var request:URLRequest = new URLRequest( url ); request.useCache = false; loader.load( request );

Szczegy implementacji
Pobieranie danych w aplikacji AIR realizowane jest identycznie jak w aplikacji Flex'owej poprzez wykorzystanie klasy URLLoader. Zakadajc, e nie bdziemy jednoczenie pobiera wicej ni jeden plik, zdefiniujemy sobie zmienn (w rzeczywistoci jest to skadowa gwnej klasy aplikacji) klasy URLLoader. Zmienn t zainicjujemy w obsudze zdarzewww.sdjournal.org

/* nie pozwalamy na cachowanie pobieranych danych */ /* rozpoczynamy pobieranie danych */ };

23

Klub techniczny Adobe


okno aplikacji jest dostpne przez waciwo nativeWindow klasy WindowedApplication. Ustawiajc skadowe x i y, rozmieszczamy okno naszej aplikacji w wybranym miejscu na ekranie. Metoda obsugujca pozycjonowanie okna oraz inicjowanie zmiennej URLLoader wraz ze zdefiniowaniem obsugi zdarze prezentuje Listing 1. W przedstawionym kodzie dodatkowo ustawiamy typ pobieranych danych na BINARY. Dziki temu dane bd po pobraniu dostpne w postaci obiektu klasy ByteArray. Aby nasza metoda zostaa wykonana, podpinamy j pod odpowiednie zdarzenie, ustawiajc warto parametru applicationCom plete=appCompleteHandler(event) w tagu gwnym naszej aplikacji. Taki zapis spowoduje na etapie kompilacji wygenerowanie standardowej metody obsugi zdarzenia, w ktrej ciele umieszczone zostanie wywoanie naszej metody. Zmienna event jest generowana na etapie kompilacji i przechowuje instancj klasy zdarzenia. Jak ju mwilimy, chcemy, aby nasza aplikacja korzystaa z techniki drag&drop. Jest ona zawsze aktywna dla aplikacji tworzonych w AIR. Aby obsuy przeciganie, naley zaimplementowa obsug dla zdarze NATIVE_DRAG_ENTER oraz NATIVE_DRAG_DROP. Pierwsze zdarzenie pojawia si, kiedy uytkownik przeciga mysz dane nad obiektem (w tym przypadku nad oknem aplikacji). Na tym etapie moemy ju sprawdzi, co uytkownik przeciga (typ danych) i zareago-

Rysunek 2. Okno powiadomienia, wywietlane po zakoczeniu pobierania danych

Listing 3. Zapis pobranych danych na dysku uytkownika


protected function downloadCompleteHandler(event:Event):void { /* wiemy, e pobierane dane s w postaci binarnej i przechowywane w zmiennej typy ByteArray */ var data:ByteArray = loader.data as ByteArray; data.position = 0;

/* Utworzymy nowy plik na dysku uytkownika, w jego katalogu domowym. Nadajemy mu unikaln nazw bazujc na czasie */ var file:File = File.userDirectory.resolvePath( "download"+getTimer()+".data" ); /* tworzymy nowy strumie plikowy, kojarzymy go z utworzonym poprzednio plikiem i otwieramy w trybie do zapisu */ var fileStream:FileStream = new FileStream(); fileStream.open( file, FileMode.WRITE );

/* strumienie plikowe implmenetuj interfejsy IDataInput i IDataOutput. Zapis i odczyt jest realizowany analogicznie jak dla klasy ByteArray */ fileStream.writeBytes( data ); fileStream.close();

/* poinformujmy uytkownika, e pobieranie danych zostao zakoczone. W tym celu wykorzystamy nasze oknieko powiadomienia */ var notification:Notification = new Notification(); wywietlone */ notification.open(); /* ustawiamy okienko powiadomienia w odpowiednim miejscu */ var srect:Rectangle = Screen.mainScreen.bounds; notification.nativeWindow.x = srect.width - notification.width - 10; notification.nativeWindow.y = srect.height - notification.height /* ostatecznie moemy pokaza okno */ notification.activate(); labelField.text = "- '' -"; }; nativeWindow.height - 10; /* po wykonaniu tej metody natywne okno komponentu jest utworzone, ale jeszcze nie

Rysunek 3. Aplikacja z oknem systemowym

stateIcon.source = iconDownload;

Rysunek 4. Aplikacja bez okna systemowego (tym razem na systemie Windows)

24

06/2009

Wprowadzenie do Adobe AIR

wa. Nasza aplikacja jest zainteresowana jedynie linkami i tylko w takim wypadku pozwoli na 'upuszczenie' danych na jej obszarze. Kiedy uytkownik upuci dane, pojawi si drugie z podanych zdarze. Kiedy nad oknem naszej aplikacji zostanie upuszczony link, zakadamy, e jest to link do zasobw, ktre uytkownik chce pobra. Kompletna obsuga tych dwch zdarze zostaa pokazana na Listingu 2. Aby podpi nasze metody do obsugi podanych zdarze, wystarczy w tagu aplikacji ustawi wartoci parametrw
nativeDragEnter=dragEnterHandler(eve nt)

oraz

ler(event).

nativeDragDrop=dragDropHand

gldaa tak samo. Aby to uzyska, moemy zrezygnowa z okien rysowanych przez system operacyjny. Dla gwnego okna aplikacji opcje ustawiamy w deskryptorze aplikacji. W pliku XML odnajdujemy wze o nazwie initialWindow. Aby okno nie byo wywietlane w sposb systemowy, ustawiamy waciwo systemChrome na warto none. Oznacza to, e nie bdzie rysowana ramka standardowego okna systemowego, a zamiast niej pojawi si obramowanie rysowane przez AIR. Dodatkowo, ustawiajc odpowiednie skadowe klasy WindowedApplication, moemy cakiem usun ramki: okno byo zawsze ponad innymi oknami alwaysInFront = true; okna nie dao si skalowa myszk showGripper="false"; okno nie miao grnej belki tytuu showTitleBar="false";
Listing 4. Peny kod dla okna powiadamiania
<?xml version="1.0" encoding="utf-8"?>

okno nie miao dolnej belki statutu showStatusBar="false" . Te same wartoci podajemy w przypadku okna powiadamiania; peny kod dla okienka powiadamiania widoczny jest na Listingu 4. Jeli uruchomimy program po wprowadzeniu tych zmian, zobaczymy aplikacj jak przedstawion na Rysunku 4. Widzimy, e okna aplikacji ju nie przypominaj standardowych okien systemowych. W ten sam sposb moemy take uzyska okna o ksztacie innym ni prostokt.

Publikowanie aplikacji
Aplikacje stworzone w technologii AIR rozpowszechniane s w postaci skompilowanej paczki (plik o rozszerzeniu *.air). Wszystkie publikowane aplikacje AIR musz by podpisane wanym certyfikatem. Podpis potwierdza bezpieczno aplikacji. Cer-

Kiedy pobieranie danych zakoczy si, obiekt pobierajcy (URLLoader) rozgosi zdarzenie COMPLETE. Poniewa ustawilimy wczeniej funkcj obsugi tego zdarzenia, wywoana zostanie nasza metoda downloadCompleteHandler (Listing 3). Zadaniem tej metody jest zapisanie pobranych danych w katalogu domowym uytkownika. Dostp do plikw lokalnych realizowany jest przez klas File. Zapis i odczyt danych z plikw na dysku realizowany jest w AIR z pomoc strumieni plikowych implementowanych przez klas FileStream. Klasa ta implementuje dwa interfejsy: IDataOutput i IDataInput, dlatego ze strumieniami plikowymi pracuje si bardzo podobnie do obiektw klasy ByteArray. W naszej aplikacji wykorzystamy dostp do dysku, aby zapisa na nim pobrane dane. Klasa File pozwala nam w atwy sposb uzyska dostp do katalogu uytkownika. Obiekt skojarzony z tym katalogiem jest dostpny jako statyczna skadowa klasy. Inne dostpne w ten sposb katalogi to: File.applicationDirectory katalog, w ktrym nasza aplikacja zostaa zainstalowana; File.applicationStorageDirectory katalog danych aplikacji; File.desktopDirectory katalog pulpitu uytkownika; File.documentsDirectory katalog dokumentw (Moje dokumenty) uytkownika; File.userDirectory katalog domowy uytkownika. Klasy File i FileStream s narzdziami niezmiernie potnymi, dajcymi moliwo nawigowania po dysku uytkownika, tworzenia i kasowania zarwno plikw, jak i katalogw, zapisywania i odczytywania danych z plikw w postaci binarnej. Klasy te s dostpne w pakiecie flash.filesystem.* . Na tym etapie, po uruchomieniu nasza aplikacja wyglda mniej wicej tak jak na Rysunku 3. Nie jest to satysfakcjonujce, poniewa taka aplikacja bdzie wyglda inaczej w zalenoci od systemu operacyjnego. My chcemy jednak, aby nasza aplikacja zawsze wywww.sdjournal.org

<mx:Window xmlns:mx="http://www.adobe.com/2006/mxml"

paddingBottom="2" paddingLeft="2" paddingRight="2" paddingTop="2" cornerRadius="0" backgroundColor="#FFFFFF" borderColor="#00A753" borderStyle="solid" horizontalScrollPolicy="off" verticalScrollPolicy="off" borderThickness="1"

<!-- opcje wywietlania okna, dziki temu wywietlana bdzie tylko zaprojektowna alwaysInFront="true" resizable="false" showGripper="false" zawarto okna bez ramek -->

horizontalAlign="center" verticalAlign="middle" width="195" height="20"

showStatusBar="false" showTitleBar="false" systemChrome="none" <mx:Script> <![CDATA[

windowComplete="startHideTimer()">

protected function startHideTimer():void { /* tworzymy timer, ktrego zadaniem jest zamknicie okna po upywie 1.5 sekundy */ var tmr:Timer = new Timer(1500,1); /* ustawiamy obslug zdarzenia */ tmr.start();

tmr.addEventListener( TimerEvent.TIMER_COMPLETE, hideWindow ); };

protected function hideWindow( event:TimerEvent ):void { /* wywoanie tej metody powoduje zamknicie natywnego okna */ close();

}; ]]>

</mx:Script>

<mx:Label text="Zakoczono pobieranie !!!" color="#00A753" fontSize="11" fontWeight="bold"/>

</mx:Window>

25

Klub techniczny Adobe


tyfikat do tego potrzebny mona zakupi w wyspecjalizowanych firmach (np. http: //www.thawte.com/). Nie oznacza to jednak, e musimy kupowa certyfikat, eby podzieli si swoj aplikacj ze wiatem. Alternatywnym rozwizaniem jest utworzenie wasnego certyfikatu. Podczas instalacji takiej aplikacji uytkownik zostanie poinformowany, e aplikacja pochodzi z nieznanego rda. Aby utworzy certyfikat w rodowisku Flex Builder, podczas publikowania aplikacji w zakadce wyboru certyfikatu (Rysunek 4) wybieramy opcj Create. Zostanie otwarte okno tworzenia certyfikatu (Rysunek 5). Po wypenieniu wymaganych pl, nasz wasny certyfikat zosta utworzony. Teraz zostanie on wybrany jako certyfikat do podpisu naszej aplikacji. Nie musimy tworzy nowych certyfikatw dla rnych aplikacji. Ten sam certyfikat moemy pniej wykorzystywa do podpisu rnych aplikacji. Po zakoczeniu eksportu, pojawi si nowy plik instalacyjny naszej aplikacji.

Podsumowanie
W krtkim czasie i nieduym nakadem pracy stworzylimy uyteczn aplikacj. Co wicej, aplikacja jest dostpna na trzy najwaniejsze systemy operacyjne. Dowiedzielimy si take, jak podpisywa i publikowa aplikacje tworzone w tej technologii. Jak widzielimy, tworzenie aplikacji w technologii AIR niewiele rni si od tworzenia aplikacji w technologii Flex. Jedyne co musimy sobie przyswoi, to nowe klasy dostarczane w tym rodowisku. Jeli nauczymy si programowa w technologii Flex, automatycznie moemy tworzy oprogramowanie dla AIR i odwrotnie. Nic nie stoi take na przeszkodzie, aby rwnoczenie rozwija aplikacj, zarwno w wersji desktopowej, jak i wersji online.

Rysunek 5. Okno wyboru certykatu

MATEUSZ MACZAK
Autor jest programist z wieloletnim dowiadczeniem w tworzeniu aplikacji desktopowych dla systemw Windows i Linux. Aktualnie bardzo mocno zwizany z technologiami Flex/AIR. Tworzc aplikacje dla serwisu http://komixo.com,wygra oglnopolski konkurs FlexChallenge na najlepsz aplikacj w tej technologii. Kontakt z autorem: mateusz@malczak.info

W Sieci
http://www.adobe.com/devnet/air/articles/ signing_air_applications.html artyku o podpisywaniu aplikacji AIR, rwnie narzdziami konsolowymi; http://www.adobe.com/devnet/air/flex/ quickstart/launching_windows.html artyku opisujcy tajniki tworzenia i zarzdzania oknami; http://www.adobe.com/devnet/air/articles/ introduction_to_air_security.html artyku o obowizujcych zasadach bezpieczestwa.

Rysunek 6. Okno tworzenia certykatu

26

06/2009

Opis CD

Video Tutorial MS SQL Server 2005


Tworzenie zapyta z wykorzystaniem Open Table i SQL
Na pocztek przedstawiony zostanie materia o tworzeniu zapyta z wykorzystaniem Open Table i SQL. W dalszej czci materiau video zapoznamy si w nim z podstawowym konfigurowaniem DTA w celu analizy obcienia. Database Engine Tuning Advisor (DTA) to nastpca narzdzia IndexTuning Wizard dostarczonego z poprzednimi wersjami SQL Server.DTA zwizany jest bezporednio z sprawami dotyczcymi wydajnoci. Wpywa na optymalizator zapyta w celu otrzymania zalece dla indeksw, indeksowanych widokw lub partycji, ktre mog zwikszy wydajno. DTA wymaga wprowadzenia pliku obciajcego, ktry moe by pniej analizowany. Mona nastpnie te obcienie udostpnia w rnorodnych formach, wczajc w to plik ledzenia, tabel ledzenia lub skrypt Transact-SQL. Najczciej stosowanym obcieniem uywanym z DTA jest plik ledzenia. Mona generowa ten lad uywajc SQL Server Profiler, ktry udostpniany jest z wzorcami zaprojektowanymi do przechwytywania danych, ktre DTA potrzebuje do wykonania swoich analiz. Aby wygenerowa plik ledzenia, wykorzystujemy Profiler i wybieramy wzorzec ladu Tuning. Naley pamita e DAT aktywnie wysya dania do optymalizatora, ktry nastpnie zwraca koszt zapytania. Koszt zapytania opiera si na statystykach dystrybucji danych wewntrz strojonej bazy. Dlatego DTA zasadniczo uywa produkcyjnej bazy danych podczas sesji analizy. Przy analizie z wykorzystaniem DTA, naley by szczeglnie ostronym, poniewa obcienie, jakie wprowadza do bazy danych, moe wpyn na wydajno. Jeli to moliwe, naley przechowywa kopi zapasow bazy danych na innym serwerze i uywa na niej sesji analizy DTA.
Redakcja nie udziela pomocy technicznej w instalowaniu i uytkowaniu programw zamieszczonych na pytach CD-ROM dostarczonych razem z pismem.

Jeli nie moesz odczyta zawartoci pyty CD, a nie jest ona uszkodzona mechanicznie, sprawd j na co najmniej dwch napdach CD. W razie problemw z pyt, prosimy pisa pod adres: cd@softtware.com.pl

www.sdjournal.org

27

Narzdzia

ISO 9001 w IT nadzr nad wyrobem niezgodnym


Nadzr nad wyrobem niezgodnym w procesie produkcji oprogramowania cz II
Zgodnie z norm ISO 9001:2000 organizacja powinna sprawowa nadzr nad wyrobem niezgodnym. W IT takim wyrobem jest system informatyczny i inne produkty procesu produkcji oprogramowania. Niniejszy artyku opisuje podstawowe narzdzia i techniki wspierajce identyfikacj oraz zarzdzanie produktem niezgodnym na etapie testowania oprogramowania.
Dowiesz si:
Jakie s wymagania normy ISO 9001:2000 w zakresie nadzoru nad wyrobem niezgodnym; Co naley uwzgldni w procesie testowania oprogramowania, by zapewni zgodno z norm.

Powiniene wiedzie:
Znajomo poszczeglnych faz projektu IT oraz ich podstawowych celw i zaoe; Podstawowa wiedza z zakresu testowania oprogramowania.

Poziom trudnoci

Proces wytwarzania oprogramowania jest procesem zoonym skada si z wielu faz i

produkuje rnego rodzaju wyroby porednie. Na kadym etapie mog pojawi si rnego rodzaju niezgodnoci i odchylenia od projektowanej jakoci. Zgodnie z norm ISO 9001: 2000 organizacja powinna sprawowa nadzr nad wyrobem niezgodnym, gdziekolwiek w procesie wytwrczym si on pojawi. W IT takim wyrobem jest system informatyczny oraz pozostae wytwory procesu produkcji oprogramowania.

o zapoznaniu si z treci artykuu czytelnicy dowiedz si, w jaki sposb mona zaprojektowa skadniki procesu wytwarzania oprogramowania, aby zapewni jego zgodno z wymaganiami normy.Niniejszy artyku jest drugim z cyklu trzech publikacji dotyczcych wdraania systemu zarzdzania jakoci w przemyle informatycznym. Zgodnie z jedn z oglnie przyjtych definicji, jako oprogramowania to zgodno ze specyfikacj i celem oraz zesp cech i charakterystyk wyrobu lub usugi, ktre nosz w sobie zdolno zaspokojenia okrelonych potrzeb. Produkt IT cechujcy si wysok jakoci musi spenia nie tylko bezporednio wyraone wymagania uytkownika, ale i wymagania porednie np. prawne, bezpieczestwa, zgodnoci z okrelonymi standardami wytwarzania systemw czy kodowania. Jako produktw kocowych projektu informatycznego jest ksztatowana przez jako poszczeglnych etapw realizacji projektu wyraan jako zgodno z jakoci projektowan, stopie kontroli nieprawidowoci i odchyle oraz rodkw korygujcych podejmowanych w reakcji na zaistniae problemy.
28

Rysunek 1. Testy na rnych etapach produkcji

Kontrola jakoci na poszczeglnych etapach dewelopmentu


testy jednostkowe testy deweloperskie, przeprowadzane w celu weryfikacji poszczeglnych unitw oprogramowania; testy moduowe sprawdzaj poprawno implementacji poszczeglnych moduw czy funkcjonalnoci oprogramowania, niezalenie od pozostaych komponentw; testy integracji wykonywane w celu sprawdzenia poprawnoci implementacji poszczeglnych interfejsw i interakcji pomidzy zintegrowanymi komponentami systemu; testy systemowe testowanie kompletnego systemu, kiedy wszystkie jego komponenty s zintegrowane w jedn cao; testy integracji systemowej testy end to end, wykonywane w celu sprawdzenia, czy system jest prawidowo zintegrowany z pozostaymi, wyspecyfikowanymi w wymaganiach, systemami zewntrznymi.

06/2009

ISO 9001 w IT nadzr nad wyrobem niezgodnym

Jako w fazie produkcji oprogramowania


W fazie produkcji oprogramowania zachodz procesy determinujce kocow jako produktu. Poprzednie etapy projektu informatycznego stanowiy w pewnym sensie przygotowanie gruntu do rozpoczcia waciwych prac, czyli wytwarzania zamwionego oprogramowania jako produktw uzyskanych na wyjciu owych etapw znaczco wpywa na poziom jakoci wyrobu docelowego, jednake ksztatowanie jakoci systemu IT odbywa si podczas fazy produkcji. To wykonawcy tego etapu tworz produkt, ktry albo spenia wymagania w wysokim stopniu, albo nie. W zapewnieniu maksymalnego poziomu zgodnoci pomoc suy zesp QA lecz naley pamita, i tester czy specjalista QA nie tworzy ani nie zapewnia jakoci moe jedynie wskaza braki, bdy oraz wspiera informacj w procesie korygowania nieprawidowoci. Twrcami jakoci s programici, architekci integracji osoby wykonujce elementy czego, co pniej uytkownik nazwie systemem. Celem fazy produkcji oprogramowania jest dostarczenie stabilnego oraz dziaajcego zgodnie z wymaganiami produktu informatycznego, ktry w nastpnej kolejnoci zostanie przekazany klientowi. Przed oddaniem do uytkownikw kocowych system musi by dokadnie sprawdzony i przetestowany na zgodno ze specyfikacj i wymogami technicznymi a dowody spenienia okrelonych wymaga musz by obiektywne, niepodwaalne i wyniki testw moliwe do powtrzenia. Ocenie jakociowej podlega nie tylko to, co wida i co nabywca oprogramowania moe zweryfikowa samodzielnie czyli funkcjonalno, niezawodno czy wydajno systemu ale i ukryte skadniki zgodno kodu ze standardami, charakterystyki efektywnoci kodu itp. Jak kontrolowany jest poziom jakoci w fazie produkcji? Za pomoc rodkw znanych kademu inynierowi oprogramowania czyli procesw testowania rnego rodzaju i poziomu, zalenie od etapu rozwijania systemu, potrzeb i celw.

w fazie analizy i projektowania; w fazie produkcji; po wdroeniu systemu na produkcj.

Kady wymieniony etap projektu ma nieco inny cel. Inne s te produkty i w zwizku z tym naley stosowa odmienne metody i techniki nadzo-

Wyznaczniki jakoci

Jako oprogramowania moe wydawa si trudna do oceny system IT jest wszak produktem o tyle specyficznym, e nie mona go sklasyfikowa cile jako wyrb materialny lub cakowicie niematerialny. Istniej jednak pewne wskaniki umoliwiajce ocen jakoci oprogramowania. Zdolno funkcjonalna charakteryzuje ona zdolno oprogramowania do zaspokajania potrzeb uytkownikw w kategorii usug. Zdolno funkcjonalna dotyczy zdolnoci oferowania oczekiwanej funkcjonalnoci i zarazem dostarczanie stosownych i dokadnych wynikw, interoperacyjno (zdolno wzajemnej wsppracy), zgodno z normami oraz bezpieczestwo. atwo uytkowania czyli zesp waciwoci odnoszcych si do wysiku niezbdnego do uytkowania i do indywidualnej oceny tego uytkowania przez okrelony jawnie lub domniemany zbir uytkownikw. Uytkownik postrzega atwo uytkowania jako m.in. intuicyjno obsugi oprogramowania, atwo szkolenia oraz prostot eksploatacji. Niezawodno oprogramowania okrelana jako zesp waciwoci odnoszcych si do zdolnoci oprogramowania do utrzymania poziomu usug zgodnego z ustalonymi warunkami i w czasie ustalonego okresu czasu. Niezawodno oprogramowania obejmuje: tolerancj bdw, moliwo odtworzenia stanu systemu (np. oblicze ) po awarii, czsto awarii. Sprawno czyli czas odpowiedzi oraz wielko uytkowanych zasobw (obszar pamici, przestrze na dysku, sprzt, uytkowane usugi lub wsparcie logistyczne itp.). ISO definiuje sprawno jako zesp waciwoci odnoszcych si do wzajemnego stosunku pomidzy poziomem usug wiadczonych przez oprogramowanie a wielkoci uytkowanych zasobw w okrelonych warunkach. Przenono obejmuje atwo adaptacji oraz instalacji oprogramowania oraz zgodno z normami i przyjtymi konwencjami, ktre to maj zwizek z moliwoci przenoszenia oprogramowania. Utrzymywalno (inaczej: atwo obsugiwania) waciwo systemu mierzona wielkoci wysiku niezbdnego przy wprowadzaniu modyfikacji (zmian, aktualizacji, poprawek) do oprogramowania. Utrzymywalno obejmuje: atwo analizy oprogramowania, atwo wprowadzania do systemu modyfikacji, stabilno oprogramowania po wdroeniu zmian oraz testowania.

ISO 9001:2000 punkt 8.3. Nadzr nad wyrobem niezgodnym

Organizacja powinna zapewni, aby wyrb niezgodny z wymaganiami zosta zidentyfikowany i by nadzorowany tak, aby zapobiec jego niezamierzonemu uyciu lub dostawie. Nadzr i zwizan z tym odpowiedzialno, i uprawnienia dotyczce postpowania z wyrobem niezgodnym, naley okreli w udokumentowanej procedurze. Organizacja powinna postpowa z wyrobem niezgodnym, wykorzystujc jeden lub kilka sposobw podanych poniej: podjcie dziaania w celu wyeliminowania stwierdzonych niezgodnoci; dopuszczenie do uytkowania, zwolnienie lub przyjcie w ramach zezwolenia udzielonego przez osob uprawnion i, gdy ma to zastosowanie, przez klienta; podjcie dziaania w celu uniemoliwienia jego pierwotnie zamierzonego wykorzystania lub zastosowania.

Zarzdzanie produktem niezgodnym


Norma ISO 9001 wymaga, by proces wytwarzania wyrobu lub usugi obejmowa sposb postpowania z produktem niezgodnym mwi o tym punkt 8.3. Nadzr nad wyrobem niezgodnym (Ramka). Jakakolwiek organizacja posiadajca wdroony System Zarzdzania Jakoci ISO 9001 powinna umie zidentyfikowa niezgodno produkowanego wyrobu z wymaganiami klienta i podj odpowiednie kroki w reakcji na zaistnia niezgodno. W przypadku przedsibiorstwa o profilu dziaalnoci zwizanym z produkcj oprogramowania, naley wdroy mechanizmy nadzoru nad produktem niezgodnym na trzech etapach realizacji projektu informatycznego (Rysunek 2):
www.sdjournal.org

Naley utrzymywa zapisy dotyczce charakteru niezgodnoci i wszelkich pniej podejmowanych dziaa, w tym udzielonych zezwole. Jeeli wyrb niezgodny zostanie poprawiony, to naley podda go ponownej weryfikacji w celu wykazania zgodnoci z wymaganiami. Jeeli wyrb niezgodny zosta wykryty po dostawie lub po rozpoczciu jego uytkowania, organizacja powinna podj dziaania odpowiednie do rzeczywistych lub potencjalnych skutkw niezgodnoci.

Podstawa do kontrolowania zgodnoci

Wyznacznikiem jakoci produktu na etapie produkcji systemu jest jego zgodno z produktami fazy poprzedniej analizy i projektowania oraz z artefaktami bdcymi informacj wejciow dla procesu implementacji. Informacje takie stanowi m.in.: specyfikacje wymaga uytkownikw; przypadki uycia; modele biznesowe produktu; specyfikacje interfejsu uytkownika; sowniki danych; specyfikacje architektury systemu; specyfikacje interfejsw i dokumentacja mapowania danych; standard stylu kodowania; wzorce projektowe.

29

Narzdzia
ru nad niezgodnociami. Proces nadzoru nad produktem niezgodnym na etapie analizy i projektowania systemu zosta omwiony w poprzednim numerze SDJ. W niniejszym wydaniu opisz nadzr nad wyrobem niezgodnym w fazie produkcji (implementacji i testowania) oprogramowania.

Zarzdzanie produktem niezgodnym na etapie implementacji i testowania


Etap implementacji i testowania (czyli waciwa produkcja oprogramowania) ma na celu stworzenie kodu systemu IT zgodnie z uprzednio udokumentowanymi wymaganiami nabywcy oprogramowania, projektem architektonicznym oraz pozostaymi dokumentami rdowymi (takimi jak np. wytyczne i zasady kodowania, plany implementacji i testowania, dokumentacja testowa). Niezgodno w fazie produkcji dotyczy gwnie niezgodnoci implementacji (kodu) ze specyfikacj wymaga klienta i moe by okrelona jako: Niepena implementacja wymaga wynikajca z pomyki czy bdu programisty, rzadziej dokonana celowo w ramach ograniczania budetu lub czasu trwania projektu kosztem mniej krytycznych wymaga. Zazwyczaj pomyki wynikaj z popiechu, nieuwagi lub niezrozumienia wymaga i wi si z pomijaniem pewnych elementw systemu na przykad zaimplementowano funkcj generowania wydrukw do formatu PDF, lecz pominito format Word. Bdy takie wystpuj te czsto w przypadku funkcji reusable, wykorzystywanych w kilku moduach aplikacji niekiedy dana funkcja wykorzystywana w kilku czciach systemu wymaga pewnych modyfikacji w innej czci co zostaje pomijane i powoduje niezgodnoci. Bdna implementacja tego typu niezgodno wystpuje chyba najczciej i polega na wyprodukowaniu kodu, ktry wykonuje akcje niezgodne ze specyfikacj. rda tego problemu s rne nieznajomo lub niezrozumienie wymaga, brak dowiadczenia programisty, popiech czy pomijanie testw deweloperskich. Brak zgodnoci z wymaganym standardem tworzenia kodu w wikszoci organizacji zajmujcych si wytwarzaniem oprogramowania oficjalnie obowizuj pewne standardy czy wytyczne dotyczce pisania kodu (np. stylu). Niestety, w praktyce standardy te nie zawsze s przestrzegane. Przyczyny s zwykle prozaiczne nieuwaga i konformistyczne podejcie poparte brakiem zaangaowania w kwestie doskonalenia jakoci ze strony kierownictwa. Czst odpowiedzi na pytanie, dlaczego nie stosuje si standardw kodowania, jest stwierdzenie: szkoda czasu, klient i tak tego nie widzi, styl kodu nie wpywa na funkcjonalno. W jaki sposb zapewni, e niezgodnoci na etapie produkcji s zidentyfikowane i wyeliminowane? Faza ta jest krytyczna dla uksztatowania ostatecznej jakoci systemu, nie wystarcz wic nieformalne przegldy i kontrole proces wery06/2009

Rysunek 2. Fazy produkcji systemu IT a nadzr nad wyrobem niezgodnym

Nie da si obej fazy testowania


Bdy w implementacji pojawiaj si zawsze, niezalenie od tego, jak starannie wykonuje swoj prac programista. Testy deweloperskie nie wykryj wszystkich nieprawidowoci dlatego potrzebny jest zesp QA i zorganizowany proces testowania. Lepiej, by to zesp producenta wykry bdy w dziaaniu aplikacji, ni klient lub sami uytkownicy kocowi. Tylko zaplanowany, odpowiednio przygotowany i zrealizowany proces testowania daje wiarygodne i obiektywne wyniki oraz pozwala oceni kondycj aplikacji. Klient z reguy da przedstawienia dowodw na to, e aplikacja spenia okrelone wymagania. Dowody takie powstaj w wyniku procesu testowania s to wszelkiego rodzaju raporty z wykonania testw, zrealizowane scenariusze i przypadki testowe, zamknite zgoszenia bdw etc.

Uatw sobie prac TestLink i Mantis

TestLink to proste w obsudze narzdzie do zarzdzania testami. Umoliwia stworzenie przypadkw testowych i zorganizowanie struktury testw dla danego projektu. Kady przypadek testowy mona powiza z wymaganiami (rwnie gromadzonymi w TestLinku), dziki czemu wykonywanie zestawu testw daje wyobraenie take o stopniu pokrycia wymaga. System umoliwia przygotowanie zestawu testw dla poszczeglnej wersji aplikacji oraz okrelonych wyda (buildw) w ramach danej wersji. Wyniki wykonania testw zapisywane s dla okrelonych wyda uytkownik moe wic sprawdzi rezultaty przypadkw testowych dla rnych wersji i wyda systemu na przestrzeni czasu. TestLink ma moliwo integracji z systemami ledzenia bdw np. Mantisem. Dziki temu wykonanie testw z wynikiem negatywnym mona odnotowa nie tylko poprzez ustawienie statusu negatywny, ale i poczenie rezultatu wykonania okrelonego przypadku testowego z odpowiednim zgoszeniem bdu w Mantisie. Poczenie si obu narzdzi umoliwia ledzenie zarwno poziomu spenienia wymaga, jak i iloci bdw zgoszonych dla danego wymagania w zalenoci od wersji czy wydania oprogramowania.

Jaki jest poytek z dokumentacji przypadkw testowych?

Dokumentowanie przypadkw i scenariuszy testowych to nie biurokracja majca na celu zapenianie bazy danych i produkowanie zbdnej dokumentacji umiejtnie zaprojektowana i zarzdzana suy jako: lista kontrolna umoliwiajca zaplanowanie, przygotowanie i wykonanie odpowiednich czynnoci weryfikujcych spenienie okrelonych wymaga; zapis wynikw testw dla poszczeglnych wersji systemu; dowd na spenienie poszczeglnych wymaga klienta; wyznacznik postpu prac testowych; wyznacznik kondycji aplikacji dua liczba wykonanych z negatywnym wynikiem przypadkw testowych wiadczy o potrzebie kontynuowania prac deweloperskich i testowych a do momentu ustabilizowania aplikacji oraz zamknicia zgoszonych bdw.

30

ISO 9001 w IT nadzr nad wyrobem niezgodnym

fikacji musi by podzielony na poziomy w zalenoci od etapu prac programistycznych i dla kadego poziomu mie ustalone osobne zaoenia oraz cele. Proces testowania naley odpowiednio zaplanowa i zorganizowa. Planowanie powinno

mie miejsce ju przy tworzeniu pierwszych wersji planu projektu i uwzgldnia zakres projektu, wielko systemu oraz wymagania klienta. Niekiedy, zwaszcza w przypadku maych projektw, kierownictwo decyduje si nie wydziela osobne-

go procesu testowania, lecz zawrze prace zwizane z QA w ramach faz implementacji na zasadzie kodowanie i testowanie moduu x. Podejcie takie moe przynosi dobre efekty w niektrych (nielicznych) przypadkach nie jest

Rysunek 3. Schemat procesu testowania

www.sdjournal.org

31

Narzdzia

Testowanie sposb postpowania (przygotowanie)


Przygotowanie planu testw
W terminie przewidzianym Planem Projektu Kierownik Dziau QA przygotowuje Plan testw. Plan testw obejmuje: opracowanie podejcia do testw; wybr narzdzi wspierajcych testowanie; opracowanie harmonogramu testw.

Plan testw uwzgldnia wymagania dotyczce procesu testowego opisane w Kontrakcie o wiadczenie usug informatycznych z klientem oraz zaoenia Planu projektu: zakres, cel i rodzaje testw; kryteria wejcia / wyjcia; warunki akceptacji systemu; harmonogram prac (przygotowawczych i wykonawczych); skad zespou testowego oraz podzia odpowiedzialnoci.

Plan testw wykonywany jest zgodnie z wytycznymi metodyki testowania obowizujcej w przedsibiorstwie. Plan testw udostpniany jest Kierownikowi Projektu celem dalszej dystrybucji.

Przygotowanie projektu testw

W terminie okrelonym Planem testw Kierownik QA zleca pracownikom Dziau QA opracowanie projektu testw. Projekt testw obejmuje dokumentacj przypadkw testowych oraz scenariuszy testowych. Przypadki i scenariusze testowe tworzone s zgodnie z harmonogramem prac przygotowawczych okrelonym w Planie testw. Projekt testw powstaje na podstawie: zatwierdzonej dokumentacji (analitycznej i projektowej); danych testowych.

Przypadki testowe zawieraj co najmniej nastpujce informacje: unikatowy numer porzdkowy; nazwa; cel procedury testowej; opis procedury testowej; oczekiwany rezultat wykonania.

Tre przypadkw testowych moe zosta poszerzona o opis warunkw pocztkowych oraz zaczniki (tekstowe, graficzne). Scenariusz testowy zawiera zestaw przypadkw testowych poczonych w uporzdkowany sposb.

Przygotowanie zestawu testw

W terminie okrelonym w Planie testw wyznaczony przez Kierownika QA pracownik przygotowuje zestaw testw, ktry bdzie wykonany w nadchodzcym cyklu testowania. Zestaw testw obejmuje przypadki i scenariusze testowe pokrywajce: zakres funkcjonalnoci systemu opisany w dokumencie Release notes; funkcjonalnoci dotyczce istniejcych otwartych Zgosze bdw.

Po stworzeniu Zestawu testw, Kierownik Dziau QA lub wyznaczony przez niego pracownik Dziau QA przydziela przypadki testowe poszczeglnym pracownikom Dziau QA. Podzia prac uwzgldnia ograniczenia zwizane z czasem przewidzianym na realizacj testw oraz biecym obcieniem pracownika. Pracownicy s odpowiedzialni za wykonanie i rejestracj rezultatw wykonania przydzielonych im przypadkw testowych. Zestaw testw tworzony jest kadorazowo dla poszczeglnych wersji i wyda systemu i dla kadego cyklu testowego. Przypadki i scenariusze testowe wchodzce w skad danego zestawu testw stanowi kopie robocze oryginalnej dokumentacji Przypadkw i scenariuszy testowych.

Wykonanie testw i raportowanie wynikw

Rozpoczcie wykonywania testw odbywa si w terminie okrelonym Planem testw i na polecenie Kierownika Dziau QA. Testowanie polega na wykonaniu Zestawu testw zaprojektowanych dla danej wersji systemu oraz na weryfikacji poprawek wniesionych do aplikacji w celu usunicia niezgodnoci zgoszonych w poprzednim cyklu testowania (Zgoszenia bdw). Pracownik wykonuje testy w nastpujcy sposb: realizuje procedur testow zawart w treci Przypadku testowego; porwnuje rzeczywisty wynik wykonania procedury z wynikiem oczekiwanym opisanym w treci Przypadku testowego; rejestruje rezultat dziaania: w przypadku, gdy wynik rzeczywisty jest zgodny z oczekiwanym, zmienia status przypadku testowego na Pozytywny; w przypadku, gdy wynik rzeczywisty nie jest zgodny z oczekiwanym, zmienia status przypadku testowego na Negatywny; w przypadku, gdy nie ma moliwoci wykonania przypadku testowego, ze wzgldu na bd blokujcy wykonanie procedury, zmienia status przypadku testowego na Zablokowany.

Niezwocznie po wykryciu niezgodnoci, pracownik QA sporzdza Zgoszenie bdu. Zgoszenie bdu zawiera w treci: tytu; dane twrcy zgoszenia; modu / funkcjonalno aplikacji;

32

06/2009

ISO 9001 w IT nadzr nad wyrobem niezgodnym

jednak zgodne z oglnie przyjt metodologi zarzdzania projektami informatycznymi i nie jest zgodne z opisywan norm ISO 9001. ISO nie ingeruje w schemat czy przebieg procesu wytwarzania wyrobw, narzuca jednak pewne ograniczenia co do swobody interpretacji punktw normy. Punkt 8.3 (nadzr nad wyrobem niezgodnym) mwi: nadzr i zwizan z tym odpowiedzialno, i uprawnienia dotyczce postpowania z wyrobem niezgodnym, naley okreli w udokumentowanej procedurze. Wskazuje to jednoznacznie na potrzeb wyodrbnienia osobnego procesu (pomocniczego) odpowiedzialnego za nadzr nad wyrobem niezgodnym. Norma wymaga prowadzenia zapisw dotyczcych charakteru niezgodnoci wykrytych w produkcie oraz dziaa zmierzajcych do korekty owych nieprawidowoci. Produkt zmieniony w wyniku usuwania niezgodnoci naley podda ponownej weryfikacji wzgldem zgodnoci ze specyfikacj. Uproszczony schemat postpowania w przypadku realizacji procesu testowania przedstawia

Rysunek 3. W opisywanym procesie zaoono, i testowanie wykonywane jest przez zesp QA (wyczenie testy deweloperskie), a poprawki pochodz od personelu dziau dewelopmentu. Zalenoci pomidzy procesem testowania a pozostaymi procesami wytwarzania oprogramowania wyraaj si poprzez okrelone wejcia i wyjcia. Podobnie zalenoci pomidzy poszczeglnymi czynnociami wchodzcymi w skad danego procesu s przedstawione za pomoc wej oraz wyj do lub z innych czynnoci. Jak ju wspomniano w pierwszej czci artykuu dotyczcej przegldu dokumentacji projektowej, wejciem do procesu moe by inny proces (poprzedzajcy), dokumenty, dane etc., wyjciem natomiast nastpny proces lub procesy, jeli zachodz rwnolegle lub warunkowo. W przypadku wej do poszczeglnych czynnoci wynik (wyjcie) poprzedniej czynnoci moe by zarazem wejciem do nastpnej w kolejnoci. Modelujc przebieg procesu i jego skadowe, naley pamita, i kady proces lub czynno powinny generowa jaki

wynik dokument, produkt, skadnik produktu. Jeli w naszym procesie pojawiaj si czynnoci nie dajce adnych wymiernych efektw, istnieje prawdopodobiestwo, i s one po prostu zbdne jako e nie wnosz nic do procesu. Proces testowania ma nastpujce wejcia: proces implementacji; zapisy kontraktu z klientem (wymagania dotyczce testowania); plan projektu; metodyka testowania obowizujca w danym przedsibiorstwie. Wyjciem natomiast jest nastpny w kolejnoci element w gwnym procesie wytwarzania oprogramowania, czyli proces wdroenia na produkcj. W wyniku procesu testowania powstaj te opracowane raporty (czstkowe i caociowy) z testowania uwzgldniajce wykonane scenariusze testowe i ich wyniki. Po ustaleniu oglnego zary-

priorytet bdu; opis procedury reprodukcji; rzeczywisty wynik wykonania procedury; oczekiwany wynik; odniesienie do numeru przypadku testowego; zaczniki zrzuty ekranu, dokumentacja rdowa.

Nowe zgoszenie jest rejestrowane w systemie ledzenia bdw zgodnie z Instrukcj zgaszania bdw ze statusem Nowe. Autor zgoszenia jest odpowiedzialny za: udzielanie informacji niezbdnych do odtworzenia i naprawy bdu; monitorowanie statusu zgoszenia celem upewnienia si, e zostaje podjte do poprawy w odpowiednim (okrelonym Planem testw) czasie; weryfikacji poprawki wykonanej w celu usunicia bdu w kolejnym cyklu testowania.

Zgoszenia bdw przekazywane s pracownikom Dziau Dewelopmentu w celu usunicia niezgodnoci (punkt Przyjcie wynikw testw i dalsze niniejszej procedury). W okrelonym czasie Pracownik QA wykonuje wszystkie przydzielone do siebie przypadki testowe i komunikuje ukoczenie prac Kierownikowi Dziau QA. Wykonanie cyklu testw nastpuje wtedy, gdy wszystkie przypadki testowe wchodzce w skad danego zestawu testw s zrealizowane, a ich rezultaty zarejestrowane.

Zakoczenie cyklu testw


Kierownik QA dokonuje formalnego zakoczenia cyklu testw. Zakoczenia testw dokonuje si: w terminie okrelonym planem testw, jeeli wszystkie przypadki testowe zostay wykonane, a ich wyniki zarejestrowane; w terminie uzgodnionym przez Kierownika Dziau QA oraz Kierownika Projektu, jeli: pojawia si konieczno wyduenia prac testowych; pojawia si koniecznoci skrcenia prac testowych;

Kierownik QA opracowuje Raport z testw zawierajcy: opis przebiegu testowania; wyszczeglnienie przypadkw testowych wchodzcych w skad zakresu testw; wyniki testw; list wykrytych niezgodnoci; ocen kondycji oprogramowania oraz rekomendacje dalszych dziaa (konieczno kolejnego cyklu testw lub akceptacja biecej wersji systemu).

Raport z cyklu testowego przekazywany jest Kierownikowi Projektu oraz Kierownikowi Dziau Dewelopmentu, ktrzy wsplnie z Kierownikiem QA uzgadniaj kolejne kroki. Decyzja o przygotowaniu nastpnego cyklu testw jest podejmowana w oparciu o: liczb wykonanych z wynikiem pozytywnym przypadkw testowych; liczb niewykonanych przypadkw testowych; liczb oraz krytyczno wykonanych z wynikiem negatywnym przypadkw testowych; liczb oraz krytyczno wykrytych bdw; harmonogram projektu.

W przypadku podjcia decyzji o kolejnym cyklu testowania, Kierownik QA zleca przygotowanie kolejnego zestawu testw (zgodnie z krokiem Przygotowanie zestawu testw niniejszej procedury) W przeciwnym wypadku Kierownik QA dokonuje zakoczenia etapu testowania.

www.sdjournal.org

33

Narzdzia
su procesu naley zidentyfikowa czynnoci, zalenoci pomidzy nimi oraz dane wejciowe i wyjciowe. Kade dziaanie powinno bazowa na okrelonej informacji i produkowa informacj, np. bazujc na zaoeniach planu testw i przy wykorzystaniu zestawu testw oraz (jeli istniej) dotychczasowych zgosze bdw wykonuje si na danej wersji systemu testy. W wyniku tego powstaj: zapisy w dokumentacji przypadkw i scenariuszy testowych (zmiana statusu z przygotowany na wykonany w wersji x); aktualizacje dotychczasowych zgosze bdw (zamykanie, ponowne otwieranie zgosze); nowe zgoszenia bdw. Specyfikacje przypadkw testowych zaprojektowane na podstawie zatwierdzonej dokumentacji (patrz: przegld dokumentacji projektowej w poprzednim numerze SDJ) oraz z wykorzystaniem danych testowych i oczywicie wiedzy i dowiadczenia twrcy testw realizuj tu funkcj listy kontrolnej (Ramka). Umoliwiaj te rejestrowanie wynikw wykonywanych czynnoci na co zwraca uwag norma ISO 9001:2000 w punkcie dotyczcym utrzymywania zapisw i nadzoru nad dokumentami. Zaprojektowanie procesu testowego w sposb zgodny z wymaganiami normy nie oznacza koniecznoci gruntownej reorganizacji czy wdraania nowych rozwiza. Norma nie wymusza stosowania konkretnych technik, podej czy narzdzi testowania, stworzenia okrelonych procedur czy instrukcji wane jest, aby przedsibiorstwo zidentyfikowao oglny przebieg procesu testowego oraz jego powizania z innymi procesami i opisao je w ramach systemu zarzdzania jakoci. Dla przykadu rozwamy proces testowy zaprojektowany tak, by speni wymagania ISO. Sposb postpowania dla procesu przedstawionego na schemacie wyjania ramka. Wynikiem procesu testowania s niezgodnoci bdy, defekty, usterki. Zgodnie z wytycznymi ISO, kada niezgodno powinna zosta poddana analizie i rozwizana (jeli to tylko moliwe). Sposb postpowania z wykrytymi niezgodnociami opisuje dalsza cz procedury. W mniejszych organizacjach, stosujcych lekkie metodyki realizacji projektw informatycznych, lub w przypadku maych projektw i grup roboczych, mona zastosowa odmienne sposoby postpowania z wyrobem niezgodnym. Proces identyfikacji i zarzdzania niezgodnociami niekoniecznie musi by w peni sformalizowany i przebiega wedug opisanego schematu. W wielu przypadkach mona pomin np. elementy procedury podejmo06/2009

Postpowanie z produktem niezgodnym sposb postpowania


Przyjcie wynikw testw

Niezgodnoci zgoszone w trakcie testowania oprogramowania zostaj przekazane do Dziau Dewelopmentu. Kierownik Dziau Dewelopmentu dokonuje przyjcia wynikw testw zgodnie z Procedur podejmowania zgosze. Kierownik przydziela poszczeglne zgoszenia pracownikom Dziau Dewelopmentu do analizy i rozwizania. Przydzia zada realizowany jest zgodnie z zasad, i twrca danej funkcjonalnoci jest odpowiedzialny za rozwizywanie problemw zwizanych z t funkcjonalnoci. Kierownik Dziau Dewelopmentu zmienia status zgoszenia na Przydzielony do rozwizania.

Analiza niezgodnoci

Pracownik Dziau Dewelopmentu wykonuje analiz niezgodnoci przydzielonego do siebie zgoszenia. Podstaw do analizy jest Zatwierdzona dokumentacja. Pracownik okrela: czy zgoszenie jest prawidowe i rzeczywicie opisuje niezgodno; pracochonno usunicia niezgodnoci; moliwy wpyw na inne funkcjonalnoci systemu; metod rozwizania problemu.

Nastpnie aktualizuje dokument zgoszenia: zmienia status na Otwarte; okrela planowany czas wykonania poprawki; planowan wersj systemu, w ktrej poprawka zostanie wdroona.

Korekta bdw

Pracownik Dziau Dewelopmentu przystpuje do czynnoci korygujcych. W pierwszej kolejnoci usuwane s niezgodnoci o najwyszym priorytecie. Korekta realizowana jest zgodnie z Procedur realizacji poprawek. Czas przeznaczony na wykonanie poprawek okrelony jest przez tre Planu projektu. W przypadku, gdy usunicie usterki wymaga wicej czasu, ni jest przewidziane w Planie, pracownik zgasza w fakt Kierownikowi Dziau Dewelopmentu, ktry podejmuje decyzj o przesuniciu terminu realizacji poprawki do nastpnego cyklu lub rozwizaniu problemu w inny sposb. Po wykonaniu poprawki, pracownik aktualizuje dokument zgoszenia, zmieniajc status na Poprawiony, podajc sposb rozwizania problemu oraz dat realizacji. Kod rdowy aplikacji zawierajcy poprawk zostaje zoony do repozytorium kodu wraz z komentarzem opisujcym przyczyn zmian (numer zgoszenia bdu). Przekazywanie kodu rdowego odbywa si zgodnie z punktem Zatwierdzanie zmian procedury realizacji poprawek. W przypadku, gdy usunicie niezgodnoci wymaga zmian ze strony wicej ni jednego pracownika, zakres prac jest dzielony zgodnie z obszarem kompetencji. Pracownicy okrelaj pomidzy sob kolejno realizacji pracy, przy czym wykonywanie zmian na tym samym kodzie rdowym jednoczenie przez wicej ni jednego pracownika nie jest dozwolone.

Przygotowanie nowej wersji systemu

Pracownicy dostarczaj zmieniony kod do repozytorium. Przygotowanie nowej wersji systemu odbywa si zgodnie z Procedur tworzenia wyda w terminie uzgodnionym w Planie projektu. Nowa wersja systemu zawiera wszystkie poprawki zaplanowane do wdroenia w danym wydaniu. Za przygotowanie nowej wersji odpowiada Kierownik Produkcji lub inny pracownik wyznaczony przez Kierownika Dziau Dewelopmentu.

Przekazanie do testowania

Po zakoczeniu tworzenia nowego wydania systemu, Kierownik Produkcji lub inny pracownik wyznaczony przez Kierownika Dziau Dewelopmentu opracowuje dokument Release notes. Dokument zawiera: list zmian i poprawek wdroonych w danej wersji; informacje techniczne; list osb odpowiedzialnych za poszczeglne moduy systemu.

Nowa wersja systemu zostaje zainstalowana w rodowisku testowym, wstpnie sprawdzona przez wybranego przez Kierownika Dziau Dewelopmentu pracownika i wraz z dokumentem Release notes przekazana do testw.

Kontrola

Po dostarczeniu nowej wersji systemu, pracownik QA w pierwszej kolejnoci sprawdza poprawno i kompletno poprawek. Pracownik QA stwierdza: czy poprawka usuwa stwierdzon niezgodno; czy wprowadzone zmiany nie zaburzaj funkcjonowania i spjnoci pozostaych czci aplikacji.

W wyniku kontroli pracownik QA podejmuje decyzj o zamkniciu poprawki (zmieniajc status zgoszenia na Zamknite) lub zwrcenia jej do dalszej naprawy (zmieniajc status na Zwrcony). Zwrcenie zgoszenia do poprawy wymaga okrelenia przyczyny. Wyniki weryfikacji przekazywane s na bieco Dziaowi Dewelopmentu za pomoc systemu ledzenia bdw. Po zakoczeniu weryfikacji poprawek, pracownicy QA przystpuj do pozostaych czynnoci testowych zgodnie z punktem Wykonanie testw i raportowanie wynikw niniejszej procedury.

34

ISO 9001 w IT nadzr nad wyrobem niezgodnym

wania zgosze zgoszenia bdw mog by przydzielane bezporednio do odpowiedniego programisty, z pominiciem udziau kierownika dziau. Mona rwnie czciowo pomin etap analizy niezgodnoci (weryfikacji poprawnoci zgoszenia), jeeli zesp testowy opisuje bdy w sposb jednoznacznie wskazujcy na niezgodno. Wane jest, by niezalenie od podejcia i metodologii stosowa pewne ustalone zasady dziaania majce na celu wykrycie oraz korygowanie niezgodnoci powinny by powtarzalne i dawa konkretny, udokumentowany rezultat. Uzyskane wyniki naley przekazywa osobom odpowiedzialnym za podejmowanie okrelonych decyzji i wdraanie czynnoci korygujcych. Wszelkie dziaania podjte w celu wyeliminowania usterek naley rejestrowa zgodnie z zasadami ustalonymi dla danego procesu wytwarzania oprogramo-

wania niedopuszczalne jest na przykad samodzielne podejmowanie decyzji o wdroeniu zmian w kodzie rdowym bez poinformowania osb, na ktrych prac bd miay wpyw owe zmiany. Wynikiem fazy testowania jest stabilna wersja systemu, gotowa do przekazania klientowi. Nastpnym etapem jest z reguy faza testw realizowanych przez klienta (gdzie obowizuj podobne zasady, jak w przypadku testw wewntrznych) lub rzadziej bezporednie wdroenie systemu na produkcj. W obu przypadkach organizacja powinna zapewni odpowiednie mechanizmy nadzoru nad wyrobem niezgodnym gdy testy wewntrzne nie gwarantuj wyeliminowania wszystkich usterek. Proces nadzoru nad niezgodnociami po wdroeniu systemu na produkcj zostanie opisany w trzeciej i ostatniej czci artykuu.

Podsumowanie
Trudno unikn nadzoru nad niezgodnoci w procesie wytwarzania oprogramowania. Elementy kontroli wyrobu i korygowania usterek wpisane s na stae w schemat realizacji produktu informatycznego jako proces testowania. Wytyczne normy ISO 9001 nie powinny wic by niczym nowym i wymagajcym wprowadzania radykalnych zmian do dotychczasowego procesu produkcji. Testy wykonywane s w wikszoci jeli nie we wszystkich organizacjach zajmujcych si wiadczeniem usug IT. ISO pozwala usystematyzowa procesy zachodzce w przedsibiorstwie, zapewni ich wewntrzn spjno i zgodno z podstawowymi standardami uznawanymi na caym wiecie. Speniajc wymagania normy w zakresie nadzoru nad wyrobem niezgodnym, organizacja udoskonala swj proces wytwarzania oprogramowania oraz minimalizuje ryzyko bdw i dostarczenia klientowi produktu, ktry nie spenia okrelonych wymaga. Podczas testowania zostaj wykryte bdy popenione w trakcie implementacji systemu, a take te, ktre wynikaj z dotychczas nieujawnionych brakw i usterek w specyfikacji. Faza testowania, polegajca na iteracyjnej weryfikacji i poprawianiu produktu, umoliwia stopniowe wyeliminowanie moliwie najwikszej liczby niezgodnoci. Niniejszy artyku przybliy czytelnikowi problematyk nadzoru nad wyrobem niezgodnym w trakcie wytwarzania oprogramowania. W czci praktycznej dotyczcej wdroenia wymaga normy ISO w organizacji IT przedstawiono przykadowe rozwizanie dla procesu realizacji testowania wewntrznego, bdcego najbardziej powszechnym mechanizmem nadzoru nad wyrobem niezgodnym podczas wytwarzania oprogramowania. Ostatni etap procesu nadzoru zachodzcy w fazie utrzymywania oprogramowania zostanie opisany w kolejnym numerze SDJ wraz z przykadowym rozwizaniem organizacyjnym zgodnym z wymaganiami normy ISO 9001.

Pojcia
ISO 9001:2000 midzynarodowa norma okrelajca wymagania, ktre powinien spenia system zarzdzania jakoci w organizacji. Do gwnych wymaga normy ISO 9001 nale m.in.: wprowadzenie nadzoru nad dokumentacj i zapisami, zaangaowanie kierownictwa w budowanie systemu zarzdzania jakoci, usystematyzowanie zarzdzania zasobami, ustanowienie procesw realizacji wyrobu, dokonywanie systematycznych pomiarw (zadowolenia klienta, wyrobw, procesw). Nowa wersja normy ISO 9001:2008 zawiera gwnie wyjanienia do istniejcych wymaga normy i wprowadza zmiany majce na celu popraw spjnoci z systemem zarzdzania rodowiskiem ISO 14001:2004; Poprawka zmiana w kodzie rdowym majca na celu usunicie wykazanej niezgodnoci; Procedura sposb postpowania w przypadku realizacji okrelonego celu. W niniejszym artykule opisano procedur realizacji procesu testowania, czyli poszczeglne czynnoci, kroki, warunki pocztkowe i kocowe oraz dane niezbdne do realizacji testw; Release notes dokument zawierajcy tzw. uwagi do wersji, czyli opis parametrw danej wersji oprogramowania, list zmian etc.; SQA Software Quality Assurance planowe i systematyczne dziaania niezbdne do zapewnienia spenienia wymaga jakoci kocowego produktu w procesie jego tworzenia; SZJ System Zarzdzania Jakoci narzdzie umoliwiajce kademu przedsibiorstwu podnoszenie poziomu jakoci wytwarzanych wyrobw/wiadczonych usug, poprzez cige doskonalenie metod i sposobw dziaania. Podstawowym zaoeniem SZJ jest zasada cigej poprawy polega na nieustajcym deniu do poprawy skutecznoci i efektywnoci podejmowanych dziaa; Wyrb niezgodny wyrb/komponent/element, ktry nie spenia okrelonych wymaga. W kontekcie wytwarzania oprogramowania, wyrobem niezgodnym s produkty procesu produkcji oprogramowania system informatyczny, dokumentacja etc.; Zapis rodzaj dokumentu w systemie zarzdzania jakoci zgodnym z norm ISO 9001. Zapis potwierdza wykonanie danego dziaania i przedstawia jego wyniki. Charakterystyczn cech zapisu jest to, i jego tre raz zapisana nie moe ulec zmianie. Zapisem jest np. protok odbioru lub zatwierdzenia dokumentacji projektowej; Zestaw testw uporzdkowany zbir przypadkw i scenariuszy testowych, przeznaczony do wykonania w danym cyklu testw na okrelonej wersji systemu; Zgoszenie dokument opisujcy niezgodno, zawierajcy wszelkie informacje niezbdne do odtworzenia problemu i okrelenia rodzaju niezgodnoci.

KAROLINA ZMITROWICZ
Pracuje na stanowisku Analityka biznesowego w rmie Pro Data. Karolina specjalizuje si obecnie w modelowaniu wymaga biznesowych. Wczeniej pracowaa jako Manager Quality Assurance w projektach informatycznych w sektorze nansowo bankowym. Pro-Data to producent oprogramowania specjalizujcy si w budowie dedykowanych rozwiza informatycznych dla ubezpiecze, bankowoci i administracji publicznej. Firma posiada certykat jakoci ISO9001:2000 w zakresie produkcji oprogramowania. Kontakt z autorem: karolina_zmitrowicz@wp.pl

W Sieci
www.strefa-iso.pl Artykuy na temat systemw zarzdzania jakoci ISO 9000, ISO 14000 oraz narzdzi jakoci; http://www.pkn.pl/?pid=nowelizacja_iso Serwis PKN (Polski Komitet Normalizacyjny) prezentujcy informacje na temat norm, w tym norm rodziny ISO; www.zj.com.pl Zarzdzanie Jakoci - kwartalnik powicony zarzdzaniu i wdraaniu systemw jakoci; http://www.4pm.pl/artykul/zarzadzanie_jakoscia_i_testowanie_it_fakty_i_mity-58-265.html Artyku opublikowany w serwisie 4PM dotyczcy zarzdzania jakoci w przypadku projektw informatycznych.

www.sdjournal.org

35

Narzdzia

W poszukiwaniu straconego czasu


Strategie poszukiwania przyczyn bdw i ich rozwiza
Ile czasu straci kady z nas na poszukiwaniu bdw? Monaby go liczy w godzinach, dniach, a nawet miesicach. Wicej czasu tracimy na poszukiwanie bdw, ni na tworzenie oprogramowania. Efektywno dziaania w sytuacji, kiedy pojawiaj si problemy, jest jednym z kluczowych czynnikw wpywajcych na powodzenie lub niepowodzenie zadania.
Dowiesz si:
Jak efektywnie poszukiwa rozwiza napotkanych problemw w pracy z kodem rdowym; Jak wykorzysta dostpne rda informacji; Jak samodzielnie znale rozwizanie; Kiedy warto si zatrzyma, a kiedy naley si nie poddawa.

Powiniene wiedzie:
To co wiesz teraz, jest wystarczajce.

n zmian w Twoim kodzie. By moe bdzie to jedna klasa, jedna metoda, jeden ze scenariuszy alternatywnych w Twoim zadaniu. Zmieniaj lub dodawaj w danym momencie tylko jedn rzecz. Jeli pojawi si problemy, bdziesz wiedzia, e spowodowaa je wanie ta ostatnia zmiana. Uwaamy, e w programowaniu nie ma drogi na skrty, a kiedy zechcesz robi zbyt wiele rzeczy za jednym razem, szybko wpadniesz w zastawion przez siebie puapk.

Poziom trudnoci

a pocztku przyjrzymy si trzem technikom, ktre pozwol Ci lepiej przygotowa si na sytuacje problemowe. Jeli uda Ci si je zastosowa, bdziesz mia bardzo dobr baz do dalszej pracy.

Spiesz si powoli
Niemal kady projekt jest obarczony syndromem braku czasu. Nie ma czasu na testy jednostkowe, nie ma czasu na refaktoryzacj, nie ma czasu na standard kodowania, nie ma czasu na tworzenie diagramw. Nawet jeli pocztkowo wydaje si, e tego czasu jest bardzo duo, mniej wicej w poowie projektu lub iteracji, okazuje si, e zaczyna go brakowa. I wtedy pojawiaj si problemy. Zaczynasz si spieszy, twoje rozwizania coraz bardziej odbiegaj od kanonw sztuki programowania i pojawia si coraz wicej bdw. Co z kolei sprawia, e ich naprawa Ci absorbuje, w efekcie masz coraz mniej czasu na tworzenie kodu produkcyjnego. I koo si zamyka. W takich sytuacjach istnieje tylko jedno lekarstwo. Kiedy dziaasz pod presj czasu, pracuj
36

tak, jakby mia go wystarczajco duo. Brzmi to paradoksalnie. Jednak podczas pracy pod wpywem stresu najbardziej destrukcyjnym czynnikiem jest popiech i towarzyszce mu chaotyczne dziaanie. To one powoduj, e zaczynasz bdzi, tworzc niezrozumiae i trudne w utrzymaniu rozwizania. Dlatego we kilka gbokich oddechw i wyobra sobie, e na zadanie, przed ktrym stoisz, masz przynajmniej dwa lub trzy razy wicej czasu. Wiem, e mimo banalnie prostego przepisu jest to niezwykle trudne, ale trening czyni mistrza. Za kadym nastpnym razem bdzie coraz prociej.

Wyjd z transu
Ciekawym zjawiskiem, ktre moe by rwnie pomocne co szkodliwe, jest trans. Programici, a w zasadzie wszystkie osoby, ktre wykonuj prac samodzielnie i musz analizowa due iloci szczegw, po pewnym czasie wpadaj w trans. Jest to bardzo poyteczne zjawisko, ktre umoliwia efektywn prac przez wiele godzin. Jednak wszystko si zmienia, kiedy pojawia si problem. Przypomnij sobie ostatni sytuacj, kiedy szukae przyczyny bdu przez duszy czas. By moe przez dwie lub trzy godziny miae wraenie, e krysz w kko. Wtedy podchodzi kto i pyta Ci, co porabiasz. Odrywae si od pracy i opowiadae, co si dzieje. I wtedy do gowy przychodzio Ci rozwizanie Twojego problemu. Jest to typowy przykad dziaania w transie i konsekwencji wyjcia z niego. W przypadku kiedy szukamy rozwizania problemu, trans moe spowodowa zawenie pola potencjalnych rozwiza. Co naley zatem robi? W sytuacji kiedy w cigu ostatniej godziny nie posune si do przodu w poszukiwaniu rozwizania, zrb co innego. Oderwij si od swojej pracy i zrb sobie przerw. Najlepiej na kilkanacie minut zmie otoczenie. By moe pjd na spacer, porozmawiaj z kolegami (to moe si szefowi nie spodoba) lub porozmawiaj z szefem (to ju moe
06/2009

Technika Maych krokw


Wikszo zada stojcych przed programist to zoone problemy. Zazwyczaj potrzeba kilku lub kilkunastu godzin na ich zrealizowanie, czasami nawet kilku dni. Ogromna ilo szczegw realizowanego zadania powoduje, e nawet genialny umys nie jest w stanie caociowo go obj i mie pod cakowit kontrol. Z tego wzgldu trudno przewidzie wszystkie konsekwencje wprowadzanych do kodu zmian, a to one s gwn przyczyn bdw programistycznych. Dlatego, odwoujc si do starego powiedzenia: Jak zje sonia? Po kawaku!, dzielmy zadania na mniejsze. Przyjrzyjmy si, jak to stwierdzenie dziaa w odniesieniu do wytwarzania oprogramowania. W danym momencie pracuj tylko nad jed-

W poszukiwaniu straconego czasu

bardziej przypa szefowi do gustu), wyjd na obiad, wykonaj kilka wicze fizycznych. Moemy Ci zapewni, e nie bdzie to strata czasu Twj umys potrzebuje regeneracji.

zrobione, w twoim rozwizaniu tkwi banalny bd, ktry bardzo trudno jest znale!

Najprostsze przyczyny bdw


Najciemniej jest pod latarni i z naszego dowiadczenia wynika, e ogromna cz bdw jest spowodowana bardzo prostymi pomykami. Ile razy bylimy wiadkami, kiedy po kilku godzinach poszukiwa okazywao si, e literwka w pliku konfiguracyjnym stawaa na przeszkodzie w kontynuowaniu dalszych prac. Literwki, antywzorzec Copy-Paste (przeklejanie rozwiza), automatyczne uzupenianie, podczas ktrego atwo nie zauway, e klasa o tej samej nazwie znajduje si w rnych pakietach, to tylko wybrane przykady prostych bdw, ktre sprawiaj sporo kopotw. Jeli masz tak moliwo, popro kogo, aby pomg Ci zrobi szybki przegld Twojego rozwizania pod ktem tego typu bdw. Osoba z zewntrz jest bardziej obiektywna. I mimo e moe Cie irytowa proba o to, by sprawdzi, czy dana nazwa jest prawidowo zapisana (sic!) albo czy pracujesz na dobrym projekcie (sic!), albo czy rzeczywicie uruchamiasz ostatni wersj aplikacji (sic!), to zrb to, o co Ci poprosz. Bardzo czsto w sytuacjach, kiedy jeste absolutnie pewien, e wszystko jest poprawnie R

Wyszukiwarka Twoim przyjacielem


Czego nie ma w wyszukiwarkach internetowych, to nie istnieje. Cho niemal kada osoba zaangaowana w proces wytwarzania oprogramowania dobrze o tym wie, poniej podamy kilka wskazwek, ktre mog zwikszy efektywno szukania rozwiza w wyszukiwarce. Bd konkretny Jeli szukasz rozwizania, wane jest zapytanie, ktre zadasz. Oczywicie, im masz wiksze dowiadczenie w pracy z danym narzdziem lub bibliotek, tym lepiej potrafisz zadawa zapytania. Wczeniej jednak musisz wypracowa sobie odpowiedni sposb dziaania. Oto kilka wskazwek: jako jedno ze sw kluczowych w zapytaniu podawaj nazw biblioteki lub narzdzia, ktrego dotyczy problem, np. nunit, hibernate, drupal; podawaj w sposb zwizy informacje o bdzie jeli jest to wyjtek, niech bdzie to jego nazwa, np. NullReferenceException, jeli problem z kontrolk, zawrzyj nazw kontrolki, jeli problem z konkretn klas lub E K L A M

metod, podaj ich nazw, np. Random, jeli konkretna metoda dziaania, podaj jej nazw (np. one to many mapping); nie dodawaj informacji charakterystycznych tylko dla Twojego projektu usu wszelkie nazwy tabel, metod, klas, ktre wystpuj tylko w Twoim projekcie; mog by przydatne pomocnicze sowa, ktre doprecyzuj to, co chcesz znale, na przykad: sample, example, jeli poszukujesz przykadu; problem, jeli szukasz rozwizania problemu; tutorial, jeli szukasz wprowadzenia do tematu; faq, aby znale rozwizania typowych problemw. Sprawd, czy to Twj problem Poniewa wyszukiwarki zwracaj wiele wynikw, zanim zaczniesz szczegowo analizowa pierwszy znaleziony artyku, upewnij si, e dotyczy Twojego problemu. Aby atwiej odnale si w dokumencie, wywietl kopi artykuu dostpn ze strony wyszukiwania, aby zlokalizowa sowa kluczowe. Jeli nabierzesz wprawy ju po samym opisie na stronie wyszukiwania, stwierdzisz, czy warto zaglda do rodka, czy nie. A

www.sdjournal.org

37

Narzdzia
Ustal limit Zasoby objte przez wyszukiwarki s ogromne, dlatego trzeba wiedzie, kiedy si zatrzyma. Moemy skorzysta z zasady pierwszej trzydziestki jeli pierwsze trzydzieci wynikw nie daje rozwizania, naley zmieni zapytanie lub zastosowa inn technik. Oczywicie trzydzieci to umowna ilo, dobierz j do swoich potrzeb. Warto dodana Poszukiwania w wyszukiwarce maj t dodatkow zalet, i przy okazji moesz natkn si na wiele ciekawych artykuw, ktre warto doda do zakadek. Naley jednak uwaa na pokus ich natychmiastowego czytania. Znajd przykad bazowy Kiedy po raz pierwszy pracujesz z dan bibliotek lub narzdziem, moesz mie ochot na stworzenie rozwizania, ktre od razu bdzie dopasowane do Twoich potrzeb. Jest to jednak obarczone duym ryzykiem. Dlatego proponujemy zastosowanie techniki maych krokw. Najpierw znajd w wyszukiwarce proste przykady dotyczce zagadnienia, ktrym si zajmujesz. Sprawd, jak dziaa technologia w nieskomplikowanym rodowisku. Testuj kady element osobno. Uruchom przykadowe rozwizania i z nimi eksperymentuj. Dopiero kiedy nabierzesz wprawy, zacznij dostosowywa rozwizanie do swoich potrzeb, rwnie maymi krokami. Poniej znajduje si kilka zalet takiego podejcia: poczujesz si pewnie z rozwizaniem, ktre tworzysz; poznasz stosowane praktyki zwizane z dan technologi; bdziesz rozszerza co, co ju dziaa. Upraszczanie rozwizania Postaraj si doprowadzi kod rdowy do prostszej dziaajcej wersji. Bdy pojawiaj si wraz z postpem prac, gdy kod staje si bardziej skomplikowany. Zastanw si przez chwil, jak moesz doprowadzi swoje rozwizanie do postaci dziaajcej. By moe przyda si wykonanie kroku w ty wycofaj kilka ostatnich zmian a do momentu, kiedy Twj kod znowu bdzie sprawny. Nie przejmuj si tym, e bdziesz musia usun cz swojej pracy. Zapobiegawczo zrb kopi bdnego rozwizania. Wykonujc kroki w ty, w kocu odnajdziesz ostatnie dziaajce rozwizanie oraz prawdopodobnie przyczyn bdu, ktra go spowodowaa. Wtedy bdzie ju duo prociej moesz zastosowa jedn z opisanych tutaj technik. Izolacja rozwizania Czasami stajemy si nieefektywni, kiedy prbujemy proste problemy rozwiza w zoonym rodowisku. Kady projekt, ktry trwa wicej ni kilka dni, staje si wystarczajco skomplikowany, eby utrudni nam proste czynnoci. Dlatego jeli to moliwe, warto poszukiwanie rozwizania przenie do prostszego rodowiska. Szczeglnie dotyczy to zagadnie zwizanych z uywaniem pewnych narzdzi i bibliotek po raz pierwszy. Jeli na przykad prbujesz uy nowej kontrolki po raz pierwszy lub nie znasz jej zbyt dobrze, przetestuj j poza projektem. Wtedy nie bdziesz obciony dodatkowym narzutem wynikajcym m. in. ze stosowania warstw aplikacji, transakcji, wielojzycznoci, praw dostpu, kodowania. Na dusz met w projektach warto rwnie posiada rodowisko typu piaskownica, ktre jest zblione do rodowiska deweloperskiego i pozwala na niezalene testowanie wykorzystywanych bibliotek i narzdzi. Dlaczego nie dziaa? Programici czsto wpadaj w amok w momencie pojawienia si bdu. Zamiast przeanalizowa rzeczywiste przyczyny, na chybi trafi dokonuj zmian w kodzie z nadziej, e bd ustpi. Takie dziaanie po omacku zawsze powoduje ogromne straty czasu. Jeli znalaze bd, powi kilka minut na jego analiz, bez wprowadzania jakiejkolwiek zmiany! Przeanalizuj informacje wynikajce z pojawiajcego si wyjtku lub komunikatu o bdzie, przeanalizuj logi, jeli s dostpne. Sprbuj okreli kontekst, w ktrym pojawi si problem. Jeli masz tak moliwo, popro koleg z zespou o pomoc w analizie. Szczeglnie w tym przypadku potwierdza si stwierdzenie Co dwie gowy, to nie jedna.

Narzdzia zaawansowane
Kiedy jeste zaawansowanym uytkownikiem biblioteki lub narzdzia, z ktrym masz problem i adna z powyszych strategii nie naprowadza Ci na rozwizanie, masz do dyspozycji kilka dodatkowych opcji. Cz z nich to tematy na osobny artyku, wic ograniczymy si tutaj do ich krtkiego opisu: listy mailingowe kiedy trafie na nietypowy problem, o ktrym nikt nie sysza, a Ty nie masz adnego pomysu, co mona z nim zrobi, opisz swj bd na licie mailingowej skupionej wok danej biblioteki lub narzdzia; jeli masz do czynienia z produktem komercyjnym, skontaktuj si z dziaem wsparcia producenta; telefon do przyjaciela jeli masz w swoim otoczeniu znajomego guru, ktry rozwizuje kady problem w kilka minut, moesz poprosi go o pomoc; logowanie utrzymywanie dziennikw zdarze w aplikacji, potocznie nazywanych logami, jest przydatn technik lokalizowania przyczyn bdw, szczeglnie w przypadku systemw wielouytkownikowych; debugowanie mona posuy si rwnie technik debugowania, czyli ledzenia wykonywanego kodu, jednak jest to technika bardzo pracochonna, wic naley uywa jej z rozwag; analiza kodu rdowego narzdzia lub biblioteki jest to technika dla komandosw i wymaga duego dowiadczenia, ale jest niezwykle pomocna w przypadku, gdy masz dostp do rde narzdzia lub biblioteki.

Samodzielne poszukiwania
Zamy, e poszukiwania w wyszukiwarce spezy na niczym lub nie do koca wiesz, co jest przyczyn bdu. Jeli stosujesz mae kroki, to prawdopodobnie wiesz, co spowodowao zmian, ktra przyczynia si do bdu. Jednak jeli nie stosujesz tej techniki lub masz do czynienia z odziedziczonym po innych programistach kodzie, moesz wesprze si strategi Upraszczania rozwizania.

Podsumowanie
Opisane powyej techniki proponujemy sprawdzi i dostosowa do wasnych potrzeb. Im wicej spokoju bdzie Ci towarzyszy i im bardziej uporzdkowane bdzie Twoje dziaanie, tym masz wiksze szanse na szybki sukces. Bo nie sztuk jest znale przyczyn i naprawi bd, ale sztuk jest zrobi to efektywnie!

Na co warto zwraca uwag podczas szukania przyczyn bdw i ich rozwiza?


kiedy dziaasz pod presj czasu, pracuj tak, jakby mia go wystarczajco duo; zmieniaj lub dodawaj w danym momencie tylko jedn rzecz; w sytuacji kiedy w cigu ostatniej godziny nie posune si do przodu w poszukiwaniu rozwizania, zrb co innego; ogromna cz bdw jest spowodowana bardzo prostymi pomykami; jeli pojawia si bd, postaraj si doprowadzi kod rdowy do prostszej dziaajcej wersji; poszukiwanie rozwizania warto przenie do prostszego rodowiska; jeli znalaze bd, powi kilka minut na jego analiz, bez wprowadzania jakiejkolwiek zmiany!

MICHA BARTYZEL, MARIUSZ SIERACZKIEWICZ


Trenerzy i konsultanci w rmie BNS IT. Badaj i rozwijaj metody psychologii programowania, pomagajce programistom lepiej wykonywa ich prac. Na co dzie Autorzy zajmuj si zwikszaniem efektywnoci programistw poprzez szkolenia, warsztaty oraz coaching i trening. Kontakt z autorami: m.bartyzel@bnsit.pl, m.sieraczkiewicz@bnsit.pl

38

06/2009

Warsztaty

Agilo for Scrum


Zarzdzanie zmian w metodyce Scrum
Scrum metodyka lekka, znana prawie kademu menederowi projektu, staje si co raz bardziej popularna. Oprcz optymistycznej wizji oszczdnoci zasobw, myn w rkach pocztkujcych adeptw niesie puapki. Artyku przyblia problemy, ktre mog powsta w projektach opartych na metodyce Scrum oraz prezentuje narzdzie Agilo for Scrum.
Dowiesz si:
jakie aspekty obejmuje zarzdzanie zmianami, jakie antywzorce mog pojawi si w projekcie opartym na metodyce Scrum, czym jest Agilo for Scrum.

Powiniene:
zna podstawy metodyki Scrum, umie posugiwa si jzykiem SQL.

Poziom trudnoci

yscyplina kojarzona z treningiem sportowcw wyczynowych jest rwnie podstaw do osignicia sukcesw w biznesie. Inynieria oprogramowania, dziaka cile techniczna dostrzega potrzeb poczenia dwch metod wytwarzania produktw informatycznych. wiat metod tradycyjnych, w ktrych nacisk kadzie si na proces, ukoronowany standardami i niekiedy nienadajcy si do zastosowania w mniejszych przedsiwziciach zosta uzupeniony o atrakcyjn alternatyw, metodyki lekkie (ang. agile). Nowe podejcie zachca do porzucenia surowej dyscypliny i uznanie czstych zmian jako czego naturalnego i obecnego w rozwoju projektu. Wykraczanie poza stereotypy, ciga interakcja ze zleceniodawc (klientem), nowe wymagania i niekoczce doskonalenie tworzonego produktu oraz zespou projektowego s wybranymi zasadami bdcymi podstaw metodyk lekkich. Metodyki lekkie cechuje ich nacisk na zwikszenie roli zmiany w trakcie realizacji projektu. Scrum jest metod zarzdzania projektem, ktra wymaga od organizacji dojrzaoci, wypracowanych standardw oraz dodatkowego przygotowania w obszarze zarzdzania zmian i konfiguracj produktu.

Zarzdzanie zmian
Bez wzgldu na zastosowan metodyk prowadzenia projektu, wanymi kompetencjami, ja40

kie powinien posiada czonek zespou projektowego, s umiejtnoci mikkie. Zmiana oznacza zawsze co nowego, bdzie zawsze obecna nie tylko w projekcie, ale rwnie w wielu rnych dziedzinach ycia ludzi. W procesie zarzdzania zmian naley przekazywa atrakcyjn wizj i sens dziaania, jednoczenie wspierajc grup podczas realizacji trudnych przedsiwzi. Jeli chce si przekona zesp projektowy do nowej zmiany, wane jest, aby dobiera stosowny styl przywdztwa odpowiedni do zaistniaej sytuacji. W kontekcie metodyk lekkich obok stylu autorytarnego, leseferystycznego, gdzie wikszo spraw pozostawia si zespoowi, traktujc kierownictwo projektu jako jednostk ograniczon do roli nocnego stra, najodpowiedniejszy wydaje si styl demokratyczny. W projektach wystpuj sytuacje, w ktrych zesp nie prezentuje entuzjazmu wobec zmiany. Opr ludzi jest czym naturalnym, poniewa yjemy w wiecie, w ktrym ludzie kieruj si gwnie zasad wasnej korzyci. Podczas realizacji projektw mona napotka rne formy oporu. Przykadami s: spychanie na margines inicjatora, odwracanie uwagi od rzeczywistego problemu lub bezporedni, negatywny atak bojkotowanie nowej inicjatywy. W przypadku napotkania silnej ambiwalencji wskazanym jest powiedzenie jak to jest na prawd. Pene ujawnianie faktw i wnioskw z analiz konkretnych sytuacji trafia w emocje ludzi, co powoduje, e wysiek oraz chci wprowadzenia nowych zmian zostaj mocno zakotwiczone w umysach wsp-

uczestnikw projektu. W ten sposb projekt jest atwiejszy do zaakceptowania. Do najwaniejszych cech decydujcych o powodzeniu nale: konsekwencja w dziaaniu, dobry przykad dla zespou, ustalanie wiarygodnych, realnych celw (kryteriw osignicia celw) oraz budowanie zdrowych stosunkw midzyludzkich. Naley podkrela, e wszyscy powinni si otwarcie komunikowa i wsppracowa w celu osignicia kocowego sukcesu. Kiedy wsppracuje si w zespole o zdrowej, otwartej komunikacji, mona spotka ludzi penych energii i ycia. Maj oni poczucie przynalenoci, wiedz dokd id i czuj si potrzebni s elementarn i integraln czci zespou. Jest to zasug lidera, ktry jasno przekaza informacj o zmianach. Oprcz aspektu socjologicznego, zmian dokonuje si w produkcie, nad ktrym pracuje zesp. Aspekt techniczny zarzdzania zmian mona przybliy za pomoc kostki CCM.

Kostka CCM
W projektach opartych na metodykach tradycyjnych proces zarzdzania konfiguracj i zmian w produkcie definiuje trzy kluczowe funkcje. Funkcje te mona zilustrowa za pomoc kostki trjwymiarowej. Kostka CCM (ang. configuration change management) zostaa zaprezentowana na Rysunku 1. Funkcja zarzdzania wnioskami zamiany odpowiedzialna jest za pozyskiwanie i zarzdzanie zgoszeniami zmian pochodzcych od zewntrznych lub wewntrznych interesariuszy. Jest ona cile zwizana z analiz wpywu zmiany na biecy status rozwijanego produktu. Wniosek dotyczy nie tylko rozszerze istniejcej funkcjonalnoci systemu, ale wspiera rwnie wnioski usunicia istniejcych bdw, polepszenia jakoci produktu, jego wydajnoci lub dodania nowych wymaga zleceniodawcy.
06/2009

Zarzdzanie zmian w metodyce Scrum

Zarzdzanie konfiguracj jest cile zwizane ze struktur produktu. Kluczowym pojciem s artefakty, ktre definiuj struktur systemu. Przykadowe artefakty to pliki z kodem rdowym. Poszczeglne elementy podlegaj kontroli przy pomocy systemw zarzdzania wersjami oraz s rozwijane przez programistw w lokalnym rodowisku roboczym. Poszczeglne konfiguracje wchodz nastpnie w proces budowy wydania produktu. Wynikiem automatycznego procesu budowy systemu jest kolejna zaplanowana wersja systemu, ktra nastpnie jest instalowana u klienta. Poszczeglne atrybuty artefaktw i wnioskw zmian, takie jak status, priorytet lub rodzaj wniosku stanowi podstaw do sporzdzania raportw i metryk projektowych. Informacje o statusie poszczeglnych wnioskw mona analizowa w wielu wymiarach. Projekty oparte na metodyce Scrum cechuje dua zmienno. Do codziennej pracy niekiedy wkraczaj zmiany wprowadzane chaotycznie, ktre powoduj, e zasady oraz praktyki zostaj wypierane przez dziaania pozornie majce przybliy zesp do celu.

nia i znuenie osb biorcych udzia w zebraniu. Mimo tego, e zespoowi przywieca szczytny cel, moe doj do sytuacji, ktr mona okreli krtkim zdaniem -- zaatwmy to szybko i pjdmy do domu. Takie podejcie moe doprowadzi do bdnych szacunkw pracochonnoci poszczeglnych zmian, a w kocowym efekcie moe wywoa niech wrd czonkw zespou do przyjcia odpowiedzialnoci za zmian. Codzienne spotkania (ang. daily meetings), z zaoenia majce trwa krtko, suce do przekazania trzech grup informacji: co robiem wczoraj, co bd robi dzisiaj oraz czy wystpuj problemy blokujce dalsz prac, czsto przedua-

j si do dugich monologw. Nie mona nie zauway, e s to rwnie cenne informacje dla projektu, jednak wiadcz o braku przygotowania do spotkania. Brak ustalonych zasad w organizacji codziennych spotka wpywa na ich jako oraz zaangaowanie uczestnikw. Spnienia lub absencje wpywaj negatywnie na morale caego zespou, wzbudzaj umiechy na twarzach oraz s przedmiotem dalszych artw. Kolejnym problemem jest amanie zasad Scrum, ktra przejawia si odwoywaniem codziennych spotka z powodu innych wydarze w organizacji np. jednodniowego szkolenia. Czsto czonkowie zespou nastpnego dnia relacjonuj infor-

Jak zmienia si myn i co powoduje, e nam si nie udaje?


Jak zmienia si myn? No to pytanie mona odpowiedzie jednoznacznie bardzo dynamicznie. Na zesp projektowy, ktry nie jest dowiadczony praktycznie w stosowaniu metodyki Scrum, czekaj liczne puapki oraz niepowodzenia. Myn jest metodyk zarzdzania projektem, nie jest natomiast metod wytwarzania oprogramowania. Organizacja chcca wdraa Scrum musi posiada odpowiednie przygotowanie. Przed podjciem decyzji o wdroeniu naley zastanowi si nad stopniem zaawansowania wasnych procesw wytwrczych. Z uwagi na to, e myn jest metodyk lekk, nastawion na szybk reakcj na zmiany, sukces w jej stosowaniu w duej mierze zalee bdzie od etapu rozwoju firmy produkujcej oprogramowanie. Firmy dojrzae, bdce na poziomie optymalizujcym wedug modelu CMMI (ang. capability maturity model integration), pocztkowo osign znaczn przewag konkurencyjn. Problemy pojawiaj si na gruncie organizacji spotka. Planowanie kolejnego sprintu czsto trwa zbyt dugo, wymusza pozostanie duej w pracy oraz w kocowym etapie moe powodowa spadek zaangaowa-

Rysunek 1. Kostka CCM

Umiejtnoci menedera w procesie zarzdzania zmian


Wybr odpowiedniego stylu przwdztwa. Przeamywanie oporu wobec zmiany. Kompetentne komunikowanie zmian.

Rysunek 2. Ekran powitalny Agilo for Scrum

www.sdjournal.org

41

Warsztaty
macje dotyczce szkolenia, a zapominaj, co robili przedwczoraj. Do grupy negatywnych zjawisk mona zaliczy rwnie formuowanie wnioskw zmian w trakcie zebrania, ktre nie zostay zgoszone przed planowaniem sprintu. Czsto podczas spotka powstaj nowe atrakcyjne pomysy, propozycje rozszerzenia projektu np. o dodatkowe niezbdne opisy techniczne. Brak kontroli nad tymi wpywami, zaniechanie wprowadzania ich do puli zalegoci produktowych, sowne przyzwolenie na realizacj moe hamowa oraz mie negatywny wpyw na dalszy przebieg biecego sprintu. Z zaoenia czonkowie zespou Scrum dysponuj jednakowymi prawami. Moe zdarzy si, e ulege jednostki mog by pod wpywem osb prbujcych dominowa w zespole oraz zostan obarczone nieformalnymi i niewygodnymi dla siebie zadaniami. Takie postpowanie nie jest zgodne z manifestem agile, jest zaprzeczeniem zasady rwnoci, rdem konfliktw oraz wyrazem braku respektu wobec kolegw. Akceptowalna odpowiedzialno za realizacj konkretnej zmiany nie moe zosta przypisana, naley j po dokonaniu analizy zaakceptowa lub odrzuci. Jeli kierujcy projektem chce przypisa odpowiedzialno za now funkcjonalno, czonek zespou musi sam wiadomie zadecydowa, czy wemie j na siebie. Dodawanie nowych zmian podczas trwania sprintu, najczciej o wysokich lub krytycznych priorytetach, ktre pojawiy si nagle, nie jest zalecane. Nowe zadania, ktre w ostatecznoci mog zosta wczone to takie, ktre uniemoliwiaj poprawn prac kocowego uytkownika lub programisty. Ostatni grup problemw, ktre mog pojawi si w Scrumie, s problemy natury technicznej. Czsto zdarza si, e osoby decyzyjne, waciciel produktu, mistrz myna nie s dostpni w momencie, kiedy ich obecno jest niezbdna. Jest to problem, ktry moe si zdarzy si w kadej firmie. Wymaga on jednak rozwaenia, czy powsta w wyniku innych wanych zdarze, czy jest zwyczajnym zaniedbywaniem obowizkw. Ignorowanie czstych nieobecnoci osb decyzyjnych podczas trwania sprintu, moe wywoa problemy komunikacyjne oraz hamowa rozwj produktu. Postp sprintu mona odczyta z diagramu wygaszania sprintu (ang. sprint burndown chart). Firmy posiadajce tablic, na ktrej znajduj si aktualne zmiany do realizacji i aktualny stan kolejnej iteracji, niekiedy nie aktualizuj wydruku tego diagramu. Praktyka Scruma nakazuje jednak codzienn ich pielgnacj. Brak aktualnych danych na temat caociowego postpu prac zespou wywouje zdezorientowanie osb zarzdzajcych mynem oraz zaciera obraz rzeczywistego stanu, w ktrym znajduje si sprint. Z odsiecz przychodzi oprogramowanie, w ktrym raporty generowane s automatyczne, na podstawie biecego stanu wszystkich wnioskw wchodzcych w skad iteracji. Odpowiednia infrastruktura, stae miejsce, gdzie odbywaj si codzienne spotkania oraz planowanie sprintu, ale rwnie odpowiedni system wspierajcy zesp w codziennych zmaganiach w mynie, s obecnie standardem w organizacjach wykorzystujcych opisywan metodyk. Jednym z takich narzdzi jest tytuowy Agilo for Scrum.

Agilo for Scrum


Agilo for Scrum jest jednym z produktw otwartych, ktre wspieraj czynnoci procesowe metodyki Scrum. Produkt udostpniony jest na licencji Apache Software License (ASL) 2.0. Narzdzie bazuje na innym projekcie otwartym Trac. Trac jest produktem sucym do zarzdzania projektem. Posiada rwnie moduy umoliwiajce zarzdzanie zgoszeniami zmian. Twrcy Agilo for Scrum wykorzystali istniejc funkcjonalno oferowan przez Traca oraz dostosowali j do potrzeb myna. Poszczeglne zmiany w systemie np. bdy, nowe wymagania reprezentowane s za pomoc biletw (ang. tickets). Kady nowy bilet posiada swj identyfikator, priorytet, identyfikator autora, identyfikator osoby odpowiedzialnej za realizacj konkretnego wymagania lub historii uytkownika, temat oraz opis. Mona zaobserwowa komplementarno prezentowanego narzdzia z kostk CCM. Uytkownik ma moliwo zgoszenia nowego wniosku zmiany oraz kontrolowa postp prac za pomoc udostpnionych raportw. Narzdzie posiada przyjazny interfejs graficzny oraz jest wygodne w uyciu. Podczas pracy system nie wykazuje wadliwego dziaania oraz nie generuje bdw pochodzcych z jego wntrza. Obecna, rozwojowa wersja 0.6 nadaje si do wdroenia w maych, krtkich projektach. Instalacja Agilo for Scrum Instalacj naley rozpocz, instalujc najpierw narzdzie Trac. Trac wsppracuje z kilkoma bazami. Uytkownik ma moliwo wyboru pomidzy MySQL, baz PostgreSQL, a nawet SQLite w wersji 3.3.4. Podczas instalacji mona posuy si skryptem easy_install. Czynno ta jest prosta i ogranicza si do wydania polecenia easy_install
http://svn.edgewall.org/repos/trac/ tags/trac-0.11.

Rysunek 3. Nowy sprint w Agilo for Scrum

Po instalacji dystrybucji mona przystpi do konfiguracji. W tym

Funkcje procesu zarzdzania konguracj i zmian


Zarzdzanie wnioskami zmiany. Zarzdzanie konfiguracj. Kontrola statusu i pomiary.

Rysunek 4. Nowe wymaganie w systemie Agilo for Scrum

42

06/2009

Zarzdzanie zmian w metodyce Scrum

celu najatwiej wykorzysta narzdzie administracyjne trac-admin. Pierwszym krokiem jest stworzenie nowego projektu, ktry posuy w dalszej czci artykuu do prezentacji narzdzia Agilo for Scrum. Wydajc komend $ trac-admin /path/to/myproject initev, konfigurator pyta o nazw projektu, detale zwizane z baz danych, repozytorium rde projektu, a nastpnie tworzy struktur katalogw i plikw projektu w folderze myproject. Kolejnym krokiem jest konfiguracja praw dostpu oraz stworzenie uytkownikw systemu. Majc gotowy projekt mona przystpi do instalacji drugiego systemu, jakim jest Agilo for Scrum. Instalacja jest rwnie prosta i nie nastrcza trudnoci. W pierwszej kolejnoci naley pobra najnowsze wydanie produktu. Zamieszczone w archiwum pliki egg, naley skopiowa do katalogu plugin projektu oraz zarejestrowa i udostpni je dokonujc wpisw w pliku trac.ini. Majc gotowe rodowisko, moemy uruchomi lokalny serwer Trac. W tym celu wydajemy polecenie $ tracd --port 8000 /path/to/myproject. Agilo jest aplikacj webow, zatem korzystanie z niej moliwe jest za pomoc przegldarki internetowej. Uywajc polecenia http://localhost: 8000/myproject uruchamiamy aplikacj, pojawia si ekran powitalny Agilo, ktry zosta zaprezentowany na Rysunku 2. Przedstawiona procedura instalacji nie jest w peni wyczerpujca, zaleca si zapoznanie z dokumentacj zamieszczon na stronach domowych prezentowanych produktw. Istnieje rwnie wersja testowa Agilo for Scrum dostpna pod adresem https://agilo.agile42.com.

Kolejny sprint
Za definicj sprintu odpowiedzialny jest waciciel produktu oraz mistrz myna. Za pomoc pozycji z menu gwnego Roadmap wywietlamy list wszystkich kamieni milowych w projekcie. Na dole panelu znajduje si przycisk Add new milestone umoliwiajcy dodanie nowego kamienia milowego (sprintu). W celu zdefiniowania nowej iteracji, z poziomu panelu New milestone naley okreli jej nazw. W grupie plan (ang. schedule) wprowadzamy dat zakoczenia oraz podajemy charakterystyk kolejnej iteracji. Domylnie sprint rozpoczyna si od dnia jego zarejestrowania. Wybierajc przycisk Add milestone, zatwierdzamy nowy sprint. Na pocztku w sprincie o nazwie Sprint001 po-

stp prac wynosi 0%. Krok ten przedstawia Rysunek 3. Kady z czonkw zespou, waciciel produktu, osoby wyznaczone przez zleceniodawc maj moliwo wprowadzania nowych elementw do systemu. Nowy wniosek zmiany moemy wprowadzi z poziomu opcji menu Scrum Dashboard. Wybierajc funkcj Create a new Requirement mona utworzy nowe wymaganie. Zdefiniowane nowe wymaganie przedstawia Rysunek 4. Do kadego wymagania mona utworzy histori uytkownika. Przechodzc na kart Edit oraz wybierajc funkcj Create a new referenced User Story, uytkownik ma moliwo zdefiniowania nowej karty. Wypeniajc kart, naley poda krtki oraz rozszerzony opis zawierajcy ustalenia z klientem, przypisa odpowiedni iteracj, uytkownika odpowiedzialnego za kart oraz priorytet zmiany. Do kadej karty mona przypisa zadania. Z poziomu panelu User Story, przechodzc na zakadk Edit za pomoc funkcji Create a new referenced Task moemy utworzy zadania powizane z histori uytkownika. Wniosek zmiany dla bdw mona zdefiniowa za pomoc funkcji Create a new Bug z poziomu menu Scrum Dashboard. Wypeniajc wniosek, naley wprowadzi opis, przydzieli odpowiedni priorytet oraz sprint. Narzdzie umoliwia rwnie definiowanie przeszkd pojawiajcych si w trakcie projektu (ang. impediments). Ostatecznie list wszystkich utworzonych biletw mona obejrze korzystajc z opcji Timeline menu gwnego. Kontrol postpw prac zespou mona prowadzi w dowolnym czasie. Mistrz myna moe skorzysta z wykresw, ktre udostpnia funkcja Scrum Dashboard. Wybierajc t funkcj, pojawi si panel, ktry zo-

sta zaprezentowany na rysunku 5. Wykresy przedstawiaj postp prac w czasie rozpoczcia sprintu. Obcienie zadaniami poszczeglnych czonkw zespou w czasie rozpoczcia sprintu jest jednakowe. Prezentuje to wykres Sprint001 commitment. Najwaniejszym elementem jest wykres wygaszania sprintu. Planowany, idealny przebieg definiuje przerywana linia (ang. Ideal Burndown). Czonkowie zespou w miar rozwizywania kolejnych zada aktualizuj ich status oraz je zamykaj. W czasie trwania sprintu, kadego dnia krelona jest niebieska linia (ang. Actual Burndown), wskazujca na rzeczywisty postp prac. Czas reprezentuje o odcitych, pracochonno w godzinach o rzdnych. Ilo godzin potrzebnych na realizacj zmiany powizana jest cile z jej trudnoci oraz wartoci biznesow dla klienta, ktra wyraana jest w punktach (ang. story points). Jeeli linia znajduje si ponad wykresem idealnego przebiegu, jest to informacja, e sprint nie przebiega zgodnie z planem oraz istnieje niebezpieczestwo, e nie wszystkie zmiany z puli sprintu zostan zrealizowane. W tej sytuacji mistrz myna podczas codziennego spotkania zespou projektowego powinien ustali przyczyny zaistniaego opnienia. W przypadku, gdy niebieska linia na wykresie znajduje si pod przerywan lini, zesp wykonuje zadania szybciej ni jest to planowane. Jest to optymistyczna wiadomo, jednak sytuacja ta moe mie przeoenie na jako zrealizowanych zmian. Jak naprawd wyglda rzeczywisto, o tym zesp dowiaduj si w trakcie testw akceptacyjnych produktu. Kolejnym wykresem jest wykres supkowy (ang. Sprint tickets), prezentuje on wszystkie bilety przydzielone do sprintu w

Przykadowe raporty
Wykres wypalania sprintu. Ilo wnioskw wedug priorytetw w puli zalegoci produktowych (ang. product backlog). Ilo zmian wedug biecych statusw.

Rysunek 5. Stan postpw prac podczas rozpoczcia sprintu

www.sdjournal.org

43

Warsztaty
podziale na typy, bilety zaplanowane i ju zrealizowane. Wykres ten jest szczeglnie uyteczny w chwili, gdy potrzebna jest informacja na temat iloci zada ju zamknitych. Prezentowane raporty nie s pen list raportw dostpnych w Agilo for Scrum. Narzdzie umoliwia rwnie tworzenie wasnych raportw. stay wprowadzone trzy zadania o nazwach: SDJ Task 1, SDJ Task 2 oraz SDJ Task 3. Do zaimplementowania nowego raportu suy specjalnie przygotowana formatka. Z poziomu menu View Tickets moemy utworzy nowy raport, posugujc si przyciskiem Create New Report. W polu Report Title naley poda nazw raportu np. zadania przypisane do mnie, opis, a nastpnie w polu edycyjnym wprowadzi zapytanie SQL, ktre bdzie przeszukiwa baz danych Agilo for Scrum oraz pobiera dane do prezentacji. Tak przygotowany raport po zapisie w bazie danych systemu, zostanie wprowadzony na list Available Reports, ktra wywoywana jest z poziomu menu View Tickets. Kod rdowy przykadowego raportu zosta zaprezentowany na Listingu 1. Prezentowany raport moemy uruchomi z poziomu menu View Tickets. Klikajc wybran pozycj z tabeli, uruchamiamy wczeniej przygotowany raport. Wyniki dziaania polecenia SQL z listingu zostay zaprezentowane na Rysunku 6. Agilo for Scrum jest niewtpliwie ciekawym produktem, ktry jest stale rozwijany. W chwili pisania artykuu zosta uruchomiony nowy serwer testowy, ktry udostpnia najnowsz wersj 0.7 Agilo. Na pierwszy rzut oka interfejs uytkownika uleg diametralnym zmianom. Zmienio si menu gwne aplikacji, w nowej wersji umieszczone zostao w grnej czci okna. Pierwszy kontakt z now wersj mona oceni pozytywnie. Uatwieniem jest widoczna i atwiej dostpna funkcja wyszukiwania biletw. To czy nowy wygld Agilo for Scrum przypadnie uytkownikom do gustu, pokae czas, a czytelnikom pozostaje tylko zaproponowa samodzielne testy nowej wersji Agilo for Scrum.

Wasne raporty
Agilo oferuje standardowe raporty. Z raportw, ktre mona przetestowa na udostpnionym spoecznoci serwerze mona wymieni kilka, ktre mog sta si uyteczne podczas codziennej pracy. Na uwag zasuguje raport wywietlajcy list otwartych biletw w zadanym sprincie (ang. Active Tickets by Milestone). Raport ten grupuje wnioski zmian tj. historyjki uytkownika, wymagania, zadania oraz raporty bdw oraz sortuje je wedug kolejnych sprintw. Kolejnym raportem jest raport przypisanych wymaga (ang. Requirements assigned to me). Raport ten przedstawia list wymaga, ktre przypisane s do biecego uytkownika systemu. Bazujc na tym raporcie mona stworzy jego pochodne uwzgldniajce inne elementy np. zgoszone bdy w produkcie. W tym celu w systemie musz istnie przykadowe, wczeniej utworzone zadania. Dla przykadu do systemu zo-

Podsumowanie
Metodyki lekkie s jeszcze modymi produktami. Przedsibiorstwa staraj si poczy praktyki oraz dowiadczenie zdobyte podczas stosowania metodyk tradycyjnych z zaleceniami ze wiata rozwiza lekkich. Biorc pod uwag wyjtkowy charakter kadego z realizowanych projektw, adaptacja wiedzy i procesw wytwrczych kadej organizacji jest pocztkowo kosztowna. Posugujc si dalej wyprbowanymi rozwizaniami, koszty i czas realizacji procesu realizacji projektw zgodnie z wypracowanym przez organizacj standardem zmniejszaj si. Optymistyczna wizja sukcesu i oszczdnoci mog sta si faktami. W odpowiedzi na du dynamik zmian w projektach scrumowych sprawne zarzdzanie zmian przyczyni si do zminimalizowania wystpienia negatywnych zjawisk w projekcie. Oprogramowanie otwarte staje si coraz bardziej popularne i uyteczne. Problemem dla organizacji komercyjnych s uwarunkowania licencyjne oraz brak czsto profesjonalnego wsparcia ze strony producentw. Niektre licencje nakazuj udostpnianie wasnych rozszerze i modyfikacji spoecznoci np. GNU GPL. Dla sporej liczby przedsibiorcw oferujcych oprogramowanie o zamknitym kodzie fakt ten jest nie do zaakceptowania. Nie jest to regu, wic adaptacja darmowego, otwartego oprogramowania jest coraz powszechniejsza w projektach opartych na metodykach lekkich.

Listing 1. Kod rdowy raportu Zadania przypisane do mnie


SELECT id AS ticket, summary, cb.value AS "Business Value", _cb_i, (CASE WHEN NOT ISNUMERIC(cb.value) THEN 0 ELSE CAST (cb.value AS INTEGER) END) AS milestone,

owner, status,

description AS _description, reporter AS _reporter, time AS created, FROM ticket t

changetime AS _changetime LEFT OUTER JOIN ticket_custom cb ON (t.id = cb.ticket AND cb.name = 'businessvalue') WHERE status IN ('assigned', 'new') AND t.type = 'task' AND owner = '$USER' ORDER BY _cb_i DESC, milestone, time

W Sieci
Scrum Alliance http://www.scrumalliance.org Agilo for Scrum http://www.agile42.com Serwer testowy Agilo for Scrum https:// agilo.agile42.com Trac http://trac.edgewall.org

UKASZ LECHERT
Autor jest absolwentem specjalizacji Inynieria Oprogramowania Politechniki Wrocawskiej oraz Studium Podyplomowego Zarzdzanie Projektem na Uniwersytecie Ekonomicznym w Poznaniu. Interesuje si systemami wspierajcymi procesy logistyczne, zagadnieniami zarzdzania projektem oraz oprogramowaniem otwartym. Kontakt z autorem: lukasz.lechert@gmail.com

Rysunek 6. Wyniki dziaania raportu zadania przypisane do mnie

44

06/2009

Warsztaty

MS SQL Server kontenerem Web Service


Budowanie usug sieciowych w oparciu o MS SQL Server
Artyku ten przedstawia przydatn, lecz mao znan funkcjonalno MS SQL Servera, jak s usugi sieciowe. Posiadanie zewntrznego serwera utrzymujcego Web Service nie jest niezbdne. Sam serwer SQL moe wystawi interfejs w formie usugi sieciowej, upraszczajc cao budowanego systemu.
Dowiesz si:
Jak utworzy usug sieciow w obrbie MS SQL Server-a; Jak napisa procedur skadowan w jzyku C#; Czym s i do czego su punkty kocowe (End Points) w MS Sql.

Powiniene wiedzie:
Czytelnik powinien by zaznajomiony z serverem MS SQL oraz rodowiskiem Visual Studio 2005/2008; Czytelnik powinien zna podstawy jzyka T-SQL.

Poziom trudnoci

a rynku istnieje wiele systemw zarzdzania bazami danych (DBMS). Czsto s one postrzegane wycznie przez pryzmat podstawowych funkcjonalnoci, zwizanych z przechowywaniem i manipulowaniem danymi: tworzeniem tabel, relacji, indeksw czy wykonywaniem rnego typu zapyta. Tymczasem systemy DBMS posiadaj czsto dodatkowe moliwoci, pozwalajce na budowanie wasnych aplikacji atwiej i szybciej. Przykadem takiej dodatkowej funkcjonalnoci jest moliwo budowania usug sieciowych (Web Service) za pomoc MS SQL Servera. W praktyce czsto spotyka si rozwizania, w ktrych dostp do danych realizowany jest przy pomocy poredniej warstwy niezaleny Web Service. Ma ona na celu ukrycie specyfiki warstwy danych i pokazaniu jej wycznie poprzez interfejs, udostpniajcy podan funkcjonalno. Jest to istotne, szczeglnie w rodowiskach heterogenicznych, gdzie musz ze sob wsppracowa systemy wykonane w rnych technologiach i realizujce rne zadania.
46

Projektujc warstw danych dla takiego rodowiska trzeba rozway sposb dostpu do niej innych aplikacji czy systemw. W tym celu czsto stosuje si usugi sieciowe, ktre w sobie znany sposb (np. za pomoc JDBC i ODBC), cz si z baz danych, pobieraj informacje i zwracaj je klientowi. W ten sposb nie musi on wdawa si w to, co tak naprawd te dane przechowuje i w jaki sposb s one zorganizowane. W praktyce czsto powstaj usugi sieciowe zupenie zewntrzne wzgldem bazy danych, ktre stanowi dodatkowy element caego systemu. Tymczasem korzystajc z MS SQL Server-a mona unikn koniecznoci stosowania odrbnego kontenera Web Service i bezporednio zaimplementowa usug sieciow w obrbie serwera bazodanowego przy pomocy jzyka T-SQL. Takie podejcie zmniejsza zoono caego rozwizania, redukuje liczb elementw, zmniejszajc ryzyko bdu oraz skraca czas wytworzenia. W dalszej czci artykuu na przykadzie prostej aplikacji przedstawi, w jaki sposb mona zbudowa usug sieciow, dziaajc w oparciu o MS SQL Server i jak jej uy w aplikacji klienckiej.

ty kocowe (endpoints). Oglnie mwic, terminem endpoint w architekturze SOA okrela si punkt wejcia do usugi, czyli swoisty interfejs, przez ktry usugi mog si ze sob komunikowa. Zgodnie z ujciem oglnym, endpoint-y w serwerze MS SQL su do komunikacji z klientami. S obiektami serwera, przez ktre odbywa si wymiana informacji ze wiatem zewntrznym. Kady z nich przeznaczony jest dla specyficznego typu komunikacji, ktra moe odbywa si za porednictwem protokow TCP lub HTTP. Wykorzystywane s one midzy innymi przez Service Broker, czyli platform w obrbie serwera MS SQL umoliwiajc asynchroniczn komunikacj pomidzy dowolnymi komponentami/ bazami danych. Korzysta z nich take mirroring baz danych. wieo po instalacji MS SQL Servera tworzone s punkty kocowe dla
Listing 1. Zapytanie tworzce punkt kocowy
CREATE ENDPOINT nazwa AS HTTP ( STATE = STARTED

AUTHENTICATION = ( INTEGRATED ) ,PATH = '/sql' ,SITE = 'serwer'

,PORTS = ( CLEAR ) ) ,CLEAR_PORT = 888

FOR SOAP (

WEBMETHOD 'nazwa_metody1' procedury1')

(NAME = 'baza_danych.schemat.nazwa_

Czym jest Endpoint w MS SQL Server


W celu stworzenia usugi sieciowej na serwerze MS SQL musimy zdefiniowa tzw. punk-

,WEBMETHOD 'nazwa_metody2' procedury2')

(NAME = 'baza_danych.schemat.nazwa_

06/2009

MS SQL Server kontenerem Web Service

czterech protokow (TCP/IP, Shared Memory, Named Pipe, VIA) wspierajcych wymian danych pomidzy serwerem i klientami w oparciu o protok TDS (Tabular Data Stream) . Istnienie standardowych endpoint-w mona sprawdzi wykonujc zapytanie select na widoku dynamicznym sys.endpoints (select * from sys.endpoints). Zapytanie zwrci punkty kocowe dla wspomnianych protokow, jak rwnie jeden dodatkowy wykorzystywany przez Dedicated Admin Connection. Pozwala on administratorom na poczenie z serwerem MS SQL gdy ten nie odpowiada na prby ustanowienia poczenia w konwencjonalny sposb. W tym artykule zdefiniujemy punkt kocowy typu HTTP, przyjmujcy i odpowiadajcy na zapytania SOAP. Utworzony endpoint bdzie eksponowa metody zdefiniowane przez procedury skadowane (stored procedures) serwera. Eksponowane metody bd nastpnie woane przez aplikacje klienckie. Aby zdefiniowa endpoint naley posuy si zapytaniem T-SQL, ktrego przykad zamieciem na Listingu 1. W zasadzie zapytanie to prezentuje niewielki fragment swoich moliwoci, jednak dla naszego przykadu jest on wystarczajcy. Referencj do penej definicji zapytania oraz dodatkowych informacji na temat endpoint-w w MS SQL Server mona znale wrd zaczonych do artykuu linkw. Definiujc usug sieciow musimy, w pierwszej kolejnoci, zdefiniowa jej nazw, ktra stanie si nazw Web Service'u. Dugim w kolejnoci parametrem jaki naley okreli jest stan, w jakim bdzie si on znajdowa zaraz po utworzeniu. Punkt kocowy moe znajdowa si w jednym z trzech stanw: STARTED nasuchuje pocze, DISABLED nie nasuchuje i nie odpowiada na poczenia lub STOPPED nasuchuje pocze i zwraca bd w odpowiedzi. Kolejny krok to blok okrelajcy ustawienia, dotyczce protokou wykorzystywanego przez punkt kocowy. Na Listingu 1. blok ten zawiera parametr ustawiajcy sposb uwierzytelniania (AUTHENTICATION). W tym przypadku ustawiony jest tak, aby wykorzysta mechanizm uwierzytelniania systemu Windows. Nastpny w kolejnoci parametr PATH definiuje fragment adresu URL, znajdujcy si po nazwie serwera, ktra z kolei ustawiana jest przy pomocy parametru SITE. Ostatni w bloku parametr PORTS ustawia porty nasuchiwania. CLEAR w tym przypadku oznacza, e tylko dania HTTP bd przyjmowane. Drugi blok zapytania tworzcego endpoint dotyczy metod przez niego udostpnianych. To tutaj zdefiniowane s nazwy metod widoczne z zewntrz oraz procedury
www.sdjournal.org

skadowane, ktre stanowi implementacj tych metod. Dodatkowo blok ten moe zawiera inne parametry, opisujce zachowanie usugi sieciowej. Na Listingu 1. widoczny jest parametr WSDL, ktry okrela czy w odpowiedzi na zapytanie kierowane do usugi sieciowej ma by generowany jej opis w jzyku WSDL. Utworzony endpoint moe by uyty przez uytkownikw bedcych w roli sysadmin lub uytkownika bdcego wacicielem utwo-

rzonego punktu kocowego. Jest to ustawienie domylne. Aby je zmieni i zezwoli rwnie innym uytkownikom na poczenia do stworzoengo punktu kocowego naley nada im uprawnienie CONNECT. Mona tego dokona wykonujc zwyke polecenie GRANT:
grant connect on http endpoint::nazwa to [uytkownik].

Wykorzystanie praktyczne
Aby zilustrowa dziaanie usug sieciowych stwrzmy prosty system, skadajcy si z ba-

Listing 2. Zapytania tworzce prost baz danych na potrzeby przykadu


USE master GO -- usu baz jesli istnieje i utwrz j na nowo IF (exists(SELECT * FROM sys.databases WHERE [name] = 'shop')) GO GO DROP DATABASE shop

CREATE DATABASE shop

-- przecz si do utworzonej bazy danych USE shop GO --utwrz tabel przechowujc produkty CREATE TABLE dbo.tb_product( id int IDENTITY(1,1) PRIMARY KEY, [name] varchar(300) NOT NULL, [count] int NOT NULL, ) price money NOT NULL [description] varchar(2000) NULL,

GO

--utwrz tabel przechowujc zamwienia CREATE TABLE dbo.tb_order( date datetime NOT NULL, ) id int IDENTITY(1,1) PRIMARY KEY, customer_name varchar(300) NOT NULL,

GO

--utwrz tabel przechowujc relacje pomidzy --zamweniami i produktami CREATE TABLE dbo.tb_order_product( comment varchar(2000) NULL, quantity int NOT NULL, tb_order_id int NULL, ) id int IDENTITY(1,1) PRIMARY KEY,

tb_product_id int NOT NULL,

GO

-- utwrz referencj pozycja zamwienia -> zamwienie ALTER TABLE dbo.tb_order_product WITH CHECK ADD CONSTRAINT FK_tb_order_product_tb_order FOREIGN KEY(tb_order_id) REFERENCES dbo.tb_order (id)

GO

-- utwrz referencj pozycja zamwienia -> produkt ALTER TABLE dbo.tb_order_product WITH CHECK ADD CONSTRAINT FK_tb_order_product_tb_product

FOREIGN KEY(tb_product_id) REFERENCES dbo.tb_product (id)

47

Warsztaty
zy danych, usugi sieciowej oraz prostej aplikacji klienckiej, czcej si z Web Service'm. Baza danych i usuga sieciowa umieszczone bd w obrbie serwera SQL, natomiast aplikacje klienckie czy si bd z dowolnej maszyny, znajdujcej si w tej samej domenie co serwer. W pierwszej kolejnoci utworzymy prost baz danych, przechowujc dane o produktach i zamwieniach dotyczcych tych produktw. Diagram naszej przykadowej struktury danych znale mona na Rysunku 1. Skada si bdzie ona z trzech tabel, ktre w zupenoci wystarcz do tego, aby zaprezentowa dziaanie usugi sieciowej. Nasza baza danych bdzie zawiera informacje o produktach, takie jak: nazwa, opis, a take cena za sztuk i liczb sztuk danego produktu znajdujc si na stanie magazynu. Druga tabela zawiera bdzie informacje o zamwieniach dotyczcych produktw. Posiada bdzie kolumny, takie jak dat zoenia zamwienia oraz nazw klienta, ktry skada zamwienie. Produkt z zamwieniem skojarzony bdzie za porednictwem tabeli Tb_ order_product. Tabela ta dodatkowo bdzie zawiera informacje o zamwionej iloci danego produktu i przechowywa dodatkowe komentarze do zamwienia. Majc tak zdefiniowan struktur nie pozostaje nic innego, jak tylko napisa skrypty tworzce baz danych (Listing 2). Najpierw tworzymy baz danych, a nastpnie opisane wyej tabele, zachowujc ich wzajemne relacje. Baza danych jest gotowa, musimy teraz okreli interfejs do niej, z ktrego bd mogy korzysta aplikacje klienckie. Na potrzeby prezentacji mechanizmu usug sieciowych zdefiniujmy dwie metody zwracajce dostpne produkty oraz zamwienia zoone przez okrelonego parametrem wejciowym klienta.

Listing 3. Procedura skadowana pobierajca dane o produktach


IF (object_id('dbo.p_get_products','P') is not null) GO AS GO DROP PROCEDURE dbo.p_get_products

CREATE PROCEDURE dbo.p_get_products SELECT * FROM dbo.tb_product

Listing 4. Procedura skadowana, napisana w jzyku C#


using System;

using System.Data;

using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] {

public static void GetOrdersByCustomer(string customer) SqlConnection conn = new SqlConnection();

Tworzenie usug sieciowych


eby stworzy usug sieciow, musimy najpierw utworzy procedury skadowane, ktre bd realizoway funkcjonalno eksponowan przez Web Service. Pierwsz z procedur, zwracajc dostpne produkty, zdefiniujemy w tradycyjny sposb, uywajc jzyka T-SQL. Metoda ta bdzie zwraca rekordy z tabeli tb_product, w sposb przedstawiony na Listingu 3. Jak wida na Listingu 3. procedura jest zwykym zapytaniem zwracajcym wszystkie wartoci z tabeli tb_product. Oczywicie zapytanie to moemy dowolnie komplikowa i w ten sposb, korzystajc z dobrodziejstw jzyka T-SQL, pisa bardziej zaawansowane metody usugi sieciowej. Moe si tak zdarzy, e jzyk T-SQL stanie si niewystarczajcy bd napisane zapytanie jest tak zoone, e zaczyna by mao wydajne. Moemy posuy si platform .Net do napisania procedury skadowanej CLR (CLR Stored Procedure). Napiszmy wic procedur drug, zwracajc zamwienia zoone przez danego klienta, w jzyku C#. W tym celu otwieramy Visual Studio 2008 i tworzymy projekt typu SQL Server Project. Nazwa projektu moe by dowolna, w moim przypadku nazywa si on ShopProcedure. Po utworzeniu projektu dodajemy do niego nowy element typu Stored Procedure, ktry rwnie nazywamy, na przykad GetOr06/2009

//Bdzie wykorzystywane poczenie istniejce w kontekcie. Procedura //bdzie wykonywana wewntrz SQL Server-a, dlatego nie ma potrzeby //definiowania metod logowania. conn.ConnectionString = "Context Connection=true"; SqlCommand cmd = new SqlCommand(); SqlDataReader rdr = null; try { cmd.Connection = conn; cmd.CommandText =

//Definiujemy zapytanie w sposb klasyczny @"SELECT O.id 'Order ID', P.[name] 'Product', OP.quantity

'Quantity', O.date 'Date', O.customer_name 'Customer' FROM dbo.tb_order O

join dbo.tb_order_product OP on O.id = OP.tb_order_id join dbo.tb_product P on P.id = OP.tb_product_id

conn.Open();

WHERE O.customer_name = '" + customer + "'";

//Wyniki zapytania zwracane jako standardowy zbir rekordw... rdr = cmd.ExecuteReader(); //... ale wyniki oddajemy serwerowi, zamiast np. je wywietla. SqlContext.Pipe.Send(rdr); } { finally rdr.Close();

conn.Close();

48

MS SQL Server kontenerem Web Service

dersByCustomer. W konsekwencji do projektu dodany zostaje plik zawierajcy zacztek klasy, ktra stanowi implementacj procedury wbudowanej. Teraz nie pozostaje nic innego, jak tylko wypeni szablon klasy kodem zwracajcym zamwienia na podstawie nazwy klienta. Szczegy implementacji wraz z opisem istotnych elementw zawiera Listing 4. W zasadzie jest to zwyczajne wykonanie zapytania na bazie danych z uyciem klas ADO .NET. Jednak warto zwrci uwag na dwa niuanse, tj. definicj connection string i sposb zwracania wynikw zapytania. acuch poczenia wskazuje na kontekst. Naley pamita, e kod ten bdzie uruchamiany z wntrza SQL serwera, dlatego nie ma potrzeby podawania informacji o logowaniu std zredukowana forma connection string. Zwracanie wynikw rwnie nieco odbiega od norm znanych ze standardowych aplikacji. Zamiast wypisywa dane na konsol, czy jakiekolwiek inne GUI, s one z powrotem oddawane serwerowi w linii SqlContext.Pipe. Send(rdr). Waciwo Pipe daje dostp do obiektu, ktry pozwala na przekazywanie komunikatw do kontekstu wywoania, ktrym w tym przypadku jest serwer SQL. Poza wspomnianymi niuansami warto jeszcze zwrci uwag na atrybut, ktrym zostaa opatrzona metoda. Dostarcza on informacji dla Visual Studio, i metoda jest implementacj procedury skadowanej i naley j utworzy na serwerze po zbudowaniu projektu. W naszym przypadku nie bdzie to konieczne, gdy utworzymy procedur skadowan w oparciu o mtetod klasy StoredProcedure rcznie. Stworzon klas musimy zbudowa do postaci biblioteki DLL, a nastpnie zarejestrowa na serwerze SQL. Czynno t mona wykona za pomoc zapytania T-SQL, zamieszczonego na Listingu 5. Zbudowana DLL-ka zostanie zarejestrowana na serwerze pod nazw ShopAssembly. Nasza biblioteka zostanie zarejestrowana na najbardziej restrykcyjnym poziomie SAFE, ktry zabrania jej dostpu do zasobw zewntrznych, takich jak: pliki, rejestr systemowy czy sie. Jeeli zachodzi potrzeba poluzowania uprawnie, parametr PERMISSION_SET moe otrzyma warto EXTERNAL_ACCESS lub UNSAFE. Wtedy moliwy jest dostp do zasobw zewntrznych, a nawet wykonywanie kodu niezarzdzanego. Pozostaje jeszcze ostatnia czynno do wykonania, aby procedura skadowana, napisana w jzyku C# , moga zosta uruchomiona. Musimy stworzy wrapper, ktry wywoa odpowiedni metod z zarejestrowanej biblioteki. W tym przypadku wrapper to procedura skadowana, ktra nie zawiera wasnego kowww.sdjournal.org

du, definiuje jedynie wejcie i wyjcie oraz wskazuje bibliotek, w ktrej znajduje si metoda stanowica jej ciao. Musimy zwrci szczegln uwag na mapowanie parametrw. W naszym przypadku zdefiniowana

metoda GetOrdersByCustomer przyjmuje jeden parametr typu string. Z poziomu SQL musi on zostac zamapowany na typ nvarchar (nazwa parametru nie jest istotna). Ostatni czynnoci jest wskazanie biblioteki i meto-

Rysunek 1. Struktura przykadowej bazy danych

Listing 5. Rejestracja biblioteki DLL na serwerze MS SQL


--usu bibliotek jeli bya ju zarejestrowana if (exists(SELECT * FROM sys.assemblies WHERE [name] = 'ShopAssembly')) GO DROP ASSEMBLY ShopAssembly

--zarejestruj bibliotek na nowo CREATE ASSEMBLY ShopAssembly FROM 'd:\ShopProcedure.dll'

GO

WITH PERMISSION_SET = SAFE; --nadaj najbezpieczniejszy zestaw uprawnie

Listing 6. Stworzenie wrappera dla metody zdeniowanej w bibliotece DLL


--usu istniejc procedur IF (object_id('p_get_order_by_customer','PC') is not null) GO DROP PROCEDURE dbo.p_get_order_by_customer

--stwrz procedur na nowo CREATE PROCEDURE dbo.p_get_order_by_customer ( ) @Customer nvarchar(300)

--ciao procedury definiuje metoda z zarejestrowanej biblioteki AS EXTERNAL NAME ShopAssembly.StoredProcedures.GetOrdersByCustomer

Listing 7. Zapytanie deniujce usug sieciow


CREATE ENDPOINT ShopWS AS HTTP ( STATE = STARTED

AUTHENTICATION = ( INTEGRATED ) ,PATH = '/shop' ,SITE = 'localhost' ,PORTS = ( CLEAR ) ,CLEAR_PORT = 999 w celu uniknicia moliwych kolizji definiujemy inny port ni

domylny; 80

FOR SOAP (

WEBMETHOD 'GetOrderByCustomer' ,WEBMETHOD 'GetProducts' ,WSDL = DEFAULT

(NAME = 'shop.dbo.p_get_order_by_customer') (NAME = 'shop.dbo.p_get_products')

49

Warsztaty
dy, ktra ma zosta uruchomiona w czasie wykonywania procedury skadowanej. Na Listingu 6. parametr EXTERNAL NAME wskazuje odpowiednio na zarejestrowan bibliotek oraz na klas i jej metod, ktra ma zosta uruchomiona. Przed wykonaniem procedury p_get_ order_by_customer powinnimy upewni si, czy serwer pozwala na uruchamianie procedur skadowanych CLR. Aby tego dokona, musimy wykona polecenie
Listing 8. Przykadowa aplikacja kliencka
using System; 'clr enabled' i upewni si, e warto pola run_value w zwrconym wyniku polecenia jest ustawiona na 1. W przeciwnym razie prba uruchomienia procedury skoczy si bdem. Jeeli pole to zawiera warto 0, naley przestawi je na warto 1, wykonujc kolejno polecenia: sp_configure 'clr enabled', 1 i reconfigure. Teraz moemy uruchomi nasz procedur bez bdw. Wicej informacji na temat procedur sp_configure i sp_configure

mona znale w ramce Konfiguracja serwera.


reconfigure

using System.Data;

using System.Security.Principal; using System.Linq; using System.Text;

using System.Collections.Generic;

using System.ServiceModel; using ShopApp.ShopWS; namespace ShopApp { class Program { static void Main(string[] args) { ShopWS.ShopWSSoapClient shopClient = new ShopWSSoapClient(); try { BasicHttpBinding binding = new BasicHttpBinding();

binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; e.Ntlm;

binding.Security.Transport.ClientCredentialType = HttpClientCredentialTyp shopClient.Endpoint.Binding = binding; shopClient.Open(); object[] result = shopClient.GetProducts(); DataSet resultSet = (DataSet)result[0]; foreach (DataRow row in resultSet.Tables[0].Rows)

Deniowanie interfejsu usugi sieciowej Majc zdefiniowane i dziaajce procedury skadowane, musimy jeszcze powiza je z nasz usug sieciow. Do tego celu wykorzystamy zapytanie tworzce punkt kocowy, a ktre byo omwione w pocztkowej czci artykuu. Najpierw definiujemy nazw Web Service ShopWS. Nastpnie musimy zdefiniowa URL, pod ktrym bdzie dostpna usuga. Definiujemy kolejno: nazw serwera (localhost), port (999) i lokalizacj w obrbie serwera (\shop). Ostatecznie nasza usuga sieciowa dostpna bdzie pod adresem http://localhost:999/shop. Pozostaje jeszcze okreli sposb uwierzytelniania w naszym przypadku bdzie to tryb korzystajcy z uwierzytelniania Windows (Integrated). Po ustaleniu nazwy i adresu tworzonej usugi sieciowej, musimy jeszcze wskaza jej metody nazwa je i przypisa im odpowiednie procedury wbudowane. Wczeniej zdefiniowalimy dwie procedury wbudowane p_get_order_by_customer i p_get_products, ktre teraz stan si metodami usugi i bd widoczne z zewntrz pod nazwami odpowiednio: GetOrderByCustomer i GetProducts. Kompletne zapytanie tworzce punkt kocowy dla usugi znajduje si na Listingu 7. Majc tak zdefiniowane zapytanie nie pozostaje nic innego, jak tylko uruchomi je, a nastpnie sprawdzi czy usuga sieciowa dziaa. czenie si z usug eby zweryfikowa poprawno dziaania naszej usugi napiszmy prost aplikacj konsolow w Visual Studio 2008. Zadaniem aplikacji bdzie podczenie si do usugi sieciowej, a nastpnie wywoanie obu zdefiniowanych wczeniej metod i wypisanie wynikw ich dziaania na ekran. Uruchamiamy Visual Studio 2008 i tworzymy projekt aplikacji konsolowej w jzyku C#. Nastpnie dodajmy do projektu referencj do usugi sieciowej (Service Reference). Jako adres usugi podajemy wczeniej zdefiniowany URL, dodajc na kocu sufiks ?wsdl (http://localhost:999/shop?wsdl). Po wyszukaniu w oknie dialogowym pojawia si zdefiniowana przez nas nazwa usugi sieciowej ShopWS oraz jej obie metody. Dodajemy referencj do usugi i odwoujemy si do niej z kodu w celu wykorzystania jej metod. Musimy pamita o wybranym w czasie definiowania sposobie uwierzytelniania. Pocztkowe linie Listingu 8. pokazuj, w jaki sposb ustawi odpowiedni sposb uwierzytelniania, korzystajc z klas BasicHttpBinding oraz HttpClientCredentialType Windows
06/2009

Console.WriteLine("{0,3}|{1,15}|{2,15}|{3,15}|{4,15}",

row[0],row[1],row[2],row[3],row[4]);

result = shopClient.GetOrderByCustomer("Carex"); resultSet = (DataSet)result[0]; foreach (DataRow row in resultSet.Tables[0].Rows) } {

Console.WriteLine("{0,3}|{1,15}|{2,5}",row[0],row[1], row[2]);

finally shopClient.Close(); Console.ReadLine();

50

MS SQL Server kontenerem Web Service

Foundation. Nastpnie pozostaje nam ju tylko wywoa odpowiednie metody ze zdefiniowanej usugi sieciowej. Ich wyniki wypisujemy na ekran, eby sprawdzi czy rzeczywicie nasza usuga sieciowa dziaa. Przykadowy program przedstawia Listing 8. Pozostaje jeszcze wypeni zdefiniowane w bazie danych tabele przykadowymi danymi i uruchomi program testowy. Communication

Kwestie ochrony dostpu


Usugi sieciowe, zgodnie ze swoim przeznaczeniem, s dostpne dla szerszej grupy uytkownikw. Niesie to za sob niebezpieczestwo, e do danej usugi uzyska dostp kto niepowoany bd zostanie ona uyta w niewaciwy sposb przez kogo, kto ma do niej dostp. Tworzc web service'y w oparciu o MS SQL Server, a w zasadzie definiujc dla nich punkty kocowe, naley zwrci uwag na aspekty zwizane z ochron. Przewijaj si one na wielu poziomach definicji. Microsoft mwi tu wrcz o siedmiu poziomach ochrony, zaliczajc do nich wybr protokou komunikacji (TCP, HTTP) oraz definiowanie rodzaju przesyanych danych. Parametry te pozwalaj na precyzyjne zdefiniowanie ruchu przechodzcego przez dany endpoint, ale w moim odczuciu nie wnosz one wiele do samej ochrony punktu kocowego. Z punktu widzenia administracji serwera baz danych znaczenie ma manipulowanie stanem endpoint-u, ktre powinno kierowa si zasad domylnie wyczony. Jeeli punkt kocowy nie jest wykorzystywany, powinien by przestawiony w stan STOPPED. Kada prba poczenia do usugi zakoczy si wtedy informacj o bdzie. Takie podejcie eliminuje moliwo wejcia do systemu przez zapomniany, ale cigle dziaajcy, endpoint. Kluczowymi dla ochrony usug sieciowych s parametry pozwalajce na konfigu-

racj sposobu uwierzytelniania oraz zabezpieczanie transmisji danych. Tworzc endpoint mamy do wyboru dwie metody uwierzytelniania. Pierwsza z nich zintegrowana jest z Windows, a druga bazuje na certyfikatach. W przypadku, gdy nasz system dziaa w obrbie zaufanej domeny zalecanym rozwizaniem jest uwierzytelnianie Windows, tak jak to miao miejsce w zaprezentowanym przykadzie (warto INTEGRATED parametru AUTHENTICATION). Jeeli natomiast usuga woana jest z miejsc odlegych nieznajdujcych si w obrbie domeny, celowym staje si uycie certyfikatw w celu uwierzytelnienia strony chccej uzyska dostp do usugi. W celu zabezpieczenia samej wymiany danych pomidzy serwerem a klientem warto zastanowi si nad uyciem szyfrowania. Parametr PORT pozwala na okrelenie czy dane maj by przesyane otwartym tekstem, wtedy jego warto powinna by ustawiona na CLEAR, czy zaszyfrowane parametr ustawiony na SSL. W prezentowanym przykadzie transmisja danych odbywaa si z uyciem protokou HTTP brak szyfrowania. Logowanie si do usugi sieciowej jest zorganizowane podobnie jak do serwera SQL. Moemy tutaj korzysta z konta Windows albo z loginu SQL. W pierwszym przypadku parametr LOGIN_TYPE powinien posiada warto WINDOWS, taka te jest jego warto domylna, w drugim MIXED. Niezalenie od samej definicji endpoint-u, moliwe jest rwnie nadawanie uprawnie do niego tak jak do kadego innego obiektu serwera MS SQL. Moemy nadawa i odbiera uprawnienia do pocze (CONNECT), ale rwnie do modyfikacji definicji punktu kocowego (ALTER) uniemoliwiajc niepowoanym uytkownikom modyfikacje od strony serwera bazy danych. Warto mie ten aspekt na uwadze aby unikn niepodanych modyfikacji stanu endpoint-u jak rwnie zmian w jego definicji.

Podsumowanie
Jak wida na przykadzie zaprezentowanym powyej, nie zawsze trzeba siga po zewntrzne wzgldem bazy danych rozwizania, aby zaimplementowa warstw dostpu do danych. W moim artykule zosta przedstawiony sposb na zbudowanie prostej usugi sieciowej w obrbie serwera MS SQL. W niektrych, bardziej skomplikowanych rozwizaniach, niezbdne jest uycie bardziej zaawansowanych rozwiza ni te zaprezentowane w artykule. Nie mniej jednak, w zdecydowanej wikszoci systemw o rednim stopniu skomplikowania, zaprezentowany mechanizm jest wystarczajcy i znacznie prostszy w uyciu ni korzystanie z dowolnego zewntrznego kontenera w celu implementacji usugi sieciowej. Oczywicie moliwoci konfiguracji zaprezentowanego Web Service'u s znacznie szersze. Zachcam wic do zapoznania si z pen specyfikacj zapytania tworzcego endpoint, do ktrej link umieciem w sekcji W Sieci. Zachcam rwnie do zapoznawania si z mniej popularnymi funkcjonalnociami systemw DBMS, w szczeglnoci MS SQL Server, gdy potrafi one w znacznym stopniu uatwi zadania, takie jak: synchronizacja, odzyskiwanie i transferowanie duych iloci danych, manipulowanie treci XML, czy kolejkowanie i wykonywanie zada w oparciu o wewntrzne mechanizmy i struktury serwera. Dziki temu nasza praca staje si atwiejsza, a jej wyniki s szybciej widoczne i mniej awaryjne podczas pracy w rodowisku docelowym.

GRZEGORZ TOMASZEWICZ
Autor tekstu pracuje na stanowisku Software Engineer w rmie Infoprojekt, jest rwnie doktorantem na wydziale Elektroniki Telekomunikacji i Informatyki Politechniki Gdaskiej. Na co dzie zajmuje si tworzeniem aplikacji w oparciu o MS SQL Server i platform .Net. Kontakt z autorem: grzegorz.tomaszewicz@gmail.com

W Sieci
http://msdn.microsoft.com/en-us/library/ms181591.aspx; http://www.simple-talk.com/content/print.aspx?article=407 .

Konguracja serwera

Do konfiguracji serwera suy procedura sp _ configure, ktra pozwala zarwno na wywietlanie biecej konfiguracji, jak i jej zmiany. Po wykonaniu tej procedury zwrcona zostanie lista wierszy, zawierajcych opcje konfiguracji. Kady wiersz zawiera wartoci, takie jak: nazwa opcji (name), warto bieca (run _ value) oraz warto ustawion przez procedur sp _ configure (config _ value) Niektre z opcji w konfiguracji nie mo. g zosta wprowadzone bezporednio w ycie przez sp _ configure, dlatego konieczne jest po ustawieniu nowej konfiguracji wykona polecenie reconfigure. Dopiero wtedy warto z kolumny config _ value przenoszona jest do kolumny run _ value . W naszym przypadku musimy zmieni konfiguracj serwera tak, aby moliwe byo uruchamianie procedur skadowanych CLR. W tym celu naley zmieni warto z wiersza clr enabled tak, aby kolumna run _ value zawieraa warto 1. Aby tego dokona trzeba kolejno wykona procedur sp _ configure, podajc jako parametr nazw opcji, czyli clr enabled . Drugim parametrem, ktry naley wprowadzi, jest warto opcji, ktr chcemy ustawi, czyli 1. Nasze wywoanie bdzie wic wyglda tak: sp _ configure 'clr enabled', 1. Konfiguracja zmieni si, ale nie zostanie wprowadzona w ycie, dopki nie wykonamy polecenia reconfigure. Aby mie pewno, e nowa konfiguracja zostaa wprowadzona w ycie, wykonajmy polecenie sp _ configure i sprawdmy, czy warto kolumny run _ value w wierszu zawierajcym nazw clr enabled wynosi 1. Jeli tak, procedury skadowane, napisane przy uyciu Visual Studio, mog by uruchamiane.

www.sdjournal.org

51

Warsztaty

Windows Installer Xml


Budowanie natywnych instalatorw dla rodowiska Windows
Windows Installer Xml jest projektem pozwalajcym na tworzenie instalatorw na platform Windows. Projekt ma status open source i jest bardzo szeroko uywany zarwno przez sam Microsoft, due firmy, oraz inne projekty open source. Wersja 3 zostanie wczona do rodowiska Visual Studio 2010 firmy Microsoft.
Dowiesz si:
Co to jest Windows Installer; Jaka jest historia powstania, kto jest autorem i status Windows Installer Xml; Jak zbudowa instalator dla platformy Windows w pliku .msi; Jak doda interfejs uytkownika do swojego instalatora; Jak dodawa linki na pulpit/do menu start; Jak zatroszczy si o aktualizacj swojej aplikacji.

Powiniene wiedzie:
Jak wyglda obsuga plikw XML w Visual Studio; Jak swobodnie porusza si w Visual Studio; Jak zarzdza projektami w Visual Studio.

ka pozwala rwnie na budowanie instalatorw z linii komend przy pomocy MsBuild-a, pozwala na integracj z serwerami continous integration. Wane jest rwnie to, e dziki integracji moemy uywa repozytorium kodu(svn albo tfs) w odniesieniu do skryptw WiX tak jak do pozostaego kodu aplikacji, np. w c#.

Rozpoczcie pracy z WiX


eby rozpocz prac z WiX naley wpierw posiada jak aplikacj, ktr bdziemy instalowa. Moe to by dowolna aplikacja dla systemu Windows(zarzdzana lub nie), albo nawet skrypt. W tym artykule skupi si na instalowaniu aplikacji napisanej w rodowisku .NET. Najpierw naley utworzy nowy projekt typu WixProject i doda do istniejcego rozwizania. Zostanie utworzony domylny skrypt wxs widoczny na Listingu 1. Element Product Atrybuty wpisane w tym elemencie zapisywane s w tabeli Property i su do identyfikowania instalatorw. Niektre z nich s wymagane: - unikalny identyfikator(GUID) instalatora, dla kadego stworzonego instalatora powinien by inny; jeli wpiszemy w to pole gwiazdk, wwczas wix sam wygeneruje inn warto przy kadym budowaniu pliku msi; odpowiada polu ProductCode z tabeli Property ; Name - nazwa produktu, acuch tekstowy, ktry pozwoli uytkownikowi zidentyfikowa aplikacj ; odpowiada polu ProductName z tabeli Property ; Language - jzyk, ktry wspiera instalator; jest to lista oddzielona przecinkiem kodw LCID; domylna warto to 1033, czyli jzyk angielski; 1045 to warto odpowiadajca jzykowi polskiemu. Skrypt WiX moe zawiera tylko jedn wersj jId

Poziom trudnoci

indows Installer (wczeniej znany jako Microsoft Installer lub projekt Darwin) jest silnikiem pozwalajcym na instalowanie, utrzymanie i usuwanie oprogramowania na aktualnych systemach z rodziny Microsoft Windows. Informacje potrzebne do instalacji, oraz bardzo czsto same pliki aplikacji, s umieszczone w pakietach instalacyjnych, ktre maj struktur pseudorelacyjnych baz danych noszcych nazw Ole Structured Storage Files i popularnie nazywanych plikami MSI z powodu ich domylnego rozszerzenia. Windows Installer Xml jest projektem pozwalajcym na tworzenie instalatorw na platform windows, ktry zosta stworzony przez Roba Menschinga. Projekt ma status open source i jest bardzo szeroko uywany zarwno przez sam Microsoft, due firmy, oraz inne projekty open source. W tej chwili istniej dwie wersje: 2.0 oraz 3.0. Wersja 2.0 uwaana jest za stabiln, ale nie s dodawane do niej nowe funkcjonalnoci. Najaktywniejszy rozwj trwa w wersji 3.0, ktra zostanie wczona do rodowiska Visual Studio 2010.
52

Windows Installer Xml(skrt WiX) pozwala na budowanie pakietw instalacyjnych na podstawie skryptw wxs napisanych w jzyku xml. Na podstawie tak stworzonego skryptu za pomoc aplikacji candle(ktra jest czci pakietu WiX) tworzony jest plik z rozszerzeniem wixobj, ktry odpowiada wynikowi dziaania preprocesora. Za pomoc aplikacji light tworzony jest z niego wynikowy plik z rozszerzeniem msi. Na szczcie istnieje wtyczka do rodowiska Visual Studio o nazwie Votive, ktra troszczy si o ten proces i programista w ogle nie musi si nim zajmowa.

Przygotowanie Visual Studio do pracy z WiX


W tym artykule do pracy z WiX bdzie uywane Visual Studio. Aby mc wygodnie uywa WiX w Visual Studio 2008, naley pobra i zainstalowa wtyczk Votive. Wtyczka ta dodaje nowe typy projektw, w niniejszym artykule bdziemy uywa tylko typu WixProject. W wersji 2010 Visual Studio wtyczka Votive bdzie ju dostpna z pudeka i nie trzeba bdzie instalowa adnych dodatkw. Dziki uywaniu wtyczki nie musimy si przejmowa ani w ogle zdawa sobie sprawy z uycia programw candle i light interesuje nas tylko plik wynikowy. Dodatkowo wtycz-

06/2009

Budowanie natywnych instalatorw

zykow. Aby uywa wicej wersji, naley zbudowa transformaty zmiennych lokalizacyjnych; Version - znany z .net symbol wersji w formacie major.minor.build.revision. Ciekawostk jest, e .revision jest pomijane; warto tego pola jest szczeglnie wana przy aktualizacjach i jest uywana do okrelenia, jaka wersja aplikacji z takim samym polem UpgradeCode jest ju zainstalowana; odpowiada polu ProductVersion z Property; Manufacturer - producent oprogramowania, albo twoje imi i nazwisko; odpowiada polu Manufacturer; bdzie wywietlane w panelu sterowania w zarzdzaniu zainstalowanymi aplikacjami; UpgradeCode pole powinno zawiera unikalny GUID, aden inny instalator nie bdcy nowsz wersj aplikacji nie powinien mie takiej samej wartoci; po tym guidzie wyszukiwane s produkty do podniesienia wersji; jeli tworzysz wiele instalatorw dla rnych wersji i chcesz, eby bezproblemowo mona byo dokona aktualizacji, wwczas trzeba pamita, e ten GUID powinien pozosta stay dla kadej wersji aplikacji. Zapobiega to wielokrotnemu pojawianiu si tej samej aplikacji w Panel sterowania > Dodaj/Usu programy. Element Package Wymagane s tylko 2 pola: - okrela minimaln wersje wymaganego Windows Installera zgodnie z wzorem: major*100 + minor. Na przykad, eby instalator wymaga co najmniej 3.11 wersji mechanizmu instalacji w tym polu naley wpisa 311; Compressed okrela, czy pliki zawarte w instalatorze maj podlega kompresji.
InstallerVersion

glne zagniedenia pokazuj, jak foldery s tworzone wgb. Pierwszy wpis( atrybut Id o wartoci TARGETDIR, atrybut Name o wartoci SourceDir) jest wymagany i suy do definiowania korzenia struktury folderw. W atrybucie Id elementu Directory podaje si nazw waciwoci (pisana w WiX duymi literami), ktra moe by pniej uywana do odwoania w innych miejscach instalatora. Istniej predefiniowane wartoci parametru Id pozwalajce na odwoanie si do standardowych lokalizacji w systemie Windows: domylna lokalizacja, w ktrej instalowane s aplikacje dla systemw 32-bitowych, dla systemw 64-bitowych ProgramFiles64Folder. tym W folderze powinny si znale pliki naszej aplikacji; ProgramMenuFolder folder, ktry odpowiada Start > Programy. W tej lokalizacji powinny znale si skrty pozwalajce na uruchomienie naszej aplikacji; DesktopFolder lokalizacja folderu odpowiadajcego pulpitowi Windows. W tym folderze powinny si znale skrty, ktre chcemy umieci na pulpicie.
ProgramFilesFolder

W elementach Directory odnoszcych si do domylnych lokalizacji w systemie naley zagniedzi kolejne elementy odpowiadajce ju folderom naszej aplikacji, z wartociami atrybutw Id i Name nadanymi przez nas. Przy budowaniu wasnej struktury folderw koniecznie naley zadba, aby atrybut Id mia unikaln nazw, poniewa moe by uywany w innych poleceniach. W odniesieniu do pola Id elementu Directory warto stosowa spjny system nazewnictwa. Za dobr praktyk uchodzi nadawanie przedrostka D_ przed wartoci. Warto budowa struktur folderw, do ktrych instalowana jest aplikacja zgodnie z oglnie przyjtymi normami. Najczciej spotykan ciek do instalacji jest /Program Files/Firma/Produkt, chocia czsto spotyka si rwnie /Program Files/Firma Produkt. Element(y) Component Element Component jest zagniedony w elemencie Directory. To kluczowy element skryptu WiX i najczstsze rdo bdw podczas instalacji. Komponent jest najmniejszym zestawem elementw, ktre mog zosta zainstalowane: plikw, skrtw, rejestrw. W skrypcie

Listing 1. Domylny skrypt wxs


<?xml version="1.0" encoding="UTF-8"?>

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> Name="PUT-PRODUCT-NAME-HERE" Language="1033" Version="1.0.0.0"

<Product Id="b9351b34-7683-4640-8fdf-dc34c12c3fa1"

Manufacturer="PUT-COMPANY-NAME-HERE"

<Package InstallerVersion="200" Compressed="yes" /> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder">

UpgradeCode="077c926e-d3f7-40dd-a6cf-5c5cc82893f2">

<Media Id="1" Cabinet="WixProject.cab" EmbedCab="yes" />

Reszta pl jest dziedziczona z elementu Product. Caa zawarto elementu Package jest zapisywana w strumieniu Summary Information, ktry moe by odczytywany bezporednio z Windows Explorera poprzez waciwoci pliku. Element Media Pozwala na podanie nazwy zbioru zawierajcego instalowane pliki(atrybut Cabinet) i podania, czy wejdzie w skad instalatora(atrybut EmbedCab). Jeli nie podamy adnego z tych elementw, instalator nie bdzie zawiera plikw rdowych; trzeba je bdzie skopiowa do lokalizacji pliku .msi, co nie jest raczej wygodnym rozwizaniem Element(y) Directory Su do okrelenia struktury folderw, w ktrej ma zosta zainstalowana aplikacja. Poszczewww.sdjournal.org

<Directory Id="INSTALLLOCATION" Name="PUT-APPLICATION-DIRECTORY-HERE"> <Component Id="ProductComponent" Guid="ee728cb7-f2b3-41d0-9ea5</Component> 59ebf659f8d2">

</Directory>

</Directory>

</Directory>

<Feature Id="ProductFeature" Title="PUT-FEATURE-TITLE-HERE" Level="1"> </Feature> <ComponentRef Id="ProductComponent" />

</Wix>

</Product>

Listing 2. Przykadowy komponent z 2 plikami


<Component Id="C_GlownaAplikacja" Guid="ac45b2d6-7e95-487f-a2e2-f56877f16076"> <File Id="F_AppExe" Name="App.exe" Source="$(var.SolutionDir)\App\bin\ $(var.Configuration)\App.exe" />

<File Id="F_AppExeConfig" Name="App.exe.config" Source="$(var.SolutionDir)\App\bin\ </Component> $(var.Configuration)\App.exe.config" />

53

Warsztaty
moe istnie wiele komponentw, najwaniejsze eby byy niezalene: w 2 komponentach nie mog by zawarte te same pliki w tych samych lokalizacjach; odinstalowanie komponentu nie powinno pozostawia po sobie adnych ladw; odinstalowanie komponentu nie moe mie wpywu na inne komponenty. Komponenty to klocki, z ktrych skadane s konkretne funkcjonalnoci( w rozumieniu instalatora), czyli dziaajca aplikacja. Jeden komponent powinien zawiera elementy, ktre tworz wspln cao. Komponenty mog by wspdzielone przez funkcjonalnoci ,np. gdy mamy 2 aplikacje, ktre obie korzystaj z narzdzia do raportowania (np. Crystal Reports) i wymagaj odpowiednich zarejestrowanych bibliotek. Podobnie jak w elemencie Directory. Warto zwrci uwag na nazewnictwo - pole Id musi by unikalne, ale w miar proste, poniewa jest uywane do odwoania w innych miejscach skryptu. Ja stosuj nazewnictwo typu C_ NazwaKomponentu. Pole Guid musi by unikalne w obrbie caego instalatora, do jego wygenerowania najlepiej uy narzdzia uuidgen z menu Tools w Visual Studio. W Component mona zagnieda elementy odpowiedzialne za wykonanie konkretnych operacji. Najczciej spotykany jest File, ktry suy do umieszczenia plikw przy instalacji komponentu. Element File wymaga podania unikalnej w obrbie caego pakietu instalacyjnego wartoci atrybutu Id, w ktrym rwnie warto, w celu wikszej przejrzystoci, zastosowa przedrostek F_. Pole Name okrela, jak nazw plik przyjmie po zainstalowaniu. Atrybut Source okrela rdo, z ktrego ma zosta pobrany plik. Przykadowa zawarto komponentu, ktra spowoduje zainstalowanie 2 plikw z plikami zostaa przedstawiona na Listingu 2. W Listingu 2 uyte zostay dodatkowo 2 domylne zmienne preprocesora, ktre pozwalaj na wygodne okrelenie rde pliku. Zmienna SolutionDir zawiera ciek, w ktrej umieszczone jest rozwizanie, a zmienna Configuration aktualn konfiguracj domylnie Debug, Release albo zdefiniowan przez uytkownika. Uycie tych zmiennych zapewni waciwe budowanie instalatora bez wzgldu na lokalizacj rozwizania na komputerze, co jest szczeglnie wygodne w przypadku pracy zespoowej. Element Feature Element Feature pozwala operowa na wyszym poziomie i spi komponenty w funkcjonalnoci. Funkcjonalno w rozumieniu instalatora to wszystko to, co mona zainstalowa w systemie. Gdy zdefiniowany jest interfejs uytkownika, mona decydowa, ktre
Listing 3. Najprostszy instalator
<?xml version="1.0" encoding="UTF-8"?>

funkcjonalnoci bd instalowane. W atrybucie Id musi zosta wpisany unikalny identyfikator. Title musi zawiera przyjazn i zrozumia dla uytkownika nazw jak np. Gwna aplikacja. Ostatnim wymaganym atrybutem elementu Feature jest Level, ktry okrela, dla jakich wartoci zmiennej INSTALLLEVEL ma by instalowana dana funkcjonalno. Zmienna INSTALLLEVEL jest ustawiana domylnie przez Windows Installer i suy do okrelenia, jakie funkcjonalnoci maj zosta zainstalowane przy uruchomieniu instalatora; domylnie przyjmuje warto 1. Instalowane s wszystkie funkcjonalnoci, ktrych atrybut Level jest mniejszy lub rwny INSTALLLEVEL. Jako dzieci Feature uywamy elementw ComponentRef, ktre w kadym atrybucie Id musz zawiera warto Id istniejcego elementu Component. Zmienne preprocesora WiX wspiera definiowanie zmiennych preprocesora. Zdefiniowa je moemy przy pomocy konstrukcji <?define nazwaZmiennej=warto ?>. Do tak zdefiniowanej zmiennej moemy si odwoa w dowolnym miejscu skryptu przy

<?define Manufacturer="BartekSzafko.pl"?> <?define ProductName="Moja aplikacja"?> <?define ProductVersion="1.0.0.0"?>

<?define UpgradeCode="e8c2d964-399f-4ff7-91ae-ccf3c9220164"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

<Product Id="*" Name="$(var.ProductName)" Language="1045" Version="$(var.ProductVe pgradeCode)">

rsion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.U

<Package InstallerVersion="200" Compressed="yes" />

<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" /> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder">

Rysunek 1. Typy projektw WiX w Visual Studio 2010

<Directory Id="D_INSTALLLOCATION" Name="$(var.Manufacturer) <Component Id="C_ProductComponent" Guid="0c8acba5-46b2-472a-ab89<File Id="F_c2csiexe" Source="$(var.SolutionDir)c2csi\bin\ </Component> $(var.Configuration)\c2csi.exe"/> 771dda833ab7"> $(var.ProductName)">

Rysunek 2. Okienko instalacji

</Directory>

</Directory>

</Directory>

<Feature Id="F_ProductFeature" Title="Gwna aplikacja" Level="1"> </Feature> <ComponentRef Id="C_ProductComponent" />

Rysunek 3. Dodawanie referencji w projekcie WiX

</Wix>

</Product>

54

06/2009

Budowanie natywnych instalatorw

pomocy wyraenia $(var.nazwaZmiennej). Warto uywa zmiennych do definiowana wartoci, ktre bd wielokrotnie uywane jak np. nazw producenta i produktu, ktre oprcz elementu Product mog zosta uyte do stworzenia struktury folderw. Dobrze jest take umieci wartoci atrybutw UpgradeCode oraz Version w zmiennych. Nie jest to wymagane w najprostszym instalatorze, ale pozwala przygotowa skrypt pod tworzenie aktualizacji naszej aplikacji. Omwione elementy to podstawy WiXa. Z ich pomoc mona stworzy najprostszy instalator, na przykad taki jak na Listingu 3. Moemy rwnie doda do projektu WiX waciw aplikacj jako referencj lub ustawi odpowiedni kolejno budowania, wtedy zawsze bdziemy mieli pewno, e bdzie si tworzy instalator z najnowsz wersj aplikacji. Po uruchomieniu instalatora przygotowanego za pomoc skryptu z Listingu 3 bdziemy mogli zobaczy znajome okienko jak na Rysunku 2. W Panelu sterowania -> Dodaj/usu programy bdzie mona zobaczy nasz aplikacj oraz j usun.

Listing 4. Najprostszy instalator z interfejsem uytkownika


<?xml version="1.0" encoding="UTF-8"?>

<?define Manufacturer="BartekSzafko.pl"?> <?define ProductName="Moja aplikacja"?> <?define ProductVersion="1.0.0.0"?>

<?define UpgradeCode="e8c2d964-399f-4ff7-91ae-ccf3c9220164"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

<Product Id="*" Name="$(var.ProductName)" Language="1045" Version="$(var.ProductVer gradeCode)">

sion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.Up

<Package InstallerVersion="200" Compressed="yes" /> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder">

<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

<Directory Id="D_INSTALLLOCATION" Name="$(var.Manufacturer) <Component Id="C_ProductComponent" Guid="0c8acba5-46b2-472a-ab89<File Id="F_c2csiexe" Source="$(var.SolutionDir)c2csi\bin\ </Component> $(var.Configuration)\c2csi.exe"/> 771dda833ab7"> $(var.ProductName)">

Dodanie interfejsu uytkownika do instalatora


Interfejs uytkownika jest bardzo wan czci instalatora pozwala osobie instalujcej aplikacj zadecydowa, jakie funkcjonalnoci maj zosta zainstalowane i w jakich lokalizacjach oraz ewentualnie wprowadzi dodatkowe informacje potrzebne do waciwego dziaania naszej aplikacji. Sposb, w jaki nasza aplikacja bdzie si prezentowa podczas instalacji jest rwnie bardzo wany z marketingowego punktu widzenia. Instalator jest pierwszym punktem kontaktu z uytkownikiem i moe popsu cae wraenie, jakie robi nasza aplikacja. Co wicej, nawet jeli mamy wspania aplikacj, ale uytkownikowi nie uda si jej zainstalowa i uruchomi, to nigdy jej nie zobaczy . Instalatory w plikach MSI definiowane s gwnie w tabeli Control, gdzie znajduje si opis kontrolek pokazywanych na poszczeglnych formularzach oraz w tabeli Dialog, gdzie zdefiniowane s poszczeglne formularze. Opis okien dialogowych i kontrolek jest tworzony za pomoc jzyka XML, ktrego stworzenie wymaga dosy duo czasu i eksperymentw. WiX domylnie zawiera szablony interfejsu uytkownika, ktre pozwalaj na zaspokojenie potrzeb wikszoci instalacji. Biblioteka WiXUiExtension.dll zawiera skompilowane skrypty wxs definiujce okna dialogowe. Nawiasem mwic, podczas mojej prezentacji w Krakowie wywizaa si ciekawa dyskusja na temat, czy jest to natywna biblioteka, czy nie. Okazuje si, e jest to aswww.sdjournal.org

</Directory>

</Directory>

</Directory>

<UIRef Id="WixUI_Mondo"/>

<Feature Id="F_ProductFeature" Title="Gwna aplikacja" Level="1"> </Feature> <ComponentRef Id="C_ProductComponent" />

</Wix>

</Product>

Listing 5. Zmiany kosmetyczne instalatora


<WixVariable Id="WixUILicenseRtf" Value="license.rtf" /> <WixVariable Id="WixUIBannerBmp" Value="WixUI_Bmp_Banner.bmp" /> <WixVariable Id="WixUIDialogBmp" Value="WixUI_Bmp_Dialog.bmp" /> <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1"/> Return="asyncNoWait"/> <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Uruchom aplikacj"/> <CustomAction Id="CA_Uruchom" Directory="D_INSTALLLOCATION" ExeCommand="[#F_c2csiexe]" <UI>

<Publish Dialog="ExitDialog" Control="Finish" Order="2" Event="DoAction" Value="CA_ WIXUI_EXITDIALOGOPTIONALCHECKBOX Uruchom">

</UI>

</Publish>

Listing 6. Refaktoryzacja usunicie komponentu ze struktury folderw


<Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> > <Directory Id="D_INSTALLLOCATION" Name="$(var.Manufacturer) $(var.ProductName)"/

</Directory>

</Directory>

<DirectoryRef Id="D_INSTALLLOCATION">

<Component Id="C_ProductComponent" Guid="0c8acba5-46b2-472a-ab89-771dda833ab7"> c2csi.exe"/>

<File Id="F_c2csiexe" Source="$(var.SolutionDir)c2csi\bin\$(var.Configuration)\

</Component>

55

Warsztaty
sembly .net, w ktrego zasobach umieszczona jest skompilowana biblioteka wixlib, ktra z kolei jest doczana do wynikowego instalatora. eby wzbogaci instalatora z Listingu 3, naley najpierw doda referencje do WixUiExtension.dll. W tym celu w projekcie WiX klikamy prawym klawiszem myszy na wle References i wybieramy pozycj Add reference tak jak to wida na Rysunku 3 i Rysunku 4. Wix wspiera par rodzajw interfejsw uytkownika: peny interfejs, zawiera: ekran powitalny, akceptacj licencji, moliwo okrelenia rodzaju instalacji(pena, domylna, uytkownika), wybr funkcjonalnoci(przy instalacji uytkownika), okrelenie folderu docelowego(przy instalacji uytkownika , o ile na to zezwolilimy); WixUI _ FeatureTree odpowiada wyborowi instalacji uytkownika z WixUI_ Mondo, zwiera: ekran powitalny, akceptacj licencji, wybr funkcjonalnoci z okreleniem docelowego folderu; WixUI _ InstallDir pozwalajcy tylko na wybr docelowego folderu, w momenWixUI _ Mondo

cie pisania tego artykuu wybr tego rodzaju interfejsu powoduje bd; WixUI_Minimal zawiera tylko jeden ekran pozwalajcy na akceptacj licencji oprogramowania. Jedyne, co musimy doda, to odwoanie do ju istniejcej definicji poprzez uycie elementu UIRef: <UIRef Id="WixUI _ Mondo"/>. Przed zastosowaniem interfejsu uytkownika dodamy jeszcze jeden atrybut do elementu Feature, a mianowicie ConfigurableDirectory, ktry powoduje, e podczas instalacji uytkownika bdzie mona okreli, w jakim folderze ma zosta zainstalowana aplikacja. Jako warto atrybutu podajemy Id odpowiedniego elementu Directory. Najprostszy moliwy do zbudowania instalator z interfejsem uytkownika jest pokazany na Listingu 4. Skorzystamy take z ustawie projektu, aby zmieni domylny jzyk na pl-PL. Dziki temu wynikowy instalator bdzie zawiera wszystkie komunikaty po polsku. Sposb ustawienia zosta pokazany na Rysunku 5. WiX zawiera domylnie polskie lokalizacje, wic nie musimy si martwi o tumaczenie.

Domylnie zawarta w instalatorze licencja to Common Public License Version 1.0. Istnieje moliwo podmiany tekstu licencji na dowolny inny. W tym celu zdefiniujemy now warto zmiennej WixUILicenseRtf, ktra musi wskazywa na plik w formacie Rich Text File:
<WixVariable Id="WixUILicenseRtf" Value="license.rtf" />

Plik licencji rwnie zostanie wczony do naszego instalatora. Na koniec zmian kosmetycznych dodamy moliwo zezwolenia na uruchomienie naszej aplikacji w ostatnim oknie dialogowym instalatora. W szablonie wygldu WixUI_ Mondo dodane jest pole wyboru, pozwalajce na zrealizowanie tej funkcjonalnoci, ktre domylnie jest ukryte. Mona je pokaza poprzez przypisanie wartoci wasnoci WIXUI_ EXITDIALOGOPTIONALCHECKBOXTEXT, ktra zawiera tekst wywietlany obok pola wyboru. Oprcz tego zdefiniujemy take warto wasnoci WIXUI_EXITDIALOGOPTIONALCHECKBOX, , dziki ktrej pole wyboru bdzie zaznaczone po pokazaniu okna dialogowego. Waciwoci ustawia si przy pomocy elementu Property, w ktrym atrybut Id zawiera nazw, a Value przypisywan warto:
<Property Id="WIXUI _ EXITDIALOGOPT IONALCHECKBOXTEXT" Value="Uruchom aplikacj"/>

Zmiany kosmetyczne w instalatorze


Instalator, ktry do tej pory stworzylimy wyglda bardzo standardowo. Na ekranie powitalnym po lewej stronie widoczny jest brzowy obrazek, ktrego miniatura jest widoczna take na grze kadego nastpnego okna. Okazuje si, e cae to okna powitalnego jest bitmap o wymiarach 493 na 312 punktw. Podobna sytuacja ma miejsce z paskiem tytuowym wywietlanym w kadym nastpnym oknie, z tym e bitmapa ma rozmiar 493 na 58 punktw. Dziki tej informacji moemy stworzy swoj wasn bitmap i przekaza j do instalatora za pomoc elementu WixVariable, ktry podmieni domylne wartoci zmiennych interfejsu. Element WixVariable musi zosta zagniedony w elemencie Product. Zmienna WixUIDialogBmp wskazuje na plik zawierajcy to okna powitalnego, a WixUIBannerBmp na nagwek okna:
<WixVariable Id="WixUIBannerBmp"

<Property Id="WIXUI _ EXITDIALOGOPTIONAL CHECKBOX" Value="1"/>

Rysunek 4. Dodawanie referencji do WixUiExtension.dll

Value="WixUI _ Bmp _ Banner.bmp" /> <WixVariable Id="WixUIDialogBmp"

Nastpnie musimy zdefiniowa akcj, ktra bdzie wykonywana po zaznaczeniu pola wyboru. W tym celu musimy uy elementu CustomAction, ktry pozwala midzy innymi na uruchomienie zewntrznej aplikacji. Atrybut Id powinien zawiera warto unikalnie identyfikujc akcj. Warto rwnie dla przejrzystoci zastosowa przedrostek CA. Atrybut Directory okrela folder, w ktrym ma zosta uruchomiona komenda jako warto uyjemy wartoci Id , zdefiniowanej wczeniej dla elementu Directory. Jako wartoci atrybutu ExeCommand musimy poda plik z pen ciek, ktry ma zosta wykonany. W naszym przypadku uyj wartoci Id pliku c2csi.exe. Natomiast atrybut Return uzupenimy wartoci asyncNoWait, ktra oznacza, e komenda ma zosta uruchomiona, a instalator nie ma czeka na wynik, tylko wykonywa si dalej.
<CustomAction Id="CA _ Uruchom" Directory="D _ INSTALLLOCATION" ExeCommand="[#F _ c2csiexe]" Return="asyncNoWait"/>

Value="WixUI _ Bmp _ Dialog.bmp" />

Rysunek 5. Ustawianie pola Culture we waciwociach projektu

Kady ze wskazanych plikw zostanie doczony do naszego instalatora do tabeli Binary. Niestety, w chwili pisania tego artykuu przez instalator Windows obsugiwane s tylko pliki typu Bitmap.

W ostatnim kroku musimy podpi wykonanie naszej akcji do interfejsu uytkownika. W tym celu uyjemy elementw UI i Publish ,
06/2009

56

Budowanie natywnych instalatorw

aby podpi si do okna dialogowego o nazwie ExitDialog do kontrolki Finish(ktra odpowiada przyciskowi Zakocz w ostatnim oknie dialogowym). Nastpnie przy pomocy atrybutu Event okrelimy, e chcemy si podpi do wydarzenia wykonywanego po jego naciniciu (DoAction) oraz nazw zdefiniowanej akcji CA _ Uruchom jako warto atrybutu Value. Atrybut Order suy do okrelania, w ktrej kolejnoci ma zosta wywoana nasza akcja. Jako zawarto elementu Publish okrelamy warunek, kiedy ma zosta wykonana akcja. W naszym przypadku uyjemy odwoania do wasnoci WIXUI _ EXI TDIALOGOPTIONALCHECKBOX, , ktra zawiera warto 1, gdy zaznaczymy pole wyboru.
<UI>

Wszystkie zmiany kosmetyczne zostay zebrane na Listingu 5 i powinny by zagniedone bezporednio w elemencie Product. Zmiany wprowadzone w instalatorze mona zobaczy na Rysunku 6 , Rysunku 7 i Rysunku 8.

Dodawanie skrtw do menu start oraz na pulpit


Zanim dodam kod, ktry tworzy odpowiednie skrty, wpierw wyczyszcz implementacj komponentu C_ProductComponent. W tym celu uyj elementu DirectoryRef, ktry pozwala na zdefiniowanie komponentu poza struktur folderw pokazane to zostao na Listingu 6.

Wpierw zdefiniujemy struktur folderw w menu Start oraz na pulpicie, co zostao pokazane na Listingu 7. Dodamy odniesienie do folderu skojarzonego z pulpitem poprzez dodanie elementu Directory z atrybutem Id o wartoci DesktopFolder. Nastpnie dodamy struktur folderw w menu Start: wpierw folder odpowiadajcy producentowi, a nastpnie nazwie produktu. Jako wartoci Name uyj wczeniej zdefiniowanych zmiennych. Skrty, ktre dodamy do naszej aplikacji, bd typu Advertised. Maj one t zalet, e bardzo dobrze wspgraj z instalacj dla uytkownika i mog by naprawiane przy ponownym uruchomieniu instalatora.

Control="Finish" Order="2"

<Publish Dialog="ExitDialog"

Listing 7. Struktura folderw pozwalajca na dodanie skrtw do menu start i na pulpit


<Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder">

Event="DoAction" Value="CA_Uruchom"> </Publish>

WIXUI_EXITDIALOGOPTIONALCHECKBOX

</UI>

<Directory Id="D_INSTALLLOCATION" Name="$(var.Manufacturer) $(var.ProductName)"/ </Directory> >

<Directory Id="DesktopFolder"/>

<Directory Id="ProgramMenuFolder"> <Directory Id="D_MenuStartManufacturer" Name="$(var.Manufacturer)"> </Directory> <Directory Id="D_MenuStartProduct" Name="$(var.ProductName)"/>

</Directory>

</Directory>

Listing 8. Dodanie skrtw

Rysunek 6. Ekran powitalny

<DirectoryRef Id="D_INSTALLLOCATION">

<Component Id="C_ProductComponent" Guid="0c8acba5-46b2-472a-ab89-771dda833ab7"> c2csi.exe" KeyPath="yes">

<File Id="F_c2csiexe" Source="$(var.SolutionDir)c2csi\bin\$(var.Configuration)\

<Shortcut Id="S_MenuStartShortcut" Name="C2C" Advertise="yes" Directory="D_ <Shortcut Id="S_DesktopShortcut" Name="C2C" Advertise="yes" Directory="Deskto </File> pFolder" Icon="I_c2csi.exe"/> MenuStartProduct" Icon="I_c2csi.exe"/>

</DirectoryRef>

</Component>

<Icon Id="I_c2csi.exe" SourceFile="$(var.SolutionDir)c2csi\bin\$(var.Configuration)\ c2csi.exe"/>

Rysunek 7. Ekran licencji

Listing 9. Komponent zapewniajcy usunicie folderw z menu start


<DirectoryRef Id="D_MenuStartProduct"> <Component Id="C_FakeMenuStart" Guid="92476C56-1D38-4b5e-97E7-E83F5E9917C9"> Uninstall">

<RegistryKey Root="HKCU" Key="Software\$(var.Manufacturer)\$(var.ProductName)\ <RegistryValue Value="Fake" Type="string" KeyPath="yes"/>

</RegistryKey>

<RemoveFolder Id="R_MenuStartManufacturer" Directory="D_MenuStartManufacturer" <RemoveFolder Id="R_MenuStartProduct" Directory="D_MenuStartProduct" </Component> On="uninstall"/> On="uninstall"/>

Rysunek 8. Ekran zakoczenia instalacji

</DirectoryRef>

www.sdjournal.org

57

Warsztaty
Wad skrtw tego typu jest to, e mog tylko wskazywa na pliki, ktre s zawarte w instalatorze. Dla naszej aplikacji skrt tego typu jest zupenie wystarczajcy. Do dodania skrtw uyjemy elementu Shortcut. Atrybut Id powinien zawiera unikalny identyfikator(rwnie w tym przypadku dodam prefiks), atrybut Name bdzie zawiera tekst, ktry ma zosta wywietlony pod linkiem, a atrybut Advertise suy do zdefiniowania typu ustawimy warto yes. Atrybut Directory zawiera natomiast identyfikator folderu, w ktrym ma zosta utworzony skrt odwoamy si do folderw, ktre zdefiniowalimy na Listingu 7. Jako ostatni dodamy atrybut Icon, ktry zawiera wskazanie do Id ikony zdefiniowanej w elemencie Icon. Element Icon powoduje dodanie do instalatora ikony, ktra jest zawarta w pliku wskazanym w SourceFile. Zmodyfikowany komponent i dodana ikona jest widoczna jest na Listingu 8.
Listing 10. Aktualizowanie aplikacji
<Upgrade Id="$(var.UpgradeCode)">

Ostatni rzecz, ktr musimy zrobi, to zadba, aby dodane przez nas foldery do menu Start zostay usunite przy usuwaniu pakietu. W tym celu zdefiniujemy komponent C_FakeMenuStart, ktry bdzie tylko tworzy jeden wpis w rejestrze, ktry jest potrzebny Windows Installerowi, eby stwierdzi, czy komponent jest zainstalowany. W tym celu uyjemy elementw RegistryKey oraz RegistryValue. Najwaniejszym elementem komponentu jest RemoveFolder, ktry w atrybucie Directory zawiera odniesienie do folderu, ktry ma zosta usunity. Natomiast atrybut On zawiera akcj, w czasie ktrej ma zosta usunity. W naszym wypadku bdzie to deinstalacja warto uninstall. Kompletny komponent zosta przedstawiony na Listingu 9.

Aktualizacja aplikacji
Bardzo wanym zagadnieniem jest aktualizowanie ju zainstalowanej aplikacji. Przy po-

<UpgradeVersion Minimum="$(var.ProductVersion)" IncludeMinimum="no" OnlyDetect="yes" Language="1045"

Property="NEWPRODUCTFOUND" /> <UpgradeVersion Minimum="0.0.1.0" IncludeMinimum="yes"

Maximum="$(var.ProductVersion)" IncludeMaximum="no" Language="1045" </Upgrade>

mocy WiX mona budowa patch, hotfix oraz major upgrade. W tym artykule poka, jak zbudowa aktualizacj typu major upgrade, ktra polega na odinstalowaniu pakietu i zainstalowaniu nowego. eby wykona tak operacj, wpierw zdefiniujemy element UpgradeVersion, ktry posuy do sprawdzenia, czy w systemie nie jest ju zainstalowany pakiet o takiej wersji jak aktualnie uruchomiony. W takim wypadku zostanie ustawiona waciwo NEWPRODUCTFOUND. Drugi element UpgradeVersion bdzie odpowiedzialny za znalezienie poprzednich wersji aplikacji i ustawienie waciwoci UPGRADEFOUND. Wane jest ustawienie atrybutu Language, gdy bdziemy wyszukiwa instalatorw w odpowiednim jzyku. W drugim etapie zdefiniujemy akcj o Id PreventDowngrading, ktra bdzie odpowiedzialna za wywietlenie komunikatu bdu w przypadku, gdy bdzie zainstalowana najnowsza wersja aplikacji. Nastpnie dodamy do przebiegu procesu instalacji wywietlenie informacji w przypadku, gdy ju jest zainstalowana najnowsze wersja poprzez osadzenie elementu Custom w elemencie InstallExecuteSequence. Drugim osadzonym elementem jest RemoveExistingProducts, ktry odpowiada za usunicie starszej wersji aplikacji. Dodatkowo zdefiniowany atrybut After z wartoci InstallFinalize zapewnia, e stara wersja zostanie usunita dopiero po zainstalowaniu nowej. W ostatnim kroku dodam take wywoanie akcji zabraniajcej instalacji starszej wersji w wypadku, gdy zostanie uruchomiona instalacja z interfejsem uytkownika.

Podsumowanie
Dziki WiX mona zbudowa instalator, ktry jest rwnie dobry jak stworzony za pomoc komercyjnych produktw. Jak pokazaem w artykule, w dosy prosty sposb mona zainstalowa pliki, utworzy odpowiednie skrty, a nawet aktualizowa ju zainstalowan aplikacj.

Property="UPGRADEFOUND" />

<CustomAction Id="PreventDowngrading" Error="Najnowsza wersja jest ju zainstalowana." <InstallExecuteSequence> />

<Custom Action="PreventDowngrading"

</InstallExecuteSequence> <InstallUISequence>

<RemoveExistingProducts After="InstallFinalize" />

After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>

<Custom Action="PreventDowngrading"

</InstallUISequence>

After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>

BARTOMIEJ SZAFKO
Autor jest kierownikiem projektw i developerem w rodowisku .NET. Ukoczy studia Elektroniki i Telekomunikacji na Politechnice Poznaskiej oraz zarzdzanie projektem, a take psychologi zarzdzania na Wyszej Szkole Bankowej. W rodowisku .NET programuje 5 lat, a tematyk zwizan z instalowaniem aplikacji przy pomocy Windows Installer Xml zajmuje si od 2 lat. Lider poznaskiej grupy .NET. Prowadzi bloga pod adresem http:// bartekszafko.pl Kontakt z autorem: Bartlomiej.szafko@gmail.com

W Sieci
Projekt WiX http://wix.sourceforge.net; Windows Installer 4.5 Software Development Kit http://www.microsoft.com/downloadS/details.aspx?familyid=6A35AC14-2626-4846-BB51-DDCE49D6FFB6&displaylang=en; Podrcznik WiX http://www.tramontana.co.hu/wix; Posty na blogu autora artykuu http://bartekszafko.pl/category/wix/.

58

06/2009

Bazy danych

Database Mail
Konfiguracja i wykorzystanie usugi w SQL Server 2005/2008
Podczas implementacji aplikacji biznesowych niejednokrotnie pojawia si wymaganie wysyania do uytkownikw wiadomoci e-mail, zawierajce potwierdzenia lub inne informacje pochodzce bezporednio z systemu rdowego. W artykule tym przedstawi sposb, w jaki mona speni to wymaganie wykorzystujc do tego serwer bazy danych.
Dowiesz si:
Jak uruchomi, skonfigurowa i zarzdza usug Database Mail; Jak wysya wiadomoci e-mail z poziomu serwera bazy danych.

Powiniene wiedzie:
Podstawy jzyka SQL; Podstawowa obsuga serwera SQL Server 2005/2008; Instalacja przykadowej bazy AdventureWorks.

logowanie informacji: utrzymywanie dziennika w logu SQL Server, dzienniku zdarze systemu operacyjnego i informacji w tabelach w bazie msdb; opcja audytu utrzymywanie historii wysyanych maili.

Poziom trudnoci

atabase Mail to nowa funkcjonalno, udostpniona po raz pierwszy w SQL Server 2005, umoliwiajca wysyanie wiadomoci e-mail bezporednio z poziomu serwera bazodanowego. Zastpia ona dostpn we wczeniejszej wersji serwera usug SQL Mail, ktra do obsugi poczty elektronicznej wykorzystywaa opracowane przez firm Microsoft rozszerzenie MAPI (Messaging Application Program Interface), a wic do poprawnego dziaania wymagaa zainstalowania w tym samym rodowisku aplikacji obsugujcej poczt np. Microsoft Outlook. W przeciwiestwie do swojej poprzedniczki, usuga Database Mail do wysyania wiadomoci wykorzystuje protok SMTP (Simple Mail Transfer Protocol). Oznacza to, e usuga moe wsppracowa z dowolnymi serwerami pocztowymi. Ponadto usuga Database Mail jest bardzo prosta w uyciu, a jednoczenie umoliwia atw i szybk realizacj wielu zaawansowanych wymaga biznesowych spotykanych w aplikacjach bazodanowych. Poza wspomnian wczeniej obsug protokou SMTP, usuga Database Mail ma jeszcze szereg innych zalet: mechanizm wysyajcy wiadomoci dziaa niezalenie od silnika bazy danych, a wic obcia go w minimalnym stopniu. W przypadku, gdy komponent ten jest za60

trzymany lub nie dziaa poprawnie, SQL Server umieszcza wiadomoci w specjalnej kolejce. W momencie uruchomienia komponentu kolejka ta jest do niego przekazywana zalege wiadomoci s wysyane; dziki zastosowaniu profili moliwe jest zdefiniowanie i uycie wicej ni jednego serwera SMTP. W przypadku, gdy jeden serwer SMTP nie dziaa poprawnie, wiadomoci s wysyane z wykorzystaniem innych dostpnych. W dalszej czci artykuu zademonstruj, jak zdefiniowa takie rozwizanie; moliwo wyboru profilu do wysania konkretnej wiadomoci; moliwo przypisania wielu kont pocztowych do jednego profilu; wysyanie wiadomoci odbywa si w trybie asynchronicznym dziki kolejkom Service Broker, co oznacza, e podczas wysyania wiadomoci e- mail nie trzeba czeka na odpowied serwera; moliwo zdefiniowania zasad bezpieczestwa: uytkownicy, ktrzy chc korzysta z usugi Database Mail i wysya e-maile, musz mie nadan rol DatabaseMailUserRole w bazie msdb; doczanie plikw do wysyanych wiadomoci; moliwo zdefiniowania listy rozszerze plikw, ktre nie mog by wysyane jako zaczniki; moliwo zdefiniowania maksymalnego rozmiaru pliku zacznika; obsuga rodowisk klastrowych; wysyanie wiadomoci w formacie HTML;

Aktywowanie usugi Database Mail


W celu poprawnego uywania usugi Database Mail musimy j najpierw aktywowa, gdy domylnie nie jest ona dostpna po instalacji SQL Server. Moemy to uczyni na kilka sposobw: Z lokalizacji Menu Start -> Programy -> Microsoft SQL Server -> Configuration Tools uruchamiamy SQL Server Surface Area Configuration i klikamy odnonik Surface Area Configuration for Features. W nowym oknie wybieramy Database Mail, a nastpnie zaznaczamy opcj Enable Database Mail stored procedures. Wybr zatwierdzamy przyciskiem OK; W SQL Server Management Studio (podstawowym narzdziu do zarzdzania serwerem SQL Server i wykonywania polece jzyka SQL) rozwijamy ga Management, klikamy prawym przyciskiem myszy na element Database Mail i wybieramy Configure Database Mail. Wywietli si okno dialogowe z pytaniem, czy chcemy aktywowa t usug. Klikamy Yes; Z poziomu SQL Server Management Studio wykonujemy polecenie z Listingu 1.

Konfigurowanie usugi Database Mail


Zajmiemy si teraz konfiguracj usugi Database Mail na naszym serwerze. W tym celu wracamy do okna Configrue Database Mail z opisanego wczeniej punktu 2., a nastpnie wykonujemy ponisze kroki:
06/2009

Database Mail

W pierwszym oknie kreatora klikamy Next. W kolejnym oknie mamy do wyboru nastpujce opcje: Set up Database Mail by performing the following tasks czy w sobie trzy nastpne opcje i na niej si skupimy w dalszej czci artykuu; Manage Database Mail accounts and profiles umoliwia konfiguracj kont i profile wykorzystywanych do wysyania wiadomoci e-mail; Manage profile security konfiguracja zabezpiecze profili; View or change system parameters podgld i zmiana ustawie systemowych zwizanych z usug Database Mail. Klikamy Next. W oknie New Profile przedstawionym na Rysunku 1. mamy moliwo utworzenia nowego profilu. W tym celu wpisujemy dowoln nazw i opis profilu. W dolnej czci opisywanego okna mamy moliwo przypisania do tworzonego profilu konta SMTP. Jak ju wspomniaem wczeniej, z jednym profilem moe by zwizanych wiele kont pocztowych. W przypadku awarii jednego, profil do wysania wiadomoci wykorzysta kolejne. Priorytet wykorzystania kont definiujemy poprzez przesuwanie ich w hierarchii za pomoc przyciskw Move Up i Move Down. W przykadzie w pierwszej kolejnoci bdzie wykorzystywane konto igorkruk, a w przypadku niepowodzenia wysyania wiadomoci zostanie wykorzystane konto gmail. Aby zdefiniowa konto SMTP, klikamy przycisk Add. W oknie New Database Mail Account definiujemy nastpujce parametry: Account Name nazwa konta; Description opis konta; E-mail address adres e-mail, z ktrego bd wysyane wiadomoci; Display name nazwa, ktra bdzie pojawia si w wiadomociach wysanych z tego konta; Reply e-mail warto opcjonalna, adres email, ktry bdzie wykorzystywany w odpowiadaniu na wysane ze zdefiniowanego konta wiadomoci; Server name nazwa lub adres IP serwera SMTP, ktry bdzie wykorzystywany do wysyania wiadomoci z tworzonego konta; Port number numer portu, na ktrym nasuchuje serwer SMTP (warto domylna 25); This server requires a secure connection (SSL) opcja okrela, czy poczenie z serwerem SMTP bdzie szyfrowane; SMTP Authentication sposb uwierzytelniania do serwera SMTP: Windows Authentication using Database Engine sewww.sdjournal.org

rvice credentials logowanie do serwera SMTP z wykorzystaniem nazwy i hasa uytkownika systemu operacyjnego, z ktrego konta uruchamiana jest usuga bazy danych, Basic Authentication au-

toryzacja z wykorzystaniem podanej nazwy (User name) i hasa (Password, Confirm password), Anonymous authentication autoryzacja uytkownikw anonimowych (ze wzgldu na zagroenie ze

Listing 1. Aktywacja usugi Database Mail w bazie danych


sp_configure 'show advanced options', 1; GO GO RECONFIGURE; -- Warto 1 aktywuje usug Database Mail, 0 wycza. sp_configure 'Database Mail XPs', 1; GO GO RECONFIGURE

Listing 2. Utworzenie konta o nazwie igorkruk


EXECUTE msdb.dbo.sysmail_add_account_sp @account_name = 'igorkruk', @description = 'jakis opis', @display_name = 'Igor Kruk', @username='igor', @password='123',

@email_address = 'igor@igorkruk.pl',

@mailserver_name = 'mail.igorkruk.pl'

Listing 3. Utworzenie prolu o nazwie myProle


EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'myProfile', @description = 'Podstawowy profil do wysyania wiadomoci (art. SDJ)'

Listing 4. Przypisanie konta igorkruk do prolu myProle


EXECUTE msdb.dbo.sysmail_add_profileaccount_sp: @profile_name = 'myProfile', @sequence_number = 1 @account_name = 'igorkruk',

Listing 5. Nadanie prolowi statusu Public i Default


EXECUTE msdb.dbo.sysmail_add_principalprofile_sp @profile_name = 'myProfile', @is_default = 1 @principal_name = 'public',

Listing 6. Sprawdzenie ustawie parametrw usugi Database Mail


EXECUTE msdb.dbo.sysmail_help_configure_sp

Listing 7. Deniowanie parametru maksymalnego rozmiaru pliku zacznika


EXECUTE msdb.dbo.sysmail_configure_sp 'MaxFileSize', '2097152'

Listing 8. Wysyanie przykadowe wiadomoci e-mail


EXEC msdb.dbo.sp_send_dbmail -- profil @profile_name = 'myProfile', @recipients = 'igor@igorkruk.pl', @body = 'Database Mail. Konfiguracja i wykorzystanie uslugi w SQL Server 2005/ -- temat 2008',

-- odbiorca -- tre

@subject = 'SDJ - artykul'

61

Bazy danych
strony spamerw obecnie ju raczej nie wykorzystywana). W kolejnym oknie Manage Profile Security mamy moliwo zdefiniowania poziomu zabezpiecze dla profili. Profile mog mie status publiczny (Public) lub prywatny (Private). Do profili publicznych maj dostp wszyscy uytkownicy i role, do profili prywatnych dostp okrela si za dla poszczeglnych uytkownikw i rl. Na zakadce Public Profiles mamy moliwo okrelenia, ktre profile bd miay status Public, i ktry z nich bdzie profilem domylnym (opcja Default Profile). Na zakadce Private Profiles moemy przypisywa uytkownikw i role do poszczeglnych profili prywatnych. Dla naszych testw definiujemy tworzony profil jako publiczny i domylny. Kolejne okno Configure System Parameters jest niezwykle istotne, gdy pozwala zdefiniowa wiele wanych parametrw systemowych zwizanych z usug Database Mail. Poszczeglne opcje oznaczaj: Account Retry Attempts liczba podejmowanych prb wysania wiadomoci; Account Retry Delay (seconds) wyraony w sekundach interwa midzy kolejnymi prbami wysania wiadomoci; Maximum File Size (Bytes) wyraony w bajtach maksymalny rozmiar zacznika; Prohibited Attachment File Extensions rozdzielone przecinkami rozszerzenia plikw, ktre nie mog stanowi zacznikw wysyanych wiadomoci; Database Mail Executable Minimum Lifetime (seconds) okrelony w sekundach czas aktywnoci procesu wysyajcego wiadomoci e-mail w przypadku braku nowych wiadomoci w kolejce do wysania; Logging level poziom szczegowoci logowanych zdarze: Normal logowane s tylko komunikaty o bdach, Extended logowane s komunikaty o bdach, ostrzeenia i informacje jest to opcja domylna, Verbose logowane s dodatkowo informacje o powodzeniu wykonania operacji i dodatkowe inne komunikaty. Opcji Verbose najlepiej uywa w przypadku testowania i niepoprawnego dziaania usugi Database Mail, Reset All ustawia wszystkie wartoci na domylne. W ostatnim oknie kreatora wywietlone jest podsumowanie wykonywanych czynnoci i wybranych ustawie. W celu zatwierdzenia wprowadzonej konfiguracji klikamy przycisk Finish. Wszystkie opisane w powyszych krokach czynnoci mona take wykona z poziomu kodu T-SQL: Utworzenie konta suy do tego procedura sysmail _ add _ acount (Listing 2). Utworzenie profilu suy do tego procedura sysmail _ add _ profile (Listing 3). Dodanie konta do profilu suy do tego procedura sysmail _ add _ profileaccount (Listing 4).
06/2009

Rysunek 1. Okno New Prole

Rysunek 2. Skrzynka odbiorcza odebrana wiadomo

Rysunek 3. Wiadomo z zacznikiem

Rysunek 4. Wiadomo w formacie HTML


Listing 9. Wysyanie wiadomoci z zacznikiem
EXEC msdb.dbo.sp_send_dbmail

@recipients = 'igor@igorkruk.pl',

@query = 'SELECT [Name], [ProductNumber], [SellStartDate]

FROM AdventureWorks.Production.Product

@subject = 'Produkty sprzedawane po 2003-01-01', @query_attachment_filename = 'produkty.txt', @attach_query_result_as_file = 1

WHERE SellStartDate > ''2003-01-01''',

62

Database Mail

Nadanie status Public i Default suy do tego procedura sysmail _ add _ principalprofile (Listing 5). Sprawdzenie aktualnych ustawie parametrw sysmail _ help _ configure _ sp (Listing 6). Definiowanie parametrw suy do tego procedura sysmail _ configure _ sp (Listing 7). W przykadzie definiowany jest maksymalny rozmiar zacznika na 2 MB.

format wiadomoci: text (warto domylna) lub HTML; @importance wano wiadomoci: Low, Normal (warto domylna), High; @sensitivity okrela poufno wiadomoci: Normal (warto domylna), Personal, Private, Confidential;
@body _ format

rozdzielona rednikami lista zacznikw (musi zosta podana bezwzgldna cieka dostpu do kadego pliku); @query polecenie, ktrego wyniki mog zosta doczone do wiadomoci jako plik lub stanowi fragment treci;
@file _ attachements

Listing 10. Wysyanie wiadomoci w formacie HTML


-- definiujemy zmienn, w ktrej zapiszemy tre wiadomoci e-mail DECLARE @htmlBody NVARCHAR(MAX);

Testowanie usugi Database Mail


Utworzylimy profil i przypisalimy do niego konto. Powinnimy zatem sprawdzi poprzez wysanie testowej wiadomoci, czy nasze ustawienia s poprawne. Narzdzie SQL Server Management Studio daje nam tak moliwo. W tym celu klikamy prawym przyciskiem myszy element Database Mail znajdujcy si w gazi Management, a nastpnie wybieramy Send Test E-mail. W oknie wybieramy profil, z ktrego chcemy wysa wiadomo, wpisujemy adres odbiorcy, temat oraz tre e-maila, a nastpnie klikamy przycisk Send Test E-Mail. SQL Server informuje nas w nowym oknie, e nasza wiadomo zostaa dodana do kolejki wiadomoci oczekujcych na wysanie. Po chwili wiadomo powinna pojawi si w skrzynce odbiorczej.

-- budujemy tre wiadomoci, -- definicja tabeli zapisana w jzyku HTML, do ktrej doczone s wyniki zapytania SET @htmlBody = N'<H1>Contact & HireDate</H1>' + N'<table border="1">' + CAST ( ( N'<tr><th>Name</th><th>HireDate</th><th>Gender</th></tr>' + SELECT TOP 5 '', '',

TD = C.[FirstName] + C.[LastName], TD = E.[HireDate], TD = E.[Gender]

FROM HumanResources.Employee AS E

INNER JOIN Person.Contact AS C

ORDER BY 1 ASC ) AS NVARCHAR(MAX) ) +

ON E.[ContactID] = C.[ContactID]

Wysyanie wiadomoci e-mail


Zademonstruj teraz, jak z poziomu kodu TSQL mona wysya wiadomoci e-mail wykorzystujc usug Database Mail. Suy do tego procedura sp_send_dbmail, ktrej skadnia przedstawiona zostaa na Listingu 11. Poszczeglne parametry zostay opisane poniej: nazwa profilu, z ktrego chcemy wysa wiadomo. Jeli pominiemy ten parametr, to zostanie wykorzystany profil domylny dla danego uytkownika. Jeli uytkownik nie ma zdefiniowanego domylnego profilu, zostanie wykorzystany domylny profil publiczny. Jeli taki profil take nie zosta zdefiniowany, to wykonanie opisywanej procedury bez tego parametru spowoduje wywietlenie komunikatu o bdzie; @recipients rozdzielona rednikami lista adresw e-mail odbiorcw wiadomoci; @copy _ recipients rozdzielona rednikami lista adresw e-mail , na ktre zostan wysane jawne kopie wiadomoci; @blind _ copy _ recipients rozdzielona rednikami lista adresw e-mail , na ktre zostan wysane ukryte kopie wiadomoci; @subject temat wysyanej wiadomoci; @body tre wiadomoci;
@profile _ name

FOR XML PATH('tr'), TYPE

N'</table>' ;

-- wysyamy wiadomo z przygotowan wczeniej treci w formacie HTML EXEC msdb.dbo.sp_send_dbmail @recipients= 'igor@igorkruk.pl', @body = @htmlBody,

@subject = 'Contact & HireDate', @body_format = 'HTML'

Listing 11. Skadania procedury sp_send_dbmail


sp_send_dbmail [ [ @profile_name = ] 'profile_name' ] [ , [ @recipients = ] 'recipients [ ; ...n ]' ] [ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ] [ , [ @subject = ] 'subject' ] [ , [ @body = ] 'body' ]

[ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; ...n ]']

[ , [ @body_format = ] 'body_format' ] [ , [ @importance = ] 'importance' ] [ , [ @sensitivity = ] 'sensitivity' ] [ , [ @query = ] 'query' ]

[ , [ @file_attachments = ] 'attachment [ ; ...n ]' ] [ , [ @execute_query_database = ] 'execute_query_database' ]

[ , [ @attach_query_result_as_file = ] attach_query_result_as_file] [ , [ @query_attachment_filename = ] query_attachment_filename ] [ , [ @query_result_header = ] query_result_header ] [ , [ @query_result_width = ] query_result_width ]

[ , [ @query_result_separator = ] 'query_result_separator' ] [ , [ @exclude_query_output = ] exclude_query_output ] [ , [ @append_query_error = ] append_query_error ] [ , [ @query_no_truncate = ] query_no_truncate ] [ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]

www.sdjournal.org

63

Bazy danych
kontekst, z ktrego polecenie okrelone w parametrze @query ma zosta wykonane; @attach _ query _ result _ as _ file warto 0 oznacza, e wyniki polecenia okrelonego w parametrze @query zostanie doklejona do treci wiadomoci okrelonej w parametrze @body, warto 1 oznacza, e wynik zapytania bdzie doczony do wiadomoci w postaci oddzielnego pliku; @query _ attachement _ filename nazwa pliku, w ktrym zostan zapisane wyniki polecenia okrelonego w parametrze @query, parametr ten jest ignorowany w przypadku gdy parametr @attach _ query _ result _ as _ file ma warto 0; @query _ result _ header okrela, czy wyniki zapytania zdefiniowanego w parametrze @query bd zawieray nagwki kolumn; @query _ result _ width szeroko linii (wyraona w iloci znakw) formatowania wynikw; @query _ result _ separator znak rozdzielajcy poszczeglne kolumny wynikw; @exclude _ query _ output warto 0 oznacza, e komunikat wywietlony po wykonaniu zapytania okrelonego w parametrze @query zostanie dodany do wiadomoci, warto 1 oznacza, e ten komunikat zostanie pominity w wynikach; @append _ query _ error warto 1 oznacza, e wiadomo zostanie wysana nawet w przypadku, gdy zapytanie okrelone w parametrze @query zwrci bd komunikat o bdzie zostanie doczony do wiadomoci, warto 0 oznacza, e w takim przypadku wiadomo nie zostanie wysana; @query _ no _ truncate warto 0 oznacza, e dane w kolumnach bd obcinane do 256 znakw, warto 1 oznacza, e dane nie bd obcinane; @mailitem _ id dodatkowy, opcjonalny parametr zwracajcy identyfikator wysyanej wiadomoci.
@execute _ query _ database

do wiadomoci w postaci oddzielnego pliku o nazwie produkty.txt. Wiadomo wysyana jest na adres igor@igorkruk.pl. Implementacja tego zadania przedstawiona zostaa na Listingu 9. Zwrmy uwag, e tym razem nie podano parametru @profile moglimy tak uczyni, bo zdefiniowalimy wczeniej profil myProfile jako domylny i to wanie on zostanie uyty do wysania tej wiadomoci. Tre wiadomoci z widocznym zacznikiem produkty.txt przedstawiona zostaa na Rysunku 3. W kolejnym przykadzie wylemy wiadomo e-mail w formacie HTML. W tym przykadzie wysyamy wiadomo e-mail na adres igor@igorkruk.pl. Wiadomoci nadajemy temat Contact & HireDate, a jej tre zostaa sformatowana jako HTML, w ktrym zapisane s informacje o piciu osobach (imi, nazwisko, pe i data zatrudnienia). Dziki instrukcji FOR XML PATH('tr'), TYPE dane konwertujemy automatycznie na posta XML, a nastpnie doklejamy do definicji HTMLowej tabeli. Wyniki powyszych polece zostay zaprezentowane na Rysunku 4.

kich plikach zacznikw wysyanych wiadomoci. W celu sprawdzenia stanu kolejki Database Mail naley wykona nastpujce polecenie:
msdb.dbo.sysmail_help_status_sp

Zwracana jest warto STARTED lub STOPPED. Procedury sysmail_start_sp i sysmail_stop_ sp odpowiednio uruchamiaj i zatrzymuj kolejk usugi Database Mail.

Dodatkowe procedury zwizane z usug Database Mail


Usuga Database Mail przechowuje wszystkie informacje w bazie msdb, dlatego te musimy zadba o porzdkowanie i usuwanie zbdnych danych. Suy do tego specjalna procedura sysmail_delete_ mailitems_sp, ktra umoliwia usuwanie wiadomoci przetworzonych wczeniej ni okrelona w pierwszym parametrze data. Drugi parametr, ktry przyjmuje jedn z wartoci: sent, unsent, failed, retrying, umoliwia usunicie wiadomoci w zalenoci od ich statusu odpowiednio: wysane, niewysane, wysyanie zakoczone niepowodzeniem serwer SMTP zwrci bd, wysyanie do serwera SMTP nie powiodo si. Niepodanie adnej wartoci oznacza, e usuwane bd wiadomoci ze wszystkimi statusami. Zapytanie z poniszego przykadu usuwa wszystkie wiadomoci, ktre byy przetwarzane wczeniej ni 20 grudnia 2008.
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp @sent_before = 'December 20, 2008' ;

Monitorowanie usugi Database Mail


Jak ju wspomniaem wczeniej, usuga Database Mail utrzymuje wasny dziennik zdarze, w ktrym zapisuje informacje o rnych zdarzeniach nie tylko bdach w zalenoci od systemowego parametru Logging level. Dostp do tych logw uzyskujemy z poziomu SQL Server Management Studio. Klikamy prawym przyciskiem myszy Database Mail i z menu wybieramy View Database Mail Logs. Pojawia si okno Log File Viewer. W oknie znajdziemy m.in. opisy wszelkich bdw, ktre wystpiy podczas wysyania wiadomoci. Dostp do tego dziennika zdarze moemy take uzyska, wykonujc ponisze polecenie T-SQL:
SELECT * FROM msdb.dbo.sysmail_event_log

Podsumowanie
W artykule tym zapoznalimy si z usug Database Mail, dostpn w SQL Server 2005 i 2008. Umoliwia ona wysyanie wiadomoci e-mail bezporednio z poziomu serwera bazy danych. Dziki temu daje ona due moliwoci realizacji bardzo czsto spotykanych w prawdziwych projektach wymaga wysyania powiadomie uytkownikom systemw. Usuga Database Mail w znaczny sposb uatwia ycie take administratorom baz danych. W prosty sposb mog oni teraz informowa odpowiednich uytkownikw o okrelonych wydarzeniach zachodzcych w bazie danych.

Dodatkowe informacje na temat wiadomoci i statusu ich wysania s zapisane w specjalnych widokach:
SELECT SELECT SELECT * * * FROM FROM FROM msdb.dbo.sysmail _ msdb.dbo.sysmail _ msdb.dbo.sysmail _

Polecenie z Listingu 8. wysya najprostsz wiadomo e-mail, w ktrej zdefiniowany jest tylko odbiorca, temat i tre. Wykorzystywany jest utworzony wczeniej profil myProfile. Wynik tego polecenia zosta przedstawiony na Rysunku 2. (widzimy wysan wiadomo w skrzynce odbiorczej). W kolejnym przykadzie zdefiniowano polecenie SELECT, ktre pobiera z tabeli Production.Product z bazy AdventureWorks informacje o produktach, ktrych sprzeda rozpocza si po po 01 stycznia 2003 roku. Wyniki zapytania s doczone
64

allitems lista wszystkich wiadomoci;

sentitems lista wiadomoci wysanych;

IGOR KRUK
Igor Kruk jest z wyksztacenia informatykiem. Obecnie pracuje na stanowisku Business Intelligence Consultant i zajmuje si wdraaniem systemw klasy BI. Jest rwnie wspautorem ksiek Oracle 10g i Delphi. Programowanie baz danych oraz SQL Server 2005. Zaawansowane rozwizania biznesowe. Kontakt z autorem: igorkruk@gmail.com, http://www.igorkruk.pl

unsentitems lista wiadomoci niewysa-

nych;

SELECT

lista wiadomoci, ktrych wysyanie zakoczyo si niepowodzeniem;


faileditems mailattachments * FROM

FROM

msdb.dbo.sysmail _

SELECT

informacje o wszyst-

msdb.dbo.sysmail _

06/2009

Akademia UML

Modelowanie rl
na diagramach klas w jzyku UML cz 2
W poprzednim odcinku Akademii UML przekonalimy si, e dziedziczenie zwykle nie sprawdza si podczas modelowania rl i poznalimy proste sposoby radzenia sobie z rolami penionymi przez obiekty. Zobaczmy, jakie jeszcze techniki mona wykorzysta w takich sytuacjach.
Dowiesz si:
Jakie s zaawansowane techniki modelowania rl obiektw na diagramach klas UML; Jakie s konsekwencje stosowania rnych technik modelowania rl.

Powiniene wiedzie:
Zna notacj diagramw klas jzyka UML; Zna podstawowe techniki modelowania rl.

Poziom trudnoci

asze rozwaania na temat modelowania rl, rozpoczte w poprzednim odcinku Akademii UML, zakoczylimy na prostym i uniwersalnym wzorcu, zgodnie z ktrym role modelujemy jako osobne klasy, ktre s przypisane relacj kompozycji do gwnej klasy, reprezentujcej obiekt naszych rozwaa (zob. Rysunek 1). Wzorzec ten sprawdza si w wikszoci typowych przypadkw, jednak dopuszcza istnienie obiektw, ktre nie maj przypisanej adnej roli. Jeli wymagane jest, aby obiekt peni zawsze przynajmniej jedn rol, moemy zapisa to wymaganie w postaci reguy biznesowej (poza diagramem klas, np. w jzyku OCL) lub wykorzysta technik przedstawion na Rysunku 2.

Klasa abstrakcyjna
Technika ta rni si od wzorca przedstawionego na Rysunku 1 tym, e wprowadza dodatkow abstrakcyjn klas reprezentujc dowoln rol obiektu. Z tej klasy dziedzicz klasy reprezentu-

jce poszczeglne role. Zwrmy uwag, e liczebno relacji pomidzy gwn klas Kontrahent a abstrakcyjn klas RolaKontrahenta jest okrelona jako 1..*. Oznacza to, e kontrahent musi peni co najmniej jedn rol. Takiego ograniczenia nie mona byo umieci na diagramie na Rysunku 1, bo wymuszaoby to uycie jednej z rl. W poprzednim odcinku Akademii UML doszlimy do wniosku, e dziedziczenie zwykle nie najlepiej nadaje si do modelowania rl. Jak to si stao, e nagle dziedziczenie wrcio do ask? Wwczas prbowalimy dziedziczy poszczeglne role bezporednio z klasy Kontrahent, co skutkowao ograniczeniami zwykle nieprzystajcymi do rzeczywistoci. Tym razem dziedziczymy ze specjalnej klasy reprezentujcej dowoln rol kontrahenta, wic jest to jak najbardziej uzasadnione. Model wykorzystujcy klas abstrakcyjn ma jeszcze jedn zalet: stosunkowo atwo mona go rozszerza, dodajc w miar rozwoju systemu kolejne role. Dodanie nowej roli sprowadza si bowiem do utworzenia nowej klasy dziedzicz

cej z klasy abstrakcyjnej. Nie s potrzebne jakiekolwiek inne zmiany w modelu, za zmiany w implementacji s minimalne. Model ten ma jednak take jedn wad. Moemy wprawdzie elegancko zastrzec, e kady kontrahent musi peni co najmniej jedn rol, ale nie jestemy w stanie zapobiec, aby jeden kontrahent mia przypisanych kilka rl tego samego rodzaju (np. kilka obiektw klasy Klient). Jeli zaley nam na sformuowaniu takiego ograniczenia, moemy to zrobi jedynie w postaci reguy biznesowej zapisanej poza diagramem klas.

Klasa uniwersalna
Model z Rysunku 2 mona atwo rozszerza, dodajc nowe role. Jednak kade takie rozszerzenie wie si z przebudow systemu. Tymczasem coraz czciej klienci oczekuj, aby tworzone dla nich systemy byy konfigurowalne. W naszym przypadku wymaganie to oznacza moliwo dodawania nowych rl z poziomu administracji systemem, bez koniecznoci jego przebudowy. Wymaganie to moemy speni wykorzystujc model przedstawiony na Rysunku 3. Zamiast uywa w nim osobnej klasy dla kadej roli, stosujemy jedn, uniwersaln klas reprezentujc wszystkie role. Nie jest nam wic ju potrzebna klasa abstrakcyjna, bo klas uniwersaln moemy poczy bezporednio z gwn klas Kontrahent. Dodatkowa klasa TypRoli pozwala

Objanienia

OCL (Object Constraint Language) jzyk pozwalajcy na zapisywanie ogranicze dotyczcych modelu obiektowego w postaci formalnych wyrae o cile zdefiniowanej skadni i semantyce. Opis jzyka OCL jest czci specyfikacji UML.

Rysunek 1. Modelowanie rl przy pomocy dodatkowych klas i kompozycji

66

06/2009

Modelowanie rl

Rysunek 2. Wykorzystanie klasy abstrakcyjnej reprezentujcej rol

okreli, jakiego typu jest kady z obiektw klasy RolaKontrahenta. Obiekty klasy TypRoli tworz sownik dostpnych typw rl. Administrator systemu moe zarzdza tym sownikiem, na przykad dodajc nowe role w miar potrzeb. Rozwizanie to jest jak wida bardzo elastyczne i konfigurowalne. Ma tylko jedn wad. Jako e wszystkie role s reprezentowane przez jedn klas, nie moemy do poszczeglnych rl przypisa rnych atrybutw ani poczy poszczeglnych rl relacjami z innymi klasami. W modelu z Rysunku 2 moglimy poczy podklas Klient relacj z klas Towar, za podklas Dostawca z klas Surowiec. W modelu z Rysunku 3 wszystkie role musz mie identyczne atrybuty i relacje, i mog si od siebie rni jedynie typem roli. Nie moemy zatem pozosta przy dwch osobnych klasach reprezentujcych towary i surowce, i musimy je wszystkie upchn w jednej klasie Towar. Jest to cena, jak pacimy za moliwo swobodnej kon-

figuracji sownika rl bez koniecznoci kadorazowej przebudowy systemu.

Niezalene klasy
Wszystkie nasze dotychczasowe prby okieznania rl penionych przez obiekty opieray si na milczcym zaoeniu, e potrzebna nam jest jedna centralna baza kontrahentw, wrd ktrych w jaki sposb wyrniamy klientw, dostawcw oraz takich kontrahentw, ktrzy s jednoczenie klientami i dostawcami. Tymczasem nie zawsze jest to sytuacja podana. Wyobramy sobie du firm produkcyjn, w ktrej kontaktami z klientami zajmuje si Dzia Sprzeday, za zamwienia surowcw od dostawcw organizuje Dzia Zaopatrzenia. Te dwa dziay s od siebie zupenie niezalene. Dzia Sprzeday prowadzi swoj wasn baz klientw, za Dzia Zaopatrzenia swoj wasn baz dostawcw. Gdybymy w takiej firmie wdroyli system oparty na jednym z dotychczas om-

Rysunek 3. Wykorzystanie uniwersalnej klasy reprezentujcej rol

wionych modeli, jego uytkownicy doznaliby zapewne wielu rozczarowa i frustracji. Oba dziay musiayby bowiem korzysta ze wsplnej bazy kontrahentw. Pracownicy Dziau Sprzeday nie byliby pewnie zachwyceni, gdyby kto z Dziau Zaopatrzenia nagle i niepostrzeenie zmieni dane kontrahenta, ktry jest jednoczenie klientem i dostawc, a wic jest obsugiwany przez oba dziay. W takich sytuacjach najlepiej sprawdza si model przedstawiony na Rysunku 4. Mamy w nim dwie osobne, zupenie niezalene, klasy Klient i Dostawca. Oznacza to, e w systemie bdziemy mieli dwie osobne bazy: baz klientw, ktr bdzie zarzdza Dzia Sprzeday, oraz baz dostawcw we wadaniu Dziau Zaopatrzenia. Kady dzia bdzie odpowiedzialny za aktualno wpisw w swojej bazie. Jeli zdarzy si kontrahent, ktry jest i klientem, i dostawc, to jego dane zostan po prostu wpisane do systemu dwukrotnie: raz do bazy klientw i raz do bazy dostawcw. Taki kontrahent bdzie wic reprezentowany przez obiekt klasy Klient oraz przez osobny obiekt klasy Dostawca. Jak wic widzimy, nie zawsze maksymalne ujednolicenie modelu prowadzi do podanych rezultatw. Sam fakt, e dwie klasy maj kilka identycznych atrybutw (w naszym przypadku nazwa, adres i NIP), nie jest jeszcze wystarczajcym argumentem, aby te klasy w ten czy inny sposb czy. Po analizie uwarunkowa organizacyjnych moe si bowiem okaza, e stworzenie niezalenych, niepoczonych klas cho wydaje si nieeleganckie jest jedynym sensownym biznesowo rozwizaniem.

W nastpnym odcinku

Za miesic przyjrzymy si dziedziczeniu na diagramach klas. Zobaczymy, kiedy naley, a kiedy nie powinno si go stosowa.

SZYMON ZIOO

Rysunek 4. Wykorzystanie niezalenych klas www.sdjournal.org

Gwny konsultant w rmie RedPill, oferujcej specjalistyczne szkolenia informatyczne oraz doradztwo w zakresie zarzdzania projektami, modelowania procesw biznesowych oraz analizy i projektowania systemw informatycznych. Analityk biznesowy i systemowy, specjalizujcy si w analizie obiektowej, modelowaniu w jzyku UML oraz w XML-u i technologiach pokrewnych. Kontakt z autorem: sziolo@redpill.com.pl

67

Prawo w IT

Prawo autorskie dla programistw


Umowa o przeniesienie majtkowych praw autorskich do programu komputerowego
Zawarcie umowy o przeniesienie majtkowych praw autorskich jest jedn z form przejcia tych praw z twrcy na inn osob. Polskie prawo wprowadza regulacje dotyczce zarwno formy, jak i samej treci takiej umowy. Podstawowa znajomo tych przepisw suy zabezpieczeniu interesw zarwno programistw, jak i ich pracodawcw.
Dowiesz si:
Jakie przepisy reguluj zawarcie umowy o przeniesienie majtkowych praw autorskich; W jakiej formie powinna by zawarta taka umowa; Jakie elementy powinna zawiera taka umowa, aby bya wana i skutecznie zabezpieczaa interesy stron.

Powiniene wiedzie:
Kady program komputerowy stanowi przedmiot prawa autorskiego, jeeli stanowi przejaw dziaalnoci twrczej o indywidualnym charakterze; Prawa autorskie dziel si na osobiste i majtkowe; Prawa autorskie osobiste s niezbywalne.

Poziom trudnoci

godnie z ustaw z dnia 4 lutego 1994 r. o prawie autorskim i prawach pokrewnych (Ustawa), jedn z moliwoci przejcia majtkowych praw autorskich do programu komputerowego na inn osob jest zawarcie umowy. Umownie mona rwnie upowani inn osob do korzystania z programu komputerowego. Ten rodzaj umowy zwany jest licencj, jednake zawarcie jej nie stanowi o przeniesieniu majtkowych praw twrcy, a jedynie umoliwia innej osobie korzystanie z programu w okrelonym zakresie. Pozaumownym sposobem przejcia majtkowych praw autorskich na inn osob jest natomiast dziedziczenie. Szczegowe regulacje dotyczce zawierania i wykonywania umowy o przeniesienie majtkowych praw autorskich zostay zawarte w Rozdziale 5 Ustawy. Naley jednak zauway, i w odniesieniu do programw komputerowych, Ustawa wprowadza pewne szczeglne regulacje, odmiennie okrelajc np. zakres majtkowych praw autorskich, w porwnaniu z in68

nymi dzieami (np. utworami literackimi). Te szczeglne przepisy zostay zawarte w Rozdziale 7 Ustawy. Bardzo istotnymi dla praktyki obrotu majtkowymi prawami autorskimi s przepisy art. 41 ust. 2 i 4 Ustawy, zgodnie z ktrymi umowa (niezalenie od tego, czy przenosi majtkowe prawa autorskie, czy jedynie uprawnia do korzystania z nich) moe dotyczy tylko pl eksploatacji, ktre s znane w chwili jej zawarcia, a ponadto, obejmuje tylko te pola eksploatacji, ktre s wyranie w niej wymienione.

woli. Do zawarcia umowy wystarcza wic wymiana dokumentw obejmujcych tre owiadcze woli, z ktrych kady jest podpisany przez jedn ze stron, lub dokumentw, z ktrych kady obejmuje tre owiadczenia woli jednej ze stron i jest przez ni podpisany. Owiadczenie woli zoone w postaci elektronicznej opatrzone bezpiecznym podpisem elektronicznym weryfikowanym przy pomocy wanego kwalifikowanego certyfikatu jest rwnowane z owiadczeniem woli zoonym w formie pisemnej. Wymg pisemnego zwarcia umowy nie jest natomiast, co do zasady, wymagany przy udzielaniu licencji (z wyjtkiem udzielenia licencji wycznej).

Istotne elementy umowy


Ustawa nie wskazuje wprost katalogu elementw, ktre powinny zosta zawarte w umowie o przeniesienie majtkowych praw autorskich do programu komputerowego, aby mona byo j uzna za wan (tzw. essentialia negotti umowy) oraz aby skutecznie zabezpieczaa interesy stron. Na podstawie przepisw Rozdziaw 5 i 7 Ustawy oraz przepisw Kodeksu cywilnego mona jednak przyj, i szczeglnie wanymi elementami takiej umowy bd: dokadne oznaczenie stron umowy; wskazanie przedmiotu umowy, czyli zawarcie opisu danego programu komputerowego, aby nie byo wtpliwoci co do jego identyfikacji; precyzyjne oznaczenie, i umowa przenosi majtkowe prawa autorskie, a nie uprawnia jedynie do korzystania z programu;
06/2009

Forma umowy
Niezalenie od sposobu zawarcia umowy (zoenie i akceptacja oferty, aukcja, przetarg, negocjacje), zgodnie z art. 53 Ustawy, umowa o przeniesienie autorskich praw majtkowych wymaga zachowania formy pisemnej pod rygorem niewanoci. Oznacza to, zgodnie z Kodeksem cywilnym, i brak zachowania formy pisemnej takiej umowy zawsze powoduje jej bezwzgldn niewano. Naley przy tym zauway, i zgodnie z ar. 78 Kodeksu cywilnego, do zachowania pisemnej formy czynnoci prawnej wystarcza zoenie wasnorcznego podpisu na dokumencie obejmujcym tre owiadczenia

Prawo autorskie dla programistw

oznaczenie treci przenoszonych praw wedug pl eksploatacji; okrelenie wynagrodzenia lub wskazanie nieodpatnoci; przeniesienie wasnoci egzemplarza oprogramowania zawierajcego kod rdowy; zobowizanie do wydania dokumentacji technicznej niezbdnej do korzystania z oprogramowania; Naley zwrci uwag, i zgodnie z Ustaw, niewana jest umowa w czci dotyczcej wszystkich programw lub wszystkich programw okrelonego rodzaju tego samego twrcy majcych powsta w przyszoci. Zasada ta ma istotne znaczenie dla obrotu prawami autorskimi, niezalenie, czy dotycz one programw komputerowych, czy innych utworw, bdcych przedmiotem prawa autorskiego. Jest to instrument prawny chronicy interesy twrcy programu komputerowego, zapobiegajcy nieograniczonemu czasowo wizaniu si przez programist z podmiotem, ktry bdzie eksploatowa jego programy. Nie ma natomiast przeszkd, aby skutecznie zawrze umow przenoszc majtkowe prawa autorskie do caego dotychczasowego dorobku programisty. Biorc pod uwag zakres istotnoci poszczeglnych przepisw Ustawy, niektre elementy umowy o przeniesienie majtkowych praw autorskich do programu komputerowego wymagaj specjalnej analizy. Dotyczy to zwaszcza oznaczenia pl eksploatacji i zasad okrelania wynagrodzenia. Biorc pod uwag fakt, i zgodnie z art. 41 ust. 2 Ustawy, umowa o przeniesienie autorskich praw majtkowych obejmuje pola eksploatacji wyranie w niej wymienione, brak wskazania w umowie ktregokolwiek z pl eksploatacji wymienionych poniej bdzie skutkowa tym, i nabywca majtkowych praw autorskich nie nabdzie peni praw do programu. Pola eksploatacji Pojcie pl eksploatacji stanowi zasadniczy element definiowania treci majtkowych praw autorskich, ktre mog by przeniesione na inn osob poprzez zawarcie umowy. Zgodnie z art. 17, jeeli Ustawa nie stanowi inaczej, twrcy przysuguje prawo do korzystania z utworu i rozporzdzania nim na wszystkich polach eksploatacji oraz do wynagrodzenia za korzystanie z utworu. W odniesieniu do programw komputerowych, ustawodawca wskazuje w art. 70 ust. 4 Ustawy nastpujce moliwe pola eksploatacji: trwae lub czasowe zwielokrotnianie programu komputerowego w caoci lub w czci jakimikolwiek rodkami i w jakiejkolwiek formie;
www.sdjournal.org

tumaczenie, przystosowywanie, zmiany ukadu lub wprowadzanie jakichkolwiek innych zmian w programie komputerowym; rozpowszechnianie, w tym uyczanie lub najem, programu komputerowego lub jego kopii. Poza tym nie ulega wtpliwoci, i program komputerowy moe by przedmiotem rozporzdzenia, a jego podmiotowi przysuguje wynagrodzenie za korzystanie z programu przez osoby trzecie, jeli wynika to z ustawy lub umowy. Naley przyj, i powyszy zakres pl eksploatacji nie stanowi katalogu zamknitego. Biorc pod uwag postp techniczny oraz nowe formy zastosowa programw komputerowych, nie mona wykluczy moliwoci wskazania w umowie rwnie innych pl eksploatacji. Jednake warunkiem skutecznego objcia ich umow jest okoliczno, aby pola te byy znane w chwili zawierania umowy. Dokadne okrelenie w umowie pl eksploatacji ma rwnie istotne znaczenie w zwizku z brzmieniem art. 45 Ustawy, zgodnie z ktrym, jeeli umowa nie stanowi inaczej, twrcy przysuguje odrbne wynagrodzenie za korzystanie z utworu na kadym odrbnym polu eksploatacji. Przepis ten naley bowiem odpowiednio stosowa rwnie do programw komputerowych. Wynagrodzenie Uprawnienie twrcy oprogramowania do uzyskania odrbnego wynagrodzenia za korzystanie z programu na kadym odrbnym polu eksploatacji nie jest rwnoznaczne z koniecznoci wyliczenia w umowie kwot wynagrodzenia odrbnie dla kadego, objtego t umow, pola eksploatacji. Wystarczy, e umowa wyranie wskazuje, i okrelona kwota wynagrodzenia obejmuje wszystkie objte ni pola eksploatacji. Brak w umowie zapisw dotyczcych jakiegokolwiek wynagrodzenia nie oznacza jeszcze, i przeniesienie majtkowych praw autorskich do programu komputerowego nastpio nieodpatnie. Zgodnie bowiem z art. 43 ust. 1 Ustawy, jeeli z umowy nie wynika, e przeniesienie autorskich praw majtkowych lub udzielenie licencji nastpio nieodpatnie, twrcy przysuguje prawo do wynagrodzenia. W interesie na-

bywcy praw majtkowych autorskich do programu komputerowego, ktre zgodnie z ustaleniami stron maj zosta przeniesione nieodpatnie, jest dopilnowanie, aby zapis o nieodpatnoci zosta uwzgldniony w umowie. W odmiennym razie, w zwizku z form zawarcia umowy (pisemnie pod rygorem niewanoci), nabywca praw nie bdzie mg odmwi twrcy zapaty wynagrodzenia, nawet gdy istniay ustne ustalenia co do nieodpatnoci. Jeeli w umowie nie okrelono wysokoci wynagrodzenia autorskiego, wysoko wynagrodzenia okrela si z uwzgldnieniem zakresu udzielonego prawa oraz korzyci wynikajcych z korzystania z programu. Szczeglnie istotnym, cho w praktyce mao wykorzystywanym przez twrcw oprogramowania, jest przepis art. 44 Ustawy. Wprowadza on moliwo dania przez twrc podwyszenia wynagrodzenia w razie racej dysproporcji midzy tym wynagrodzeniem a korzyciami nabywcy autorskich praw majtkowych. Biorc pod uwag fakt, i dysproporcja ta moe istnie zarwno w momencie zawierania umowy, jak i powsta dopiero pniej, ustawodawca wyposay twrcw w moliwo pniejszego uzyskania dodatkowych korzyci z tytuu przeniesienia ich praw do programw, ktrych s autorami. Z uwagi na bezwzgldnie obowizujcy charakter tego przepisu, strony nie mog skutecznie wyczy jego zastosowania w przypadku zawarcia umowy odpatnej.

Moliwo odstpienia od umowy


W odrnieniu od twrcw innych utworw, twrca programu komputerowego nie moe odstpi od umowy lub j wypowiedzie ze wzgldu na swoje istotne interesy twrcze. Moe natomiast skorzysta z tych rodkw i domaga si naprawienia szkody, jeeli nabywca autorskich praw majtkowych do programu, ktry zobowiza si do jego rozpowszechniania, nie przystpi do tego w umwionym terminie. W przypadku braku umownych ustale co do takiego terminu, Ustawa wprowadza 2 letni termin na przystpienie do rozpowszechniania. Moliwo odstpienia lub wypowiedzenia umowy w takim przypadku twrca ma jednak dopiero po bezskutecznym upywie, wyznaczonego nabywcy, dodatkowego terminu do rozpoczcia rozpowszechniania, nie krtszego jednak ni sze miesicy.

PIOTR PRZEGALISKI
Radca prawny, absolwent Wydziau Prawa, Prawa Kanonicznego i Administracji Katolickiego Uniwersytetu Lubelskiego. Prowadzi indywidualn Kancelari Radcy Prawnego w Warszawie. Posiada dowiadczenie w obsudze prawnej przedsibiorcw, w tym rwnie oferujcych zaawansowane narzdzia i usugi informatyczne dla przedsibiorstw. Kontakt z autorem: piotrprzegalinski@krpp.pl, www.krpp.pl

69

Jzyki programowania

Biblioteka senseGUI
czyli GUI z automatu cz. 2
W poprzedniej czci artykuu (SDJ 1/2009) przedstawilimy podstawowe moliwoci biblioteki senseGUI. Przypomnijmy, e umoliwia ona deklaratywne tworzenie GUI na podstawie adnotowanych klas jzyka Java. Ten odcinek powicimy na omwienie jej pozostaych funkcjonalnoci oraz przedyskutujemy budow i sposb dziaania.
Dowiesz si:
Jakie s sposoby tworzenia GUI; Jak zaprojektowa wasn bibliotek do automatycznego tworzenia GUI; Do czego mog si przyda adnotacje.

Powiniene wiedzie:
Jak programowa w jednym z popularnych jzykw, np. Java;

jzyka i przez to nie moemy wykorzysta dotychczasowej funkcjonalnoci generowania GUI. W poniszych sekcjach omwimy kad z nich.

Internacjonalizacja
Cao jest bardzo prosta w uyciu i sprowadza si do wywoania jednej metody z kilkoma parametrami. Oczywicie najwaniejszym z nich jest instancja klasy (obiekt), dla ktrej potrzebujemy GUI. Oczywicie, zgodnie ze starym przysowiem, e nie ma ry bez kolcw, cen, ktr pacimy za generyczno rozwizania (zdolno do pracy z dowolnymi klasami jzyka) oraz nasze lenistwo, jest podobny wygld wywietlanych okien (patrz ramka: Moliwoci rozbudowy) oraz z gry narzucone moliwoci. Niemniej, biorc pod uwag niewielki nakad pracy potrzebny do uywania biblioteki, wydaje si to dobrym kompromisem. Jak wspomnielimy na pocztku, ten odcinek powicimy opisowi nowych moliwoci biblioteki oraz dyskusj dotyczc sposobu dziaania. Dodatkowe moliwoci biblioteki mog by podzielone na kilka kategorii: internacjonalizacja interfejsu, czyli w podstawowej wersji, zdolno do pracy z wieloma jzykami. Oprcz tego mona uwzgldni inne kwestie zwizane ustawieniami regionalnymi, takimi jak sposb wywietlania liczb czy sortowania; walidacja wprowadzonych danych. Czsto zanim zapamitamy dane w systemie, chcielibymy sprawdzi ich poprawno. Dobrze by byo, aby i w tej czynnoci biblioteka jako nas wspieraa; tworzenie GUI, dla ktrego nie mamy formalnego modelu. Czsto istnieje potrzeba wprowadzenia jakich danych, dla ktrych nie mamy zdefiniowanych klas Istnieje wiele podej do kwestii internacjonalizacji (i18n) aplikacji i moe ona dotyczy rnych jej aspektw: komunikatw, etykiet widgetw, tekstw wywietlanych uytkownikowi; danych, ktre mog by rnie przetwarzane w zalenoci od kraju czy regionu, np. daty, waluty, formaty liczb, porzdek sortowania, specyficzne znaki, itp. Wikszo wspczesnych platform ma wasne rozwizania. Poniewa nasza biblioteka jest dedykowana Javie, wic zastosujmy podejcie zalecane przez twrcw jzyka. Wprowadzajc moliwo pracy z wieloma jzykami nie bdziemy uszczliwia naszego programisty na si (bo moe nie jest mu to potrzebne) i postaramy si, aby biblioteka nie wymuszaa stosowania internacjonalizacji, a tylko je ewentualnie wspieraa. Ze wzgldu na kompromis pomidzy skomplikowaniem naszego rozwizania a korzyciami, ograniczymy si do tumaczenia wywietlanych tekstw, etykiet, itp. Wykorzystamy klas ResourceBundle, ktra jest pewnego rodzaju map pomidzy kluczem (np. nazw etykiety), a odpowiadajc mu wartoci (np. tekstem w odpowiednim jzyku, ktry ma si wywietli jako etykieta). Instancja tej klasy (czyli jej obiekt) jest przekazywany w jednej z przecionych wersji metody zajmujcej si tworzeniem i wywietleniem GUI. Jeeli obiekt (lub jego zawarto) nie bdzie prawidowy, to nie nastpuj adne zmiany w przetwarzaniu etykiet. W przeciwnym wypadku, parametr
06/2009

Poziom trudnoci

acznijmy od krtkiego przypomnienia podstawowych spraw zwizanych z bibliotek senseGUI. Projektujc to rozwizanie, autor niniejszego artykuu chcia odciy programist od tworzenia Graficznego Interfejsu Uytkownika w typowych, biznesowych aplikacjach. Zwykle na potrzeby takiego systemu naley zaprojektowa oraz zaimplementowa wiele okien umoliwiajcych wywietlanie oraz edycj modelu (danych). Korzystajc z tradycyjnego podejcia, wielokrotnie powielamy podobny kod, ktry pobiera wartoci atrybutw dla jakiej klasy (np. Osoba) i wywietla je w dedykowanym oknie. Jeeli chcemy je zmodyfikowa, musimy doda kolejne dziesitki (lub setki) linii programu w celu odczytania okrelonych wartoci z GUI i przesania ich do modelu (skady danych). To wszystko musimy zrobi dla kadej klasy biznesowej. Ci, ktrzy przez to przeszli, wiedz, e jest to do pracochonne, nuce (bo piszemy podobny kod), a przez to bdogenne. Aby jako zaradzi powyszym niedogodnociom, zaproponowalimy rozwizanie deklaratywne. Programista okrela za pomoc adnotacji, ktre elementy modelu (klasy jzyka Java) powinny mie GUI, a odpowiednia biblioteka (wanie senseGUI) zajmuje si wywietleniem i obsug odpowiednich okien.
70

Biblioteka senseGUI

adnotacji o nazwie label (patrz poprzednia cz artykuu) jest przetwarzany w specjalny sposb. Jego warto jest wykorzystana jako klucz do ustalenia prawidowego tekstu etykiety w konkretnym jzyku. Jeeli taki tekst nie zostanie odnaleziony, to po prostu wywietlony bdzie tradycyjny label. Dziki temu biblioteka bdzie prawidowo dziaa z, oraz bez internacjonalizacji.

Walidacja danych
Sprawdzanie poprawnoci danych, wprowadzonych przez uytkownika aplikacji, jest bardzo wanym aspektem interfejsu uytkownika. Oczywicie, mona to te robi na etapie przekazywania ich do skadu danych, ale wydaje si, e im wczeniej (bliej GUI) to zrobimy, tym lepiej. Dziki temu unikniemy problemw zwizanych z przekazywaniem uytkownikowi informacji o bdnych danych. Aby waciwie zaprojektowa architektur walidatorw, musimy odpowiedzie na dwa podstawowe pytania: jak podawa reguy walidacji (poprawnoci) danych?; jak je poczy z okrelonym widgetem oraz odpowiadajcymi mu danymi? Odpowiedzi na pierwsze pytanie mgby by jaki dedykowany jzyk zapisu regu. Mgby, ale poniewa chcemy, aby nasze narzdzie byo proste w uyciu, zastosujemy inne rozwizanie. Wykorzystamy to, co ju mamy, czyli po prostu jzyk Java. W nim bdziemy pisali kod sprawdzajcy poprawno danych. Programista bdzie mg skorzysta z ktrego z walidatorw dostarczonych z senseGUI lub stworzy wasny. Ta ostatnia czynno jest do atwa. Trzeba zaimplementowa prosty interfejs, zawierajcy tylko jedn metod (Listing 1). Metoda pobiera nazw etykiety oraz wprowadzone dane. Zwraca komunikat opisujcy bd lub null, gdy dane s prawidowe. W zaimplementowanym ciele metody wiemy z jakiego rodzaju danymi mamy do czynienia (czytajc je z parametrw), znamy te ich warto, wic moemy sprawdzi ich poprawno. Dziki temu, e korzystamy z jzyka Java, mamy pen swobod testowania rnych kryteriw. Drugi problem, ktry trzeba byo rozwiza, dotyczy powizania walidatora z odpowiednimi elementami modelu (danych)

oraz kontrolk GUI (widgetem). Pocztkowo planowaem wprowadzi dodatkowy parametr do istniejcych adnotacji (byby typu interface Validator). Niestety, parametry adnotacji jzyka Java mog by tylko typem podstawowym, Stringiem, Class, enum lub tablic wczeniej wymienionych. W zwizku z tym pierwotny pomys nie by realizowalny bezporednio. Oczywicie moglimy podawa nazw klasy jako String i korzystajc z refleksji powoywa do ycia odpowiedni obiekt. Pozostawa problem przekazywania dodatkowych parametrw dla walidatora, np. zakresu liczb, ktre moe przyjmowa sprawdzany atrybut, itp.
Listing 1. Interfejs walidatora
public interface Validator { }

Z tych powodw zdecydowaem si zmieni podejcie i wykorzysta map zawierajc nazwy etykiet jako klucze, oraz instancje walidatorw jako odpowiadajce im wartoci (poniewa potrzebujemy potencjalnie wielu rnych walidatorw dla jednego okna po jednym dla kadego widgetu). W efekcie walidator moe by dodany na jeden z dwch sposobw: podajc odpowiedni map jako parametr dla metody wywietlajcej okno do edycji danych (analogicznie jak postpilimy w przypadku internacjonalizacji);

public String isInvalid(String labelName, String enteredData);

Listing 2. Dodawanie nowego walidatora przy uyciu typu anonimowego


SingleObjectPlusFrame personFrame = GUIFactory2.getObjectFrame(person, personFrame.addValidator("firstName", new Validator() { @Override public String isInvalid(String labelName, String enteredData) { if(enteredData == null || enteredData.length() < 1) { } return labelName + " must be provided!"; resourceBundle);

})

return null;

Listing 3. Dodawanie walidatora sprawdzajcego czy liczba jest w podanym zakresie


personFrame.addValidator("annualIncome", new ValidatorRange(20000, 100000))

Listing 4. Interfejs wykorzystywany przez Ad Hoc GUI


public interface AdHocActionPerformed { }

public void Accept(Map<String, String> enteredData);

Listing 5. Przykad wykorzystania Ad Hoc GUI


String[] definitions = {"Database.addres", "Database.port:3306"};

SingleObjectPlusFrame adHocFrame = GUIFactory2.getAdHocFrame(definitions, "Database @Override information", "Connect", new AdHocActionPerformed() {

public void Accept(Map<String, String> enteredData) {

String enteredDbAddress = enteredData.get("Database.addres");

// Do something with entered data, i.e. connect to the database }, resourceBundle); // Add validators adHocFrame.addValidator("Database.addres", new ValidatorNotEmpty()); }

JOptionPane.showMessageDialog(null, "Address: " + enteredDbAddress);

Rysunek 1. Okno wygenerowane automatycznie przez kod z listingu 4. (Ad Hoc GUI)

adHocFrame.addValidator("Database.port", new ValidatorRange(0, 65535))

www.sdjournal.org

71

Jzyki programowania
woajc metod w klasie okna dostarczonego przez bibliotek. Takie rozwizanie zapewnia wysok elastyczno, poniewa proste walidatory mog by tworzone przy uyciu typw anonimowych (Listing 2), a bardziej wyrafinowane wielokrotnie uywane. Razem z bibliotek dostarczanych jest kilka przykadowych walidatorw sprawdzajcych, m.in. czy pole nie jest puste, czy jest liczb, czy jest liczb z podanego zakresu, lub czy tekst jest zgodny z podanym wyraeniem regularnym. Ich stosowanie jest bardzo proste i sprowadza si do wywoania metody dodajcej odpowiedni instancj z parametrami (Listing 3). Oczywicie procedura sprawdzania poprawnoci wprowadzonych danych jest uruchamiana automatycznie (gdy uytkownik wybierze przycisk akceptujcy modyfikacj danych, np. OK) i wykonywana zanim dane zostan zapisane w modelu. Jeeli zostan wykryte jakie bdy, to bd wywietlone odpowiednie komunikaty opisujce napotkane problemy. zwizku z tym nie moemy wykorzysta podstawowej funkcjonalnoci senseGUI, bazujcej na adnotacjach (bo nie mamy nic do adnotowania). Przykadowo, uytkownik aplikacji chciaby poczy si z jak baz danych i w tym celu powinien poda kilka informacji, np. adres i port. Tradycyjnie postaramy si, aby korzystanie ze stworzonych udogodnie byo maksymalnie uproszczone. Musimy wywoa jedn metod (ktra ma kilka przecionych wersji obsugujcych m.in. internacjonalizacj) pobierajc dwa zasadnicze parametry: tablic stringw opisujcych okno, ktre ma by wywietlone. Kady z nich zawiera etykiet oraz opcjonaln warto domyln; instancj klasy implementujcej interfejs AdHocActionPerformed (Listing 4). Wzorem poprzednich interfejsw, i ten jest bardzo prosty. Zawiera tylko jedna metod, ktra jest wywoywana przez bibliotek, gdy uytkownik zaakceptuje dane podane w wywietlonym oknie. W jej ciele programista umieszcza kod, ktry powinien pracowa na danych wprowadzonych przez uytkownika (przekazanych do jej wntrza w postaci mapy: nazwa etykiety oraz podana warto). Wracajc do naszego przykadu, byoby to czenie do bazy danych. Listing 5. zawiera przykad kodu wywietlajcego okno (Rysunek 1) realizujce powysz funkcjonalno. Warto zwrci uwag na kilka rzeczy: wewntrz metody Accept mamy dostp do wprowadzonych danych za porednictwem mapy bazujcej na etykietach; podobnie jak w podstawowej funkcjonalnoci senseGUI, tak i tutaj moemy korzysta z walidatorw; tytu okna oraz etykieta na przycisku akceptujcym mog by atwo modyfikowane.

Opis zastosowanych rozwiza


Do tego momentu koncentrowalimy si na oglnej filozofii dziaania naszej biblioteki oraz na sposobie jej uywania. Teraz postaramy si opisa jej architektur oraz sposb dziaania. Zrozumienie zawartoci tej sekcji moe wymaga troch wicej wiedzy, ni do tej pory. Dobra wiadomo jest taka, e aby korzysta z senseGUI nie musimy dokadnie wiedzie, jak jest zbudowana oraz jak dziaa. Biblioteka senseGUI zbudowana jest z okoo 30 klas, wic nie bdziemy w stanie szczegowo opisa budowy i dziaania kadej z nich. Zainteresowany Czytelnik moe przeanalizowa kod rdowy, ktry jest do bogato komentowany (gwnie w jzyku angielskim). Mona go pobra z: http://www.mtrzaska.com/sensegui. Podstawowe okno generowane przez bibliotek skada si z kilku elementw przedstawionych na Rysunku 2:

Ad Hoc GUI
Tym dziwnym terminem zdecydowaem si nazwa GUI, ktre bymy chcieli automatycznie stworzy w locie, gdy nie mamy do niego formalnego modelu danych w postaci, np. klas. W

Rysunek 2. Uproszczony widok komponentw zawartych w podstawowym oknie generowanym przez senseGUI

instancji klasy SingleObjectPlusFrame opisujcej cae okno; panelu SingleObjectPanel przechowujcego wszystkie wygenerowane etykiety oraz ich widgety. Takie pary s tworzone dla kadego elementu modelu, ktry zosta odpowiednio adnotowany. Panel (razem z zawartoci) moe by wykorzystywany niezalenie, tak jak kada inna instancja JPanel w Swing. Dziki temu mona go umieszcza we wasnych oknach. panelu ControlPanel zawierajcego kontrolki odpowiedzialne za akceptowanie wprowadzonych danych lub anulowanie tego procesu.

Moliwoci rozbudowy
Jak wikszo rozwiza i te rwnie mona ulepszy. Naley tylko pamita, aby nie przedobrzy w dodawaniu nowych opcji. Moe si bowiem okaza, e, gdy bdzie ich za duo, caa biblioteka przestanie by maa, szybka, intuicyjna i atwa w uyciu. Ten los spotka bowiem wiele istniejcych rozwiza, ktre tak zaczynay, a teraz trudno si w nich zorientowa. Niemniej, podajmy potencjalne kierunki usprawnie: modyfikowanie wygldu okien. Moemy doda np. kolejn adnotacj dla klasy, ktra pozwoli zdefiniowa niewielki obrazek wywietlany w oknie. Dziki temu, okna dla poszczeglnych klas bd miay bardziej indywidualny wygld i cao nie bdzie robia takiego monotonnego wraenia; bardziej zaawansowana internacjonalizacja obejmujca kolejne aspekty, takie jak np. sortowanie wywietlanych obiektw w widoku tabeli; wiksza liczba obsugiwanych typw danych oraz dedykowanych widgetw;

72

06/2009

Biblioteka senseGUI

Gwn klas, z ktrej korzysta programista uywajcy senseGUI jest GUIFactory2. Zawiera ona przecione wersje metody getObjectFrame, tworzce okno na podstawie podanego obiektu. W jej ciele wystpuj odwoania do rnych metod, z ktrych najwaniejsze to:
getSingleObjectPanel

zajmuje si tworzeniem panelu SingleObjectPanel (patrz wyej). Skada si z kilku gwnych czci: wywoania metody getGUIItems zwraca list opisujc elementy GUI, ktre powinny by wygenerowane na podstawie modelu. Kolekcja ta powstaje na podstawie odczytu budowy klasy, adnotacji, przy wykorzystaniu refleksji (ang. reflection); tworzenia odpowiednich elementw GUI (na podstawie powyszej listy); odczytywania wartoci z modelu (m.in. interesujca metoda invokeAndConver tToString), umieszczania ich w utworzonych widetach. Zauwamy, e nasza biblioteka powinna pracowa z du liczb typw danych oraz dowolnymi widgetami. W zwizku z tym potrzebujemy pewnego wsplnego mianownika, ktry umoliwi nam wymian danych. R

W przypadku senseGUI jest nim po prostu String. Analogicznie, jedynym wymaganiem odnonie widgetu jest istnienie metod getText oraz setText, ktre powinny odpowiednio pobiera warto oraz j modyfikowa; dodawania elementw do panelu; metoda dodajca nowoutworzony ControlPanel (patrz wyej). Kolejnym wanym elementem zasugujcym na omwienie jest funkcjonalno odpowiedzialna za uaktualnienie modelu (danych) na podstawie informacji podanych przez uytkownika. Zajmuje si tym metoda Accept z klasy SingleObjectPlusPanel. Przeledmy, co ona robi: najpierw usiuje sprawdzi poprawno danych za pomoc walidatorw; nastpnie dla kadego atrybutu pobiera jego widget, dynamicznie odczytuje aktualn warto (za pomoc metody getText patrz wyej) oraz wstawia j do atrybutu (dokonujc ewentualnych konwersji metoda invokeAndConvertFromString.

wana oraz zaimplementowana przez autora jako pewna propozycja dotyczca automatycznego tworzenia GUI. Wyrcza ona programist w tworzeniu wielu okienek dla poszczeglnych klas biznesowych. Dziki niej nie ma potrzeby powielania podobnego kodu, zajmujcego si budow okna, wywietleniem oraz dwustronn komunikacj z modelem danych. Wystarczy adnotowa zwyke klasy jzyka Java, a biblioteka zajmie si reszt. Warto te zauway, e dokadnie t sam koncepcj mona wykorzysta dla innych wspczesnych jzykw programowania, np. Microsoft C#. Oczywicie zaprezentowane rozwizanie jest tylko prototypem i moe suy jako podstawa do dalszej rozbudowy. Zachcam Czytelnikw do eksperymentw, modyfikacji kodu rdowego oraz nadsyania swoich uwag.

MARIUSZ TRZASKA
Mariusz Trzaska jest adiunktem w Polsko-Japoskiej Wyszej Szkole Technik Komputerowych. Wykada tam przedmioty zwizane z bazami danych, programowaniem, modelowaniem oraz inynieri oprogramowania. Oprcz tego bierze udzia w rnego rodzaju projektach komercyjnych oraz badawczych. Jest autorem kilkunastu artykuw publikowanych w kraju i za granic. Kontakt z autorem: mtrzaska@pjwstk.edu.pl

Podsumowanie
W dwch czciach artykuu przedstawilimy bibliotek senseGUI. Zostaa ona zaprojektoE K L A M

www.sdjournal.org

73

Felieton

Sabotaaa!
Czy jeste proaktywny, czy reaktywny twoja podwiadomo moe sabotowa podejmowane przez Ciebie decyzje. Aby waciwie reagowa, potrzebne jest co wicej ni emocjonalny zapa czy lepa konsekwencja.

roaktywno jest stawiana na pierwszym miejscu wrd nawykw ludzi efektywnych (por. [1]). Postawa ta przejawia si w tworzeniu pewnego bufora pomidzy bodcem a reakcj na niego (zob. [2]). Zamiast postpowa automatycznie, zgodnie ze schematem, wczamy i akcentujemy nasze ja. Umoliwia to szersze postrzeganie wyzwa (o osobiste cele i denia). Pozwala na szukanie rozwiza zbienych z nasz wizj i wyznawanymi wartociami. Dziaajc w zgodzie z samym sob mamy wraenie lepszej kontroli nad zadaniem. atwiej wtedy wyobrazi sobie sukces. Podamy go jak elementu do budowania wasnej marki. Wierzymy w to co robimy. Widzimy korzyci na poziomie osobistym. W oczywisty sposb zwiksza to nasze zaangaowanie i potrafi dziaa podobnie jak samospeniajca si przepowiednia. Zachowania przeciwne reaktywne pozbawiaj nas takich perspektyw. Machinalne wykorzystywanie istniejcych schematw sprawia, e stajemy si jedynie narzdziami. Wykonujemy zadanie, ktre jest nam obojtne, jestemy wobec niego bierni. Nie wnosimy nic od siebie. Odtwarzamy wyuczone sekwencje czynnoci. Na pewno wydaje si to bezpieczniejsze. Podajc zgodnie ze wskazwkami sformuowanymi przez kogo innego, odpowiadamy jedynie za wybr przewodnika, nie za za udzielone przez niego rady. W ten sposb zdejmujemy z siebie cz odpowiedzianoci. Dodatkowo jestemy przekonani, e podr naszego guru ju kiedy zakoczya si sukcesem inaczej na swoje miano przecie by nie zasuy. Nie ma wic przeszkd, eby nam nie udao si tego powtrzy. Taka sztampa niesie ze sob konkretne ryzyko. Proponowane praktyki s konsekwencj ewolucji myli szlifowanej i optymalizowanej latami. Przeprowadzony proces doskonalenia moe sprawi, e oryginalny problem, przyczyna, stanie si zbyt trudna do odczytania, przesanki zbyt odlege, a implikacje nadspodziewanie rozlege. Prba adaptacji takiego procesu na potrzeby konkretnego przypadku bdzie obarczona wysokim ryzykiem. W trakcie procesu moemy niewiadomie pomin procedury, ktre w zamierzeniach miay agodzi rne skutki uboczne. Takie puapki procesw powstaj zawsze, kiedy dokonuje si uoglnie na potrzeby tworzenia praktyk typu one-fits-all. Nie rozumiejc w peni powi74

za przyczynowo-skutkowych, zalenoci, kanaw przepywu informacji, moemy nie spostrzec nadchodzcych kopotw. Pocztkowa ufno w najlepsze praktyki moe prysn w najmniej odpowiednim momencie. Chodzi tu jednak o co wicej ni nasz niewiedz. Element ryzyka kryje si rwnie w sposobie dziaania naszego mzgu. Jednym z podstawowych procesw analitycznych ludzkiego mzgu jest rozpoznawanie wzorcw (zob. [3]). Poszukuje on rozwiza sytuacji, w ktrej si znalaz, odnoszc j do poprzednich dowiadcze zgromadzonych w naszej pamici. Wydaje si to by jedn z przyczyn, dla ktrych tak lubimy konstrukcje zdefiniowanych procesw. Jako wzorce s nam bliskie, gdy w ten sam sposb szukamy odpowiedzi na codziennie sytuacje. Ten komfort skutecznie usypia strach spowodowany ich niepenym zrozumieniem. Zachowania proaktywne okazuj si rwnie opiera na podstawowych prawidach funkcjonowania naszego systemu nerwowego. Oprcz rozpoznawania wzorcw nasz mzg wykorzystuje take emcjonalne atrybuty dowiadcze (zob. [3]). Zapamituje nie tylko fakty, ale rwnie uczucia wice si z nimi. Okrela w ten sposb ich wano, sposb czy energi reakcji (np. natychmiastowa czy opniona). Jest to proces bardzo istotny. Przypadki kliniczne dowodz, e brak moliwoci czenia faktw z odczuwanymi emocjami praktycznie uniemoliwia podjcie jakielkowiek decyzji (por. [4]). W ten sposb na naszych dziaaniach mog zaway dowiadczenia marginalne, ale o pozytywnych konotacjach. Wac odpowied, moemy na wstpie zdyskredytowa rozwizania odnoszce si do odlegego, ale bardzo bolesnego skojarzenia. Podobny wpyw moe mie nasz aktualny nastrj, chwilowe zachcianki czy kompleksy. W ten sposb emocje wypaczaj nasze osdy. Wynika z tego, e zachowania proaktywne w rwnym stopniu bywaj sabotowane przez nasz mzg co zachowania reaktywne. W obydwu przypadkach przyjmowane przez nas zaoenia maj rwne szanse na wypaczenie. Analiza oparta na takich podstawach czsto prowadzi do zgoa faszywych wnioskw. Nieprawidowe reakcje skutkuj rozdwikiem midzy celami osignitymi i tymi przez nas oczekiwanymi.
06/2009

Felieton
Wydaje si, e problem nie do koca ley w przyjmowanych postawach. Niezalenie od tego, czy jestemy reaktywni, czy proaktywni nasze osdy s obarczone ryzykiem fizjologicznym. Wydaje si, e w przypadku rozpoznawania wzorcw, jak i odnoszenia si do atrybutw emocjonalnych zagroenie wie si z brakiem zewntrznego punktu odniesienia. Oba procesy polegaj na odnoszeniu si do naszych przey i naszych dowiadcze. Ich waga bdzie znacznie wiksza ni dowiadczenia innych. Spjrzmy, jak rzadko sprawdza si stare przysowie o uczeniu si na cudzych bdach. Po prostu odczucia emocjonalne zwizane ze zdarzeniami zasyszanymi (przeczytanymi w podrczniku, obejrzanymi w telewizji) s znacznie sabsze ni wasne. Jestemy przekonani, e sami zrobimy to lepiej. Po czym okazuje si, e zachowania zostay wymuszone przez rne dodatkowe okolicznoci i popeniamy te same bdy. Historia lubi si powtarza. To, czego potrzebujemy, jest obiektywnym sposobem weryfikacji naszych osdw. Potrzebujuemy jednoznacznego ukadu odniesienia, ktry pomgby nam dokonywa wyborw. Nasze wybory bd wtedy oparte na uniwersalnych przesankach. Potrzebujemy czego w rodzaju kodeksu, drogowskazu, ktry pomoe w podejmowaniu decyzji. Truizmem wydaje si mwienie o koniecznoci, e kodeks musi by uyteczny. Spjrzcie jednak na Traktat Lizboski ponad 300 stron niemoliwych do zrozumiemia bez znajomoci poprzednich traktatw i dziesitkw towarzyszcych im dokumentw. By moe jest tam sporo praktycznych zaoe, ale kt miaby si przedrze si przez tak ilo? Oryginalna konstytucja Stanw Zjednoczonych miecia si na czterech stronach i przetrwaa do dzisiaj z jedynie 27 poprawkami. Czy w wiecie oprogramownia jest inaczej? Ley przede mn ksika do SixSigma naprawd opasa, bdzie ze 700 stron. Niedaleko PmBok te kloc drzewa na ni poszed. No i pojedyncza kartka z kilkoma linijkami tekstu zatytuowana Agile Manifesto. Najwaniejsze na kartce s nastpujce cztery linie tekstu: jednostki i wspdziaania midzy nimi nad procesy i narzdzia; dziaajce oprogramowanie nad dokadn dokumentacj; wspprac z klientem nad negocjacj umw; reagowanie na zmiany nad realizowanie planu; Oczywicie, mona mie wtpliwoci co do wieoci i odkrywczoci tych stwierdze. Odzwierciedlaj jednak pewien powrt do korzeni, zesp podstawowych wartoci, ktrych jednoznacznego okrelenia zawsze brakowao mi we wstpie do jakiegokolwiek znanego mi wczeniej procesu. Taki manifest dostarcza jasnej wykadni dla szacowania tego, co jest waniejsze; wartociowania argumentw, gdy trzeba wybra midzy rnymi drogami postpowania. Dostarcza pewnych ram, ktre mog by wykorzystane do okieznania zbyt proaktywnych postaw. Przykadowo jeeli gr zaczn bra nasze ambicje dotyczce kariery zawodowej wystarczy przypomnie sobie instrukcj numer 1 i 3. Mwi ona, e tak naprawd najwaniejszy jest klient. Gwarantem sukcesu bdzie nie promowanie wasnej osoby, ale umoliwienie sprawnego dziaania zespou. Rwie z puntku widzenia wykorzystywania tradycyjnych procesw tworzenia oprogramowania warto powyszego manifestu jest nieoceniona. Reguy druga i trzecia stanowi powien wany bezpiecznik przy zagbianiu si w zbyt sformalizowane metodyki. Wystarczy zada sobie pytanie: czy dostarczamy czego wartociowego, czy jedynie beletrystyk? Czy cigle robimy to, co jest potrzebne? A moe zmieniajce si warunki rynkowe sprawiy, e nasz produkt sta si przestarzay i niekonkurencyjny zanim jeszcze pojawi si na pce sklepowej? Fundamentalna rnica polega na tym, e zamiast gotowca, ktrego z powodu wielkoci i stopnia skomplikowania nie zawsze jestemy w peni obj i zrozumie, zaczynamy od wyksztacenia podstawy etycznej. Ta podstawa dostarcza nam nastawienie na poziomie emocjonalnym. Mamy szans dostroi si do idei, do jej ducha, a nie tylko do litery. Opieranie si na takich mikkich przesankach jest rwnie miarodajne, co bezporednie odwoywanie si do rozdziaw. Prosz spojrze na niektre orzeczenia Trubunau Konstytucyjnego. Jeeli nie istniej dostateczne przesanki do wnioskowania bezporednio z Konstytucji, czsto orzeka si zbieno z jej duchem, przesaniem. Z podobnym przesaniem tworzona jest Ksiga Jakoci dla ISO2001. Nasz proces podejmowania decyzji moe ucierpie przez brak zewntrznego punktu odniesienia. Kierowanie si jasnym i prostym kodeksem moe uchroni nas przed opieraniem si na emocjach niezwizanych bezporednio z zadaniem lub przyjmowaniem za podobne sytuacje, ktre s diametralnie inne. Kodeks moe pomc zweryfikowa, czy podejmowane przez nas decyzje bd szy w podanym kierunku. Jeeli zaobserwujemy niezgodno, naley si dobrze zastanowi, czy przyjte zaoenia nie zostay wypaczone przez nas samych. Artyku wyraa prywatne pogldy autora, ktre niekoniecznie odzwierciedlaj stanowisko Silicon & Software Systems Ltd. (S3)

Te kilka stwierdze byo moim pierwszym kontaktem z metodami zwinnymi. Zamiast rozpocz poznawanie ich od tomw specyfikacji, przeczytaem kilka powyszych linijek manifestu. Pozwolio mi to zrozumie podstawowe idee skadajce si na metody zwinne.

[1] Seven habits of highly effective people, Steven Covey; [2] Proaktywno, krzysztofkrzos, Portal ludzi proaktywnych, Marzec 2006; [3] Why good leaders make bad decisions, Andrew Campbell, Joe Whitehead, Sydney Finkelstein, Harvard Business Review, Luty 2009; [4] Inteligencja Emocjonalna, Daniel Goleman, Media Rodzina 2007.

ARKADIUSZ MERTA
Autor od 11 lat zajmuje si zagadnieniami projektowania i realizacji oprogramowania. Aktualnie jest pracownikiem Silicon & Software Systems Polska zatrudnionym na stanowisku menadera projektw. Kontakt z autorem: arkadiusz.merta@s3group.com

www.sdjournal.org

75

Wywiad

Janusz Korwin-Mikke O blogach


Janusz Korwin - Mikke Urodzony 27 padziernika 1942 r. w Warszawie, onaty, czterech synw, dwie crki, dwch wnukw, pi wnuczek. Polityk, publicysta. Hobby: Szachy, tenis, ping-pong, bryd, bilard, GO, warcaby Mistrz Krajowy w brydu, wspautor (z mistrzem wiata Andrzejem Macieszczakiem) czterech ksiek oraz autor zbioru felietonw ,,Pewnego razu... okresami zawodowy brydysta, czonek Kadry Narodowej. , Witam serdecznie Panie Januszu Janusz Korwin Mikke: Witam serdecznie. Jestem zdumiony, e istnieje pismo dla programistw, ktre nie wychodzi w Internecie, a jest drukowane na papierze. Jestemy najstarszym pismem dla programistw na rynku. Wanie wersja papierowa cieszy si duym uznaniem w rodowisku. Rozumiem: konserwatywnie. Wywiady te robicie osobicie... Chciabym zacz od tego, jak zaczo si u Pana blogowanie? JKM: Na pocztku nie byem do tego przekonany. Uwaaem to cae blogowanie za gupstwo. Namawiano mnie do tego rok. W kocu si zgodziem... i wcignem si w t zabaw. Jak dugo prowadzi Pan swj blog? JKM: Prawie 2, 5 roku. Blogi od dawna przestay by traktowane jako internetowe pamitniki. Obecnie maj tak du si oddziaywania, e mwi si wrcz o blogowej rewolucji. Skd, wedug Pana, bior si takie opinie? JKM: Std, e prasa, przynajmniej w Polsce, opanowana jest przez, delikatnie mwic, establishment - czyli na og przez bezpiek, ktra rzdzi obecnie Polsk. Internet natomiast wci jeszcze jest wolnym medium. Std to, co tam ludzie pisz, nie jest robione dla pienidzy lub eby si komu przypodoba - tylko po to, aby wyraa swoje opinie. Kiedy pisywaem dla pewnego magazynu samochodowego. Pewnego dnia napisaem felieton na temat masonerii i wysunem przypuszczenie, e bdzie to mj ostatni tekst dla tego pisma. I rzeczywicie, tak si stao. Okazao si jednak potem, e wcale nie chodzio o ten felieton - lecz o to, e od dawna gosz hasa przeciwko ubezpieczeniom, a firmy ubezpieczeniowe stanowi gwne rdo ogosze w prasie motoryzacyjnej. Natomiast w Internecie to mi nie grozi. Mog swobodnie wyraa swoje opinie.
76

Blog jest medium specyficznym, dwustronnym, opartym na dialogu. Przynajmniej takie jest zaoenie. Czy czsto wchodzi Pan w interakcje ze swoimi czytelnikami lub sam uczestniczy w takich dyskusjach? JKM: Tak. W mniej wicej co drugim blogu ustosunkowuj si do komentarzy. Oczywicie nie jest moliwe, ebym ustosunkowywa si do wszystkiego, bo mam ponad dwiecie komentarzy dziennie. Wiele z tych komentarzy to s jakie gupstwa, ale jest te duo takich, ktre wymagaj odpowiedzi. Ja odpowiadam na kilka, ze wzgldu na ograniczone moliwoci. Jakie s wedug Pana gwne zalety blogowania? JKM: Dla mnie najwiksz zalet jest to, e pisz to co chc i nie jestem od nikogo zaleny. Ja jestem w specyficznej sytuacji, bo mnie reimowa prasa raczej tpi. W tej chwili pojawiam si w prasie codziennej znacznie mniej ni za komuny. Co prawda zdarzyo si w poprzednim systemie, e przez cay rok udao mi si napisa tylko jeden artyku w caej prasie, a pisaem dziennie kilka. Na dzie dzisiejszy Gazeta Wyborcza nigdy mnie nie drukuje, jako wrednego anty-semity, Nasz Dziennik nie jako wstrtnego liberaa, z Dziennikiem jestem w stanie wojny... Rzeczpospolita te mnie nie drukuje, chyba e jaki list raz na jaki czas, bo to atwiej przejdzie przez cenzur. W adnej wikszej gazecie nie mog pisa. Musz zatem powiedzie, e pod tym wzgldem byo mi za komuny lepiej. Zdarzy si na przykad przypadek, e opublikowalimy (pod ziemi, oczywicie) Program liberaw. I w gazecie onierz Wolnoci wydrukowano nam tekst co do literki, chocia krytykowalimy w nim socjalizm z rzeczowym uzasadnieniem, dlaczego nam si to nie podoba. Ale wydrukowali! Dzi adna gazeta nie wydrukowaaby naszego programu. A jakie Paskim zdaniem s sabe strony blogowania? JKM: Przede wszystkim pisanie bloga jest czasochonne. Samo pisanie zajmuje mi co

prawda 15 20 minut, czasami wicej ale do tego dochodzi nagrywanie krtkich videoblogw plus zapoznawanie si z opiniami Komentatorw. Oglnie wszystko to zabiera okoo godzin. Pomagaj mi Maonka i Crka, ale poniewa jestem perfekcjonist, staram si robi wszystko sam. Poza tym nie widz ujemnych stron blogowania. Chyba, e za tak ujemn stron mona uzna to, e zraam ludzi - cokolwiek napisz. Przeciwnicy blogw mwi o tym , e duo w nich grafomastwa, niepotrzebnej treci, e nie warto marnowa czasu na czytanie wpisw amatorw. Co Pan odpowie na te zarzuty? JKM: W ogle mnie to nie interesuje. Pan usiuje stworzy pewn sztuczn kategori blogw. To tak jakby Pan powiedzia, e nie warto czyta ksiek. A prawda jest taka, e po prostu s dobre i ze blogi. A wszystkich blogw i tak si przecie nie przeczyta, choby si chciao. Kontrowersyjne tematy s poruszane na wielu blogach rwnoczenie, co pozwala
06/2009

JKM
spojrze na problem z rnych stron. Czy zgadza si Pan z takimi opiniami? JKM: Oczywicie, e tak. Ludzie wchodz, czytaj i mog si zapozna z rnymi punktami widzenia. Natomiast jest rzecz ciekaw, e ja mam w tej chwili okoo miliona wej na mj blog miesicznie, kolega Stanisaw Michalkiewicz ma p miliona, a pani Joanna Senyszyn ma sto tysicy. To jest czowka. Ciekawe, e na pierwszych dwch miejscach s czonkowie UPR - partii, ktra nie jest dopuszczana do gwnych mediw. Pewno wanie dlatego: ludzie chc pozna ukrywan przez establishment prawd. A moe odwrotnie: wanie dlatego, e s to pogldy interesujce, nie s one pokazywane w TV? A jak Pan skomentuje to, e bardzo popularny jest ostatnio blog Janusza Palikota? JKM: Zainteresowanie nim wynika z tego, e rozmaite wygupy p. Palikota (czsto zreszt interesujce) reklamuj w telewizji. W USA pisanie blogw stao si opacalnym zajciem. S blogerzy, ktrzy pracuj dziesitki godzin szukajc informacji w Internecie traktujc to jako zawd. Czy sdzi Pan, e w Polsce rwnie jest moliwe zarabianie na tego typu dziaalnoci? JKM: Wanie uruchomiem prbnie wasny portal (http://jkm.korwin-mikke.pl/), na ktrym znajdzie si mj blog. Licz na reklamy. Niektrzy z naszych czytelnikw uwaaj, e zamieszczanie reklam na blogu zabija jego ide. Chodzi o to, e bezinteresowne dzielenie si swoimi przemyleniami i wiedz odchodzi w tym momencie w niebyt. Czy zgada si Pan z tym? JKM: Oczywicie, istnieje obawa, e blogger bojc si straci reklamy, bdzie podlizywa si reklamodawcom. Miaem przykad w ostatnich dniach, kiedy dla pewnego pisma napisaem felieton, wyjatkowo wrcz schlebiajcy czytelnikom tego pisma. Powiedziano mi, e nie mog go zamieci, bo krytykowaem ich reklamodawcw!!! Na szczcie jestem finansowo niezaleny, wic uzalenienie mi nie grozi. Coraz czciej w sieci pojawiaj si blogi pisane przez specjalistw, np. znawcw rynku reklamy. Czy wedug Pana, blogosfera moe sta si w przyszoci jednym z gwnych miejsc do badania rynku, produktw, usug itp? JKM: Nie sdz, poniewa rzetelno takich bada jest adna. Przejdmy teraz do polityki. W Stanach Zjednoczonych sie, rwnie blogi, stay si jednym z gwnych narzdzi prowadzenia kampanii wyborczych, co byo szczeglnie widoczne w ostatnich wybowww.sdjournal.org

rach. Na ile w Paskiej opinii moliwe jest realizowanie polityki przez sie? Myl, e to nastpi ju w najbliszych wyborach, zwaszcza tych wsplnotowych. Wezm w nich bowiem udzia, akurat ci ludzie, ktrzy z Sieci s doskonale zaznajomieni. Czy Pan planuje w taki sposb wykorzysta sie? JKM: Jeli bd startowa w tych wyborach, to tak. W Stanach Zjednoczonych korzystanie podczas wyborw z Internetu jest ju norm. Jakby to miao wyglda np. w Polsce, bo u nas jest to jeszcze troch w powijakach? JKM: Tak samo jak wszdzie na wiecie. Kada partia, niezalenie od swojej sytuacji finansowej, moe zamieci swj program w Internecie, a nastpnie kady moe ten program przeczyta. Jest to niewtpliwa zaleta Sieci. Ostatnia kampania w USA potwierdzia, e blogi mog skutecznie pozyskiwa wyborcw. Na ile moe to by w chwili obecnej skuteczne w Polsce? JKM: Trudno mi powiedzie, poniewa nie jestem fachowcem w tej dziedzinie. Czy zgadza si Pan z opiniami niektrych specjalistw, e w przyszoci blogosfera moe zastpi tradycyjne kampanie? JKM: Ja myl, e po prostu znikn gazety. Prosz zwrci uwag, e trac one obecnie duo czytelnikw i jest to stay trend. A jeli chodzi o telewizj, mityngi wyborcze, spoty? JKM: Ja bd stara si wyprbowywa to na swoim blogu. Zgasza si do mnie wielu ludzi z rozmaitymi pomysami. Pojawiaj si opinie, e w Sieci trafia si do wielu odbiorcw, a problem jest z przekuciem tego w konkretne poparcie. JKM: Problem w tym, e ludzie chtnie aktywni s w Internecie, natomiast gorzej jest z wyjciem na ulic lub wysaniem listu, bo to nie jest ich ulubione zajcie. Ich zajciem jest gwnie siedzenie przy komputerze. Gdyby wybory mona byo robi przez Internet, to znacznie by si to poprawio. Czy jest Pan zwolennikiem oddawania gosw przez Internet? JKM: Tak, oczywicie. Nie ma przecie znaczenia, jak oddaje si gos. Przy tym mona te zaoszczdzi na kosztach wyborw. atwo jest zaoy bloga, duo trudniej pisa tak, aby by chtnie czytanym. Czy Pan, jako autor najpopularniejszego bloga w Polsce, mgby udzieli pewnych wskazwek naszym czytelnikom?

JKM: witej pamici Antoni Sonimski pisa kiedy, e dawniej eby wzbudzi sensacj, trzeba byo na scenie pokaza nag kobiet, a dzisiaj wystarczy powiedzie kilka sw prawdy poprawn polszczyzn - i to robi sensacj. Ot dzisiaj naga kobieta na scenie w ogle nie budzi ju adnego zainteresowania, bo to ju spowszedniao. Dzisiaj, w czasach telewizji, Prawda staa si towarem deficytowym. Rwnie logiczne mylenie jest czym rzadkim. Czowiek czytajcy widzi kolejne zdania, moe wrci do poprzednich wic to musi si jako trzyma kupy. Ogldajcy kolejne, nie powiazane ze sob obrazy w telewizji traci zdolno logicznego rozumowania. Obecnie, jeeli czowiek rozumuje logicznie, to budzi to szok zupeny. Moje wskazwki to zatem: Prawda plus logiczne mylenie. Wspomina Pan o planach zwizanych z Paskim portalem. Czy mgby Pan powiedzie co wicej na ten temat? JKM: Portal ruszy prawdopodobnie 1 marca. Udao si pozyska paru sponsorw. Poza blogiem, ktry bdzie si znajdowa na portalu, planuj zamieszcza ogromn ilo linkw do prawicowych portali i blogerw, gazet, telewizji, rwnie tych zagranicznych. Chcemy take umieszcza wiadomoci, ktrych nie znajdzie si w mediach reimowych. Portal bdzie rozbudowywany. Chodzi o to, by ludzie mieli moliwo poznania i dostpu do pogldw i wiadomoci innych ni te, ktre dominuj w mediach. Czy nie obawia si Pan, e moe pojawi si pokusa, eby cenzurowa Internet? JKM: Ale oczywicie, e si obawiam! Powiem wicej: jestem przekonany, e gdy tylko Sie zacznie wpywa na polityk, natychmiast pod pretekstem walki z terroryzmem lub .. z pedofili zostanie ocenzurowana. Ludzie z establishmentu zbyt wiele kradn, by z tego zrezygnowa, a jeszcze i w ciupie wyldowa. Licz jednak, e blokady bd robili informatycy, patni od godziny pracy, traktujcy to z obrzydzeniem, a obchodzi je bd ludzie lubicy t dziaalno. Z dnia na dzie bd powstawa systemy maskowania informacji tak, eby komputery rzdowe nie mogy ich zakwalifikowa. Co jak co, ale obchodzi przepisy to Polak potrafi! Na koniec chciaem zapyta, czy chciaby Pan co powiedzie naszym czytelnikom? JKM: Zapraszam Czytelnikw, na pewno fachowcw, do wsppracy przy prowadzeniu portalu. Bdzie mi bardzo mio. Dzikuj za rozmow. JKM: Prosz uprzejmie. Rozmawia ukasz opuszaski Redaktor Prowadzcy SDJ
77

KLUB PRO
Jeeli Twoja firma jest prenumeratorem Software Developers Journal za comiesiczn dopat 50 PLN +VAT moesz dodatkowo otrzyma reklam. Wystarczy tylko, aby profil Twojej firmy pokrywa si z naszym magazynem. Wylij do nas: logo firmy, dane kontaktowe i informacj o firmie Reklama przez 12 kolejnych numerw tylko za 600 PLN +VAT. Jeeli nie posiadasz jeszcze prenumeraty moesz j zamwi w atrakcyjnej cenie. Dla nowych prenumeratorw specjalna oferta 690 PLN.

Oferta skierowana dla firm

sdj@software.com.pl tel. 22 427 36 91 pren@software.com.pl http://buyitpress.com


Opera Software
Opera Softwares vision is to deliver the best Internet experience on any device. We are offering browser for PC/desktops and embedded products that operates across devices, platforms and operating systems. Our browser can deliver a faster, more stable and flexible Internet experience than its competitors. http://www.opera.com

Skontaktuj si z nami:

Architektury systemw IT

Twrca frameworkw JUVE i serwera aplikacji AVAX oferuje usugi, doradztwo, rozwizania do tworzenia nowoczesnych, duych systemw i rozwiza informatycznych/internetowych, integrujce architektury ery post-J2EE/.NET, wykorzystujce MDD/MDA dla dziedzin bankowo, telekomunikacja, handel, e-commerce, ERP/Workflow/ CRM, rozwizania internetowe, portalowe. www.mpsystem.com mpsystem@mpsystem.com

FRONTLINE STUDIOS

Frontline Studios amerykasko-polski twrca gier konsolowych oraz PC szuka utalentowanych koderw (bardzo dobra znajomo C/C++; Java, Delphi, UML), dowiadczonych grafikw (2D, 3D) oraz zespow developerskich. Oferujemy dugoterminow prac nad powanymi projektami. Nie przegap tej okazji! kadry@frontstudios.com

Future Processing

Future Processing to dynamiczna firma technologiczna dziaajca na globalnym rynku oprogramowania. Jestemy zespoem wysokiej klasy specjalistw posiadajcych wiedz i dowiadczenie niezbdne do realizacji ambitnych projektw informatycznych. Jeli programowanie to Twoja pasja docz do nas! (moliwo pracy zdalnej). http://www.future-processing.pl

Kei.pl

Kei.pl dziaa na rynku usug hostingowych od 2000 roku. Do naszych zadowolonych Klientw z dum moemy zaliczy wiele przedsibiorstw sektora MSP, instytucji oraz osb prywatnych. W ofercie Kei.pl znajduj si pakiety hostingowe, a take usugi dla wymagajcych Uytkownikw platformy e-Biznes oraz serwery fizyczne. http://www.kei.pl

WSISiZ w Warszawie
INFORMATYKA ZARZDZANIE
studia stopnia I i II (stacjonarne i niestacjonarne) specjalnoci: inynierskie, magisterskie i licencjackie. Szczegowe plany studiw, opisy poszczeglnych specjalnoci zapraszamy na stron uczelni. http://www.wit.edu.pl

Playsoft

Playsoft jako lider portowania aplikacji na platformy mobilne wci powiksza baz swoich klientw: EA Mobile, Sega, THQ, Konami. W ramach rozszerzania swojej dziaalnoci, poszukujemy dowiadczonego programisty, ktry byby odpowiedzialny za tworzenie aplikacji na platformy Iphone, Windows Mobile, Android. http:// www.playsoft.fr

KLUB PRO
StatConsulting TTS Company Sp. z o.o.

StatConsulting to firma o znaczcej pozycji na rynku usug analitycznych oraz Data Mining. Nasza oferta obejmuje m.in. modele scoringowe, rozwizania Fraud Detection oraz modelowanie ryzyka. Tworzymy take wasne rozwizania informatyczne na potrzeby projektw Data Mining, Data Quality, zarzdzania ryzykiem itd. http://www.statconsulting.com.pl

Sprzeda i dystrybucja oprogramowania komputerowego. Import programw na zamwienie. Ponad 200 producentw w standardowej ofercie. Chcesz kupi oprogramowanie i nie moesz znale polskiego dostawcy? Skontaktuj si z nami sprowadzimy nawet pojedyncze licencje. http://www.OprogramowanieKomputerowe.pl

Transition Technologies S.A.

Firma w brany high-tech od 1991. Producent oprogramowania dla przemysu (ponad 350 referencji z instalacji na caym wiecie). Usugi z zakresu: hurtownie danych i Business Intelligence, rozwizania eBusiness, optymalizacja, integracja danych, aplikacji oraz procesw biznesowych, portale korporacyjne, consulting i outsourcing usug IT, zaawansowana automatyka cyfrowa. http://www.tt.com.pl

EPRO

Nasz misj jest projektowanie najwyszej jakoci dedykowanych systemw IT, ktre cechuje wysoka niezawodno, wydajno, ergonomiczno i intuicyjno w obsudze oraz administracji. Gwnym elementem oferty EPRO jest oprogramowanie sklepu internetowego oraz identyfikacja wizualna. tel. 085 743 66 38 http://www.epro.com.pl

IT SOLUTIONS

IT SOLUTIONS

Wdroenia i szkolenia z zakresu: SQL Server SharePoint Services MS Project / Server Tworzenie aplikacji w technologii .NET http://www.itsolutions.biz.pl marcin.pytlik@itsolutions.biz.pl

Softline rozwizania mobilne

Wiodcy producent systemw mobilnych, dostawca aplikacji uytkowych dla biznesu (Symbian OS, Windows Mobile, J2ME ) zaprasza do wsppracy. Zosta naszym partnerem. Docz do zespou. http://www.softline.com.pl

Proximetry Poland Sp. z o.o.

Proximetry Poland Sp. z o.o. jest polskim oddziaem amerykaskiej firmy Proximetry Inc. dostawcy systemw zarzdzania sieciami bezprzewodowymi opartymi na technologiach WiFi i WiMAX. Nasz misj jest dostarczenie klientom rozwiza poprawiajcych jako usug (QoS) dostarczanych drog radiow. Docz do najlepszych i zosta czonkiem naszej ekipy! http://www.proximetry.com

SWD Software Sp. z o.o

System operacyjny czasu rzeczywistego RTOS QNX. Oficjalny dystybutor w Polsce. Zakres dziaalnoci: lokalizacja produktw QNX, dostawy sprztu i oprogramowania, doradztwo przedsprzedaowe, wsparcie techniczne, certyfikowane szkolenia, opracowania na zamwienie. http://www.swdsoft.pl

Systemy bankowe, ISOF

HEUTHES istnieje na rynku od 1989 r. Obok systemw informatycznych dla bankw, oferuje nowoczesne oprogramowanie do obsugi firm. System ISOF jest udostpniany klientom w trybie SaaS lub licencji. Pracuje na platformie Linux i zawiera m.in. takie moduy jak CRM, DMS, Magazyn, Sprzeda, Logistyka oraz Rachunkowo. http://www.isof.pl

Roczna prenumerata

250,Software Developers Journal (poprzednio Software 2.0) jest miesicznikiem gwnie dla programistw, ktrzy licz, e dostarczymy im gotowe rozwizania, oszczdzajc im czasu i pracy. Jestemy czytani przez tych, ktrzy chc by na bieco informowani o najnowszych osigniciach w dziedzinie IT i nie chc, eby jakiekolwiek istotne wydarzenia umkny ich uwadze. Aby zadowoli naszych czytelnikw, prezentujemy zarwno najnowsze rozwizania, jaki starsze, sprawdzone technologie.

tylko

UWAGA! Zmiana danych kontaktowych

Obsuga prenumeraty
1. Telefon 2. Fax

+48 22 877 20 80 +48 22 877 20 70


2. Online

3. Adres

EuroPress Polska Sp. z o.o. ul. Jana Kazimierza 46/54 01-248 Warszawa

software@europress.pl

Zamwienie prenumeraty
Prosimy wypenia czytelnie i przesya faksem na numer: 00 48 22 877 20 70 lub listownie na adres: EuroPress Polska Sp. z o.o. ul. Jana Kazimierza 46/54 01-248 Warszawa Polska E-Mail: software@europress.pl Przyjmujemy te zamwnienia telefoniczne: 00 48 22 877 20 80 Jeeli chcesz si dowiedzie o formach patnoci, wejd na stron: www.europress.pl lub napisz na e-mail: software@europress.pl

Imi i nazwisko ............................................................................... Nazwa firmy..................................................................................... Dokadny adres .............................................................................. .........................................................................................................

0 +48 22 877 20 8
lub zamw mailowo!

Zadzwo

Telefon ............................................................................................ Email ............................................................................................. ID kontrahenta ................................................................................ Numer NIP firmy ............................................................................. Fax (wraz z nr kierunkowym) .........................................................

automatyczne przeduenie prenumeraty

Prenumerujesz zyskujesz
l

l l l

oszczdno pienidzy szybka dostawa prezenty bezpieczna patno online

Tytu
Software Developers Journal (1 pyta CD) dawniej Software 2.0

Ilo Od Ilo zama- numeru nume- wianych pisma rw prenume- lub mierat sica

Cena

12

250 PLN

W NASTPNYM NUMERZE SOFTWARE DEVELOPERS JOURNAL 7/2009 (175)

W sprz ed po ow ay w drug i ie cze r wca ej

Android

W numerze midzy innymi: Klub Techniczny Adobe Akademia UML Porady dla programisty Porady prawne w IT ExtJS wstp do tworzenia aplikacji opartych o framework Javascript Odkrywanie aplikacji testowanie korporacyjne Eksploracja sposobem na testy doskonae Bazy danych wsppraca ze znanymi technologiami Kolejny Video Kurs na CD

...a take wiele innych, jak zwykle ciekawych artykuw.


Redakcja zastrzega sobie moliwo zmiany zawartoci pisma.

You might also like