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.

Nenhum comentário:

Postar um comentário