Continuando a série sobre o módulo asyncio do Python 3.4, vamos ver como criar um jogo simples, em modo texto. O objetivo do jogo é simplesmente mostrar um labirinto e deixar o jogador se mover utilizando o teclado numérico (4 - esquerda, 6 - direita, 8 - cima, 2 - baixo e S para sair). Para exercitar nossos músculos da época do DOS com programação assíncrona, vamos exibir o relógio na última linha. O resultado final deve se parecer com a imagem abaixo:
Asyncio e corotinas
Continuando a série sobre o módulo asyncio do Python 3.4, vou apresentar as corotinas e como elas simplificam a escrita de nossos programas com o loop de eventos. Com a saída do Python 3.4, eu atualizei o livro de Introdução à Programação com Python. Alguns assuntos fogem ao escopo do livro que é destinado a iniciantes. Eu estou continuando uma série de posts curtos sobre alguns tópicos que acho interessantes e quem sabe até podem virar base para um novo livro. Clique aqui para ler o primeiro artigo.
Python asyncio - Métodos assíncronos em Python
Com a saída do Python 3.4, eu atualizei o livro de Introdução à Programação com Python. Alguns assuntos fogem ao escopo do livro que é destinado a iniciantes. Eu vou começar a escrever uma série de posts curtos sobre alguns tópicos que acho interessantes e quem sabe até podem virar base para um novo livro.
Uma das novidades do Python 3.4 é o módulo asyncio que traz várias rotinas para chamada de métodos assíncronos em Python. A programação assíncrona é um pouco diferente do que normalmente estamos habituados a escrever em Python, mas é uma excelente alternativa a utilização de threads e uma boa escolha para resolver problemas com muitas entras ou saídas (I/O).
Todos os exercícios do livro já estão no site!
Acabei de subir todos os exercícios resolvidos do meu livro: “Introdução à Programação com Python”.
Site do livro: http://www.nilo.pro.br/iprog/
Download dos exercícios: http://www.nilo.pro.br/iprog/exercicios_resolvidos.zip
Exercícios on line: http://www.nilo.pro.br/html/exercicios/
Múltiplos monitores com o Remote Desktop
Depois de usar dois ou mais monitores para programar é difícil querer usar apenas um. O Remote Desktop da Microsoft suporta vários monitores, mas normalmente só funciona bem quando a máquina remota e a local possuem 2 monitores.
No trabalho, eu uso um computador com 2 monitores Full HD e um notebook com a resolução de tablet :-D O que torna impossível usar o notebook para programar. Eu normalmente abro uma sessão do Remote Desktop pela manhã e só a fecho na hora de ir embora… muitas vezes não uso nem o teclado do notebook durante o dia, ele se transforma em um disco e CPU remotos !
Python Computer e Raspberry Pi
Preparação
Segunda (30/07/12), recebi meu primeiro Raspberry
Pi, comprado na Element
14. Depois de
um mês de espera, recebo na caixa do correio, mas um tanto tarde na
Bélgica… 21h. Na verdade, chegou perto do meio dia, mas como não estava
em casa, o carteiro deixou como carta normal mesmo.
A caixa é bem pequena, como um cartão de crédito. Na realidade, eu
encontrei o computador no meio de outras cartas
!
O problema é que não tinha nenhuma loja aberta para comprar um cabo ou
outro, caso precisasse. O jeito era improvisar.
Eu sabia que ia precisar de um Hub USB com alimentação, pois a USB do Pi
não fornece muita energia. Sabendo que o computador estava para chegar,
eu comprei um Hub USB de 4 portas, ainda no sábado, aproveitando a
visita ao supermercado:
E também cartas SD:
Pois o Pi só dá boot pela carta SD. Comprei uma carta de 4GB e outra de
8GB, pois uma era classe 4 e a outra classe 10. Aparentemente o Pi tem
problemas com cartas classe 10, mas a minha funcionou perfeitamente, mas
sem ganho de performance notável.
Antes mesmo de conectar o computador, é preciso baixar o Linux e
gravá-lo na carta SD. Instruções detalhadas em inglês são encontradas
aqui. Se você usa Windows,
precisa baixar o
Win32DiskImage.
Ele não tem setup, é só descompactar e executar direto. Você precisa ser
administrador do computador para gravar a imagem. Eu utilizei o
Raspbian,
mas outras distribuições também estão disponíveis. A imagem do Raspbian
tem uns 450MB e ao descompactá-la você terá o arquivo .img, necessário
para o Win32DiskImage.
Gravar a imagem é bem fácil. Introduza o cartão SD no leitor do
computador. Normalmente o Windows se oferece para abri-lo. Aproveite a
chance para verificar se este está vazio, pois a gravação da imagem vai
apagar todo o conteúdo do cartão. Com o Win32DiskImage aberto, selecione
o arquivo .img com o Raspbian e ao lado verifique se o drive com a carta
SD está correto. Se você tem mais de uma carta SD ou caso apareça mais
de uma opção, verifique o que está fazendo, evitando assim perder seus
dados. Clique no botão Write e espere a gravação ser finalizada.
Com a carta SD pronta, resta a conexão do Raspberry Pi.
Como já estava tarde, montei uma mesa de trabalho no chão da sala,
usando uma caixa de monitor e uma folha A4 para dar noção do tamanhão do
Raspberry Pi. Sem medir muito, eu chuto que numa folha A4 caberiam 9
Raspberry Pis!
Esta placa contém um SoC (System on a Chip) fabricado pela Broadcom, no
caso do modelo B, um BCM2835 com:
Por que UTF-8 e não ASCII para o Português? (PARTE II)
Continuação do post, originalmente feita na lista Python-Brasil:
Vou tentar de novo, a thread já falou de 3 coisas diferentes:
- Codificação a usar em programas Python: por que UTF-8 é altamente recomendável
- Codificações em geral e problemas causados e resolvidos por ela
- Um bug do Python no Windows, quando o prompt é configurado para página 65001
Vou tentar explicar para todo mundo, pois é um tópico recorrente.
Mas antes de voltar nestes tópicos, temos que voltar a arquivos.
Por que UTF-8 e não ASCII para o Português? (PARTE I)
Um outro post que fiz na Python-Brasil:
Os colegas já falaram sobre o por quê do UTF-8.
Eu gostaria apenas de lembrar que o assunto é mais complicado do que parece, por exemplo no Python 2.7:
# -*- coding: utf-8 -*-
print "Acentos: áéíóúãõç"
print u"Acentos2: áéíóúãõç"
Execute o programa acima no Windows, pode ser pelo IDLE ou pelo console:
C:\Users\nilo\Desktop>\Python27\python.exe test.py
Acentos: ├í├®├¡├│├║├º├ú├Á
Acentos2: áéíóúçãõ
Você deve ter obtido bons resultados apenas na linha do Acentos2. Se a string não é marcada com unicode, vai ser simplesmente impressa como uma sequência de bytes, sem tradução. Se tiver o u na frente, como em acentos2, o Python saca que precisa traduzir de unicode para cp850, no caso do console aqui de casa. Já no Linux, as duas linhas produzem resultados corretos!
Por que aprender várias linguagens de programação?
Outro post da lista Python-Brasil, onde se discutia qual a melhor linguagem para se aprender a programar:
Eu concordo que Python é uma ótima linguagem como primeira linguagem de
programação.
Mas nem tudo é Hello World e muitas vezes o professor ou o coordenador
do curso ensaiam de apresentar Java ou C++… para facilitar cursos
futuros. Exemplo: apresentam um Java troncho em ICC para depois afinar
num curso de OO. Outros por não conhecerem Python ou descartarem Python
por ser script.
XML-Man
De todos os super-heróis que vivem na ilha de Java, o mais perigoso é o XML-Man.
XML-Man resolve tudo com a herdeira do SGML, prima do HTML. Tudo, tudo. Se fosse possível, escreveria programas Java em XML também. O poder de XML-Man é de criar ferramentas de configuração e gerenciamento que você não precisaria se não tivesse que escrever tudo em XML.