sábado, 8 de março de 2008

Force


Nesse exato momento estou no La Fiama (uhu, mano Roger) e com 1 garrafa de Duetto da Casa Valduga na mente. Porém, acredito que essas sao minhas melhores horas de produtividade. Assim, sem mais delongas,
vai meu primeiro post pelo gmail do meu W810i:

quinta-feira, 6 de março de 2008

Repositório do Merlin disponibilizado

É com grande alegria que publico este post. Finalmente, após vários e vários meses de enrolação, finalmente consegui colocar o código-fonte do Merlin no nosso servidor. Em http://3layer.no-ip.info:6666/svn/public/merlin é possível baixar o códugo do repositório do Subversion.

O que foi disponibilizado
Nesses longos meses de trabalho, muita coisa evoluiu conceitualmente no projeto. As idéias sobre configuração baseada em histórico e por proximidade já estão bem enraizadas e não são as grandes novidades. Tampouco conceitos como Agentes e Binding, mas uma feature que veio à tona durante os trabalhos no código-fonte foi a questão da Injeção de Dependências, isso sim uma grande novidade. No post anterior eu comento bem isso, a qual o impacto no projeto.
Quanto ao código disponibilizado, para quem baixar, não vai perceber uma maravilha do projeto OO. Vai ver algo como uma macarronada de código, com nomes de classes duvidosos e pacotes nem de todo consistentes. Mas, enfim, agora está disponível e é nele que trabalharemos pelos outros próximos longos meses e, espero, anos.
As features disponíveis no código são várias, porém ainda em nível de experimentação. Temos Agentes funcionando, Binding, Layout, algumas anotações, Dependências de controles, um sistema de recarregamento de classes e algumas outras funcionalidades de menor tamanho.

Working in Progress
Os trabalhos atuais incluem a criação dos Resolvers (Resolvedores de Anotações) e, principalmente, uma estabilidade e independência nos pacotes genéricos; em outras palavras, retirar toda e qualquer dependência em relação ao pacote Swing, que está sendo usado como base para a implementação.
Resolvers, para quem não sabe (e até agora somente eu sei - hic) são tratadores de anotações. No código atual, as anotações têm um tratamento rudimentar e engessado (detesto essa palavra...se alguém souber uma melhor, me avise). Ou seja, não consigo mudar comportamentos para o tratamento de anotações. Da mesma forma, para qualquer nova anotação que for definida, alterações de baixo nível devem ser feitas no mecanismo de geração. Os Resolvers vem para....resolver isso!
Em suma, qualquer anotação pode ser interpretada pelo Merlin: as dele, as de q ualquer framework existente e, claro, as que você mesmo criar ou quiser reutilizar de sistemas de legado. De forma geral, um Resolver aponta para uma anotação e se encarrega de interpretá-la da forma que achar melhor. Depois, pluga-se o Resolver na engine de geração e pronto. As formas com que isso será feito ainda estão em banho-maria, mas imagino uma coisa bem complicada: colocar o Resolver no classpath do sistema, tal como funciona a instalação de plugins no Eclipse :)

Configuração realimentada
O famigerado sistema de configuração do Merlin é a coisa mais complexa da ferramenta. Eu, particularmente, acho que é a mais complicada de tudo que posso imaginar e, com certeza, mais complexa de tudo que já vi. De fato, é tão complexa que na Dissertação de Mestrado sobre o Merlin ela foi deixada de fora para tema de Doutorado. Com todos que comento (e algumas dessas pessoas eu até acho que elas compreendem sobre o que eu estou falando...), a resposta é sempre a mesma: isso não vai funcionar.
Conceitos como Distanciamento Temporal, Distanciamento Espacial Real, Distanciamento Espacial Relativo e outros são palavras-chave nesse mecanismo. Imaginar até é factível; implementá-lo, com certeza é bom um desafio.
Estou juntando as informações necessárias e os commits devem ser diários, ou semanais, conforme o tempo me sobrar.

Status e Acompanhamento
O release ALPHA do Merlin já tem data para sair: dia 02 de Outubro. Marquei-o para o dia do meu aniversário.
Para quem quiser acompanhar o andamento das coisas, vão dois lugares essenciais:

Atividades do Projeto : http://3layer.no-ip.info:6666/jira/browse/MERLIN
Repositório Colaborativo : http://3layer.no-ip.info:6666/confluence/display/MERLIN