Cobertura de código com pytest

pytestcov-1_abertura-1

Expandindo um pouco aquele básico sobre o pytest com algo que é muito importante em uma rotina de testes, a cobertura do código. E que consiste em uma medida numérica descrevendo o quanto do seu código está sendo efetivamente executado pelas suas rotinas de teste.

No caso específico do Python com pytest uma forma de fazer esta verificação é através do plugin pytest-cov que faz uso de uma outra ferramenta, a coverage, para automaticamente registrar e produzir relatórios de cobertura. E, consequentemente, ajudar a escrever rotinas de teste que efetivamente alcançam todas as partes do programa.

Continuar lendo

Anúncios

A rotina de scroll do Parsec no MSX

parsecmsx-1_abertura

O jogo Parsec é um Shoot’em Up¹ desenvolvido por Jim Dramis and Paul Urbanus para o computador TI 99/4A da Texas Instruments e lançado em cartucho no ano de 1982. Nele você controla uma espaçonave que precisa se defender durante 16 fases de ondas sucessivas de ataque, ao mesmo tempo que precisa mantê-la devidamente abastecida (há áreas próprias para isto) e, claro, se entender com a inércia que torna sua movimentação pela tela um pouco complicada.

Opcionalmente, o jogo suporta o módulo de síntese de voz, Speech SynthetizerPHP1500, para a reprodução de mensagens como “Press fire to begin.“, “Nice shooting.“, “Warning! Time to refuel.” etc… do “computador de bordo” da nave.

Foi o primeiro jogo do TI 99/4A a utilizar o modo de vídeo GRAPHICS 2 — a SCREEN 2 dos MSX — e implementa uma rotina de scroll ponto a ponto que faz o cenário deslizar indefinidamente no decorrer da partida. Foi justamente por conta desta rotina de scroll que resolvi olhar com atenção para ele e tentar implementá-la no MSX.

E tudo isto foi há pouco mais de 4 anos…

(¹) Particularmente gosto mais do termo Mata Marcianos, usado pelos espanhóis. 🙂

Continuar lendo

Pesquisa reversa em REGEX

regex_reverso-1_abertura

Dica rápida com expressões regulares. Quando você precisa buscar uma determinada palavra dentro de uma sequência¹ você faz algo mais ou menos assim…

$ lspci | egrep "^00:1[0-9]\.[0-9]"
00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0...
00:14.2 Signal processing controller: Intel Corporation Sunrise Po...
00:15.0 Signal processing controller: Intel Corporation Sunrise Po...
00:16.0 Communication controller: Intel Corporation Sunrise Point-...
00:17.0 SATA controller: Intel Corporation Sunrise Point-LP SATA C...

Mas e se você deseja justamente fazer o contrário? No caso específico do comando grep basta simplesmente utilizar o parâmetro ou “– – invert-match“|”-v” para tal…

$ lspci | egrep --invert-match "^00:1[0-9]\.[0-9]"
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v6/7th Gen Cor...
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 6...
00:1c.0 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express...
00:1c.5 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express...
00:1f.0 ISA bridge: Intel Corporation Device 9d4e (rev 21)
00:1f.2 Memory controller: Intel Corporation Sunrise Point-LP PMC... 
00:1f.3 Audio device: Intel Corporation Sunrise Point-LP HD Audio... 
00:1f.4 SMBus: Intel Corporation Sunrise Point-LP SMBus (rev 21)
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL81...
02:00.0 Network controller: Qualcomm Atheros QCA9377 802.11ac Wire...

Mas e se o que você precisa, não pode ser feito através do grep?

(¹) Uma pesquisa simples, tudo que comece com “00:1”, tenha qualquer dígito entre  0 e 9, um ponto (“.”) e outro dígito entre 0 e 9.

Continuar lendo

Ubuntu 18.10

ubuntu1810_abertura

Hoje a Canonical liberou a versão 18.10 do Ubuntu Linux, o Cosmic Cuttlefish (ou sépia cósmica se preferir), que será suportada até julho de 2019¹. A principal novidade, ao menos na versão desktop, é a adoção do YARU, como tema padrão da distribuição e totalmente mantido pela comunidade.

E também novas versões do Linux (4.18), OpenSSL (1.1.1), GNU C Library (2.28), GCC (8.2), Python (3.6.7 por padrão mas 3.7.1 disponível), Ruby (2.5.1), PHP (7.2.10), Perl (5.26.2) etc…

(¹) Lembrando que diferente das versões lançadas nos meses de abril, as de outubro não possuem suporte estendido.

Registro de eventos em Python

logging-1_abertura

O registro de eventos¹ é um recurso bastante útil pois ajuda na visualização do que está ocorrendo dentro do programa ao permitir a exibir o valor de variáveis em determinado instante ou mesmo sinalizar quais partes do código vão sendo executadas.

Em Python o módulo logging se encarrega de implementar funções e classes que permitem a utilização deste recurso e isto aqui é um roteiro bem simples de como utilizá-lo em seus programas.

(¹) Ou simplesmente logging, se preferir.

Continuar lendo