slide 1 - epx.com.br
DESCRIPTION
TRANSCRIPT
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”
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
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)
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 # deixe como zero
return valor
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) 2 0 LOAD_FAST 0 (a) 3 LOAD_FAST 1 (b) 6 BINARY_ADD 7 RETURN_VALUE
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 Linux, Java
Apple iPhone Mac OS X portado
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 conclusão de
curso relacionados a Maemo e Série 60
Posições abertas no INdT
THE END