Blog do Eduardo Costa Meu blog pessoal

9Abr/110

Frase Java do dia

Depois de, sem querer, achar o perfil do Bruno "JavaMan" Souza no Facebook, lembrei que desde a "implosão" da Sun pela Oracle, ele, James Gosling e outros figurões de Java "perderam o emprego". Então, fica a frase do dia (de autoria própria):

"Se ser bom em Java garantisse o emprego, hoje Bruno Souza e James Gosling seriam funcionários Oracle"

Imagina então os pobres mortais que nem eu e mais um exército de outros! Muito profundo para a minha visitada anual ao Facebook!

4Fev/110

Hello iTunes world

Após seguir toda a burocracia obrigatória pela Apple, finalmente consegui publicar minha primeira aplicação na Apple Store: My Simple Weight Memory. Um aplicativo bem simples, para manter registro de seu peso ao longo do tempo. Serviu-me como experiência para aprender o processo, mas tem qualidade o suficiente para que a Apple não rejeitasse pela simplicidade.

29Out/100

Exemplo básico de LOBs no Oracle

Após pesquisar um pouco na Internet, descobri que a pior parte de usar LOBs no banco Oracle é a falta de um exemplo simples. Carregar e gravar imagens na pasta física do banco é fácil de encontrar. Usar arquivos do cliente (ex: Forms), nem tanto.

Eis um snippet para gravar qualquer tipo de conteúdo em um blob (assumindo uma tabela "tb_teste" com os campos "id integer" e "img blob", com um registro "(1, empty_blob())"):

DECLARE
 x   BLOB;
 buf raw(10);
 amount INTEGER := 5;
BEGIN
 SELECT img INTO x FROM tb_teste WHERE id = 1 FOR UPDATE;
 
 buf := '1234567890';
 dbms_lob.WRITE(x, 5, 1, buf);
 commit;
 
 buf := '0000000000';
 SELECT img INTO x FROM tb_teste WHERE id = 1;
 dbms_lob.READ(x, amount, 1, buf);
 
 dbms_output.put_line(buf);
END;
/

Com a vantagem que é um bloco fácil de adaptar para Java, Forms, etc.

15Set/100

Apanhando on Rails

Sou um completo noob em Ruby e Ruby on Rails. Sempre imaginei que deveria ter seu mérito, uma vez que a comunidade é grande e ativa. Como meu novo servidor diz suportar ruby gems, decidi dar mais uma chance ao garoto.

Dei uma olhada no screencast do Rails, no qual o palestrante cria um blog do zero, e até gostei da idéia geral. A parte de instalar o Ruby, o Gem, o Rails e amigos assusta, mas meu amigão do peito, o NetBeans, gerencia isso incrivelmente fácil. Ficou tão sem graça que decidi animar a brincadeira, trocando o JRuby que veio com o NB pelo Ruby baixável do site. Claro que, para complicar ainda mais, instalei a versão ZIP, que requer instalar o Ruby Gem manualmente. Considerando o nível da bucha, até foi tranquilo fazer tudo isso.

Após baixar o screencast para ver "quadro-a-quadro", fui repetindo as etapas no NB (que, por sua vez, tem atalho para tudo) e, em questão de alguns minutos, lá estava o tal blog que a propaganda vendeu.

Dessa vez, tudo começou a fazer sentido nessa "jóia vermelha" - e até estou gostando! A curva de aprendizado é muito cruel, mas parece ser recompensadora.

A parte que não gostei foi a confusa integração com bancos que não são o MySQL ou o SQLlite. Derby precisa usar drivers JDBC e eu odeio camadas de integração para comunicar com frameworks de integração. Postgres só dá erro na instalação do Gem. Oracle ainda não pude testar (mas acho que usa o OCI, que é dor-de-cabeça por definição).

Em resumo, ainda tem muito chão a percorrer!

28Jan/100

Prêmio de código inútil da semana

Vai para esta classe:

import java.util.Comparator;
 
public interface Comparador<T> extends Comparator {
  int compare(T obj1, T obj2);
}

Lembrando que a interface "Comparator" já é genérica!

15Out/080

Novas (e antigas) técnicas de programação

Um colega me enviou um link interessante sobre o BDD (Boss Driven Development). Achei muito divertido, principalmente por ser verdade em muitas empresas. Graças a Deus, onde trabalho não é assim, mas já trabalhei em lugares onde a idéia é agradar o chefe, e a empresa como um todo fica em último plano. Realmente horrível.

Usando o HT do HTML, encontrei o blog Fragmental que, entre outras coisas, falou o que penso das consultorias. Bom saber que não é opinião só minha. E, mais um link depois, achei a pérola que eu queria: um artigo que fala que nem só de VOs e BOs vivem as aplicações JavaEE.

Odeio cebolas. Tanto as leguminosas quanto as feitas em Java. As duas são amargas, cheias de camadas e fazem você chorar quando começa a mexer com elas. Para mim, não tem nada mais grotesco do que uma aplicação cebola, com mais camadas que classes.

A receita para uma aplicação cebola é simples: basta colocar um design pattern em cada recurso novo de seu sistema. "Tenho que fazer 2+2 aqui" - transforme em uma factory de operações matemáticas que recebe a operação (um command) e uma lista de operandos, todos na forma do flyweight. Afinal, daqui a uns cinco anos, alguém pode querer fazer uma subtração ou somar "1+1".

Claro que esse exemplo é extremista, mas a realidade não é muito distante. Já vi situações em que o programador previu a possibilidade de enviar um item para vários MDBs diferentes, cada um com seu filtro próprio, para dizer se deve ir ou não para aquele destino. Ótima idéia, mas a aplicação ficou dois anos em produção até surgir a possibilidade do segundo MDB e, quando surgiu, esse pattern foi a primeira coisa ejetada da aplicação, pois o filtro iria para outra aplicação.

Pergunto: adiantou levar todo esse tempo para elaborar esse arcabouço?