Άλλο ένα άρθρο σε περισσότερα απο ένα μέρη, αυτή τη φορά σχετικό με τον προγραμματισμό συσκευών όπως PDA και Smartphones που χρησιμοποιούν το λειτουργικό σύστημα MS Windows Mobile (WM).
Σε αυτό το πρώτο μέρος θα περιγράψω τι αντιμετώπισα στη προσπάθεια μου να προγραμματίσω ένα PDA ενώ στα επόμενα μέρη θα περιγράψω αναλυτικά τις ρυθμίσεις και τη λειτουργία ενός πάρα πολύ καλού Integrated Development Environment (IDE), το οποίο διατίθεται δωρεάν και μου επέτρεψε να δημιουργήσω τελικά εφαρμογές για το PDA.
Ο στόχος μου, μέσα απο αυτό το άρθρο είναι να δώσω στον αναγνώστη πληροφορίες που είναι διαθέσιμες στο internet αλλά βρίσκοντε εδώ σε ένα ενιαίο κείμενο με βοηθητικά σχόλια και εντυπώσεις απο την όλη διαδικασία.
Ελπίζω να αποτελέσει μια καλή αρχή για όσους ενδιαφέροντε να προγραμματίσουν τα PDA τους.
Το Hardware (απο εδώ ξεκίνησαν όλα)Πρίν απο περίπου 6 μήνες δέχτηκα ώς δώρο ένα PDA Dell Axim X51 με τον πολύ καλό Intel PXA270 XScale επεξεργαστή στα 624MHz. Η ανάλυση της οθόνης είναι 320x240 με 16bit βάθος χρώματος, έχει λειτουργικό WM 5.0 και πολλές δυνατότητες επέκτασης μέσω CompactFlash και της κάρτας μνήμης SD. Ουσιαστικά, η θύρα για τις μνήμες CompactFlash καταλήγει επάνω σε ένα mini-pcmcia bus μέσω του οποίου είναι δυνατόν να προσαρμοσθούν επάνω στο PDA και άλλες συσκευές όπως, GPS, κάμερα, Σκληροί δίσκοι, Barcode Scanners κλπ.
Όσο αφορά τη συνδεσιμότητα, το PDA μπορεί να συνδεθεί με άλλες συσκευές μέσω Bluetooth, Infrared (IrDA) και WiFi και υπάρχει και η δυνατότητα σύνδεσης του PDA με PC μέσω USB.
Σημείωση:Περίπου μια εβδομάδα αφού είχα λάβει το PDA, η Dell ανακοίνωσε οτι διακόπτει τη σειρά Dell Axim!!! (Οι φήμες λένε οτι ετοιμάζει μια πιο δυνατή PDA σειρά σε συνεργασία με την HTC[1]). Παρ' όλα αυτά, το PDA αυτό είναι αρκετά δυνατό και αν ενδιαφέρεστε για κάτι τέτοιο -ή το ελαφρά βελτοιωμένο X51V- σίγουρα μπορείτε να βρείτε μια καλή προσφορά στο e-bay. Μια πιο εκτενή παρουσίαση των συσκευών αυτών είχε γίνει απο το CNet[2].
Ενώ το Hardware είναι αρκετά δυνατό, κάποιες επιλογές που έχουν γίνει στο λειτουργικό προκαλούν εντύπωση!
Η συσκευή "τρέχει" WM στην έκδοση 5.0 και θα περίμενε κανείς με ένα τόσο δυνατό επεξεργαστή όπως ο PXA270 oti θα μπορούσε να υποστηρίξει όλα τα Services του Bluetooth (Για παράδειγμα, θα μπορούσε κανείς να στείλει ήχο απο το PDA στα Bluetooth ακουστικά ή να χρησιμοποιήσει το PDA ώς Human Interface Device (HID) για το χειρισμό ενός PC για παράδειγμα) .
Αντί αυτού, οι υπόλοιπες Bluetooth συσκευές βλέπουν απο το PDA μόνο μια απλή σειριακή θύρα over bluetooth. Αργότερα ανακάλυψα οτι υπάρχει ένα καλύτερο Bluetooth Stack (Widdcom) το οποίο έχει πολύ περισσότερα services αλλά και μερικά μικρά προβληματάκια [3].
Η συσκευή όπως και πολλές άλλες, δίνει τη δυνατότητα συγχρονισμού του Outlook (ημερολόγιο, reminders, emails, κλπ) με την αντίστοιχη PocketPC έκδοση του. Ενώ θα μπορούσε να κάνει το Synchronisation μέσω του standard Object Binary Exchange Protocol (OBEX)[4] που το υποστηρίζει έτσι κι αλλιώς επειδή έχει τη δυνατότητα IrDA, θα πρέπει να χρησιμοποιήσει κανείς αποκλείστικά το MS Active Sync (!). Το MS Active Sync, είναι μια πολύ απλή εφαρμογή απο τη Microsoft που δημιουργεί μια σύνδεση ανάμεσα στο PC και WM Based PDAs για τη διαχείρηση αρχείων.
Δυστυχώς, για να γίνει το Synchronisation, το ActiveSync πρέπει να τρέχει ΚΑΙ στο PC ΚΑΙ στο PDA. Δηλαδή ενώ υπάρχει η δυνατότητα να γίνει αυτή η μεταφορά με Standard εργαλεία, το ActiveSync δημιουργεί ένα ακόμα πρωτόκολο. Εν το μεταξύ η ενσωμάτοση του με τα Windows με τη δυνατότητα browsing των δίσκων όπως στον Windows Explorer έχει κάποια Bugs επειδή κάνει συνεχώς polling στο PDA για να "προλάβει" τις οποιεσδήποτε αλλαγές[5].
Ένα ακόμα "παράξενο" (που θα μας απασχολήσει και αργότερα, στον προγραμματισμό) είναι οτι δεν υπάρχει Console Device ενώ το console απο πλευράς Input / Output (I/O) είναι υλοποιημένο στα Windows CE. Αυτό σημαίνει οτι δεν μπορείτε να τρέξετε κατ' ευθείαν text mode εφαρμογές (όπως για παράδειγμα Telnet ή Putty).
Για να "δείτε" το Console Device θα πρέπει να κατεβάσετε και να εγκαταστήσετε την εφαρμογή PocketConsole η οποία θα σας δώσει τη δυνατότητα να τρέξετε οποιαδήποτε ανάλογη Text Mode εφαρμογή σε PocketPC[6]
Αναρωτιέμαι γατί έγιναν αυτές οι επιλογές.
Κατα τα άλλα η συσκευή είναι απροβλημάτιστη στη λειτουργία της και αν -καταφέρετε και- την ενσωματόσετε στη καθημερινή σας ζωή ίσως σας φανεί χρήσιμη. Το μόνο ίσως αρνητικό στη χρήση των PDA είναι η έλειψη ενός πλήρους qwerty πληκτρολογίου κάτι που οι πιο νέες αναδιπλώμενες συσκευές έχουν.
Μπορείτε βέβαια να χειριστείτε το PDA μέσω του "εικονικού" πληκτρολογίου ή γράφοντας κατ ευθείαν με το Stylus αλλά σίγουρα αυτός ο τρόπος αλληλεπίδρασης δεν είναι ο πιο βολικός για παρατεταμένη χρήση (Συγγραφή κειμένων, πολλές σημειώσεις, Login σε απομακρυσμένους server και δουλειά μέσω Putty κλπ). Απο την άλλη μεριά αν έχετε τα χρήματα μπορείτε να χρησιμοποιήσετε ένα αναδιπλώμενο Bluetooth πληκτρολόγιο[7].
Προσωπικά βρήκα πολύ χρήσιμα τα reminders και τα ραντεβού τις χειρόγραφες σημειώσεις (τις μετατρέπει αυτόματα σε κείμενο με ενσωματομένο OCR), τις φωνητικές σημειώσεις (απλά με το πάτημα ενός πλήκτρου ηχογραφείτε ένα μήνυμα σε CD quality) και τη δυνατότητα να λαμβάνω email -μέσω web αλλά και μέσω Outlook- συνδεόμενος σε hotspots. Βέβαια μέσω του WiFi είναι επίσης δυνατόν να κάνετε κλήσεις τηλεφωνίας με κάποιο πρόγραμα όπως για παράδειγμα το Skype Mobile[8]...πραγματικά πολύ βολικό.
Παρ' όλες του τις δυνατότητες και εφαρμογές όμως...ήθελα να το προγραμματίσω. Ιδιαίτερα αφου είχα και ένα Bluetooth GPS ήθελα, έτσι απο ενδιαφέρον, να δημιουργήσω μια εφαρμογή για το PDA.
Η αρχική μου σκέψη ήταν μια απλή εφαρμογή GPS Navigation στην οποία θα μπορούσα να φορτώσω οποιοδήποτε χάρτη σαν εικόνα (είτε απο scanner, είτε απο το internet) και να τοποθετήσω μια τελεία στην τρέχουσα τοποθεσία μου. Η μετατροπή των συντεταγμένων απο το πλαίσιο αναφοράς του GPS στο πλαίσιο αναφοράς της εικόνας γίνεται με ένα απλό γραμμικό μετασχηματισμό, οπότε αυτό θα ήταν το ελάχιστο πρόβλημα μου...
Ένα ένα τα βήματα όμως...πρώτα έπρεπε να γράψω και να μεταφέρω το πρόγραμα στο PDA.
Ο προγραμματισμός του PDAMicrosoft Visual StudioΤο πρώτο πράγμα που σκέφτηκα ήταν να κοιτάξω την υποστήριξη του Microsoft Visual Studio για PocketPC συσκευές. Το Visual Studio είναι πραγματικά ένα ανεκτίμητο εργαλείο (δεν είναι βέβαια το μόνο) και ήμουν σίγουρος οτι η Microsoft θα είχε δημιουργήσει κάποιο MSVS Add-On το οποίο θα έκανε τα πάντα με το πάτημα ενός κουμπιού.
Μερικά downloads αργότερα και ενώ το είχα πάρει απόφαση οτι δεν γλύτωνα και την εγκατάσταση του .NET Framework για PocketPC στο PDA, είμαι έτοιμος για τη πρώτη προσπάθεια. Το add-on δημιουργεί ένα νέο Application Template με την ονομασία Smart Device Application και όλες τις ρυθμίσεις έτοιμες. Παρ' όλα αυτά, ότι και να έκανα, αμέσως μετά το πρώτο Dialog Box όπου καθορίζεται το όνομα του Project και η τοποθεσία του, έπαιρνα συνεχώς το ίδιο σφάλμα, σχετικά με κάποιο Component μέσα στη "σελίδα".
(Θυμηθείτε οτι τα Dialog Boxes των wizards του Visual Studio χρησιμοποιούν το CHtmlView)
Έτσι έληξε πρίν καν αρχήσει, η εμπειρία μου με το MSVS. Έτσι κι αλλιώς ήδη είχα αρχήσει να αλλάζω γνώμη όταν διάβασα οτι θα έπρεπε να εγκαταστήσω στο PDA το .NET Framework. Απο την άλλη μεριά το Visual Studio έχει και μεγάλο κόστος κάτι που ίσως αποθαρρύνει τους ενδιαφερόμενους ιδιώτες προγραμματιστές να το επιλέξουν για να δημιουργήσουν τις δικές τους εφαρμογές για PDA.
JavaΗ επόμενη σκέψη μου ήταν να χρησιμοποιήσω τη Java. Παρ' όλο που δεν έχω μεγάλη εμπειρία σε αυτή τη γλώσσα (Πέρα απο το βασικό προγραμματισμό), ήμουν διατεθειμένος, να καταβάλω κάθε προσπάθεια για να δώ την εφαρμογή να τρέχει στο PDA. Στο κάτω κάτω, θα μάθαινα και κάτι απο την όλη διαδικασία.
Επειδή τα PDA και οι υπόλοιπες Smart Devices είναι τοσο διαδεδομένες θα περίμενε κανείς οτι θα ήταν πολύ εύκολο να βρεθεί ένα Virtual Machine (που είναι υπεύθηνο για την εκτέλεση τον προγραμμάτων) για το Axim.
Δυστυχώς, μόνο εύκολο δεν ήταν. Αρχικά έψαξα στο αφιερωμένο στη Java, website της Sun αλλά δε βρήκα κάποιο Java Runtime Environment (JRE) για PocketPC. Πολύ χρήσιμη στην αναζήτηση μου ήταν μια λίστα των διαθέσιμων Java Virtual Machines και των μηχανημάτων που τρέχουν, απο τον Dan Fiton του Πανεπιστημίου του Lancaster[10]
Σε αυτή τη λίστα θα βρείτε υλοποιήσεις απο προγραμματιστές ή ομάδες προγραμματιστών, διαφόρων VMs οι οποίες όμως δεν παρέχουν πλήρη υλοποίηση του Java standard ή των διαφόρων πακέτων της.
Μετά απο αρκετό ψάξιμο διαπίστωσα οτι η μόνη εταιρία που διαθέτει ένα αξιόπιστο και πλήρως υλοποιημένο Java Standard για PocketPC στα WM 5.0 είναι η IBM με την έκδοση J9[11].
Το runtime environment αυτό μπορείτε να το κατεβάσετε και να το χρησιμοποιήσετε δωρεάν μόνο για ιδιωτική χρήση και μια πιο εκτενή παρουσίαση του μπορείτε να βρείτε στο πολύ καλό Aximsite[12]
Παρ' όλα αυτά η εγκατάσταση του J9 είναι απλά το πρώτο βήμα που θα σας επιτρέψει να δημιουργήσετε απλές εφαρμογές σε Java και να τις εκτελέσετε στο PDA. Για να προχωρήσετε σε γραφικό περιβάλλον θα πρέπει είτε να εγκαταστήσετε το Standard Widget Toolkit ή να χρησιμοποιήσετε το Abstract Windowing Toolkit[13].
Σε αυτό το σημείο τα πράγματα ήταν ήδη αρκετά πολύπλοκα. Όλο αυτό το διάβασμα και η "μάχη" με τη Java, με έκαναν να νοιώθω οτι έπρεπε να καταβάλω μια πολύ μεγάλη προσπάθεια για να στήσω το Development Environment μου για μια σχετικά απλή εφαρμογή η οποία τελικά ίσως και να μην έτρεχε όσο γρήγορα θα έτρεχε ένα native εκτελέσιμο.
Έτσι λοιπόν αποφάσισα να συνεχίσω την αναζήτηση και να επιστρέψω στη Java αν δεν έβρισκα κάτι καλύτερο.
Adobe FlashΗ επόμενη σκέψη μου ήταν να δοκιμάσω το Flash το οποίο μου είχε κάνει εντύπωση απο τις αρχικές εκδόσεις, επειδή είχε σχετικά απλή δομή και πολλές συναρτήσεις για γραφικά (όπως scaling, rotation, skew, κλπ) ήδη έτοιμες. Το έναυσμα για να αφιερώσω κάποιο χρόνο στο Flash μου το έδωσε το γεγονός οτι υπήρχε ήδη ένας Flash Player (στην έκδοση 7, ενώ το Flash είναι τώρα στην έκδοση 9, αλλά αυτό ήταν το ελάχιστο πρόβλημα) για PocketPC.
Παρ' όλα αυτά, σύντομα ανακάλυψα οτι οι εφαρμογές Flash δεν έχουν καμία πρόσβαση στο περιβάλλον όπου τρέχει ο Flash Player παρα μόνο μέσω ελάχιστων συναρτήσεων για επικοινωνία μέσω δικτύου με Servers.
Αυτό σήμαινε οτι ήταν αδύνατον να έχω πρόσβαση στην εικονική σειριακή θύρα του GPS ή, για τον ίδιο λόγο, πρόσβαση σε οποιοδήποτε αρχείο του συστήματος.
Μετά απο λίγο ψάξιμο στο πραγματικά πολύ καλό site της Adobe, ανακάλυψα οτι κάποιος προγραμματιστής είχε χρησιμοποιήσει το Flash σαν Interface σε μια εφαρμογή που χρησιμοποιούσε GPS για να προσδιορίζει τη τοποθεσία του χρήστη και να του παρέχει την ανάλογη ξενάγηση στο χώρο.
Δυστυχώς όμως, η σχεδίαση της εφαρμογής δεν ακολουθούσε τον πιο σύντομο δρόμο. Η εφαρμογή αυτή ήταν μια Client - Server εφαρμογή, όπου και τα δύο μέρη θα έπρεπε να τρέχουν στο PDA. Ο Server ήταν ένα πρόγραμμα σε C++ το οποίο παρακολουθούσε τη σειριακή θύρα και δημιουργούσε και ένα Listening Socket σε κάποιο port. Αυτός ο Server έκανε επίσης και την αποκωδικοποίηση του GPS Data Stream και παρείχε στο Flash τις τιμές, σαν ένα XML Stream. Ο Client ήταν φτιαγμένος σε Flash και αναλάμβανε μόνο τη σύνδεση στο Server και την αναπαραγωγή των διαφόρων video ή ήχων σε διάφορα checkpoints [14]
Η σχεδίαση αυτή δε μου φάνηκε καθόλου ελκυστική, μια και θα χρειαζόμουν κάποιο C++ Compiler για WM5.0 τον οποίο έτσι κι αλλιώς δεν έιχα.
Παρ' όλα αυτά, θα συνιστούσα να εγκαταστήσετε τον Flash Player στο PocketPC σας έτσι κι αλλιώς και αυτό γιατί θα σας επιτρέψει αφ ενός να τρέξετε τις δικές σας Flash εφαρμογές στο PDA και αφ ετέρου να τρέξετε διάφορες Flash εφαρμογές απο το Internet.
Άλλα Virtual Machines και τρόποι προγραμματισμού για PocketPCΕδώ ανήκουν διάφορα Virtual Machines με αντίστοιχες γλώσσες προγραμματισμού ή Interpeters που βρήκα καθώς αναζητούσα τρόπους να προγραμματίσω το PDA. Δεν θα ξεκίναγα το project με βάση κάποιο απο αυτά αλλά θεώρησα καλό να τα συμπεριλάβω εδώ.
Εδώ θα ήθελα να πώ οτι το Aximsite και οι χρήστες του με βοήθησαν πάρα πόλυ στην αναζήτηση όλων αυτών των πληροφοριών απαντώντας σε ερωτήματα και δίνοντας τις απόψεις τους. Σε μια απο αυτές τις απαντήσεις βρήκα και τη παρακάτω λίστα με εναλλακτικά προγραμματιστικά εργαλεία [15]
Linux και GCCΣε αυτό το σημείο έχω εξαντλήσει όλα τα περιθώρια να προγραμματίσω το PDA με σχετικά εύκολο τρόπο -εξακολουθώντας να έχω τις επιφυλάξεις μου για τη Java- και έχω αρχίσει να κοιτάω πιο παρακινδυνευμένες λύσεις.
Παρακινδυνευμένες όχι για κανένα άλλο λόγο αλλά γιατί θα έπρεπε να flashάρω το PDA με ένα νέο ROM Image το οποίο θα περιείχε το Linux, αντί των Windows WM 5.0 και αν κάτι πήγαινε στραβά θα κατέληγα με ένα πολύ όμορφο και άχρηστο PDA.
Πιστεύω όμως οτι θα άξιζε το ρίσκο επειδή στο Linux τα πράγματα όσο αφορά το προγραμματισμό είναι πολύ πίο άμεσα.
Δυστυχώς, ούτε σε αυτή τη περίπτωση στάθηκα τυχερός καθώς ναί μέν, υπάρχει μια διανομή Linux που τρέχει στο Axim X51 (γενικά σε ARM based συσκευές) και μπορεί να κάνει Boot μέσα απο τα WM 5.0 (άρα δεν είναι ανάγκη να Flashάρω το PDA) αλλά δεν υποστηρίζει πλήρως όλο το Hardware και συγκεκριμένα τα Bluetooth και WiFi Chipset, τα πλήκτρα και τα Led της πρόσοψης, το backlight και άλλα.
Η πρόοδος είναι αργή και μπορείτε να ρίξετε μια ματιά στο website www.handhelds.org για την πρόοδο της διανομής Linux Familiar τόσο στο Axim όσο και σε άλλες PDA συσκευές[16,17,18]. Απο ένα μικρό διάλογο που είχα στο IRC με κάποιους προγραμματιστές απο την ομάδα αυτή, είναι πιθανό να δούμε μια σχετικά απροβλημάτιστη έκδοση Linux να τρέχει στα PDA μέσα στα επόμενα 1-1.5 χρόνια.
Απο εκείνη τη στιγμή, παράτησα κάθε προσπάθεια να προγραμματίσω το PDA και για περίπου 2-3 μήνες απλά χρησιμοποιούσα τις υπάρχουσες εφαρμογές.
Βλέποντας το Φώς!
Ώσπου, κάποια στιγμή στις αρχές Σεπτεμβρίου (2007) διαβάζω μια ανακοίνωση για τη τελευταία έκδοση ενός Compiler και του αντίστοιχου IDE του που έθεσε το πιο θεαματικό τέρμα στην αναζήτηση μου!
Περισσότερα όμως για αυτό καθώς επίσης και το πρακτικό μέρος του προγραμματισμού στο επόμενο άρθρο, λίαν συντόμως (ελπίζω ;-) )
Περισσότερες πληροφορίες για θέματα που αναφέροντε μέσα στο άρθρο, απο τις παρακάτω τοποθεσίες:[1] Dell halts PDA development[2] Εκτενής παρουσίαση των Dell Axim X51[3] Widdcom Bluetooth Stack για τα Dell Axim σειράς X51[4] Object Binary EXchange (OBEX)[5] Activesync Προβλήματα[6] PocketConsole για WM PDA[7] Bluetooth Foldable Keyboard[8] Skype Mobile[9] Ο δικτυακός τόπος της Sun για τη Java[10] Java VMs στα PocketPCs[11] ΙΒΜ Java VM και Class Library (J9)[12] Εγκατάσταση και χρήση της IBM J9[13] Java SWT Στο PocketPC[14] Invisible Ideas (Πρόσβαση στο GPS μέσω Flash)[15] Διάφορες γλώσσες προγραμματισμού και περιβάλοντα για PocketPC[16] Linux On Dell Axim[17] Screenshot απο Linux στο Axim X3 με τη σχετική πρόοδο[18] Η πρόοδος της μεταφοράς του Linux στο Dell Axim X5*