Monografia: GEtna – Gerador Ruby On Rails a Partir de banco de Dados

Posted by Luiz Carvalho | Posted in Dicas, Projetos | Posted on 18-09-2009-05-2008

0

Bom galera já estava em tempo de compatilhar minha monografia, de tempos em tempos a galera pedia para enviar, então nada mais justo (e fácil) que por ela aqui no blog.


UNIVERSIDADE FEDERAL DO TOCANTINS
CAMPUS UNIVERSITÁRIO DE PALMAS
BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO

GETNA: GERADOR DE CÓDIGO RUBY ON RAILS
A PARTIR DE BANCO DE DADOS

Palmas
2008
LUIZ ARÃO ARAÚJO CARVALHO

Resumo
Na literatura, existem vários geradores de código disponíveis que tem como
principal propósito automatizar o processo de desenvolvimento de aplicações em
diversas linguagens de programação. Este trabalho apresenta o desenvolvimento
de um gerador de código, denominado GEtna, com a função de criar as classes a
partir de um determinado banco de dados. Vale a pena ressaltar que o gerador
GEtna difere dos existentes pelas suas funcionalidades disponibilizadas.
O gerador proposto aumenta a velocidade do processo de desenvolvimento
de uma aplicação Rails, pois recebe como entrada tabelas de um banco de dados
relacional (MySQL, PostgreSQL ou SQLite) e fornece como saída toda a estrutura
de arquivos (classes). Vale a pena ressaltar que o GEtna proporciona uma
padronização das classes geradas e, conseqüentemente, sustenta sua legibilidade,
que é um fator muito importante quando se trabalha com equipes de
desenvolvedores. Assim, neste trabalho será apresentada uma descrição sobre
geradores de código, padrões de projeto, métodos de mapeamento e definições de
dados que são fundamentais para o desenvolvimento de um gerador de código.

Palavras-chave: Banco de Dados Relacional, Desenvolvimento de Sistema,
Gerador de Código, Rails.

ABSTRACT

In literature, there are several available code generators that have the main
goal to automatize the application development process for some programming
languages. This work presents the development of a code generator, named GEtna,
that creates classes from a specific database. It’s important to note that GEtna
generator differs of other generators by your available functionalities.
The proposed generator increases the velocity of a Rails application
development process because it receives as input relational database tables
(MySQL, PostgreSQL or SQLite), and provides as output the complete file structure
(class). The GEtna provides a padronization of generated classes and,
consequently, maintains the legibility that is a very important factor when there are
developers’ groups. So, in this work a description about code generators, design
patterns, mapping methods and data definition is presented because they are
essential for a code generator development.

Keywords: Relational Database, System Development, Code Generator, Rails.


Não, não eu não vou Copiar a Monografia toda aqui não, em baixo eu exportei em diversos formatos para que seja aberto não importa a situação. Coloquei também o Original podendo ser usado como Modelo para você redigir sua monografia no padrão usado pela UFT.  Só lembrando consegui um 10 com essa monografia então cuidem muito bem dela.

Original(DocX)

Pdf

Txt

Html

Doc

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

Problemas ao instalar o ruby-debug-ide para o Netbeans

Posted by Luiz Carvalho | Posted in Artigos, Dicas, Linux | Posted on 06-07-2009-05-2008

0

A alguns meses atrás tive problema em instalar o ruby-debug, resolvido apenas instalando o build-essencial e o ruby1.8-dev. Melhor esplicado no outro post

Outro problema comum é na instalação do ruby-debug-ide também facilmente resolvível basta instalar a versão certa da gem, ou seja, a versão 0.3.x(0/1/2/3/4) que é a versão aceita no Netbeans 6.X até onde eu testei.

Quando tentei instalar a gem pela linha de comando

[source lang="ruby"]
sudo gem install ruby-debug-ide -v=0.3.4
[/source]
por exemplo, a gem não é encontrada então o negocio é baixar no braço e instalar.

Você pode instalar do repositório ou diretamente no nosso site a versão usual mais recente (Clicando aqui).

E executando
[source lang="ruby"]
sudo gem install ruby-debug-ide-0.3.4.gem
[/source]

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

Pacote de Posts sobre Programação 1

Posted by Luiz Carvalho | Posted in Artigos | Posted on 03-06-2009-05-2008

0

Na falta de tempo para fazer um post, mesmo tendo dezenas de ideias vo fazer uma restrospectiva rápida de alguns posts que eu mais gostei de fazer! =)

Ainda tenho muitas ideias a por em prática. mas vamos por partes

abraço!

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

Mini-Curso: Desenvolvimento Ágil com RubyOnRails

Posted by Luiz Carvalho | Posted in Artigos | Posted on 17-04-2009-05-2008

0


darx

Nesse post estão arquivos que serão utilizados no Mini-Curso de Ruby On Rails:

Aulas 01 e 02

Aulas 03

  • Desenvolvimento Ágil com Rails – Apresentação de Slides Parte II
Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

Mudanças nos Dias do Mini-Curso de Ruby On Rails

Posted by Luiz Carvalho | Posted in Uncategorized | Posted on 24-03-2009-05-2008

0

 

Mini-curso de Desenvolvimento Ágil com Ruby On Rails 
 

HORÁRIO E LOCAL DE AULAS: 

Aula Dia Horário Local
Aula 1 Sexta (03/04) 14:00 – 17:40 Labin 10
Aula 2 Sábado (04/04) 14:00 – 17:40 Labin 10
Aula 3 Sexta (17/04) 14:00 – 17:40 Labin 10
Aula 4 Sábado (18/04) 14:00 – 17:40 Labin 10
Aula 5 Sábado (25/04) 14:00 – 17:40 Labin 10
Aula 6 Sexta (08/05) 14:00 – 17:40 Labin 10
Aula 7 Sábado (09/05) 14:00 – 17:40 Labin 10
Aula 8 Sexta (15/05) 14:00 – 17:40 Labin 10

 
 
DAS VAGAS: 

22 vagas em máquinas do Laboratório 10;

02 vagas para alunos que utilizem Notebook; 

DOS PRÉ-REQUISITOS:  

- Noções de programação orientada a objetos; conhecimentos básicos em desenvolvimento web; 

DAS INSCRIÇÕESaté o dia 02 de Abril 

- Obtenha o formulário de inscrição com qualquer membro da Diretoria, preencha-o, anexe-o com o Comprovante de Pagamento e entregue ao aluno João André Prudêncio da Silva. 

TAXA DE INSCRIÇÃO: R$ 10,00 

IMPORTANTE: O pagamento da taxa de inscrição deverá ser feita através de Transferência Eletrônica ou Depósito em conta. Não serão aceitos comprovantes de depósito feito em caixa eletrônico ou dinheiro em espécie. 
 

Banco do Brasil – Conta Corrente

Favorecido: Centro Acadêmico de Ciência da Computação da Univ Fed To

Agência: 1505-9    Conta: 44955-5 

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

GEtna: Gerador Funcinal

Posted by Luiz Carvalho | Posted in Noticias | Posted on 02-11-2008-05-2008

1

Galera o GEtna está em sua reta final para lançamento do Betha =D
acabei de fazer o modulo que cuida dos relacionamentos Nx1, então temo:

  • Geração de Controllers, Models e Views
  • Geração Customizada de Layouts (Disponíveis os temas default, depot e rails )
  • Geração de relacionamentos NxN e Nx1 no Modelo e funcionalidade aplicada a View
  • Helpers
  • Tests
  • Routes

Próximo passo:

  • Geração de Validações
  • Geração de Migrações

Foram feitos testes com até 1500 tabelas, nos bancos Postgres, Mysql e SQLite e nos sistemas Operacionais Linux(ubuntu) e Windows(XP).

Agora preciso da ajuda de vocês, não tenho Mac e nunca mexi em outro bancos a não ser esses três. então quem puder testar no Mac e em outro banco de dados e se possivel mandar um ScreenShot pra mim pra colocar na Monografia seria de grandississima ajuda.

OBS: O Gerador é escrito em Ruby e utilizando ActiveRecord, então isso tudo devia funcionar sem problemas, mas preciso testar no maximo de ambientes e situações possiveis para ter certeza.

Falando em Ajuda, gostaria de Agradecer a garela da Rails-Br, Cairo Noleto,Leandro Camargo, Felipe Diesel, Silvio Fernandes entre outros.

para quem quiser testar o Plugin (ainda em desenvolvimento)

http://github.com/LuizCarvalho/getna/tree/master

Abraços.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

GEtna na || Semana Acadêmica de Ciências da Computação – UFT

Posted by Luiz Carvalho | Posted in Noticias | Posted on 26-09-2008-05-2008

0

Bom Leitor,

Temos ótimas noticias sobre nosso GEtna, hoje(25 de setembro de 08) foi apresentada na II semana Acadêmica do Curso de Ciência da Computação da Universidade Federal do Tocantins uma pequena introdução sobre o Gerador, a galera gostou, ( :) que alivio), infelizmente não foi tão bom quanto eu esperava, cheguei 3 minutos antes de ser anunciado (culpa da passeata da Nilmar [Candidata a prefeita aqui de Palmas]), então fui sem preparação psicológica nenhuma, fiz a cronologia da apresentação deu 37 minutos, eu me esforcei pra deixar com 30, chegando lá só tinha 20 :O, e agora? bom apressei o Maximo que pude acho que atropelei algumas coisas importantes mas no final não saiu tão mal =).

Ah outra coisa que não posso esquecer é que temos mais uma ajuda no projeto GEtna Silvio Fernandes Já fez um fork no projeto andou dando umas fuçadas deus umas dicas legais e é nosso mais novo parceiro nesse trabalho. isso sim é projeto Open Source =). valeu Silvio.
Vou disponibilizar a apresentação aqui no blog, junto com algumas fotos do evento.

update: 18 out 2008: Adicionado minhas fotos =)

Para ver o Slide Clique Aqui

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

Getna : Uma Abordagem geral sobre o processo de desenvolvimento.

Posted by Luiz Carvalho | Posted in Artigos | Posted on 07-09-2008-05-2008

0

Para a realização deste trabalho, a primeira medida a ser efetuada é a definição do escopo do gerador, ou seja, quais funcionalidades estarão realmente presentes. Para isso, serão analisadas algumas limitações existentes em várias linguagens, como processos repetitivos e cansativos, no desenvolvimento de uma aplicação, inclusive no próprio Rails.

Iniciaremos o processo de desenvolvimento do gerador pela seleção do tipo, existindo várias possibilidades, como criação de um conjunto de scripts independentes que, ao ser executado por um comando, efetuaria a geração. Uma segunda opção cabível é a criação de uma Gem, um módulo que adiciona novas funcionalidades ao coração do Ruby, sendo expansível a qualquer outro módulo, ou framework nele existente, conseqüentemente, disponíveis às aplicações Rails. Outra possibilidade é criar um plugin (módulo de caráter expansível à uma aplicação Rails) que acoplado ao um projeto do framework pode ser utilizado em conjunto com a aplicação. Dentre as opções apresentadas, escolheremos a opção mais apropriada verificando questões como facilidade de instalação na aplicação, utilização e desenvolvimento.

Como ferramenta de apoio à linguagem de programação usada para desenvolver o gerador de código, utilizaremos o Netbeans devido ao fato de que se possui uma certa experiência com essa IDE e também porque esta possui suporte total à linguagem e ao framework, tornando a programação mais simples e intuitiva.

Uma das tarefas mais importantes será encontrar uma forma de mapeamento do banco de dados, pois dependendo da forma, utilizando um plugin, comandos SQL ou um recurso do próprio Rails, isto vai influenciar diretamente na qualidade final gerador. O uso comandos SQL manuais podem deixar o processo de geração mais lento e mais pesado, se utilizarmos plugin perderíamos a portabilidade e simplicidade do gerador, pois haveria dependência direta de um agente externo, que necessitaria sempre ser instalado junto com o gerador e na pior da hipótese esse plugin pode ser descontinuado fazendo assim com que nossa ferramenta se tornasse legada em uma possível atualização do Rails.

A melhor saída seria utilizar componentes já disponibilizados pelo Ruby ou Pelo Rails, o ActiveRecord, um das Gems que compõem o framework e responsável pela manipulação da base de dados, pode ser a saída para realização dessa tarefa.

Foram feitos estudos em relação à geração de código em outras linguagens e no Rails, foi dado, então, inicio a produção do gerador, uma preocupação nessa etapa foi deixar o código gerado limpo, funcional e re-aproveitável, a resposta estava na utilização de padrões do próprio Rails. Com essa definição deve, então, ser iniciada a criação de templates, arquivos que contem toda a lógica dos códigos a serem gerados.
A estruturação do desenvolvimento do gerador pode ser organizada em cinco partes fundamentais, que serão descritas a seguir. Primeira parte é o gerador, encontrado como arquivo getna_generator.rb pode ser considerado o motor de geração, todas as requisições e tratamentos passar pela sua administração. A segunda é a obtenção e tratamento de dados, a classe Getna (inclusa no arquivo getna.rb, da pasta lib/), contendo todos os módulos Ruby necessários para a manipulação de dados, inclusive o módulo Base, que faz o mapeamento da base e cuida dos relacionamentos.

Na terceira parte encontramos os templates, arquivos modelos de cada arquivo que vai ser gerado, nessa parte que focamos a qualidade de código e a estruturação de cada arquivo. Os arquivos de testes para “cobrir” a aplicação contra erros se encontram na quarta parte de nossa aplicação.
A quinta e ultima parte leva os arquivos adicionais como licença, instalação, desinstalação, descrição e inicialização, arquivos necessários para criação de um projeto Rails, essa estrutura pode ser mais bem entendida na figura abaixo:


Estrutura do Gerador GEtna

Será feito um estudo sobre licenças de código livre para formalizar o gerador como um projeto oficialmente livre e disponível para toda a comunidade. A licença MIT (Massachusetts Institute of Technology), por exemplo, tem grandes chances de ser escolhida.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

GEtna – Ep. 3: Mapeando Tabelas do Banco de Dados

Posted by Luiz Carvalho | Posted in Artigos | Posted on 07-08-2008-05-2008

6

Primeiro passo de nosso gerador Rails era buscar todas as tabelas do banco de dados e criar a estrutura inicial… outro problema após algumas horas vendo documentação… bingo! nada XD, Pedindo ajuda para nossa comunidade de sábios desenvolvedores do rails-br, obtive varias sugestões como: De Buscar Pelo Model de Abraão Coelho, Cássio Marques, infelizmente não serviu, pois ainda não tenho model algum, necessito cria-los. Renan Andrade teve uma otima ideia, já que até agora eu defini que o banco seria MySQL poderia fazer um simples:

mysql> show tables; <= mostra as tabelas;
mysql> describe suatabela; <= exibe sua tabela com as descrições do campo.

OK, Mas queria algo mais pratico, tinha certeza que o ActiveRecord poderia fazer isso, e não ia desistir de encontrar.

Estava tentando algo bem bobo como:

ActiveRecord::Base.column_names

Me deparei com o seguinte erro:

NoMethodError: undefined method `abstract_class?’ for Object:Class
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1915:in `class_of_active_record_descendant’
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1277:in `base_class’
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1012:in `reset_table_name’
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1008:in `table_name’
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1145:in `columns’
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1158:in `column_names’
from (irb):16

Ricardo S Yasuda e Davis Zanetti Me abriram os olhos quanto ao metodo que só funciona em uma instancia do ActiveRecord e não em uma Classe Abstrata, isso foi muito importante para a minha conclusão.

Ulisses de Albuquerque Deu uma dica boa sobre Adapters mas isso ainda não era claro pra mim, mas foi muito importante isso ai.

Juan Maiz então me endicou uma saída, utilizar o Sequel Uma solução perfeita para meus problemas, mas fiquei um pouco desanimado pensando que o ActiveRecord… o Poderoso ActiveRecord não tinha tal funcionalidade… e tambem que meu simples generator tenha que usar alguma dependência tão primitivamente para realizar uma pequena tarefa. Bom não desisti e fui feliz em minha busca e insistência.

@con = ActiveRecord::Base.connection
@table_names = @con.execute(‘show tables’)

Está ai, nossas tabelas :) legal né, saí juntando as dicas do pessoal todo e bingo, saiu alguma coisa, bom com isso já posso começar…, mas como sou meio curioso e me animei com esse negocio e não custava nada dar uma adentrada a mais… olha o que descobri…

@con = ActiveRecord::Base.connection
@table_names = @con.tables


:D Que legal, não era que o ActiveRecord Tinha mesmo o bendito Método… só um pouco de pesquisa e fica simples.

Agradeço a toda a Comunidade.

Abraços

Para ver todos os posts Sobre Getna clique aqui

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

GEtna – Ep. 2: Primeiros Passos

Posted by Luiz Carvalho | Posted in Artigos | Posted on 06-08-2008-05-2008

1

Iniciar meu Projeto… e agora por onde devo começar?

Primeiro a definição do projeto, ué é um gerador… então vamos criar um gerador. uma googlada básica e “Gerador em Rails“, bom nesse tutorial já me sanaram outra duvida, Plugin ou Gem como no tutorial ensina a fazer um plugin, advinha o que eu fiz?

Criamos o Projeto Rails

rails projetogetna

e fizemos exatamente o que está no tutorial, bom funcionou até um certo ponto o ultimo arquivo, deu pau lá nas migrates, mas acho que deve ser por causa da versão do Rails.

Comecei a “programar” depois de algumas horas tentando entender o funcionamento e brincando com Rails::Generator::NamedBase, como um bom iniciante vindo de uma metodologia totalmente diferente, tentei Debugar o codigo com o ruby-debug-base fui até o bom e velho Grupo rails-br onde, dentre todas as comunidades que eu passei, encontro a galera mais prestativa dessas comunidades de Programação. onde Davis Zanetti, Diego Carrion,Tino Gomes e Cássio Marques Deram uma Força, e mandaram (Pra varias Escrever teste), bom eu ainda to meio engatinhando nessa parada de testes, mas pow, to no Rails. e estou começando uma longa jornada ate a dominação desse metodo.

Como ainda não sou Hábil com isso achei uma solução, no mínimo, “Gambiarral” fazer saidas do sistema tirei a ideia do post do Diego Carrion:

“Para não precissar debugar acho que o melhor é ter bons logs, ai caso
aconteça um erro, voce pega os dados do log e cria um novo teste :D

A maneira que eu fiz foi gerar saidas do sistema com os conteúdos das variaveis usando o

$stdout.print

O Codigo fica um pouco feio XD, mas foi a minha saída:


$stdout.print ARGS
runtime_args.each { |i|  $stdout.print#{i}\n }

Bo isso funciona e garante alguns dias a mais sem Testes.

Para ver todos os posts Sobre Getna clique aqui

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter