30 de jul. de 2012

Ferramentas Unix para desenvolvedores

As ferramentas que vem com os Sistemas operacionais Unix-like, já permitem que você execute várias ações que ajudam no dia-a-dia dos desenvolvedores. Em outros sistemas, algumas dessas ações só são possíveis de serem executadas de maneira satisfatória, com o uso de uma IDE.

Neste post pretendo falar de algumas dessas ferramentas.

Grep


O Grep é uma ferramenta que busca por padrões textuais (expressões regulares) em arquivos. O Grep, em seu comportamento mais comum, busca o padrão de texto informado em um arquivo ou da entrada padrão caso nenhum arquivo seja informado, e mostra as linhas onde o texto foi encontrado.

Neste exemplo, vou pesquisar pela palavra 'class' no início da linha:
$ grep '^class' ./django/db/models/query.py
class QuerySet(object):
class ValuesQuerySet(QuerySet):
class ValuesListQuerySet(ValuesQuerySet):
class DateQuerySet(QuerySet):
class EmptyQuerySet(QuerySet):
class RawQuerySet(object):
E este padrão foi encontrado em 6 linhas.

E neste outro exemplo, vou procurar por 'gvim', que retorna da saída do ps:
$ ps u | grep 'gvim'
myuser   15007 1.1 0.6 611320 26868 pts/1  Sl 11:54 0:00 /usr/bin/gvim -f
myuser   15049 0.0 0.0 13576  932   pts/2  S+ 11:54 0:00 grep --color=auto gvim
O Grep é uma ferramenta com muitas opções para customizar o seu comportamento, para ve-lás por completo, leia a man page do Grep.

Ack


O Ack, é, como os próprios criadores definem, uma ferramenta como o Grep, otimizada para programadores.
Em determinados momentos você precisa saber em qual arquivos está uma classe, um método, ou qualquer padrão textual, mas não em qual arquivo procurar. Nesses casos o uso do grep pode ficar complicado.

Para habilitar esse comportamento no Grep você deve usar a opção -r que faz uma busca recursiva nos diretórios, passando o diretório onde a busca deve ser iniciada(para iniciar sempre do diretório corrente, use o caractere '.'). E para ajudar a achar a linha correta usa a opção -n.

Exemplo:
$ grep -nr 'class QuerySet(object):' .
./django/db/models/query.py:30:class QuerySet(object):
Neste caso o arquivo que contém o padrão 'class QuerySet(object):' é ./django/db/models/query.py na linha 30.

Mas esse é o comportamento padrão do Ack, cuja saída já é pensado para facilitar a busca por padrões textuais em vários arquivos:
$ ack 'class QuerySet\(object\):'
django/db/models/query.py
30:class QuerySet(object):
No Debian e derivados já existe um pacote chamado Ack para tradução para para Kanji, e o pacote do Ack se chama Ack-Grep. Para facilitar o uso do Ack você pode criar uma alias:
$ alias ack='ack-grep'

Siege


Para desenvolvedores web o Siege pode ser uma ótima ferramenta de benchmarks de sites e aplicações web em geral.
$ siege www.google.com
...
HTTP/1.1 302   0.27 secs:     222 bytes ==> /
HTTP/1.1 302   0.22 secs:     222 bytes ==> /
HTTP/1.1 200   0.30 secs:   14780 bytes ==> /

Lifting the server siege...      done.
Transactions:                     42 hits
Availability:                 100.00 %
Elapsed time:                   4.32 secs
Data transferred:               0.30 MB
Response time:                  0.67 secs
Transaction rate:               9.72 trans/sec
Throughput:                     0.07 MB/sec
Concurrency:                    6.51
Successful transactions:          52
Failed transactions:               0
Longest transaction:            3.16
Shortest transaction:           0.21
Usando o Siege você pode confrontar resultados de performance entre dois servidores web, estudar resultados antes e depois de minificar seus arquivos HTML, por exemplo.
Estas são apenas algumas ferramentas que costumo usar, no cotidiano e que facilitam bastante minha vida.

4 de jul. de 2012

Dot Files

Usuários de Linux e Mac mais experientes sempre customizam bastante o seu ambiente. Criam alias para comandos, modificam arquivos de inicialização, configuram seus aplicativos, etc.. Tudo em prol da agilidade no dia-a-dia. Manter essas customizações atualizadas, é uma tarefa complicada. E essa complicação se multiplica quando você tem que trabalhar em várias máquinas.

A iniciativa do Github de divulgar alguns projetos dotfiles, pode ser uma inspiração para versionar todos os seus dotfiles. Aí vem a frase clichê típica desses momentos: "Como eu não pensei nisso antes?"

O nome dotfiles ("dot" significa ponto e "files" arquivos,  em inglês), vem dos arquivos ocultos dos sistemas Unix-like, que iniciam com um ponto (.bashrc, por exemplo). Pois os arquivos de configuração dos usuário, normalmente, são arquivos ocultos.

Eu, que sempre senti na pele as dificuldades de manter meus arquivos de customização, adotei a ideia rápidamente.

Neste momento o meu projeto está bem cru, mas dá pra ter uma ideia de como isso será útil no meu, e no cotidiano, de quem fizer o mesmo.

1 de jul. de 2012

Shell Script

Além de ser de extrema importância no ecossistemas Unix-like, Shell Script é muito prático para automatizar tarefas e uma excelente ferramenta para SysAdmins e programadores em geral.

Nessa apresentação mostro o básico sobre o Shell Script, mais específicamente falando de Bash.