sexta-feira, 19 de junho de 2009

Site sobre PMI e Gerencia de Projetos

Talvez mais um site que todos já devem conhecer, mas não custa apresentar o dono do site:

Ricardo Vargas | MSc, IPMA-B, PMP
Especialista em gerenciamento de projetos, riscos e portefólio. É autor de dez livros em português e inglês. Consultor em projetos, administra um portfólio de investimentos gerenciados superior a US$18 bilhões mundialmente. É Chairman do Project Management Institute (PMI), maior associação do mundo em gerenciamento de projetos.


http://www.ricardo-vargas.com/


Vale a pena o acesso la tem muito material sobre gerência de projeto. Ele faz um podcast semanal bem interessante, alem das apresentações e entrevistas disponíveis para download.

quarta-feira, 17 de junho de 2009

Fusion Tables: Google lança oficialmente um banco de dados

A google lançou oficialmente um banco de dados "nas nuvens". Essa notícia da IDGNow explica melhor como foi esse lançamento. Como não poderia deixar de ser, a google não lança simplesmente um produto, ela lança uma forma de dominar o mercado:

"A idéia é driblar as limitações dos bancos de dados tradicionais e simplificar as operações de relacionamento de informações. O Google afirmou que, com a implementação em cloud computing, simplificará também a possibilidade de colaboração em grupos de dados."

Não que eu seja a favor de nenhum tipo de discórdia entre rivais, mas a notícia ainda traz o texto:

"Se você é a IBM, a Microsoft e Oracle, seu pior pesadelo está vivo. O Google irá criar espaços de dados automaticamente e implementar novos tipos de pesquisas."

Apesar dessa expectativa toda, o produto ainda é um embrião, está apenas no comecinho. Quem se interessou pode acessar esse tour da própria Google e ter uma prévia.

terça-feira, 16 de junho de 2009

Idiomas Java

Aproveitando a abordagem de Mário sobre padrões de projeto, vou falar um pouco sobre idiomas. Um idioma é um conjunto de práticas, assim como padrões de projeto, mas específico de uma linguagem de programação. Ou seja, existe para Java, C++, C#, PHP... Estranhamente não é um princípio muito conhecido(eu pessoalmente nunca tinha ouvido falar até fazer uma pós graduação). Se você, por exemplo, buscar no google "idiomas java" vai se deparar com links relativos a cursos de inglês, dúvidas de gramáticas e outros resultados irrelevantes. Nada relacionado a boas práticas de desenvolvimento.
Para clarear as idéias(ou ideias de acordo com as novas regras gramaticais) vou apresentar um exemplo conhecido como "Double Brace Initialization" ou Inicialização Dupla Chave.
Vejam o código abaixo:

private Set JaliVE = new TreeSet(){{
add("Fábio");
add("Mário");
add("Diego");
add("Ian");
}};


Repararam nas duas chaves? Apesar de não ser muito comum, essa abordagem é uma maneira bastante conveniente de inicializar coleções em Java.

Espero que tenham gostado. Em breve postarei mais sobre esse interessante assunto.

domingo, 14 de junho de 2009

Padrões de Projeto: Observer + Aspectos

Apresentamos o Padrão de Projeto Observer em 2 versões. Implementando todas as classes do padrão ou implementando com o uso das classes da API. Nos dois casos existem problemas para o reuso do código.
Para implementar o Padrão de Projeto podemos definir uma interface ou uma classe abstrata para o Subject. A classe concreta nos 2 casos vai ter "código extra" que não faz parte do negócio. Com o uso da interface Subject a classe Concreta deve implementar os métodos do padrão de projeto. Se utilizar a classe abstrata Suject a classe Concreta deve estender dessa classe impedindo que se faça reuso da classe por meio de herança (Java não permite herança múltipla).



/**
* Estendendo de uma classe abstrata Subject.
* Em vermelho código adicionado em virtude do padrão.
*
*/
public class ConcreteSubject extends Subject {

private int estado = 0;

public int getEstado() {
return estado;
}

public void setEstado(int estado) {
this.estado = estado;
this.notifyObservers(estado);
}

}


Isso levanta uma discussão quanto ao uso desse padrão e a possibilidade de reuso das classes. Uma outra forma de implementar o padrão é utilizando aspectos, dessa maneira a classe a ser observada não ficaria com nenhum código estranho.



/**
* Utilizando Aspectos.
* O padrão é implementado sem interferir diretamente na classe ConcreteSubject.
*/
public class ConcreteSubject {
private int estado = 0;

public int getEstado() {
return estado;
}

public void setEstado(int estado) {
this.estado = estado;
}
}


Faça o download da versão utilizando Aspectos: PadraoObserverImpl_3.zip

No post anterior temos download de 2 formas de implementação do padrão e um exemplo de aplicação do padrão.

quinta-feira, 11 de junho de 2009

Padrões de Projeto: Observer

Os Padrões de Projeto são soluções genéricas para problemas recorrentes, “cada padrão descreve um problema no nosso ambiente e o cerne da solução, de tal forma que você possa usar essa solução mais de um milhão de vezes, sem nunca fazê-lo da mesma maneira”(Alexander, C. et al. apud Gamma, E. et al., 2000).

Ao utilizar um padrão de projeto na solução de um problema no desenvolvimento do software significa que optamos por uma solução de boa qualidade e já testada.

O padrão Observer é também conhecido como Publish-Subscribe, Event Generator ou Dependents (Salve, J.,2008). Esse padrão é endereçado a família de problemas que tem a intenção de “definir uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda de estado todos os seus dependentes são notificados e atualizados automaticamente” (Gamma, E. et al., 2000 ).

O padrão Observer que é aplicável quando a alteração no estado de um objeto implica em notificar ou alterar outros objetos. Além disso, os objetos que vão sofrer alteração ou ser notificados não são conhecidos pelo objeto que sofreu a mudança, conseguindo assim um fraco acoplamento.

No padrão Observer temos um objeto que será observado, chamado de Subject. Na API Java temos as classes java.util.Observable e java.swing.EventSource são implementações do Subject. Temos também o objeto que observa e é notificado chamado de Observer, em Java as classes que o implementam são java.util.Observer e o java.swing.Listener. Java usa o padrão na API de duas formas diferentes (Sauvé, J.,2006).



Download de uma implementação do Observer completa: PadraoObserverImpl_1.zip
Download de uma implementação do Observer com uso das classes da API java.util.Observable e java.util.Observer : PadraoObserverImpl_2.zip

Para exemplificar o uso do padrão de projeto Observer definimos uma aplicação que vamos chamar de “Bolsa de Valores”. Essa aplicação obtém o índice da bolsa de valores e exibe em formato texto ou em um gráfico. (Exemplo completo disponível no artigo download)

Download da implementação do Observer aplicado ao exemplo da Bolsa de Valores: PadroObserverBolsa.zip




Considerações:

O padrão atende as expectativas reduzindo bastante o acoplamento entre as abstrações. No entanto, em java, quando o ConcreteSubject precisa estender a classe Subject não pode estender de outra classe dificultando sua reutilização.

Na solução do padrão Observer apresentada existe apenas um método de atualização onde devemos passar o Subject ou o estado do Subject. Isso torna a missão de descobrir quem disparou a mudança no estado uma tarefa árdua (Sauvé, J., 2006).

A solução de proposta utilizando o Listner (equivalente ao Observer) é implementa pelo Java Swing. Permite a criação de vários eventos que são disparados executando os métodos associados. Ela também facilita a descoberta da fonte do evento. Conseguimos obter um código mais claro e os observares são registrados de forma mais específicada (Sauvé, J., 2006).

As duas implementações do padrão Observer citadas tem problemas pois tanto o ConcreteSubject quanto o ConcreteObserver não estão apenas com seus métodos de “negócio”. É necessário inserir código para tratar o problema da notificação dos observadores não sendo possível a reutilização direta desses objetos.

Espero ter contribuído para seus estudos sobre padrões de projeto.

1001 utilidades em Java


O nome da biblioteca é Alfred mais poderia se chamar "BomBril".
Alfred é uma biblioteca para Java que contém dezenas de classes utilitárias que faz de tudo para você. Desde uma simples formatação de CPF ao cálculo de envio de encomendas por Sedex.

Mais informações: http://code.google.com/p/alfredlibrary/

Eu já estou contribuindo para essa iniciativa e você também pode contribuir.

Parabéns ao meu grande amigo Marlon por essa iniciativa e valeu por ter me chamado para entrar nessa.

terça-feira, 9 de junho de 2009

Java é 10, Linux é 10 e o Java, Linux e Vatapá é 100!

Chegamos ao centésimo post e a família Java, Linux e Vatapá cresceu.

Parabéns a todos que vem contribuindo com post's, comentários, acessos e divulgação. Isso nos da mais vontade de postar. :)

Seus comentários e acessos é que direcionam as informações que são adicionadas.

Site Nerd (Geek)


Moda Geek, esse site já vende tudo que um Nerd precisa para viver, acessórios, roupas e diversas utilidades. Vale a pena conferir:
http://www.thinkgeek.com/

Os produtos vão de relógio que apresenta as horas em binário ate camisetas que mostram o nivel do sinal wireless do local.