Your SlideShare is downloading. ×
0
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Handy-Programmierung mit Python
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Handy-Programmierung mit Python

10,497

Published on

TechTalk von Andreas Schreiber (DLR Köln-Porz, 15.07.2008) über Python-Programmierung auf Symbian S60 mit PyS60.

TechTalk von Andreas Schreiber (DLR Köln-Porz, 15.07.2008) über Python-Programmierung auf Symbian S60 mit PyS60.

Published in: Technology
2 Comments
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
10,497
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
2
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Handy-Programmierung mit Python Symbian S60 Andreas Schreiber < [email_address] > Tech Talk, DLR Köln-Porz, 15.07.2008
  • 2. Smartphones <ul><li>Kombination aus </li></ul><ul><li>Mobiltelefon („Handy“) </li></ul><ul><li>Personal Digital Assistant (PDA) </li></ul><ul><li>Viele Funktionen und Protokolle </li></ul><ul><li>Telefonie, PIM, Web-Browser, SMS, MMS, E-Mail, VoIP, Multimedia, Radio, Digitalkamera, GPS, DVB-H, … </li></ul><ul><li>GSM, UMTS, GRPS, HSCSD, WLAN, Bluetooth, IR, USB, … </li></ul><ul><li>Betriebssystem </li></ul><ul><li>Smartphones haben vollständige, erweiterbare Betriebssysteme </li></ul><ul><li>Handys haben vordefinierte Oberfläche; nur begrenzt erweiterbar (z.B. durch Java) </li></ul>
  • 3. Betriebssysteme für Smartphones <ul><li>Liste: http://de.wikipedia.org/wiki/Smartphone#Betriebssysteme </li></ul><ul><li>Linux </li></ul><ul><ul><li>Android </li></ul></ul><ul><ul><li>Openmoko </li></ul></ul><ul><li>Mac OS X (Apple iPhone) </li></ul><ul><li>Palm OS </li></ul><ul><li>RIM BlackBerry </li></ul><ul><li>Symbian OS </li></ul><ul><ul><li>UIQ (Sony Ericsson) </li></ul></ul><ul><ul><li>Series 80 (Nokia Communicator) </li></ul></ul><ul><ul><li>Series 60 (Nokia N-series & E-series, Siemens, Samsung, Motorola, Panasonic) </li></ul></ul><ul><li>Windows </li></ul>
  • 4. Symbian OS und S60 <ul><li>Symbian OS </li></ul><ul><li>Betriebssystem für Smartphones und PDAs </li></ul><ul><li>Microkernel, 32bit, Single User </li></ul><ul><li>GUI-zentriertes Applikations-Framework </li></ul><ul><li>S60 </li></ul><ul><li>Benutzeroberfläche für Smartphones </li></ul><ul><li>Aktuell: S60 3rd Edition </li></ul><ul><li>Entwicklungsumgebungen </li></ul><ul><li>C++, Java, Web Widgets </li></ul><ul><li>(Flash Lite), (Python) </li></ul>Quelle: S60 Platform: Introductory Guide. Nokia Corporation, 2007. http://www.s60.com/business/developers/documents A schematic diagram of the S60 platform architecture.
  • 5. Symbian Foundation Schaffung einer einheitlichen Software-Plattform <ul><li>News (24.06.2008): </li></ul><ul><li>Nokia übernimmt alle Anteile an Symbian Ltd. </li></ul><ul><li>Gründung einer Symbian Foundation </li></ul><ul><li>http://www.symbianfoundation.org </li></ul><ul><li>Nokia: Übergabe von Symbian und S60 </li></ul><ul><li>Sony Ericsson / Motorola: Übergabe von UIQ </li></ul><ul><li>Gesamtes Betriebssystem wird innerhalb von zwei Jahren komplett Open-Source (Eclipse-Lizenz) </li></ul>Quellen: Nokia Press Release (June 24, 2008), http://www.nokia.com/A4136001?newsid=1230415 Nokia kauft Symbian (heise news, 24.06.2008), http://www.heise.de/newsticker/meldung/109873
  • 6. S60 Platform Services Fundamental services <ul><li>Application Framework Services — providing the basic capabilities for launching applications and servers, state-persistence management, and UI components. </li></ul><ul><li>UI Framework Services — providing the concrete look and feel for UI components and handling UI events. </li></ul><ul><li>Graphics Services — providing capabilities for the creation of graphics and their drawing to the screen. </li></ul><ul><li>Location Services — allowing the S60 platform to be aware of a device’s location. </li></ul><ul><li>Web-Based Services — providing services to establish connections and interact with Web-based functionality, including browsing, file download, and messaging. </li></ul><ul><li>Multimedia Services — providing the capabilities to play audio and video, as well as support for streaming and speech recognition. </li></ul><ul><li>Communication Services — providing support for local and wide area communications, ranging from Bluetooth technology to voice calls. </li></ul>
  • 7. S60 Application Services Certain basic functionality for S60 applications <ul><li>PIM Application Services — providing the fundamental features of PIM applications, including contacts, calendar, and task management, as well as associated functions such as notepad and clock capabilities. </li></ul><ul><li>Messaging Application Services — providing support for various messaging types, such as short message service (SMS), multimedia messaging service (MMS), e-mail, BIO messages (smart messaging), and instant messaging (IM). </li></ul><ul><li>Browser Application Services — providing the capabilities to view Web content, including support for Flash Lite, video rendering, Scalable Vector Graphics–Tiny (SVG-T) rendering, and audio rendering. </li></ul>
  • 8. Python for S60 (PyS60) <ul><li>Portierung von Python auf S60-Plattform </li></ul><ul><li>Entwicklung von NOKIA </li></ul><ul><li>Open-Source-Lizenz (Apache Version 2 und Python) </li></ul><ul><li>Verfügbar bei Sourceforge http://sourceforge.net/projects/pys60 </li></ul><ul><li>Aktuelle Version: 1.4.4 (28.06.2008) </li></ul>
  • 9. “ Hello World” import appuifw appuifw.app.title = u „Hello World&quot; appuifw.note(u &quot;Hello World!&quot; , 'info' )
  • 10. Start des Python-Interpreters
  • 11. Ausführen von Python-Code (1) Skripte (“Run script”)
  • 12. Ausführen von Python-Code (2) Interaktive Konsole
  • 13. Ausführen von Python-Code (3) Bluetooth-Konsole
  • 14.  
  • 15. Python API Typen und Bibliotheken von PyS60 <ul><li>Alle Built-In-Typen von Python 2.2.2 sind vorhanden </li></ul><ul><li>Python Standard Library </li></ul><ul><ul><li>Viele der Standard-Module laufen </li></ul></ul><ul><ul><li>Keine Installation, um Speicherplatz im Handy zu sparen </li></ul></ul><ul><li>Python-Extensions für S60: Native C++-Erweiterungen </li></ul><ul><ul><li>Built-in Extensions: </li></ul></ul><ul><ul><li>e32 : API für die Services der Symbian OS Platform </li></ul></ul><ul><ul><li>appuifw : API für das UI Application Framework </li></ul></ul><ul><ul><li>Dynamisch nachladbare Extensions: </li></ul></ul><ul><ul><li>sysinfo, graphics, camera, keycapture, topwindow, gles, glcanvas, sensor, audio, telephone, messaging, inbox, location, positioning, calendar, contacts, e32db, logs </li></ul></ul><ul><ul><li>Entwicklung eigener Extensions per Python/C API möglich </li></ul></ul>
  • 16. Python S60-Module (1) Betriebssystem-Zugriff und -Information <ul><li>e32 </li></ul><ul><li>Zugriff auf Betriebssystem-Funktion von Symbian, die nicht durch GUI-Module oder die Python Standard Library abgedeckt sind, z.B. Scheduler, Process-Management, Drive-Liste, (Py-)S60-Versionen </li></ul><ul><li>sysinfo </li></ul><ul><li>Systeminformationen, z.B. aktiviertes Profil, Batteriestatus, Displaygröße, gesamter und freier Speicherplatz, OS Version, Signalstärke </li></ul>
  • 17. Python S60-Module (2) Benutzerschnittstelle und Grafik (I) <ul><li>appuifw </li></ul><ul><li>API für das S60 GUI Application Framework </li></ul><ul><li>graphics </li></ul><ul><li>Grafik- und Bildfunktionen, z.B. Laden, Speichern, Rotieren & Skalieren von Bildern, Erstellen von Grafiken mit Grafikprimitiven und Screenshots </li></ul><ul><li>camera </li></ul><ul><li>Aufnahme von Fotos und Video, Einstellen der Kamera-Parameter </li></ul><ul><li>keycapture </li></ul><ul><li>Abfangen von Tastatur-Events </li></ul><ul><li>topwindow </li></ul><ul><li>Einblenden von Fenstern über Applikationen, dargestellt wird ein graphics.Image </li></ul>
  • 18. Python S60-Module (3) Benutzerschnittstelle und Grafik (II) <ul><li>gles </li></ul><ul><li>Python API für OpenGL ES 2D/3D Grafik. Siehe OpenGL ES Standard bei Khronos ( http://www.khronos.org/opengles / ) </li></ul><ul><li>glcanvas </li></ul><ul><li>UI Steuerung für OpenGL ES Grafik </li></ul><ul><li>sensor </li></ul><ul><li>Zugriff auf physikalische Sensoren (Bewegung/Acceleration, Antippen/Tapping, Rotation) </li></ul>
  • 19. Python S60-Module (4) Audio und Kommunikation <ul><li>audio </li></ul><ul><li>Audio-Funktionen, z.B. Aufnahme, Abspielen von Audio-Dateien, Lautstärkeregelung, Sprachausgabe ( text-to-speech ) </li></ul><ul><li>telephone </li></ul><ul><li>Telefonie-Funktionen: Wählen, Auflegen und Rückruf </li></ul><ul><li>messaging </li></ul><ul><li>Senden von SMS und MMS </li></ul><ul><li>inbox </li></ul><ul><li>Zugriff auf Message-Folder (Inbox, Outbox, Sent und Draft) </li></ul><ul><li>location </li></ul><ul><li>Abfrage der GSM-Funkzellen-Informationen </li></ul><ul><li>positioning </li></ul><ul><li>Zugriff auf GPS-Empfänger </li></ul>
  • 20. Python S60-Module (5) Datenmanagement <ul><li>contacts </li></ul><ul><li>Zugriff auf Adressbuch ( ContactDb ), z.B. Suchen nach Kontakten, Anzeigen von Gruppen, Ändern von Kontaktinformationen, Import/Export von vCards </li></ul><ul><li>calendar </li></ul><ul><li>Zugriff auf die Kalender-Datenbank ( CalendarDb ), z.B. Hinzufügen und Ändern von Terminen, Ereignissen, Geburtstagen und Aufgaben, Behandlung wiederholender Einträge, Import/Export des vCalendar-Formats </li></ul><ul><li>e32db </li></ul><ul><li>Schnittstelle zur nativen Symbian Datenbank, z.B. Anlegen von Datenbanken und SQL-Abfragen </li></ul><ul><li>logs </li></ul><ul><li>Zugriff auf Telefon-Protokolle, z.B. Anrufe, SMS, Daten, Faxe, Mails </li></ul>
  • 21. Struktur von Applikationen (1) Visuelles Layout <ul><li>Typisches visuelles Layout von S60-Applikationen </li></ul>Title Navigation Tabs Body Menu Exit Dialog
  • 22. Struktur von Applikationen (2) Source-Code-Template <ul><li>Import von Modulen </li></ul><ul><li>Screen Size setzen </li></ul><ul><li>Applications Menu </li></ul><ul><li>Exit key handler setzen (Callback function) </li></ul><ul><li>Application title setzen </li></ul><ul><li>Application body </li></ul><ul><li>Active Objects </li></ul><ul><li>Main Loop </li></ul>import appuifw import e32 appuifw.app.screen = 'normal' def item1(): print &quot; item1 was selected.” appuifw.app.menu = [(u&quot;item 1&quot;, item1)] def quit(): appuifw.app.set_exit() app.exit_key_handler=quit appuifw.app.title = u 'Simple Application' app_lock = e32.Ao_lock() # starts scheduler -> event processing app_lock.wait() Ausführliches Template unter: http://www.mobilenin.com/pys60/resources/app_skeleton_with_mainloop.py
  • 23. Graphical User Interface ( appuifw ) Basiselemente <ul><li>Dialoge </li></ul><ul><ul><li>note : popup note </li></ul></ul><ul><ul><li>query : Texteingabe mit einem Feld </li></ul></ul><ul><ul><li>multi_query : Texteingabe mit zwei Feldern </li></ul></ul><ul><li>Menus </li></ul><ul><ul><li>popup_menu : Einfaches Menu </li></ul></ul><ul><li>Auswahllisten </li></ul><ul><ul><li>selection_list : Einfache Listenauswahl (vgl. „Radio buttons“) </li></ul></ul><ul><ul><li>multi_selection_list : Mehrfachauswahl (vgl. „Check boxes“) </li></ul></ul>
  • 24. Graphical User Interface ( appuifw ) Screen Size <ul><li>Drei Formate für Applikationen </li></ul><ul><li>Rotation der Anzeige ist möglich (portrait, landscape) </li></ul>normal large full
  • 25. Beispiele
  • 26. Beispiel „Versenden einer SMS“ (1) Source Code import appuifw import messaging data = appuifw.query(u &quot;what are you doing?&quot; , &quot;text&quot; ) receiver = &quot;+49172940****&quot; if appuifw.query(u &quot;Send message?&quot; , &quot;query&quot; ) == True : messaging.sms_send(receiver, data) appuifw.note(u &quot;Message sent.&quot; , &quot;info&quot; ) else : appuifw.note( u&quot;Messages not sent!&quot; , &quot;info&quot; ) s60test.send_sms.py
  • 27. Beispiel „Versenden einer SMS“ (2) Ausführung
  • 28. Beispiel „Versenden einer SMS“ (3) Erfolgskontrolle beim Empfänger
  • 29. Beispiel „SMS-Empfang und Sound“ (1) Funktionen <ul><li>Empfang von Befehlen per SMS ( „record“ , „stop“ , „play“ , „clear“ ) </li></ul><ul><li>Aufzeichnen und Abspielen von Audio </li></ul>
  • 30. Beispiel „SMS-Empfang und Sound“ (2) Source Code: Sound-Operationen class SoundRecorder: filename = 'e:oo.wav' # Drive E: is SD card mySound = None def record(self): self.mySound = audio.Sound.open(self.filename) self.mySound.record() def play(self): try : self.mySound = audio.Sound.open(self.filename) self.mySound.play() except : appuifw.note(u &quot;No sound recorded!&quot; , &quot;error&quot; ) def stop(self): if self.mySound: self.mySound.stop() self.mySound.close() def clear(self): self.stop() os.remove(self.filename)
  • 31. Beispiel „SMS-Empfang und Sound“ (3) Source Code: SMS-Empfang recorder = SoundRecorder() def message_received(msg_id): box = inbox.Inbox() sms_text = box.content(msg_id) appuifw.note(u &quot;sms content: &quot; + sms_text , &quot;info&quot; ) if sms_text == &quot;play&quot; : recorder.play() elif sms_text == &quot;record&quot; : recorder.record() elif sms_text == &quot;stop&quot; : recorder.stop() elif sms_text == &quot;clear&quot; : recorder.clear() app_lock.signal() box = inbox.Inbox() box.bind(message_received)
  • 32. Beispiel „Kamera und File-Upload“ (1) Aufnahme von Bildern import time import appuifw import camera filename = time.strftime( &quot;n95-%Y%m%d%H%M%S.jpg&quot; , time.gmtime()) image = camera.take_photo() image.save(filename) appuifw.note(u &quot;Photo saved to %s&quot; % filename, 'info' ) if imageToURL(filename) == 200: appuifw.note(u &quot;Photo uploaded successfully.&quot; , 'info' ) else : appuifw.note(u &quot;Photo upload failed!&quot; , 'error' )
  • 33. Kamera-Einstellungen Optionen von camera.take_photo() def take_photo( mode= 'RGB16' , size=(640, 480), zoom=0, flash= 'none' , exposure= 'auto' , white_balance= 'auto' ):
  • 34. Beispiel „Kamera und File-Upload“ (2) Hochladen auf Server mit httplib import httplib, urllib, base64, os.path def imageToURL(aPath): data = open(aPath, 'rb' ).read() # read binary data of picture encodedData = base64.encodestring(data) # encoded it to base64 headers = { &quot;Content-type&quot; : &quot;application/x-www-form-urlencoded&quot; , &quot;Accept&quot; : &quot;text/plain&quot; ,} params = urllib.urlencode({u 'fileName' : os.path.split(aPath)[1], u 'data' :encodedData}) conn = httplib.HTTPConnection( &quot;www.onyame.de&quot; ) conn.request( &quot;POST&quot; , &quot;/image_uploader.php&quot; , params, headers) response = conn.getresponse() conn.close() return response.status Quelle: http://wiki.forum.nokia.com/index.php/How_to_upload_a_file_to_server_with_application/x-www-form-urlencoded
  • 35. Beispiel „Kamera und File-Upload“ (3) Hochladen auf Server
  • 36. Beispiel „Kamera und File-Upload“ (4) Erfolgskontrolle <ul><li>http://www.onyame.de/upload/fb.php </li></ul>
  • 37. Beispiel „Mandelbrot-Menge“ (1) Rahmenprogramm import e32 from appuifw import * app.screen = 'full' app.body = canvas = Canvas() width, height = canvas.size xaxis = width/2 yaxis = height/1.5 scale = 60 iterations = 25 # <<iteration>> lock = e32.Ao_lock() app.exit_key_handler = lock.signal lock.wait()
  • 38. Beispiel „Mandelbrot-Menge“ (2) Iterationsschleife for y in range(height): for x in range(width): magnitude = 0 z = 0+0j c = complex(float(y-yaxis)/scale, float(x-xaxis)/scale) for i in range(iterations): z = z**2+c if abs(z) > 2: v = 765*i/iterations if v > 510: color = (255, 255, v%255) elif v > 255: color = (255, v%255, 0) else : color = (v%255, 0, 0) break else : color = (0, 0, 0) canvas.point((x, y), color) e32.ao_yield()
  • 39. Beispiel „Kontakte-Datenbank“ import contacts db = contacts.open() print u &quot;Searching contacts…&quot; found = db.find( 'guy' ) # search in name, email, etc. for guy in found: firstname = guy.find( 'first_name' )[0].value company = guy.find( 'company_name' )[0].value email_address = guy.find( 'email_address' )[0].value print u &quot;%s %s %s&quot; % (firstname, company, email_address)
  • 40. Beispiel „Kalender“ <ul><li>Kalender-Abfrage „Python-Events“ </li></ul><ul><li>Umstellung des Profils bei Terminen </li></ul>
  • 41. Beispiel „Bewegungssensor“ (1) Abfrage der Beschleunigungssensoren import sensor sensors = sensor.sensors() # Does this device have Accelerator Sensor if sensors.has_key( 'AccSensor' ): SENSOR_ACC = True sensor_data = sensors[ 'AccSensor' ] sensor_acc = sensor.Sensor(sensor_data[ 'id' ], sensor_data[ 'category' ]) sensor_acc.connect(handle_sensor_raw) def handle_sensor_raw(a_data): if a_data.has_key( 'data_1' ): acc_data_1 = a_data[ 'data_1' ] acc_data_2 = a_data[ 'data_2' ] acc_data_3 = a_data[ 'data_3' ]
  • 42. Beispiel „Bewegungssensor“ (2) Graphische Aufbereitung: „Sensor Analyzer“ <ul><li>http://jouni.miettunen.googlepages.com/sensoranalyzer </li></ul>
  • 43. Beispiel „Location Based Service“ Auswertung der GSM Cell ID <ul><li>Send SMS to someone if caretan cell is near </li></ul>import location HOME_CELL_ID = u&quot;98521779&quot; WIFE = u&quot;+49173247****“ entries = [u &quot;freu mich auf Dich!&quot; , u &quot;hab Hunger.&quot; , u &quot;hab schlechte Laune.&quot; ] listbox = appuifw.Listbox(entries, shout) home = 0 while home == 0: country, provider, lac, cell = location.gsm_location() if (cell== HOME_CELL_ID): home = 1 message = u &quot;Bin gleich zuhause und %s&quot; % mood messaging.sms_send(WIFE, message)
  • 44. Links <ul><li>Python for S60 </li></ul><ul><li>http://opensource.nokia.com/projects/pythonfors60/ </li></ul><ul><li>http://sourceforge.net/projects/pys60 </li></ul><ul><li>http://wiki.opensource.nokia.com/projects/Python_for_S60 </li></ul><ul><li>Symbian S60 </li></ul><ul><li>http://www.s60.com </li></ul>
  • 45. Anlaufstellen für Hilfe <ul><li>Python for S60 discussion board at Forum Nokia </li></ul><ul><li>http:// discussion.forum.nokia.com/forum/forumdisplay.php?forumid =102 </li></ul><ul><li>IRC channel #pys60 bei Freenode.net </li></ul><ul><li>irc://chat.freenode.net/pys60 </li></ul><ul><li>Google Group Python for S60 </li></ul><ul><li>http://groups.google.com/group/py4S60 </li></ul><ul><li>Google Group PythonS60 </li></ul><ul><li>http://groups.google.com/group/pythons60 </li></ul><ul><li>Beispiele / Code-Snippets </li></ul><ul><li>http://wiki.forum.nokia.com/index.php/Category:Python#Code_Examples_for_Python </li></ul><ul><li>http://snippets.dzone.com/tags/series60 </li></ul>
  • 46. Python für andere mobile Geräte <ul><li>Übersicht Python for Mobile Devices </li></ul><ul><li>http://www.awaretek.com/pymo.html </li></ul>
  • 47. Literatur <ul><li>Jürgen Scheible, Ville Tuulos. Mobile Python: Rapid Prototyping of Applications on the Mobile Platform http://www.mobilepythonbook.org </li></ul>

×