sábado, 24 de março de 2007

Dicas legais de programação usando vim: Vim-tips parte 1!

No meu trabalho, temos uma comunidade bastante grande que usa Vim e por isso acumulamos várias dicas úteis. Vou tentar escrever por aqui (dividindo em alguns capítulos) algumas features que usamos e achamos bastante produtivas e úteis.

Lembra daquelas IDEs de desenvolvimento cheias de features para debug que você já usou? Nenhuma fica atrás do Vim. O Vim possui algumas features não muito famosas porém que são extremamente úteis na hora de debugar ou seguir declarações de funções. Vou listar aqui algumas coisas interessantes que achamos.


Ctags, rastreando declarações de funções e identificadores.

Por vezes você estará em um ambiente de código fonte que você não conhecerá exatamente todas as funções ou variáveis. Um projeto que veio de outra pessoa ou até mesmo um computeiro de software livre contribuindo com a comunidade não tem obrigação de conhecer todo o sistema.

Instalando ctags em seu sistema Linux: Será fácil. Algo como um "./configure && make && sudo make install" não resolva. Ou então "apt-get install ctags" e até mesmo "emerge ctags" deve ser bastante útil dependendo da sua distro :-)

Direto ao ponto: Vá ao diretório raiz de seu projeto e digite:

$ ctags *.[ch] -R # no caso de ser um projeto desenvolvido em C

Você estará criando um arquivo de tags lendo palavras-chave percorrendo seus arquivos .c e .h recursivamente (-R). Isso irá criar um arquivo "tags".

Para usar ctags dentro do Vim, entre em modo de comando e coloque seu cursor sobre uma função ou uma variável e aperte:

Control+]

Pronto você pulará diretamente para a declaração da função! Amazing! :-P Para voltar a ver o arquivo que você estava editando, aperte:

Control+T

Ah! Mas você não quer deixar de ver o arquivo que você está editando enquanto navega pelas tags?

Control+W_Control+]

Isso splittará a janela em duas horizontalmente.


Identificando funções e variáveis sem instalar nada a mais no seu Vim.

Em algumas situações, esta feature é bem mais interessante e útil do que ctags. Mas apenas em algumas situações. Entre em modo de comando e posicione o cursor sobre uma função ou variável que deseja descobrir a declaração e aperte:

Control+W_

Você splittará a janela em duas horizontalmente e pulará para a declaração. Se for uma função, irá para o header (.h). A vantagem de usar Control+W_ é que você poderá ver declarações mesmo em funções da glibc: malloc, printf e afins.

Espero que sejam úteis as dicas. Aguardem que ainda tem mais!

sexta-feira, 16 de março de 2007

Consultando bases científicas no conforto de seu lar com OpenSSH

Fontes de pesquisa científicas como os Periódicos da Capes, Web of Science e IEEE são normalmente pagos (e muito bem pagos) pelas universidades para manter o acesso livre aos seus alunos. Entretanto esse acesso é restrito apenas para o range de IPs dos computadores de dentro da faculdade. Logo, se você mora longe, está com preguiça ou simplesmente não pode ir à faculdade para fazer suas pesquisas, você está é fod...

Já faz um tempo que venho pensando nisso. Levantar um proxy no servidor da faculdade seria uma boa, mas para isso tinha que ter permissões de root, blá blá blá, não ia rolar. Heis que hoje, ao contar minha idéia a um grande amigo meu, tivemos uma idéia bastante interessante e simples. E depois de alguns minutos googleando e fazendo alguns testes, we just made it!

Ok, chega de suspense e vamos direto ao assunto. Abra uma conexão com um servidor Linux da sua faculdade fazendo um bind na porta 9999:

$ ssh -D 9999 user@server

O que você fez foi apenas dizer ao cliente SSH que fique escutando por conexões na máquina local na porta 9999. Quando alguma aplicação estabelece essa conexão na máquina local e nessa porta, o cliente SSH encaminha os pacotes aravés da conexão segura até o servidor onde você fez login, e de lá ele sai. Atualmente o bind (-D) suporta os protocolos SOCKS4 e SOCKS5, se portanto irá atuar como um servidor SOCKS.

Depois configure no seu navegador predileto o servidor Socks v5 para localhost e a porta para 9999. Voalá! Você pode navegar pelos melhores acervos de pesquisa (pagos) no conforto de seu lar.