domingo, fevereiro 05, 2012

Novo Blog

A quem interessar possa…

Não estou mais utilizando este blog… O endereço do novo blog é: http://fbatista.com.br/blog/

quinta-feira, abril 19, 2007

A mágica do DetachedCriteria

NHibernate é bom mesmo.

Eu tinha o seguinte código hoje pra otimizar (extraído de um Controller do projeto que estou trabalhando):

[Layout("popup")]
public void Observacoes([ARFetch] Pedido pedido, [ARFetch] Fornecedor fornecedor)
{
SimpleQuery consulta;

if (fornecedor == null) {
consulta = new SimpleQuery(@"
from ObservacaoPedido obs
where obs.Pedido = ?
order by obs.CriacaoData
", pedido);
}
else {
consulta = new SimpleQuery(@"
from ObservacaoPedido obs
where obs.Pedido = ? and obs.Fornecedor = ?
order by obs.CriacaoData
", pedido, fornecedor);
}

IEnumerable observacoes = consulta.Execute();

PropertyBag.Add("pedido", pedido);
PropertyBag.Add("fornecedor", fornecedor);
PropertyBag.Add("observacoes", observacoes);
}


Qual era o problema dele? A princípio, nenhum... Mas o NHibernate tem uma certa particularidade: quando o carregamento de objetos veio de uma consulta HQL, ele não cria proxies para os objetos (ou seja, sem lazy-loading para relacionamentos muitos-para-um), e só carrega exatamente o que diz minha consulta. O resultado é um turbilhão de consultas sendo enviadas ao banco, para carregar os dados que "faltaram"... Mesmo que eu não use eles.

Introduzindo, então, o DetachedCriteria:

public void Observacoes([ARFetch] Pedido pedido, [ARFetch] Fornecedor fornecedor) {
QueryBuilder q =
Where.ObservacaoPedido.Pedido == pedido;

DetachedCriteria crit = q;
crit.SetResultTransformer(new DistinctRootEntityResultTransformer());
crit.SetFetchMode("Anexos", FetchMode.Eager);
crit.SetFetchMode("Anexos.Arquivo", FetchMode.Eager);

IEnumerable observacoes =
ObservacaoPedido.List(crit, OrderBy.ObservacaoPedido.CriacaoData);

PropertyBag.Add("pedido", pedido);
PropertyBag.Add("fornecedor", fornecedor);
PropertyBag.Add("observacoes", observacoes);
}


O código, menor, ficou até um pouco mais claro, apesar de ter ficado mais arcano, expondo mais o NHibernate. Teria ficado mais ainda, se eu não tivesse utilizado o NHQG do Ayende para gerar o DetachedCriteria.

O resultado? Apenas uma consulta sendo enviada ao banco, e o tempo de carregamento de uma tela baixou de 3s pra 0,4s.

segunda-feira, abril 09, 2007

Google MyMaps

O Google acaba de lançar a interface MyMaps, onde qualquer um pode criar seu próprio mapa, sem precisar conhecer a API de mapas.

Parece interessante. Ainda não vi como usar, mas vi um mapa bem legal:

The World of Hello World: um mapa contendo as principais linguagens de programação, a indicação de onde foram inventadas, e um exemplo de código. É sempre legal rever aquele código COBOL ou Fortran e ficar aliviado, de como já passamos daquela fase.

sexta-feira, janeiro 19, 2007

Corrigindo dead-pixels em monitor LCD

Hoje estava respondendo um email, e, na bagunça da minha mesa, acabei jogando pra cima do meu monitor LCD uma coisinha de metal, talvez magnetizado (não tenho certeza).

Resultado: um borrão preto na tela, na parte onde o metal encostou (entendi esse borrão como uma série de "dead pixels"). Fiquei desesperado: desliguei o monitor, liguei de novo, mexi em tudo o que é tipo de configuração, procurei o tal Degauss (não encontrei)...

Enfim, fui ao Google tentando encontrar uma forma de solucionar o problema. Pra mim, o problema era de hardware, e eu já estava pronto pra encontrar uma solução do tipo, "abra o monitor", ou "jogue fora e compre um novo", etc, etc.

Daí encontrei esse site aqui:

JScreenFix - Free software to fix stuck pixels and burn-in

A princípio não acreditei: como um software pode corrigir um problema de hardware? Mas, eu já estava desesperado, e resolvi arriscar.

E não é que funcionou? Nem precisei instalar nada: o site abriu uma janela Java, e eu arrastei ela pra cima do borrão. Quando tirei, o bottão tinha sumido, e o monitor estava de volta ao normal!!

domingo, janeiro 07, 2007

Vídeo-clipes com letras

Achei hoje, bem por acaso.

MuVids.com - Music Videos With Lyrics On Demand

Vale a pena... Pena as letras não serem sincronizadas com a música... Mas já é mais do que eu esperava... Estava procurando apenas pela letra de uma música, é legal ver o clipe junto :)

quinta-feira, dezembro 21, 2006

Sonho de consumo

Não sou muito de jogos, mas isso é um sonho de consumo!

Surround gaming with TripleHead2Go

Driver da Epson C45 para x64

Esse foi um dos mais demorados pra encontrar.

Segue o link, caso alguém precise: Download - Epson Stylus C45 for Windows XP 64bit.

quarta-feira, novembro 29, 2006

A saga de 64 bits

Nesse último final de semana compramos um computador novo aqui na empresa... Um Dell Dimension E321, Athlon 64 X2. Muito boa máquina...

É minha primeira experiência no mundo 64 bits... E também no mundo dual-core.

Esses primeiros dias estão sendo bastante interessantes: revirei a intranet atrás de drivers para o Windows 2003 Server R2 x64... Quase tudo 100%, até agora, só a Epson sacaneou: nem sinal de drivers para a C45.

Hoje consegui instalar o último dos meus softwares essenciais: o SpamBayes. Já havia instalado, mas ele não deixava eu abrir o Outlook, daí tive que desabilitar. Hoje achei a peça que faltava na FAQ. Era só mandar o Windows ignorar DEP no Outlook.

quarta-feira, novembro 01, 2006

WikiMapia

Wiki e Google Maps... Fantástico.

Quer ver todos os pontos do Parque da Redenção, em Porto Alegre?

http://wikimapia.org/#y=-30035969&x=-51214861&z=17&l=0&m=a

Excelente também pra achar nomes de ruas através de pontos de referência... Basta ativar o modo híbrido.

quarta-feira, outubro 11, 2006

Google Code Search

Pra não perder o embalo, mais um produto novo dessa madrugada do Google:

Google Code Search

Google Docs & Spreadsheets

Em primeira mão!

Google Docs & Spreadsheets (veja o anúncio).

Estava usando o Google Spreadsheets, quando minha planilha se desconectou (acontece às vezes). Qual não foi minha surpresa ao clicar em "reload", e verificar que o Google Spreadsheets tinha virado Google Docs & Spreadsheets.

Parece que a compra do Writely não foi em vão.

sábado, setembro 09, 2006

Jogando joguinhos DOS

Quem é da minha época, de vez em quando deve ter saudades daqueles joguinhos antigos, do DOS... Alguns eram fantásticos, obras de arte.

Estava lembrando já há algum tempo de um joguinho bastante interessante daquela época, o Relentless: Twinsen's Adventure (ou Little Big Adventure, em alguns países). Procurei um pouco por ele na internet e encontrei, num desses sites de Abandonware. Mas, infelizmente, não teve como rodá-lo no Windows XP.

Procurando mais um pouco, encontrei recomendações de rodar jogos DOS utilizando o DOSBox. Eu já tinha usado o DOSBox no Linux, pra rodar uns programas em Clipper, mas nunca tinha usado no Windows pra rodar jogos. E não é que funcionou mesmo?

Então, fica como recomendação pra quem quiser restaurar os joguinhos baseados no DOS4GW ou similares: DOSBox neles!

terça-feira, agosto 22, 2006

Parceria entre Microsoft e Mozilla?

É, os tempos mudam:

Microsoft Offers To Help Firefox Run On Vista

Parece que a Microsoft tem um Laboratório de Open-Source, e um representante desse laboratório enviou um e-mail à Mozilla oferecendo auxílio aos desenvolvedores da fundação para fazer o Firefox e Thunderbird rodarem no Windows Vista.

Quem sabe o Firefox não pode começar a vir instalado no Windows Vista? Pode ser uma boa, quando o Vista for lançado, em 2015.

quarta-feira, julho 05, 2006

Bug nos Generics do .NET 2.0

Passei as últimas 6h procurando pela causa de um maldito BadImageFormatException, lançado pelo .NET quando carregava um Assembly (DLL) meu.

Após muita depuração, pesquisa no Google, uma barra de chocolate Alpino e meio litro de Coca-Cola Light Lemon, finalmente encontrei o problema. Acabei reservando meus 15 minutos seguintes de insônia para isolar o problema e escrever um breve código para quem quiser reproduzí-lo.

Acho que pouca gente vai tentar fazer um uso tão obscuro de Generics do .NET 2.0... Mas, em todo caso, segue o link: http://fabio.pastebin.com/740463

sexta-feira, junho 09, 2006

.NET Framework 3.0

Nada mais de WinFX: o nome oficial da tecnologia de desenvolvimento que virá com o Windows Vista agora é .NET Framework 3.0 mesmo.

Muito bom, a meu ver. WinFX é invenção do pessoal de marketing, mas, no fim das contas, não passa disso: novas classes pro runtime do .NET.

Se continuar a onda de sinceridade, daqui a pouco vão assumir que o Windows Vista na verdade não passa de um Windows 98 TE (Third Edition).