Categorias
aplicações frameworks web2.0

Tabblo: A Aplicação Matadora para Fotologs e Álbuns Digitais

Eis que surge o campeão das aplicações da web 2.0 para álbuns de fotos e demais usos relacionados com imagens digitais. O nome do mais novo web 2.0 killer app é Tabblo. O ambiente foi desenvolvido em Django com ampla utilização de Ajax e uma interface que é simplesmente ótima.

Isso demonstra o quanto é viável utilizar o Django no desenvolvimento de aplicações web, principalmente se na hora de desenvolver as interfaces e templates houver a preocupação com a adoção de tecnologias que favoreçam a usabilidade.

Não vou nem tecer muitos comentários a respeito, vá até o site, cadastre-se e faça alguns testes. Duvido que não irá passar a usar o Tabblo como ambiente para seus álbuns de fotos. 😉

Categorias
linguagens programação

Java Sucks! Comparativo lado-a-lado de Frameworks para Aplicações Web

Encontrei um vídeo ontem que faz uma comparação direta entre diversas abordagens de desenvolvimento de aplicações para web e que chega a uma conclusão bastante ácida: “Java não é apropriado para o desenvolvimento de aplicações web”. O vídeo em questão foi feito por um profissional que trabalha com desenvolvimento de aplicações no Jet Propulsion Lab da NASA, está disponível no endereço http://oodt.jpl.nasa.gov/better-web-app.mov e tem 378,5 MB.

Como o vídeo é relativamente grande e está em inglês, o que pode prejudicar o seu correto entendimento, apesar da linguagem simples e descontraída do palestrante, vou transcrever abaixo alguns trechos juntamente com os screenshots.

No início do vídeo é feito um teste em cada um dos frameworks, demonstrando na prática a sua utilização, que na minha opinião deixou um pouco a desejar já que a abordagem utilizada pelo programador em algumas situações não é a mais correta e ilustra muito pouco do que pode ser feito com as ferramentas testadas. Em síntese é feito a comparação do J2EE (primeiramente utilizando JSP + Servlets + Hibernate, do framework feito em Ruby, Ruby on Rails e dos frameworks feitos em Python, Zope + Plone, TurboGears e Django.

Na segunda parte do vídeo as comparações ficam mais interessantes, e seguem abaixo algumas imagens e comentários:

Inicialmente o que se propõe é o desenvolvimento de uma pequena aplicação em cada um dos frameworks apontados inicialmente, para isso foi escolhido um exemplo bastante simples, que sugere uma aplicação de gerenciamento de tempo, conforme o diagrama abaixo.


A primeira abordagem a ser testada é a do J2EE (JSP + Servlets + Hibernate), e o resultado pode ser visto abaixo:


A aplicação gerada só possue interface de inclusão de dados, não tem nenhum mecanismo de segurança, internacionalização, validação de dados, etc. O seu desenvolvimento custou ao desenvolvedor o seguinte:


Foram 499 linhas de código, 14 arquivos editados, muito XML e na hora de rodar a coisa decorreu da seguinte maneira:

Para concluir:


Tradução: “Quando tudo o que você tem é um martelo, todos os problemas se parecem com um prego.”

Em seguida é apresentada a solução em Ruby on Rails:


A aplicação gerada possue interface de inclusão, exclusão e listagem das informações, porém não tem nenhum mecanismo de segurança e internacionalização, etc. possuindo alguns recursos para validação de dados mas obrigando o desenvolvedor a trabalhar diretamente com as tabelas em MySQL. Em resumo, desenvolver uma aplicação em Ruby on Rails consiste em criar um bom banco de dados, seguir as regras impostas pela ferramenta e obter resultados simples, porém rápidos.


Como pode ser visto acima só foi necessário editar 3 arquivos, nenhuma edição de XML foi necessária e apenas 29 linhas de código foram necessárias para ter a aplicação funcionando. Na hora de rodar a aplicação também não houveram grandes problemas.

Depois do mamão com açucar do Ruby on Rail veio a vez do Zope+Plone, cujo resultado pode ser visto abaixo:


Para escrever a aplicação é necessário apenas criar um diagrama UML contendo tagged values que descrevem diversos aspectos da aplicação, dessa forma foi possível atingir o seguinte quadro:


A aplicação criada possui validação de dados, internacionalização, mecanismos de segurança, busca, criação de metadados e tudo mais, inclusive a pia da cozinha. Entretanto pode não ser tão fácil quanto foi mostrado no vídeo numa situação real do dia-a-dia, além do mais a curva de aprendizagem do Zope+Plone é muito alta, fazendo com que a obtenção de resultados rápidos seja dolorosa no início, mas é bastante recompensador quando se pode criar aplicações com tanta qualidade de maneira tão simples.

Também convém citar que o Zope não trabalha com bancos de dados relacionais nativamente, e que as informações ficam armazenadas em um banco de dados orientado a objetos chamado ZODB, cuja performance não é das mais atraentes, mas por oferecer mecanismos de alta disponibilidade pode ser considerada uma “ótima” ferramenta/ambiente de desenvolvimento.

Depois foi a vez do TurboGears, com resultados muito próximos aos do Ruby On Rails, cuja aplicação final é mostrada abaixo:


Finalmente é desenvolvida a solução com o Django:


O resultado final é bastante parecido com o do Zope+Plone, entretanto a plataforma não possui tantos recursos quanto o rival, mas tem a vantagem de ser mais simples, oferecer recursos de validação de dados, segurança, interface administrativa auto-gerada, internacionalização, etc. Outra grande vantagem do Django é o fato de trabalhar com bancos de dados relacionais e de apresentar uma sintaxe de código mais “Pythônica” do que os outros dois frameworks feitos em Python.


Como pode ser visto acima, apenas 19 linhas de código e a edição de um único arquivo foi necessária para criar a aplicação. Na hora de rodar o software o resultado foi o seguinte:


No momento em que deveria ser feita a demonstração dos resultados obtidos com a utilização do JBoss seguem os seguintes trechos:


Conclusão bastante dura para os “Javeiros”, mas apesar de ácida (eu tinha avisado) eu creio que seja bastante realista. Afinal de contas é necessário que exista simplicidade no desenvolvimento de aplicações, e isso sempre foi algo que faltou nas plataformas Java. Segue abaixo o quadro comparativo dos resultados obtidos:


Apenas um ponto está errado nesse quadro que mostra as 4 plataformas “alternativas” apresentadas, já que o Django possue templates e internacionalização e o TurboGears possue autenticação e internacionalização.

Caso ainda restem dúvidas sugiro que assistam ao vídeo e que testem cada uma das plataformas citadas. Estou certo que se surpreenderão com o que verão em cada uma delas e com o quanto de tempo poderiam poupar se usassem Python ou Ruby ao invés de Java em suas aplicações Web. Happy Coding!

Categorias
desenvolvimento frameworks

CMS’s, frameworks e informações estruturadas

Passei um bom tempo dedicando-me à exaustiva jornada em procura por um sistema de gestão de conteúdos que possibilitasse a construção de um ambiente composto por informações estruturadas e não estruturadas. A primeira grande descoberta é que os CMS’s mais difundidos na Internet são muito enfaixados e que geralmente só conseguem dar conta sem grandes dores de cabeça daquilo para o qual foram originalmente desenvolvidos.

Depois de muito tempo em busca de um CMS’s que fosse capaz de manipular conteúdos estruturados com facilidade acabei descobrindo o Plone, em conseqüência disso me enveredei pelo Zope e aí a lista de acrônimos só foi aumentando, passando por DTML, TAL, ArcheTypes, ArchGenXML, Python Products, ZODB, Zeo Clients, Zeo Servers, Slots, Macros, Python Controllers, etc., ou seja, é possível obter grandes resultados com o chamado “PZP” (Python+Zope+Plone), entretanto é preciso estar disposto a vencer uma curva extremamente ingreme de aprendizagem, além de ter que conviver com uma abordagem que não envolve diretamente bancos de dados relacionais, passando pela utilização de adaptadores e todo tipo de parafernalha que parece que só é utilizada pela própria pessoa que escreveu o código, isso quando é utilizada (vide o caso do MySQLda e outros Database Adapters).

Voltei a fazer a minha peregrinação, conheci o Ruby on Rails (me dei conta que um CMS não poderia me antender naquele momento, devido ao aprendizado com o Zope e a simpatia que acabei criando com o Archetypes), achei interessante, mas ainda pouco funcional, já que a idéia é boa mas não vejo como poderia ser utilizado em projetos sérios sem oferecer uma série de características, além do mais a abordagem de criar aplicações apartir do banco de dados não me agrada, afinal de contas, se vou manipular objetos mais tarde porque não começar logo de uma vez com essa abordagem e abstrair o resto?

Por fim acabei descobrindo o Django, framework este que estou utilizando em um projeto e não tenho do que reclamar. Foi a escolha certa? Ainda não posso dizer, afinal de contas as mudanças na API e o fato de ainda não ter entrado em produção ainda me deixam com a pulga atrás da orelha, mas certamente foi a melhor opção até agora.

Categorias
dicas linux

Serviços de rede plug&play com Avahi

Já imaginou se o seu programa de mensagens instantâneas fosse capaz de informar você sobre os usuários da sua rede que possuem contas em serviços de mensagens instantâneas e oferecesse uma lista com o nome de todos para que você possa escolher quem deseja adicionar? E já imaginou se ao disponibilizar um stream de vídeo na sua rede as pessoas fossem avisadas sobre a sua realização automáticamente, bastando clicar no aviso para começar a assistir? E se o software que você usa para ouvir músicas informasse você sobre todas as pessoas que possuem músicas compartilhadas na rede e montasse as listas de reprodução automáticamente?

Pois é isso que a biblioteca Avahi torna possível e com a sua adoção dezenas de softwares livres como o GAIM, Rythmbox, VLC media player, entre outros estão passando a oferecer uma experiência de interação em grupo para redes locais muito mais rica do que a que temos hoje.

Um software que faz uso da mesma tecnologia já está disponível para o MacOSX há algum tempo, trata-se do Bonjour, mas o que os dois sistemas operacionais compartilham é na verdade é uma tecnologia denominada Zeroconf.

Vale a pena ficar antenado nesse tipo de tecnologia, certamente os dispositivos conectados (móveis ou não) estão ficando cada vez mais inteligentes e já não estamos tão distantes de uma realidade onde nossa TV irá conversar com a geladeira e nos avisar quando a temperatura da cerveja estiver no ponto e coisas assim.

Mais uma vez a tecnologia evolui para tornar a vida mais simples 😀

Categorias
aplicações web2.0

Os agregadores de notícias e o seu impacto na Internet

Já não é de hoje que existem os agregadores de notícias. Alguns disponíveis como parte integrante do leitor de e-mails, outros disponíveis no próprio navegador, passando pelos softwares específicos para esse fim e até mesmo pelos disponíveis on-line, colaborativos e bem interessantes para quem não tem um computador portátil ou que acesse a internet de vários computadores.


Mas o que vale a pena dizer sobre esses softwares é que eles mudam completamente a experiência com a Internet. Ela se torna mais interativa, e a impressão que se tem é que se está participando de um grande fórum, porém sem canais com assuntos definidos e com uma moderação muito mais eficaz do que nos fóruns tradicionais, feita por tópicos (isso se encararmos um post como um tópico).

Além disso a qualidade daquilo que se escreve em blogs tem aumentado muito, o que ao ser somado ao processo ativo de entrega de informação promovido pelos agregadores de notícias, faz da experiência on-line algo muito mais vibrante do que a velha forma de interação, que mais lembrava a leitura de uma revista.


Ao levar em consideração esses pontos eu pergunto a você que está perdido por aqui lendo esse post (tendo sido trazido até ele por um agregador de notícias ou não): Você tem um Blog? Se você tem, ele tem um feed RSS ou ATOM? Se a resposta para qualquer uma das duas perguntas foi não, então conscientize-se de que encontrar o seu blog num buscador qualquer vai ser a única forma de alguém encontrá-lo e mesmo se isso acontecer você vai receber apenas uma visita, sem perspectiva de retorno.

Não é assim que as coisas devem funcionar. Use um agregador, tenha um blog e permita o acesso a ele através de feeds, isso irá fazer com que a sua experiência on-line mude muito, para melhor.

Mas além de serem muito úteis em blogs, os feeds RSS podem ter uma função espetacular, que é a de manter usuários, leitores ou clientes de seu site atualizados com relação à qualquer coisa que aconteça nele.

Basta levar em consideração a seguinte situação:

Suponha que um cliente de um e-commerce qualquer esteja procurando por um produto de uma determinada categoria, como por exemplo um mp3 player. Na primeira visita que ele faz ao site ele vê todos os modelos disponíveis, mas mesmo assim não encontra nenhum que lhe agrade. Mas ele encontra um link “monitorar novos produtos dessa categoria” e clica nele, o que faz com que o link para o feed relativo aos produtos seja adicionado ao seu agregador RSS.

Feito isso, toda vez que um novo produto for adicionado à categoria de interesse o seu “potencial cliente será avisado automáticamente”.

Revolucionário? Não. Útil? Muito!

Categorias
frameworks

Sessão de perguntas e respostas do Snakes and Rubies

O vídeo da sessão de perguntas e respostas do Snakes and Rubies (evento que foi realizado no ano passado onde foram discutidas as características dos dois frameworks) está disponível no Google Vídeo. Como essa parte do evento não havia sido disponibilizada inicialmente e ela é tão interessante ou mais que a própria apresentação, eu resolvi disponibilizá-lo abaixo.

Categorias
linguagens programação web2.0

Afinal de contas, o que é esse tal de AJAX?

Muito se tem falado sobre o AJAX, o barulho em torno dele é grande, assim como os Applets quando surgiram. O XML e JavaScript Assíncrono, também conhecido como AJAX (Asynchronous Javascript And XML), é na verdade uma nova abordagem para desenvolvimento de aplicações web mais ricas, interativas e responsivas. O AJAX não é realmente uma tecnologia, mas uma forma de utilizar várias tecnologias como HTML ou XHTML, CSS, JavaScript, DOM, XML, XSLT e o Objeto XMLHttpRequest.

O mecanismo de interação das aplicações web é diferente do das aplicações desktop tradicionais. Cada instância de uma página da web precisa se comunicar com o servidor para obter a resposta necessária para ser atualizada. Isso consome uma grande quantidade de tempo e reduz a qualidade da experiência do usuário.

Vamos imaginar uma aplicação que exibe fotos por exemplo. Como ela se encontra rodando no servidor web e não no lado do cliente, quando o usuário quer ver a próxima foto, a página inteira precisa ser montada do zero mesmo que 99% do seu conteúdo nunca se altere. Agora considere a mesma aplicação novamente, mas dessa vez rodando como uma aplicação desktop: Quando o usuário clica para ver a próxima foto, isso é feito tranquilamente e a aplicação só tem que exibir a foto, porque ela está rodando inteiramente no lado do cliente.

A diferença que existe entre o comportamento de aplicações web e aplicações desktop é anulada pelo AJAX já que ele é processado do lado do cliente. O AJAX pode ser utilizado para criar Rich Internet Applications (RIA) que podem ter a interface consistente de um componente da GUI do desktop rodando em um browser comum sem aumentar o tamanho das páginas.

Como o Ajax Funciona?

As aplicações AJAX usam um Motor AJAX que atua como uma camada de aplicação intermediária entre o usuário e o servidor web. Esse Motor AJAX é escrito totalmente em JavaScript e algumas vezes é colocado em um frame escondido. Nesse momento algumas pessoas podem concluir que a presença de uma camada intermediária irá tornar a aplicação menos responsiva, mas a verdade é que ocorre exatamente o oposto no caso do AJAX já que as aplicações resultantes da sua utilização são muito mais responsivas.

Como isso é possível? Quando uma página web é acessada pelo usuário pela primeira vez, o Motor AJAX é carregado pelo navegador. Esse motor é responsável por montar a interface do usuário a medida que vai obtendo dados do servidor web no formato XML utilizando o objeto XMLHttpRequest. Agora a aplicação inteira está rodando no Motor AJAX e não precisa montar a página no servidor. O Motor AJAX permite que a interação do usuário com a aplicação ocorra de forma assíncrona (independente da comunicação com o servidor). Isso significa que o usuário nunca será apresentado à uma janela em branco enquanto estiver esperando que o servidor faça alguma coisa.

Toolkits de desenvolvimento AJAX

Os Motores AJAX possuem códigos complexos escritos em JavaScript, e não é fácil escrever um sozinho. Felizmente, existem vários Toolkits de desenvolvimento desenvolvidos por terceiros para escrever aplicações web baseadas em AJAX. Os três listados abaixo não são exatamente uma lista significativa, mas são um bom lugar para se começar.

Aplicações Web desenvolvidas em AJAX

Assim que o AJAX ganhou popularidade ele saiu dos laboratórios e foi para os servidores de produção na forma de aplicações web reais, simples e complexas. Ele também se tornou uma das tecnologias favoritas no Google, o que pode ser visto nas várias aplicações que eles tem desenvolvido usando AJAX. Abaixo encontra-se uma pequena lista com algumas coisas nas quais o AJAX está sendo utilizado no mundo real.

Categorias
desenvolvimento frameworks programação web2.0

Análise do Django

Como já falei aqui anteriormente o Django é um Framework para desenvolvimento de aplicações web escrito em Python que tem por objetivo simplificar a vida do desenvolvedor e possibilitar a criação de aplicações de forma limpa e organizada. Também havia prometido que descreveria a minha experiência com o framework e é por isso que resolvi escrever o texto abaixo.

O primeiro passo na utilização do Django foi fazer a sua instalação, o que não foi difícil, já que bastou seguir as instruções contidas no Tarball. Depois disso, como todo bom iniciante, parti para o processo de leitura do tutorial, disponível na área de documentação do site oficial, e repetição dos passos descritos em meu próprio equipamento.

A utilização é bastante simples, básicamente composta pelos seguintes passos:

  1. Inicialização do projeto, que é feita com o comando django-admin.py startproject projeto;
  2. Configuração da aplicação, que consiste em informar o endereço, login e senha, além do tipo (mysql, postgres, etc) da base de dados a ser utilizada pela aplicação, através da edição do arquivo settings.py;
  3. Criação da aplicação (um projeto pode ser composto por multiplas aplicações), o que é feito com o comando django-admin.py startapp aplicação;
  4. Definição das classes, editando o arquivo apps/aplicação/models/aplicação.py; e
  5. Instalação da aplicação, que é na verdade a geração das tabelas necessárias ao funcionamento da aplicação na base de dados indicada na configuração, o que é feito pelo comando django-admin.py install aplicação.

Omiti alguns detalhes do processo, como a configuração do settings.py para que a aplicação seja adicionada ao projeto e outros pequenos detalhes de implementação, já que não é essa a finalidade desse texto, mas basicamente é assim que a coisa funciona.

Com as devidas definições no modelo, parâmetros especiais, etc. é possível ter uma interface de gerenciamento de dados completa, com direito a mecanismo de busca, níveis de acesso, autenticação, filtragem, além das operações CRUD (Create, Recover, Update, Delete).

Depois da primeira experiência comecei a montar uma pequena aplicação de minha própria autoria (sempre recorrendo à documentação no site oficial) e posso dizer que:

É possível criar aplicações em minutos com o Django, entretanto ainda não comecei a mexer com as views (templates), mas posso garantir que pelo menos o “M” (model) e parte do “C” (controller) da triade MVC, sobre a qual está alicerçado o framework, são postas na tela com pouquissimo trabalho.

Pois bem. Nos próximos dias voltarei a dar notícias do Django por aqui. Python on Rails? Não sei… Mas pode ser até melhor.

Categorias
Sem categoria

Chegaram meus kits do Ubuntu 5.10

Depois de alguns dias de espera os meus kits do Ubuntu 5.10 chegaram. A arte das capas mudou um pouco em relação ao 5.04 e como já tinha feito o download da imagem ISO dessa versão vou fazer como da outra vez, distribuir os CD’s e manter um ou dois kits para uso pessoal.
Para quem ainda não sabe da história, é possível pedir os CD’s do Ubuntu através do endereço http://shipit.ubuntu.com que também é acessível através do site oficial, onde é possível saber mais sobre a distribuição, que além de ser muito fácil de usar, conta com uma comunidade bem grande de usuários, além de fazer uso de boa parte dos pacotes do debian, conferindo-lhe cerca de 17500 opções de pacotes de softwares para instalação, dos quais a maioria são de código aberto e/ou gratuítos.

Uma bela opção para quem ainda usa conexão discada ou quer distribuir presentes interessantes para clientes e amigos.

Categorias
Sem categoria

Poucos Dólares para Django

Além de ser o título de um excelente western de 1967, estrelado por Antony Steffen, o título acima, somado às referências ao herói homônimo, descreve perfeitamente a real situação do Framework Django, que é um projeto feito em python com motivações e organização muito parecidas com a do já famoso Ruby on Rails.

Mas poxa vida! Outro framework?!

Sim. Porque não! O Django se apresenta como uma ótima alternativa para construção de aplicações web, e além de oferecer todos os recursos do Ruby on Rails, tem uma abordagem bem mais interessante quanto à geração de interfaces de scaffolding, oferecendo não somente as interfaces para inclusão, exclusão, listagem e alteração, mas também uma inteface de administração completa, estrutura de permissões, suporte a usuários e grupos e muito mais.

Vou testar o Django e tentar contar a minha experiência aqui no Blog, afinal de contas, quando o assunto é esse tipo de ferramenta de facilita a vida do desenvolvedor nunca é demais falar das alternativas disponíveis.