Blog

Notas de engenharia

Artigos sobre Rails por dentro, PostgreSQL em escala, sistemas distribuídos e engenharia com IA.

EN PT
ml

Você não entende Machine Learning até implementar do zero

Chamar sklearn.fit() não é entender. Construir perceptron, regressão logística e uma rede que resolve XOR em Ruby é. ML é álgebra e otimização — não mágica.

· 5 min de leitura
ml

Gradient descent explicado visualmente

Função de custo é uma superfície. Derivada é inclinação. θ = θ − α·∇J(θ). Toda rede neural que você já ouviu falar é essa regra, repetida.

· 5 min de leitura
infra

epoll e io_uring explicados visualmente

Blocking IO → select → poll → epoll → io_uring. Cada degrau existe porque o anterior travava. Async não é feature de linguagem, é feature de kernel.

· 5 min de leitura
infra

Como o kernel Linux recebe uma request HTTP

NIC → driver → IRQ → softirq → IP → TCP → socket buffer → accept queue → Puma. Seu framework é os últimos 5% do request. O resto é kernel.

· 5 min de leitura
distributed

O mito do \"exactly once\"

Exactly-once não existe na rede. O que existe é at-least-once com idempotência. Pare de perseguir mito de marketing — projete para a realidade e durma à noite.

· 4 min de leitura
distributed

Como evitar retry storms em background jobs

API externa caiu. 100k jobs no Sidekiq decidem tentar de novo ao mesmo tempo. Jitter, circuit breaker, DLQ — retry não é fix, é estratégia de adiamento.

· 5 min de leitura
distributed

Idempotência em sistemas reais

At-least-once é a realidade. Unique constraint é a única garantia de verdade. Idempotency-Key, dedupe table — sobrevivência em sistemas distribuídos.

· 4 min de leitura
postgres

Lock contention: o assassino silencioso do Postgres

Migração de 10ms que congela produção por 40 minutos. ALTER TABLE pegando ACCESS EXCLUSIVE. pg_locks + pg_stat_activity. Locks são invisíveis até não serem mais.

· 5 min de leitura
postgres

O que VACUUM realmente faz no Postgres

MVCC, dead tuples, bloat, autovacuum, transaction wraparound. VACUUM não é faxina — é parte de como o Postgres funciona. Ignorar é acordar 3h da manhã.

· 5 min de leitura
postgres

EXPLAIN ANALYZE deveria ser obrigatório

Junior roda a query. Senior roda o plano da query. Seq Scan, Index Scan, Bitmap Heap, estimativa vs real, BUFFERS — olhar o plano não é luxo, é o trabalho.

· 5 min de leitura
rails

Você NÃO entende Rails até entender o ciclo completo de uma Request

Rails não é mágico. Rails é Rack, TCP, Threads, Middleware, SQL e objetos Ruby na heap. Entenda o que acontece antes e depois do seu controller.

· 5 min de leitura
architecture

Refatorar monólito sem detonar produção

Microsserviço não é a solução. Refatorar monólito é uma arte — strangler fig, feature flag, migração de schema em passos. O que ninguém te conta sobre o processo.

· 5 min de leitura
performance

Como identificar gargalo de performance em minutos

Toda app lenta tem UM gargalo dominante. Achismo não resolve. Aprenda a hierarquia de suspeitos, as ferramentas certas e o fluxo que vai direto na causa.

· 5 min de leitura
performance

Debuggar memory leak em Ruby sem chorar

Ruby tem GC. Então leak clássico não existe. O que existe é bloat — e a diferença entre os dois é o que separa o senior do junior nesse assunto.

· 4 min de leitura
ruby

Escrever uma DSL simples do zero em Ruby

Rails, RSpec, Sidekiq, Devise — toda gem famosa é uma DSL. E nenhuma é mágica. São truques simples de metaprogramação que você replica em uma tarde.

· 4 min de leitura
rails

Como ActiveRecord monta SQL por baixo dos panos

Você não está montando SQL. Está montando uma árvore. Entenda Arel, bind parameters, lazy evaluation e a diferença real entre includes, preload e eager_load.

· 4 min de leitura
ruby

Ancestors chain: como Ruby resolve métodos de verdade

Pergunta de entrevista preferida pra separar Rubyist de pessoa que escreve Ruby. Include, prepend, singleton classes — toda dúvida tem a mesma resposta.

· 4 min de leitura
ruby

Como Ruby resolve métodos internamente

Quando você chama user.name, Ruby faz um ritual. Method lookup, inline cache, method_missing, singleton classes — a mecânica real por trás de uma chamada simples.

· 4 min de leitura
ruby

GIL: o lock que todo Rubyist precisa entender

Ruby não tem paralelismo real por causa do GIL — meia-verdade dita com confiança. Entenda o GVL de verdade, quando threads ajudam e quando viram armadilha.

· 3 min de leitura
ruby

Entender o runtime do Ruby (não só a linguagem)

A maioria conhece a linguagem. Quase nenhum conhece o runtime. YARV, heap, GC, GVL, inline cache — onde a engenharia mora e onde os bugs de produção nascem.

· 4 min de leitura