Arquivos da Tag: programação

Comandos Python em uma linha

Comandos Python em uma linhaJá se vão mais de 15 anos desde que a última edição da saudosa revista Micro Sistemas foi publicada. Naquela época pré-internet, os curiosos que tentavam aprender como obrigar o computador a fazer exatamente o que eles queriam – vulgo programar – não tinham outra alternativa a não ser garimpar livros e revistas sobre o assunto. Uma das minhas seções preferidas da Micro Sistemas era a dos jogos one-liner em BASIC e suas variantes. Meu primeiro contato com programação foi justamente a tentativa de copiar aquele emaranhado mágico e incompreensível de letras e números que vinha publicado na revista e tentar fazer aquilo funcionar.

Hoje a informação é muito mais acessível e qualquer um pode aprender praticamente qualquer assunto, sobre qualquer ramo do conhecimento humano, desde que tenha disciplina para se dedicar o suficiente. Uma dentre as milhões de coisas bastante úteis de se aprender é o uso das opções de linha de comando do interpretador Python (finalmente cheguei onde queria!). Com elas é possível realizar vários tipos de tarefas em apenas 1 (uma) linha, direto do shell, sem sequer precisar editar um arquivo de código-fonte.

A opção -c <comando>

Executa o código Python passado como argumento em comando, que pode ser uma ou mais declarações separados por indicadores de nova linha, no caso o ponto-e-vírgula (;). Vale lembrar que, assim como no código Python normal, espaços em branco no começo de cada linha são significativos. Portanto, cuidado.

A opção -m <nome-do-módulo>

Procura no sys.path pelo nome-do-módulo e executa seu conteúdo como o módulo principal (__main__). Como o argumento é o nome de um módulo, você não deve passar a extensão (.py). O nome-do-módulo deveria ser um nome de módulo válido para o Python, mas pode ser que a implementação não force esse comportamento (ex.: pode permitir que você use um nome que contenha hífen).

Exemplos de uso

Com essas duas opções e um pouco de criatividade, é possível fazer coisas como:

Imprimir o caminho de busca por módulos Python formatado

Usando os módulos sys e pprint:

$ python -c 'import sys, pprint; pprint.pprint(sys.path)'

Iniciar um servidor HTTP

Este exemplo cria um servidor HTTP que serve o conteúdo do diretório corrente na porta 8081 usando o módulo SimpleHTTPServer :

$ python -m SimpleHTTPServer 8081

Obter lista dos releases disponíveis de um módulo do PyPI

Usando o módulo xmlrpclib:

$ python -c 'import xmlrpclib; print xmlrpclib.Server("http://pypi.python.org/pypi").package_releases("Django")'
['1.5', '1.4.5', '1.4.4', '1.4.3', '1.3.7', '1.3.6', '1.3.5', '1.2.7', '1.1.4', '1.0.4']

Medir o tempo de execução de um trecho de código

Usando o módulo timeit para descobrir qual implementação é mais rápida:

$ python -m timeit '"-".join(str(n) for n in range(100))'
10000 loops, best of 3: 35.3 usec per loop
$ python -m timeit '"-".join([str(n) for n in range(100)])'
10000 loops, best of 3: 30.2 usec per loop

Conhece alguma outra aplicação útil das opções de linha de comando do Python? Compartilhe nos comentários!

Referências

Sobre prática e persistência

Traduzo abaixo um trecho da introdução do livro Learn Python The Hard Way, de Zed Shaw, que me chamou a atenção:

Enquanto você está estudando programação, eu estou estudando guitarra. Pratico todos os dias por pelo menos 2 horas. Toco escalas, acordes e arpejos durante pelo menos uma hora e então passo a estudar teoria musical, percepção, peças e qualquer outra coisa que puder. Alguns dias estudo música e guitarra durante 8 horas  porque sinto vontade e é divertido. Para mim, a prática repetitiva é natural e é simplesmente o jeito de se aprender algo. Sei que, para ser bom em qualquer coisa, preciso praticar todo dia, mesmo se eu estiver péssimo (o que ocorre com frequência) ou for difícil. Continue tentando e, eventualmente, vai ficar mais fácil e divertido.

Ao estudar este livro, e continuar com a programação, lembre-se de que tudo que vale a pena fazer é difícil no início. Talvez você seja o tipo de pessoa que tem medo de fracassar, então você desiste ao primeiro sinal de dificuldade. Talvez você nunca aprendeu a auto-disciplina então você não pode fazer nada que seja “chato”. Talvez lhe foi dito que você é “talentoso” então você nunca tenta nada que possa fazer você parecer burro e não um prodígio. Talvez você seja competitivo e queira injustamente se comparar a alguém como eu, que vem programando há mais de 20 anos.

Qualquer que seja sua razão de querer desistir, continue. Force a si mesmo. Se você topar com uma seção Extra Credit do livro que não consegue fazer, ou uma lição que você simplesmente não entende, então ignore-a e volte a ela mais tarde. Apenas continue indo, porque em programação há essa coisa muito estranha que acontece às vezes.

No começo, você não vai entender nada. Vai ser estranho, assim como com o aprendizado de qualquer língua humana. Você vai lutar com as palavras, e não saber quais símbolos são o quê, e tudo vai ser muito confuso. Então, um dia – BANG! – seu cérebro vai estalar e de repente você vai “pegar”. Se continuar a fazer os exercícios e continuar tentando entendê-los, você vai conseguir. Você pode não ser um mestre da programação, mas pelo menos vai entender como ela funciona.

Se você desistir, nunca vai chegar a este ponto. Você vai atingir a primeira coisa confusa (que, no começo, é qualquer uma) e depois parar. Se você continuar tentando, continuar digitando, tentando entendê-la e ler sobre ela, você acabará entendendo.

Mas, se você passar por todo este livro, e continuar sem entender como programar, pelo menos você se deu uma chance. Você pode dizer que deu o seu melhor e mais um pouco e não funcionou, mas pelo menos você tentou. Você pode se orgulhar disso.

No livro, o autor fala sobre programação e música, mas o mesmo vale não só para qualquer outra atividade que nos dispusermos a tentar, mas também para quando queremos cultivar novos hábitos. Fazer exercícios físicos, melhorar a alimentação, acordar mais cedo, nada disso vem sem muita repetição e persistência, por mais que apareçam pessoas para dizer o contrário. Muitas vezes a intenção é vender alguma fórmula mágica que dificilmente dá resultado.

Sucesso antes de trabalho, só no dicionário.

DreamPie: mais um shell com esteróides para Python

O interpretador interativo do Python é considerado por muitos desenvolvedores como um dos recursos mais interessantes da linguagem. De fato, podemos dizer que é ele quem possibilita alta produtividade ao escrever software em Python apenas com um editor de textos simples, sem depender de IDEs pesadas e complexas.

O problema é que a interface padrão (shell) do interpretador às vezes é um pouco limitada quando precisamos experimentar trechos de código ligeiramente mais longos ou intrincados. Editar uma linha submetida ao interpretador por engano pode ser um processo um tanto quanto doloroso. Para resolver esse problema, existem algumas versões alternativas do shell que agregam muito em funcionalidades e usabilidade, tais como o ipython e o bpython. Dessas duas, a que mais me impressionou foi o bpython, mas logo nas primeiras tentativas percebi que o aplicativo é um tanto quanto instável, apresentando muitos problemas ao exibir na tela o código digitado, principalmente ao tentar recuperar alguma linha do histórico. Esses bugs me fizeram deixar o bpython um pouco de lado até que aparecesse algo mais robusto.

Hoje a espera parece ter terminado. O site UbuntuGeek publicou um post divulgando o DreamPie, que promete mais estabilidade e facilidade de uso. Instalei a ferramenta e, após alguns minutos de brincadeira, posso confirmar que ela promete o que cumpre. Criada por um dos colaboradores do IDLE, ela apresenta interface limpa, fácil de configurar e de editar código do histórico de comandos. Alguns dos principais recursos do DreamPie são:

  • Submissão de código por blocos, ao invés de por linhas
  • Auto-complemento de código e de nomes de arquivos
  • Auto-complemento de parênteses
  • Integração com o matplotlib
  • Histórico dos resultados da execução dos trechos de código (output)
  • Saídas muito longas são “dobradas” (results folding), para não atrapalhar a visualização do código
  • Suporte a Python 2.5, 2.6, 2.7, Jython 2.5, IronPython 2.6 e Python 3.1
  • É software livre, licenciado pela GPL 3

dreampie

Referências

Coding Dojo Sergipe

Depois de um longo período afastado do blog — devido a algumas mudanças “tanto no pessoal, como no profissional”, como diria o filósofo moderno Fausto Silva — volto para ajudar a divulgar a ótima iniciativa dos desenvolvedores sergipanos em criar o Dojo Sergipe. Tive a oportunidade de participar de dois dos quatro dojos realizados até agora e a impressão é que o movimento está no caminho certo.

É sempre bom ter a chance de se reunir com outras pessoas motivadas e interessadas em programação, independente da linguagem. Desde que tomei conhecimento da ideia de coding dojo, percebi que se tratava de uma abordagem genial para o aprendizado de programação, uma vez que alia a prática deliberada à diversão. Isso sem falar na oportunidade de conhecer pessoas novas e trocar experiências.

Recomendo muito a todos os desenvolvedores de Aracaju e região que dêem uma passada lá na lista de discussão, se informem sobre as próximas reuniões e compareçam!

Verificando a versão do Django

Quando estamos usando um computador desconhecido ou simplesmente não conseguimos lembrar qual a versão do Django que está instalada, é sempre útil descobrir do jeito mais rápido possível. Para resolver o problema com uma única linha de comando no shell, temos:

$ python -c "import django; print django.get_version()"

Para aprender mais: