15 outubro 2014

Podcast nas ruas do Recife sobre relatos de experiências em desenvolvimento de software

"Bom dia, boa tarde e boa noite!" (inspirado no podcast do MacMagazine)

Estou criando alguns podcasts e estou chamando de carcast, já que a gravação do áudio está sendo feito durante meu deslocamento de carro pelas ruas da cidade do Recife (PE, Brasil). Sempre quis compartilhar um pouco da experiência que venho acumulando e achei interessante criar um podcast.



A ideia é falar sobre as experiências e das tecnologias que estou utilizando para desenvolver software no mercado de trabalho. Pontos de vista e lições aprendidas são comentadas. Quando achar pertinente,  escreverei um post no blog para citar os links e até mesmo, comentar mais sobre o assunto em questão.

Sinta-se convidado para ouvir os áudios e fazer comentários ou críticas.

09 outubro 2014

(LA) - Lições Aprendidas em projetos de software


O que é LA

“Lições Aprendidas” é “o conhecimento adquirido durante o projeto, que mostra como os eventos do projeto foram abordados ou devem ser tratados no futuro com o objetivo de melhorar o desempenho futuro” (PMBOK 5a Ed.).
Ouça o podcast que comento minha experiência usando o processo de LA em projetos de software. 




01 outubro 2014

O que aprendi com a programação hoje: dia 12 - ciclo de vida com Javascript

Esse post faz parte de uma série: o que aprendi com a programação, e tudo começou no dia 1

Entender o ciclo de vida de uma aplicação de software, é essencial para o desenvolvedor compreender como criar seus programas para a tecnologia desejada. Cada linguagem pode ter sua própria variação destes comportamentos, que chamamos de ciclo de vida do software. Neste post, vou mostrar minha percepção para aplicações em Javascript e o que eu aprendi com isso.

Ouça o podcast 6 (carinhosamente chamado de Carcast), para contextualiza-lo melhor sobre o tema deste post.




De forma genérica, de acordo com Wikipédia, o ciclo de vida pode ser definido:

"... o conjunto de transformações que podem passar os indivíduos de uma espécie para assegurar a sua continuidade."  (fonte)

Para um aplicativo, podemos considerar o ciclo de vida sendo uma abstração do conceito anterior, porém voltado para software. Portanto, teríamos uma definição:

"... um conceito fundamental do processo de Engenharia de Sistemas, ... onde se desenrolam todas as fases de desenvolvimento de sistemas artificiais, ou sistemas feito pelo homem, desde a concepção até a sua eliminação." (fonte)

De forma simples, o ciclo de vida do software é onde a execução do programa começa até chegar ao seu fim. Ou seja, o programa "tem vida", quando ele é alocado na memória RAM do dispositivo, e ele "morre", quando o mesmo é removido da memória. Este processo deve estar claro para você. Por exemplo, em Java temos a codificação do método main(), que representa o ponto de início e fim ao mesmo tempo.

Já em Android, embora utilizamos a linguagem Java, temos a classe Activity que define alguns métodos que trabalham em conjunto para fornecer um ciclo de vida (onCreate, onStart, onResume, onStop, onPause e onDestroy). Veja aqui para detalhes.

Inclusive já abordei aqui um post relacionado com ciclo de vida no Android: [Mudanças de perspectivas em aplicações Android: evite recriar a Activity]

O ciclo de vida em Javascript

Tudo começa quando o Browser carrega a página HTML. Se ela tiver declarado um bloco ou arquivo Javascript, então sabemos que a página foi carregada, portanto, foi criada. Assim, o ciclo de vida foi iniciado. Mas como saber se aplicação relacionada está "morta"?

Essa é a questão chave. Existem algumas formas de saber. Uma delas é tentar monitorar os eventos que ocorrem sobre a tela HTML no Browser, e caso algum evento de transição de tela ocorrer ou algumas ações na janela do navegador, tal com a operação de minimizada a tela, podemos inferir que alguma coisa ocorreu com a tela atual, podendo assim, deduzir chamadas para o ciclo de vida.

Uma alternativa que usamos aqui é representar uma estrutura de código que cheque quando os eventos da tela HTML ocorrerem, e assim, podemos inferir o ciclo de vida básico: INICIAR, PAUSAR, MORRER.



O exemplo acima demonstra um trecho de código Javascript no qual pode-se conferir o uso deste método. Vale notar que talvez Browser que não seja o Chrome pode não funcionar. Para testar abra uma aba nova e retorne ao exemplo.

Aprendi com essa experiência que podemos simular um ciclo de vida em aplicações Web que utilizam linguagem Javascript. Porém, existem limitações e nem todos os navegadores suportam o código acima.

Uma sugestão seria usar um bloco:

var doc = window.document;
  if (doc.hidden || doc.msHidden || doc.webkitHidden) {
    // possui a propriedade de visibilidade compatível com vários navegadores
  }