Pular para o conteúdo principal

Postagens

Desenvolvimento e Tecnologia da Informação · desde 2008

Programação, tecnologia e outras conversas.

.NET 8 e .NET 9 saíram de suporte no dia do maior Patch Tuesday da história

Na terça-feira, 10 de novembro, aconteceram duas coisas que parecem notícias separadas e que, na minha opinião, são a mesma história. O .NET 8 e o .NET 9 saíram de suporte. E a Microsoft publicou, no mesmo dia, o Patch Tuesday mais volumoso que eu já vi: algo perto de 1.100 correções de segurança, dependendo de quem faz a contagem. O que aconteceu O calendário já estava anunciado desde junho. Em 10 de novembro de 2026, .NET 8 (LTS) e .NET 9 (STS) deixaram de receber correções de segurança e suporte técnico. O .NET 9 acabou junto com o 8 porque o ciclo de suporte das versões STS foi esticado de 18 para 24 meses, e a conta fechou na mesma data. A recomendação oficial é migrar para o .NET 10, que é LTS e tem suporte até novembro de 2028. A aplicação continua rodando, ninguém vai desligar nada, mas o que for descoberto daqui para frente não será corrigido para essas versões. Já o Patch Tuesday trouxe, segundo o Krebs on Security, 1.093 vulnerabilidades corrigidas, com 63 críticas e u...
Postagens recentes

Cache-aside com FastAPI e Redis: invalidação e requisições simultâneas

Todo mundo que já colocou uma API em produção conhece o filme: o endpoint de leitura é simples, mas a consulta por trás dele é cara, e a mesma linha é pedida centenas de vezes por minuto. Aí alguém sugere "põe um Redis na frente". Funciona, mas o difícil não é gravar no cache, é decidir quando ler, quando invalidar e o que fazer quando dez requisições chegam juntas e o cache está vazio. Neste post eu montei um exemplo pequeno com FastAPI e Redis usando o padrão cache-aside, e dei atenção a esses dois pontos chatos: invalidação e requisições simultâneas. Tudo roda com docker compose e os testes não precisam de um Redis de verdade. A ideia: cache-aside No cache-aside quem manda é a aplicação, não o cache. O fluxo de leitura é sempre o mesmo: pergunta ao Redis; se tem, devolve; se não tem, busca na fonte de verdade, grava no Redis com um TTL e devolve. Na escrita, a gente muda a fonte e apaga a chave do cache, deixando a próxima leitura repovoar. É menos esperto que write-...

Agentes que não esperam você pedir: o preço da privacidade e da computação

Durante anos, assistente de IA foi uma coisa que ficava esperando você digitar. Você pergunta, ele responde, fim. A virada que está acontecendo agora é outra: agentes que ficam ligados o tempo todo, olham sua caixa de entrada, aprendem seus objetivos e saem fazendo coisas sem que ninguém peça. Em tese é ótimo. Na prática, abre uma conversa que a gente que trabalha com tecnologia precisa ter antes de liberar acesso a tudo. O que aconteceu No DevDay de 29 de setembro, a OpenAI apresentou os "Dots", agentes que ela descreve como sempre ligados. Cada um tem o seu próprio computador na nuvem, com navegador, e se conecta a milhares de aplicativos por plugins. Dá para conversar com ele pelo ChatGPT ou pelo Slack e pelo Teams, e ele toca vários projetos em paralelo. O primeiro Dot vem incluído nos planos Pro e Business Premium, e no plano Pro o recurso ainda não chegou ao Espaço Econômico Europeu, à Suíça e ao Reino Unido. Há uma camada de controle: regras para quando agir sozi...

Rate limiting em Minimal APIs com o middleware nativo do .NET

Toda API exposta na internet, mais cedo ou mais tarde, recebe um cliente que resolve chamar o mesmo endpoint mil vezes por segundo. Pode ser um bug num loop de retry, um script mal escrito ou alguém testando a sorte. Se você não tem nenhum limite, quem paga a conta é o banco, o CPU e os outros usuários. A boa notícia é que, desde o .NET 7, o rate limiting vem pronto no framework. Não precisa de pacote extra nem de biblioteca de terceiros. Neste post eu monto um exemplo pequeno com Minimal APIs, limite por IP, resposta 429 com Retry-After e testes de integração. A ideia central O middleware trabalha com dois conceitos: o limiter (o algoritmo: janela fixa, janela deslizante, token bucket ou concorrência) e a partição (quem está sendo limitado). Sem partição, o limite é global, e um cliente abusivo derruba o serviço para todo mundo. Particionando por IP, cada cliente tem o seu próprio balde. Você registra uma policy com nome e depois aplica nos endpoints que precisam. Endpoints...

Black October: a IA acelerou a caça às falhas, e a conta chegou

Outubro é, oficialmente, o Mês da Conscientização em Cibersegurança. Em 2026, ele ganhou um apelido bem menos simpático: Black October . Em poucos dias, a gente viu uma falha crítica no PHP descoberta com ajuda de IA, uma autoridade certificadora saindo do mercado por causa de chaves privadas que dava para adivinhar e uma biblioteca popular de IA distribuindo malware pelo PyPI. Se você trabalha com software e não precisou atualizar nada nas últimas semanas, ou teve muita sorte ou não olhou direito. O que aconteceu O episódio mais barulhento foi o PHP2Shell . Pesquisadores da Wiz, com apoio da OpenAI e da Calif, encontraram falhas de segurança de memória no núcleo do PHP, ligadas ao jeito como a linguagem lida com erros fatais, principalmente estouro de memória. Uma requisição que falha pode deixar um estado interno corrompido, que outra requisição reaproveita depois. O resultado é execução remota de código sem autenticação, com nota de severidade até 9.2. O detalhe que mais chama a...

Aplicação Flask usando Nginx e Gunicorn

Aplicação Flask usando Nginx e Gunicorn Se você já desenvolveu uma aplicação Flask básica, sabe que o servidor de desenvolvimento embutido não é ideal para produção. Ele não é projetado para lidar com altos volumes de tráfego ou conexões simultâneas. Para tornar sua aplicação Flask mais robusta e pronta para produção, podemos usar o Gunicorn como servidor de aplicação e o Nginx como proxy reverso. Neste artigo, vamos adaptar o exemplo anterior ( Criando uma Aplicação CRUD com Flask, PostgreSQL e Docker ) para incluir o Nginx e o Gunicorn. O que são Nginx e Gunicorn? Gunicorn O Gunicorn (Green Unicorn) é um servidor de aplicação WSGI que roda aplicações Python como o Flask. Ele é eficiente e simples de configurar, lidando com múltiplas requisições ao mesmo tempo, algo que o servidor embutido do Flask não faz bem. Nginx O Nginx é um servidor web que atua como um proxy reverso. Ele recebe requisições HTTP e as encaminha ao Gunicorn. Além disso, o Nginx pode: Servir arquivos ...

Criando uma Aplicação CRUD com Flask, PostgreSQL e Docker

Criando uma Aplicação CRUD com Flask, PostgreSQL e Docker Neste guia, vamos criar uma aplicação básica que acessa um banco de dados PostgreSQL e realiza operações CRUD (Create, Read, Update, Delete). Vamos usar Flask e executar tudo com Docker. Sem estilos ou extras, apenas o essencial. Estrutura do Projeto crud-app/ |-- app/ | |-- app.py | |-- templates/ | | |-- index.html | | |-- edit.html |-- Dockerfile |-- requirements.txt |-- docker-compose.yml Passo 1: Dependências Crie um arquivo requirements.txt com as seguintes linhas: Flask==2.2.2 Flask-SQLAlchemy==3.0.2 psycopg2-binary==2.9.3 Werkzeug==2.2.2 Passo 2: Aplicação Flask Arquivo app/app.py : from flask import Flask, render_template, request, redirect, url_for from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # Configuração do banco de dados app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://user:password@db:5432/crud_db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db...