1 / 41

Python para dispositivos móveis Nokia

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

doctor
Download Presentation

Python para dispositivos móveis Nokia

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Python para dispositivos móveis Nokia

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

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

  4. 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)‏

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  20. O ”rosto” do ambiente S60

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

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

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

  24. PyS60 no emulador e no celular

  25. Exemplo: fazer ligação telefônica e mandando mensagem • import telephone • telephone.dial(“130”) • import messaging • messaging.sms_send(“88588245”, “ble”)

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

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

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

  29. 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)‏

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

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

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

  33. Python for Maemo: develop once, run everywhere

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

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

  36. 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)‏

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

  38. A concorrência • Google Android • Linux, Java • Apple iPhone • Mac OS X portado • OpenMoko • Linux, Enlightenment • TrollTech GreenPhone (adquirido pela Nokia)

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

  40. THE END

More Related