Sei sulla pagina 1di 41

Python para dispositivos mveis Nokia

Blurb

Palestrante: Elvis Pftzenreuter

pesquisador no Instituto Nokia de Tecnologia (INdT), escritrio de Recife


contato: epx@epx.com.br

Instituto Nokia de Tecnologia -- INdT


entidade juridicamente separada da Nokia sedes em Manaus, Braslia e Recife vrias linhas de pesquisa, de mecnica (e.g. testes de impacto) a software livre para dispositivos mveis

Desenvolvimento para dispositivos mveis

computao mvel o prximo grande acontecimento

com o detalhe que j est acontecendo agora mesmo, aos tropeos

problemas: rede (IPv6), propriedade intelectual e desenvolvimento

desenvolvedor enfrenta desafios anlogos aos existentes na era MS-DOS

os aplicativos mobile deixam transparecer isso pelos bugs e pelo visual anos 80

ferramentas ainda so fracas, em comparao com o atual desenvolvimento para PC

Principais problemas do desenvolvimento para mobile

limitaes de memria e desempenho

isso tende a no ser mais o problema testes mais aprofundados costumam exigir hardware especial um bom teste contempla inclusive consumo de energia, no total (Joules) e no instantneo (Watts)

dificuldades em testar o software

emuladores deveriam suprir esta lacuna...

...mas no suprem!

desenvolver para mobile custa dez vezes mais que para PC (estimativa pessoal)

Problemas tpicos dos emuladores de mobiles

lentido

no simulam o dispositivo real com fidelidade

100% de fidelidade mesmo impossvel

no simulam a API (*) do dispositivo real com fidelidade parcos recursos de depurao

tudo isso empurra o desenvolvedor srio para um penoso on-device debugging.


(*) API: Application Programming Inteface. A caixa de ferramentas de funes que o desenvolvedor tem sua disposio para realizar tarefas. Por exemplo, ler um arquivo do disco em Linux, a funo read() cumpre este papel.

O que a Nokia e o INdT tm feito a respeito

promoo do Python como linguagem alternativa de desenvolvimento rpido


melhoria progressiva dos kits de desenvolvimento (SDKs) apontar o desenvolvimento em direo a APIs padro do software livre

Hardware Nokia

Srie 60: smartphones baseados no sistema operacional Symbian, mais extenses prprias
Maemo: Internet Tablets baseados no sistema operacional Linux, mais extenses livres ambos so baseados na plataforma OMAP da Texas Instruments (N95=N810=OMAP 2420)

A Texas apenas arquiteta, no fabrica Processador ARM (ARM Ltd tambm no fabrica)

Linguagem Python

Interpretada, de uso geral

Fcil de usar
Bom desempenho para sua categoria

Biblioteca padro bastante completa


Disponvel para quase todos os sistemas comercialmente disponveis

Fcil de portar
escapatria para problemas de desempenho

Fcil de estender, usando linguagem C

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 cdigo-fonte numa representao intermediria (mquina virtual)


Performance compatvel com outras linguagens da categoria Permite muitos truques interessantes, como por exemplo o modo interativo

Tipagem forte e dinmica


X = string + 1 BLA = 1

# invlido # vlido

Comparaes com PHP e Javascript

Python de uso geral


No atrelado a um fim especfico, como o PHP


No impe uma classe especfica de computador ou processador Pode ser implementado inclusive em cima de outras mquinas virtuais como Java e .NET

Python orientado a objeto

Classes, objetos, meta-classes, mtodos, operadores, e tudo mais que voc espera Tudo objeto em Python, inclusive os tipos primitivos (inteiros, strings, funes, classes, mtodos, 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 no acabaram com a fome do mundo


Ningum obrigado a usar objetos e classes no Python (no explicitamente, ao menos) Paradigma estruturado (como C puro) Paradigma funcional (influncias de LISP, SmallTalk, Haskell etc.) Co-rotinas, closures, funes annimas (lambda)

Excees

Python vem com pilhas includas


Rica biblioteca padro 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 bsicos

Subset = Lista[1:3]

Dicionario[d] = 11
for item in lista:

Iterators e generators

Python fcil de aprender


Linguagem simples e limpa Muita documentao e exemplos na Internet No-nonsense: sem diferenas gratuitas em relao 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

Mquina virtual do Python

def soma(a,b):
return a + b

>>> import dis


>>> dis.dis(soma) 2 0 LOAD_FAST 3 LOAD_FAST 6 BINARY_ADD 0 (a) 1 (b)

7 RETURN_VALUE

Ferramentas de introspeco

Todo objeto na verdade um dicionrio (i.e. uma matriz associativa)

Tudo um objeto
O cdigo da VM do Python tambm acessvel pelo prprio programa Logo, as possibilidades de introspeco so infinitas

Ferramentas de profiling, code coverage etc. so 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 funes especficas (mais interessante)

def quadrado(n):

return n*n

Gera uma cpia da funo para cada tipo diferente de n (quando ele aparece pela primeira vez)

Desenvolvimento Srie 60

o SDK para desenvolvimento C++ em Srie 60 livre para download em foum.nokia.com


algumas ferramentas extras tm custo

a distribuio de pacotes para o grande pblico 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 graa

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 difcil de aprender por questes de eficincia, quase toda operao assncrona e exige vrios comandos amiudados a comunidade em torno da plataforma pouco colaborativa, embora haja 120+ milhes de celulares Symbian no mundo.

OpenC: API de software livre para Srie 60

o OpenC oferece a API POSIX (padro UNIX e Linux) para a plataforma Srie 60
inclui Glib, OpenSSL, libz etc.

que no so padres POSIX, mas so padres de fato do mundo do software livre

ainda no oferece API de interface grfica como GTK+, mas a tendncia nvel de compatibilidade de cdigo-fonte com Linux excelente

O problema testar depois

Python para Srie 60

Python: linguagem interpretada de desenvolvimento rpido portada para inmeras plataformas Python para Srie 60 um porte mantido pela Nokia usar Python permite elidir ou postergar inmeros problemas do desenvolvimento para mobile permite inclusive evitar o SDK completamente (se voc no usa Windows etc.) PyS60 vai ser rebaseado em OpenC

PyS60 no emulador e no celular

Exemplo: fazer ligao telefnica e mandando mensagem


import telephone telephone.dial(130) import messaging messaging.sms_send(88588245, ble)

Exemplo: fazer ligao telefnica 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 so proprietrios (e.g. browser do N800 o Opera)
Maemo a distribuio Linux apropriada para estes dispositivos no 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 distribuio Linux diferente, dentro do seu ambiente Linux normal, sem recorrer a VMWare

o Linux normal e o hspede compartilham o mesmo kernel

emulador Maemo muito mais fiel ao dispositivo real, pois o Internet Tablet tambm roda Linux
linguagens: teoricamente, qualquer uma suportada no Linux (na prtica: C, C++ e Python)

Modos de emulao do Maemo

emulao i386: roda dentro de uma distribuio Maemo compilada para i386
emulao ARM: roda dentro de uma distribuio Maemo compilada para o ARM, que o processador do Tablet

obviamente, emulao ARM mais fiel ao dispositivo final serve para pegar alguns tipos incomuns de bug emulao ARM feita pelo software QEMU Kernel no emulado (usa o kernel anfitrio)

Desenvolvendo para Maemo

j possui ferramentas de desenvolvimento muito melhores que o Srie 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 especficas do Maemo assim como o Python para Srie 60, tambm permite diminuir a dependncia do SDK

Python for Maemo: develop once, run everywhere

Ferramentas adicionais para desenvolvimento rpido 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 desnecessrio exige possuir o dispositivo

Problemas do desenvolvimento em Python (ordem decrescente)

Biblioteca de UI

Normalmente, especfica para o dispositivo Ter de existir tambm no PC, ou ser emulvel Afeta toda a arquitetura do seu sistema Situao S60, Maemo/GTK e Maemo/EFL

Diferenas entre verses (Python 2.2 x 2.5)


Preconceito contra a tecnologia?

Footprint do interpretador
Desempenho, em particular no carregamento

Viso do futuro

emuladores que simulem o hardware, sendo to fiis ao dispositivo real quanto possvel APIs e ferramentas baseadas em padres 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 especfico e caro para isso

num futuro ainda mais distante: dispositivos poderosos o suficiente para hospedar o prprio SDK, como o PC faz (o Maemo j tem algo nessa direo)

Viso do futuro - Nokia

Biblioteca Qt

Qt abstrai quase tudo, at acesso a banco de dados


Interoperabilidade Maemo/Srie 60/outros PyQt no Python

Linux crescendo em importncia Python crescendo em importncia

... Mas Javascript est na rea

A concorrncia

Google Android

Linux, Java Mac OS X portado

Apple iPhone

OpenMoko

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 concluso de curso relacionados a Maemo e Srie 60 Posies abertas no INdT

THE END

Potrebbero piacerti anche