python para dispositivos móveis nokia. blurb palestrante: elvis pfützenreuter pesquisador no...

41
Python para dispositivos móveis Nokia

Upload: internet

Post on 18-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

Python para dispositivos móveis Nokia

Page 2: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 3: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

Desenvolvimento para dispositivos móveis

computação móvel é o ”próximo grande acontecimento”

com o detalhe que já está acontecendo agora mesmo, aos tropeços

problemas: rede (IPv6), propriedade intelectual e desenvolvimento

desenvolvedor enfrenta desafios análogos aos existentes na era MS-DOS

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

Page 4: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

Principais problemas do desenvolvimento para mobile

limitações de memória e desempenho isso tende a não ser mais ”o” problema

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...

...mas não suprem! desenvolver para mobile custa dez vezes mais

que para PC (estimativa pessoal)

Page 5: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife
Page 6: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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.

Page 7: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 8: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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)

Page 9: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 10: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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 # deixe como zero

return valor

Page 11: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 12: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 13: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 14: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 15: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 16: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 17: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

“Máquina virtual” do Python

def soma(a,b):

return a + b

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

Page 18: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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.

Page 19: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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)

Page 20: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 21: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

O ”rosto” do ambiente S60

Page 22: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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.

Page 23: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 24: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 25: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

PyS60 no emulador e no celular

Page 26: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

Exemplo: fazer ligação telefônica e mandando mensagem

import telephone telephone.dial(“130”)

import messaging messaging.sms_send(“88588245”, “ble”)

Page 27: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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()

Page 28: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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)

Page 29: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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?

Page 30: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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)

Page 31: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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)

Page 32: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 33: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 34: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

Python for Maemo: develop once, run everywhere

Page 35: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 36: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 37: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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)

Page 38: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 39: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

A concorrência

Google Android Linux, Java

Apple iPhone Mac OS X portado

OpenMoko Linux, Enlightenment

TrollTech GreenPhone (adquirido pela Nokia)

Page 40: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

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

Page 41: Python para dispositivos móveis Nokia. Blurb Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife

THE END