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

Anúncios

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

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