Mostrando postagens com marcador programação. Mostrar todas as postagens
Mostrando postagens com marcador programação. Mostrar todas as postagens

30 maio 2015

GitHub.com e o GIT

GitHub é um serviço de hospedagem de código público ou privado, que usa a tecnologia do GIT para a gestão dos códigos fontes. A tecnologia GIT é um sistema de controle de versão distribuído. Oferecer a infraestrutura do GIT como um serviço transparente aos desenvolvedores, de nível de escala mundial, através de um modelo de negócio pago ou gratuito, foi, ao meu ver, a grande sacada que tornou o GITHUB.com, um dos mais populares serviços oferecidos aos programadores.


Gravei um podcast para falar dele. Ouça se tiver interesse:



Durante o podcast, não pude explicar como usar o GIT, apenas citei alguns exemplos básicos. Vou sugerir que você procure um tutorial na internet. Eu indico o meu tutorial preferido logo abaixo, mas estou ciente que para aprender a usar o GIT, você precisará ir mais afundo.


Veja mais:

11 março 2015

Algoritmos e Lógica de programação: conhecimento essencial!

As linguagens de programação são excelentes formas de aprender a programar. Mas para se aventurar na programação é preciso do conhecimento básico e essencial: ALGORITMO.

Neste podcast falo sobre os Algoritmos e as suas formas de representações. Além do entendimento dos 4 comandos básicos essenciais: Entrada de dados; Saída de Dados; Processamento e Decisão.

E para não esquecer de nada: o que a lógica de programação tem haver com algoritmos e a programação?




Além disso, comentamos, em linhas gerais, sobre como as Linguagens de Programação fazem para converter os Algoritmos em linguagem de máquina, através das ferramentas Compiladores.

12 dezembro 2014

Desenvolvimento #iOS usando Objective-C e Swift / Storyboard vs. XIB file ?

Olá pessoal!

Desta vez vou divulgar aqui dois temas que discuti nos últimos podcasts produzidos no Carcast Programming sobre o desenvolvimento iOS. Abaixo o video onde especialistas debatem sobre usar Storyboard e XIB file no desenvolvimento de Apps.







Se quiser contribuir com o carcast, sugestões ou críticas, envie email para:



Storyboards vs NIBS vs Code Debate


23 setembro 2014

Iniciando em programação de forma divertida: code.org

Uma das coisas que mais gosto de fazer é ensinar a programação as pessoas. Imagine então, quando você encontra um site que tem esse propósito? :) O site code.org tem essa ideia e oferece uma oportunidade para aprender a programação, porém, de forma lúdica, ou seja, divertida.



Esse video acima mostra vários profissionais e pessoas conhecidas que falam da importância de aprender a programação. Eu já falei aqui no blog do porque isso é relevante [O que aprendi com a programação hoje: dia 6 - por que programar?], e não é somente eu quem está dizendo.

Estou utilizando o site do code.org para estimular alunos a gostarem da programação. Muitas vezes aprender a programar não é uma tarefa fácil para alunos, e nem para quem ensina. Mas quando tornamos o processo mais divertido: porque ELE pode SER assim, há bons resultados.



O vídeo acima demonstra um exemplo do que você pode encontrar no site indicado neste post.



Certificado de sucesso.
Ao final dos módulos, quando supera os desafios, você ganha o certificado e vai se sentir estimulado ir em frente ainda mais. :)

20 setembro 2014

O que aprendi com a programação hoje: dia 11 - liderando um time

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

Por mais técnico que possa parecer, a programação lhe permite aprender e exercitar aspectos que não são necessariamente técnicos, aprendizados que só se aprende fazendo, vivenciando o dia a dia: trata-se da liderança.

Como é liderar um time de desenvolvimento de software? Não existe uma resposta simples, mas me arrisco a falar um pouco do que estou aprendendo com essa experiência atual. Ouça o "carcast" 4 e tire as suas próprias conclusões.



Links citados no podcast:

- O Monge e o Executivo: https://www.youtube.com/watch?v=57t8MAYErqI
- Palestra sobre liderança na atualidade: http://pt.slideshare.net/mcmoraescosta/liderana-na-atualidade

16 setembro 2014

O que aprendi com a programação: dia 10 - integração com Facebook

Eu sempre quis implementar um aplicativo que faz integração com as redes sociais, mas ainda não tinha oportunidades de experimentar. Porém, tudo mudou quando precisei integrar nosso aplicativo com a rede social do Facebook.

A ideia deste post é mostrar, resumidamente, como você pode integrar o seu aplicativo ou site com a rede social do Facebook, compreender como realizar o login e como obter os dados do usuário da rede social, que precisam ser autorizados ao aplicativo para ter acesso as diversas informações disponíveis na conta.

Ouça o podcast para entender sobre alguns pontos importantes dessa integração com o Facebook usando um aplicativo ou site:



A primeira coisa que você deve fazer é registrar o seu aplicativo no site do desenvolvedor do Facebook, clicando na opção "Add a New App", e deste ponto em diante, as configurações vão depender da plataforma escolhida:

Escolha da plataforma do app. do Facebook
Para o exemplo deste post, escolhi a opção "Site". Então você terá que categorizar seu aplicativo de acordo com algumas opções pré-definidas, bastando clicar em um botão de Confirmação que seu aplicativo será criado.



O próximo passo o próprio Facebook exibirá uma tela com as próximas configurações que podem ser feitas. Haverá um código exemplo que pode ser testado no seu Website. O ponto aqui é observar a chave de acesso: AppId, que deve ser usada sempre que precisaremos acessar o Facebook para realizar o login e assim, obter os dados do usuário.

Configuração do aplicativo do Facebook com exemplos básicos

Logo abaixo da tela acima temos uma opção muito importante. Como escolhemos a plataforma web, temos que cadastrar o domínio do nosso Web site que desejamos utilizar a funcionalidade de login:

Configuração do site que pretende suportar o login

Com a configuração acima realizada, já podemos testar a funcionalidade do login no site cadastrado. Para isso,  selecione o produto "Facebook Login": https://developers.facebook.com/docs/facebook-login/v2.1 e copie o código exemplo que tem já. Tal como:








Não se esqueça de atualizar seu APP_ID no lugar correspondente. Ao acessar a página com o código acima, se clicar em login, o facebook irá realizar o login, porém, dependendo do seu User, vai exibir uma página de autorização. Se o usuário confirmar, então as resposta de sucesso ou falha serão chamadas usando a lógica demonstrada no exemplo acima.

Tela de autorização do usuário do Facebook após fazer o login
Esse processo é descrito na página do Facebook Development e deve ser entendido se você deseja realizar o login. Umas das mudanças da nova API 2.1, é que o usuário poderá rever as informações que o aplicativo está utilizando, podendo alterar ao acessar na opção "Reveja as informações que você compartilha".

Informações que o aplicativo usará antes do login do usuário

Podemos ver na tela abaixo o login sendo exibido. Para você testar, tente acessar a URL com o código citado anteriormente e acessando o aplicativo criado no Facebook para realizar login:
http://profdouglas.blogspot.com.br/p/login-test-facebook.html

Tela com o login sendo chamado
O que aprendi com o login do Facebook

Existem algumas diferenças quando tentamos acessar o login usando um aplicativo nativo (ex. Android, iOS e outros). Uma delas é que temos que possuir uma URL para redirecionar quando o login for feito com sucesso. Então, se você não tiver um server side (servidor) com um domínio registrado, pode-se utilizar uma URL temporária provida pelo próprio Facebook.

Neste caso, temos que acessar a tela de configuração do aplicativo, acessar a opção de "Settings/Advanced", procurando a opção "Valid OAuth redirect URIs" e adicionar a URL:
https://www.facebook.com/connect/login_success.html.

Desta forma, quando as requisições foram feitas pelo seu aplicativo nativo, após o usuário efetuar o login, o Facebook irá redirecionar para essa página e lhe enviar o Token com as credenciais aceitas. Eu encontrei neste site umas dicas de como implementar esse esquema para uma aplicação web nativa.

Outro aprendizado que me custou algum tempo para entender... o código de exemplo do Facebook talvez não funcione na sua página local ou no seu Browser. Lembre-se que esses códigos precisam estar executando em algum servidor web. Ou então os códigos podem não funcionar no browser Chrome por conta das restrições de segurança. Se testar no Firefox a probabilidade de que funciona aumenta. Além disso, procure exibir a tela de console para certificar que o fluxo previsto está sendo chamado.

12 setembro 2014

O que aprendi com a programação hoje: dia 9 - devtools e javascript


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

Um grande aprendizado que me permitiu rever os meus "preconceitos" com a linguagem javascript foi entender como testar o meu código usando o Browser, e foi a série do vídeo abaixo que me ajudou.

Recomendo assistir:



Depois de assistir esse vídeo comecei a compreender como fazer a depuração usando o ambiente DevTool, que inclusive me permiti escrever um post sobre ele aqui [dia 3].


04 setembro 2014

O que aprendi com a programação hoje: dia 7 - Parse.com

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

A plataforma Parse fornece uma solução de back-end completa para o um aplicativo móvel. Segundo a sua documentação, o objetivo do Parse é eliminar totalmente a necessidade de escrever código do servidor ou manutenção de servidores. Hoje vou abordar um pouco sobre essa tecnologia que permitiu validar uma funcionalidade de nosso projeto, no qual, dependia da infraestrutura de server side.

Para contextualizar, escute o áudio que preparei para que você entenda melhor o contexto da nossa necessidade em questão, pelo qual foi necessário encontrar soluções alternativas como serviços (SAAS).



A ideia é eliminar a dependência da infraestrutura de servidor para armazenar os dados dos diferentes clientes, que rodam nosso aplicativo em seus celulares. Com o Parse, podemos viabilizar essa estrutura com pouco esforço. O objetivo é minimizar a configuração e rapidamente começar a construir seu aplicativo com JavaScript e HTML5 em Parse.

Site do Parse.com com tradução Google Translate

Apps

Em Parse, você cria um aplicativo para cada um de seus aplicativos móveis. Cada aplicativo tem seu próprio ID e sua chave de cliente JavaScript, assim você poderá usar na sua aplicação web. Sua conta no Parse pode acomodar vários Apps. Isto é útil mesmo se você tiver um aplicativo, uma vez que você pode implantar versões diferentes para teste e produção.

Acesse o site do Parse, crie uma conta e cadastre seu aplicativo. Leia a documentação que ele possui para entender melhor.

Dependências

O JavaScript SDK do Parse, praticamente não necessita de quaisquer bibliotecas externas. A única exceção é a classe do Parse.View, que exige que você forneça jQuery ou jQuery compatível $ método.

Modelo de Objetos (Parse.Object)

Armazenamento de dados em Parse é construído em torno Parse.Object. Cada Parse.Object contém pares de chave-valores de dados JSON-compatíveis. Este dado é sem esquema, o que significa que você não precisa especificar de antemão que existem chaves em cada Parse.Object. Você simplesmente define qualquer pares de chave-valor que você quer, e a infraestrutura do Parse irá armazená-la.

Por exemplo, digamos que você está acompanhando altas pontuações para um jogo. Um único Parse.Object poderia conter:

pontuacao: 20500, nomeJogador: "Douglas Frari" , faseAtual: 3

As chaves devem ser sequências de caracteres alfanuméricos. Os valores podem ser strings, números, boleanos, ou mesmo matrizes e dicionários - qualquer coisa que pode ser JSON codificado.

Cada Parse.Object é uma instância de uma subclasse específica com um nome de classe que você pode usar para distinguir diferentes tipos de dados. Por exemplo, poderíamos chamar a pontuação mais alta como um objeto de nome GameScore.

Salvando objetos

Vamos dizer que você deseja salvar o GameScore descrito acima para o Parse Cloud. Poderia fazer assim:

var GameScore = Parse.Object.extend("GameScore");
var gameScore = new GameScore();
 
gameScore.set("score", 1337);
gameScore.set("playerName", "Sean Plott");
gameScore.set("cheatMode", false);
 
gameScore.save(null, {
  success: function(gameScore) {
    // Execute any logic that should take place after the object is saved.
    alert('New object created with objectId: ' + gameScore.id);
  },
  error: function(gameScore, error) {
    // Execute any logic that should take place if the save fails.
    // error is a Parse.Error with an error code and description.
    alert('Failed to create new object, with error code: ' + error.message);
  }
});


Recuperando os dados

Pode-se recuperar os objetos usando uma forma simples, porém, com muitas possibilidades para fazer filtros. Veja essa página com dicas: https://parse.com/docs/js_guide#objects-retrieving

 var GameScore = Parse.Object.extend("GameScore");
  query = new Parse.Query(GameScore);
  query.limit(10);
  // Sorts the results in descending order by the score field
  query.descending("score");

  query.find({
   success : function(results) {
    console.log("Successfully retrieved " + results.length
      + " scores.");
    // Do something with the returned Parse.Object values
    var object, i;

    for (i = 0; i < results.length; i++) {
     object = results[i];
     console.log(object.id + ' - '
       + object.get("playerName") + ': '
       + object.get("score"));
    }

   },
   error : function(error) {
    console.log("Error: " + error.code + " " + error.message);
   }
  });
 
Essa foi a dica do Parse.com, um serviço como alternativa a servidores externos.

Aprendi que esses serviços estão sendo muito usados por aplicativos móveis em Android e iOS, pois oferecem transparência e simplicidade aos desenvolvedores, reduz custos de desenvolvimento e eliminam a necessidade de manter um servidor externo. 

Além disso, não há preocupações com a hospedagem e manutenção desse server side. Mas nem tudo são flores. Para serviços externos mais complexos, talvez o Parse não seja tão interessante. Mas isso é tópico para se investigar por demanda em futuros posts.

03 setembro 2014

O que aprendi com a programação hoje: dia 6 - por que programar?

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

Hoje vou lembrar um aprendizado antigo, mas que continua me inspirando até hoje: a importância da programação. Foi após perceber que pela programação, através do seu processo intrínseco de criação, vários estímulos criativos são ativados em nossa mente, desafiando nossa imaginação e nos motivando a decifrar um problema.

Governo Britânico adota programação no currículo básico
O problema em questão é similar a um quebra-cabeças, nos desafia em certa medida, a ponto de tornar esse desafio uma coisa potencialmente promissora de se exercitar. É como praticar um esporte, quanto mais se faz, mais se desperta interesse a medida que ganhamos algo com isso. Na programação se usam muitos neurônios, talvez por isso que o café é bastante popular.

E se você pensa que isso é papo de programador, o que justifica alguns governos da Europa (britânico por exemplo), adotarem o ensino da programação tornando-a parte do currículo básico na formação educacional? Não é de hoje que isso vem acontecendo lá na Europa.

Vou mostrar alguns argumentos para tentar justificar a importância e necessidade de usar a programação agora.

O uso dos computadores, celulares e dispositivos eletrônicos em geral estão se tornando cada vez mais populares, pois são utilizados para diversos propósitos, tais como nas áreas do entretenimento, finanças, lazer, comunicação, etc. Os aplicativos assumiram um papel relevante para as pessoas.

A demanda por software tem alcançado níveis gigantescos. A área do conhecimento que contribui para agrupar os diferentes níveis do software é a programação. O profissional programador tem um papel relevante na criação do software e para tal requer conhecimentos de lógica de programação e algoritmos, além de compreender o uso das linguagens de programação.

A programação é considerada por especialistas da educação como uma extensão da língua, pois permite ao aprendiz desenvolver o raciocínio de forma sistemática e lógica, motivando a construção de relações com os outros campos do conhecimento humano. Escrever código engaja as pessoas em um novo caminho do pensamento. Elas aprendem a organizar, refinar e refletir sobre suas ideias.

As habilidades de programação permitem aos alunos "escreverem" novos tipos de coisas/pensamentos/conhecimentos - estórias interativas, jogos, animações e simulações. Consequentemente, há cada vez mais demandas da sociedade por pessoas ou profissionais que saibam "mexer"/programar com a criação de software.
No processo de aprender a codificar os programas os alunos aprendem muitas outras coisas. Eles não aprendem apenas a codificar, eles estão codificando o aprendizado. Aprendendo matemática e ideias computacionais (como variáveis e condicionais), eles estão aprendendo estratégias para resolver problemas, criando projetos e comunicando ideias. Essas habilidades são uteis não apenas para cientistas da computação, mas para qualquer um, independente da idade, conhecimentos prévios ou ocupação.
Esses foram apenas alguns dos argumentos que eu posso citar. Imagine quantas pesquisas estão sendo feitas e quanto potencial e demanda existe?

Uso de linguagens por idade e experiência (fonte)

Essa pesquisa mostra quais as linguagens estão sendo usadas, para quais grades escolares e para qual faixa de idade estão sendo usados para o ensino da programação. Não é legal?

Se você tem ouvidos e olhos,  veja com os próprios esses dois vídeos. O primeiro é de um garoto que foi apresentar no TED a sua experiência com a programação. O segundo é um depoimento de Bill Gates sobre coisas que não lhe dizem na escola.


A importância de aprender a programar




11 coisas que não se aprende na escola




02 setembro 2014

O que aprendi com a programação hoje: dia 5 - persistência em Javascript

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

Imagine como seria usar um sistema que não guardasse suas informações? Ao tentar acessar seus dados e sempre que você quisesse manipular uma informação, se não estivessem armazenados, você teria que cadastrá-los antes de utilizá-los. Isso seria possível, porém bastaria reiniciar o sistema que haveria necessidade de repetir o processo anterior. Portanto, guardar informações em um sistema, tecnicamente chamada de persistência, é uma funcionalidade essencial em qualquer programa.



Um dos primeiros tablets que eu me lembro e que foram lançados no mercado, isso se podemos considerá-lo tablet, chamado Palm, possuía vários recursos interessantes para sua época, tal como uma caneta, tela com toque, programas de agenda e aplicativos com ênfase em produtividade (tais como notas, calculadora, calendário, ...). No entanto, se a bateria descarregasse, as informações previamente escritas seriam perdidas. (só os primeiros modelos) Não demorou muito para uma solução ser proposta como uma memória externa para permitir manter os dados persistentes. É claro que a experiência mostrou que esse tipo de funcionalidade deve ser integrada de forma transparente aos usuários, ou seja, deve ser utilizado de forma natural, sem que o usuário perceba, assim como você utiliza a sua memória cerebral para guardar informações.

Os programas feitos para internet usando HTML e tecnologias para Web, têm propostos diferentes abordagens para realizar uma forma de persistência. Cada linguagem propõe diferentes mecanismos. Talvez a mais simples e conhecida seja aquela abordagem de HTML, usando os chamados Cookies. Estes são apenas um conjunto de dados agrupados na representação de chave e valor, no qual a chave é uma forma de associar a informação e o valor é a própria informação propriamente dita. Essa informação é gerenciada usando o Browser do usuário e tem sido usado até hoje pela simplicidade. Porém, em termos de segurança podemos questionar o seu uso.

A proposta dos Cookies são simplicidade para armazenar e recuperar a informação quando necessário. O grande problema, talvez seja porque se diferentes browsers forem utilizados, em diferentes sistemas operacionais, por diferentes plataformas de hardware, temos uma necessidade de utilizar as linguagens de programação e suas tecnologias de banco de dados. Mas neste caso, para onde vai nossa simplicidade?

Neste sentido, o armazenamento de persistência em HTML 5 não se propõe a resolver o problema do parágrafo anterior, mas tornar ainda mais simples a forma que o Cookie propôs, ou seja, manter a possibilidade para registrar dados usando chave e valor. Só que agora, na minha opinião, usando de forma padrão para que todos que desejarem usar HTML utilizem uma maneira em comum de se fazer isso, permitindo maior compatibilidade e reuso.

Em HTML 5 podemos escolher persistir a informação em duas áreas: área de sessão e a área local.

A área de sessão mantém os dados salvos em memória RAM enquanto a sessão do navegador estiver ativa. No momento que o Browser é fechado os dados armazenados nesta área serão apagados automaticamente. Na prática os dados irão para o "céu dos computadores".

Já a área chamada de local, os dados poderão permanecer persistentes após o Browser ser fechado. Isso permite manter e recuperar os dados associadas a chaves específicas. Então se você precisa salvar os dados e recuperá-los quando a sua página é carregada, use essa área, tecnicamente conhecida como localStorage.

Vejamos um exemplo de trecho de código Javascript para fazer a persistência usando um método setar(minhaChave,meuValor):

 function set(key, data) {
  if (window.hasOwnProperty('localStorage')) {
   window.localStorage.setItem(key, data);
  }
 }


A dinâmica dessa verificação é simples. A função set(key,data) possui dois parâmetros com a chave desejada e um valor para associar com essa chave. O bloco da condição IF verifica se o atual usuário já possui a área de local disponível para ser utilizada. Caso afirmativo, podemos usar o atributo do objeto window.localStorage invocando a função setItem(...).

 function get(key) {
  if (window.hasOwnProperty('localStorage')) {
   return window.localStorage.getItem(key);
  }
 },


A forma para recuperar a informação é ainda mais simples. Só precisamos saber qual a chave que contém os dados associados com a chave apropriada. O cuidado aqui é criar chaves específicas para informações específicas. Evite nomes de chaves complicados ou com caracteres especiais. Pense em um nome de variável para renomear suas chaves.

Uma estrutura que achamos interessante utilizar e poderia ser usado através de um arquivo Javascript chamado persistencia.js:

var Persistencia = {

 property : 'localStorage',

 set : function(key, data) {
  if (window.hasOwnProperty(Persistencia.property)) {
   window.localStorage.setItem(key, data);
  }
 },

 setHash : function(key, data) {
  Persistencia.set(key, JSON.stringify(data));
 },

 get : function(key) {
  if (window.hasOwnProperty(Persistencia.property)) {
   return window.localStorage.getItem(key);
  }
 },

 getHash : function(key) {
  var data = Persistencia.get(key);

  if (data) {
   return JSON.parse(data);
  }
 },

 remove : function(key) {
  if (window.hasOwnProperty(Persistencia.property)) {
   window.localStorage.removeItem(key);
  }
 },

 clear : function() {
  if (window.hasOwnProperty(Persistencia.property)) {
   if (localStorage.length > 0) {
    localStorage.clear();
    console.log("clear function");
   }
  }
 }

};



Implementação da persistência


Que tal um pouco de prática?

Vamos complementar nosso exemplo de animação anterior e adicionar uma informação de forma persistente. Contar a quantidade de cliques na tela e manter essa informação persistente na área local. Assim, no momento que acessar o HTML da animação do nosso exemplo, a última atualização realizada deverá ser exibida na tela. Caso desejar resetar o valor atualmente persistente, pode utilizar o comando abaixo usando a ferramenta DevTools, na área de Console:

localStorage.clear();

Para baixar todos os arquivos com seus códigos fontes acesse aqui.

A imagem ao lado demonstra a execução do arquivo Bola.html que pode ser baixado, junto com os demais arquivos, no link indicado acima.

Se você tiver alguma sugestão de tópico, sugestão ou crítica, fique a vontade para comentar ou solicitar aqui.

01 setembro 2014

O que aprendi com a programação hoje: dia 4 - sons em Javascript

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

Se você está fazendo um jogo ou pretende fazê-lo, ou simplesmente está com curiosidade em saber do que se trata, considere compreender como adicionar efeitos sonoros no seu aplicativo ou game, pois a experiência do usuário fica bem melhor. Neste pequeno post vou mostrar como usar os sons, pois com a linguagem Javascript, tudo fica super simples.

Para tocar uma música ou som, você precisa ter um código Javascript que rode algo como isso:

var audio = new Audio('audio.mp3');
audio.play();


Considerando o exemplo publicado no post do dia 2, sobre animação, que tal adicionar uns efeitos para entender como se faz na prática? Podemos adicionar um tema musical, no qual ficará sempre tocando, além de alguns efeitos sonoros de acordo com o desejado. Neste caso vou demonstrar o efeito de um click na tela, que junto animação da bola, vai tocar efeito sonoro a cada click.

var Sound = {

 init : function() {
  Sound.audio = new Audio('main_theme.mp3');
  Sound.audio.loop = true;
  Sound.play();
 },

 play : function() {
   Sound.audio.play();
 },

 resetAndPlay : function() {
  Sound.audio.currentTime = 6;
  Sound.play();
 },

 pause : function() {
  Sound.audio.pause();
 },

 playSound : function(sound) {
   var audioFile, audio;
   audioFile = sound;
   audio = new Audio(audioFile);
   audio.play();
 },

 playClick : function() {
  var audio = "smb_kick.wav";
  Sound.playSound(audio);
 },

 gameOver : function() {
  Sound.pause();
  var audio = "smb_gameover.wav";
  Sound.playSound(audio);
 },

};

Sound.init();



O código é relativamente simples. Em Javascript temos o objeto Audio, e neste temos alguns controles padrões, tais como: loop do áudio e currentTime. O loop podemos configurar para tornar a música repetitiva quando ela acabar. Enquanto que em currentTime podemos configurar para a música começar a partir de um determinado intervalo de tempo.

Podemos criar funções para tocar ou pausar os sons específicos. Vários formatos de arquivos são suportados pelo Browser. Eu já testei com MP3, WAV e OGG. Todos funcionaram. É importante destacar que se uma música está em execução, e você desejar tocar outra, basta chamá-la que o novo som vai tocar em paralelo com o atual. Se desejar parar ou pausar a música atual, pode chamar o método pausar. Para estudar melhor sobre sons em Javascript de uma olhada neste link.

Vejamos como o jogo principal foi atualizado para possuir as chamadas do sound.js pelo arquivo bola.js:

var Animacao = {
 // variaveis globais
 CANVAS : null,
 CONTEXT : null,
 bola : null,
 emProcessoAnimacao : false,
 contadorAnimacao : 0,

 // inicializa a Animacao
 init : function() {
  // variaveis de canvas
  Animacao.CANVAS = document.querySelector(".canvas");
  Animacao.CONTEXT = Animacao.CANVAS.getContext("2d");

  // registra eventos
  Animacao.addEventListeners();


  bola = new Bola(0,0);
  bola.init();

  setTimeout(Animacao.pintar,100);


 },

 // limpa a tela
 clearCanvas : function() {
  Animacao.CONTEXT.clearRect(0, 0, Animacao.CANVAS.width, Animacao.CANVAS.height);
 },

 // registra eventos
 addEventListeners : function() {
  Animacao.CANVAS.addEventListener("click", Animacao.clickAnimacaoHandler);
 },

 clickAnimacaoHandler : function(e) {

  Animacao.emProcessoAnimacao = true;

  // SOM de click
  Sound.playClick();

  Animacao.pintar();
 },

 pintar : function() {

  // desenha a Animacao aqui
  Animacao.clearCanvas();

  // atualizar posicao e pintar objeto
  bola.update();
  bola.draw();


  // se objeto saiu da tela
  if (bola.y > Animacao.CANVAS.height) {

   console.log("Animacao saiu da tela -> gameOver");

   bola.y = 0;
   bola.draw();

   // SOM de game over

   Sound.gameOver();
   setTimeout(Sound.resetAndPlay,4000);
  }

  // chamar novamente o metodo (pelo menos 5 vezes)
  if (Animacao.emProcessoAnimacao) {

    Animacao.contadorAnimacao++;

    if (Animacao.contadorAnimacao >= 5) {
     Animacao.contadorAnimacao = 0;
     Animacao.emProcessoAnimacao = false;

    } else {

     // repintar a tela novamente
     requestAnimationFrame(Animacao.pintar);
    }
  }
 },

};


function Sprite(image) {
 this.image = new Image();
 this.image.src = image + ".jpg";

 this.draw = function(x, y) {
  Animacao.CONTEXT.drawImage(this.image, x, y);
 };
}

function Bola(x, y) {
 this.x = x;
 this.y = y;
 this.clicked = false;
 this.sprite;

 this.init = function() {
  this.sprite = new Sprite("bola");
 };

 this.update = function() {

  this.y += (this.sprite.image.height/10);

 };

 this.draw = function() {
  this.sprite.draw(this.x, this.y);
 };

 this.click = function() {
  this.clicked = true;
  this.draw();
 };

 this.animate = function() {
  this.type.sprite.animate();
 };

}


// o javascript vai carregar esse metodo a cada refresh no browser
window.onload = Animacao.init;



Baixei alguns sons prontos que encontrei em uma busca na internet. No entanto, tenha cuidado para não sair copiando da internet qualquer som que você achar legal, pois há licenças proibitivas (copyrights), e que podem não estarem autorizados pelos detentores da propriedade intelectual. Para fins de testes, eu copiei as músicas do Mário neste site. Se desejar publicar, recomendo utilizar sons de domínio público ou produzir seus próprios.

Um detalhe importante: se deseja fazer diferentes partes do código Javascript chamarem os sons específicos, garanta que o arquivo sound.js seja declarado no HTML antes dos demais Javascripts para que sejam reconhecidos.



 
 Bola



 

início

This browser is not supported

fim


Aprendi com a programação para tratamento de sons usando Javascript que é muito simples de usá-los. Percebi também que o mais difícil não é fazê-los tocarem, mas encontrar um som de nosso agrado. O ideal seria produzir os próprios sons. Mas isso também envolve um custo adicional. 

Para baixar todos os arquivos com seus códigos fontes acesse aqui.

Que tal usar persistência em Javascript/HTML 5. De forma simples poderemos salvar dados do usuário e tornar nosso aplicativo bem mais "inteligente". No próximo post vou tentar explicar como gravar dados.


28 agosto 2014

O que aprendi com a programação hoje: dia 2 - animação em Javascript

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

Estou contribuindo em um projeto no qual estamos utilizando animações visuais para compor a mecânica de um jogo. Essas animações, produzem alguns efeitos que são exibidas durante a execução do jogo.

Em projetos que desenvolvemos usando a linguagem de programação Javascript, normalmente, o fazemos para aplicações voltadas para Web, ou seja, a interface visual vai rodar dentro do navegador de internet (browser). Possivelmente, você já deve ter visto algum jogo dentro do Facebook ou aplicativos que se integram na tela da rede social. A grande parte desses jogos e aplicativos que rodam pelo browser, são integrados lá e utilizam as tecnologias HTML 5 e CSS, além da linguagem Javascript, que permite integrar essas partes.


Aprendi a criar uma animação usando HTML usando Canvas do Javascript e vou tentar explicar como funciona uma animação usando essa linguagem, assim como, tentarei listar algumas dicas do que foi feito para resolver alguns problemas encontrados e que estão relacionados com animação.

A primeira coisa que você deve saber é que um Canvas é uma área de desenho. Neste espaço chamado Canvas, você poderá exibir um objeto qualquer, esse objeto será posicionado dentro de um sistema cartesiano (vide figura), e pode ter uma cor sólida ou baseado em uma imagem pronta. Dentro da área do Canvas o browser irá desenhar através de um processo de pintura, onde serão definidas as posições que os objetos devem ser exibidos em coordenadas x e y.

Para mais informações, acesse uma ótima referência sobre Canvas neste site: http://diveintohtml5.com.br/canvas.html





Um exemplo de arquivo bola.html




Bola



 

header

This browser is not supported

footer


Se quisermos desenhar um objeto usando Canvas podemos fazer de diferentes formas, porém, percebi junto a minha equipe que uma forma intuitiva para nós foi adotar uma representação na estrutura do código Javascript, tal como usamos as classes na linguagem Java. Vejamos o exemplo:

Exemplo de aquivo javascript chamado bola.js

var Animacao = {
 // variaveis globais
 CANVAS : null,
 CONTEXT : null,
 bola : null,

 // inicializa a Animacao
 init : function() {
  // variaveis de canvas
  Animacao.CANVAS = document.querySelector(".canvas");
  Animacao.CONTEXT = Animacao.CANVAS.getContext("2d");

  // registra eventos
  Animacao.addEventListeners();


  bola = new Bola(0,0);
  bola.init();

  setTimeout(Animacao.pintar,100);


 },

 // limpa a tela
 clearCanvas : function() {
  Animacao.CONTEXT.clearRect(0, 0, Animacao.CANVAS.width, Animacao.CANVAS.height);
 },

 // registra eventos
 addEventListeners : function() {
  Animacao.CANVAS.addEventListener("click", Animacao.clickAnimacaoHandler);
 },

 clickAnimacaoHandler : function(e) {

  console.log("clique da Animacao aqui");

  Animacao.pintar();

 },

 pintar : function() {

  // desenha a Animacao aqui
  console.log("animar aqui");

  if (bola) {

   Animacao.clearCanvas();

   bola.update();
   bola.draw();

  }

 },

};


function Sprite(image) {
 this.image = new Image();
 this.image.src = image + ".jpg";

 this.draw = function(x, y) {
  Animacao.CONTEXT.clearRect(x, y, this.image.width, this.image.height);
  Animacao.CONTEXT.drawImage(this.image, x, y);
 };

 this.animate = function() {
  // TODO animate here
  console.log("animar o item durante seu deslocamento");
 };
}

function Bola(x, y) {
 this.x = x;
 this.y = y;
 this.clicked = false;
 this.sprite;

 this.init = function() {
  this.sprite = new Sprite("bola");
 };

 this.update = function() {

  this.y += (this.sprite.image.height/5);

 };

 this.draw = function() {
  if (this.clicked) {
    console.log("foi clicado");
    this.animate();
  }

  this.sprite.draw(this.x, this.y);
 };

 this.click = function() {
  this.clicked = true;
  this.draw();
 };

 this.animate = function() {
  this.type.sprite.animate();
 };

}


// o javascript vai carregar esse metodo a cada refresh no browser
window.onload = Animacao.init;


Note que esse arquivo representa a estrutura do Javascript para representar o conceito da Bola, bem como, um conceito de Sprite (herança de Java ME), onde podemos criar esse objeto para representar a imagem desejada, com seu x e y, um método para desenhar na tela e outro para atualizar suas posições.

Essa representação proporcionou reusar o código de forma legível para nossa equipe. Permitiu por exemplo, que qualquer função possa ser executada simplesmente invocando o nome da estrutura e sua função.

Como que animação de nossa bola funciona em nosso código Javascript?

Assumindo que animação ocorra a cada click sobre a bola, posso programar um evento que mude a posição do Sprite x e y, alterando seus valores e mandando o Canvas pintar a tela novamente. Quando o Canvas pintar a tela, as posições x e y da bola já foram alteradas para novas posições de acordo com uma direção desejada e portanto, vai ser mostrado após a nova pintura da janela, outra bola em um ponto da janela diferente da interior.

Esse efeito produz uma percepção ao usuário que chamamos de animação. Porém, para esse efeito ser considerado uma animação, tem que parecer um deslocamento parecido com o que ocorre com uma bola real. Para que o efeito fique mais parecido com o mundo real é necessário diminuir o intervalo de deslocamente do x e y, além de aumentar a quantidade de pinturas deste objeto no Canvas. Existe uma relação conhecida chamada Frames/segundos. Essa relação pode ser considerada em seu algoritmo para tornar o efeito de pintura repetitivo e constante, dando a impressão que existe realmente uma bola se movendo. Isso sem considerar efeitos da física, tal como os jogos modernos exploram muito bem.

Portanto, a cada click do mouse eu desejo que a bola se desloque de um ponto a outro. Alguns problemas podem ser notados nessa animação. Ela não está parecendo uma animação. :) Chamamos isso de animação com fluidez no seu efeito perceptível pelo usuário. Quanto mais próximo do mundo real, melhor. Mas sabemos que temos limitações óbvias, tais como:
  • poder computacional para explorar cálculos matemáticos;
  • experiência dos desenvolvedores que estão acostumados a fazerem aplicativos tradicionais e que, geralmente, não requerem fazer animações específicas;
  • um objeto, quando desenhado e visto de uma perspectiva 2D tem diveras percepções de acordo com o seu desenho, mas para parecer uma animação fluida, haveria necessidade de desenha-lo em diversos ângulos (frame a frame), para cada movimento desejado. Imagine uma animação dos cabelos do ser humano. Quantas possibilidades de diferentes maneiras posso representar dependendo da direção do vento? Quanto mais próximo do real, mais difícil de representar; 

O que podemos fazer para tornar a animação um pouco melhor?

Estudar técnicas de animação 2D é um bom começo. Existem diversos framework para JavaScripts que prometem simplificar o uso de animações. Porém, decidimos tocar o projeto com a linguagem Javascript nativamente porque precisávamos aprender melhor essa linguagem e acreditamos que o esforço de fazer desta forma  compensaria porque absorveríamos maior entendimento. De fato isso se concretizou.

Então recomendo que quando haver necessidade de fazer algo usando a linguagem pura ou usar algo pronto, considere avaliar o seu caso em relação a produtividade vs. aprendizado. Precisávamos aprender a linguagem porque acreditávamos que teríamos outras dificuldades, caso a base do conhecimento essencial não estivesse bem desenvolvida previamente. Usar a linguagem pura, nos permitiu desenvolver melhor nossas habilidades. Hoje porém, poderemos considerar utilizar frameworks de terceiros, de forma mais segura, sobre o que realmente precisamos para nosso problema atual.

Mas voltando ao foco da pergunta, podemos melhorar animação, e de fato melhoramos fazendo o deslocamento do x e y com intervalos menores e pinturas mais constantes do Canvas. Considerando que o desenho da imagem da bola possua 180 pixel de largura e altura, pode-se dividir em 5 partes, e para cada parte fazer um pintura.

Então, no caso de desejar fazer a bola descer a cada click, pode:

var Animacao = {
 // variaveis globais
 CANVAS : null,
 CONTEXT : null,
 bola : null,
 emProcessoAnimacao : false,
 contadorAnimacao : 0,

 // inicializa a Animacao
 init : function() {
  // variaveis de canvas
  Animacao.CANVAS = document.querySelector(".canvas");
  Animacao.CONTEXT = Animacao.CANVAS.getContext("2d");

  // registra eventos
  Animacao.addEventListeners();


  bola = new Bola(0,0);
  bola.init();

  setTimeout(Animacao.pintar,100);


 },

 // limpa a tela
 clearCanvas : function() {
  Animacao.CONTEXT.clearRect(0, 0, Animacao.CANVAS.width, Animacao.CANVAS.height);
 },

 // registra eventos
 addEventListeners : function() {
  Animacao.CANVAS.addEventListener("click", Animacao.clickAnimacaoHandler);
 },

 clickAnimacaoHandler : function(e) {

  Animacao.emProcessoAnimacao = true;
  Animacao.pintar();
 },

 pintar : function() {

  // desenha a Animacao aqui
  Animacao.clearCanvas();

  bola.update();

  bola.draw();

  // chamar novamente o metodo (pelo menos 5 vezes)
  if (Animacao.emProcessoAnimacao) {

    Animacao.contadorAnimacao++;

    if (Animacao.contadorAnimacao >= 5) {
     Animacao.contadorAnimacao = 0;
     Animacao.emProcessoAnimacao = false;

    } else {

     // repintar a tela novamente
     setTimeout(Animacao.pintar,50);
    }


  }


 },

};


function Sprite(image) {
 this.image = new Image();
 this.image.src = image + ".jpg";

 this.draw = function(x, y) {
  Animacao.CONTEXT.drawImage(this.image, x, y);
 };
}

function Bola(x, y) {
 this.x = x;
 this.y = y;
 this.clicked = false;
 this.sprite;

 this.init = function() {
  this.sprite = new Sprite("bola");
 };

 this.update = function() {

  this.y += (this.sprite.image.height/10);

 };

 this.draw = function() {
  this.sprite.draw(this.x, this.y);
 };

 this.click = function() {
  this.clicked = true;
  this.draw();
 };

 this.animate = function() {
  this.type.sprite.animate();
 };

}


// o javascript vai carregar esse metodo a cada refresh no browser
window.onload = Animacao.init;


animação fica mais fluída
Note o uso da função  do Javascript: setTimeout(tempo_mili_segundos), essa função permite que possamos agendar um intervá-lo de tempo em mili segundos e passar como argumento  qual função desejamos chamar. Assim podemos chamar a função pintar() constantemente para garantir as 5 pinturas desejadas.

Se você atualizar o código e executar em seu browser, poderá perceber como a animação agora parece mais uma decida um pouco mais suave. Quanto mais suave, em teoria é melhor para a percepção do usuário.
Para baixar os arquivos clique aqui.





Na próxima dica falarei como podemos setar as ferramentas envolvidas de desenvolvimento e como foi o nosso aprendizado da preparação do ambiente de programação Javascript e sua forma de execução no browser. Essa foi uma das melhores sensações que tive do atual estado de ferramentas Javascript, e fiquei extremamente surpreso o quanto foi "fácil" acompanhar a execução, inclusive usando a depuração em tempo real.

18 maio 2013

5 perguntas + 1 sobre o desenvolvimento Android

Participei do evento Startup Developer Day, realizado no Recife (18/maio/2013) onde falei um pouco sobre possibilidades no desenvolvimento para Android.

 


Os slides eu coloquei aqui:




A mensagem que quis deixar foi que podemos descobrir as respostas se construirmos nossas próprias perguntas, sabendo que, AGIR é colocar em prática isso tudo.


Referências indicadas:



05 abril 2013

Polimorfismo - parte 1: programação orientado a objetos com Java

Neste post abordaremos o conceito de programação orientada a objetos conhecido como Polimorfismo. Como aplicar o conceito na prática usando a linguagem Java. Para entendermos estou organizando alguns vídeos para ilustrar melhor duas formas de utilização:
  1. Usando as classes da linguagem Java de algumas bibliotecas que já estão disponíveis;
  2. Construir nossos próprios tipos e então entender como tirar proveito do Polimorfismo.
Neste pequeno artigo veremos o primeiro caso.

Polimorfismo precisa ter uma hierarquia de classes com herança. Fonte imagem 


De acordo com a Wikipédia (fonte), podemos considerar o conceito de Polimorfismo:


"Na programação orientada a objetos, o polimorfismo permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Assim, é possível tratar vários tipos de maneira homogênea (através da interface do tipo mais abstrato). O termo polimorfismo é originário do grego e significa "muitas formas" (poli = muitas, morphos = formas).

O polimorfismo é caracterizado quando duas ou mais classes distintas tem métodos de mesmo nome, de forma que uma função possa utilizar um objeto de qualquer uma das classes polimórficas, sem necessidade de tratar de forma diferenciada conforme a classe do objeto.[1]"


Vejamos o exemplo que fiz no vídeo:






import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;


public class Polimorfismo_parte1 {

 /**
  * POLIMORFISMO (aula pr‡tica - parte 1)
  * 
  * Objetivos:
  * 
  * 1) Entender o conceito de Polimorfismo na pr‡tica
  *    usando as classes j‡ existentes no Java
  * 
  * @author Douglas Frari
  * @see http://profdouglas.blogspot.com
  */
 
 
 public static void main(String[] args) {
  
  ArrayList lista1 = new ArrayList();
  List lista2 = new ArrayList();
  List lista3 = new LinkedList();
  
  
  lista1.add("Elemento 1");
  lista1.add("Elemento 2");
  lista1.add("Elemento 3");
  
  
  lista2.add("Elemento 1.1");
  lista2.add("Elemento 2.1");
  lista2.add("Elemento 3.1");
  
  lista3.add("Elemento 1.1.1");
  lista3.add("Elemento 2.1.1");
  lista3.add("Elemento 3.1.1");
  
  // imprimir elementos
  imprimirLista(lista1);
  imprimirLista(lista2);
  imprimirLista(lista3);
  
 }
 
 static void imprimirLista(final List lista) {
  
  for (String itemLista : lista) {
   System.out.println(itemLista);
  }
  
 }
 
 
 
}


Conclusões

O conceito de polimorfismo em programação orientada a objetos é bastante útil para compreender como os objetos podem assumir diferentes responsabilidades no programa, dependendo de como foram declarados e como são instanciados pode-se reusar estruturas e operações. O resultado disso pode não ser tão útil assim, mas é. Quando se entende o conceito começamos a pensar de forma a favorecer o reuso e assim minimizamos a quantidade de linhas de código programáveis.

30 agosto 2012

Aprenda a depurar (debugging) seu programa Java no Eclipse

Alguns anos atrás fiz um post relacionado sobre o processo de depuração no Eclipse. Desta vez resolvi criar uma vídeo aula para exemplificar o processo passo a passo.



No contexto de programação como podemos entender o que é a depuração e como fazê-la acontecer na prática? Quase sempre quando trabalho com novas turmas vejo uma grande maioria dos alunos ainda não utilizou esse precioso recurso do programador. O objetivo deste post é dar uma noção básica e mostrar como fazer na prática usando a IDE Eclipse. (fonte do post original Depuração no Eclipse (debugger))






Em resumo, depuração (do inglês debugging) é um processo de acompanhamento do programa a fim de acompanhar o fluxo de execução passo a passo, seguindo as linhas de codificação do ponto inicial até o ponto final do algoritmo que está sendo interpretado pelo computador.

Minha percepção do porquê depurar o código... 

Podemos acompanhar o ciclo de vida do aplicativo (do início ao fim), procurando verificar o valor de variáveis, de expressões, acessando métodos entre outras possibilidades.


"Na minha opinião a principal vantagem é permitir o acompanhamento em tempo real. Já resolvi muitos bugs em menor tempo por utilizar esse recurso. Na prática, percebemos nosso erro de lógica quando podemos entender o que o computador está fazendo em determinada situação. A maioria das vezes o erro é do próprio programador que não previu determinada situação. Ao perceber isso, com ajudada da depuração, temos mais probabilidade de corrigir o bug alterando a lógica do programa."

21 agosto 2012

Instalação e configuração do emulador Android SDK (com plugin ADT do Eclipse)


Neste post abordarei sobre a instalação do Android SDK e a instalação do plugin ADT para desenvolver com a IDE Eclipse, bem como algumas dicas para atualizações automáticas dos seus componentes.



Pré-requisitos para instalação e configuração dos ambientes:
1) Eclipse IDE (versão + recente) - usei a JUNE 4.2 de 32 bits;
2) Android SDK (versão + recente);
3) JDK 1.6 ou superior;
4) JRE (no path do SO)
5) Página com instruções para instalação do Plugin ADT

Configurações mínimas do hardware e software do sistema operacional

(1) Requisitos de sistema (fonte)


Inicialmente você deve baixar todos os programas indicados acima. Pode ser que você já tenha o interpretador Java (JRE), entretanto, vai precisar o JDK para programar para Android. Veja a figura (1) destacando que não basta a JRE.

Siga as dicas do vídeo ou então siga os passos seguintes:


  • Baixe o Eclipse IDE [pré-requisito é o item (1)];
  • Baixe e instale o Android (no caso do Mac OS é apenas um zip);
  • Rode o Eclipse e instale o plugin ADT (URL download abaixo):
https://dl-ssl.google.com/android/eclipse/
  • Baixe os pacotes do emulador Android (siga essas dicas);
  • Configure o Eclipse para fazer checagem automáticas de atualizações do plugin (veja o vídeo acima)
  • Crie um atalho para um emulador AVD (Android Virtual Device) (dicas aqui);
  • Rode o programa usando o Eclipse


Série: Android Dicas (no youtube)
Este vídeo faz parte de uma série que estou fazendo sobre dicas Android (no YouTube). O link da série está aqui. http://www.youtube.com/playlist?list=PL5EFD4E0D0D24F43E

09 agosto 2012

Criando atalhos para geração de LOGs no Android usando templates do editor de código da IDE Eclipse


Este post objetiva compartilhar uma dica simples para geração de logs, que permitiu aumentar a produtividade na programação durante a realização desta atividade. Trata-se do uso do editor de templates do Eclipse para geração de código automático (famoso Ctrl+space+template



Tenho hábito e prática de utilizar logs na programação. De forma simples, isso nada mais é do que prover uma saída de dados textual na tela do console para visualizar o fluxo atual em execução no programa. Assim, podemos de forma rápida comprovar nossas hipóteses que o algoritmo está se comportando exatamente como o imaginamos. J Isso não é lindo? Para termos certeza que tudo vai correr bem é necessário fazer esse tipo de processo de validação N vezes até que tenhamos certeza absoluta que vai funcionar.

Geralmente através de testes de unidade, ou simplesmente para constatar se os comandos dados e as ordens programadas (formalmente escritas na forma de código fonte) foram percorridos como se esperava dentro do programa em execução, permitindo estruturar e validar o percurso do algoritmo e da lógica de programação como um todo. Dependendo da complexidade do software, podemos criar cenários não desejados – conhecidos como bugs. Nem tudo é perfeito minha gente! J

Percebo também que eu não sou o único que tem esse hábito de usar logs. Todos os programadores que conheço fazem isso.  Fazer logs é uma boa prática. No entanto, para fazê-lo precisamos escrever uma linha de código utilizando a criatividade, que varia de programador para programador. Se perder o controle e ficar criando log de tudo, pode poluir demasiadamente o código com comentários inúteis ou não mais necessários. Normalmente se usa algo como isso:

System.out.println(“*Classe*.metodo() - comentário opcional”);
System.out.println(“TelaCadastroCliente.salvar() – registrando dados ...”);

Na prática temos um exemplo concreto sem padrão algum, apenas para ver o valor da variável na saída:

public class Teste {
       static char caracter = 170;
      
       public static void main(String[] args) {
             
              System.out.println("valor = "+caracter);
              System.out.println("valor (int) = "+(int)caracter);
       }
}

Escrever a linha de comando System.out.println usando o Eclipse se torna fácil quando conhecemos o nome que chama o template para preenchimento automático. Por exemplo, se eu digitar “sysout + (Crtl+SPACE), o editor do Eclipse irá substituir a palavra “sysout” pelo comando System.out.println(), e ainda deixar o cursor dentro dos parênteses. Para quem não sabe você acabou de usar o template de código do editor Eclipse para códigos da linguagem Java. Isso não é show de bola? Os programadores sabem que isso torna o trabalho mais eficaz. Eu pelo menos me sinto muito animado quando uso editores assim.

Criando templates para geração de LOG automático para uso no emulador Android

O SDK do emulador Android oferece a saída de dados usando a janela do LogCat (Windows/Show View/Other/Android/LogCat), que fica disponível após instalar o plugin ADT. Nesta janela podemos visualizar os logs de acordo com o seu nível. Veja a tabela:

Nível
Sigla
Cor
Debug
D
azul
Verbose
V
preto
Info - Informação
I
verde
Warn - alerta
W
laranja
Error - erro
E
vermelho
Níveis de logs e suas cores

Assim, no Android temos que usar a classe android.util.Log para escrever os logs de acordo com os níveis disponíveis da tabela. Temos então no código:

Por exemplo, vamos criar o código abaixo e sua tecla de atalho correspondente:
Exemplo uso android.util.Log
Nome do Atalho pretendido
Log.d("SUA_TAG", "log DEBUG");
dbg
Log.i("DOUGLAS", "log INFORMATION");
dbgi
Log.e("DOUGLAS", "log ERROR");
dbge


Crie as tags acima no Eclipse usando uma tecla de atalho

Acesse a opção de preferências no menu principal do Eclipse, no caso do sistema operacional ser o Windows, use o atalho Windows/Preferences/. Na figura abaixo (A), observe o campo para digitar a busca. Digite o termo “templates” para filtrar a quantidade de opções disponíveis. Veja a imagem (B). Acesse opção Java/Editor/Templates/


(A)

(B)



Agora basta inserir novas entradas clicando no botão “New...”. (B) Crie 3 ou mais entradas de acordo com o código abaixo. Veja também a imagem (C).

(C)


Name
Description
Pattern
dbg

Log.DEBUG level (default)

Log.d("DOUGLAS","${enclosing_type}.${enclosing_method}${cursor}");

dbgi
Log.INFORMATION level
Log.i("DOUGLAS","${enclosing_type}.${enclosing_method}${cursor}");
dbge
Log.ERROR level
Log.e("DOUGLAS","${enclosing_type}.${enclosing_method}${cursor}");

Esse código é uma linguagem de expressão do Eclipse e faz com que o nome da classe atual seja obtida ( ${enclosing_type} ), e o nome do método atual seja obtido e substituído (${enclosing_method} ), e por fim, sete o cursor para o final deste comentário ( ${cursor} ).  Se desejar poderá criar outros templates estudando essa linguagem de expressão do Eclipse.



Após criar seus templates poderá utilizá-los durante a codificação do seu aplicativo no Android, e usar as teclas de atalho criadas. Ex. digite dbg + (Crtl+Space) e poderá ver as opções disponíveis do template. Assim que escolher um, o código será gerado automaticamente obtendo o nome da classe, o nome do método e você poderá ainda testar seu código neste trecho sem a necessidade de digitar todo o código.



Espero que essa dica seja útil para você tanto quanto está sendo para mim. J