Archive for April, 2006

É possível lucrar vendendo PDF?

Monday, April 3rd, 2006

Sim, e muito segundo o pessoal da 37signals (que criou o Rails). Com mais de 5.000 cópias do seu novo livro, Getting Real, a empresa faturou aproximadamente US$120.000,00.

O livro eu ainda não li nem vou ler tão cedo (tem 7 livros novinhos empilhados me esperando em casa e três na minha mochila), mas considerando que a empresa é responsável pelo Rails e por alguns dos aplicativos mais legais dos últimos tempos é de se esperar que seja bom.

Bom ou não, o que importa é que a pirataria (obviamente você pode obtêr uma cópia em alguma rede p2p) não é mais um obstáculo tão grande, ao que parece. Considerando que todos os mecanismos ultra-mega-power contra pirataria falharam é muito estranho isso… sinal dos tempos?

Outra que sempre lança livros em PDF é a PragmaticProgrammers LLC. O melhor é que geralmente eles oferecem um pacote de livro impresso+PDF o que para mim é excelente.

Eu assinei a Safari exatamente para evitar o problema de carregar pilhas de livros de casa pro trabalho e vice-versa. Ainda não encontrei o meio ideal para ler PDFs então eu os utilizo mais para consulta ra´pida após ler os impressos.

Qual o papel da editora na venda de PDFs? Será que o modelo vinga de vez agora?

Pensamentos Soltos Sobre a Internet

Monday, April 3rd, 2006

Algumas coisas são muito engraçadas. Uma das minhas maiores frustrações é não ter feito dinheiro com a bolha da Internet. Várias pessoas que eu conheço, mais velhas, mais novas ou da minha idade, fizeram um bom dinheiro abrindo sua empresinha que ou foi vendida ou fez algum sucesso e sumiu na explosão da bolha.

Nessa época eu lia sempre a Negócios Exame, uma edição especial que a revista Exame criara apenas para a ‘Nova Economia’. Era engraçado ver todas aquelas previsões.

NegociosExame

Dia desses eu estava sozinho em casa e resolvi mexer na pilha de revistas velhas. Peguei alguns exemplares de InfoExame, Você S/A e a Negocios Exame datando de 1999 até 2002 para ler, levei para o terraço com uma caixa de cervejas e vamos ver o que o futuro nos aguardaria…

Claro que exceto por um ou dois malucos as previsões eram bem comedidas. Ninguém previu nada revolucionário (pelo menos naquelas edições). Números não foram atingidos, a economia da Internet não aconteceu e o resto eram perspectivas evolucionários, não revolucionárias, que estão acontecendo.

O engraçado de ler material da agora chamada Web 1.0 é que as pessoas (nós!) falavam de coisas que só acontecem hoje como se fossem comum naquele tempo, 5, 6 anos atrás. Negócios completamente baseados em micropagamentos ou em manter o usuário online por horas a fio quando apenas hoje conseguimos começar a montar estrutura para mciropagamentos e criar conexão razoavelmente barata.

Aliás público brasileiro é interessante. Veja o que faz sucesso por aqui: Orkut, Fotolog, MSN.

O Orkut não é a primeira rede de relacionamentos nem a mais famosa do mundo. Friendster é bem mais velha e o MySpaces tem mais sucesso lá fora, parte se deve ao fato dos gringos não aguentarem brasileiros fazendo bagunça e falando português em tudo quanto era lugar no Orkut.

Fotolog é um serviço ruim, um host lento, um site feio e até onde eu sabia só se pode mandar uma foto por dia. Flickr e Fotki dispensam comentários em sua superioridade, mas isso não impediu que houvessem até clones brasileiros do Fotolog.

MSN é uma coisa engraçada. O ICQ, primeiro do gênero, existe desde antes de eu entrar na Internet. O MSN é talvez o Instant Messenger com menor número de recursos úteis e maior quantidade de besteiras como aqueles emoticons irritantes que fazem o texto da minha irmã parecer escrito em hieróglifos animados.

Mesmo assim, os três são ou foram febre por aqui. Brasileiro não tem computador, vamos e venhamos, mas com a já comentada alta disponibilidade de conexão (R$200,00/mês para uma empresa não é caro) boa parte dos brasileiros que têm acesso a um computador, dos office-boys até os CEOs, têm acesso à Internet.

São coisas como os três mosqueteiros citados acima que fizeram meu irmão, estudante de direito, pagar uma conexão Velox para ele ficar conectado 24 horas. Há alguns anos ele me via conversando horas a fio no IRC e achava aquilo terrivelmente chato, até que os amigos dele também foram aprar na Internet (claro que não no IRC). Agora eles conversam madrugada adentro.

Eu vi um sinal dos novos tempos também quando, naquele dia, desci do terraço e ao passar pela cozinha vi uma caixa da Americanas.com. Eu não lembrava de ter pedido nada e se tivesse pedido quem iria abrir uma caixa minha? Para minha surpresa o nome que estava na etiqueta era da minha mãe. Então eu pensei que ela havia me falado disso, também havia me falado que comprou o aparelho de DVD-o-kê na Internet. Na hora que ela falou eu não havia parado para pensar mas naquele momento, após ler as cervejas e beber as revistas (ou vice-versa) eu vi que todo aquele escarcéu da bolha estava completamente sem timing.

A hora de abrir uma pontocom de sucesso, como já provaram alguns por aí, pode ser agora. Não para ganhar dinheiro e vender sua empresa para um grande portal formado por capital especulativo que vai falir em doze meses.

Nós temos hoje tecnologia e conexão razoavelmente abrangente. Abrangente é mais que disponível pois mesmo se houvesse conexão disponível à um preço absurdo ninguém compraria, temos conexão nas faculdades, nos escritórios e até no McDonald’s.

Anteontem eu conversava com um amigo sobre os tempos do Clipper e dos Sistemas Comerciais Integrados. Muito programador ganhava (e ganha, eu conheço casos) a vida vendendo software apra as lojinhas da vizinhança. Um dos maiores medos destes era que seu código-fonte fosse roubado e isso impedia, por exemplo, que muitos destes autônomos montassem uma empresa e contratassem funcionário, o código era apenas dele, apenas ele iria mexer e ia morrer com ele.

Este comportamento explica porquetantas pessoas aidna hoje entram em listas de Java ou Ruby atrás de meios para proteger seu código. A mé-notícia é que não há muito o que fazer: bytecodes são facilmente descompilados e Ruby é interpretada.

Acontece que hoje temos um mercado diferente. O mercado que era a vizinhança passou a ser o mundo. A isponibilidade e confiabilidade de conexão permite que lojas tenham aplicações de online em vez de instalar aquele trambolho a cada atualização.

Iniciativas como o AppExchange prometem fechar o caixão das ‘aplicações desktop’ (o que falta, na minha opnião, é um ‘servidor de aplicações do cliente‘). Junte ao Network.com e pronto, temos algo. O que será?

Acho que passamos da barreira do non-sense sadio aqui, transmissão encerrada.

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.

DevMedia WebDays 2006

Saturday, April 1st, 2006

A convite da DevMedia estarei ministrando uma palestra no evento WebDays 2006, que acontece em São Paulo dias 19 e 20.

O evento tem um formato interessante onde tutoriais vão trabalhando diversos frameworks. É a sua chance de conhecer finalmente o que difere uma aplicação Struts de um Spring MVC, descobrir o que JSF tem de mais ou como o Hibernate ajuda a resolver problemas do dia-a-dia.

Minha palestra, no dia 20,tem como título “Aplicações Web em Java: Padrões, Técnicas e Arquiteturas” e serve como warm-up.

Os frameworks quase sempre compartilham uma infra-estrutura básica. O
objetivo desta palestra é apresentar e discutir os padrões que formam
esta estrutura. MVC, DAO, Command, Front Controller, Filtros,
Session… os componentes fundamentais de uma aplicação web moderna.
Com o conhecimento dos componentes utilizados, aprender um novo
framework se torna apenas descobrir como implementar o Padrão dentro
dele.

Vamos entender a evolução de arquiteturas web e estudar os conceitos e pdrões que são implementados pelos frameworks e muitas vezes nem sequer conhecidos pelos desenvolvedores. O conteúdo foi feito apra introduzir iniciantes e para ajudar os veteranos a entenderem melhor seu framework preferido e arquitetura do desenvolvimento web como um todo.

Veja a grade completa aqui.