Archive for the ‘cbd’ Category

Bancos de Dados Corporativos: Insistindo nos Erros

Thursday, April 5th, 2007

A IBM é uma empresa que não inova. Deixou de ser o grande líder do mercado há décadas para se tornar um seguidor, e dos bem fraquinhos. O IBM AlphaWorks, entretanto, é uma das poucas coisas que sobrevive em termos de inovação da IBM. Eu recebo a newsletter há alguns anos e é sempre uma das primeiras mensagens a serem lidas quando chegam.

Talvez por essa esperança toda que me decepciona fortemente ver que as pessoas ainda, em 2007 (notou que “em 2007″ é uma expressão recorrente minha há algum tempo?) as pessoas ainda insistem em conexões com bancos de dados feitas pelo cliente. Saber disso realmente é frustrante como desenvolvedor.

Bancos de dados como coração da empresa já foram uma técnica válida. Era o único middleware que prestava ou era viável no cenário de algumas muitas décadas atrás. Hoje as pessoas querem SOA, querem componentes reutilizáveis e… continuam insistindo em repositórios de dados centralizados.

Certa vez a equipe que eu coordenava passou por um problema nessa área. Como parte do lançamento de um novo produto tivemos que eliminar algumas tabelas e mudar o schema de dados. Apesar daquele esquema só ser utilizado completamente pela minha equipe, sabíamos que algumas pessoas estavam fazendo consultas neles. Alguns greps no CVS (infelizmente não usávamos SVN) e vimos que três projetos usavam as tabelas que eliminamos e que quase todos usam as outras. A solução do mundo dos SGBDs corporativos é uma só: faça uma view e mantenha ela no ar enquanto as pessoas não alterarem, testarem, homologarem e instalarem seus sistemas modificados.

Esta foi uma epifania, as pessoas acordaram e vimos que precisávamos racionalizar isso. A solução veio na forma de um arquivo JAR que continha um cliente padronizado fazendo consultas em JDBC diretamente ao banco de dados. Eventualmente construímos alguns WebServices REST (como quase sempre, SOAP não fazia sentido) e os clientes que se conectavam ao banco foram migrados para versão que conectava-se ao REST. Quem teve o trabalho de se adaptar a primeira versão não precisou de mais anda para migrar para uma arquitetura SOA.

Quantas vezes vamos ter que resolver este mesmo problema até que todos percebam que bases de dados são apenas partes de sistemas?

Palestras do ERECOMP-AL

Monday, March 19th, 2007

Comento em breve o evento mas os slites já estão disponíveis:

Rumo ao ERECOMP 2007

Thursday, March 15th, 2007

Como já falamos aqui, estou indo apra o ERECOMP 2007. Estou bem ansioso para este evento, nunca palestrei no nordeste e não conheço o público.

O keynote será uma apresentação que está na manga há um bom tempo mas nunca tinha a oportunidade de executar. É bem diferente do meue stilo normal de apresentação, pelo menos graficamente. Acho que o livro do Atinkson teve efeito retardado mnas quem viu gostou.

A segunda é uma releitura da palestra de CBD x SOA que foi apresnetada ano passado. Acho que o principal diferencial para esta é estar neste exato momento vivendo os problemas de se implantar uma arquitetura SOA em um ambiente onde já existe um conjunto de sistemas e uma cultura formada.

Bom, que for lá por favor não se acanhe. O melhor destes eventos é a experiência trocada.

Acorda, Maria Bonita…

Tuesday, March 13th, 2007

Lendo a revista Mundo .Net deste mês pensei sobre o estado atual das duas maiores plataformas de desenvolvimento modernas, Java e Microsoft .Net. Infelizmente estou tendendo a creditar em uma coisa: A Microsoft aprendeu, a comunidade Java se acomodou. É impressionante como a MSFT tem investido em ferramentas e plataformas interessantes. A estratégia que pude perceber é mais ou menos assim:

  1. Cria-se uma estrutura fundamental baseada em boas tecnologias e plataformas, geralmente copiadas de casos clássicos de sucesso
  2. Pessoas com nível técnico alto utilizam esta base para criar coisas muito interessantes
  3. Pessoas com nível técnico baixo, grande maioria nas duas plataformas, podem utilizar ferramentas burrotizantes que criam apenas o básico que elas acham que precisam

Dado que as pessoas citadas no item (2) são raridade (eu conheço duas, todos vindos de Java/C++),a estratégia de marketing toda foca no povo do item (3). Para o item (2) (para utilizar um termo MSFT: os Elvis e Einsteins) o marketing é baseado em altos salários e oportunidades muito boas em um mercado saturado de arrastadores de componentes (Morts). Com Java foi exatamente o contrário: a linguagem atingiu o jet-set da computação mas logo se banalizou. Einsteins criaram uma plataforma altamente produtiva e de qualidade impressionante, mas logo Mort caíram em cima, fugindo de Delphi e VB 6.0.

Se o programador mediano Java não tivesse tantos problemas no passado com a Microsoft ele facilmente seria seduzido pela plataforma. Ali tem tudo que ele precisa para fazer seus CRUDs (ou seus grudes…). E se Elvis não tivessem tantos problemas com código proprietário e uma plataforma de um vendedor só eles certamente estariam esmagando cabeças dos programadores Java ao comentar como a plataforma .Net está ficando cada vez mais aberta, cada vez mais flexível, cada vez mais… parecida com sistemas em UNIX.

É sério. Não vou nem citar o MS PowerShell, basta olhar como é feito o deployment em .Net e comparar com um sistema UNIX. Ok, eu sei que é muito mais fácil alguém ter visto um deployment .Net que um UNIX então deixe-me tentar explicar com poucas palavras como geralmente é feito um sistema: cada módulo geralmente é implementado como um programa separado (programa mesmo, tipo uma classe com public static void main(String[])), estes programas conversam entre si utilizando diretivas de IPC. O SO (Linux, HP-UX, Solaris, etc.) controla estes programas (feitos em C/C++, PERL, Python, Ruby, Bash, TCL…).

Se você for esperto já fez uma analogia com um servidor de aplicações J2EE. SIM! Os servidores de aplicação vieram solucionar problemas deste modelo, trazendo um nível de padronização (e racionalidade…) para o processamento de transações distribuídas, segurança, persistência, etc. É para isso que Java EE foi criado, infelizmente as pessoas esqueceram ou não tiveram contato com um ambiente não padronizado e não entendem o que é, por exemplo, um EJB. Ok, mas o problema é que o servidor de aplicações é um mundo a parte, e um mundinho bem fechado.

Tem uns dois anos eu trabalhava para uma empresa líder mundial do setor de sistemas para redes de telefonia celular. Esta empresa possui até hoje uns 90% da base de código em C, rodando em Solaris e outros UNIXes. O sistema principal era exatamente como descrevi: um bando de processos em C que se comunicavam via pipes, filas de arquivos e memória compartilhada. parece uma zona, não? Nada de JMS para mensageria, nada de JAAS para segurança, nada de nada.

Pois a grande vantagem deste sistema não era a velocidade, como defendiam os xiitas locais. A vantagem era a flexibilidade. Quando uma correção era implementada o meu colega de baia enviava para o cliente um patch contendo apenas os processos modificados. Quando eu corrigia uma linha de código tinha que mandar um EAR de 10 megabytes. O primeiro nível de suporte era capaz de fazer scripts em PERL e Bash que corrigiam problemas quando aconteciam e automatizavam tarefas para o programa em C. para o programa em java só o próximo release implementaria a mais boba das tarefas, ou uma famosa dedada no banco de dados (um script SQL).

Claro que a culpa é dos programadores (não me excluo) que não se prepararam para sistemas abertos e extensíveis (anos depois eu consegui fazer alguns progressos nesta área e sumarizei em uma palestra), mas o maior problema é na forma que um Application Server é fechado, lacrado. Mesmo os servidores mais modernos ainda contam com abertura precária se comparados aos bons e velhos sistemas UNIX dos anos 70/80/90.

E neste ponto a Microsoft vai na frente, por incrível que pareça. Sua plataforma está baseada em Camadas que são unidas pelo SO, é como se a pessoa pudesse implementar um sistema UNIX utilizando um framework de workflow, persistência, apresentação, comunicação remota, transações e segurança unificado, não importa qual linguagem (e .Net é multilinguagem desde sempre).

Não, eu não estou falando para você migrar para .Net. O que eu estou dizendo é que Java está trilhando caminhos muito perigosos, como desenvolvedores nós temos que ficar de olho. Cuidado com ferramentas milagrosas e,principalmente, cuidado com caixas fechadas (ainda que sejam Open-Source).

E os Einsteins? Eles brincaram com Java mas voltaram para LISP.

ERECOMP/AL 2007

Monday, February 5th, 2007

Boa hora para mencionar que vou palestrar no 1o Encontro Regional de Estudantes de Computação de Alagoas. Os temas são SOA x CBD e Web 2.0.

Além de assuntos em voga são dois temas que estão bem presentes no meu dia a dia atual.

Gerenciando Dependências com Uncle Bob

Monday, February 5th, 2007

A melhor coisa desse lance todo de vídeo em flash barato, portais de conteúdo em vídeo, screencasts, etc. é que nós, pobres brasileiros afastados de tudo que é legal em tecnologia, podemos assitir palestras e não apenas pegar os PDFs.

Nessa onda o InfoQ tem uma apresentação do Uncle Bob simplesmente genial. Robert C. Martin sempre traz a tona a necessidade do gerenciamento de dependências e o bom empacotamento de software. Seu livro mais marcante tem páginas e páginas sobre o assunto que, realmente, é algo complexo.

Recentemente eu lidava com 3 grandes sistemas legados, fracamente relacionados entre si e construídos em paralelo. O problema é que a relação forma a coisa mais odiosa que se pode ter no gerenciamento de dependências: dependências cíclicas!

A coisa surgiu como um projeto dividido em dois módulos.

s

Projeto waterfall, na primeira mudança foi ‘dado um jeitinho’ e uma funcionalidade que o backoffice precisava já estava disponível no sistema…

s

Em breve surgiu o outro projeto no horizonte e o arquiteto resolveu que haviam funcionalidades de um que podiam ser aproveitadas no outro. Pena que ele não olhou para os diagramas UML que desenhou com tanto carinho.

s

Mas tudo bem. Tudo seria resolvido com a versão 2.0 do projeto. Basta fazer uns ajustes aqui, reutilizar aquilo ali…

s

Neste ponto o projeto ficou ingerenciável. Simplesmente não se podia tratar um bloco de software isoladamente, era tudo parte de um grande emaranhado de componentes frágeis que compartilhavam código e possuíam nível de acoplamento absurdo. Passar um componente para produção indicava passar e testar todos os componentes. Pior que isso: para subir a versão 2.0 do projeto precisávamos manter a primeira versão porque ela era uma dependência transitiva!

Corrigir este problema não é tarefa simples, mas Uncle Bob nos dá algumas regrinhas muito úteis:

  • REP - Reuse-Release Equivalnece Principle: Tudo que é criado apra ser reutilizável deve ser empacotado corretamente. Software criado para reuso deve ser projetado para isso do início, de maneira lógica. Não deve haver código não-reutilizável num pacote reutilizável.
  • CRP - The Common Reuse Principle: Classes num pacote são reutilizadas em conjunto, se você reutiliza uma reutiliza todas. Uma pacote deve ser uma unidade atômica, as classes que estão dentro dele devem fazer sentido apenas se usadas em conjunto. Não devem haver classes utilizadas isoladamente num pacote reutilizável, a unidade de reuso é o pacote, não a classe.
  • CCP - The Common-Closure Principle: Uma generalização do Single Responsibility Principle (SIP). Para o SIP uma classe deve ter apenas um motivo para ser alterada, se mais de um tipo de mudança no sistema afeta a classe provavelmente ela pode ser dividia em mais de uma, ela representa conceitos demais. O mesmo se aplica para pacotes. Um pacote também deve seguir o Open-Closed Principle (OCP) e se proteger de mudanças ao mesmo tempo que está aberto à extensão.
  • SDP - The Stable-Dependencies Principle: Um pacote que se espera ser volátil (mudar facilmente) não pode ser dependência de um pacote que se espera estável (mudar quase nunca). Pacotes estáveis devem depender apenas de pacotes estáveis. Pacotes voláteis podem depender de outros voláteis, mas idealmente devem também depender apenas de pacotes estáveis. Muitos pacotes voláteis em uma corrente de dependências causa um estrago muito grande no ‘efeito dominó’.
  • SAP - The Stable-Abstractions Principle: Um pacote deve ser tão abstrato quanto estável. É mais que certo que quanto mais próximo uma abstração chegar da realidade mais facilmente ela muda. Um pacote abstrato (e neste caso isso geralmente significa classes abstratas mesmo) é mais estável porque não se rpende a detalhes de implementação.

Aplicando essas e outras técncias fatalmente chegamos a uma situação ainda ruim, mas ao menos gerenciável.

s

E finalmente ao que consideramos aceitável.

s

Tudo ao gasto de alguns meses sem desenvolvimento de coisas novas, só arrumando a bagunça. Note que este sistema não foi originalmente criado por amadores e sim por uma consultoria top top top multinacional.

Acontece que, como um dos envolvidos no projeto original me disse durante o projeto “essas coisas funcionam muito bem na teoria mas a prática é outra”, logo antes de afirmar que nunca lera nada sobre gerenciamento de dependências e “trabalhava muito bem sem isso”.

Será que é mesmo a teoria que possui problemas?

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.

Presente, Passado e SOA

Sunday, December 10th, 2006

Bom, semana passada foi dai da minha apresentação no evento sobre SOA do IQPC, como vocês já sabem. Foi muito interessante preparar e ministrar essa palestra principalmente porque fugia do lugar comum que é apresentar uma nova tecnologia ou mostrar uma ferramenta, tão comum em exemplos deste tipo.

Minha palestra teve como foco desmistificar as características do SOA, mostrando que elas já estavam disponíveis, especificadas e documentadas em sua maioria há uma década. Como não há muito material sobre esta comparação (estes slides são provavelmente a coisa mais direta sobre essa comparação que existe hoje na Internet) precisei tirar a poeira dos livros sobre componentes e procurar conceitos comuns na parca literatura que se pode levar em conta sobre SOA (ou seja: nada de papers de fornecedores apresentando sua gloriosa ferramenta gráfica, estes sim abundantes).

As conclusões estão nos slides, pena que a palestra é mais um bate-papo e não foi gravada, mas acho que dá pra tirar algo de bom deles.

O mais interessante na verdade foi conversar com as pessoas. A maioria era de gerentes de grandes empresas públicas, bancos e alguns funcionários de grandes empresas de software. As empresas destas pessoas as enviaram para tentar entender o que é SOA e como adotá-lo na empresa. Eu não pude acompanhar o evento todo e não sei se as pessoas conseguiram informações sobre o que queriam: qual o caminho para migrar para SOA?

Uma das comparações que eu faço entre SOA e CBD é que CBD é, na minha opinião, ingênuo. A impressão que se tem ao ler sobre o uso de componentes é que é possível utilizar a técnica de maneira bem gradual, indo aos poucos transformando seus sistemas em componentes distribuídos. SOA é bem mais agressivo, criando cascas de serviços sobre os sistemas num tempo muito curto.

Ao mesmo tempo, não sinto nos vendors compromisso com isso. A maioria do material que vi neste evento e em qualquer outra fonte é sobre como usar ferramentas e técnicas para gerenciar e orquestrar serviços que já existem, poucas coisas falam do dilema que é transformar sistemas em serviços.

Este é um bom tópico para atacar numa próxima oportunidade. Nos últimos meses venho constantemente lidando com a transformação de sistemas legados em serviços ou ainda com a mudança arquitetural de sistemas que estão em desenvolvimento para este modelo.

A impressão que tive é que com a quantidade de dinheiro que se está investindo em SOA hoje não dá mais pra chamar de futuro, mas de presente. Claro que há um problema muito grande aí: Este foi o mesmo cenário, por exemplo, com EJBs.

Eu espero sinceramente que tenhamos aprendido a lição e que estudemos os conceitos por trás das coisas antes de sair por aí implementando sistemas que não funcionam utilizando ferramentas caríssimas.

Palestra Disponível: SOA vs. CBD

Wednesday, December 6th, 2006

Como já mencionado aqui, a convite do IQPC eu minsitrei ontem uma palestra comparando SOA com arquitetura de componentes. Esta foi também a primeira palestra oficial da IASA no Brasil.

Os slides estão disponponíveis, comentário em breve.

Evento sobre SOA em São Paulo

Thursday, September 14th, 2006

De 05 a 07 de Dezembro será realizado em São Paulo o evento: Arquitetura Orientada a Serviços SOA & WEB SERVICES do IQPC. Eu fui convidado a dar uma palestra sobre Componentes e Serviços. Abaixo segue a descrição, produzida pela IQPC (marketing…):

Comparação entre as técnicas utilizadas no Desenvolvimento Baseado em Componentes e na Arquitetura Orientada a Serviços - CBD x SOA.

Escreve-se muito sobre a distinção entre Component-Based Design (CBD) e Service Oriented Architecture (SOA). Deve-se lembrar que estes conceitos todos foram concebidos em contextos diferentes por grupos distintos e sem maiores preocupações com uma coesão formal.

* Definição de Arquiteturas Corporativas baseadas em SOA ou Componentes
* Elaboração e automatização do Processo de Desenvolvimento de Software
* A diferença entre Desenvolvimento Baseado em Componentes e Arquitetura Orientada a Serviços
* As vantagens e desvantagens em se utilizar uma e outra infra-estrutura de sistemas.

Philip Calçado
Arquiteto e Desenvolvedor de Sistemas
GUJ

As inscrições estão abertas. O folder completo em PDF você encontra aqui.