Bytecode Java

Introdução à arquitetura e design de software

Todo desenvolvedor Java logo aprende que o código-fonte Java é compilado e gera bytecodes que formam o executável Java. Mas o que são exatamente esses bytecodes e o que fazem já é um ponto que muitos desenvolvedores ignoram.

Quando trabalhamos com uma tecnologia é sempre útil entender melhor sua base, seus fundamentos. Com o Java, conhecer um pouco mais dos bytecodes pode ajudar em alguns momentos.

Por isso, segue abaixo uma explicação sobre o bytecode Java e exemplo comentado.

Continuar lendo

Iniciando no Git

Livro Pro GitGit é uma ferramenta de controle de versão distribuída (Distributed Version Control System ou DVCS) criada por Linus Torvalds (sim, o mesmo criador do Linux), tem uma arquitetura diferenciada que cria cópias completas do repositório em cada máquina de trabalho, ao contrário da maioria das outras ferramentas que criam um único repositóriocentralizado. Dessa forma o Git ganha uma velocidade incrível, visto que quase toda operação é local. Daí, de tempos em tempos, basta sincronizar seu repositório local com o centralizado e todos verão suas alterações.

Outro diferencial da arquitetura do Git é que ele guarda versões completas dos arquivos de cada commit ao invés de apenas as alterações de um commit para outro, como a maioria das ferramentas de controle de versões o fazem, o que o permite ter uma flexibilidade (e poder) maiores e faz com que ele se porte como um mini-sistema de arquivos.

Abaixo estão algumas dicas para iniciar no Git e um guia de referência que lista os principais comandos utilizados com uma breve descrição.

Continuar lendo

Tradução – Modelo de Maturidade de Richardson

O conceituado computeiro Martin Fowler escreveu um interessante e esclarecedor artigo em seu website martinfowler.com baseado no modelo de maturidade RESTful desenvolvido por Leonard Richardson.

Este artigo foi escrito em 18 de março  de 2010 por Martin Fowler e postado como Richardson Maturity Model.

Por considerá-lo muito pertinente em relação ao desenvolvimento de aplicações RESTful, achei que poderia ser útil traduzí-lo.

Continuar lendo

JPA standalone (fora do servidor, container ou da IDE)

Neste post vou mostrar o exemplo mais básico de utilização de JPA, sem a utilização de qualquer servidor (de aplicação ou não) e sem os pulos do gato de uma IDE como o Eclipse.

Acredito que para qualquer iniciante no estudo de uma tecnologia é sempre bom ter contato com a tecnologia em seu formato mais cru, a fim de entender os cernes da questão e evitar as armadilhas da abstração no completo entendimento.

Para este post pegue apenas seu Java SE e vamos brincar.

Continuar lendo

Exemplo Spring JMS: envio de e-mail assíncrono

Ao desenvolver nossos sistemas, nos deparamos as vezes com um problema: alguma funcionalidade é muito pesada em termos de processamento e não precisa necessariamente ser feita de forma sincronizada com o resto da lógica de negócio, por exemplo, envio de e-mails, envio de SMS, etc.

Nestes casos, para diminuir o tempo que o usuário espera pela resposta do sistema, é conveniente tornar assíncrono o processamento destas tarefas em relação ao resto da lógica. Uma estratégia comumente usada é utilizar filas de mensagens. Nestes casos a lógica principal de negócio em vez de chamar a rotina que envia o e-mail, só chama uma rotina que insere uma mensagem na fila específica de envio de e-mails. Enquanto isso, temos uma rotina “consumidora” desta fila, desatrealada da lógica principal, que “consumirá” as mensagens, tratando-as de forma adequada conforme sua disponibilidade, de forma assíncrona ao resto da aplicação.

Spring provê um framework que abstrai e simplifica o uso da API JMS (Java Message Service). Particularmente para este post, utilizaremos este mecanismo do Spring em conjunto com o suporte do Spring para POJOs dirigidos a mensagens (um modo de receber mensagens que se parece com beans orientado a mensagens Message-Driven BeansMDBs da especificação EJB). mas, que ao contrário do MDB nos permite utilizar um servidor web comum, como Tomcat, por exemplo.

Continuar lendo

Exemplo de CRUD em JSF – Versão 1.0

Há muita confusão em JSF sobre como fazer a navegação da aplicação, o tratamento de requisições, etc, principalmente daqueles que migram de tecnologias diferentes, como Struts, por exemplo. Portanto, resolvi postar um projeto básico em JSF com um esquema de navegação simples de um CRUD (Create Read Update Delete).

Num próximo post pretendo fazer um exemplo de CRUD JSF um pouco mais incrementado, constituindo um framework simples para lidar com CRUDs.

Continuar lendo

Mel na chupeta: dados de estados x cidades do Brasil

Muitos sistemas necessitam de informações sobre estados e cidades, mas ao buscar estas informações, se percebe muitos dados incorretos e uma falta de padronização dos nomes.

Mas o site do IBGE (Instituto Brasileiro de Geografia e Estatística) possui uma grande gama de dados disponibilizados publicamente, inclusive a lista de cidades por estado, mas não encontrei nenhuma forma de conseguir baixar os dados já facilmente para meu uso, tendo que baixar o documento com a lista de cidades para cada estado e tratar estes dados.

Portanto, para facilitar minha vida, exportei para um formato CSV e subi para a minha base.

Disponibilizo aqui os dados para download.

Continuar lendo

A técnica de Pomodoro no desenvolvimento de software

Técnica de PomodoroQuem nunca chegou no fim do dia e percebeu que o dia não rendeu nada em trabalho útil? Onde foram parar as 8 horas (ou mais) de trabalho?

Geralmente as pessoas tendem a esquecer os minutos gastos no twitter, o tempo lendo notícias no uol, os e-mails respondidos, telefonemas atendidos, perguntas de colegas respondidas, ajudas a secretária para scanear um documento, etc, etc.

Pode não parecer, mas estas “pequenas” interrupções consomem muito tempo que não é gasto efetivamente no trabalho.

E se o trabalho não é feito, surgem os atrasos no projeto (que podem acabar sendo percebidos só no final do prazo em projetos mal administrados), necessidades de horas extras e junto vem o stress e a famigerada “ansiedade do tempo  abstrato”.

O livro “The Pomodro Technique” (veja link para download grátis abaixo no post), define dois tipos de percepção de tempo:

1– “Becoming”: A idéia abstrata de tempo, que nasce do hábito de medir tempo (horas, minutos, etc) e a idéia de estar ficando tarde, a sensação do projeto atrasando, o tempo escoando continuamente sem ter terminado aquela parte do sistema. Esta é a percepção ruim (guarde na memória esta).

2– “Sucessão de Eventos”: uma idéia mais concreta do tempo, a idéia de que uma tarefa sucede a outra: “primeiro eu vou escovar os dentes, depois vou tomar banho, após vou dormir”. Crianças desenvolvem primeiro esta idéia de tempo, antes de desenvolver a idéia abstrata.

A técnica de Pomodoro visa diminuir essa ansiedade de tempo abstrato e aumentar foco, concentração e, consequentemente, a produtividade nas tarefas a serem feitas.

Continuar lendo