www.devmedia.com.br.nyud.net
      
Equipe DevMedia

Noticias/Dicas/Artigos pulicados.

Kepler - Uma plataforma de desenvolvimento Web

por Carlos Accioly

Kepler é uma plataforma de desenvolvimento Web e, como tal, oferece recursos que tornam a criação de aplicações Web bem mais fácil do que se fôssemos começar do zero.

Há muitas plataformas de desenvolvimento Web disponíveis no mercado. Por que criar mais uma? Porque nenhuma permite o mesmo equilíbrio entre poder, tamanho e flexibilidade que Kepler. Kepler foi concebido a partir do conceito de SIMPLE: é Simples, Portátil, Leve e Extensível. Isto não quer dizer que só possa ser utilizado para criar aplicações simples. Você pode desenvolver aplicações Web bastante sofisticadas com Kepler. O que queremos dizer então com SIMPLE?

q       Simples: Kepler é fácil de aprender, fácil de implementar e fácil de usar. Desenvolvedores em todo o mundo acusam aumentos dramáticos de produtividade quando utilizam Kepler.

q       Portátil: Kepler pode rodar em praticamente qualquer sistema operacional que tenha um compilador C padrão ANSI. Mas é improvável que você tenha de compilar qualquer coisa: arquivos binários executáveis para a maioria dos principais sistemas operacionais estão disponíveis para download.

q       Leve: Kepler pode ser utilizado mesmo com restrições extremas de memória e CPU. Embora todas plataformas Web do mercado possam ser executadas em computadores poderosos, a maioria nem cogitaria ser instalada num dispositivo móvel ou em hardware customizado. Kepler já foi utilizado para desenvolver aplicações Web completas que rodam em dispositivos de todos tamanhos, desde telefones inteligentes e PDA's até grandes máquinas que usam Windows/Linux/OSX.

q       Extensível: Kepler oferece uma poderosa combinação de componentes de uso geral. Mas, se você quiser, também pode criar seu próprio componente e extender a funcionalidade de Kepler. Se estiver imbuído de espírito comunitário, você ainda pode oferecer o seu componente para fazer parte da plataforma Kepler.

Kepler é software open source que utiliza uma licença do estilo MIT. Isto significa que você não paga absolutamente nada para utilizá-lo e que, ao contrário do que acontece com outras ferramentas open source, você não está sujeito a restrições em cobrar pelos produtos que desenvolver utilizando a plataforma Kepler.

Sobre a Lua e astrônomos

O segredo por trás do Kepler é a linguagem de programação Lua, criada em 1993 na Pontifícia Universidade Católica (PUC) do Rio de Janeiro. Lua segue o conceito SIMPLE, embora este termo não existisse então. Suas características fizeram com que a linguagem se difundisse pelo mundo todo – embora, infelizmente, nem tanto no Brasil – para uma série de aplicações. A indústria americana de jogos de computador adotou Lua, que está presente em jogos como World of Warcraft; a Adobe utiliza Lua em alguns de seus produtos; e softwares embedded, como o do PlayStation, aproveitam a leveza e portabilidade da linguagem.

 

O Projeto Kepler se formou a partir da percepção de que o Brasil também deveria explorar este recurso nacional. Enxergando o poder da linguagem Lua mas também a dificuldade em criar programas a partir do zero com ela, algumas pessoas decidiram criar uma plataforma que facilitasse a criação de aplicações de nível industrial. Na esperança de que a plataforma gere ondas de crescimento no software nacional, batizaram o projeto com o nome de Johannes Kepler, pioneiro no cálculo das órbitas dos corpos celestes e o primeiro astrônomo a explicar que as marés eram causadas pela lua. Nasceu assim o Projeto Kepler, que conta com o apoio da Fábrica Digital e da PUC-Rio, e que logo recebeu recursos da FINEP e do CNPq.

Kepler em dispositivos portáteis

A plataforma Kepler é extremamente flexível. Por exemplo, a equipe do Projeto Kepler utiliza um webserver num Internet tablet Nokia 770 conectado à rede de um escritório através de Wi-Fi, como mostra a Figura 1. Usuários em PC’s acessam as aplicações que estão num webserver do tamanho de um PDA ligado sem fios à rede local, com desempenho similar ao de um servidor comercial.

 

wm_28-01-2008pic17.JPG 

Figura 1. Internet tablet Nokia 770 rodando o webserver Xavante

 

Uma situação em que Kepler se mostra especialmente útil é quando estamos desenvolvendo uma aplicação que será utilizada em dispositivos portáteis que serão utilizados em áreas remotas. Por exemplo, é possível embutir um webserver num dispositivo wireless para que o usuário possa utilizar aplicações Web locais e acessar os dados mesmo quando estiver sem cobertura de Wi-Fi ou GPRS. Quando o dispositivo estiver novamente online os dados são sincronizados com um servidor remoto.

 

A instalação do Kepler é extremamente leve: ocupa entre menos de 500 kilobytes até cerca de 1 megabyte, dependendo dos módulos de software instalados. Isto representa um gasto de memória bastante inferior ao exigido por plataformas como Java, PHP e Python. O software criado com Kepler tende a ser extremamente rápido e compatível a nível de código com praticamente qualquer dispositivo que se crie. Se você quiser utilizar Kepler com Apache, Microsoft IIS, Tomcat ou Zope, não há problema: Kepler é compatível com todos eles. Mas se quiser utilizá-lo num dispositivo com restrições de memória, a melhor opção provavelmente será o Xavante, o webserver nativo do Kepler.

Brincando com Kepler

Entre no site www.keplerproject.org. Clique o item Download do menu à esquerda. Você será levado para a página do Kepler no LuaForge, onde se encontram as versões disponíveis do Kepler. Para nosso exemplo vamos utilizar a versão para Windows, descrita no LuaForge como “Intel x86”. Vamos então baixar o arquivo, que é um programa convencional de instalação de software, e executá-lo. É recomendável aceitar todas opções default do programa de instalação.

 

O menu do Windows agora tem um novo item, Kepler, que é um menu com duas opções: Uninstall e Xavante. Vamos acionar o Xavante, que é o webserver nativo do Kepler. Antes, porém, feche qualquer programa que utilize a porta 80, que é a porta default do Xavante. Um exemplo de software popular que utiliza esta porta é o Skype.

 

Para acionar o Xavante, basta acionar o item correspondente no menu do Windows. Deverá aparecer na sua bandeja um ícone similar à Figura 2. Clicando este item com o botão direito do mouse vemos um menu de opções que permite, entre outras opções, ativar e desativar o Xavante. Se o Xavante estiver rodando, será apresentada a opção Stop Xavante; se ele não estiver ativo aparecerá a opção Start Xavante. Repare que o ícone muda de aparência para indicar quando o Xavante não está ativo.

 

wm_28-01-2008pic18.JPG 

Figura 2. Ícone do Xavante

 

Direcione agora seu browser para o seguinte endereço: http://localhost/. Se tudo estiver certo você verá uma tela parecida com a Figura 3. Se não aparecer esta tela é sinal de que algo não está como deveria estar. Se o Xavante estiver no ar (examine o ícone na bandeja para saber), talvez algum aplicativo esteja ocupando a porta 80. Certifique-se de que todos aplicativos que usem esta porta estejam desativados e tente novamente.

 

wm_28-01-2008pic19.JPG 

Figura 3. Tela de abertura do webserver Xavante

 

Clique no link Xavante tests. Você cairá numa tela parecida com a Figura 4, que apresenta algumas propriedades do sistema e permite simular a digitação de um nome de usuário e senha.

 

wm_28-01-2008pic20.JPG 

Figura 4. Teste do Xavante

 

Pronto! Você instalou Kepler e testou seu webserver nativo.

 

Uma brincadeira mais divertida

Na verdade, o que fizemos até agora não foi muito excitante. O que queremos é desenvolver nossas próprias aplicações Web. Ensinar tudo o que é preciso para desenvolver uma aplicação completa está além do escopo deste artigo, mas podemos apresentar um tutorial simples e direcionar você para os locais onde pode aprender mais.

 

Vamos primeiro ao tutorial. Será uma versão do tradicional “Hello, World!” com alguma interatividade.

 

Procure a pasta onde o Kepler foi instalado. Se você aceitou os valores default durante a instalação, esta pasta deve ter endereço similar a C:/Program Files/Kepler. Dentro desta pasta há uma outra pasta, de nome web. Dentro da pasta web crie um arquivo com o conteúdo da Listagem 1 e salve-o com o nome meututor.lp.

 

wm_28-01-2008pic21.JPG
Listagem 1.
Aplicação simples no Kepler

 

Direcione seu browser para http://localhost/hello.lp. Você verá uma tela como a da Figura 5. Coloque seu nome no campo, clique o botão OK e veja o que acontece.


wm_28-01-2008pic22.JPG 

Figura 5. Uma primeira aplicação em Kepler

 

Esta aplicação, como todo “Hello, World”, é um exemplo simplório. Na prática, colocar lógicas de negócio complexas num arquivo .lp (Lua Pages) seria uma solução deselegante por dois motivos: torna difícil a leitura de lógica Lua emaranhada com código HTML; e reduz a modularidade do produto final. O padrão comumente aceito de desenvolvimento no Kepler consiste em fazer páginas LP executarem chamadas a funções externas, geralmente desenvolvidas em Lua.

 

Os componentes de Kepler

Kepler possui módulos independentes que podem ajudar a incorporar funcionalidades às suas aplicações. Os componentes atualmente disponíveis (além do webserver Xavante, mencionado acima) estão descritos a seguir.

 

CGILua é uma ferramenta para a criação de páginas dinâmicas e para a manipulação de dados informados via formulários Web. CGILua permite separar a lógica e manipulação de dados da geração das páginas, tornando fácil desenvolver aplicações Web com Lua. Uma das vantagens de CGILua é a abstração do webserver. Você pode desenvolver uma aplicação com CGILua em um webserver e depois executá-la em qualquer outro webserver que suporte CGILua.

 

Compat-5.1 é um conjunto de arquivos que implementa o modelo de packages de Lua 5.1 em programas desenvolvidos em Lua 5.0.

Copas é um despachante baseado em co-rotinas que pode ser utilizado por servidores do tipo request/response TCP/IP. Um servidor registrado com Copas fornece um tratador para requisições e utiliza as funções de sockets do Copas para enviar as respostas.

 

LuaExpat é um parser de XML no padrão SAX (Simple API for XML – veja www.saxproject.org) que facilita o processamento de arquivos XML. LuaExpat se baseia na biblioteca Expat (vejawww.libexpat.org).

 

LuaFileSystem oferece funções complementares relacionadas a sistemas de arquivos. LuaFileSystem fornece uma maneira portátil de acessar a estrutura de diretórios e os atributos dos arquivos armazenados pelo sistema operacional.

 

LuaLDAP implementa uma interface simples para um cliente LDAP de acordo com o padrão OpenLDAP (veja www.openldap.org). LuaLDAP permite que uma aplicação se conecte a um servidor LDAP e execute operações de busca, adição, comparação, exclusão, alteração e troca de nomes.

 

LuaLogging permite a geração de mensagens de logging  para a console, arquivos, email, sockets ou SQL, sem alteração do código binário. LuaLogging se baseia em log4j (vejahttp://logging.apache.org/log4j/docs/index.html).

 

LuaJava é uma ferramenta de scripting para Java. Seu objetivo é permitir que scripts escritos em Lua manipulem components escritos em Java através da mesma sintaxe utilizada para acessar os objetos nativos de Lua. LuaJava não requer declarações nem qualquer tipo de pré-processamento. Também permite a Java implementar uma interface em Lua.

 

LuaSOAP facilita o uso de SOAP (Simple Object Access Protocol) através de uma API extremamente simples que converte tabelas Lua em documentos XML e vice-versa.

 

LuaSQL permite a conexão com bancos de dados ODBC, ADO, Oracle, MySQL, SQLite, JDBC e PostgreSQL. Através da conexão o usuário pode executar quaisquer comandos SQL e recuperar os resultados linha a linha num cursor.

 

LuaXMLRPC é uma biblioteca que permite realizar chamadas RPC através de XML-RPC (veja www.xmlrpc.com). LuaXMLRPC provê uma API simples e uma camada de abstração sobre XML, evitando assim a complexidade de ter de manipular strings que representam estruturas de dados.

 

LuaZIP é uma biblioteca que permite a manipulação de arquivos em formato ZIP. Com LuaZip um programa escrito em Lua pode ler os arquivos armazenados em arquivos ZIP através de uma API bastante similar à biblioteca padrão para I/O de Lua.

 

Orbit permite o desenvolvimento de aplicações Web dentro do paradigma Model-View-Controller (MVC). Um controller Orbit é um módulo Lua, ações são funções dentro deste controller e views são Lua Pages. Orbit permite a utilização de um mesmo modelo com diversos sistemas de BD sem que seja necessário se preocupar com os detalhes de cada um, o que facilita o desenvolvimento e aumenta a portabilidade dos sistemas que utilizam bancos de dados.

 

Rings permite criar novos estados Lua dentro de Lua. Um estado é um ambiente de execução com suas próprias variáveis e valores. Rings também prove uma forma simples comunicação entre o estado criador (mestre) e os estados criados (escravos).

 

VEnv é o Lua Virtual Environment, uma biblioteca que provê uma maneira simples de executar uma função Lua num ambiente estanque, sem afetar o ambiente original.

 

Xavante foi visto no nosso tutorial. Ele é um webserver de arquitetura modular baseada em handlers e que segue o padrão HTTP 1.1.

 

Além dos componentes acima, Kepler também oferece ferramentas que facilitam o desenvolvimento de aplicações. Segue uma descrição das ferramentas que atualmente fazem parte do Kepler.

 

LuaProfiler ajuda a encontrar gargalos de desempenho em programas Lua. LuaProfiler gera um log de todas chamadas a funções, com os respectivos tempos de execução. O log pode ser importado para uma planilha eletrônica para análise.

 

RemDebug é um debugger permite controlar remotamente a execução de um programa Lua, incluir pontos de parade e inspecionar o estado atual do programa. RemDebug também pode ser usado para depurar scripts CGILua.

 

Como Kepler é um projeto open source, novos componentes e ferramentas são criados continuamente por desenvolvedores externos. O site LuaForge (www.luaforge.net) também contém um grande número de componentes de uso livre que facilitam a criação de aplicações com Kepler. 

No mundo da Lua

Nosso tutorial e o quadro Os componentes de Kepler deixam evidente que a principal habilidade necessária para criar aplicações Kepler – presumindo experiência anterior em desenvolvimento Web – é conhecimento da linguagem Lua.

 

Quer dizer que para usar Kepler preciso aprender uma linguagem nova? Sim, é isto mesmo. O que permite ao Kepler ser SIMPLE (veja a explicação do conceito no início do artigo) é a plataforma se basear em Lua. O interpretador Lua é portátil e leve, o que permite ao Kepler ter estas mesmas características. Além disto, Lua é simples de aprender e simples de usar.

 

À primeira vista Lua parece ser apenas uma entre tantas linguagens de programação. É possível aprendê-la em poucos dias. Quando começamos a programar em Lua, contudo, vamos percebendo aos poucos que a linguagem permite executar tarefas bastante complexas com código notavelmente enxuto. Lua incorpora a filosofia SIMPLE ao extremo. Por exemplo, só tem um tipo de estrutura de dados, a tabela, que entretanto pode ser utilizada para implementar arrays, matrizes, listas, pilhas, listas, conjuntos, dicionários e praticamente qualquer outro tipo de estrutura.

 

Lua permite ao programador se manter completamente isolado do hardware. Isto é uma conseqüência da portabilidade da linguagem. Não se pensa em termos de ponteiros, caracteres delimitadores de strings ou outros detalhes de baixo nível. O gerenciamento de memória é automático.

 

Além disso, Lua tem mecanismos que tornam muito fácil estender sua sintaxe. Por exemplo, funções são variáveis de primeiro nível, o que permite, entre outras coisas, passar uma função como parâmetro para outra função.

 

Lua é uma linguagem de cola (glue language), ou seja, ela foi projetada para se integrar bem com outras linguagens e para unir components desenvolvidos em linguagens diferentes. Já foi integrada com C, C++, Fortran, Java, Smalltalk, Ada, C#, Perl e Ruby e outras linguagens.

 

Lua é uma linguagem orientada a objetos? Estritamente falando, não: é uma linguagem procedural. Mas provê mecanismos que permitem, através de técnicas simples e de domínio público, implementar os mecanismos de orientação a objetos.

 

Vale a pena conhecer esta curiosa linguagem.

 

O site oficial de Lua é www.lua.org. Lá você encontra a documentação formal da linguagem. Outro endereço que contém recursos bastante úteis, inclusive um curso fácil de Lua, é o do site do grupo de usuários de Lua: www.lua-users.org.

 

Para quem realmente se interessar pelo assunto, recomendamos o livro Programming in Lua, de Roberto Ierusalimschy, um dos criadores da linguagem. A primeira edição, publicada em 2003 e, disponível na Amazon (www.amazon.com), descreve a versão 5.0 de Lua; a segunda, publicada em 2006 e disponível no site do Kepler (www.keplerproject.org), descreve a versão 5.1. Atualmente (abril de 2006) Kepler utiliza a versão 5.0 de Lua, mas a migração para a versão 5.1 está prevista para o futuro próximo.

 

Duas observações surpreendentes saltam aos olhos quando procuramos o livro de Lua na Amazon: a primeira é que, embora a linguagem tenha sido criada no Brasil, o livro foi escrito em inglês; a segunda é a quantidade de livros que incluem Lua entre seus assuntos. A explicação de ambos fenômenos é a mesma. Como falamos no início, Lua é uma linguagem popular no mundo, mas nem tanto no Brasil. Um dos motivos para a criação de Kepler é tentar reverter esta situação.

 

Procuram-se desenvolvedores

Kepler é uma iniciativa open source. Apesar do apoio que tem recebido, a colaboração de bons desenvolvedores sempre é bem-vinda. Caso você tenha interesse de participar deste projeto, entre em contato através do email info-NO-SPAM-THANKS@keplerproject.org. Ainda há muito o que fazer.

Conclusões

Plataformas de desenvolvimento Web oferecem componentes que tornam a criação de aplicações Web bem mais fácil do que começando do zero. Diversas plataformas de desenvolvimento Web excelentes estão disponíveis, mas nenhuma permite o mesmo equilíbrio entre poder, tamanho e flexibilidade que Kepler. Kepler é simples, portátil, leve e extensível.

 

Kepler é uma escolha particularmente boa quando queremos implementar aplicações Web que irão rodar em ambientes com limitações rigorosas de memória e velocidade de CPU, como PDA’s, telefones celulares e consoles de jogos. Também é altamente recomendável quando queremos garantir a portabilidade das aplicações para uma gama heterogênea de equipamentos e sistemas operacionais.

 

Vimos quão fácil é instalar e usar Kepler, e como o desenvolvimento de páginas dinâmicas é simples com a utilização da linguagem de programação Lua.

 

Partes deste artigo foram adaptadas da documentação do Kepler e de seus componentes, com a autorização do Projeto Kepler.

 

Pacote Nokia 770 com Wi-Fi

Uma forma conveniente de adquirir o Nokia 770 é através do pacote Go wireless at home, que inclui o Internet tablet Nokia 770 e um roteador ou gateway Linksys.

 

Mais detalhes em www.internettablettalk.com/content/view/173/2.

 

O autor deste artigo, a revista WebMobile e o Projeto Kepler não têm nenhuma afiliação com a Nokia ou com a Linksys.

 

Carlos Accioly (carlos@accioly-biz.com) é Sócio-Diretor da Accioly Novello Tecnologia da Informação, colaborador do Projeto Kepler, bacharel em Informática pela UFRJ e MBA em Gestão de Negócios pelo Ibmec/RJ. Já realizou trabalhos para Banco Garantia, Banco Icatu, Banco Santander, BankBoston, Brasif Shopping, Claro, Editora Abril, Exxon, Peugeot, Petrobras, Petróleo Ipiranga, Siemens, Telefônica Empresas, Telemar, Terra, White Martins e Xerox, entre outros.

www.devmedia.com.br.nyud.net/articles/viewcomp.asp?comp=7805