segunda-feira, 24 de novembro de 2008

distinct com projection

Quando usamos projection, o "criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);"
algumas vezes não funciona pois faz o distinct após a consulta ser feita, o distinct correto é esse:

...
ProjectionList p = Projections.projectionList().create();
p.add(Projections.property("c.id"), "id");
p.add(Projections.property("c.nome"), "nome");
criteria.setProjection(p);

criteria.add(Expression.in("ai.id", longs));
criteria.add(Expression.eq("c.empresa.id", empresaId));
criteria.addOrder(Order.asc("c.nome"));

criteria.setProjection(Projections.distinct(p));
...

SQL gerado:
select
distinct this_.id as y0_,
this_.nome as y1_
from
...

domingo, 9 de novembro de 2008

Codigo bem escrito

O que seria um código bem escrito?

Código que compila.
Código que não tenha muitos ifs.
Programação orientada a objetos.
Código com testes....

Talvez uma dessas seriam as respostas de alguns desenvolvedores, hoje em dia muitas pessoas atribuem varias variáveis para saber se um código estar bem escrito, não tenho nada contra mas acho que o mais importante as vezes é esquecido...código bem escrito é aquele que um outro desenvolvedor olha e entende com facilidade, é um código que pode ser reaproveitado e faz apenas uma funcionalidade simples e eficaz, temos que olhar para um programa e ver um conjunto de peças trabalhando em harmonia e chegando a um objetivo em comum. Temos que desenvolver software com um alto nível de abstração, não podemos resolver um grande problema, sem antes dividir esse problema em partes pequenas, para cada novo pequeno problema seja resolvido de uma forma única, especifica facilitando uma solução mais confiável. Temos que enxergar um software como um conjunto de pequenas peças é assim que funciona nas outra engenharias, vejamos um exemplo de um carro ele é formado por pequenas peças, uma simples junta pode dar defeito e comprometer todo o carro.


Temos que trabalhar com métodos pequenos de fácil compreensão facilitando assim seu teste e aumentando as chances de ser reaproveitado. Qualidade acima de tudo, se todas as pequenas peças de um sistema forem bem feitas o sistema todo será bem feito.

quarta-feira, 5 de novembro de 2008

Mundo Google

Para quem gosta do google ai vai algumas funcionalidades...

  • Add to Google. Permite aos editores de sites criarem botões customizados “Add to Google” para a inclusão do seu RSS - feeds - nas páginas personalizadas do Google (Reader ou Homepage), a partir do próprio site do editor. Veja o exemplo na barra lateral desse site no box “Feed-se”. A ferramenta gera um código HTML que deve ser colado no site do editor. Dessa forma seus usuários poderão incluir seu RSS em um clique.
  • Blogger é a ferramenta de blog, muito popular por ser um serviço gratuito e de fácil utilização para usuário leigos ou iniciantes.
  • Froogle é uma ferramenta de busca que funciona para procurar o menor preço de algum produto.
  • GMail (ou Google Mail) é o serviço de e-mail gratuíto que oferece mais de 2GB de armazenamento para seu usuário.
  • Google AdSense é o serviço de publicidade contextual, utilizado por milhões de sites, onde editores podem veicular anúncios do AdWords. Também foi lançado o Onsite Advertiser Sign-Up - em 21 de novembro de 2005 - que permite que anunciantes comprem espaços publicitários em diversos sites a partir do site do Google.
  • Google AdWords é o outro lado do AdSense. Enquanto o AdSense permite aos editores veicularem publicidade, o AdWords permite que anunciantes comprem esse espaço e conectem sua empresa aos sites associados e ao prórpio Google.
  • Google Agenda , como o próprio nome diz, é a ferramenta para gerenciar compromissos. Com diversas funcionalidades, permite também convidar pessoas para participar dos compromissos agendados.
  • Google Alerts é um alerta via e-mail para buscas que o usuário tenha feito no Google. Muito utilizado para monitorar websites ou notícias.
  • Google Analytics rastreia qualquer site e disponibiliza dados estatísticos ao editor, exibe os dados em Javascript. Excelente ferramenta para webmasters que desejem acompanhar o desempenho de seu site em diversos atributos.
  • Google Answers permite que os usuários publiquem perguntas para outros usuários procurem pelas dúvidas e respondam as questões. Possibilita a criação de negócios a partir de uma dúvida comercial de algum usuário. Não aceita mas perguntas desde dezembro de 2006.
  • Google Apps for Your Domain: pacote de serviços que permite ao usuário hospedar seu site, inserir e-mails, modelar páginas e uma série de outros serviços que facilitam o desenvolvimento de sites para leigos.
  • Google Base é uma biblioteca onde todos os usuários podem fazer upload de qualquer tipo de arquivos (ou mídia). Uma tentativa da Google em tornar real o “EPIC” e “Google Grid” mencionados neste vídeo.
  • Google Blog Search funciona como a tradicional ferramenta de busca da empresa, contudo efetua as buscas apenas em blogs.
  • Google Book Search efetua buscas por livros cadastrados na base de dados da Google.
  • Google Catalogs é uma ferramenta de busca para catálogos de entregas por correspondência.
  • Google Click-to-Call permite que o usuário ligue diretamente para um anunciante a partir do resultado da busca ou links patrocinados. A ligação é paga pelo Google e deve ser feita a partir do Google Talk.
  • Google Code ferramenta de busca que procura códigos livres - Open Source.
  • Google Compute é uma ferramenta integrada ao Google Toolbar e Desktop que trabalha quando o computador esta ocioso. Utilizada para distribuir dados à projetos computacionais como o Folding@Home.
  • Google Deskbar, barra de ferramentas (lateral) do Google que funciona diretamente a partir do desktop (área de trabalho). Permite realizar buscas sem a necessidade de acessar o site e apresenta diversos atalhos, widgets, agregador de feeds, previsão meteorológica e outras facilidades.
  • Google Desktop ferramenta de busca para buscas internas, dentro da prórpia máquina do usuário.
  • Google Directory permite uma busca por categorias de sites, de forma semelhante ao Yahoo!.
  • Google Docs , conjunto de aplicativos similar ao Microsoft Office, mas gratuito e online.
  • Google Earth, aplicação desktop (software) que permite ao usuário navegar pelo mundo detalhadamente através de fotografias de alta resolução.
  • Google Finance, ferramenta para usuários que operam no mercado financeiro. Disponibiliza gráficos, cotações, perfil dos administradores de cada empresa, notícias, discussões e até posts de blogs integrados.
  • Google Patent Search iniciou em 14/12/2006 a versão beta da nova ferramenta de busca da Google. O sistema permite ao usuário pesquisar mais de 7 milhões de patentes americanas emitidas pelo Departamento americano de Patentes e Marcas Registradas desde o ano de 1790.
  • Google Groups, ferramenta para a criação de grupos de usuários com diversas funcionalidades, como grupo de e-mail, Usenet e outras ações colaborativas com o objetivo de compartilhar assuntos de interesse comum.
  • Google Homepage é uma página onde o usuário pode adicionar diversos widgets como previsão do tempo, notícias, horóscopo, feeds e muitas outras funcionalidades. Funciona como o Netvibes e o MyYahoo!.
  • Google Image Search é o serviço da Google para busca de imagens.
  • Google Labs mostra os projetos nos quais o Google trabalha para futuros lançamentos.
  • Google Local combina as informações do Google Maps com informações de negócios locais. Excelente para procurar atividades comerciais em determinadas áreas.
  • Google Maps serviço de mapas que também informa aos motoristas o melhor caminho a seguir para diversas localidades. O serviço está disponível apenas para poucos países mas no futuro poderá abranger qualquer localidade do planeta. O Google Maps também permite que desenvolvedores utilizem a plataforma para desenvolver suas próprias aplicações através de APIs.
  • Google Mini: servidor do Google para pequenas, médias e grandes empresas. Possui a ferramenta de busca instalada para 300 mil a 1,5 milhões de documentos. O preço varia de US$ 2.000 à US$ 50.000, com suporte e atualizações grátis por dois anos.
  • Google Mobile: similar ao Google SMS, mas utiliza a tecnologia WAP.
  • Google Movie Showtimes permite que o usuário digite o CEP ou endereço e o sistema encontra cinemas e filmes nas áreas mais próximas. Disponível apenas para os Estados Unidos e o Canadá.
  • Google News é um portal de notícias que busca notícias nos principais veículos do mundo. Tudo é feito por um algoritmo e não há interação humana (editorial) com o sistema.
  • Google Reader é um leitor web de RSS, ou agregador.
  • Google Ridefinder permite que o usuário localize facilmente pontos de taxi em algumas das maiores cidades americanas.
  • Google Scholar procura teses, monografias e qualquer tipo de informação acadêmica publicada na web.
  • Google Search History é um serviço que registra o histórico de buscas do usuário logado. O usuário pode consultar seu histórico e o Google pode utilizar os históricos para pesquisas demográficas, comerciais e de hábitos do usuário.
  • Google Send to Phone é um plugin para Firefox que permite o envio de mensagens de texto para celulares via SMS.
  • Google Sitemap ajuda a criação de mapa de sites. Muito útil para webmasters verificarem e indexarem seus sites ou observar quais sites estão linkados ao seu.
  • Google SMS permite ao usuário acessar diversos serviços do Google através do celular, a partir de uma mensagem de texto. Disponível apenas nos Estados Unidos.
  • Google Spreadsheet , planilha similar ao Microsoft Excel, gratuíto e online.
  • Google Store não é um serviço, mas permite ao usuário comprar diversos objetos de merchandising da Google a partir do seu ponto de venda online.
  • Google Suggest uma extensão da tradicional ferramenta de busca com um recurso que sugere nomes a partir do que o usuário digita no campo de busca. O usuário pode inserir termos incompletos e o sistema identifica a relevância e “auto-completa” o termo a ser buscado ou sugere um refinamento na busca executada. Também existe um plugin para Firefox.
  • Google Talk é a ferramenta de IM (Instant Message) e VoIP (Voz sobre IP) que roda localmente na máquina do usuário. É necessário ter uma conta no Gmail para utilizar esse software.
  • Google Toolbar é uma barra instalada no Internet Explorer ou Firefox que permite buscar diretamente, sem a necessidade de acessar o site. Permite também inserir atalhos e índices do PageRank da página que está sendo acessada entre outras funcionalidades.
  • Google Language Tools ferramenta de tradução online via web.
  • Google Video e Google Video Upload, serviço similar ao YouTube, site para upload e exibição de videos.
  • Google Web Accelerator supostamente auxilia o acesso mais rápido a sites, contudo ignora algumas normas de segurança e privacidade.
  • Google Web Search, ferramenta que originou a indústria Google. Efetua buscas na web e possui funcionalidades como: calculadora, definições de termos, informações de viagem e muitas outras a partir de uma simples busca. Possui também uma Busca Avançada, mais precisa, para usuários mais experientes.
  • Hello é uma pequena ferramenta de IM que opera em conjunto com o Picasa para compartilhar fotos com amigos e família.
  • Orkut, site de relacionamento altamente difundido, principlamente no Brasil.
  • Picasa é um organizador de fotos online. Opera a partir do desktop.
  • YouTube, recentemente adquirido pela Google, é o maior site de armazenamento e exibição de vídeos da internet.

segunda-feira, 13 de outubro de 2008

Expressão Booleana no iReport

Criar expressões no ireport é um pouco complicado ai vai um exemplo da solução encontrada depois de muita briga...

...
private Date dataQuitacao = new Date();
private boolean atrasado = true;
...
new Boolean($F{atrasado}.booleanValue() == true && $F{dataQuitacao} == null)

quarta-feira, 17 de setembro de 2008

A festa foi boa!!!

O aniversário do CEJUG foi muito bom, palestras de alto nível, muito obrigado pela participação de todos, fotos do evento.

segunda-feira, 8 de setembro de 2008

Refatoração

Estou lendo no momento o livro "Refatoração: Aperfeiçoando o Projeto de Código Existente" escrito por Martin Fowler, vou postar alguns resumos...
Martin Fowler e os autores colaboradores fazem uma contribuição inestimável ao desenvolvimento de software orientado a objetos clareando o processo de refatoração. Este livro explica os princípios e as práticas ideais da refatoração, e mostra quando e onde deve começar a mexer no seu código para melhorá-lo. O livro apresenta um catálogo abragente de refatorações.
Refatoração é um processo de alteração de um sistema de software de modo que o comportamento externo do código não mude, mas que sua estrutura interna seja melhorada. É uma maneira disciplinada de aperfeiçoar o código que minimiza a chance de introdução de falhas.
Primeiro passo na refatoração, é preciso criar um sólido conjunto de testes para aquele trecho de código, é essencial fazer bons testes. Vale a pena gastar tempo que for necessário para a
criação dos testes, porque eles dão a segurança que é preciso para alterar o programa.
"Qualquer tolo consegue escrever código que um computador entenda. Bons programadores escrevem código que humanos possam entender."

Manifesto Ágil

Foi assinado em 2001 pelos principais veteranos na área de desenvolvimento de software,
queriam discutir formas de melhorar o desempenho de seus projetos.
Principais conceitos do desenvolvimento ágil:
Indivíduos e interação entre eles mais que processos e ferramentas.
Software em funcionamento mais que documentação abrangente.
Colaboração com o cliente mais que negociação de contratos.
Responder a mudanças mais que seguir um plano.

Retornando ao blog parte II

Pronto a faculdade começou, consegui minha certificação SCJP e fiquei em quarto lugar no PUJ
Agora vou postar minhas aventuras com java e um pouco da minha vida...muito obrigado a todos que me apoiam nessa escalada.

Aniversário do CEJUG


Este ano o CEJUG completa 6 anos e para comemorar trouxe a Fortaleza, com o apoio da Sun Microsystems e do SouJava, Kohsuke Kawaguchi e Maurício Leal. Para completar essa grande festa, o CEJUG trouxe Bruno Pereira, da Concrete Solutions e Globo.com!
Venha participar dessa grande festa, rever os amigos, conhecer os evangelistas da Sun.

quarta-feira, 30 de julho de 2008

Problema de conflito DWR e jQuery

Solução do problema:
util.js do DWR tinha:
Uma variável chamada $, precisou mudar o nome e renomear quem usava.
Usava $("xxx") no lugar de document.getElementById("xxx"), também precisou trocar.

Máscara com jQuery

O jQuery é um Framework fácil de usar e tem um máscara para data que realmente funciona.
Muito simples de usar:

*importa os .js

jQuery(function($){$("#date").mask("99/99/9999",{placeholder:" "});});

#date id do campo input.

links:
http://digitalbush.com/projects/masked-input-plugin/
http://www.jquerybrasil.com/

terça-feira, 1 de julho de 2008

Retornando ao blog

Passei um tempo sem postar nada, pois estava estudando para SCJP, provas da faculdade e terminando um projeto para enviar para o PUJ.
Agora um pouco de férias para estudar, descansar e farrear...

segunda-feira, 11 de fevereiro de 2008

Destacar Palavras

public static String destacarExpressoesApresentacao(String textoOriginal, String[] palavrasProcuradas)
{
String textoComDestaques = textoOriginal;
int qtdPalavras = palavrasProcuradas.length;

for(int i = 0; i < qtdPalavras; i++)
{
String regex = montaRegex(palavrasProcuradas[i]);

Pattern pattern = Pattern.compile("(?i)" + regex.toLowerCase());
Matcher matcher = pattern.matcher(textoComDestaques);

while(matcher.find())
{
String palavra = matcher.group();
textoComDestaques = textoComDestaques.replaceAll(palavra,"" + palavra.toUpperCase() + "");
}

}

return textoComDestaques;
}


private static String montaRegex(String regex)
{
regex = regex.replaceAll("(?i)[aáàãâ]", "[AÁÀÃÂ]");
regex = regex.replaceAll("(?i)[eéèê]", "[EÉÈÊ]");
regex = regex.replaceAll("(?i)[iíì]", "[IÍÌ]");
regex = regex.replaceAll("(?i)[oóòõô]", "[OÓÒÕÔ]");
regex = regex.replaceAll("(?i)[uúù]", "[UÚÙ]");
regex = regex.replaceAll("(?i)[cç]", "[CÇ]");

return regex;
}

segunda-feira, 21 de janeiro de 2008

Criteria Desconsiderando acento(postgres)

public void criteriaDesconsideraAcento()
{
Criteria criteria = getSession().createCriteria(Aluno.class, "a");

ProjectionList retorno = Projections.projectionList().create();

retorno.add(Projections.property("a.id"), "id");
retorno.add(Projections.property("a.nome"), "nome");

criteria.setProjection(retorno);

criteria.add( Restrictions.sqlRestriction("to_ascii({alias}.nome) ilike to_ascii(?)", "%jose%", Hibernate.STRING));

criteria.setResultTransformer(new AliasToBeanResultTransformer(Aluno.class));
Collection alunos = criteria.list();

System.out.println(alunos.size());

// CONSOLE:
// select
// this_.id as y0_,
// this_.nome as y1_
// from
// Aluno this_
// where
// to_ascii(this_.nome) ilike to_ascii(?)

}

quinta-feira, 17 de janeiro de 2008

SubQuery com criteria e projection

DetachedCriteria subQuery = DetachedCriteria.forClass(Moeda.class, "subMoeda");
ProjectionList p = Projections.projectionList().create();

p.add(Projections.property("subMoeda.observacao"), "observacao");
subQuery.setProjection(p);

subQuery.add(Expression.eq("subMoeda.id", 7L));

Criteria criteria = getSession().createCriteria(Moeda.class, "moeda");

ProjectionList p2 = Projections.projectionList().create();

p2.add(Projections.property("moeda.observacao"), "observacao");
p2.add(Projections.property("moeda.nome"), "nome");
p2.add(Projections.property("moeda.cifra"), "cifra");

criteria.setProjection(p2);
criteria.add(Property.forName("moeda.nome").eq(subQuery));

criteria.setResultTransformer(new AliasToBeanResultTransformer(Moeda.class));
Collection lista = criteria.list();


CONSOLE:

select
this_.observacao as y0_,
this_.nome as y1_,
this_.cifra as y2_
from
Moeda this_
where
this_.nome = (
select
this0__.observacao as y0_
from
Moeda this0__
where
this0__.id=?
)

quarta-feira, 16 de janeiro de 2008

SubQuery com criteria

DetachedCriteria subQuery = DetachedCriteria.forClass(Moeda.class, "subMoeda");
subQuery.add(Expression.eq("subMoeda.nome", "Real"));
subQuery.setProjection(Projections.rowCount());

Criteria criteria = getSession().createCriteria(Moeda.class, "moeda");
criteria.add(Property.forName("moeda.id").eq(subQuery));

List lista = criteria.list();

CONSOLE:

select
this_.id as id5_0_,
this_.nome as nome5_0_,
this_.observacao as observacao5_0_,
this_.cifra as cifra5_0_,
this_.divisor as divisor5_0_,
this_.dataIni as dataIni5_0_,
this_.dataFim as dataFim5_0_
from
Moeda this_
where
this_.id = (
select
count(*) as y0_
from
Moeda this0__
where
this0__.nome=?
)