Mostrando postagens com marcador desempenho. Mostrar todas as postagens
Mostrando postagens com marcador desempenho. Mostrar todas as postagens

Python e otimização de performance em aplicativos


Um post publicado pelo colega Rodrigo Peixoto, fala sobre como reduzir e otimizar ao máximo a performance do seu aplicativo desenvolvido em Python. Muito bom o post! Recomendo! Especialmente para aqueles que não conhecem a linguagem de programação Python ou para aqueles que ainda acreditam que Python é muito lento! (Ele é lento em comparação à linguagens compiláveis, mas com bibliotecas terceiras e práticas de programação corretas é possível extrair o máximo do Python com o que ele tem de melhor: produtividade e liberdade!)



Leiam o post referencial "Aplicativos Python lentos. Onde está o gargalo" aqui.

Análise de Plataforma: Python para S60 (PyS60)

Dando continuidade à minha análise das linguagens de programação existentes hoje para desenvolvimento mobile, hoje falarei da plataforma de desenvolvimento chamada Python. Para quem não sabe o que é a linguagem de programação Python, ela é uma linguagem que veio para mudar/ajudar o mundo da programação. Além de ser fácil aprendizado e uso, tem ganhado bastante atenção das comunidades de desenvolvedores e pode ser usada para diferentes propósitos como a construção de aplicativos desktop, desenvolvimento web, computação científica, utilitários, games, criação de efeitos especiais e por fim, claro desenvolvimento móvel.

Para a área de dispositivos móveis, Python é oferecida através da plataforma Symbian S60, que varia desde a segunda edição até a 'terceira edição com todos as features opcionais. Isso faz a plataforma ser bastante abrangente, visto que temos milhares de aparelhos no mercado prontos para ser usados como repositórios pelos seus aplicativos Python.


Podemos ver que no cenário de desenvolvimento mobile, existem hoje diversas plataformas disponíveis para os desenvolvedores, especialmente para os desenvolvedores da plataforma Symbian. Há o Symbian C++ que é o núcleo do S.O. Symbian disponível com uma imensa quantidade de APIs e funcionalidades prontas para o uso. Claro, que há um custo para isso: C++ não é uma linguagem tão fácil de se aprender e o framework exige um grau de aprendizado um pouco mais extenso e elevado. Java é bem mais fácil de usar e está presente, óbvio, em milhões de aparelhos móveis. As funcionalidades disponíveis por ele são suficientes, mão são restritas e disponibilizadas de acordo com o processo JCP. Isso significa que para criar uma nova API para o JavaME ? Só se for de acordo com todos os participantes de cada especificação JSR. Indisponível para meros mortais como nós : desenvolvedores.

Aí entra Python, como uma ponte, e pelo que vejo, isso é uma grande vantagem. Tem a facilidade de aprendizado de Java e é ao mesmo tempo tão poderosa como C++. Diferente de java que é limitado pelo processo de padrões, em Python se você quer criar uma API que use recursos avançados dos seu aparelho e a mesma não está disponível, é muito simples! Apenas crie uma extensão (módulo) e pronto! Está pronto para ser usado. Para os interessados em desenvolver em python, especialmente com tutoriais, aplicativos exemplos, etc: o site
http://croozeus.googlepages.com/py60extensions pode ajudar os iniciados!

Também, se você é um desenvolvedor que gosta de fuçar o aparelho móvel e mexer no hard code da máquina virtual, fique feliz! Porque o runtime do Python para S60 é open source, e você pode passar dias contribuindo com a comunidade caçando bugs, adicionando novas funcionalides e criando até a sua própria versão modificada.

Tecnologia: Python para S60

Prós:

  • Aplicativos integrados com web - Você pode facilmente usar a API de localização com o Google Maps e criar poderosos aplicativos mobile/web que usam o melhor de ambas plataformas. Posso citar exemplos como: MobyMaps, um aplicativo de geolocalização escrita apenas em 104 linhas de código, pyAmazon, Mobile Google Maps e tantos outros.
  • Aplicativos comerciais - Aplicativos que precisem acessar o sistema de arquivos, lista de contatos, conectividade bluetooth, câmera, galeria de imagens , etc. Com as APIS disponíveis em Python, elas permitem que o desenvolvedor escreva rapidmente aplicativos que possam interagir com seu aparelho e com outras pessoas. Exemplos claros como MobileGTD, PyS60RemoteControl e PySpy.
  • Rápida prototipação - Este sem dúvidas é uma das principais motivações de se usar Python para S60. Explicarei o porquê. O cenário comum é o desenvolvedor escolher uma linguagem de programação e começa logo de imediato a desenvolver seu aplicativo com ela. Se algo der errado ou não funcionar, ele só irar descobrir no fim do projeto, quando é tarde demais. Vários casos já foram reportados de projetos com desenvolvimento em JavaME onde o desenvolvedor trava em uma parte da codificação do seu aplicativo e descobre que aquela funcionalidade não pode ser feita com Java! Principalmente quando o sistema está quase pronto! Pois, Python vem ajudar aos desenvolvedores nesse desafio de uma forma elegante e bem eficiente: Se você tem uma idéia, e quer checar se aquela sua idéia funciona ou não, basta escrever algumas linhas de script de código Python para testá-la. Se você estiver satisfeito com a idéia/resultado, apenas incremente um pouco mais seu código para torná-lo seu produto final. Caso o contrário, você pode implementar a sua idéia agora (provada que funciona) em uma versão final com C++ ou Java se você necessita de mais performance ou portabilidade. Uma coisa bem legal com desenvolvimento em Python,
    é que com a rápida prototipação, você pode mostrar coisas já funcionando desde o primeiro dia de projeto em vez de utilizar documentações, diagramas ou slides.
  • Utilitários - Se você tem que dar alguma palestra ou participar de algum evento especial e precisa de soluções rápidas para problemas simples, porque não usar PyS60 ? Um exemplo prático foi uma pequena palestra que tive que dar sobre aplicações móveis tempos atrás, e pra a mesma desenvolvi pequenos aplicativos utilitários (câmeras fotográficas, gravador de vídeos, reprodutores de vídeos, jogos simples) em poucos dias. Qual linguagem usei ? Python! Prototipação rápida associada com altos recursos do aparelho me permitiram criar aplicações-demo bem interessantes para minha palestra.
  • Jogos - Python é uma linguagem com uma grande quantidade de biblitotecas APIs que podem ser utilizadas para jogos, como: Sensor API, Open GL, gráficos, manipulação de imagem, etc. Ela é também uma boa ferramenta para desenvolvimento de jogos casuais de curta duração. Embora, isso possa ser feito com o Flash Lite com uma API para gráficos mais poderosa e de fácil uso, as APIS do PyS60 irão ajudá-lo a desenvolver seus jogos com aquela sensação de "Uau! Pode fazer isso em Python é?? Que maneiro!"

Porque?

  • Vasta quantidade de APIs/funcionalidades - A plataforma Python para S60 oferece uma quantidade razoável de APIS para desenvolvimento, mas o mais legal é que em qualquer momento, você pode criar novos módulos /extensões usando Python/C se você sentir falta de alguma funcionalidade não coberta pelas APIs padrões. Esses módulos podem ser adicionados de uma plataforma para outra sem grnades modificações a depender da plataforma alvo.
  • Facilidade de uso - A linguagem Python é uma das linguagens mais fáceis de se aprender e de trabalhar. Em apenas algumas semanas, você pode está produzindo variados códigos de acordo com sua necessidade (Alta produtividade).
  • Suporte da comunidade- Como Python é open-source, logo há uma grande quantidade de scripts e códigos escritos pela comunidades open-source espalhados por aí, prontos para serem usados na sua aplicação.

Contras:

  • Desempenho/Performance - A performance de Python é razoável, embora seja mais lenta que C++, Java e Flash. Se você precisa desenvolver aplicativos que exijam computação científica, cálculos numéricos complexos, streaming de vídeo/áudio, python realmente não é a melhor opção.
  • Certificação/Assinatura dos aplicativos - Pode-se considerar que não é muito diferente dos aplicativos Symbian em C++, os aplicativos comerciais (e.g. os que são vendidos pelas operadoras) precisam ser assinados e passar pelo processo de certificação Symbian (Symbian Signed Proccess). Um pouco burocrático!
  • Portabilidade - Acho que é um dos principais contras da plataforma Python. Afinal de contas, ele só funciona em plataformas Symbian-S60. Mas é claro que é possível fazer o porte dela para outras plataformas visto que o núcleo de Python é o mesmo. Mas nem todas as bibliotecas do S60 pode ser portadas diretamente sem modificações críticas.

Porque?

  • Assinatura Symbian (Symbian Signed) - O processo era até para funcionar com aplicativos Python, mas ele foi desenhado para aplicativos em C++. Por isso fica aí uma incogníta na hora de certificar seus aplicativos Python. As poucas vezes que tentei fazer isso, acabei não conseguindo fazer (Acho que por falta de informação ou inexperiência).
  • Segurança - Como o processo de segurança é algo sempre levado em questão, especialmente na fase de desenvolvimento, logo é bem complicado lidar com essas questões de segurança da plataforma (e.g.evitar que usuários construam aplicativos malwares para os dispositivos). Sempre há restrições de API que pode desacelerar o andamento do projeto e aí começa o ciclo de teste, assinatura, re-teste, etc. Python para S60 também sofre desse male quando você decidir montar o package instalável dele para o Symbian (.sis).
  • Desempenho - O baixo desempenho de Python se deve pelo simples fato de ela ser uma linguagem interpretada. Logo, há umas desvantagens de performance em comparação com aplicativos desenvolvidos em linguagens nativas do aparelho.
  • Ferramentas- Em questão de ferramentas, PyS60 ainda deve muito. Embora tenha um plugin para testar seus scripts no emulador do C++ SDK do Symbian, scripts para testar no seu aparelho e até programas como py2sis ou Ensymble para tornar os scripts em instaláveis (.sis), ainda assim é fraco quando se fala de integração com ferramentas como Carbide C++, Eclipse, Netbeans, etc. Diferente dessas plataformas (JavaME, FlashLite, SymbianC++) que cada uma tem uma IDE forte associada, Python ainda não tem uma ferramenta ou plugin específico para desenvolvimento para mobile S60. Ah, e fãs do linux e mac irão ficar tristes: o Emulador de testes só roda no Windows! =/

Enfim, posso concluir que python permite você desenvolver coisas bem legais para seu aparelho, especialmente se ele for um Symbian Series 60. Com apenas poucas linhas de código você estará desenvolvendo aplicativos e utilitários de baixa/média e alta complexidade. Ideal para prototipação rápida, a linha de aprendizado é suave e a quantidade de APIs existentes é enorme abrigada por uma comunidade opensource que está sempre contribuindo com novas bibliotecas e APIs para sua aplicação. Como ainda está em fase de crescimento, a plataforma mobile de python está sempre inovando-se com novas releases, e você desenvolvedor pode ajudar e contribuir com a evolução da mesma, afim de tornar uma plataforma inovadora e divertida de programar para Symbians S60.

Se você estiver interessado em aprender mais sobre o Python para S60 , há diversos recursos nesse site wiki.


Acho que é isso!

Em breve postarei alguma análise sobre o Symbian C++!


Análise de plataformas móveis: JavaME (Prós e contras)

Uma das questões bem intrigantes hoje para os desenvolvedores da área mobile é a dificuldade da escolha de que linguagem de programação ou tecnologia a escolher para desenvolver nossa aplicação. Existe hoje uma variada e crescente lista de linguagens como Java, Symbian C++, Flash Lite, Widgets, Python, etc.
O mais interessante é que como existem diversas tecnologias, não há a necessidade para os desenvolvedores de ter conhecimento técnico em todas as tecnologias, visto que nem todos também desenvolvem os mesmos tipos de aplicativos. Ou seja, de acordo com o tipo de tecnologia que melhor se encaixa com a experiência do desenvolvedor e com o propósito do aplicativo, podemos decidir qual melhor tecnologia a ser usada para o desenvolvimento.
Mas isso pode ser uma faca de dois gumes. Há a possibilidade também de confudir os novos desenvolvedores que estão começando a desenvolver nesse amplo mundo de software mobile, porém fragmentado.

Em muitos fórums, geralmente ocorre esse tipo de discussão:

Questão: "Eu quero desenvolver um aplicativo que abra um arquivo e possa enviá-lo para um servidor web. O que eu posso usar para desenvolver esse aplicativo ?"

Resposta1: "JavaME, FileConnection API! Ele pode resolver seu problema."
Resposta2: "Ah, não se preocupe. Use C++ em vez de JavaME, porque senão você vai receber milhões de caixas de dialógo de permissões e segurança."
Resposta3: "Porque usar C++ quando você pode fazer a mesma coisa com Python? C++ é muito complexo ! "
Resposta4: "Mas Python não roda em aparelhos sem o sistema operacional Symbian, use Java."
Resposta5: "Para que tanto trabalho? Porque não usa logo o Flash Lite e usa a persistência já nativa baseada em servidor ("server-based persistence") ? Seu aplicativo vai sair rapidinho!"
Resposta6: "Flash Lite é muito fragmentado e de novo cai na necessidade de aparelhos Symbian. Use JavaME, mas não se esqueça de assinar (certificar) sua MIDlet ou a usabilidade do aplicativo será um lixo!"

Vejam os diversos fórums na área de desenvolvimento móvel. Está cheio dessas discussões como o exemplo acima. Baseada na minha opinião/experiência e também compilando opiniões de diversas fontes, pude juntar uma análise com pós e contras das principais plataformas de desenvolvimento da atualidade. Irei começar com JavaME, que é a mais popular dentre as existentes.

Tecnologia: JavaME

Prós:
Aplicativos para gerenciamento pessoal e produtividade - Exemplos: Gerenciadores de atividades físicas (sport trackers), aplicativos de controle de gastos, gerenciamento de informações pessoais (calendário, agenda de contatos, etc.).
Jogos - Tanto jogos casuais (advergames) como jogos complexos.
Aplicativos comerciais "enterprise" - Esses não necessitam de interfaces muito requintadas. Geralmente usam bibliotecas padrões da API (Ex: LCDUI) para atingir o maior número de aparelhos possíveis aliado com menor tempo de desenvolvimento (A preocupação fica na regra de negócio).
Prototipação Rápida - Provas de conceito e aplicativos para testes podem ser rapidamente implementados com JavaME.
Aplicativos de Rede - Leitores RSS, serviços de previsão de tempo, aplicativos de blogging, versões mobile de aplicativos web, etc.
Criação de aplicativos realmente portáveis.
Grande quantidade de aparelhos disponíveis com o a máquina virtual JavaME.

Porque?

Facilidade e simplicidade de uso e aprendizado - Um programador experiente, mesmo vindo de outras linguagens como C/C++, pode obter um bom conhecimento prático de como toda a plataforma funciona em algumas semanas e produzir aplicativos rapidamente. Isto eleva a JavaME como uma plataforma rápida pra desenvolvimento de aplicativos. Baseada na linguagem Java e orientada a objetos facilitam esse aprendizado. O framework também não é muito complexo.
Portabilidade - A idéia do Java é "Programe uma vez e rode em qualquer lugar". Embora isso seja o ideal, na prática há diferenças entre implementações, o suporte diferenciado a certos pacotes e APIS, formatos de Audio/video, etc. Mas isso não significa que você deve reescrever totalmente seu aplicativo. Com algumas linhas e algumas checagens em tempo de execução será suficiente.

GAME API - Para mim um dos frameworks matadores do JavaME. Ele combinado com algumas APIS opcionais tornam o desenvolvimento de jogos para celular bastante eficiente com ótimos resultados.
API de Networking e a facilidade de comunicação Web - O framework GCF (Generic Connection Framework) tem como essência ser o máximo possível extensível e genérico para variados tipos de conexão. Uma vez que você tenha aprendido a fazer um tipo de conexão, você está apto rapidamente a fazer qualquer tipo de conexão.


Contras:

Acesso a recursos específicos do aparelho - Exemplos: Acesso a caixa de mensagens SMS, sistema de arquivos, galerias de foto, hardware, etc.
Aplicações Multimídia - Examplos: Reprodutores (players) de video streaming, audio e gravadores de vídeo e som, aplicações de reconhecimento de vídeo/som.
Aplicativos que exigem bastante performance - Computação científica, processamento de imagens, decodificadores de vídeo, processamento de som.


Porque?

A API de Java ainda é limitada para acesso a recursos específicos no hardware do telefone. Isso existe porque qualquer funcionalidade nova em Java depende da aprovação do processo da comunidade Java (Java Community Process), logo se não existir uma API padrão disponível para que o desenvolvedor queira fazer, ele está com má sorte. Um exemplo clássico seria acessar a caixa de mensagens SMS do aparelho.

A implementação MMAPI ainda é bastante bugada. Muitas checagens em tempo de execução são necessárias ainda pelo fato de que as funcionalidades nativas do aparelho (desenvolvidas em outras linguagens) são disponíveis para máquina virtual Java e esse acesso indireto pode ter um impacto profundo em performance de aplicativos de tempo-real.

Fazer controles específicos sobre áudio, vídeo ou câmera geralmente não está disponível. Embora o JSR 234 (Advanced Multimedia Supplements) ainda consiga resolver algumas dessas dependências, ainda nem se compara com o que outras plataformas podem oferecer para os desenvolvedores. E a disponibilidade dessa API em aparelhos móveis, já que é uma API opcional, é bastante baixa.

O acesso ao sistema de arquivos é provido pela API FileConnection (JSR-75), mas ainda é restrito para certos tipos de acesso e requer que o MIDlet seja assinado, senão diversas caixas de diálogo de segurança pedindo a permissão do usuário aparecerão na tela. Usabilidade zero! Ah, e o processo de assinatura de um MIDlet custa $$ e tem uma burocracia envolvida, esteja preparado.


Enfim, essa é apenas uma pequena análise que eu faço hoje com JavaME, inclusive opinião de alguns desenvolvedores e fóruns que eu vejo na área. Não acho que JavaME é ruim ou melhor. Ela tem muitos prós e contras que devem ser levados quando iniciar a escolha de qual plataforma para o desenvolvimento do seu aplicativo móvel. De acordo com as suas necessidades e requisitos do seu aplicativo, a pergunta "O que eu devo escolher ou usar" será respondida através da experiência. No início realmente é complicado, mas com o tempo a escolha de qual plataforma adotar acaba sendo bastante natural. Gerenciamento de requisitos é uma ciência e não uma arte, então a escolha da plataforma de desenvolvimento irá aparecer naturalmente com a experiência.

A próxima linguagem de programação que irei citar mais detalhes é o Python! Considero essa a minha plataforma de desenvolvimento favorita. =D



Teste de desempenho : Java vs C++

Este post não tem nada haver com Mobile diretamente (Indiretamente tem! Especialmente em informações de desempenho e alocação de memória: Requisitos essenciais para desenvolvimento de aplicativos móveis).
Um artigo publicado pelo Vitor Pamplona no seu blog, fazendo alguns testes de desempenho entre Java e a linguagem C++. A Pergunta lançada: Qual plataforma tem melhor desempenho em processadores Corex (ex: Core 2 Duo) ?

Reposta? Vejam aqui e tirem a dúvida com seus próprios olhos.

Fiquei impressionado com o resultado! Sem dúvidas, A Sun está de parabéns pelo trabalho realizado.
top