Fazendo upload de arquivos para o Google Cloud Storage com Python

Algum tempo atrás precisei aprender a fazer upload de arquivos para o Google Cloud Storage. Uma das coisas que eu gosto de fazer para me ajudar aprender a fazer algo é criar um scriptzinho com o conceito do que quero, sem aplicar em grandes projetos, evitando assim grandes complexidades. Assim na época eu criei este script simples que faz o upload do arquivo em um bucket do GCS. A primeira coisa que você precisa fazer é ter instalada a biblioteca, para isso temos o bom e velho pip: ...

October 11, 2021 · Lucas Polo

Medindo o tempo de aplicações de linha de comando

Vira e mexe precisamos testar o tempo de algo que roda em linha de comando, seja uma requisição através de cURL ou algum scripts/aplicação que construímos. O jeito mais simples e onipresente nas interfaces de linha de comando do Linux é o time. Ele executa o comando passado para ele através de parâmetro e diz qual foi o tempo de execução: Resultado da execução do time O time pode ajudar muito, principalmente quando queremos comparar escalas de tempo muito diferentes, por exemplo uma mudança de código que mudou o tempo de execução de 1s para 100ms. Porém como a medida pode variar muito de execução devido a diversos fatores (cache, resolução de DNS, etc) testar apenas uma única vez pode não trazer resultados muito acurados, pois não temos tempo médio nem a variância do tempo. Para isso encontrei uma outra aplicação chamada hyperfine. ...

October 7, 2021 · Lucas Polo

Casamento de padrões (Pattern Matching)

Há alguma tempo atrás eu aprendi um pouco de Scala, uma linguagem muito interessante que roda sobre a JVM. Apesar de ser muito similar ao Java a primeira vista logo depois de um pouco mais de aprendizado lidamos com recursos muito diferentes do que temos na linguagem mais velha. Um recurso que me surpreendeu foi o casamento de padrões, ou pattern matching em inglês e vou usa-la de exemplo aqui pois até onde conheço o pattern matching do Scala é um dos mais completos. Diversas outras linguagens implementam também o recurso de maneira similar e as vezes com um pouco menos de poder, por isso vale conferir a documentação antes de prosseguir. ...

October 4, 2021 · Lucas Polo

O novo (mas nem tanto) switch/case do Java

Recentemente voltei a mexer mais com Java devido ao trabalho e também alguns conteúdos que eu estava acompanhando que utilizam a linguagem. Como estou utilizando o IntelliJ como IDE ela sugeriu algo muito interessante e que passei adotar sempre que posso, o nova sintaxe do switch/case. A instrução switch case comum do Java segue algo muito similar a já implementada no C, um exemplo simples: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package com.company; public class Main { public static void main(String[] args) { var nome = "Cebolinha"; switch(nome) { case "Lucas": System.out.println("Bem vindo programador Lucas"); break; case "Grace": System.out.println("Bem vinda programadora Grace Hopper"); break; default: System.out.println("Bem vindx pessoa programadora " + nome); } } } Esta é a estrutura comum que já conhecemos, como você pode ver temos os casos específicos que tratamos, o caso padrão e para que a avaliação do switch/case pare precisamos utilizar a clausula break, o que chega a me dar “gastura” em switch/cases muito grandes. ...

September 27, 2021 · Lucas Polo

Pytest: Pequeno manual para o dia a dia - Fixtures

Depois que comecei a programar em Python no dia a dia eu me deparei com uma das ferramentas mais legais de teste que conheci, o Pytest. Por padrão o Python já vem com uma ferramenta de testes chamada Unittest, que é muito boa e funcional, porém como ela foi criada junto com o Python algumas arestas dela ficaram soltas, principalmente por não utilizar toda a potência que a própria linguagem oferece. Aqui eu vou deixar algumas coisas muito interessantes que uso no meu dia a dia e como podem servir principalmente como um guia rápido do Pytest. ...

September 20, 2021 · Lucas Polo

Quem programa as linguagens de programação?

Acredito que todo programador já se perguntou ou irá se perguntar como as linguagens de programação são feitas, principalmente se você não teve nenhuma disciplina como compiladores na faculdade. Eu me fiz essa pergunta algumas vezes e aprendi muito com ela. Se você pesquisar na internet sobre como compiladores são feitos ou perguntar por ai um dos conteúdos que irá descobrir é o excelente, porém bem complexo para iniciantes, Compiladores: Princípios, técnicas e ferramentas de Alfred V. Aho Et al. ...

September 13, 2021 · Lucas Polo

Escrevendo um sistema operacional em Rust de Philipp Opperman

Eu me lembro que em 2008 eu imaginei como seria criar um sistema operacional e na época eu busquei algo na internet para fazer uma introdução no assunto. Eu lembro que a primeira coisa que imaginei foi que pelo menos a “entrada” do sistema operacional precisaria ser escrita em Assembly. Procurando pela internet algo como “fazer um Hello World bootável”, ou como criar um programa que não precisa de sistema operacional para escrever algo na tela. Lembro-me que encontrei algo em C sobre um tal de endereço 0x800000 mas ficou por isso mesmo, na época o assunto estava muito além do que eu conseguia fazer facilmente e também não continuei aprendendo para entender como fazer algo. ...

September 6, 2021 · Lucas Polo

Fazendo queries SQL em arquivos CSV

Vira e mexe eu recebo alguns arquivos CSV que preciso fazer algum filtro ou alguma análise. Eu gosto muito de usar o Python para alguns processamentos, mas não é a coisa mais prática do mundo, ou abrir um script ou abrir um Jupyter Notebook para essa análise. Foi então que descobri que o DBeaver pode nos ajudar com este processo e é muito simples. Após abrirmos o DBeaver basta criarmos uma nova conexão e selecionarmos o diretório onde constará o(s) arquivo(s) CSV. ...

September 2, 2021 · Lucas Polo

Realizando commits parciais no Git

Durante o desenvolvimento é comum alterarmos o mesmo arquivo diversas vezes e se você gosta de manter um histórico consistente de suas alterações você pode esbarrar na situação onde um arquivo foi alterado em mais de um ponto e quer separar em commits distintos essas alterações. Pra exemplificar este aqui é o código que iremos trabalhar: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from collections import namedtuple Cliente = namedtuple('Cliente', 'nome,idade'.split(',')) def inserir_cliente(cliente): print(f'Cliente {cliente.nome} inserido com sucesso') return 'ok' def test_inserir_cliente(): cliente = Cliente("Monicão", 3) resultado = inserir_cliente(cliente) assert resultado == 'ok' Agora o que queremos fazer é adicionar uma função que verifica se o cliente é valido (o nome deverá ter mais de três caracteres e a idade deve ser um número maior ou igual a zero). ...

August 30, 2021 · Lucas Polo

O jeito pythonico das propriedades no Python - parte 2

Este post é uma sequência deste outro post sobre os getters, vale apena conferi-lo antes. Após entendermos melhor como funcionam as propriedades em Python e aplicarmos os getters em nossa classe Circulo, ficamos com a pendência de entender como podemos agora aplicarmos os setters. O principio é muito similar e simples. Para isso basta definirmos o método em questão e decorá-lo com @nome_da_propriedade.setter. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import math class Circulo: def __init__(self, raio): self._raio = raio @property def raio(self): return self._raio @property def area(self): return self.raio ** 2 * math.pi @property def circunferencia(self): return self.raio * 2 * math.pi @raio.setter def raio(self, value): assert value > 0, 'O valor do raio deve ser maior que 0' self._raio = value c = Circulo(5) print(c.area) c.raio = -1 Aproveitei também para já colocar uma validação no método e passei a utilizá-lo no método __init__. A criação é muito simples e prática, apesar de a API do setter não ser tão intuitiva, seu funcionamento é tão simples como a criação dos getters. Por se tratar um método podemos inclusive fazer outras computações nele, como por exemplo criar um setter para a área: ...

August 23, 2021 · Lucas Polo