Archive for the ‘fragmental’ Category

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.

Projetando Aplicações com Spring

Monday, November 13th, 2006

Segunda-feira é dia de apostila de Spring atualizada!

Desta vez temos uma breve explicação sobre a construção de domain models em Java utilizando POJOs e Spring. É algo próximo a um resumo prático do artigo publicado na MundoJava #17, se você quiser se aprofundar mais no projeto de aplicações a revista é a leitura indicada.

O desenvolvimento utilizando POJO é introduzindo com um paralelo entre este e o desenvolvimento com EJB. logo após temos uma breve e prática explicação sobre alguns padrões de Domain Driven Design. Como já mencionei, a idéia do curso de spring e consequentemente desta apostila é o bom uso do framework. Se for só para escrever arquivo de configuração a referência do mesmo e um bom editor de XML já são mais que suficientes!

Apostila atualizada: AOP!

Sunday, November 5th, 2006

A apostila de Spring do curso que começa terça-feira 7/11 foi atualizada. Os dois novos capítulos introduzem a teoria básica por trás de AOP e mostram como utilizá-la no Spring Framework.

A idéia é que você aprenda não apenas a configurar arquivos XML e escrever receitas de bolo mas compreenda o que o Spring faz para ser tão interessante. AOP e interceptores são como o framework (e diversos outros como EJB 3.0 e Hibernate) consegue dar todo o poder de um EJB para um simples POJO. Não sabe o que é POJO? Aguarde mais capítulos ou, melhor ainda, inscreva-se no curso!

Se você correr ainda pode participar desta turma, temos as 2 últimas vagas ainda em aberto. Não sei quando vai ser a próxima turma no Rio de Janeiro, então se você se interessa pelo tema não deve perder a oportunidade! Para verificar se o investimento (que, vamos e venhamos, é bem pequeno) compensa dê uma olhada neste material, que é a base do curso.

A pedidos deve ser aberta uma turma do curso em São Paulo em breve.

Curso de Spring: Última Semana para Inscrições e Apostila Sendo Liberada!

Sunday, October 22nd, 2006

O curso de Spring entra na sua última semana de inscrições com a turma quase fechada. Ainda existem vagas, mas corra.

Seguindo o estilo difundido pela Caelum, empresa de amigos GUJeiros, a apostila utilizada no curso será liberada. Neste primeiro momento estou disponibilizando os primeiros capítulos, em breve teremos a íntegra.

Por que fazer isso? Bem, porque se o valor do treinamento fosse exclusivo do material adotado eu lançaria um livro, não um curso. Além do mais, eu não sou “inocente” o suficiente para achar que esse material não vai estar no emule depois de alguns dias. Então, ele está liberado através de uma licença CreativeCommons.

Bem, dêem uma olhada. Feedback, como sempre, é muito apreciado por estas bandas.

Curso de Spring: Primeira Turma em Novembro!

Friday, October 13th, 2006

Como falei antes, vou começar uma experiência de cursos para pessoas físicas. Na página de cursos você encontra informações sobre o curso de Spring framework que começa no início do próximo mês (Novembro).

O curso mudou de lugar, agora será ministrado em Botafogo. Falta de lugares com laboratórios decentes é um problema no RJ.

Artigo Ressuscitado

Sunday, October 8th, 2006

Devido a pedidos, acabo de disponibilizar o artigo Identificando e Convertendo Código Orientado a Objetos e Código Procedural em PDF.

Este artigo foi publicado no PortalJava há alguns meses, mas infelizmente por problemas técnicos saiu do ar. Agora está disponível ;)

Cursos Fragmental TI: Spring Framework

Thursday, October 5th, 2006

Nestes anos tenho tido demanda para transformar o conteúdo de palestras e artigos em cursos. Após um tempo hibernando neste segundo semestre, resolvi colocar a idéia em prática!

Você pode notar uma nova “aba” aqui no Fragmental, a parte de treinamentos. A parte de serviços já contava (e ainda conta) com uma seção de treinamentos, mas estes são mais voltados para turmas fechados adquiridos por organizações como um pacote.

Agora existirão turmas (a princípio uma) abertas para pessoas físicas ou empresas que desejam capacitar apenas um ou poucos desenvolvedores (se você vai treinar um número razoável ainda é melhor fechar um pacote).

O primeiro curso é uma capacitação no Spring Framework. Não me recordo de quando eu de fato conheci o Spring mas se você acompanha este blog (se não acompanha pode conferir nos posts passados) sabe que há muito tempo eu sou um grande entusiasta da sua filosofia de desenvolvimento simplificado.

spring framework

Agopra o Spring é adotado e apoiado por grandes empresas e sua filosofia de desenvolvimento serve de base conceitual para o Java EE 5.0. Mesmo os desenvolvedores mais conservadores não têm como ficar fora desta realidade, e este curso é apra levar quem ainda não tira proveito desta plataforma a o fazer.

Se você foi pego agora pela onda do desenvolvimento simplificado Java, se quer se preparar para o Java EE 5.0 ou se usa o Spring mas quer melhorar sua compreensão, esta é uma grande oportunidade!

E aguardem, mais cursos vêm por aí!

Intervalo Comercial

Monday, August 28th, 2006

Alguns já devem ter percebido que coloquei alguns banners mencionando os serviços de consultoria que presto. Bem, ocasionalmente um artigo ou post neste blog fazem com que eu receba e-mails de pessoas com dúvidas e principalmente buscando aplicar as técnicas mostradas na sua empresa. O problema é que muitas vezes as empresas não têm pessoal especializado para isso, e continuam fazendo as mesmas coisas da mesma maneira.

Há algum tempo eu venho prestando serviços de consultoria para diversos clientes, inclusive comento bastante sobre as realidades que percebo aqui. Os banners e links para a página de serviços são um convite. Tantas vezes temos nos fóruns da vida perguntas como: “Me colocaram a tarefa de escolher um framework web para a empresa, qual eu escolho?”. São pessoas que podem até ser bons técnicos dentro do seu escopo mas não têm visão da indústria para tomar decisões cruciais para um sistema ou a empresa como um todo.

Nos meus serviços de consultoria eu vejo alguns arquétipos:

  • Adorável Bomba: A empresa acaba de fechar um projeto altamente estratégico e/ou lucrativo para um cliente importante, interno ou externo. O problema é que este sistema deve ser feito com cuidado excepcional, fugindo do feijão-com-arroz diário. Não há tempo para treinamentos longos.
  • Crescimento Desordenado: A empresa ou equipe começou pequena e até então funcionava muito bem, obrigado. O problema é que as coisas estão crescendo e é preciso definir processos e metodologias a serem utilizadas. Compramos algo pronto ou criamos a nossa? Se compramos, como adaptamos? Se criamos, criamos o quê?
  • Novos Mares: O mundo evoluiu e finalmente a empresa vai implantar aquela tecnologia nova. Temos treinamento, temos um projeto-piloto… e não temos ninguém para dar direção à equipe. Por mais treinamento acadêmico que exista, é preciso experiência para tocar um projeto.
  • Novas Velhas Coisas: Após algum tempo tentando entender uma tecnologia, sejam componentes distribuídos, SOA ou EJBs, a empresa finalmente resolve voltar ao básico. Nada de tutoriais rápidos sobre como fazer deploy de um EAR no WebLogic, vamos estudar o que diabos são componentes distribuídos e como eles podem ajudar a nossa empresa.
  • Houston, We Have a Problem: A empresa contratou uma consultoria externa ou possui uma equipe interna que está há meses desenvolvendo um sistema muito importante. Meses demais, na verdade. É preciso que alguém verifique o que foi feito e avalie se está no caminho certo ou não, antes que o orçamento do ano inteiro vá pelo ralo…

Estes serviços pedem um consultor. Colocar uma tarefa desta nas mãos de uma pessoa não-capacitada é um bom meio para assassinar um projeto e queimar dinheiro e muitas vezes não faz sentido contratar alguém só para atuar em serviços pontuais.

Se você se encontra em uma(algumas) desta(s) situação(ões) e gosta do que lê aqui entre em contato.

2006: O Início da Arquitetura Heterogênea Java EE (ou: “Qual o melhor Framework web?”)

Sunday, April 2nd, 2006

Eu não te responderia isso sem avaliar o problema, mas um laboratório na NASA acaba de divulgar um videozinho com uma comparação. O vídeo do Sean Kelly é bem engraçado mas traz muito das tendências modernas no desenvolvimento de aplicações, web ou não.

Na atualidade, o laboratório em questão usa Java EE para tudo e avaliou se era a melhor solução para interfaces e aplicações completas web.

O autor começa falando de sua experiência com um sistema em C++ e como qualquer alteração resultava na recompilação de todo o sistema. A solução foi manter partes que são alteradas com mais frequência, no caso interface, em uma linguagem de script, no caso TCL/TK. Este trecho casou muito bem com algo sobre o qual queria escrever faz tempo e que certamente vai guiar minha linha de estudos neste ano.

Aplicações web pequenas geralmente são muito dinâmicas. O layout muda, o esquema muda, tudo muda o tempo todo. Algumas aplicações são temporárias então não vale gastar muito tempo, elas devem se pagar rapidamente. Outras ficam como portais e nossos adoráveis aplicativos online, mas geralmente você também vão precisar de muito dinamismo para enfrentar o mercado atual.

Para estes dois tipos de aplicação eu hoje sugiro fortemente Rails. Eu trabalhei na área de agências web, nestes lugares o trabalho é quase sempre criar um portal e integrar com um backoffice. Antes essa integração era quase sempre feita direto no banco de dados, não que não houvessem opções menos dolorosas, mas era o padrão. Hoje temos o tal do SOA que ninguém sabe direito o que é mas faz com que todas as aplicações acabem com alguma espécie de API para serem utilizadas por outras aplicações.

As aplicações construídas nos tempos mais recentes geralmente têm interfaces REST ou SOAP, as mais antigas e/ou que não tenham estas interfaces podem (e devem, quase sempre) ter um adaptador que permita a outras aplicações utilizá-las sem duplicar o que aquele sistema já faz no novo.

Neste cenário podemos facilmente integrar uma aplicação destinada ao usuário final em, por exemplo, Rails com todo o zoológico de aplicações coorporativas em JEE, .Net, COBOL, C++, Delphi e todas aquelas tecnologias bizarras que parece que só a sua empresa usa no mundo todo. Batsa você colocar a aplicação Rails para conversar com as outras, assim você pode utilizar na sua interface web o que há de melhor enquanto mantêm seus sistemas escritos em Java, C++, .Net ou o que quer que seja.

Mas e quando o que você está construindo são as tais aplicações ‘coorporativas’, as peças que prestam serviços para a interface web?

A maioria dos desenvolvedores quando ouve falar de Ruby on Rails (que eu conheço, anda contra as outras) pensa: “bah! minha aplicação faz muito mais que ser apenas um sitezinho!”

Bom, antes de mais nada:

  • Em geral o que é feito hoje nas consultorias são variações de sitezinhos
  • Ruby on Rails, por exemplo, traz muito mais produtividade para este tipo de aplicação
  • Mesmo que não fossem, Rails serve para muito mais que sitezinhos

Mas vamos partir do ponto que estamos criando uma aplicação que não é apenas um site, não apenas um cadastro que aplica regras de negócio simples em cima de dados.

Eu trabalhei algum tempo em aplicações cuja interface é geralmente um socket aberto falando um protocolo proprietário de um lado e uma interface SOAP no outro. Nada de GUI além de algo muito básico para administração, apenas receber requisições SOAP, processar, mandar mensagens via socket para outro sistema e dar uma resposta SOAP a quem te chamou. O que estes anos me ensinaram é que mesmo neste tipo de sistema existem partes na aplicação que mudam bastante e outras que não mudam quase nunca.

A arquitetura de uma aplicação geralmente não muda. Se você criou seu sistema baseado em EJBs, Servlets e Hibernate, dificilmente isso vai ser alterado no meio do caminho. Mesmo que seja, as pessoas têm alguma noção do custo disso e criam projetos completos para esta migração, ou fazem tudo de forma tão gradativa que viram aqueles famosos projetos eternos que têm data de início mas do fim ninuém sabe.

Já regra de negócio, por exemplo, vive tendo mudanças. Uma promoção que a empresa vai fazer que altera o modo como clientes são cobrados por um mês, uma regulamentação nova ou a reinvenção de algum processo (você sabe, reengenharia de processos está na moda novamente) e lá vamos, como Sean no vídeo, ter que alterar, compilar tudo de novo, empacotar… isso tudo para mostrar ao cliente ver se era realmente o que ele queria. Ah, não é? Repita o ciclo.

Mudanças são parte da vida. O que podemos fazer para evitar que mudanças constantes afetem a produtividade? Que tal adotar uma arquitetura amigável à mudanças?

Java é uma linguagem robusta e segura, muito interessante para construir infra-estrutura, por exemplo, mas não é lá muito dinâmica. Escrever código que está sempre mudando em Java é complicado, envolve mudar arquivos de configuração, recompilação e deployment muitas vezes.

Um grande problema que enfrentei por algum tempo é o modelo monolítico de artefatos em Java EE. Imagine que você gera um grande EAR com toda a sua aplicação. Um EAR geralmente possui uma aplicação web, um conjunto de EJBs ou um JAR de POJOs se você utilizar Spring, por exemplo, e outros recursos.

Imagine que um destes componentes possui um bug (acredite, vão haver bugs) que precise ser corrigido imediatamente. Geralmente nestes casos se implementa um chamado hotfix (ou, em bom português: gambiarra/bacalhau) que vai corrigir de uma forma não-ideal enquanto não se entrega uma versão onde o problema foi realmente sanado.

Ok, você implementa o hotfix e… tem que recompilar, gerar o EAR e mandar pro cliente instalar tudo de novo. Pára servidor de aplicações, instala, sobe tudo de novo…péssimo! Por uma mudança em um componente você teve que parar tudo por talvez algumas horas.

Numa arquitetura C/C++ em UNIX, por exemplo, você possui diversos programas que cooperam através de IPC (comunicação entre processos) para compôr o sistema. Se um destes componentes precisa ser corrigido, o cliente precisa instalar apenas este e não todo o sistema novamente.

A parte do seu sistema que pode mudar é provávelmente a que vai possuir mais bugs no decorrer do tempo, afinal cada mudança pode inserir novos bugs e trazer de volta antigos. Mas e se esta parte da aplicação fosse construída de maneira que qualquer mudança fosse simples e rápida? Este é um tema que pretendo abordar este ano em palestras e artigos.

Como tornar seu sistema mais flexível e mantendo a confiabilidade? Qual o impacto da nova realidade onde Java não é a linguagem única e soberana mas apenas uma ferramenta na caixa do profissional?

Imagine construir uma aplicação com a arquitetura central em Java mas com a Camada Web em Groovy ou quem sabe até Rails num futuro próximo? Que tal escrever suas regras de negócio numa linguagem que seu usuário final entenda e possa ele próprio alterar?

Em breve podem esperar material sobre estes temas com frequência aqui no Fragmental.

Voltando á comparação original, os competidores eram variações de Java EE (Servlets, JSP, Hibernate, JBoss em combinações variadas), Ruby on Rails, Django, Zope e TurboGears. As conclusões eu deixo para você ver pessoalmente, eu acho que foram exemplos muito simples para qualquer conclusão maior.

De qualquer modo, faltou um produto interessante: O Seam. Se você quer conhecer este modelo de aplicação que mistura JSF com EJB3, não perca mês que vem a chance de conhecer a paltaforma diretamente da boca de seu inventor, que por um acaso é também inventor do Hibernate(!) e principal colaborador do EJB 3.0 (!!): Gavin King. King vai estar novamente no Rio de Janeiro mês que vem, e não vai estar sozinho! Mais informações em breve.

Houston… we have no CSS

Thursday, March 9th, 2006

Como dá pra perceber os problemas com o layout voltaram.

Vou atualizar o WordPress e ver que bicho dá… :(

Update: Atualizado, vamos ver…