terça-feira, 27 de maio de 2008

Java, .Net, Ruby.... Delphi(?)

Tive uma conversa muito boa com um amigo, Victor Benjamin. A atual troca de emprego o deixou motivado, o que serviu de combustível para a convera, parabens pela nova estapa Victor.

Bem, na conversa falamos sobre o que o Java tem de bom, de ruim e o que não queremos nem falar. Como somos pessoas curiosas, temos visto algumas outras linguagens e ambientes, mas acredito particularmente que não exista a linguagem certa para todo o tipo de caso. Como dito em outros blogs, o importante é código funcionando.

Estou com um trabalho pessoal em curso, usando Java, separado em camadas implementando o máximo possível de DDD e uma coisa é certa: escrevemos muito. Para cada camada deve-se ter uma interface que define os métodos, a implementação, os testes unitários, as fabricas, os DTOs, etc. Não estou dizedo que é ruim, estou dizendo que codificamos muito. Apenas contando, um sisteminha de cadastro bem separado para Cliente, Produto e Compras precisa de pelo menos 3 Interfaces de definição para cada serviço, suas respectivas implementações, 3 Repositórios, um para cada classe, e separando a camada física, 3 DAOS, mais as classes de domínio e os DTOS. Somado isso estamos falando de uns 20 arquivo diferentes para 3 cadastros, parece um número um pouco auto.

Outro projeto pessoal que está na pauta, devo voltar a colocar a mão nele tão logo sobre tempo ou o dia passe a ter 36hs, está sendo feito em Ruby on Rails. Não da para comparar pedra com laranja, por isso não vou tentar comparar os dois universos, mas o tempo de codificação é muito pequeno. Praticamente, em um dia todo o cadastro estava pronto, foi ai que parei. A linguagem é ótima, fácil de usar e clara, o Rails tem suas peculiaridades, mas não é de todo mau.

Na empresa estou num projeto em Delphi, não é o ceu, na verdade é perto do purgatório. A linguagem é antiga e não tem muito dos facilitadores que as novas possuem mas, ainda assim, da para se fazer muita coisa legal. Uma das coisa que há em Object Pascal (iach) é o conceito de property, um modificador que permite um nível de get/set. O trecho de código abaixo exemplifica o property, basicamente ele esconde o get e o set que poderá ser definido no futuro, se necessário, sem alterar o código que o chama.


Cliente = class()
private
_nome : String;

_idade : integer;
function getIdade() : Integer;
procedure setIdade(idade : integer);
public
property nome : String read _nome write _nome;
property idade : Integer read getIdade write setIdade;
end;


O objetivo dessa discursão é mostrar que cada linguagem tem o seu "sintax sugar", que um ou outro programador irá gostar, mas o que importa não é isso, o que importa é código funcionando. Uma das premissas do manifesto ágil é essa. Se você está trabahando em um sistema de cadastro para uma campanha publicitária qualquer, não irá precisa se preocupar em fazer o sistema de tal modo que rode até em um palm (modularizando, usando WebServices e EJBS, etc..). A questão é o foco, o que você precisa, em quanto tempo e o que você sabe.

sexta-feira, 16 de maio de 2008

Meu Macbook


A uns 4 meses comprei um MAC, Macboook Intel 2.0Ghz e 1 Gb de memória, e gostaria de compartilhar o que tenho achado do Sistema Leopard.

A aparência é uma coisa fenomenal, todo branco é um contraste em qualquer lugar. O unico problema com a cor é que pode amarelar com facilidade, especialmente na área do teclado que é um pouco poroso. Para evitar que ele passe de branco para encardido é bom limpar de vez em quando, eu uso álcool gel para limpar, não agride e fica tudo branco de novo.

Quanto ao sistema operacional é fácil de usar e o sistema de busca é fantástico, depois que se acostumar não vai mais conseguir parar de usar. Uma das coisas que percebi é que rodar aplicativos mais pesados deixa a maquina um pouco lenta. Alguns colegas compraram mais memória e pela conversa a máquina ficou outra. Eu uso o meu para trabalho e coisas pessoais, como sou um cara de informática, tenho programado muito nele. O ambiente java é bem integrado mas come memória. Rodando o Netbeans com o Glassfish e uma aplicação desktop ao mesmo tempo a máquina simplesmente senta.

A uns 2 meses atrás estava com o Ubuntu instalado como segundo SO, mas tive que trocar pelo Windows por causa de um trabalho que precisei fazer. Os sistemas rodaram muito bem, os drivers para o windows estão todos no cd de instalação do Leopard já o Ubuntu reconhece sozinho quase tudo, só tem que fazer um ou dois truques para a câmera funcionar.

É uma ótima compra e o preço já está compatível com o outros aparelhos com o mesmo hardware no mercado. A fenac e o fastshop são ótimas lojas para comprar. Acho que não vale mais apenas trazer de fora, a diferença não compensa e comprando aqui mesmo ainda tem nota fiscal e garantia.

Se você já tem um e está querendo trocar a memória, da uma olhada nessa no mercado livre e as dicas de troca podem ser vistas no próprio site da apple

quarta-feira, 14 de maio de 2008

Homem de ferro - Iron Man


Quem viu o filme Homem de Ferro deve ter ficado fascinado pela armadura que o Stark construiu. Andei pesquisando o que seria possível ou não daquela armadura hoje em dia e compilei um material.

O maior problema para o funcionamento da armadura é a quantidade de energia necessária para funcionar. Seria necessário um reator nuclear para gerar a energia necessária par levantar vôo. O fato dela ser a prova de balas é outro problema, o peso de materiais desse tipo costuma ser alto devido a grande densidade do material necessária para parar uma bala, ou seja, o próprio peso da armadura exige mais energia para voar e até mesmo para um simples passo. A não ser que ele tenha descoberto como fazer fusão a frio, fica difícil acreditar que a curto prazo tenhamos algo do tipo.

Uma coisa clara é que metais são ótimos condutores de calor, e todos sabemos que não devemos colocar a ponta da colher no fogo e segurar na outra ponta senão queimamos a mão. Esse efeito acontece também nas botas do Homem de Ferro. No final da bota há um propulsor que o lança em vôo, como a bota é feita de metal o calor gerado pelo porpulsor iria simplesmente cozinhar a perna de quem a usar.

O capacete dele é uma coisa fenomenal, acho que a única que conseguimos algo parecido hoje em dia. O sistema de mira que é utilizado em uma das cenas para matar os bandidos é muito legal, se baseia em 3 tecnologias que conhecemos bem hoje em dia, detecção de rostos, calculo de distância baseado em imagens e triangulação. O telefone celular acoplado a armadura é demais, provavelmente usa alguma tecnologia VOIP ou se conecta via Bluetooth. Uma das coisas que mais gostei foi o sistema inteligente que o Stark conversa a todo tempo, reconhecimento de comandos de voz e iteratividade dessa forma é demais, estou estudando algumas coisas desse tipo para colocar na minha armad... ops, no meu computador pessoal(rsrsrs).

terça-feira, 6 de maio de 2008

Sistemas distribuídos

Uma das coisa que está muito comum hoje em dia é a utilização de aplicações distribuídas. Esse tipo de aplicação se caracteriza pela distribuição das tarefas mais de um equipamento. Em Java a utilização de EJBs, WebServices, RMI e JMS tornaram isso ainda mais fácil.

Iniciativas como o World Community Grid é um dos projetos que torna cada vez mais acessível ao usuário domestico a participação no processamento problemas como a cura do câncer ou o projeto genoma. Com o aumento da colaboratividade causado pelas redes de computadores o assunto está em pauta. Alguns softwares de pesquisa para o computador pessoal estão colocando essa idéia em pratica e já é possível em uma pesquisa por um arquivo qualquer ver se ele existe não só no computador pessoal, mas em qual computador da rede ou empresa.

Hoje há ainda softwares como o Wuala que permite a utilização de um sistema de arquivos distribuído. Quando você salva um arquivo nesse ambiente ele é copiado para uma série de computadores na internet. Quando você precisar do arquivo ele simplesmente baixa o arquivo de um desses computadores e o interessante é que a pessoa que etá guardando o arquivo tem acesso a ele.

No próximo blog vou tentar colocar aqui um trabalho de pesquisa que estou fazendo com o Lucene para ambientes distribuídos para ilustrar melhor a situação.