Argumentos de funções em Python

argumentos-1_abertura

Em Python, além do modo convencional de se fazer a passagem de argumentos para as funções, há outras formas onde é possível pré-definir o valor de um argumento ou mesmo permitir que ela (a função) possa receber quantidades arbitrárias de argumentos.

E isto aqui é um pequeno resumo do que pode ser feito.

Continuar lendo

Anúncios

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

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

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