praca dyp._stec

Transkrypt

praca dyp._stec
Politechnika Opolska
Wydział Elektrotechniki, Automatyki i Informatyki
Instytut Układów Elektromechanicznych i Elektroniki Przemysłowej
PRACA DYPLOMOWA
Studia pierwszego stopnia
stacjonarne
Informatyka
REALIZACJA PARSERA WYRAŻEŃ MATEMATYCZNYCH
NA PLATFORMIE ANDROID
Pracę wykonał:
Wojciech STEC
nr albumu:
Promotor:
dr inż. Grzegorz Paweł Korbaś
Opole, grudzień 2011
1
REALIZACJA PARSERA WYRAŻEŃ MATEMATYCZNYCH
NA PLATFORMIE ANDROID
STRESZCZENIE
W pracy przedstawiony został opis realizacji oraz sposób działania parsera wyrażeń
matematycznych, na podstawie programu oraz biblioteki własnego autorstwa, napisanych w
języku Java oraz skompilowanych pod platformę mobilną Google Android. Program, który
można uruchomić wyłącznie na wirtualnej maszynie Javy działającą na platformie Google
Android jest tylko nakładką graficzną, zawierającą edytor wyrażeń matematycznych oraz
klawiaturę numeryczną, na bibliotekę, która pełni tutaj tak naprawdę główną rolę całego systemu i jest w pełni przenośna na każdą platformę oraz system operacyjny.
PARSER IMPLEMENTATION OF MATHEMATICAL EXPRESSIONS ON ANDROID PLATFORM
SUMMARY
This document presents a description and how work the mathematical expression parser based on the program and the library own authorship, written in Java and compiled into
Google Android platform. A program that can be run exclusively on a Java virtual machine running on Google's Android platform is just a graphical frontend to the library, which
serves here as a really key role the entire system and is fully portable to any platform and operating system.
2
1.
CEL I ZAKRES PRACY
Celem pracy jest stworzenie programu oraz biblioteki na mobilną platformę
Android, wykonywujących podane przez użytkownika dane wejściowe oraz wyświetlenie wyniku w postaci graficznej, jak i listy kolejnych, wykonanych obliczeń. Dane
nie muszą być prawidłowym wyrażeniem matematycznym, ponieważ jedną z dodatkowych funkcji biblioteki jest znalezienie oraz zaznaczenie użytkownikowi popełnionych błędów.
Biblioteka programu będzie całkowicie napisana w języku Java, dzięki czemu
będzie między-platformowa i będzie można ją umieszczać w projektach napisanych
dla każdego systemu operacyjnego (mającego zainstalowaną maszynę wirtualną Javy).
Zostanie ona w przyszłości udostępniona innym programistom wraz z jej specyfikacją,
dzięki czemu będą ją mogli implementować w swoich projektach.
Program będzie komunikował się z biblioteką w celu przesłania jej wpisywanych przez użytkownika wyrażeń, a w zamian będzie oczekiwał zwrócenie graficznej
interpretacji wyrażenia zawierającej wyniku (w przypadku, gdy wyrażenie będzie
skończone oraz prawidłowe), wskazania ewentualnych miejsc, w których znajdują się
błędy oraz osobnej tablicy, zawierającej listę kolejnych wykonanych obliczeń.
3
2.
WSTĘP
W dzisiejszych czasach rozwiązanie skomplikowanych obliczeń łatwiej jest
wykonać za pomocą kalkulatorów, niż pisemnie za pomocą kartki oraz długopisu. Istnieją różne rodzaje kalkulatorów, od tych popularnych, służących do domowego użytku zawierających jedynie cztery podstawowe typy działań – dodawanie, odejmowanie,
mnożenie i dzielenie, aż do naukowych, zawierające możliwość wykonywania skomplikowanych działań czy wykresów obliczonych funkcji. Brakowało do tej pory klasyfikacji innego typu kalkulatorów, a mianowicie wyświetlającego kroki wykonanych
działań. Jest to opcja przydatna szczególnie uczniom (oraz w niektórych wypadkach
studentom), którzy korzystają z kalkulatora jako narzędzia do rozwiązywania całości
zadań bez znajomości podstawowych zasad matematycznych, takich jak chociażby kolejność wykonywania działań, czy wzory skróconego mnożenia. Właśnie z powodu
największego zainteresowania takim typem programów przez osoby uczące się, można
by bez problemu taki typ programu nazwać Szkolnym.
Autor nie spotkał z żadnym urządzeniem, które mogłoby obliczać samodzielnie
wyrażenia, prawdopodobnie z powodu ilości pamięci instalowanych w dotychczas
znanych urządzeniach typu kalkulator. Istnieją już natomiast strony internetowe,
umożliwiające wykonywanie takich działań. Niestety tutaj pojawia się problem mobilności, ponieważ do obsługi tych stron potrzebne jest połączenie z Internetem, a co
najważniejsze – posiadanie komputera, co wyklucza całkowicie mobilność. Można by
skorzystać z laptopa – wtedy o mobilności możemy mówić, lecz takie rozwiązanie będzie nieodpowiednie dla uczniów, próbujących wykonywać obliczenia na lekcjach w
szkole. Istniejące na rynku Smartfony w teorii mogły by umożliwiać otwieranie takich
stron w swoich przeglądarkach Internetowych, lecz są one napisane w różnych językach programowania (jak np. Java), do obsługi których nawet telefony potrzebują specjalnych wtyczek (ang. Plug-ins). Można się natknąć na aplikacje pośredniczące w
przekazywaniu wpisanych przez użytkownika wyrażeń do aplikacji Internetowej, lecz
tutaj pojawia się problem z połączeniem Internetowym, które nie zawsze jest dostępne, a nawet jeśli, to odebranie wyniku może wiązać się z dosyć dużymi dodatkowymi
kosztami.
Najlepszym w tym wypadku rozwiązaniem jest program, który umożliwia wykonywanie większości problemów matematycznych bez konieczności połączenia z Internetem, na urządzeniu o niewielkich rozmiarach i bez potrzeby korzystania z ogromnej ilości pamięci i działający na wszystkich dotychczas wyprodukowanych urządzeniach mobilnych i udostępniający dodatkowe funkcjonalności dla programistów tworzących podobne rozwiązania.
4
3.
Narzędzia i środowisko programistyczne
W niniejszym rozdziale zostały opisane wykorzystane narzędzia programistyczne wraz z językiem programowania oraz środowiskiem uruchomieniowym pisanych aplikacji. Autor niniejszej pracy nie miał wyboru języka programowania pod
Android, ponieważ Java jest jedynym oficjalnym językiem. Wszelkie programy uruchamiane na systemie Android są uruchamiane w osobnych wirtualnych maszynach,
które interpretują jedynie język Java. Istnieją już oczywiście próby napisania aplikacji,
którą będzie tłumaczyła kod napisany w innym języku na kod Javy, a następnie na język wirtualnej maszyny1, lecz jeżeli sama Java jest wolna, to takie rozwiązanie będzie
katastrofą. W każdym razie, takie rozwiązania nie są wspierane przez Google, twórcę
systemu Android.
Zanim będzie możliwość zainstalowania niżej wymienionych narzędzi, należy
zaopatrzyć się w JDK (ang. – Java Development Kit) w wersji co najmniej 5, którą
można pobrać z oficjalnej strony Sun Java2. Pakiet ten jest potrzebny, ponieważ
wszystkie narzędzia napisane zostały właśnie w tym języku, w przeciwnym wypadku
nie będziemy mogli zainstalować żadnego z nich.
3.1. Android SDK
Android SDK (ang. – Software Development Kit) jest jednym z podstawowych
narzędzi, które należy zainstalować przed rozpoczęciem pracy z programem Eclipse i
pisaniem aplikacji pod system Android. Znajduje się tam między innymi odpowiedni
kompilator, dzięki któremu będzie możliwe uruchomienie aplikacji w jej naturalnym
środowisku.
Instalacja i konfiguracja tego pakietu sprowadza się jedynie do pobrania jego
pliku instalacyjnego (lub spakowanego archiwum) z oficjalnej strony oprogramowania3 i uruchomienie go.
3.2. Eclipse
Eclipse jest platformą typu framework napisaną w języku Java, którą można
uruchomić na praktycznie każdym systemie operacyjnym, posiadającym zainstalowaną wirtualną maszynę Java (która rozpowszechniana w tym momencie jest na prak1
http://gphone.pl/artykuly/jesli-nie-java-to-co-czyli-inne-jezyki-programowania-na-platofrme-android/
http://www.oracle.com/technetwork/java/javase/downloads/index.html
3
http://developer.android.com/sdk/index.html
2
5
tycznie każdym systemie operacyjnym). Schemat aplikacji został przedstawiony na
Rysunku 3.1.
Rys. 3.1.
Schemat interfejsu aplikacji Eclipse
Sama aplikacja nie dostarcza żadnych narzędzi służących do tworzenia kodu i budowania aplikacji, oferuje jednak obsługę Pluginów (pol. – wtyczki) rozszerzających jej
funkcjonalność, umożliwiających m.in. rozwijanie aplikacji w językach Java, C/C++,
PHP, tworzenie GUI (ang. – Graphical User Interface, pol. – Graficzny Interfejs Użytkownika) i wiele innych. Deweloperzy zadbali o to, aby aplikacja była dostarczona w
takiej formie, jakiej użytkownicy od niej oczekują, a mianowicie przygotowane są odpowiednie paczki instalacyjne zawierające wszystkie potrzebne narzędzia do rozpoczęcia pracy z wybranym językiem programowania, takie jak kompilatory i sprawdzanie poprawności kodu. Dla celów pisania niniejszej pracy, autor pobrał z oficjalnej
strony internetowej projektu Eclipse wersję programu Eclipse IDE for Java Developers, która standardowo zawiera wszelkie wtyczki potrzebne do pisania aplikacji w języku Java.
Środowisko jest gotowe do pisania aplikacji w języku Java, lecz pod systemy
desktopowe. W celu rozpoczęcia pracy nad tworzeniem oprogramowania pod system
mobilny Android, należy pobrać dodatkowy plugin ADK (ang. – Android Development Kit), który znacznie ułatwia pisanie takich aplikacji, ponieważ posiada m.in.
narzędzia do debugowania (ang. – debugging, pol. – odrobaczanie, tutaj: usuwanie
błędów) oraz do tworzenia graficznego interfejsu użytkownika. Aby przystąpić do pobrania ADK, należy w programie Eclipse otworzyć menu Help i wybrać opcję Install
New Software... . W nowym oknie, w polu Work with: należy wpisać adres internetowy4 do pluginu ADK i zatwierdzić klawiszem Enter. Po chwili zostanie pobrana lista
oprogramowania dostępnego pod podanym adresem internetowym (taka, jak widoczna
na rysunku 3.2).
4
http://dl-ssl.google.com/android/eclipse/
6
Rys. 3.2.
Lista pluginów oraz ich wersji dostępnych do pobrania, znajdujących się pod wpisanym
adresem serwera internetowego
Po zakończeniu pobierania najlepiej zrestartować program Eclipse, a po ponownym
uruchomieniu skonfigurować odpowiednio pobrane wtyczki. Aby to zrobić, należy w
menu Window wybrać opcję Preferences i w sekcji Android wpisać ścieżkę do zainstalowanego SDK Androida w polu SDK Location.
3.3. Język programowania Java
Zorientowany obiektowo język programowania stworzony w firmie Sun Microsystem (przejęta przez Oracle w 2010 roku) pod kierunkiem Jamesa Goslinga i
opublikowany w 1995 roku wraz z JVM (ang. – Java Virtual Machine, pol. – Maszyna
Wirtualna Java). Większość elementów składni języka zaczerpnięto z C++5, a rozwiązania takie jak maszyna wirtualna czy automatyczne zwalnianie pamięci z Smalltalk6.
Od początku firma Sun wyznaczyła najważniejsze cechy Javy jako platformy:
powinien być prosty w użyciu, z "przyjazną" składnią
,
powinien bezpieczny i "solidny"
,
powinien być neutralny architektonicznie i łatwy w rozszerzeniu ,
powinien zapewniać wysoką wydajność
,
powinien być interpretowany, wielowątkowy i dynamiczny.
Język rzeczywiście posiada uproszczoną w stosunku do C++ składnię. Zrezygnowano
też z dualnego dostępu do zmiennych - przez wartość i przez referencję, na rzecz
przekazywania obiektów przez referencję. Język nie wspiera przeciążania operatorów
(choć operator + został przeciążony dla klasy String ) ani nie umożliwia tworzenia
własnych. Jednocześnie na obecnym etapie rozwoju programista ma do dyspozycji
mechanizm adnotacji czy typy generyczne. Java jest językiem zorientowanym obiektowo, ponieważ poza typami obiektowymi posiada też typy proste reprezentujące liczby całkowite, zmiennopozycyjne, wartości logiczne i pojedyncze znaki. W wersji 1.5 7
języka wprowadzono mechanizm auto-boxingu, który pozwala na swobodne mieszanie typów prostych i ich obiektowych odpowiedników, a to dzięki zamianie typów
prostych na obiektowe w trakcie kompilacji.
5
http://pl.wikipedia.org/wiki/C%2B%2B
http://pl.wikipedia.org/wiki/Smalltalk
7
http://www.oracle.com/technetwork/java/javase/releasenotes-136954.html
6
7
Java udostępnia kilka mechanizmów zabezpieczających programistów przed popularnymi błędami. Pierwszym z nich jest automatyczne zwalnianie pamięci. Programista
jest dzięki temu "zwolniony" z dbania o usuwanie nieużywanych obiektów. Nie oznacza to jednak, że nie można spowodować wycieku pamięci. Drugim jest silne typowanie oraz konieczność dostarczenia wszystkich użytych klas w czasie kompilacji. Kolejnym jest sposób obsługi wyjątków i wydzielenie grupy wyjątków weryfikowalnych,
które muszą zostać obsłużone przez programistę. Ostatnim istotnym elementem jest
tzw. security policy (pol. – polityka bezpieczeństwa) czyli zestaw reguł pozwalających
na definiowanie dostępnych i zabronionych działań dla programów na danej JVM.
Java była reklamowana hasłem "napisz raz uruchom wszędzie" (ang. – Write once, run
anywhere8, WORA). Rzeczywistą zaletą jest rozgraniczenie elementów platformy systemowej i elementów dostępnych w języku bez konieczności wywołań systemowych.
Ograniczyło to ilość kodu, który trzeba implementować w zależności od platformy.
Teoretycznie prosta implementacja JVM powinna wymagać tylko systemowej I/O
(ang. – Input / Output, pol. – Wejście / Wyjście), lecz w praktyce implementowane są
również niektóre operacje, takie jak Math.sqrt(). Początkowo Java była uważana
za język prosty, ale powolny i zasobochłonny. Jednakże kolejne modyfikacje oraz
wprowadzenie kompilatora JIT9 (ang. – Just In Time) spowodowało, że Java stała się
językiem w którym niektóre problemy mogą zostać rozwiązane szybciej niż w C, jednak nadal Java nie należy do najszybciej interpretowanych języków w informatyce.
System Android został tak naprawdę wyposażony w maszynę wirtualną Da10
lvik , a nie tak jak na innych systemach – JVM. Dalvik jest zbudowany w bardzo podobny sposób, co JVM, lecz używa innej składni kodu bytowego. Jest ona napisana
tak, aby działała prawidłowo na urządzeniach z małą ilością pamięci RAM oraz słabymi procesorami, aby płynność wczytywania i działania takich aplikacji nie odbiegała zbyt daleko od tych, które są pisane pod komputery klasy PC. Taki stan rzeczy nie
podoba się firmie Oracle, aktualnemu właścicielowi Javy która twierdzi (zresztą
słusznie), iż Google pozbawiło jego produkt przenośności i wieloplatformości, ponieważ aplikacji napisanych pod Android nie można uruchomić na żadnym innym urządzeniu, posiadającym JVM.
3.4. System operacyjny Android
Google Android jest otwartym systemem operacyjnym dla urządzeń mobilnych, w chwili obecnej również tabletów, stworzony przez firmę Google. Jest to system bardzo młody, ponieważ pierwsza oficjalna wersja tego systemu została wydana
30 kwietnia 2009 roku. W Polsce pierwsze aparaty pracujące pod jego kontrolą pojawiły się w tym samym roku. Mimo tego, system zyskuje dużą popularność, pojawia
się coraz więcej wyposażonych w niego urządzeń. Według raportu11 przygotowanego
8
http://java.sun.com/docs/white/platform/javaplatform.doc1.html
http://pl.wikipedia.org/wiki/JIT_(informatyka)
10
[15] Dalvik Virtual Machine. [Dostęp 17 grudnia 2011]
11
https://www.npd.com/press/releases/press_100510.html
9
8
przez Grupę NPD, w 2010 roku udział Androida w rynku telefonów klasy smartphone
wynosi 28% i jest większy niż udział iPhone’a (21%), natomiast w lipcu 2011 roku
urządzeń z systemem od Google na rynku jest aż 42%12.
System Android składa się z kilku warstw, które przedstawione są na Rysunku
3.3. Został on zbudowany na bazie systemu Linux. Jądro z gałęzi 2.6 (wszystkie dotychczas oficjalnie wydane wersje systemu Android) zostało wzbogacone m.in. o zaawansowany mechanizm komunikacji międzyprocesorowej, sterowniki specyficzne dla
telefonów oraz obsługę sieci GSM. Na tym systemie zainstalowano wirtialną msazynę
Dalvik, która jest wersję zoptymalizowaną na systemy mobilne wirtualnej maszyny
Javy. Maszyna Dalvik jest tak napisana, aby na urządzeniu mogło efektywnie pracować wiele kopii tej maszyny.
Rys. 3.3.
Architektura systemu Android. Źródło : http://developer.android.com/
System Android to także zbiór bibliotek i interfejsów programistycznych13,
które mogą wykorzystywać deweloperzy aplikacji. Framewrok dostarczony wraz z
systemem daje dostęp do wielu elementów systemu takich jak informacje o urządzeniu, lokalizacji, alarmów czy powiadomień. System Android to w końcu zbiór aplikacji. Aplikacje dystrybuowane są w formie pakietów .apk. Aplikacje pisane są w języku
Java i uruchamiane w osobnych procesach w maszynach wirtualnych Dalvik.
Jeżeli chodzi o architekturę, to aplikacje są tak naprawdę zbiorami komponentów, które są zarządzane przez system. Z punktu widzenia standardowej aplikacji najważniejszymi z tych komponentów są tzw. Activities. Activiity może być rozumiane
12
13
http://myapple.pl/content/1923-udzial-ios-w-rynku-mobilnych-systemow-rosnie-android-prowadzi.html
http://developer.android.com/reference/packages.html
9
jako pojedynczy ekran widoczny dla użytkownika. To, co ma pojawić się w danym
ekranie kontrolowane jest przez widoki (komponenty View). To Activity decyduje,
który z widoków ma zostać wyświetlony na ekranie. Obiekty widoków stanowią podstawową jednostkę budującą interfejs użytkownika. Mogą być one zarówno formatkami takimi jak pole tekstowe, jak również całymi ekranami. Obiekty te można tworzyć zarówno w kodzie jak i przy pomocy szablonów. Tworzenie interfejsu użytkownika przypomina w tym drugim przypadku bardziej tworzenie stron HTML niż programowanie interfejsu w Javie znane z bibliotek takich jak Java Swing. Szablony te
zapisywane są w plikach XML i dostępne są jako zasób w naszej aplikacji. Każda
aplikacja musi posiadać plik Manifest, który służy do wyspecyfikowania z jakich
komponentów składa się aplikacja, który z nich powinien zostać uruchomiony po włączeniu aplikacji oraz jakich specjalnych uprawnień wymaga aplikacja.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="pl.weer.kalkulator"
android:versionCode="4"
android:versionName="0.2011.12.17">
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<activity android:name=".KalkulatorActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MyPreferences" android:label="@string/app_name" />
</application>
</manifest>
10
4.
Wirtualizacja środowiska Android
Wirtualizacja środowiska Android jest potrzebna twórcy oprogramowania, który chce przetestować napisaną aplikację w różnych środowiskach systemu przy różnych konfiguracjach, nie posiadając fizycznych urządzeń spełniających jego wymagań. Twórca zazwyczaj posiada tylko jedno urządzenie, na którym testuje prawdziwe
zachowanie aplikacji, ponieważ emulatory nigdy nie zastąpią prawdziwego połączenia
telefonicznego, wysłania smsa czy połączenie z GPS. Za taki stan rzeczy odpowiada
brak środków finansowych początkujących programistów oraz różnorodność urządzeń, które pojawiły się i wciąż pojawiają się na rynku. Każde z nich posiada inną
rozdzielczość ekranu (także inny jego rozmiar co sprawia, że dwa ekrany o tych samych rozdzielczościach lecz o różnych wielkościach zupełnie inaczej są obsługiwane),
inny procesor i wersję systemu operacyjnego.
Okazuje się jednak, iż nie tylko z powodu braku odpowiednich urządzeń wykorzystuje się emulatory. Mogą się one także przydać podczas prezentacji napisanego
oprogramowania, ponieważ nie wszystkie smartfony posiadają wyjścia cyfrowe wideo, a jeżeli już posiadają – to nie wszystkie urządzenia wyświetlające obraz posiadają
odpowiednie wejścia cyfrowe. W urządzeniach z androidem stosuje się wyjścia HDMI
typu D14, więc urządzenia wyświetlające muszą posiadać również wejście HDMI dowolnego typu (przy zastosowaniu tzw. przejściówki).
Zestaw oprogramowania służącego do pisania programów na platformę Android zawiera między innymi emulator tego środowiska[5], który jest niestety bardzo powolny, co jest jego największym minusem. Jest on jednak bardzo dobrym rozwiązaniem dla programistów, którzy tworzą duże oprogramowanie, które docelowo powinno działać na wszelakiej maści urządzeniach o różnych rozdzielczościach ekranu, mocy procesorów oraz układach graficznych. Emulator ten pozwala utworzyć różne profile reprezentujące różne modele telefonów z ich indywidualnymi konfiguracjami oraz
z różnymi wersjami systemu Android. Aktualnie obsługuje aplikacje napisane pod
Android wersję 4.0.1 (najnowszy ROM).
Kolejną metodą emulacji dowolnej wersji systemu Android znalezioną przez
autora, jest pobranie odpowiedniego ROMu ze strony[6] i zainstalowanie go na dysku
komputera, bądź na wirtualnej maszynie. Na podanej stronie znajdują się wersje systemu Android od 1.6 do 4.0.1, które zostały zoptymalizowane pod procesory x86 i są
gotowe do zainstalowania na nich. Niektóre zostały przeportowane na odpowiedni
sprzęt, np. na netbooki z rodziny ASUS Eee PC i ma standardowo zainstalowane
wszystkie sterowniki, które są potrzebne do korzystania ze wszystkich funkcji tego
systemu operacyjnego. Minusem tego rozwiązania jest to, iż nadal jest to wirtualna
14
[14] HDMI Micro Connector, oficjalna strona twórcy standardu. [dostęp 14 grudnia 2011]
11
maszyna (bądź instalacja na dysku twardym, bez możliwości przełączania się do systemu Windows, w celu wgrania odpowiednich aplikacji na tenże emulator) i nie działa
z taką wydajnością, z jaką pracuje oryginalny system na urządzeniu fizycznym.
Kolejnym przetestowanym przez autora emulatorem był program YouWave[7],
który niestety jest płatny, lecz można go testować za darmo przez 30 dni. Niestety, obsługuje on tylko system Android w wersji 2.3, co dla developerów jest dużym problemem. Dla autora był by to odpowiedni emulator gdyby nie fakt, że jest to nic innego
jak nakładka na popularny program do emulacji wirtualnych systemów operacyjnych –
Oracle VirtualBox. Co prawda został zmodyfikowany specjalnie dla testowania aplikacji w ten sposób, iż posiada pasek z dostępnymi aplikacjami, które można uruchomić po dwukrotnym kliknięciu na nie. Zostaną wtedy załadowane do wirtualnej maszyny, lecz nadal pozostaje problem – iż jest to powolna, wirtualna maszyna oraz – co
gorsza – jest to płatna wersja.
Ostatnim testowanym rozwiązaniem była aplikacja o nazwie Bluestack App
Player[8]. Jest ona zupełnie innego typu niż pozostałe, ponieważ nie jest to wirtualna
maszyna ani emulator całego systemu operacyjnego. Jest to po prostu program instalowany pod Microsoft Windows 7 (jak na razie tylko na ten system operacyjny), który
zawiera wszystkie potrzebne biblioteki do uruchamiania programów napisanych w
Javie i skompilowanych pod platformę Android. Po instalacji aplikacja zawiera 11
preinstalowanych programów, które uruchamiają się bardzo szybko i pracują bardzo
płynnie, a są wśród nich również gry wymagające od urządzenia dużej mocy obliczeniowej. Minusem tego rozwiązania jest sposób instalacji nowych programów, ponieważ aby to uczynić, musimy mieć wcześniej zainstalowaną daną aplikacje na urządzeniu fizycznym, pracującym pod kontrolą systemu Android w dowolnej wersji. Powinniśmy także pobrać ze sklepu Android aplikację o nazwie BlueStacks Cloud Connect[9], która będzie pośredniczyła między wymianą aplikacji pomiędzy systemem
Android a programem BlueStacks App Player. Po uruchomieniu aplikacji na mobilnym systemie, zostaniemy poproszeni o podanie kodu PIN do aplikacji. W celu jego
uzyskania, należy wejść na stronę[10] i przejść na zakładkę Cloud Connect (pol. – połączenie przez chmurę15), gdzie zostanie on dla nas wygenerowany. Po wpisaniu go na
urządzeniu przenośnym, zostaniemy przeniesieni do listy aplikacji zainstalowanych w
naszym systemie. Po zaznaczeniu potrzebnych aplikacji należy kliknąć przycisk Synchronize (pol. – synchronizuj) i odświeżyć stronę internetową, gdzie po chwili pokażą
się wybrane przez nas aplikacje. Teraz już wystarczy wybrać przy nich przycisk Subscribe (pol. – subskrybuj), a po chwili zostaną przesłane do aplikacji – zostanie to potwierdzone poprzez wyświetlenie dymku z odpowiednią informacją na pulpicie systemu Windows w obszarze powiadomień, obok zegarka. Po uruchomieniu aplikacji na
komputerze, aplikacja zostanie automatycznie załadowana do listy aplikacji i będzie
możliwe jej uruchomienie poprzez kliknięcie na niej myszką.
Wszystkie aplikacje w programie BlueStacks App Player uruchamiane są w
trybie landscape (pol. – tryb krajobrazowy, pozioma orientacja ekranu) i jak na razie
nie można zmienić tego stanu rzeczy. Być może zmieni się to w końcowej wersji apli-
15
[11] Mariusz Kędziora: co to jest chmura (Cloud Computing)? 8 maja 2010. [dostęp 14 grudnia 2011]
12
kacji, ponieważ aktualna jest tylko w fazie Alpha16 i działa jedynie na systemach Windows.
Program BlueStacks App Player wykonuje aplikacje bardzo płynnie i wydaje
się, iż jest on na ten moment najlepszym programem do uruchamiania aplikacji napisanych dla systemu Android. Co prawda, w żadnym miejscu na stronie, ani w specyfikacji aplikacji nie jest napisane, pod jakie wersje systemu Android muszą być napisane uruchamiane aplikacje, lecz autor nie spotkał się z nieprawidłowo działającą emulowaną aplikacją w programie BlueStacks App Player, dlatego jego wybór padł właśnie na ten program.
16
[12] Wikipedia: Cykl życia programu. [dostęp 14 grudnia 2011]
13
5.
Projekt Kalkulator Plus
Projekt został stworzony spełniając zadane wcześniej cele i założenia pracy, na
które składają się przede wszystkim łatwość i szybkość obsługi, możliwie jak największa liczba docelowych urządzeń oraz darmowy dostęp do aplikacji i udostępnianych
przez niej bibliotek, ponieważ użytkownikami docelowymi z założenia powinni być
przede wszystkim osoby uczące się. Aplikacja została zaprojektowana tak, aby działała na Smartfonach pracujących pod kontrolą systemu Google Android, ponieważ w
ostatnich czasach jest to najpopularniejszy system mobilny[4], dzięki czemu zostanie
spełnione główne założenie, jakim jest dostępność dla jak największej liczby użytkowników. Google wraz z wydawaniem kolejnych wersji systemu operacyjnego
zwiększa stabilność oraz szybkość jego pracy, tak więc docelową wersją systemu, pod
którym będzie pracowała aplikacja jest wersja 2.3.x o nazwie Gingerbread17 (pol. piernik), oraz nowsze.
3.1.
Istniejące rozwiązania
Próżno szukać w Internecie aplikacji matematycznych, które pokazują krok po
kroku jak rozwiązać dane wyrażenie. Można znaleźć co najwyżej jedną stronę Internetową, spełniającą ten warunek, lecz interfejs graficzny jest bardzo mało intuicyjny, a
edytor wyrażeń i obsługiwane funkcje również nie powalają na kolana. Strona ta nazywa się Poolicz.pl, oraz ma swój odpowiednik dla zagranicznych użytkowników –
solver.com. Jednak wyświetlanie kolejnych kroków obliczeń jest tylko dodatkową opcją projektu Kalkulator Plus. Główną funkcją jest odpowiednie parsowanie wyrażeń
matematycznych i podawanie prawidłowego wyniku – tutaj konkurencja już jest
ogromna. Przykładem może być tutaj chociażby najpopularniejsza wyszukiwarka internetowa - Google, która bardzo dobrze radzi sobie z rozwiązywaniem równań matematycznych. Kolejnym przykładem, może być program Wolfram Mathematica, który
jest potężnym narzędziem służącym do wykonywania zaawansowanych obliczeń naukowych. Możemy do tej listy dodać także program Matlab z jego wieloma dodatkowymi modułami rozszerzającymi jego funkcjonalność. Przytoczone programy mają
kilka minusów – w pierwszym wypadku potrzebny jest dostęp do Internetu, a w
dwóch pozostałych – dostęp do komputera. Oczywiście te ostatnie są programami
płatnymi, a ich funkcje są aż za bardzo zaawansowane dla zwykłego użytkownika,
który ich po prostu nie będzie używał. Nikt nie chce kupować produktów, z których w
większej części nawet nie skorzysta.
17
[13] Wikipedia. Android version history. [dostęp 14 grudnia 2011]
14
Przytoczone dotychczas programy są rozwiązaniami stacjonarnymi, niemającymi swoich odpowiedników na urządzenia mobilne. Na urządzenia z Google Android
jest dostępnych mnóstwo programów do obliczeń, lecz posiadając one zbyt mało
funkcji, niektóre funkcje w ogóle nie działają, a niektóre programy nie są aktualizowane od wieków co sprawia, że posiadają wiele znalezionych już przez użytkowników
błędów. Gdyby połączyć zalety wszystkich tych programów, to było by wtedy nad
czym dyskutować, niestety tak się nie da. Większość dostępnych programów jest płatnych, tak więc można albo wszystkie kupić, ale ściągnąć z Internetu pirackie wersje,
co jest niezgodne z prawem.
Istnieje jeszcze jeden typ kalkulatorów, a mianowicie kalkulatory jako samodzielne urządzenia. Głównymi ich wadami jest cena, która często jest dosyć wysoka,
wymiary, które są bardzo duże, brak możliwości dodawania nowych funkcji, przez co
trzeba kupować coraz to nowsze urządzenia, aby móc korzystać z nowszych funkcji.
3.2.
Projekt interfejsu użytkownika
Interfejs użytkownika powstał z myślą o jak najbardziej intuicyjnej możliwości
obsługi programu. Posiada edytor wyrażeń matematycznych, który był wzorowany na
przeglądniętych programach na PC oraz Android i programową klawiaturę numeryczną. W związku z różnymi typami urządzeń, na które docelowo ma działać aplikacja,
różniącymi się między sobą rozdzielczościami ekranu oraz tym, czy posiadają klawiaturę czy nie, a także szybkością procesora, aplikacja musi zajmować bardzo mało pamięci w telefonie i umieć dostosować się do odpowiedniej rozdzielczości oraz orientacji ekranu. Na rysunku 3.2 został przedstawiony podstawowy wygląd aplikacji, uruchomionej na fizycznym urządzeniu.
15
Rys. 3.1.
Wygląd okna głównego aplikacji Kalkulator Plus, pokazujący się standardowo chwilę
po jej uruchomieniu na smartfonie w orientacji pionowej.
Edytor wyrażeń matematycznych to fragment ekranu, który odpowiedzialny
jest za wyświetlanie wprowadzonych przez użytkownika cyfr oraz funkcji zadeklarowanych w programie Kalkulator Plus (Rysunek 3.2). Edytor posiada znak zachęty koloru zielonego, który informuje użytkownika o pozycji i możliwości wpisania kolejnej
wartości z wirtualnej klawiatury, wbudowanej w program.
Rys. 3.2.
Edytor wyrażeń matematycznych z programu Kalkulator Plus, uruchomionego na urządzeniu fizycznym w orientacji pionowej.
Dodatkową funkcją edytora wyrażeń matematycznych jest informowanie użytkownika o niezamkniętych nawiasach, bądź błędnie wpisanych wyrażeniach. W przypadku pojawienia się w edytorze jakiegoś błędu (kolorem czerwonym), bądź ostrzeżenia (kolorem zielonym), nie jest możliwe pokazania wyniku działania wpisanego wyrażenia matematycznego, dzięki czemu aplikacja jest odporna na błędy użytkowników
i nie wyświetla błędnych wyników.
Program zaznacza następujące błędy, napisane przez użytkownika:
rozpoczęcie wyrażenia wpisując znak „+”, „*”, „!”, bądź „/”
,
wpisanie dwukrotnie tego samego znaku, bądź dwóch różnych znaków,
które nie są oddzielone między sobą żadną cyfrą ,
wpisanie znaku końca nawiasu zaraz po wpisaniu znaków „+”, „-„, „*”,
„\”, bądź po otwarciu nawiasu
,
nie wpisanie, bądź wpisanie złej liczby argumentów do otwartej funkcji.
Ostrzeżenia zostaną wyświetlone, gdy :
użytkownik otworzy nawias, lecz go nie zamknie ,
ostatnim wpisanym znakiem będzie „+”, „-„, „*” bądź „/”.
16
Na tym samym ekranie, po wprowadzeniu wszystkich obliczeń i przyciśnięciu
odpowiedniego przycisku na wirtualnej klawiaturze, zostają wyświetlane obliczenia
wykonane krok po kroku, aż do wyprowadzenia pełnego wyniku.
Rys. 3.3.
Edytor wyrażeń matematycznych z programu Kalkulator Plus, uruchomionego na urządzeniu fizycznym w orientacji pionowej.
Możliwe jest także na programowej klawiaturze przełączanie pomiędzy kolejnymi krokami obliczeń oraz zapisanie wszystkiego w pliku tekstowym na karcie pamięci telefonu i przesłanie obliczeń do innego użytkownika, nie koniecznie posiadającego aplikację, ani nawet telefon z systemem operacyjnym Android. Dla użytkowników, którzy będą chcieli się wymienić rozwiązaniami, istnieje stosowne rozwiązanie,
a mianowicie opcja „zapisz do pliku kalkulatora”. Dzięki tej opcji zostaną do pliku zapisane wszystkie informacje na temat dokonanych obliczeń wraz z objaśnieniami.
Wirtualna klawiatura (rysunek 3.4), która została wbudowana w program Kalkulator Plus służy do wpisywania wyrażeń matematycznych przez użytkownika. Jest
skonstruowana tak, aby nie zasłaniała całego ekranu, żeby w widoku poziomym oraz
pionowym wszystkie klawisze były widoczne oraz aby nie było żadnych problemów
przy wpisywaniu kolejnych cyfr.
17
Rys. 3.4.
Programowa klawiatura zaprezentowana w widoku pionowym aplikacji. Klawiatura jest
widoczna przez cały czas działania aplikacji (tylko w trybie wpisywania wyrażeń).
Jej funkcje zmieniają się w zależności od tego, co akurat użytkownik wykonuje
w programie. Jeżeli wpisuje tylko kolejne wyrażenia, to jest widoczna klawiatura
przedstawiona na Rysunku 3.4. Jeżeli natomiast jesteśmy w trybie przeglądania kolejności wykonywania działań, jest możliwe tylko przełączanie się między nimi i wyczyszczenie równania tak, aby można było wpisać nowe. Przy innych czynnościach
klawiatura jest nie widoczna, aby nie przeszkadzała w wykonywaniu zamierzonych
działań.
Jak widać na poprzednim rysunku, w centrum każdego klawisza znajduje się
duży znak, oznaczający główną funkcję wykonywaną po jego zwykłym przyciśnięciu.
Rys. 3.5.
Jeden z przycisków z programowej klawiatury, powiększony pięciokrotnie w celu prezentacji sposobu jego użycia.
Na Rysunku 3.5. został zaprezentowany jeden z przycisków, znajdujących się w programie Kalkulator Plus. Podział widoczny na nim, tak naprawdę jest tylko programowy, a nie
wizualny. Przycisk został podzielony na cztery części, a każda z tych części odpowiada za
18
inną funkcję. Na przykład na klawiszu numer 2, w prawym górnym rogu znajduje się napis
cos, oznaczający funkcję Cosinus. Aby dostać się do niej, należy przeciągnąć palec z dowolnego miejsca na przycisku 2 w prawą stronę po ukosie w górę tak, jak zostało to zilustrowane
przy pomocy żółtej strzałki na Rysunku 3.5. Do funkcji należących do tego samego klawisza,
lecz znajdujących się w dolnych rogach przycisku można dostać się w sposób analogiczny,
przeciągając palec „od góry” przycisku po skosie w dół w odpowiednim kierunku (lewo bądź
prawo), bez znaczenia pod jakim kątem. Należy jednak pamiętać o tym, aby palec przesunąć
w dosyć znaczącą odległość, ponieważ może nie zostać rozpoznany zaprogramowany gest. W
przypadku nie rozpoznania gestu lub po prostu przy próbie użycia nie przypisanego rogu
przycisku (tak jak w przypadku Rysunku 3.5. z górnego, lewego rogu), zostanie zastosowana
domyślna akcja, czyli ta, która przypisana jest jako duży, biały napis. Odległość, jaką musi
pokonać palec, aby gest został rozpoznany to 50 pikseli od miejsca zbliżenia palca do wyświetlacza – oczywiście musi to być co najmniej 50 pikseli po osi X jak i po osi Y. Na listingu 3.1. został zaprezentowany kod zadeklarowany z programie Kalkulator Plus na obsługę
tych właśnie gestów.
if ((Math.abs(RoznicaX) > 50.0) || (Math.abs(RoznicaY) > 50.0)) {
if ((RoznicaX < 0.0) && (RoznicaY > 0.0)) { TypPrzycisku = 1; } else
if ((RoznicaX < 0.0) && (RoznicaY < 0.0)) { TypPrzycisku = 2; } else
if ((RoznicaX > 0.0) && (RoznicaY < 0.0)) { TypPrzycisku = 3; } else
if ((RoznicaX > 0.0) && (RoznicaY > 0.0)) { TypPrzycisku = 4; }
}
Listing 3.1.
Kod w języku Java odpowiedzialny za rozpoznawanie czy i w którą stronę palec
został przesunięty po przycisku
Podczas niektórych operacji, np. wyświetlania kolejności wykonywanych działań, na
większości przycisków nie są wyświetlane żadne znaki, co czyni je po prostu nieużywalnymi,
ponieważ nie mają przypisanych żadnych akcji domyślnych, ani po użyciu gestów.
19
6.
LITERATURA
[1] E. BURNETTE: Hello, Android. Wydawnictwo HELION, Gliwice 2011.
[2] S. HASHIMI, S. KOMATINENI, D. MACLEAN: Android 2. Tworzenie Aplikacji. Wydawnictwo
HELION, Gliwice 2011.
[3] E. GAŁĘSKA, R. TOBOŁA: Matematyka, powtórka przed maturą. Wydawnictwo PUBLICAT,
Poznań 2009
[4] http://www.gartner.com/it/page.jsp?id=1848514
[5] http://developer.android.com/guide/developing/tools/emulator.html
[6] http://www.android-x86.org/
[7] http://www.youwave.com/
[8] http://bluestacks.com/download.html
[9] https://market.android.com/details?id=com.bluestacks.appsyncer
[10] http://channels.bluestacks.com/home/cloud-connect
[11] http://blogs.technet.com/b/mkedziora/archive/2010/05/08/co-jest-chmura-cloud-computing.aspx
[12] http://pl.wikipedia.org/wiki/Cykl_%C5%BCycia_programu
[13] http://en.wikipedia.org/wiki/Android_version_history
[14] http://www.hdmi.org/manufacturer/hdmi_1_4/micro_connector.aspx
[15] http://www.dalvikvm.com/
20

Podobne dokumenty