POLSKO-JAPOŃSKA WYŻSZA SZKOŁA TECHNIK KOMPUTEROWYCH PRACA MAGISTERSKA Nr... Zestaw narzędzi programistycznych do generowania mobilnych aplikacji Student Szymon Nieradka Nr albumu 4868 Promotor prof. dr hab. Kazimierz Subieta Specjalność Inżynieria Oprogramowania i Baz Danych Katedra Systemów Informacyjnych Data zatwierdzenia tematu 2007.07.30 Data zakończenia pracy 2009.01.31 Podpis promotora pracy Podpis kierownika katedry......
Streszczenie Praca podejmuje problematykę mobilnych narzędzi prezentujących dane o ustrukturalizowanej postaci na przykładzie rozkładów jazdy komunikacji miejskiej. Dla osób korzystających z tego typu komunikacji dostępność danych o rozkładach jazdy z poziomu telefonu komórkowego stanowi istotną wartość. W szczególności jeśli zaoferujemy do tego dodatkowe usługi które wykraczają ponad to co oferują (zazwyczaj) statyczne strony z rozkładami jazdy przewoźników. Podstawą pracy jest funkcjonujące od maja 2005 roku rozwiązanie o nazwie MicroBus mojego autorstwa. Projekt ten został przygotowany przez autora dla mieszkańców Szczecina i był ściśle do tego miasta dostosowany. Podstawowym celem pracy jest zmiana ściśle ukierunkowanego rozwiązania na generyczny framework umożliwiający dowolnym zainteresowanym osobom o podstawowych umiejętnościach programistycznych przygotowanie własnej wersji mobilnej aplikacji. W pierwszym rozdziale praca wprowadza w tematykę mobilnych rozkładów jazdy, opisuje szczegółowo cel pracy oraz przyjęte w niej rozwiązania. Przybliżone są także rezultaty pracy. Drugi rozdział opisuje szczegółowo kontekst pracy poprzez analizę dostępnych na rynku rozwiązań o różnych modelach biznesowych, użytych technologiach i modelu licencyjnym. Podsumowanie tej części pracy wskazuje na zestaw cech których kombinacja nie jest dostępna na rynku. Trzeci rozdział opisuje wykorzystane w trakcie pracy nad tematem narzędzia włączając w to narzędzia programistyczne, kontroli wersji oprogramowania, tworzenia dokumentacji, frameworki oraz narzędzia emulujące i dokonujące wirtualizacji systemu operacyjnego. Kolejny czwarty rozdział opisuje szczegółowo propozycję generycznego rozwiązania do budowania mobilnych aplikacji prezentujących rozkłady jazdy. Opisane są wszystkie elementy będące przedmiotem pracy oraz wyszczególnione świadomie wykonane wyłączenia z zakresu. Piąty rozdział dokonuje prezentacji wykonanego prototypu rozwiązania opisując poszczególne elementy systemu. Ostatni rozdział przedstawia napotkanie w trakcie pracy problemy głównie techniczne ale także utrudnienia natury prawnej. Podziękowania Pracę dedykuję Agnieszce która cierpliwie znosiła długie godziny poświęcone tej pracy. Strona 1 z 59
SPIS TREŚCI Spis treści 1 Wstęp 5 1.1 Cel pracy.................................... 6 1.2 Rozwiązanie przyjęte w pracy......................... 6 2 Kontekst pracy 8 2.1 Dostępne na rynku rozwiązania........................ 8 2.2 Podsumowanie................................. 11 3 Opis narzędzi zastosowanych w pracy 12 3.1 Język programowania Java........................... 12 3.2 Technologia tworzenia mobilnej aplikacji................... 12 3.2.1 Wireless Application Protocol..................... 13 3.2.2 SMS.................................. 13 3.2.3 Rozwiązania natywne........................ 14 3.2.4 Java Platform Micro Edition...................... 14 3.3 Środowisko programistyczne Eclipse...................... 16 3.4 Zestaw narzędzi i bibliotek do developmentu JME na OS X.......... 17 3.4.1 Apache Ant.............................. 17 3.4.2 Sun Java Wireless Toolkit....................... 17 3.4.3 Antenna................................ 17 3.4.4 BlueCove................................ 18 3.4.5 Microemulator............................. 18 3.4.6 ProGuard................................ 19 3.5 Język programowania Perl........................... 19 3.6 VirtualBox................................... 19 3.7 DocBook.................................... 20 4 Propozycja rozwiązania 21 4.1 Założenia.................................... 21 4.1.1 Dane wejściowe............................ 21 4.1.2 Prezentacja.............................. 22 4.1.3 Przenośność.............................. 22 4.1.4 Budowanie............................... 23 4.2 Propozycja generycznego rozwiązania budowania mobilnej aplikacji..... 23 4.2.1 Krok 1: przygotowanie pliku w formacie Przewodas+......... 23 4.2.2 Krok 2: konwersja danych....................... 24 4.2.3 Krok 3: kompilacja midletu...................... 26 Strona 2 z 59
SPIS RYSUNKÓW 4.2.4 Krok 4: budowanie midletu, możliwości prezentacji.......... 26 4.2.5 Krok 5: możliwości prezentacji..................... 27 4.3 Proces generowania midletu na przykładzie jednego miasta.......... 29 5 Prototyp rozwiązania 32 5.1 Midlet Java.................................. 32 5.2 Aplikacja dla platformy Symbian........................ 34 5.3 Kompresor................................... 35 5.3.1 Pojęcia wstępne............................ 35 5.3.2 Ogólny schemat działania....................... 36 5.3.3 Struktura słowa wyjściowego pliku binarnego............. 37 5.3.4 Optymalizacja danych......................... 39 5.3.5 Redukcja rozmiaru danych....................... 42 5.4 Dokumentacja projektu............................ 42 5.5 Strona projektu................................ 43 5.5.1 Strona dla programistów........................ 43 5.5.2 Strona dla użytkowników....................... 45 6 Problemy 48 6.1 Prawa autorskie do danych prezentowanych w aplikacji............ 48 6.2 Wielkość danych do przechowania w aplikacji................. 48 6.3 Złożoność algorytmiczna przetwarzania danych................ 49 6.4 Ograniczenia API JME............................. 49 6.5 Skala implementacji JSR179 w telefonów komórkowych........... 50 7 Podsumowanie 52 A Prace cytowane 53 B Dodatki 54 B.1 Opis formatu danych wejściowych....................... 54 B.1.1 Przykład pliku w formacie Przewodas................. 55 B.1.2 Objaśnienia dla przykładu pliku.................... 57 Spis rysunków 1 Propozycja schematu tworzenia mobilnej aplikacji............... 24 2 Przygotowywanie plików w formacie Przewodas+............... 25 3 Konwersja danych w formacie Przewodas-a do formatu binarnego...... 26 4 Struktura midletu (pliku JAR)......................... 27 Strona 3 z 59
SPIS TABEL 5 Możliwości prezentacji danych......................... 29 6 Proces przygotowywania midletu na przykładzie rozkładu dla miasta Szczecina 30 7 Przykładowy widok aplikacji na telefonie Nokia 6310i............. 33 8 Przykładowy widok aplikacji na emulatorze Microemu............ 34 9 Przykładowy widok aplikacji wersja Symbian............... 35 10 Schemat blokowy działania kompresora.................... 38 11 Redukcja rozmiaru danych........................... 43 12 Dokumentacja formatu pliku Przewodas+................... 44 13 Wizytówka projektu w serwisie Sourceforge.................. 45 14 Strona projektu dla użytkowników....................... 46 15 Strona wap projektu MicroBus......................... 47 16 Struktura pliku w formacie Przewodas..................... 56 17 Wizualizacja przykładowego rozkładu..................... 57 Spis tabel 1 Podsumowanie technologii tworzenia mobilnych aplikacji........... 16 2 Struktura słowa................................ 39 Kody źródłowe 1 Lista plików midletu (bez obfuskacji)..................... 34 2 Format Przewodas+ opisany notacją Backusa-Naura............. 54 3 Przykład pliku w formacie Przewodas+.................... 56 Strona 4 z 59
1 Wstęp 1 Wstęp Mobilne rozkłady jazdy Problematyka prezentowania rozkładów jazdy za pomocą telefonów komórkowych oraz innych mobilnych urządzeń nabrała znaczenia w momencie w którym rozwój technologiczny tych urządzeń umożliwił powstawanie takich rozwiązań. Dwa najistotniejsze elementy rozwoju urządzeń mobilnych to z całą pewnością wyposażenie urządzeń mobilnych w przeglądarki WAP oraz udostępnienie API programistycznego dającego możliwość tworzenia niewielkich aplikacji. Aktualnie znanych jest wiele rozwiązań tego typu. Poniższe zestawienie prezentuje kilka z nich ze wskazaniem na użyte rozwiązanie technologiczne: 1. Ginger (http://www.mpk.poznan.pl/ginger.html) Midlet Java, wykorzystuje własny format danych oparty o XML 2. Przewodas (http://szulat.republika.pl/przewodas) Aplikacja przeznaczona dla urządzeń z systemem operacyjnym PalmOS 3. Rozkład PKP SMS (http://rozklad-pkp.pl/) Interaktywna bramka SMS która w odpowiedzi na odpowiednio spreparowane pytanie udziela odpowiedzi 4. Rozkład PKP WAP (http://rozklad-pkp.pl/) Wersja WAP serwisu z rozkładami jazdy PKP Rozwiązania tego typu można dzielić według różnych kryteriów. Do najważniejszych zaliczyłbym: 1. Zastosowaną technologię, np: (a) Midlet Java (b) Bramka SMS (c) Serwis WAP (d) Aplikacja na dedykowany mobilny system operacyjny (Symbian, OS X, PalmOS) 2. Model biznesowy oraz rodzaj licencji: (a) zamknięte rozwiązanie komercyjne (b) zamknięte rozwiązanie niekomercyjne (c) otwarte rozwiązanie niekomercyjne Strona 5 z 59
1.1 Cel pracy 3. Miejsce przechowywania danych: (a) na serwerze (dla rozwiązań wap i sms) (b) w aplikacji (dla pozostałych rozwiązań) 1.1 Cel pracy Najważniejsze punkty których realizacja jest celem niniejszej pracy to: 1. Przygotowanie systemu umożliwiającego w prosty sposób na podstawie przygotowanych danych w formacie Przewodas-a na przygotowanie gotowego do dystrybucji midletu. 2. Opcjonalnie rozszerzenie systemu umożliwiające generowanie na przykład: (a) dwóch wersji midletu (MIDP 1.0 - stare telefony komórkowe, oraz MIDP 2.0 - nowe telefony komórkowe) (b) aplikacji w formacie SIS przeznaczonej do uruchomienia na telefonach z systemem operacyjnym Symbian (c) stron WWW lub WAP prezentujących te same dane 3. Przepisanie aktualnie wykorzystywanego kompresora danych z języka C++ do Javy (rozwiązanie musi być przenośne oraz proste w instalacji) 4. Refactoring oraz udokumentowanie kodów źródłowych 5. Przygotowanie dokumentacji dla wszystkich elementów systemu a w szczególności dokumentacji użytkownika skierowanej do osób które chciałyby wyłącznie korzystać z tego efektów jego rozwoju 1.2 Rozwiązanie przyjęte w pracy Wszystkim czynnościom programistycznym realizowanych w ramach pracy przyświecał podstawowy cel czyli przygotowanie rozwiązanie możliwie jak najbardziej otwartego i przenośnego. W efekcie wszystkie wykorzystywane narzędzia (opisane w rozdziale trzecim) to produkty o otwartym kodzie które umożliwiają ich nieodpłatne wykorzystywanie także do celów komercyjnych. Wiodącym językiem programowania był język Java dzięki któremu możliwe było uzyskanie pełnej niezależności od platformy sprzętowej i zastosowanego systemu operacyjnego. Także w procesie dokumentowania wyników prac (czego niniejszy dokument jest elementem) wykorzystywane były standardowe technologie jak np. notacja BNF wykorzystana do opisu formatu danych. Strona 6 z 59
1.2 Rozwiązanie przyjęte w pracy Opisy kodu źródłowego oraz dokumentacja techniczna zostały przygotowane w języku angielskim (lub w niektórych wypadkach dodatkowo w języku polskim) co w założeniu powinno zwiększyć potencjalne audytorium tych materiałów. Celem autora jest także (po uzyskaniu zgody promotora) upublicznienie pracy w całości oraz przetłumaczenie jej najistotniejszych fragmentów na język angielski. Strona 7 z 59
2 Kontekst pracy 2 Kontekst pracy Problematyka zarysowana w rozdziale 1 na stronie 5 nie jest zagadnieniem nowym. Dostępnych jest wiele rozwiązań różniących się między sobą zastosowaną technologią i podejściem autorów do własności intelektualnej. Niniejszy rozdział prezentuje kilka wybranych przedstawicieli poszczególnych grup rozwiązań podając dla każdego z nich krótki opis. Podsumowanie dostępne na końcu rozdziału prezentuje zestaw cech których kombinacja nie jest dostępna na rynku wyznaczając tym samym kierunek dalszej pracy. 2.1 Dostępne na rynku rozwiązania Poniższe zestawienie pokazuje przekrój dostępnych na rynku rozwiązań służących do prezentacji rozkładów jazdy (lub zbliżonych informacji) na urządzeniach przenośnych. Dla każdego z opisanych rozwiązań można znaleźć kilka odpowiedników o zbliżonym charakterze. Jazdy.net Jazdy.net (http://jazdy.net/) to rozwiązanie wyspecjalizowane w prezentacji rozkładów jazdy przewoźników głównych polskich aglomeracji. Jest to przykład zamkniętego rozwiązania nastawionego na zdobycie i utrzymywanie możliwie dużej ilości rozkładów przewoźników z poszczególnych miast. Podsumowanie: technologia: Rozwiązanie umożliwia prezentację danych na trzy sposoby: midlet Java (dalszy opis koncentruje się na tym przypadku), strony HTML i bot 1 Gadu-Gadu model biznesowy: Rozwiązanie bezpłatne o zamkniętym kodzie. Autorzy zachęcają do współpracy przy tworzeniu własnych wersji ale sprawują pełną kontrolę nad dystrybucją wersji aplikacji. zakres danych: Kilkanaście miast w Polsce; słaba aktualność danych ograniczenia: : zastosowany algorytm kompresji jest mało wydajny; już przy umieszczeniu kilku linii w aplikacji (średniej wielkości miasto ma około 100 linii) rozmiar aplikacji przekracza 64kb co uniemożliwia jej instalację na starszych modelach telefonów 1 [WIKI] Bot to program wykonujący pewne czynności w zastępstwie człowieka. Czasem jego funkcją jest udawanie ludzkiego zachowania lub wykonywanie zautomatyzowanych czynności. W tym kontekście jest to automatyczny użytkownik sieci Gadu-Gadu odpowiadający na pytania związane z rozkładami Strona 8 z 59
2.1 Dostępne na rynku rozwiązania MMPK rozwiązanie zamknięte; własną wersję rozkładu można przygotować wyłącznie w porozumieniu z autorami i przy założeniu, że efekt pracy będzie hostowany na serwerach Jazdy.net brak dokumentacji dla osób chcących przygotować własną wersję aplikacji (wynika z podejścia autorów opisanego powyżej) brak narzędzi (j.w.) Rozwiązaniem o podobnym modelu jak Jazdy.net jest aplikacji mmpk (http://www. mmpk.info/). Podobnie jak w powyższym przykładzie nie znajdziemy na stronie projektu informacji i narzędzi umożliwiających samodzielne przygotowanie własnej wersji aplikacji. Podsumowanie: technologia: Midlet Java i strony HTML model biznesowy: Rozwiązanie bezpłatne o zamkniętym kodzie zakres danych: Kilkanaście miast w Polsce; wysoka aktualność danych ograniczenia: Ze względu na zbliżony do rozwiązania Jazdy.net modelu biznesowego ograniczenia mmpk są bardzo podobne włączając w to także słaby algorytm kompresji (co może wynikać z generyczności rozwiązania) PKP Spółka Polskie Koleje Państwowe S.A. udostępnia rozkład jazdy własnych środków komunikacji za pośrednictwem kilku wymienionych poniżej mediów. Podstawowym źródłem (i najpełniejszym) źródłem informacji są jak zwykle w takim wypadku strony HTML. Ich uzupełnienie stanowią rozkłady SMS i WAP. W przypadku SMS komunikacja odbywa się zgodnie z zasadą pytanie - odpowiedź. Przykład takiej komunikacji (za stroną http: //pkp.pl/cop/rozkladsms) wygląda następująco: żądanie : Kutno do torun 1015 odpowiedź : 27.12.2008:Kutno->Torun Glowny 10:31*P 25101*p0*11:46 11:25*P 45101*p0*12:39 Strona 9 z 59
2.1 Dostępne na rynku rozwiązania Strony WAP (http://pkp.pl/node/297 są uproszczoną wersją głównych stron z rozkładami przewoźnika. Dostęp do nich jest aktywowany czasowo płatną wiadomością SMS. Podsumowanie: technologia: Rozkłady jazdy PKP dostępne są: na stronach HTML przewoźnika; za pomocą usługi SMS; za pomocą usługi WAP model biznesowy: Płatne rozwiązania komercyjne (jedynie dostęp do stron HTML jest bezpłatny zakres danych: Środki komunikacji przewoźnika ograniczenia: Podstawowym ograniczeniem rozwiązania w kontekście tej pracy jest zamknięcie rozwiązania. Ze swojej definicji rozwiązania to nie może być wykorzystywane w innych niż określonych przez PKP celach Timetableme Timetableme (http://timetableme.wordpress.com/) jest jedynym znalezionym rozwiązaniem które jest platformą to tworzenia aplikacji a nie gotowym jednorazowym produktem. Strona projektu informuje w jaki sposób przygotować własną wersję aplikacji. Rozwiązanie jest bardzo proste w dostosowaniu do własnych potrzeb autor ocenia, że przygotowanie własnej wersji aplikacji wymaga mniej niż godziny pracy. Niestety prostota rozwiązanie okazuje się jej słabością w większych rozwiązaniach. Timetableme nie posiada narzędzia do kompresji danych umieszczanych w aplikacji. Z tego powodu jakiekolwiek zastosowanie na większą skalę nie jest możliwe. Dla przykładu aplikacja na średniej wielkości miasta w Polsce miałaby rozmiar około 1MB i miałaby nieakceptowalne czasy odpowiedzi. Podsumowanie: technologia: Midlet Java dla profilu MIDP 2.0 model biznesowy: Bezpłatne narzędzie o otwartym kodzie zakres danych: Platforma specjalizowana w rozkładach jazdy; autor nie hostuje gotowych rozwiązań ani nie podaje przykładów zastosowań ograniczenia: Brak narzędzia do kompresji danych Strona 10 z 59
2.2 Podsumowanie 2.2 Podsumowanie Przedstawione powyżej zestawienie dostępnych na rynku rozwiązań służących prezentowaniu rozkładów jazdy na urządzeniach mobilnych pokazuje, że brakuje rozwiązań spełniających równocześnie następujące warunki: 1. Otwartość kodu rozwiązanie musi udostępniać kompletne źródła na licencji umożliwiającej dalszą modyfikację i redystrybucję bez zgody autora (jedna z licencji OpenSource) 2. Bezpłatność rozwiązanie musi być dostępnie nieodpłatnie do celów prywatnych i komercyjnych 3. Dokumentacja rozwiązania musi być wystarczająca do samodzielnego przygotowania własnej wersji aplikacji 4. Rozwiązanie musi być wyposażone w wydajny kompresor danych umieszczanych w aplikacji 5. Rozwiązanie musi być dostosowane do tworzenia wielu wersji językowych Zakres tych wymagań definiuje w uproszczony sposób cele pracy. Wymagania te zostały uszczegółowione w rozdziale 4 na stronie 21. Strona 11 z 59
3 Opis narzędzi zastosowanych w pracy 3 Opis narzędzi zastosowanych w pracy Jednym z podstawowych celów pracy było przygotowanie kompletu narzędzi dostępnych dla wszystkich zainteresowanych osób. Narzuca to konieczność stosowania wyłącznie rozwiązań multiplatformowych z naciskiem na narzędzie których przygotowanie do pracy (proces instalacji i konfiguracji) jest bardzo proste. Całość pracy została przygotowana pod kontrolą systemu operacyjnego MAC OS X 10.4.X a same narzędzia testowane na zgodność pod systemami operacyjnymi: 1. Microsoft Windows XP Professional EN 2. Linux Ubuntu 8.10 Desktop Edition Ww. systemy operacyjne były uruchamiane za pomocą narzędzia do wirtualizacji VirtualBox (patrz rozdział 3.6 na stronie 19). 3.1 Język programowania Java Java to obiektowy język programowania stworzonym przez firmę SUN Microsystems. Kod źródłowy programu napisanego w tym języku jest kompilowany do tak zwanego kodu bajtowego (byte-code) czyli do postaci wykonywanej przez maszynę wirtualną 1. Podstawowym kryterium dla którego został wybrany ten język była pełna przenośność przygotowanej w tym języku aplikacji między różnymi platformami. Drugim istotnym argumentem przemawiającym za tym językiem była możliwość zastosowania go zarówno do tworzenia pomocniczych narzędzi desktopowych (jak kompresor) jak i tworzenia mobilnej aplikacji klienckiej. Pełen opis wraz uzasadnieniem znajduje się w następnym rozdziale ( 3.2). Strona producenta: http://java.sun.com. 3.2 Technologia tworzenia mobilnej aplikacji Istnieje wiele rozwiązań umożliwiających dostarczenie informacji na urządzenie przenośne. Do najpopularniejszych należą: 1. Wireless Application Protocol 2. SMS 3. Rozwiązania natywne 4. JME 1 [WIKI] Wirtualna maszyna Javy (ang. Java Virtual Machine, w skrócie JVM) to zależny od platformy system uruchomieniowy dla programów napisanych w języku Java Strona 12 z 59
3.2 Technologia tworzenia mobilnej aplikacji 3.2.1 Wireless Application Protocol Wireless Application Protocol (WAP) to zbiór standardów definiujących protokół aplikacji bezprzewodowych. Wersja 1.0 tego standardu powstała w 1998 roku a wersja 2.0 w roku 2001. WAP umożliwia dostęp do usług WWW urządzeniom o niewielkiej mocy obliczeniowej, niewielkiej ilości pamięci oraz ograniczonym połączeniu z siecią internet (głównie telefony komórkowe). W wersji 1.0 standardu językiem opisu stron był WML (Wireless Markup Language). Aplikacje WML to pliki XML o ograniczonej ilości znaczników (względem języka HTML). W wersji 2.0 WAP standardem opisu stron jest specjalny profil pełnego formatu XHTML XHTML Mobile Profile (XHTML-MP). Istnieją rozwiązania umożliwiające generowanie aplikacji WML lub XHTML-MP w zależności od urządzenia które wysłało żądanie. Zastosowanie technologii WAP ma tą podstawową zaletę, że zapewnia aktualność prezentowanych danych. Przy każdym przeglądaniu danych mamy najświeższe informacje z serwera je udostępniającego. Naturalną konsekwencją tego jest niestety konieczność ponoszenia kosztów związanych z dostępem do internetu za każdym razem gdy użytkownik chciałbym skorzystać z aplikacji. Nie bez znaczenia jest tutaj także czynnik psychologiczny powszechne jest przekonanie o bardzo dużych kosztach połączeń internetowych oraz stopień rozpowszechnienia tej usługi w Europie (opisuję sytuację za [WIKI], http://en.wikipedia.org/wiki/wireless_ Application_Protocol). 3.2.2 SMS W przypadku Short Message Service (SMS) typowy scenariusz sprowadza się do wysłania przez klienta zapytania w ustalonym formacie (np. 8 mickiewicza co oznaczałoby żądanie otrzymania rozkładu dla linii 8 na przystanku Adama Mickiewicza ) i otrzymaniu odpowiedzi także w ustalonym formacie. Podstawowe wady tego rozwiązania które zdecydowały o odrzuceniu tej technologii: 1. Konieczność ponoszenia kosztów przez obie strony (usługobiorcę i usługodawcę) 2. Konieczność zapewnienia integracji z bramką SMS która ze względu na opłaty roamingowe jest skutecznym narzędziem tylko w obrębie jednego kraju 3. Konieczność stosowania niewygodnego szyfrowego wysyłania zapytań przez użytkowników 4. Ograniczenie wielkości wiadomości SMS do 160 znaków (przy 7 bitach na znak) znacznie utrudnia przekazanie pełnej informacji zwrotnej Strona 13 z 59
3.2 Technologia tworzenia mobilnej aplikacji 3.2.3 Rozwiązania natywne Przez sformułowanie rozwiązania natywne rozumiane jest budowanie aplikacji przeznaczonej na specyficzny rodzaj systemu operacyjnego urządzenia. Zazwyczaj są to droższe urządzenia zwane Smartphone-ami. Lista takich systemów operacyjnych (w kolejności wynikającej z udziału w rynku Europejskim): 1. Symbian OS 2. Windows Mobile 3. RIM Blackberry 4. iphone OS (Mac OS X) 5. PalmOS 6. Linux 7. Android 8. BREW Programowanie w sposób specyficzny dla platformy umożliwia pełne wykorzystanie możliwości urządzenia. Jest to szczególnie przydatne dla aplikacji multimedialnych i usługowych. Niestety aplikacja taka będzie pracować wyłącznie pod kontrolą konkretnego systemu operacyjnego. Zazwyczaj konieczne jest tworzenie wielu wersji tej samej aplikacji dla różnych modeli. Dodatkowo na niekorzyść stosowanie tej technologii działa konieczność stosowania (najczęściej płatnych i nieprzenośnych) narzędzi programistycznych producenta platformy. 3.2.4 Java Platform Micro Edition Java Platform Micro Edition (nazywana wcześniej Java 2 Platform ME lub JME) to specyfikacja firmy Sun Microsystems opisująca uproszczoną wersję platformy Java. Została ona zaprojektowana z myślą o urządzeniach o ograniczonych zasobach (szybkość procesora, pamięć, możliwości komunikacji z użytkownikiem). Zasada działania znana z Javy uruchamianie byte-codu w ramach wirtualnej maszyny (zwanej tutaj K Virtual Machine KVM) pozostaje bez zmian. Różnica sprowadza się do zbioru klas udostępnionych przez wirtualną maszynę. Dwie podstawowe zalety tej platformy (w kontekście tej pracy) to przenośność przygotowanej aplikacji między różnymi urządzeniami oraz udział urządzeń z obsługą Java w rynku. Strona 14 z 59
3.2 Technologia tworzenia mobilnej aplikacji JME występuje w dwóch podstawowych konfiguracjach: CDC (Connected Device Configuration) i CLDC (Connected Limited Device Configuration). Obie określają zakres dostępnych w konfiguracji klas przy czym druga z nich jest podzbiorem pierwszej i została zaprojektowana specjalnie z myślą o najbardziej ograniczonych zasobach. W ramach tych konfiguracji funkcjonują tak zwane profile. Dla CLDC wykorzystywany jest profil MIDP (Mobile Information Device Profile). Jest to rozszerzenia podstawowej konfiguracji CLDC o klasy specyficzne dla Java ME. MIDP 1.0 z 2000 roku zawiera podstawowe operacja wejścia wyjścia oraz możliwość budowania prostych aplikacji. MIDP 2.0 z roku 2002 został rozszerzony o multimedia oraz posiada więcej mechanizmów interakcji z urządzeniem. Oba profile mogą być wzbogacane o opcjonalne pakiety. Pakiety te są standaryzowane w ramach JCP (Java Community Process) i są numerowane w formie JSR-XXX (Java Specification Requests). Dla przykładu JSR-179 to Location API for J2ME (patrz rozdział 6.5 na stronie 50). Aby mieć możliwość wykorzystywanie tego API niezbędne jest posiadanie telefonu wspierającego to rozszerzenie. W swojej najprostszej postaci (rozumianej jako konfigurację CLDC 1.0, profil MIDP 1.0 bez rozszerzeń) JavaME oferuje bardzo dużą przenośność i zgodność pomiędzy poszczególnymi platformami. Wykorzystując w swoich rozwiązaniach wyższe profile lub opcjonalne pakiety należy zweryfikować ich dostępność na docelowych urządzeniach. Możliwości poszczególnych urządzeń można sprawdzić w bazie firmy SUN: http://developers.sun.com/mobility/device/device Podsumowanie W tabeli 1 na następnej stronie zebrano najważniejsze z opisanych powyżej technologii. Wybór i uzasadnienie Na podstawie zebranych informacji jako narzędzie to tworzenia mobilnej aplikacji została wybrana technologia JME. Przemawiają za nią następujące argumenty: 1. Duży udział urządzeń wspierających tą technologię nawet wśród tanich urządzeń 2. Dostępność darmowych, dopracowanych narzędzi programistycznych (także dla platformy OS X), dokumentacja i duża społeczność programistyczna 3. Wystarczające możliwości interakcji z użytkownikiem i prezentacji danych 4. Duża przenośność binarnej aplikacji Strona 15 z 59
3.3 Środowisko programistyczne Eclipse Tabela 1: Podsumowanie technologii tworzenia mobilnych aplikacji Nazwa technologii JavaME Symbian SMS WAP PocketPC Programowanie Język programowania Java C++ XHTMLn/d WML/ C, C++ MP Trudność nauki średnia duża średnia mała średnia Środowisko programistyczne dostępne dostępne dostępne dostępne dostępne Koszty narzędzi darmowe płatne n/d darmowe płatne Przenośność aplikacji średnia mała duża duża mała Format aplikacji jad/jar sis n/d wml, xhtml cab Społeczność programistyczna duża duża n/d duża średnia Możliwości Możliwości wystarczającrczającjące duże niewysta- wystarcza- duże Szybkość działania średnia szybka n/d średnia szybka Możliwość zapisania konfiguracji tak tak nie nie tak Penetracja rynku bardzo duża Rynek mała bliska 100% bardzo duża mała 3.3 Środowisko programistyczne Eclipse Eclipse to platforma do tworzenia aplikacji desktopowych (fat-client, rich-client) napisana w języku programowania Java. Projekt został stworzony przez firmę IBM a następnie przekazany społeczności OpenSource. Od 2003 roku jest on rozwijany przez Fundację Eclipse do której należy ponad 120 firm w tym IBM, Borland Intel, Motorola, Nokia, Oracle, SAP. Na tej bazie tej platformy powstało zintegrowane środowisko programistyczne (IDE) rozpowszechniane wraz z nią (stąd nazwa Eclipse jej często utożsamiana właśnie z IDE). Wszystkie komponenty rozwiązania napisane w języku Java zostały przygotowane właśnie w tym narzędziu ale z założeniem, że ich edycja i budowania może odbywać się z wykorzystaniem innych środowisk programistycznych (więcej w następnym rozdziale oraz podrozdziale 3.4.1 na następnej stronie). Strona 16 z 59
3.4 Zestaw narzędzi i bibliotek do developmentu JME na OS X Strona domowa projektu to http://www.eclipse.org. 3.4 Zestaw narzędzi i bibliotek do developmentu JME na OS X Tworzenie rozwiązań w technologii JME wymaga kilku dodatków do Java Development Kit (JDK). Dla systemu Linux oraz Windows możliwe jest pobranie gotowych, zintegrowanych środowisk programistycznych JME. Umożliwiają on edycję kodu, graficzne projektowanie midletów (aplikacji mobilnych), uruchamianie i debugowanie aplikacji (w emulatorze i urządzeniu), optymalizację wielkości aplikacji czy preprocessing. Niestety takie kompleksowe rozwiązania nie są dostępne dla systemu operacyjnego Mac OS X. Z tego względu konieczne stało się stworzenie generycznego rozwiązania które pozwoli na współpracę nad projektem programistom na różnych platformach bez konieczności wprowadzania poprawek np. w skryptach budujących. Poniżej opisane są poszczególne elementy kompletnego, multiplatformowego zestawu narzędzi developerskich JME. 3.4.1 Apache Ant Apache Ant to narzędzie służące do zautomatyzowania procesu budowy oprogramowania. Podobne do programu Make ale napisane w języku Java do wykorzystania przede wszystkim z programami napisanymi w tym języku. Ant jest w pełni przenośni umożliwia uruchomienie cyklu budowania oprogramowania na dowolnym systemie operacyjnym dla którego powstała wirtualna maszyna Java. Strona domowa: http://ant.apache.org 3.4.2 Sun Java Wireless Toolkit SUN WTK to zestaw narzędzi programistycznych niezbędnych do tworzenia aplikacji dla platformy JME. Zawiera emulator, narzędzia do optymalizacji wielkości źródeł, dokumentację oraz przykłady. Niestety rozwiązanie to nie jest napisane wyłącznie w Java a dostępne w sieci wersje są przeznaczone wyłącznie na systemy operacyjne Windows i Linux. Z tego względu w moim rozwiązaniu wykorzystuję wyłącznie biblioteki Java dołączone do pakietu oprogramowania oraz dokumentację. Emulator oraz optymalizator nie jest wykorzystywany. Strona domowa: http://java.sun.com/products/sjwtoolkit/ 3.4.3 Antenna Antenna to biblioteka rozszerzający standardowy zestaw poleceń narzędzia do budowania oprogramowania Ant (patrz 3.4.1) o polecenia wspomagające tworzenie mobilnych aplikacji dla platformy JME. Strona 17 z 59
3.4 Zestaw narzędzi i bibliotek do developmentu JME na OS X Tworzenie aplikacji mobilnych w Java zawiera niestandardowe względem zwykłej (J2SE) Javy etapy budowania oprogramowania jak: 1. Tworzenie pliku aplikacji w formacie JAR wraz z odpowiednim plikiem MANIFEST.MF 2. Tworzenie pliku opisujące aplikację (JAD) 3. Optymalizacja wielkości aplikacji poprzez usunięcie z wynikowego pliku nieużywanych części kodu (klas). 4. Preprocesor umożliwia stworzenie kilku wersji tej samej aplikacji na podstawie założeń wstępnych. Dzięki temu aplikacja budowana na kilka rodzajów urządzeń wymagających specyficznych fragmentów kodu zawierać wyłącznie niezbędne elementy. 5. Podpisywanie aplikacji Wszystkie te zadania zostały przygotowane jako tak zwane taski narzędzia Ant upraszczając tworzenie aplikacji. Strona domowa: http://antenna.sourceforge.net/ 3.4.4 BlueCove BlueCove to darmowa implementacja standardu JSR-82 umożliwiająca obsługę urządzeń Bluetooth z poziomu języka Java. Implementacja ta działa na Linux, MAC OS X i Windows XP, Vista i Mobile (więcej szczegółów na stronie http://code.google.com/ p/bluecove/wiki/stacks). Narzędzie to było wykorzystywane do automatycznego ładowania aplikacji do urządzenia przenośnego wyposażonego w interfejs Bluetooth. Strona domowa: http://code.google.com/p/bluecove, http://www.bluecove.org/ 3.4.5 Microemulator Microemulator to emulator umożliwiający uruchamianie aplikacji napisanych dla platformy JME napisany w języku Java SE. Umożliwia do testowanie mobilnych aplikacji JME bez konieczności wgrywania kodu na urządzenie mobilne. Strona domowa: http://www.microemu.org/ Strona 18 z 59
3.5 Język programowania Perl 3.4.6 ProGuard ProGuard jest darmowym optymalizatorem, obfuskatorem 1 i weryfikatorem kodu języka Java. Usuwa nieużywane fragmenty kodu. Zmienia nazewnictwo klas i zmiennych na możliwie najkrótsze odpowiedniki. Dzięki zastosowaniu tego narzędzia wynikowa aplikacja staje się od kilku do kilkunastu procent mniejsza. Strona domowa: http://proguard.sourceforge.net/ 3.5 Język programowania Perl Język Perl został wykorzystany jak procesor tekstu transformujący strony HTML operatora komunikacji miejskiej w Szczecinie do formatu Przedodas-a. Ponieważ ta część pracy i tak musi być wykonana samodzielnie przez programistę kod w tym języku należy traktować wyłącznie jako przykład implementacji który może być pomocny przy tworzeniu własnego rozwiązania. Strona domowa: http://www.perl.org/ 3.6 VirtualBox Sun xvm VirtualBox to oprogramowanie służąco do wirtualizacji zasobów opartych o procesory Intel X86. Umożliwia emulację wirtualnego komputera na jednym z systemów operacyjnych Windows, Linux, OS/2 czy *BSD. Na takim komputerze możliwe jest zainstalowanie praktycznie dowolnego OS działającego na architekturze X86. W kontekście tej pracy autor wykorzystywał VirtualBox-a to testowania tworzonych rozwiązań na dwóch dodatkowych systemach operacyjnych. Na zainstalowanym na fizycznym komputerze systemie OS X 10.4.X uruchamiane były: 1. Microsoft Windows XP Professional EN 2. Linux Ubuntu 8.10 Desktop Edition Narzędzie to było wykorzystywane przez autora na etapie projektowanie rozwiązań służących przyszłym użytkownik systemu. 1 [WIKI] Zaciemnianie kodu (także obfuskacja, z ang. obfuscation) to technika przekształcania programów, która zachowuje ich semantykę, ale znacząco utrudnia zrozumienie. Istnieją również narzędzia (obfuskatory) modyfikujące kod źródłowy, pośredni bądź binarny w celu utrudnienia inżynierii wstecznej programu Strona 19 z 59