Arquivo da tag: Python

Links da semana – 16 a 22 de março

  1. Hovercraft — Biblioteca Python para gerar apresentações de slides em HTML e impress.js a partir de fontes em reStructured Text.
  2. Python.org Redesign Preview — Uma prévia de como está ficando o novo site oficial do Python.
  3. Future of Firefox DevTools — A equipe responsável pelas ferramentas de desenvolvedor do Firefox pediu sugestões sobre o que os desenvolvedores gostariam de ter e está atendendo os pedidos. Vem coisa interessante por aí (alguém falou em interação entre editores de texto e o Firefox? Em Python?).
  4. The true power of regular expressions — Boa leitura para quem quer compreender melhor como funciona a “mágica” das expressões regulares.
  5. Donald Knuth Interview 2006 — Praticamente um livro – 110 páginas, caso fosse impresso – mas vale a pena dar uma olhada em alguns trechos para entender como funciona uma das grandes mentes da história da Ciência da Computação.
  6. Sonda Voyager sai do Sistema Solar — Se já saiu mesmo ou ainda vai sair, não importa. O importante é que jogamos nosso brinquedinho longe pra caramba do berço.
  7. Ecad é condenado por formação de cartel — Já é um avanço…Links da semana - 16 a 22 de março
  8. This is a blog post about dinosaurs, Tesla, and a hotel in Colorado — Sou fã de Matthew Inman (The Oatmeal), talvez um dos melhores contadores de histórias na internet. Esse cartum, na verdade, é um prêmio que ele ofereceu para quem fizesse doação superior a 33 mil dólares para o Museu Tesla.
  9. Livro: Cinema Pirata — Terminei de ler essa semana. É uma história de ficção escrita por Cory Doctorow (BoingBoing), mas que na verdade acaba virando uma espécie de alerta sobre o quão absurdo poder ser o futuro próximo, no caso de legislações ditas defensoras dos direitos autorais serem aprovadas e postas em prática. Não vou dar spoiler, mas garanto que em vários momentos você vai pensar “Ei, isso já aconteceu/está acontecendo!”.

Pycon 2013

  1. Pycon Keynote: Python is Awesome by Raymond Hettinger — Ótima explicação das características que tornam Python… awesome :)
  2. Talks by PyCon 2013 — Slides das palestras no SpeakerDeck
  3. PyCon 2013 Slides — Slides das palestras que não puderam ser convertidos para PDF e colocados no SpeakerDeck
  4. Coverage of PyCon US 2013 — Vídeos das palestras da PyCon 2013

Python Nordeste 2013

E aí? Já fez sua inscrição na Python Nordeste 2013? Até Guido van Rossum, o BDFL do Python, tá dando moral pro evento! Primeiro lote de ingressos está saindo pelo preço promocional de apenas R$ 50 até o dia 30/03/2013.

Links da semana – 9 a 15 de março

  1. Postgres: The Bits You Haven’t Found — Apresentação com dicas de recursos extremamente úteis para quem precisa trabalhar com banco de dados PostgreSQL.
  2. Django Projects — Django Best Practices — Reencontrei esse post essa semana. É sempre bom tê-lo por perto para relembrar as boas práticas na criação e manutenção de projetos Django.
  3. Links da semana - 9 a 15 de marçoComo perder peso (no browser) — Guia de desempenho no front-end. Muito material para ajudar descobrir porque seu site está lento e como resolver os principais problemas de performance.
  4. The Netflix Tech Blog: Python at Netflix — Mais um dos vários casos de sucesso de Python. O pessoal da Netflix explica com usa ferramentas baseadas na plataforma Python para manter um dos sites que consome mais largura de banda na internet.
  5. Editor Markdown – lab.lepture.com/editor — Editor markdown online. Simples, limpo e quebra um galho para quem não está habituado com a sintaxe.
  6. FindKeyConflicts — Plugin para Sublime Text que identifica conflitos de teclas de atalho entre os demais plugins instalados. Indispensável para os pluginmaníacos, porque quanto mais plugins instalados, maior a chance das teclas de atalho utilizadas por eles coincidirem.
  7. Global Firepower Military Ranks – 2013 — Curiosidade rápida sobre o poderio militar dos diversos países. Não li os critérios com calma, mas segundo esse ranking a Coreia do Norte não estaria com essa bola toda…
  8. Natural Language Processing with Python — Livro online gratuito sobre Processamento de Linguagem Natural usando Python.
  9. Coding Horror: A Visual Explanation of SQL Joins — Quem nunca se atrapalhou escrevendo uma query SQL que atire a primeira pedra :)
  10. I’ve Been Using Evernote All Wrong. Here’s Why It’s Actually Amazing — Esse artigo me chamou a atenção porque me identifiquei bastante com a parte de “nunca entendi o Evernote”.

Bonus Update:

Python Nordeste 2013 — Nos dias 24 e 25 de maio, em Fortaleza-CE, acontece a primeira edição da Python Nordeste, o grande encontro dos pythonistas na região Nordeste do Brasil. Dê uma olhada nos keynotes confirmados e diga se não vale a pena sair de qualquer lugar do país pra ver essas feras nesse evento arretado? As inscrições estão abertas! Corra lá!

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

Contando ocorrências de valores em Python

python-doc-iconUma operação bastante comum em várias aplicações é a contagem da frequência da ocorrência de valores em uma determinada lista. Para facilitar nossa vida, o Python traz em sua biblioteca padrão a classe Counter, que é parte do módulo collections.

O uso de Counter é bastante simples: para instanciar a classe, passamos uma sequência qualquer como argumento para seu construtor. Vamos supor que queremos saber quantas vezes cada caractere aparece na frase “o rato roeu a roupa do rei de roma”. Como uma string é uma sequência, podemos fazer:

>>> from collections import Counter
>>> c = Counter('o rato roeu a roupa do rei de roma')
>>> c
Counter({' ': 8, 'o': 6, 'r': 5, 'a': 4, 'e': 3, 'd': 2, 'u': 2, 'i': 1, 'm': 1, 'p': 1, 't': 1})

Como podemos ver, o caractere mais frequente é ‘ ‘ (espaço), com 8 ocorrências, seguido por ‘o’ com 6, depois por ‘r’ com 5 e assim por diante.

Counter é uma subclasse de dict, portanto podemos acessar seus elementos por meio de índices, do mesmo jeito que fazemos com dicionários. Isso é útil quando queremos saber qual a contagem específica de um determinado elemento. Por exemplo, para saber a frequência apenas da letra ‘r’, fazemos:

>>> c['r']
5

Entre outros métodos, a classe Counter oferece o most_common([n]) que, como seu nome descreve, retorna as n ocorrências mais frequentes da sequência. Então para saber, por exemplo, quais foram os dois times com mais títulos da NBA nos últimos dez anos, bastaria fazer:

>>> nba = ['San Antonio Spurs', 'Detroit Pistons', 'San Antonio Spurs', 'Miami Heat', 'San Antonio Spurs', 'Boston Celtics', 'Los Angeles Lakers', 'Los Angeles Lakers', 'Dallas Mavericks', 'Miami Heat']
>>> Counter(nba).most_common(2)
[('San Antonio Spurs', 3), ('Los Angeles Lakers', 2)]

Note que, em caso de elementos com o mesmo número de ocorrências (“Los Angeles Lakers” e “Miami Heat”, nesse exemplo), a ordenação é aleatória.

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.

Desabilitando a verificação de atualizações do Google App Engine

Google App EngineO servidor de desenvolvimento Python do Google App Engine (dev_appserver.py) verifica se a versão do SDK está atualizada toda vez que é iniciado. Isto pode ser um problema caso uma conexão com a internet não esteja disponível, pois a aplicação não começará a rodar enquanto a requisição não expirar. Para contornar esta situação, é possível desabilitar a verificação de atualizações. O procedimento consiste em editar (ou criar, caso não exista) o arquivo .appcfg_nag que fica localizado no diretório home do usuário para que a primeira linha tenha o seguinte conteúdo:

opt_in: false

Livro “A Byte of Python 3” traduzido para o português brasileiro

A Byte of Python - Português BrasileiroFinalmente, depois de algum tempo de baixa prioridade para o projeto, conseguimos concluir 100% da tradução do livro A Byte of Python, de Swaroop CH. Gostaria de agradecer imensamente a todos os voluntários que colaboraram na tradução, fazendo com que mais uma opção de aprendizado da linguagem esteja disponível em língua portuguesa.

A todos os interessados, leiam e façam suas sugestões e críticas para que possamos corrigir eventuais falhas.

Para ler online: A Byte of Python 3 (português brasileiro)

Python no evento 3kg de TI

Hoje foi o primeiro dia do evento 3Kg de T.I., promovido pela Universidade Tiradentes. Uma das apresentações do dia de abertura foi um curso relâmpago de Python, seguido de uma sessão de coding dojo na linguagem. Cerca de 20 pessoas estiveram presentes para conhecer a linguagem e a prática do dojo. Os palestrantes Davi Lima e Rodrigo Amaral mostraram as principais características da linguagem que a fazem tão poderosa e divertida de programar. Aproveitamos a oportunidade para convocar divulgar o Python User Group de Sergipe (PUG-SE) e o Coding Dojo Sergipe (Dojo-SE).

Como a maioria dos presentes participava pela primeira vez de um coding dojo, pudemos comprovar o quanto esta prática é motivante. Em pouco tempo, todos os voluntários para codificar se mostraram bastante à vontade com a dinâmica do dojo.

Seguem algumas fotos do evento:

Gostaria também de deixar nosso agradecimento à organização do evento, na pessoa do Jordano Mazzoni, e à Universidade Tiradentes por apoiar esta importante iniciativa, não só para o mercado, mas para todo o ecossistema de tecnologia da informação de Sergipe.

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