Python para
dispositivos móveis
Nokia
Blurb

Palestrante: Elvis Pfützenreuter

pesquisador no Instituto Nokia de Tecnologia (INdT),
escritório de Recife

contato: [email protected]

Instituto Nokia de Tecnologia -- INdT

entidade juridicamente separada da Nokia

sedes em Manaus, Brasília e Recife

várias linhas de pesquisa, de mecânica (e.g. testes de
impacto) a software livre para dispositivos móveis
Desenvolvimento para
dispositivos móveis

computação móvel é o ”próximo grande
acontecimento”



problemas: rede (IPv6), propriedade intelectual e
desenvolvimento
desenvolvedor enfrenta desafios análogos aos
existentes na era MS-DOS


com o detalhe que já está acontecendo agora
mesmo, aos tropeços
os aplicativos mobile deixam transparecer isso
pelos bugs e pelo visual ”anos 80”
ferramentas ainda são fracas, em comparação
com o atual desenvolvimento para PC
Principais problemas do
desenvolvimento para mobile

limitações de memória e desempenho


dificuldades em testar o software



testes mais aprofundados costumam exigir
hardware especial
um bom teste contempla inclusive consumo de
energia, no total (Joules) e no instantâneo (Watts)
emuladores deveriam suprir esta lacuna...


isso tende a não ser mais ”o” problema
...mas não suprem!
desenvolver para mobile custa dez vezes mais
que para PC (estimativa pessoal)
Problemas típicos dos
emuladores de mobiles

lentidão

não simulam o dispositivo real com fidelidade




100% de fidelidade é mesmo impossível
não simulam a API (*) do dispositivo real
com fidelidade
parcos recursos de depuração
tudo isso empurra o desenvolvedor sério para
um penoso on-device debugging.
(*) API: Application Programming Inteface. A ”caixa de ferramentas” de funções que
o desenvolvedor tem à sua disposição para realizar tarefas. Por exemplo, ler um
arquivo do disco – em Linux, a função read() cumpre este papel.
O que a Nokia e o INdT têm feito a
respeito



promoção do Python como linguagem
alternativa de desenvolvimento rápido
melhoria progressiva dos kits de
desenvolvimento (SDKs)
apontar o desenvolvimento em direção a APIs
padrão do software livre
Hardware Nokia



Série 60: smartphones baseados no sistema
operacional Symbian, mais extensões próprias
Maemo: Internet Tablets baseados no sistema
operacional Linux, mais extensões livres
ambos são baseados na plataforma OMAP da
Texas Instruments (N95=N810=OMAP 2420)

A Texas apenas arquiteta, não fabrica

Processador ARM (ARM Ltd também não fabrica)
Linguagem Python

Interpretada, de uso geral

Fácil de usar

Bom desempenho para sua categoria

Biblioteca padrão bastante completa

Disponível para quase todos os sistemas
comercialmente disponíveis


Fácil de portar
Fácil de estender, usando linguagem C

escapatória para problemas de desempenho
A “cara” do Python
def get_quote(acao):
url = "http://www.bovespa.com.br/...”
pagina = urllib.urlopen(url).read()
inicio = pagina.find("R$")+2
final = pagina.find("</td>", inicio)
cotacao = s[inicio:final].strip()
try:
valor = int(cotacao)/100.0
except ValueError:
valor = 0
return valor
# deixe como zero
Python é interpretado





Transforma código-fonte numa representação
intermediária (“máquina virtual”)
Performance compatível com outras linguagens
da categoria
Permite muitos “truques” interessantes, como
por exemplo o modo interativo
Tipagem forte e dinâmica

X = “string” + 1
# inválido

BLA = 1
# válido
Comparações com PHP e Javascript
Python é de uso geral



Não é atrelado a um fim específico, como o PHP
Não impõe uma classe específica de computador
ou processador
Pode ser implementado inclusive em cima de
outras máquinas virtuais como Java e .NET
Python é orientado a objeto




Classes, objetos, meta-classes, métodos,
operadores, e tudo mais que você espera
Tudo é objeto em Python, inclusive os tipos
primitivos (inteiros, strings, funções, classes,
métodos, bibliotecas etc.)
Suas classes podem até mesmo herdar de
tipos primitivos
class MeuInteiro(int):

def __add__(x, y):
# só pra sacanear
 return x+y+1

Python é multi-paradigma






Objetos não acabaram com a fome do mundo
Ninguém é obrigado a usar objetos e classes
no Python (não explicitamente, ao menos)
Paradigma estruturado (como C puro)
Paradigma funcional (influências de LISP,
SmallTalk, Haskell etc.)
Co-rotinas, closures, funções anônimas
(“lambda”)
Exceções
Python vem com pilhas incluídas

Rica biblioteca padrão

Lista = [1,2,3,4,5]

Tupla = (1,2,3,4,5)

Dicionario = {“a”: 1, “b”: 2, “c”: 3}

O funcionamento interno do Python é quase 100%
baseado nestes 3 tipos básicos

Subset = Lista[1:3]

Dicionario[“d”] = 11

for item in lista:

Iterators e generators
Python é fácil de aprender

Linguagem simples e limpa

Muita documentação e exemplos na Internet

No-nonsense: sem diferenças gratuitas em relação
a outras linguagens

Tipo float == double do C, que por sua vez depende da
plataforma

Por exemplo, Java especifica que float comporta-se como o
processador SPARC, que é diferente do Intel
sprintf(var, “%s: %d”, string, inteiro); // C++

var = “%s: %d” % (string, inteiro)

# Python
“Máquina virtual” do Python

def soma(a,b):
return a + b

>>> import dis

>>> dis.dis(soma)
0 LOAD_FAST
0 (a)

3 LOAD_FAST
1 (b)

6 BINARY_ADD

7 RETURN_VALUE

2
Ferramentas de introspecção





Todo objeto é na verdade um dicionário (i.e.
uma matriz associativa)
Tudo é um objeto
O código da VM do Python também é acessível
pelo próprio programa
Logo, as possibilidades de introspecção são
infinitas
Ferramentas de profiling, code coverage etc.
são rotineiramente escritas em Python mesmo.
Psyco: Python com JIT compiler

Desempenho do Python é limitado

Psyco: ferramenta JIT para arquitetura Intel


Permite JIT-compilar todo o programa ou
apenas funções específicas (mais interessante)
def quadrado(n):


return n*n
Gera uma “cópia” da função para cada tipo
diferente de “n” (quando ele aparece pela
primeira vez)
Desenvolvimento Série 60



o SDK para desenvolvimento C++ em Série 60
é livre para download em foum.nokia.com
algumas ferramentas extras têm custo
a distribuição de pacotes para o grande público
implica em ter-se um certificado pessoal (que
tem custo)

o certificado para um único dispositivo-alvo, como
por exemplo o seu celular pessoal, pode ser obtido
de graça
O ”rosto” do ambiente S60
A API C++ do Symbian/S60

completamente diferente de qualquer outra API
como Linux ou Windows

baseado fortemente em design patterns C++

é notoriamente difícil de aprender


por questões de eficiência, quase toda
operação é assíncrona e exige vários
comandos amiudados
a comunidade em torno da plataforma é pouco
colaborativa, embora haja 120+ milhões de
celulares Symbian no mundo.
OpenC: API de software livre para
Série 60


o OpenC oferece a API POSIX (padrão UNIX e
Linux) para a plataforma Série 60
inclui Glib, OpenSSL, libz etc.



que não são padrões POSIX, mas são padrões de
fato do mundo do software livre
ainda não oferece API de interface gráfica
como GTK+, mas é a tendência
nível de compatibilidade de código-fonte com
Linux é excelente

O problema é testar depois 
Python para Série 60






Python: linguagem interpretada de
desenvolvimento rápido
portada para inúmeras plataformas
Python para Série 60 é um porte mantido pela
Nokia
usar Python permite elidir ou postergar
inúmeros problemas do desenvolvimento para
mobile
permite inclusive evitar o SDK completamente
(se você não usa Windows etc.)
PyS60 vai ser ”rebaseado” em OpenC
PyS60 no emulador e no celular
Exemplo: fazer ligação telefônica
e mandando mensagem

import telephone

telephone.dial(“130”)

import messaging

messaging.sms_send(“88588245”, “ble”)
Exemplo: fazer ligação telefônica
gravando o que é falado

import telephone, audio, time

s = audio.Sound.open(“E:\\TROTE.WAV”)

telephone.dial(“190”)

# espere atender

s.record()

time.sleep(10)

telephone.hang_up()

s.stop()

# divirta-se com o resultado

s.play()
Exemplo: tirar fotografia, salvá-la
e mostrá-la na tela

import camera, appuifw

img = camera.take_photo()

img.save(“E:\\IMAGEM.JPG”)

c = appuifw.app.body = appuifw.Canvas()

c.blit(img)
Plataforma Maemo




linha de Internet Tablets (770, N800, N810)
baseado inteiramente em Linux e bibliotecas de
software livre
apenas uns poucos aplicativos de terceiros são
proprietários (e.g. browser do N800 é o Opera)
Maemo é a ”distribuição Linux” apropriada para
estes dispositivos

não é um celular

conecta-se ao celular via Bluetooth

FAQ: vai ser usado em celulares?
SDK do Maemo


baseado no Scratchbox, um ”chroot” com
recursos adicionais
permite rodar uma distribuição Linux diferente,
dentro do seu ambiente Linux ”normal”, sem
recorrer a VMWare



o Linux ”normal” e o hóspede compartilham o mesmo
kernel
emulador Maemo é muito mais fiel ao dispositivo
real, pois o Internet Tablet também roda Linux
linguagens: teoricamente, qualquer uma suportada
no Linux (na prática: C, C++ e Python)
Modos de emulação do Maemo


emulação i386: roda dentro de uma distribuição
Maemo compilada para i386
emulação ARM: roda dentro de uma
distribuição Maemo compilada para o ARM,
que é o processador do Tablet

obviamente, emulação ARM é mais fiel ao
dispositivo final

serve para pegar alguns tipos incomuns de bug

emulação ARM é feita pelo software QEMU

Kernel não é emulado (usa o kernel anfitrião)
Desenvolvendo para Maemo


já possui ferramentas de desenvolvimento
muito melhores que o Série 60
caminhos para melhorar ainda mais:

Python para Maemo

Mamona SDK
Python para Maemo



mantido pelo Instituto Nokia de Tecnologia
é essencialmente um porte do Python para
Linux, com algumas bibliotecas adicionais
específicas do Maemo
assim como o Python para Série 60, também
permite diminuir a dependência do SDK
Python for Maemo: develop once,
run everywhere
Ferramentas adicionais para
desenvolvimento rápido Maemo


ESBox: plug-in do Eclipse para
desenvolvimento num ambiente hospedado
pelo Scratchbox
Pluthon: plug-in do Eclipse para
desenvolvimento em Python para Maemo


o script é testado diretamente no Tablet, tornando o
Scratchbox desnecessário
exige possuir o dispositivo
Problemas do desenvolvimento
em Python (ordem decrescente)

Biblioteca de UI

Normalmente, específica para o dispositivo

Terá de existir também no PC, ou ser emulável

Afeta toda a arquitetura do seu sistema

Situação S60, Maemo/GTK e Maemo/EFL

Diferenças entre versões (Python 2.2 x 2.5)

Preconceito contra a tecnologia?

Footprint do interpretador

Desempenho, em particular no carregamento
Visão do futuro



emuladores que simulem o hardware, sendo tão
fiéis ao dispositivo real quanto possível
APIs e ferramentas baseadas em padrões
abertos e de software livre
uso massivo de linguagens interpretadas


isto ainda está para acontecer no desktop – portanto
ainda vai demorar no mobile
debug on-device facilitado, sem necessidade de
hardware específico e caro para isso

num futuro ainda mais distante: dispositivos
poderosos o suficiente para hospedar o próprio SDK,
como o PC faz (o Maemo já tem algo nessa direção)
Visão do futuro - Nokia

Biblioteca Qt

Qt abstrai quase tudo, até acesso a banco de dados

Interoperabilidade Maemo/Série 60/outros

PyQt no Python

Linux crescendo em importância

Python crescendo em importância

... Mas Javascript está na área
A concorrência

Google Android


Apple iPhone


Mac OS X portado
OpenMoko


Linux, Java
Linux, Enlightenment
TrollTech GreenPhone (adquirido pela Nokia)
Envolva-se!

ainda há muito que ser
desenvolvido




o Google é prova disto
projetos de software livre
trabalhos de conclusão de
curso relacionados a Maemo
e Série 60
Posições abertas no INdT
THE END