Slide 1 - EPx.com.br

960 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
960
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Slide 1 - EPx.com.br

  1. 1. Python para dispositivos móveis Nokia
  2. 2. Blurb <ul><li>Palestrante: Elvis Pfützenreuter </li></ul><ul><ul><li>pesquisador no Instituto Nokia de Tecnologia (INdT), escritório de Recife </li></ul></ul><ul><ul><li>contato: epx@epx.com.br </li></ul></ul><ul><ul><li>Instituto Nokia de Tecnologia -- INdT </li></ul></ul><ul><ul><li>entidade juridicamente separada da Nokia </li></ul></ul><ul><ul><li>sedes em Manaus, Brasília e Recife </li></ul></ul><ul><ul><li>várias linhas de pesquisa, de mecânica (e.g. testes de impacto) a software livre para dispositivos móveis </li></ul></ul>
  3. 3. Desenvolvimento para dispositivos móveis <ul><li>computação móvel é o ”próximo grande acontecimento” </li></ul><ul><ul><li>com o detalhe que já está acontecendo agora mesmo, aos tropeços </li></ul></ul><ul><ul><li>problemas: rede (IPv6), propriedade intelectual e desenvolvimento </li></ul></ul><ul><li>desenvolvedor enfrenta desafios análogos aos existentes na era MS-DOS </li></ul><ul><ul><li>os aplicativos mobile deixam transparecer isso pelos bugs e pelo visual ”anos 80” </li></ul></ul><ul><li>ferramentas ainda são fracas, em comparação com o atual desenvolvimento para PC </li></ul>
  4. 4. Principais problemas do desenvolvimento para mobile <ul><li>limitações de memória e desempenho </li></ul><ul><ul><li>isso tende a não ser mais ”o” problema </li></ul></ul><ul><li>dificuldades em testar o software </li></ul><ul><ul><li>testes mais aprofundados costumam exigir hardware especial </li></ul></ul><ul><ul><li>um bom teste contempla inclusive consumo de energia, no total (Joules) e no instantâneo (Watts)‏ </li></ul></ul><ul><li>emuladores deveriam suprir esta lacuna... </li></ul><ul><ul><li>...mas não suprem! </li></ul></ul><ul><li>desenvolver para mobile custa dez vezes mais que para PC (estimativa pessoal)‏ </li></ul>
  5. 6. Problemas típicos dos emuladores de mobiles <ul><li>lentidão </li></ul><ul><li>não simulam o dispositivo real com fidelidade </li></ul><ul><ul><li>100% de fidelidade é mesmo impossível </li></ul></ul><ul><li>não simulam a API (*) do dispositivo real com fidelidade </li></ul><ul><li>parcos recursos de depuração </li></ul><ul><li>tudo isso empurra o desenvolvedor sério para um penoso on-device debugging. </li></ul>(*) 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. 7. O que a Nokia e o INdT têm feito a respeito <ul><li>promoção do Python como linguagem alternativa de desenvolvimento rápido </li></ul><ul><li>melhoria progressiva dos kits de desenvolvimento (SDKs)‏ </li></ul><ul><li>apontar o desenvolvimento em direção a APIs padrão do software livre </li></ul>
  7. 8. Hardware Nokia <ul><li>Série 60: smartphones baseados no sistema operacional Symbian, mais extensões próprias </li></ul><ul><li>Maemo: Internet Tablets baseados no sistema operacional Linux, mais extensões livres </li></ul><ul><li>ambos são baseados na plataforma OMAP da Texas Instruments (N95=N810=OMAP 2420) </li></ul><ul><ul><li>A Texas apenas arquiteta, não fabrica </li></ul></ul><ul><ul><li>Processador ARM (ARM Ltd também não fabrica) </li></ul></ul>
  8. 9. Linguagem Python <ul><li>Interpretada, de uso geral </li></ul><ul><li>Fácil de usar </li></ul><ul><li>Bom desempenho para sua categoria </li></ul><ul><li>Biblioteca padrão bastante completa </li></ul><ul><li>Disponível para quase todos os sistemas comercialmente disponíveis </li></ul><ul><ul><li>Fácil de portar </li></ul></ul><ul><li>Fácil de estender, usando linguagem C </li></ul><ul><ul><li>escapatória para problemas de desempenho </li></ul></ul>
  9. 10. A “cara” do Python <ul><li>def get_quote(acao): </li></ul><ul><li>url = &quot;http://www.bovespa.com.br/...” </li></ul><ul><li>pagina = urllib.urlopen(url).read() </li></ul><ul><li>inicio = pagina.find(&quot;R$&quot;)+2 </li></ul><ul><li>final = pagina.find(&quot;</td>&quot;, inicio) </li></ul><ul><li>cotacao = s[inicio:final].strip() </li></ul><ul><li>try: </li></ul><ul><li>valor = int(cotacao)/100.0 </li></ul><ul><li>except ValueError: </li></ul><ul><li>valor = 0 # deixe como zero </li></ul><ul><li>return valor </li></ul>
  10. 11. Python é interpretado <ul><li>Transforma código-fonte numa representação intermediária (“máquina virtual”) </li></ul><ul><li>Performance compatível com outras linguagens da categoria </li></ul><ul><li>Permite muitos “truques” interessantes, como por exemplo o modo interativo </li></ul><ul><li>Tipagem forte e dinâmica </li></ul><ul><ul><li>X = “string” + 1 # inválido </li></ul></ul><ul><ul><li>BLA = 1 # válido </li></ul></ul><ul><li>Comparações com PHP e Javascript </li></ul>
  11. 12. Python é de uso geral <ul><li>Não é atrelado a um fim específico, como o PHP </li></ul><ul><li>Não impõe uma classe específica de computador ou processador </li></ul><ul><li>Pode ser implementado inclusive em cima de outras máquinas virtuais como Java e .NET </li></ul>
  12. 13. Python é orientado a objeto <ul><li>Classes, objetos, meta-classes, métodos, operadores, e tudo mais que você espera </li></ul><ul><li>Tudo é objeto em Python, inclusive os tipos primitivos (inteiros, strings, funções, classes, métodos, bibliotecas etc.) </li></ul><ul><li>Suas classes podem até mesmo herdar de tipos primitivos </li></ul><ul><li>class MeuInteiro(int): </li></ul><ul><ul><li>def __add__(x, y): </li></ul></ul><ul><ul><ul><li># só pra sacanear </li></ul></ul></ul><ul><ul><ul><li>return x+y+1 </li></ul></ul></ul>
  13. 14. Python é multi-paradigma <ul><li>Objetos não acabaram com a fome do mundo </li></ul><ul><li>Ninguém é obrigado a usar objetos e classes no Python (não explicitamente, ao menos) </li></ul><ul><li>Paradigma estruturado (como C puro) </li></ul><ul><li>Paradigma funcional (influências de LISP, SmallTalk, Haskell etc.) </li></ul><ul><li>Co-rotinas, closures, funções anônimas (“lambda”) </li></ul><ul><li>Exceções </li></ul>
  14. 15. Python vem com pilhas incluídas <ul><li>Rica biblioteca padrão </li></ul><ul><li>Lista = [1,2,3,4,5] </li></ul><ul><li>Tupla = (1,2,3,4,5) </li></ul><ul><li>Dicionario = {“a”: 1, “b”: 2, “c”: 3} </li></ul><ul><ul><li>O funcionamento interno do Python é quase 100% baseado nestes 3 tipos básicos </li></ul></ul><ul><li>Subset = Lista[1:3] </li></ul><ul><li>Dicionario[“d”] = 11 </li></ul><ul><li>for item in lista: </li></ul><ul><li>Iterators e generators </li></ul>
  15. 16. Python é fácil de aprender <ul><li>Linguagem simples e limpa </li></ul><ul><li>Muita documentação e exemplos na Internet </li></ul><ul><li>No-nonsense: sem diferenças gratuitas em relação a outras linguagens </li></ul><ul><ul><li>Tipo float == double do C, que por sua vez depende da plataforma </li></ul></ul><ul><ul><ul><li>Por exemplo, Java especifica que float comporta-se como o processador SPARC, que é diferente do Intel </li></ul></ul></ul><ul><ul><li>sprintf(var, “%s: %d”, string, inteiro); // C++ </li></ul></ul><ul><ul><li>var = “%s: %d” % (string, inteiro) # Python </li></ul></ul>
  16. 17. “ Máquina virtual” do Python <ul><li>def soma(a,b): </li></ul><ul><ul><li>return a + b </li></ul></ul><ul><li>>>> import dis </li></ul><ul><li>>>> dis.dis(soma) </li></ul><ul><li>2 0 LOAD_FAST 0 (a) </li></ul><ul><li>3 LOAD_FAST 1 (b) </li></ul><ul><li>6 BINARY_ADD </li></ul><ul><li>7 RETURN_VALUE </li></ul>
  17. 18. Ferramentas de introspecção <ul><li>Todo objeto é na verdade um dicionário (i.e. uma matriz associativa) </li></ul><ul><li>Tudo é um objeto </li></ul><ul><li>O código da VM do Python também é acessível pelo próprio programa </li></ul><ul><li>Logo, as possibilidades de introspecção são infinitas </li></ul><ul><li>Ferramentas de profiling, code coverage etc. são rotineiramente escritas em Python mesmo. </li></ul>
  18. 19. Psyco: Python com JIT compiler <ul><li>Desempenho do Python é limitado </li></ul><ul><li>Psyco: ferramenta JIT para arquitetura Intel </li></ul><ul><li>Permite JIT-compilar todo o programa ou apenas funções específicas (mais interessante) </li></ul><ul><li>def quadrado(n): </li></ul><ul><ul><li>return n*n </li></ul></ul><ul><li>Gera uma “cópia” da função para cada tipo diferente de “n” (quando ele aparece pela primeira vez) </li></ul>
  19. 20. Desenvolvimento Série 60 <ul><li>o SDK para desenvolvimento C++ em Série 60 é livre para download em foum.nokia.com </li></ul><ul><li>algumas ferramentas extras têm custo </li></ul><ul><li>a distribuição de pacotes para o grande público implica em ter-se um certificado pessoal (que tem custo)‏ </li></ul><ul><ul><li>o certificado para um único dispositivo-alvo, como por exemplo o seu celular pessoal, pode ser obtido de graça </li></ul></ul>
  20. 21. O ”rosto” do ambiente S60
  21. 22. A API C++ do Symbian/S60 <ul><li>completamente diferente de qualquer outra API como Linux ou Windows </li></ul><ul><li>baseado fortemente em design patterns C++ </li></ul><ul><li>é notoriamente difícil de aprender </li></ul><ul><li>por questões de eficiência, quase toda operação é assíncrona e exige vários comandos amiudados </li></ul><ul><li>a comunidade em torno da plataforma é pouco colaborativa, embora haja 120+ milhões de celulares Symbian no mundo. </li></ul>
  22. 23. OpenC: API de software livre para Série 60 <ul><li>o OpenC oferece a API POSIX (padrão UNIX e Linux) para a plataforma Série 60 </li></ul><ul><li>inclui Glib, OpenSSL, libz etc. </li></ul><ul><ul><li>que não são padrões POSIX, mas são padrões de fato do mundo do software livre </li></ul></ul><ul><li>ainda não oferece API de interface gráfica como GTK+, mas é a tendência </li></ul><ul><li>nível de compatibilidade de código-fonte com Linux é excelente </li></ul><ul><ul><li>O problema é testar depois  </li></ul></ul>
  23. 24. Python para Série 60 <ul><li>Python: linguagem interpretada de desenvolvimento rápido </li></ul><ul><li>portada para inúmeras plataformas </li></ul><ul><li>Python para Série 60 é um porte mantido pela Nokia </li></ul><ul><li>usar Python permite elidir ou postergar inúmeros problemas do desenvolvimento para mobile </li></ul><ul><li>permite inclusive evitar o SDK completamente (se você não usa Windows etc.)‏ </li></ul><ul><li>PyS60 vai ser ”rebaseado” em OpenC </li></ul>
  24. 25. PyS60 no emulador e no celular
  25. 26. Exemplo: fazer ligação telefônica e mandando mensagem <ul><li>import telephone </li></ul><ul><li>telephone.dial(“130”) </li></ul><ul><li>import messaging </li></ul><ul><li>messaging.sms_send(“88588245”, “ble”) </li></ul>
  26. 27. Exemplo: fazer ligação telefônica gravando o que é falado <ul><li>import telephone, audio, time </li></ul><ul><li>s = audio.Sound.open(“E:ROTE.WAV”) </li></ul><ul><li>telephone.dial(“190”) </li></ul><ul><li># espere atender </li></ul><ul><li>s.record() </li></ul><ul><li>time.sleep(10) </li></ul><ul><li>telephone.hang_up() </li></ul><ul><li>s.stop() </li></ul><ul><li># divirta-se com o resultado </li></ul><ul><li>s.play() </li></ul>
  27. 28. Exemplo: tirar fotografia, salvá-la e mostrá-la na tela <ul><li>import camera, appuifw </li></ul><ul><li>img = camera.take_photo() </li></ul><ul><li>img.save(“E:MAGEM.JPG”) </li></ul><ul><li>c = appuifw.app.body = appuifw.Canvas() </li></ul><ul><li>c.blit(img) </li></ul>
  28. 29. Plataforma Maemo <ul><li>linha de Internet Tablets (770, N800, N810)‏ </li></ul><ul><li>baseado inteiramente em Linux e bibliotecas de software livre </li></ul><ul><li>apenas uns poucos aplicativos de terceiros são proprietários (e.g. browser do N800 é o Opera)‏ </li></ul><ul><li>Maemo é a ”distribuição Linux” apropriada para estes dispositivos </li></ul><ul><li>não é um celular </li></ul><ul><li>conecta-se ao celular via Bluetooth </li></ul><ul><li>FAQ: vai ser usado em celulares? </li></ul>
  29. 30. SDK do Maemo <ul><li>baseado no Scratchbox, um ”chroot” com recursos adicionais </li></ul><ul><li>permite rodar uma distribuição Linux diferente, dentro do seu ambiente Linux ”normal”, sem recorrer a VMWare </li></ul><ul><ul><li>o Linux ”normal” e o hóspede compartilham o mesmo kernel </li></ul></ul><ul><li>emulador Maemo é muito mais fiel ao dispositivo real, pois o Internet Tablet também roda Linux </li></ul><ul><li>linguagens: teoricamente, qualquer uma suportada no Linux (na prática: C, C++ e Python)‏ </li></ul>
  30. 31. Modos de emulação do Maemo <ul><li>emulação i386: roda dentro de uma distribuição Maemo compilada para i386 </li></ul><ul><li>emulação ARM: roda dentro de uma distribuição Maemo compilada para o ARM, que é o processador do Tablet </li></ul><ul><ul><li>obviamente, emulação ARM é mais fiel ao dispositivo final </li></ul></ul><ul><ul><li>serve para pegar alguns tipos incomuns de bug </li></ul></ul><ul><ul><li>emulação ARM é feita pelo software QEMU </li></ul></ul><ul><ul><li>Kernel não é emulado (usa o kernel anfitrião) </li></ul></ul>
  31. 32. Desenvolvendo para Maemo <ul><li>já possui ferramentas de desenvolvimento muito melhores que o Série 60 </li></ul><ul><li>caminhos para melhorar ainda mais: </li></ul><ul><ul><li>Python para Maemo </li></ul></ul><ul><ul><li>Mamona SDK </li></ul></ul>
  32. 33. Python para Maemo <ul><li>mantido pelo Instituto Nokia de Tecnologia </li></ul><ul><li>é essencialmente um porte do Python para Linux, com algumas bibliotecas adicionais específicas do Maemo </li></ul><ul><li>assim como o Python para Série 60, também permite diminuir a dependência do SDK </li></ul>
  33. 34. Python for Maemo: develop once, run everywhere
  34. 35. Ferramentas adicionais para desenvolvimento rápido Maemo <ul><li>ESBox: plug-in do Eclipse para desenvolvimento num ambiente hospedado pelo Scratchbox </li></ul><ul><li>Pluthon: plug-in do Eclipse para desenvolvimento em Python para Maemo </li></ul><ul><ul><li>o script é testado diretamente no Tablet, tornando o Scratchbox desnecessário </li></ul></ul><ul><ul><li>exige possuir o dispositivo </li></ul></ul>
  35. 36. Problemas do desenvolvimento em Python (ordem decrescente)‏ <ul><li>Biblioteca de UI </li></ul><ul><ul><li>Normalmente, específica para o dispositivo </li></ul></ul><ul><ul><li>Terá de existir também no PC, ou ser emulável </li></ul></ul><ul><ul><li>Afeta toda a arquitetura do seu sistema </li></ul></ul><ul><ul><li>Situação S60, Maemo/GTK e Maemo/EFL </li></ul></ul><ul><li>Diferenças entre versões (Python 2.2 x 2.5)‏ </li></ul><ul><li>Preconceito contra a tecnologia? </li></ul><ul><li>Footprint do interpretador </li></ul><ul><li>Desempenho, em particular no carregamento </li></ul>
  36. 37. Visão do futuro <ul><li>emuladores que simulem o hardware, sendo tão fiéis ao dispositivo real quanto possível </li></ul><ul><li>APIs e ferramentas baseadas em padrões abertos e de software livre </li></ul><ul><li>uso massivo de linguagens interpretadas </li></ul><ul><ul><li>isto ainda está para acontecer no desktop – portanto ainda vai demorar no mobile </li></ul></ul><ul><li>debug on-device facilitado, sem necessidade de hardware específico e caro para isso </li></ul><ul><ul><li>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)‏ </li></ul></ul>
  37. 38. Visão do futuro - Nokia <ul><li>Biblioteca Qt </li></ul><ul><ul><li>Qt abstrai quase tudo, até acesso a banco de dados </li></ul></ul><ul><ul><li>Interoperabilidade Maemo/Série 60/outros </li></ul></ul><ul><ul><li>PyQt no Python </li></ul></ul><ul><li>Linux crescendo em importância </li></ul><ul><li>Python crescendo em importância </li></ul><ul><ul><li>... Mas Javascript está na área </li></ul></ul>
  38. 39. A concorrência <ul><li>Google Android </li></ul><ul><ul><li>Linux, Java </li></ul></ul><ul><li>Apple iPhone </li></ul><ul><ul><li>Mac OS X portado </li></ul></ul><ul><li>OpenMoko </li></ul><ul><ul><li>Linux, Enlightenment </li></ul></ul><ul><li>TrollTech GreenPhone (adquirido pela Nokia) </li></ul>
  39. 40. Envolva-se! <ul><li>ainda há muito que ser desenvolvido </li></ul><ul><ul><li>o Google é prova disto </li></ul></ul><ul><li>projetos de software livre </li></ul><ul><li>trabalhos de conclusão de curso relacionados a Maemo e Série 60 </li></ul><ul><li>Posições abertas no INdT </li></ul>
  40. 41. THE END

×