ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΑΝΑΤΟΛΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΚΑΙ ΘΡΑΚΗΣ



Σχετικά έγγραφα
Ανάπτυξη Διεπαφών Χρήστη σε Λειτουργικά Συστήματα Κινητών Συσκευών

ANDROID Προγραμματισμός Εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

Διπλωματική Εργασία. Μουσικές Εφαρμογές σε Περιβάλλον Κινητών Συσκευών Android με Χαρακτηριστικά Εξατομίκευσης

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΡΙΣΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Ανάπτυξη διαδικτυακής εφαρμογής σε περιβάλλον κινητών συσκευών με λειτουργικό σύστημα Android

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10

Ο Οδηγός γρήγορης εκκίνησης

Ενότητα 1η. Εισαγωγή στην Πληροφορική

ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ.

APP INVENTOR ΟΔΗΓΟΣ 8 Οκτωβρίου 2018

Κεφάλαιο 6 ο. Διαχείριση στοιχείων λογισμικού

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Εφαρμογές Υπολογιστών. Κεφάλαιο 4 Λογισμικό Συστήματος

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Συνοπτικός Οδηγός Χρήσης του Moodle για τον Καθηγητή

ΕΓΧΕΙΡΙΔΙΟ ΜΑΘΗΤΗ. της Πλατφόρμας Τηλεκατάρτισης

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ

Atlantis - Νέο user interface

Με την ολοκλήρωση της διαδικασίας μπορούμε αν θέλουμε να επιλέξουμε να ανοίξει ή όχι η εφαρμογή που έχει εγκατασταθεί.

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access...9. Κεφάλαιο 2 Χειρισμός πινάκων... 25

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Ερωτήσεις- Απαντήσεις Πολυμέσα Απο το Βιβλίο Εφαρμογές Η/Υ Α,Β,Γ Λυκείου

Σχεδιασμός και Υλοποίηση ενός πληροφοριακού συστήματος για τους τεχνικούς του φυσικού αερίου

Προγραμματισμός ΙI (Θ)

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

6 Εισαγωγή στο Wordpress 3.x

Εισαγωγη στην html. Η δομή μιας ιστοσελίδας (αρχείο html) Η βασική δομή ενός αρχείου html είναι η εξής: <html> <head>

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

WiFi V-Timer ΕΚΔΟΣΗ 2Η

Unity Editor #02 Κεντρικό Μενού: File, Build Settings και Build & Run

Εισαγωγή στην Αριθμητική Ανάλυση

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. 4o Εργαστήριο Σ.Α.Ε

Σχεδιαστικά Προγράμματα Επίπλου

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

Εργασία-3: Παρουσίαση Εργασίας. Ομάδα Α. Προετοιμασία Αναφοράς

7.Α.1 Παρουσιάσεις. 7.Α.2 Περιγραφή περιεχομένων της εφαρμογής

ΠΑΡΑΡΤΗΜΑ ΓΡΕΒΕΝΩΝ ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΣΙΑΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΑΕΠΠ Ερωτήσεις θεωρίας

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

Εισαγωγή στην Πληροφορική

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

1 ο ΓΥΜΝΑΣΙΟ ΘΕΡΜΗΣ. Πληροφορική Α' Γυμν. Το Λειτουργικό Σύστημα του Υπολογιστή

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

Digital Academy. Εισαγωγή στην ανάπτυξη Android Εφαρμογών

1. Τα τμήματα της επιφάνειας εργασίας των Windows

ΟΛΟΚΛΗΡΩΜΕΝΟ ΣΥΣΤΗΜΑ ΤΗΛΕΚΑΤΑΡΤΙΣΗΣ E-AGIOGRAFIA

Προγραμματισμός Ι (HY120)

Αρχιτεκτονική Υπολογιστών

Αντικειμενοστρεφής Προγραμματισμός

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

B) Ετοιμάζοντας μια Παρουσίαση

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

Κεφάλαιο 4: Λογισμικό Συστήματος

Μαλούτα Θεανώ Σελίδα 1

Βάσεις δεδομένων (Access)

Δημιουργία ιστοσελίδας με. Wordpress - Βασικές λειτουργίες

Ως Διαδίκτυο (Internet) ορίζεται το παγκόσμιο (διεθνές) δίκτυο ηλεκτρονικών υπολογιστών (international network).

Microsoft Excel Κεφάλαιο 1. Εισαγωγή. Βιβλίο εργασίας

Αντικειμενοστρεφής Προγραμματισμός

Atlantis - Νέο user interface

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

Τυπικές χρήσεις της Matlab

Βάσεις δεδομένων (Access)

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ

SGA Διαχείριση Ηλεκτρονικού Πρωτόκολλου

Ανάπτυξη Εφαρμογής Ταξίμετρου σε Android

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

12/5/18. συστημάτων. Το λογισµικό συστηµάτων. Κεφάλαιο 5

Έγγραφο Προδιαγραφών Απαιτήσεων Λογισμικού για το παιχνίδι: Asylum : The Escape

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

SGA Διαχείριση Πρωτόκολλου

Η επιλογή γλώσσας (π.χ. ελληνικά) διεπαφής του συστήματος, βρίσκεται στο υποσέλιδο του ιστότοπου

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα.

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

Τμήμα Πληροφορικής & Επικοινωνιών ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Εφαρμογή για το λειτουργικό σύστημα Android

Οδηγίες Χρήσεως Ψηφιακού Αποθετηρίου Ιστοριών στην Ελληνική Νοηματική Γλώσσα (ΕΝΓ)

ΜΑΘΗΜΑ 3 ΛΟΓΙΣΜΙΚΟ (SOFTWARE)

2.1 Σύνδεση Εξωτερικής Συσκευής στο IDE

Κατασκευή δικτυακής εφαρμογής στην αρχιτεκτονική ios iphone που υλοποιεί ένα παιχνίδι ερωτοαπαντήσεων

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Ηλεκτρονική Υγεία. Εργαστήριο 4 ο : MATLAB

Εισαγωγή 6. Οδηγίες για καλύτερη χρήση του YouTube 12. Δημιουργία λογαριασμού 16. Δημιουργία καναλιού 26. Έσοδα από τα βίντεο 42

ΚΕΦΑΛΑΙΟ 2 ΛΟΓΙΣΜΙΚΟ

Πρόλογος... 7 ΕΙΔΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

Αρχιτεκτονική Υπολογιστών

Μάθημα 4ο. Προγράμματα

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 4 η. Βασίλης Στεφανής

Κατασκευή Ιστολόγιου

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

MICROSOFT OFFICE 2003 MICROSOFT WORD 2003

Smart TV stick D2. GR Εγχειρίδιο χρήστη. Android HDMI SmartTV dongle

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων

Transcript:

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΑΝΑΤΟΛΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΚΑΙ ΘΡΑΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Εφαρμογές Android και MATLAB αριθμητικής ανάλυσης και επίλυσης επαναληπτικών μεθόδων Γρηγορούδης Γεώργιος Δάλλας Γεώργιος Επιβλέπων Δρ. Βασίλειος Τσιάντος Καβάλα 2014

Δήλωση μη λογοκλοπής Δηλώνουμε υπεύθυνα ότι είμαστε οι συγγραφείς αυτής της πτυχιακής εργασίας και πως όλες οι πηγές που χρησιμοποιήθηκαν είτε ακριβώς είτε παραφρασμένες για την συγγραφή αναφέρονται σε παραπομπές ή στην βιβλιογραφία. 2

Εγκρίθηκε από την τριμελή εξεταστική επιτροπη Τόπος Ημερομηνία Επιτροπή Αξιολόγησης 1. Ονοματεπώνυμο Υπογραφή 2. Ονοματεπώνυμο Υπογραφή 3. Ονοματεπώνυμο Υπογραφή 3

Περίληψη Στο πλαίσιο της πτυχιακής μας εργασίας δημιουργήθηκαν δύο βοηθητικές εφαρμογές για το μάθημα Μαθηματικά ΙΙ. Η πρώτη εφαρμογή είναι για λειτουργικό σύστημα Windows και δημιουργήθηκε μέσω του MATLAB, ενώ η δεύτερη είναι για συσκευές με λειτουργικό Android και δημιουργήθηκε με το Android Studio. Σκοπός των εφαρμογών είναι η δυνατότητα επίλυσης γραμμικών συστημάτων με επαναληπτικές μεθόδους αλλά και η κατανόηση των επαναληπτικών μεθόδων και η εύκολη πρόσβαση σε πληροφορίες σχετικά με αυτές. Συνδυαστικά μπορούν να βοηθήσουν τους φοιτητές και να λύσουν γραμμικά συστήματα αλλά και να κατανοήσουν πως λύθηκαν αυτά τα συστήματα. Για την δημιουργία των εφαρμογών χρησιμοποιήθηκαν οι γλώσσες προγραμματισμού MATLAB, Java, HTML, XML και MathML. 4

Περιεχόμενα Περίληψη... 4 Κεφάλαιο 1... 7 Ανάλυση κεφαλαίων... 7 Κεφάλαιο 2... 9 2.1 Android... 9 2.2 Android Studio... 9 2.3 MATLAB... 10 2.4 Γλώσσες προγραμματισμού... 11 2.4.1 Java... 11 2.4.2 HTML... 13 2.4.3 XML και MathML... 14 Κεφάλαιο 3... 16 3.1 Εισαγωγή στην Αριθμητική Ανάλυση... 16 3.1.1 Γραμμική Άλγεβρα... 17 3.1.2 Επαναληπτικές μέθοδοι... 18 3.1.3 GMRES... 19 3.1.4 BiCG... 20 3.1.5 QMR... 21 3.1.6 CGS... 21 3.1.7 BiGSTAB... 21 3.2 Εφαρμογή MATLAB... 22 3.2.1 Ανάλυση κώδικα.... 25 Κεφάλαιο 4... 26 4.1 Οι εκδόσεις των Android.... 26 4.2 Σχεδιασμός του Android... 29 4.2.1 Πυρήνας Linux (Linux Kernel)... 30 4.2.2 Βιβλιοθήκες... 31 4.2.3 Η εικονική μηχανή Dalvik... 33 4.4 Ανάπτυξη εφαρμογών στο Android... 35 4.4.1 Εγκατάσταση λογισμικού... 35 4.4.2 Δημιουργία νέου Android Project στο Android Studio... 36 4.4.3 Δημιουργία των Activities της εφαρμογής... 38 4.4.4 Debugging και Δοκιμαστική Φάση Εφαρμογής... 40 4.4.5 Android Design Guidelines... 42 4.4.6 Υποστήριξη πολλαπλών συσκευών... 44 4.4.7 Υποστήριξη παλαιότερων εκδόσεων... 45 4.4.8 Υποστήριξη πολλαπλών διαστάσεων οθόνης... 48 4.4.9 Δοκιμή και Αποσφαλμάτωση (Debugging) της Εφαρμογής... 51 5

4.4.10 Android Debug Bridge (ADB)... 52 4.4.11 Εικονικές Συσκευές Android (Android Virtual Devices AVD)... 53 4.4.12 Δημιουργία διαφορετικών εικονικών συσκευών... 54 4.4.13 Dalvik Debug Monitor Server (DDMS)... 55 4.4.14 Application Crash Reporter for Android (ACRA)... 57 4.5 Κατακερματισμος του Android... 60 4.6 Λειτουργία εφαρμογής... 63 4.7 Ανάλυση κώδικα... 63 4.7.1 Κεντρικό activity... 63 4.7.2 Δήλωση των Activities στο AndroidManifest.xml... 67 4.7.3 Δημιουργία layout της κεντρικής οθόνης... 70 4.7.4 Δημιουργία του Relative layout... 70 4.7.5 Δημιουργία webview layouts... 73 4.7.6 Δημιουργία Επαναληπτικών μεθόδων σε MathML μορφή... 73 4.7.7 Επεξεργασία και προσθήκη κατάλληλων Drawables... 76 4.7.8 Εισαγωγή String Resources... 77 Κεφάλαιο 5... 79 5.1 Συμπεράσματα... 79 Παράρτημα Α... 80 Α.1 Δημιουργία των πινάκων... 80 Α.2 Λειτουργία μεθόδων... 81 A.3 Διαφορές μεταξύ MathML και HTML... 82 Βιβλιογραφία... 88 6

Κεφάλαιο 1 Ανάλυση κεφαλαίων Σε αυτή τη πτυχιακή εργασία παρουσιάζεται η δημιουργία δύο εφαρμογών οι οποίες έχουν ως στόχο να βοηθήσουν στην ανάλυση και στην επίλυση ορισμένων επαναληπτικών μεθόδων. Συγκεκριμένα είναι μια εφαρμογή για Windows που δημιουργήθηκε μέσω του MATLAB και στην οποία μπορεί ο χρήστης να επιλύσει ένα γραμμικό σύστημα επιλέγοντας μία ή και περισσότερες από τις διαθέσιμες μεθόδους και να τις συγκρίνει. Η δεύτερη εφαρμογή είναι για το λειτουργικό σύστημα Android και δημιουργήθηκε σε Android Studio. Ο στόχος αυτής της εφαρμογής είναι η κατανόηση του τρόπου λειτουργίας των επαναληπτικών μεθόδων και εύκολη πρόσβαση σε αυτές της πληροφορίες. Στο δεύτερο κεφάλαιο γίνεται μια εισαγωγή στα προγράμματα και τις γλώσσες προγραμματισμού που χρησιμοποιήθηκαν για την δημιουργία των δύο αυτών εφαρμογών με ιστορικά στοιχεία. Στο τρίτο κεφάλαιο αναλύεται η MATLAB εφαρμογή, το πως λειτουργεί, πως δημιουργήθηκε και πως λειτουργούν οι μέθοδοι που επιλέχθηκαν για την εφαρμογή. Επίσης παρουσιάζεται αναλυτικά ένα τμήμα κώδικα της εφαρμογής. Στο τέταρτο κεφάλαιο περιγράφεται ο τρόπος λειτουργίας των Android, τι χρειάζεται για να δημιουργηθεί μια Android εφαρμογή, πως δημιουργήθηκε και πως λειτουργεί η εφαρμογή και γίνεται μία ανάλυση κάποιων τμημάτων του κώδικα. 7

Ακολουθούν τα συμπεράσματα για το τι αποκομίσαμε από αυτήν την εργασία, το παράρτημα με κάποια τμήματα κώδικα ακόμα και τέλος η βιβλιογραφία. 8

Κεφάλαιο 2 2.1 Android Το Android είναι λειτουργικό σύστημα το οποίο αρχικά δημιουργήθηκε για κινητά τηλέφωνα από την Google το 2007 και έχει ως βάση του τα Linux. Σήμερα έχει επεκταθεί σε τάμπλετ, τηλεοράσεις, ρολόγια και αυτοκίνητα. Ο σχεδιασμός γίνεται κυρίως για συσκευές με οθόνη αφής και η αλληλεπίδραση με τη συσκευή γίνεται μέσω εικονικού πληκτρολογίου και χειρονομίες. Ο λόγος που επιλέχθηκε από εμάς αυτό το λειτουργικό αντί των ios ή των Windows RT είναι κυρίως η δημοφιλία τους αφού όπως ανακοίνωσε η Google το 2014 υπάρχουν περισσότερες από 1 δισεκατομμύριο ενεργές συσκευές Android. Στην δημιουργία εφαρμογών για το λειτουργικό Android χρησιμοποιείται συνήθως η γλώσσα προγραμματισμού Java μέσω του Android SDK το οποίο είναι είναι σετ με εργαλεία όπως βιβλιοθήκες, debugger, προσομοιωτή κινητού τηλεφώνου που βοηθούν στην ανάπτυξη εφαρμογών. Επίσης χρειάζεται ένα πρόγραμμα IDE (Integrated Development Enviroment) ή στα ελληνικά Ολοκληρωμένο Περιβάλλον Ανάπτυξης το οποίο είναι βοηθητικό εργαλείο για την δημιουργία εφαρμογών σε οποιοδήποτε λειτουργικό σύστημα. 2.2 Android Studio Το IDE που επιλέχθηκε για την ανάπτυξη της εφαρμογής είναι το Android Studio. Αναπτύχθηκε από την Google το 2013, και είναι ακόμα σε beta 9

μορφή. Το Android Studio όπως και άλλοι IDE περιέχει επεξεργαστή κειμένου, μεταγλωττιστή, εργαλεία αυτόματης παραγωγής κώδικα, ενώ έχει απλοποιήσει την κατασκευή γραφικού περιβάλλοντος με λειτουργίες drag and drop και έτοιμα αντικείμενα. Η διαφορά του από οποιαδήποτε άλλο περιβάλλον ανάπτυξης είναι ότι το έχει εκδώσει η ίδια η Google, η δημιουργός των Android και συμπεριλαμβάνει από μόνο του τον Android SDK. 2.3 MATLAB Το όνομα του MATLAB προέρχεται από τον συνδυασμό των λέξεων Matrix Laboratory. Η πρώτη του μορφή δημιουργήθηκε στα τέλη της δεκαετίας του 1970, όταν ο Cleve Moler, πρόεδρος του τμήματος Πληροφορικής του πανεπιστημίου του New Mexico θέλησε να δώσει στους φοιτητές του τις βιβλιοθήκες LINPACK και EISPACK οι οποίες ήταν γραμμένες σε Fortran, χωρίς να χρειαστεί να μάθουν την συγκεκριμένη γλώσσα. Σύντομα διαδόθηκε και σε άλλα πανεπιστήμια των Ηνωμένων Πολιτειών. Σε μία επίσκεψη του Moler στο πανεπιστήμιο του Stanford ο ηλεκτρολόγος μηχανικός John Little αναγνώρισε την εμπορική αξία του όλου εγχειρήματος και μαζί με τον Moler και τον Steve Bangert δημιούργησαν την MathWorks το 1984. Ξαναέγραψαν το MATLAB σε C, και από τότε εξελίσσεται. Το 2000 γράφτηκε από την αρχή ώστε να χρησιμοποιεί νέες βιβλιοθήκες σχετικά με την επεξεργασία πινάκων(moler, 2004). Σήμερα χρησιμοποιείται σε πολλούς τομείς της εκπαίδευσης με κυριότερα τα πεδία της γραμμικής άλγεβρας και της αριθμητικής ανάλυσης. Αν και χρησιμοποιείται κατά 10

κύριο λόγο για την επίλυση μαθηματικών προβλημάτων μπορεί να γίνει χρήση του για προγραμματισμό καθώς περιέχει εντολές από C++, απεικόνιση στατιστικών γραφημάτων, επεξεργασία εικόνας και άλλα. 2.4 Γλώσσες προγραμματισμού 2.4.1 Java Εικόνα 2.1 Το λογότυπο της Java Το 1991, η Sun αναζητούσε το κατάλληλο εργαλείο για να αποτελέσει την πλατφόρμα ανάπτυξης λογισμικού σε μικρο-συσκευές (έξυπνες οικιακές συσκευές έως πολύπλοκα συστήματα παραγωγής γραφικών). Εκείνη την εποχή οι πιο δημοφιλείς γλώσσες προγραμματισμού ήταν η C++ και η C. Μετά από διάφορους πειραματισμούς προέκυψε το συμπέρασμα ότι οι υπάρχουσες γλώσσες δεν μπορούσαν να καλύψουν τις ανάγκες τους. Ο δημιουργός της Java, James Gosling, που εργαζόταν εκείνη την εποχή για την Sun, έκανε ήδη πειραματισμούς πάνω στη C++ και είχε παρουσιάσει κατά καιρούς κάποιες πειραματικές γλώσσες (C++ ++) ως πρότυπα για το νέο εργαλείο που αναζητούσαν στην Sun. Τελικά μετά από λίγο καιρό 11

κατέληξαν με μια πρόταση για το επιτελείο της εταιρίας, η οποία ήταν η γλωσσα Oak. Το όνομά της το πήρε από το ομώνυμο δένδρο (βελανιδιά) το οποίο ο Gosling είχε έξω από το γραφείο του και έβλεπε κάθε μέρα. H Oak ήταν μία γλώσσα που διατηρούσε μεγάλη συγγένεια με την C++. Παρόλα αυτά είχε πολύ πιο έντονο αντικειμενοστρεφή (object oriented) χαρακτήρα σε σχέση με την C++ και χαρακτηριζόταν για την απλότητα της. Σύντομα οι υπεύθυνοι ανάπτυξης της νέας γλώσσας ανακάλυψαν ότι το όνομα Oak ήταν ήδη κατοχυρωμένο οπότε κατά την διάρκεια μιας εκ των πολλών συναντήσεων σε κάποιο τοπικό καφέ αποφάσισαν να μετονομάσουν το νέο τους δημιούργημα σε Java που εκτός των άλλων ήταν το όνομα της αγαπημένης ποικιλίας καφέ για τους δημιουργούς της. Η επίσημη εμφάνιση της Java στη βιομηχανία της πληροφορικής έγινε το Μάρτιο του 1995 όταν η Sun την ανακοίνωσε στο συνέδριο Sun World 1995. Στις 13 Νοεμβρίου του 2006 η Java έγινε πλέον μια γλώσσα ανοιχτού κώδικα (GPL) όσον αφορά το μεταγλωττιστή (javac) και το πακέτο ανάπτυξης (JDK, Java Development Kit). Ένα από τα βασικά πλεονεκτήματα της Java έναντι των περισσότερων άλλων γλωσσών είναι η ανεξαρτησία του λειτουργικού συστήματος και πλατφόρμας. Τα προγράμματα που είναι γραμμένα σε Java τρέχουνε ακριβώς το ίδιο σε Windows, Linux, Unix και Macintosh χωρίς να χρειαστεί να ξαναγίνει μεταγλώττιση (compiling) ή να αλλάξει ο πηγαίος κώδικας για κάθε διαφορετικό λειτουργικό σύστημα. Για να επιτευχθεί όμως αυτό χρειαζόταν κάποιος τρόπος έτσι ώστε τα προγράμματα γραμμένα σε Java να μπορούν να είναι «κατανοητά» από κάθε υπολογιστή ανεξάρτητα του είδους επεξεργαστή (Intel x86, IBM, Sun SPARC, Motorola) αλλά και 12

λειτουργικού συστήματος (Windows, Unix, Linux, BSD, MacOS). Ο λόγος είναι ότι κάθε κεντρική μονάδα επεξεργασίας κατανοεί διαφορετικό κώδικα μηχανής. Ο συμβολικός κώδικας (assembly) που μεταφράζεται και εκτελείται σε Windows είναι διαφορετικός από αυτόν που μεταφράζεται και εκτελείται σε έναν υπολογιστή Macintosh. Η λύση δόθηκε με την ανάπτυξη της Εικονικής Mηχανής (Virtual Machine ή VM ή ΕΜ στα ελληνικά). 2.4.2 HTML Η HTML (HyperText Markup Language, και στα Ελληνικά Γλώσσα Σήμανσης Υπερκειμένου) είναι η κύρια γλώσσα σήμανσης για τις ιστοσελίδες, και τα στοιχεία της είναι τα βασικά δομικά στοιχεία των ιστοσελίδων. Η πρώτη δημόσια διαθέσιμη περιγραφή της HTML ήταν ένα έγγραφο με το όνομα Ετικέτες HTML, το οποίο αναφέρθηκε πρώτη φορά στο Διαδίκτυο από τον Tim Berners - Lee στα τέλη του 1990. Περιέγραφε τα 20 στοιχεία τα οποίο αποτελούσαν τον αρχικό και σχετικά απλό σχεδιασμό της HTML. Εκτός από την ετικέτα υπερσυνδέσμου, οι υπόλοιπες ήταν έντονα επηρεασμένες από την SGMLguid, μια μορφή δημιουργίας τεκμηρίωσης, φτιαγμένη στο CERN και βασισμένη στην SGML. Δεκατρία από εκείνα τα αρχικά στοιχεία υπάρχουν ακόμα σήμερα στην HTML(Berners-Lee, 1990). Η HTML γράφεται υπό μορφή στοιχείων HTML τα οποία αποτελούνται από ετικέτες (tags), οι οποίες περικλείονται μέσα σε σύμβολα «μεγαλύτερο από» και «μικρότερο από» (για παράδειγμα <html>), μέσα στο περιεχόμενο της ιστοσελίδας. Οι ετικέτες HTML συνήθως λειτουργούν ανά ζεύγη (για παράδειγμα <h1> και </h1>), με την πρώτη να ονομάζεται ετικέτα έναρξης 13

και τη δεύτερη ετικέτα λήξης (ή σε άλλες περιπτώσεις ετικέτα ανοίγματος και ετικέτα κλεισίματος αντίστοιχα). Ανάμεσα στις ετικέτες, οι σχεδιαστές ιστοσελίδων μπορούν να τοποθετήσουν κείμενο, πίνακες, εικόνες κλπ. Ο σκοπός ενός web browser είναι να διαβάζει τα έγγραφα HTML και τα συνθέτει σε σελίδες που μπορεί κανείς να διαβάσει ή να ακούσει. Ο browser δεν εμφανίζει τις ετικέτες HTML, αλλά τις χρησιμοποιεί για να ερμηνεύσει το περιεχόμενο της σελίδας. Τα στοιχεία της HTML χρησιμοποιούνται για να κτίσουν όλους του ιστότοπους. Η HTML επιτρέπει την ενσωμάτωση εικόνων και άλλων αντικειμένων μέσα στη σελίδα, και μπορεί να χρησιμοποιηθεί για να εμφανίσει διαδραστικές φόρμες. Παρέχει τις μεθόδους δημιουργίας δομημένων εγγράφων (δηλαδή εγγράφων που αποτελούνται από το περιεχόμενο που μεταφέρουν και από τον κώδικα μορφοποίησης του περιεχομένου) καθορίζοντας δομικά σημαντικά στοιχεία για το κείμενο, όπως κεφαλίδες, παραγράφους, λίστες, συνδέσμους, παραθέσεις και άλλα. 2.4.3 XML και MathML H XML (Extensible Markup Language) είναι μία γλώσσα σήμανσης, που περιέχει ένα σύνολο κανόνων για την ηλεκτρονική κωδικοποίηση κειμένων. Ορίζεται, κυρίως, στην προδιαγραφή XML 1.0 (XML 1.0 Specification), που δημιούργησε ο διεθνής οργανισμός προτύπων W3C (World Wide Web Consortium), αλλά και σε διάφορες άλλες σχετικές προδιαγραφές ανοιχτών προτύπων. Η XML σχεδιάστηκε δίνοντας έμφαση στην απλότητα, τη γενικότητα και τη 14

χρησιμότητα στο Διαδίκτυο. Είναι μία μορφοποίηση δεδομένων κειμένου, με ισχυρή υποστήριξη Unicode για όλες τις γλώσσες του κόσμου. Αν και η σχεδίαση της XML εστιάζει στα κείμενα, χρησιμοποιείται ευρέως για την αναπαράσταση αυθαίρετων δομών δεδομένων, που προκύπτουν για παράδειγμα στις υπηρεσίες ιστού. Υπάρχει μία ποικιλία διεπαφών προγραμματισμού εφαρμογών, που μπορούν να χρησιμοποιούν οι προγραμματιστές, για να προσπελαύνουν δεδομένα XML, αλλά και διάφορα συστήματα σχημάτων XML, τα οποία είναι σχεδιασμένα για να βοηθούν στον ορισμό γλωσσών, που προκύπτουν από την XML. Έως το 2009, έχουν αναπτυχθεί εκατοντάδες γλώσσες που βασίζονται στην XML, συμπεριλαμβανομένων του RSS, του SOAP και της XHTML. Προεπιλεγμένες κωδικοποιήσεις βασισμένες στην XML, υπάρχουν για τις περισσότερες σουίτες εφαρμογών γραφείου. Η MathML είναι γλώσσα σήμανσης που χρησιμοποιείται συγκεκριμένα για την απεικόνιση χαρακτήρων και συναρτήσεων των μαθηματικών σε ιστοσελίδες. Η πρώτη έκδοση βγήκε το 1998 ως την πρώτη γλώσσα XML που ήταν προτεινόμενη από το W3C. Οπτικά MathML και HTML δεν έχουν κάποια διαφορά, αλλά το πλεονέκτημα της MathML είναι ότι όχι μόνο εμφανίζει τους χαρακτήρες και τις συναρτήσεις αλλά το ότι καταλαβαίνει και το νόημα τους. Αν για παράδειγμα ένας χρήστης με προβλήματα όρασης επιλέξει μέσω του περιηγητή του να ακούσει μια ιστοσελίδα μέσω τον εξειδικευμένων προγραμμάτων που υπάρχουν η MathML θα βοηθήσει στην ανάγνωση των συναρτήσεων. 15

Κεφάλαιο 3 3.1 Εισαγωγή στην Αριθμητική Ανάλυση Η αριθμητική ανάλυση είναι ίσως ο βασικότερος κλάδος τον εφαρμοσμένων μαθηματικών, τα οποία με τη σειρά τους είναι ένας μεγάλος τομέας των μαθηματικών ο οποίος ασχολείται με τις μαθηματικές τεχνικές που αναπτύσσονται και χρησιμοποιούνται στις άλλες επιστήμες, την τεχνολογία και τις εφαρμογές. Η αριθμητική ανάλυση είναι σχεδόν συνώνυμη με τα υπολογιστικά μαθηματικά. Ο στόχος της είναι η προσεγγιστική επίλυση μαθηματικών προβλημάτων που συναντώνται σε όλες τις επιστήμες και την τεχνολογία. Συνήθως έχουμε μαθηματικά μοντέλα τα οποία περιγράφουν διάφορα φαινόμενα ή/και διεργασίες τα οποία εμπλέκουν συνεχείς συναρτήσεις και μεταβλητές. Επειδή η αναλυτική επίλυση είναι σπάνια δυνατή, επιλύουμε το πρόβλημα προσεγγιστικά αφού πρώτα το διακριτοποιήσουμε. Έτσι από συνεχείς διαδικασίες τις χωρίζουμε σε διακριτές διαδικασίες και από άπειρες διαδικασίες σε πεπερασμένες διαδικασίες. Το διακριτό πρόβλημα που προκύπτει το ονομάζουμε αριθμητική μέθοδο. Κάθε διακριτό πρόβλημα (ή αριθμητική μέθοδος) για να εφαρμοσθεί (κυρίως στον ηλεκτρονικό υπολογιστή) απαιτεί μια πεπερασμένη, λογική σειρά καλά ορισμένων αριθμητικών πράξεων και λογικών εκφράσεων. Το σύνολο αυτών των βημάτων ονομάζεται αλγόριθμος. H αριθμητική ανάλυση χωρίζεται με δύο μέρη: 16

Το θεωρητικό και το πρακτικό μέρος. Στο θεωρητικό μέρος έχουμε την κατασκευή αλγορίθμων και μελέτης της ακρίβειάς του και της ευστάθειάς του, δηλαδή ανάλυση των σφαλμάτων τους. Στην συνέχεια στο πρακτικό μέρος ασχολούμαστε με την υλοποίηση των αλγορίθμων με τον βέλτιστο τρόπο ή με έναν τρόπο σχεδόν βέλτιστο (σε σχέση με την ταχύτητα εκτέλεσης του υπολογιστή και την απαιτούμενη μνήμη). Συνεπώς η διαδικασία επίλυσης ενός μαθηματικού προβλήματος αριθμητικά έχει ως εξής: Στην αρχή κατασκευάζουμε το μαθηματικό πρόβλημα το οποίο περιγράφεται με συνεχείς συναρτήσεις. Κατασκευάζουμε το αντίστοιχο μαθηματικό πρόβλημα το οποίο περιγράφεται με διακριτές συναρτήσεις (αριθμητική μέθοδος) και το οποίο προσεγγίζει το αρχικό πρόβλημα. Το τέλος του θεωριτικού τμήματος είναι η μελέτη της ακρίβειας και της ευστάθειας. Στην συνέχεια είναι το πρακτικό μέρος το οποίο αποτελείται από την κατασκευή και την υλοποίηση του αλγορίθμου. 3.1.1 Γραμμική Άλγεβρα Ένας από τους σημαντικότερους και μεγαλύτερους κλάδους της αριθμητικής ανάλυσης είναι η γραμμική άλγεβρα, η οποία ασχολείται με την αριθμητική επίλυση γραμμικών συστημάτων αλγεβρικών εξισώσεων καθώς και με τε την αριθμητική εύρεση των ιδιοτιμών πινάκων. 17

Έχει εκτιμηθεί ότι το 70% των προβλημάτων της Επιστήμης και της Τεχνολογίας που καταλήγουν για επίλυση σε ηλεκτρονικό υπολογιστή είναι γραμμικά συστήματα (Δούγαλης, Νούτσος, Χατζηδήμος 2007). Αυτό οφείλεται στο ότι η περιγραφή διαφόρων φαινομένων στα οποία υπάρχει μεταβολή φυσικών ποσοτήτων που εξαρτιούνται από άλλες, περιγράφεται συνήθως στα μαθηματικά μέσα από διαφορικές εξισώσεις. Η αριθμητική γραμμική άλγεβρα, όπως και η αριθμητική ανάλυση ασχολείται γενικά με την μελέτη και ανάπτυξη αριθμητικών αλγορίθμων. Αυτοί οι αλγόριθμοι περιέχουν μόνο τις τέσσερις βασικές πράξεις της αριθμητικής για την επίλυση γραμμικών προβλημάτων. Στα βήματα αυτών των αλγορίθμων εμφανίζονται κάποια σφάλματα που έχουν να κάνουν κυρίως με την στρογγυλοποίηση των δεδομένων κατά την επεξεργασία και την αποθήκευση τους. Η παρουσία αυτών των σφαλμάτων που μεταδίδονται και συσσωρεύονται κατά την διάρκεια των υπολογισμών έχει ως συνέπεια τα αποτελέσματα που εμφανίζει ο υπολογιστής να μην είναι ακριβή. Είναι μια προσέγγιση της λύσης του προβλήματος και για αυτό το λόγο ένα μεγάλο μέρος της γραμμικής άλγεβρας ασχολείται με την δημιουργία μεθόδων και αλγορίθμων που θα περιορίζουν όσο το δυνατόν περισσότερο το σφάλμα στο τελικό αποτέλεσμα έτσι ώστε αυτά να θεωρούνται αποδεκτά. 3.1.2 Επαναληπτικές μέθοδοι Όταν χρησιμοποιείται υπολογιστής για την επίλυση προβλημάτων είναι αναπόφευκτα τα σφάλματα στρογγυλοποίησης. Αυτή η παρατήρηση οδηγεί στην σκέψη ότι δεν είναι δυνατόν να βρεθεί η ακριβής λύση και ότι θα ήταν 18

προτιμότερο να χρησιμοποιηθεί μέθοδος η οποία θα αναζητά την καλή προσέγγιση της λύσης αντί για της ακριβούς λύσης. Από τα τέλη του 19ου αιώνα έχουν αναπτυχθεί διάφορες μέθοδοι οι οποίες ανήκουν στην κατηγορία των λεγόμενων έμμεσων ή επαναληπτικών. Θεωρούνται πολύ αποτελεσματικές ειδικά όταν ο πίνακας των συντελεστών των αγνώστων του προς επίλυση γραμμικού συστήματος είναι μεγάλος και αραιός. Είναι επίσης οι καταλληλότερες για επίλυση προβλημάτων όταν χρησιμοποιείται υπολογιστής παράλληλης αρχιτεκτονικής. 3.1.3 GMRES Μια μέθοδος για την εύρεση της προσεγγιστικής λύσης στην περίπτωση γενικού πίνακα είναι Generalized Minimal Residual (GMRES). H GMRES είναι επαναληπτική μέθοδος που χρησιμοποιείται για επίλυση γραμμικών εξισώσεων όπως και όλες οι μέθοδοι που ακολουθούν. Η μέθοδος αυτή αναπτύχθηκε από τους Yousef Saad και Martin Schultz το 1986. Είναι μια πιο γενικευμένη έκδοσης της μεθόδου MINRES που είχε δημιουργηθεί το 1975 από τους Chris Paige και Michael Saunders. Η μέθοδος αυτή χρησιμοποιεί την παραλλαγή της Gram-Schmidt για την ορθοκανονικοποίηση του χώρου Krylov span {r0, Ar0, A k r0}. Ο αλγόριθμος αυτής της ορθοκανονικοποίσης καλείται αλγόριθμος του Arnoldi. Οι βασικές σχέσεις k βήμα του αλγορίθμου δίνονται από τις AQ k = Q k H kk + H k+1 (ξ k ) T = Q k+1 H k+1,k Ο πίνακας Qk είναι ένας n x k ορθοκανονικός πίνακας με στήλες τα ορθοκανονικά διανύσματα qk που παράγονται από τον ίδιο αλγόριθμο, ο 19

πίνακας Hkk είναι ένας k x k άνω Hessenberg πίνακας με στοιχεία τα εσωτερικά γινόμενα hij = (qj+1, qi), όπου qi είναι τα ορθοκανονικά διανύσματα που κατασκευάζονται από τον αλγόριθμος του Arnoldi, ενώ τα qj+1 είναι τα ορθογώνια ανά δύο διανύσματα τα οποία, επίσης κατασκευάζονται από τον ίδιο αλγόριθμο. Ο πίνακας Hk+1,k είναι ο προηγούμενος πίνακας Hkk, αυξημένος κατά μια επιπλέον γραμμή, της οποίας το μόνο μη μηδενικό στοιχείο είναι το hk+1,k. Το στοιχείο αυτό βρίσκεται από τον αλγόριθμο του Arnoldi. Το διάνυσμα hk+1 είναι το ανάστροφο του διανύσματος γραμμής της τελευταίας γραμμής του πίνακα Hk+1,k. Το διάνυσμα ξ k, που εμφανίζεται στις παρακάτω σχέσεις είναι το γνωστό βασικό μοναδιαίο διάνυσμα διάστασης κ με 1 στην k συνιστώσα. 3.1.4 BiCG Έστω A C n,n μη Ερμιτιανός, γενικά πίνακας και έστω Ax = b το σύστημα που θέλουμε να επιλύσουμε με b C n. Θεωρούμε ότι η ακολουθία διανυσμάτων που παράγει ο αλγόριθμος του Lanczos είναι πλήρης, δηλαδή δεν έχουμε περίπτωση κατάρρευσης. Τα διανύσματα βάσης του χώρου Krylov, τα οποία παράγονται από τον αλγόριθμο του Lanczos, μπορούν να χρησιμοποιηθούν στην προσέγγιση της λύσης του γραμμικού συστήματος. Εδώ, όπως και στην GMRES η προσέγγιση x k της λύσης του γραμμικού συστήματος δίδεται από μια σχέση της μορφής: x k = x 0 + V k y k Η παραπάνω σχέση αποτελεί μια διαδικασία διαδοχικών βελτιώσεων της αρχικής προσέγγισης x 0, μέσω ενώς γραμμικού συνδιασμού διανυσμάτων βάσης του χώρου Krylov Kk (A, r0). 20

3.1.5 QMR Στην Quasi-minimal Residual (QMR) οι προσεγγίσεις της λύσης δίδονται και σε αυτήν την περίπτωση από την σχέση x k = x 0 + V kyk οπού το y k είναι τέτοιο ώστε να ελαχιστοποιεί μια ποσότητα που σχετίζεται με την ευκλείδεια νόρμα του υπολοίπου 3.1.6 CGS Στις μεθόδους BICG και QMR σε κάθε επανάληψη, απαιτούνται πολλαπλασιασμοί των πινάκων Α και Α H επί διανύσματα. Το γεγονός αυτό απαιτεί επιπλέον κόστος σε πράξεις. Επίσης σε πολλές περιπτώσεις, ο πολλαπλασιασμός με τον A H δεν είναι βολικός σε σύγκριση με αυτόν του Α. Για αυτούς τους λόγους, προσπαθούμε να κατασκευάσουμε επαναληπτικές μεθόδους, τέτοιες ώστε από το ένα μέρος να απαιτούν πολλαπλασιασμό μόνο με τον πίνακα Α και από το άλλο μέρος να παράγουν καλές προσεγγίσεις της λύσης από τους χώρους Krylov, που κατασκευάζονται από τον πολλαπλασιασμό του πίνακα Α επί το διάνυσμα. Μια τέτοια μέθοδος, η οποία βελτιώνει τις μεθόδους BICG και QMR είναι η CGS. 3.1.7 BiGSTAB Η BiCGSTAB αναπτύχθηκε από τον Henk Van der Vorst για την επίλυση γραμμικών συστημάτων. Αποτελεί μια παραλλαγή της BiCG που έχει ταχύτερη και ομαλότερη σύγκλιση και από την αρχική BiCG αλλά και από άλλες μεθόδους όπως η CGS. Για την αποφυγή των αυξομειώσεων της 21

νόρμας του υπόλοιπου κατά τη σύγκλιση της CGS μεθόδου θεωρούμε την παρακάτω τροποποιημένη μορφή υπόλοιπου r k = x k (A)Φ k (A)r 0 Όπου Φ k ειναι το πολυώνυμο της BiCG ενώ το x k επιλέγεται έτσι ώστε να διατηρεί τη νόρμα του υπολοίπου σε κάθε επανάληψη μικρή, ακολουθώντας την ταχεία σύγκλιση της CGS 3.2 Εφαρμογή MATLAB Η δημιουργία της MATLAB εφαρμογής έγινε με τη χρήση του προγράμματος MATLAB GUIDE (Graphical User Interface Design Environment) το οποίο παρέχει τα κατάλληλα εργαλεία για την δημιουργία εφαρμογών σε περιβάλλον Windows δίνοντας την δυνατότητα στον προγραμματιστή να χρησιμοποιήσει τις βιβλιοθήκες του MATLAB. Ξεκινώντας επιλέχθηκε ένα σταθερό μέγεθος για την εφαρμογή το οποίο περιέχει όλα τα απαραίτητα στοιχεία για τον υπολογισμό και την σύγκριση των μεθόδων. Πάνω αριστερά υπάρχουν δύο Pop up menus στα οποία ο χρήστης επιλέγει με το πρώτο το μέγεθος του πίνακα, έχοντας να επιλέξει από πίνακα 3x3 έως και πίνακα 10x10. Το δεύτερο Pop up menu είναι για την επιλογή της μεθόδου επίλυσης με τις επιλογές να είναι CGS, GMRES, QMR, BiCG, BiCGSTAB. Δεξιά στο πεδίο με τίτλο Matrices υπάρχουν τρεις πίνακες. Διαμορφώνονται ανάλογα με την επιλογή που έδωσε ο χρήστης στο μέγεθος του πίνακα και 22

οι πρώτοι δύο αφορούν τους πίνακες που χρειάζονται για την επίλυση του γραμμικού συστήματος, ενώ ο τρίτος είναι ο πίνακας με τα αποτελέσματα. Εικόνα 3.1 Η εφαρμογή που δημιουργήσαμε στο MATLAB Κάτω από τα μενού στο πεδίο Variables είναι τρία Text boxes, τα οποία περιλαμβάνουν τις μεταβλητές για το περιθώριο λάθους, το πλήθος των επαναλήψεων και των επανεκκινήσεων και ο χρήστης μπορεί να μεταβάλει αυτές τις τιμές αν το επιθυμεί. 23

Εικόνα 3.2 Η εφαρμογή που δημιουργήσαμε στο MATLAB Εφόσον έχουν επιλεχθεί η μέθοδος, και το μέγεθος του πίνακα και έχουν συμπληρωθεί τα πεδία των πινάκων και τον μεταβλητών με το πάτημα του button Calculate το οποίο υπολογίζει και εμφανίζει τα αποτελέσματα στον πίνακα Results, στον πίνακα με το αντίστοιχο όνομα της μεθόδου στο κάτω μέρος της εφαρμογής και εμφανίζεται στο Plot. Σε περίπτωση που θέλει ο χρήστης να δει τα αποτελέσματα και μιας άλλης μεθόδου την επιλέγει και ο πίνακας Results θα αποθηκεύσει την τελευταία μέθοδο, και πάλι στο κάτω μέρος της εφαρμογής θα αποθηκευτεί μόνιμα 24

για σκοπούς σύγκρισης. Αν θέλει ο χρήστης να διαγράψει τα πάντα, πατώντας το κουμπί Clear η εφαρμογή επιστρέφει στην αρχική της μορφή, ενώ με το Clear Axes μόνο το Plot πηγαίνει στην αρχική του μορφή. 3.2.1 Ανάλυση κώδικα. Στο παρακάτω τμήμα κώδικα φαίνεται η λειτουργία της GMRES που επιλέχθηκε τυχαία για να παρουσιαστεί το πως λειτουργεί η εφαρμογή. Υπάρχει μια Switch που μέσα έχει διαφορετικά Cases ανάλογα με την επιλογή του χρήστη στο δεύτερο Pop up menu, αυτό που επιλέγει την μέθοδο. case 3 // η περίπτωση που επιλεχθεί η GMRES a=get(handles.tablea, data'); //παίρνει τα στοιχεία που υπάρχουν στον α πίνακα b=get(handles.tableb,'data'); // αντίστοιχα για τον πίνακα β tol=str2num(get(handles.tol, String')); //το περιθώριο λάθους που έχει ορίσει ο χρήστης maxit=str2num(get(handles.maxit, String')); //ο αριθμός των επαναλήψεων restart=str2num(get(handles.restart, string')); //ο αριθμός των επανεκκινήσεων x=gmres(a,b,restart,tol,maxit); // καλεί την συνάρτηση gmres με τα στοιχεία που συλλέχθηκαν πιο πάνω set(handles.result, data',x) // τα αποτελέσματα μπαίνουν στον πίνακα results set(handles.gmresres, data',x) //τα αποτελέσματα μπαίνουν στον πίνακα gmres p= plot(x) // εμφανίζονται στο plot τα αποτελέσματα set(p, Color','blue','LineWidth',1.5) // με χρώμα γραμμής το μπλε και πάχος 1.5 Παρομοίως λειτουργούν και οι υπόλοιπες μέθοδοι, με μόνη διαφορά ότι η επιλογή Restart είναι ενεργή μόνο στην συγκεκριμένη μέθοδο. 25

Κεφάλαιο 4 4.1 Οι εκδόσεις των Android. Εικόνα 4.1 Τα λογότυπα των Android εκδόσεων Όπως αναφέρθηκε και πιο πριν το λειτουργικό Android ξεκίνησε το 2007. Η πρώτη του έκδοση ήταν η Android 1.0 χωρίς κάποιο κωδικό όνομα. Σήμερα η πιο πρόσφατη έκδοση είναι η Kit Kat 4.4. Συνηθίζεται όταν η αναβάθμιση αφορά κάποιες μικρές βελτιώσεις ή κάποιες διορθώσεις για bugs να αυξάνονται τα δέκατα της έκδοσης, ενώ για μεγάλες αναβαθμίσεις ανεβαίνει κατά 1 μονάδα το νούμερο της έκδοσης. Το Android 1.0 περιελάμβανε υποστήριξη κάμερας, περιηγητή για το Ίντερνετ, χάρτες της Google, το κατάστημα εφαρμογών Android Market, Youtube και Gmail. H πρώτη εξέλιξη του λειτουργικού της Google ήταν η Petit Four 1.1, όταν και η εταιρία αποφάσισε να ονομάζει τις αναβαθμίσεις της με κάποιο όνομα γλυκού. Η Petit Four είναι από τις πιο άγνωστες αναβαθμίσεις κυρίως γιατί σε 2 μήνες είχε ήδη βγει η επόμενη. Αυτό που πρόσθεσε ήταν η δυνατότητα αποθήκευσης των αρχείων που στέλνονταν με MMS, και 26

εμφάνιση/απόκρυψη του εικονικού πληκτρολογίου στις κλήσεις. Στην συνέχεια ακολούθησε η Cupcake 1.5, και οι υπόλοιπες αναβαθμίσεις είναι με αλφαβητική σειρά, κάθε έκδοση δηλαδή είναι και ένα γλυκό από το αντίστοιχο γράμμα του αγγλικού αλφάβητου. Η Cupcake βγήκε τον Απρίλιο του 2009 και πρόσθεσε στο λειτουργικό την επικοινωνία μέσω bluetooth με τα προφίλ A2DP και AVRCP, την πρόβλεψη κειμένου κατά την πληκτρολόγηση, και λειτουργία καταγραφής βίντεο από την κάμερα της συσκευής. Τον Σεπτέμβριο του ίδιου έτους βγήκε η Donut 1.6 με κύριες προσθήκες την αναβάθμιση του πλοηγού, περισσότερες χειρονομίες και δυνατότητα επιλογής πολλών αρχείων. Η έκδοση 2.0-2.1 ονομάστηκε Eclair η οποία ήταν η πρώτη μεγάλη αναβάθμιση και προστέθηκαν υποστήριξη για HTML5, ψηφιακό ζουμ, Bluetooth 2.1, υποστήριξη για Microsoft Exchange, δυνατότητα για κινούμενο φόντο ενώ βελτιώθηκε και το user interface του λογισμικού. Στην Froyo 2.2, υπήρξε βελτιστοποίηση στην ταχύτητα του λειτουργικού, δυνατότητα για tethering, να λειτουργεί δηλαδή το κινητό ως router και να μπορεί να διαμοιράζει ίντερνετ σε άλλες συσκευές, δυνατότητα αποθήκευσης εφαρμογών στην κάρτα μνήμης και δυνατότητα προβολής εικόνων τύπου GIF. Τον Δεκέμβριο του 2010 βγήκε η Gingerbread 2.3, και μέχρι και την 2.3.4 κράτησε το ίδιο όνομα. Σε αυτή την έκδοση υπήρξε ξανά βελτιστοποίηση του user interface, αναβάθμιση της αντιγραφής και επικόλλησης σε 27

ολόκληρο το σύστημα, που μέχρι τότε λειτουργούσε μόνο μέσα σε κάθε εφαρμογή, καλύτερη διαχείριση μπαταρίας, δυνατότητα βίντεο κλήσεων και κλήσεων VOIP, video/voice chat μέσω του Google Talk, καθώς και προσθήκες για τα κοινωνικά δίκτυα. Η έκδοση Honeycomb 3.0 είχε την ιδιαιτερότητα ότι προοριζόταν για τα τάμπλετ. Προστέθηκε ένα διαφορετικό user interface το οποίο αφορούσε αποκλειστικά στα τάμπλετ που παραδοσιακά έχουν μεγαλύτερη οθόνη, υποστήριξη πολλών πυρήνων στον επεξεργαστή, ευκολότερο multitasking, υποστήριξη χειριστηρίων για ηλεκτρονικά παιχνίδια, δυνατότητα ανάγνωσης βιβλίων από το Google ebooks, και αυτόματες αναβαθμίσεις εφαρμογών μέσα από το Android Market. Ακολούθησε η Ice Cream Sandwich 4.0-4.0.4, η οποία παρουσιάστηκε τον Οκτώβριο του 2011. Σε αυτή την έκδοση έγιναν αρκετές προσθήκες σχετικά με την ασφάλεια των Android, νέες επιλογές κλειδώματος κεντρικής οθόνης, αναγνώριση προσώπου, ο περιηγητής υποστηρίζει μέχρι και 16 ανοιχτές καρτέλες, ο χρήστης μπορεί να βάλει όριο στην χρήση των δεδομένων κινητής τηλεφωνίας, οι συσκευές Android μπορούν να συνδεθούν απευθείας με το Wi-Fi direct, οι κάμερες καταγράφουν βίντεο μέχρι και 1080p ανάλυση ενώ βελτιώνεται και η φωνητική αναγνώριση. Τον Ιούλιο του 2012 κυκλοφόρησε η Jelly Bean 4.1-4.3, με μεγάλο αριθμό αλλαγών. Το λειτουργικό της Google εμπλουτίστηκε με το Google Now, την υποστήριξη πολλών χρηστών για τάμπλετς, βελτίωση πληκτρολόγησης με νέες χειρονομίες, υποστήριξη γραφής Braille με εξωτερικά πληκτρολόγια, βελτιστοποιήσεις στο user interface, την ταχύτητα, την κάμερα, αλλαγές στις ειδοποιήσεις και βελτίωση του γρήγορου μενού για ενεργοποίηση Wi- 28

Fi/Bluetooth, υποστήριξη ανάλυσης 4K για τις τηλεοράσεις, ασύρματο φόρτισμα για τις συσκευές, και άλλες αλλαγές μικρότερης σημασίας. Η τωρινή έκδοση των Android είναι η Kit Kat 4.4 που κυκλοφόρησε πριν από ένα χρόνο τον Οκτώβριο του 2013. Στην KitKat βελτιώθηκε η ασφάλεια, υπάρχει η δυνατότητα καταγραφής της οθόνης ενώ έγιναν και πολλές βελτιστοποιήσεις ως προς την ταχύτερη και ομαλότερη λειτουργία της συσκευής. Αναμένεται να ακολουθήσει η Android Lollipop 5.0, που θα έχει μεγάλη αλλαγή στο design του λειτουργικού, με το νέο material design, νέο σύστημα ειδοποιήσεων δίνοντας έμφαση στις ποιο σημαντικές ειδοποιήσεις, νέο ξεκλείδωμα συσκευής, και αλλαγές στην διαχείριση της μπαταρίας. 4.2 Σχεδιασμός του Android Το Android δεν είναι μόνο ένα λειτουργικό σύστημα. Είναι μια στοίβα λογισμικού η οποία αποτελείτε από πολλά επίπεδα τα οποία συνδυάζουν το λειτουργικό σύστημα, τις υπηρεσίες διασύνδεσης με τις middleware εφαρμογές και τέλος τις κύριες (core) εφαρμογές, όπως browser, email cient, εφαρμογής SMS, εφαρμογή διαχείρισης επαφών, και άλλες οι οποίες έρχονται δεμένες με τo υπόλοιπο λογισμικό του Android. Στο παρακάτω σχεδιάγραμμα φαίνεται η αρχιτεκτονική αυτή. 29

Εικόνα 4.2 Η αρχιτεκτονική των Android Από ότι βλέπουμε λοιπόν η αρχιτεκτονική του λειτουργικού συστήματος αποτελείτε από 5 βασικά επίπεδα. Τον πυρήνα Linux (Linux Kernel) Τις βιβλιοθήκες (Libraries) Την εικονική μηχανή Dalvik (Dalvik VM) Τον χρόνο εκτέλεσης (Android Runtime) Το πλαίσιο εφαρμογής (Application Framework) 4.2.1 Πυρήνας Linux (Linux Kernel) Η βάση του λογισμικού Android είναι ο πυρήνας Linux. Είναι η πρώτη 30

επαφή του hardware με το software και αυτό που κάνει ο Linux Kernel, είναι να υποστηρίζει όλες τις κύριες λειτουργίες του λειτουργικού συστήματος. Οι λειτουργίες αυτές αφορούν διαχείριση μνήμης, διαχείριση ενέργειας, ασφάλεια, αναπαραγωγή εικόνας και ήχου, λειτουργία κάμερας, πληκτρολογίου και Wi-Fi μέσω οδηγών εγκατάστασης υλικού (hardware drivers). Οι οδηγοί αυτοί είναι υπεύθυνοι για την επικοινωνία του software με το hardware της συσκευής. Η βάση του Android μπορεί να είναι ο πυρήνας των Linux, αλλά στην πραγματικότητα υπάρχουν αρκετές διαφορές. Ο λόγος είναι οι αλλαγές που έχει κάνει η Google για να είναι ελαφρύτερος και βελτιστοποιημένος για χρήση σε κινητές συσκευές. Το συμπέρασμα αυτού είναι ότι παρότι το Android είναι κατά βάση Linux, επί της ουσίας είναι αρκετά δύσκολο να τρέξουν εφαρμογές ή να χρησιμοποιηθούν βιβλιοθήκες από τη μία πλατφόρμα στην άλλη. 4.2.2 Βιβλιοθήκες Στο αμέσως επόμενο επίπεδο, το δεύτερο κατά σειρά υπάρχουν οι βιβλιοθήκες. Αυτές ουσιαστικά αποτελούν τα APIs που είναι διαθέσιμα στους προγραμματιστές για την ανάπτυξη των εφαρμογών. Οι βιβλιοθήκες έχουν την ίδια λειτουργία με τα υπόλοιπα λειτουργικά συστήματα. Είναι μια συλλογή από έτοιμα υποπρογράμματα που από μόνες τους δεν αποτελούν εφαρμογές αλλά ενσωματώνονται και χρησιμοποιούνται από τις εφαρμογές χρησιμοποιώντας τον βοηθητικό κώδικα του ως υπηρεσίες στα προγράμματα. Αποτελούν ένα από τα δομικά υλικά των εφαρμογών, και είναι αναπόσπαστο κομμάτι τους. Ο περισσότερος κώδικας που χρησιμοποιούν οι σύγχρονες εφαρμογές παρέχεται από αυτές τις 31

βιβλιοθήκες και δεν χρειάζεται να γραφεί από την αρχή για κάθε νέο πρόγραμμα. Οι βιβλιοθήκες είναι γραμμένες σε C και C++, οι οποίες έχουν μεταγλωττιστεί για τη χρήση τους από το λειτουργικό. Κυριότερες βιβλιοθήκες των Android είναι: System C library μια ενσωμάτωση της standard βιβλιοθήκης συστήματος της C (libc) τροποποιημένη για κινητές συσκευές βασισμένες στο Linux. Βιβλιοθήκες Πολυμέσων Υποστηρίζει αναπαραγωγή και εγγραφή ήχουν, εικόνας αλλά και βίντεο μέσω διαφόρων codecs. Surface Manager διαχειρίζεται το τι προβάλλεται στην οθόνη της συσκευής καθώς συνδυάζει όλα τα στοιχεία που συνθέτουν το τι εμφανίζεται τελικά στην οθόνη. OpenGL χρησιμοποιείται για την δημιουργία δισδιάστατων ή τρισδιάστατων γραφικών SGL η γνωστή μηχανή δισδιάστατων γραφικών Webkit παρέχει την δυνατότητα να προβληθεί υλικό γραμμένο σε HTML. SQLite χρησιμοποιείται για την διαχείριση βάσεων δεδομένων. Γενικά ο αριθμός των βιβλιοθηκών είναι πολύ μεγάλος και περιέχουν λειτουργίες για σχεδόν τα πάντα, όπως λειτουργίες της κάμερας, διαχείριση αρχείων, επεξεργασία εικόνας, λειτουργία αποθήκευσης cloud, υπηρεσίες τοποθεσίας, χρήση χειρονομιών και πολλές ακόμα. 32

4.2.3 Η εικονική μηχανή Dalvik Σχεδόν το σύνολο των APIs του Android βασίζονται στη γλώσσα προγραμματισμού Java. Στην Java υπάρχει η λεγόμενη Java Virtual Machine στην οποία εκτελείτε ο κώδικας bytecode των εφαρμογών. Στο Android υπάρχει κάτι παρόμοιο και ονομάζεται εικονική μηχανή Dalvik. Η Dalvik λοιπόν είναι η εικονική μηχανή μέσω της οποίας τρέχουν οι εφαρμογές του Android. H κάθε εφαρμογή τρέχει μέσω τις δικής της εικονικής μηχανής στη δικιά της διεργασία και για αυτό το λόγο καμία εφαρμογή δεν έχει επαφή με την άλλη, ενώ εκτελούνται ταυτόχρονα. Η Dalvik δεν υποστηρίζει τον κώδικα bytecode, αντί αυτού οι κλάσεις της Java γίνονται compile σε αρχεία.dex ώστε να τρέξουν στην VM. Τα αρχεία dex ουσιαστικά αποτελούν συμπιεσμένα δεδομένα για εξοικονόμηση χώρου κατά την εκτέλεση. Το Android είναι από τη φύση του multitasking λειτουργικό σύστημα και για αυτό επιτρέπει στις εφαρμογές του να τρέχουν σε πολλά νήματα ταυτόχρονα και να απασχολούν πολλές διαδικασίες εάν αυτό είναι αναγκαίο. Για να γίνει αυτό εφικτό η μηχανή Dalvik είναι σχεδιασμένη για να έχει ελάχιστο αντίκτυπο στη χρήση της μνήμης. Χάρη στον λιτό της σχεδιασμό, το σύστημα είναι σε θέση να τρέχει πολλές εικονικές μηχανές ταυτόχρονα. 4.2.4 Χρόνος Εκτέλεσης Εφαρμογής (Android Runtime) Ο χρόνος εκτέλεσης των εφαρμογών του Android, βρίσκεται στο ίδιο επίπεδο με τις κύριες βιβλιοθήκες και την μηχανή Dalvik. Εδώ βρίσκουμε το κοινό σημείο επαφής μεταξύ των δυνατοτήτων που παρέχουν οι βιβλιοθήκες και του χρόνου εκτέλεσης της εικονικής μηχανής Dalvik τις 33

λειτουργίες τις οποίας, περιγράψαμε παραπάνω. 4.2.5 Πλαίσιο Εφαρμογής (Application Framework) Το Android παρέχει στους developers μια ανοιχτού κώδικα πλατφόρμα ανάπτυξης και τη δυνατότητα να αναπτύξουν με αυτή ιδιαίτερα καινοτόμες και πλούσιες σε υλικό, εφαρμογές. Οι developers έχουν στην διάθεση τους τη δυνατότητα ελέγχου του υλικού της συσκευής και μέσω αυτής μπορούν να αποκτήσουν πρόσβαση σε υπηρεσίες εντοπισμού, εκτέλεση διεργασιών παρασκηνίου, και πάρα πολλές ακόμη δυνατότητες οι οποίες βασίζονται στα APIs που είναι διαθέσιμα. Στο επόμενο επίπεδο της αρχιτεκτονικής του Android λοιπόν, συναντάμε το πλαίσιο των εφαρμογών. Οι developers έχουν πρόσβαση σε όλα τα APIs μεταξύ αυτών και στα κύρια APIs που χρησιμοποιούν οι ενσωματωμένες εφαρμογές, και αφορούν στην βασική λειτουργιά του κινητόύ τηλεφώνου. Η δομή των εφαρμογών είναι τέτοια που ευνοείται η επαναχρησιμοποίηση δομικών συστατικών, και επίσης επιτρέπεται η χρήση των δυνατοτήτων τις μίας εφαρμογής από άλλες εφαρμογές, βέβαια κάτω από τις προδιαγραφές ασφάλειας του Android. Τα σημαντικότερα δομικά στοιχεία του πλαισίου εφαρμογών είναι: Σύστημα προβολών (View System) αποτελεί ένα εκτενές σύνολο από αντικείμενα GUI τα οποία μπορούν να χρησιμοποιηθούν κατά το σχεδιασμό μιας εφαρμογής. Παραδείγματα προβολών είναι οι λίστες (listview), το πλέγμα (GridView), πεδία εισαγωγής κειμένου, κουμπιά, κλπ Πάροχος Περιεχομένου (Content Provider) δίνει τη δυνατότητα στις εφαρμογές να μοιράζονται ή να ανταλλάσσουν δεδομένα μιας συγκεκριμένης μορφής η οποία ορίζεται από τον πάροχο. Παραδείγματα 34

δεδομένων, είναι οι επαφές χρήστη και οι βάσεις δεδομένων των εφαρμογών. Διαχειριστής Πόρων (Resource Manager) παρέχει πρόσβαση σε υλικό το οποίο δεν είναι σε μορφή κώδικα όπως πχ, εικόνες, αρχεία xml, πίνακες χαρακτήρων, κλπ Διαχειριστής Ειδοποιήσεων (Notification Manager) δίνει στις εφαρμογές πρόσβαση στις υπηρεσίες ειδοποιήσεων χρήστη. Τέτοιες είναι οι ειδοποιήσεις στη notification bar, τα toast μηνύματα στο κάτω μέρος της οθόνης, η δόνηση του κινητού και η ενεργοποίηση της οθόνης, κλπ Διαχειριστής Δραστηριοτήτων (Activity Manager) διαχειρίζεται τον κύκλο ζωής των δραστηριοτήτων και παρέχει δυνατότητα πλοήγησης από δραστηριότητα σε δραστηριότητα κρατώντας αποθηκευμένη στη μνήμη τη σειρά εκτέλεσης αυτών. Αποφασίζει πόσο καιρό θα μείνει ανοιχτή μια δραστηριότητα, εφόσον ο χρήστης θα βγει από αυτήν, και από που θα συνεχίσει όταν ξαναχρησιμοποιήσει ο χρήστης την συγκεκριμένη δραστηριότητα. 4.4 Ανάπτυξη εφαρμογών στο Android 4.4.1 Εγκατάσταση λογισμικού Για τον σχεδιασμό, την ανάπτυξη και τον έλεγχο της εφαρμογής διαλέξαμε να δουλέψουμε στο Android Studio. Το Android Studio είναι ένα περιβάλλον ανάπτυξης εφαρμογών το βασίζετε στο IntelliJ IDEA της Java και προσφέρει : Ευέλικτο Gradle-based σύστημα. Ενσωματώνει το Android SDK και AVD. 35

Πολλαπλό APK generation. Πρότυπα υποστήριξης για τις υπηρεσίες της Google και για διάφορα είδη συσκευών(andoird Wear, Android Auto, Android TV). Η ενσωματωμένη υποστήριξη για την πλατφόρμα Cloud Google. Εικόνα 4.3 Το λογότυπο του Android Studio Το Android AVD προσφέρει εικονικές συσκευές για να δοκιμαστεί η λειτουργιά της εκάστοτε εφαρμογής σε πραγματικές συνθήκες και σε διαφορετικές συσκευές με διαφορετικό hardware. Η εφαρμογή μας έτρεξε και δοκιμαστικέ σε φυσικές συσκευές άλλα και σε διάφορες εικονικές συσκευές. 4.4.2 Δημιουργία νέου Android Project στο Android Studio Αφού έχουμε ορίσει τις απαιτούμενες ανάγκες τις εφαρμογής και έχουμε 36

στο μυαλό μας τον βασικό κορμό, θα προχωρήσουμε στην υλοποίηση της. Όλα ξεκινάνε από τη δημιουργία ενός νέου Android project στο Android Studio. Στο πρώτο πεδίο εισάγουμε το όνομα της εφαρμογής το οποίο θα χρησιμοποιείτε όπου γίνεται αναφορά της εφαρμογής μας (ρυθμίσεις εφαρμογών, Google Play Store, κλπ). Στη συνέχεια εισάγουμε το όνομα του κεντρικού πακέτου της εφαρμογής μας. Το πεδίο του ονόματος δεν μας ενδιαφέρει αν είναι μοναδικό ή όχι καθότι είναι δυνατόν να κυκλοφορούν αρκετές εφαρμογές με το ίδιο όνομα. Μοναδικό όμως πρέπει να είναι το όνομα του πακέτου όπου στο Android studio δηλώνετε αυτόματα όταν δηλώσουμε ένα δικό μας η ένα τυχαίο URL. Αρχικά επιλέξαμε την έκδοση 4.4 για να έχουμε στην διάθεσή μας τα νεότερα Google APIs. Αν υπάρξει ανάγκη στην πορεία να στοχεύσουμε σε παλαιότερες εκδόσεις του Android αρκεί να δηλώσουμε στο AndroidManifest το κατώτατο SDK που θέλουμε να συμπεριλάβουμε. Στο τρίτο βήμα διαλέγουμε κάποιο από τα activities που μας παρέχονται, ανάλογα πάντα με το τι θέλουμε να υλοποιήσουμε. Στο τελευταίο βήμα επιλέγουμε το όνομα του activity, στην περίπτωσή μας το πρώτο θα είναι και το κεντρικό activity της εφαρμογής. Δηλώνοντας το όνομα του activity αυτόματα δημιουργείται και το όνομα του layout και ο τίτλος. 37

Εικόνα 4.4 Δημιουργία νέου Project στο Android Studio 4.4.3 Δημιουργία των Activities της εφαρμογής Αφού έχουμε ξεκαθαρίσει τις ανάγκες τις εφαρμογής μας ήρθε η ώρα να δηλώσουμε τις απαραίτητες οθόνες διεπαφής χρήση, δηλαδή τις Activities. Έχουμε ήδη δημιουργήσει αυτόματα την Activity MainActivity η οποία θα εμφανίζεται στον χρήστη αμέσως μόλις ανοίξει την εφαρμογή, και θα τη χρησιμοποιήσουμε ως κεντρικό σημείο επαφής με τις υπόλοιπες λειτουργίες τις εφαρμογής. Για να δημιουργήσουμε μια νέα Activity στο project μας, πατάμε δεξί κλικ πάνω στον φάκελο της java και επιλέγουμε 38

New->Activity->Blank Activity και εμφανίζεται το παράθυρο δημιουργίας νέας κλάσης. Στη συνέχεια δηλώνουμε το όνομα της καινούργιας κλάσης που θέλουμε να δημιουργήσουμε και στο πεδίο Hierarchical Parent επιλέγουμε την γονική κλάση, στην περίπτωσή μας επιλέγουμε την MainActivity. Τελειώνοντας με τις υπόλοιπες ρυθμίσεις της νέα μας Activity πατάμε το κουμπί finish για να προστεθεί κλάση Gmres στον φάκελο src του project. Με τον ίδιο τρόπο θα δημιουργήσουμε και τις υπόλοιπες Activities της εφαρμογής μας. H activity Gmres θα χρησιμοποιηθεί για να για να γίνει η αριθμητική ανάλυση της επαναληπτικής μεθόδου GMRES. Εικονα 4.5 Δημιουργία Activity στο Android Studio 39

Συνολικά η εφαρμογή διαθέτει 7 κλάσεις που ανήκουν στην κατηγορία των Activities για την διεπαφή με τον χρήστη: MainActivity : Η κεντρική οθόνη προβολής τις λίστας των επαναληπτικών μεθόδων BicgActivity : Οθόνη προβολής της αριθμητικής ανάλυσης της επαναληπτικής μεθόδου Bicg σε webview. BicgstabActivity : Οθόνη προβολής της αριθμητικής ανάλυσης της επαναληπτικής μεθόδου Bicgstab σε webview. CgsActivity : Οθόνη προβολής της αριθμητικής ανάλυσης της επαναληπτικής μεθόδου CGS σε webview. CreditsActivity : Οθόνη προβολής πληροφοριών εφαρμογής. GmresActivity : Οθόνη προβολής της αριθμητικής ανάλυσης της επαναληπτικής μεθόδου Gmres σε webview. QmrActivity : Οθόνη προβολής της αριθμητικής ανάλυσης της επαναληπτικής μεθόδου Qmr σε webview. 4.4.4 Debugging και Δοκιμαστική Φάση Εφαρμογής Η διαδικασία του debugging είναι εξίσου κρίσιμη και μερικές φορές και εξίσου χρονοβόρα με την διαδικασία ανάπτυξης του πηγαίου κώδικα της εφαρμογής. Αποτελείτε από αρκετά επί μέρους στάδια. Το πρώτο στάδιο αφορά το αρχικό χτίσιμο της εφαρμογής και η λειτουργία αυτής σε debug mode. Για να γίνει το compile της εφαρμογής φυσικά τα περισσότερα περιβάλλοντα ανάπτυξης (IDE) προϋποθέτουν ότι ο κώδικας δεν έχει κανένα συντακτικό λάθος. Αφού γίνει το compile η εφαρμογή μπορεί να δοκιμαστεί είτε σε εικονική συσκευή μέσω του AVD Manager, είτε απευθείας σε φυσική συσκευή μέσω ADB. Έπειτα εντοπίζονται τα λειτουργικά και αισθητικά προβλήματα της 40

εφαρμογής, στην λειτουργία της συσκευής φυσικής ή εικονικής και μετά ακολουθεί η διόρθωση στα κομμάτια του κώδικα που δημιουργούν τα σφάλματα. Το κύριο εργαλείο που κάνει αυτή τη διαδικασία εφικτή είναι το LogCat το οποίο επιστρέφει το stack trace του κώδικα στο σημείο εκείνο που συνέβη το σφάλμα. Η διαδικασία του debugging είναι σαν ένα βρόγχος (loop) που επαναλαμβάνεται συνέχεια μέχρι να εντοπιστούν και να διορθωθούν όλα τα σφάλματα της εφαρμογής, και για αυτό το λόγο μπορεί να αποδειχθεί εξαιρετικά χρονοβόρα. Το Android SDK προσφέρει βιβλιοθήκες API και τα απαραίτητα εργαλεία για ανάπτυξη και εκσφαλμάτωση των εφαρμογών: Εργαλεία Debugging των εφαρμογών Βιβλιοθήκες Εξομοιωτής συσκευών (Android Virtual Machines) Documentation Δείγματα Κώδικα Tutorials Το SDK υποστηρίζει πολλά δημοφιλή λειτουργικά συστήματα συμπεριλαμβανομένων όλων των σύγχρονων διανομών Linux, το MAC OS X 10.4.9 και μεταγενέστερα, και τα Windows XP και τις μεταγενέστερες εκδόσεις. Το λογισμικό ανάπτυξης αποτελείτε από πακέτα τα οποία βρίσκονται αποθηκευμένα σε ένα επίσημο repository της Google, και ο προγραμματιστής μπορεί να κατεβάσει πέραν των βασικών πακέτων, και άλλα τα οποία υποστηρίζουν παλαιότερες εκδόσεις του Android, ή άλλες συσκευές εκτός 41

κινητών συσκευών (πχ Google TV Addon). Όσον αφορά την υποστήριξη παλαιότερων εκδόσεων του Android, το SDK κάνει εφικτή την υποστήριξη σε αυτές δίνοντας στον προγραμματιστή την δυνατότητα να στοχεύσει αυτός σε πια APIs θα απευθύνεται η εφαρμογή του. Αυτό είναι αναγκαίο λόγω του ότι πολλοί χρήστες έχουν παλαιότερες λειτουργικές συσκευές οι οποίες κυκλοφορήσαν με παλαιότερες εκδόσεις του Android (πχ 1.6 ή 2.1), και ο κατασκευαστής της συσκευής δεν έχει ή δεν πρόκειται να βγάλει αναβάθμιση για την συσκευή τους. Το πρόβλημα αυτό είναι γνωστό σαν διάσπαση του Android (Android Fragmentation) και θα αναλυθεί εκτενώς παρακάτω. 4.4.5 Android Design Guidelines Η υλοποίηση μιας νέας εφαρμογής στο Android αλλά και στα υπόλοιπα λειτουργικά συστήματα, ξεκινάει από τις λειτουργικές απαιτήσεις, δηλαδή τις δυνατότητες και λειτουργίες που θα υποστηρίζει η εφαρμογή, και συνεχίζει με τον σχεδιασμό του UI layout που θα δίνει πρόσβαση στον χρήστη στις παραπάνω λειτουργίες. Ο σχεδιασμός λοιπόν έχει μεγαλύτερη σημασία από τις ίδιες τις λειτουργίες τις εφαρμογής μιας και είναι το σημείο πρόσβασης προς αυτές. Μια κακοσχεδιασμένη εφαρμογή η οποία κρύβει τις λειτουργίες τις πίσω από πολλά κουμπιά και μενού ενδέχεται να μπερδέψει τον χρήστη και ίσως και να τον αποτρέψει από το να την χρησιμοποιήσει. Αυτό φυσικά δεν είναι επιθυμητό γι' αυτό και υπάρχουν κάποια ενδεικτικά επίσημα Guidelines (οδηγίες) τα οποία υποδεικνύουν στους developers τις ιδεατές και μη συμπεριφορές κατά τον σχεδιασμό της εφαρμογής τους. 42

Στα πρώτα χρόνια του Android ο σχεδιασμός τον εφαρμογών ήταν είτε καθαρή μεταφορά (port) από άλλο OS (πχ ios, Symbian) και συνήθως δεν ακολουθούσε καμία κοινή γραμμή σχεδιασμού με τις υπόλοιπες εφαρμογές κάτι που πολλές φορές μπέρδευε τον χρήστη που είχε συνηθίσει το κοινό layout πολλών εφαρμογών των υπολοίπων mobile OSes. Αυτό η Google προσπάθησε να το αλλάξει με την έλευση του Android 4.0 (Ice Cream Sandwich) όποτε και δημοσίευσε στο Ίντερνετ τη σελίδα Android Design για να καθοδηγήσει τους developers σε μία κοινή γραμμή ανάπτυξης εφαρμογών ώστε να πετύχει αύξηση λειτουργικότητας. Η αύξηση λειτουργικότητας επιτυγχάνεται λόγω του ότι ο χρήστης θα έχει γνωστά σημεία επαφής σε κάθε εφαρμογή οπότε δεν θα χρειάζεται να ψάχνει εκ νέου πως να επιστρέψει στην αρχική οθόνη ή που βρίσκεται το μενού των επιλογών, και άλλες τέτοιες λειτουργίες. Εικόνα 4.6 To Android Design 43

Στο site υπάρχει πληθώρα παραδειγμάτων καλού σχεδιασμού τα οποία αφορούν την χρήση της Action Bar, την χρήση των swappable tabs, την δυνατότητα δηλαδή να αλλάζει ο χρήστης οθόνες σέρνοντας αριστερά η δεξιά το δάχτυλό στην οθόνη της συσκευής. Επίσης υπάρχει και η ενότητα Downloads στην οποία υπάρχει ένα πλήρες πακέτο εικονιδίων τα οποία μπορεί ο καθένας να χρησιμοποιήσει για την ευκολότερη δημιουργία μενού σε εφαρμογές. Στα μέσα του 2014 η Google ανακοίνωσε το Android 5 L το οποίο θα ακολουθεί καινούργια design guidelines τα οποία η Google ονομάζει Material design. 4.4.6 Υποστήριξη πολλαπλών συσκευών Το λειτουργικό σύστημα Android τρέχει σε μια πληθώρα συσκευών οι οποίες μπορεί να έχουν πολύ διαφορετικές προδιαγραφές η μία από την άλλη. Η διαφοροποίηση των συσκευών εντοπίζεται: Στις πολλές εκδόσεις του Android που υπάρχουν. Αυτή τι στιγμή που γράφονται αυτές ο γραμμές υπάρχουν 9 διαθέσιμες εκδόσεις (1.5-4.4.4) με κυρίαρχη έκδοση την 4.1 Jellybean. Στην μεγάλη ποικιλία hardware. Υπάρχουν συσκευές με επεξεργαστή απο 600Mhz και 256ΜΒ μνήμης RAM μερί και συσκευές με επεξεργαστή 8 πυρήνων στα 2.2Ghz και 3GB μνήμης RAM. Εκτός από τις διαφορές σε επίπεδο microchip η κύρια διαφορά μεταξύ των συσκευών εντοπίζεται στην μεγάλη ποικιλία διαστάσεων οθόνης και πυκνότητας pixel. Έτσι λοιπόν για να γίνει η εφαρμογή προσβάσιμη σε όσο τον δυνατόν περισσότερες συσκευές πρέπει να σχεδιαστεί η εφαρμογή υποστηρίζει την πλειονότητα των συσκευών. ώστε να 44

4.4.7 Υποστήριξη παλαιότερων εκδόσεων Όπως αναφέρουμε παραπάνω αυτή τη στιγμή υπάρχουν 9 διαθέσιμες εκδόσεις του Android με πιο πρόσφατη την έκδοση 4.4.4 Kitkat και κυρίαρχη έκδοση την 4.1 Jellybean. Αυτή η συνεχής εξέλιξη της πλατφόρμας αποτελεί πλεονέκτημα αλλά και πρόκληση για τους προγραμματιστές οι οποίοι θα πρέπει να ακολουθούν τις εξελίξεις και να χρησιμοποιούν τις νέες δυνατότητες που τους προσφέρει η κάθε έκδοση, χωρίς να σταματούν την υποστήριξη στις παλαιότερες εκδόσεις του Android. Αυτό είναι ένα σημαντικό πρόβλημα καθότι κάποια νέα features δεν υποστηρίζονται στα παλιότερα APIs και άρα καθιστούν αδύνατη τη χρήση τους σε κάποια παλαιότερη έκδοση του Android. Η Google έχει προσπαθήσει να λύσει αυτό το πρόβλημα βγάζοντας μαζί με κάθε νέα έκδοση του λειτουργικού της, και μιας βιβλιοθήκης συμβατότητας η οποία αναλαμβάνει να κάνει διαθέσιμα τα νέα εργαλεία στα παλιότερα APIs. Σε γενικές γραμμές η συγκεκριμένη λύση λειτουργεί αρκετά ικανοποιητικά αλλά δυστυχώς δεν μεταφέρονται πάντα όλες οι νέες δυνατότητες στις παλαιότερες εκδόσεις του λειτουργικού συστήματος με αυτό τον τρόπο. Τρανό παράδειγμα αυτού είναι η υποστήριξη της ActionBar η οποία προστέθηκε στην έκδοση 3.0 του Android και πλέον ανήκει στις βασικές οδηγίες σχεδιασμού εφαρμογών (Android design guidelines). Η βιβλιοθήκη υποστήριξης την κάνει διαθέσιμη στις παλαιότερες εκδόσεις, αλλά με σαφής περιορισμούς στην χρήση της. 45

Version Codename API Distribution 2.2 Froyo 8 0.7% 2.3.3-2.3.7 4.0.3-4.0.4 Gingerbread 10 11.4% Ice Cream Sandwich 15 9.6% 4.1.x Jelly Bean 16 25.1% 4.2.x 17 20.7% 4.3 18 8.0% 4.4 KitKat 19 24.5% Εικόνα 4.7 Οι εκδόσεις των Android και τα ποσοστά τους Όπως φαίνεται από τα παραπάνω στατιστικά στοιχεία που ενημερώνονται αυτόματα κάθε 2 εβδομάδες από την Google, οι εκδόσεις Jellybean με 54% και η 46

Kitkat με ποσοστό 24.5%. Αυτό δυστυχώς πρόκειται για το φαινόμενο διάσπασης (fragmentation) του Android το οποίο θα αναλυθεί εκτενέστερα παρακάτω. Γενικά μια καλή προγραμματιστική συμπεριφορά, είναι η εκάστοτε εφαρμογή να υποστηρίζει τουλάχιστον το 90% των ενεργών συσκευών όσον αφορά την έκδοση Android. Αυτό από ότι βλέπουμε από το παραπάνω γράφημα είναι αρκετά εύκολο καθώς υποστηρίζοντας μόνο τις εκδόσεις 4.x αυτή τη στιγμή, έχουμε υποστηρίξει το ~90% των ενεργών συσκευών. Παρόλα αυτά έχουμε όμως αποκλείσει έναν σημαντικό αριθμό χρηστών οι οποίοι χρησιμοποιούν παλαιότερες (2.2, 2.3) το οποίο όμως η Google υπολογίζει ότι μέχρι το 1 ο τρίμηνο του 2015 θα έχει μεταπηδήσει σε νεότερες εκδόσεις. Οι developers πρέπει να βλέπουν και να αξιολογούν το μερίδιο των συσκευών με τέτοιο τρόπο ώστε να υποστηρίζουν όσο το δυνατό περισσότερες συσκευές χρηστών χωρίς όμως να υποβαθμίζουν την ποιότητα και λειτουργικότητα της συσκευής τους. Πρόκειται για μια λεπτή ισορροπία που επιτυγχάνεται μετά από αρκετή προσπάθεια από μέρος των developers. Η υποστήριξη των διαφορετικών εκδόσεων ορίζεται στο αρχείο AndroidManifest.xml και εφόσον έχει καθοριστεί ένα κατώτατο στοχευμένο API, η εφαρμογή μας δεν μπορεί να εγκατασταθεί σε συσκευή που φοράει παλαιότερη έκδοση από αυτή που υποστηρίζει το API. Καλή πρακτική σχεδιασμού λοιπόν είναι να στοχεύσουμε ένα αρκετά χαμηλό API το οποίο όμως δεν θα μας αναγκάσει να κάνουνε συμβιβασμούς στις λειτουργίες της εφαρμογής, και στο τέλος να κάνουμε compile την τελική έκδοση με τη νεότερη έκδοση του SDK ώστε να εξασφαλίσουμε υποστήριξη και 47

στις νεότερες συσκευές. 4.4.8 Υποστήριξη πολλαπλών διαστάσεων οθόνης Η ταυτόχρονη υποστήριξη των πολλών εκδόσεων του Android είναι η πρώτη πρόκληση του προγραμματιστή του. Η δεύτερη μεγάλη πρόκληση είναι η ταυτόχρονη υποστήριξη των πολλαπλών διαστάσεων οθόνης που διαθέτουν οι εκατοντάδες συσκευές που κυκλοφορούν στην αγορά, και η διαφορετική πυκνότητα pixel που διαθέτει η κάθε μία από αυτές. Tο γραφικό περιβάλλον μιας εφαρμογής είναι ίσως σημαντικότερο και από τις δυνατότητες που παρέχει, καθότι ένα κακοσχεδιασμένο layout μπορεί να κάνει την εφαρμογή δύσχρηστη ή ακόμη και άχρηστη. Άρα είναι πολύ σημαντικό για τον προγραμματιστή να λάβει υπόψιν του την πληθώρα αναλύσεων και διαφορετικών διαστάσεων οθόνης που διαθέτουν οι συσκευές. Όσον αφορά το εύρος των συσκευών μπορεί να φτάσει από τις 2.4' (smart watches) έως τις 50 ' (τηλεοράσεις), και οι ανάλυση αυτών των συσκευών ξεκινάει από τα 240x320 pixels (QVGA) και φτάνει μέχρι τα 4096 x 2160 (4Κ HD) για τις τηλεοράσεις. Η πιο δημοφιλής όλων είναι η 1920x1080 (Full HD). Όπως φαίνεται υπάρχει μια πληθώρα αναλύσεων για να υποστηριχθεί η κάθε μία με περισσότερο η λιγότερο διαθέσιμο χώρο στην οθόνη. Το Android για πρακτικούς λόγους έχει χωρίσει τις διαφορετικές αναλύσεις οθονών σε τέσσερις κατηγορίες οθονών οι οποίες συσχετίζονται άμεσα με τέσσερις κατηγορίες πυκνότητες pixel ανά ίντσα. 48

Εικόνα 4.8 Ανάλυση τoυ pixel density Όπως φαίνεται στο παραπάνω σχεδιάγραμμα, το Android χωρίζει το μέγεθος τις οθόνης σε 4 επιμέρους κατηγορίες αναλόγως το μέγεθος της σε ίντσες, και οι αναλύσεις χωρίζονται επίσης σε 4 επιμέρους κατηγορίες DPI (Dots Per Inch). Αυτό γίνεται ώστε να διευκολύνει όσο το δυνατόν περισσότερο τους προγραμματιστές, να βελτιώσουν την εμφάνιση των εφαρμογών τους με όσο το δυνατόν λιγότερο κόπο. Όπως και στην περίπτωση των πολλών εκδόσεων του Android που έχουν πρόσβαση στο μάρκετ, η Google παρέχει στους developers την κατανομή μεγέθους οθόνης προς DPI για να βοηθήσει τους προγραμματιστές να σχεδιάσουν τις εφαρμογές τους αποδοτικότερα. ldpi mdpi tvdpi hdpi xhdpi xxhdpi Total Small 6.2% 6.2% Normal 10.6% 35.7% 19.2% 16.2% 81.7% Large 0.5% 4.3% 1.7% 0.6% 0.6% 7.7% 49

Xlarge 3.7% 0.3% 0.4% 4.4% Total 6.7% 18.6% 1.7% 36.6% 20.2% 16.2% Εικόνα 4.9 Συσκευές ανάλογα με το dpi τους Η πλατφόρμα του Android φυσικά εκτός από το να δημιουργεί πολύπλοκες καταστάσεις προς διαχείριση, δίνει επιλογές και δυνατότητες ώστε οι δημιουργοί εφαρμογών να αντεπεξέλθουν στο απαιτητικό έργο της ανάπτυξης εφαρμογής. Οι δυνατότητες συνοψίζονται ως εξής: Ο developer μπορεί να επιλέξει ποιες οθόνες θα υποστηρίζει η εφαρμογή του με τον ίδιο τρόπο που επιλέγει πια API θα υποστηρίζονται, δηλαδή μέσω του AndroidManifest.xml. Αυτό σημαίνει ότι η υποστήριξη διαφορετικών οθονών είναι καθαρά επιλογή του προγραμματιστή, ο οποίος αν κρίνει αναγκαίο μπορεί να αποκλείσει την λειτουργία της εφαρμογής στις οθόνες που δεν επιθυμεί να υποστηρίξει. Στην συνηθέστερη περίπτωση που ο προγραμματιστής θέλει να υποστηρίξει επιπλέον αναλύσεις και διαστάσεις οθόνης πέρα από τις συνηθισμένες, το SDK του δίνει τη δυνατότητα παρέχοντας του δύο εξαιρετικές δυνατότητες: o Η πρώτη είναι η δυνατότητα χρήσης διαφορετικών layout ανά διαφορετικό μέγεθος οθόνης. Αυτό σημαίνει ότι ο developer δεν χρειάζεται να συμβιβαστεί σε ένα layout xml ώστε να καλύψει όλες τις οθόνες. Μπορεί 50

να χρησιμοποιήσει όσα θέλει, για να καλυφθούν όσο το δυνατόν περισσότερα μεγέθη και αναλύσεις οθόνης. Δεν πρέπει να ξεχνάμε άλλωστε ότι οι μεγαλύτερες οθόνες παρέχουν και περισσότερο χώρο στον developer για να προβάλει επιπλέον υλικό, με διαφορετικό ίσως τρόπο από ότι θα το προέβαλε σε μια μικρότερη οθόνη. o Η δεύτερη δυνατότητα που παρέχει είναι αυτή της χρήσης πολλών γραφικών, διαφορετικών διαστάσεων, ώστε να εξυπηρετούνται σωστά όλες οι αναλύσεις οθόνης. Η υλοποίηση αυτής της δυνατότητας είναι εξαιρετικά απλή. Ο developer δημιουργεί φακέλους στο project του, με το όνομα της διάταξης που θέλει να παρέχει γραφικά η layout (πχ drawable large hdpi) ή χρησιμοποιεί τους υπάρχοντες φακέλους, και αποθηκεύει στον καθένα το ίδιο γραφικό (*.png, *jpg, ή *.gif) αλλά στην ανάλυση που επιθυμεί να προβληθεί αυτό στην εκάστοτε διαφορετική διάταξη μεγέθους οθόνης προς DPI. 4.4.9 Δοκιμή και Αποσφαλμάτωση (Debugging) της Εφαρμογής Πριν να εκδώσει την εφαρμογή του στο κοινό, ο προγραμματιστής του Android, αλλά και οποιασδήποτε άλλης πλατφόρμας, οφείλει να δοκιμάσει ενδελεχώς, κάθε λειτουργική και αισθητική παράμετρο της εφαρμογής ώστε να εξασφαλίσει ότι ο χρήστης της θα έχει όσο το δυνατόν καλύτερη εμπειρία χρήσης. Καλύτερη εμπειρία χρήσης φυσικά οδηγεί σε καλές εντυπώσεις, και περισσότερους χρήστες με την πάροδο του χρόνου. Μια κακή εμπειρία χρήσης, οδηγεί σε δυσαρεστημένους χρήστες και άρα αποτυχία. Ο αυτοσκοπός της ανάπτυξης εφαρμογών είναι η ικανοποίηση των αναγκών όσο το δυνατόν μεγαλύτερου αριθμού χρηστών. Αυτό φυσικά δεν 51

επιτυγχάνεται αμέσως. Πρέπει να ακολουθηθεί μια εκτενής περίοδος δοκιμών για να διαπιστωθεί ότι η εφαρμογή θα αποδίδει όπως οφείλει σε όλες τις καθημερινές της χρήσεις, και αφού περάσει επιτυχώς το στάδιο των δοκιμών, ακολουθεί η ώρα της δημοσίευσης. Η ανάγκη για εργαλεία ελέγχου, καλύπτεται στο έπακρο με μια σειρά εφαρμογών τα οποία δένοντας αρμονικά με το περιβάλλον ανάπτυξης μας (IDE) μας λύνουν τα χέρια, στο δύσκολο έργο του εντοπισμού σφαλμάτων. Τα εργαλεία αυτά αφορούν τον έλεγχο της εφαρμογής σε εικονικές μηχανές (Android Virtual Devices), καταγραφή σφαλμάτων (logcat), εργαλεία ελέγχου μνήμης και άλλων λειτουργιών της συσκευής (DDMS), και τα λοιπά. 4.4.10 Android Debug Bridge (ADB) Για να λειτουργήσουν σωστά τα εργαλεία που αναφέρθηκαν παραπάνω, χρειάζεται κάποιο είδος προγράμματος client-server που να συνδέει τον υπολογιστή με τις συσκευές μας, εικονικές και μη. Τον ρόλο αυτό αναλαμβάνει το Android Debug Bridge (ADB). Πρόκειται για ένα εργαλείο γραμμής εντολών που έρχεται μαζί με το Android SDK και το οποίο αποτελείτε από 3 μέρη: Έναν client ο οποίος τρέχει στον υπολογιστή που έχουμε στήσει το SDK. Η εκκίνηση του μπορεί να γίνει είτε χειροκίνητα είτε να χρησιμοποιήσουμε κάποιο εργαλείο το οποίο ξεκινάει αυτόματα δικό του client, όπως το DDMS ή το ADT Plugin. Έναν server ο οποίος τρέχει σαν υπηρεσία παρασκηνίου στον υπολογιστή που βρίσκεται το SDK, όπως και ο client. O server εξασφαλίζει την επικοινωνία μεταξύ του client και του εργαλείου daemon που τρέχει στη συσκευή. 52

Το Daemon που τρέχει σαν διεργασία παρασκηνίου στην εικονική η πραγματική συσκευή που χρησιμοποιείτε για εξομοίωση. 4.4.11 Εικονικές Συσκευές Android (Android Virtual Devices AVD) Όπως αναφέραμε και παραπάνω, πρέπει πριν να εκδοθεί μία εφαρμογή να δοκιμαστεί σε ένα αριθμό συσκευών για να εξασφαλιστεί η ομαλή λειτουργία της σε όλες τις συνθήκες. Φυσικά το κόστος των συσκευών είναι αρκετά μεγάλο για έναν προγραμματιστή να έχει στην κατοχή του 10-20 συσκευές για να ελέγξει σε όλες τις λειτουργίες και την εμφάνιση της εφαρμογής του. Το πρόβλημα αυτό έρχεται να λύσει η ύπαρξη των εικονικών συσκευών του Android. Πρόκειται για μια συσκευή εξομοίωσης η οποία μας επιτρέπει να εξομοιώσουμε την λειτουργία και συμπεριφορά μιας κανονικής συσκευής, ορίζοντας τις επιλογές υλικού και λογισμικού που θέλουμε στον εξομοιωτή του Android. Με αυτό τον τρόπο ο developer μπορεί να ελέγξει την εφαρμογή του σε μια σειρά από πραγματικά σενάρια λειτουργίας και να πάρει γρήγορα και άμεσα feedback για τη λειτουργία της εφαρμογής του. Μια εικονική συσκευή αποτελείτε από: Το προφίλ του υλικού: Σε αυτό προσδιορίζονται οι ιδιότητες και τα χαρακτηριστικά της εικονικής συσκευής. Μπορούμε παραδείγματος χάρη να ορίσουμε την ανάλυση της οθόνης και την πυκνότητα σε pixel (dpi), το μέγεθος της μνήμης RAM, αν η συσκευή θα έχει κάμερα, υποστήριξη GPS, και άλλα. Την έκδοση του Android: Επιλογή της έκδοσης της πλατφόρμας του Android που θέλουμε να εξομοιώσει η εικονική συσκευή. Μπορούμε επίσης να επιλέξουμε και μεταξύ ειδικών εκδόσεων της πλατφόρμας, 53

μεταξύ των οποίων τις Google TV, και άλλων. Έξτρα χώρος αποθήκευσης: Εδώ αποθηκεύονται όλα τα δεδομένα της εφαρμογής, και επίσης μπορούμε να ορίσουμε μια εικονική κάρτα μνήμης ώστε να επεκτείνουμε τον αποθηκευτικό χώρο, όπως θα κάναμε και σε μια πραγματική συσκευή. Εικόνα 4.10 Δημιουργία νέας εικονικής συσκευής 4.4.12 Δημιουργία διαφορετικών εικονικών συσκευών Η δημιουργία εικονικών συσκευών είναι μια ιδιαίτερα εύκολη και γρήγορη 54

διαδικασία. Η διαχείριση αυτών των συσκευών γίνεται από το γραφικό περιβάλλον της εφαρμογής AVD Manager, η οποία είναι ενσωματωμένη στο Android studio που χρησιμοποιούμαι για την ανάπτυξη της εφαρμογής. Παρακάτω εμφανίζεται η λίστα με τις εικονικές συσκευές που δοκιμάστηκε η εφαρμογή κατά τη διάρκεια της δοκιμαστικής της φάσης. Φυσικά το προφίλ υλικού δεν είναι ακριβώς αυτό που διαθέτουν οι συσκευές που κατονομάζονται στην λίστα, αλλά οι διαστάσεις οθόνης και η έκδοση API, είναι ακριβής. Εικόνα 4.11 Οι εικονικές συσκευές που δημιουργήσαμε Επίσης χρησιμοποιηθηκαν και οι παρακάτω φυσικές συσκευες Android: Nexus 5 LG G2 LG G3 Samsung Galaxy S4 4.4.13 Dalvik Debug Monitor Server (DDMS) Το Android συνοδεύεται μεταξύ των άλλων, από ένα εργαλείο αποσφαλμάτωσης το οποίο ονομάζεται Dalvik Debug Monitor Server (DDMS), 55