Skip to content

Democratic web host

Let's pretend we're just two people - 41/365

Desde que o porca morreu, estou hospedando meu blog no Dreamhost. Host bem bacana, uma série de features úteis (Subversion, Rails, etc etc), mas sempre há espaço pra melhoras. E eles tem uma forma bem legal de fazer isso, através de um espaço para os usuários votarem quais features acham legais de serem adicionadas. Dando uma passada rápida por cima achei algumas legais:

Sugestões também são bem-vindas.

Popularity: 20% [?]

Hibernate: save() ou persist()?

Hibernating Koala Bear

Por mais vasta que a documentação do Hibernate seja, sempre ficam pontos da API que precisam de melhorias na documentação. Um exemplo claro disso é esclarecer qual a diferença entre dois métodos da Session, o save() e o persist(). Ambos tem a mesma função: tornar uma instância transient em persistent. Segundo a doc da API:

  • persist() - Make a transient instance persistent.
  • save() - Persist the given transient instance, first assigning a generated identifier.

O método persist(), não garante que será atribuito um id à instância imediatamente, sendo que a associação ocorrerá quando o flush ocorrer. Além disso, ele garante que só irá executar um insert se estiver dentro do contexto de uma transaction. Já o save(), atribui a chave imediatamente, não importando se isso exige um insert (no caso do identity generator) ou se existe um contexto de transação. Isso explica também porque o save() retorna o Id gerado e o persist() é void.

Mais informações podem ser encontradas no Jira e no fórum do Hibernate.

update: não é somente eu que acha que a documentação precisa de melhorias nesse caso: HHH-1682

update 2: acabei de comitar a alteração na documentação, para a próxima versão do Hibernate (3.2.5), a seção Making objects persistent irá trazer informações mais detalhadas sobre a diferença entre os dois métodos.

Popularity: 61% [?]

Tagged , ,

Pipoca com guaraná

cinema's abandoned dreams

Uma dos meus passa-tempo favoritos é definitivamente assistir filmes. Diria que é o favorito. E o que mais gasta tempo. Freqüentemente me pego assistindo filmes que já vi 2,3 vezes - e pior, que já estão passando até na TV Tupi.

Pra piorar, resolvi assinar o feed da Apple Movie Trailers. O ano mal começou… Estamos recém em fevereiro e já tem muito filme legal saindo. Filmes novos, continuações, tem de tudo.

Dos que já estão em cartaz, Déjà Vu (com Denzel Washington) parece muito interessante, mas ainda não fui assistir. The Pursuit of Happyness (À Procura da Felicidade aqui) com o Will Smith é legalzinho, mas o fim deixa a desejar.

Mas dos que estão por vir, parece ser o ano dos fãs de HQ. Uma tonelada de HQs adaptados pra telona, novos e continuações.

E pra fechar, o que mais promete na minha opinião: 300. Desconsiderando a participação do Rodrigo Santoro como Rei Xerxes, parece ser um excelente filme - e os trailers fazem isso ficar ainda mais claro.

Popularity: 27% [?]

JSUnit

Crash Test Anyone?

Depois de quebrar a cabeça por um bom tempo, descobri que após adicionar a lib Prototype ao projeto, algumas validações javascript simplesmente deixaram de funcionar. O for in, que antes funcionava corretamente, muda seu comportamento devido à magia negra que o Prototype faz, adicionando algumas propriedades extras aos objetos (e também à arrays).

Se eu tivesse feito uma dúzia de JSUnits teria evitado mais de duas horas de tempo perdido, literalmente.

O que antes era:

o.isCNPJ = function(){
var d = this.split("");
var m1 = [d[0]*5,d[1]*4,d[2]*3,d[3]*2,d[4]*9,d[5]*8,d[6]*7,d[7]*6,d[8]*5,d[9]*4,d[10]*3,d[11]*2];
var s1 = 0;
for(i in m1){ s1 += m1[i]; }
var d1 = (s1%11<2)?0:11-(s1%11);
var m2 = [d[0]*6,d[1]*5,d[2]*4,d[3]*3,d[4]*2,d[5]*9,d[6]*8,d[7]*7,d[8]*6,d[9]*5,d[10]*4,d[11]*3,d1*2];
var s2 = 0;
for(i in m2){ s2 += m2[i]; }
var d2 = (s2%11<2)?0:11-(s2%11);
return (d1 == d[12] && d2 == d[13])? true: false;
}

Teve que virar:

o.isCNPJ = function(){
var d = this.split("");
var m1 = [d[0]*10,d[1]*9,d[2]*8,d[3]*7,d[4]*6,d[5]*5,d[6]*4,d[7]*3,d[8]*2];
var s1 = 0;
for(var i=0;i < m1.length; i++){ s1 += m1[i]; }
var d1 = (s1 % 11 < 2)?0:11-(s1 % 11);
var m2 = [d[0]*11,d[1]*10,d[2]*9,d[3]*8,d[4]*7,d[5]*6,d[6]*5,d[7]*4,d[8]*3,d1*2];
var s2 = 0;
for(var i=0;i < m2.length; i++){ s2 += m2[i]; }
var d2 = (s2%11<2)?0:11-(s2%11);
return (d1 == d[9] && d2 == d[10])? true: false;
}

Nessas horas que vemos que testes unitários sempre se pagam.

Popularity: 17% [?]

(r)Eclipsed

cool kids

Faz praticamente 2 anos que fiz um post que até hoje é um dos mais visitados aqui: Eclipsed. Naquele tempo, a quantidade de plugins - e qualidade, diga-se de passagem - era muito inferior.

Passado tanto tempo, o Eclipse já evoluiu muito, assim como seus plugins. Aproveitando o ócio das férias, tirei um tempo para atualizar o post adicionando outros plugins e também removendo outros que foram abandonados. Resumindo, faxina geral.

O Quirino sugeriu que eu fizesse um post novo - deixando o velho para histórico - , mas levando em conta que muita gente ainda vai continuar acessando ele, achei melhor atualizar diretamente lá, e comentar as alterações por aqui.

Começando pelos que foram removidos:

  • DataScope - muito tempo sem atualizações e agora é pago;
  • Sobalipse que foi descontinuado;
  • DBEdit - muito tempo sem atualizações;
  • Plugins Cleaner - não mais necessário;
  • SuperWaba IDE - além de ter sido descontinuado, acho que pouquíssimos usavam;
  • Laszlo Plugin foi descontinuado;
  • TruStudio foi absorvido pelo Eclipse DLTK que deve ser lançado daqui algum tempo;
  • JettyLauncher não recebe atualizações à um bom tempo e não oferece suporte ao Jetty 6;
  • Lomboz passou à ser somente algumas modificações do WTP e não está mais tão ativo;
  • FormatOnSave não será mais necessário com o lançamento da versão 3.3 do Eclipse;

Os adicionados já não foram tantos:

  • Aptana - excelente plugin para facilitar o desenvolvimento Javascript/Ajax, possuindo inclusive debug;
  • Subversive - permite conectar ao Subversion;
  • SQLEditor - cliente JDBC para banco de dados;
  • Eclipse-CS - permite verificar aderência à padrões de código;
  • Find Bugs - ajuda à encontrar bugs em código Java;

E sugestões sempre são bem-vindas.

Popularity: 24% [?]