Ir para o conteúdo
ou

Software livre Brasil

Tela cheia
 Feed RSS

Gustavo Dutra - Um pouco de tudo, nada de pouco

27 de Maio de 2009, 0:00 , por Software Livre Brasil - | Ninguém está seguindo este artigo ainda.

SchemaSpy – Ferramenta para Modelagem Literária

13 de Julho de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

No post anterior Vimperator, comportamente do Vim no Firefox eu tinha mensionado que:

Parece radical, mas a produtividade aumenta, de certo modo. Não só na hora de programar e testar, sempre que edito arquivos no Vim, tento não usar o mouse. Claro que sempre vai ter alguma aplicação que vai te obrigar a usar o mouse, mas se pudermos evitar, melhor!

Eu continuo com esta idéia. Coisinha bonita é para cliente final. Desenvolvedores devem trabalhar com ferramentas que proporcionam o melhor uso do tempo possível, pois o bom profissional é aquele que esbanja do ócio, eis o fluxo:

  • Concluir as atividades rapidamente com eficácia e eficiência está diretamente ligado ao ócio, pois se ele tivesse feito algo mal feito, estaria corrigindo os bugs e não vendo vídeos no youtube.
  • Com tempo livre, o cérebro humano fica mais descansado e mais propício a receber insights/intuições para resolver problemas difíceis, que – e estes merecem – precisam de mais tempo e necessitam ser bem planejados.
  • Resolvendo problemas de forma criativa – talvez até inovadora -, faz com que se evite problemas futuros. Logo, se poupa tempo. Se poupando tempo, voltamos a cláusula anterior.

Parece utópico, mas eu acredito nisso. Eu acho que é possível. Basta saber onde conseguir ganhar tempo em atividades, automatizando com scripts, programas e etc, o tempo é consequência.

Todo Desenvolvedor Web já foi ou ainda é DBA. É inevitável aprender a utilizar banco de dados sem modelar os dados. Geralmente, para isso, é utilizado alguma ferramente gráfica que auxilia na visão do modelo. Não vou citar, mas existem várias para isso.

Porém, há um detalhe que muitos não se atinaram ainda. Me dei conta disso assistindo uma palestra no FISL10, na palestra do Leandro Dutra (se for parente, é primo de muitos graus :S) chamada O elefante ilustrado: modelagem literária e documentação automática em PostgreSQL e outros SGBDs livres.

SchemaSpy

O que é?

É uma ferramente que varre um banco de dados e gera um documentação em HTML nevegável. Ela gera gráfico de chaves estrangeiras utilizando o GraphViz (.dot), como se fosse uma dessas ferramentas que terminam com Designer.

Esses gráficos gerados, são visivelmente bonitos e dispostos. Ou seja, não é mais necessário sofrer arrastando caixinhas de modo com que fique bem arrumado. O programa tem um bom algoritmo para organizar. O que possibilita que o DBA, ou o desenvolvedor mesmo, use este tempo para repensar uma constraint, uma foreign key, etc.

O HTML gerado também tem abas que diferenciam os conteúdos: abas para relacionamentos, abas para tabelas auxiliares, abas para listagem de colunas/tabelas, etc. Mostra os campos, o tipo dos campos, os comentários, valores em comum e as CONSTRAINTS. Ou seja, uma solução completa para documentação de bancos de dados e modelos de ER. Vem junto o jQuery, que da uns efeitos e toggleia algumas colunas das tabelas de exibição.

Onde conseguir?

O site oficial deles é http://schemaspy.sourceforge.net. Pode ser baixado de lá. Apenas o driver jdbc para o banco de dados que for ser usado deve ser encontrado separadamente.

Quem usa ArchLinux, pode baixar os repositórios do AUR. Eu mesmo sou o mantenedor do pacote, então, qualquer dúvida ou problema, comente lá que tentarei responder/resolver o mais rápido possível. O link do repositório é http://aur.archlinux.org/packages.php?ID=28022

Como usar?

Para usar é muito simples. Depois de baixar o .jar, apenas execute

$ java -jar /path/to/schemaSpy.jar --help

Ou, se você instalou o do repositório do ArchLinux, basta usar:

$ schemaspy --help

Ele vai listar os parâmetros, é bem simples. Não vou me deter a isso. Qualquer dúvida comente no post abaixo.

Um exemplo de output pode ser encontrado na própria página do SchemaSpy: http://schemaspy.sourceforge.net/sample/

Sugestoẽs

Se existe algum defeito nele, com certeza é o template. O HTML gerado não é o mais bonito. Não obstante, me parece que o template não é customizável, para isso seria necessário hackear a classe que gera o template. Mas, quem sabe não é implementado algo nas próximas versões? Quem sabe VOCÊ não implementa?

Mas bem, falando em sugestões, aqui vai algumas:

  • Integrar com a documentação do phpDocumentor, javaDoc ou outro similar.
  • Versionar a documentação gerada para avaliação de crescimento da aplicação: poder comparar como era há certo tempo atrás e como está hoje.
  • Programar os SQL’s utilizando algum editor de texto, fazendo você ganhar desempenho e analisar mais facilmente para comentários, constraints, triggers, procedures e views, que são geralmente mais complexas de serem vistas em programas gráficos.

Mais alguma sugestão? Críticas? Deixem nos posts abaixo!



Vimperator, comportamento do Vim no Firefox

18 de Junho de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

De um tempo para cá tenho tentando chutar o mouse longe e usar só o teclado, na medida do possível. Culpa do Enygmata, que me mostrou o awesome, um gerenciador de janelas supimpa (que me pareceu 10x melhores que o ion-3), e o vimperator, que adiciona as funcionalidades do Vim no Firefox.O pior é que estou conseguindo!

Parece radical, mas a produtividade aumenta, de certo modo. Não só na hora de programar e testar, sempre que edito arquivos no Vim, tento não usar o mouse. Claro que sempre vai ter alguma aplicação que vai te obrigar a usar o mouse, mas se pudermos evitar, melhor!

Graças ao maldito do Enygmata, agora acham que sou retardado. Que estou surtando, querendo usar Vim para tudo! Que não tenho mais nada pra fazer, fico inventando moda. Mas enfim, prefiro terminar minhas coisas rapidinho e tomar meu café vendo os outros perdendo tempo clicando e passando mais trabalho porque não tem mais de 1 clipboard para copiar e colar códigos…

Vimperator

Foi minha primeira contribuição séria para a comunidade do ArchLinux. Está lá no AUR, `yaourt -S vimperator` para instalá-lo. Vou dar uma palhinha do que esse moço faz.

Comandos

Comandos úteis para utilizar durante a navegação:

  • :buffers
    Lista os buffers da aba
  • :bwipeout
    Remove o buffer atual da lista
  • :edit url
    Abre um novo buffer
  • : open [google|amazom|wikipedia|...] (termos da busca|url)
    Abre na aba e buffer atual uma url ou busca. Caso não seja especificado o primeiro parâmetro, ele usará a opção defsearch
  • :tab [help|prefs|addons|downloads]
    Executa o comando(help,prefs,etc) e abre numa nova aba
  • :tabclose
    Fecha a aba atual
  • :tabopen
    Abre a url numa nova aba. (Mesmos argumentos de :open)

OBS: A maioria dos comandos para gerenciamento de Abas e buffers do Vim funcionam no Vimperator também.

  • f
    Coloca 1 número em cada link e input da página. Ao digitar o número, ele simula o clique. Caso o número seja de um input, ele dá foco para ele. Obs: também é possível digitar um texto contido no link, pois se o texto tiver incidência em apenas 1 link, o mesmo será usado.
  • G
    Move para o fim da página
  • gg
    Move para o topo da página
  • gt / Ctrl+n / Ctrl+PageUp
    Move para a aba seguinte
  • gT / Ctrl+p / Ctrl+PageDown
    Move para a aba anterior
  • gH
    Vai para a página inicial definida
  • H / Ctrl+o
    Volta uma página no histórico
  • L / Ctrl+i
    Avança uma página no histórico
  • r
    Recarrega a página
  • R
    Recarrega a página limpando o cache
  • y
    Copia a URL atual
  • Y
    Copia o texto selecionado
  • zi
    Aumenta o zoom da página em 25%
  • zo
    Diminui o zoom da página em 25%
  • zz
    Usado sozinho reseta o zoom para 100%, caso usado 200zz, muda o zoom para 200%
  • j,k,h,l
    Movem o cursor para baixo, para cima, para a esquerda e para direita, respectivamente

As opções funcionam como as do Vim. :set option=valor

Opções

Para modificar alguma opção do vimperator, se faz do mesmo modo com que é feito no Vim:

:set option=value
  • complete
    Ao abrir uma URL (com :o pen), o Vimperator tenta autocompletar. A lista de caracteres que compõe o que será exibido é: s (buscas), f (arquivos locais), b (bookmarks), h (histórico), entre outros.
  • defsearch
    Especifica a engine de busca, por exemplo: “:set defsearch=google”
  • guioptions
    Opções da gui: m (menubar), T (toolbar), B (bookmark bar), etc. Para mostrar os menus, basta usar “set guioptions+=m”, -= para esconder.
  • hlsearch
    Colore a busca (idem Vim)
  • ignorecase
    Case-insensitive nas buscas do Firefox
  • incsearch
    Busca incremental (idem Vim)
  • showtabline
    Mostra (caso 1) ou esconde (caso 0) a barra de abas.
  • smartcase
    Sobreescreve o parâmetreo de ‘ignorecase’ caso tenha caracteres maiúsculos na busca.
  • wildmode
    Define como a completação da linha de comando vai funcionar (idem Vim)


Lançada versão beta do .vimrc generator

3 de Maio de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

Olá! Eu estava pensando em usar o feriado pra aprender pyGTK, com um projeto que estou na cabeça. Mas, sexta-feira me surgiu outra idéia, que tocou mais forte.

Muita gente me perguntava o que eu punha no meu .vimrc, quais configurações e o que elas faziam. Então, pra ajudar o pessoal e também manter uma documentação (porque eu esqueço rápido essas coisas), eu criei o .vimrc generator.

A idéia é que se possa criar um .vimrc através da interface web, facilitando a propagação (caso você queira mostrar pro amigo, contribuínte ou seja lá quem for) do seu .vimrc! Vocês podem ler um pouco mais aqui. Também tenho plano de fazer estatísticas, como por exemplo: quais opções mais usadas, quais colorschemes mais utilizados, etc. Portanto, sinta-se a vontade de testar a ferramenta e dar um feedback!

Sugestões de opções interessantes, de coisas faltando, reclamações, são todas bem-vindas! Pode ter certeza que, se implementada, manterei os créditos da sua idéia. Por enquanto só está disponível em inglês, mas logo traduzirei pro português. Quem sabe feriado que vem? hehehe

Espero que aproveitem! Gere seu próprio .vimrc

Até!



Dicas de como aumentar a produtividade usando autocmd no vim

11 de Abril de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

Quantas vezes você faz um arquivo que é exatamente igual à um outro arquivo por dia? Quantas vezes você abre um arquivo só para copiar um trecho de código que é utilizado em vários arquivos? Quantas vezes você se vê fazendo a mesma coisa que fez em outro lugar?

E aquela palavra que você sempre escreve errada? Aquela função que você sempre esquece o nome?

Conheça algumas dicas para aumentar a produtividade e diminuir o trabalho dessas coisas rotineiras.

Lista de Abreviaturas

Sabe aquelas palavras que a gente insiste em escrever errado? Principalmente quem trabalha com e-mails, códigos e comentários em outras línguas tem dificuldades com certas palavras. Por exemplo,

vc -> você
q -> que
pq -> porque
nao -> não

Agora a pergunta que não quer calar: Porque não usarmos algo para evitar esse tipo de coisa? Às vezes nem notamos os erros, mas eles estão lá. Mantenha uma lista de abreviaturas no Vim. Cuide dela, adicione novas abreviaturas assim que vierem à sua cabeça. A sintaxe é simples, basta adicionar no seu .vimrc:

"" abbr ERRADO CORRETO, por exemplo:
abbr pq porque
abbr vc você

O Vim ainda possibilita que você crie sintaxes diferentes para arquivos diferentes. Então, seus arquivos .txt podem ter abreviaturas diferentes das de .py. Ou seja, se o nome daquela função python é muito longa ou você insiste em escrevê-la errada, ela merece uma abreviatura, no formato descrito acima (abbr ERRADO CORRETO).

$ mkdir -p ~/.vim/abreviaturas/
$ vim ~/.vim/abreviaturas/txt.vim

Adicione ao txt.vim as abreviaturas utilizadas para arquivos texto. Mesmo que poucas, coloque algumas. Um pouco de disciplina fará com que sua produtividade aumente. Tenha certeza.

Ao seu .vimrc, basta acrescentar:

autocmd BufNewFile,BufRead * source $HOME/.vim/abreviaturas/para_qualquer_linguagem.vim
autocmd BufNewFile,BufRead *.txt source $HOME/.vim/abreviaturas/txt.vim
autocmd BufNewFile,BufRead *.py source $HOME/.vim/abreviaturas/python.vim

O autocmd funciona mais ou menos igual a uma trigger. É um sistema de eventos, basicamente. Ou seja, ao abrir um arquivo novo (BufNewFile) ou um arquivo já existente (BufRead), se o nome do arquivo casar com a expressão (no caso, *, *.txt ou *.py) irá executar o código a seguir.

Vou falar mais sobre o autocmd em outro post, tem muitoooo pano pra manga, hehehe.

Templates de Arquivos

Quando se fala em programação é meio que como na arte. Não só porque programar é uma arte, mas porque nada se cria, tudo se copia. Tudo bem que, hoje em dia, com técnicas de encapsulamento, oop, etc, fica mais difícil. Mas sempre há coisas em comum entre os arquivos. Vamos começar com algo simples.

Template básico para javascript, onde será utilizado jquery.

$(document).onready(function(){
// code here
});

Simples, mas não é um saco ter que escrever isso sempre que abre um arquivo novo? Tome isso como regra: Faça uma, porém apenas uma vez. Não seria mais fácil abrir o arquivo e tcha-ram! Lá está o código que, em 90% dos casos, você irá utilizar?

Esse foi pequeninho, mas imagine um arquivo html. A trabalheira que é copiar todo o caçalho. E se você segue um padrão, pode usar inclusive o css junto. Observe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt" lang="pt-br" dir="ltr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta http-equiv="Content-Style-Type" content="text/css" />
		<meta name="keywords" content="aqui,vai,as,keywords" />
		<link rel="stylesheet" href="/style.css" />
		<link rel="shortcut icon" href="/favicon.ico" />
        </head>
        <body>
        <div id="wrapper">
                <div id="head"></div>
                <div id="content"></div>
                <div id="footer"></div>
        </div>
</body></html>

E o css:

1
2
3
4
5
6
7
8
9
10
11
12
html * {
}
body {
}
#wrapper {
}
        #wrapper #head {
        }
        #wrapper #content {
        }
        #wrapper #footer {
        }

Imagine um designers, aqueles que fazem o psd e depois passam pra xhtml, tendo que copiar isso vezes e vezes para todos os arquivos que ele faz. Faça apenas uma vez e siga o padrão!

Usuários de django, ao criar um model, precisam escrever sempre os imports ? Se são utilizados sempre, porque não criar um template?

Agora você me pergunta, como carregar o template automagicamente no Vim ? Fácil! Utilizando nosso autocmd =). Do mesmo modo que fizemos com as abreviaturas, vamos criar os diretórios:

$ mkdir -p ~/.vim/templates/

Criei lá os arquivos com os templates que você acha útil.

autocmd BufNewFile *.html 0r ~/.vim/templates/html.tpl
autocmd BufNewFile style.css 0r ~/.vim/templates/cssstyle.tpl
autocmd BufNewFile jquery.*.js 0r ~/.vim/templates/jqueryjs.tpl

Agora, abra seu Vim e sinta a magia:

vim index.html style.css jquery.initscript.js

Executando comandos externos

g(un)zip

O manual do Vim tem um exemplo bem interessante, para abrir arquivos gzipados, editá-los, como se nada tivesse acontecido e salvá-lo no formato gzip de novo. Apesar de que aqui, não precisou acrescentar os códigos abaixo, ele já fez automático. Basta adicionar o .vimrc

augroup gzip
  autocmd!
  autocmd BufReadPre,FileReadPre	*.gz set bin
  autocmd BufReadPost,FileReadPost	*.gz '[,']!gunzip
  autocmd BufReadPost,FileReadPost	*.gz set nobin
  autocmd BufReadPost,FileReadPost	*.gz execute ":doautocmd BufReadPost " . expand("%:r")
  autocmd BufWritePost,FileWritePost	*.gz !mv <afile> </afile><afile>:r
  autocmd BufWritePost,FileWritePost	*.gz !gzip </afile><afile>:r
 
  autocmd FileAppendPre		*.gz !gunzip </afile><afile>
  autocmd FileAppendPre		*.gz !mv </afile><afile>:r </afile><afile>
  autocmd FileAppendPost		*.gz !mv </afile><afile> </afile><afile>:r
  autocmd FileAppendPost		*.gz !gzip </afile><afile>:r
augroup END
</afile>

Verificação por erro

Já deve ter acontecido com você: você salva o arquivo e quando vai testar, faltou um ponto e vírgula, ou escrever o nome de uma função errada, ou algo similar… um erro bobo, mas que não deixou seu código ser executado e exige reparo.

Para ajudar contra esse trabalho desnecessário (teste + correção + teste), que pode se repetir inúmeras vezes, você pode usar o autocmd para alertá-lo, utilizando ferramentas externas. Por exemplo:

autocmd BufWritePost *.pl !perl -c %
autocmd BufWritePost *.php !php -l %
autocmd BufWritePost *.java !javac -Xlint %

Use a criativdade

Utilize sua criatividade e seja mais produtivo na SUA rotina. Deixe as coisas serem automatizadas. Para mais eventos do autocmd, :help autocmd. Tem uma lista bem extensa. Leia a documentação e seja feliz =). Crítias, sugestões e CASES são bem vindos nos comentários =)



Como dar Commits SVN com Vim

5 de Abril de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

Em alguns projetos, ao se dar um commit, é necessário especificar quais arquivos foram adicionados ou modificados e ainda mencionar o porque. Algo do tipo:

functions.pl – Adicionada a função que faz aquilo e corrigida a função tal que tinha um erro de português.

É realmente um porre ver todos os arquivos que foram modificados e dizer as mudanças, mas é necessário. Aqui vai uma dica pra quem quer melhorar isso e, por que não, automatizar. Vou utilizar o exemplo com o svn, mas adaptem para o que vocês usam.

$ cd /raiz/do/repositorio
$ svn status | vim -
$ svn commit -F /tmp/commit

Aquela segunda linha, joga a saída do comando `svn status` em um buffer no Vim. Assim, podemos editar melhor. Caso o servidor seja externo e demore muito uma resposta, apenas aguarde. A saída do shell irá para buffer, apenas aguarde.

Com tudo pronto, podemos fazer algumas substituições:

:%s/^A\s\+/[ADICIONADO] /g
:%s/^D\s\+/[REMOVIDO] /g
:%s/^M\s\+/[MODIFICADO] /g

Cada letra da primeira coluna, indica o status do arquivo no projeto. Uma lista completa com as opções pode ser encontrada em http://svnbook.red-bean.com/en/1.4/svn.ref.svn.c.status.html

Agora você organiza seu log. Escreve porque foi adicionado o arquivo X, removido o arquivo Y e etc. Depois de pronto, basta salvá-lo e utilizá-lo como log do commit.

:sav /tmp/commit
$ svn commit -F /tmp/commit
$ rm /tmp/commit

Uma outra maneira de se fazer isso é usando o Vim como editor default do SVN.

vim ~/.bashrc

Acrescente as seguintes linhas:

export SVN_EDITOR=/usr/bin/vim

Agora, ao usar `svn commit`, o vim irá ser aberto para você especificar o motivo.

Acho que é isso! Comentem =)