23 maio 2008

O quão bem preparado você está?

Essa foi a pergunta que eu tenho me feito nos últimos dois meses. Depois de ter experimentado a catarse por um bom tempo, cairam sobre mim as responsabilidades pelas quais eu já estava esperando (e temendo) faz um bom tempo. E por mais que eu estivesse prevendo que seria difícil, bem, foi mais dificil do que eu pensava... Pressão, cobranças, dúvidas, receios... Acreditem, faculdade não é nada comparado a isso. Não é apenas mais um clichê barato de comunista frustrado aquela velha frase que diz que o mercado de trabalho é cruel. Além de ter um bom currículo profissional, de ser versátil, de ter eficiência e eficácia (duas coisas que não deveriam andar separadas), todo bom profissional deve (ou deveria) ter um QE (mais conhecido como inteligência emocional) elevadíssimo... Imagine ter que lhe dar com prazos, decisões de última hora, montantes e montantes de trabalho, além da falta de experiência (estamos falando de um recém-formado), sem falar no clima tenso que é gerado no ambiente de trabalho, em função de todas essas coisas. É de se considerar normal que qualquer um se desespere numa situação como essas, não é? Mas essa é a questão: desespero coloca todos os seus problemas no triturador de papéis? Pense que só serão atribuídas a você as culpas que realmente lhe forem cabíveis, por mais que seus superiores ou colegas de trabalho tentem lhe puxar o tapete. Seja capaz de apresentar os fatos como eles realmente são, sem distorcer coisa alguma, porque no final das contas, vc vai ter a certeza de que jogou limpo. Na pior das hipóteses, você vai sair dessa experiência bem mais maduro profissionalmente do que quando entrou, e isso já é um ganho enorme... Veja Também: Wikipedia - Inteligencia Emocional UOL - Como usar as emoções a nosso favor

21 maio 2008

Mulheres são apenas... Mulheres.

"Mulheres, por mais belas (ou não tão belas) que sejam, são apenas... mulheres. Nunca as trate de alguma forma que as façam pensar ou se sentir superiores à você. Elas são apenas mulheres. No momento em que você tratá-las como seres humanos, sem demonstrar tanto desejo na hora errada, você melhora. Você deve deixar espaço pra elas lhe admirarem, pra elas lhe verem..." Eu tenho que dar o mérito dessa frase ao meu amigo Ricardo Nascimento, e pela maneira como essa frase lhe foi concebida (um sonho). E mais, por quão verídica ela é. Eu diria que essa frase é a solução de toda a frustração dos ditos "bons homens", aqueles que são tudo aquilo que as mulheres intimamente desejam, e que no fundo são "traídos" pelo ego feminino (que todos nós já sabemos - é uma verdade mais que absoluta). Claro que toda mulher deseja se sentir cobiçada, mas o que lhe faz se sentir atraída por alguém é justamente o contrário: o mistério. Mulher é toda subjetividade. Mesmo as mais atiradas, mesmo as mais sedutoras, até estas são pura subjetividade. Mulher detesta o óbvio. E é exatamente a objetividade que sustenta o homem. Paradoxal, não? Nem tanto. Existem homens que conseguem compreender as mulheres tão bem quanto nós (meros mortais do sexo masculino) entendemos uma propaganda de cerveja, tamanha a sua facilidade. Esses heróis são do nipe de Chico Buarque de Holanda. Não é a toa que todas as mulheres que eu conheço adoram esse homem. Letras rebuscadas, de uma complexidade tão insana quanto as loucuras do Univverso numa casca de nós (santa nerdice)... É em caras como esse que nós, homens, deveríamos nos mirar. Objetividade nos desejos, mas subjetividade nas ações. Mistério... Tempo, paciência... Ser, de fato, como um felino.

20 maio 2008

De cara nova

Já faz um bom tempo que eu não escrevo nada no blog. Aí eu resolvi parar e dar uma arrumada na casa, mudar templates, formatar uma coisa aqui e ali, adicionar outras coisas aqui e ali também... Quem sabe mudando os móveis de lugar, como a minha mãe costuma fazer quando enjoa da casa, eu não consiga ânimo pra voltar a escrever como antes? Afinal de contas, já entrei no terceiro ano do blog. Tá na hora de novidade :P

06 maio 2008

Validações do tipo "existe algum" no hibernate.

Mais um perrengue daqueles que enchem o saco. Passei algumas horas (na verdade, 4 horas) pra achar uma maneira boa e simples de se fazer esse tipo de validação. Eu precisava checar se determinado servidor público estava alocado em alguma escala de trabalho para fins de regra de negócio. O grafo de entidades para uma escala de trabalho era relativamente complexo, e um criteria via hibernate era relativamente trabalhoso e complexo de se fazer. Além disso, valeria a pena fazer um criteria, apenas para algo desse tipo?
if (! listaEscalaTrabalho.isEmpty()) {
  throw new ApplicationException("messageKey");
}
O experiente Marco Antônio, colega de trabalho, tinha me sugerido fazer uma query direta no banco de dados. Não retornaria objeto algum, apenas a quantidade de escalas em que tal servidor estivesse alocado. Pode parecer um jeito arcaico, mas não, isso é GENIAL. Pense no seguinte: traz apenas um inteiro, não enche o cache do Hibernate com objetos sem necessidade, e além do mais, é rápida.
public boolean verificarServidorAlocado(
     ServidorPublico servidorPublico) {
  StringBuffer buf = new StringBuffer();
  buf.append("select count(*)...");
  ...

  Integer result = (Integer) HibernateUtil.
     getSession().createSQLQuery(buf.toString()).
     uniqueResult();

  return (result > 0);
}
Claro que a melhor maneira para resolver este tipo de problema seria usar um HQL, mas como eu não sei usar isso ainda, nada como montar a query na mão, não é verdade? Veja também: HQL - The Hibernate Query Language

02 maio 2008

hashCode() e equals() no Hibernate

Se você está manipulando elementos numa coleção persistente (PersistentSet) do hibernate, por via das dúvidas, sobrescreva os métodos equals() e hashCode(). Por quê? Veja isso: A implementação automática dos métodos equals() e hashCode() do Eclipse é falha, não realiza encapsulamento, e no caso do Timestamp e do Date, realiza justamente a comparação falha que é descrita no artigo acima. Então, o melhor a fazer seria usar o compareTo() dentro do equals(), e no caso do hashCode(), fazer algo parecido com isso:
public int hashCode() {
 final int prime = 31;
 int result = 1;

 if (getDataHoraFim() != null) {
     Calendar calendar = Calendar.getInstance();
     calendar.setTime(getDataHoraFim());

     result = prime * result
             + calendar.get(Calendar.YEAR);
     result = prime * result
             + calendar.get(Calendar.MONTH);
     result = prime * result
             + calendar.get(Calendar.DATE);
     result = prime * result
             + calendar.get(Calendar.HOUR_OF_DAY);
     result = prime * result
             + calendar.get(Calendar.MINUTE);
 }

 ...
}
note que esta implementação é totalmente diferente da implementação de hashCode() do java, que é algo parecido com:
((int) getDataFim().getTime()) ^
((int) (getDataFim().getTime() >>> 32))