Um básico de pytest

pytest-1_abertura

O pytest é um framework que permite criar pequenas rotinas de teste mas que também pode ser usado para dar suporte a uma sofisticada rotina de testes funcionais para aplicações e bibliotecas. Não é a única biblioteca de testes disponível em Python mas é  considerada como a alternativa a mais “pythônica” para se escrever testes.

E isto é uma introdução bem simplificada para quem quer começar a escrever testes para seus programas e não sabe exatamente como iniciar…

Continuar lendo

Anúncios

Sincronizando um repositório replicado do git

fork-1_abertura

Quando é usada a opção de fork¹ para replicar² um repositório git, o resultado final será um novo repositório contendo a mesma história do original (os commits passados) porém independente dele a partir deste ponto (os commits futuros). Algo diferente do que acontece quando é utilizado o git clone para copiar um repositório remoto pois ele permanece ligado ao original e sendo possível mantê-lo sincronizado — git pull — como também enviar novos commitsgit push — para ele.

TL;DR! Pode saltar o resto da explicação se preferir…

A interação entre os repositórios de origem e o replicado acontece a partir da ferramenta utilizada para o gerenciamento dos repositórios (ver nota 1) através do pull request. Que basicamente é um instrumento que permite aplicar commits vindos “de fora” ao repositório e mediante intervenção humana para fazer a validação. O mesmo também acontece com o git push no envio dos commits do repositório clonado para o remoto com a diferença de que como você precisa ter permissões para fazê-lo eles são automaticamente aplicados³.

Até aí tudo bem se considerarmos dois casos bem específicos: (i) repositório remoto com contribuições que virão sempre de membros válidos trabalhando a partir de repositórios clonados ou; (ii) repositório replicado que terá um desenvolvimento distinto daquele no qual ele se originou.

Mas existe um terceiro caso, aquele em que você faz a réplica de um repositório ao qual não é membro mas ao qual não dá para como combinar com os membros dele para que aguardem seus pull requests. Não é estritamente necessário mas é recomendável para não trabalhar em versões (muito) antigas dos arquivos.

E este é fim desta longa introdução! 🙂

(¹) A opção está disponível nas interfaces de gerenciamento de repositórios, como BitBucket, GitHub GitLab etc não na ferramenta (git) em si.

(²) A tradução seria “bifurcado” mas creio que “replicado” é um termo bem melhor.

(³) Em alguns casos, o administrador do repositório pode proibir a atualização em ramos específicos, como o master e neste caso também é necessário utilizar um pull request para aplicar suas alterações.

Continuar lendo

Usando grupos em expressões regulares

grupos_regex-1_abertura

Na primeira parte da introdução às expressões regulares, falei dos grupos e que eles servem para agrupar valores distintos para uma pesquisa, ou seja, se você quiser pesquisar pelos nomes perl, python ou ruby em uma determinada sequência basta fazer algo como “(perl|python|ruby)” para tentar encontrá-los. Mas acontece que os grupos não servem só para isto.

Com eles é possível não só localizar mas também fazer referência ao que foi encontrado e assim ampliar as funcionalidades de algumas ferramentas. E aqui alguns exemplos bem simples…

Continuar lendo

O cartão de 80 colunas da DDX – parte 2

ddx80-2_abertura

Dando sequência às minhas experiências com o cartão de 80 colunas DDX80 com uma correção pois na primeira parte afirmei que a memória de vídeo estava entre os endereços 0x6000 e 0x67ff e isto está errado¹ pois ela encontra-se entre os endereços 0x7000 e 0x77ff — os endereços de acesso aos registradores estão corretos, o 0x6000 para índice e 0x6001 para o valor.

Aliás, ao confirmar estes valores, acabei constatando uma “curiosa” diferença que torna DDX80 e VMX-80 incompatíveis entre si, pois o adaptador da Microsol tem a memória entre os endereços 0x6000 e 0x67ff e o acesso aos registradores do MC6845 é feito pelos endereços 0x7000 e 0x7001.

Ou seja… “Posso copiar seu trabalho? Pode mas não faz igual”… 😀

(¹) Aproveitei para corrigir também lá.

Continuar lendo

Funções anônimas em Python

funcoes_lambda-1_abertura

As funções anônimas são rotinas definidas sem um identificador as associando¹ e são geralmente criadas para implementar pequenas funcionalidades ou para serem utilizadas por um período breve (dentro do escopo de uma função, por exemplo).

Em Python, as funções anônimas são definidas a partir da expressão lambda — por este motivo são também chamadas de “funções lambda” — e juntamente com os iteradores e os geradores são a base do paradigma da programação funcional nesta linguagem.

(¹) Sim, basicamente são funções que não tem nome mesmo! 🙂

Continuar lendo

Bases numéricas em Bash

base_numerica_bash-1_abertura

Algo que só fui me dar conta pois aconteceu de um script em Bash resultar em um erro ao tentar fazer uma simples operação de adição! O motivo? Um simples zero à esquerda do número e que resultou uma certa perda de tempo mas também na “descoberta” que o o Bash sabe tratar outras bases numéricas além da, óbvia, decimal! 🙂

Continuar lendo