Python
for
S60
Easy,
rapid
prototyping
of
mobile
applica:ons
on
the
S60
pla;orm
Herb
Jellinek,
Supported
So@ware
LLC
jellinek
at
newscenter
dot
com
July
2009
Copyright
©
2009,
Herb
Jellinek
1
Python?
• General‐purpose
object‐oriented
programming
language
• Allows
edit‐compile‐test
as
well
as
completely
interac:ve
execu:on
• Language,
libraries,
and
paOerns
of
use
encourage
readability
and
produc:vity
• Open
source
project
with
a
large
user
community
July
2009
Copyright
©
2009,
Herb
Jellinek
2
What
is
Python
for
S60?
• Nokia’s
port
of
the
Python
run:me
to
the
S60
smartphone
pla;orm
• Python
core
language
• Rich
set
of
capabili:es
– Large
set
of
standard
Python
libraries,
plus
– Mobile‐specific
API
• AKA
PyS60
July
2009
Copyright
©
2009,
Herb
Jellinek
3
Why
PyS60?
• Easy
to
get
started
• Can
test
applica:on
ideas
and
pla;orm
features
• Provides
access
to
many
pla;orm
features
out
of
the
box
– Network,
file
system,
messaging,
contacts
database
– Bluetooth,
camera,
loca:on/GPS,
sensor
framework
– Etc.
• • • • • • • •
More
func:onality
than
Java
and
Flash
Lite
run:mes
(no
“sandbox”)
Can
extend
with
na:ve
modules
for
addi:onal
capabili:es
Quick
edit/test/edit
cycle
on
real
device
or
emulator
Interac:ve
Bluetooth
console
Runs
on
a
large
number
of
devices
Open
source
project
with
ac:ve
developer
community
Tools
are
free
and
run
on
most
major
OSes
Great
for
demonstra:ng
product
ideas
to
senior
management!
July
2009
Copyright
©
2009,
Herb
Jellinek
4
Why
not
PyS60?
• Not
supported
on
other
mobile
device
pla;orms
• More
overhead,
lower
performance
than
na:ve
Symbian
C++
• Must
install
Python
on
the
phone
manually
–
a
slightly
cumbersome
process
July
2009
Copyright
©
2009,
Herb
Jellinek
5
Geing
Started
• Choose
a
pla;orm
– PyS60
1.4.5
(stable
release,
Python
2.2.2
base)
or
– PyS60
1.9.6
(beta
release,
Python
2.5.1
base)
• Choice
depends
on
your
technical
requirements
and/or
taste
for
adventure
July
2009
Copyright
©
2009,
Herb
Jellinek
6
Geing
Started
• (assume
PyS60
1.4.5
and
S60
3rd
Edi:on
FP1
device)
• Download
from
hOp://sourceforge.net/projects/pys60/:
Component
Name
Example
Python
run:me
PythonForS60_1_4_5_xE dFPy.sis
PythonForS60_1_4_5_3rdEd.sis
Python
script
shell
PythonScriptShell_1_4_5 _xEdFPy.sis
PythonScriptShell_1_4_5_3rdEd. sis
Documenta:on
PythonForS60_1_4_5_do c.pdf
Release
notes
release_notes_1_4_5.txt
July
2009
Copyright
©
2009,
Herb
Jellinek
7
Geing
Started
• Transfer
run:me
and
script
shell
to
phone
– PythonForS60_1_4_5_3rdEd.sis
– PythonScriptShell_1_4_5_3rdEd.sis
– When
Installer
asks
to
install,
say
yes!
• Order
maOers;
install
run:me
first
• Create
E:\Python
directory
on
phone
for
scripts
• Can
also
run
on
S60
Emulator
July
2009
Copyright
©
2009,
Herb
Jellinek
8
Examples
• • • • • •
Hello,
World
–
Console
Hello,
World
–
from
script
menu
Hello,
World
–
appuifw
Text
Messaging
Telephony
GPS
July
2009
Copyright
©
2009,
Herb
Jellinek
9
Hello,
World
• Open
Bluetooth
console
and
type
this:
print u”Hello, world!”
July
2009
Copyright
©
2009,
Herb
Jellinek
10
Hello,
World
July
2009
Copyright
©
2009,
Herb
Jellinek
11
Hello,
World
• Create
helloworld.py
and
copy
to
E:\Python:
print u“Hello, world!”
July
2009
Copyright
©
2009,
Herb
Jellinek
12
Run
Your
Script
July
2009
Copyright
©
2009,
Herb
Jellinek
13
Hello,
World
á
la
PyS60
• Use
the
appuifw
module
to
set
the
:tle
and
pop
up
a
note
import appuifw appuifw.app.title = u"The Universal Program" appuifw.note(u"Hello, world!")
July
2009
Copyright
©
2009,
Herb
Jellinek
14
Hello,
World
á
la
PyS60
July
2009
Copyright
©
2009,
Herb
Jellinek
15
A
Bit
More
UI
import appuifw, e32 def quit(): appLock.signal() textObj = appuifw.Text() textObj.font = "title" textObj.set(u”Hello, World!”) appLock = e32.Ao_lock() appuifw.app.exit_key_handler = quit appuifw.app.body = textObj appLock.wait()
July
2009
Copyright
©
2009,
Herb
Jellinek
16
A
Bit
More
UI
July
2009
Copyright
©
2009,
Herb
Jellinek
17
Using
Pla;orm
API’s:
Text
Messaging
• inbox
module
accesses
messages
in
device
inbox
July
2009
>>> import inbox >>> inb = inbox.Inbox() >>> messages = inb.sms_messages() >>> for m in messages: ... print inb.address(m) ... Wessling Susana AT&T email gateway Wessling Susana Wessling Susana AT&T email gateway AT&T email gateway 18314307294 >>> Copyright
©
2009,
Herb
Jellinek
18
Using
Pla;orm
API’s:
Telephony
import appuifw, telephone, e32, audio appLock=e32.Ao_lock() def quit(): appLock.signal() appuifw.app.exit_key_handler=quit lastNumber=None def callState((state, number)): global lastNumber if (state == telephone.EStatusRinging): lastNumber = number if (state == telephone.EStatusDisconnecting): audio.say(u”Call was from %s” % lastNumber) # register the callback telephone.call_state(callState) appLock.wait() July
2009
Copyright
©
2009,
Herb
Jellinek
19
Using
Pla;orm
API’s:
GPS
Source code and details forthcoming at developer.symbian.org/wiki/index.php?title=Location_Based_Services July
2009
Copyright
©
2009,
Herb
Jellinek
20
Time‐saving
Tips
• Add
the
Python
script
shell
and
File
Manager
to
the
Ac:ve
Standby
Apps
(name
varies)
• Allows
you
to
run/restart
Python
and
manipulate
scripts
quickly
July
2009
Copyright
©
2009,
Herb
Jellinek
21
Time‐saving
Tips
• Use
Nokia
PC
Suite
or
Bluetooth
file
browser
on
dev
computer
July
2009
Copyright
©
2009,
Herb
Jellinek
22
Time‐saving
Tips
• Consider
using
a
source
code
control
system
for
those
“what
was
I
thinking?”
moments
July
2009
Copyright
©
2009,
Herb
Jellinek
23
Conclusion
• • • • • • •
Python
for
S60
(PyS60)
Shallow
learning
curve
Quick,
easy
experimenta:on
and
development
Advantages
and
disadvantages
Comparison
with
other
S60
pla;orms
Examples
So
much
more
to
explore
– Modules,
libraries,
packaging,
best
prac:ces,
code
signing,
…
July
2009
Copyright
©
2009,
Herb
Jellinek
24
Thank
You
• Ques:ons?
July
2009
Copyright
©
2009,
Herb
Jellinek
25
Contact
• Herb
Jellinek,
Supported
So@ware,
LLC
• jellinek
at
newscenter
dot
com
July
2009
Copyright
©
2009,
Herb
Jellinek
26