Softwell Maker

Para quem não conhece, o Maker é uma ferramenta para criação de sistemas web de forma visual. O desenvolvedor não precisa ter conhecimentos avançados de programação para utilizá-lo, porque tudo é feito visualmente com a ajudas de assistentes e gráficos.

Durante essa semana participei de um treinamento dessa ferramenta, e analizando pessoalmente pude ver a capacidade desse sistema de desenvolvido pela empresa baiana Softwell. Abaixo seguem as minhas considerações sobre o Maker.

Como funciona?

O Maker foi desenvolvido em Delphi e (segundo seus representantes) não é um gerador de código fonte, mas se for necessário o mesmo também pode ser gerado.

Os sistemas desenvolvidos no Maker rodam, por padrão, num servidor de aplicações Java, como o Tomcat, por exemplo. Pode-ser gerar um arquivo .war e fazer o deploy num servidor que desejar.

As aplicações depedem do WEBRUN, que vem junto do Maker, e funciona como uma camada entre a aplicação desenvolvida e o servidor de aplicações.¬† Caso já possua um WEBRUN no servidor, também é possível exportar o sistema para um arquivo .jar e o incorporar a ela.

O Maker possui basicamente 3 funções para geração de sistemas, formulários, fluxos e relatórios.

Formulários

Atravéz de formulários acontecem as principais interações com o sistema. O Maker pode gerar automaticamente os formulários baseando-se nas tabelas e relacionamentos do banco de dados. Além de poder criar formulários, sem associação com fonte de dados e que execute uma tarefa em particular.

Fluxos

No Maker os fluxos substituem a codificação na hora de criar regras de negocio para a apliação. Tratam-se de fluxogramas que são associados a determinadas ações do sistema para realizar tomadas de decisão. Pode-se efetuar condições, loops, mensagens de error e retorno, além de um conjunto de funções já disponíveis como concatenação, obtenção de campos de tabelas, conversão de tipos primitivos, etc.

Relatórios

O Maker possui o Report Builder embutido, e o mesmo é utilizado para desenhar os relatórios necessários para a aplicação.

Na minha opinião!

Realmente, depois de presenciar o treinamento, posso dizer a utilização do Maker acelera sim o processo de criação de aplicações, principalmente no caso dos formulários, que podem ser gerados automaticamente a partir de uma fonte de dados.

Porém, é necessário tempo para se tornar um “expert” na utilização do Maker, o mesmo tempo que se levaria para aprender a utilizar um framework como Django, Ruby on Rails ou Grails, por exemplo. E o que, na minha opinião, seria a grande vantagem de uma ferramenta visual sobre os outros, a curva de aprendizagem, é parecida com a desses frameworks.

Eu devo concordar com esse post do guj, em que o usuário kicolobo diz:

Programação OO é ignorada. O código é gerado em Java e C#, porém o processo de desenvolvimento do Maker é procedural. Todos os diagramas são procedurais. Em momento algum (pelo menos na demonstração que vimos), foi criada uma classe de entidade (ou mesmo uma entidade qualquer). Tudo é relacionado diretamente com o banco de dados. Para quem já trabalha com OO, o Maker pode ser visto como retrocesso.

E realmente é verdade, hoje em dia fala-se muito mais em OO e MVC, voltar o desenvolvimento para as tabelas do banco de dados é praticamente um retrocesso. No django, por exemplo, só é necessário configurar o banco de dados, o desenvolvedor não precisa criar as tabelas, o django executa todo esse processo e também cria os formulários automaticamente.

Uma coisa que me incomodou bastante foi a quantidade de cliques necessários para fazer uma concatenação de texto com algumas variáveis. Algo que em python, por exemplo, poderia ficar assim:

texto = "O total da conta do cliente %s foi de %f reais" % (nome,total)

Outro fato importante é que por ser um sistema proprietário, a comunidade do maker praticamente não existe, se comparada com de outras tecnologias, sendo assim, sempre que precisarmos de ajuda temos que recorer ao suporte a softwell.

Conclusão

Analisando o esquema geral, eu não compraria uma licença do Maker para uso pessoal. Além dos fatos mencionados acima, um ambiente de Software Livre me agrada mais, sabendo que a existe uma comunidade por trás ajudando a manter e melhorar o sistema, diferente do modelo proprietário, onde estamos a mercê da empresa dona do sistema.

Utilizando iw.fss no Plone 2.5

Uma das grandes vantagens do Zope/Plone é o seu banco de dados ZODB, porém existem situações onde é necessário armazenar grandes quantidades de arquivos, ou arquivos muito grandes. Isso pode acarretar no crescimento desnecessário do Data.fs. Uma das soluções existentes é a utilização do produto FileSystemStorage. O que ele faz é, disponibilizar um novo tipo storage para Archetypes, onde os valores dos campos como arquivos e imagens são armazenados no sistema de arquivos.

Primeiro precisamos baixar uma versão compatível com o Plone 2.5, segundo a página do produto a versão mais atual (2.7.1) só é suportada pela versão 3 do Plone. Sendo assim vamos precisar da versão 2.7.0, disponível aqui.

Instalação:

Existem 3 maneiras de instalar o FSS.

1ª) EGG

Baixe este egg, e utilize o easy_install para instalar.

# easy_install iw.fss-2.7.0-py2.4.egg

2ª)Instalando do SVN

Não encontrei o tar.gz da versão 2.7.0, sendo assim, baixei do repositório.

# svn export http://svn.plone.org/svn/collective/iw.fss/tags/2.7.0/ iw.fss
# cd iw.fss
# python setup.py install

3ª) Copiando para lib/pyton

Segue os mesmos passos acima, porém, ao invés de excutar o último comando, copiamos a pasta iw para a lib/python da sua instância.

# svn export http://svn.plone.org/svn/collective/iw.fss/tags/2.7.0/ iw.fss
# cd iw.fss
# cp iw $INSTANCE_HOME/lib/python

Configuração

Podemos notar que o FSS já adota os padrões do zope 3, ou seja, não é simplesmente extrair seu conteúdo na pasta Products e pronto. Para que ele seja carregado necessitamos criar algums arquivos zcml.

$INSTANCE_HOME/etc/package-includes/iw.fss-meta.zcml, com a linha:

<include package="iw.fss" file="meta.zcml"/>

$INSTANCE_HOME/etc/package-includes/iw.fss-configure.zcml, com a linha:

<include package="iw.fss" />

OBS.: No Plone 2.5 pode acontecer de não existir a pasta package-include em $INSTANCE_HOME/etc, se for este o caso será necessário copiar o conteúdo de $ZOPE_HOME/lib/python/Products/Five/skel para $INSTANCE_HOME/etc.

Agora abra o arquivo $INSTANCE_HOME/lib/python/iw/fss/etc/plone-filesystemstorage.conf e defina as variáveis abaixo:

storage-path $$INSTANCE_HOME/var/fss_files
backup-path $$INSTANCE_HOME/var/fss_backup
storage-strategy flat

storage-path e backup-path são, respectivamente, os caminhos de onde ficarão os arquivos e os backups. Já storage-strategy é tipo de estratégia utilizada para armezar os arquivos, por enquanto vamos deixar a estratégia padrão ‘flat’.

Verifique se o FSS está diponível para instalação. Caso sim, você fez tudo corretamente. Seguindo…

Alterando o storage para arquivos e imagens

Até agora o que fizemos foi instalar e configurar o FSS, mas só isso não basta. Para que os arquivos e as imagens dos content-types padrão do Plone (News Item, File e Image) passem a utilizá-lo precisamos de mais um passo. Adcione a seguinte linha em algum dos arquivos em $INSTANCE_HOME/etc/package-includes:

<include package="iw.fss" file="atct.zcml" />

Agora reinicie o zope e adicione uma nova imagem ou arquivo e verifique na pasta que você definiu como storage e note que agora existe um arquivo lá.

Definindo tipos em produtos personalizados

Muitas vezes somente os tipos padrão do plone não suficientes, e temos que criar nossos próprios tipos. Para utilizar o FSS em nossos produtos personalizados fazemos o seguinte:


from iw.fss.FileSystemStorage import FileSystemStorage
...
my_schema = Schema((
    FileField('file',
              ...
              storage=FileSystemStorage(),
              widget=FileWidget(...)
              ),
    ...
    ))
 ...

Bem simples, faça o mesmo na definição do seu tipo e o arquivo será salvo no sistema de arquivos. Para quem usa o Plone 3, os passos são parecidos, porém pode-se utilizar o buildout para facilitar ainda mais o processo.

Esse foi o meu primeiro(de muitos) tutorial, espero que gostem. t+

Bem vindos! (mais uma vez)

Bom, essa é minha segunda tentativa de escrever um blog. A primeira foi a um tempo atrás no blogspot e pra variar fiquei com preguiça de atualizar, escrever nao é o meu forte.

Dessa vez vou tentar utilizar o tempo livre para alimentar esse novo blog. Como os projetos da Cubo Estúdio Web estão meio estagnados por falta de tempo, vou utilizar esse espaço falar sobre o dia a dia, ou seja, Zope, Plone e Python e também sobre PHP e outras coisas.

É isso ai, espero que gostem. t+