Featured Posts

NOVA PROMOÇÃO: Como ganhar convite para a promoção chip TIM BETANOVA PROMOÇÃO: Como ganhar convite para a promoção... Com TIM BETA você faz quantas ligações quiser, manda sms a vontade e ainda tem acesso a internet por R$ 0,25 e MSN de graça sem pagar nada! Agora o TIM Beta é adquirido por meio de convite, e o blog RedRails vai dar um TIM Beta para seus leitores. Basta deixar um comentário dizendo por...

Read more

Apagando Fotos do Iphone                 Bom tive alguns problemas com meu Iphone ao tentar apagar umas fotos  que não apareciam o icone da lixeira ao lado. Isso acontece quando você sincroniza as fotos do Iphone com seu Computador. Como eu consegui...

Read more

Como remover Videos/Filmes de seu Iphone Ipod Para apagar videos do seu Iphone ou Ipod não é tão complicado, mas eles esconderam bem essa opção. segue a baixo o video para fazer isso. Já para enviar eu utilizei o aplicativo CopyTrans

Read more

Como mencionar qualquer pessoa do Facebook (inclusive...               Olá fiéis leitores do RedRails e esporádicos também! Hoje iremos ensinar a vocês como mencionar uma pessoa do modo mais eficiente, tão eficiente que funciona para qualquer pessoa do facebook ( amigo seu ou não) via celular,...

Read more

Object-Relational Mapping(ORM) – Mapeamento de Objeto-Relacional

0

Posted on : 13-04-2011 | By : Luiz Carvalho | In : Artigos


Mapeamento de Objeto-Relacional (ORM) é uma abordagem que permite a construção de sistemas utilizando o paradigma orientado a objetos com a persistência destes objetos em bancos de dados relacionais. Utilizando-se de técnicas e estratégias específicas, é possível mapear classes com seus atributos e associações para o modelo relacional (SILVA et al.; 2006).
Segundo (AMBLER, 1999), “o mapeamento de classes pode ser feito mediante a paridade entre classe e tabela, ou seja, uma classe é mapeada para uma tabela”. Este mapeamento direto de classes para tabelas representa a forma mais simples de mapeamento, tornando mais fácil o entendimento e a manutenção de uma aplicação. A idéia deste mapeamento pode ser visualizada na Figura 1.

Figura 1: Mapeamento de Tabelas – Simples

Read the rest of this entry »

Geradores de Código

0

Posted on : 13-04-2011 | By : Luiz Carvalho | In : Artigos

Geradores de código são basicamente programas que geram outros programas. Os geradores podem ser definidos como ferramentas tanto para formatar códigos simples quanto para gerar aplicações complexas a partir de modelos abstratos (templates). São muito utilizados para agilizar o processo de desenvolvimento, pois aumentam a produtividade e diminuem o tempo gasto na codificação da aplicação e, conseqüentemente, o custo final (AMBLER, 2004; KLUG, 2007).

Segundo Herrington (2003), a geração de código é a técnica pela qual se constrói código utilizando programas. Os geradores de código podem trabalhar por meio de linhas de comando ou de interfaces gráficas, estas últimas são as formas mais interativas. Estes podem construir código em várias linguagens de programação, bem como efetuar a geração dos códigos de uma única vez ou em etapas. As entradas e saídas são definidas conforme a necessidade, sendo que o desenvolvedor especifica parâmetros de saída de forma manual. Portanto, é de extrema relevância que o programador saiba a priori o que se deseja obter como resultado.

Read the rest of this entry »

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

2

Posted on : 18-09-2009 | By : Luiz Carvalho | In : Dicas, Projetos

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

GEtna 0.6.0 (Betha) Liberado

1

Posted on : 26-11-2008 | By : Luiz Carvalho | In : Noticias, Tutoriais

Mesmo o gerador já estando disponível para uso a algum tempo eu queria finalizar algumas coisas antes de divulgar aqui no blog.

Para esse lançamento disponibilizamos alguns vídeos demonstrativos e um screencast dividido em 3 partes que exemplifica desde a instalação ate algumas funcionalidades presentes.

Screen Cast

Nota: os videos no Vimeo ficaram muito ruins, não sei se pela resolução ou pelo formato. na duvida baixe o arquivo. -.- (vou refazer os screencasts esse fim de semana)

Parte 1: instalação (VIMEO)
“Tive que remover esse link!” >Parte 1: instalação(Download)

Parte 2: Geração (VIMEO)
“Tive que remover esse link!”>Parte 2: Geração (Download)

Parte 3: Execução (VIMEO)
“Tive que remover esse link!” >Parte 3: Execução (Donwload)

Bonnus

“Tive que remover esse link!” target=”_blank”>Apresentação:

“Tive que remover esse link!” target=”_blank”>Utilização do GEtna no Windows com RadRails

“Tive que remover esse link!” target=”_blank”>Instalação do GEtna no Windows

“Tive que remover esse link!” target=”_blank”>Geração Utilizando Layout Default

“Tive que remover esse link!” target=”_blank”>Geração Utilizando Layout Depot

“Tive que remover esse link!” target=”_blank”>Geração Utilizando Layout Rails

“Tive que remover esse link!” target=”_blank”>Geração Utilizando Linha de Comando

Instalação:

Por ser um plugin nos padrões Rails e não possuindo qualquer dependência com outra ferramenta, a não ser o próprio Rails, sua instalação se torna bem trivial. O GEtna pode ser instalado, basicamente, de duas maneiras via GIT e manualmente. A maneira mais recomendada de se obter o gerador é via GIT bastando apenas se localizar dentro da pasta vendor/plugin/ dentro da aplicação Rails. Caso esteja no local certo e com GIT instalado na máquina basta utilizar o comando do Comando 1, ou utilizando o comando de instalação de Plugin do Rails descrito no Comando 2 da raiz da aplicação.

Comando 1
git clone git://github.com/LuizCarvalho/getna.git
Comando 2
Script/plugin install git://github.com/LuizCarvalho/getna.git

Esse comando, efetuado via console, pega a última versão do gerador no servidor do Github e o copia para a pasta local. Esse procedimento é o suficiente para que o gerador esteja totalmente funcional e pronto para ser utilizado.
A segunda maneira de instalar o GEtna é via download a partir do website do projeto no Github (http://github.com/LuizCarvalho/getna). Após o acesso ao site é necessário baixar o arquivo compactado (zip ou tar). A Figura 1 possui um fragmento da página onde se localiza o botão de download do projeto.

Instalação Via WEb

Instalação Manual

Após o arquivo baixado ele necessita ser descompactado e, logo após, renomeado para “getna”. Como no procedimento de instalação anterior o gerador necessita ser posicionado em no diretório referente aos plugins no projeto (vendor/plugin). Ao final de todo esse procedimento o gerador está pronto para ser utilizado.

Agradecimentos:
Silvio Fernandes e a Galera do Rails-BR

GEtna: fase de Teste

1

Posted on : 14-11-2008 | By : Luiz Carvalho | In : Uncategorized

Olá pessoal.

O Getna chega mais proximo de seu lançamento oficial. Eu com ajuda do Silvio Fernandes fizemos diversas modificações, apanhamos um pouco pro GIT, mas conseguimos doma-lo e o resultado foi muito bom.

Disponibilizei ele para testes lá no grupo rails-br e gentilmente alguns membros o testaram e reportaram alguns BUG’s. então vou agradescer ao Vinicius Luiz (Vinicius Luiz de Carvalho, meu  chará =D ), ao Junio Gonsalvez e ao Ricardo Yasuda por terem testado o GEtna e reportados alguns erros que acabei de concluir.

A versão 0.5.5 do GETna já esta no Github. quem quiser dar uma conferida:

http://www.github.com/LuizCarvalho/getna

GEtna: Gerador Funcinal

1

Posted on : 02-11-2008 | By : Luiz Carvalho | In : Noticias

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.

Git: Participando de um projeto OpenSource no GitHub – Comandos

3

Posted on : 18-10-2008 | By : Luiz Carvalho | In : Dicas, Tutoriais

Então, Coloquei esse titulo porque não achei outro que descrevesse o que estou postando, então vamos a esplicação.

Estou trabalhando no GEtna (Lê se Guetna[GET+na] e não Jetna :) ) em casa e no trabalho as vezes faço umas modificações e as sempre esqueço de dar push de minha casa ou no trabalho, quando tento dar push de algum dos dois dá a maior zica, encontrei a solução para o meu problema, mas ai estou com outro bem chato que me acompanha desde que começei com git, a terrivel e enjoada mensagem:

fatal: protocol error: expected sha/ref, got '
*********'

You can’t push to git://github.com/user/repo.git
Use git@github.com:user/repo.git

*********’

Como eu tenho ódio disso ai, então fui as pesquisas, demorei bastante até entrar em um gist que me levou até um post do blog do Nathaniel Felsen, e ai consegui resolver meus problemas. ok vamos lá.

Ao tentar dar um:

$ git push

Eu me deparei com o erro acima a solução encontrada é seguir os passos a seguir, usei o GEtna como exemplo:

O Caminho Certo (the Right Way)

Já vou adiantando os passos necessários para que você resolva seu problema são P6 e P8.

Esses comandos foram feitos no respositorio de local para um branch chamado working:

P1-$ git clone git://github.com/LuizCarvalho/getna.git
P2-$ cd getna
P3-$ git branch --track master origin/master
P4-$ git branch working master
P5-$ git checkout working
P6-$ git remote add working git@github.com:LuizCarvalho/getna.git
P7-$ git fetch working
P8-$ git push working working:refs/heads/working
P9-$ git config branch.working.remote working
P10-$ git config branch.working.merge refs/heads/working

Esplicando cada comando mais detalhadamente

Primeiro passo: Clonar o repositório

$ git clone git://github.com/LuizCarvalho/getna.git

Segundo passo: Entre dentro do diretório (Não tente atravessar o monitor, use o comando cd O.o)

$ cd getna

Passo três: esse eu não entendi, mas coloquei XD, como não testei não sei dizer pra que serve, mas se está no maneira certa de fazer eu não podia tirar  :) , na versão original ao invés de master está edge, como não tenho nenhum branch edge coloquei meu master mesmo.

$ git branch --track master origin/master

Passo quatro:  Criando a branch Working a partir do meu master, assim eu faço meus merges (*.*) depois com mais calma

$ git branch working master

Passo cinco: Mudando de Branch (da atual para working)

$ git checkout working

Passo Seis: Adicionando Referências remotas ao meu repositório

$ git remote add working git@github.com:LuizCarvalho/getna.git

Passo Sete: Buscando e sincronizando o repositório local com o remoto

$ git fetch working

Passo 7,5: Na verdade não existe esse passo lá, mas eu achei que deveria ter algo assim O.o pra ter um caminho completo, pois se você realizou modificações no projeto você necessita comitar antes de enviar então:

$ git commit -a -m "Descrição das Alterações"

Passo Oito: Dando Push no repositório. Opa, agora é a hora de dar errado, depois de tanto trabalho o truque estava no passo 6,7 e 8, essa seqüência é a seqüência que deve ser realizada para não se obter aquele erro indesejável. :) .

$ git push working working:refs/heads/working

Passo Nove e Dez: SImplificando o trabalho. Agora que nosso novo branch está no repositório remoto, iremos simplificar nosso trabalho, configurando nosso push para sempre “empurrar” o código de nosso gerador sempre para esse repositório.

$ git config branch.working.remote working$ git config branch.working.merge refs/heads/working

Com isso necessita-se apenas de um comando para enviar nossas alterações:

$ git push

Bem melhor não? para buscar no repositório basta um

$ git pull

Espero que isso ajude, pois pra mim isso foi muuito útil.

até a proxima.

Erro ao dar Push no repositório GIT

1

Posted on : 02-10-2008 | By : Luiz Carvalho | In : Uncategorized

Aqui vai um resumo de como eu resolvi esse problema :)

Eu sou novato tanto em GIT quanto em qualquer outro software de versionamento. nubei de mais XD

IMPORTANTE:

isso não é um tutorial, ou seja não siga os passos dele para obter um bom resultado, mas partes desse evento podem ser uma solução para seu problema. erros de português tem aqui aos montes… waaalleee!!

Bom quando fui dar o simples e corriqueiro git push no getna me veio o seguinte erro:

git push
To git@github.com:user/repo.git
! [rejected] branchname -> branchname (non-fast forward)
error: failed to push some refs to 'git@github.com:user/repo.git'

Após realizar uma pesquisa, logo veio a solução, como eu havia feito alterações no código em meu trabalho com uma versão mais antiga(a que estava no GIT) do que eu tinha em minha casa(esqueci de “pushar” o código) então necessitava dar um comando para pegar o código que estava no git

git pull

simples não?

Como retorno obtivemos

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git pull
remote: Counting objects: 28, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 17 (delta 7), reused 0 (delta 0)
Unpacking objects: 100% (17/17), done.
From git@github.com:LuizCarvalho/getna
   31ef4ca..3df45aa  master     -> origin/master
 * [new branch]      trunk      -> origin/trunk
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either.  Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull  ').
See git-pull(1) for details on the refspec.

If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:

    branch.master.remote =
    branch.master.merge =
    remote..url =
    remote..fetch =

See git-config(1) for details.

Bom… melhorou mais ainda não funcionou…

eu tinha uma certeza que devia fazer um merge… mas num sabia como fazer isso, dei um:

git checkout master

apareceu algumas coisas, ai achei que agora iria funcionar, é hora do merge:

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git merge trunk
trunk - not something we can merge

é acho que não funcionou… :( , no tutorial do Akita pareceu tão facil, nao entendi essa de não poder mesclar….

bom pensei um pouco eu tenho a seguinte situação

tenho:

getna V1(master) – github
getna V2(master) – em casa
getna V3(trunk) – github

hum, acho que eu baguncei de mais… acho que o que eu estou tentando é unir V2 e V3. mas e V1…

hum… esperem… isso pode funcionar vo fazer um teste.

git branch -a
* master
  origin/master
  origin/trunk

Opa. hum eu tentei dar um merge no master(V2)… que é o branch que eu estou no momento… e esse origin/master… acho que ele é o master que esta no github(V1)…vamos ver… o que é um peido pra que já esta cagado não é mesmo? :D

git merge origin/master

generators/getna/doc/rdoc-style.css: needs update
generators/getna/templates_1/controller.rb: needs update
generators/getna/templates_1/functional_test.rb: needs update
generators/getna/templates_1/helper.rb: needs update
generators/getna/templates_1/layout.html.erb: needs update
generators/getna/templates_1/style.css: needs update
(...)
Auto-merged generators/getna/USAGE
CONFLICT (content): Merge conflict in generators/getna/USAGE
Automatic merge failed; fix conflicts and then commit the result.

OHHHHH!!! que isso? acho q agora sim *.*

Mas esperem, que negocio é esse de merge failed… vix… acho que não foi… hum vo tentar de novo eu gostei desse merge XD

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git merge origin/master
You are in the middle of a conflicted merge.

Ein? que isso ai agora? porque dessa vez não funcionou? :( , vo ver esse arquivo USAGE ai

<<<<<<< HEAD:generators/getna/USAGE
== Getna

=======
script/generator getna xxx
>>>>>>> origin/master:generators/getna/USAGE

Que isso meu deus do céu??? O.o. De onde veio esse código doido?

Hum… esse é a tal das tags de conlfito…. vo resolver essa budega.. vo tirar a parte que eu n quero mais.

== Getna

script/generator getna xxx

Aew. eu quero assim  =)

e agora… to com medo de c*gar de novo o código…. to nem ai XD

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git merge origin/master
You are in the middle of a conflicted merge.

Ué. mas eu resolvi essa carniça ai agorinha… O.o

deixa eu ver aqui.

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git status
generators/getna/USAGE: needs merge
# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#
#    unmerged:   generators/getna/USAGE
#    modified:   generators/getna/USAGE

AAHHH, tô ligado… acho que vou ter q adicionar de novo pra funcionar.

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git add .

hum… acho que agora eu uso o tal do rebase… pra refazer todas as mudanças nos dois desde o incio. =) vamos ver o que dá.

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add

O.o, mas que p*rra… vo adicionar só  o arquivo agora.

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git add generators/getna/USAGE

Hum… deixa eu verificar o status de novo.

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    modified:   generators/getna/USAGE
#

Opa, animei de novo. agora parece tudo ok. vamos de novo:

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add

VSF!!! Q RAIOSSS!!!

vo desistir… ¬¬… sabe de uma coisa vo commitar assim mesmo, sei que não vai funcionar mas nasci pelado, careca e banguela… agora o que vier é lucro.

maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git commit -m "resolvendo conflitos"
Created commit 8284ddb: resolvendo conflitos
maxprox@maxprox-desktop:~/NetBeansProjects/GEtna/vendor/plugins/getna$ git push
Counting objects: 32, done.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (19/19), 4.49 KiB, done.
Total 19 (delta 7), reused 0 (delta 0)
To git@github.com:LuizCarvalho/getna.git
   3df45aa..8284ddb  master -> master

UAHuaHuHuHAuhAUAHUahUAhuHau

Yuhuuuuuuuu!!! YEAAHH!!!!

AMÉMMM!!!

XUPA QUE EH DE UVAAA!!

CREU CREU CREEUU!!

=) que louco! funcionou!

heheh

Viva AO GIT!

__________________-
__________________
_______________

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

0

Posted on : 26-09-2008 | By : Luiz Carvalho | In : Noticias

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

GEtna: FeedBack

6

Posted on : 08-09-2008 | By : Luiz Carvalho | In : Uncategorized

Esse Post foireservado para tiração de Duvidas, Erros ou Agradecimentos.

se você tem uma, está esperando o que? comenta! vou ter o maior prazer em responde-lo.

Não sabe do que eu estou falando?

então baixe e esperimente:

http://github.com/LuizCarvalho/getna

ou
git://github.com/LuizCarvalho/getna.git

Related Posts Plugin for WordPress, Blogger...