• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Slide 1 - EPx.com.br
 

Slide 1 - EPx.com.br

on

  • 1,209 views

 

Statistics

Views

Total Views
1,209
Views on SlideShare
1,209
Embed Views
0

Actions

Likes
0
Downloads
15
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Slide 1 - EPx.com.br Slide 1 - EPx.com.br Presentation Transcript

    • 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
        • 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(&quot;</td>&quot;, 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:ROTE.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:MAGEM.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