You are on page 1of 84

12/2008 (168)

SPIS TREŚCI
06 AKTUALNOŚCI tuł na coś, co nie wymaga zbyt dużo myślenia, ale daje dużo rozrywki. Taki
Rafał Kocisz jest właśnie Duke Nukem: Manhattan Project. Zapraszamy do lektury.

12 TAM BYLIŚMY 36 Red Faction


Łukasz Olender
16 OPIS CD Red Faction – to właśnie ta gra jest tematem niniejszego artykułu.
Czy pomimo upływu ponad siedmiu lat od daty premiery jest ona
warta poświęconego jej czasu?
BIBLIOTEKA MIESIĄCA
18 Django – Python w zastosowaniach webowych 40 Hedgewars
Tomasz Kropiewnicki Maciej Mroziński
Tworzenie aplikacji internetowych to chleb powszedni wielu współ- Hedgewars to gra mająca na celu stworzenie otwartego odpowied-
czesnych programistów, co w większości przypadków wiąże się z nika legendarnych Wormsów. Prawdę mówiąc wręcz zaskakujące
ciężką oraz mozolną pracą. W niniejszym artykule przedstawione jest podobieństwo do oryginału, tak wygląd interfejsu jak i przebieg
jest Django – rozwiązanie stworzone w języku Python, którego ce- rozgrywki, na fizyce gry kończąc do złudzenia przypominają Worm-
lem jest uczynić pracę programisty aplikacji webowych prostszą, sy. Warto jednak powiedzieć jeszcze kilka słów.
bardziej efektywną oraz przyjemniejszą.

SZTUCZNA INTELIGENCJA
PROGRAMOWANIE W LINUKSIE 42 Porozmawiaj z komputerem
26 Mirrorowanie dysku w Linuksie Mariusz Jasnogórski
Radosław Korzeniewski Komputerowe rozpoznawanie i synteza mowy (ang. Speech Tech-
Mirrorowanie dysku nie jest operacją łatwą i wymaga minimalnej wie- nology) były niegdyś uważane za technologię dalece futury-
dzy dotyczącej partycjonowania, konfiguracji systemu czy samej tech- styczną, która z pewnością nigdy nie opuści sfery fantastyki na-
nologii RAID. Niestety jak do tej pory dystrybucje Linuksa doczekały się ukowej. Tymczasem, przez ostatnie 50 lat technologia ta była
co najwyżej możliwości instalacji systemu na mirrorowaniej parze dys- stale rozwijana i obecnie jest coraz częściej stosowana, zyskując
ków. Wciąż brakuje mechanizmów prostego i łatwego włączenia mirro- coraz większą popularność.
ru w taki sposób aby z procesem tym poradził sobie każdy użytkownik
komputera. Na szczęście system Linuks ciągle się rozwija.
ECOMMERCE
44 Wydajny, elastyczny i przyjazny CMS
ROZRYWKA W LINUKSIE – Textpattern część II
32 Duke Nukem Krystian Rajski
Łukasz Olender Celem niniejszego artykułu jest rozwinięcie pierwszej części po-
Anarchy Online i Red Faction to gry niewątpliwie złożone. W życiu gracza przez wyjaśnianie i zaprezentowanie sposobu budowy witryny
są jednak takie chwile, w których zamieniłby on każdy skomplikowany ty- w oparciu o własny szkic struktury HTML. Przedstawiony sposób

Miesięcznik Software Developer’s Journal (12 numerów w roku) Le périodique


Adres hakin9 est publié par
korespondencyjny:
jest wydawany przez Software-Wydawnictwo Sp. z o.o. o.o.
Software-Wydawnictwo Sp. z o.o.,
Bokserska,
ul. 02-682
Bokserska Varsovie,
1, 02-682 Pologne
Warszawa, Polska
Dyrektor wydawniczy: Sylwia Małecka Tél.+48
tel. +4822
22427
887361091,
10,fax
Fax. +48
+48 2222 887
224 2410
5911
www.phpsolmag.org cooperation@software.com.pl
Junior Market Manager: Anna Adamczyk
Directeur de la publication : Jarosław Szumski
Senior Product Manager: Katarzyna Juszczyńska Dział reklamy: adv@software.com.pl
Prenumerata: Marzena Dmowska
Imprimerie, photogravure pren@software.com.pl,
: 101 Studio, Firma Tęgi
Redaktor naczelny: Iwona Chwedoruk iwona.chwedoruk@software.com.pl tel. +48 22 42730/36,
Ekonomiczna 36 79;93-426
+48 22Łódź
427 36 53
Imprimé en Pologne/Printed in Poland
Kierownik produkcji: Marta Kurpiewska marta.kurpiewska@software.com.pl Dołączoną do magazynu płytę CD przetestowano programem AntiVirenKit firmy
G DATA Software
Abonnement Sp. métropolitaine,
(France z o.o. DOM/TOM) : 1 an
(soit 6 numéros) 38 €
Projekt okładki: Agnieszka Marchocka Redakcja dokłada wszelkich starań, by publikowane w piśmie i na towarzyszących mu
nośnikach
Dépôt légal informacje i programy były poprawne, jednakże nie bierze odpowiedzialności
: à parution
Skład i łamanie: Grzegorz Laskowski grzegorz.laskowski@software.com.pl za
ISSNefekty wykorzystania ich; nie gwarantuje także poprawnego działania programów
: 1731-7037
shareware,
Distribution freeware
: MLP i public domain.
Wyróżnieni betatesterzy: Ł. Lechert, S. Nieszwiec, R. Zacharczyk Parc d’activités de Chesnes, 55 bd de la Noirée
BP 59 F - 38291 SAINT-QUENTIN-FALLAVIER CEDEX
(c) 2005 Software-Wydawnictwo, tous les droits réservés
Nakład: 6 000 egz. Uszkodzone podczas wysyłki płyty wymienia redakcja.

4 12/2008
tworzenia szablonu nie jest jednym właściwym podejściem. Ma- PROGRAMOWANIE PHP
my nadzieję, że zaprezentowane informacje zachęcą do dalszej
pracy z Textpattern. 58 Grafika w PHP
Adam Blok
Jednym z kluczowych elementów każdego serwisu internetowe-
TESTOWANIE OPROGRAMOWANIA go jest grafika. Dzięki PHP w dynamiczny sposób możemy ją bez
48 Adobe Flash niczyjej ingerencji uatrakcyjnić lub dostosować do naszych po-
– wykorzystanie w urządzeniach wbudowanych trzeb.
Randy Martin
Wprowadzenie technologii Adobe Flash do urządzeń wbudowa- 62 Własny słup ogłoszeniowy
nych jest jednym z najbardziej ekscytujących osiągnięć ostatnich Piotr Plenik
kilku lat. To, co zaczęło się od potrzeby stworzenia możliwości gra- Gdy już zadbaliśmy o przygotowanie działającej aplikacji, czas na
nia w gry w technologii Flash na telefonach komórkowych, rozwi- dopracowanie kilku detali, dzięki którym naszą aplikację można
nęło się w chęć budowania całych wbudowanych interfejsów gra- uznać za profesjonalnie wykończoną. W drugiej części zaprezentu-
ficznych wykonanych w technologii Flash i technologiach pokrew- jemy, w jaki sposób możemy zamieścić aplikację na serwerze oraz w
nych, takich jak Flex. Użycie technologii Flash w systemach wbu- sprawny sposób ją aktualizować.
dowanych wymaga jednak od projektantów rozwiązania kilku pro-
blemów. Niniejsze opracowanie skupia się na wyborach, których
musi dokonać projektant podczas spełniania różnego rodzaju wy- PROGRAMOWANIE
magań.
URZĄDZEŃ MOBILNYCH
52 Podstawy bezpieczeństwa Oracle 64 Programowanie gier dla Symbian OS
Cezary G. Cerekwicki – rozwijamy grę
Prawie każdy system informatyczny zawiera w sobie bazę danych, a Rafał Kocisz
Oracle wśród nich zajmuje miejsce szczególne. Jest to system o ol- W dwóch pierwszych odcinkach serii Programowanie gier dla Sym-
brzymiej liczbie wdrożeń, działa na nim wiele istotnych usług, m.in. bian OS Czytelnicy mogli zapoznać się ze szkieletem aplikacji i prze-
bankowych. Dlatego warto znać zastosowane w nim mechanizmy konać się, jak można wykorzystać ten szkielet w celu zbudowania
bezpieczeństwa. stosunkowo prostej – aczkolwiek niebanalnej – gry logiczno-zręcz-
nościowej. Poprzedni odcinek cyklu, zatytułowany Budujemy grę!,
zakończył się uruchomieniem pierwszej, grywalnej wersji projektu
56 Emulacja systemu LaserQuest. W niniejszym odcinku skupimy się na rozszerzeniu funk-
MS Windows CE 5.0 na platformie x86 cjonalności wspomnianej gry, analizując przy tym takie kluczowe
Artur Korneusz składniki warsztatu programisty Symbian OS jak deskryptory oraz
Urządzenia mobilne (np. Pocket PC, Smatrfon) stają się coraz bar- operacje wejścia/wyjścia na plikach.
dziej popularne. Przyczynia się do tego zarówno wzrost funkcjonal-
ności jak i coraz bardziej przystępna cena. Duża ilość tychże urzą-
dzeń wyposażona jest przez producenta w system operacyjny klasy WYWIAD
MS Windows CE oraz dedykowane oprogramowanie, związane z je- 76 Wywiad z Ludovic Neveu – Dyrektorem ds.
go przeznaczeniem. Sprzedaży w Embarcadero Technologies

Rédacteur znaki
Wszystkie en chef : Marek
firmowe Bettman
zawarte marekb@software.com.pl
w piśmie są własności odpowiednich firm. La rédaction fait tout son possible pour s’assurer que les logiciels sont à
Rédacteurs
Zostały użyte: Aneta Cejmańska
wyłącznie anetta@software.com.pl
w celach informacyjnych. jour, pourtant elle décline toute responsabilité pour leur utilisation. Elle ne
Ewa Dudzic ewal@software.com.pl fournit pas de support technique lié à l’installation ou l’utilisation des logiciels
Préparation
Redakcja du CD
używa : Auroxautomatycznego
systemu Core Team składu enregistrés sur le CD-ROM. Tous les logos et marques déposés sont la
Maquette : Anna Osiecka annao@software.com.pl propriété de leurs propriétaires respectifs.
Couverture : Agnieszka Marchocka
Osoby zainteresowane współpracą prosimy o kontakt:
Traduction : Iwona Czarnota, Aneta Lasota, Marie-Laure Perrotey,
cooperation@software.com.pl La rédaction utilise le système PAO
Grazyna Wełna Pour créer les diagrammes on a utilisé le programme
Bêta-testeurs
Druk: PlusMedia: Thomas Bores, Tony Boucheau, Pascal Foulon, Pascal Miquet,
Romain Lévy, Augustin Pascual, Julien Poulalion, Alain Ribault Le CD-ROM joint au magazine a été testé avec AntiVirenKit de la société G
Data Software Sp. z o.o
Les personnes intéressées par la coopération sont priées de nous contacter :
cooperation@software.com.pl AVERTISSEMENT
Les techniques présentées dans les articles ne peuvent être utilisées qu'au
Abonnement : abonnement@software.com.pl sein des réseaux internes.
Fabrication : Marta Kurpiewska
Wysokość nakładu marta@software.com.pl
obejmuje również dodruki. Redakcja nie udziela pomocy La rédaction du magazine n'est pas responsable de l'utilisation incorrecte des
Diffusion : Monika
technicznej Godlewska
w instalowaniu monikag@software.com.pl
i użytkowaniu programów zamieszczonych na płycie techniques présentées.
Publicité : dostarczonej
CD-ROM publicite@software.com.pl
razem z pismem. L'utilisation des techniques présentées peut provoquer la perte des données !

Si vous êtes
Sprzedaż intéressé par
aktualnych lub l’achat de licence
archiwalnych de publication
numerów pisma de
porevues merci niż
innej cenie de
contacter : Monika
wydrukowana Godlewska
na okładce monikag@software.com.pl
– bez zgody wydawcy – jest ,działaniem
tél : +48 (22)
na887
jego12
66 fax : i+48
szkodę (22) 887
skutkuje 10 11
odpowiedzialnością sądową.

www.sdjournal.org 5
Aktualności

YouTube zaczyna
sprzedawać muzykę i gry
YouTube, najpopularniejszy na świecie serwis M – nowy język
umożliwiający użytkownikom dzielenie się
materiałami wideo, rozpoczyna sprzedaż
gier oraz muzyki. Według właścicieli serwisu
programowania od Microsoft
M
to dopiero pierwszy z szeregu planowanych icrosoft ogłosił opracowanie nowe-
ruchów, których celem ma być uczynienie z
go języka programowania – M. Ję-
YouTube możliwie najobszerniejszej komer-
cyjnej usługi internetowej. Docelowo użyt- zyk ten jest częścią Oslo, wielowar-
kownicy mają otrzymać możliwość zakupie- stwowej, zorientowanej na usługi technologii,
nia gier, muzyki, filmów, seriali telewizyjnych, która ma pomagać w projektowaniu, tworzeniu,
książek, czy biletów na koncerty. Już w tej wdrażaniu i zarządzaniu złożonymi aplikacjami.
chwili odwiedzający YouTube.com mogą stać Język M jest bazującym na XMLu językiem mo-
się nabywcami utworów z oglądanych teledy-
sków, a to dzięki przekierowywaniu do sklepu
delującym, który służy do integracji modeli po-
Amazon.com albo iTunes. W niedługim czasie między różnymi domenami. Dzięki M możliwe
podobnie będzie można kupować gry. Sklepy jest tłumaczenie języków zorientowanych dzie-
internetowe będą dzieliły się procentami z dzinowo, takich jak BPNM, BPEL czy UML na
zysków z serwisem YouTube w przypadku, formaty niższego poziomu, które mogą być zro- zewnętrznych zapewnią obsługę wertykalnych
kiedy użytkownik zdecyduje się na zakup za
zumiane przez środowisko wykonawcze. We- języków dziedzinowych. Modele będą przecho-
pośrednictwem tego serwisu.
http://www.gamikaze.pl/ dług niektórych źródeł M będzie zbliżony do wywane w repozytorium opartym o SQL Se-
języka D. Będzie go też można używać do mo- rver. Stamtąd będą serializowane do XAML,
Fuzja pomiędzy AOL delowania w dziedzinach, które nie są wykony- który będzie mógł być wykonywany na platfor-
i Yahoo! bliska finałowi? walne, np. do opisu budynku. W skład technolo- mie .NET. Wykonywanie na Windows Server
Coraz więcej faktów wskazuje na to, że
gii Oslo wchodzi również Quadrant, narzędzie będzie możliwe dzięki aktualizacji o kodowej
fuzja pomiędzy AOL-em a Yahoo!, może w
końcu dojść do skutku. Fuzja polegająca do modelowania wizualnego dla pakietu Visual nazwie Dublin. Microsoft zamierza przedstawić
na przejęciu AOLa przez Yahoo!, pozwoli- Studio. Pozwoli on konfigurować widoki mode- zarówno M i Quadrant jako Community Tech-
łaby drugiemu z nich na znaczne zwięk- li, specyficzne dla poszczególnych dziedzin. Mi- nology Preview (CTP) podczas Professional De-
szenie zysków poprzez wykorzystanie plat- crosoft dostarczy widoki dla baz danych, serwi- velopers Conference.
formy reklamowej portalu Jerry'ego Yanga sów webowych oraz przepływów. Dodatki firm http://www.sdtimes.com/link/32957
– jednego z elementów, obok treści i usług,
które obejmuje transakcja. Obecne zyski
z emitowanych bannerów nie są bowiem
zadowalające dla AOLa i wynoszą 2,4 mld Apple warte
USD rocznie. Połączenie usług poczto-
wych, skutkowałoby natomiast obsługiwa-
niem łącznie 48% internetowych skrzynek
więcej niż Google
R
pocztowych na świecie, z czego 39% doty-
ynkową wartość Google szacuje się
czy rynku komunikatorowego. Fuzja mia-
łaby też spory wpływ na trwającą w tym obecnie na 156 392 862 560 dolarów
zakresie walkę pomiędzy Google, a Micro- (czyli 156,4 miliarda). Tymczasem Ap-
softem. Posunięcie takie stwarzałoby rów- ple jest już warte więcej – bo aż 157 012 662
nież gigantowi z Redmond poważny pro- 240 (ponad 157 miliardów) dolarów. Prezes
blem z urzędami kontrolującymi, w wypad-
Della, Michael Dell, zadeklarował kiedyś, że kie-
ku próby kupna połączonych firm.
http://www.techcrunch.com/ dy Apple dogoni jego firmę pod względem war-
tości, zwinie interes i odda pieniądze udziałow-
Windows Strata? com. Dziś Dell wart jest zaledwie 50,5 miliarda
Trudno nie uśmiechnąć się, czytając tę dolarów. Apple natomiast warte jest ponad trzy
nazwę, ale całkiem prawdopodobne, że wła-
razy więcej, bo aż 157 miliardów dolarów. Na ło czwarte miejsce wśród największych produ-
śnie tak – Windows Strata – będzie nazywał
się nowy system Microsoftu hostowany w rynku IT korporację z Cupertino wyprzedza już centów komputerów w USA, o tyle na świato-
chmurze. Będzie to ekspansja korporacji w tylko IBM i Microsoft. Rynkowa wartość Błękit- wym rynku nie szło mu już tak dobrze. Główny
zakresie tzw. cloud computing, czyli wyko- nego Giganta to około 170 miliardów dolarów prym wiedli tu HP, Dell i Acer, którzy rywalizo-
rzystywaniu przez firmy (a w przyszłości (169 964 678 000). Na czele stawki znajduje się wali pomiędzy sobą sprzedając niskobudżetowe
zapewne także i użytkowników indywidual- producent Windows, którego wartość określana netbooki. O ile skok na szóste miejsce może być
nych) systemów i aplikacji zainstalowanych
jest na 255,6 miliarda dolarów (255 648 204 korzystny dla Apple i jego akcjonariuszy, o tyle
i utrzymywanych na zewnętrznych serwe-
rach w Internecie, a nie na własnych maszy- 000). Czwartą pozycję zajmuje Google warte przyszłość koncernu może już nie być tak obie-
nach. Windows Strata to nazwa, która wypły- 156,4 miliarda dolarów, piątą Cisco (142,1 mld. cująca. Powodem tego mają być tanie notebooki
nęła przy okazji prezentacji listy sesji na zbli- USD), szóstą Intel (135,7 mld. USD). Co więcej, oraz jeszcze tańsze netbooki oferowane przez
żającej się konferencji Professional Develo- analitycy z firmy Gartner ogłosili, że Apple stał konkurentów, a których Apple nie ma jak dotąd
pers Conference 2008. Nazwa oryginalnie się szóstym co do wielkości producentem kom- w swojej ofercie. Chociaż patrząc na poczynania
pochodzi prawdopodobnie od stratosfery
(warstwy atmosfery umiejscowionej ponad
puterów na świecie. Osiągnął to dzięki wzrosto- Apple z perspektywy ostatnich kilku lat można
większością chmur) lub stratusów – nazwy wi sprzedaży sięgającemu blisko 60% w trzecim się spodziewać, że producent Jabłuszek szykuje
jednego z rodzajów chmur. kwartale ubiegłego i pierwszym tego roku. O kolejne asy w rękawie.
http://www.istartedsomething.com/ ile w pierwszym kwartale b.r. Apple zajmowa- http://komputery.idg.pl

6 12/2008
Aktualności

BSA ma 12 nowych członków


Microsoft Business Software Alliance (BSA), orga-
nizacja zrzeszająca producentów opro-

Technology Summit 2008 gramowania, chroniąca ich prawa oraz


walcząca z piractwem komputerowym,
ogłosiła przystąpienie do organizacji 12

W
dniach 8-9 października 2008 nowych członków. Altium, Babylon, Cen-
tennial Software, Corel, CyberLink, Fama-
roku, w Pałacu Kultury i Na- tech, LINKService, Materialise Softwa-
uki w Warszawie, odbyła się re, Quark, Quest Software, Ringler-Infor-
największa technologiczna impreza Micro- matik i Scalable Software przyłączyły się
softu w Polsce – trzecia już edycja konfe- do grupy dostawców oprogramowania i
rencji Microsoft Technology Summit 2008. sprzętu komputerowego zrzeszonych w
BSA. Nowi członkowie mają włączyć się
Przez dwa dni specjaliści IT i programiści
we wszelkie inicjatywy podejmowane
mieli okazję bliżej zapoznać się z techno- przez BSA globalnie i lokalnie w zakre-
logiami giganta z Redmond. Tematy kon- sie promowania rozwoju innowacyjno-
ferencji to między innymi bezpieczeństwo, ści i wzrostu konkurencyjności poprzez
komunikacja, wirtualizacja, projektowanie dotyczących przeglądanych stron. Micro- działania edukacyjne, ochronę praw oraz
aplikacji, urządzenia mobilne i zarządza- soft nawiązał współpracę z grupą roboczą udział w pracach legislacyjnych. Dodat-
kowo, CNC Software, SolidWorks i The
nie treścią oraz praktyczne wykorzystanie HTML5, między innymi w zakresie mecha-
MathWorks rozszerzyły swoje członko-
technik i narzędzi Microsoftu w tych ob- nizmów przechowywania informacji o sesji. stwo w BSA o partycypowanie w dzia-
szarach. Podczas głównej sesji, otwierają- W tematyce centrów danych nowej genera- łaniach na obszarze Europy, Bliskiego
cej konferencję, wskazywano między inny- cji, prelegent Intela przedstawił technologie Wschodu oraz Afryki.
mi na główne czynniki, które będą określa- wprowadzane w procesorach Intel Nehalem http://www.bsa.org/
ły rozwój branży IT w najbliższej przyszło- – VT-x, VT-d i VT-c, które mają sprzętowo
Microsoft płaci
ści. To przede wszystkim usługi typu cloud wspierać hyperwisor. Podkreślił też znacze- za używanie Live Search
computing, wirtualizacja oraz oszczędzanie nie sprzętowego wsparcia wirtualizacji wy- Microsoft próbuje wszelkich sposo-
energii – tzw. green IT. W pierwszym dniu korzystywanego przez Hyper-V, jak np. wir- bów w walce z przygniatającą konku-
imprezy ciekawa była prezentacja Mariusza tualizacja kart sieciowych, zapełniająca od- rencją Google na rynku wyszukiwa-
Jarzębowskiego z polskiego oddziału Micro- wzorowanie fizycznych adresów kart siecio- rek. W momencie, gdy ostatnie bada-
nia comScore lokują Live Search dopie-
softu, objaśniająca ewolucję interfejsu pa- wych bezpośrednio na maszyny wirtualne.
ro na trzecim miejscu z wynikiem 8,3%
kietu biurowego Microsoft Office, który, W drugim dniu konferencji pokazano spo- (Google jest pierwszy i posiada udział na
jak się okazuje, w wersji 2003 osiągnął ta- soby rozwiązywania problemów, z którymi poziomie 63%) firma z Redmond sięga
ki poziom komplikacji, że zaczął utrudniać często mają do czynienia programiści pra- po kolejną broń i postanawia po prostu
pracę z tą aplikacją, co zdecydowało o ko- cujący z Microsoft Office SharePoint Servi- wynagradzać użytkowników wyszuki-
warki za korzystanie z niej. SearchPerks
nieczności jego zmiany w najnowszej wer- ces, oraz zaprezentowano metody przygoto-
to nowy program lojalnościowy urucho-
sji pakietu (Office 2007). Według prelegen- wywania stron internetowych z zachowa- miony w celu podniesienia popularności
ta, interfejs wstążki (ribbon) to przykład in- niem standardów bezpieczeństwa. Prezen- wyszukiwarki Live Search, dostępny – jak
nowacji wynikającej ze szczegółowych ana- towano również możliwości wykorzystania na razie – tylko dla użytkowników w Sta-
liz potrzeb użytkowników. System menu SQL 2008 w tworzeniu systemów infor- nach Zjednoczonych. Po zainstalowaniu
ograniczał rozwój interfejsu, ponieważ osią- matycznych. Uczestnikom zaprezentowa- aplikacji kontrolnej za każde wyszukiwa-
nie system przyznaje jeden punkt. Mak-
gnął kres swojej skalowalności. Podczas spe- no też sposób budowania dynamicznej apli-
symalnie w jednym dniu można uzyskać
cjalnej sesji demonstrowano projekty reali- kacji sieciowej dla środowiska Silverlight, z 25 punktów. Jest też ograniczenie liczby
zowane w laboratoriach firmy, między inny- wykorzystaniem Visual Studio i Microsoft uczestników – tylko milion osób może
mi aplikację Photosynth, która jest produk- Expression Blend. Ciekawostką była także zapisać się i zbierać punkty za szukanie.
tem opracowanym przez specjalistów z Live prezentacja Microsoftu od środka. Według Promocja potrwa do kwietnia przyszłe-
Labs, pozwalającym na sklejanie zwykłych podanych informacji, koncern zatrudnia go roku, kiedy to punkty będzie można
wymienić na nagrody – na przykład
zdjęć w celu utworzenia trójwymiarowych 120 tysięcy pracowników i dysponuje trze-
pięć piosenek (525 punktów), zestaw do
modeli obiektów. Omówiono również Live ma głównymi centrami danych, podobno tenisa (750 punktów), tysiąc mil lotni-
Mesh – nową usługę Microsoftu, pozwala- odpornymi na trzęsienia ziemi o sile 8 stop- czych (1800 punktów) czy pad do gier
jącą na wymianę danych między kompute- ni w skali Richtera. W centrach danych fir- (5500 punktów). To nie pierwsza tego
rami z różnymi systemami operacyjnymi, a my pracuje blisko 10 tysięcy serwerów pro- typu inicjatywa Microsoftu, jeśli chodzi o
Live Search. Już wcześniej podejmowane
także innymi urządzeniami – na przykład dukcyjnych oraz ponad 100 tysięcy serwe-
były rozmaite próby popularyzacji wyszu-
telefonami komórkowymi. Podczas prezen- rów obsługujących witryny MSN. Struktura kiwarki – na przykład w ramach takich
tacji Internet Explorer 8 można było do- IT Microsoftu obsługuje 140 tysięcy użyt- akcji jak Live Search Cashback czy Live
wiedzieć się o wysiłkach zespołu projektan- kowników końcowych zlokalizowanych w Search Club. Rezultaty w niektórych przy-
tów tej przeglądarki zmierzających do do- 89 krajach, do dyspozycji których jest 260 padkach były faktycznie całkiem niezłe.
prowadzenia do zgodności IE 8 z CSS 2.1. tysięcy komputerów. Microsoft udostępnił Statystyki są jednak nieubłagane, a
przed Microsoftem wciąż sporo pracy, by
(firma prowadzi także prace nad doprowa- na witrynie MTS2008 materiały konferen-
poważnie myśleć o rywalizacji z potenta-
dzeniem do zgodności z CSS 3.0). Kolej- cyjne i prezentacje z sesji. tem na rynku wyszukiwania, Google, czy
ną zmianą w IE 8 jest zwiększenie zakre- http://www.networld.pl nawet z wiceliderem Yahoo!.
su informacji przechowywanych lokalnie, http://www.mts2008.pl http://www.cnet.com/

www.sdjournal.org 7
Aktualności

Polacy zgarniają
nagrody w konkursie CUDA
Jakiś czas temu firma NVidia ogłosiła kon- Nokia 5800 Xpress Music
kurs CUDA Challenge, czyli zawody dla
programistów do których zgłosić można
było wszelkiego rodzaju popularne opro-
– pogromca iPhone'a?
F
gramowanie w formie osobnych aplika- iński potentat telefonii komórkowej za-
cji lub plug-inów, działające w systemach
prezentował zapowiadany od pewne-
operacyjnych Windows, Linux lub Mac OS
– oczywiście – stworzone przy wykorzy- go czasu telefon wyposażony w doty-
staniu środowiska CUDA. Aplikacje oce- kowy wyświetlacz. Oficjalna nazwa urządze-
niane były zarówno pod kątem innowacyj- nia, w zapowiedziach określanego mianem
ności jak i pożyteczności. Konkurs został Tube brzmi 5800 Xpress Music. Telefon pra-
rozstrzygnięty, a polscy programiści spisali cuje pod kontrolą systemu operacyjnego Sym-
się znakomicie. Nagrodzono cztery osoby,
w tym dwie rodem z Polski. Pierwsze miej-
bian S60 piątej generacji, który – jak informu-
sce przyznano niemieckiemu programi- je Nokia – nieco zmodyfikowano, aby był bar-
ście za plug-in do Gimpa, drugą pozy- dziej przyjazny użytkownikowi. Finowie zapo-
cję zdobył również Niemiec za Symulację wiadają rychłe wydanie zestawu narzędzi pro-
przepływu płynów, trzecie miejsce zdobył gramistycznych (SDK), umożliwiającego two-
natomiast nasz rodak – Janusz Będkowski
rzenie aplikacji dla nowego telefonu.
za program Robot Range Finder, czwar-
ta lokata przypadła również Polakowi Telefon można obsługiwać za pośrednictwem
– otrzymał ją Jacek Naruniec za program rysika oraz wirtualnej klawiatury QWERTY na
do wykrywania i śledzenia twarzy. Robot ekranie. Zastosowany w aparacie wyświetlacz to
range finder, symuluje wykrywanie ruchu 3,2-calowy ekran panoramiczny o rozdzielczości
obiektów i reagowanie na niego w czasie 640x360 pikseli, zdolny do wyświetlenia obra-
rzeczywistym. Sednem aplikacji jest algo-
zu o 24-bitowej głębi kolorów. Podobnie jak w
rytm, którego wykonanie jest akcelero-
wane przez GPU, co skutkuje nieporów- produkcie Apple nowa Nokia wyposażona jest
nanie krótszym czasem reakcji od tego, w automatyczny czujnik orientacji (akcelero-
który byłby generowany przez CPU. Druga metr), odpowiedzialny za obrót obrazu. Urzą-
nagrodzona aplikacja polskiego pocho- dzenie posiada moduł łączności Wi-Fi w stan-
dzenia identyfikuje twarz na podstawie dardzie 802.11 b/g oraz moduł Bluetooth 2.0,
jej cech charakterystycznych i śledzi jej
zmiany na podstawie obrazu przekazy-
dysponuje też odbiornikiem GPS współpracu-
wanego przez zwykłą kamerkę interneto- jącym z programem Nokia Maps 2.0. W obu-
wą. Jej niezwykłość tkwi w 2 razy krótszym dowie znaleźć zaś można złącze Micro-USB,
czasie obróbki obrazu i reakcji na niego w gniazdo AV 3,5mm oraz slot na karty MicroSD
porównaniu do tego generowanego przez i gniazdo prądu stałego typu jack oraz wyjście tv. AAC+, eAAC+ oraz WMA. Wbudowane apli-
CPU, co wynika z wykorzystania mocy GPU
Wbudowana pamięć telefonu to 81 MB, ale w kacje zapewniają podstawowe funkcje edycji
przez omawianą aplikację. Przyszłość tego
rozwiązania to szereg zastosowań w dzie- zestawie z urządzeniem znajduje się karta Mi- wideo i zdjęć, między innymi montaż, doda-
dzinie bezpieczeństwa i biometrycznych croSD o pojemności 8 GB. wanie tytułów, kadrowanie i obracanie. Tele-
metodach identyfikacji osób. Obsługiwane częstotliwości to WCDMA 900/ fon posiada też wbudowany tuner radia FM i
http://nvidia.pl/ 2100 i GSM/EDGE 850/900/1800/1900 (w głośniki stereo. Za pośrednictwem nowej Nokii
państwach Ameryki Łacińskiej telefon może można łączyć się ze sklepem Nokia Music Sto-
Złe czasy dla eBay
W związku z problemami przez jakie prze- działać także w sieciach WCDMA 850/1900). re, zaopatrującym użytkowników w pliki mu-
chodzi serwis aukcyjny eBay, podjęto decy- Urządzenie zasilane jest akumulatorem litowo- zyczne. Sugerowana przez producenta cena ko-
zję o redukcji w zakresie działalności oraz jonowym, który wedle zapewnień producenta, mórki to 279 euro netto, ale należy pamiętać o
przejęciach. Wyniki finansowe za trzeci pozwala na 8,8 godzin rozmów w sieci GSM i kosztach dodatkowych – planach taryfowych,
kwartał potwierdziły najbardziej negatyw- 5 godzin w sieci WCDMA (deklarowany mak- w jakich urządzenie będzie rozpowszechnia-
ne szacunki. Wymusiło to decyzję o cięciu
symalny czas czuwania wynosi odpowiednio ne. Telefon będzie dostępny w trzech wersjach
kosztów. W tym celu nastąpi centraliza-
cja przez likwidację lokalnych oddziałów, 406,2 oraz 400 godzin). kolorystycznych obudowy, czarnej, czerwonej i
w tym polskiego. Same lokalne serwisy, w Na wyposażeniu komórki znalazł się też cyfro- niebieskiej. Warto dodać, że urządzenie obsłu-
tym eBay.pl będą nadal działać, zarządza- wy aparat fotograficzny z optyką firmy Carl guje technologię Adobe Flash, czego wciąż brak
nie nimi odbywać się będzie jednak z Berna Zeiss, umożliwiający wykonywanie zdjęć w w iPhone (zobacz artykuł – iPhone z obsługą
i Londynu. Nadal działać będzie obsługa
rozdzielczości 3,2 megapiksela (format zdjęć Flash? Zdecyduje Steve Jobs). Inne jego przewa-
klienta w Polsce. W ramach oszczędności
zwolnionych zostanie także około tysiąca – JPEG) oraz nagrywanie wideo w maksymal- gi nad produktem Apple, to – poza wspomnia-
pracowników, co stanowi 10% zatrudnio- nej jakości 640x480 pikseli przy 30 fps w for- nym nagrywaniem wideo – także możliwość
nych. Pracę straci także kilkuset pracowni- matach MP4 lub 3GPP. Dodatkowa kamera wysyłania wiadomości MMS oraz wymienny
ków tymczasowych. Jednak plan eBay'a to służy do wykonywania połączeń wideo. Apa- akumulator. Warto podkreślić, iż 5800 Xpress
nie tylko redukcja kosztów ale także inwe- rat umożliwia nagrywanie dźwięku w forma- Music nie jest pierwszym telefonem z dotyko-
stycje. Za 945 milionów dolarów, zakupio-
tach WAV, AMR i AAC/MP4. Odtwarzanie wym wyświetlaczem w ofercie fińskiej spółki –
ny zostanie serwis płatności Bill Me Later.
Ponadto za 390 mln kupione zostaną ser- audio odbywa się dzięki pokładowemu odtwa- w 2004 r. zaprezentowała ona smartfon 7710,
wisy Den Bla Avis i BilBasen. rzaczowi z 8-pasmowym korektorem graficz- działający pod kontrolą Symbiana S90.
http://www.eweek.com/ nym i obsługą formatów MP3, SP-MIDI, AAC, http://www.idg.pl

8 12/2008
Aktualności

Łamanie haseł WiFi kartą graficzną


Spada zainteresowanie Możliwości współczesnych kart graficznych
są już na tyle duże, że można je wykorzy-

Google Chrome stywać w zastosowaniach wymagających


dużych mocy obliczeniowych. Wśród takich
zastosowań znalazło się łamanie haseł sieci

W
e wrześniu br., gdy pojawiła się bezprzewodowych. Rosyjska firma Elcom-
soft, znana z produkcji licznych łamaczy
przeglądarka Google Chrome, wy- haseł, wypuściła najnowszą wersję oprogra-
wołała ona duże poruszenie. Szyb- mowania ElcomSoft Distributed Password
ko zdobyła 3,1% rynku, co było całkiem do- Recovery, które pozwala wielokrotnie przy-
brym wynikiem w świecie opanowanym przez spieszyć łamanie haseł do sieci WiFi zabez-
Internet Explorera, Firefoksa i Operę. Chwalo- pieczonych protokołami WPA i WPA2. Jest to
możliwe dzięki procesorom graficznym kart
no jej szybkość działania i bezpieczeństwo. En-
Nvidia, które mogą wykonać setki miliardów
tuzjazm jednak nie trwał długo. Szybko wykry- stałoprzecinkowych operacji na sekundę.
to luki w bezpieczeństwie, a stosunkowo wąski W przypadku zwykłego laptopa z GeForce
zakres funkcjonalności sprawił, że nowa prze- niezmiennym poziomie 57,2%. Przeglądarka 8800M lub 9800M przyspieszenie jest 10-15
glądarka stała się jedynie ciekawostką, a nie na- Google ma potencjał i możliwości aby zagrozić krotne a przy użyciu w desktopie dwóch lub
rzędziem do codziennej pracy. Obecnie udział Internet Explorerowi oraz Firefoksowi. Przed więcej kart GTX 280 nawet 100 krotne. Przy
tym do złamania hasła wymagane jest prze-
Chrome wynosi 1,5% i zapewne nie będzie się programistami Chrome jednak jeszcze sporo
chwycenie zaledwie kilku pakietów. Dodat-
już wiele zmieniać. W tym czasie udział Inter- pracy aby ten cel został zrealizowany. kowo oprogramowanie umożliwia przepro-
net Explorera utrzymywał się na praktycznie http://www.newscientist.com/ wadzenie łamania na tysiącach kompute-
rów jednocześnie, co czyni sieci bezprze-

OpenOffice.org 3.0 dostępny!


wodowe łatwymi do włamania, szczególnie
jeśli są używane łatwe, statyczne hasła.
http://dobreprogramy.pl/

D
nia 13 października br. opubliko- WebKit przeszedł test Acid3 w 100%
wano długo oczekiwaną, finalną WebKit jest silnikiem przeglądarki stron
wersję pakietu biurowego OpenOf- WWW dostępnym na licencji OpenSource,
rozwiniętym głównie przez Apple w opar-
fice.org 3.0. Nowy OpenOffice zawiera bar-
ciu o znane z Konquerora KHTML oraz KJS.
dzo dużo zmian, poprawek i nowych funk- Jest również pierwszym takim silnikiem,
cji. To co od razu rzuca się w oczy to nowe który przeszedł test Acid3 z idealnym wyni-
Start Center, odświeżone ikonki oraz kontrol- zwraca teraz też element wektora, bez wzglę- kiem 100/100. Silnik ten wbudowany jest w
ka zoomu na pasku stanu. Edytor tekstu, Wri- du na swoje położenie, jeżeli tylko dwa para- przeglądarki Safari oraz OmniWeb. Wersja
ter, umożliwia wyświetlanie wielu stron pod- metry zostały podane. Program został wypo- WebKit, która zdała egzamin, na razie jest
w fazie rozwojowej i będzie dostępna dla
czas edycji oraz udoskonalone tworzenie no- sażony w mechanizm automatycznego defi-
użytkowników wraz z Safari 4. Silnikiem,
tatek. Calc posiada nowy komponent, pozwa- niowania operatorów oznaczonych wykrzyk- który ma szanse przejść test jako drugi,
lający wybrać optymalną wartość komórki, nikiem do przecięcia. Zaimplementowano jest wbudowany w Operę Presto. Na dzień
bazując na wartościach innych komórek. Do- wsparcie dla notacji A1/R1C1 w ADDRESS dzisiejszy jego oficjalny wynik to 99/100.
dano możliwość pracy grupowej nad arkusza- i INDIRECT, a dane pochodzące ze specyficz- Kolejne dobre wyniki uzyskały Gecko (Fi-
mi, w tym obsługę do 1024 kolumn. Udosko- nej w Calcu funkcji – ERRORTYPE, służącej refox, Flock) – 87/100, KHTML (Konqueror)
– 78/100, oraz WebKit z V8 (Chrome) rozwi-
nalono opcje optymalizacji przy użyciu na- do określania interoperacyjności z innymi ar-
nięty przez Google – 79/100. Najgorzej radzi
rzędzia Solver, umożliwiającego rozwiązywa- kuszami kalkulacyjnymi – są przechowywa- sobie Trident, wokół którego zbudowany
nie równań z wieloma nieznanymi zmienny- ne w zmiennej ORG.OPENOFFICE.ERROR- jest Internet Explorer, uzyskując wynik 21/
mi. Wprowadzono nowe słowniki dystrybu- TYPE. Pakiet otrzymał wsparcie dla formatu 100. Wyniki wszystkich wymienionych silni-
owane w postaci rozszerzeń, dzięki czemu, w OpenDocument (ODF) 1.2, jak również .oxt ków są lepsze z każdą wersją. Acid3 to test
sprawdzający szybkość oraz poprawność
przypadku pojawienia się ich nowych wydań oraz mdb w wydaniu dla Windows. Może on
wyświetlania strony. Skupia się głównie na
w repozytoriach, użytkownik zostaje automa- otwierać dokumenty MS Office 2007 i Of- Document Object Model (DOM) oraz Java-
tycznie poinformowany stosownym komu- fice 2008 for Mac OS X (.docx, .xlsx, .pptx, Script, ale sprawdza również płynność ani-
nikatem. Zaktualizowano menadżera dodat- etc.). OpenOffice.org 3.0 jest pierwszą wer- macji, obsługę UTF, działanie formularzy itd.
ków, upraszczając instalację nowych. Dodano sją działającą na Mac OS X bez X11, mając Testy Acid to rygorystyczny zestaw testów
nową opcję importu makr VBA z Excela, kon- wygląd taki jak inne aplikacje Aqua. Wpro- opracowany przez Web Standards Project.
Organizacja ta od 1998 roku stara się prze-
solowe narzędzie cwsattach, służące do dołą- wadzono też częściową obsługę VBA na tej
konać producentów przeglądarek do pro-
czania plików w obszarze roboczym i usunię- platformie. Dzięki wykorzystaniu interfejsu jektowania produktów zgodnie ze standar-
to pkgchk. Nowy OpenOffice pozwala także API ułatwień dostępu jaki oferuje Mac OS dami. Zgodność przeglądarki ze standarda-
tworzyć i edytować formularze XML, zgod- X, OpenOffice.org 3.0 jest bardziej przyja- mi przekłada się na zwiększenie dostępno-
ne z modelami XForm. Udoskonalono funk- zny osobom słabo widzącym. Sporo nowości ści stron, łatwiejsze i tańsze rozwijanie stron,
cje przycinania, rozszerzono też wsparcie dla znajdziemy także w programach Draw oraz które nie będą musiały dostosowywać się do
kilku przeglądarek, oraz przedłużenie czasu
XML i filtrów napisanych w oparciu o XSLT. Impress. Najnowszą, angielską wersję pakie-
w jakim strona może być oglądana, ponie-
Funkcja INDEX() obsługuje zwrot wektora tu OpenOffice.org 3.0 można pobrać z ser- waż za kilka lat nadal będzie poprawnie ren-
na tablicę 2D, COUNT() ignoruje błąd wyni- werów producenta. derowana.
ków wyrażenia i formuły komórki, INDEX() http://dobreprogramy.pl http://webkit.org/

www.sdjournal.org 9
Aktualności

Mozilla dla programistów


Mozilla Labs ogłosiło utworzenie nowej
grupy, Developer Tools Lab, która ma się Windows na dyskach
skupić na badaniach oraz tworzeniu narzę-
dzi dla programistów piszących aplikacje
webowe. Narzędzia te mają zwiększyć pro-
SSD wielokrotnie szybszy
P
duktywność, pomóc tworzyć lepsze wraże- racujący w irlandzkim oddziale Mi- ła do tej samej operacji nieco mniej czasu, 1
nie dla użytkownika a przede wszystkim
promować otwarte standardy. Nie wiado-
crosoft Dave Northey opisał na swo- minutę i 7 sekund. Dave postanowił wymie-
mo jeszcze dokładnie czym miałoby się zaj- im blogu ciekawe doświadczenia ze nić swój dysk – i tak znacznie szybszy niż w
mować Developer Tools Lab. Mozilla ogłosi- zwiększaniem wydajności systemu oraz uży- wielu powszechnie wykorzystywanych lap-
ła jednak, że zatrudniła do swojego nowego wanych często podczas demonstracji maszyn topach – na dysk SSD. To nowa technolo-
zespołu Diona Almaera i Bena Galbraitha, wirtualnych na swoich notebookach. Jak wia- gia urządzeń wytwarzanych w oparciu o pa-
współzałożycieli Ajaxian i Ajax Experience,
domo, wąskie gardło wydajności laptopów mięci Flash. Ich główne zalety to brak rucho-
aby przewodniczyli inicjatywie.
http://labs.mozilla.com/ stanowią dyski twarde – przeważnie znacz- mych części (i co za tym idzie, cicha praca,
nie wolniejsze niż w komputerach stacjo- odporność na uszkodzenia i mniejszy pobór
Wikimedia migruje na Ubuntu Server narnych. Dopiero stosunkowo niedawno nie- mocy) oraz fenomenalnie krótki czas dostę-
Fundacja Wikimedia ogłosiła plan migra- którzy producenci, by zaadresować ten pro- pu i imponujące prędkości odczytu danych
cji wszystkich swoich serwerów na plat-
blem, zaczęli montować w niektórych mode- (powyżej 200 MB/s, podczas gdy obecne ni-
formę Ubuntu Server. Proces migracji
będzie obejmował 400 serwerów, które lach dyski pracujące z prędkością 7200rpm. skoobrotowe dyski montowane w laptopach
dotychczas chodziły na konkurencyj- Taką właśnie maszynę Dave przyjął za wzor- nie przekraczają 50 MB/s). Okazało się, że
nych dystrybucjach – Fedora i Red Hat cową – Windows Server 2008 skonfigurowa- po wymianie dysku na SSD, instalacji i konfi-
Linux. Obsługują one takie serwisy jak ny z funkcją Desktop Experience i Hyper-V guracji systemu jak w poprzednim scenariu-
Wikipedia, Wikibooks czy Wikiquote. Ser- uruchamiał się na niej 1 minutę i 32 sekun- szu, start systemu skrócił się do 36 sekund (z
wisy Wikimedii obsługują ok. 10 miliar-
dy. Tyle czasu mijało od włączenia notebooka 92!), natomiast start maszyny wirtualnej do
dów zapytań miesięcznie, co jest wyzwa-
niem dla administratorów, którzy opieku- do pojawienia się okna logowania. Co cieka- 25 sekund (z 67). To mniej więcej trzy razy
ją się serwerami. Zróżnicowanie w konfi- we, skonfigurowana podobnie w oparciu o szybciej – wynik imponujący.
guracjach serwerów wzięło się z szybkie- obraz VHD maszyna wirtualna potrzebowa- http://dobreprogramy.pl
go przyrostu maszyn – w ciągu pierw-
szych 18 miesięcy istnienia projektu ilość
maszyn wzrosła z 15 do 200 sztuk. Wiki-
media argumentuje migrację konieczno- Google News
ścią uproszczenia procesów administra-
cji i aktualizacji oprogramowania, co przy
poprzedniej konfiguracji, z racji jej zróż-
teraz także w Polsce
F
nicowania było znacznie utrudnione. Jak irma Google uruchomiła zlokalizowa- baczyć zdjęcie w pełnych rozmiarach, musi
dotychczas Ubuntu zdobyło popular-
ną wersję usługi Google News. Przypo- kliknąć link i przejść do witryny wydawcy.
ność wśród użytkowników domowych.
Niewątpliwie migracja, przeprowadzo- mina ona wyszukiwarkę Google – gro- Krótkie fragmenty są wyświetlane wyłącz-
na przez Fundację, oznacza uznanie madzi znalezione w sieci informacje, tworzy nie w celu udostępnienia linków do tych wi-
Ubuntu Server za produkt równorzędny ich indeks i wyświetla użytkownikom wyniki tryn. Jest to w pełni zgodne z prawami autor-
wobec konkurencji firm Novell i Red Hat wyszukiwania sieci pod kątem wszelkiego ro- skimi, które zezwalają na wykorzystywanie
– dotychczasowych liderów na rynku sys- dzaju aktualności. Tak jak w przypadku wy- treści w ograniczonym zakresie bez zezwo-
temów serwerowych.
szukiwarki, celem jest podawanie najtrafniej- lenia właściciela praw. Dzięki temu zapiso-
http://arstechnica.com/
szych wyników, dlatego też wyniki generowa- wi gazetom wolno np. podawać w recenzjach
Oracle przejmuje ne są całkowicie automatycznie – za pomocą krótkie cytaty z książek chronionych prawa-
Advanced Visual Technology robotów indeksujących. Nagłówki wyświetla- mi autorskimi. Polska wersja językowa serwi-
Oracle poinformowało o zakupie firmy ne na stronie głównej Google News są wybie- su Google News jest dostępna pod adresem
Advanced Visual Technology (AVT), zaj-
rane przez algorytm komputerowy, oparty na news.google.pl. Na świecie funkcjonuje już po-
mującej się tworzeniem oprogramowa-
nia aranżacyjnego. Nie podano warunków wielu czynnikach, takich jak popularność po- nad 40 wersji regionalnych Google News, do-
finansowych kontraktu. Advanced Visual szczególnych wiadomości i liczba witryn in- stępnych w 23 różnych językach.
Technology specjalizuje się w detalicznej ternetowych, w których są one publikowa- http://www.google.com/
sprzedaży własnej aplikacji Facus, pozwa- ne. Przede wszystkim uwzględniana jest licz-
lającej na planowanie przestrzeni sklepo- ba oryginalnych artykułów napisanych i opu-
wych. Za pomocą dodatku o nazwie Retail
Focus Merchandiser, na każdym etapie pro-
blikowanych przez redakcje w celu określenia
jektowania istnieje natomiast możliwość wagi tematu, na którą ma również wpływ je-
podglądu 3D, dzięki czemu użytkownik jest go aktualność. W Google News pochodzące
w stanie na bieżąco wprowadzać poprawki z ponad 300 polskojęzycznych źródeł mate-
do swojego projektu. Firma zamierza połą- riały na ten sam temat są umieszczane w jed-
czyć produkty spółki z konkurencyjnym
nej grupie wiadomości. Serwis Google News w
dotąd pakietem ze stajni Oracle – Oracle
Retail, w nadziei na wzrost zysków ze sprze- pełni przestrzega międzynarodowych praw
daży detalicznej. Sfinalizowanie zakupu autorskich i praw miejscowych w każdym
przewidywane jest na koniec tego roku. regionie, w którym jest dostępny. Jeśli użyt-
http://news.zdnet.co.uk/ kownik chce przeczytać cały artykuł lub zo-

10 12/2008
Aktualności

Google rocznik 2001


SQL Server W tym roku firma Google obchodziła swoje
dziesiąte urodziny. Z tej okazji udostępni-

Kilimanjaro w 2010 roku ła Internautom swego rodzaju prezent –


wyszukiwarkę Google rocznik 2001. Wyszu-
kiwarka została udostępniona z pełną bazą

Z
espół pracujący nad SQL Serverem jaro ma zawierać narzędzia do przeprowa- wyników ze stycznia 2001 roku. Zindekso-
wanych stron było wówczas 1,326,920,000.
najwidoczniej nie podziela polityki dzania samodzielnych analiz przez użytkow- Google zaprasza wszystkich do niezwykle
innych zespołów i chętnie dzieli się ników (nazwa kodowa projektu toGemini), interesującej zabawy z archiwalną wersją
informacjami co do przyszłej wersji oprogra- które będą umożliwiały tworzenie aplikacji swojej wyszukiwarki. Zabawa taka uzmy-
mowania bazodanowego. Stąd właśnie wia- Business Intelligence bezpośrednio przy uży- słowić może jak wielki skok w rozwoju glo-
domo, że kolejna wersja SQL Server ozna- ciu dobrze znanego pakietu Office. Gemi- balnej sieci dokonał się przez niespełna 8
lat. Dla przykładu, w 2001 roku na hasło
czona będzie kodową nazwą Kilimanjaro i ni nie będzie osobnym modułem analitycz-
Polska Google prezentował 693 tys. wyni-
zadebiutuje w pierwszej połowie 2010 roku. nym, ale następcą SQL Server Analysis Se- ków, dziś pod tym samym hasłem kryje się
Pierwsza publiczna wersja beta ma się poja- rvices, dodatkowo rozszerzającym jego funk- 180 mln wyników – różnica niewątpliwie
wić rok wcześniej. Jest to wiadomość intere- cjonalność. Jeszcze jedna ciekawa informa- robi wrażenie.
sująca nie tylko dla administratorów – war- cja na temat SQL Server – Microsoft zapew- http://www.lexy.com.pl/blog
to pamiętać, że Microsoft jeszcze od wersji nił, że zamierza wydawać kolejne wersje SQL
Apple patentuje Docka
2005 udostępnia bezpłatną edycję Express, Server co 24-36 miesięcy. Obiecano również Firma Apple otrzymała patent opisujący
także do zastosowań komercyjnych. W zupeł- dokładne i wczesne informowanie użytkow- Dock – uniwersalny pasek narzędziowy,
ności wystarcza ona do celów edukacyjnych, ników o planowanych nowościach. pozwalający na szybki dostęp do wybra-
przyda się również małym firmom. Kiliman- http://www.techit.pl/ nych aplikacji, poprzez znajdujące się na
nim skróty. Stało się tak niespełna dzie-
sięć lat po jego oficjalnym debiucie w sys-
Co nowego temie Mac OS X. Korporacja złożyła wnio-
sek o patent 20 grudnia 1999 roku, ale

w Visual Studio 10? dopiero teraz Amerykańskie Biuro Paten-


towe, przyznało go firmie. Kładzie on
szczególny nacisk na możliwości dostoso-

M
icrosoft udostępnił garść informa- du źródłowego oparty o Windows Presentation wywania paska według preferencji użyt-
kownika. Dotyczy to między innymi moż-
cji na temat dziesiątej wersji popu- Foundation (WPF). Dodana zostanie obsłu-
liwości zmiany rozmiaru ikon, po tym, jak
larnego pakietu programistyczne- ga Microsoft Extensibility Framework (MEF), kursor znajdzie się w okolicach jednej z
go Visual Studio. Korporacja chce, aby dziesiąt- który jest odpowiednikiem Component Object nich, pojawiania się informacji opisujących
ka stała się nową szóstką, czyli odniosła podobny Model (COM) dla kodu zarządzanego. Pojawią je, wyświetlanych po najechaniu na nie
sukces jak wersja 6.0 w roku 1998. Nowe Visual się też funkcje Visual Studio Tools for Applica- myszką, a także dostosowywania elemen-
tów znajdujących się na Docku za pomocą
Studio ma być bardziej kompaktowe, oszczędne tions (VSTA) obsługujące makra i rozszerzenia.
metody przeciągnij i upuść. Nie wiado-
i skalowalne. Microsoft obiecuje, że będzie dzia- Wprowadzone zostaną poprawki w MSBuild mo, jakie działania Apple zamierza podjąć
łać szybciej niż Visual Studio 2008, niestety nie zwiększające wydajność i skalowalność dla Visu- w stosunku do osób, względem których
będzie się uruchamiać tak szybko jak Notatnik. al C++. System pomocy będzie korzystać z Live stwierdzi naruszenie patentu. Tym samym
Osiągnięte będzie to między innymi dzięki lep- Search, a użytkownicy będą mogli dodawać oce- pod znakiem zapytania pozostaje los apli-
szemu wykorzystaniu procesorów wielordzenio- ny. Pełniejszą listę planowanych zmian można kacji, dających możliwość osiągnięcia iden-
tycznych efektów pod innymi systemami
wych. Jak już pisaliśmy, dodane zostaną ułatwie- znaleźć w keynote Paramesha Vaidyanathana i
operacyjnymi.
nia dla osób lubiących pracować na kilku moni- Rico Marianiego z konferencji VSX. http://www.theregister.com/
torach. Pojawi się nowy, rozszerzalny edytor ko- http://www.eweek.com/
Siódme urodziny polskiej Wikipedii

Windows XP z nowymi
26 września br. polska edycja najpopular-
niejszej encyklopedii internetowej Wiki-
pedia ukończyła 7 lat. Wikipedia w Polsce

komputerami pół roku dłużej założona została dokładnie 26 września


2001 roku przez Pawła Jochyma i Krzysztofa
Jasiutowicza. Pierwszym materiałem opu-

F
irmy OEM sprzedające preinstalowa- producenta, czyli dopasowany do zakupione- blikowanym na jej łamach była tzw. reguła
ne systemy Windows z nowymi kom- go komputera. Początkowo termin zakończe- Titiusa-Bodego. Projekt bardzo szybko się
rozwijał, aż w roku 2003 w bazie zapisa-
puterami otrzymały dodatkowe sześć nia dystrybucji podwójnych nośników przy- nych było ponad 15 tys. artykułów, rok póź-
miesięcy, podczas których mogą dodawać do padał na 31 stycznia 2009 – po przedłużeniu niej 50 tys., w 2006 – 200 tys., a obecnie
zestawów komputerowych z Windows Vista Windows XP można dodawać do zestawów do jest to przeszło 500 tys. wpisów. Początko-
Business lub Ultimate dodatkowy nośnik od- 31 lipca 2009. Mówi się jednak, że trwają pra- wo Wikipedia w Polsce funkcjonowała jako
zyskiwania zawierający system Windows XP ce nad kolejnym przesunięciem tego terminu. samodzielny projekt, dopiero 12 stycznia
2002 została przyłączona do projektu mię-
Professional. Dzięki temu użytkownik korzy- Chodzi o to, by dla użytkowników OEM nie-
dzynarodowego i od tego czasu dostępna
stając z prawa do downgrade'u może sam usu- chętnie patrzących w stronę Visty wypraco- była pod adresem pl.wikipedia.com, a od 22
nąć Vistę i zainstalować Windows XP – tyle, wać strategię migracji z Windows XP bezpo- listopada 2002 funkcjonuje pod aktualnym
że nie musi już szukać nośnika, otrzymuje bo- średnio do Windows 7. adresem: http://pl.wikipedia.org.
wiem system w wersji przygotowanej przez http://www.theregister.com/ http://pl.wikipedia.org/

www.sdjournal.org 11
Tam byliśmy

Ku Londynowi i Euro
Relacja z Międzynarodowej Konferencji Nadawców – IBC 2008

W dniach 11-17 września w amsterdamskim centrum kongresowym RAI


po raz 41 odbyła się Międzynarodowa Konferencja Nadawców – IBC 2008.
Wystawa, targi i konferencja, które stworzone zostały z myślą o nadawcach
radiowo-telewizyjnych oraz firmach świadczących dla nich usługi lub
dostarczających im narzędzia.

P
o raz pierwszy przedstawiamy relację z nika to z prostego faktu, iż większość z tych, Polska, otrzymała nawet wyróżnienie podczas
tego wydarzenia na łamach miesięczni- którzy nie mogą obejrzeć zmagań sportowców gali honorowej za uruchomienie pierwszej w
ka Software Developer’s Journal. Ten na żywo, chce doświadczyć jak najbardziej tre- Polsce komercyjnej instalacji kablowej IPTV
rok, był rokiem, który na IBC 2008 stał pod ściwej relacji telewizyjnej, w jak najlepszej ja- (telewizji internetowej).
znakiem IPTV, telewizji mobilnej oraz Olim- kości. Dlatego z półek sklepów w okresie przed Do konkursu zgłoszonych zostało 100 projek-
piady. Olimpiadą znikał przede wszystkim sprzęt tów, spośród których do walki o nagrody w trzech
Świat nadawców telewizyjnych oraz progra- High Definition. kategoriach nominowano zaledwie 9 – w tym
mistów, to dwa różne światy, które z każdym Tę zasadę było wyraźnie widać podczas te- usługę VOD Multimedia Polska! Już ten fakt był
rokiem coraz bardziej zbliżają się ku sobie. gorocznej konferencji, na której podkreślano ogromnym wyróżnieniem dla firmy, satysfakcja i
Warto więc przyjrzeć się bliżej telewizji cyfro- osiągnięcia techniczne i innowacje wprowa- ukoronowaniem całej pracy przy projekcie VOD
wej oraz możliwościom jakie udostępnia pro- dzone w branży telewizyjnej przy okazji od- – mówi Bartłomiej Kasiński, Dyrektor Pionu
gramistom na tym nowym rynku. bywającej się kilka tygodni wcześniej Olim- Strategii i Rozwoju.
Tegoroczne targi okazały się być rekordo- piady. Dla programistów Java instalacja ta dzię-
we pod względem liczby odwiedzających, Teraz, gdy igrzyska już się skończyły, mi- ki zastosowaniu przystawek z technologią
zarejestrowanych uczestników, jak i wystaw- liony konsumentów, jak i nadawców, zaczy- MHP otwiera drogę do 50 000 polskich te-
ców. Targi IBC mają swoje korzenie w konfe- nają odkrywać inne możliwości płynące z lewizorów. Inne wdrożenia tej technologi w
rencji nadawców naziemnych i stały się wio- sprzętu i oprogramowania dostarczonego Polsce przeprowadziły dotychczas ogólno-
dącym wydarzeniem profesjonalistów zaan- na fali igrzysk telewidzom niemal na całym polska telewizja kablowa Vectra, poznańska
gażowanych w tworzenie, zarządzanie i do- świecie. INEA oraz Telewizja N.
starczanie rozrywki czy informacji na ca- Wydaje się więc niemal pewnym, iż kolejna Innym wystawcą z Polski był ATM S.A. pre-
łym świecie. Olimpiada, tym razem w Londynie, będzie zentująca rozwiązania ATM BankingTV oraz
Wystawa ta przyciągnęła ponad 1400 wy- kolejnym silnym impulsem rozwoju możli- ATM InternetTV, a także przedstawiła swoja
stawców oraz prawie 50 000 odwiedzających wości współczesnej telewizji oraz kolejnym regionalną sieć dystrybucji kontentu multime-
z ponad 130 krajów. globalnym wyzwaniem dla nadawców. dialnego, opartą na infrastrukturze sieci AT-
John Holton, przewodniczący wystawy MAN. Sieć ta oferuje użytkownikom ponad-
stwierdził – Wszelkie badania pokazują, iż Myśląc o Polskim Euro przeciętną funkcjonalność i integrację wielu
rynek nadawców i mediów elektronicznych po Polska i Ukraina stojąc przed organizacją Eu- dotychczas rozproszonych funkcjonalności w
prostu kwitnie, dzieje się to także dzięki wysta- ro 2012, powinny zdawać sobie sprawę, także jednej spójnej i skalowalnej platformie.
wie IBC. Nasi wystawcy są absolutnie zachwy- z tego aspektu, który może tchnąć nowe życie, ATM zamierza dalej rozwijać platformę
ceni, nie tylko liczbą odwiedzających, ale tak- w obecne w każdym domu, telewizyjne szkieł- multimedialną, czemu pomogły nowe kontak-
że z tego powodu, iż rozmawiają o poważnym ko. Polska może także w tym wymiarze stać ty i kontrakty zawarte podczas IBC. Także Ślą-
biznesie. się prawdziwym pionierem i z całą pewnością ska Grupa Telekomunikacyjna, operator kablo-
stanowić będzie swoisty telewizyjny poligon i wy, zakupił podczas targów sprzęt do retrans-
Sport i Olimpiada sprawdzian, tuż przed Olimpiadą. misji telewizji w standardzie HD.
Siłą napędową rozwoju telewizji cyfrowej są Cieszy więc tym bardziej obecność polskich Na targach wystawiało się także Poznańskie
przede wszystkim wydarzenia sportowe. Wy- firm na IBC 2008. Jedna z nich, Multimedia Centrum Superkomputerowo-Sieciowe PSCN

12 12/2008
Ku Londynowi i Euro

wspólnie z innymi uczelniami współtworzące centami tak zwanego middlewaru (będące- Jest kwestią czasu, choć może kilkulet-
Europejską Inicjatywę Mediów Sieciowych, go odpowiednikiem systemu operacyjnego w nią, ujednolicenie standardów w tym obsza-
czyli wspierany przez UE projekt dostosowa- komputerach osobistych) oferującymi prost- rze. Nie można zapomnieć o znaczeniu zwy-
nia infrastruktury sieciowej i archiwizacyjnej sze, lecz nie standardowe i często bardzo za- cięstwa Blue-Raya w walce o schedę po DVD.
do przesyłu obrazu w wysokiej rozdzielczości mknięte rozwiązania. Wszystko wskazuje na Standard ten zawiera technologię Blue-Ray
na terenie Krajów Członkowskich. to, iż ostatecznym zwycięzcą zostanie stan- BD-J, będącą pomostem pomiędzy odtwarza-
dard DVB/MHP, mający nie tylko poparcie ta- czami wideo, a DVB/MHP.
Multimedia Home Platform kich ciał jak Komisja Europejska, ale przede Dzięki temu Java ma zapewnioną świe-
W instalacji operatora Multimedia Polska wszystkim rosnącej liczby nadawców rozu- tlaną przyszłość w tym sektorze, który już
wykorzystano między innymi dekodery fir- miejących, iż po wygraniu przez Blue-Raya wkrótce, tak jak kiedyś telefon, internet i
my ADB, która swoje centrum rozwoju ulo- schedy po DVD, to właśnie Java stanie się do- komórki, zrewolucjonizuje życie zarówno
kowała w Zielonej Górze i od lat sprzeda- minującym standardem w świecie wideo. zwykłych zjadaczy chleba, jak i rekinów biz-
je nowoczesny sprzęt umożliwiający odbiór W takiej branży jak telewizja, jednolity, nesu.
cyfrowej telewizji internetowej i to w wersji lecz otwarty standard jest czymś wielce po- O tym, że to właśnie standard DVB/MHP
DVB/MHP. żądanym. Wszyscy pamiętamy ile problemów będzie ostatecznym zwycięzcą toczącej się
Firma ta miała swoje stoisko na targach IBC, wynikło z prostego konfliktu między standar- od lat batalii jest przekonany Paul Bristow
gdzie pokazywała projektowany w Polsce sprzęt dami kodowania obrazu PAL i SECAM. Tym z Osmosys, jednego z głównych twórców
i oprogramowanie (middleware), które dostar- razem poziom skomplikowania materii jest MHP. W zeszłym roku mieliśmy mnóstwo ludzi
czane jest na całym świecie. Powoli, także w na- wprost olbrzymi. od HTML w sektorze IPTV, lecz teraz odchodzą
szym kraju.
Temat telewizji cyfrowej i płynącej z niej
możliwości, dla twórców oprogramowania
oraz dostawców usług IT, jest z pewnością te-
matem nowym, lecz szczególnie interesują-
cym dla programistów platformy Java. Dzie-
je się to dzięki jednemu ze standardów DVB
– (MHP) Multimedia Home Platform. Nie
oznacza to jednak, iż nie istnieją inne plat-
formy, a firma Microsoft zasypuje gruszki
w popiele.
Od wielu lat toczy się w Polsce i na świe-
cie specyficzna wojna pomiędzy standarda-
mi, która szczególnie widoczna jest na ryn-
kach Stanów Zjednoczonych, gdzie dominują
rozwiązania Microsoft oraz na rynkach Euro-
pejskich, gdzie zwycięzcą pozostaje standard
DVB/MHP. Zarówno w Europie jak i w czę-
ści Azji jest to de facto ustanowiony standard,
który z każdym rokiem zdobywa coraz więk-
szą liczbę odbiorców.
Jest to bez znaczenia, którym kanałem docie- Rysunek 2. IBC 2008
ra do nas telewizja. Czy jest to nadawanie na-
ziemne (DVB-T/T2), satelitarne (DVB-S/S2),
kablowe (DVB-C), mobilne-naziemne (DVB-
H), mobilne-satelitarne (DVB-SH) lub interne-
towe (IPTV), coraz częściej jest to telewizja in-
teraktywna w standardzie DVB/MHP, oferują-
ca pełnię możliwości dla programistów Java.

Wojny standardów
Mimo tych batalii, czy to pomiędzy światem
Javy, a Microsoftem, czy też innymi produ-

Rysunek 1. Olimpiada 2008 Rysunek 3. Obrady i wystąpienia na IBC 2008

www.sdjournal.org 13
Tam byliśmy

oni na boczne tory. U nich nic się nie zmieniło, ju nowoczesnej telewizji w naszym kraju bę- logowe. Jednakże kuponów tych nie można
nie zrobili nic nowego. Teraz obserwujemy ludzi dzie zapewne wcześniej. Taką graniczną da- użyć jako zniżek na lepszy sprzęt, a z powo-
od MPEG, mówiących, iż jest to przyszłością dla tą jest na całym świecie moment całkowite- du braku prostego sprzętu większość z tych
IPTV. Ale oni zaledwie odkrywają jak dodać głę- go wyłączenia analogowego nadawania na- kuponów straciło ważność.
bię koloru do MPEG. Oni utknęli w zawiłej pętli ziemnego i przejście na naziemne nadawa- We Włoszech zastosowano znacznie lep-
czasu – mówi Bristow. nie cyfrowe. szy model subwencji i dzięki temu do wło-
MHP jest tak dobre, ponieważ jest oparte na Jest to operacja wymagająca zaangażowa- skich domów trafiły przystawki z technolo-
Javie, więc jest standardem ogólnego przezna- nia olbrzymich sił oraz stworzenia długolet- gią MHP. Wytworzyło to nowy, gwałtownie
czenia. Po wygraniu bitwy przez Blue-raya, każ- niej kampanii wzrostu wiedzy o telewizji cyfro- rosnący sektor usług programistycznych w
dy dysk tłoczony jest z interaktywną treścią na- wej wśród konsumentów i odpowiednich dzia- branży telewizyjnej – de facto – nową gałąź
pisaną w Javie. Na zachodzie, współczesna bran- łań. Takie kampanie już trwają na całym świe- e-gospodarki.
ża wideo używa Javy, a nie uczy się jej. Java pozo- cie, kilka przykładów poznać można było pod- Warto, by nasi decydenci poważnie zasta-
stanie w przestrzeni telewizyjnej, a tamci ludzie, czas IBC 2008. nowili się, czy podobnie nie zainwestować
tylko wprowadzają zamieszanie – kończy swo- W Stanach Zjednoczonych taką graniczną części pieniędzy z abonamentu i na gwiazd-
ją wypowiedź. datą ma być początek przyszłego roku – co kę 2010 wesprzeć telewidzów i w ten spo-
jest bardzo optymistyczne. Rząd, aby zapew- sób dofinansować rozwój tej technologii w
Przełączając telewizję nić wszystkim, także tym najuboższym, do- naszym kraju.
O ile kolejnym istotnym impulsem dla roz- stęp do telewizji po wyłączeniu analogowego Przy wyłączeniu telewizji analogowej,
woju branży, będzie Olimpiada i nasze Eu- nadawania – rozdaje 50$ kupony na konwer- szczególnie będzie trzeba zadbać o ludzi
ro, to jednak punkt przełomowy dla rozwo- tery sygnału cyfrowego na wyświetlanie ana- starszych, latami opłacających abonament,
dla których szklany ekran jest często jedy-
ną rozrywką.
Jeśli zdecydujemy się na inne strategie, po-
wstanie bałagan wśród nadawców, podwójny
zakup sprzętu przez odbiorców. A standary-
zacja jest nieunikniona. Działając strategicz-
nie, można więc uniknąć niepotrzebnych kło-
potów w przyszłości i przyśpieszyć rozwój tej
dziedziny gospodarki.
Telewizję analogową trzeba będzie wyłą-
czyć. Im wcześniej i mądrzej to zrobimy, tym
lepiej dla wszystkich. Euro 2012 to świetna
do tego okazja. Polska w tej dziedzinie jest
nie tylko daleko za krajami zachodu, niektó-
rymi krajami Azji, ale także Rosją i światem
arabskim.

Rysunek 4. Wystawcy na IBC 2008

Rysunek 6. Krok na przód w rozwoju nowoczesnej


telewizji

Rysunek 7. Emiraty Arabskie swoistą doliną


Rysunek 5. Wystawcy na IBC 2008 multimedialną

14 12/2008
Ku Londynowi i Euro

Dla przykładu, przedsawiony podczas W Europie DTT powoli staje się powszech- Nie zasypujmy gruszek w popiele. Euro
konferencji IBC stan rozwoju telewizji cy- ne, a w każdym kraju toczą się poważne przy- 2012 i zachodni nadawcy wymuszą na nas
frowej oraz MHP w świecie arabskim, mógł- gotowania do wyłączenia naziemnego nada- najwyższe standardy. Choć tym razem, bądz-
by zaskoczyć czytelnika. Dzięki stworzeniu wania cyfrowego. Podczas IBC 2008 brytyjska my do tego gotowi i na tym polu!
między innymi w Zjedoczonych Emiratach stacja BCC prezentowała jeszcze pojemniejszy i
Arabskich swoistej doliny multimedialnej wydajniejszy standard DTT-2.
– strefy zwolnionej od podatków, Dubai był
w stanie przyciągnąć z powrotem islamskich
specjalistów, którzy zdobywali swoje szlify
na zachodzie.
Wraz z kwitnącą ekonomią, w przeciwień-
stwie do zachodu (co było słychać także pod-
czas targów, gdy producenci telewizyjni plot-
kowali o nadchodzących cięciach budżeto-
wych), pozwoliło to na szybki rozwój telewi-
zji cyfrowej w tym regionie świata. Tak przy-
najmniej dzieje się w krajach nie dotkniętych
przez amerykański proces stabilizacyjny, ta-
kich jak Arabia Saudyjska, Bahrain, Katar
czy Emiraty.
Obserwować tam możemy prawdziwą eks-
plozję telewizji interaktywnej. Dla przykładu,
uchodząca w Polsce za zacofaną, Arabia Sau-
dyjska od pewnego czasu oferuje naziemną te-
lewizję cyfrową DTT (5 kanałów) oraz kanał
interkatywny w technologii MHP. W przyszło-
ści planuje się uruchomienie satelitarnych ka-
nałów, standardu High Definition oraz wpro- Rysunek 9. A. Rogowski
wadzenie między innymi rozwiązań e-gover-
ment i innych. Także sąsiedni Iran przygoto-
wuje się do wystrzelenia swojego pierwszego
satelity telekomunikacyjnego 1 Hope.

Rysunek 8. Dyplom zdobyty przez Multimedia Rysunek 10. Wyróżnienie dla Multimedia Polska za uruchomienie pierwszej w Polsce komercyjnej usługi
Polska VOD w sieciach CATV i IPTV

Z OSTATNIEJ CHWILI
16 Października 2008 w serii głosowań Parlament Europejski zdecydował się utworzyć specjalne ciało łączące narodowych regulatorów,
tak by firmy telekomunikacyjne w spójny sposób operowały wewnątrz Unii Europejskiej.
Pryncypialna intencją tego działania jest wsparcie, tych którzy chcą wykorzystać uwolnioną, przez przejście z telewizji analogowej na
cyfrową, przestrzeń dla nowych usług i że usługi te będą przenaszalne wewnątrz Unii Europejskiej.
Parlament Europejski wsparł Hiszpańskiego Euro-deputowanego Pilara del Castillo i tym samym utworzył Ciało Europejskich Regulatorów Telekomu-
nikacyjnych (BERT).

www.sdjournal.org 15
Opis CD

ModelMaker
Code Explorer 6
ModelMaker Code Explorer 6 – narzędzie do zastępowania standar-
dowego CodeExplorer w IDE Delphi. Podobnie jak CodeExplorer,
program ten pozwala przeglądać i edytować klasy, użytkowników, wła-
Edycja C#
ściwości, metody, funkcje, ale jego funkcjonalność jest o wiele szersza. Edycja C# jest zaprojektowana specjalnie do generowania kodu C#
Jako edytor refaktoringu, ModelMaker Code Explorer sprawia, że kod native. Składnia ramowa C# 1.1, 2.0 oraz 3.0 for the .NET jest w
można zmieniać szybko i łatwo – można tworzyć i modyfikować klasy pełni obsługiwana. Edycja ModelMaker C# posiada pełną możli-
i użytkowników przez wybranie opcji w odpowiednich dialogach. Ist- wość inżynierii wstecznej i importowania istniejącego kodu C#.
niejące klasy i użytkowników równie łatwo edytować, korygować i usu- Eksperci od integracji Delphi IDE i Visual Studio dbają o synchro-
wać, jak tworzyć. Obsługa parametryzowanych szablonów kodu, wy- nizację ModelMaker oraz edytorów Delphi IDE lub Visual Studio
znaczanych przez użytkownika. Możliwe jest kopiowanie elementów IDE. Zarówno integracja Borland jak i Visual Studio IDE są częścią
z jednej klasy do drugiej. Dodatkowo, odwzorowywane są lokalne pro- licencji ModelMaker.
cedury, widoczne dla wszystkich elementów klasy. Możliwość różnego Klienci używają ModelMaker dla całego zakresu rozbudowy opro-
rodzaju sortowania i filtrowania odwzorowywanych elementów. Wie- gramowania – aplikacje w czasie rzeczywistym, aplikacje typu tech-
le funkcji programu, jak na przykład edytory metod, pól i właściwości, nicznego i bazy danych.
zaczerpniętych jest z ModelMaker. Ogólne funkcje:

• Przeglądarka i Refaktoryzacje są w pełni zgodne z Projektantem


Total Network
Formularzy;
• IntelliReplace (opcjonalnie) propaguje identyfikatory o zmienio-
Inventory
nej nazwie w module, klasie, itp. Opcjonalnie zamienia komenta- Program Total Network Inventory jest przeznaczony do ewidencji
rze, ciągi itd.; komputerów w sieci. Nie wymaga instalacji klienta. Przy pomocy To-
• Komentarze i Atrybuty są tal Network Inventory poznacie wszystkie informacje o stanie – pro-
kopiowane/przenoszone/przegrupowywane z jednostkami kodu; cesorów, pamięci, zainstalowanych HDD, programach, karcie video,
• Akcesory własności i pól stanu są tworzone, zachowywane i usu- uruchomionych procesach i serwisach wszystkich komputerów w sie-
wane gdzie jest to niezbędne; ci. Także będzie zebrana informacja o urządzeniach sieciowych, usta-
• Refaktoryzacje współpracują bezpośrednio z buforami edycji wieniach aktualizacji i antywirusach, zasobach całego dostępu i wielu
IDE, zmiany mogą być cofnięte za pomocą standardowych ko- innych rzeczy. Przy pomocy generatora raportów, będziecie mogli spo-
mend Cofnij/Powtórz; rządzić oddzielne raporty dla poszczególnych komputerów, grup i ro-
• Nowi członkowie są (opcjonalnie) wstawiani zgodnie ze schema- dzajów urządzeń. Wygodna Opcja skanowania umożliwia skanowanie
tem sortowania określonym przez użytkownika. Dodatkowo, komputerów znajdujących się w domenie lub roboczej grupie, a tak-
Metody mogą być wstawiane przed lub po aktualnej metodzie; że ustawianie zasięgu IP adresów dla skanowania. Program posiada al-
• Refaktoryzacje edytora IDE dostępne przez menu MMX lub ternatywny sposób skanowania, umożliwia to login script, po zainsta-
skróty klawiaturowe stosują refaktoryzację do jednostki w pozy- lowaniu którego, aktualizacja bazy danych będzie dokonywana przy
cji kursora; każdym uruchomieniu komputera. Oprócz tego program Total Ne-
• dobrze dobrany zestaw opcji pozwoli dostosować przeglądarkę twork Inventory wygeneruje dla każdego komputera oddzielny numer
ModelMaker Code Explorer do własnych potrzeb. i wprowadzi go do karty, która zawiera wszelkie informacje o danym
komputerze i jego użytkowniku. Dodatkowym atutem programu są
ModelMaker wygodne ustawienia interfejsu i opcji skanowania.

ModelMaker – narzędzie przeznaczone do modelowania własne- Cała sieć pod kontrolą


go Delphi UML i refactoringu. Istnieją dwie wersje – dla Pascal i dla Zautomatyzowane sporządzanie listy komputerów w sieci bez
C#. Obie wersje wchodzą w skład ModelMaker. Klienci którzy ku- konieczności odchodzenia od stanowiska roboczego! Total Ne-
pują narzędzie ModelMaker wykorzystują je do tworzenia aplikacji twork Inventory skanuje wszystkie zdalne komputery i zachowu-
technicznych, baz danych, a wszystko w czasie rzeczywistym. je wszystkie zebrane informacje w centralnej bazie danych. Każdy
komputer posiada swój paszport. Zawiera on następujące informa-
Edycja Pascala cje – Nazwa komputera, Zarejestrowany użytkownik, Organizacja,
Edycja Pascala jest zaprojektowana specjalnie do generowania kodu Grupa robocza/domena, Adres IP, Data instalacji, Czas ostatniego
Delhi native. Język obiektu Delhi Pascal jest w pełni obsługiwany, włą- skanowania, Nazwa użytkownika. W uzupełnieniu do zebranych
czając większość składni Delphi for .NET (v1 oraz v2). Edycja Pascala informacji, można dodać dodatkową informację o każdym kom-
ModelMaker posiada pełne możliwości inżynierii wstecznej i importo- puterze i jego użytkowniku. Można również dodawać informacje
wania istniejącego kodu Delhi. Eksperci od integracji Delphi IDE dbają o użytkowniku komputera i wskazać rzeczywiste dane personalne,
o synchronizację ModelMaker oraz edytorów Delphi IDE. dział, stanowisko, telefon, e-mail itd.

16 12/2008
Opis CD

Wygodny interfejs użytkownika ni pracę łatwą i efektywną. Powstały z myślą o klientach system pozwa-
Interfejs Total Network Inventory został opracowany tak, aby mógł la dostosować program do potrzeb nawet najbardziej wymagającego
być dostosowany do danego użytkownika. Zapewnia szybką i ła- użytkownika, nawet w takim detalu jak kolorystyka.
twą nawigację. Rozpoczyna się w oknie powitania, które pozwala Ramzes Faktura – moduł przeznaczony do obsługi sprzedaży
jednym naciśnięciem aktywować podstawowe funkcje programu. we wszystkich rodzajach przedsiębiorstw. W intuicyjny sposób
Główne okno programu składa się z trzech osobnych części. W le- pozwala wystawiać dokumenty sprzedażowe, rozliczać przyjęcie i
wej części znajduje się spis wszystkich przeskanowanych kompute- wydanie gotówki oraz pilnować zobowiązań. Współpracuje z urzą-
rów w sieci w widoku drzewa. Po wybraniu komputera ze spisu zo- dzeniami fiskalnymi. Jako program sieciowy pozwala na obsługę
baczymy informacje o tym komputerze. Nawigację po uzyskanych sprzedaży z wielu stanowisk. Wchodząc w skład Aplikacji Ramzes,
informacjach o komputerze uzyskuje się za pomocą opcji Katego- gwarantuje bezpośredni eksport danych do systemów finansowo-
rie. Główne okno nie zawiera żadnych niepotrzebnych funkcji, dla- księgowych. Podstawowe funkcje programu:
tego łatwo się w nim pracuje.
• pełna obsługa sprzedaży – tworzenie i wydruk dokumentów
Kreator skanowania handlowych; obsługa maski numeru wszystkich typów numeru
Po wybraniu Uruchom kreator skanowania w oknie powitalnym lub dokumentów (indywidualny wzór numeru); możliwość wyboru
w panelu narzędzi, szybko przejdziemy przez 5 kroków konfigura- numeracji miesięcznej lub rocznej (przy rozpoczęciu pracy z pro-
cji skanowania. Total Network Inventory wspiera 2 rodzaje skanowa- gramem lub na przełomie roku kalendarzowego); tworzenie sys-
nia – proste skanowanie on-line i skanowanie przez skrypt logowania. temu cenników, rabatów i upustów przypisanych grupie kontra-
Drugi rodzaj daje możliwość dodania uruchamiania danego modułu, hentów lub towarów; obsługa drukarek fiskalnych; druk parago-
skanowania do domenowego skryptu logowania użytkowników, w ten nów fiskalnych oraz raportów fiskalnych;
sposób pozwala zebrać informacje o każdym komputerze, który pod- • pełna obsługa kasy – tworzenie dokumentów KP, KW, raportów
łączany jest do domeny, przy użyciu specjalnego skryptu logowania. kasowych; automatyczny wydruk dokumentów kasowych do
Kreator umożliwia również wybranie sposobu wykrywania kompu- faktur gotówkowych;
terów – przeglądanie miejsc sieciowych lub wskazywanie zakresu ad- • całkowita kontrola należności – rozliczenie dokumentów w
resów IP do skanowania. Proces skanowania jest dosyć szybki i zajmu- oparciu o kasę i bank; generowanie wezwań do zapłaty wraz z od-
je kilka minut. setkami; przeglądanie i wydruk list nierozliczonych faktur;
• rejestracja przelewów obcych oraz ewidencjonowanie wpłat i
Kreator raportów Total Network Inventory wypłat bankowych;
Umożliwia tworzenie raportów za pomocą kilku kliknięć! Tworzy • możliwość tworzenia szeregu raportów i zestawień;
głównie raporty dla poszczególnych komputerów i skrócone rapor- • możliwość poszerzenia uprawnień o funkcję Zamówień,
ty dla wszystkich wybranych komputerów. Kreator raportów po- umożliwiającą ewidencję zamówień złotówkowych i waluto-
zwala tworzyć raporty dla wszystkich interesujących Państwa ka- wych od odbiorców;
tegorii. Co więcej, w Trybie multikategorii można tworzyć skrócone • brak ograniczeń w zakresie ilości wprowadzanych kontra-
raporty z dowolną kombinacją kategorii dla dowolnej ilości kom- hentów, towarów oraz wystawianych dokumentów.
puterów. Niekiedy raporty zajmują wiele stron, dlatego trudno jest
znaleźć niektóre specyficzne dane. Aby to rozwiązać, Kreator ra- Pozostałe programy wchodzące w skład Aplikacji Ramzes to: Ramzes
portów posiada funkcję wyszukiwania. Raporty można wydruko- – Magazyn, Ramzes – Produkcja, Ramzes – Księgi Handlowe, Ram-
wać lub przeglądać w widoku elektronicznym. Kreator raportów zes – PKPiR, Ramzes – Ryczałt, Ramzes – Amortyzacja, Ramzes –
obsługuje następujące formaty eksportu – TXT, RTF, CSV, lub Płace, Ramzes – SuperAdmin.
HTML dla dalszej analizy. Dzięki raportom utworzonym w To- Minimalne wymagania sprzętowe:
tal Network Inventory, otrzymamy błyskawiczny przegląd wszyst-
kich komputerów w sieci i ich zawartości właśnie w chwili, kiedy • Komputer z Procesorem Pentium 133 MHz
tego potrzebujemy. • Pamięć operacyjna – 64 MB RAM
• Napęd CD-ROM
Aplikacja Ramzes • System Operacyjny – Microsoft Windows 98 SE, 2000, ME, XP,
Vista
– zintegrowany sys- • Karta graficzna – VGA 800x600
• Drukarka – pracująca w systemie Microsoft Windows
tem dla MSP Aplikacja Ramzes jest tworzona przez Ramzes Sp. z o. o. – jednego
Aplikacja Ramzes to najwyższej jakości zintegrowany system wspoma- z wiodących producentów systemów dla MSP. Długoletnie doświad-
gający zarządzanie dla MSP. Funkcjonujący na platformie Windows czenie firmy pozwoliło skrupulatnie zdefiniować wymagania Klien-
wyróżnia się przyjaznym interfejsem przy zachowaniu bogatej funk- ta i przełożyć je na funkcjonalność programów. Dzięki temu produk-
cjonalności posiada przyjazny interfejs, intuicyjną obsługę. Składa się ty firmy Ramzes cieszą się dużym uznaniem wśród stałych Klientów
ze ściśle współpracujących ze sobą modułów odpowiadających za pra- z całego kraju, regularnie zaopatrujących się w najnowsze wersje opro-
cę wszystkich działów firmy. Ścisła łączność pomiędzy modułami czy- gramowania.

www.sdjournal.org 17
Biblioteka miesiąca

Django
Python w zastosowaniach webowych

Tworzenie aplikacji internetowych to chleb powszedni wielu współczesnych


programistów, co w większości przypadków wiąże się z ciężką, mozolną pracą.
W niniejszym artykule przedstawione jest Django – rozwiązanie stworzone
w języku Python, którego celem jest uczynić pracę programisty aplikacji
webowych prostszą, bardziej efektywną oraz przyjemniejszą.
stawem wskazówek przy stosowaniu których
Dowiesz się: Powinieneś wiedzieć: istnieje pewność, że technologia będzie stała
• Jak budować aplikacje internetowe w oparciu • Podstawy programowania w języku Python; po stronie programisty. Ogólną, dobrze przyj-
o Django; • Podstawowe informacje na temat protokołu mowaną zasadą jest to, aby przed rozpoczęciem
• Jakie zalety oferuje Django w odniesieniu do HTTP. projektu usiąść z zespołem i omówić te punkty
podobnych, konkurencyjnych rozwiązań. stawiając je jako podstawowe wskazówki przy
tworzeniu aplikacji.
Podstawowe postulaty, które zaleca się przy
nawet wielu amatorów, którym ten język przy- projektowaniu i tworzeniu aplikacji opartych
padł do gustu tak mocno, iż używają go jako ję- o Django to:
Poziom trudności zyka ogólnego zastosowania, rozwiązując przy je-
go pomocy problemy nie mające wiele wspólnego • luźne powiązanie komponentów – Djan-
z aplikacjami internetowymi. Znam również kil- go samo w sobie nie wspiera paradygma-
ku zawodowych programistów PHP i z rozmów z tu odwrócenia sterowania (ang. Inversion

O
dpowiadając na pytanie Co to jest nimi można wyciągnąć jeden wniosek – im dłu- of Control, IoC); technologia oferuje nato-
Django? zespół odpowiedzialny za tę żej pracuje się z tą technologią (a co za tym idzie, miast swój wariant wzorca MVC; mimo
technologię przedstawia marketin- im bardziej skomplikowane stają problemy do wszystko przy tworzeniu aplikacji w opar-
gowy slogan The Web framework for perfectioni- rozwiązania), tym bardziej staje się ona uciążli- ciu o Django powinno się pamiętać o tej
sts with deadlines. Z punktu widzenia progra- wą, eksponując swoje wady na niemalże każdym zasadzie;
misty, Django to wysokopoziomowa bibliote- kroku prac programistycznych. Ja osobiście, bio- • Don’t repeat yourself (DRY) – ten postu-
ka napisana w języku Python, oferująca szkielet rąc pod uwagę specyfikę mojej pracy zawodowej, lat oznacza, że każda informacja w syste-
(ang. framework) pozwalający na szybkie two- znajduję się na przeciwnym biegunie tego zakątka mie jest zdefiniowana w jednym, konkret-
rzenie aplikacji internetowych. Historia Djan- technologii, zajmując się skomplikowanymi syste- nie określonym miejscu. Django ze swoim
go rozpoczęła się w 2003 roku od dwóch pro- mami korporacyjnymi bazującymi na JEE i naje- wspomaganiem mapowania obiektowo re-
gramistów – Adriana Holovatyego oraz Simo- żonymi różnego rodzaju buzz word’ami. Często lacyjnego (ORM) potrafi wtedy w pełni ko-
na Willisona – pracujących dla wydawcy gazety daje mi się we znaki ogromna ilość pracy, potrzeb- rzystać z mechanizmów optymalizacji za-
Lawrence Journal-World, stawianych przed co- na do wdrożenia nawet najprostszych rozwiązań pytań do bazy oraz pamięci podręcznej w
raz to nowymi wyzwaniami szybszego tworze- tworzonych w oparciu o tę technologię. Złotym celu zachowania odpowiedniej wydajności
nia nowych modułów internetowej strony gaze- środkiem, jeśli chodzi o szkielety do budowania aplikacji w tym krytycznym obszarze;
ty. Postanowili oni zrezygnować z popularnego aplikacji internetowych, są właśnie takie techno- • Explicit is better than implicit (ja tłumaczę
standardu LAMP (skrót od słów: Linux Apa- logie jak Django czy Ruby on Rails. Jako, że osobi- to jako brak automagiczności) – ten postu-
che MySQL PHP) i stworzyć coś bardziej dopa- ście nie lubię wywodzącego się z Perla języka Ru- lat wynika właściwie z filozofii samego
sowanego do ich potrzeb. by, a Pythona darzę sporą sympatią postanowiłem Pytona, u podstaw której leży łatwość czy-
Po dwóch latach pracy, w grudniu 2005 roku skupić się właśnie na Django. W niniejszym arty- tania i rozumienia kodu. Oczywiście, wie-
światło dzienne ujrzała pierwsza stabilna wersja kule postaram się udowodnić, że duża i ciągle ro- le rzeczy w Django dzieje się w sposób au-
Django oznaczona numerem 0.90. Od tego mo- snąca popularność Django nie jest przypadkiem tomatyczny, jednakże zwykle programista
mentu Django zyskiwało coraz większą popular- oraz to, że przy pomocy tej technologii tworze- jest tego świadomy i może w tym procesie
ność. 3 września 2008 team developerski uznał nie aplikacji webowych może być nie tylko łatwe i uczestniczyć;
produkt za gotowy i wypuścił wersję 1.0. Z tej szybkie, ale także przyjemne. • Rich Domain Model czyli logika aplikacji
okazji chciałbym przekonać Czytelników do za- zmieszana z modelem danych – na tym
interesowania się tą ciekawą technologią oraz jej Filozofia budowy etapie trudno jest wytłumaczyć czym
możliwościami. aplikacji za pomocą Django konkretnie objawia się takie podejście w
Przypuszczam, że niewielu współczesnych pro- Jak większość szkieletów aplikacji Django, aby Django, jednak będzie to widoczne w dal-
gramistów nie miało do czynienia z PHP. Znam ułatwić tworzenie systemów, posługuje się ze- szych częściach artykułu.

18 12/2008
Django

Środowisko developerskie rzyć użytkownika i bazę danych, której będzie nie uruchomiło wewnętrzny serwer developer-
Zakładam, że Czytelnicy niniejszego artyku- on właścicielem (w moim przypadku użytkow- ski. W odróżnieniu od pracy z PHP, w przypad-
łu znają podstawy języka Python. W przypad- nik i baza). ku Django nie istnieje konieczność stawiania
ku gdyby ktoś wiedzy takowej nie posiadał, a Tutaj właściwie kończy się przygotowa- skomplikowanych serwerów webowych na po-
chciałby mimo wszystko przebrnąć przez ni- nie środowiska, pomijając oczywiście ulubio- trzeby tworzenia aplikacji. Serwer developer-
niejszy tekst, polecam jeden z wielu kursów do- ny edytor tekstu przeznaczony do pracy z ko- ski ma rzecz jasna sporo ograniczeń, z których
stępnych on-line. Mój osobisty rekord naucza- dem. Ja pracuję w Eclipse IDE z zainstalowa- najważniejszym jest możliwość obsłużenia tyl-
nia podstaw języka Python, w celu przygoto- ną wtyczką Pydev. ko jednego zapytania jednocześnie. Jednak na-
wania do pracy z Django wynosi niecałe 2 go- W pracy z Django istotnym elementem jest wet przy budowaniu dużych projektów jest on
dziny, dlatego nie ma się czego obawiać – oczy- wspomniany wcześniej skrypt django-admin. doskonałym narzędziem pracy.
wiście przy założeniu, że znamy ogólne zasady Za pomocą tego utworzymy teraz pierwszą
programowania komputerów. Wracając do śro- aplikację i uruchomimy serwer developerski. Struktura aplikacji
dowiska developerskiego, przygodę z Django Rozpoczniemy od stworzenia katalogu robo- Jako, że stworzyliśmy właśnie pierwszy projekt
rozpoczniemy od obciążenia naszego łącza in- czego, w którym wykonamy następujące pole- Django, warto się bliżej przyjrzeć jakie pliki zo-
ternetowego kilkoma pozycjami, które wymie- cenie: stały wygenerowane i do czego służą. Po wej-
niam poniżej: ściu do katalogu projektu powinny znajdować
django-admin.py startproject projekt się tam cztery pliki:
• Python 2.5+
• Django 1.0+ W katalogu powinien utworzyć się podkata- • __init__.py – plik ten jest wymagany
• baza danych – w tym artykule będę bazo- log projekt, po wejściu do którego należy wyko- przez Pythona aby projekt był traktowany
wać na PostgreSQL w wersji 8, którą po- nać polecenie: jako pakiet w rozumieniu języka;
lecam. Django współpracuje oczywiście z • manage.py – plik który został użyty do
wieloma silnikami baz danych; szczegóły manage.py runserver uruchomienia serwera developerskiego.
na ten temat można znaleźć w dokumen- Jest to pomocniczy plik tworzony przez
tacji biblioteki; W wyniku wykonania tego polecenia na ekra- Django w celu ułatwienia czynności deve-
• sterownik bazy danych dla języka Python. nie powinny się ukazać następujące komuni- loperskich takich jak uruchamianie serwe-
Dla PostgreSQL jest to psycopg2. katy: ra, synchronizacja bazy, walidacja modeli
danych i inne;
Oprogramowanie z powyższej listy dostępne Validating models... • settings.py – zgodnie z nazwą jest to plik
jest za darmo w Internecie. W celu jego znale- 0 errors found w którym przechowywane są ustawienia
zienia sugeruję wykorzystanie najpopularniej- projektu. Tutaj definiuje się szczegóły po-
szej wyszukiwarki internetowej. Django version 1.0-final-SVN-unknown, łączenia z bazą i konfiguracje wszystkich
Szczegóły instalacji dla rozmaitych syste- using settings 'projekt.settings' opcji oferowanych przez szkielet aplika-
mów różnią się nieco od siebie. Ja osobiście Development server is running at http: cji. Tutaj zwykle umieszcza się też własne
instalowałem opisany wyżej pakiet pod Win- //127.0.0.1:8000/ ustawienia globalne;
dows XP, Windows Vista, Linux Debian, Linux Quit the server with CTRL-BREAK. • urls.py – plik mapowania kontekstów apli-
Ubuntu, MacOS X Tiger oraz MacOS Leopard kacji (adresów wpisywanych w przeglą-
nigdzie nie napotykając większych problemów. Nie da się ukryć że Django zachęca do wejścia darce) do konkretnych widoków aplika-
Instalację należy zacząć od Pythona, psy- na podany adres, gdzie – jeśli wszystko poszło cji. Plik ten działa na prostej zasadzie wy-
copg2 oraz samego Django. bez problemu – przywita nas gratulacjami z rażeń regularnych gdzie pierwszym argu-
Jeśli proces ten został przeprowadzony pra- okazji uruchomienia serwera. mentem krotki jest wyrażenie dotyczące
widłowo, to wydane w interaktywnym inter- Teraz, żeby uchylić nieco rąbka tajemnicy, adresu, a drugim widok, do którego odno-
preterze polecenia: objaśnię co właściwie się stało. Po pierwsze, zo- si się mapowanie.
stał wykorzystany skrypt django-admin w ce-
import django lu założenia nowego projektu. Takie wywo- Jeśli chodzi o projekt, to tyle – jednak na tym
import psycopg2 łanie tworzy podstawową strukturę projektu nie kończy się kwestia struktury. Django za-
gotową do rozpoczęcia pracy. Kolejne polece- kłada podział na projekt (tj. bazę zawierającą
powinny zakończyć się bezbłędnie. Następ-
nym krokiem jest umieszczenie pliku django- Listing 1. Dodanie aplikacji „witaj” do listy zainstalowanych aplikacji
admin.py znajdującego się w katalogu Scripts/
instalacji Pythona na ścieżce uruchomieniowej INSTALLED_APPS = (
systemu, tak aby w odpowiedzi na polecenie 'django.contrib.auth',
'django.contrib.contenttypes',
django-admin.py 'django.contrib.sessions',
'django.contrib.sites',
otrzymać komunikat: 'projekt.witaj',
)
Type 'django-admin.py help' for usage.
Listing 2. Widok „Hello world” w Django
Kolejnym krokiem jest instalacja bazy danych. from django.http import HttpResponse
Podczas instalacji należy pamiętać o ustawie-
niu haseł oraz kodowania w standardzie UTF- def hello(request):
8. Za pomocą instalującego się domyślnie z ba- return HttpResponse("Hello world.")
zą programu pgAdmin III proponuję utwo-

www.sdjournal.org 19
Biblioteka miesiąca

globalną konfigurację i mapowanie) oraz sze- W pliku settings.py w krotce INSTALLED _ APPS Robione jest to we wspomnianym pliku
reg podpiętych pod ten projekt aplikacji. Od- znajdującej się na końcu pliku należy dopisać urls.py. Do krotki urlpatterns należy dodać
zwierciedla to architekturę większych sys- kolejną aplikację czyli witaj. Całość powinna odpowiedni wpis, tak aby całość wyglądała tak,
temów (chociażby rozwiązań bazujących na wyglądać w sposób widoczny na Listingu 1. jak to pokazano na Listingu 3 (komentarze ja-
SOA – przynajmniej w kontekście organiza- Jak widać projekt i aplikacja są pakietami kie wstawił Django oczywiście nie przeszkadza-
cji projektu), gdzie istnieje wiele aplikacji ko- w rozumieniu języka Python, należy pamię- ją i mogą zostać).
rzystających z tego samego systemu użytkow- tać by trzymać się tej zasady przy podawaniu Jak wspomniałem wcześniej pierwsza część
ników, sesji itd. Podział ten nie zawsze jest po- klas i metod. reprezentuje wyrażenie regularne, za pomocą
trzebny. W rzeczywistości, przy większości Teraz można zacząć pisać zawartość aplika- którego Django zidentyfikuje widok z drugiego
zastosowań będzie istniała potrzeba utworze- cji. Proponuję tutaj zacząć od klasycznego Hel- argumentu. Jeśli strona ma pokazywać się na
nia tylko jednej aplikacji. lo World. W pliku views.py aplikacji należy wpi- głównym kontekście należy użyć zapisu:
Aby takową aplikację stworzyć w katalogu sać treść widoczną na Listingu 2.
projektu należy wpisać następujące polecenie: Znając podstawy języka Python, od razu wi- (r'^$', 'projekt.witaj.views.hello'),
dać, co dzieje się w tym widoku. W pierwszej li-
manage.py startapp witaj nijce importowana jest klasa z biblioteki Djan- Po uruchomieniu serwera developerskiego po-
go, odpowiedzialna za wygenerowanie odpo- zostaje wejść na adres http://127.0.0.1:8000/
Po wykonaniu tego polecenia w katalogu pro- wiedzi na zapytanie HTTP. Dalej zdefiniowa- witaj/ (lub bez kontekstu jeśli tak zostało usta-
jektu utworzony zostanie katalog aplikacji z na jest metoda, która zakłada otrzymanie ar- wione) i obejrzeć efekty.
następującą zawartością: gumentu request. Jak nietrudno się domyślić W tym miejscu warto wspomnieć o domyśl-
request to zapytanie HTTP ze wszystkimi do- nie włączonym trybie DEBUG. Zachęcam Czy-
• __init__.py – podobnie jak wyżej jest to stępnymi parametrami. Metoda w swoim ciele telników do wprowadzenia jakiejś celowej po-
plik pakietu Pythona; zwraca obiekt HttpResponse skonstruowany z myłki, np. w adresie, bądź do zrobienia literów-
• views.py – plik w którym definiuje się wi- łańcucha znaków „Hello world.”. Tutaj za- ki w nazwie zwracanej klasy HttpResponse. Po-
doki aplikacji; czyna się wyłaniać idea sposobu działania apli- zwoli to przekonać się w praktyce jak Django
• models.py – plik w którym definiuje się kacji opartej na Django, czyli zbioru widoków reaguje na błędy. Ekran informujący o błędzie
modele danych używane w aplikacji au- przyjmujących żądanie (ang. request) i zwraca- zawiera bardzo dokładne informacje co i gdzie
tomatycznie przetwarzane przez mecha- jących odpowiedź (ang. response). Idea ta będzie się stało, jest on na pewno mocną stroną Djan-
nizm ORM. dokładniej opisana w następnym rozdziale. Po go i przy okazji dość często oglądanym ekranem
utworzeniu widoku wypadałoby go podpiąć podczas prac developerskich.
Po utworzeniu aplikacji należy poinformować pod jakiś kontekst, tak aby można było wywo- Oczywiście Django nie wprowadza ograni-
projekt o przypisaniu do niego nowej aplikacji. łać go z przeglądarki. czeń co do możliwości używania innych biblio-
tek i funkcjonalności języka Python. Na przy-
Listing 3. Mapowanie dla widoku Hello World
kład, aby uzyskać efekt podobny do uzyskane-
go na stronie isitfriday.biz powinno się napisać
urlpatterns = patterns('', widok widoczny na Listingu 4.
(r'^witaj/$', 'projekt.witaj.views.hello'), Będąc w temacie podstawowych widoków
) warto poruszyć sprawę przekazywania argu-
mentów. Mechanizm ten może być bardzo przy-
Listing 4. Przykład widoku Is it Friday ? datny kiedy trzeba np. pokazać profil konkretne-
from django.http import HttpResponse go użytkownika czy konkretny wpis na blogu. W
import time Django jest to bardzo proste. W mapowaniu i wi-
doku zapisujemy treść widoczną na Listingu 5.
def friday(request): Znając wyrażenia regularne nie jest to nic
friday = "No" skomplikowanego, istnieje oczywiście możli-
if time.localtime()[6]==4: wość imiennego przydzielania argumentów.
friday = "Yes" Wywołanie http://127.0.0.1:8000/dodawanie/
return HttpResponse("Is it Friday ? <BR/> %s" % friday) 2/2/ da wiadomy wynik.

Listing 5. Mapowanie widoku dla przykładu argumentów kontekstowych Przetwarzanie zapytania


# wpis w mapowaniu W poprzednich przykładach można było zo-
(r'^dodawanie/(\d+)/(\d+)/$', 'projekt.witaj.views.dodawanie'), baczyć mechanizm przetwarzania zapytania
w akcji, teraz pora na odrobinę teorii. W prawi-
# wpis w widoku dłowo działającej aplikacji (wystąpienie obsłu-
def dodawanie(request,a,b): żonego błędu też jest w tym rozumieniu pra-
return HttpResponse(int(a)+int(b)) widłowym działaniem) dla każdego zapytania
HTTP przychodzącego od klienta system po-
Listing 6. Przykładowa konfiguracja bazy w Django winien wygenerować odpowiedź. W przypad-
DATABASE_ENGINE = 'postgresql_psycopg2' ku Django cały proces wygląda w sposób na-
DATABASE_NAME = 'baza' stępujący:
DATABASE_USER = 'uzytkownik'
DATABASE_PASSWORD = 'qwe' • zapytanie przechwytywane jest przez śro-
DATABASE_HOST = '' dowisko uruchomieniowe (najczęściej
DATABASE_PORT = '' mod_python albo FastCGI) i przekazywa-
ne do przetwarzania w Django;

20 12/2008
Django

• zapytanie trafia na początku do warstwy Oczywiście wcześniej należy się upewnić czy Tutaj warto zwrócić także uwagę na na-
pośredniej Request Middleware, która mo- serwer bazy działa oraz czy baza i użytkownik zwę tabeli. Django stosuje w tym przypad-
że je zwrócić w niezmienionej lub zmody- zostali stworzeni z odpowiednimi uprawnie- ku nomenklaturę nazewnictwa o postaci
fikowanej postaci albo stwierdzić, że nale- niami. aplikacja_obiekt, dzięki której łatwo ziden-
ży zakończyć przetwarzanie i zwrócić od- Jeśli wszystko przebiegło pomyślnie, pole- tyfikować przynależność danej tabeli – szcze-
powiedź. Ta warstwa odpowiedzialna jest cam użycie wcześniej utworzonej aplikacji wi- gólnie gdy wiele aplikacji korzysta z jednej ba-
za zapewnienie bezpieczeństwa, wspoma- taj jako poligonu doświadczalnego do tworze- zy. Oczywiście Django pozwala na własne nazy-
ganie sesji itd.; nia modeli i wpisać treść widoczną na Listin- wanie tabel i kolumn tak aby można było ma-
• zapytanie przechwytywane jest przez kon- gu 7 do pliku models.py w katalogu wspomnia- pować istniejące już tabele (np. z innych aplika-
troler mapowania adresów i następuje do- nej aplikacji. cji) na modele Django.
pasowanie kontekstu do widoku, w przy- W pierwszej linijce importowany jest moduł Na tym etapie można pozwolić Django, aby
padku braku możliwości dopasowania models, w którym znajduje się wszystko czego automatycznie zainicjalizował bazę wydając
kontroler odpowiada statusem 404 i zwra- potrzeba w związku z dostępem do bazy da- polecenie:
ca odpowiedź; nych w Django. manage.py syncdb
• po wykonaniu dopasowania do pracy za- Dalej zdefiniowana jest klasa dziedzicząca Przy wykonywaniu tego polecenia okazu-
biera się warstwa View Middleware, która po models. Model i zdefiniowane w niej pola je się, że Django robi trochę więcej niż użyt-
działa podobnie jak warstwa Request Mid- z przypisanymi im wartościami xxxField. Jak kownik mógłby się spodziewać. W praktyce
dleware, jednak tym razem jest pewność, widać, wszystko to wydaje się dość oczywiste. jednak wcale tak nie jest. Jeśli spojrzeć na listę
że zadziałały wszystkie poprzednie war- Jeśli chodzi o same typy pól to w bibliotece jest INSTALLED_APPS w pliku ustawień, łatwo moż-
stwy i np. istnieje utworzona bezpieczna ich o wiele więcej niż pokazałem tutaj i wszyst- na zauważyć, że Django robi dokładnie to, co
sesja użytkownika; kie są solidnie udokumentowane. powinien, gdyż aplikacja witaj jest tylko jedną z
• do pracy przystępuje widok zwracając od- W momencie ujrzenia tego modelu specja- wielu (reszta aplikacji umieszczonych na wspo-
powiedź; liści od projektowania baz danych zapewne za- mnianej liście jest bardzo przydatna przy reali-
• zwrócona odpowiedź trafia do jeszcze jed- czną węszyć spisek i będą bardzo chętni aby zo- zacji usług Django). Na pytanie o utworzenie
nej warstwy pośredniej czyli Response Mid- baczyć jak wygląda tabela generowana przez użytkownika administracyjnego polecam od-
dleware, która może wykonać swoje opera- Django z takiej klasy. Nic prostszego, wystarczy powiedzieć przecząco.
cje np. zamknięcie transakcji w bazie da- w tym celu wywołać polecenie: Polecenie syncdb jest wygodne, jednak
nych; manage.py sqlall witaj osobiście zalecam aby w procesie tworze-
• odpowiedź wędruje do klienta. by w wyniku otrzymać schemat widoczny nia i eksperymentowania z modelami, przed
na Listingu 8. każdym synchronizowaniem czyścić struk-
Istnieje jeszcze warstwa pośrednia – Exception Jak widać na Listingu 8, wygenerowany kod turę bazy.
Middleware. Jeśli na którymkolwiek etapie SQL wygląda przyzwoicie. Django jeśli ma taką W momencie, gdy model jest już zaimporto-
przetwarzania, za który odpowiedzialne jest możliwość, będzie tak układać tabele, aby wali- wany do bazy można najlepiej go przetestować
Django, nastąpi rzucenie (w slangu użytkow- dacja zachodziła na poziomie bazy. Jednak po- za pomocą interaktywnej konsoli Pythona wy-
ników języka Pytonie używa się zwrotu pod- nieważ nie zawsze jest to możliwe, dlatego sam konując następujące polecenie:
niesienie) wyjątku, wtedy do akcji wkroczy ta też jest w stanie sprawdzić poprawność danych
warstwa, odpowiednio reagując. Oczywiście zanim wyda polecenie zapisu do bazy. manage.py shell
w trakcie tworzenia systemu można pisać wła-
sne elementy warstw pośrednich i ustalać ich Listing 7. Przykładowy, prosty model danych w Django
kolejność wywołania.
from django.db import models
Modele i dostęp do danych
W momencie gdy proste aplikacje nie stanowią class Osoba(models.Model):
już dla Czytelników większej tajemnicy, czas imie = models.CharField(max_length=200)
na zapoznanie się z mechanizmami oferowany- nazwisko = models.CharField(max_length=200)
mi przez warstwę persystencji. Django oferuje czytelnik_sdj = models.BooleanField(default=True)
programistom szereg dobrodziejstw w ramach rocznik = models.PositiveIntegerField(default=1980)
techniki ORM (mapowanie obiektowo-relacyj-
ne). W skrócie oznacza to, że programista de- Listing 8. Wygenerowany przez Django schemat tabeli
finiuje w aplikacji obiekty danych, a Django sa- BEGIN;
mo robi następujące czynności: CREATE TABLE "witaj_osoba" (
"id" serial NOT NULL PRIMARY KEY,
• sprawdza poprawność modeli; "imie" varchar(200) NOT NULL,
• tworzy strukturę bazy; "nazwisko" varchar(200) NOT NULL,
• manipuluje danymi w tabeli, gdy zmienia- "czytelnik_sdj" boolean NOT NULL,
na jest wartości pól obiektu; "rocznik" integer CHECK ("rocznik" >= 0) NOT NULL
• pilnuje transakcyjności; )
• optymalizuje i buforuje zapytania. ;
COMMIT;
Zanim Django zacznie wykonywać jakiekol-
wiek operacje na bazie danych, musi wie- Listing 9. Metoda reprezentacji klasy Osoba
dzieć jak się do niej podłączyć. Definiuje się def _ _ unicode _ _ (self):
return self.imie + ' ' + self.nazwisko
to w odpowiedniej sekcji pliku settings.py. –
Listing 6.

www.sdjournal.org 21
Biblioteka miesiąca

Najpierw należy zacząć od zaimportowania ki, a mianowicie poinstruować ją jak powinna Jeśli dla przykładu w wyniku nie powinny
naszego modelu poleceniem: się prezentować, dodając do niej prostą metodę znaleźć się osoby o imieniu "Tomasz" to nale-
widoczną na Listingu 9. żałoby wpisać.
>>> from witaj.models import Osoba Po dokonaniu takiej modyfikacji w modelu
nie trzeba ponownie synchronizować aplikacji >>> Osoba.objects.exclude(imie='Tomasz')
po czym posługując się zwykłą znajomością języ- z bazą danych, gdyż w jego polach nic nie zo- [<Osoba: Janek Kowalski>, <Osoba: Nowak >]
ka Python można stworzyć i uzupełnić obiekt. stało zmienione. Najprostszym sposobem na
uzyskanie danych z bazy jest uzyskanie listy Jak widać, przedstawione wyżej mechanizmy
>>> autor = Osoba() wszystkich rekordów danego typu. W naszym dostępu do danych są stosunkowo proste –
>>> autor.imie = 'Tomasz' przypadku można to zrealizować następująco: jest to dobry moment do eksperymentowa-
>>> autor.nazwisko = 'Kropiewnicki' nia. Warto też w przyszłości zajrzeć do doku-
>>> autor.rocznik = 1982 >>> Osoba.objects.all() mentacji Django aby zgłębić ten temat. Czy-
telników zapraszam teraz do zapoznania się
W tym momencie w pamięci istnieje obiekt Po wywołaniu powyższego polecenia otrzyma- z tym, co się dzieje „pod maską” przedstawio-
autor z wypełnionymi polami. Aby zapisać go my wynik jak poniżej: nych wyżej operacji.
do bazy wystarczy wywołać polecenie: Gdy zostanie wykonane następujące pole-
[<Osoba: Tomasz Kropiewnicki>, <Osoba: cenie:
>>> autor.save() Janek Kowalski>, <Osoba: Piotr Nowak>]
>>> lista = Osoba.objects.all()
Polecam stworzyć i zapisać jeszcze ze dwa Jak widać, dostęp do bazy otrzymuje się po- >>> type(lista)
obiekty w podobny sposób – przyda się to do przez pole objects, które otrzymujemy w pre- <class 'django.db.models.query.QuerySet'>
późniejszych eksperymentów. Przy okazji moż- zencie od django.db.models.Model.
na zobaczyć jak działa walidacja parametrów. Oczywiście nie najlepszym pomysłem jest itero- Django jak widać wcale nie zwraca listy, ale
W momencie gdy została zgromadzona pew- wanie po tej kolekcji w poszukiwaniu np. wszyst- swoją klasę QuerySet. Otóż ORM zaimple-
na porcja informacji czas uzyskać dostęp do za- kich Tomaszów, gdy baza może zrobić to sama: mentowany w Django działa w trybie leniwym
pisanych danych. (ang. lazy) czyli nie pobiera obiektów z bazy do
Przed przystąpieniem do tego proponuję do- >>> Osoba.objects.filter(imie='Tomasz') momentu do którego są potrzebne. Dlatego sa-
dać jeszcze do klasy Osoba drobny element logi- [<Osoba: Tomasz Kropiewnicki>] mo wykonanie polecenia

Listing 10. Przykład modelu danych z relacją >>> lista = Osoba.objects.all()

from django.db import models nie powoduje wywołania zapytania do bazy.


Czynność fizycznego pobierania danych z ba-
class Miasto(models.Model): zy nazywa się materializacją i występuje do-
nazwa = models.CharField(max_length=200) piero gdy z QuerySet pobieramy konkretne
obiekty czyli zwykle w najpóźniejszym moż-
def __unicode__(self): liwym momencie aby oszczędzić czasochłon-
return self.nazwa nych odwołań do bazy danych.
QuerySet ma też inną właściwość, miano-
class Osoba(models.Model): wicie na obiekcie takim można użyć metod
imie = models.CharField(max_length=200) filter czy exclude aby kaskadowo doprecyzo-
nazwisko = models.CharField(max_length=200) wać warunki wyszukiwania. Oczywiście samo
czytelnik_sdj = models.BooleanField(default=True) odwołanie do bazy nastąpi dopiero w momen-
rocznik=models.PositiveIntegerField(default=1980) cie materializacji.
Często występuje sytuacja gdy należy pobrać
miasto = models.ForeignKey(Miasto) tylko jeden obiekt danego typu (np. użytkow-
nika przy logowaniu) można to zrobić w nastę-
def __unicode__(self): pujący sposób:
return self.imie + ' ' + self.nazwisko
>>> Osoba.objects.get(imie='Tomasz')
Listing 11. Eksperymenty ze złożonym modelem danych <Osoba: Tomasz Kropiewnicki>
>>> from witaj.models import *
Jeśli przedstawione wyżej kryterium byłoby
>>> szczecin = Miasto() spełnione przez więcej niż jeden rekord, to
>>> szczecin.nazwa = 'Szczecin' Django podniosłoby wyjątek.
>>> szczecin.save() Możliwości Django nie kończą się oczywiście
na mapowaniu prostych obiektów. Biblioteka
>>> autor = Osoba() zapewnia możliwość tworzenia i obsługi roz-
>>> autor.imie = 'Tomasz' budowanych relacji pomiędzy obiektami.
>>> autor.nazwisko = 'Kropiewnicki' Aby to zobrazować zmodyfikujemy plik mo-
>>> autor.miasto = szczecin delu tak, aby miał on postać widoczną na Li-
stingu 10.
>>> autor.save() Na Listingu 10 utworzona została nowa kla-
sa – Miasto. W klasie Osoba dołączono z kolei

22 12/2008
Django

relację jeden-do-wielu (1-*) do klasy Miasto. Po ka administracyjnego, który został założony cjonalności całej aplikacji. Oczywiście panel
zsynchronizowaniu tego modelu z bazą pole- przy synchronizacji bazy można uzyskać peł- umożliwia szerokie możliwości rozszerzania i
cam przejść do interaktywnego interpretera i ne uprawnienia do korzystania z panelu admi- konfiguracji opisane dokładnie w dokumenta-
postępować dokładnie tak jak podpowiada w nistratora. cji jednak już w swojej podstawowej wersji po-
tym przypadku intuicja. Na Listingu 11 poka- Na głównym ekranie mamy do dyspozycji zwala praktycznie natychmiastowo rozpocząć
zane jest jak może wyglądać taki eksperyment. szereg aplikacji zainstalowanych w projekcie. prace osobom wprowadzającym dane (np. po-
Co logiczne, do relacji zdefiniowanej w ta- Aplikacje wbudowane w Django, takie jak zycje do cennika czy klientów do bazy).
kiej postaci istnieje prosty dostęp poprzez skła- Auth czy Sites, pozwalają na konfigurację swo-
dową obiektu, w związku z czym naturalnym ich właściwości z poziomu tego panelu. Bardzo Mechanizm szablonów
jest wywołanie: interesująca jest możliwość zarządzania aplika- Kiedy już umiemy zarządzać logiką i danymi w
cją Auth, czyli tak naprawdę możliwość wygod- aplikacji przychodzi pora na obsługę warstwy
>>> autor.miasto nego zarządzania użytkownikami i grupami. prezentacji. Tutaj Django również potrafi po-
<Miasto: Szczecin> Oczywiście poprzez utworzenie pliku ad- móc, oferując zaawansowany mechanizm sza-
min.py panel administratora zarządza też apli- blonów. Co ciekawe Django pozostawia moż-
Podsumowując niniejszą część artykułu moż- kacją witaj. Tutaj mamy możliwości zarządza- liwość korzystania z alternatywnych mechani-
na stwierdzić, że warstwa obsługi oraz dostę- nia zawartością danych w modelu aplikacji. Pa- zmów szablonowania, jednak osobiście uwa-
pu do danych w Django jest bardzo rozbudo- nel administratora jest ogromną zaletą Django. żam, iż ten wbudowany oferuje bardzo dobry
wana i szczersze polecam zapoznać się z jej do- Konkurencyjne technologie nie posiadają takie- kompromis pomiędzy wydajnością, a stopniem
kumentacją w celu wykorzystania jej pełnych go rozwiązania, a z doświadczenia mogę powie- zaawansowania możliwości. W przykładzie
możliwości. Aczkolwiek, to co warto w tym dzieć że funkcjonalność, którą oferuje panel ad- „Is it Friday?” przekazany został bezpośrednio
miejscu podkreślić, to fakt, iż pomimo całej ministratora często stanowi około 30% funk- łańcuch znaków do konstruktora odpowie-
tej złożoności rozwiązanie ORM dostarczone
w ramach Django zachowuje bardzo natural- Listing 12. Zawartość pliku admin.py
ny i intuicyjny charakter.
from witaj.models import Osoba, Miasto
Panel administratora from django.contrib import admin
Tworząc systemy internetowe zwykle staje się
przed koniecznością robienia serii standardo- admin.site.register(Osoba)
wych rzeczy, które powtarzają się z projektu na admin.site.register(Miasto)
projekt. Są to między innymi:
Listing 13. Przykład widoku wykorzystującego mechanizm szablonów
• zarządzanie użytkownikami; from django.shortcuts import render_to_response
• zarządzanie uprawnieniami; import time
• wprowadzanie i modyfikacja danych.
def friday(request):
Zwykle do tych czynności tworzy się panel ad- friday = "No"
ministratora, w którym mozolnie to wszyst- if time.localtime()[6]==4:
ko trzeba zakodować. W tym momencie z po- friday = "Yes"
mocą przychodzi Django ze swoim modułem return render_to_response('friday.html', {'friday': friday})
admin. Aby zobaczyć jak działa ten moduł na-
leży włączyć go do aplikacji postępując w na- Listing 14. Plik szablonu wykorzystanego w przykładzie Is it Friday ?
stępujący sposób. Na początek trzeba dodać <html>
wpis django.contrib.admin do listy zainsta- <head>
lowanych aplikacji w pliku settings.py. Następ- <title>Is it Friday ?</title>
nie należy zsynchronizować bazę danych (tym </head>
razem trzeba utworzyć użytkownika admini- <body>
stracyjnego). W pliku urls.py trzeba ściągnąć <p>Is it Friday ?<br/>{{friday}}</p>
znaki komentarzy z linii: </body>
</html>
from django.contrib import admin
admin.autodiscover() Listing 15. Plik szablonu do przykładu obsługi formularza
<html>
oraz <head>
<title>Nowe miasto</title>
(r'^admin/(.*)', admin.site.root) </head>
<body>
Wreszcie, w katalogu aplikacji można utwo- <form method="post" action=".">
rzyć plik admin.py z treścią przedstawioną na {{form}}</p>
Listingu 12. <input type="submit" class="button" value="Nowe"/>
Jeśli wszystkie opisane wyżej kroki zostaną </form>
wykonane i po włączeniu serwera developer- <p>{{msg}}</p>
skiego zostanie odpytany adres http://127.0.0.1/ </body>
admin, to powinien się ukazać ekran logowa- </html>
nia. Po zalogowaniu się danymi użytkowni-

www.sdjournal.org 23
Biblioteka miesiąca

dzi HTTP. Gdyby miało by być to zrealizowa- cji sterujących za pomocą których wyświetla- (normalne wejście przeglądarką) to wyświetli się
ne przy użyciu szablonu, widok wyglądałby tak nie dowolnych danych na stronie staje się na- pusty formularz do wypełnienia. Jeśli zaś aplika-
jak pokazano to na Listingu 13. prawdę łatwe. cja otrzyma żądanie wysłane metodą POST, wte-
Zanim aplikacja zostanie uruchomiona trze- Szablony Django oferują też inną użyteczną dy Django przypisze dane do formularza, a po-
ba jeszcze napisać sam szablon, a jeszcze wcze- właściwość, a mianowicie możliwość dziedzi- nieważ jest to formularz pochodzący od mode-
śniej – poinformować Django gdzie są przecho- czenia szablonów. Jest to doskonałe narzędzie lu, wywołanie metodą save() stworzy odpo-
wywane pliki szablonów. pozwalające na edycje tylko tych elementów wiedni obiekt w bazie. Cały ten mechanizm bę-
Robi się to za pomocą pola TEMPLATE_DIRS strony które są konieczne, co doskonale wpisu- dzie działał nawet dla skomplikowanych formu-
w pliku settings.py, gdzie znajduje się lista bez- je się w architekturę współczesnych witryn in- larzy, zaś w szablonie wystarczy podać proste od-
względnych lokalizacji katalogów z plikami sza- ternetowych. niesienie w postaci {{form}}.
blonów. Szablon użyty na potrzeby naszego Ogólnie dzięki stosowaniu mechanizmu sza- Jeśli arkusze stylów aplikacji są dobrze za-
przykładu pokazany jest na Listingu 14. blonów istnieje możliwość bardzo szybkiego projektowane, to oferowany przez Django me-
Jak widać główną zmianą w widoku jest tworzenia widoków przy minimalnym nakła- chanizm obsługi formularzy wydatnie zmniej-
funkcja skrótu render_to_response. Pierw- dzie ze strony programisty, zostawiając osobom sza nakład pracy potrzebny na sfinalizowanie
szym jej argumentem jest nazwa szablonu, któ- zajmującym się interfejsem użytkownika pełną projektu.
rego Django poszukuje w zdefiniowanych kata- swobodę dotyczącą wyboru stylów i rozmiesz-
logach a drugim jest słownik kontekstu. Kon- czenia elementów na stronie. Środowisko produkcyjne
tekst to mapowanie nazw do dowolnych obiek- Kiedy aplikacja jest gotowa, czas przekazać ją
tów języka Python, w tym momencie jest to Formularze użytkownikom. Dysponując własnym środowi-
łańcuch znaków, ale nic nie stoi na przeszko- Nieodłącznym elementem aplikacji interneto- skiem serwerowym mamy do rozważenia kilka
dzie by był to własny obiekt lub QuerySet. Do- wych jest wprowadzanie danych we wszelkiego możliwych konfiguracji. Najpopularniejszą jest
stęp do elementów kontekstu uzyskuje się po- rodzaju formularzach. Tutaj Django również mod_python działający pod kontrolą Apache,
przez operator kropki służący do wywoływa- przychodzi z pomocą w ramach swojego za- jednak ta konfiguracja nie jest najbardziej opty-
nia metod czy uzyskiwania dostępów do list awansowanego mechanizmu obsługi formula- malna – patrząc pod kątem wydajności. Aby
czy słowników. Tak na przykład dostęp do me- rzy. W kolejnym przykładzie pokazane jest jak aplikacja mogła rozwinąć pełne skrzydła pole-
tody w 10 elemencie listy można uzyskać za po- prosto można zbudować formularz w oparciu o cam zastosować serwer Nginix i FastCGI, oczy-
mocą składni: istniejący już model. Na początek należy stwo- wiście jeśli uzyskamy wsparcie dla takich roz-
rzyć nowy plik szablonu, którego treść widocz- wiązań ze strony administratora serwera.
{{lista.10.metoda}} na jest na Listingu 15 – ja zapisałem go w pliku Jeśli chodzi o Django to istnieje w Polsce kil-
miastoform.html. ka hostingów oferujących tą platformę. Firmy
Mechanizm szablonów nie przewiduje w tej W następnym kroku należy dodać kod logiki hostingowe oferują nie tylko podstawowy ser-
składni wywoływania metod z argumentami. przedstawiony na Listingu 16. wer WWW i bazę, ale często też usługę pamięci
Jak łatwo zauważyć, dzięki wcześniejszej Tutaj mamy trochę więcej kodu więc przeana- podręcznej, a wszystko to za niewiele większą
wiedzy z zakresu modelu danych, można zbu- lizujmy krok po kroku co się dzieje. Najpierw im- opłatą w porównaniu do zwykłego LAMP.
dować kontekst z elementów modelu, zaś w portowane są potrzebne moduły. Następnie two-
kontekście właściwie dowolnie poruszać się po rzymy klasę formularza – jedyne co należy tutaj Podsumowanie
jego strukturze np.: zrobić, to poinformować Django, aby za pomocą Mam nadzieję, że po lekturze niniejszego ar-
mechanizmów meta-programowania wygenero- tykułu Czytelnicy będą w stanie wyrobić so-
{{osoby.1.imie}} {{osoby.1.miasto.nazwa}} wał nam klasę formularza dla modelu Miasto. bie opinię na temat procesu tworzenia apli-
Następnie budowany jest widok przekazują- kacji internetowych w oparciu o Django. Mo-
Django oferuje możliwość definiowania pę- cy formularz wprost jako element kontekstu. Je- im zdaniem przewaga Django nad konkuren-
tli, instrukcji warunkowych innych instruk- śli widok zostanie wywołany zapytaniem GET cyjnymi technologiami wynika z faktu, iż po-
zwala on tworzyć aplikacje internetowe szyb-
Listing 16. Definicja widoku w przykładzie zastosowania formularza ko i bez konieczności poświęcania elegancji ko-
du oraz spójności architektury, a dodatkowo
from django.forms import ModelForm nie zamyka programistów w klatce swoich wła-
from witaj.models import Miasto snych konwencji, jak to czynią niektórzy z jego
konkurentów.
class MiastoForm(ModelForm):
class Meta: TOMASZ KROPIEWNICKI
model = Miasto Tomasz Kropiewnicki pracuje w szczecińskim od-
dziale firmy BLStream (http://www.blstream.pl).
def new_citty(request): Jego doświadczenia zawodowe obejmują głównie
form = MiastoForm() budowanie systemów klasy Enterprise, systemów
msg = '' wbudowanych, oraz programowanie aplikacji mo-
if request.method == 'POST': bilnych. Firma BLStream wchodzi w skład Grupy
new_data = request.POST.copy() BLStream, powstałej by efektywniej wykorzystywać
form = MiastoForm(new_data) potencjał dwóch, szybko rozwijających się produ-
if form.is_valid(): centów oprogramowania – BLStream i Gamelion.
form.save() Firmy wchodzące w skład grupy specjalizują się w
msg = 'Gratulacje, mamy nowe miasto' wytwarzaniu oprogramowania dla klientów kor-
poracyjnych, w rozwiązaniach mobilnych oraz pro-
return render_to_response('miastoform.html', {'form': form, 'msg' : msg }) dukcji i testowaniu gier.
Kontakt z autorem: tkk9000@gmail.com

24 12/2008
Jeśli nie możesz odczytać zawartości płyty CD, a nie
jest ona uszkodzona mechanicznie, sprawdź ją na co
najmniej dwóch napędach CD. W razie problemów z
płytą, prosimy pisać pod adres:
cd@softtware.com.pl

Redakcja nie udziela pomocy technicznej


w instalowaniu i użytkowaniu programów
zamieszczonych na płytach CD-ROM
dostarczonych razem z pismem.
Programowanie w Linuksie

Mirrorowanie
dysku w Linuksie
Mirrorowanie (RAID1) jest jedną z możliwości uchronienia się przed utratą
danych w przypadku awarii dysku twardego komputera. Aby skorzystać z
tej możliwości wymagane jest posiadanie drugiego niewykorzystywanego
dysku twardego o pojemności nie mniejszej niż dysk na którym mamy
zapisane nasze dane.
minal użytkownika root) i wpisujemy na-
Dowiesz się: Powinieneś wiedzieć: stępujące polecenia – df -k, swapon -s
• Jak najefektywniej zrealizować to zadanie na • Jak wykonać kopię bezpieczeństwa danych. oraz sudo sfdisk -l. W naszym przypad-
przykładzie popularnej dystrybucji systemu ku mamy jeden główny filesystem / (Listing
Linuks – Uubuntu. 1) umiejscowiony na partycji /dev/sda1. Po-
zostałe filesystemy są wirtualne (w ogólno-
ści nie odwołują się do urządzeń w katalogu
nala i wydawania poleceń z klawiatury albo /dev/) i nie musimy się nimi zajmować. Ob-
korzystając z programów graficznych opisu- szar wymiany (swap) umiejscowiony jest na
Poziom trudności jących konfigurację naszego komputera. Ja- partycji /dev/sda5 (Listing 3). Podział na po-
ko że w dalszej części konfigurację będziemy szczególne partycje uwidoczniony jest na Li-
musieli wykonać za pomocą poleceń w ter- stingu 2. Drugi dysk (/dev/sdb) który wyko-
minalu to skupimy się na tej drodze do ce- rzystamy do mirrorowania jest całkowicie

W
tym poradniku opiszę jak naj- lu. Otwieramy więc emulator terminala (do- pusty (Listing 2).
efektywniej zrealizować to za- stępny w menu Aplikacje->Akcesoria->Termi-
danie na przykładzie popular- nal; alternatywnie w systemie Ubuntu mo- Przygotowanie drugiego dysku
nej dystrybucji systemu Linuks – Ubuntu. żemy skorzystać z terminala użytkownika Przystępujemy więc do działań. Na począ-
Jako że poniższe działania modyfikują kon- root – Aplikacje->Narzędzia systemowe->Ter- tek musimy poprawnie spartycjonować dru-
figurację naszego systemu, silnie zalecane (a
wręcz wymagane!) jest wykonanie kopii bez- Listing 1. Informacja o zamontowanych filesystemach
pieczeństwa naszych danych. Jak coś się nie
uda, będzie mniej płaczu i zgrzytania zęba- radekk@raidtest:~$ df -k
mi. Przed przystąpieniem do zadania po- System plików bl. 1K B użyte dostępne %uż. zamont. na
trzebne będą następujące narzędzia – ter- /dev/sda1 3920768 2858404 864768 77% /
minal (TTY/Konsola znakowa) lub dowolny varrun 256016 104 255912 1% /var/run
emulator terminala (np. gnome-terminal); varlock 256016 0 256016 0% /var/lock
dysk twardy z niezaalokowaną przestrzenią udev 256016 52 255964 1% /dev
dyskową – podłączony w komputerze, najle- devshm 256016 12 256004 1% /dev/shm
piej jakby miał taką samą pojemność jak dysk lrm 256016 45040 210976 18% /lib/modules/2.6.24-19-
którego obecnie używamy; dostęp do konta generic/volatile
administratora – albo poprzez mechanizm gvfs-fuse-daemon 3920768 2858404 864768 77% /home/radekk/.gvfs
sudo albo su.
Listing 2. Informacja o tablicy partycji dysku głównego
Rozeznanie w aktualnej radekk@raidtest:~$ sudo sfdisk -l
sytuacji i stan docelowy (...)
Zanim przystąpimy do pracy musimy roze- Device Boot Start End #cyls #blocks Id System
znać się w aktualnej sytuacji konfiguracyj- /dev/sda1 * 0+ 491 492- 3951958+ 83 Linux
nej naszego systemu oraz przygotować się /dev/sda2 492 521 30 240975 5 Extended
do dalszych działań. Na początku sprawdza- /dev/sda3 0 - 0 0 0 Empty
my następujące informacje – jakie posiada- /dev/sda4 0 - 0 0 0 Empty
my filesystemy, jak wyglądają tablice party- /dev/sda5 492+ 521 30- 240943+ 82 Linux swap / Solaris
cji naszych dysków oraz jakie są wykorzysty- (...)
wane obszary wymiany (ang. swap). Infor- Disk /dev/sdb doesn't contain a valid partition table
macje te możemy zebrać korzystając z termi-

26 12/2008
Mirrorowanie dysku w Linuksie

gi, chwilowo całkowicie pusty dysk. Partycjo- ny odpowiadać dotychczasowym partycjom rzenie macierzy RAID1 wymaga obecności
nowania możemy dokonać dowolnym zna- z Listingu 2. Osoby bardziej zaawansowane w systemie odpowiednich modułów kernela.
nym nam narzędziem pamiętając aby ilość mogą wykorzystać ten krok w celu zmiany Możemy to zweryfikować na różne sposoby,
partycji oraz ich wielkość odpowiadała na- wielkości lub rozłożenia dotychczasowych np. poleceniami – lsmod | grep raid czy cat
szym wymaganiom. W naszym przypadku partycji. Może to być szczególnie pomocne /proc/mdstat (Listing 7). Jeśli w obu przypad-
będziemy mieli dwie podstawowe partycje w przypadku kiedy ustawione podczas insta- kach wyświetlona zostanie informacja o do-
(sdb1 i sdb2) oraz jedną partycję rozszerzo- lacji wielkości partycji nie są obecnie opty- stępności raid1, to wszystko jest ok, w prze-
ną (sdb5). W przypadku partycji sdb1 oraz malne (np. za duży lub za mały swap) lub ciwnym wypadku do pliku /etc/modules nale-
sdb5 musimy zmienić typ tworzonych par- kiedy chcemy podzielić większy filesystem ży dopisać moduł raid1 i ręcznie załadować
tycji z Linux/83 oraz Linux swap/82 na Li- na kilka mniejszych (np. rozdzielenie /var moduł poleceniem sudo modprobe raid1.
nux raid autodetect/FD. Możemy to zro- lub /usr od /) lub połączyć rozdzielone wcze-
bić np. za pomocą poniższego polecenia (Li- śniej filesystemy w większą całość. Tworzenie macierzy raid1
sting 4) albo całkowicie ręcznie w przypad- Aby jak najbardziej uprościć sobie konfigu-
ku osób chcących mieć pełnię władzy nad ca- Instalacja oprogramowania rację proponuję stworzenie macierzy raid o
łym procesem. UWAGA!: partycjonowanie mdadm i modułów kernela numerach urządzeń odpowiadających obec-
dysków jest bardzo niebezpieczną czynno- Aby móc skonfigurować w Linuksie (Ubun- nym partycjom. Oczywiście nic nie stoi na
ścią i jeśli jest wykonywana nieostrożnie (po- tu) RAIDa powinniśmy zaopatrzyć się w przeszkodzie aby numeracja nowych urzą-
myłki w nazwach dysków) może doprowa- program mdadm. W większości dystrybu- dzeń była dowolna, np. sekwencyjna liczo-
dzić do utraty danych! Na zakończenie tego cji (w tym i Ubuntu) jest on dostępny w re- na od 0. Będziemy tworzyli więc macierze –
kroku powinniśmy zweryfikować nasze dzie- pozytoriach i bez problemu można go doin- /dev/md1 – dla filesystemu głównego / oraz
ło poleceniem sudo sfdisk -l. (Listing 5). stalować za pomocą przykładowego polece- /dev/md5 – dla obszaru wymiany (swap).
Poszczególne wartości początku, końca oraz nia (o ile nie jest już zainstalowany) – sudo Niestety nie jesteśmy w stanie wykorzystać
wielkości każdej z nowych partycji powin- apt-get install mdadm (Listing 6). Two- dotychczasowych urządzeń, z których ko-

Listing 3. Informacja o obszarze wymiany

radekk@raidtest:~$ swapon -s
Filename Type Size Used Priority
/dev/sda5 partition 240932 208 -1

Listing 4. Partycjonowanie drugiego dysku


radekk@raidtest:~$ sudo -s
radekk@raidtest:~# sfdisk -d /dev/sda|sed 's/Id=82/Id=fd/g'|sed 's/Id=83/Id=fd/g'| sfdisk /dev/sdb

Listing 5. Weryfikacja nowych partycji


radekk@raidtest:~$ sudo sfdisk -l /dev/sdb
(...)
Device Boot Start End #cyls #blocks Id System
/dev/sdb1 * 0+ 491 492- 3951958+ fd Linux raid autodetect
/dev/sdb2 492 521 30 240975 5 Extended
/dev/sdb3 0 - 0 0 0 Empty
/dev/sdb4 0 - 0 0 0 Empty
/dev/sdb5 492+ 521 30- 240943+ fd Linux raid autodetect

Listing 6. Instalacja pakietu mdadm


radekk@raidtest:~$ sudo apt-get install mdadm
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
Odczyt informacji o stanie... Gotowe
Zostaną zainstalowane następujące NOWE pakiety:
mdadm
0 aktualizowanych, 1 nowo instalowanych, 0 usuwanych i 0 nieaktualizowanych.
Konieczne pobranie 225kB archiwów.
Po tej operacji zostanie dodatkowo użyte 639kB miejsca na dysku.
(...)
Generating array device nodes... done.
Generating mdadm.conf... done.
Removing any system startup links for /etc/init.d/mdadm-raid ...
update-initramfs: deferring update (trigger activated)
* Starting MD monitoring service mdadm --monitor
[ OK ]
Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-2.6.24-19-generic

www.sdjournal.org 27
Programowanie w Linuksie

rzysta nasz system, jako części tworzonej oraz składowej oznaczonej jako missing. W tej operacji weryfikujemy stan naszych ma-
macierzy raid. Z tego powodu musimy sto- dalszej części składowa missing zostanie za- cierzy za pomocą polecenia – cat /proc/
sować pewne obejście które finalnie wydłu- stąpiona partycjami pierwszego dysku. Two- mdstat (Listing 9). Nasze macierze powin-
ży nam czas potrzebny na pełne zbudowa- rzymy macierz za pomocą polecenia – sudo ny mieć status active i, zgodnie z wcześniej-
nie raid1 oraz trochę skomplikuje pewne mdadm --create /dev/md1 --level=1 -- szymi założeniami, informować nas o braku
kroki. Tak więc nasza macierz będzie skła- raid-disks=2 missing /dev/sdb1 i analo- jednego z dysków następującym zapisem: [_
dać się po części z partycji drugiego dysku gicznie dla kolejnych partycji (Listing 8). Po U]. Gdzie znak _ oznacza brak zdefiniowa-

Listing 7. Weryfikacja dostępności modułu raid1

radekk@raidtest:~$ cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]


unused devices: <none>

Listing 8. Tworzenie macierzy raid1


radekk@raidtest:~$ sudo mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm: array /dev/md1 started.

radekk@raidtest:~$ sudo mdadm --create /dev/md5 --level=1 --raid-disks=2 missing /dev/sdb5


mdadm: array /dev/md5 started.

Listing 9. Weryfikacja statusu utworzonej macierzy raid1


radekk@raidtest:~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md5 : active raid1 sdb5[1]


240832 blocks [2/1] [_U]
md1 : active raid1 sdb1[1]
3951872 blocks [2/1] [_U]
unused devices: <none>

Listing 10. Aktualizacja konfiguracji


radekk@raidtest:~$ sudo -s
radekk@raidtest:~# mdadm --examine –scan >> /etc/mdadm/mdadm.conf

Listing 11. Modyfikacja zawartości pliku konfiguracyjnego /etc/fstab


# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# /dev/sda1
#UUID=5737e525-abcb-4f56-a833-117ef7e963a0 / ext3 relatime,errors=remount-ro 0 1
/dev/md1 / ext3 relatime,errors=remount-ro 0 1
# /dev/sda5
#UUID=67b80de0-2466-49ba-b33c-2367a73c017d none swap sw 0 0
/dev/md5 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0

Listing 12. Modyfikacja zawartości pliku konfiguracyjnego /boot/grub/menu.lst


(...)
title Ubuntu 8.04.1, kernel 2.6.24-19-generic RAID1 HD0
root (hd0,0)

kernel /boot/vmlinuz-2.6.24-19-generic root=/dev/md1 ro quiet splash


initrd /boot/initrd.img-2.6.24-19-generic
quiet

title Ubuntu 8.04.1, kernel 2.6.24-19-generic RAID1 HD1


root (hd1,0)

kernel /boot/vmlinuz-2.6.24-19-generic root=/dev/md1 ro quiet splash


initrd /boot/initrd.img-2.6.24-19-generic

28 12/2008
Mirrorowanie dysku w Linuksie

nego dysku. Po zdefiniowaniu macierzy ak- go z filesystemów poleceniem – sudo cp -dpRx Aktualizacja programu
tualizujemy informacje konfiguracyjne za / /mnt (Listing 16). Operacja kopiowania da- uruchomieniowego grub
pomocą polecenia – sudo -s a następnie nych zazwyczaj trwa chwilkę, więc w tym cza- Przed zakończeniem kolejnego kroku konfi-
mdadm --examine --scan >> /etc/mdadm/ sie możemy sobie wypić kawę. Kiedy opera- guracyjnego powinniśmy przygotować głów-
mdadm.conf (Listing 10). Lokalizacja pliku cja się zakończy na nowym filesystemie two- ny rekord startowy (MBR) na nowym dysku.
mdadm.conf w innych dystrybucjach może rzymy dodatkowe, wymagane przez system Realizujemy to za pomocą następujących po-
być trochę inna. katalogi, poleceniem – sudo mkdir /mnt/proc leceń – sudo grub i w ramach grub'a: root
/mnt/sys /mnt/dev. (hd1,0) i setup (hd1) (Listing 18). Po tej
Dostosowywanie
systemu do obsługi raid1 Listing 13. Przebudowanie obrazu ramdysku
Zanim rozpoczniemy przenoszenie nasze-
go systemu na macierz raid musimy go tro- radekk@raidtest:~$ sudo update-initramfs -u
chę dostosować. Na początek edytujemy update-initramfs: Generating /boot/initrd.img-2.6.24-19-generic
plik: /etc/fstab dowolnym edytorem teksto-
wym, np. sudo gedit /etc/fstab. W pliku za- Listing 14. Tworzenie nowego filesystemu na macierzy raid1
mieniamy informację o montowaniu na- radekk@raidtest:~$ sudo mkfs.ext3 -L root -m 1 /dev/md1
szych filesystemów oraz obszaru wymiany mke2fs 1.40.8 (13-Mar-2008)
na nowe urządzenia /dev/md1 i /dev/md5 (Li-
sting 11). W przypadku systemu Ubuntu li- Etykieta systemu plików=root
nie odpowiadające filesystemom oraz obsza- Typ OS: Linux
rowi wymiany zazwyczaj oznaczone są iden-
tyfikatorami UUID zamiast przykładowych Rozmiar bloku=4096 (log=2)
/dev/sda1 i /dev/sda5. Wartości UUID dopie- Rozmiar fragmentu=4096 (log=2)
ro na etapie uruchamiania systemu zamie-
niane są przez skrypty startujące na odpo- (...)
wiadające im urządzenia dyskowe. Plik za-
pisujemy i zabieramy się za aktualizację pro- Zapis superbloków i podsumowania systemu plików: wykonano
gramu uruchomieniowego grub. W tym ce-
lu edytujemy plik: /boot/grub/menu.lst do- Listing 15. Tworzenie nowego obszaru wymiany (swap) na macierzy raid1
wolnym edytorem tekstowym, np. sudo ge- radekk@raidtest:~$ sudo mkswap /dev/md5
dit /boot/grub/menu.lst i dodajemy nowe wpi- Setting up swapspace version 1, size = 246607 kB
sy umożliwiające startowanie naszego syste-
mu z macierzy raid1 (Listing 12). WAŻNE: Listing 16. Kopiowanie danych na macierz raid1
należy pozostawić i nie modyfikować istnie- radekk@raidtest:~$ sudo mount /dev/md1 /mnt
jących wpisów, które umożliwią nam powrót radekk@raidtest:~$ sudo cp -dpRx / /mnt
do dotychczasowego systemu jeśli w trakcie
prac konfiguracyjnych popełniliśmy gdzieś Listing 17. Tworzenie wymaganych katalogów na macierzy raid1
błąd. Plik zapisujemy. Uruchamiamy aktu- radekk@raidtest:~$ sudo mkdir /mnt/proc /mnt/sys /mnt/dev
alizację zawartości ram-dysku poleceniem:
sudo update-initramfs -u; w innych dys- Listing 18. Konfiguracja i aktualizacja rekordu startowego dysków składowych macierzy raid1
trybucjach może być to polecenie update- radekk@raidtest:~$ sudo grub
initrd (Listing 13). Probing devices to guess BIOS drives. This may take a long time.

Tworzenie nowych filesystemów Unknown partition table signature


i przenoszenie danych Unknown partition table signature
Jak mamy już uruchomione macierze raid
(jeszcze nie pełne) i przygotowany system to [ Minimal BASH-like line editing is supported. For
nadszedł czas na przeniesienie go do nowej the first word, TAB lists possible command
lokalizacji. Na początek należy stworzyć wy- completions. Anywhere else TAB lists the possible
magane filesystemy oraz obszary wymiany. completions of a device/filename. ]
W tym miejscu bardziej zaawansowane osoby
mogą stosownie do swoich wymagań dobrać grub> root (hd1,0)
parametry tworzonych filesystemów, w szcze- root (hd1,0)
gólności wielkość bloku filesystemu, wielkość grub> setup (hd1)
tablicy i-węzłów, itp. Pamiętać należy aby z setup (hd1)
rozwagą stosować możliwe opcje. Wymaga- Checking if "/boot/grub/stage1" exists... yes
ny filesystem tworzymy za pomocą polecenia Checking if "/boot/grub/stage2" exists... yes
– sudo mkfs.ext3 /dev/md1 (Listing 14). Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Natomiast obszar wymiany za pomoca pole- Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 16 sectors are embedded.
cenia – sudo mkswap /dev/md5 (Listing 15). succeeded
Następnie montujemy filesystem(y) w jakiejś Running "install /boot/grub/stage1 (hd1) (hd1)1+16 p (hd1,0)/boot/grub/stage2 /boot/
nieużywanej lokalizacji, np. /mnt (/mnt/root, / grub/menu.lst"... succeeded
mnt/boot, itp.) za pomocą poleceń – sudo mo- Done.
unt /dev/md1 /mnt i przekopiować dane każde-

www.sdjournal.org 29
Programowanie w Linuksie

Listing 19. Uruchomienie menu programu uruchomieniowego grub


GRUB loading, please wait...
Press `ESC' to enter the menu... 3

Listing 20. Weryfikacja konfiguracji systemu z macierzą raid1


radekk@raidtest:~$ df -k
System plików bl. 1K B użyte dostępne %uż. zamont. na

/dev/md1 3920684 3010660 870508 78% /

(...)
radekk@raidtest:~$ swapon -s
Filename Type Size Used Priority
/dev/md5 partition 240824 0 -1

Listing 21. Repartycjonowanie pierwszego dysku pod macierz raid1


radekk@raidtest:~$ sudo -s
radekk@raidtest:~# sfdisk -d /dev/sdb | sfdisk /dev/sdb

Disk /dev/sda: 522 cylinders, 255 heads, 63 sectors/track


Old situation:

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

Device Boot Start End #cyls #blocks Id System


/dev/sda1 * 0+ 491 492- 3951958+ 83 Linux
/dev/sda2 492 521 30 240975 5 Extended
/dev/sda3 0 - 0 0 0 Empty
/dev/sda4 0 - 0 0 0 Empty
/dev/sda5 492+ 521 30- 240943+ 82 Linux swap / Solaris
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot Start End #sectors Id System


/dev/sda1 * 63 7903979 7903917 fd Linux raid autodetect
/dev/sda2 7903980 8385929 481950 5 Extended
/dev/sda3 0 - 0 0 Empty
/dev/sda4 0 - 0 0 Empty
/dev/sda5 7904043 8385929 481887 fd Linux raid autodetect
Successfully wrote the new partition table

Listing 22. Finalne złożenie macierzy raid1 – remirrorowanie


radekk@raidtest:~$ sudo mdadm --add /dev/md5 /dev/sda5
mdadm: added /dev/sda5

radekk@raidtest:~$ cat /proc/mdstat


Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md5 : active raid1 sda5[2] sdb5[1]
240832 blocks [2/1] [_U]
[=========>...........] recovery = 45.3% (110400/240832) finish=0.0min speed=22080K/sec

md1 : active raid1 sdb1[1]


3951872 blocks [2/1] [_U]

unused devices: <none>

Listing 23. Weryfikacja numerów uuid urządzeń raid1


radekk@raidtest:~$ ls -l /dev/disk/by-uuid/
razem 0

lrwxrwxrwx 1 root root 9 2008-09-03 18:33 968ac04c-d1bb-448a-bab4-ff5ca00d3d82 -> ../../md1


lrwxrwxrwx 1 root root 9 2008-09-03 18:33 bf27dcfa-12d9-47a2-9985-b4581457d835 -> ../../md5

30 12/2008
Mirrorowanie dysku w Linuksie

operacji gotowi jesteśmy do wykonania re- prawda? Jeśli wszystko jest w porządku przy- rozwiązanie. W tym momencie moglibyśmy
startu systemu z nowo zbudowanej macie- stępujemy do faktycznego mirrorowania na- zakończyć nasze działania gdyby nie opcjonal-
rzy raid1. Jako że w kroku 5 przygotowa- szych zasobów w kroku następnym. ny punkt programu, czyli poprawienie wpisów
liśmy nowe opcje do uruchamiania syste- w /etc/fstab do odwołań UUID. Na początek
mu z macierzy raid ale nie modyfikowali- Dołączenie pierwszego dysku sprawdzamy mapowanie UUID na urządzenia
śmy domyślnie wybieranej opcji to musi- do macierzy - mirrorowanie za pomocą polecenia: ls -l /dev/disk/by-uuid (Li-
my pamiętać o wybraniu nowej opcji star- Przed dołączeniem partycji pierwszego dys- sting 23). Następnie edytujemy plik /etc/fstab
tu systemu z menu grub'a. Aby tego doko- ku do naszej macierzy należy je przygoto- i ponownie zamieniamy wpisy z /dev/md1 czy
nać to podczas uruchamiania komputera wać w sposób analogiczny jak to robiliśmy /dev/md5 na odpowiednie wartości UUID wy-
w trakcie wyświetlania komunikatu: Press dla drugiego (obecnie aktywnego) dysku. świetlone w poleceniu ls (Listing 24). Na za-
`ESC to enter the menu... (Listing 19) musi- Zadanie realizujemy za pomocą dowolnego kończenie aktualizujemy initramfs poleceniem:
my nacisnąć klawisz ESC i z wyświetlanych programu do partycjonowania, np. takim sudo update-initramfs -u (lub analogicz-
w ramce opcji wybrać wcześniej zdefiniowa- poleceniem: sudo -s potem sfdisk -d /dev/sdb nym - Listing 25). I dla weryfikacji całości mo-
ną: Ubuntu 8.04.1, kernel 2.6.24-19-gene- | sfdisk /dev/sda (Listing 21). Po tej opera- żemy jeszcze raz zrestartować nasz komputer.
ric RAID1 HD1. cji oba dyski powinny mieć takie same par-
tycje typu Linux raid autodetect/FD. Jeśli we Podsumowanie
Ponowne uruchomienie wcześniejszych krokach założyliśmy porząd- Mirrorowanie dysku nie jest operacją łatwą i
systemu i weryfikacja kowanie naszej konfiguracji lub chcieliby- wymaga minimalnej wiedzy dotyczącej par-
Jeśli po ponownym uruchomieniu systemu śmy dokonać mirrorowania nowego dysku tycjonowania, konfiguracji systemu czy sa-
nie pojawiły się błędy, w szczególności ko- o większej pojemności niż dotychczasowy mej technologii RAID. Jakkolwiek dzięki suk-
munikat o niemożliwości znalezienia filesys- dysk, to będziemy musieli ręcznie pousta- cesywnie spadającym cenom samych dysków
temu głównego (ang. root filesystem) zakoń- wiać wszystkie wymagane partycje. Następ- twardych zabezpieczenie się przed utratą da-
czonego klasycznym: kernel panic, to może- nie za pomocą polecenia: sudo mdadm –add nych jest coraz dostępniejsze. Niestety jak do
my przystąpić do dalszych działań. W przy- /dev/md5 /dev/sda5 składamy w całość ma- tej pory dystrybucje Linuksa doczekały się co
padku kiedy jednak błędy takie się pojawią cierzy raid partycje na obu dyskach. Propo- najwyżej możliwości instalacji systemu na mir-
to ponownie restartujemy komputer i tym nuję zacząć od partycji swap, ale kolejność rorowaniej parze dysków (Ubuntu jak do tej po-
razem wybieramy domyślną opcję urucho- jest dowolna. Po dodaniu brakującej partycji ry jeszcze na to czeka). Wciąż brakuje mechani-
mienia systemu. W tym momencie system do poszczególnych urządzeń md za pomocą zmów prostego i łatwego włączenia mirroru w
powinien uruchomić się bez macierzy raid polecenia: cat /proc/mdstat możemy zweryfi- taki sposób aby z procesem tym poradził sobie
z dotychczasowego dysku. Po uruchomieniu kować proces remirrorowania naszej macie- każdy użytkownik komputera. Na szczęście sys-
systemu wracamy do kroku 5 i weryfikuje- rzy (Listing 22). tem Linuks ciągle się rozwija i miejmy nadzieję
my modyfikowane przez nas pliki (w szcze- niedługo zobaczyć stosowne mechanizmy.
gólności na tym etapie popularne są literów- Ostatnie porządki
ki). Po zalogowaniu się do systemu z macie- Po zakończeniu mirrorowania dysków pozosta- RADOSŁAW KORZENIEWSKI
rzy raid za pomocą poleceń: df -k oraz swa- je nam jeszcze jeden obowiązkowy i jeden nie- Autor od kilkunastu lat zajmuje się wysokodostęp-
pon -s (Listing 20) weryfikujemy czy nasze obowiązkowy punkt programu. Aby zapewnić ną infrastrukturą z systemami Linuks oraz Uniks z
dotychczasowe działania są zgodne z ocze- automatyczne uruchamianie naszego systemu czego od ponad dziesięciu lat w pełni profesjonal-
kiwaniami. Jeśli tak to w miejscu wcześniej- z nową macierzą raid należy w pliku: /boot/grub/ nie pracując na stanowiskach administratora syste-
szych /dev/sda1 i /dev/sda5 powinniśmy wi- menu.lst odpowiednio ustawić wartość parame- mów, specjalisty systemów oraz eksperta systemów
dzieć /dev/md1 oraz /dev/md5. Dla przyzwo- tru: default albo odpowiednio poprzestawiać informacyjnych w firmie PTK Centertel. Obecnie od-
itości proponuję jeszcze sprawdzić czy dane dopisane opcje uruchamiania tak aby domyśl- powiedzialny jest za rozwój, projektowanie i wdra-
w katalogach domowych naszych użytkow- ną opcją było uruchamianie z naszej macierzy. żanie systemów krytycznych w Grupie Kapitałowej
ników gdzieś się nie zapodziały – oczywiście Oczywiście możemy chcieć sami za każdym ra- TP w obszarze systemów Linuks i Uniks. Z autorem
przed przystąpieniem do konfiguracji dane zem ręcznie wybierać odpowiednią opcję uru- można skontaktować się poprzez email/jabber: ra-
zostały zapisane na kopię bezpieczeństwa, chamiania ale na dłuższa metę nie jest to dobre doslaw@korzeniewski.net

Listing 24. Modyfikacja zawartości pliku konfiguracyjnego /etc/fstab

# /etc/fstab: static file system information.


#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# /dev/sda1
UUID=968ac04c-d1bb-448a-bab4-ff5ca00d3d82 / ext3 relatime,errors=remount-ro 0 1
#/dev/md1 / ext3 relatime,errors=remount-ro 0 1
# /dev/sda5
UUID=bf27dcfa-12d9-47a2-9985-b4581457d835 none swap sw 0 0
#/dev/md5 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0

Listing 25. Przebudowanie obrazu ramdysku


radekk@raidtest:~$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-2.6.24-19-generic

www.sdjournal.org 31
Rozrywka w Linuksie

Duke Nukem
Manhattan Project

Anarchy Online i Red Faction to gry niewątpliwie złożone. W życiu gracza


są jednak takie chwile, w których zamieniłby on każdy skomplikowany
tytuł na coś, co nie wymaga zbyt dużo myślenia, ale daje dużo rozrywki.
Taki jest właśnie Duke Nukem: Manhattan Project.

wych graczy używających joypada. Być może


Dowiesz się: Powinieneś wiedzieć: w przyszłych wersjach jądra i Wine wsparcie
• Jak zapewnić sobie kilka godzin dobrej roz- • Jeżeli grałeś w poprzednie wersje to dobrze, chociaż większości urządzeń zostanie wpro-
grywki. jeżeli nie to wszystko przed Tobą. wadzone. Miejmy nadzieję, bo gra z wykorzy-
staniem tej technologii byłaby z całą pewno-
ścią przyjemniejsza.
Sprawy organizacyjne
Manhattan Project jest grą komercyjną. Nie- Przedstawienie świata
Poziom trudności stety, w chwili obecnej, jedynym legalnym W całym Manhattan Project wątek fabular-
sposobem nabycia jej są aukcje – gry nie zna- ny jest mocno ograniczony. Można zaryzy-
lazłem w żadnym polskim sklepie interneto- kować stwierdzenie, że w założeniu był on
wym. jedynie pretekstem do zabijania hordy prze-

G
ra ta, wydana w 2002 roku, jest Jako, że ma ona już przeszło 6 lat, ce- ciwników, czymś, czym gracz nie będzie się
dziełem firmy Sunstorm Interacti- ny nie są wygórowane i oscylują maksymal- przejmował w ogóle. I tak jest w rzeczywisto-
ve. Na rynku pojawiła się w momen- nie w granicach 10-20zł. Zakupić możemy ści. Podczas gry zupełnie nie obchodził mnie
cie, w którym każdy zapalony gracz oczekiwał wersje anglo- oraz polskojęzyczną, w zależ- los ratowanego świata, czy historia samego
na nieukończonego do tej pory Duke Nukem ności od sprzedawcy. Wymagania sprzęto- Duke'a. Tu liczy się tylko sprawność palców
Forever. we są niskie. Pod Windows gra chodzi płyn- i szybki refleks.
Weszła na rynek bez większego echa, i do nie już na komputerze z procesorem Pen- Świat gry przedstawiony jest z perspektywy
dziś niewielu graczy o niej pamięta. Gdyby tium III 500MHz, 64MB pamięci RAM oraz trzeciej osoby. Kamera nie jest jednak umiesz-
spojrzeć na to z technicznego punktu widze- kartą graficzną z akceleratorem 3D. Na sys- czona za bohaterem, ale obok niego w sposób,
nia, to nie ma się czemu dziwić – Duke Nu- temie spod znaku pingwina wymagania są który możemy zaobserwować na Rysunku 1,
kem: Manhattan Project nie wniósł do świa- wyższe. Najsłabszy komputer z Linuksem, 2 lub 3. Ruchy Duke'a są ograniczone głównie
ta gier niczego innowacyjnego. Posiadał za to na którym miałem okazję przetestować grę, do poruszania się w lewo bądź w prawo; rzadko
coś, czego brakuje wielu tytułom – świetną był wyposażony w procesor Athlon 1GHZ, będziemy mogli wejść wgłąb ekranu lub w dru-
grywalność. 384MB pamięci RAM oraz kartę graficzną gą stronę. Takie czynności możemy wykony-
GeForce 2 MX. Manhattan Project chodził wać jedynie w miejscach ściśle zaplanowanych
Na początku była fabuła na nim znakomicie w najwyższej rozdziel- przez twórców. Podobieństwo do klasycznego
Manhattan Project przenosi nas do współ- czości – 1024x768. Mario, Super Tuksa, czy Jazz Jackrabbit (swoją
czesnego Nowego Jorku, do tytułowego drogą znakomita platformówka) jest tu jak naj-
Manhattanu. To właśnie od tej dzielnicy ta- Cedega czy Wine? bardziej wskazane. Manhattan Project jest od
jemniczy Mech Morphix zaczyna podbijanie Zdecydowanie Wine. Pomimo, że na stronie tych gier bardziej dynamiczny, ma o wiele lep-
świata. Jego największą bronią jest toksyczna Cedegi jest napisane, iż gra działa bezproble- szą, trójwymiarową grafikę, dźwięk oraz znako-
substancja, która przemienia wszystkie orga- mowo, to podczas testów nie udało mi się jej mitego bohatera, którego zadaniem (oprócz ra-
nizmy żywe w krwiożercze bestie, których w pełni uruchomić pod tą platformą. Testowa- towania świata) jest uwalnianie pięknych ko-
głównym i właściwie jedynym celem jest za- ne wersje silników to – 5.2.7, 5.2.9, 6.0.2 oraz biet z rąk obcych. Wszystkie te elementy two-
bicie naszego bohatera. 6.0.5. Z kolei pod Wine (wersji 1.0 oraz 1.1.5) rzą niepowtarzalny, błogi klimat, który sprawia,
Wynik tej walki wcale nie jest przesądzony instalacja, jak i samo uruchamianie przebie- że każdy, kto lubi platformówki, będzie mógł z
– postać, w którą się wcielamy, to Duke Nu- ga bezproblemowo. Płynność gry nie pozosta- przyjemnością i bez zaangażowania zatopić się
kem. A to wiele wyjaśnia. Ten uzbrojony po wiała nic do życzenia, nie występowały żadne w ponure dzielnice Nowego Jorku.
zęby, jasnowłosy mężczyzna, który zapew- przekłamania w wyświetlanej grafice. Słowem
ne cały wolny czas spędzał na siłowni, nie za- – wszystko perfekcyjnie. No, może poza jedną Rozgrywka
mierza się poddawać. Czy mu się uda? To za- rzeczą – niedziałającym Force Feedbackiem, Gra jest bardzo dynamiczna. Już kilkanaście
leży od nas. ale to zmora niemalże wszystkich linukso- sekund po jej rozpoczęciu natkniemy się na

32 12/2008
Duke Nukem

pierwszych przeciwników. Na początku wal- bomby, uwolnienie pięknej dziewczyny, zna- ty działania broni, potwory czy wygląd same-
czyć będziemy ze zmutowanymi, prostymi lezienie klucza do drzwi i opuszczenie loka- go Duke'a cieszą oko. Na monotonność loka-
do pokonania świniami, jednak wraz z rosną- cji. Proste jak konstrukcja cepa. Wyjątek sta- cji także nie powinniśmy narzekać – miejsca,
cym postępem w grze, przeciwnicy będą co- nowią ostatnie poziomy poszczególnych roz- które przyjdzie nam odwiedzić są zróżnico-
raz trudniejsi do pokonania. Łącznie natknie- działów, w których to czeka na nas pokonanie wane. Zwiedzimy między innymi podziem-
my się na 25 typów wrogo nastawionych po- bossa. Ponadto, w każdej lokacji czeka na nas ne, zniszczone stacje metra, dachy wieżow-
tworów. Na ich zróżnicowanie nie powin- znalezienie 10 znaczków Nuke. Dzięki nim ców, chińską dzielnicę, kosmiczne laborato-
niśmy narzekać – część z nich strzela, inni bohater ma między innymi więcej życia, mo- rium Morphixa z obniżoną grawitacją, a na-
walczą wręcz, jeszcze inni stosują elementy że nieść więcej amunicji oraz zadawać więk- wet nocny klub. I choć tekstury nie są zbyt
sztuk walki, czy plują toksycznym kwasem. sze obrażenia. Na odnalezienie czekają tak- szczegółowe, a postacie w największym przy-
Niekiedy napotkamy się na zwykłe zwierzę- że tzn. secret area, czyli bonusowe, trudne bliżeniu kanciaste, to grafika sprawia wraże-
ta, czy owady. Zwykle po jakimś czasie wcho- do odkrycia miejsca, w których zwykle jest nie dopracowanej. Szczególnie jak na tytuł,
dzą one do kałuży zielonkawej substancji, po sporo amunicji oraz apteczek. Gracze lubiący którego akcja dzieje się generalnie w środo-
czym zmieniają się w dobrze znane nam po- odnajdywanie sekretnych lokacji oraz przed- wisku dwuwymiarowym. Tak, poruszać bę-
twory. Do walki z nimi Duke ma do dyspo- miotów podczas gry z pewnością nie będą za- dziemy się w dwóch wymiarach, jednak sa-
zycji siedem, luźno wzorowanych na uzbro- wiedzeni. ma grafika jest jak najbardziej trójwymiaro-
jeniu z Duke Nukem 3D, typów broni – pi- Niestety, w Manhattan Project zabrakło try- wa. Kamera dynamicznie zmienia swe poło-
stolet, shotgun, karabin maszynowy, Glopp bu multiplayer, który mógłby pozwolić grze żenie, dzięki czemu Manhattan Project pre-
Gun, wyrzutnia rakiet, granaty oraz miotacz dłużej przetrwać w naszej pamięci. Szczególnie zentuje się bardziej okazale, jednak nie zmie-
plazmy. Najciekawszą z nich jest Glopp Gun ciekawie grałoby się w trybie cooperative, gdzie nia to faktu, że grając mamy wrażenie, cho-
posiadająca działanie odwrotne do działania wspólnie ze znajomym przy jednym kompu- dzenia po wyznaczonym przez twórców, nie-
kałuż kwasu; zamienia potwory w bezbron- terze bądź przez Internet przemierzalibyśmy widzialnym, dwuwymiarowym sznurku.
ne, nieatakujące nas zwierzęta. Te z kolei mo- świat Nowego Jorku. Muzyka i dźwięki ani nie grzeją, ani nie
żemy potraktować butem, który jest ostatnią, ziębią. W tle słyszymy dynamiczne, gitaro-
ósmą możliwością ataku. I choć uzbrojenie Grafika & udźwiękowienie we, zagrzewające do walki utwory. Do ich
zapowiada się zachęcająco, bronią najczęściej Grafika w grze prezentuje się dobrze. Cho- wykonania nie można się przyczepić, ale żad-
używaną jest shotgun. Nie zużywa on wie- ciaż odstaje od nowych produkcji, jak na plat- nych rewelacji tutaj nie znajdziemy – po pro-
le amunicji, a zwykle wystarczą dwa, może formówkę jest wystarczająca. Wybuchy, efek- stu kawał dobrej roboty. Dźwięki wydawane
trzy strzały, by rozprawić się z większą ilością
przeciwników. Aby ukończyć grę, musimy
przejść przez 9 rozdziałów, przy czym każdy
rozdział dzieli się na cztery poziomy. Głów-
nym celem każdego poziomu jest rozbrojenie

Rysunek 1. Glopp Gun podczas działania

Tipsy
A tutaj coś dla tych, którym gra sprawia za
dużo trudności – garść tipsów. Wpisujemy
je po naciśnięciu tyldy: [~].

• toggle g_p_god – nieśmiertelność Rysunek 2. A tu miotacz plazmy


• give all – wszystkie przedmioty
• give ammo – amunicja
• give jetpack – jetpack Duke Nukem – historia
• give forcefield – forcefield Wśród dziesiątki najpopularniejszych komputerowych bohaterów znalazłoby się z pewnością
• give keys – wszystkie klucze miejsce dla Duke'a. Jest on legendą, głównie za sprawą wydanej w 1996 roku trójwymiarowej
• give nuke – 10 nuke strzelaniny Duke Nukem 3D oraz Duke Nukem Forever – gry, która według oficjalnych informacji
• kill – samobójstwo jest w produkcji już dziesiąty rok. Nie każdy wie, że historia Księcia (ang. Duke} sięga roku 1991.
• camera camera – pozwala sterować ka- Wtedy to została wydana gra Duke Nukem: Shrapnel City, platformówka z Dukem w roli głównej.
merą Na PC ukazała się jeszcze w 1993 roku kontynuacja nazwana po prostu Duke Nukem 2. Do roku
• camera player – domyślne ustawienie 2005 ukazało się aż 11 gier opowiadających o przygodach jasnowłosego superbohatera. Nieste-
kamery ty, wszystkie na platformy inne, niż komputer.

www.sdjournal.org 33
Rozrywka w Linuksie

przez otoczenie również trzymają klasę. Są Minusy, minusy... nowi większego wyzwania, a fakt, że Duke
takie, jakie być powinny. Bardzo miłym do- Największą bolączką Manhattan Project jest w rękach bardziej wprawnej osoby staje się
datkiem jest za to głos głównego bohatera. wspomniany wcześniej brak trybu multi- prawie nie do zabicia (nawet podczas walki
Usłyszeć go możemy zwykle podczas zabija- player oraz długość gry. Przejście całej wraz z bossami) może powodować szybkie znuże-
nia przeciwników oraz przy wejściach do no- z pokonaniem ostatecznego bossa zajęło nie grą. Grywalności nie dodaje także linio-
wych lokacji, gdzie Duke komentuje to, co mi niecałe 6 godzin. Aż chciałoby się grać. wość rozgrywki. Cały czas poruszamy się w
się w danym momencie dzieje. Cięte teksty Zmiana poziomu trudności na wyższy i miejscach ściśle zaplanowanych przez twór-
w stylu: Rest in pieces, Half man, half animal. przechodzenie gry od nowa teoretycznie jest ców. Nie istnieją także różne drogi prowa-
All dead, czy My gun is bigger then yours zna- połowicznym rozwiązaniem do czasu, gdy dzące do celu, szczególnie w późniejszych,
komicie wpasowują się w klimat gry. Jon St. zauważymy, że poziom Hard wcale nie jest zamkniętych pomieszczeniach (w niektó-
John odpowiedzialny za nie, znów pokazał, taki trudny. Bardziej doświadczonym gra- rych otwartych lokacjach istnieje wątpliwa
że wśród komputerowych mięśniaków Duke czom polecam od razu ten poziom trudno- możliwość przejścia po ziemi bądź przeska-
Nukem rządzi. ści. Na normalnym oraz łatwym gra nie sta- kiwania po umieszczonych niewiele wyżej
balkonach). Zapewne ogranicza to w jakiś
sposób możliwość zgubienia się w grze, jed-
nak na tym polu również nie jest różowo; kil-
ka razy zdarzyło mi się, że ominąłem niepo-
zorną drabinę bądź nie zauważyłem drzwi i
musiałem wracać do opustoszałych miejsc
w ich poszukiwaniu. Takie momenty były
bardzo irytujące, bo miałem ochotę iść dalej,
zabijać zmutowane potwory, a nie błądzić w
poszukiwaniu niezbędnego do przejścia da-
lej Blue Keya.

Podsumowanie
Tak, zabijanie zmutowanych potworów to nie-
wątpliwie rzecz, która w całej grze jest najlep-
sza. Pozostaje pytanie, czy warto fatygować
się dla tych kilku godzin rozrywki? Myślę, że
tak. Rozrywka jest niewątpliwie przednia i da-
je graczowi dużo radości. Duke Nukem: Man-
hattan Project jest także niewątpliwie swe-
go rodzaju perełką na rynku gier. Stanowi on
znakomitą odskocznię od złożonych strategii,
gier MMORPG, czy symulacji powracając do
korzeni, do czasów, gdy zadaniem niemalże
Rysunek 3. Wyrzutnia rakiet też daje rade wszystkich gier było zrelaksowanie gracza w
sposób prosty i przyjemny. Czas nieskompli-
kowanych, dwuwymiarowych gier platformo-
wych zdecydowanie minął. Czy Ty także uwa-
żasz, że niesłusznie?

ŁUKASZ OLENDER
Autor zajmuje się Linuksem od 4 lat rozpowszech-
niając go w lokalnych szkołach. Hobby to wszelkie
aspekty związane z Debianem, Linuksem w ogól-
ności oraz gra na klarnecie.
Kontakt z autorem: lukiasz@gmail.com

Rysunek 4. No wychodź! Dalej! Rysunek 5. Gdybyś tylko była mniej kanciasta...

34 12/2008
Rozrywka w Linuksie

Red Faction
Druga odsłona

Red Faction – to właśnie ta gra jest tematem niniejszego artykułu. Czy


pomimo upływu ponad siedmiu lat od daty premiery, jest ona warta
poświęconego jej czasu?

oryginał na różnorodnych aukcjach interneto-


Dowiesz się: wych – w chwili pisania tego tekstu, Red Fac-
• Co gra zawiera; tion jest dostępny do kupienia na jednej z nich
• Gdzie można ją kupić; za 15zł. Doliczając koszty przesyłki wynoszą-
• O wadach i zaletach gry; ce 6,50zł otrzymujemy śmiesznie niską cenę
• O wymaganiach systemowych. wynoszącą 21,50zł.

Kilka spraw technicznych


cąc tutaj. Co więcej – możliwość powrotu Red Faction uruchamiane pod Windows do
na Ziemię w zasadzie nie istnieje od czasu, działania potrzebuje minimum komputera
Poziom trudności gdy swoje działania na szeroką skalę rozpo- z procesorem 400MHZ, kartą graficzną z 8
częła tytułowa Czerwona Frakcja –ugrupo- MB pamięci RAM oraz 64MB zwykłej pa-
wanie rebeliantów walczących z Ultorem, mięci RAM. Wymagania linuksowe, z racji
w skład której wchodzi także Parker. Czer- tego, że jest to gra projektowana pod Win-

O
dpowiedź na to pytanie zależeć bę- wona Frakcja, na której czele stoi tajemnicza dows są nieco wyższe, ale nadal niewygóro-
dzie jedynie od tego, jaki gatunek gier EOS, miała być wyzwoleniem dla górników wane, nawet wśród posiadaczy starych kom-
preferujemy. Jeżeli choć trochę lubi- oraz zapewnić im wzajemne wsparcie w wal- puterów.
my grać w FPS-y, a gra ta jest nam znana jedy- ce z szeregami najemników Ultoru. Tak jed- Red Faction chodzi poprawnie już na pro-
nie ze słyszenia, bez obaw o jakość rozrywki nak się nie stało – tysiące pracowników Ulto- cesorze taktowanym z zegarem 600MHZ,
możemy po nią sięgnąć, Red Faction jest bo- ru zostało uwięzionych w marsjańskich wię- 128MB pamięci RAM oraz na karcie gra-
wiem FPS-em. zieniach, zaś część z nich podczas walk stra- ficznej GeForce mającej na pokładzie 32
Bardzo dobrym FPS-em, na swój sposób od- ciła życie. Jednym z nielicznych, którzy prze- MB RAM. Z kolei by móc w pełni cieszyć się
krywczym i przełomowym, głównie dzięki trwali jest właśnie Parker. Jak nietrudno się grą w wyższej rozdzielczości – optymalnie
technologi Geo-Mod, która pozwala na niszcze- domyśleć, my wcielimy się w niego, by za- 1280x1024, potrzebować będziemy kom-
nie elementów świata gry. Ale od początku. silić szeregi Czerwonej Frakcji, rozwikłać putera z procesorem minimum 1GHZ, 256
zagadkę tajemniczej choroby szerzącej się MB RAM i kartę graficzną minimum GeFor-
Fabuła wśród górników i ostatecznie uwolnić się z ce 2 z 64 MB RAM. W zestawieniu z wyma-
Fabuła gry przenosi nas w odległą przyszłość. Marsa. Ale najpierw musimy zaopatrzyć się ganiami nowszych tytułów nikt nie powi-
Mars został skolonizowany przez ludzkość, a w samą grę. nien mieć wątpliwości, że wymagania Czer-
obecnie znajduje się tam kompleks kopalń wonej Frakcji są naprawdę niewielkie.
megakorporacji Ultor, zajmującej się wydo- Skąd wziąć?
bywaniem cennego minerału zwanego No- Na to pytanie nie ma prostej odpowiedzi. Red Wine Czy Cedega?
achitem. Gra opowiada historię Parkera, Faction nie dostaniemy już w zwykłych skle- Przed tym wyborem staniemy będąc już
młodego i ambitnego górnika, który wyleciał pach, za wyjątkiem sieci różnych supermarke- szczęśliwym posiadaczem gry. Testowałem
na Marsa w poszukiwaniu przygody i chęci tów, gdzie od czasu do czasu pojawia się ona grę na obu platformach i gra chodzi zdecy-
usamodzielnienia się. Wkrótce po przybyciu na półkach kosztując w granicy 20zł. W chwi- dowanie lepiej pod Cedegą. Testowane wer-
okazało się jednak, że nie wszystko jest tak, li premiery gra kosztowała 49zł i w takiej ce- sje Cedegi to 5.29 oraz 6.05. Różnice między
jak obiecywano. Wysokie pensje wcale nie są nie występuje do chwili obecnej w interneto- nimi są niezauważalne, prędkość działania
tak wysokie, a standard życia każdego z gór- wym sklepie firmy LEM – polskiego dystry- gry jest zawsze bardzo dobra. Stabilność nie
ników jest bardzo niski. Spanie w obskur- butora gry. Niestety nie jest już ona dostępna pozostawia nic do życzenia, ogółem mówiąc
nych, śmierdzących barakach, minimalne tam w sprzedaży, występuje jedynie jako pro- – gra chodzi bezbłędnie.
racje żywnościowe a także traktowanie pra- dukt archiwalny. Zamówić możemy ją za to na Natknąć się możemy jedynie na proble-
cowników przez przełożonych zupełnie od- stronie http://www.mediago.pl , gdzie kosztuje my z niepełnym wyświetlaniem intra oraz
biega od tego, czego Parker się spodziewał le- 37zł. Po dużo niższej cenie możemy zakupić reklam producenta w grze, ale są to drob-

36 12/2008
Red Faction

nostki nie wpływające absolutnie na ogólne praktycznie nie ma możliwości wyboru róż- tycznie. Różnią się jedynie posiadaną bro-
wrażenie. Z kolei pod Wine gra działa rów- nych ścieżek. Geo-mod sytuacji nie ratuje nią, wyglądem, rodzajem opancerzenia oraz
nie szybko, ale nie udało mi się sprawić, by – stanowi jedynie ciekawe urozmaicenie i ilością życia.
podczas rozgrywki z głośników wydobył się sposób na łatwiejsze pokonywanie przeciw-
jakikolwiek dźwięk. Powodów takiego sta- ników, ale sensownie wykorzystany może Uzbrojenie
nu rzeczy może być mnóstwo, lecz faktem być tylko w miejscach zaplanowanych przez Zapewne przyznacie, że niczym byłby FPS
jest, że poświęcając kilka cennych godzin na autorów. bez zestawu śmiercionośnych broni. Na tym
rozwiązanie problemu nadal pozostałem w Chciałoby się rzec – drzemie w nim nie- polu Red Faction wypada całkiem nieźle. Do
punkcie wyjścia. Niestety, podobnie wyglą- wykorzystany potencjał. Bolączką jest tak- dyspozycji mamy piętnaście standardowych,
da sprawa u innych graczy. Zadeklarowanym że sztuczna inteligencja przeciwników. Ni- lekko stylizowanych na klimaty science-fic-
użytkownikom Wine pozostaje tylko cze- by chowają się tu i ówdzie, jednak po chwili tion broni. Najczęściej przyjdzie nam wal-
kać i mieć nadzieję, że problem ten zosta- grania widać, że jest to bardzo schematycz- czyć za pomocą strzelby automatycznej, cięż-
nie rozwiązany w przyszłych wersjach tego ne; niekiedy dochodzi nawet do momen- kiego karabinu maszynowego oraz pistole-
nie-emulatora. tów, w których wiemy, jak dokładnie zacho- tu. Jest także snajperka, miotacz płomieni
wa się nasz oponent. I nie jest to tylko cecha oraz miny, granaty, paralizator, a nawet tar-
Witamy na Marsie przypisana jednemu z typów przeciwników. cza – i to nie wszystko. Ogromną satysfakcję
Instalacja Red Faction przebiega bezproble- Wszyscy z nich, no może z wyjątkiem nie- daje używanie dwóch rodzajów wyrzutni ra-
mowo. Po uruchomieniu gry i przejściu tre- których potworów, z którymi także przyj- kiet oraz wspomnianych wcześniej ładun-
ningu lądujemy w marsjańskiej kopalni. Tam dzie nam powalczyć, zachowują się iden- ków wybuchowych – słowem wszystkiego,
będąc świadkiem brutalnego pobicia jed-
nego z górników chwytamy za broń. Od tej
chwili rozpoczyna się trwająca przez kilka
początkowych poziomów nieco monotonna
rozgrywka, która polegać będzie na zabija-
niu szeregów ochroniarzy Ultoru. Urozma-
icenia całej grze dodaje rozsławiony, autor-
ski silnik Geo-Mod, który, jak już wspomnia-
łem, pozwala na modyfikację rzeźby otacza-
jącego nas terenu.
W praktyce największe wrażenie robi on
właśnie w początkowych poziomach, gdy je-
steśmy w kopalniach. Korzystając z ładun-
ków wybuchowych możemy przedostać się
przez niektóre lokacje na skróty omijając
znaczną liczbę przeciwników. Innym razem
służy do odnalezienia dodatkowego ekwi-
punku, a wszystko to jest zrobione tak umie-
jętnie, że korzystanie z dobrodziejstw Geo-
Moda daje sporą satysfakcje i frajdę. Cza-
sem trzeba chwilkę pomyśleć nad tym, w ja-
ki sposób można wykorzystać otoczenie, by
walczyło się łatwiej.
Niszczenie mostów po których przecho-
Rysunek 1. 3... 2... 1.... booom!:)
dzą właśnie wrogowie, przebijanie się przez
beton wokoło pancernych, zablokowanych
drzwi, czy burzenie ogromnych skalnych Red Faction 2
ścian z pomocą specjalistycznego pojazdu to W kwietniu 2003 roku światło dzienne ujrzał sequel Red Faction, nazwany po prostu Red
tutaj codzienność. Po przejściu przez kilka Faction 2. Gra, w przeciwieństwie do poprzednika, okazała się być zupełnym niewypałem.
początkowych etapów zaczniemy wkraczać Wydana najpierw na PlayStation 2, na PC była tylko zwykłą konwersją z konsoli. Co gorsze
– wyczekiwany tryb multiplayer został usunięty i zastąpiony możliwością rozegrania me-
w coraz bardziej odmienne lokacje – biu- czu z botami, a Geo-mod jaki był, taki pozostał. Krokiem naprzód była jedynie ciut ładniej-
ra, laboratoria oraz apartamenty pracowni- sza grafika.
ków Ultoru.
Sama rozgrywka jest zróżnicowana.
Wprawdzie większą część gry spędzimy na
konsekwentnym zabijaniu coraz to silniej- Red Faction: Guerrilla
szych wrogów, jednak znajdują się też mi- Obecnie w produkcji jest trzecia część serii Red Faction, której akcja dziać się będzie 50 lat
po wydarzeniach przedstawionych w pierwszej odsłonie. Z planowanych innowacji wymie-
sje, do których podejść będziemy musie-
niane są:
li w zupełnie inny sposób. Przekradanie się
przez zapełnione ludźmi biura Ultoru, pły- • widok akcji z perspektywy z trzeciej osoby;
wanie łodzią podwodną, przemieszczanie • praktycznie nieograniczona możliwość deformacji środowiska;
się pod ostrzałem snajperów czy też uciecz- • otwarte przestrzenie walk;
• bardziej rozbudowany tryb multiplayer.
ka jeepem to zaledwie czubek góry lodowej
wyzwań, które na nas czekają. Niestety, ca- Gra powinna się ukazać już przed końcem marca 2009.
ła rozgrywka prowadzona jest liniowo; gracz

www.sdjournal.org 37
Rozrywka w Linuksie

czym możemy choć trochę zniszczyć zapa- nia, ale sposób poruszania się którymś z po- co najwyżej 40% gry. No tak, w końcu jakby
dające się sufity, ściany czy podłogę. Jednak jazdów wygląda śmiesznie, szczególnie pod- nie patrzeć jesteśmy w marsjańskich kopal-
królem wśród broni dostępnych w grze jest z czas skręcania. niach. Osobne słowa należy poświęcić opra-
pewnością Rail Driver – miotacz magnetycz- Problemem są także różnorakie przeszko- wie dźwiękowej.
ny. Wystrzela on pociski z ogromną siłą, któ- dy, z którymi interakcja jest dość słaba. Nie raz Odgłosy i efekty dźwiękowe są takie, jakie
re są zdolne przebić ściany. Do Rail Drivera zdarza się, że rozpędzony pojazd zatrzymuje być powinny: naturalne, porządnie wykona-
dołączone jest także luneta, która przy po- się w miejscu z powodu niewielkiego kamie- ne. Słowem – kawał dobrej roboty. Muzyka
mocy podczerwieni potrafi namierzyć prze- nia leżącego na drodze. Nie są to błędy szcze- również trzyma poziom umiejętnie podsy-
ciwnika będącego na przykład za drzwiami. gólnie rażące, aczkolwiek warto o nich wspo- cając emocje podczas grania. Szkoda tylko,
Jak to wygląda w praktyce możemy zobaczyć mnieć. że w większości czasu jest nieobecna; poja-
na Rysunku 2. wia się zwykle jedynie w kluczowych mo-
Grafika i Dźwięk mentach.
Pojazdy Grafika, porównując Red Faction z nowymi
W Red Faction mamy do dyspozycji pięć po- tytułami, prezentuje się słabo. Gdyby cof- Multiplayer
jazdów zmechanizowanych: uniwersalny po- nąć się jednak do roku 2001, dostalibyśmy Oprócz standardowego trybu dla jednego
jazd terenowy (przypominający nieco Jeepa), tytuł z bardzo dobrą oprawą graficzną. Po gracza, producent gry dał nam możliwość
myśliwiec, transporter opancerzony, kom- prostu co jak co, ale grafika w grach kompu- pojedynkowania się z innymi graczami w
bajn górniczy oraz okręt podwodny. Zwykle terowych traci swą jakość w zasadzie z dnia trybie multiplayer. Biorąc pod uwagę tech-
ich użycie będzie konieczne do przejścia mi- na dzień. nologię Geo-mod, powinniśmy dostać coś re-
sji, lecz czasem będzie jedynie opcjonalne. Jednak – wracając z powrotem do końców- wolucyjnego.
Same pojazdy występują w grze niezbyt czę- ki roku 2008 – w zestawieniu z popularnymi I niewiele brakuje, by tak właśnie było! Co
sto, a tereny są na tyle ograniczone, że korzy- grami FPS dostępnymi na licencji Open So- prawda dostajemy tylko trzy najbardziej zna-
stanie z nich przypomina najczęściej przeje- urce, Red Faction wciąż trzyma klasę. Mno- ne tryby – Deadmatch, Team Deadmatch i
chanie jednym z tuneli z punktu A do punk- gość zróżnicowanych wyglądem przeciwni- Capture the flag, ale możliwość niszczenia
tu B. Mimo to są one bardzo miłym dodat- ków, dopracowane (większość, ale nieste- ścian, mostów i robienia dziur w podłodze
kiem, szczególnie myśliwiec oraz okręt pod- ty nie wszystkie) poziomy, pojazdy, bronie nadaje rozgrywce całkiem inny wymiar. Po-
wodny. czy same tekstury nadal mogą się podobać. dobnie jak możliwość używania Rail Drive-
Niesmak pozostawia fizyka gry. To, że gra- Przyczepić się można do zróżnicowania lo- ra, co w zasadzie eliminuje kamperów czyha-
witacja na Marsie jest nieco niższa i Parker kacji. Większą część czasu spędzimy w kopal- jących na nas za ścianą czy skrzynią. Multi-
potrafi biegać bardzo szybko i wykonywać niach oraz marsjańskich podziemiach, tune- player w Red Faction to coś, w co każdy sza-
ogromne skoki jest jeszcze do zaakceptowa- lach i jaskiniach. Pozostałe miejsca stanowią nujący się fan gier FPS powinien zagrać. Roz-
rywka jest naprawdę przednia. Żadne sło-
wa nie oddadzą emocji, które towarzyszyć
W Sieci nam będą w momencie zawalania się grun-
• http://www.lem.com.pl/pc-fpp/red-faction.html?cPage=0&k tu pod nogami pod wpływem rakiet przeciw-
• http://www.mediago.pl/ nika, lub radości, jaka daje wykopanie sobie
• http://appdb.winehq.org/objectManager.php?sClass=version&iId=4716 małego tunelu z jednej części mapy do dru-
giej. To trzeba spróbować, tym bardziej, że w
chwili obecnej wciąż możemy bez większych
problemów znaleźć w Internecie ludzi chęt-
nych do gry.

Podsumowanie
Grę jak najbardziej polecam. I choć z powyż-
szego tekstu wynikać może, że ma ona mnó-
stwo błędów, to są to błędy na tyle niewiel-
kie, że przymykając na nie oko możemy bar-
dzo miło spędzić czas.
Tytuł ten warto odświeżyć także dlatego,
że w zaawansowanej produkcji jest trzecia
część gry i niebawem wejdzie na sklepowe pół-
ki. Czy okaże się hitem, tak jak swego czasu
pierwsza część Red Faction, czy średniej klasy
produktem, jak jego kontynuacja? Czas poka-
że. Ja tymczasem żegnam się z Wami, drodzy
Czytelnicy; do usłyszenia za miesiąc!

ŁUKASZ OLENDER
Autor zajmuje się Linuksem od 4 lat rozpowszech-
niając go w lokalnych szkołach. Hobby to wszelkie
aspekty związane z Debianem, Linuksem w ogól-
ności oraz gra na klarnecie.
Rysunek 2. Rail Driver w akcji Kontakt z autorem: lukiasz@gmail.com

38 12/2008
Rozrywka w Linuksie

Hedgewars
Recenzja

Hedgewars to gra mająca na celu stworzenie otwartego odpowiednika


legendarnych Wormsów. Prawdę mówiąc wręcz zaskakujące jest
podobieństwo do oryginału, tak wygląd interfejsu jak i przebieg
rozgrywki, na fizyce gry kończąc do złudzenia przypominają Wormsy.
Warto jednak powiedzieć jeszcze kilka słów.
żemy oczywiście zmienić takie cechy rozgryw-
Dowiesz się: Powinieneś wiedzieć: ki jak ilość punktów życia jeży, czy czas trwa-
• Wiele na temat jednego z bardziej interesują- • Jak uruchamiać programy w systemach z ro- nia tur.
cych otwartych klonów Wormsów. dziny GNU/Linux; Wybierając planszę możemy zdecydować się
• Jak poruszać się po systemie za pomocą termi- na losowo wygenerowany teren, który później
nala (dla użytkowników zamierzających kompi- może stać się wyspą skarbów, zimnym miej-
lować program ze źródeł). skim centrum, czy też soczyście zieloną łąką;
zależnie od tego jaki wystrój wybierze dla nas
program. Gdy znudzą nam się już powtarzające
w tym liny, spadochronu, teleportacji, mło- się dekoracje możemy pokusić się o pojedynek
tu pneumatycznego czy palnika. Nie zabra- na specjalnych mapach, które są niczym innym
Poziom trudności kło również tak znanych z pierwowzoru sytu- jak obrazkami na których toczy się rozgrywka,
acji jak tzw. nagła śmierć (ang. sudden death), każda mapa wyglądać będzie zawsze tak samo
to znaczy stopniowego zatapiania się pod wo- przez co jednak wcale nie staje się mniej cieka-
dę całej planszy po upływie określonego cza- wa. Możemy tutaj walczyć na pędach bambusa

D
la osób nie znających Wormsów su. Nie muszę chyba dodawać o ile bardziej czy też kaczuszkach pływających w wannie peł-
krótkie wyjaśnienie odnośnie samej emocjonująca staje się gra, jeśli poza planowa- nej piany. Autorzy umieścili w grze dwie misje
rozgrywki. Otóż Hedgewars jest grą niem rozmieszczenia własnych jeży i celnym treningowe pozwalające nam bardziej wprawić
po części strategiczną, po części zręcznościo- celowaniu musimy się dodatkowo skupić na się w posługiwaniu takim broniami jak strzelba
wą i chociaż zdania są podzielone, nie sposób tym, aby stopniowo przemieszczać się na co- i bazooka. W Hedgewars możemy grać z kom-
powiedzieć, który z tych gatunków ma w grze raz to wyższe miejsca na mapie, unikając tym puterem i przyjacielem przy jednym kompute-
większy udział. Wynika to z faktu, iż nie pla- samym zatopienia. rze, jak również za pośrednictwem sieci LAN
nując własnych posunięć i nie przewidując ru- Jeśli znudzi nas klasyczna rozgrywka, mo- lub Internet. Obsługa programu jest dość in-
chów przeciwnika trudno myśleć o wygranej. żemy zdecydować się na tryb fortów. Różni tuicyjna i nie powinna stwarzać problemów.
Z drugiej jednak strony, mając problemy w od- się on tym od zwyczajnej rozgrywki, że miej- Na chwilę obecną Hedgewars dostępny jest w
dawaniem celnych strzałów również nie ma co sce plansz zajmują forty, po jednym dla każdej ośmiu językach, w tym po polsku.
liczyć na zwycięstwo. W grze sterujemy sym- z drużyn. Co za tym idzie liczba drużyn w tym Pragnę zaznaczyć, znając termin publika-
patycznie wyglądającymi jeżami, które z nie- trybie jest ograniczona do dwóch, trudno się te- cji tejże recenzji, iż do czasu jej pojawienia się
znanych powodów postanowiły podzielić się mu dziwić jeśli wyobrazimy sobie sytuację trze- w gazecie, opisywana gra najprawdopodobniej
na drużyny i stanąć przeciw sobie. Na plan- ciego gracza którego fort znajdowałby się przy- znacząco się zmieni. Nie mam tutaj na myśli je-
szy może się ich znajdować aż 18 sztuk. Roz- padkiem pośrodku planszy, pomiędzy fortami
grywka podzielona jest na tury, każda druży- przeciwników.
na w czasie swojej tury może wykonać ruch Dużą zaletą gry jest jej wysoka konfigurowal-
jednym jeżem. Nasi dzielni podopieczni po- ność. Gracz może samodzielnie tworzyć sche-
trafią chodzić, skakać, korzystać z liny do zdo- maty uzbrojenia, dając graczom do dyspozy-
bywania niedostępnych szczytów i oczywiście cji np. tylko niektóre bronie, możemy także
strzelać. Jeśli zaś mowa o strzelaniu, to podob- zdecydować ile razy będzie można użyć każ-
nie jak w Wormsach mamy do dyspozycji po- dej z nich. Bardzo przyjemnym zaskoczeniem
kaźny arsenał, a w nim m.in. bazookę, pistolet, jest możliwość samodzielnego zdefiniowania
strzelbę, moździerz, rozmaite granaty, dwa ro- używanych w grze klawiszy, dodatkowo, każ-
dzaje nalotów, zrzucające na przeciwnika zwy- da drużyna może posiadać własne ustawiania
kłe bomby albo miny, a nawet UFO. Oprócz sterowania. Kolejnym ciekawym pomysłem jest
tego możemy korzystać z całej masy narzędzi automatyczne nagrywanie przebiegu ostatnie-
ułatwiających przemieszczanie się po planszy, go pojedynku. Przygotowując się do walki mo- Rysunek 1. Hedgewars – okno gry

40 12/2008
Hedgewars – recenzja

dynie poprawek błędów, a nowe rzeczy które Otóż tworząc nową drużynę (lub edytując już Wystarczy średnia znajomość np. programu In-
mogą się w grze pojawić. Aby trochę nakreślić istniejącą) będziemy mieli możliwości nałoże- kscape i trochę pracy. Jeśli plansza będzie za sła-
ewentualne zmiany, przedstawię najważniej- nia na nasze jeże dowolnych czapeczek, dla wy- ba, bardzo możliwe, że jeden z grafików zasu-
sze. Przede wszystkim nowe menu, od wersji jaśnienia dodam, że na każdego członka naszej geruje co należy w niej zmienić aby znalazła się
0.9.7, autorzy planują wprowadzić do gry nie- drużyny może przypadać inne nakrycie gło- ona w grze.
malże całkowicie przebudowane menu. Znacz- wy. Biorąc pod uwagę fakt, że w wersji 0.9.7 Gra dostępna jest w wersjach na systemy
nie przyjemniejsze dla oka, o bardziej koloro- ma, według wstępnych planów, znaleźć się 60 GNU/Linux oraz Windows, toteż nic nie stoi
wym, kreskówkowym wyglądzie. Jednak nie różnych nakryć głowy, jest to naprawdę spo- na przeszkodzie aby użytkownicy tych dwóch
tylko wygląd będzie jego atutem, ponieważ ra zmiana, a przy okazji świetny pomysł, któ- systemów operacyjnych grali razem w sieci In-
ma ono być również znacznie bardziej konfi- ry z pewnością znacznie urozmaici rozgrywkę. ternet lub LAN, musimy tylko zadbać aby mie-
gurowalne. Wśród planowanych zmian znajdu- Obecnie, jako że temat nakryć głowy, jest jed- li oni zainstalowaną taką samą wersję gry. Nale-
je się m.in. możliwość ustawienia czasu wybu- nym z goręcej omawianych pomysłów na forum ży to rozumieć w następujący sposób, jeśli kilka
chu znajdujących się na planszy min. Będziemy projektu, a graficy prześcigają się w pomysłach, osób chciałoby zagrać w Hedgewars za pośred-
mieli możliwość ustawienia np. wybuchu na- niewykluczone, że liczba czapeczek przekroczy nictwem sieci LAN lub Internet, nie stanowi to
tychmiastowego, znanego z pierwszych, oficjal- planowane 60 sztuk. Z przygotowanych już te- problemu, nie gra roli posiadamy system opera-
nie wydanych Wormsów dla systemu operacyj- raz co ciekawszych pomysłów wymienić należy cyjny (zakładając, że istnieje wersja gry dla tego
nego DOS (miny wybuchające po pewnym cza- np. nakrycie głowy Robin Hooda, spartańskie- systemu), istotne jest aby numerycznie zgadza-
sie pojawiły się w Worms+/Worms Reinforce- go wojownika, clowna (z charakterystycznym, ła się wersja gry, to znaczy aby wszyscy gracze
ments). Kolejną konfigurowalną opcją będzie czerwonym nosem), Lorda Vadera, wikinga, mieli, dajmy na to wersję 0.9.6. Program znaj-
czas po którym zaistnieje wspomniana wcze- czarodzieja, wszystkich członków znanej rocko- dziemy także wśród portów dla FreeBSD, a na
śniej tzw. nagła śmierć (ang. sudden death). wej kapeli KISS (w tym wypadku zmieniają się forum projektu poważnie mówi się też o wer-
Do zmian graficznych można zaliczyć rów- całe głowy jeży), błazna, czy też bohatera znanej sji dla iPhone. Strona domowa umożliwia nam
nież wprowadzenie przez autorów rozmaitych serii gier video, Megamana. pobranie źródeł, jednak znajdziemy na niej
nakryć głowy dla naszych jeży. Przypomina to Bardzo istotne dla rozwoju Hedgewars jest również odsyłacze do stron z informacjami o
trochę sytuację, której mogliśmy doświadczyć forum internetowe na którym użytkownicy i paczkach dla Gentoo, Debiana i Archa; oso-
grając w oryginalne Worms Armageddon/ twórcy wymieniają się pomysłami. Propozy- by korzystające z Ubuntu również nie powin-
World Party, gdzie, po wybraniu określonych cje zmian przyjmowane są z entuzjazmem, i ny mieć problemów z instalacją gry. Jeśli zdecy-
broni, np. topora, nasz podopieczny zakładał prawie wszystkie są komentowane przez twór- dujemy się na samodzielną kompilację, będzie-
na głowę rogaty hełm wikinga. W Hedgewars ców projektu. Nic nie stoi na przeszkodzie aby my musieli, jak podaje strona domowa projek-
twórcy idą, można powiedzieć, o krok dalej. np. samemu stworzyć nową planszę do gry. tu, spełnić następujące zależności: QT >= 4.2,
FreePascal >= 1.9.4, SDL >= 1.2.5, SDL_net >=
1.2.5, SDL_mixer >= 1.2, SDL_image >= 1.2,
SDL_ttf >= 2.0, CMake >= 2.4.4. Aby skompi-
lować źródła wydajemy polecenie:

cmake -DCMAKE _ INSTALL _ PREFIX=”/


ścieżka/do _ katalogu _ w _ którym _
chcemy _ zainstalować _ grę”,

a następnie make. Natomiast aby zainstalować


grę, make install. Warto zauważyć, że w wy-
padku Hedgewars polecenie make uninstall
nie odinstaluje gry, dlatego tym bardziej war-
to już na samym początku wskazać programo-
wi gdzie chcemy aby program został zainstalo-
wany. Korzystając z gotowych paczek dla na-
szej dystrybucji nie musimy spełniać dwóch
zależności, czyli FreePascal i CMake, są one
bowiem potrzebne jedynie w czasie kompilacji
źródeł. Program możemy pobrać z:
Rysunek 2. Nakrycia głowy, planowane w następnej wersji programu
http://www.hedgewars.org/download.html
Za i przeciw Rozmiar pliku ze źródłami, czyli obecnie hedge-
Za:
wars-src-0.9.6.tar.bz2 wynosi 19,2mb.
• urzekające podobieństwo do pierwowzoru
• świetny silnik (ang. engine) gry Ocena: 5/5
• miła dla oka grafika
• brak krwi i wyraźnie widocznej przemocy
• stały, dynamiczny rozwój projektu
MACIEJ MROZIŃSKI
Przeciw: Od kilku lat codzienny, domowy użytkownik syste-
mów z rodziny GNU/Linux. Entuzjasta rozwiązań
• brak lub niewielka ilość serwerów do gry w internecie alternatywnych i wolnego oprogramowania.
Kontakt z autorem: maciej_mrozinski@o2.pl

www.sdjournal.org 41
Sztuczna inteligencja

Porozmawiaj
z komputerem
Komputerowe rozpoznawanie i synteza mowy (ang. Speech Technology)
były niegdyś uważane za technologię dalece futurystyczną, która
z pewnością nigdy nie opuści sfery fantastyki naukowej. Tymczasem,
przez ostatnie 50 lat technologia ta była stale rozwijana i obecnie jest
coraz częściej stosowana, zyskując coraz większą popularność.
Prawie wszystkie programy rozpoznawania mo-
Dowiesz się: Powinieneś wiedzieć: wy, zanim zostaną użyte, wymagają tzw. treningu.
• O oprogramowaniu do rozpoznawania mowy; • Znajomość podstaw .NET/C; Proces ten pozwala na dostosowanie się programu
• O rozpoznawaniu i syntezie mowy z użyciem • Windows Vista lub SAPI SDK 5.1. do stylu mówienia konkretnej osoby i polega na
SAPI SDK. głośnym czytaniu zadanego tekstu do mikrofonu.
W trakcie późniejszego użytkowania, oprogramo-
wanie uczy się już samodzielnie na własnych błę-
lub nauce języków obcych. Technologia rozpo- dach, stopniowo udoskonalając swoje działanie.
znawania mowy jest nadal niedoskonała. Szcze- Dragon NaturallySpeaking jest zdaniem więk-
Poziom trudności gólną trudność stanowi precyzyjne odwzorowa- szości ekspertów najlepszym komercyjnie dostęp-
nie płynnego ciągu wypowiedzi na odpowiadają- nym oprogramowaniem do rozpoznawania mowy.
cy jej tekst. Programy starszej generacji wymaga- Jego skuteczność jest szacowana na poziomie 95 do
ły stosowania pauz, aby komputer mógł rozróżnić 99%. Jego konkurent, IBM ViaVoice 10 osiąga zale-

R
ozpoznawanie mowy (SR) spełnia dwie wypowiadane słowa. Najnowsza generacja nie wy- dwie 70% sprawność w prawidłowym rozpozna-
podstawowe funkcje. Pierwsza to gło- maga żadnych przerw w wypowiedzi. Umożliwia waniu słów. Pierwszy z nich również znacznie le-
sowe sterowanie pracą komputera (np. to bardziej naturalną komunikację, jednak więk- piej integruje się z aplikacjami Windows.
wywoływanie poleceń w rodzaju otwórz bazę da- szość użytkowników przyznaje, że czasami ko- Pomimo zdecydowanej wyższości NaturallySpe-
nych lub wyłącz mikrofon). Druga funkcja polega nieczne są znaczne poprawki generowanego tek- aking nad ViaVoice, przy wyborze najodpowied-
na przekształcaniu wypowiadanych słów na tekst stu. Pomimo tych niedoskonałości wszyscy uwa- niejszego z nich trzeba wziąć pod uwagę moc posia-
– podczas gdy użytkownik mówi do mikrofonu, żają, że głosowe wprowadzanie tekstu jest szyb- danego komputera oraz zainstalowany system ope-
oprogramowanie przekształca odbierane dźwię- sze niż przy użyciu klawiatury. Jeden z najpopu- racyjny. NaturallySpeaking wymaga Windows XP,
ki na pełne słowa, które następnie wprowadzane larniejszych na rynku programów SR (Dragon Na- większej ilości pamięci i szybszego procesora. Dla
są do edytora tekstów (np. Microsoft Word lub turallySpeaking 9) potrafi rozpoznać do 160 słów starszych systemów operacyjnych i słabszych kom-
Windows Mail). W praktyce oznacza to możliwość na minutę. puterów, bardziej odpowiedni jest IBM ViaVoice.
tworzenia dokumentów tekstowych bez użycia
klawiatury. Synteza mowy (TTS) spełnia dokład-
nie odwrotną funkcję. Jej zadaniem jest przekształ- ������������������� ������������������
cenie informacji tekstowej na komputerowo gene-
rowaną mowę. ������������� ��������

Zastosowanie ����������� �������� ����������� ����������


Programy rozpoznające mowę są najbardziej uży-
teczne dla ludzi, których praca wymaga jedno- ����������
czesnego wykorzystywania obu rąk, jak również
tych którzy tymczasowo lub permanentnie utra-
cili zdolność posługiwania się klawiaturą i mysz-
ką. SR może mieć również zastosowanie dla osób, ����������������������������������������
które z różnych powodów nie mogą podczas pra-
cy obserwować ekranu monitora lub dla uspraw- ��������
nienia pracy z programami o bardzo rozbudowa-
nej strukturze menu, oferując szybszy dostęp do ���������� ����������������������
głęboko zagnieżdżonych funkcji. Jeszcze inną
kategorię zastosowań mogą stanowić programy
sprawdzające poprawność wymowy w logopedii Rysunek 1. Sposób dostępu do SAPI za pośrednictwem interfejsów

42 12/2008
Rozpoznawanie i synteza mowy

Dla posiadaczy Windows Vista, najlepszym roz- pozwala użytkownikom na kontrolowanie progra- sób użycia biblioteki System.Speech.Synthesis.
wiązaniem może okazać się wykorzystanie rozpo- mów przy użyciu prostych komend głosowych. Aplikacja ta, jest jedynie prostym programikiem
znawania mowy wbudowanego w ten system ope- Dotyczy to jednak wyłącznie funkcji dostępnych wypowiadającym tradycyjne Hello, world!.
racyjny (Windows Speech Recognition – WSR). W poprzez menu programu, jego paski narzędziowe Klasa syntezatora mowy nie wymaga żadnej do-
przeprowadzonych testach wypada ono równie do- oraz przyciski. Co jednak można zrobić, jeśli ko- datkowej inicjalizacji. Aby uruchomić syntezę mo-
brze jak najnowsze wersje NaturallySpeaking. Opi- nieczne jest stworzenie bardziej wyrafinowanego wy, wystarczy tylko wywołać funkcję SpeakText() z
nie recenzentów nie wskazują jednak zdecydo- interfejsu głosowego, dostosowanego do potrzeb zadanym tekstem. Domyślnie, klasa ta wykorzystu-
wanego lidera. Część z nich uważa, że Naturally- konkretnej aplikacji? Microsoft oferuje tutaj dwa je syntezator wybrany w panelu sterowania syntezy
Speaking jest bardziej wyrafinowany i uniwersal- różne interfejsy programistyczne (APIs): mowy. Może ona jednak używać dowolnego synte-
ny niż WSR. Z kolei inni podkreślają, że WSR jest zatora, pod warunkiem, że jego interfejs jest zgod-
bardziej nowatorski, gdyż nie został zaprojektowa- • SAPI 5.1 dla programów kompilowanych do ny z interfejsem sterownika SAPI DDI.
ny wyłącznie dla ludzi niepełnosprawnych lecz jest kodu maszynowego (Vista wykorzystuje wer- Biblioteka System.Speech.Recognition jest zgodna
zupełnie nowym sposobem komunikacji, z które- sję 5.3 tej biblioteki); ze standardem W3C Speech Recognition Gram-
go każdy będzie chciał korzystać na co dzień. • Biblioteki .NET o nazwach System.Speech.Re- mar Specification (SRGS), którego dokumentację
cognition i System.Speech.Synthesis (WinFX). można znaleźć na stronie http://www.w3.org/TR/
SAPI speech-grammar. Dostarcza ona nawet klas do two-
Windows Vista umożliwia włączenie trybu auto- SAPI 5.3 jest wbudowane w Vistę. Wcześniejsze rzenia i wykorzystywania dokumentów SRGS
matycznego sterowania głosem dla każdej zain- systemy operacyjne wymagają zainstalowania SA- XML. W większości przypadków wykorzystanie
stalowanej aplikacji. To fantastyczne rozwiązanie PI SDK 5.1. Listing 1 prezentuje najprostszy spo- tych klas jest niepotrzebne. Do tworzenia gramatyk
w zupełności wystarcza klasa GrammarBuilder.
Listing 1. Najprostszy sposób użycia biblioteki System.Speech.Synthesis Listing 2 pokazuje wykorzystanie biblioteki Sys-
tem.Speech.Recognition do stworzenia aplikacji
using System;
zmieniającej kolor tła okienka w wyniku wypowie-
using System.Speech.Synthesis;
namespace TTS_Console_Sample dzenia nazwy koloru zdefiniowanej przez typ Sys-
{ tem.Drawing.KnownColor.
class Program Listing 2 zawiera tylko najistotniejsze, z punk-
{ tu widzenia użycia System.Speech.Recognition,
static void Main(string[] args) fragmenty kodu. Wykorzystany zostaje obiekt kla-
{ sy GrammarBuilder do stworzenia nowej grama-
SpeechSynthesizer synth = new SpeechSynthesizer();
tyki zawierającej nazwy wszystkich znanych ko-
synth.SpeakText(„Hello, world!”);
}
lorów. Obiekt klasy rozpoznawania mowy (Spe-
} echRecognitionEngine) definiuje zdarzenie o nazwie
} SpeechRecognized. Jest ono wywoływane każdo-
razowo, gdy SAPI rozpozna jedno ze słów wpro-
Listing 2. Wykorzystanie biblioteki System.Speech.Recognition do stworzenia aplikacji zmieniającej wadzonych wcześniej do gramatyki obiektu. Roz-
kolor tła okienka poznane słowo wyświetlane jest w tytule okienka i
using System; dodatkowo zmieniony zostaje kolor tła okienka na
using System.Collections.Generic; odpowiadający wypowiedzianemu słowu.
using System.Drawing; Funkcja RecognizeAsync() powoduje wprowa-
using System.Windows.Forms;
dzenie programu w tryb asynchronicznego nasłu-
using System.Speech.Recognition;
private void SRThread()
chiwania, czyli ciągłego oczekiwania na wypowia-
{ dane słowa.
SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
recognizer.SetInputToDefaultAudioDevice(); Podsumowanie
Array colorsArray = Enum.GetValues(typeof(KnownColor)); Technologia rozpoznawania i syntezy mowy doj-
KnownColor[] allColors = new KnownColor[colorsArray.Length]; rzewała przez ostatnie 50 lat i obecnie zaczyna
Array.Copy(colorsArray, allColors, colorsArray.Length);
wchodzić w fazę pełnej użyteczności oraz coraz
GrammarBuilder gb = new GrammarBuilder();
Choices ch = new Choices();
większej popularności. Istnieje już wiele gotowych
foreach (KnownColor kc in colorsArray) ch.Add(kc.ToString()); rozwiązań umożliwiających efektywną komuni-
kację głosową z komputerami i zainstalowanym
Grammar grammar = new Grammar(gb); na nich oprogramowaniem. Technologia ta coraz
recognizer.UnloadAllGrammars(); częściej staje się po prostu kolejnym, bardziej na-
recognizer.LoadGrammar(grammar); turalnym sposobem komunikacji. Wraz z jej stan-
recognizer.SpeechRecognized += OnSpeechRecognized;
daryzacją, dostrzeżeniem zalet i lepszym pozna-
recognizer.RecognizeAsync(RecognizeMode.Multiple);
niem, powinna wkrótce stać się stałym elementem
}
private void OnSpeechRecognized(object sender,
współczesnej informatyki.
SpeechRecognizedEventArgs e)
{ MARIUSZ JASNOGÓRSKI
string newColorName = e.Result.Text; Autor jest absolwentem Informatyki na Politechnice
Text = newColorName; Wrocławskiej. Od 8 lat pracuje w USA jako konsul-
foreach (KnownColor kc in colorsArray) tant d/s oprogramowania. Specjalizuje się w pro-
if (kc.ToString() == newColorName)
jektowaniu i implementowaniu rozwiązań opar-
BackColor = Color.FromKnownColor(kc);
tych na technologiach .NET.
}
Kontakt z autorem: mjasnogorski@gmail.com

www.sdjournal.org 43
E-commerce

Wydajny, elastyczny
i przyjazny CMS
Poznajemy Textpattern cz.2
W poprzedniej części omówiłem sposób instalacji Textpattern. Dokonałem
wprowadzenia do podstawowych i bardziej zaawansowanych zagadnień
związanych z konfiguracją CMS'a. Mam nadzieję Drogi Czytelniku, że
przyswoiłeś sobie zdobyte informacje i przećwiczyłeś zaprezentowane
czynności instalacyjno – konfiguracyjne. Nie ma nic lepszego niż nauka
poprzez praktykę. Zabieramy się do pracy.
Tworzymy sekcje
Dowiesz się: Powinieneś wiedzieć: Dodawane artykuły możemy podzielić na sek-
• Rozszerzysz zdobytą wiedzę na temat Textpat- • Znać podstawy Textpattern. Posiadać wiedzę cje Sections i kategorie Categories. Zrozumienie
tern; o tym jak zainstalować i przygotować TXP do różnicy pomiędzy sekcją i kategorią początko-
• Dowiesz się jak spersonalizować warstwę pre- pracy, skonfigurować podstawowe i zaawan- wo nastręcza nieco trudności.
zentacji – sekcje, artykuły, arkusz stylów CSS. sowane opcje; Sekcja pełni rolę folderu, katalogu. Każdy
• Znać XHTML, CSS i PHP oraz posiadać prak- stworzony artykuł musi być umieszczony w
tyczną wiedzę na temat budowy stron WWW; odpowiedniej sekcji. Sekcje tworzą strukturę w
• Zapoznać się z oficjalną dokumentacją pro- której umieszczane są poszczególne fragmenty
jektu. treści witryny. W odróżnieniu kategorie nie są
wymagane, a ich przeznaczeniem jest organiza-
cja witryny w logiczną całość.
• jak chcemy rozwiązać kwestię nawigacji Wyobraźmy sobie stronę o zwierzętach w
– wygląd i układ menu. której treść w postaci artykułów zorganizo-
Poziom trudności wana jest w ramach sekcji – ssaki, ptaki itd.
Im więcej aspektów weźmiemy pod uwagę Strona o kotach przypisana jest do przynależ-
tym łatwiejsza będzie nasza praca. Oczywiście nej jej sekcji ssaki, natomiast jej struktura po-
nie jest to jedyne właściwe podejście. Jak wie- dzielona jest na kategorie – koty długowłose
W pełni zgadzam się ze stwierdzeniem iż znacz- my z poprzedniej części, po zainstalowaniu i krótkowłose.
nie łatwiej przygotować witrynę budując jej ro- TXP mamy gotowy szkielet funkcjonującej Kategorie mogą również kwalifikować ar-
boczą wersję poza CMS (Textpattern Solutions: witryny, także nawet zwolennicy gotowych i tykuły różnych sekcji w ramach jednego ty-
PHP-Based Content Management Made Easy). szybkich rozwiązań będą usatysfakcjonowani. pu tematycznego np. pielęgnacja, która od-
Początkowo może budzi to pewne opory zwią- Na potrzeby naszej dalszej pracy stworzy- nosi się zarówno do artykułów z sekcji pta-
zane ze zwiększeniem nakładów pracy potrzeb- my prostą strukturę HTML, która posłuży ki jak i ssaki.
nych na zbudowanie surowego projektu przy uży- nam jako wzorzec. Należy podkreślić, że każdy artykuł może
ciu HTML i CSS oraz rodzić pytanie o zasad- należeć tylko do jednej sekcji.
ność wyboru TXP. Jednak poświęcony czas jest Presentation Załóżmy że tworzymy firmową witrynę.
nieproporcjonalnie mniejszy w stosunku do za- Po zalogowaniu do panelu administracyjnego Musimy podzieli treść witryny w ramach od-
oszczędzonego podczas osadzania witryny w Te- przechodzimy do jednej z głównych zakładek powiednich sekcji. Podział uwzględniający
xtpattern i każdym innym rozwiązaniu CMS. – Presentation. Zakładka pełni rolę swoistego docelową strukturę witryny mógłby wyglą-
Zalecam stworzenie layoutu w postaci gra- centrum zarządzania warstwą prezentacji. Jest dać tak jak przedstawia to Tabela 1.
ficznej, a następnie stworzenie roboczej wersji to główny obszar dokonywania zmian szablonu Przejdźmy do zakładki Sections. Widzi-
struktury HTML wraz z zewnętrznym arku- witryny i miejsce w których definiujemy spo- my dwie domyślnie dodane sekcje – Article
szem stylów CSS. sób w jaki zawartość naszego serwisu jest rende- i About. Zostawiamy je bez zmian i dodaje-
Podczas etapu prac przygotowawczych warto rowana do postaci finalnego kodu HTML wysy- my nasze sekcje zgodnie z zaproponowanym
wziąć pod uwagę kilka czynników: łanego do przeglądarki odwiedzającego. podziałem. Aby stworzyć nową sekcję należy
W obrębie panelu zorganizowane są cztery za- podać jej nazwę w odpowiednim polu i klik-
• jakie artykuły będziemy prezentować?; kładki – Sections, Pages, Forms, Style z którymi nąć Craete.
• jakiego rodzaju witrynę budujemy – będziemy pracować nad finalną postacią serwi- Po utworzeniu przechodzimy nieco niżej.
blog, portal firmowy, wizytówkę itd; su WWW. Na ekranie widoczne są dodatkowe opcje

44 12/2008
Wydajny, elastyczny i przyjazny CMS

konfiguracyjne dotyczące sekcji. W tym miejscu należy się kilka słów wyja- Natomiast za pomocą
W Section name znajduje się nazwa sekcji, śnienia. W dużym uproszczeniu można po-
w Section title tytuł sekcji. Nazwa wykorzysty- wiedzieć że witrynę opartą na Textpattern • <txp:article /> wywołamy treść dyna-
wana jest podczas tworzenia odnośników, ty- budują strony (Pages) zorganizowane w obrę- miczną.
tuł jest czytelną postacią nazwy sekcji prze- bie sekcji (Sections). Każda strona posiada ar-
znaczoną dla odwiedzających naszą witrynę. kusz stylów (domyślny dla całej witryny lub Atrybut form definiuje nazwę wywoływa-
Poniżej znajduje się pole typu combo Use page, dedykowany) i składa się z tzw. form (Forms) nej formy. Do utworzenia menu wykorzysta-
za pomocą którego wybieramy szablon struktu- pełniących rolę kontenerów dla dodawanej my plugin cbs_navigation_menu, który pobrać
ry z którym ma zostać powiązana sekcja. treści jak linki, artykuły, formularze kon- możemy ze strony http://textpattern.org/plugins/
W następnym polu Uses style wiążemy sek- taktowe itd. 636/cbsnavigationmenu.
cję z odpowiednim arkuszem stylów. Celowo pominąłem omawianie szczegółów Po zainstalowaniu i aktywowaniu (patrz Po-
Budując witrynę możemy stosować wiele dotyczących renderowania witryny przez Te- znajemy Textpattern cz.1 ) możemy korzystać
rożnych szablonów oraz wiele różnych arku- xtpattern. Model semantyczny Textpattern w z odpowiedniego znacznika. Dodajemy nową
szy stylów, każda sekcja może należeć do od- postaci graficznej i dokładny opis znajduje się formę Menu i nasze menu w postaci HTML
rębnego szablonu i arkusza stylów. na pod adresem http://textbook.textpattern.net/ zmieniamy na kod z Listingu 3, który dyna-
Zaznaczenie opcji Selected default? spowo- wiki/index.php?title=Image:Symantic-mo- micznie wygeneruje właściwy kod.
duje iż każdy nowo dodany artykuł będzie do- del_fig1.gif Następnie tworzymy nową formę Footer i wkle-
myślnie przypisywany do utworzonej sekcji. Gorąco zachęcam do zapoznania się z ma- jamy cały kod stopki – <div id=”footer”/>.
Opcja On front page? definiuje czy artyku- teriałem. Czas zająć się zawartością, która będzie zmie-
ły z sekcji mają pojawiać się na pierwszej stro- Przechodzimy do zakładki Pages. Zdefiniu- niać się dynamicznie. Załóżmy że pojawiać się
nie. Zaznaczenie opcji Syndicate? spowoduje, jemy nagłówek korzystając z fragmentu do- będzie tam treść poszczególnych podstron. W
iż tworzone artykuły będą zasilać kanał RSS myślnie istniejącego kodu, a menu nawigacyj- naszym przypadku będzie to blok przedstawio-
lub Atom. ne i stopkę umieścimy w oddzielnych formach ny na Listingu 4.
Include in site search? Zaznaczenie opcji Yes o typie misc. Tworzymy formę Content o typie Article.
spowoduje, że zawartość sekcji będzie moż- Jak wspomniałem w pierwszej części artyku- Przyglądając się źródłowej postaci kodu mo-
na przeszukiwać za pomocą wyszukiwarki wi- łu, Textpattern wykorzystuje specjalne tagi, któ- żemy wskazać tytuł – Witamy serdecznie. Za-
tryny. re dynamicznie renderuje do postaci właściwe- mieńmy zatem jej statyczną postać na wywoły-
Istniejącym domyślnie oraz dodanym sek- go kodu HTML. waną za pomocą znacznika <txp:title />.
cjom – kontakt, oferta, aktualności włączamy Na ekranie widzimy domyślnie utworzony Zawartość pierwszego paragrafu możemy
jedynie opcje Include in site search?. Sekcji o nas nagłówek naszej witryny. Proponuję zostawić potraktować jako skrót większej całości tekstu.
włączamy dodatkowo opcję Selected default?, kod w postaci takiej jak jest to pokazane na Li- Listę usług wraz z tytułem potraktujemy jako
On front page?. stingu 2. tekst właściwy. Użyjemy tutaj dwóch znaczni-
Po dokonaniu niezbędnych modyfikacji za- Jak widać mamy tutaj kilka znaczników
pisujemy zmiany. TXP:

Tworzenie form i edycja strony • <txp:page _ title>– wyświetlenie zde-


Proponuję w wybranym notatniku otworzyć finiowanej w opcjach konfiguracyjnych
przygotowany wcześniej szablon struktury tytułu witryny wraz z tytułem wyświetla-
HTML. Listing przykładowego, prostego ko- nej zawartości;
du został umieszczony w listingu 1Dokonaj- • <txp:site _ url /> – wyświetla pełny ad- Rysunek 1. Tworzenie nowej sekcji
my teraz analizy kodu źródłowego identyfi- res URL naszej witryny;
kując kilka ważnych obszarów. Zastanówmy • <txp:css /> – wstawia link do powiąza-
się jak możemy podzielić strukturę biorąc nego arkusza stylów CSS.
pod uwagę:
Dodajmy jeszcze fragment kodu z Listingu 2a
• fragmenty w których zawartość zmie-
niana jest dynamicznie tj. artykuły, lin- • <txp:link _ to _ home> – tworzy link do
ki, zdjęcia, właściwa treść, witryna jak np. strony domowej;
oferta, aktualności należą do tej grupy; • <txp:site _ name /> – nazwa witryny;
• fragmenty kodu pozostające statyczne np. • <txp:output_form /> – służy do
nagłówek, stopka, menu. wywołania form typu misc czyli menu i stopki. Rysunek 2. Opcje konfiguracyjne sekcji
Tabela 1. Przykładowy podział witryny na sekcje
Nazwa sekcji Zawartość sekcji – treść, artykuły
o nas Historia firmy
Profil działalności
kontakt Dane teleadresowe
Formularz kontaktowy
oferta Produkty
Usługi
aktualności Z życia firmy
Ogłoszenia dla partnerów
Rysunek 3. Widok zakładki Write – wstawianie treści

www.sdjournal.org 45
E-commerce

Listing 1. Szablon przykładowej struktury HTML


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


<title>Nasza</title>

<link rel="home" href="http://localhost/cms/" />


<link rel="stylesheet" type="text/css" media="screen" href="styl.css" />

</head>
<body>

<div id="container">
<h1>Nasza</h1>

<div id="menu">
<ul>
<li><a href="#" title="O nas">O nas</a></li>
<li><a href="#" title="Kontakt">Kontakt</a></li>

<li><a href="#" title="Oferta">Oferta</a></li>


<li><a href="#" title="Aktulaności">Aktulaności</a></li>

</ul></div>
<div id="content">

<h4>Witamy serdecznie</h4><br />

<p>Firma "Nasza" Spółka z ograniczoną odpowiedzialnością z siedzibą w Tralalewo świadczy kompleksową obsługę w zakresie
budowy, remontu i wykańczania obiektów. Podstawowym celem usług świadczonych przez naszą firmę jest zadowolenie
i bezpieczeństwo naszych Klientów. &nbsp;
<h4>Oferujemy kompleksowe usługi:</h4><br />
<ul>
<li> budowlane, w tym mi.in.:
<ol>
<li> budowa domów i obiektów pod klucz</li>
<li> budowa do stanu surowego</li>
<li> kontynuowanie budowy nieukończonej</li>
</ol>
</li>
<li> wykończeniowe, w tym mi.in.:
<ol>
<li> tynki, sufity</li>
<li> malowanie, tapetowanie</li>
<li> układanie podłogi</li>
</ol>
</li>
</ul>
</div>
<div id="footer">
<p>Sąd Rejonowy Gdańsk-Północ w Gdańsku Wydział VIII Gospodarczy KRS nr 00000000, NIP 1111111111, Kapitał zakładowy: 50 000
PLN <br />Nasza Sp. z o.o. 84-200 Tralalewo, Wesoła 227 tel./fax. +48 058 88 08 56, email: krystian_
r@tlen.pl</p>
</div>
</div>
</body>
</html>

Listing 2. Fragment zmodyfikowanego kodu HTML nagłówka wraz ze znacznikami TXP


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><txp:page_title />
</title>
<link rel="home" href="<txp:site_url />" />
<txp:css format="link" />
</head>
<body>

46 12/2008
Wydajny, elastyczny i przyjazny CMS

ków <txp:excerpt /> dla skrótu, tzw. zajawki


W Sieci oraz <txp:body /> dla tekstu.
Nasz kod po zmianach będzie wyglądał jak
• http://www.textpattern.com – strona domowa projektu na Listingu 5. W ten sposób przeniesiemy treść
• http://textpattern.org/ – potężna i bardzo pomocna baza dodatków, plugin'ów, szablonów i
tutoriali z formy statycznej na dynamicznie renderowa-
ną z bazy danych.
Przechodzimy do panelu Content, a następ-
nie do zakładki Write.
Listing 2a. Ciąg dalszy kodu Podajemy tytuł artykułu Witamy serdecznie i
<div id="container"> wpisujemy skrót artykułu w polu Excerpt.
<h1 id="site-name"><txp:link_to_home><txp:site_name />
Wklejmy zawartość kodu HTML w głów-
</txp:link_to_home>
nym polu tekstowym. Dużym udogodnieniem
</h1>
<txp:output_form form="menu"/> Textpattren jest możliwość wpisywania surowe-
<txp:article form="content"/> go tekstu jak i kodu HTML jednocześnie bez
<txp:output_form form="footer"/> obawy, że znaczniki HTML zostaną nieprawi-
</div> dłowo zinterpretowane.
</body></html> Z pola combo box Section wybieramy o-nas i
zapisujemy.
Listing 3. cbs_navigation_menu wraz z atrybutami
<txp:cbs_navigation_menu
sections="default,kontakt,oferta,aktualnosci"
Modyfikacja arkusza stylów
titles="o nas,kontakt,oferta,aktualności"
Zmiana domyślnego wyglądu odbywa się w
break="li" bardzo prosty i intuicyjny sposób. Po przejściu
class="menu" do zakładki style skorzystamy z wbudowanego,
activeclass="active" graficznego edytora CSS (Edit in CSS editor).
wraptag="ul" /> W polu Add new selector wpisujemy nazwę
selektora #content i klikamy przycisk Submit.
Listing 4. Dynamicznie zmieniająca się zawartość
Korzystając z przycisku + dodajemy nowe
<div id="content">
wiersze w których wpisujemy nazwę właściwo-
<h3>Witamy serdecznie</h3>
ści (Property) i odpowiednią wartość (Value) np.
<br />
<p>Firma "Nasza" Spółka z ograniczoną odpowiedzialnością z siedzibą w Tralalewo Background-color.
świadczy kompleksową obsługę w zakresie budowy, remontu i Proponuję poeksperymentować z poszcze-
wykańczania obiektów. Podstawowym celem usług świadczonych przez gólnymi wartościami. Jeśli zaadoptowanie do-
naszą firmę jest zadowolenie i bezpieczeństwo naszych Klientów. myślnego arkusza stylów sprawi nam zbyt dużo
&nbsp; <a href="#" title="onas_wiecej">[wiecej]</a></p> kłopotu możemy spróbować edytować style w
<h4>Oferujemy kompleksowe usługi:</h4> trybie tekstowym (Edit raw CSS) lub załadować
<br />
własny wcześniej przygotowany arkusz. Po wy-
<ul>
<li> budowlane, w tym mi.in.:
konaniu niezbędnych zmian klikamy przycisk
<ol> Save. Pozostaje jedynie sprawdzić wygląd naszej
<li> budowa domów i obiektów pod klucz< witryny klikając zakładkę View site.
/li>
<li> budowa do stanu surowego Podsumowanie
</li> Celem niniejszego artykułu było rozwinięcie
<li> kontynuowanie budowy nieukończonej
pierwszej części poprzez wyjaśnianie i zapre-
</li>
zentowanie sposobu budowy witryny w oparciu
</ol>
</li> o własny szkic struktury HTML. Przedstawiony
<li> wykończeniowe, w tym mi.in.: sposób tworzenia szablonu nie jest jedynym wła-
<ol> ściwym podejściem. Oczywiście, trudno nawet
<li> tynki, sufity w ramach dwóch artykułów omówić całą funk-
</li> cjonalność TXP i przedstawić wszystkie szczegó-
<li> malowanie, tapetowanie ły dotyczące edycji zawartości i struktury.
</li>
Mam nadzieję, że zaprezentowane informa-
<li> układanie podłogi
</li>
cje zachęcą do dalszej pracy z Textpattern. Życzę
</ol> powodzenia w budowaniu własnych serwisów i
</li> blogów. Miłej zabawy.
</ul></div>
KRYSTIAN RAJSKI
Listing 5. Zawartość formy Content Autor interesuje się tworzeniem aplikacji i serwi-
<div id="content"> sów webowych oraz technologiami internetowymi.
<h3><txp:title />
Związany z grupą ProgInn. Na co dzień pracuje jako
</h3>
Software Test Engineer w firmie ADVA Optical Ne-
<p><txp:excerpt />
</p> tworking. Prywatnie pasjonat muzyki elektronicz-
<p><txp:body /> nej i kultury klubowej.
</p></div> Kontakt z autorem: krajski@p-innovations.com,
www.p-innovations.com

www.sdjournal.org 47
Systemy operacyjne

Adobe Flash
Wykorzystanie w urządzeniach wbudowanych

Według Adobe Systems, ponad 300 milionów urządzeń przenośnych posiada


graficzne interfejsy użytkownika (GUI) oparte na technologii Adobe Flash,
a liczba ta ma przekroczyć 1 miliard w 2010 roku. Projektanci systemów
wbudowanych dla różnych gałęzi przemysłu w tym medycznego, także
przechodzą na technologię Flash, z prostego powodu – pozwala to na skrócenie
czasu budowy GUI nawet o 50%.
3D, nawet gdy korzystają one z różnych
Dowiesz się: Powinieneś wiedzieć: modeli rysowania?;
• Czym jest Adobe Flash; • Jak wykorzystać potencjał technologii Adobe • jak zapewnić stałą wydajność interfejsów
• Co to jest system wbudowany; Flash przy zachowaniu czasu rzeczywistego graficznych opartych na Flash przy róż-
• Co to jest HMI. i niezawodności systemu wbudowanego. nych obciążeniach? Interfejsy graficzne
większości systemów wbudowanych mu-
szą zawsze szybko reagować na dane wpro-
wadzane przez użytkownika, co wymaga
niające odpowiednie działanie technolo- pewnego poziomu kontroli ważności pro-
gii Flash na wyświetlaczach o rozdzielczo- cesów i wydajności;
Poziom trudności ści VGA i wyższej. Dla przykładu, w celu • jak zapewnić niezawodność interfejsu
uzyskania płynnej animacji dziesięciu kla- opartego na Flash? Czy istnieje możliwość
tek na sekundę, system wymaga proceso- monitorowania problemów i łagodnego
ra o minimalnej wydajności 100 MIPS, o wychodzenia z nich? Czy zawartość Flash

W
przeszłości, zespoły programi- wiele niższej od tej oferowanej przez więk- może współdziałać z krytycznymi proce-
stów musiały tłumaczyć prototy- szość dzisiejszych procesorów, która prze- sami systemowymi?;
py GUI na język C, C++ lub Java, kracza 300 MIPS. • jak kontrolować interakcje zawartości
co było żmudnym procesem, zajmującym całe Flash z usługami systemowymi, takimi jak
tygodnie lub miesiące. Zespoły otrzymują te- W odróżnieniu od uniwersalnych języków wyjście audio-wideo, wejście mikrofonu,
raz możliwość budowania GUI za pomocą za- programowania i narzędzi, Flash to środowi- ekrany dotykowe, systemy plików i stosy
awansowanych narzędzi Flash i uruchamiania sko graficzne i multimedialne dla określone- sieciowe?
zbudowanych interfejsów na wbudowanych go obszaru zastosowań, oferujące nieskończe-
odtwarzaczach Flash, bez konieczności pisa- nie wiele możliwości budowania interfejsów Zobaczmy jak te problemy mogą zostać roz-
nia kodu grafiki. użytkownika. Pozwala to projektantom sys- wiązane.
Flash nabiera rozpędu wśród projektantów temów wbudowanych na tworzenie anima-
systemów wbudowanych z wielu powodów: cji i efektów specjalnych o wiele szybciej niż Integracja programów Flash
tradycyjnymi metodami. Co więcej, certyfi- z innymi aplikacjami graficznymi
• ponad milion grafików na całym świecie kacja odtwarzaczy Flash przez Adobe zapew- Tradycyjny odtwarzacz Flash działa w prze-
korzysta z narzędzi Flash, co daje im do- nia, że aplikacje oparte na Flash działają tak sa- glądarce internetowej lub jest uruchamiany w
stęp do ogromnych zasobów wiedzy na te- mo niezależnie od platformy sprzętowej. Dzię- oknie. Projektowanie interfejsów może jednak
mat grafiki, z których mogą korzystać. Co ki temu, projektanci mogą stworzyć elementy zostać bardzo uproszczone, gdy postawimy ten
więcej, projektanci mają możliwość pro- interfejsu tylko raz i używać ich w systemach model na głowie i uczynimy z technologii Flash
stego zintegrowania tysięcy elementów przeznaczonych dla różnych rynków lub za- główne środowisko, z którego uruchamiane są
Flash już stworzonych dla urządzeń prze- kresów cenowych. pozostałe aplikacje graficzne, niezależnie od te-
nośnych i stacjonarnych; Implementacja Flash musi jednak rozwiązać go czy korzystają z tej samej technologii. Flash
• w porównaniu z odtwarzaczami Flash dla wiele problemów, by spełnić wymagania pro- sprawdza się świetnie jako system zarządzania
platform stacjonarnych, wbudowane od- jektanta. Oto niektóre z nich: ekranem, pozwalając projektantowi na pełną
twarzacze Flash od Adobe (takie jak Flash kontrolę nad przejściami pomiędzy menu i efek-
Lite 3) wymagają mniej pamięci operacyj- • jak połączyć zawartość Flash z inny- tami dźwiękowymi. Ułatwia również modyfika-
nej i zapewniają szybsze działanie przy mi programami graficznymi, takimi jak cje interfejsu, umożliwiając projektantom i pro-
mniejszym obciążeniu procesora; przeglądarki internetowe lub trójwymia- gramistom na dowolne zmiany pozycji, rozmia-
• procesory i układy graficzne dla systemów rowa nawigacja? Czy jeden wyświetlacz ru i ustawień elementów graficznych.
wbudowanych pozwalają na osiągnięcie jest w stanie pokazać jednocześnie grafi- Rysunek 1 prezentuje przykład użycia ele-
częstotliwości odświeżania grafiki zapew- kę opartą na Flash i natywną grafikę 2D/ mentu Flash jako menedżera ekranu. Program

48 12/2008
Adobe Flash w urządzeniach wbudowanych

po lewej stronie rysuje trójwymiarową mapę formy sprzętowej. Aplikacje mogą dzięki te- nika. Okoliczność taka oznacza błąd systemu.
w OpenGL ES, standardowym API dla grafiki mu działać, bez zmian kodu, na układach gra- W przypadku systemu zamkniętego, w którym
trójwymiarowej w systemach wbudowanych. ficznych wspierających inną liczbę warstw. API wszystkie przypadki użycia mogą być kontrolo-
Program załadował trzy elementy wprost do powinien również pozwalać projektantowi na wane, projektanci mogą uniknąć takich błędów
swojej przestrzeni: określenie, czy każda aplikacja sama zarządza systemu. Zapobieganie takim przypadkom sta-
swoją warstwą, czy istnieje centralny program, je się jednak o wiele trudniejsze w systemach,
• bibliotekę grafiki dwuwymiarowej, który zarządza tym, jak wiele aplikacji-klien- które muszą dynamicznie obsługiwać nowe da-
• bibliotekę OpenGL ES grafiki 3D, oraz tów dynamicznie współdzieli warstwy. ne lub aplikacje.
• sterownik grafiki kontrolujący hardware. Podział czasu pozwala na rozwiązanie te-
Zapewnienie go problemu. Za pomocą tej techniki, projek-
Ładowanie sterownika tym sposobem pozwa- przewidywalnych czasów reakcji tant systemu umieszcza elementy oprogramo-
la programowi na bezpośrednią kontrolę nad Wbudowany GUI powinien szybko reagować wania w osobnych partycjach i przydziela każ-
układem graficznym, tym samym zwiększając na komendy użytkownika, nawet jeśli system dej z nich gwarantowaną część czasu proce-
wydajność. Program po prawej to odtwarzacz wykonuje obciążające procesor czynności. Nie- sora. Projektant może na przykład przydzie-
Flash. Podobnie jak program OpenGL ES, tak- możliwe jest odtworzenie działania znanego z lić 20% czasu procesora interfejsowi graficz-
że ten bezpośrednio kontroluje układ grafiki, komputerów stacjonarnych. Zadanie staje się nemu, 20% odtwarzaniu MP3, 30% telema-
zapewniając wysoką wydajność. jeszcze trudniejsze, gdy wiele programów gra- tyce systemu głośnomówiącego, itd. Dzię-
Wiele układów graficznych dla systemów ficznych konkuruje o czas procesora. Jednym ki temu interfejs może reagować na działania
wbudowanych wspiera grafikę wielowarstwo- z rozwiązań jest stworzenie centralnego me- użytkownika szybko, niezależnie od tego, jak
wą, co pozwala programom w technologii Flash nedżera ekranu, który korzysta z priorytetów intensywnie działają procesy w innych party-
na bezproblemową integrację z innymi aplika- wątków przy określaniu który program graficz- cjach, nawet jeśli procesy te będą miały wyż-
cjami graficznymi na tym samym ekranie. Na ny powinien przejąć kontrolę nad procesorem. szy priorytet. Wynikiem jest zwiększenie sa-
Rysunku 1, odtwarzacz Flash rysuje na pierw- Przy tym podejściu, program (na przy- tysfakcji użytkownika.
szym planie i kontroluje rysowanie mapy trój- kład oparty na Flash odtwarzacz DVD), któ- Często zdarza się, że procesy w danej party-
wymiarowej w tle. By trójwymiarowa mapa ry chce dołączyć do środowiska graficznego, cji nie używają wszystkich cykli procesora przy-
była widoczna, projektant użył techniki chro- wysyła żądanie do menedżera ekranu. Mene- dzielonych dla tej partycji. Niektóre algorytmy
ma key na przedniej warstwie. Ponieważ grafi- dżer wyraża zgodę lub nie, zależnie od tego, szeregowania są w stanie to wykorzystać i dyna-
ka 3D i Flash są wyświetlane na niezależnych czy program ma wystarczające uprawnienia. micznie przydzielać nieużywany czas proceso-
warstwach, kontroler grafiki może odświeżyć Po dołączeniu, program uzyskuje dostęp do ra partycjom, które potrzebują dodatkowej mo-
mapę bez konieczności odświeżania zawartości wzajemnego wykluczenia (mutex). Gdy pro- cy. Podejście takie pozwala interfejsowi oparte-
Flash, co eliminuje migotanie i zmniejsza obcią- gram chce wyświetlić grafikę na ekranie, za- mu na Flash na szybsze i bardziej płynne dzia-
żenie procesora. czeka na mutex, uzyska go, wyrysuje grafikę łanie, gdy dostępne jest więcej czasu procesora.
Projektant mógł również użyć techniki mie- bezpośrednio do jednostki graficznej, a na- Pozwala również innym podsystemom oprogra-
szania kanału alfa w połączeniu z chroma key, stępnie zwolni mutex. Każdy program gra- mowania na szybsze działanie, gdy GUI nie po-
by uzyskać półprzezroczyste przyciski lub in- ficzny konkuruje o ten mutex na podstawie chłania całego czasu procesora, który został mu
ne elementy Flash. Projektant może następ- własnego priorytetu. Ponieważ program gra- przydzielony. Podział czasu procesora wspiera
nie umieścić półprzezroczyste przyciski bez- ficzny o najwyższym priorytecie zawsze uzy- wiele komercyjnych systemów operacyjnych,
pośrednio nad mapą 3D lub inną zawartością, ska mutex pierwszy, metoda ta zapewnia wy- co umożliwia korzystanie z tej metody podczas
a nie obok nich. Rysunek 3 pokazuje w jaki spo- soką wydajność oraz stałą wysoką szybkość projektowania.
sób umożliwia to zmieszczenie większej ilości działania interfejsu.
informacji na małym ekranie. Przy dużym obciążeniu procesora, np. pod- Zarządzanie błędami
Idealnie, system operacyjny lub szkielet gra- czas wyliczania trasy przez system w samo- By minimalizować przestoje systemu, wiele
ficzny zapewniają API wysokiego poziomu, chodzie lub synchronizacji dużych ilości da- wbudowanych systemów wymaga dynamicz-
które pozwala projektantowi na zastosowanie nych z iPoda, wydajność interfejsu może spaść nego odzyskiwania stabilności w przypadku
grafiki wielowarstwowej niezależnej od plat- do poziomu niedopuszczalnego dla użytkow- błędu. Opisany powyżej menedżer ekranu

������������ ����������� ����

���������� ���������������� �������������

����������������� �����������������

��������������� Rysunek 2. Interfejs wykorzystujący kanał alfa


do wyświetlenia półprzezroczystego ostrzeżenia
na ruchomej mapie. Ostrzeżenie i mapa znajdują
się na osobnych warstwach, więc kontroler
Rysunek 1. Integracja aplikacji Flash z aplikacjami graficznymi nie wykorzystującymi technologii Flash. W grafiki może odświeżyć mapę bez konieczności
tym przykładzie, program Flash kontroluje program nawigacji trójwymiarowej opartej na API 3D OpenGL ES odświeżania ostrzeżenia

www.sdjournal.org 49
Systemy operacyjne

mógłby dowiadywać się o błędach, które wy- • wykorzystanie zawartości Flash do uru- do następnego lub poprzedniego rozdzia-
stąpiły w aplikacjach graficznych, za pomo- chomienia i kontroli innej zawartości łu, itp. (środek ekranu);
cą systemu informowania o błędach, dostęp- Flash – wymaga to mechanizmów, któ- • silnika HMI (napisanego w technologii
nego z poziomu systemu operacyjnego, na re pozwolą nadrzędnej aplikacji Flash Flash), który kontroluje przyciski menu
którym działa. W przypadku błędu progra- na ładowanie, pozycjonowanie, urucha- głównego (dół ekranu).
mu Flash lub graficznego podczas rezerwa- mianie i zwalnianie podrzędnych apli-
cji muteksu, menedżer ekranu mógłby zwal- kacji Flash; W tym przykładzie, silnik HMI uruchamia i
niać taki mutex i przekazywać go następne- • umożliwienie komunikacji pomiędzy za- kontroluje wykonany w technologii Flash od-
mu programowi w kolejce priorytetu. Mene- wartością Flash i usługami systemu ope- twarzacz DVD (Flash kontroluje Flash). Fla-
dżer mógłby również odzyskiwać zasoby, któ- racyjnego – wymaga mechanizmu przeka- showy odtwarzacz DVD komunikuje się na-
re zajmował zawieszony program, oraz restar- zywania zapytań o dane. stępnie z usługą systemową odtwarzającą
tować taki program. Omówiliśmy sposób, w DVD za pomocą serwera HMI (zawartość
jaki podział czasu procesora może pomóc in- Rysunek 3 przedstawia przykład zarządza- Flash komunikuje się z natywną usługą syste-
terfejsowi graficznemu na szybkie i konse- nia tymi interakcjami. Silnik HMI pozwa- mu operacyjnego).
kwentne reagowanie na działania użytkow- la nadrzędnym aplikacjom Flash na zarządza- Serwer HMI powinien zapewniać asynchro-
nika. Może również zapewnić szybkie infor- nie podrzędnymi aplikacjami Flash (odtwa- niczną komunikację z usługami systemowymi.
mowanie o błędach i wykonywanie funkcji rzaczem multimedialnym, przeglądarką zdjęć, Metoda ta powstrzymuje silnik HMI, działają-
naprawczych, nawet podczas pracy z niskim itp.), podczas gdy serwer HMI tworzy bramę cy w kontekście odtwarzacza Flash, przed po-
priorytetem. Im szybciej funkcje takie zosta- dostępu do usług systemowych. wodowaniem braku reakcji lub odświeżania in-
ną uruchomione, tym łatwiej będzie im za- Zobaczmy, jak ten system może się sprawdzić terfejsu Flash.
pobiec rozwijaniu się błędów oprogramowa- w odtwarzaczu DVD. Na Rysunku 4 przedsta-
nia w poważne awarie. wiony jest interfejs składający się z: Podsumowanie
Powyższe przykłady pokazują, w jaki sposób
Interakcje z Flash • obszaru wyświetlającego film (górna poło- możliwe jest zachowanie czasu rzeczywiste-
By poprawnie zintegrować zawartość opartą na wa ekranu); go i niezawodności systemu wbudowanego,
Flash, projektanci systemów wbudowanych mu- • wykonanej w technologii Flash aplikacji przy jednoczesnym udostępnieniu projektan-
szą wziąć pod uwagę dwa rodzaje interakcji: kontrolującej odgrywanie, pauzę, przejście tom potencjału technologii Adobe Flash. Moż-
liwe stają się oparte na komponentach szkielety
���������� ������������� ���������� HMI, zdolne do łączenia aplikacji 2D i 3D, apli-
����� ��������� ��������
����������� ������� ������������ ������������ ������������ ��� kacji Flash i multimediów.
������������ ������������ ������������

RANDY MARTIN
Pracuje w firmie QNX Software Systems
Kontakt z autorem: randy@qnx.com

����������� ����������
����� ������

����������
������

����������������

�����������
���������� ������� ������������ ����
������ ������ ������ ������ ���
������

Rysunek 3. Architektura zarządzania interakcjami pomiędzy wieloma aplikacjami Flash, oraz pomiędzy
aplikacjami Flash i pozostałymi aplikacjami

O QNX Software Systems


QNX Software Systems, firma z grupy Harman International, to czołowy dostawca innowacyj-
nych technologii wbudowanych, w tym middleware, narzędzi programistycznych i systemów
operacyjnych. Oparte na komponentach architektury Systemu Operacyjnego Czasu Rzeczywi-
stego QNX Neutrino, pakiet programistyczny QNX Momentics oraz rodzina middleware QNX
Aviage tworzą razem najbardziej niezawodny i skalowalny szkielet do budowy systemów wbu-
dowanych. Wiodące firmy, takie jak Cisco, Daimler, General Electric, Lockheed Martin, i Siemens Rysunek 4. W tym przykładzie, odtwarzacz Flash
polegają na technologii QNX w produkcji routerów sieciowych, instrumentów medycznych, sa- uruchamia przyciski sterowania DVD, przyciski
mochodowych systemów telematycznych, systemów zabezpieczeń i obrony, robotów przemy- menu oraz pozostałą zawartość Flash, podczas
słowych oraz w innych zastosowaniach o krytycznym znaczeniu. Siedziba firmy mieści się w Ot- gdy sam odtwarzacz DVD uruchamiany jest na
tawie, w Kanadzie, i dystrybuuje swoje produkty w ponad 100 krajach. warstwie wideo znajdującej się za odtwarzaczem
Flash

50 12/2008
Testowanie oprogramowania

Podstawy
bezpieczeństwa Oracle
Prawie każdy system informatyczny zawiera w sobie bazę danych, a Oracle
wśród nich zajmuje miejsce szczególne. Jest to system o olbrzymiej liczbie
wdrożeń, działa na nim wiele istotnych usług, m.in. bankowych. Dlatego
warto znać zastosowane w nim mechanizmy bezpieczeństwa.

• przywileje systemowe, takie jak możli-


Dowiesz się: Powinieneś wiedzieć: wość łączenia się do bazy, quota na zaso-
• Jakie sposoby uwierzytelnienia oferuje Oracle? • Wskazana jest elementarna znajomość syste- by przestrzeni tabel, możliwość tworze-
• Jakie mamy dostępne możliwości zarządzania mów zarządzania bazami danych oraz Oracle. nia innych użytkowników itd.;
kontrolą dostępu? • przywileje pochodzące z ról – to przy-
• W jaki sposób możemy określać polityki haseł? wileje należące do dwóch poprzednich
• Jak możemy audytować działalność w bazie kategorii, ale nadane nie bezpośrednio,
danych? ale poprzez przypisanie użytkownikowi
danej roli.

cy uwierzytelniani zewnętrznie musieli W Tabeli 1 zamieszczono przywileje dostę-


mieć loginy poprzedzone prefiksem OPS$. pu do tabeli, które można nadać danemu
Poziom trudności W kolejnych wersjach wprowadzono para- użytkownikowi następującym wyrażeniem:
metr OS _ AUTHENT _ PREFIX , który pozwa-
la zdefiniować inny prefiks dla tego ty- GRANT INSERT, UPDATE, DELETE ON
pu kont. Użytkownika uwierzytelniane- stefan.dane_osobowe
Tworzenie użytkowników w Oracle, po- go jednokrotnie tworzymy w następują- TO marcin;
dobnie jak w innych systemach zarządza- cy sposób:
nia bazami danych, odbywa się poprzez po- Użytkownik marcin uzyskał tym samym
lecenie CREATE USER, a zmiany – poprzez CREATE USER marcin IDENTIFIED EXTERNALLY; możliwość wykonywania wszystkich ope-
ALTER USER. Tworząc użytkownika, trzeba racji DML na tabeli dane _ osobowe w sche-
przynajmniej określić jego login oraz meto- Kolejną metodą uwierzytelniania w Oracle macie stefan.
dę uwierzytelnienia. W przypadku użytkow- jest posłużenie się protokołem LDAP w ce- Jeśli dany przywilej powinien być dostęp-
nika uwierzytelnianego hasłem posługujemy lu uwierzytelnienia użytkownika w jakimś ny dla wszystkich, to zamiast wykonywać
się następującym wyrażeniem: zewnętrznym serwisie do tego celu prze- GRANT dla każdego użytkownika z osobna,
znaczonym, np. Kerberos. Konto tego typu można przypisać ten przywilej do specjal-
CREATE USER stefan IDENTIFIED BY tworzy się następująco: nego użytkownika PUBLIC. Wydając poniż-
TajneHaslo123; sze polecenie dajemy wszystkim użytkow-
CREATE USER roman IDENTIFIED GLOBALLY AS nikom bazy (także przyszłym) możliwość
Hasło TajneHasło123 zostanie zapisane w 'CN=firma, OU=tierX, wykonywania instrukcji SELECT na tabeli
tabelach słownikowych Oracle w posta- O=security, C=PL'; dane_osobowe ze schematu stefan.
ci zaszyfrowanej. Użytkownicy uwierzy-
telniani hasłami to nie jedyna możliwość Przywileje GRANT SELECT ON stefan.dane_osobowe TO
kontroli dostępu do bazy. Możemy stwo- Przywileje określają, jakie operacje na jakich PUBLIC;
rzyć użytkownika uwierzytelnianego jed- obiektach dany użytkownik może wykonać.
nokrotnie, poprzez system operacyjny. Ma Przywileje nadajemy poleceniem GRANT, a Należy jednak zachować wstrzemięźliwość
to na przykład zastosowanie w przypadku odbieramy je poleceniem REVOKE. W Oracle w nadawaniu uprawnień użytkownikowi
skryptów bazodanowych uruchamianych wyróżniamy trzy kategorie przywilejów: PUBLIC i wykonywać to tylko wtedy, gdy
automatycznie z poziomu systemu opera- jest to konieczne.
cyjnego. Jeśli nie chcemy zapisywać w nich • przywileje do obiektów, określające do-
haseł w postaci jawnej, możemy się posłu- stęp do obiektów bazodanowych (ta- Przekazywanie przywilejów
żyć właśnie tą możliwością. Począwszy od bel, widoków, pakietów, funkcji, proce- Jeśli dajemy konkretnemu użytkownikowi
Oracle w wersji 6, w której ta funkcjonal- dur, sekwencji itd.) należących do inne- możliwość wykonywania określonych opera-
ność została wprowadzona, użytkowni- go użytkownika; cji na którymś z naszych obiektów, możemy

52 12/2008
Mechanizmy kontroli dostępu

też pozwolić mu na przekazanie tego przy- także innym rolom. Rolę tworzymy nastę- W przypadku ról również możemy użyć
wileju innym użytkownikom. Rozważmy za- pująco: klauzuli WITH ADMIN OPTION w kontekście
tem następujące wyrażenie: uprawnień systemowych i będzie miała ona
CREATE ROLE straznik_teksasu; dokładnie takie samo znaczenie, jak w przy-
GRANT SELECT ON stefan.dane_osobowe TO padku użytkowników.
marcin WITH GRANT Przypisywanie przywilejów do ról odbywa się Role mają ciekawą cechę – możemy two-
OPTION; tak samo, jak do użytkowników. Po prostu w rzyć role chronione hasłem. Robi się to na-
miejsce loginu użytkownika wpisujemy na- stępująco:
Ta komenda nada Marcinowi przywilej czy- zwę roli. Uważny Czytelnik od razu powie:
tania tabeli dane _ osobowe, ale także prze- Hej! Zatem jest ograniczenie na nazwy ról, a CREATE ROLE potezny_user IDENTIFIED BY
kazania tej możliwości innemu użytkowni- mianowicie nie mogą się one konfliktować z na- tajne_haselko;
kowi. Marcin może teraz wykonać takie po- zwami użytkowników. Uważny Czytelnik ma
lecenie: rację. Nie mogą. Jeśli spróbujemy stworzyć Role można włączać i wyłączać. Ten sam
rolę o nazwie takiej, jaką ma istniejący użyt- użytkownik może mieć kilka sesji na tej sa-
GRANT SELECT ON stefan.dane_osobowe TO kownik, Oracle zaprotestuje. Nadajmy teraz mej bazie i w każdej z nich inne uprawnie-
anna; naszemu strażnikowi Teksasu jakieś prawa: nia. Ta niezwykle interesująca własność da-
je się wykorzystywać do bardziej precyzyj-
To polecenie wykona się poprawnie tylko GRANT SELECT, INSERT, UPDATE, DELETE ON nej realizacji zasady minimalnych przywi-
dlatego, że Marcin dostał jawne przyzwole- stefan.dane_osobowe lejów. Nawet jeśli danemu użytkownikowi
nie na tego typu operacje (poprzez klauzulę TO straznik_teksasu; potrzebne są dość silne przywileje, to z re-
WITH GRANT OPTION). Zauważmy, że Marcin
jednocześnie poskąpił takiej klauzuli An- Listing 1. Przykładowa funkcja weryfikująca długość hasła
nie, zatem ona już nie będzie mogła dalej
przekazać tego uprawnienia. CREATE OR REPLACE FUNCTION moja_funkcja
Cóż się jednak stanie, jeśli Marcin zosta- (username VARCHAR2
nie usunięty z bazy? Otóż Anna utraci przy- ,password VARCHAR2
wilej do tabeli stefan.dane_osobowe! To
bardzo ważna cecha przywilejów do obiek- ,old_password VARCHAR2
tów – Oracle pamięta nie tylko, kto jakie ) RETURN BOOLEAN
ma prawa dostępu do jakich danych, ale też
kto mu je przypisał. W czasie usuwania z ba- IS
zy użytkownika, usuwane są także przywi- BEGIN
leje do obiektów nadane przez niego innym
użytkownikom. -- Sprawdz minimalna dlugosc hasla
Gdyby Anna otrzymała ten sam przywi-
lej od więcej niż jednego użytkownika i przy- IF LENGTH(password) < 8 THEN
najmniej jeden z nich nie zostałby skasowa- raise_application_error(-20001,'Haslo powinno miec co najmniej 8 znakow');
ny, to Anna zachowałaby swój przywilej. END IF;
W przypadku przywilejów systemowych
działa to trochę inaczej. Po pierwsze, uży- -- Sprawdz, czy haslo nie jest podobne do loginu
wamy innej klauzuli. Aby nadać uprawnie- -- z dokladnoscia do wielkosci liter
nia do, powiedzmy, tworzenia indeksów na
dowolnej tabeli oraz możliwość przekazywa- IF regexp_like(password,username,'i') THEN
nia tego przywileju dalej, wydajemy następu- raise_application_error(-20002,'Haslo nie moze byc podobne do loginu');
jące polecenie: END IF;

GRANT index any table TO marcin WITH ADMIN -- Sprawdz, czy haslo zawiera co najmniej jedna cyfre,
OPTION; -- jedna litere i jeden znak przestankowy

Marcin może teraz stworzyć dowolny in- IF NOT( regexp_like(password,'[[:digit:]]')


deks w bazie oraz podzielić się tą możliwo- AND regexp_like(password,'[[:alpha:]]')
ścią z innymi. Załóżmy, analogicznie jak w AND regexp_like(password,'[[:punct:]]')
poprzednim przykładzie, że przekazał tę
możliwość Annie. Jeśli teraz Marcin zosta- ) THEN
nie zdropowany (tzn. zostanie wykonana
operacja DROP USER marcin;), to Anna za- raise_application_error(-20003,'Haslo musi zawierac co najmniej jedna cyfre '||
chowa swój przywilej. Przywileje systemo- 'jedna litere i jeden znak przestankowy');
we nie podlegają kaskadowemu kasowaniu, END IF;
jak to ma miejsce w przypadku przywilejów
obiektowych. -- haslo zdalo egzamin
RETURN(TRUE);
Role END;
Przywileje możemy grupować w role. Ro- /
le możemy przypisywać użytkownikom, ale

www.sdjournal.org 53
Testowanie oprogramowania

guły nie są mu niezbędne przez cały czas. Ról nie można wprost wyłączać. Można jed- cy konto na 10 minut po pięciu nieudanych
Możemy więc wykorzystać możliwość se- nak osiągnąć coś takiego poprzez użycie wa- próbach zalogowania się:
lektywnego włączania i wyłączania ról tak, riantu komendy SET ROLE . Wydajemy taką
aby właściwe uprawnienia były włączane komendę: CREATE PROFILE prod LIMIT
tuż przed wykonaniem krytycznej operacji FAILED_LOGIN_ATTEMPTS 5
i wyłączane tuż po. Włączanie roli wykonu- SET ROLE ALL EXCEPT potezny_user, PASSWORD_LOCK_TIME 10/1440;
je się następującą komendą: straznik_teksasu;
Wartości parametru PASSWORD _ LOCK _
SET ROLE straznik_teksasu; Spowoduje ona włączenie wszystkich ról TIME podajemy w dniach. Zamiast liczby
poza wymienionymi. Jeśli więc któraś z wy- dni, po których blokada zostanie automa-
W przypadku ról zabezpieczonych hasłami mienionych ról była włączona, to powyższa tycznie zniesiona, możemy podać słowo
należy naturalnie podać hasło: komenda ją wyłącza. Możemy przypisać da- kluczowe UNLIMITED. W takiej sytuacji je-
nemu użytkownikowi listę ról domyślnych. dyną metodą odblokowania konta będzie
SET ROLE potezny_user IDENTIFIED BY tajne_ Będą one nadane automatycznie zaraz po interwencja administratora i wydanie przez
haselko; zalogowaniu. Jeśli na tej liście znajdzie się niego polecenia ALTER USER xxxx ACCOUNT
rola zabezpieczona hasłem, to przy logowa- UNLOCK;
Jedną komendą możemy włączyć wiele ról niu użytkownik nie będzie musiał podawać Zasady ponownego wykorzystania hasła
naraz. Kolejne role oddzielamy przecinka- tego hasła. również określamy w profilu. Poniższa ko-
mi. Każda z ról na liście, którą trzeba włą- menda spowoduje, że użytkownicy posiada-
czyć hasłem, musi mieć klauzulę z hasłem Polityki zarządzania hasłami jący profil prod będą mogli ponownie nadać
podaną od razu. A więc włączając jednocze- Możemy wymusić na użytkownikach okre- sobie to samo hasło po upłynięciu 365 dni
śnie obie wymieniane wcześniej role, wyda- śloną złożoność hasła, częstotliwość jego i w międzyczasie hasło będzie musiało być
jemy następującą komendę: zmiany oraz zachowanie systemu w przy- zmienione 3 razy:
padku, gdy kilkukrotnie podawane jest nie-
SET ROLE potezny_user IDENTIFIED BY tajne_ prawidłowe hasło. Wszystkie te operacje CREATE PROFILE prod LIMIT
haselko, straznik_ możemy wykonać przy pomocy profili. Na- PASSWORD_REUSE_TIME 365
teksasu; stępująca komenda tworzy profil blokują- PASSWORD_REUSE_MAX 3;

Tabela 1. Przywileje dostępu do tabeli Jeśli chcemy wymusić określoną częstotli-


Nazwa przywileju Znaczenie wość zmiany hasła w już stworzonym pro-
filu prod, posłużymy się następującą ko-
SELECT Prawo do odczytywania danych z tabeli
mendą:
INSERT Prawo do dodawania krotek do tabeli
UPDATE Prawo do zmieniania danych tabeli ALTER PROFILE prod LIMIT
PASSWORD_LIFE_TIME 60
DELETE Prawo do kasowania elementów tabeli
PASSWORD_GRACE_TIME 20;
ALTER Prawo do zmiany struktury tabeli
Parametr PASSWORD _ LIFE _ TIME określa licz-
DEBUG Prawo do debugowania kodu PL/SQL triggerów bę dni życia hasła, natomiast PASSWORD _
określonych na tabeli
GRACE _ TIME oznacza liczbę dni, w trakcie
INDEX Prawdo do tworzenia indeksów dla tabeli których użytkownik będzie upominany, aby
REFERENCES Prawo do tworzenia kluczy obcych odwołują- zmienił swoje hasło. Po upłynięciu liczby dni
cych się do tabeli będącej sumą tych parametrów, użytkownik
zostanie zmuszony do zmiany hasła.
Możemy także określić wymogi złożoności
W Sieci hasła. W tym celu musimy stworzyć funkcję
weryfikującą o następującym nagłówku:
• http://www.oracle.com/technology/deploy/security/index.html –
centrum bezpieczeństwa Oracle
CREATE OR REPLACE FUNCTION moja_funkcja
• http://www.oracle.com/technology/deploy/security/alerts.htm –
Krytyczne aktualizacje ( username varchar2,
• http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/nanda_ password varchar2,
fga.html – old_password varchar2
tekst wprowadzający do audytu drobnoziarnistego ) RETURN boolean
• http://www.oracle.com/technology/deploy/security/database-security/advanced-security/
index.html –
tekst wprowadzający do zaawansowanych technik ochrony danych w Oracle Nazwa funkcji może być dowolna, funk-
• http://www.oracle.com/technology/deploy/security/database-security/database-vault/ cja jednak musi mieć trzy parametry typu
index.html – VARCHAR2 oraz zwracać wartość boolow-
opis technologii Oracle Database Vault ską (równą TRUE, jeśli wszystkie reguły two-
• http://www.oracle.com/technology/deploy/security/database-security/backup-encryption/ rzenia hasła zostały spełnione). Funkcja musi
index.html –
artykuł o szyfrowaniu backupów
być stworzona w schemacie SYS. Przykładowa
• http://www.oracle.com/technology/deploy/security/database-security/virtual-private- funkcja weryfikująca jest umieszczona w pli-
database/index.html – ku rdbms/admin/utlpwdmg.sql. Dzięki takiemu
technologia Oracle Virtual Database poziomowi elastyczności jesteśmy w stanie na-
pisać praktycznie dowolny kod weryfikujący.

54 12/2008
Możemy m.in. umieścić w bazie słownik języ- leceniem NOAUDIT. Na przykład rozważmy na-
ka polskiego (albo dowolny inny słownik uży- stępującą komendę:
wany przy atakach słownikowych) i spraw-
dzać, czy hasło się w nim nie znajduje. Doda- AUDIT select ON hr.employee_salary;
nie do profilu funkcji weryfikującej wykonuje
się następująco: Spowoduje ono logowanie każdego zdarze-
nia odczytu tabeli employee _ salary z przy-
ALTER PROFILE prod LIMIT PASSWORD_VERIFY_ kładowego schematu hr. Możemy też zadecy-
FUNCTION moja_ dować, czy chcemy logować po jednym zda-
funkcja; rzeniu dla każdej serii dostępów (BY ACCESS),
czy każdy dostęp z osobna (BY SESSION). Mo-
W przypadku, gdy chcemy wyłączyć tę żemy też ograniczyć regułę tylko do dostępów
opcję, wykonujemy komendę: udanych (WHENEVER SUCCESSFUL) lub tylko nie-
udanych (WHENEVER NOT SUCCESSFUL). Pozwa-
ALTER PROFILE prod LIMIT PASSWORD_VERIFY_ la to np. monitorować, czy ktoś nie próbuje od-
FUNCTION DEFAULT; czytać zawartości jakiejś ważnej tabeli, nie ma-
jąc do tego uprawnień. Poniższe zapytanie jest
OK, stworzyliśmy nasz wymarzony profil i rozszerzeniem poprzedniego o ograniczenie do
chcemy go przypisać danemu użytkowniko- wpisów udanych, po jednym dla każdej sesji:
wi. Robimy to w następujący sposób:
AUDIT select ON hr.employee_salary BY
ALTER USER stefan PROFILE prod; ACCESS WHENEVER
SUCCESSFUL;
W systemie istnieje też domyślny profil
dla wszystkich użytkowników o nazwie Listę założonych audytów możemy obej-
DEFAULT. Jeśli więc chcemy pewną regułę za- rzeć, uruchamiając następujące polecenie:
szczepianą przez profil wymusić na wszyst-
kich użytkownikach, możemy w tym celu SELECT audit_option, failure, success,
zmodyfikować profil DEFAULT. user_name
FROM dba_stmt_audit_opts
Audyt ORDER BY audit_option, user_name;
Oracle pozwala na monitorowanie i logowa-
nie wybranych zdarzeń bazodanowych. Wy- Wynik tego zapytania przydaje się, gdy chce-
niki audytu mogą być przechowywane w ba- my selektywnie wyłączać reguły audytu. Wy-
zie danych lub gdzieś w pliku. Następująca niki audytu (jeśli są przechowywane w bazie
komenda poleca Oracle przechowywać wy- danych) można obejrzeć nie tylko poprzez ta-
niki audytu w bazie danych w postaci roz- belę SYS.AUD$, ale i poprzez łatwiejsze w lek-
szerzonej (tzn. z wartościami zmiennych turze zapytanie:
bindowanych):
SELECT username, timestamp, action_name
ALTER SYSTEM SET audit_trail=EXTENDED FROM dba_audit_
SCOPE=SPFILE; trail;

Inne możliwe wartości parametru audit _ Podsumowanie


trail to DB (składowanie informacji w bazie Wyżej wymienione techniki kontroli dostępu
w postaci domyślnej), NONE (brak składowania) to zaledwie wierzchołek góry lodowej w boga-
oraz OS (składowanie w pliku). Po zmianie te- tym arsenale narzędzi Oracle. Zapoznanie się z
go parametru należy zrestartować instancję. nimi jest jednak niezbędne przed zabraniem się
W przypadku systemów uniksowych zapis za studiowanie bardziej zaawansowanych me-
do pliku będzie się odbywał domyślnie w ka- chanizmów, do czego wszystkich bardzo zachę-
talogu $ORACLE_HOME/rdbms/audit. Moż- cam. W Ramce zamieszczono linki do artyku-
na zmienić katalog przy pomocy parametru łów opisujących wybrane technologie związane
audit _ file _ dest. W przypadku zapisu do z bezpieczeństwem w systemie Oracle.
bazy danych zapisy są przechowywane w ta-
beli SYS.AUD$. CEZARY G. CEREKWICKI
Przy pomocy audytu możemy monitoro- Autor jest z wykształcenia informatykiem i polito-
wać wykonywanie określonych komend SQL, logiem. Pracował jako projektant, programista, ad-
zarówno pod kątem dostępu do określonych ministrator, konsultant, tłumacz, koordynator mię-
obiektów, jak i poleceń wymagających określo- dzynarodowych projektów, dziennikarz i publicy-
nego poziomu uprawnień. W wersji 10g poja- sta. Pisał programy w dziesięciu językach progra-
wiła się też nowa możliwość audytowania drob- mowania (od asemblerów po języki skryptowe), w
noziarnistego. czterech systemach operacyjnych, na dwóch plat-
Audytowanie włączamy poleceniem AUDIT, a formach sprzętowych.
wyłączamy analogicznie skonfigurowanym po- Kontakt z autorem: cerekwicki@tlen.pl

www.sdjournal.org 55
Testowanie oprogramowania

MS Windows CE 5.0
Emulacja na platformie x86

Urządzenia mobilne (np. Pocket PC, Smatrfon) stają się coraz bardziej
popularne. Przyczynia się do tego zarówno wzrost funkcjonalności jak i
coraz bardziej przystępna cena. Duża ilość tychże urządzeń wyposażona
jest przez producenta w system operacyjny klasy MS Windows CE oraz
dedykowane oprogramowanie, związane z jego przeznaczeniem.
Program domyślnie instaluje się w katalogu:
Dowiesz się: Powinieneś wiedzieć: C:\Program Files\Windows CE 5.0 Emulator\
• O niezbędnych wymaganiach systemowych; • Podstawy konfiguracji programów. Emulator_500.exe
• Jak zainstalować programy. Po uruchomieniu z menu: Start–>Programy-->
Microsoft Windows CE 5.0–>CE 5.0 Emulator–>
Sample CE Device ukazuje się domyślne okno z sys-
• Microsoft .NET Framework, version 1.1; temem operacyjnym emulowanego urządzenia.
• połączenie z Internetem. Otrzymaliśmy zatem w pełni funkcjonalny sys-
Poziom trudności tem, na którym można rozpocząć pracę. System
Ostatni z punktów tj. połączenie z internetem ten jeszcze można dostroić co będzie podane w na-
teoretycznie nie jest wymagane do instalacji MS stępnych krokach.
Windows CE 5.0 Device Emulator lecz próba in- Kolejnym (opcjonalnym) krokiem jest instala-

Z
naczna większość oferowanych na rynku stalacji bez dostępu do sieci Internet kończyła się cja pozostałych dwóch składników tj. Microsoft Po-
urządzeń posiada zewnętrzne interfej- najczęściej niepowodzeniem. cket PC 2003 SDK oraz Emulator Images for Win-
sy komunikacyjne, poprzez które można dows Mobile 2003 Second Edition. Składniki te za-
się komunikować z PC-tem. Taki interfejs umoż- Instalacja wierają dodatkowe obrazy emulowanego systemu.
liwia także wgrywanie własnych aplikacji. Jest to Przed rozpoczęciem prac instalacyjnych należy
ciekawe o tyle, że można tym sposobem znacznie pobrać ze stron Microsoftu następujące składniki Konfiguracja
zwiększyć funkcjonalność posiadanego przez nas oprogramowania: Dzięki możliwości parametryzacji podczas uru-
urządzenia. W przypadku jednak, gdy postanowi- chamiania emulowanego środowiska możemy
my sami zostać autorami oprogramowania, sprawa • Microsoft Windows CE 5.0 Device Emula- personalizować ustawienia, ustawić sieć, port sze-
się komplikuje o tyle, że napisane przez nas opro- tor – http://www.microsoft.com/downloads/ regowy i równoległy itp. Uruchomienie z parame-
gramowanie może posiadać błędy i przed wgra- details.aspx?familyid=A120E012-CA31- trem polega na wyedytowaniu skrótu do programu
niem jego na docelowe urządzenie wypada je wcze- 4BE9-A3BF-B9BF4F64CE72&displaylan- emulatora np.: Emulator_500.exe /CEImage Nk.bin
śniej przetestować. Dzięki udostępnianemu przez g=en; /Video 800x600x16 /Ethernet virtualswitch W Tabe-
Microsoft oprogramowaniu można skonfiguro- • Microsoft Pocket PC 2003 SDK – http:// li 1, przedstawione zostały przykładowe, możliwe
wać i emulować na stacjach PC w pełni funkcjo- www.microsoft.com/downloads/details.aspx?fa- parametry uruchomienia aplikacji.
nalne i wydajne środowisko Windows CE 5.0. Śro- milyid=9996B314-0364-4623-9EDE-0B5FB- Dzięki wymienionym opcjom można dowol-
dowisko to jak już wcześniej wspomniano, zdaje się B133652&displaylang=en; nie sterować uruchomieniem emulatora. W ko-
być przydatnym narzędziem dla programistów pi- • Emulator Images for Windows Mobile 2003 lejnej części zostaną omówione przykładowe kon-
szących aplikacje lub testerów oprogramowania Second Edition – http://www.microsoft.com/ figuracje.
dla urządzeń mobilnych wyposażonych właśnie w downloads/details.aspx?FamilyID=5c53e3b5-
Windows CE. Środowisko można skonfigurować f2a2-47d7-a41d-825fd68ebb6c&displaylan- Konfiguracja emulatora 1
tak aby wizualnie i funkcjonalnie przypominało i g=en. Należy wyedytować właściwości skrótu do urucho-
działało jak np. Pocket PC. Taka konfiguracja zosta- mienia programu emulatora. W polu element doce-
nie opisana w dalszej części artykułu. Instalację rozpoczynamy od uruchomienia pierw- lowy wpisujemy:
szego ze ściągniętych programów.
Wymagania systemowe W celu poprawnego przebiegu instalacji pro- "C:\Program Files\Windows CE 5.0 Emulator\
W celu zapewnienia poprawnej emulacji środowi- gram potrzebuje połączenia z Internetem, gdyż Emulator_500.exe" nk.cem /vmname
ska MS Windows CE 5.0 w oparciu o udostępnia- podczas kopiowania składników ściąga ze stron Mi- "CE 5.0 (CF 1.0)" /sharedfolder c:\
ne przez Microsoft narzędzia należy spełnić wy- crosoftu potrzebne do uruchomienia oprogramo- det /video 240x320x16
mienione niżej wymagania: wania biblioteki.
Teoretycznie instalacja bez połączenia z Inter- Wtedy otrzymamy przykładowe okno urucho-
• 500-MHz processor – zalecany!; netem też powinna być możliwa, jednak próba mionego emulatora ze zmienioną rozdzielczo-
• Microsoft Windows 2000 Professional SP4 jej przeprowadzenia kończyła się niepowodze- ścią (parametr /video) oraz zmapowanym udo-
lub Windows XP Professional SP1; niem. stępnionym, współdzielonym folderem c:\det

56 12/2008
Systemy konwersacyjne

ze stacją PC (parametr/sharefolder). Jak już W efekcie uruchomienia skryptu otrzymujemy Compact Framework zainstalowaną w emula-
wspomniano wcześniej folder, który ma być kompletny emulator urządzenia Pocket PC 2003 z torze sprawdzamy wpisując polecenie cgacutil w
współdzielony należy wcześniej utworzyć. działającymi klawiszami sterującymi. Jest to w peł- Start–>Run. W odpowiedzi otrzymamy komuni-
ni funkcjonalne narzędzie dla programisty i teste- kat z numerem wersji. Najprawdopodobniej bę-
Konfiguracja emulatora 2 ra aplikacji. dzie to wersja 1.0.3316.0 czyli kod odpowiadają-
Tym razem zmodyfikowane pole element docelowy cy .NET CF 1.0 SP2.
w skrócie do emulatora będzie miało postać tak jak Podsumowanie
na Listingu2. W artykule przedstawiono jak sprawnie i skutecz-
Tym razem w emulatorze uruchomiono obraz nie można na domowym PC skonfigurować w peł- ARTUR KORNEUSZ
urządzenia Poczet PC. ni funkcjonalne i wydajne środowisko Windows Autor jest z wykształcenia informatykiem-progra-
CE. Dodatkowym atutem emulowanego systemu mistą pracującym w dziale IT dużego przedsiębior-
Konfiguracja emulatora 3 jest fakt, iż posiada on zainstalowany .NET Com- stwa produkcyjnego (ponad 200 stacji PC). W wol-
Tym razem w celu uruchomienia emulatora użyj- pact Framework w wersji 1.0 z dodatkiem Service nym czasie autor zajmuje się rozwiązaniami z za-
my skryptu WSH napisanego w języku Visual Ba- Pack 2 (1.0.3316.0). Jest to szczególnie potrzebna kresu zdalnego sterowania, systemów wbudowa-
sic Script. Zawartość Listingu 1 należy skopiować i informacja dla osób pragnących uruchamiać apli- nych oraz rozwojem aplikacji webowych (PHP 4/5).
zapisać w pliku z rozszerzeniem .vbs. kacje napisane na platformie .NET. Wersję .NET Kontakt z autorem: artur.korneusz@op.pl

Tabela 1. Zestawienie możliwych wartości parametrów uruchomienia emulatora


Parametr Opis
/help Wyświetlenie informacji o możliwych parametrach uruchomienia emulatora.
/video <width>x<height>x<depth>" Ustawienie parametrów rozdzielczości w pikselach <dł>x<szer>x<kolor>
/memorysize <number> Ilość przydzielonej emulatorowi pamięci RAM, standardowo 48Mb.
/ethernet <mode> Ustawienie połączeń sieciowych. Parametr może przyjmować poniższe wartości:
· none (brak sieci)
· shared (połączenie przez NAT)
· virtualswitch (emulator używa pierwszego fizycznego interfejsu sieciowego)
· <MAC adres karty sieciowej> (Wyszczególniamy adres MAC interfejsu sieciowego, który chcemy
przypisać emulatorowi w formacie XX-XX-XX-XX-XX-XX)
/serialport1 <mapping> Ustawienie pierwszego portu szeregowego. Możliwe wartości:
· COM1
· COM2
· COM3
· COM4
· file:<filename>
/serialport2 <mapping> Ustawienie drugiego portu szeregowego. Możliwe wartości:
· COM1
· COM2
· COM3
· COM4
· file:<filename>
/parallelport <mapping> Ustawienie drugiego portu równoległego. Możliwe wartości:
· LPT1
· LPT2
· none
/skin <path> Skórka dla emulatora
/sharedfolder <path> Folder współdzielony ze stacją fizyczną. Wcześniej musi być utworzony na dysku lokalnym
/ceimage <path> Obraz, który ma zostać uruchomiony w emulatorze
/vmname <name> Nazwa emulatora, wyświetlana na pasku tytułowym okna

Listing 1. Przykładowy skrypt uruchamiający emulator start.vbs

Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
q = Chr(34)
strCommandLine = q & "C:\Program Files\Windows CE 5.0 Emulator\Emulator_500.exe" & q & " " & q & "C:\Program Files\Windows CE
Tools\wce420\POCKET PC 2003\Emulation\PPC_2003_WWE.bin" & q & " /sharedfolder " & q & "C:\det" & q & " /video
240x320x16" & " /ethernet shared"& " /skin " & q & "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\
Emulation\Pocket_PC_Emulator_Skin.xml" & q
WshShell.Exec(strCommandLine)

Listing 2. Skonfigurowane pole element docelowy


"C:\Program Files\Windows CE 5.0 Emulator\Emulator_500.exe" "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\PPC_
2003_WWE.bin" /sharedfolder c:\det /video 240x320x16

www.sdjournal.org 57
Programowanie PHP

Grafika w PHP
Wstęp do zaawansowanej obróbki grafiki w PHP

Jednym z kluczowych elementów każdego serwisu internetowego jest


grafika. Dzięki PHP w dynamiczny sposób możemy ją bez niczyjej ingerencji
uatrakcyjnić lub dostosować do naszych potrzeb.

ciem w formacie JPEG – nic nie stoi na prze-


Dowiesz się: Powinieneś wiedzieć: szkodzie, aby pracować na innych forma-
• Jak wykonać interesujące efekty graficzne • Konieczne są podstawy PHP; tach, ale pamiętaj o dobraniu odpowiedniej
przy użyciu PHP; • Przydatne będzie doświadczenie w obsłudze funkcji do danego pliku ponieważ funkcją
• Na jakiej zasadzie działają takie operacje jak biblioteki GD. imagecreatefromjpeg() otworzymy jedynie
szum czy rozmycie. pliki z rozszerzeniem .jpeg lub .jpg. Następ-
nie do zmiennych $width i $height zapisu-
jemy szerokość i wysokość wcześniej wczyta-
ekranach, począwszy od pierwszych telewi- nego obrazu.
zorów kolorowych a skończywszy na ogrom- Kod choć wydaje się być prosty ma jednak
Poziom trudności nych telebimach reklamowych. W technice jedną bardzo istotną wadę. Zwróć uwagę w
cyfrowej każdy z kanałów może przyjmować jaki sposób pobieramy piksele obrazu – po-
wartości od 0 do 255. Łatwo policzyć, że do przez zagnieżdżoną pętle wykonującą swo-
dyspozycji mamy paletę składającą się z po- ją zawartość dokładnie tyle razy z ilu pik-

P
HP oferuje dostęp do bardzo intere- nad 16 milionów różnych kolorów. seli składa się dany obraz. Dla niewielkie-
sujących bibliotek operujących na pli- go zdjęcia o rozdzielczości 800x600 daje to
kach graficznych. Jedną z nich jest po- Skala szarości prawie pół miliona pikseli, w rezultacie in-
pularna GD i to na niej będziemy bazować ze Pierwszym przykładem jaki wykonamy jest terpreter PHP ma niemało pracy bo 3,5 mi-
względu na jej powszechną dostępność i du- prosty efekt zamiany kolorowego zdjęcia do liona linijek kodu do przeczytania. Wyobraź
że możliwości.Jest zainstalowana na niemal zdjęcia w skali szarości. Jedną z prostszych sobie taki skrypt w jednym pliku zajmujący
każdym serwerze, jednak dla pewności po- i najczęściej stosowanych metod na tę ope- prawie 140MB na serwerze. Ponieważ skryp-
winniśmy to sprawdzić wywołując funkcję rację jest uśrednienie wszystkich trzech ka- ty PHP nie są kompilowane tylko interpre-
gd_info() oraz wyświetlając jej wynik. nałów RGB. Operacja ta polega na pobraniu towane znacząco odbija się to na ich wydaj-
wartości koloru każdego piksela z osobna, ności. Z tego powodu powinniśmy więc jak
var _ dump(gd _ info()); rozbiciu jego na trzy składowe, uśrednieniu najwięcej używać funkcji już skompilowa-
ich oraz zapisaniu nowej wartości. Przykład nych i zapisanych w bibliotekach PHP które
Osobiście pisząc ten artykuł dysponowałem takiego programu przedstawiony jest na Li- są zdecydowanie wydajniejsze od tych inter-
wersją 2.0.34. Używać jednak będziemy jedy- stingu 1. W pierwszej linijce kodu do zmien- pretowanych. W przypadku operacji na pli-
nie podstawowych funkcji dlatego z pewno- nej $image wczytujemy plik z naszym zdję- kach graficznych szczególnie polecam funk-
ścią wszystkie przykłady będą działały rów-
nież i na starszych wersjach tej biblioteki.
Zanim przejdziemy do części praktycz-
nej chciałbym napisać jeszcze dwa zdania
o sposobie reprezentacji kolorów w forma-
tach cyfrowych. Rozróżniamy kilka modeli
przestrzeni barw, najpopularniejszą i najczę-
ściej stosowaną jest RGB której skrót pocho-
dzi od zestawienia angielskich nazw trzech
kolorów podstawowych zwanych też kanała-
mi – Red, Green oraz Blue. Połączone ze so-
bą kanały tworzą jeden piksel. Odpowiednio
dobierając ich wartości możemy w rezultacie
uzyskać każdy kolor. Model ten stosowany
jest od wielu lat praktycznie we wszystkich Rysunek 1. Przykład rozmycia

58 12/2008
Grafika w PHP

cję imagefilter z której pomocą wykona-


my różne interesujące operacje – w tym
właśnie zamiana kolorowego obrazu do
skali szarości. Nasz program w przykładzie
pierwszym jest kilkadziesiąt razy wolniej-
szy od funkcji imagefilter wykonującej tę
samą czynność. W praktyce jednak nie za-
wsze ta funkcja jest dostępna dlatego powin-
niśmy to przewidzieć i w razie potrzeby wy-
korzystać swój odpowiednik. Na Listingu 2
możesz zobaczyć proste rozwiązanie.
Dodam, że aby zwiększyć wydajność na-
szego algorytmu powinniśmy maksymalnie
zoptymalizować kod. Proponowałbym za-
cząć od zwolnienia niepotrzebnie zajmowa-
nej pamięci serwera przez usunięcie wszyst-
kich zbędnych zmiennych. Zauważmy, że
zmienne $red, $green oraz $blue nie są tak
naprawdę nikomu potrzebne i lepiej jeśli by-
śmy ich w ogóle nie deklarowali tylko bezpo-
średnio wpisali ich wartości podczas oblicza-
nia $bwcolor. W ten sposób zyskamy nawet
do kilku procent wydajności a to bardzo wie-
le. Ze względu na czytelność Listingu zdecy-
dowałem się nie optymalizować kodu w ten
sposób.

Szum monochromatyczny
Kolejnym ciekawym przykładem operacji na
plikach graficznych jaki wykonamy będzie
efekt szumu monochromatycznego. Przed
Rysunek 2. Zdjęcie przed efektem rozmycia poziomego
przystąpieniem do programowania powinni-
śmy zastanowić się nad odpowiednim algoryt-
mem takiej operacji. Szum to nic innego jak lo-
sowe drgania wartości kolorów poszczególnych
pikseli. W przypadku szumu monochroma-
tycznego jednakowej zmianie ulegają wszystkie
trzy składowe koloru.
Jest to już nieco bardziej rozbudowana
operacja od tej z którą zapoznaliśmy się w
przykładzie pierwszym. Początek jest typo-
wy, wczytujemy zdjęcie oraz pobieramy je-
go szerokość i wysokość. Następnie deklaru-
jemy zmienną $intensive od której głównie
zależy końcowy efekt. Odpowiada ona za si-
łę wcześniej wspominanych drgań o czym za-
raz się przekonamy. Dwie zagnieżdżone w
sobie pętle oraz sposób rozbicia pikseli na
trzy składowe są już Tobie znane z poprzed-
niego przykładu. Dłużej przyjrzyjmy się ko-
lejnym linijkom kodu. Zmienna $rand za-
wiera wylosowaną liczbę całkowitą w prze-
dziale od -$intensive do +$intensive. Na-
stępnie za jej pomocą w prosty sposób reali-
zujemy idee drgań kolorów pikseli. Przykła-
dowo dla $intensive = 30 końcowa wartość
każdego z kanału może wzrosnąć lub zma-
leć o 30. Pamiętajmy, że wartość koloru nie
może być mniejsza od 0 ani większa od 255
dlatego wprowadziliśmy po dwa wyjątki dla
każdego z kanału. Spróbuj teraz samodziel-
nie tak zmienić program, aby uzyskać efekt
szumu kolorowego. Przypomnę, że w prze-
ciwieństwie do szumu monochromatycz- Rysunek 3. Zdjęcie po efekcie rozmycia poziomego

www.sdjournal.org 59
Programowanie PHP

nego w którym takiej samej zmianie ulega-


Listing 1. Zamiana kolorowego zdjęcia do skali szarości ją wszystkie kanały koloru efekt szumu kolo-
$image = imagecreatefromjpeg('photo.jpg'); rowego wymaga niezależnych drgań każdego
// Pobieramy wymiary zdjęcia kanału z osobna.
$width = imagesx($image);
$height = imagesy($image); Rozmycie poziome
// Pętla dzięki której pobierzemy każdy piksel i wykonamy na nim operacje Ostatnim efektem jaki wykonamy jest roz-
for ($x=0 ; $x < $width ; $x++) { mycie poziome. Jeżeli popatrzysz przez za-
for ($y=0 ; $y < $height ; $y++) { parowane szkiełko zobaczysz, że obraz za
$rgb = imagecolorat($image, $x, $y); nim staje się niewyraźny. W jaki sposób jed-
// Rozbijamy kolor na jego trzy kanały nak zinterpretować taki efekt żeby był on
$red = ($rgb >> 16) & 0xFF; zrozumiały dla komputera dla którego każ-
$green = ($rgb >> 8) & 0xFF; dy obraz to tylko ciąg pikseli i nic więcej?
$blue = $rgb & 0xFF; Spójrz na Rysunek 1. Ukazuje on rezultat
// Uśredniamy wszystkie składowe koloru działania typowego efektu rozmycia. Po le-
$bwcolor = round(($red + $green + $blue) / 3); wej stronie widzimy, że kod kreskowy jest
// Zamieniamy kolorowy piksel do skali szarości dokładnie wyraźny. Zauważmy co dzieje się
$color = imagecolorallocate($image, $bwcolor, $bwcolor, $bwcolor); z nim po przepuszczeniu go przez filtry roz-
imagesetpixel($image, $x, $y, $color); mywające o różnych mocach. Obraz staje się
} coraz bardziej nieczytelny, zanika tło przez
} co trudniej jest nam dostrzec sam kod. Czar-
ne kreski wtapiają się w białe tło zmniejsza-
// Zapisujemy gotowe zdjęcie w skali szarości jąc pomiędzy sobą kontrast. Widzimy, że ob-
imagejpeg($image, 'grayscale.jpg', 80); raz staje się jednolity, piksele upodobnia-
ją się wzajemnie do siebie. Rozmycie jest to
Listing 2. Sprawdzanie dostępności funkcji imagefilter nic innego jak zbliżanie się do siebie warto-
if (function_exists('imagefilter')) { ści kolorów sąsiednich pikseli.
// Nakładamy na zdjęcie filtr jeżeli serwer obsługuje funkcję imagefilter Przeanalizujmy teraz Listing 4. Większość
imagefilter($image, IMG_FILTER_GRAYSCALE); fragmentów z pewnością znasz z poprzed-
} else { nich przykładów dlatego skupimy się tyl-
// Tutaj nasza alternatywna funkcja dla serwerów z brakiem funkcji imagefilter ko na sercu całej operacji. Zaczyna się ono
} wraz ze sprawdzeniem przy pomocy funkcji
isset() czy został zdefiniowany kolor po-
Listing 3a. Efekt szumu monochromatycznego przedniego piksela. Po co w ogóle to spraw-
$image = imagecreatefromjpeg('photo.jpg'); dzamy? To dość istotne ponieważ pierwszy
piksel obrazu nie posiada swojego poprzed-
$width = imagesx($image); nika. Pozbawiając kodu tego warunku jed-
$height = imagesy($image); nocześnie uznalibyśmy tym samym, że po-
przednik pierwszego piksela który nie ist-
$intensive = 25; nieje ma kolor czarny (wartości wszystkich
składowych koloru wynosiłby 0). W rezulta-
for ($x=0 ; $x < $width ; $x++) { cie przykładowo na błękitnym niebie otrzy-
for ($y=0 ; $y < $height ; $y++) { malibyśmy w lewym górnym rogu delikat-
$rgb = imagecolorat($image, $x, $y); ną, czarną kreskę co chyba nie wyglądałoby
za dobrze. Dlaczego jednak sprawdzamy tyl-
$red = ($rgb >> 16) & 0xFF; ko kanał czerwony a nie wszystkie trzy? Nie
$green = ($rgb >> 8) & 0xFF; warto sprawdzać wszystkich składowych ko-
$blue = $rgb & 0xFF; loru bo jeżeli zdefiniowany jest jeden to zde-
finiowane też są pozostałe. W ten prosty
// Losujemy wartość zmiennej odpowiadającej za drgania sposób zwiększymy wydajność całej opera-
$rand = rand(-1 * $intensive, $intensive); cji. Następnie tworzymy pętlę w której cie-
le uśredniamy wartości kolorów aktualne-
// Obliczamy nową wartość koloru dla kanału czerwonego go piksela oraz poprzedniego. Pętla ta wyko-
$red = $red + $rand; na się dokładnie tyle razy ile wynosi zmien-
// Realizujemy wyjątki dla kanału czerwonego na $intensive. Nietrudno zauważyć, że im
if ($red > 255) $red = 255; większa wartość tej zmiennej tym piksele
if ($red < 0) $red = 0; są do siebie bardziej upodobniane co w re-
zultacie przekłada się na siłę rozmycia. Po
// Obliczamy nową wartość koloru dla kanału zielonego tej czynności modyfikujemy aktualny pik-
$green = $green + $rand; sel, zapamiętujemy jego kolor i przechodzi-
// Realizujemy wyjątki dla kanału zielonego my do operacji na kolejnym pikselu. Końco-
if ($green > 255) $green = 255; wy efekt dla $intensive = 6 możesz zoba-
if ($green < 0) $green = 0; czyć na Rysunku 2 oraz 3. Opierając się o ten
przykład zastanów się w jaki sposób wyko-

60 12/2008
Grafika w PHP

nać efekt rozmycia pionowego. Podpowiem, w rezultacie uzyskać rozmycie na całej po- Co dalej po wstępie do zaawansowanej ob-
że nie musisz wcale zmieniać ciała pętli, wy- wierzchni. Pamiętaj też, że efekt ten mo- róbki grafiki w PHP? Dalsza zabawa. Wy-
starczy, że odpowiednio zmodyfikujesz spo- żesz uzyskać również przez użycie funkcji zwaniem może być napisanie algorytmu wy-
sób pobierania poszczególnych pikseli. Spró- imagefilter. Staraj się korzystać z niej jak ostrzającego zdjęcie który bardzo ogólnie uj-
buj również połączyć oba te programy, aby najczęściej a zyskasz na wydajności. mując jest odwrotną operacją do procesu
rozmycia – kolory pikseli zamiast zbliżać,
Listing 3b. Efekt szumu monochromatycznego oddalają się od siebie. Przed tym warto jed-
nak na rozgrzewkę spróbować czegoś prost-
// Obliczamy nową wartość koloru dla kanału niebieskiego szego, na przykład negacji kolorów czy filtru
$blue = $blue + $rand; typu sepia. Dla najbardziej ambitnych za-
proponować mogę automatyczne usuwanie
// Realizujemy wyjątki dla kanału niebieskiego efektu czerwonych oczu.

if ($blue > 255) $blue = 255; Podsumowanie


if ($blue < 0) $blue = 0; Mam nadzieje, że zachęciłem choć część czy-
telników do dalszej zabawy z obróbką gra-
$color = imagecolorallocate($image, $red, $green, $blue); fiki używając PHP. Artykuł jest zaledwie
imagesetpixel($image, $x, $y, $color); wstępem do tego zagadnienia o którym moż-
} na by pisać wielotomowe książki. Jednak na-
} wet najbardziej opasłe księgi nigdy nie zastą-
pią doświadczenia i własnych prób. Oczywi-
imagejpeg($image, 'noised.jpg', 80); ste jest też, że największe ilości wiedzy przy-
chodzą drogą zabawy, a w tematyce obrób-
Listing 4. Rozmycie poziome ki grafiki można przypomnieć sobie radość
$image = imagecreatefromjpeg('photo.jpg'); minionego dzieciństwa. Jeśli ono jeszcze To-
bie nie minęło to radości nigdy za wiele. Je-
$width = imagesx($image); żeli masz tylko jakieś problemy z urucho-
$height = imagesy($image); mieniem przedstawionych przykładów, py-
$intensive = 6; tania lub propozycje to napisz do mnie na
a@br-design.pl.
for ($y=0 ; $y < $height ; $y++) { Na zakończenie chciałbym jeszcze udzie-
for ($x=0 ; $x < $width ; $x++) { lić jednej prostej lecz istotnej rady. Operując
na plikach graficznych używając PHP pamię-
$rgb = imagecolorat($image, $x, $y); taj, że zdecydowana większość takich pro-
gramów jak przedstawione w tym artyku-
$red = ($rgb >> 16) & 0xFF; le bazuje na dwóch zagnieżdżonych w sobie
$green = ($rgb >> 8) & 0xFF; pętlach, które umożliwiają nam na łatwy do-
stęp do każdego piksela. Dla zwiększenia wy-
$blue = $rgb & 0xFF; dajności staraj się maksymalnie ograniczyć
ich ilość. Dobrym przykładem może być pe-
// Sprawdzamy czy zdefiniowany jest kolor poprzedniego piksela wien serwis społecznościowy który umożli-
wia swoim użytkownikom przesłanie zdjęcia
if (isset($p_red)) { które następnie zostanie zmniejszone do od-
for ($i = 0 ; $i < $intensive ; $i++) { powiednich rozmiarów i zamienione do ska-
li szarości. Bardzo istotne jest tutaj zachowa-
// Uśrednij kolor aktualnego piksela oraz poprzedniego nie kolejności. Wyobraź sobie, że ktoś prze-
syła formularzem zdjęcie o rozdzielczości
$red = ($red + $p_red) / 2; dziesięciu megapikseli. Jaka byłaby odpo-
$green = ($green + $p_green) / 2; wiedź jeżeli w pierwszej kolejności wyko-
$blue = ($blue + $p_blue) / 2; nalibyśmy operacje konwertowania zdjęcia
} do skali szarości? To zależy od serwera, ale
} najprawdopodobniej po kilkudziesięciu se-
kundach oczekiwania na jakiś wynik użyt-
$color = imagecolorallocate($image, $red, $green, $blue); kownik otrzymałby niezbyt miły komunikat
imagesetpixel($image, $x, $y, $color); od przeglądarki. Dlatego tak ważna jest ko-
// Zapamiętaj kolor piksela lejność wykonywanych operacji – najpierw
$p_red = $red; skalowanie do żądanych rozmiarów a dopie-
$p_green = $green; ro potem wszelkie efekty.
$p_blue = $blue;
} ADAM BLOK
} Autor jest studentem informatyki na Uniwersytecie
Gdańskim, freelancerem oraz programistą w gdań-
imagejpeg($image, 'blurred.jpg', 80); skiej agencji interaktywnej br-design.pl.
Kontakt z autorem: a@br-design.pl

www.sdjournal.org 61
Programowanie PHP

Własny słup
ogłoszeniowy
Przygotowanie oraz publikacja aplikacji na serwerze
Gdy już zadbaliśmy o przygotowanie działającej aplikacji, czas na dopracowanie
kilku detali, dzięki którym naszą aplikację można uznać za profesjonalnie
wykończoną. W drugiej części zaprezentuję, w jaki sposób możemy zamieścić
aplikację na serwerze oraz w sprawny sposób ją aktualizować.
Strona błędu 404
Dowiesz się: Powinieneś wiedzieć: Strona błędu 404 pokazuje się w sytuacji, gdy
• W jaki sposób przygotować przyjazne komu- • W jaki sposób stworzyć aplikację z symfony; wprowadzany przez użytkownika adres nie ist-
nikaty błędów; • Jak zbudowana jest aplikacja w symfony; nieje. Symfony posiada zdefiniowany domyśl-
• Jak zadbać o zadeklarowanie odpowiednich • Jak korzytać z protokołów FTP oraz SSH. ny moduł default, pokazujący komunikat błędu
meta-informacji w nagłówku aplikacji; 404. Jednak wygląd ten z całą pewnością różni
• W jaki sposób na bieżąco aktualizować aplika- się od wyglądu naszej aplikacji i może zdezorien-
cję na serwerze. tować niejednego użytkownika albo – co ważniej-
sze – nie świadczyć zbyt korzystnie o profesjonal-
nym wykonaniu aplikacji.
Metainformacje możemy również zmieniać Zacznijmy od wyłączenia domyślnych komu-
dla określonej akcji. Dla przykładu możemy nikatów błędów. Otwórzmy plik settings.yml, a na-
Poziom trudności ustawić, aby w konkretnym ogłoszeniu po- stępnie wykasujmy w atrybucie enabled_modules
kazywany był jego tytuł jako tytuł całej stro- moduł default. Utworzymy swój własny domyśl-
ny. Wystarczy wtedy dopisać na końcu akcji ny moduł, wprowadzając w katalogu projektu ko-
executeShow(): mendę:

W
poprzednich artykułach przygoto-
waliśmy dobrze działającą aplikację. $this->getContext()->getResponse()- > symfony init-module postup default
Ale czy na prawdę możemy powie- >setTitle($this->ad-
dzieć, że nasza aplikacja jest skończona? >getTitle()); Przyjrzyjmy się jeszcze plikowi settings.yml. Gdy
nie mamy zdefiniowanych parametrów error _
Metainformacje naszej aplikacji Strony błędów 404 _ module oraz error _ 404 _ action, Symfo-
Do tej pory nasza aplikacja posiadała tytuł symfo- Przed opublikowaniem aplikacji warto spraw- ny wywołuje domyślnie moduł default oraz ak-
ny project. Zarówno konfigurację tytułu, jak i in- dzić, czy wszystko wygląda i działa tak, jak się cję error404. Korzystając z tej wiedzy, utworzy-
nych metainformacji możemy dokonać w pliku tego spodziewamy. my akcję error404 w pliku actions.class.php, na-
view.yml znajdującym się w katalogu postup/apps/ szego domyślnego modułu (w katalogu postup/
postup/config/. Zdefiniujemy tam: Domyślny moduł apps/postup/modules/default/actions/).
W sytuacji gdy nie posiadamy skonfigurowa-
• title – tytuł aplikacji widoczny w tytule nego pliku reguł rutowania, symfony urucha- class defaultActions extends sfActions
okna przeglądarki lub wynikach wyszukiwa- mia domyślny moduł i akcję zdefiniowaną pod {
nia; ustawmy Serwis ogłoszeniowy; parametrami default_module oraz default_ public function executeError404()
• robots – informacja dla robotów wyszu- action w pliku settings.yml (w katalogu postup/ {
kiwarek; domyślnie ustawione jest index, apps/postup/config/). }
follow zezwalające na zapamiętywanie W związku z tym, że posiadamy skonfigu- }
stron; rowany plik routing.yml ta sytuacja nas nie do-
• description – opis strony; widoczny w wy- tyczy. Zachęcamy jednak do uporządkowania Następnie utworzymy szablon wyglądu erro-
nikach wyszukiwania; ustawmy Serwis ogło- ekranu i wprowadzenia poprawnych informa- r404Success.php z odpowiednim komunikatem
szeniowy stworzony na potrzeby PHP Starterkit cji o domyślnym module i akcji: (Listing 1).
o frameworku symfony;
• keywords – słowa kluczowe; ustawmy ogło- all: Strona dla wyłączonej
szenia, serwis, symfony; .actions: aplikacji oraz przypadki
• language – zdefiniowanie domyślnego języ- pojawienia się krytycznego błędu
ka; ustawmy pl; default_module: advertisement Przed uruchomieniem naszej aplikacji na ser-
• author – informacje o twórcy strony. default_action: list werze, powinniśmy zadbać jeszcze o odpowied-

62 12/2008
Własny słup ogłoszeniowy

nie wyglądy dwóch ekranów – ekranu wyłą- projektu. Aby szybko to zrobić, wystarczy za- padku kolejnego przesłania marnujemy czas na po-
czonej aplikacji oraz w przypadku pojawienia mrozić (z ang. freeze) aplikację komendą: nownym przesłaniu całego projektu lub na prze-
się problemu z poprawnym otwarciem stro- glądaniu które pliki się zmieniły od poprzedniej
ny. W związku z tym, że oba te ekrany urucha- > symfony freeze aktualizacji. Przesyłanie selektywne zmienionych
miane są w sytuacji, gdy uruchomienie symfo- plików może również rodzić problemy z pojawia-
ny nie jest zakończone poprawnie, ich wyglądy która automatycznie przeniesie zawartość kata- jącymi się błędami w trakcie przesyłania niekom-
nie są załadowywane z żadnego modułu w na- logi lib/ oraz data/ w odpowiednie miejsce, doda pletnego projektu.
szej aplikacji, tylko z katalogu web/errors/. Defi- potrzebne pliki do katalogu web/ oraz odpowied- Z pomocą przychodzi przygotowana w symfo-
niujemy tam: nio ustawi plik konfiguracyjny. Po zamrożeniu, ny, zdalna synchronizacja rsync, wykorzystująca
można zamieszczać bibliotekę na serwerze, bez protokół SSH. Rsync odpowiada za wydajną przy-
• plik error500.php: w którym zamieszczamy dbania o bibliotekę PEAR na serwerze, czy zdefi- rostową metodę przesyłania plików na serwer, któ-
informacje, która ma się pojawić w przypad- niowane inne wersje biblioteki, również symfony, ra w odróżnieniu do FTP przesyła jedynie zmie-
ku wystąpienia wewnętrznego błędu serwera na serwerze. W przypadku konieczności odmroże- nione pliki na serwer. Samą synchronizację z ser-
(z ang. internal server error); nia, możemy podać komendę: werem można dokonać prostą komendą:
• plik unavailable.php: który pojawia się w
przypadku wyłączenia aplikacji lub gdy trwa > symfony unfreeze > symfony sync produkcyjny
czyszczenie cache'a
która usunie poprzednio dokonane zmiany. Jednak aby ta komenda zadziałała poprawnie, na-
Wysyłanie gotowej leży odpowiednio skonfigurować połączenie, w
aplikacji na serwer Zdalna synchronizacja rsync pliku w pliku config/properties.ini naszego projek-
Gotową zamrożoną aplikację, nareszcie bez pro- tu. Przykładową konfigurację zamieszczamy na
Zamrażanie aplikacji blemów możemy wrzucić na serwer. Przy wy- Listingu 2. Samo wywołanie komendy symfony
Przygotowana przez nas aplikacja, aby popraw- syłaniu, możemy oczywiście skorzystać z trady- rsync spowoduje wyświetlenie listy plików, któ-
nie działała na serwerze musi posiadać bibliote- cyjnej metody przesyłania przez FTP. Jednak jest re wymagają synchronizacji, bez kopiowania. Je-
ki symfony lib/ oraz data/ w katalogu naszego ona przyjemna tylko za pierwszym razem, w przy- żeli chcemy dokonać synchronizacji, potwierdza-
my nasz wybór, dopisując na końcu go:
Listing 1. Strona szablonu wyglądu dla nieistniejących stron.
> symfony sync produkcyjny go
<h3 class="red">Strona o podanym adresie nie istnieje.</h3>
<p>Strona, której szukasz, mogła zostać usunięta, zmieniono jej nazwę lub jest Po dokonanej synchronizacji, bezwzględnie mu-
tymczasowo niedostępna.</p> simy pamiętać o wyczyszczeniu pamięci pod-
<p><?php echo link_to('Strona główna', '@homepage') ?></p> ręcznej, komendą:

Listing 2. Odpowiednio skonfigurowane połączenie > symfony cc


name=postup
Podsumowanie
[produkcyjny] Na przykładzie naszego słupa ogłoszeniowego
host=postup.symfony.pl przedstawiłem jeden skrawek potęgi w funkcjo-
port=22 nalności symfony w budowaniu profesjonalnych
user=uzytkownik aplikacji internetowych. W ciągu wielu lat pra-
dir=/home/kowalski/postup/ cy w tym frameworku w firmie TeamLab, mogę
śmiało polecić go wszystkim tym, którzy planują
zbudować szybko i profesjonalnie program, któ-
ry może sięgać dużych oglądalności i być tworzo-
Czy aplikacja jest gotowa? ny przez spore zespoły programistów. Na koniec
• Nadaj aplikacji odpowiednie metainformacje w pliku konfiguracji view.yml (takie jak tytuł, in- pozostaje mi tylko życzyć sukcesów w pracy. W ra-
formacje dla robotów, opis, słowa kluczowe czy język); zie pytań, odsyłam do serwisu polskiej społeczno-
• Zadbaj o odpowiedni wygląd błędów typu 404, 500 czy stron bezpieczeństwa. Po usta- ści symfony: http://www.symfony.pl.
wieniu tych stron należy wyłączyć w enabled _ modules moduł default z konfiguracji
settings.yml;
• Sesje korzystające z ciasteczek (ang. cookies) w przeglądarce oraz same ciasteczka nazywa-
ją się domyślnie symfony. Przed opublikowaniem aplikacji powinno się ukryć informację, że PIOTR PLENIK
aplikacja korzysta z Symfony; Współzałożyciel firmy TeamLab.pl, specjalizującej się
• Plik robots.txt znajdujący się w katalogu web/ domyślnie jest pusty. Należy zdefiniować, jakie w wytwarzaniu oprogramowania klasy enterprise. Re-
informacje roboty indeksujące z wyszukiwarek powinny zapamiętywać, a jakie nie; daktor serwisu www.symfony.pl. Programista PHP od
• Przeglądarki internetowe przy ładowaniu twojej strony będą chciały pobrać plik favicon.ico
ośmiu lat, od dwóch lat tworzący biznesowe aplikacje
przy pierwszym otwarciu strony. Zadbaj o reprezentacyjną ikonę dla aplikacji, widoczną w
pasku adresu lub po dodaniu do Ulubionych. Sprawia to wrażenie nie tylko kompletnej apli- w Symfony. Programista Stowarzyszenia Klon/Jawor
kacji, ale również zapobiega pojawianiu się dużej liczby błędów 404 w logo serwera. przy największym Ogólnopolskim Portalu dla Organi-
zacji Pozarządowych www.ngo.pl. Student ostatniego
roku Polsko-Japońskiej Wyższej Szkoły Technik Kom-
puterowych. Interesuje się zarządzaniem projekta-
Rsync dla Windowsa mi biznesowymi oraz open source, programowaniem
Windowsowi użytkownicy mogą wykorzystywać alternatywne oprogramowanie do wykorzystu-
jące metodę rsync, zwanej cwRsync. (PHP, ASP.NET, Java), a także bazami danych (MS SQL,
Strona programu: www.itefix.no/cwrsync/ Postgres, MySQL).
Kontakt z autorem: piotr.plenik@teamlab.pl

www.sdjournal.org 63
Programowanie urządzeń mobilnych

Programowanie
gier dla Symbian OS
Rozwijamy grę
W poprzedniej odsłonie cyklu zbudowaliśmy pierwszą, grywalną wersję
projektu LaserQuest. W niniejszym odcinku skupimy się na rozszerzeniu
funkcjonalności wspomnianej gry, analizując przy tym takie kluczowe
składniki warsztatu programisty Symbian OS jak deskryptory oraz
operacje wejścia/wyjścia na plikach.
rQuest? Sprawa może wydawać się banalna, ale
Dowiesz się: Powinieneś wiedzieć: nie jest to do końca zgodne z prawdą. Pierwszy
• Na co zwrócić uwagę przy projektowaniu gier • Jak się programuje w języku C++; pomysł, który mi przyszedł do głowy był następu-
dla urządzeń mobilnych; • W jaki sposób zbudowana jest bazowa wersja jący – skoro LaserQuest bazuje na pomyśle Laser-
• Jak obsługiwać napisy w aplikacjach pod Sym- LaserQuest, opisana w poprzednim odcinku manii, to być może warto przyjrzeć się jak kwestia
bian OS korzystając z deskryptorów; cyklu. logiki gry została rozwiązana w oryginale. Orygi-
• Jak oprogramować operacje wejścia/wyjścia nalna wersja gry (wydana na małe Atari) była ty-
na plikach pisząc aplikacje dla Symbian OS. tułem dość ambitnym – gracz miał do pokona-
nia 53 etapy, przy czym dysponował pięcioma ży-
ciami. Co prawa w grze nie występowały wrogie
wadzanie rozgrywki – sterowanie ruchami prze- jednostki atakujące nasz pojazd, aczkolwiek sto-
ciwników, obsługa fizyki piłki oraz graczy itd. Z sunkowo łatwo można było zapędzić się w przy-
Poziom trudności kolei logika gry, to pojęcie szczersze – obejmujące słowiowy kozi róg, czyli poprzez błędne i nieod-
aplikację całościowo. Na poziomie logiki gry silnik wracalne ustawienie elementów planszy – zna-
meczu jest tylko pojedynczym klockiem. W war- leźć się w sytuacji kiedy dany poziom stawał się
stwie logiki aplikacji musimy oprogramować za- niemożliwy do ukończenia. W takim przypadku
Rozwijamy grę! sady wszystkich możliwych trybów gry – Puchar pozostawało jedynie wcisnąć klawisz Esc i rozpo-
Mam nadzieję, że wszyscy Czytelnicy niniejsze- Świata, rozgrywki ligowe, mecze towarzyskie itd. cząć dany etap od początku – oczywiście z liczni-
go cyklu artykułów mieli okazję uruchomić ro- Tutaj podejmujemy decyzje czy gra – jako całość kiem żyć pomniejszonym o jeden. Teoretycznie,
boczy projekt LaserQuest, opracowany w ramach – zakończyła się sukcesem czy porażką. Na pozio-
poprzedniego odcinka. Ci którzy zadali sobie ten mie warstwy logiki zarządza się też zazwyczaj pro-
trud muszą przyznać, że sama rozgrywka daje co cesem zapisywania i odczytywania stanu gry.
prawda wiele radości i satysfakcji, aczkolwiek pro- Warto zastanowić się, jak powyższe rozważa-
gram jako całość, trudno nazwać pełną grą. W dzi- nia odnoszą się do LaserQuest? Sprawa jest pro-
siejszym odcinku skupimy się na rozszerzeniu ist- sta – w naszym projekcie potrzebujemy warstwy,
niejącej postaci LaserQuest o elementy typowe w której umieścimy kod odpowiedzialny za podej-
grom o podobnym gatunku. Przy tej okazji na- mowanie decyzji w stylu, który poziom wczytać ja-
uczymy się obsługi operacji wejścia/wyjścia i po- ko kolejny?, lub czy ukończenie aktualnego poziomu
znamy mechanizm deskryptorów w Symbian OS. równoważne jest z zakończeniem całej gry?. Ta wła-
śnie warstwa definiować będzie logikę gry Lase-
Warstwa logiki gry – koncepcja rQuest. Co uważniejsi Czytelnicy pamiętają za-
Tym razem na warsztat weźmiemy przede wszyst- pewne, że przy projektowaniu architektury na-
kim warstwę logiki gry. Pojęcie logika gry często szej aplikacji przewidzieliśmy tę ewentualność i
mylone jest z takimi pojęciami jak silnik gry, bądź przygotowaliśmy sobie miejsce, w którym doce-
logika silnika gry. Aby dobrze zrozumieć różni- lowo miał się znaleźć kod odpowiedzialny za tego
ce pomiędzy tymi pojęciami posłużę się następu- typu funkcjonalność. Mowa oczywiście o klasach
jącym przykładem. Rozważmy grę piłkarską – w CLaserQuestGame, CLaserQuestGamePlayMode
której sterując wybraną drużyną – odbywamy ko- oraz CLaserQuestGameMenuMode.
lejne rozgrywki, pnąc się po szczeblach hierarchii Skoro na poziomie koncepcyjnym wiemy już
ligowej bądź walcząc o Puchar Mistrzostw Świata. co chcemy zrobić i mamy wpasowaną tę koncep- Rysunek 1. Wyrenderowany poziom gry
W tym przypadku głównym silnikiem gry będzie cję w całokształt architektury aplikacji – pora za- odpowiadający danym zapisanym w pliku
ta część programu, która odpowiada za przepro- dać sobie pytanie: jak ma wyglądać logika Lase- konfiguracyjnym z Listingu 2

64 12/2008
Programowanie gier dla Symbian OS

można by podobny mechanizm zaimplemento- Listing 1. Implementacja funkcji wczytującej dane określonego poziomu gry z pliku
wać w LaserQuest, ale zastanówmy się czy rze-
czywiście będzie to najlepsze z możliwych roz- void CLaserQuestGameBoardEngine::LoadGridDataAndResetL(
wiązań. Ja dla przykładu jestem w stanie wyobra- const TDesC& aFileName )
zić sobie całkiem realistyczną sytuację kiedy to {
– pozbawiony przez moją uroczą małżonkę stan- RFs fs;
dardowego środka lokomocji (czytaj samochodu) User::LeaveIfError( fs.Connect() );
– zmuszony jestem udać się do pracy za pośred- CleanupClosePushL( fs );
nictwem środków komunikacji miejskiej. Załóż-
my, że w trakcie tej – około 30 minutowej – po- RFileReadStream reader;
dróży, dla zabicia czasu gram w LaserQuest, prze- reader.PushL();
chodząc powiedzmy – 5 etapów. Dojeżdżam do User::LeaveIfError( reader.Open( fs,
pracy – i co dalej? Mógłbym teoretycznie pozo- aFileName,
stawić aplikację działającą w tle – Symbian jest EFileRead ) );
przecież systemem obsługującym wiele aplika-
cji działających jednocześnie (pilni Czytelnicy TBuf8< KLaserQuestCoreGridMaxWidth > gridLine;
pierwszego docinka niniejszego cyklu pamięta-
ją zapewne, że w sytuacji utraty focus'a pętla na- for ( TInt y = 0;
szej gry zostanie wstrzymana) – i kontynuować y < KLaserQuestCoreGridMaxHeight; ++y )
zabawę wracając do domu. Aczkolwiek istnie- {
je niebezpieczeństwo, iż w międzyczasie (np. w reader.ReadL( gridLine );
trakcie przerwy obiadowej) chciałbym pochwa- for ( TInt x = 0;
lić się koledze swoją nową grą i dać mu do przej- x < KLaserQuestCoreGridMaxWidth; ++x )
ścia pierwszy etap – na próbę. W tej sytuacji mu- {
siałbym przerwać swoją grę. Oczywiste jest z ko- if ( '+' == gridLine[ x ] )
lei, że wracając po południu do domu chciałbym {
kontynuować grę od miejsca, w którym ją zakoń- iOriginalVehiclePosX =
czyłem. Esencję opisanej wyżej sytuacji można x + KGuardRingWidth;
streścić w jednym zdaniu – większość (o ile nie iOriginalVehiclePosY =
wszystkie) gry mobilne mają charakter dorywczy y + KGuardRingWidth;
(ang. casual). Gramy w nie na przystanku – cze- iOriginalGridData
kając na autobus, stojąc w kolejce do kasy albo nu- [ x + KGuardRingWidth ]
dząc się na zebraniu (oczywiście tak, aby nikt nie [ y + KGuardRingWidth ] =
widział:)). Projektowanie dobrych gier typu casu- EEmpty;
al to wielka sztuka i jednocześnie olbrzymie wy- }
zwanie dla projektantów gier. Chciałbym wszyst- else
kich Czytelników mojego cyklu uczulić bardzo {
iOriginalGridData
[ x + KGuardRingWidth ]
[ y + KGuardRingWidth ] =
Field2Tile( gridLine[ x ] );
}
}
reader.ReadInt16L(); // Skips \r\n sequence.
}

const TInt numChar2ValOffset = '0';

iVehicleDir =
static_cast< TDirection >(
reader.ReadInt8L() - numChar2ValOffset );
iBeamEmmiterActiveSide =
static_cast< TTileSide >(
reader.ReadInt8L() - numChar2ValOffset );
iBeamOrientation =
static_cast< TBeamOrientation >(
reader.ReadInt8L() - numChar2ValOffset );

CleanupStack::PopAndDestroy(); // reader
CleanupStack::PopAndDestroy(); // fs

Rysunek 2. Efekt działania funkcji


CLaserQuestGamePlayMode::DrawOptionsAndLe Reset();
velCounter: informacje o numerze etapu i opcjach }
użytkownika w czasie rozgrywki

www.sdjournal.org 65
Programowanie urządzeń mobilnych

mocno na ten problem – szczególnie tyczy się to rozwiązaniem byłoby dynamiczne wczytywa- Operacje wejścia-wyjścia
osób, które planują pisać własne gry na urządze- nie danych planszy z zewnętrznego pliku. Po- na plikach w Symbian OS
nia mobilne. Moja propozycja odnośnie logiki gry dejście takie ma szereg zalet – przede wszyst- Ciało przedstawionej na Listingu 1 funkcji
LaserQuest wygląda następująco: kim grubą kreską rozgranicza pracę programi- LoadGridDataAndResetL rozpoczyna się od
sty od pracy projektanta poziomów. Definicja trzech niewiele mówiących linii kodu:
• gracz ma do pokonania określoną ilość eta- funkcji implementującej wspomniany mecha-
pów następujących po sobie sekwencyjnie; nizmu znajduje się na Listingu 1. RFs fs;
• rezygnujemy z koncepcji wprowadzania Jak widać, nowa funkcjonalność dodana zo- User::LeaveIfError( fs.Connect() );
takich mechanizmów jak licznik żyć czy stała w klasie CLaserQuestGameBoardEngine. CleanupClosePushL( fs );
ograniczenie czasu gry; Ktoś mógłby w tym momencie zapytać – sko-
• użytkownik może w każdej chwil prze- ro cały czas mówimy o implementacji warstwy Dla programistów nieobeznanych z tajnikami
rwać grę – w takiej sytuacji program auto- logiki, to czemu nie dodaliśmy tej funkcjonal- programowania systemowego pod Symbian OS,
matycznie sprawdza numer etapu na któ- ności w klasie CLaserQuestGamePlayMode.? przedstawiony urywek kodu wygląda nieco eg-
rym zakończyła się gra i jeśli etap ten nig- Odpowiedź jest prosta – rozwiązanie takie by- zotycznie. Już spieszę z wyjaśnieniami. Otóż u
dy nie został osiągnięty, zapisuje numer te- łoby pogwałceniem zasady ukrywania infor- podstaw filozofii Symbian OS leży założenie, iż
go poziomu w pamięci stałej telefonu; macji, jako że funkcja przedstawiona na Listin- wszystkie kluczowe usługi systemu operacyjne-
• przy każdym kolejnym uruchomianiu apli- gu 1 musi mieć dostęp do prywatnych składo- go są bardzo intensywnie chronione. Aby uzy-
kacji, gracz może rozpocząć rozgrywkę od wych silnika planszy. Warto jednak zauważyć skać ten efekt, projektanci Symbiana wbudowa-
etapu, który został wcześniej zapamiętany. pewien interesujący fakt – otóż przedstawio- li w swój system specyficzne rozwiązanie znane
na wyżej funkcja jest absolutnie niezależna od jako infrastruktura klient/serwer (ang. Client-
Przy tak zaprojektowanej logice gry mamy warstwy logiki – nie określamy tutaj, który Server Framework). Rozwiązanie jest o tyle spe-
pewność, że użytkownik będzie chętnie po- etap będzie wczytywany; ta decyzja będzie po- cyficzne, iż wspomniana infrastruktura stano-
wracał do gry w naszą mobilną przeróbkę La- dejmowana na wyższym poziomie. Przeanali- wi część systemu operacyjnego i nie ma abso-
sermanii. Wypada przy tym nadmienić, iż – zujmy krok po kroku implementację funkcji z lutnie nic wspólnego z Internetem czy siecia-
ze względu na ewidentne obniżenie poziomu Listingu 1 – zacznijmy od jej sygnatury. Już mi komputerowymi. Mówiąc w dużym uprosz-
trudności rozgrywki – warto zadbać o dużą sama nazwa, LoadGridDataAndResetL, niesie czeniu – serwer reprezentuje usługę systemo-
liczbę, ciekawych i stopniowo coraz trudniej- ze sobą dwie cenne informacje. Po pierwsze wą, zaś klient – kod, który z tej usługi korzysta.
szych etapów do pokonania. – postfix L mówi nam, że funkcja może rzu- Klient i serwer komunikują się ze sobą jedynie
cić symbianowy wyjątek (korzystając ze slan- w ramach ściśle określonego protokołu, zaś in-
Czas zakasać rękawy... gu polskich programistów symbianowych formacje są przesyłane przy pomocy bezpiecz-
...i zająć się kodowaniem. Zastanówmy się, cze- można też powiedzieć, że ta funkcja może zle- nych mechanizmów komunikacji międzypro-
go brakuje nam do uzyskania opisanej wyżej aveować). Po drugie – nazwa funkcji sugeru- cesowej (ang. Inter Porcess Communication, IPC)
funkcjonalności. Przede wszystkim – musimy je, że odpowiada ona za dwie operacje – wczy- – jako, że klient i serwer działają w odrębnych
zaimplementować mechanizm wczytywania tanie danych planszy oraz zresetowanie silni- procesach systemu operacyjnego. Takie podej-
danych kolejnych poziomów. W pierwotnej ka. Podejście takie – pomimo tego, iż łamie za- ście ma w założeniu twórców Symbian OS za-
wersji LaserQuest dane etapu zostały zakodo- sadę przypisywania danej funkcji jednego, ja- pobiegać nadużywaniu i gubieniu zasobów sys-
wane na stałe w pliku źródłowym z implemen- sno określonego zadania – ma w tym przypad- temowych.
tacją silnika planszy (plik LaserQuestGameBo- ku rację bytu, gdyż wspomniane operacje są ze Po przeczytaniu powyższego wywodu nie-
ardEngine.cpp, funkcja ResetGridData()). sobą ściśle powiązane. Jako argument funkcji trudno zgadnąć, iż operacje na plikach w Sym-
Oczywistym jest, że zaszywanie tego rodza- otrzymujemy deskryptor (czytaj: napis) re- bian OS są zaimplementowane właśnie w taki
ju informacji w kodzie nie jest dobrą prak- prezentujący ścieżkę, wskazującą na plik za- sposób. Klasa RFs reprezentuje tzw. sesję komu-
tyką. W naszym przypadku o wiele lepszym wierający interesujące nas dane. O deskryp- nikacji z serwerem plików (według konwencji
torach będę pisał w dalszej części niniejszego symbianowej klasy, których nazwa poprzedzo-
Listing 2. Przykładowa specyfikacja poziomu artykułu. To, na czym chciałbym skupić teraz na jest prefixem R reprezentują uchwyty do
gry LaserQuest uwagę to Operacje wejścia-wyjścia na plikach w zasobów; w tym konkretnym przypadku mó-
Symbian OS. wimy o uchwycie od sesji komunikacji z ser-
.#..###@....
#.#.......#.
......#.#...
..#.....#%##
....#*......
+......#...#
.....##.....
#%#.%..#.##.
.....#@.....
....#..#.##.
..#.........
...#%.#.#...
$#....#..@#.
#.....#..#..
#..#..%....#
#..@..#.....
130
Rysunek 3. Klatki animacji efektu wsuwania się planszy

66 12/2008
Programowanie gier dla Symbian OS

werem zaalokowanej gdzieś po stronie syste- mocy operacji CleanupClosePushL(). Dzięki przekazywana jest flaga EFileRead, co oznacza
mu operacyjnego). Wywołanie fs.Connect() temu, przy automatycznym zwijaniu stosu (np. – tylko do odczytu.
skutkuje podłączeniem do serwera plików (ja- w sytuacji gdy funkcja zleaveuje), na wskaźniku Zanim przejdziemy do opisu kolejnego
ko, że operacja ta może się nie udać, korzysta- do sesji wywołana będzie operacja Close(). fragmentu kodu, warto spojrzeć na Listing
my z funkcji User::LeaveIfError, która rzu- Kolejne trzy operacje w funkcji 2, na którym zaprezentowana jest przykłado-
ci symbianowy wyjątek gdy przekazany do niej LoadGridDataAndResetL są koncepcyjnie bar- wa specyfikacja poziomu LaserQuest; pomo-
kod błędu jest inny niż KErrNone). Jako, że pro- dzo podobne do tych opisanych powyżej – tyle, że ona zrozumieć co się dalej dzieje w funkcji
gramista jest zobowiązany do zamknięcia sesji że tym razem otwieramy za pośrednictwem se- LoadGridDataAndResetL.
po zakończeniu pracy z nią – w kolejnej linij- sji (fs) – strumień do konkretnego pliku. War- Zastosowana reprezentacja jest bardzo pro-
ce wkładamy sesję na stos czyszczenia, przy po- to zauważyć, że przy otwieraniu strumienia sta – poszczególnym elementom na planszy
odpowiadają określone znaki, np. kropka (.) re-
Listing 3. Implementacja metody CLaserQuestGameBoardEngine::Field2Tile() prezentuje puste pole, zaś gwiazdka (*) określa
pozycję emitera wiązki lasera. Wygląd planszy
CLaserQuestGameBoardEngine::TTile opisanej na Listingu 2 przedstawiony jest na
CLaserQuestGameBoardEngine::Field2Tile( TText8 aField ) Rysunku 1. Taka, a nie inna reprezentacja wy-
{ brana została głównie ze względu na prostotę
switch ( aField ) edycji – znając odpowiednie zasady, każdy mo-
{ że sobie stworzyć własną planszę przy pomocy
case '.': return EEmpty; zwykłego edytora tekstu. Warto w tym miej-
case '#': return EMirrorWall; scu zauważyć, że przy produkcji prawdziwych
case '@': return ESensor; gier stosuje się zazwyczaj binarne formaty po-
case '%': return EMirrorBlock; ziomów, generowane automatycznie przez edy-
case '$': return EExit; tory zaimplementowane jako narzędzia wspo-
case '*': return EBeamEmmiter; magające produkcję danego tytułu. Edytory
case 'X': return EWall; takie odpowiadają zazwyczaj również za wali-
default: return EEmpty; dację generowanych danych – w celu odciąże-
} nia samej gry. W naszym przypadku – zarówno
} za edycję, jak i za walidację, odpowiada osobi-
ście twórca gry – na kwestię tę uczulam szcze-
Listing 4. Implementacja metody CLaserQuestGamePlayMode::UpdateL() gólnie tych Czytelników, którzy zdecydują się
void CLaserQuestGamePlayMode::UpdateL( TInt64 aDt ) eksperymentować i tworzyć własne plansze do
{ LaserQuest (do czego oczywiście serdecznie za-
iBoardEngine->Update( aDt ); praszam!).
Znając postać pliku z opisem planszy łatwo
if ( iKeyState & KKeySoftRight ) odgadnąć jak działa dalsza część naszej funkcji
{ wczytującej. Zewnętrzna pętla for odpowiada
iMenuKeyPressed = ETrue; za czytanie linii przedstawionego pliku. War-
} to zauważyć, że przy wczytywaniu danych do
else if ( iBoardEngine->IsSolved() ) deskryptora (tj. obiektu reprezentującego na-
{
++iLevel;

if ( iLevel > iMaxAchievedLevel )


{
++iMaxAchievedLevel;
}

if ( iLevel > KLevelCounter )


{
iMenuKeyPressed = ETrue;
iLevel = 1;
iMaxAchievedLevel = 1;
}
else
{
ReloadLevelL();
}
}
else if ( iKeyState & KKeySoftLeft )
{
iBoardEngine->Reset();
}
} Rysunek 4. Menu gry LaserQuest z aktywną opcją
Restart

www.sdjournal.org 67
Programowanie urządzeń mobilnych

pis), nie podajemy w sposób bezpośredni ilo- sujące kierunek pojazdu oraz konfigurację Na samym końcu pozostaje zresetować sil-
ści bajtów do przeczytania – funkcja ta od- emitera wiązki. Wartości te są enumeracja- nik planszy – na szczęście do tego celu mamy
czyta tyle danych ile deskryptor jest w stanie mi przyjmującymi jedną z czterech możli- już gotową funkcję – Reset(), więc możemy ją
pomieścić (w naszym przypadku – KLaserQ wych wartości – dlatego też w pliku są one spokojnie wykorzystać.
uestCoreGridMaxWidth znaków). Wewnętrz- opisane wartościami całkowitymi z zakresu
na pętla odpowiedzialna jest za rozkodowanie 0 do 3. Rozważmy przykładowy odczyt ta- Warstwa logiki gry
zawartości odczytanej linii i ustawienie odpo- kiej wartości: – implementacja – podejście #1
wiednich wartości planszy. Warto też zwrócić Tak oto mamy gotowy pierwszy klocek po-
uwagę na pomocniczą funkcję Field2Tile(), iVehicleDir = trzebny do implementacji warstwy logi-
która tłumaczy przekazywany znak na odpo- static_cast< TDirection >( ki naszej gry. Spróbujmy zastosować funkcję
wiednią wartość enumeracji reprezentującej reader.ReadInt8L() - LoadGridDataAndResetL() w praktyce. Na począ-
składniki planszy. Do zapoznania się z zawar- numChar2ValOffset ); tek dodajmy w klasie CLaserQuestGamePlayMode
tością tej funkcji (Listing 3), zachęcam przede dwie składowe:
wszystkim te osoby, które chciałyby pobawić Warto tu zwrócić uwagę na rzutowanie prze-
się w projektowanie własnych planszy – sta- kształcające odczytaną wartość na typ enu- TInt iLevel;
nowi ona swoistą ściągawkę. Nieco groźnie meracji. Trzeba też pamiętać, że odczytana TInt iMaxAchievedLevel;
przedstawiający się typ argumentu przekazy- z pliku wartość to tak naprawdę kod ASCII
wanego do tej funkcji (TText8), to odpowied- znaku – dlatego trzeba ją przekonwertować Składowa iLevel przechowywać będzie war-
nik zwyczajnego typu char wbudowanego w na liczbę z zakresu <0, 3> odejmując od niej tość poziomu, który jest aktualnie rozgrywa-
język C++. wartość znaku 0 (zapisanej w postaci stałej ny, zaś w zmiennej iMaxAchievedLevel pro-
To, o czym warto pamiętać dodatkowo, to numChar2ValOffset). gram będzie pamiętał największą wartość
fakt, iż poszczególne linie w pliku opisującym Kolejna kwestia tyczy się zdjęcia ze stosu i etapu, do którego udało się dotrzeć graczo-
poziom gry LaserQuest odseparowane są dwu zwolnienia zasobów zaalokowanych przez ser- wi. Warto tu zwrócić uwagę na sposób inicja-
znakową sekwencją \r\n, stąd na końcu każdej wer plików – strumienia do pliku oraz sesji ko- cji tych składowych w ich macierzystej klasie.
iteracji pętli zewnętrznej pojawia się wywoła- munikacyjnej. Odpowiadają za to następujące Pierwsza z nich zawsze będzie miała w trakcie
nie reader.ReadInt16L();, powodujące przej- dwie linie kodu: tworzenia obiektu klasy przypisaną wartość 1,
ście na początek kolejnego wiersza. zaś druga będzie przekazywana z zewnątrz.
Poza główną pętlą funkcji CleanupStack::PopAndDestroy(); // reader Dlaczego jest to rozwiązane tak, a nie inaczej
CleanupStack::PopAndDestroy(); // fs – opiszę nieco później.
LoadGridDataAndResetL() Logika zarządzająca nowymi składowymi
Obydwa wyrażenia są tożsame ze zdjęciem ukrywa się w metodzie
pozostały nam jeszcze trzy rzeczy do zrobie- danego obiektu ze stosu czyszczenia i z wy- CLaserQuestGamePlayMode::UpdateL()
nia. Najpierw trzeba wczytać wartości opi- wołaniem na nim metody Close(). (Listing 4).
Kluczowe zmiany w tej metodzie wią-
Listing 5. Implementacja metody CLaserQuestGamePlayMode::ReloadLevelL() żą się z uaktualnianiem wartości składowych
iLevel oraz iMaxAchievedLevel w momen-
void CLaserQuestGamePlayMode::ReloadLevelL() cie przechodzenia pomiędzy etapami. W tej
{ sytuacji należałoby również wczytać zawar-
TFileName levelFilePath; tość kolejnego poziomu – wydaje się, że zna-
#ifdef __WINS__ leźliśmy właściwe miejsce w którym moż-
_LIT( KAppDrive, "c:" ); na zastosować funkcję opisaną w poprzednim
levelFilePath.Format( KLaserQuestLevelFilePathFormat, punkcie. Spójrzmy na implementację metody
&KAppDrive, ReloadLevelL(), przedstawionej na Listingu
iLevel ); 5. Tutaj właśnie znajdziemy wywołanie meto-
#else dy LoadGridDataAndResetL().
levelFilePath.Format( KLaserQuestLevelFilePathFormat, To co potrzebne nam do szczęścia – w przy-
&iAppDrive, padku tej metody, to ścieżka do pliku z danymi
iLevel ); odpowiedniego etapu. Tutaj pojawia się ważkie
#endif // __WINS__ pytanie – gdzie powinniśmy przechowywać te-
iBoardEngine->LoadGridDataAndResetL( levelFilePath ); go rodzaju informacje. Ja zdecydowałem się
} umieścić je w tzw. prywatnym katalogu aplika-
cji. Katalog taki opisany jest następującą ścież-
Listing 6. Konstruktor klasy CLaserQuestDocument: pobieranie informacji o miejscu instalacji ką w systemie plików urządzenia: !:\private\.
programu Uważnych Czytelników zastanawia zapewne
CLaserQuestDocument::CLaserQuestDocument( fakt użycia znaku ! w powyższej ścieżce. Wią-
CEikApplication& aApp ) że się on z tym, iż miejsce pobytu aplikacji po
: CAknDocument( aApp ) zainstalowaniu na urządzeniu nie zawsze jest
{ identyczne. Zależy to przede wszystkim od te-
TParse fp; go, gdzie naszą aplikację zainstalujemy. W po-
fp.Set( Application()->AppFullName(), NULL, NULL ); przednim odcinku cyklu – aby nie gmatwać te-
TPtrC drivePtr = fp.Drive(); matu – przyjąłem ograniczenie polegające na
iAppDrive.Copy( drivePtr ); tym, iż zakładamy, że aplikacja będzie zawsze
} instalowana w głównej pamięci urządzenia.
Osoby, które zadały sobie trud instalacji pierw-

68 12/2008
Programowanie gier dla Symbian OS

szej odsłony LaserQuest na telefonie, zauważy- simy powiązać deskryptor opisujący ścieżkę z W kolejnym kroku pobieramy interesującą nas
ły być może, że po zainstalowaniu na karcie pa- obiektem parsera: informację:
mięci, aplikacja nie uruchamia się. Jest to zwią-
zane właśnie z niepoprawnym ustawieniem fp.Set( Application()->AppFullName(), NULL, TPtrC drivePtr = fp.Drive();
ścieżek. Tym razem rozwiążemy problem kom- NULL );
pleksowo – budując dynamicznie ścieżki dostę-
pu do plików. Dzięki temu będziemy w stanie Listing 7. Zmodyfikowana implementacja funkcji wczytującej bitmapy z pliku mbm w klasie
obsłużyć ścieżki specyficzne dla emulatora oraz CLaserQuestGameMenuMode
dla urządzenia – zarówno w przypadku instala-
cji w pamięci głównej jak i na zewnętrznej kar- void CLaserQuestGameMenuMode::ConstructL()
cie pamięci. {
TFileName laserQuestMenuMbmFilePath;
Obsługa zewnętrznej
karty pamięci i deskryptory laserQuestMenuMbmFilePath.Format(
To co jest nam niezbędne do poprawnego bu- KLaserQuestMenuMbmFilePathFormat,
dowania ścieżek do plików z zasobami apli- &iAppDrive );
kacji, to nazwa napędu opisująca nośnik, na
którym zainstalowania została aplikacja. Aby iTitle = new ( ELeave ) CFbsBitmap();
uzyskać tę informację musimy sięgnąć aż do User::LeaveIfError(
klasy CLaserQuestDocument. Spójrzmy na iTitle->Load(
zmodyfikowany konstruktor tejże klasy (Li- laserQuestMenuMbmFilePath,
sting 6). EMbmLaserquestmenuLaserquestmenutitle ) );
Kluczową rolę pełni w tym przypadku funk-
cja Application()->AppFullName(), która iRestart = new ( ELeave ) CFbsBitmap();
zwraca pełną nazwę aplikacji, wraz ze ścieżką User::LeaveIfError(
zawierającą interesującą nas nazwę napędu. Po- iRestart->Load(
wstaje pytanie – jak wydobyć tę nazwę i prze- laserQuestMenuMbmFilePath,
kazać ją dalej do aplikacji? Odpowiedzią są de- EMbmLaserquestmenuLaserquestmenurestart ) );
skryptory, tj. obiekty przeznaczone w Symbian
OS do manipulacji napisami. iActiveRestart = new ( ELeave ) CFbsBitmap();
Dużo można by pisać o deskryptorach – two- User::LeaveIfError(
rzących dość skomplikowaną hierarchię kilku- iActiveRestart->Load(
nastu powiązanych klas. Mówiąc w bardzo du- laserQuestMenuMbmFilePath,
żym skrócie, rozwiązanie to w zamyśle twór- EMbmLaserquestmenuLaserquestmenurestartactive ) );
ców Symbian OS miało stanowić złoty środek
pomiędzy efektywnością operacji na napisach iStart = new ( ELeave ) CFbsBitmap();
(porównywanej z efektywnością funkcji mani- User::LeaveIfError(
pulujących łańcuchami znaków ze standardo- iStart->Load(
wej biblioteki języka C) oraz bezpieczeństwa laserQuestMenuMbmFilePath,
(głównie w kontekście występowania błędów EMbmLaserquestmenuLaserquestmenustart ) );
przepełnienia bufora). Ceną za ten kompromis
jest wysoki poziom komplikacji oraz stosunko- iActiveStart = new ( ELeave ) CFbsBitmap();
wo duża niewygoda w użyciu. W tym miejscu User::LeaveIfError(
nawet nie będę podejmował próby przedstawie-
nia kompleksowego opisu tematu; przeanalizu- iActiveStart->Load(
jemy za to konkretne use-case'y wykorzystujące laserQuestMenuMbmFilePath,
ten mechanizm w LaserQuest. EMbmLaserquestmenuLaserquestmenustartactive ) );
Zacznijmy od składowej iAppDrive, w kla-
sie CLaserQuestDocument. Składowa ta jest ty- iExit = new ( ELeave ) CFbsBitmap();
pu TBuf. Szablon TBuf reprezentuje modyfiko- User::LeaveIfError(
walny napis o z góry określonej wielkości, prze-
kazanej jako parametr szablonowy. W naszym iExit->Load(
przypadku mamy: laserQuestMenuMbmFilePath,
EMbmLaserquestmenuLaserquestmenuexit ) );
TBuf< KDriveNameMaxLength > iAppDrive;
iActiveExit = new ( ELeave ) CFbsBitmap();
gdzie stała KDriveNameMaxLength ma wartość User::LeaveIfError(
2. Spójrzmy ponownie na zawartość konstruk- iActiveExit->Load(
tora CLaserQuestDocument. W pierwszej li- laserQuestMenuMbmFilePath,
nijce konstruowany jest obiekt typu TParse. EMbmLaserquestmenuLaserquestmenuexitactive ) );
Obiekt ten służy do parsowania ścieżek pli-
ków. Za jego pomocą możemy wyekstrahować Reset();
ze ścieżki interesujące nas komponenty; mię- }
dzy innymi nazwę napędu. Aby to zrobić, mu-

www.sdjournal.org 69
Programowanie urządzeń mobilnych

Tutaj warto zwrócić uwagę na obiekt typu


Listing 8. Implementacja metody CLaserQuestGamePlayMode::DrawOptionsAndLevelCounter TPtrC. Obiekt ten reprezentuje stały wskaź-
void CLaserQuestGamePlayMode::DrawOptionsAndLevelCounter( nik na napis. Ważne jest to, aby zrozumieć, że
CBitmapContext& aGc ) const TPtrC nie przechowuje własnej kopii danych
{ napisu. Ponieważ chcemy mieć pewność, że
_LIT( KResetOption, "RESET" ); nasze dane nie ulegną zniszczeniu – tworzy-
_LIT( KMenuOption, "MENU" ); my sobie własną kopię, przepisując napis opi-
sany przez obiekt drivePtr do bufora
_LIT( KLevelCounterFormat, "LEVEL: %d" ); iAppDrive:
const TInt KLevelCounterMsgMaxLength = 16; iAppDrive.Copy( drivePtr );

TBuf< KLevelCounterMsgMaxLength > levelCounterMsg; Dwie ostatnie linijki można by zapisać w spo-
sób jeszcze bardziej skondensowany:
levelCounterMsg.Format( KLevelCounterFormat, iLevel );
iAppDrive.Copy( fp.Drive() );
const TPoint KResetOptionPos( 5, 315 );
const TPoint KMenuOptionPos( 183, 315 ); Warto zauważyć, że w powyższym przykła-
const TPoint KLevelCounterMsgPos( 82, 20 ); dzie nie przekazujemy nigdzie wielkości napi-
sów. Wynika to z faktu, iż deskryptory prze-
aGc.UseFont( CEikonEnv::Static()->NormalFont() ); chowują informacje o wielkości reprezento-
aGc.SetPenColor( KRgbWhite ); wanych napisów jako swoje składowe (stąd też
aGc.DrawText( KResetOption, KResetOptionPos ); wzięła się ich nazwa).
aGc.DrawText( KMenuOption, KMenuOptionPos ); Kiedy mamy już bezpiecznie zachowa-
aGc.DrawText( levelCounterMsg, KLevelCounterMsgPos ); ną nazwę napędu, wypadałoby przekazać ją
aGc.DiscardFont(); do kolejnych warstw aplikacji. Aż się prosi
} aby zastosować w tym miejscu wzorzec Sin-
gelton. Niestety, ze względu na pewne ogra-
Listing 9. Implementacja metody ClaserQuestGameBoardEngine::DrawFadeIn() niczenia co do stosowania zmiennych sta-
void CLaserQuestGameBoardEngine::DrawFadeIn( tycznych w Symbian OS, implementacja te-
CBitmapContext& aGc ) const go wzorca jest nietrywialna i wybiega nie-
{ co poza ramy niniejszego tekstu. W Lase-
for ( TInt x = KGridMinX; x < KGridMaxX; ++x ) rQuest zastosujemy podobne podejście jak
{ w przypadku statusu klawiatury i – jeśli zaj-
for ( TInt y = KGridMinY; y < KGridMaxY; ++y ) dzie taka potrzeba – będziemy przekazy-
{ wać interesującą nas informację do dalszych
if ( iCurrentGridData[ x ][ y ] < EGuard ) warstw aplikacji jako argument konstrukto-
{ ra. Prześledźmy jak informacja o nazwie na-
if ( y % 2 ) pędu trafia do funkcji wczytującej dane plan-
{ szy. Wskaźnik do nazwy napędu jest przeka-
DrawTile( aGc, zywany kolejno do klas: CLaserQuestAppUi,
x, CLaserQuestContainer, CLaserQuestGame
y, i wreszcie: CLaserQuestGamePlayMode. W
iTileBitmaps[ tym miejscu warto zainteresować się jesz-
TILE_ENUM_VAL_2_TILE_BITMAP_INDEX( cze, jak konstruowany jest wskaźnik TPtrC
iCurrentGridData[ x ][ y ] ) ], do bufora iAppDrive. Dzieje się to w funkcji
iFadeInX1, CLaserQuestDocument::CreateAppUiL():
0 );
} return ( static_cast< CEikAppUi* >(
else new ( ELeave ) CLaserQuestAppUi(
{ TPtrC( iAppDrive ) ) ) );
DrawTile( aGc,
x, Możemy ponownie przyjrzeć się teraz za-
y, wartości metody ReloadLevelL() w klasie
iTileBitmaps[ CLaserQuestGamePlayMode. Mamy tutaj do
TILE_ENUM_VAL_2_TILE_BITMAP_INDEX( czynienia z formatowaniem deskryptora. Każ-
iCurrentGridData[ x ][ y ] ) ], dy modyfikowalny deskryptor wyposażony
iFadeInX2, jest w metodę Format(), pozwalającą budować
0 ); jego zwartość na bazie zadanego napisu forma-
} tującego – na podobnej zasadzie jak czyni to
} funkcja sprintf(). Napis formatujący w tym
} konkretnym przypadku ma postać:
}
} _LIT( KLaserQuestLevelFilePathFormat,
"%S\private\a0009591\level%d.txt" );

70 12/2008
Programowanie gier dla Symbian OS

Znacznik %S jest wskazówką dla funkcji emulatora, ścieżka do tego katalogu jest następu- jeszcze zmodyfikować zachowanie menu i za-
Format(), że w tym miejscu ma być wstawiona jąca: \epoc32\winscw\c\private\a0009591; w tym implementować mechanizm zapamiętywania
zawartość deskryptora przekazanego jako wskaź- właśnie miejscu należy umieścić pliku z podkata- składowej iMaxAchievedLevel. W niniejszym
nik, zaś znacznik %d służy do wstrzykiwania w logu levels w projekcie LaserQuest, aby gra zadzia- punkcie przeanalizujemy jak zaimplemento-
tekst wartości całkowitych. Warto też przypo- łała pod emulatorem. wać te brakujące elementy funkcjonalności lo-
mnieć, iż wartość a0009591 stanowi unikalny giki gry. Na początek rozważymy jak uprzyjem-
identyfikator (UID) naszej aplikacji. Spójrzmy jak Na tym zakończymy omawianie tematu de- nić życie gracza poprzez wyświetlanie informa-
zrealizowane jest formatowanie ścieżki: skryptorów. To, czego ewidentnie zabrakło w cji o numerze aktualnego etapu gry. Przy oka-
naszych rozważaniach, to kilka słów na temat zji oprogramujemy również wyświetlanie nazw
levelFilePath.Format( KLaserQuestLevelFileP deskryptorów reprezentujących napisy alo- opcji podpiętych w trakcie gry pod softbutton'y.
athFormat, kowane dynamicznie (np. HBufC badź RBuf). Całą tę funkcjonalność umieściłem w metodzie
&iAppDrive, Żądnych wiedzy Czytelników odsyłam do do- CLaserQuestGamePlayMode::DrawOptionsAnd
iLevel ); kumentacji dołączonej do SDK bądź do dobrej LevelCounter (Listing 8).
książki o Symbian OS (np. Symbian OS Expla- Operacje przedstawione w tej metodzie powin-
Zastosowane podejście przypomina roz- ined autorstwa Jo Stichbury). ny być znajome dla Czytelników. Są one na tyle
wiązanie wykorzystane w rodzinie funkcji oczywiste, że podaruję sobie opis. Efekt działania
printf(). Do funkcji przekazywany jest de- Warstwa logiki gry wspomnianej funkcji pokazany jest na Rysunku 2.
skryptor formatujący, a bezpośrednio po nim –implementacja – podejście #2 Kolejny, miły ukłon w stronę użytkownika,
– lista argumentów odpowiadających poszcze- Jak na razie, oprogramowaliśmy warstwę logiki to mechanizm animowanego przejścia pomię-
gólnym znacznikom. Warto zwrócić uwagę na poziomie klasy CLaserQuestGamePlayMode. dzy etapami. Mechanizm ten polega na tym,
na zastosowanie operatora wyłuskania adresu Okazuje się jednak, że to nie wszystko – trzeba że linie planszy wsuwają się poziomami w trak-
przy przekazywaniu argumentu iAppDrive.
Wielu początkujących programistów Symbia- Listing 10. Implementacja metody CLaserQuestGameBoardEngine::UpdateFadeIn()
nOS myli się, zapominając dodać ten opera-
tor – szczególnie przy przekazywaniu obiek- void CLaserQuestGameBoardEngine::UpdateFadeIn( TInt64 /*aDt*/ )
tów typu TPtrC. Funkcja Format() nie rzuca {
co prawda wyjątków, jednakże w sytuacji kie- if ( iIsFadeIn )
dy przekazane argumenty nie zgadzają się z {
napisem formującym, bądź formowany bufor iFadeInX1 += KFadeSpeed;
zostanie przepełniony – wystąpi tzw. panika iFadeInX2 -= KFadeSpeed;
(ang. Panic), czyli symbianowy odpowiednik if ( iFadeInX1 > iFadeInX2 )
asercji. Jeśli operacja formatowania powiodła {
się – to wynikową ścieżkę przekazujemy do iIsFadeIn = EFalse;
funkcji wczytującej dane. Voila! }
Trzeba w tym miejscu podkreślić, że podobne }
podejście powinno być konsekwentnie stosowa- }
ne w całym projekcie. W naszym przypadku to
samo odnosi się do funkcji wczytujących dane z Listing 11. Implementacja metody CLaserQuestGameMenuMode::Draw
plików mbm. Wszystkie te funkcje zostały zmo- void CLaserQuestGameMenuMode::Draw(
dyfikowane w nowej odsłonie LaserQuest. Jedna CBitmapContext& aGc ) const
z nich przedstawiona jest na Listingu 7. {
Typ TFileName to zwyczajny, modyfikowal- if ( iIsRestartActive )
ny bufor o długości 256 znaków (taką maksy- {
malną długość ścieżki obsługuje system plików DrawWithRestart( aGc );
Symbian OS). }
Dociekliwych Czytelników zainteresu- else
je zapewne fakt, iż w przypadku funkcji {
ReloadLevelL() zastosowana jest instrukcja DrawWithoutRestart( aGc );
warunkowa preprocesora i w przypadku bu- }
dowania aplikacji pod emulator nazwa napędu }
podawana jest w sposób explicit (makro _LIT
służy do definiowania literałów napisowych): Listing 12. Implementacja metody CLaserQuestGameMenuMode::UpdateL()
void CLaserQuestGameMenuMode::Update( TInt64 aDt )
_LIT( KAppDrive, "c:" ); {
if ( iIsRestartActive )
Rozwiązanie takie wynika z faktu, iż w przy- {
padku uruchamiania aplikacji pod emulatorem, UpdateWithRestart( aDt );
funkcja Application()->AppFullName() zwraca }
ścieżkę odnosząca się do napędu z: (ROM). Pro- else
blem leży w tym, że pliki załadowane w tym na- {
pędzie mają status tylko do odczytu (read-only). UpdateWithoutRestart( aDt );
Z tego względu katalog private oraz rezydujące }
w nim pliki umieszczone są w napędzie c:, który }
oferuje możliwość zapisu. W strukturze plików

www.sdjournal.org 71
Programowanie urządzeń mobilnych

cie rozpoczęcia nowego etapu, oraz wysuwa- zmu wymaga modyfikacji na poziomie klasy DrawFadeIn() oraz ClaserQuestGameBoardEn
ją się pionami kiedy etap się kończy. Tworzy CLaserQuestGameBoardEngine. Obsługa wsu- gine::UpdateFadeIn() (Listingi 9 i 10).
to przyjemny dla oka efekt i uatrakcyjnia nie- wania się planszy zrealizowana jest w dwóch To na co warto zwrócić uwagę we wspomnia-
co rozgrywkę. Implementacja tego mechani- metodach: CLaserQuestGameBoardEngine:: nych funkcjach, to wykorzystanie operatora mo-
dulo (%) w celu przebierania parzystych i nieparzy-
Listing 13. Implementacja metody CLaserQuestGame::ReadRestartFileL(): odczyt danych z pliku stych linii planszy. Na Rysunku 3 pokazane są trzy
klatki animacji efektu wsuwania się planszy.
TInt CLaserQuestGame::ReadRestartFileL() Czas na modyfikację menu. Generalnie po-
{ mysł jest taki, aby – w momencie kiedy gracz
const TInt KDefaultMaxAchievedLevel = 1; przeszedł więcej niż jeden poziom – aktywo-
wana była opcja Restart, pozwalająca rozpocząć
RFs fs; grę od ostatnio osiągniętego etapu. Aby zaim-
User::LeaveIfError( fs.Connect() ); plementować tę funkcjonalność, musimy dodać
CleanupClosePushL( fs ); w klasie CLaserQuestGameMenuMode zróżnico-
wanie stanu. Posłuży nam do tego zmienna bo-
if ( !BaflUtils::FileExists( fs, iRestartFileName ) ) olowska iIsRestartActive. Po modyfikacji, me-
{ tody CLaserQuestGameMenuMode::Draw() oraz
CleanupStack::PopAndDestroy(); // fs CLaserQuestGameMenuMode::UpdateL() mają po-
return KDefaultMaxAchievedLevel; stać taką jak przedstawiono na Listingach 11 i 12.
} Jak widać na zaprezentowanych Listingach, rze-
czywista funkcjonalność odpowiadająca poszcze-
RFileReadStream reader; gólnym stanom została oddelegowana do me-
reader.PushL(); tod pomocniczych. Zawartość tych metod moż-
User::LeaveIfError( reader.Open( fs, na przeanalizować w kodzie źródłowym pro-
iRestartFileName, jektu – tradycyjnie dostępnym na witrynie SDJ
EFileRead ) ); (www.sdjournal.org). Efekty działania powyższych
funkcji można za to obejrzeć sobie na Rysunku 4.
TInt maxAchievedLevel = reader.ReadInt16L(); Na koniec rozważymy implementację mecha-
nizmu zapamiętywania punktu restartu. Mecha-
CleanupStack::PopAndDestroy(); // reader nizm ten zaimplementowany jest w dwóch funk-
CleanupStack::PopAndDestroy(); // fs cjach: CLaserQuestGame::ReadRestartFileL()
oraz CLaserQuestGame::WriteRestartFileL().
return maxAchievedLevel; Zawartość pierwszej z wymienionych funkcji
} przedstawiona jest na Listingu 13.
Koncepcyjnie, działanie funkcji jest bardzo pro-
Listing 14. Implementacja metody CLaserQuestGame::WriteRestartFileL(): zapis danych do pliku ste. Na początku – zgodnie z Symbianowymi kon-
void CLaserQuestGame::WriteRestartFileL() const wencjami, musimy otworzyć sesję komunikacyjną
{ z serwerem plików. Dalej – przy użyciu pomocni-
RFs fs; czej klasy BaflUtils sprawdzamy, czy interesują-
User::LeaveIfError( fs.Connect() ); cy nas plik istnieje (nazwa wspomnianego pliku
CleanupClosePushL( fs ); jest konstruowana przy tworzeniu instancji obiek-
tu klasy CLaserQuestGame i przechowywana w
if ( !BaflUtils::FileExists( fs, iRestartFileName ) ) składowej iRestartFileName). Jeśli nie, to funkcja
{ zwraca domyślną wartość (KDefaultMaxAchieve-
RFile file; dLevel). Jeśli plik był już wcześniej stworzony, to
User::LeaveIfError( file.Create( fs, wartość jest z niego odczytywana. Fragment ko-
iRestartFileName, du odpowiedzialny za tę funkcjonalność jest kon-
EFileWrite ) ); cepcyjnie identyczny z podejściem opisywanym w
file.Close(); przypadku metody LoadGridDataAndResetL.
} To z czym wcześniej nie mieliśmy jeszcze do
czynienia, to zapis do pliku. Realizacja tego za-
RFileWriteStream writer; dania w kontekście metody CLaserQuestGame:
writer.PushL(); :WriteRestartFileL() przedstawiona jest na
User::LeaveIfError( writer.Open( fs, Listingu 14.
iRestartFileName, Początkowa część zawartości wspomnianej
EFileWrite ) ); metody jest niemalże identyczna jak w przypad-
ku CLaserQuestGame::ReadRestartFileL().
writer.WriteInt16L( iPlayMode->MaxAchievedLevel() ); Różnicę stanowi fakt, iż w sytuacji kiedy inte-
writer.CommitL(); resujący nas plik nie istnieje, tworzymy go wy-
wołując na obiekcie RFile metodę Create().
CleanupStack::PopAndDestroy() ; // writer W dalszej kolejności, otwieramy strumień do
CleanupStack::PopAndDestroy() ; // fs nowo utworzonego pliku (warto zwrócić uwa-
} gę na flagę EFileWrite) i przy pomocy funk-
cji WriteInt16L() zapisujemy zawartość skła-

72 12/2008
Programowanie gier dla Symbian OS

dowej iMaxAchievedLevel pobranej z obiek- w konstruktorze klasy CLaserQuestGame, Warto podkreślić, iż to drugie miejsce – cho-
tu iPlayMode za pośrednictwem dedykowane- jako że zawartość pliku restart.txt po- ciaż mniej intuicyjne – jest bardzo istotne.
go akcesora. Przy pracy ze strumieniem działa- trzebna jest do utworzenia obiektu klasy Gdybyśmy je pominęli, to wszystkie niekontro-
jącym w trybie zapisu dobrze jest na końcu wy- CLaserQuestGamePlayMode (Listing 15). lowane wyjścia z aplikacji (np. poprzez użycie
wołać metodę CommitL(). Mamy wtedy pew- Druga interesująca nas funkcja – klawisza czerwonej słuchawki) pozostałby nie-
ność, że cała zawartość bufora strumienia zo- CLaserQuestGame::WriteRestartFileL() obsłużone.
stanie z miejsca zapisana w docelowym pliku. – wykorzystana jest w dwóch miejscach. Pierw-
Na koniec warto zbadać to, w jaki sposób i sze z nich to funkcja CLaserQuestContainer:: Podsumowanie
gdzie wykorzystywane są opisane wyżej me- UpdateL (Listing 16). Kończymy trzeci odcinek cyklu artykułów o
tody. Pierwsza z nich – CLaserQuestGame: Drugie, to CLaserQuestAppUi::HandleComm programowaniu gier przeznaczonych dla Sym-
:ReadRestartFileL() – wywoływana jest andL (Listing 17). bian OS. W powyższym tekście wykorzystali-
śmy warstwę logiki gry jako pole doświadczal-
ne dla badania takich mechanizmów jak opera-
Listing 15. Konstruktor klasy CLaserQuestGame
cje wejścia/wyjścia czy deskryptory. Przy okazji
void CLaserQuestGame::ConstructL( TPtrC aAppDrive ) starałem się przemycić szczyptę treści zahacza-
{ jących o temat projektowania gier na urządze-
iMenuMode = CLaserQuestGameMenuMode::NewL( nia mobilne. Zgodnie z tradycją – na koniec od-
iKeyState, cinka przygotowałem zadania dla Czytelników.
aAppDrive ); Pierwsze ze wspomnianych zadań niewiele ma
TInt maxAchievedLevel = ReadRestartFileL(); wspólnego z programowaniem i polega na za-
iPlayMode = CLaserQuestGamePlayMode::NewL( projektowaniu nowych poziomów gry (w za-
iKeyState, łączonej wersji aplikacji jest tylko 5 etapów).
aAppDrive, Osoby, które zaprojektują jakieś ciekawe plan-
maxAchievedLevel ); sze zachęcam od wysłania ich do mnie – z przy-
} jemnością umieszczę je w finalnej wersji apli-
kacji. Drugie zadanie polega na implementa-
Listing 16. Implementacja metody CLaserQuestContainer::UpdateL cji mechanizmu wyboru planszy przy starcie
void CLaserQuestContainer::UpdateL( TInt64 aDt ) gry. Dlaczego akurat tak? Otóż istniejące za-
{ kończenie gry jest mało atrakcyjne. O ileż cie-
iGame->Update( aDt ); kawiej byłoby, gdyby po pomyślnym ukończe-
niu LaserQuest – w ramach nagrody – poja-
if ( iGame->ExitFlag() ) wiała się na stałe nowa opcja pozwalająca roz-
{ począć grę od dowolnego etapu (ot, chociażby
if ( iAppUi != NULL ) po to, aby potrenować rozwiązywanie poszcze-
{ gólnych poziomów, lub pochwalić się przed
iGame->WriteRestartFileL(); znajomymi:))?
iAppUi->Exit(); W następnej – czwartej (i najprawdopo-
} dobniej ostatniej odsłonie cyklu) – pokażę jak
} oprogramować dźwiękową warstwę gry, a tak-
} że kilka innych ciekawostek. Na samym koń-
cu chciałbym podziękować wszystkim Czy-
Listing 17. Implementacja metody CLaserQuestContainer::UpdateL telnikom, którzy napisali do mnie po przeczy-
void CLaserQuestAppUi::HandleCommandL( TInt aCommand ) taniu pierwszej części cyklu artykułów o pro-
{ gramowaniu gier dla Symbian OS – Wasze cie-
switch ( aCommand ) płe słowa stanowiły dla mnie dużą motywację
{ do dalszej pracy. Pragnę również podziękować
case EEikCmdExit: mojej ukochanej żonie, Oli – za cierpliwość i
{ wsparcie.
iAppContainer->Game()->WriteRestartFileL();
Exit();
break; RAFAŁ KOCISZ
} Pracuje na stanowisku Dyrektora Technicznego w
default: break; firmie Gamelion, wchodzącej w skład Grupy BLStre-
} am. Rafał specjalizuje się w technologiach zwią-
} zanych z produkcją oprogramowania na platfor-
my mobilne, ze szczególnym naciskiem na tworze-
nie gier. Grupa BLStream powstała, by efektywniej
wykorzystywać potencjał dwóch szybko rozwijają-
Erratra cych się producentów oprogramowania – BLStre-
Kolejny błąd, który znalazłem po opublikowaniu drugiego odcinka cyklu, to niezgodność w kon-
am i Gamelion. Firmy wchodzące w skład grupy
wencji nazewnictwa funkcji. Chodzi o to, że wszystkie funkcje Update w projekcie powinny mieć
w nazwie postfiks L – ze względu na to, że mogą one potencjalnie wywoływać operacje leave’u- specjalizują się w wytwarzaniu oprogramowania
jące (np. wczytywanie danych z plików). W najnowszej wersji LaserQuest usterka ta została usu- dla klientów korporacyjnych, w rozwiązaniach mo-
nięta. bilnych oraz produkcji i testowaniu gier.
Kontakt z autorem: rafal.kocisz@game-lion.com

www.sdjournal.org 73
Wywiad

Wywiad z
Ludovic Neveu
Dyrektorem ds. Sprzedaży w Embarcadero Technologies

Software Developer's Journal: Ostatnio dziej wydajnym. Programowanie to prze-


wiele mówiono o zamiarze sprzedaży cież także obszar działania firmy CodeGe-
przez firmę Borland części firmy odpo- ar. Przez ostatnie 3 miesiące wprowadzili-
wiedzialnej za rozwój narzędzi progra- śmy na rynek nowe wersje Delphi i C++Bu-
mistycznych (CodeGear). Transakcja zo- ilder oraz bazę danych InterBase. Zinte-
stała przeprowadzona. Proszę powie- growaliśmy Delphi i C++Builder z rozwią-
dzieć naszym czytelnikom więcej na te- zaniem ER/Studio – czołowym produktem
Ludovic Neveu mat firmy, która przejęła Delphi, C++Bu- Embarcadero dla architektów baz danych.
Dyrektor ds. Sprzedaży obszaru EMEA w Embarca- ilder i inne rozwiązania RAD? To dopiero początek naszych działań.
dero Technologies (Europa, Bliski Wschód, Afryka), Ludovic Neveu: Firma Embarcadero Tech-
odpowiedzialny za realizowanie działań bizneso- nologies powstała w 1993 roku. Po prze- SDJ: Czy i w jakim stopniu obecni i przy-
wych firmy poza obszarem Ameryki. Neveu posia- jęciu grupy CodeGear (czerwiec 2008) sta- szli klienci firmy odczują przejęcie Co-
da bogatą wiedzę i doświadczenie zdobyte pod- ła się największym, niezależnym dostawcą deGear?
czas 15 lat pracy w czołowych firmach z branży IT, narzędzi wspierających programistów i ad- LN: Po przejęciu CodeGear będziemy do-
w tym Borland i Symantec. W czasie pracy w firmie ministratorów baz danych oraz programi- starczać pełne spektrum narzędzi do two-
Borland był odpowiedzialny między innymi za kie- stów aplikacji. Obecnie z rozwiązań Embar- rzenia baz danych oraz aplikacji w ramach
rowanie grupą zajmującą się narzędziami progra- cadero korzysta ponad trzy miliony użyt- jednej firmy. Pozwoli to naszym klien-
mistycznymi (CodeGear) w regionie EMEA. Dwu- kowników wykorzystujących różnorodne tom na łatwiejszy wybór rozwiązań do
krotnie otrzymał nagrodę za najlepszego Dyrekto- platformy i języki programowania. projektowania (narzędzia do wizualizacji
ra ds. Sprzedaży. danych i kodu), tworzenia (narzędzia do
SDJ: Dlaczego Embarcadero zdecydo- programowania, optymalizowania i wdra-
wało się na zakup CodeGear? żania kodu) oraz zarządzania i administro-
LN: Ta transakcja pozwoliła na połącze- wania (narzędzia do zarządzania systema-
nie firm charakteryzujących się zbliżony- mi) projektami i bazami.
mi modelami biznesowymi oraz posiada-
jących komplementarne względem sie- SDJ: Mówi Pan o Embarcadero Techno-
bie linie produktów. Przejęcie CodeGear logies jako całości. Jak wygląda podział
umożliwiło Embarcadero stworzenie peł- pomiędzy rozwiązaniami bazodanowy-
nego portfolio produktów do modelowa- mi i nowo zakupionymi rozwiązaniami
nia, tworzenia, zarządzania i optymalizo- programistycznymi?
wania zarówno baz danych, jak też aplika- LN: W wyniku przejęcia grupy CodeGe-
cji. Nasi klienci mogą teraz korzystać z bo- ar Embarcadero Technology wzbogaci-
gatszej oferty narzędziowej oraz rozsze- ło swoją ofertę o rozwiązania dla progra-
rzonego wsparcia technicznego. mistów aplikacji. Podjęliśmy decyzję o za-
chowaniu nazwy CodeGear dla tej linii
SDJ: Musi się Pan zgodzić, że firma Em- produktów. Stworzyliśmy jednocześnie
barcadero nie jest tak dobrze rozpozna- nową nazwę dla istniejących produktów
wana w Europie jak Borland. Nie oba- bazodanowych – DatabaseGear. Obecnie
wia się Pan, że może mieć to negatyw- Embarcadero dostarcza narzędzia wspie-
ny wpływ na wizerunek nowo przeję- rające programistów korzystających z róż-
tych narzędzi? nych języków programowania i platform
LN: Nie obawiamy się tego. Embarcade- bazodanowych. Rodzina rozwiązań Data-
ro jest firmą dobrze rozpoznawaną wśród baseGear wspiera największe i najpopu-
społeczności związanej z bazami danych. larniejsze platformy bazodanowe, w tym:
Działamy w tej branży od ponad 15 lat. Oracle, SQL Server, DB2, Sybase, a narzę-
Embarcadero koncentruje się na obsza- dzia CodeGear programistów wykorzy-
rze programowania – przeznaczamy 100% stujących w swojej pracy najbardziej wy-
naszej energii na działania mające na ce- dajne języki: Java, C++, Delphi, PHP, Ru-
lu uczynienie programowania jeszcze bar- by on Rails.

74 12/2008
Wywiad

SDJ: Czy nie obawia się Pan, że produkty gramistycznych dla platformy Win32 – Del- wadziliśmy nowe, wydajne środowisko dla
z grupy CodeGear mogą stracić na zna- phi 2009 i C++Builder 2009. Obydwa śro- programistów .NET, które jest także częścią
czeniu w firmie Embarcadero, która po- dowiska wspierają obsługę Unicode, dzię- pakietu RAD Studio (razem z Delphi 2009 i
siada znacznie większe doświadczenie ki czemu stworzone w nich aplikacje wy- C++Builder 2009). Dla programistów PHP
w narzędziach bazodanowych? glądają i działają poprawnie niezależnie od przygotowaliśmy środowisko Delphi for PHP
LN: Nie. Jak wspomniałem Embarcadero wersji językowej platformy Windows, na wykorzystujące bibliotekę wizualnych kom-
działa wyłącznie w obszarze programowa- której zostały uruchomione. Nowością śro- ponentów PHP5 wzorowaną na VCL z Delphi,
nia. Przed przejęciem zarówno Embarca- dowisk są także zintegrowane narzędzia a dla programistów Ruby pierwsze narzędzie
dero, jak i CodeGear miały zbliżone obro- do tłumaczenia aplikacji oraz zarządzania RAD wspierające platformę Ruby on Rails
ty, strategie sprzedaży oraz politykę pro- projektami tłumaczeń. Delphi zyskało ob- – 3rdRail. Oprócz bazy InterBase mamy także
duktową. Nie zdecydowaliśmy się na za- sługę generycznych typów danych oraz bazę BlackfishSQL – zgodną ze standardem
kup wyłącznie dobrze znanych marek jak metod anonimowych. C++Builder nato- SQL, przenośną bazę danych dla programi-
Delphi i C++Builder, ale podjęliśmy decy- miast jest zgodny ze standardami C++0x, stów .NET oraz Java.
zję o zatrudnieniu całego zespołu Badaw- które zostaną oficjalnie wprowadzone do-
czo-Rozwojowego (R&D) CodeGear. Obec- piero w przyszłym roku. W ostatnich tygo- SDJ: Czy planujecie zintegrować narzę-
nie te same osoby, które pracowały w Co- dniach na rynku pojawiła się nowa wersja dzia CodeGear i DatabaseGear w jedno
deGear w strukturze firmy Borland, pracują bazy danych InterBase SMP 2009, charak- rozwiązanie?
nad nowymi wersjami narzędzi w Embarca- teryzującą się zwiększoną funkcjonalno- LN: Tak, planujemy taką integrację. Już te-
dero. Zgodnie z badaniami IDC liczba pro- ścią w obszarze bezpieczeństwa (szyfro- raz dostarczamy narzędzia Delphi i C++Bu-
gramistów na świecie wzrośnie z 13 milio- wanie transmisji over the wire i obsługa ilder w wersji Architect razem z rozwią-
nów w 2007 roku do 17 milionów w 2011. szyfrowania całych tablic albo poszczegól- zaniem do modelowania baz danych
To świetna perspektywa dla nas – musimy nych kolumn) oraz wbudowanym wspar- ER/Studio. Stawiamy na integrację produk-
równocześnie rozwijać obie linie produkto- ciem dla architektury wieloprocesorowej tów, pod warunkiem, że ta integracja przy-
we CodeGear i DatabaseGear, aby zaspoko- (do 8 CPU). Jesteśmy bardzo zdetermino- czyni się do zwiększenia wydajności pra-
ić przyszły popyt i nowe potrzeby rosnącej wani, aby zintensyfikować nasze działania cy użytkowników naszych rozwiązań oraz
społeczności programistów. i zwiększyć naszą obecność w szkołach i ułatwi im realizowanie zadań.
uczelniach. Na początku 2009 roku wpro-
SDJ: Dla kogo przeznaczone są rozwią- wadzimy nowe produkty, które będą do- SDJ: Po przejęciu CodeGear firma mu-
zania DatabaseGear? Proszę powiedzieć pasowane do potrzeb studentów i oczeki- si zweryfikować dotychczasowe kana-
o nich kila słów. wań placówek edukacyjnych – Turbo Pas- ły sprzedaży w wielu krajach. Czy pla-
LN: Wykorzystując produkty w rodziny Data- cal i Turbo C++. nujecie oddzielną sieć partnerów zaj-
baseGear możemy wesprzeć główne obsza- mujących się rozwiązaniami Database-
ry całego cyklu tworzenia i administrowania SDJ: Wspomina Pan o planach CodeGear Gear i CodeGear? Jak sytuacja wygląda
bazami danych. Pierwszym, bardzo ważnym w obszarze rozwiązań wspierających do- w Polsce?
etapem jest projektowanie baz danych. Roz- starczanie natywnych aplikacji Win32. Co LN: Działamy obecnie w 29 krajach na całym
wiązanie ER/Studio pozwala architektom na z produktami wspierającymi inne platfor- świecie poprzez sieć własnych oddziałów, jak
modelowanie i dokładne poznanie struktur my, w tym .NET i Java? też sieć naszych Partnerów. Biorąc pod uwa-
baz danych działających w przedsiębiorstwie LN: Jako niezależny dostawca narzędzi pro- gę zaszłości historyczne część naszych part-
oraz dostarcza wsparcie podczas przenosze- gramistycznych wspieramy programistów nerów może mieć większe doświadczenie
nia danych, ich migracji oraz integracji. Pro- wykorzystujących różne platformy i różne ję- w sprzedaży i wsparciu narzędzi bazodano-
gramiści baz danych mogą korzystać ze zin- zyki (kompilowane, zarządzane, dynamicz- wych, a część narzędzi do tworzenia aplika-
tegrowanego, międzyplatformowego środo- ne). Dla programistów Java mamy oparte cji. Docelowo będą jednak wspierać wszyst-
wiska, powalającego na zwiększenie wydaj- na platformie Eclipse narzędzie JBuilder oraz kie rozwiązania dostarczane przez Embar-
ności programowanych baz – DB Optimizer. moduły JGear – specjalne wtyczki dla pro- cadero – z linii CodeGear oraz DatabaseGe-
Nie zapominamy także o programistach apli- gramistów Eclipse rozszerzające wydajność ar. W Polsce naszym Partnerem jest BSC Pol-
kacji, którzy potrzebują narzędzi do tworze- tego środowiska oraz dodające nowe moż- ska, która już teraz oferuje wsparcie wszyst-
nia wydajnego kodu SQL – dla nich stworzy- liwości pracy zespołowej. Ostatnio wpro- kich produktów.
liśmy RapidSQL. DBArtisan wspiera admini-
stratorów baz danych w administrowaniu
nimi oraz zagwarantowaniu obsługiwanym
Jarosław Kania,
bazom ich maksymalnej dostępności, wydaj- Prezes BSC Polska
ności i bezpieczeństwa. Rozwiązanie Chan- BSC Polska jest wyłącznym Partnerem firmy
Borland w Polsce od 1996 roku. Obecnie tak-
ge Manager jest zestawem narzędzi ułatwia- że jako Partner Embarcadero Technologies do
jących i automatyzujących cykl zarządzania portfela oferowanych rozwiązań i usług z ob-
zmianą w obrębie baz danych. Narzędzie to szaru wsparcia zarządzania cyklem produkcji
współpracuje z pozostałymi rozwiązania- oprogramowania (Borland ALM) oraz narzędzi
mi zapewniając wersjonowanie tworzonych programistycznych (CodeGear) wprowadzili-
śmy kompletny zestaw rozwiązań do progra-
produktów oraz wygodną i efektywną pra-
mowania i zarządzania bazami danych (Data-
cę zespołową. baseGear). Z przyjemnością podjęliśmy decy-
zję o rozszerzeniu naszej oferty, dzięki której
SDJ: Jakie są plany odnośnie nowych na- możemy zapewnić naszym klientom optymal-
rzędzi w obszarze rozwiązań CodeGear? nie wykorzystanie baz danych oraz przecho-
LN: We wrześniu wprowadziliśmy nowe wywanych w nich informacji.
wersje naszych czołowych narzędzi pro-

www.sdjournal.org 75
Recenzja programu

Recenzja
programu WinZip 12.0
W
inZip jest jednym z najpopularniej- i folderów wewnątrz skompresowanych zbiorów Wybieramy pliki/foldery, które będą się składać
szych kompresorów plików na ryn- bez ich uprzedniej dekompresji. Mało tego, może- na zbiór, rodzaj kompresji (obsługiwane forma-
ku. Jego niedawno opublikowana my bezpośrednio w pliku zip dowolnie reorgani- ty to m.in. zip, rar, gz, tar, lha, 7z, iso, img i jesz-
12 wersja przyniosła wiele ciekawych nowości zować strukturę plików i katalogów metodą prze- cze wiele innych) i na końcu stopień kompresji
i udoskonaleń w zakresie kompresji i zarządza- ciągnij i upuść. Bardzo brakowało tej możliwości w (proces wydajniejszego kompresowania używa
nia plikami graficznymi, wydajniejszej metody poprzednich edycjach WinZipa i jest to niewąt- bardziej skomplikowanych algorytmów przez co
kompresji zip, obsługi alternatywnych forma- pliwie jedna z najważniejszych nowości wprowa- czas kompresji jest dłuższy i vice versa – mniej
tów kompresji czy szyfrowania AES. dzona w 12 odsłonie tego programu. Do naszych wydajna kompresja trwa krócej).
Po instalacji i rejestracji (za opłatą – do wersji usług oddano też nowe okno informacyjne zawie- Podczas instalacji mamy też możliwość inte-
pro – inaczej korzystamy z wersji ewaluacyjnej) rające dane o zbiorze, np. ilość miejsca zajmowa- gracji aplikacji z systemem. Dzięki temu poja-
wita nas przejrzysty interfejs użytkownika lub kre- nego przez zbiór przed i po kompresji oraz wyni- wia nam się nowa pozycja w menu konteksto-
ator (wizard) zależnie od tego, co wybraliśmy w kłą z tego ilość zaoszczędzonego miejsca (podaną wym (prawy przycisk myszy) – WinZip, po roz-
czasie konfiguracji podczas pierwszego urucho- dodatkowo w procentach). Kolejne udane drob- winięciu której mamy szybki dostęp do najczę-
mienia programu. Interfejs zawiera szereg cieka- ne udogodnienie, które znacznie uprzyjemnia- ściej używanych opcji kompresji lub dekompre-
wych rozwiązań. Pierwszym z nich jest wprowa- ją proces kompresowania plików. Dla posiadaczy sji. Funkcjonalność ta jest znana z poprzednich
dzenie Smart View. Przeglądarka archiwów sa- wersji Pro zostało także oddane do użytku narzę- wersji i bardzo ułatwia pracę ze zbiorami.
ma rozpoznaje jakie pliki stanowią większość ar- dzie automatyzujące pracę z archiwami WinZip Największa część nowości skierowana jest do
chiwum i dostosowuje tak okno przeglądania, by Job Wizard. Zasada jego działania polega na stwo- użytkowników aparatów cyfrowych. Znajdzie-
pliki najwygodniej było oglądać. Jeżeli mamy plik rzeniu szablonów postępowania z plikami .zip w my wśród nich m.in. wprowadzenie wydajniej-
zip ze zdjęciami, to jego zawartość ukaże się w po- przypadku ich tworzenia lub zmian. Są to typowe szej kompresji plików JPEG oszczędzających w po-
staci miniaturek obrazków, a jeżeli zbiór stanowią makra znacznie skracające czas pracy ze skompre- równaniu z poprzednią wersją WinZipa od 20 do
foldery, to będziemy je mogli przeglądać w wygod- sowanymi zbiorami, ale są pomocne użytkowni- 25% miejsca zajmowanego przez skompresowany
nym drzewie katalogów, znacznie ułatwiającym kom, dla których praca na archiwach jest chlebem zbiór. Pakowanie oczywiście odbywa się bez utra-
poruszanie się pomiędzy nimi. Jeśli zaś nasze ar- powszednim (backup'y, archiwizacja, przygotowa- ty jakości zdjęcia. Przydaje się to szczególnie oso-
chiwum nie zawiera plików graficznych ani kata- nie do częstego przesyłania plików, np. tygodnio- bom trzymającym swoje zbiory na nośnikach
logów, to zawartość zostanie przedstawiona w po- wych raportów, itp.). przenośnych. Ukłon, jaki producenci tego archi-
staci widoku klasycznego. Kolejną bardzo przydat- Kreator wygodnie przeprowadza użytkowni- wizera zrobili w stronę miłośników cyfrowego
ną nowością jest możliwość zmiany nazwy plików ka poprzez cały proces kompresowania danych. pstrykania, staje się jeszcze widoczniejszy, po od-

76 12/2008
Recenzja programu WinZip 12.0

kryciu opcji selektywnego wyodrębniania plików WinZipie jego złożona funkcjonalność, która mo-
ze zbioru zip i tworzenia z nich następnego zbio- że być z drugiej strony jego największą zaletą. Otóż
ru. Możliwa jest również zmiana rozmiarów obra- z wersji na wersję z prostego narzędzia do kompre-
zów w nowo powstałym zbiorze bez modyfikacji sji powstaje wielki kombajn wykonujący różne za-
rozmiaru oryginalnych obrazków. Ułatwia to dzie- dania, które nijak się mają do kompresji i zarządza-
lenie się galeriami ze znajomymi, gdy potrzeba nia archiwami. Przeglądarka oraz prosty edytor
nam wysłać część zdjęć z archiwum poprzez pocz- plików graficznych, klient email wysyłający archi-
tę elektroniczną jako załącznik zip. Użytkownicy wa bezpośrednio jako załączniki czy klient ftp wy-
wersji Pro Winzipa mają także możliwość bezpo- syłający je protokołem ftp. Powoli z WinZipem sta-
średniego wysłania wyselekcjonowanych plików je się to samo co z programami typu Nero Burning
jako archiwum zip na wybrany serwer ftp. Uła- Rom czy WinAmp – następuje tworzenie ogrom-
twienie edycji zdjęć zapewnia obsługa miniatu- nego kombajnu, gdzie na drugi plan schodzi kom-
rek, dzięki czemu możemy podejrzeć zdjęcia z ar- presja danych, a pojawia się masa wodotrysków.
chiwum. Możemy również przeglądać je w trybie Kolejne wersje być może będą zawierać podręcz-
pokazu slajdów za pomocą wbudowanej w WinZi- ny odtwarzacz multimedialny audio/video lub
pa przeglądarki plików graficznych i bezpośrednio prostą przeglądarkę internetową, a może nawet i
w niej modyfikować wymiary obrazków, obracać proste gierki. Ta wada na szczęście jest zniwelowa-
je oraz usuwać bez potrzeby wyodrębniania ich z na przez fakt, że aplikacja ma przejrzysty interfejs
archiwum. Szczególnie ta funkcjonalność zwięk- i jej złożoności po prostu nie widać. Kto będzie ko-
sza efektywność pracy na naszych zbiorach i po- rzystał w domowych zastosowaniach tylko z pod-
winna się spodobać wszystkim wykonującym wie- stawowych opcji, pozostałych nie będzie widział, a
le podstawowych operacji na dużych ilościach pli- jak mu będą potrzebne, to je bardzo szybko znaj-
ków graficznych. dzie za sprawą dużej intuicyjności interfejsu.
Efektywność archiwizowania WinZipa 12 w po- Podsumowując, WinZip 12 jest naprawdę cie-
równaniu z największymi konkurentami na rynku kawą aplikacją, jedną z podstawowych, które insta-
przedstawia wykres. Najbardziej przykuwa uwa- lujemy tuż po instalacji systemu, gdyż bez archiwi-
gę wydajność pakowania obrazów. Okazuje się, iż zera ani rusz. Bez niego nie otworzymy skompre-
producenci WinZipa nie kłamali i rzeczywiście je- sowanych archiwów zawierających ściągnięte ste-
żeli posiadamy duże zbiory fotografii, to przy uży- rowniki z internetu, ani nie wyślemy zbioru pli-
ciu najwydajniejszej metody kompresji można uzy- ków w załączniku wiadomości email (wyobraźmy
skać o wiele więcej miejsca na dysku lub innym no- sobie np. 50 plików do dodania w polu załączni-
śniku. Zaznaczyć jednak należy, że testowane foto- ków). Z nowej wersji programu powinni się ucie-
grafie były w postaci plików .jpeg. W przypadku in- szyć miłośnicy cyfrowej fotografii, gdyż to dla nich
nych zbiorów najnowszy WinZip jest niezauważal- przygotowano najwięcej udoskonaleń. Pozostali
nie wydajniejszy od swoich konkurentów. Prawdo- użytkownicy z pewnością docenią wiele wymie-
podobnie jest to spowodowane zastosowaniem no- nionych wyżej ułatwień, które ta wersja wprowa-
wej technologii kompresji LZMA. dziła. Z tego też względu polecamy, by WinZip w
Zadbano także o zabezpieczenie naszych zbio- swojej 12 odsłonie zagościł na waszych dyskach.
rów poufnych. Certyfikowane szyfrowanie AES
stało już się znakiem rozpoznawczym WinZipa. Metodologia wykonanego testu:
Do wyboru mamy 128- lub 256-bitowe szyfrowa- Celem testu było sprawdzenie i porównanie wy-
nie co całkowicie zabezpiecza nasze zbiory przed dajności archiwizowania aplikacji przeznaczo-
nieuprawnionym dostępem (oczywiście tylko w nych do tego zadania z wyjątkowym uwzględ-
przypadku, gdy włamywacz nie zna hasła lub to nieniem w nich efektywności pracy WinZipa
hasło nie jest oczywiste do odgadnięcia). Wersja 12. Test objął 4 aplikacje – WinZip 12, WinZip
Pro zawiera wiele interesujących dodatków rozsze- 11, zintegrowany packer w środowisku Gnome
rzających opcje szyfrowania, m.in. (Linux) oraz WinRar 3.61 PL. Testy dla WinZip
nowe okno pozwalające administratorowi wy- 11 i 12 wykonano przy użyciu metody normal-
brać wymagania co do tworzonego hasła (jego mi- nej i najwydajniejszej.
nimalna długość oraz rodzaje znaków, które mają
być w nim użyte) oraz dodatkowe menu kontro- Poszczególne zbiory zawierały:
la szyfrowania, które administratorzy mogą użyć Filmy: jeden zwykły film – 700Mb [kopia ro-
do kontroli uprawnień użytkowników do szyfro- biona z oryginału];
wania zbiorów (np. ograniczyć im ilość metod szy- Audio: 22 pliki .mp3;
frowania lub zabronić całkowicie szyfrować archi- Aplikacje: dwie gry, których trzon stanowiły
wa). Rozwiązania te są przeznaczone raczej dla za- pliki .exe;
stosowań komercyjnych i nie będą używane w do- Fotki: 151 elementów – obrazki .jpeg
mowych zastosowaniach. Kolejną z nowości jest 2080x1544 px;
wprowadzenie dodatkowej kolumny w przeglą- Dokumenty: pokaźny mix zbiorów .odt,.do-
darce archiwum, która opisuje czy plik jest zaszy- c,.pdf,.ppt i .xls.
frowany czy nie oraz kiedy plik jest zabezpieczony
przed odczytem oraz kiedy dostępny.
Co do wad tego programu, to jedynym manka- MIROSŁAW WDOWIAK
mentem, do którego można się przyczepić, jest w Kontakt z autorem: mirek.miruu.wdowiak@gmail.com

www.sdjournal.org 77
KLUB PRO
Oferta skierowana dla firm
Jeżeli Twoja firma jest prenumeratorem Software Developer’s Journal za comiesięczną
dopłatą 50 PLN +VAT możesz dodatkowo otrzymać reklamę.
Wystarczy tylko, aby profil Twojej firmy pokrywał się z naszym magazynem.
Wyślij do nas: logo firmy, dane kontaktowe i informację o firmie
Reklama przez 12 kolejnych numerów tylko za 600 PLN +VAT.
Jeżeli nie posiadasz jeszcze prenumeraty możesz ją zamówić w atrakcyjnej cenie.
Dla nowych prenumeratorów specjalna oferta – 690 PLN.

Skontaktuj się z nami:


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

Opera Software Architektury systemów IT


Opera Software’s vision is to deliver the best In- Twórca frameworków JUVE i serwera aplikacji
ternet experience on any device. We are offering AVAX oferuje usługi, doradztwo, rozwiązania do
browser for PC/desktops and embedded pro- tworzenia nowoczesnych, dużych systemów i roz-
ducts that operates across devices, platforms wiązań informatycznych/internetowych, integrują-
and operating systems. Our browser can deliver ce architektury ery post-J2EE/.NET, wykorzystu-
a faster, more stable and flexible Internet expe- jące MDD/MDA dla dziedzin – bankowość, teleko-
rience than its competitors. munikacja, handel, e-commerce, ERP/Workflow/
CRM, rozwiązania internetowe, portalowe.
http://www.opera.com www.mpsystem.com mpsystem@mpsystem.com

FRONTLINE STUDIOS Future Processing


Frontline Studios – amerykańsko-polski twórca gier Future Processing to dynamiczna firma techno-
konsolowych oraz PC – szuka utalentowanych ko- logiczna działająca na globalnym rynku opro-
derów (bardzo dobra znajomość C/C++; Java, Del- gramowania. Jesteśmy zespołem wysokiej klasy
phi, UML), doświadczonych grafików (2D, 3D) oraz specjalistów posiadających wiedzę i doświadcze-
zespołów developerskich. Oferujemy długotermi- nie niezbędne do realizacji ambitnych projektów
nową pracę nad poważnymi projektami. Nie prze- informatycznych. Jeśli programowanie to Twoja
gap tej okazji! pasja dołącz do nas! (możliwość pracy zdalnej).

kadry@frontstudios.com http://www.future-processing.pl

Kei.pl
Kei.pl działa na rynku usług hostingowych od 2000
roku. Do naszych zadowolonych Klientów z du-
mą możemy zaliczyć wiele przedsiębiorstw sekto-
ra MSP, instytucji oraz osób prywatnych. W ofer-
cie Kei.pl znajdują się pakiety hostingowe, a także
usługi dla wymagających Użytkowników – platfor-
my e-Biznes oraz serwery fizyczne.

http://www.kei.pl
KLUB PRO

StatConsulting TTS Company Sp. z o.o.


StatConsulting to firma o znaczącej pozycji na ryn- Sprzedaż i dystrybucja oprogramowania komputero-
ku usług analitycznych oraz Data Mining. Nasza wego. Import programów na zamówienie. Ponad 200
oferta obejmuje m.in. modele scoringowe, rozwią- producentów w standardowej ofercie. Chcesz kupić
zania Fraud Detection oraz modelowanie ryzyka. oprogramowanie i nie możesz znaleźć polskiego do-
Tworzymy także własne rozwiązania informatycz- stawcy? Skontaktuj się z nami – sprowadzimy nawet
ne na potrzeby projektów Data Mining, Data Quali- pojedyncze licencje.
ty, zarządzania ryzykiem itd.

http://www.statconsulting.com.pl http://www.OprogramowanieKomputerowe.pl

Transition Technologies S.A. EPRO


Firma w branży high-tech od 1991. Producent opro- Naszą misją jest projektowanie najwyższej jako-
gramowania dla przemysłu (ponad 350 referencji z ści dedykowanych systemów IT, które cechuje
instalacji na całym świecie). Usługi z zakresu: hur- wysoka niezawodność, wydajność, ergonomicz-
townie danych i Business Intelligence, rozwiązania ność i intuicyjność w obsłudze oraz administracji.
eBusiness, optymalizacja, integracja danych, aplika- Głównym elementem oferty EPRO jest oprogra-
cji oraz procesów biznesowych, portale korporacyj- mowanie sklepu internetowego oraz identyfika-
ne, consulting i outsourcing usług IT, zaawansowa- cja wizualna.
na automatyka cyfrowa. tel. 085 743 66 38
http://www.tt.com.pl http://www.epro.com.pl

IT SOLUTIONS Softline rozwiązania mobilne


Wdrożenia i szkolenia z zakresu: Wiodący producent systemów mobilnych, do-
• SQL Server stawca aplikacji użytkowych dla biznesu (Sym-
• SharePoint Services bian OS, Windows Mobile, J2ME ) zaprasza do
IT SOLUTIONS • MS Project / Server
• Tworzenie aplikacji w technologii .NET
współpracy. Zostań naszym partnerem. Dołącz
do zespołu.

http://www.itsolutions.biz.pl
marcin.pytlik@itsolutions.biz.pl http://www.softline.com.pl

Proximetry Poland Sp. z o.o. SWD Software Sp. z o.o


Proximetry Poland Sp. z o.o. jest polskim od- System operacyjny czasu rzeczywistego RTOS
działem amerykańskiej firmy Proximetry Inc. – QNX. Oficjalny dystybutor w Polsce.
dostawcy systemów zarządzania sieciami bez- Zakres działalności: lokalizacja produktów QNX,
przewodowymi opartymi na technologiach WiFi i dostawy sprzętu i oprogramowania, doradztwo
WiMAX. Naszą misją jest dostarczenie klientom
przedsprzedażowe, wsparcie techniczne, certyfi-
rozwiązań poprawiających jakość usług (QoS)
dostarczanych drogą radiową. Dołącz do najlep- kowane szkolenia, opracowania na zamówienie.
szych i zostań członkiem naszej ekipy!

http://www.proximetry.com http://www.swdsoft.pl

Systemy bankowe, ISOF


HEUTHES istnieje na rynku od 1989 r. Obok
systemów informatycznych dla banków, ofe-
ruje nowoczesne oprogramowanie do obsługi
firm. System ISOF jest udostępniany klientom
w trybie SaaS lub licencji. Pracuje na platfor-
mie Linux i zawiera m.in. takie moduły jak
CRM, DMS, Magazyn, Sprzedaż, Logistyka
oraz Rachunkowość.
http://www.isof.pl
Roczna prenumerata

tylko
250,-
Software Developer’s Journal (poprzednio Software 2.0)
jest miesięcznikiem głównie dla programistów, którzy li-
czą, że dostarczymy im gotowe rozwiązania, oszczędza-
jąc im czasu i pracy. Jesteśmy czytani przez tych, któ-
rzy chcą być na bieżąco informowani o najnowszych osią-
gnięciach w dziedzinie IT i nie chcą, żeby jakiekolwiek
istotne wydarzenia umknęły ich uwadze. Aby zadowolić
naszych czytelników, prezentujemy zarówno najnowsze
rozwiązania, jaki starsze, sprawdzone technologie.

Kontakt
1. Telefon 2. Online
+48 22 427 36 91 pren@software.com.pl
+48 22 427 36 79
+48 22 427 36 50 3. Adres
Bokserska 1
2. Fax 02-682 Warszawa
+48 22 244 24 59 Polska
Zamówienie prenumeraty

Prosimy wypełniać czytelnie i przesyłać faksem na numer:


00 48 22 244 24 59
lub listownie na adres:
Software-Wydawnictwo Sp. z o. o.
ul. Bokserska 1
02-682 Warszawa
Polska
E-Mail: pren@software.com.pl
Przyjmujemy też zamównienia telefoniczne:
0048 22 427 36 91
0048 22 427 36 79
0048 22 427 36 50

Jeżeli chcesz zapłacić kartą kredytową,


wejdź na stronę naszego sklepu internetowego www.buyitpress.com.

Imię i nazwisko ...............................................................................

Nazwa firmy.....................................................................................

Dokładny adres ..............................................................................

.........................................................................................................

Telefon ............................................................................................

E–mail .............................................................................................

ID kontrahenta ................................................................................

Numer NIP firmy .............................................................................

Fax (wraz z nr kierunkowym) .........................................................

□ automatyczne przedłużenie prenumeraty

Prenumerujesz
– zyskujesz
l oszczędność
pieniędzy Ilość Od
Ilość zama- numeru
l szybka dostawa Tytuł nume- wianych pisma Cena
rów prenume- lub mie-
l prezenty rat siąca

l bezpieczna płatność Software Develope-


12
180*/

ność on–line r’s Journal (1 płyta CD)


– dawniej Software 2.0
250
PLN

* cena prenumeraty rocznej dla osób prywatnych


W NASTĘPNYM NUMERZE SOFTWARE DEVELOPER’S JOURNAL 1/2009 169

TESTOWANIE OPROGRAMOWANIA
GNU Linear Programming Kit
Testowanie metod statycznych
Porównanie wydajności obliczeniowych i bazodanowych technologii JSF,
PHP oraz ASP.NET

PROGRAMOWANIE JAVA
Java 3D

NOWE ARTYKUŁY W DZIAŁACH


Biblioteka miesiąca
Systemy operacyjne

I WIELE INNYCH ARTYKUŁÓW, KTÓRYCH NIE MOŻESZ PRZEOCZYĆ!

W spr
zedaż
y od 18
grudn
ia
Redakcja zastrzega sobie możliwość zmiany zawartości pisma.

You might also like