Archive for January, 2007

Por favor, parem com isso!

Wednesday, January 31st, 2007

Comprei a Java Magazine deste mês, ainda antes de fazer qualquer comentário sobre o conteúdo tenho um encarecido pedido: parem de chamar bibliotecas de API.

API é a interface disponibilizada por algo para ser reutilizada, biblioteca é um aglomerado de código para ser reutilizado. Um biblioteca tem uma API mas não é uma API! Detalhes sórdidos aqui.

ClassFormatException

Saturday, January 20th, 2007

Tive que resolver um problema ontem sem muita documentação na Internet, resolvi postar aqui apra uma pobre alma ter alguma noção.

Tivemos um erro de ClassFormatError com uma stacktrace que não diz muita coisa exceto que houve um erro no constant pool de uma Interface cheia de constantes ao executar um Servlet, apenas quando executado dentro da IDE (Eclipse). Detalhe que se alterar o tipo de uma das constantes de Integer para int funcionava.

O tipo diz que houve um problema com o arquivo .class gerado. Minha primeira suspeita foi a miríade de JVMs utilizadas (compila em Java 1.3 e roda em 1.4), um bug talvez? Para identificar o problema fiz checkout de uma versão que não dava problema e fui fazendo uma busca binária entre ela e a versão no HEAD do CVS (não, não tenho sorte de utilizar Subversion), achei o problema em uma integração feita ontem.

O problema era no buildfile. Utilizamos os filtros do ant para gerar versões diferentes dos arquivos de configuração por ambiente (QA, Produção, servidores de desenvolvimento, etc.) e simplesmente durante um build local alguém estava aplicando este filtro…nos arquivos .class.

Coincidentemente havia um arquivo cuja sequência de bytes batia com uma sequência que este filtro substituía. Essa sequência era iniciada pelo tal do Integer, por isso quando alterávemos pra int não ocorria o problema. Claro que isso poderia acotnecer em qualquer lugar a qualquer momento. A solução foi simplesmente retirar o filtro dos .class.

Ou seja: se você tiver um problema desse tem alguém corrompendo seus arquivos, procure por tarefas que copiam, zipam, transferem, etc. estes e gere um checksum entre o compilado e o que foi feito o deploy.

JavaPolis 2006: Apresentações Disponíveis

Thursday, January 18th, 2007

A Conferência que está desbancando o JavaOne na qualidade das apresentações disponibilizou mais uma vez as apresentações em streaming. Aidna estou assitindo mas como sempre parecem ótimas!

Patterns na Mundo Java #21

Sunday, January 14th, 2007

Acabo de comprar a MundoJava 21 e fico mais uma vez feliz de ver como a galera do Guapo se mantêm com a propsota de ser diferente das outras publicações na área, que basicamente vivem de notícias atrasadas e tutoriais sobre frameworks e ferramentas.

Apesar do foco da revista ser um grupo de frameworks nacionais, um artigo traz um tema interessante e sempre negligenciado: Patterns. O artigo é do Rodrigo Yoshima, da Aspercom, figurinha fácil em debates sobre OO, UML e metodologias.

O artigo está muito bom, mas achei alguns probleminhas:

  • Ao contrário do que diz a introdução, Design Patterns não foram criados pela cosntrução civil. O conceito de Pattern, bem mais amplo e utilizado de diversas formas, que foi. O conceito de Design Patterns (que são “Padrões de Projeto”, não “Padrões de Desenho”) foi definido pela GoF no que resultou em seu livro clássico.
  • Nada impede que existam Patterns em linguagens procedurais, funcionais ou que sigam qualquer outro paradigma. O conceito de Design Pattern é de solução de projeto de software reutilizável, não importa o paradigma utilizado.
  • Design Patterns não eram utilizados com frequência em programação procedural porque surgiram na comunidade OO (e na mais elitista delas: Smalltalk) e foram divulgados neste nicho.
MJ#21

Don Milfont ataca novamente

Tuesday, January 9th, 2007

E com ampla base bibliográfica!

Industria do diploma

Brave New World (Admirável mundo novo) de Aldous Huxley é um daqueles livros distópicos que mostra uma sociedade totalitária onde o ser humano é condicionado conforme o bel-prazer de uma casta que domina politicamente os demais e tratado como um animal coletivo tal qual pertecente a colônia de cupins, formigas ou abelhas. Todas as caracteristicas individuais e humanas são substituidas pelas normas ditadas pelos representantes da colônia.

Huxley sempre teve esse caráter distópico em suas obras, na obra The Human Situation (A Situação Humana, ensaios), temos um farto material sobre educação com essa visão literária que lhe é peculiar tornando fonte excelente para analogias com a situação atual.

Tag: Objetivos para 2007

Monday, January 8th, 2007

Entrei pelo Luiz Antônio e aí vão meus objetivos:

  • Escrever mais, ou ao menos voltar ao ritmo normal de artigos, palestras e posts
  • Acordar cedo, estou perdendo muito tempo dormindo e poderia estar lendo
  • Exercício físico. Qualquer um.
  • Viajar bastante
  • Programar mais

E lá vão meus taggeds:

Hibernate Search

Saturday, January 6th, 2007

Eu não testei e, sinceramente, não sabia da existência até alguns minutos atrás mas o me parece cheio de possibilidades tentadoras! O post do Emmanuel explica em linhas gerais, assim que sobrar um tempo por aqui eu quero fazer uns testes…

Cada vez menos existe a necessidade de se sequer pensar na persistência utilizada (i.e. Banco de Dados Relacional) para aplicações. Relatórios e transformações pesadas de dados são uma desculpa interessante mas podem ser devidamente isoladas do núcleo transacional da sua aplicação.

Eric Evans no infoQ

Thursday, January 4th, 2007

Ok, notícia velha, me critiquem por ser lerdo, mas não posso deixar de comentar esta excelente entrevista do Eric Evans no infoQ.

The long-term trend is toward applying software to more and more complex problems deeper and deeper into the heart of these businesses. It seems to me this trend was interrupted for a few years, as the web burst upon us. Attention was diverted away from rich logic and deep solutions, because there was so much value in just getting data onto the web, along with very simple behavior. There was a lot of that to do, and just doing simple things on the web was difficult for a while, so that absorbed all the development effort.

But now that basic level of web usage has largely been assimilated, and projects are starting to get more ambitious again about business logic.

Com outro trecho mais adiante…

Combine that with the imperative to produce Web UIs mediated by http and html (which were not designed for that purpose) using quite primitive, first-generation tools. During that period, creating and maintaining a decent UI became so difficult that little attention was left for design of complex internal functionality. Ironically, at the very moment that object technology took over, sophisticated modeling and design took a heavy hit.

Sintetizam as desculpas (esfarrapadas) para se produzir aplicações baseadas em objetos burros nos últimos anos.

For example, SOA, when it is used well, provides us a very useful way of isolating the domain.

Este é outro ponto interessante. Muitas vezes vemos SOA sendo utilizado como desculpa para modelos de objetos burros e fracos, ou até mesmo para uma volta ao Dicionário de Dados. Serviços não trocam, ainda, objetos inteligentes e sim estruturas de dados mas dentro do serviço nós temos um sistema OO e, como tal, deve ser construído utilizando objetos!

E lembrem-se: objetos são dados e comportamento num mesmo conceito.

But back when the J2EE frameworks first came out, it utterly buried that basic expressiveness under mountains of framework code. Following the early conventions (such as EJB home, get/set prefixed accessors for all variables, etc.) produced terrible objects.

Isso eu comentei bastante no artigo sobre VO/BO.

Rails has generated a lot of excitement because it finally seems to make creation of Web UIs as easy as UIs were back in the early 1990s, before the Web. Right now, this capability has mostly been applied to building some of the vast number of Web applications which don’t have much domain richness behind them, since even these have been painfully difficult in the past. But my hope is that, as the UI implementation part of the problem is reduced, that people will see this as an opportunity to focus more of their attention on the domain. If Ruby usage ever starts going in that direction, I think it could provide an excellent platform for DDD. (A few infrastructure pieces would probably have to be filled in.)

Este trecho toca na minha crítica #1 com Rails: domínios fracos baseados em Bancos de Dados. A linguagem Ruby é tão cheia de vantagens que a limitação imposta pelo modelo CRUD do Rails me irrita profundamente. Ok, você não precisa ter um modelo fraco em Rails, mas você também não precisa ter um modelo fraco ao usar EJB 2.1, VB 6 ou Delphi e isso nunca evitou este problema.

More out on the cutting-edge are the efforts in the area of domain-specific languages (DSLs), which I have long believed could be the next big step for DDD. To date, we still don’t have a tool that really gives us what we need. But people are experimenting more than ever in this area, and that makes me hopeful.

Outro ponto muito bom. DSLs são iminentes mas as ferramentas simplesmente ainda não chegaram lá. O grande perigo é que o conceito está se tornando popular mas não existem ferramentas. Algo semelhante aconteceu com OOP, as linguagens eram procedurais mas todo mundo falava em OO, gerando a célebre consideração sobre C++ que eu traduzo mal e porcamente abaixo:

C++ é como sexo para adolescentes

  • Está na sua cabeça o tempo todo.
  • Todo mundo fala disso o tempo todo.
  • Todo mundo acha que todo mundo está fazendo o tempo todo.
  • Quase ninguém está fazendo de fato.
  • Os poucos que fazem:
    • estão fazendo mal e porcamente.
    • têm certeza que da próxima farão melhor.
    • não fazem com segurança.
  • Ainda assim todo mundo fala sobre como estão tendo sucesso com isso, ainda que uns poucos tiveram qualquer nível de sucesso

Bom, não percam!

SCRUM no XP-Rio

Tuesday, January 2nd, 2007

O Vinicius Teles, do XP Rio, avisa:

Pessoal,

O ano novo chegou e já vai começar agitado, pois amanhã será a reunião mensal do XP Rio. Pela primeira vez teremos um palestrante estrangeiro. E também pela primeira vez teremos uma apresentação sobre SCRUM.

Assunto:
Introduction to Scrum - Agile Software Development and its Principles

Sumário
Scrum is a set of principles combined with a framework that enforces feedback during a project. Scrum helps projects being succesful in uncertain situations. It helps teams to manage the customer and the work so that they can be more productive. Scrum reduces communication issues, and helps teams to be much more productive. It proved that Scrum helps teams to be 2 to 4 times more productive within the first year.

Apresentador
Boris Gloger, Certified Scrum Trainer since 2004, runs projects and organizations with this technology for the last 4 years.
In this talk he will show you the principles and the mechanism of Scrum.

Local: Auditório do SENAC na R. Santa Luzia, 735, 7º andar (Centro, Rio de Janeiro)
Data: quarta-feira, 3/1/2007
Horário: 19:00h às 21:00h
A entrada é gratuita e não é necessário fazer inscrição, nem confirmar a presença.

Ao chegar ao local, caso haja algum atraso e nenhum coordenador do XP Rio tenha chegado ainda, entre em contato com Vinícius Teles pelo telefone (21) 8716-5434.

A palestra será em inglês e não haverá tradução simultânea. Entretanto, pedirei ao Boris para falar lentamente e ficarei à disposição de vocês para traduzir eventuais partes que não ficarem claras.

O Boris está no Brasil apenas essa semana. Portanto, é uma oportunidade única de ter contato com Scrum com alguém que realmente entende do assunto e vem utilizando-o há algum tempo. Essa é uma boa apresentação para você levar seu gerente!

Por favor, compareçam e divulguem tanto quanto possível.

Grande abraço,

Vinícius Teles

Improve It - http://www.improveit.com.br
Rio: +55 21 3521-6760
São Paulo: +55 11 3711-3423
Celular: +55 21 8716-5434

Farei uma força bem grande para estar lá….

VO, BO e Tudo Mais que você não deveria utilizar

Tuesday, January 2nd, 2007

Postei um novo artigo no wiki sobre o uso de VOs/BOs. Sim, mais um artigo sobre a prática questionável de utilizar “classes de dados” e “classes de lógica” em vez de objetos de verdade. A idéia é ter uma referência para indicar quando alguém citar “VO” ou “BO” em uma conversa.