410 likes | 543 Views
Python para dispositivos móveis Nokia. Blurb. Palestrante: Elvis Pfützenreuter pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife contato: epx@epx.com.br Instituto Nokia de Tecnologia -- INdT entidade juridicamente separada da Nokia sedes em Manaus, Brasília e Recife
E N D
Blurb • Palestrante: Elvis Pfützenreuter • pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife • contato: epx@epx.com.br • 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
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
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
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