TPW - Colocando dicas em prática 5

Posted by Roger Leite on agosto 18, 2008

Depois de ler The Pragmatic Programmer é natural ficar empolgado, bom, uma prova disso foi meu próprio post sobre o assunto. Depois de ter “digerido” o livro, lancei as dicas para o desenvolvedor, acabei inventando um termo legal The Pragmatic Waterfall, que resolvi transformá-lo numa série.

A primeira dica do “dicas para o desenvolvedor”, foi:
- Gerador de código descartável.

Pois bem, hoje, vou mostrar um exemplo de “código descartável” que utilizei e deu certo ! :D

Problema: No projeto que estou existem algumas queries em arquivos XML do hibernate, preciso convertê-las para Spring. Pra cada query do hibernate, precisei gerar dois arquivos de XML do Spring e mais uma classe Java que herda de SqlUpdate … blá blá blá. Bom, os detalhes não importam muito, o que importa é que vamos ler o XML do hibernate e gerar o que for necessário, tudo isso com Ruby!

Antes de qualquer coisa, já aviso que ainda não domino totalmente Ruby, e o script que fiz é do tipo código “descartável”, então não tive o menor cuidado em deixá-lo bonito, apenas funcional. Acho que a melhor maneira de aprender uma nova linguagem é escrevendo código com ela, não somente lendo sobre.

Exemplo super simplificado do XML do Hibernate:
script generator-bean em Ruby:

É isto ! O script é simples e direto, deixei a saida pro console mesmo e para jogar em arquivo é muito simples:

$ ruby generator-bean.rb > spring-exemplo.xml

O script que coloquei é uma versão bem reduzida, já que a idéia do post é mostrar que é possível transformar tarefas chatas e trabalhosas em scripts semi-automáticos ! Ah, lembrando que com ele consegui terminar a minha tarefa em 2 dias, sendo que a previsão era quase uma semana de trabalho !

Precisa de mais informações de como ler XML com Ruby !?

Segue as referências.
Tirei deste post, muito legal por sinal.
* API do REXML: http://www.ruby-doc.org/stdlib/libdoc/rexml/rdoc/index.html
* Sobre o Electric XML: http://www.xml.com/pub/r/1098
* Tutorial um pouco mais complexo sobre XML com Ruby: http://www.xml.com/pub/a/2005/11/09/rexml-processing-xml-in-ruby.html

OBS: Estou usando o gist.github.com para colocar o xml e script de exemplo, provavelmente não vai aparecer no leitor de feed.

Trackbacks

Use this link to trackback from your own site.

Comments

Leave a response

  1. Everton J. Carpes seg, 18 ago 2008 22:51:01 BRT

    Eh por este tipo de coisa que eu me sinto tao bem de trabalhar com Ruby… Eu vivo fazendo este tipo de coisa e cada vez mais sinto tesao em explorar cada minuscula possibilidade de usar a programacao a meu favor… Chega a ser engracado as vezes, quando me pego fazendo coisas como gerar propostas para clientes atraves de scripts que crio em minutos!

    Ruby torna tarefas simples tao simples que tu consegue ter a vontade de programar, cada vez mais!! Ruby me mostrou pq eu comecei a programar, pq reflete MUITO a maneira que penso. Simplesmente as coisas saem, nao ha grandes dificuldades, mesmo quando a modelagem eh de coisas menos triviais do que dar parsing em um XML.

    Ruby faz programadores se sentirem como tal pq ela serve para resolveres teus problemas, nao para ficares resolvendo os problemas da linguagem (que existem, claro, - basta lembrar do UTF - mas sao tao triviais se comparado ao todo, que mal sao sentidos).

    E uma coisa incrivel sobre Ruby eh que apesar de extremamente simples ela nao eh de forma alguma simploria! Exatamente pelo contrario, eh altemente expressiva, elegante e flexivel.

    E apesar de toda esta pregacao sobre o Ruby, uma das coisas que mais aprendi com o uso de Ruby foi a respeitar outras linguagens e aprender a escolher o que ha de melhor… Ruby nao eh nada mais do que isso, um grande apanhado do que ha de melhor por aih! Conceito velho esse inclusive: nao reinvente a roda… e como meus pais me ensinaram:

    “aprenda o que ha de bom e descarte o que ha de ruim!”

    Hj me considero um programador mais feliz e tbm me considero mais programador e nao posso negar que a linguagem ajudou isso… antes eu muitas vezes pensava, poxa, isso poderia ser feito assim, mas me limitava, pq as linguagens que eu conhecia nao tornariam a tarefa tao simples quanto o que eu acabara de pensar… nao poso ser ingrato, claro q shell script e python me ajudaram muito e que muitas vezes eu abusei dos mesmos ( e ainda o faco), mas soh consegui realmente obter o que esperava quando me deparei com Ruby.

    Essa coisa de ser descartavel, eh +||- como digitar comandos no shell… vc usa a linguagem a seu favor e resolve problemas… se a coisa se repetir demais, daih eh bom pensar em solucoes mais reaproveitaveis, senao eh soh deletar, afinal vai ser TAO simples de recria-los quanto de lembrar onde foi que tu guardou eles (pra mim, lembrar de coisas eh uma tarefa terrivel… eu pensei em solucionar isso criando um trackerzinho, mas o pessoal da programacao neural dise que nao dava pra usar Ruby em mim mesmo :( ).

  2. Roger Leite ter, 19 ago 2008 09:02:52 BRT

    Everton valeu pelo comentário, isso motivo muito, valeu mesmo !

    Sobre o Ruby, realmente é contagiante ! Estava conversando com o Miguel sobre isso estes dias, eu falava o quanto era nerd chamar uma linguagem de “sexy!” … hehehe … bom, realmente é, mas só quem programa nela que tem esta sensação mesmo.

    Concordo com tudo que disse!
    Qualquer sugestão, critica e até idéias malucas ou não, me avisa, que a gente bloga !

    Valeu de novo!

  3. Everton J. Carpes ter, 19 ago 2008 11:43:32 BRT

    Hehe, pode ser bem nerd sim, mas eh real mesmo!!!

    Vai ser um prazer mandar ideias sim, desde que eu lembre de fazer isso, hehe

  4. Xerife do Caos sáb, 23 ago 2008 10:42:05 BRT

    Roger, este tipo de mentalidade é o que acredito que todos deveriam ter, ou seja, criar atalhos para os caminhos que fazemos todos os dias. Por que andar km se podemos chegar ao mesmo ponto andando metros, ou mesmo cm?

    Se você puder colocar o meu blog nos seus links, ficaria muito grato:
    http://oscarasdeti.blogspot.com/
    O teu blog já está linkado no meu…

    Lá vou apresentar idéias como esta, mas também algo que considero muito melhor que isso, que são componentes que reconhecem o que deve ser feito, sem necessidade de programação, como por exemplo Tela de Cadastramento que identifica os campos de uma tabela e monta a tela em tempo de execução.

  5. Roger Leite sex, 29 ago 2008 08:33:31 BRT

    Olá Xerife, valeu pelo comentário e pelo link ! Fiz questão de adicionar seu blog as links daqui, pois o considero muito “real life” ! :D

    Por algum motivo maluco, seu comentário caiu como spam no Wordpress, por isso que só vi hoje.

    Sobre a idéia “Tela de Cadastramento que identifica os campos de uma tabela e monta a tela em tempo de execução”, cara, o que eu posso dizer ? Eu tenho medo quando vejo coisas muito “automágicas” assim, sei lá, me lembra muito Visual Studio, talvez por isso que não tenho um pressentimento bom.

    Quanto a este tipo de solução, acho que seria legal, ao invés de identificar campos em tabela e monta tela em execução, por que não pensar em algo como o scaffold do Rails ? (http://www.htmlstaff.org/ver.php?id=4802)

    Este tipo de solução que você citou, fica muito amarrada a banco de dados … acredito que chegou o momento de “mirar” para classes de dominio da aplicação, e lembrar do banco só quando tiver salvar/recuperar algo.

    Valeu pelo comentário, espero não ter acabado com seus sonhos … hehehe

    []s

Comments