Phonegap Removendo delay de toque

Desenvolver apps Híbridas sem a ajuda de um framework que tenham, todas as particularidades nas plataformas é um caso de dependência de várias técnicas, se você está nesse campo à um bom tempo, sabe que essa tarefa as vezes depende muito de bibliotecas e pequenos scripts em Javascript para fazer funcionar de uma forma nativa.

Um dos problemas enfrentados é o famoso Delay dos 300ms, esse problema afeta tanto apps híbridas como as feitas em Titanium, Cordova, etc, como os “site-apps” nos navegadores.

Quando eu começei a criar um aplicativo do Guia dos mochileiro das galáxias, apresentava esse problema, dando uma aparência de lentidão e quebrado, coisa que tirava toda a experiência de se criar algo ao estilo nativo. Na época eu resolvi com algumas técnicas relacionadas a CSS, melhorou, mais não tanto quanto depois usando o FastClick.

O FastClick resolve esse problema, especialmente relacionado ao errinho do web-kit em dispositivos que tenham navegadores que usam ele como base, assim como o Webkit(WebView) do Apache Cordova.

Antes de chamar qualquer biblioteca no Cordova, você deve esperar o evento “deviceReady”

Inclua o FastClick na dependência do seu projeto.

 ```javascript
    <script type='application/javascript' src='/path/to/fastclick.js'></script>
 ```

E em seguida inclua essa linha abaixo:

window.addEventListener('load', function() {
FastClick.attach(document.body);
}, false);

E como em um passe de mágica, sem precisar melhorar nada na performance, seu App já ganha de cara uns 10% até 20% de melhoria na responsividade do toque para a execução.

O que é Test Driven Development?

TDD significa Test-Driven development ou seja, é o desenvolvimento guiado por testes. Basicamente isso significa escrever um caso de teste antes de programar a real implementação. Parece estranho mas é isso mesmo, criar primeiro o teste antes de começar o desenvolvimento.

É muito comum achar que novas ideias são viagens, ou então que são muito bonitas na teoria, porém difíceis de aplicar na prática, e coisas do gênero. Por isso, antes de falar qualquer coisa sobre TDD, pense primeiro nas vantagem pois sabemos que as desvantagem acabam pesando mais na hora de decidir se utilizamos ou não tal método.

TDD nos auxilia a entregar Software com menos defeitos, porém existem outras características importantes em relação à qualidade de código, tais como: acoplamento, coesão, escalabidade, entre outras.
Então vamos pensar que as vezes devemos criar todos os problemas que a aplicação poderá saber e depois com a programação ir contornando eles.
Não é genial!?

Para ser mais sucinto, nossa missão é entregar código robusto e com alta qualidade. Então, sem mais delongas, vamos ver a seguir o porquê do TDD pode ser bastante útil.

Uma coisa importante do TDD é nunca escrever um código de produção até que exista um caso de teste falhando para ele.
Isso significa que enquanto todos os testes estiverem passando, não se deve criar ou mexer em nada do sistema. Se alguma alteração no sistema for exigida por exemplo, primeiro devemos criar um teste para provar que essa alteração não está implementada ainda e rodar todos os testes para garantir que o sistema está perfeito até o momento. Com isso teremos um teste falhando e devemos utilizar o mínimo de esforço para fazer esse teste passar e em seguida refatoramos nosso código para remover redundâncias.

O ciclo de desenvolvimento do TDD:

  1. Criar um teste e ver ele falhar;
  2. Escrever código simples suficiente para o teste passar;
  3. Refatorar para remover duplicidade;

Devemos repetir esse ciclo sempre que for escrever algum código de produção. Também é importante rodar todos os testes do sistema para garantir que o código que estamos escrevendo não impactou em nada, por isso a necessidade de testes unitários que rodem rápido para que não desmotive o desenvolvedor a trabalhar usando esse ciclo.

Também é importante manter os testes limpos e legíveis de forma que facilite a leitura quando outros desenvolvedores olharem.

Utilizando o TDD conseguimos manter um sistema simples e podemos fazer qualquer alteração com segurança porque temos certeza que se essa alteração impactar em algum lugar do sistema, os testes nos dirão.

Mas porque a maioria não utilizam esse método?

Dificuldade em começar

Apesar de uma extensa e clara documentação, iniciar o desenvolvimento orientado a testes pode ser um trabalho árduo para muitos pelo simples fato de que geralmente muitos iniciantes tentam praticá-lo em código já existente. Este definitivamente não é o caminho. A principal característica do desenvolvimento orientado a testes é que ele seja orientado a testes. Em outras palavras o código que realizará sua lógica deve ser criado somente após a criação do teste e isso torna-se algo de difícil aceitação pois ainda não se tem nada e já se faz necessário testar.

Curva de apendizado

Complementando o item anterior, este é outro motivo que faz programadores desistirem do desenvolvimento orientado a testes. Como qualquer nova tecnologia, para a pratica de TDD leva-se um bom tempo dependendo disponibilidade e principalmente da vontade do programador.

Pode ser difícil no início se adaptar a essa metodologia de trabalho, mas seguindo a regra de ouro conseguimos trabalhar de forma muito ágil e dinâmica, sempre prezando pela qualidade e simplicidade do código, então muitos utilizam ferramentas para auxiliar como por exemplo o PHPUnit mas isso é assunto para outro dia…

Porque aprender a programar?

**PS: nunca sei como se usa os “PORQUES ou POR QUE”

Apesar de parecer intimidante no começo, programar não é tão complicado como muitos pensam. Na verdade, da mesma forma como ler, escrever e fazer cálculos básicos, programação é como qualquer outra discuplina que você teve na escola.

Muitas pessoas pensam que programação é só para nerds, uns caras malucos que ficam o dia inteiro na frente do computador fazendo “não sei o quê”. Isso é natural, principalmente entre as pessoas mais velhas que cresceram sem o contato com a tecnologia atual. Tenho uma convicção de que daqui a uns 10 ou 20 anos, programação será ensinado nas escolas como uma coisa tão básica quanto ler, escrever e fazer cálculos básicos como soma, subtração, multiplicação e divisão.

aprender programação

SOFTWARE ESTÁ EM TUDO! Já parou pra pensar na quantidade de equipamentos que estamos diretamente em contato e que são controlados por softwares? Calculadoras, computadores, celulares, smartphones, tablets, óculos, relógios, internet, TVs, micro-ondas, geladeiras, caixa eletrônicos, linhas de produção, satélites, carros, impressoras (3D), letreiros digitais, drones, câmeras, semáforos, e mais um monte de coisa que eu ficaria horas (dias?) enumerando… Hoje em dia tudo a nossa volta tem “inteligência”. E tudo é controlado por … Softwares! Os dispositivos que são controlados por softwares estão por toda parte! Agricultura, manufatura, transporte, venda, agropecuária, medicina, etc. Atividades onde você menos imagina têm software! Isso tudo falando só do presente, deixo a sua imaginação livre para tirar suas próprias conclusões sobre o futuro.

Diferentemente do que muitos pensam, programação não é um monte de código que poucos conseguem entender. No fundo, programar é ensinar uma máquina a resolver problemas. Todos nós resolvemos problemas e tomamos decisões o tempo todo! Programação é uma forma de automatizar decisões e atividades dando comandos para que um equipamento eletrônico execute a tarefa autonomamente.

PROGRAMAÇÃO MELHORA O MUNDO!

Aprender programação é uma forma de descobrir um mundo novo cheio de possibilidades. A cabeça do programador ferve de ideias de softwares legais que se pode fazer. Eu me divirto muito programando. Sem contar da satisfação que é ver a cara do usuário ao usar pela primeira vez o software que você desenvolveu e que resolve o problema que ele tinha. É muito gratificante!

Hoje em dia com a possibilidade de criar softwares para dispositivos cada vez mais portáteis - smartphones, tables, óculos, relógios, etc – podemos utilizar informações que o usuário nem imagina que fornece, e criar softwares que auxiliam as pessoas em diferentes aspectos. Talvez você já tenha percebido o quanto é útil um software como o Waze, que mostra em tempo real, que a rua que você pretendia passar está congestionada por causa de um acidente de trânsito. Aliás, num futuro (não tão distante) da tecnologia os softwares poderão ser secretários pessoais superinteligentes (Olá a skynet ai! =P!) a nossa volta ser controlado por softwares.

Já pensou em aprender a programar?

2014 é o Ano do Código!

Dedique-se ao conhecimento

Seja em qualquer linguagem de computador, do HTML simples ao complexo C , saiba que programar exige dedicação, não só para a tecnologia, mas para as alterações dessa tecnologia. Há uma razão para saber que você está utilizando HTML5: quando o HTML6 surgir, você terá coisas novas para aprender. É assim que funciona. Para os preguiçosos de carteirinha, é uma má notícia: como a maior parte dos conhecimentos dessa área, tudo sempre dependerá de mais estudos para acompanhar a evolução e desenvolvimento dessas linguagens, e isso provavelmente é um ciclo interminável.

Ainda assim, “escrever um código” é uma expressão ampla. Algumas linguagens são mais fáceis do que outras. Algumas linguagens exigem uma compreensão de como o software “fala” com o computador. Como iremos ver mais para a frente, cada uma delas possuem suas características próprias. Mas a parte mais importante desse tipo de aprendizagem é sempre manter a mentalidade e a atitude correta.

Com tantos desafios, você deve estar pensando quais as possíveis razões para se lançar através do processo de aprendizagem de linguagens de programação, certo? Pois aqui vão algumas:

  • Para ganhar confiança: muitos pensam que se dominarem uma linguagem, vão se sentir menos intimidados pelo computador e pelo próprio estudo do desenvolvimento web. Embora isso seja uma meia verdade, poderá se tornar uma verdade absoluta se você se dedicar ao assunto.
  • Necessidade: quer você queira ou não, surgirão problemas técnicos no seu projeto. Problemas relativos a funcionalidade. E quando esses problemas aparecerem, eles necessitarão ser resolvidos. Aí não tem jeito: você vai ter de arregaçar as mangas para tentar resolvê-los. Faz parte da profissão, e evitar encarar essa verdade não vai fazê-la desaparecer.
  • A realização: algumas pessoas simplesmente gostam de aprender novas habilidades. Faz parte de seu desafio e seu gosto pessoal. Gostam de experimentar a sensação de poder superar um problema e atingir metas.
  • Para entender o que é possível: um desenvolvedor sempre tem em mente a expansão de seus conhecimentos para solução de novos problemas. Quer saber os limites que pode alcançar, as possibilidades do que pode ser feito com cada linguagem e utilizar toda a sua curiosidade e energia nisso.

Mantenha-se curioso

A curiosidade é uma virtude necessária para o conhecimento. Sem ela, muitas das invenções humanas não teriam saído da mente de grandes inventores e provavelmente você não estaria lendo este texto em uma tela de computador.

Todos nós possuímos curiosidade sobre diversas assuntos diferentes e em diferentes níveis. A curiosidade se baseia no desejo de aprender mais sobre um determinado assunto. Ela nos levou a explorar nosso mundo, e até mesmo além, como no caso da viagem á Lua e das futuras explorações planejadas á Marte. Ampliou nossa capacidade para curar nosso organismo e nos deu melhor compreensão sobre nossos próprios genes. O desafio é usá-la e desenvolvê-la para o próprio crescimento!

Pratique

A única maneira de aprender a codificar é praticar todos os dias. Como aprender qualquer nova habilidade, uma programação consistente com os objetivos gerenciáveis melhora gradualmente o desempenho ao ponto de especialização.

Não sobrecarregue sua mente

Ao aprender algo que você sente que o intimida você deve aprofundar-se, mas não exceder o seu limite. O aprendizado é uma fome. Seu cérebro tem um apetite por conhecimento, mas sobrecarrega-lo até o limite irá dificultar a sua capacidade de aprender, corroer a sua autoconfiança e matar sua vontade inicial.

Crie um horário fixo para os estudos e não deixe de fazer pausas entre seus aprendizados. Por pausas, entenda por dormir, comer ou conversar com outros seres humanos. Outra boa dica para não criar uma grande pressão sobre o seu aprendizado é misturar algo que você já aprendeu com algo que você ainda não sabe para estimular o conhecimento aos poucos e evitar frustrações.

Espero ter ajudado a estimular a sua vontade de aprender. Nunca é tarde para enfrentar novos desafios. e como dizia Optimus Prime:

Sem sacrifício não há vitória!