Slide 1

Slide 1 text

www.medando.de Programming Mobile Apps with Python Andreas Schreiber EuroPython 2012, Florence, Italy (July 3, 2012)

Slide 2

Slide 2 text

Slide 2 www.medando.de EuroPython 2012, Florence, 03.07.2012 Medando – Mobile Health Apps

Slide 3

Slide 3 text

Slide 3 www.medando.de EuroPython 2012, Florence, 03.07.2012 My Blood Pressure

Slide 4

Slide 4 text

Slide 4 www.medando.de EuroPython 2012, Florence, 03.07.2012 Overview • Apps and Statistics • Apps, Hardware, Markets • Early Mobile Development with Python • Nokia, Windows Mobile / CE • Current Mobile Development with Python • Android, iOS, Windows Phone • Everything else… • Other systems, summary, conclusions

Slide 5

Slide 5 text

Slide 5 www.medando.de EuroPython 2012, Florence, 03.07.2012 Mobile Apps What is a mobile app? • A software designed to run on smartphones, tablet computers, and other mobile devices • Limited memory, small screens, touch UI, battery efficient • Runs on mobile operating systems • Available through application distribution platforms • Apps are either free or paid • “App” was Word of the Year in 2010 (USA)

Slide 6

Slide 6 text

Slide 6 www.medando.de EuroPython 2012, Florence, 03.07.2012 Smartphones What is a smartphone? • Mobile phone based on a mobile operating platform • Combination of • PDA functions, camera, media player, Web browser, … • Equipped with • Touch screen, high-speed networking (Wi-Fi, mobile broadband), GPS, NFC, acceleration sensors, …

Slide 7

Slide 7 text

Slide 7 www.medando.de EuroPython 2012, Florence, 03.07.2012 Tablet Computers What is a Tablet? • A mobile computer that is larger than a smartphone • Built as touch screen device • Virtual keyboard, sometimes stylus or digital pen • Mostly based on x86 or ARM architectures

Slide 8

Slide 8 text

Slide 8 www.medando.de EuroPython 2012, Florence, 03.07.2012 Mobile Operating Systems Popular mobile operating systems • Android • Apple iOS • Windows Phone / Mobile / CE • RIM BlackBerry • Nokia OS / Symbian • Samsung Bada • …

Slide 9

Slide 9 text

Slide 9 www.medando.de EuroPython 2012, Florence, 03.07.2012 Market Share: Smartphone Sales Source: http://en.wikipedia.org/wiki/Smartphone

Slide 10

Slide 10 text

Slide 10 www.medando.de EuroPython 2012, Florence, 03.07.2012 App Distribution • Application Distribution Platforms • Google Play • Apple App Store • Windows Phone Marketplace (and Windows Marketplace for Mobile) • BlackBerry App World • Nokia Ovi Store • Many more • Cross-platform, manufacturer-specific, carrier-specific, …

Slide 11

Slide 11 text

Slide 11 www.medando.de EuroPython 2012, Florence, 03.07.2012 Apps in the iOS App Store Source: http://en.wikipedia.org/wiki/App_Store_(iOS)

Slide 12

Slide 12 text

Slide 12 www.medando.de EuroPython 2012, Florence, 03.07.2012 Apps in the Android Market / Google Play 0 100.000 200.000 300.000 400.000 500.000 600.000 700.000 Google Play Apps

Slide 13

Slide 13 text

Slide 13 www.medando.de EuroPython 2012, Florence, 03.07.2012 Apps in Google Play 0 5.000.000.000 10.000.000.000 15.000.000.000 20.000.000.000 25.000.000.000 Google Play Downloads

Slide 14

Slide 14 text

Slide 14 www.medando.de EuroPython 2012, Florence, 03.07.2012 Apps in the Windows Phone Marketplace Source: http://www.windowsphoneapplist.com

Slide 15

Slide 15 text

Slide 15 www.medando.de EuroPython 2012, Florence, 03.07.2012 So Many Apps… … but almost none of them are developed in Python!

Slide 16

Slide 16 text

Slide 16 www.medando.de EuroPython 2012, Florence, 03.07.2012 Early Mobile Development with Python • Symbian • Window Mobile / CE

Slide 17

Slide 17 text

Slide 17 www.medando.de EuroPython 2012, Florence, 03.07.2012 Symbian Symbian OS • Operating system for smartphones and PDAs • Micro kernel, 32bit, single user • GUI-centric application framework S60 • User interface for smartphones Programming for Symbian • C++, Java, Web Widgets • (Flash Lite), (Python) A schematic diagram of the S60 platform architecture.

Slide 18

Slide 18 text

Slide 18 www.medando.de EuroPython 2012, Florence, 03.07.2012 Python for S60 (PyS60) • Python port for S60 platform • Developed by Nokia, but development has stopped • Open-Source-License (Apache Version 2) • Stable Release • Last release: 1.4.5 (27.01.2009) • Available on SourceForge http://sourceforge.net/projects/pys60

Slide 19

Slide 19 text

Slide 19 www.medando.de EuroPython 2012, Florence, 03.07.2012 “Hello World” import appuifw appuifw.app.title = u„Hello World" appuifw.note(u"Hello World!", 'info')

Slide 20

Slide 20 text

Slide 20 www.medando.de EuroPython 2012, Florence, 03.07.2012 Starting a Python Interpreter

Slide 21

Slide 21 text

Slide 21 www.medando.de EuroPython 2012, Florence, 03.07.2012 Running Scripts

Slide 22

Slide 22 text

Slide 22 www.medando.de EuroPython 2012, Florence, 03.07.2012 Interactive Console

Slide 23

Slide 23 text

Slide 23 www.medando.de EuroPython 2012, Florence, 03.07.2012 Source Code Template 1. Importing modules 2. Setting screen size 3. Applications menu 4. Set. exit key handler (Callback function) 5. Setting app title 6. Application body 7. Active Objects 8. Main Loop Complete template: http://www.mobilenin.com/pys60/resources/app_skeleton_with_mainloop.py import appuifw import e32 appuifw.app.screen = 'normal' def item1(): print "item1 was selected.” appuifw.app.menu = [(u"item 1", 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()

Slide 24

Slide 24 text

Slide 24 www.medando.de EuroPython 2012, Florence, 03.07.2012 Example „Location Based Service“ import location HOME_CELL_ID = u"98521779" # my home in Cologne, Germany WIFE = u"+49173247****“ # cell phone number of my wife entries = [u"can’t wait to see you!", u"I’m hungry.", u"I’m in a bad mood."] 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"Will be at home in a moment and %s" % mood messaging.sms_send(WIFE, message) Send SMS to someone if certain cell is near (using GSM Cell ID)

Slide 25

Slide 25 text

Slide 25 www.medando.de EuroPython 2012, Florence, 03.07.2012 Example „OpenGL“ http://tinyurl.com/pys60cube

Slide 26

Slide 26 text

Slide 26 www.medando.de EuroPython 2012, Florence, 03.07.2012 Windows Mobile / CE Windows Mobile • Operating system for smartphones • Based on Windows CE kernel • Implemented in C Programming for Windows Mobile • Visual C++ (native code) • .NET framework • Tcl-Tk (with eTcl) • Python with PythonCE

Slide 27

Slide 27 text

Slide 27 www.medando.de EuroPython 2012, Florence, 03.07.2012 Python CE • Python port for Windows CE • Python CE: http://pythonce.sourceforge.net/ • Outdated since 2007 # Send a quick popup message to the user import win32sys win32sys.MessageBox(0, "My Message", "My Title", 1) win32sys.MessageBeep() # Launch another CE application import win32sh win32sh.ShellExecuteEx(0, 0, "", "\\Windows\\calc.exe", "", "\\Windows", 1)

Slide 28

Slide 28 text

Slide 28 www.medando.de EuroPython 2012, Florence, 03.07.2012 Current Mobile Development with Python • Android • iOS • Windows Phone

Slide 29

Slide 29 text

Slide 29 www.medando.de EuroPython 2012, Florence, 03.07.2012 Android Android • Linux-based operating system for mobile devices • Developed by the Open Handset Alliance, led by Google • Open Source, Apache License • Kernel based on Linux-kernel • Libraries and APIs written in C • Application Framework in Java • Java VM Dalvik with JIT • Hardware platform: ARM

Slide 30

Slide 30 text

Slide 30 www.medando.de EuroPython 2012, Florence, 03.07.2012 Programming Android • Apps are usually developed in Java • Software development tools • Android Software Development Kit • Native Development Kit • App Inventor for Android • Simple project and Basic4android • some others • Python!?

Slide 31

Slide 31 text

Slide 31 www.medando.de EuroPython 2012, Florence, 03.07.2012 Python for Android Several options • Scripting Layer for Android (SL4A) • Python for Android (Py4A) • Kivy • PySide for Android • PyGame

Slide 32

Slide 32 text

Slide 32 www.medando.de EuroPython 2012, Florence, 03.07.2012 Scripting Layer for Android (SL4A) • Executes scripts and interactive interpreters on Android • Access to many APIs • Support for • Python • Perl • Ruby • Lua • BeanShell • JavaScript • Tcl • Available on Google Code: http://code.google.com/p/android-scripting Source: Practical Android Projects by Lucas Jordan and Pieter Greyling

Slide 33

Slide 33 text

Slide 33 www.medando.de EuroPython 2012, Florence, 03.07.2012 Scripting Layer for Android (SL4A) • Support for some UI elements: Dialogs, Toasts, Progressbar, … • Interactive console Source: Practical Android Projects by Lucas Jordan and Pieter Greyling

Slide 34

Slide 34 text

Slide 34 www.medando.de EuroPython 2012, Florence, 03.07.2012 Scripting Layer for Android (SL4A) • Scripts • Sharing via barcodes or APKs • Hello Word: import android droid = android.Android() droid.makeToast('Hello, Android!')

Slide 35

Slide 35 text

Slide 35 www.medando.de EuroPython 2012, Florence, 03.07.2012 Python for Android (Py4A) • Python interpreter for Android • CPython, cross-compiled for Android • Used in SL4A • Access to many Android APIs • Native UI support not complete • Website: http://code.google.com/p/python-for-android/

Slide 36

Slide 36 text

Slide 36 www.medando.de EuroPython 2012, Florence, 03.07.2012 Building an App • To build a stand-alone app, the Python for Android interpreter must be included in an APK • Project: http://code.google.com/p/android-python27/ • Template files • Build files • Basically requires to change Java code to add your own script public static final String PYTHON_MAIN_SCRIPT_NAME = "hello.py"; public static final String PYTHON_PROJECT_ZIP_NAME = "my_python_project.zip"; File: GlobalConstants.java

Slide 37

Slide 37 text

Slide 37 www.medando.de EuroPython 2012, Florence, 03.07.2012 Kivy • Cross platform framework for innovative user interfaces • Multi-touch • Runs on Android, iOS, Linux, Windows, Mac OSX • Graphics engines uses OpenGL ES2 • Open Source • Website: http://kivy.org

Slide 38

Slide 38 text

Slide 38 www.medando.de EuroPython 2012, Florence, 03.07.2012 Kivy Hello World from kivy.app import App from kivy.uix.button import Button class TestApp(App): def build(self): return Button(text='Hello World') TestApp().run() Source: Kivy Website kivy.org

Slide 39

Slide 39 text

Slide 39 www.medando.de EuroPython 2012, Florence, 03.07.2012 See Kivy Poster Outside… Poster by Mathieu Virbel

Slide 40

Slide 40 text

Slide 40 www.medando.de EuroPython 2012, Florence, 03.07.2012 PySide for Android • For writing GUI applications for Android using Python • Based on • Python for Android (Py4A) • Qt for Android (Necessitas) • Python bindings for Qt (PySide) • Website: http://thp.io/2011/pyside-android/

Slide 41

Slide 41 text

Slide 41 www.medando.de EuroPython 2012, Florence, 03.07.2012 PySide for Android Example import sys import traceback def main(): from PySide.QtCore import * from PySide.QtGui import * app = QApplication(sys.argv) w = QLabel('Hello World!') w.show() app.exec_() if __name__=="__main__": main()

Slide 42

Slide 42 text

Slide 42 www.medando.de EuroPython 2012, Florence, 03.07.2012 Pygame Subset for Android • Subset of Pygame for the Android platform • Good for developing simple games • Website: http://pygame.renpy.org/

Slide 43

Slide 43 text

Slide 43 www.medando.de EuroPython 2012, Florence, 03.07.2012 iOS

Slide 44

Slide 44 text

Slide 44 www.medando.de EuroPython 2012, Florence, 03.07.2012 Apple iOS iOS • Mobile operating system by Apple • Multi-touch user interface • OS layer: Core OS layer, Core Services, Media layer, Cocoa Touch layer Programming iOS • Apps are written in Objective-C • Software Development Kit and IDE Xcode • Python on iOS almost not possible

Slide 45

Slide 45 text

Slide 45 www.medando.de EuroPython 2012, Florence, 03.07.2012 Python for iOS – A Python IDE for the iOS http://pythonforios.com/

Slide 46

Slide 46 text

Slide 46 www.medando.de EuroPython 2012, Florence, 03.07.2012 Python for iOS – On iPhone

Slide 47

Slide 47 text

Slide 47 www.medando.de EuroPython 2012, Florence, 03.07.2012 Python for iOS – On iPad

Slide 48

Slide 48 text

Slide 48 www.medando.de EuroPython 2012, Florence, 03.07.2012 Python for iOS – On iPad

Slide 49

Slide 49 text

Slide 49 www.medando.de EuroPython 2012, Florence, 03.07.2012 Python for iOS – On iPad

Slide 50

Slide 50 text

Slide 50 www.medando.de EuroPython 2012, Florence, 03.07.2012 Kivy • You can publish Kivy Apps in the Apple App Store • No dynamic linking • First App: Deflectouch

Slide 51

Slide 51 text

Slide 51 www.medando.de EuroPython 2012, Florence, 03.07.2012 Windows Phone Windows Phone • Mobile operating system by Microsoft • Successor to Windows Mobile Programming for Windows Phone • Apps must be based on XNA or Silverlight • Windows Phone Developer Tools

Slide 52

Slide 52 text

Slide 52 www.medando.de EuroPython 2012, Florence, 03.07.2012 IronPython IronPython • Python implementation for the .NET platform • Since version 2.7.2 (March 2012): • Preliminary support for Windows Phone 7.5 • No documentation yet • http://blog.ironpython.net/2012/03/whats-new-in-ironpython-272.html

Slide 53

Slide 53 text

Slide 53 www.medando.de EuroPython 2012, Florence, 03.07.2012 Everything else…

Slide 54

Slide 54 text

Slide 54 www.medando.de EuroPython 2012, Florence, 03.07.2012 Other Mobile Devices Many other devices with Apps • Livescribe • Amazon Kindle • No Python support • Maybe support via Jython

Slide 55

Slide 55 text

Slide 55 www.medando.de EuroPython 2012, Florence, 03.07.2012 Summary Symbian Android iOS Windows Phone Python support Yes Yes, with restrictions Via Kivy Not now

Slide 56

Slide 56 text

Slide 56 www.medando.de EuroPython 2012, Florence, 03.07.2012 Comparison Matrix by Thomas Perl (@thp4) Source: http://thp.io/2012/mobile-matrix/

Slide 57

Slide 57 text

Slide 57 www.medando.de EuroPython 2012, Florence, 03.07.2012 Questions? @onyame Conclusions • Python on mobile phone not ready for production development of apps • Some solutions for scripting and interactive interpretation