Recursão de cauda — ou como não estourar a pilha

Publicado em 13 nov 2020. Uns 10 minutos de leitura.

Quando precisamos realizar uma operação várias vezes, geralmente existem duas maneiras: iterativa e recursiva. Iterativa é quando utilizamos alguma estrutura de laço, como um for ou while, com uma variável de controle para saber quando parar. Recursiva é quando uma função decide executar a si mesma por entender que ainda precisa continuar processando. Toda iteração pode ser escrita como uma recursão e vice-versa. Recursões porém tem um risco associado: o estouro da pilha. Vamos entender o que isso significa e como escrever código recursivo evitando esse problema!

Continuar lendo →


Casamento de padrões em Elixir

Publicado em 16 out 2020. Uns 11 minutos de leitura.

Um desafio de programação é conseguir escrever código de maneira mais sucinta sem sacrificar a facilidade de compreensão. É comum ver soluções de uma linha que resolvem o problema e ninguém entende como elas funcionam. Pensando nisso, algumas linguagens trazem sintaxe que permite escrever, de maneira idiomática, código mais expressivo. Um exemplo disso é casamento de padrões. Recentemente, comecei a estudar Elixir, e fiquei feliz em descobrir que pattern matching é uma parte importante da linguagem e resolvi trazer um pouco disso pra cá!

Continuar lendo →


Texto com degradê em CSS (igual a esse título)

Publicado em 16 set 2020. Uns 4 minutos de leitura.

A cor do texto em CSS é definida usando a propriedade color. Mas há maneiras de usar algo mais complexo do que apenas uma cor? Dá sim, é só olhar para o título deste post. O texto nele, ao invés de ter uma cor apenas, é preenchido por um degradê (ou gradiente). Vamos fazer isso só com CSS!

Continuar lendo →


De zero a heroi: Hero animations em Flutter

Publicado em 31 ago 2020. Uns 17 minutos de leitura.

Animações são uma excelente maneira de tornar um app mais interativo e engajar os usuários. Flutter tem várias opções para criar animações, com diferentes níveis de complexididade. Uma das (se não a) mais simples são as Hero animations, que, com apenas um widget, permitem animar um componente durante a transição entre duas telas. Vamos ver como fazer uma animação super rápida e explorar possibilidades mais avançadas para criar animações mais complexas com essa ferramenta.

Continuar lendo →


Montando 5 gráficos com uma métrica do Prometheus

Publicado em 20 ago 2020. Uns 10 minutos de leitura.

A linguagem de consultas do Prometheus, a PromQL, permite fazer transformações e agregações das métricas para extrair dados que não haviam sido reportados diretamente pela aplicação mas podem ser deduzidos. Nesse post, trago 5 consultas diferentes que podemos fazer para monitorar nossas aplicações usando apenas (tecnicamente) uma métrica! Vamos usá-las para montar gráficos no Grafana.

Continuar lendo →


Navegação por rotas em Flutter usando o Nuvigator

Publicado em 12 ago 2020. Uns 12 minutos de leitura.

Um dos aspectos mais importantes de um app é a navegação entre telas. Na web, isso é feito através de links (e, com a alta dos frameworks de front-end JavaScript, reimplementando esta navegação no cliente). Num app em Flutter, existem funções de navegação para transicionar de uma tela para outra. Com elas é possível empilhar, substituir e remover telas criando o próprio widget da tela seguinte nestas funções.

O Nuvigator surgiu como uma abstração em cima desse roteamento do Flutter para facilitar a declaração e reutilização destas rotas, o que é bem útil conforme o app cresce e tem mais partes que interagem. Trouxe uma introdução a como ele funciona neste post!

Continuar lendo →


Desmistificando o margin collapsing do CSS

Publicado em 3 ago 2020. Uns 11 minutos de leitura.

Um comportamento que de vez em quando me pega desprevinido de CSS é o margin collapsing (literalmente, "desmoronamento das margens", na falta de uma tradução melhor), que é a combinação de duas margens adjacentes em uma só. É algo que faz parte da especificação mas muitas vezes passa despercebido. Agora, quando isso interfere no que queremos fazer, se você não souber o que é e como funciona, vai quebrar a cabeça para desvendar por que suas margens desaparecem. Trouxe a definição de em quais casos suas margens podem sumir e alguns exemplos para ajudar a visualizar cada um!

Continuar lendo →


Melhorando acessibilidade de linhas e colunas em Flutter

Publicado em 27 jul 2020. Uns 7 minutos de leitura.

Flutter parte do princpípio de "tudo é um widget!", e isso inclui as primitivas de layout, como Row e Column. Com essas ferramentas bem simples, conseguimos criar vários tipos de layout. Porém, nem sempre a maneira com que algo é visualmente disposto bate com a ordem e agrupamento semântico. Estava fazendo um app em Flutter e, ao tentar usá-lo com o VoiceOver (leitor de tela do iPhone, usado normalmente por pessoas com deficiência visual), percebi que ele lia alguns conteúdos numa ordem ruim. Vamos ver o que precisei fazer para consertar isso — é mais fácil do que parece!

Continuar lendo →