Archive

Archive for October, 2008

Tradução do Livro Why’s (Poignant) Guide to Ruby para português

October 31st, 2008

Olá pessoal..

Os desenvolvedores da comunidade RoR no Brasil trabalham muito mesmo..

Existe um livro (em inglês) chamado Why’s (Poingnat) Guide to Ruby do autor Why, the Lucky Stiff, ainda em processo de finalização, que está sendo traduzido para português por alguns raylers brasucas. Esse é o LINK. Com relação ao nome do autor, admito que também fiquei confuso, mas vasculhando na internet descobri que é uma espécie de codinome que representa um personagem fictício, mais ou menos isso.

O trabalho é liderado por Carlos Brando e conta com a ajuda com uma série de desenvolvedores empenhados em terminar os capítulos o mais rápido possível. O livro está no formato HTML e pode ser acessado livremente. Fica aí a dica para mais um livro em português.
Obs:O legal de tudo é que traduziram até as ilustrações com os diálogos. Também gostei do modelo de “livro beta”.

Att.

Book, Ruby , , ,

Elegância com simplicidade

October 30th, 2008

A pouco tempo, iniciei meus estudos com Ruby em conjunto com framework Rails. Deparo-me, até hoje, com muitas diferenças (principalmente por desenvolver em Java) e muitas delas são extremamente interessantes. Uma das características que me chamou atenção foi a mistura de elegância e simplicidade. Peguei uma pequena implementação do Patter singleton na wikipedia para mostrar a vocês do que eu to falando:

Em Java:
public class Singleton {
private static volatile Singleton INSTANCE;
protected Singleton() {
super();
}
public static Singleton getInstance() {
if (INSTANCE == null) {
synchronized(Singleton.class) {
if (INSTANCE == null)
INSTANCE = new Singleton();
}
}
return INSTANCE;
}
}

Em Ruby:
require 'singleton'

class Example
include Singleton
end

É notável a diferença. Para quem está familiarizado com outras linguagens é normal ficar impressionado com isso. Porém, não podemos nos esquecer que, o Framework ainda apresenta pontos que dificultam sua utilização em aplicações de larga escala.

Acredito que em breve, com o trabalho constante da comunidade, o framework amadurecerá e estará pronto para ser utilizado em aplicações de grande demanda.

Java, Ruby , ,

Grid Gain, o pequeno notável

October 28th, 2008

Desenvolver softwares para grades computacionais, além de ser uma tarefa árdua é extremamente complexa, principalmente pela necessidade de manter a escalabilidade dos peers(participantes) estáveis sobre a arquitetura de grid. É necessário se preocupar com detalhes referentes a comunicações, protocolos, paralelismo, tolerância a falhas, entre outras dificuldades que a plataforma apresenta.

Pelo fato da plataforma ser complexa, foram criados inúmeros frameworks com o objetivo de minimizar os detalhes. Entre os mais populares e robustos está o Globus ToolKit , recomendado pela Globus Aliance . O Globus ToolKit é um conjunto de ferramentas que tenta cobrir todas as necessidades relacionadas a Grid Computing. Porém, é complexa e ao mesmo tempo pesada.

Uma alternativa para aplicações de pequeno e médio porte é o Grid Gain. Framework escrito em Java, mantido por Nikita Ivanov, que demonstra ser muito eficiente e simples de utilizar, já que não necessita de muitas das funcionalidades contidas no Globus Toolkit.

Agora, se você for construir uma aplicação que roda na infraestrutura do LHC, SETI@HOME ou similares, aconselho você usar o Globus ou implementar um do zero.

Frameworks, Grid Computing, Open Source , , ,

P2P – Da Anarquia ao Triunfo

October 27th, 2008

No fim da década de 90 nos deparamos com o formato de arquivos de áudio chamado mp3, que eliminava a maioria das freqüências não audíveis ao homem para comprimir o seu conteúdo, tornando a transmissão de faixas de CDs possíveis através desse formato extremamente compacto. A partir desse momento, iniciou-se uma grande revolução na comercialização musical e conseqüentemente a ira das gravadoras que não se adéquam, até hoje, ao novo modelo de negócio existente.

A transmissão de arquivos digitais veio à tona com a utilização de software que utilizavam uma espécie de protocolo simples, porém desconhecida, o P2P. O Pear to Pear (Par para Par) é um protocolo descentralizado que não necessita de nenhum elemento que gerencie conexões entre dois pontos, transferindo a responsabilidade para o usuário e não para o criador do software. Advento que tornou popular a distribuição de softwares como Napster, Kaaza, EDonkey, Emule e entre outros derivados.

A tecnologia foi completamente disseminada e ao mesmo tempo marginalizada. Já que, sempre que possível, artistas, gravadoras, ou seja, profissionais que viam suas criações protegidos pelas leis da propriedade intelectual ser disseminadas como propaganda, criticavam erroneamente a infra-estrutura que permitia o compartilhamento da obra. Logo, o problema se alastrou com a possibilidade de compartilhar livros, filmes e software. O pior de tudo são as leis não podiam agir para proibir esse ato, já que não existia uma entidade centralizadora que permitisse, ou até mesmo, contribuísse para o compartilhamento de conteúdo digital.

O que as pessoas não davam conta é que o protocolo de compartilhamento, o principal ator de todo o processo, era utilizado em massa e mostrando a robustez do mesmo em uma rede gigantesca e de funcionamento em larga escala. Muitos não se davam conta da tecnologia que estava utilizando e no que poderia ser aplicada no futuro próximo.

Aplicações:

A utilização do protocolo de comunicação P2P para a resolução de problemas computacionais e construção de aplicações que poderiam usufruir dessa infra-estrutura foi projetada em pequena escala. Um exemplo disso foram os comunicadores MSN e Skype .

Era impossível de encontrar software que utilizassem a tecnologia, de forma expressiva, através de aplicações comerciais. Porém, em virtude das qualidades exploradas apenas por cientistas, era sim visível dentro dos laboratórios em diversas universidades espalhadas pelo mundo.

Cientistas e engenheiros perceberam o potencial da tecnologia através da ausência do elemento centralizador. Normalmente, elementos centralizadores, como servidores e datacenters, tornam elevados os valores das soluções propostas. Portanto, explorar o fator custo seria a chave para o sucesso da tecnologia na utilização em larga escala que também demonstrava ser flexível, permitindo também a colaboração mútua de usuários no redor do mundo.

Recurso que foi utilizado para a colaboração em diversos projetos importantes. Entre os mais famosos estão o projeto de mapeamento dos genes humanos, o Projeto Genoma, o sistema de busca de vida alienígena no espaço, o SETI@HOME e o ultimo porém não mais importante está o HLC . Esses projetos utilizam uma tecnologia derivada do P2P, chamada de Grid Computing que será discutida mais tarde. Essa tecnologia utiliza um modelo de protocolo P2P e um conjunto extra de funcionalidades que serão discutidas posteriormente, já que é o assunto quente do momento.

GAMES

Aplicar os recursos da tecnologia para o desenvolvimento de jogos é o objetivo das principais softwarehouses da área, principalmente em games estilo MMOG. A razão principal para o investimento nessa área é de cortar custos com servidores. Ou seja, o desenvolvimento de games é uma tarefa árdua. Requer investimento em áreas como design, desenvolvimento de software, antropologia, cinema e música. Produzir um bom produto para o usuário final requer investimento maciço nessas áreas, olha que eu não citei o pós game como a publicidade e marqueting do produto.

Os MMOGS são jogos que representa um mundo no qual usuários de diversas partes do mundo interagem seguindo o objetivo do game. Normalmente encaixam-se nesses gêneros jogos de RPG, já que devido a longevidade, o estilo adapta-se muito bem para os MMOGs. Jogos como World of Warcraft levaram o estilo a tona com boa jogabilidade e muita diversão.

No entanto, fazer bons jogos não basta. Quando se trata de MMOGs a interatividade entre os participantes é a parte mais complicada, já que existem pessoas de todo o mundo conectado ao servidor central aprendendo a jogar, travando batalhas, conversando, negociando itens, se fortalecendo,fazendo campanhas, fazendo alianças, entre outras coisas que a plataforma nos permite fazer. Para que tudo isso possa ser feito torna-se necessário um grande investimento na infra-estrutura que irá suportar essa demanda.

Neste ponto, a tecnologia descentralizada P2P entra em ação fazendo com que o investimento na infra-estrutura de MMOGs seja o mínimo possível em comparação com o anterior. Portanto, com a utilização da infra-estrutura P2P, toda a interatividade ficaria sob responsabilidade apenas dos participantes do jogo.

Bom, se isso é tão bom e lucrativo para os desenvolvedores, porque não foi implementado? A resposta é simples. Nesse ponto, a tecnologia se mostra imatura. Fazer com que todo o controle de interatividade fique com o usuário é uma faca de dois gumes. Com um ambiente centralizado já é extremamente difícil controlar os cheets(trapaça), imagina com o controle de tudo isso feito no cliente. Além do mais, nesse tipo de jogo é necessário que o usuário salve o estado atual, ou seja, seus pontos de habilidade, itens armazenados, energia, pontuação, etc. Se isso tudo for salvo na máquina do usuário seria uma grande oportunidade de usuários alterarem seus atributos para trapacearem.

O que eu citei aqui foi uma das barreiras que tecnologia necessitará resolver quando for utilizada para efetuar a comunicação entre os pares. Além disso, existe outros inúmeros problemas que devem ser resolvidos como: mecanismos de tolerância a falhas, reconhecimento de jogadores, alocação de jogadores em mundos, roteamento de pacotes através de peears, etc. Isso é assunto para outros post. Não vamos ficar só em jogos não é…

VOIP

A tecnologia de voz sobre protocolo da internet está em constante evolução. A necessidade de conversar sobre tarifas mais baratas, e através da internet, fizeram com crescesse a demanda sobre essa tecnologia. Com isso, criaram os protocolos H323 e SIP que visam a qualidade no tráfego de voz através dos protocolos de internet.

Até ai tudo bem. Mas onde está a aplicabilidade do protocolo sobre essas tecnologias? Na verdade, a aplicabilidade é feita a partir da integração das tecnologias de transmissão de voz com o P2P. Essa é uma idéia que já está sendo desenvolvida pelas empresas de celulares a aplicações móveis.

A integração dos protocolos de voz com o P2P consiste em utilizar a mobilidade e o para integrar e a flexibilidade do protocolo para possibilitar a comunicação VOIP entre telefones celulares através da internet.

Futuro do Protocolo

No momento, aplicações que utilizam protocolos P2P de forma massiva são escassas, principalmente pelo fato de ser um protocolo que não é visto com bons olhos para o usuário final. Porém, pesquisas em aplicações que tentam resolver problemas científicos utilizam a tecnologia de forma massiva.

No momento, pesquisar P2P, ou desenvolver pesquisas que utilizam a tecnologia, poderá ter resultados em longo prazo, principalmente pelo fato das tarefas executadas pela centralização serão todas feitas nos peers. Isso significa que tecnologias derivadas, como Grid Computing e Cloud Computing, tornarão tecnologias populares e acessíveis a todos os usuários como técnologia doméstica ou prestação de serviço.

Grid Computing, Open Source, P2P - Peer to Peer

Hibernate – Dicas para desenvolvedores

October 20th, 2008

Muitos desenvolvedores que utilizam Hibernate como camada de persistência já se depararam com problemas de Lazy Load, principalmente em aplicações WEB. Isso acontece quando esquecemos de ler a documentação do produto referente a utilização nesse ambiente. O resultado disso são sucessíveis erros referente a sessões duplicadas na aplicação.

Deixamos isso de lado, pois esse problema será discutido em outro post. Vamos nos concentrar no que é esse tal de Lazy Load.

  • Lazy Load

Lazy Load(Carga Preguiçosa) nada mais é um padrão de projetos utilizado na maioria dos frameworks de persistência, com implementações específicas para cada arquitetura. A justificativa da sua utilização é de minimizar a carga dos objetos que possuem relacionamento com o objeto solicitado, carregando a lista de coleções apenas quando acessado.

O hibernate habilita o recurso Lazy Load por padrão para evitar que os objeto relacionados sejam carregados por parão. Porém, em alguns casos a utilização desse recurso deve ser controlada. Principalmente no caso que as tabelas referenciadas pelos objetos persistes estão repletas de informações. Nesse caso, deve ser utilizado um recursos como HQL/SQL, consultas embutidas ou tá mesmo configurações que limitam a carga total das tabelas.

A mágica contida na implementação do padrão está no trabalho com conjunto com outros padrões de projetos aplicando técnicas de desenvolvimento. Padrões de projetos como o proxy que tem a finalidade de prover um wraper que instancia e inicia os objetos solicitados. Técnicas com a instrumentação de código que encapsulam funcionalidades extras nas classes persistentes. Para que isso aconteça, o mapeamento, em conjunto com as configurações, devem ser bem feitas para tornar toda a aplicação funcional.

  • Desenvolvimento de aplicações WEB com Hibernate

Desenvolver aplicações WEB que utilizam hibernate é uma tarefa desafiadora para desenvolvedores de primeira viagem, principalmente quando o projeto tem diversos relacionamentos e requer constante acesso a bases de dados. Participei de alguns projetos que esses problemas vieram a tona e foram resolvidos. Nos próximos posts publicarei algumas técnicas que foram utilizadas para resolver os problemas de Lazy Load, transações, múltiplas sessões e open session in view.

Frameworks