Blog

Publicações

30 publicações

Monorepo com npm workspaces e Turbo: o que ninguém te conta sobre React 19, hoisting e shared packages

Semana passada precisei resolver um problema que parecia simples: fazer um frontend Next.js consumir tipos TypeScript de um pacote shared, que também era usado pelo backend pipeline. Os dois viviam no mesmo repositório. Deveria ser trivial. Não foi. O que aprendi nesse processo sobre npm workspaces, Turborepo e os edge cases de monorepos com versões conflitantes de React é o que quero compartilhar aqui. Não como tutorial passo-a-passo, mas como registro do que realmente acontece quando você

4 min · Leitura média

Como Dar Aula Me Ensinou a Construir Dashboards Melhores

Você já parou pra pensar que um bom professor e um bom engenheiro de dados fazem essencialmente a mesma coisa? Os dois pegam algo absurdamente complexo e transformam numa narrativa que faz sentido pra quem está do outro lado. Passei alguns anos em sala de aula antes de migrar completamente pra tecnologia, e essa conexão entre ensino e dados só ficou mais clara com o tempo. Quando eu preparava uma aula sobre estruturas de dados, meu trabalho não era mostrar a implementação de uma árvore B+ — er

5 min · Leitura média

Lambda Warm Instances: Pool de Instâncias e Processamento Assíncrono em Go

A primeira invocação de uma Lambda leva 3 segundos. A segunda também. A terceira também. São 3 segundos de cold start toda vez porque cada invocação pode subir um container do zero. Em um fluxo com 20 chamadas encadeadas, são 60 segundos só de overhead de inicialização. A ideia do pool é manter instâncias prontas para reutilização: a primeira chamada paga o cold start, as próximas reutilizam a instância aquecida e respondem em milissegundos. Combinado com processamento assíncrono via workers, o

5 min · Leitura média

WebSocket para Monitorar IA em Tempo Real

Quando uma IA está "pensando", o que exatamente está acontecendo? Na maioria dos chatbots, você manda uma mensagem e espera. Talvez veja um "digitando..." genérico. Mas e se você pudesse ver em tempo real cada etapa: a classificação de intenção, a extração de triplas, a busca web, a criação de mundos, as inferências simbólicas? Isso transforma debugging de "por que respondeu errado?" em "ah, a extração falhou nesse passo específico". Implementei comunicação via WebSocket onde o backend emite e

4 min · Leitura média

Feedback Loop em Orquestradores de Agentes: Aprendizado sem Machine Learning

Toda vez que o orquestrador seleciona um agente e o resultado é bom, essa informação se perde. Na próxima requisição similar, ele toma a mesma decisão do zero, sem considerar que já acertou antes. E quando erra, erra de novo pelo mesmo motivo. O sistema não aprende. A solução é registrar cada decisão com seu resultado (sucesso ou falha, rating do usuário), acumular padrões ao longo do tempo, e usar esse histórico para melhorar decisões futuras. Não é machine learning pesado. É um sistema de feed

5 min · Leitura média

Projetando Sistemas que Assumem o Atacante é uma IA

Seu rate limiting foi projetado para humanos. 100 requests por minuto por IP. Faz sentido quando o atacante é uma pessoa com um terminal aberto, testando manualmente. Não faz sentido quando o atacante é um agente distribuído em 500 IPs rotativos, cada um fazendo 2 requests por minuto, totalizando 1.000 requests por minuto que seu rate limiting nem percebe. Seu CAPTCHA foi projetado para humanos. Modelos multimodais resolvem a maioria deles. Seu WAF detecta assinaturas de ferramentas conhecidas —

8 min · Leitura média

O If de Par e Ímpar Disfarçado de Arquitetura

Você conhece aquele exercício de programação iniciante: dado um número, diga se é par ou ímpar. A solução ingênua que todo mundo ri: if (n == 0) print("par") if (n == 1) print("ímpar") if (n == 2) print("par") if (n == 3) print("ímpar") if (n == 4) print("par") ... Ninguém faria isso. É óbvio que a solução é n % 2 == 0. Uma regra genérica que resolve todos os casos sem enumerar cada um. Qualquer dev olha esse código e diz: "isso é absurdo, você está codificando cada caso individual quando e

9 min · Leitura média

Benchmarkando um Motor de Raciocínio: Métricas que Importam

Como saber se um motor de raciocínio está funcionando? Não é como testar um CRUD onde você verifica se o dado foi salvo e retornado corretamente. Aqui você precisa medir coisas como: o sistema extraiu os fatos certos? Consolidou informações de múltiplas fontes? Criou conexões criativas? Reduziu incerteza com novas evidências? São capacidades qualitativas que precisam ser quantificadas de forma objetiva. Criei um benchmark com 5 cenários que testam capacidades diferentes do motor. O score total

5 min · Leitura média

Análise Semântica com IA para Roteamento Inteligente de Agentes

O usuário digita "validar dados do usuário no cadastro" e o sistema precisa decidir qual agente vai responder. Parece trivial quando você tem 3 agentes. Fica impossível quando tem 15. O nome do domínio é "user/registration" mas o input não contém nem "user" nem "registration". Contém "usuário" e "cadastro". Substring matching não resolve. Você precisa de algo que entenda que "cadastro" e "registration" são a mesma coisa, que "validar dados" implica uma operação de "modify", e que o domínio mais

6 min · Leitura média

Knowledge Graphs Probabilísticos: Modelando Incerteza como Distribuições

A maioria dos grafos de conhecimento que você encontra por aí funciona com fatos absolutos: "Paris é capital da França" é verdadeiro ou falso, ponto final. Mas o mundo real não funciona assim. Informações são incertas, fontes discordam, e o que era verdade ontem pode não ser hoje. Se você está construindo um sistema que aprende de múltiplas fontes ao longo do tempo, precisa de um grafo que aceita incerteza como cidadã de primeira classe. A abordagem que adotei é tratar cada crença como uma dis

5 min · Leitura média

Circuit Breaker Pattern em Go: Protegendo Chamadas a LLMs

Você tem um orquestrador que chama um serviço externo de LLM dezenas de vezes por sessão. Esse serviço depende de uma API remota. APIs remotas caem. Quando caem, seu orquestrador fica travado esperando timeout de 120 segundos por chamada, acumula 5 chamadas na fila, e o usuário espera 10 minutos para receber um erro genérico. Pior: enquanto o serviço está fora, você continua bombardeando ele com requests, o que pode atrasar ainda mais a recuperação. O Circuit Breaker resolve isso cortando as cha

5 min · Leitura média

Agent Spread: Distribuindo Agentes IA por Bounded Contexts Automaticamente

Você tem uma aplicação com 15 pastas, 200 arquivos, 3 linguagens diferentes. Quer usar agentes IA para ajudar no desenvolvimento mas não quer configurar manualmente qual agente cuida de qual parte. A ideia do Agent Spread é: o sistema escaneia sua aplicação, detecta os domínios automaticamente pela estrutura de pastas e convenções de nomenclatura, e distribui agentes especializados em cada área. Cada agente conhece profundamente seu domínio (quais arquivos existem, qual tech stack, qual a comple

6 min · Leitura média
Carregando...