anúncios

sexta-feira, 22 de maio de 2026

DDD explicado de forma didática

Domain-Driven Design: como modelar software complexo colocando o domínio no centro do universo

O que é DDD?

Domain-Driven Design (DDD) é uma abordagem de desenvolvimento de software criada por Eric Evans no livro azul de 2003. O nome pode assustar, mas a ideia é simples: em vez de começar pensando em bancos de dados, rotas HTTP ou frameworks, você começa pensando no domínio do negócio, ou seja, no problema que o software precisa resolver.

DDD não é uma tecnologia, nem um framework, nem uma arquitetura como MVC. É um conjunto de princípios e padrões que ajuda times de software a criar modelos mentais compartilhados com especialistas do negócio.

"O coração do software é a capacidade de resolver problemas do domínio." Eric Evans

Por que DDD existe?

Projetos de software falham com frequência porque o time técnico e os especialistas do negócio não falam a mesma língua. O desenvolvedor pergunta "qual o tipo desse campo?"; o especialista responde "é o código da agência". Ninguém se entende. O resultado são sistemas cheios de regras espalhadas, modelos anêmicos e código que ninguém consegue mudar sem quebrar tudo.

DDD propõe uma linguagem comum (chamada de Ubiquitous Language) usada por todos, do analista ao dev ao QA, e um modelo de software que reflete fielmente essa linguagem.

Os pilares do DDD

1. Linguagem Ubíqua (Ubiquitous Language)

É o vocabulário compartilhado entre todos os envolvidos. Se o especialista chama algo de "Transferência", o código deve ter uma classe Transferencia, a tabela deve se chamar transferencias, e a API deve expor /transferencias. Nada de Trans, TransfRecord ou transactions, usem o mesmo nome.

2. Domínio e Subdomínios

O domínio é o coração do negócio, é o problema principal que o sistema resolve. Um único sistema grande geralmente contém vários subdomínios:

  • Core Domain: a parte mais importante, que dá vantagem competitiva. Ex: o motor de precificação de um banco.
  • Supporting Subdomain: necessário, mas não estratégico. Ex: cálculo de impostos.
  • Generic Subdomain: pode ser comprado ou usado pronto. Ex: autenticação, envio de e-mail.
// Exemplo: o domínio de um sistema bancário
// Core Domain: Motor de crédito
class AnaliseDeCredito {
  constructor(private score: Score, 
  private rendaMonetaria: Renda) {}
  aprovar(): boolean {
      /* lógica de negócio central */
      }
}

// Supporting Subdomain: Cálculo de tarifas
class CalculadoraDeTarifas {
  calcular(operacao: Operacao): number { 
  /* complexo, mas não estratégico */ }
}

// Generic Subdomain: Autenticação (pronto, comprado)
// Usamos Keycloak, Auth0, ou similar

3. Contextos Delimitados (Bounded Contexts)

Um dos conceitos mais importantes do DDD. Um Bounded Context é uma fronteira explícita dentro da qual um modelo de domínio é válido. Dentro dela, a Linguagem Ubíqua tem significado único e consistente.

Por exemplo: no contexto de Vendas, "Cliente" tem endereço de entrega e histórico de pedidos. No contexto de Cobrança, "Cliente" tem CPF, score de crédito e data de vencimento. São modelos diferentes e devem viver em contextos separados (serviços, módulos, ou até repositórios distintos).

Cada Bounded Context pode ter sua própria arquitetura, seu próprio banco de dados e sua própria equipe. O que vale dentro de um, não vale dentro do outro.

Os blocos de construção táticos

DDD fornece padrões de modelagem para transformar a linguagem do negócio em código expressivo.

Entity

Um objeto que tem identidade própria. Dois objetos com os mesmos atributos mas identidades diferentes são entidades diferentes. Ex: um Cliente com id = 123 é diferente do cliente id = 456, mesmo que tenham o mesmo nome.

class Cliente {
  constructor(
    // identidade única
    readonly id: ClienteId,  
    private nome: Nome,
    private email: Email
  ) {}

  trocarEmail(novoEmail: Email): void {
    this.email = novoEmail;
  }
}

Value Object

Um objeto que não tem identidade, é definido apenas pelos seus atributos. Dois Value Objects com os mesmos valores são considerados iguais. São imutáveis.

  • Dinheiro (valor + moeda), R$ 50,00 não deixa de ser R$ 50,00 por ter "identidade".
  • CPF, Email, Endereco, todos imutáveis e comparados por valor.
class Dinheiro {
  constructor(
    readonly valor: number,
     // 'BRL', 'USD'
    readonly moeda: string 
  ) {}

  somar(outro: Dinheiro): Dinheiro {
    if (this.moeda !== outro.moeda)
      throw new Error('Moedas diferentes');
    return new Dinheiro(this.valor + 
                       outro.valor, this.moeda);
  }

  equals(outro: Dinheiro): boolean {
    return this.valor === outro.valor && 
               this.moeda === outro.moeda;
  }
}

Aggregate

Um cluster de objetos tratados como uma unidade. Cada Aggregate tem uma raiz (Aggregate Root) que é a única porta de entrada para o mundo externo. Toda consistência do cluster passa pela raiz.

// Aggregate Root: Pedido
class Pedido {
  constructor(
    readonly id: PedidoId,
    readonly clienteId: ClienteId,
    private itens: Item[],
    private status: StatusPedido
  ) {}

  adicionarItem(produto: Produto, 
    quantidade: number): void {
    if (this.status !== 'aberto')
      throw new Error('Pedido fechado não aceita itens');
    this.itens.push(new Item(produto, quantidade));
  }

  total(): Dinheiro {
    return this.itens.reduce(
      (acc, item) => acc.somar(item.subtotal()),
      new Dinheiro(0, 'BRL')
    );
  }
}

Domain Event

Algo que aconteceu no domínio e interessa a outras partes do sistema. Usa-se verbos no passado: PedidoCriado, TransferenciaRealizada, ContaEncerrada.

class PedidoCriado {
  constructor(
    readonly pedidoId: PedidoId,
    readonly clienteId: ClienteId,
    readonly total: Dinheiro,
    readonly ocorridoEm: Date = new Date()
  ) {}
}

Repository

Abstração de persistência. Para o domínio, o Repository parece um coleção em memória. O domínio nunca sabe se está usando PostgreSQL, MongoDB ou arquivo JSON.

interface PedidoRepository {
  salvar(pedido: Pedido): Promise<void>;
  buscarPorId(id: PedidoId): Promise<Pedido | null>;
  buscarPorCliente(clienteId: ClienteId): Promise<
                                          Pedido[]>;
}

Domain Service

Quando uma operação não pertence naturalmente a uma Entity ou Value Object, criamos um Domain Service. Ele orquestra regras que envolvem múltiplos agregados.

class ServicoDeTransferencia {
  constructor(
    private contas: ContaRepository
  ) {}

  transferir(origemId: ContaId, destinoId: 
  ContaId, valor: Dinheiro): void {
    const origem = this.contas.buscarPorId(origemId);
    const destino = this.contas.buscarPorId(destinoId);

    origem.debitar(valor);
    destino.creditar(valor);

    this.contas.salvar(origem);
    this.contas.salvar(destino);
  }
}

DDD e arquitetura

DDD não exige uma arquitetura específica, mas se encaixa perfeitamente com Arquitetura Hexagonal (Ports & Adapters) e Clean Architecture. A regra de ouro é:

  • O domínio fica no centro, isolado de frameworks, banco de dados e UI.
  • A infraestrutura (HTTP, banco, filas) fica nas bordas e depende do domínio, não o contrário.
  • As dependências apontam para dentro (Dependency Inversion Principle).
src/
├── dominio/    # CORE  sem dependências externas
│   ├── entidades/
│   ├── value-objects/
│   ├── servicos/
│   └── repositorios/ # Interfaces apenas
├── aplicacao/        # Casos de uso (orquestração)
├── infra/            # Implementações concretas
│   ├── persistencia/
│   ├── http/
│   └── fila/
└── shared/           # Código compartilhado

Quando usar DDD?

  • Use quando o domínio do negócio é complexo e cheio de regras.
  • Use quando há especialistas de negócio dispostos a conversar com o time técnico.
  • Não use em CRUDs simples um formulário que só insere dados no banco não precisa de DDD.
  • Não use se o time não tem disciplina para manter a Linguagem Ubíqua viva.
  • Não use como dogma DDD é ferramenta, não religião.

Passos práticos para começar

  1. Entreviste especialistas sente com quem entende do negócio e faça perguntas. Anote os termos que eles usam.
  2. Crie um glossário monte a Linguagem Ubíqua com definições claras de cada termo.
  3. Identifique os Bounded Contexts desenhe fronteiras: o que faz parte de Vendas? O que faz parte de Cobrança?
  4. Modele os Aggregates descubra as raízes e o que pertence a cada uma.
  5. Implemente com TDD o domínio é a parte mais testável do sistema. Teste as regras de negócio sem tocar em banco ou HTTP.
  6. Refatore sem medo o modelo de domínio evolve com o negócio. DDD favorece a mudança.

Exemplo completo: Aluguel de Carros

Vamos modelar um pequeno domínio de locação de veículos usando DDD:

// ——— Value Objects ———
class Placa {
  constructor(readonly valor: string) {
    if (!/^[A-Z]{3}\d[A-Z]\d{2}$/.test(valor))
      throw new Error('Placa inválida');
  }
}

class Quilometragem {
  constructor(readonly valor: number) {
    if (valor < 0) throw new 
    Error('KM não pode ser negativo');
  }
}

class Periodo {
  constructor(readonly inicio: Date, 
  readonly fim: Date) {
    if (fim <= inicio) throw new 
    Error('Período inválido');
  }
  duracaoDias(): number {
    return (this.fim.getTime() - 
    this.inicio.getTime()) / 86400000;
  }
}

// ——— Aggregate: Veiculo ———
class Veiculo {
  constructor(
    readonly id: VeiculoId,
    readonly placa: Placa,
    private kmAtual: Quilometragem,
    private disponivel: boolean = true
  ) {}

  alugar(): void {
    if (!this.disponivel) throw new 
    Error('Veículo indisponível');
    this.disponivel = false;
  }

  registrarDevolucao(kmFinal: Quilometragem): void {
    this.disponivel = true;
    this.kmAtual = kmFinal;
  }
}

// ——— Aggregate: Locacao ———
class Locacao {
  constructor(
    readonly id: LocacaoId,
    readonly veiculoId: VeiculoId,
    readonly clienteId: ClienteId,
    readonly periodo: Periodo,
    readonly tarifaDiaria: Dinheiro,
    private status: 'ativa' | 'finalizada' = 'ativa'
  ) {}

  calcularTotal(): Dinheiro {
    const dias = this.periodo.duracaoDias();
    return new Dinheiro(dias * 
           this.tarifaDiaria.valor, 'BRL');
  }

  finalizar(): void {
    if (this.status === 'finalizada')
      throw new Error('Locação já finalizada');
    this.status = 'finalizada';
  }
}

// ——— Domain Event ———
class VeiculoAlugado {
  constructor(
    readonly veiculoId: VeiculoId,
    readonly locacaoId: LocacaoId,
    readonly clienteId: ClienteId
  ) {}
}

// ——— Repository (interface) ———
interface VeiculoRepository {
  salvar(veiculo: Veiculo): Promise<void>;
  buscarDisponivel(): Promise<Veiculo[]>;
  buscarPorId(id: VeiculoId): Promise<Veiculo | null>;
}

Para se aprofundar

  • Domain-Driven Design: Tackling Complexity in the Heart of Software Eric Evans (o "livro azul")
  • Implementing Domain-Driven Design Vaughn Vernon (o "livro vermelho")
  • Domain-Driven Design Distilled Vaughn Vernon (resumo prático, ótimo para começar)
  • DDD: The First 15 Years Artigos de diversos autores sobre a evolução do DDD

Considerações finais

DDD não é sobre diagramas bonitos ou arquitetura sofisticada. É sobre comunicação. É sobre criar um modelo de software que qualquer pessoa do negócio consegue ler e validar. É sobre colocar a complexidade do domínio no centro e usar padrões que a tornem controlável.

Comece pequeno: escolha um Bounded Context, crie a Linguagem Ubíqua com um especialista, modele alguns Aggregates e escreva testes. O resto vem com a prática.

DDD é uma jornada, não um destino.

Feito!

sexta-feira, 15 de maio de 2026

A defasagem acadêmica em TI: Por que você deve ser um aluno autodidata

O cenário atual do ensino superior de Tecnologia da Informação no Brasil enfrenta um desafio crítico: o abismo entre o que é ensinado em sala de aula e o que o mercado de trabalho realmente exige. Enquanto as tecnologias evoluem em ciclos semestrais, os currículos acadêmicos muitas vezes permanecem estáticos por anos.

O Abismo entre Teoria e Prática

Muitas faculdades focam excessivamente no "saber" acadêmico, títulos, teses e artigos de prateleira, enquanto o mercado valoriza o "saber fazer". Em áreas como Infraestrutura e Redes, ensinar apenas com "giz e saliva" ou slides estáticos é insuficiente. A tecnologia exige laboratório, experimentação e contato direto com o hardware e software moderno.

Os principais problemas da faculdade tradicional:

  • Currículos Defasados: Linguagens e metodologias que não acompanham a velocidade da IA e Cloud Computing.
  • Comodismo Docente: Professores que replicam materiais de décadas atrás sem atualização prática.
  • Falta de Infraestrutura: O alto custo de equipamentos muitas vezes impede que a faculdade ofereça o ambiente real de um Data Center.

A Diferença entre o Aluno "Passivo" e o Autodidata

Muitos estudantes cometem o erro de esperar passivamente pelo material do professor. Se o professor disponibiliza apenas um resumo em slides, o aluno passivo limita seu conhecimento àquela simplificação. Ele espera a lista de exercícios pronta para apenas cumprir uma tarefa.

Em contrapartida, o aluno autodidata não espera. Ele busca direto na fonte: o livro-texto que serviu de base para os slides. Ele resolve os exercícios que não foram pedidos e vai além do que a ementa exige. Esse comportamento é o que separa um profissional comum de um engenheiro de excelência.

Colocando a Mão na Massa: O Exemplo das Redes

Para aprender Redes de Computadores ou Sistemas Distribuídos de verdade, a curiosidade deve ser o motor principal. Não basta ler sobre IPs e protocolos; é preciso simular cenários reais.

Dica Prática: Simulação de Ambiente Real

Um aprendizado sólido envolve criar Máquinas Virtuais (VMs) e configurar a interface de rede em modo Bridge (Ponte). Ao fazer isso, a VM recebe um IP na mesma faixa da sua rede física, permitindo que ela se comporte como uma máquina real na rede.

Isso permite testar:

  • Conectividade entre sistemas distribuídos.
  • Configurações de servidores Web e Banco de Dados.
  • Protocolos de roteamento e segurança de rede.

Considerações finais

As universidades podem fornecer o diploma, mas o aprendizado real vem da curiosidade e da prática constante. Se você quer ser um Full Cycle Developer ou um especialista em infraestrutura, o segredo é ser inquieto: leia os livros, suba seus próprios laboratórios e não dependa exclusivamente da grade curricular. O mercado não paga pelo seu diploma, paga pela sua capacidade de resolver problemas reais.

Referências

Faculdades de TI defasadas" do canal Netfinders Brasil

Feito!

quinta-feira, 14 de maio de 2026

Uma alternativa gratuita e Open Source ao Claude Design

A era das ferramentas de design assistidas por Inteligência Artificial (IA) ganhou um novo capítulo. Se você se encantou com as capacidades do Claude Design, mas se sentiu limitado pelas cotas de uso ou pelo custo da assinatura, o Open Design surge como a solução definitiva. Exploramos como essa ferramenta está democratizando a criação de interfaces de alta fidelidade.

O que torna o Open Design "Insano"?

Diferente das soluções proprietárias, o Open Design não é apenas uma ferramenta de chat; é um ecossistema completo para desenvolvedores e designers que buscam autonomia total. Seus pilares fundamentais são a liberdade de escolha e a robustez técnica.

1. Adeus ao "IA Slop" (Conteúdo Genérico)

Um dos maiores problemas das ferramentas/agentes de IAs atuais é o conteúdo padronizado e sem alma. O Open Design utiliza um mecanismo "anti-slop" que força o LLM a realizar uma breve entrevista de briefing com o usuário antes de gerar o código. Isso garante que o resultado final reflita a identidade da marca e as necessidades reais do público-alvo.

2. Biblioteca de 72 Design Systems

A ferramenta vem carregada com mais de 70 sistemas de design prontos. Quer que seu projeto tenha a estética da Apple ou a robustez de um dashboard corporativo? Basta selecionar o sistema correspondente. Isso elimina horas de trabalho definindo paletas de cores, tipografia e espaçamentos.

3. Independência de Modelo

Você não está preso ao Claude. O Open Design pode ser conectado ao GPT-4, modelos locais via Ollama ou qualquer outra API de LLM, permitindo que você controle seus próprios custos e privacidade de dados.

Como começar: O caminho da instalação

Segue os procedimentos de pré-requisitos e de instalação

Os principais pré-requisitos para o sucesso da instalação incluem:

  • Instalação prévia do Node.js.
  • Git
  • Configuração de chaves de API (OpenAI, Anthropic, Gemini) ou conexão com modelos locais.

Clonar o repositório

git clone https://github.com/nexu-io/open-design.git

Acessar o diretório

cd open-design

Habilitar o gerenciador de pacotes

corepack enable

Instalar dependências

pnpm install

Executar o ambiente de desenvolvimento

pnpm tools-dev run web

Considerações Finais

Embora ainda existam pontos de polimento, como alguns bugs visuais em exportações complexas e uma interface mais rústica que a versão oficial, o Open Design é um marco. Ele prova que o futuro do design assistido por IA será aberto, customizável e acessível a qualquer pessoa com vontade de aprender.

Referências

https://github.com/nexu-io/open-design

Feito!

quarta-feira, 13 de maio de 2026

Elevando o Hermes Agent para o Nível Profissional e Seguro

Se você acompanha a evolução dos agentes de IA autônomos, sabe que o Hermes Agent tem se consolidado como o principal concorrente open-source do OpenClaw. Recentemente, o lançamento do Hermes Desktop mudou o jogo, trazendo uma interface gráfica (GUI) poderosa que permite gerenciar seus agentes com a mesma fluidez de um Claude Desktop, mas com soberania total sobre seus dados.

O Que Torna o Hermes Desktop um "Game Changer"?

  • Gerenciamento Remoto: Rode o "cérebro" na VPS (24/7) e controle-o do seu notebook pessoal.
  • Aprendizado Contínuo: O agente utiliza lógica de auto-evolução, aprendendo com sucessos e falhas.
  • Privacidade (Self-Hosted): Seus dados e códigos não passam por servidores de terceiros.

1. Instalação do Hermes Agent na VPS (Ubuntu)

No servidor, utilizaremos o instalador automático para agilizar o processo:

Atualize o sistema

sudo apt update && sudo apt upgrade -y

Instalação automática do Hermes Agent

curl -fsSL https://get.hermesagent.com | bash

Gere sua API Key segura

openssl rand -hex 32

Configuração de Segurança (Blindagem)

Edite o arquivo .env para garantir que o serviço não fique exposto diretamente à internet:

# Edite as variáveis no .env
SERVER_HOST=127.0.0.1
SERVER_PORT=8642
API_KEY=SUA_CHAVE_GERADA_AQUI
API_SERVER_ENABLE=true

Reinicie o serviço para aplicar:

gateway restart

2. Instalação do Hermes Desktop no Computador

Escolha o procedimento de acordo com seu sistema operacional:

  • Clonar o repositório:
    git clone https://github.com/fathah/hermes-desktop
  • Acessar o diretório: cd hermes-desktop
  • Instalar dependências: npm install (isso baixa o Electron e as bibliotecas necessárias).
  • Gerar o executável: npm run build:sua-plataforma., conforme segue abaixo.
  •   
        npm run build:mac 
        npm run build:win 
        npm run build:linux 
        npm run build:rpm   
      
      

3. A Premissa do Túnel SSH: O "Pulo do Gato"

Para um workflow profissional, não abrimos portas no firewall. Usamos o SSH Port Forwarding para criar um túnel criptografado entre sua máquina e a VPS.

Como abrir o túnel:

No seu terminal pessoal (Windows PowerShell, Linux ou Mac), execute:

ssh -L 8642:127.0.0.1:8642 usuario@ip-da-vps -i ~/.ssh/id_rsa -N

Com o terminal do túnel aberto, configure o Hermes Desktop com os seguintes dados:

  1. Server URL: http://127.0.0.1:8642
  2. API Key: A chave hexadecimal que você gerou na VPS.

Considerações finais

Combinar o Hermes Agent em uma VPS com o Hermes Desktop via Túnel SSH entrega o melhor dos dois mundos: a conveniência de uma interface moderna e a segurança inabalável de uma infraestrutura privada. É a verdadeira autonomia para o desenvolvedor moderno.

Feito!

terça-feira, 12 de maio de 2026

Como reduzir 50% do consumo de créditos do Claude Code sem perder qualidade

Guia técnico para founders, operadores e líderes que usam Claude pesado e não querem sair do plano atual

Por que esse documento existe

Nas últimas semanas, "o Claude está queimando meus créditos" virou uma das frases mais repetidas em comunidades de founder e operador de IA no Brasil.

Um desenvolvedor monitorou o próprio uso e descobriu que 98,5% dos tokens consumidos foram gastos relendo histórico de conversa. Apenas 1,5% saiu na resposta final.

Algo mudou na infraestrutura da Anthropic em 2026. Eles formalizaram estrutura de pico e fora de pico, então seu limite de sessão de 5 horas drena mais rápido nas manhãs de dia útil. Isso é real e importa.

Mas ninguém está falando publicamente o que importa mais. Os hábitos que causam a maior parte do desperdício já existiam antes da mudança. Os limites só tornaram o problema visível.

Esse guia é sobre o mecanismo. Quando você entende como o Claude conta o que você envia, a maior parte do desperdício fica óbvia, e a maior parte das soluções leva menos de 5 minutos.

Ao final desse documento, você vai saber exatamente:

  • Para onde estão indo seus créditos;
  • Quais hábitos mudar essa semana;
  • Como configurar um sistema que corta seu consumo de tokens em 50% ou mais sem mudar de plano e sem perder qualidade;
  • Como integrar Claude otimizado com workflow Lovable na sua operação.

Como o Claude realmente conta o que você envia

Antes dos hábitos, o modelo. Sem entender isso, nenhuma das dicas faz sentido intuitivo.

Toda vez que você envia uma mensagem para o Claude, ele não lê só sua nova mensagem. Ele relê a conversa inteira desde o começo. Toda mensagem que você enviou, toda resposta que ele deu, do turno 1 ao turno atual, tudo isso, antes de gerar 1 palavra da nova resposta.

A janela de contexto não é resumo rolante. É transcrição completa que cresce a cada troca. A conversa acumula custo.

A matemática quando você efetivamente conta:

Considere cada troca (sua mensagem + resposta do Claude) como tendo o mesmo tamanho. Chame de 1 unidade.

  • Turno 1 custa 2 unidades no total.
  • Turno 2 custa 4 unidades (3 entrando porque o histórico inteiro vai junto, 1 saindo).
  • Turno 10 custa 20 unidades por turno.
  • No turno 10, gasto cumulativo: 110 unidades.

As mesmas 10 tarefas em 10 conversas separadas de 1 turno cada: 20 unidades.

Mesmo trabalho. 5,5 vezes mais caro. Só por manter um chat aberto.

Segunda dimensão para entender. O modelo que você usa é multiplicador em todo token da conversa, não só na mensagem atual. Haiku, Sonnet e Opus têm preços diferentes. A mesma conversa no Opus custa cerca de 5 vezes mais que no Haiku. Não porque usa mais tokens, mas porque cada token custa mais.

Duas alavancas então. Custo por token é o multiplicador do modelo. Volume de tokens é quanto seus hábitos geram. Reduza as duas e você vai se perguntar como já bateu limite alguma vez.

Os 6 hábitos que estão drenando seu consumo

A maioria das pessoas assume que o caro é prompt longo e complexo. Não é. O caro é quase sempre 1 desses 6 padrões, frequentemente em combinação.

1. Conversas que rodam tempo demais

Cada turno carrega o histórico inteiro. Uma sessão que vai a 25 mensagens antes da tarefa terminar pagou cerca de 12 vezes o conteúdo que produziu.

A solução não é usar Claude menos. É começar do zero entre tarefas.

2. PDFs e arquivos enviados em formato bruto

Quando você sobe PDF, o Claude extrai texto e também converte cada página em imagem, processando os dois.

O custo:

  • 1.500 a 3.000 tokens por página só para texto, antes do processamento de imagem.
  • Um PDF de 50 páginas pode consumir 75.000 a 150.000 tokens antes da sua primeira pergunta.
  • DOCX, PPTX e XLSX têm overhead similar de metadados de formatação.

Se você sobe o mesmo documento em 5 conversas diferentes, paga esse custo 5 vezes.

3. Screenshots de tela inteira em vez de imagens recortadas

Claude tokeniza imagens por contagem de pixels:

  • Screenshot de tela cheia 1.000x1.000 pixels: ~1.334 tokens.
  • Recorte preciso 200x200 do mesmo elemento relevante: ~54 tokens.
  • Diferença de 25 vezes para a mesma informação útil.

Se você consegue descrever o que está na imagem em 1 ou 2 frases, escreva. Screenshots ganham seu custo quando contêm estrutura visual que linguagem não consegue transmitir: diagrama, layout, mockup. O resto é decoração cara.

4. Modelo errado para a tarefa

A maioria das pessoas usa Sonnet ou Opus por padrão porque parece mais seguro. Na prática, isso aplica multiplicador de 3 a 5 vezes em trabalho que modelo mais barato faria igualmente bem.

Roteador prático:

  • Haiku: perguntas rápidas, rascunhos de email, resumos, formatação, brainstorming.
  • Sonnet: análise complexa, escrita longa, síntese de pesquisa, código real.
  • Opus: raciocínio multi-step genuinamente difícil onde você vai notar a diferença de qualidade.

A maioria das pessoas poderia rodar Haiku em 60-70% das interações diárias sem notar diferença.

5. Conectores ativos em todas as conversas

Cada conector ativo (Google Drive, Slack, Calendar, Linear, Notion) carrega definições de ferramentas no contexto a cada mensagem, use você ou não.

Não é dreno dramático, mas é imposto constante em toda sessão.

Claude tem configuração "carregar ferramentas quando necessário" que muda o padrão de "todos conectores sempre ativos" para "carregar só quando a tarefa pedir". Anthropic recomenda para qualquer pessoa com mais de 10 conectores. Procure no menu "+", em Conectores > Acesso a ferramentas.

6. Prompts vagos que geram loops de correção

Prompt vago não economiza tokens por ser curto. Custa tokens pelas rodadas de correção que gera.

"Melhora isso" produz revisão que você não queria. Aí "não, eu quis dizer o tom, não a estrutura" carrega histórico inteiro mais a revisão indesejada. 3 rodadas disso custam mais que prompt preciso de 40 palavras teria custado.

Como cortar consumo sem mudar seu trabalho

Comece nova conversa quando a tarefa muda

O hábito de maior impacto desse guia, e o que dá menos trabalho.

Quando termina 1 tarefa e começa outra, não continue rolando no mesmo thread. A conversa anterior é peso morto que o Claude relê toda vez que você escreve nova mensagem.

Se precisa de continuidade, use esse prompt no fim da sessão:

Resuma tudo que estabelecemos nessa conversa: decisões tomadas, restrições confirmadas, estado atual do trabalho. Mantenha em menos de 200 palavras. Vou usar isso para começar sessão nova.

Copie a saída. Abra chat novo. Cole como primeira mensagem. Resumo bom tem 500 a 1.500 tokens e substitui 5.000 a 15.000 tokens de histórico.

Edite a mensagem em vez de mandar follow-up

No Claude Chat, dá para clicar em Editar em qualquer mensagem anterior, corrigir, e regenerar. A tentativa que falhou some do contexto ativo em vez de ficar consumindo tokens pelo resto da conversa.

Toda vez que você digita "não, eu quis dizer..." você está adicionando ao histórico e pagando para relê-lo no próximo turno.

Se Claude desviou, edite o prompt que causou, não o seguinte.

Agrupe perguntas em 1 mensagem

3 mensagens separadas custam 3 reloads de contexto inteiro. 1 mensagem com 3 perguntas custa 1 reload.

Em vez de:

"Pode resumir esse artigo?", "Agora liste os pontos principais", "Sugira um título"

Escreva:

Resuma esse artigo, liste os 3 pontos principais e sugira um título. Devolva cada um como bloco separado. Sem comentário entre eles.

Rascunhe a mensagem em bloco de notas antes de enviar. Escrever fora do chat força você a organizar pensamento antes, o que naturalmente gera menos correção.

Converta arquivos antes de subir

Se precisa que Claude analise conteúdo (não layout ou design), extraia o texto antes. Workflow simples:

  1. Abra Google Doc em doc.new
  2. Cole o texto que precisa que o Claude leia
  3. Arquivo > Download > Markdown (.md)
  4. Suba o .md em vez do PDF

Página de PDF que custa 2.000 tokens para processar custa cerca de 100 tokens como texto colado limpo. Para páginas web, extensão como MarkDownload salva qualquer página como texto limpo em 1 clique.

Limite o tamanho da resposta

Claude vem com tendência a responder denso. Tokens de saída contam contra seu uso exatamente como tokens de entrada, e toda essa saída verbosa fica no histórico sendo reprocessada a cada mensagem futura.

Essas restrições são gratuitas e imediatas:

Apenas o código. Sem comentário.

Responda em 1 frase.

3 bullets máximo. Sem explicação.

Aplique as edições e devolva apenas o documento atualizado.

Desligue raciocínio estendido para tarefas simples

Com Opus e Sonnet em modo adaptativo, Claude quase sempre raciocina no nível alto padrão. Esse raciocínio usa tokens cobrados como saída.

Para perguntas casuais, edição rápida ou brainstorm, desligue em Buscar e ferramentas. Trocar de modelo começa conversa nova. Ligar e desligar raciocínio dentro do mesmo modelo não.

Como construir sistema que economiza créditos automaticamente

Use Projects para qualquer documento que você consulta mais de uma vez

Se você sobe o mesmo PDF em 5 conversas diferentes, Claude tokeniza ele 5 vezes.

Projects resolvem. Sobe documento na knowledge base do Project 1 vez. Toda conversa dentro daquele Project consulta sem re-upload e sem contar como upload novo.

Em planos pagos, Projects usam recuperação seletiva. Claude puxa só as seções relevantes em vez de carregar tudo no contexto a cada mensagem.

Duas coisas para manter distintas dentro de Projects:

  • Project Instructions: carrega em toda conversa do Project, sempre. Mantenha enxuto. Papel, restrições, estilo. Toda palavra aqui custa tokens em toda sessão, para sempre.
  • Project Knowledge: seus arquivos, recuperados sob demanda. Coloque material de referência pesado aqui, não nas instruções.

Construa Skills para workflows que rodam mais de uma vez

Toda vez que você explica workflow para o Claude que já explicou antes, está pagando tokens para repetição.

Skills são arquivos de instrução reutilizáveis (SKILL.md) que carregam sob demanda quando Claude reconhece tarefa correspondente.

Forma mais rápida de construir. No fim de qualquer conversa onde você refinou workflow, rode esse prompt:

Baseado em tudo que pedi para você fazer e corrigir nessa conversa, escreva um arquivo SKILL.md que captura esse workflow para eu reusar sem reexplicar. Inclua formato, restrições e regras que apliquei pelas correções.

Salve a saída. Suba no seu Project. A partir desse ponto, você nunca mais reexplica esse workflow.

Combine modelo com tarefa, não com sessão

Versão prática disso é regra que você define 1 vez e segue automaticamente:

  • Abra toda sessão no Haiku.
  • Suba para o Sonnet quando a saída parecer rasa ou perder complexidade.
  • Use Opus só quando você precisar genuinamente de raciocínio multi-step em horizonte longo.

Você nota o teto quando bate nele. Antes de bater, está pagando prêmio por nada.

Agende tarefas pesadas para horários fora de pico

Horários de pico da Anthropic são dias úteis das 5h às 11h Pacífico, equivalente a 9h-15h horário de Brasília. Limites de sessão drenam mais rápido nessa janela.

Para qualquer coisa não sensível ao tempo (análise de documento, sumarização em massa, relatórios semanais, sessões longas de código), mova para tardes ou fins de semana.

Como saber se você finalmente está gastando tokens no que importa

A última peça é medição.

No Claude Code, rode /cost no fim de qualquer sessão para ver quanto aquela sessão gastou. A maior parte das pessoas que começa a checar isso identifica imediatamente:

  • A conversa que rodou 25 turnos quando devia ter sido 3.
  • O PDF que comeu um quarto do orçamento do dia antes da primeira pergunta.

Se está usando API direto, o objeto usage em toda resposta inclui 2 campos que valem acompanhar:

  • cache_creation_input_tokens: o que você pagou para escrever no cache.
  • cache_read_input_tokens: o que você economizou lendo do cache.

Se criação está consistentemente alta e leituras próximas de zero, seu cache não está funcionando e você está pagando preço cheio para reprocessar mesmo conteúdo a cada requisição. Leituras em cache custam cerca de 10% do preço de entrada padrão.

O padrão que sinaliza que seus hábitos mudaram: créditos duram até o fim do dia em vez de sumirem na manhã, sem redução de saída. Esse intervalo entre "acabaram os créditos" e "terminei o que precisava" é a medida de quanto era desperdício.

Lista completa para você fechar essa aba sabendo o que fazer

  1. Chat novo a cada tarefa, sempre.
  2. Edite o prompt que deu errado em vez de corrigir para frente.
  3. Agrupe múltiplas perguntas em 1 mensagem.
  4. Converta arquivos para texto antes de subir.
  5. Recorte screenshots só ao elemento relevante.
  6. Limite tamanho da resposta direto no prompt.
  7. Desligue raciocínio estendido para tarefas simples.
  8. Comece no Haiku, suba só quando sentir o teto.
  9. Desabilite conectores que não está usando na conversa atual.
  10. Coloque documentos recorrentes em Projects, não no chat.
  11. Construa um Skill para qualquer workflow que você explicou mais de duas vezes.
  12. Agende tarefas pesadas para fora de pico (após 11h Pacífico em dias úteis ou fins de semana).
  13. Rode /cost no fim das sessões para ver onde o gasto foi.

Os founders que tiram mais do Claude não são os que estão no plano mais caro. São os que pararam de tratar cada conversa como rascunho que pode rodar quanto eles quiserem.

Como integrar Claude otimizado com workflow Lovable na sua operação

Essa é a camada que falta na maioria dos guias técnicos sobre Claude. Otimizar consumo é metade da equação. A outra metade é amarrar Claude num workflow que entrega operação real, não só mensagens isoladas.

Quando bem integrado com Lovable, Claude vira motor de raciocínio dentro de um app que sua empresa controla. Você tira ele de "ferramenta de chat solta" e coloca em "operação rodando 24h sem você precisar lembrar de abrir conversa".

Como o workflow integrado funciona na prática

A configuração mais eficiente que vi rodando em empresa brasileira de médio porte:

Tela 1 — Lovable como interface principal

Cliente, equipe interna ou cliente final acessa Lovable, não Claude direto. Lovable tem formulários, dashboards, fluxos visuais.

Tela 2 — Claude como motor de raciocínio nos bastidores

Lovable chama API Claude (Haiku ou Sonnet, raramente Opus) para executar tarefas específicas dentro de cada fluxo. Ex: classificar lead, gerar relatório, traduzir resposta de cliente.

Tela 3 — Integração via Make.com ou Supabase Edge Functions

Faz a ponte entre Lovable e API Claude, com cache e logs.

Por que essa configuração economiza créditos

  • Cada chamada é stateless. Não há conversa rolando. Cada tarefa é prompt independente, com contexto enxuto enviado especificamente para aquela operação;
  • Você escolhe o modelo certo para cada chamada. Classificação de lead vai com Haiku. Análise estratégica vai com Sonnet. Você quase nunca precisa de Opus em fluxo de operação;
  • Cache funciona automaticamente. Prompts repetidos (header, instruções, contexto fixo) entram em cache e são reutilizados a 10% do custo;
  • Sem histórico desnecessário. Cada chamada começa limpa. Não tem conversa de 25 turnos consumindo crédito.

Comparativo prático

Operação tradicional com Claude no chat aberto:

  • 100 atendimentos de cliente por dia, cada um com conversa de 8-10 turnos;
  • Modelo padrão Sonnet ou Opus;
  • Consumo médio: 800.000 a 1.500.000 tokens por dia.

Operação integrada Claude + Lovable:

  • 100 atendimentos por dia, cada um stateless via Lovable;
  • Modelo Haiku para triagem, Sonnet para resposta complexa;
  • Cache ativo em prompts fixos;
  • Consumo médio: 80.000 a 200.000 tokens por dia.

Diferença: 4 a 10 vezes menos consumo, com melhor controle de qualidade.

Por onde começar

Se você ainda está usando Claude principalmente no chat aberto:

  1. Identifique 1 fluxo da sua operação que roda mais de 10 vezes por dia;
  2. Construa esse fluxo como tela em Lovable, com formulário no início e resposta estruturada no fim;
  3. Conecte Lovable na API Claude via Supabase Edge Function ou Make.com;
  4. Use Haiku como padrão. Suba para Sonnet só onde qualidade pedir;
  5. Meça consumo antes e depois em 7 dias.

Você vai ver imediatamente onde estavam os tokens desperdiçados.

Stack mínimo recomendado

Para empresa brasileira de médio porte que quer integrar Claude com operação real:

  • Lovable como interface (já tem plano gratuito que aguenta MVP);
  • Supabase como backend (gratuito até 500MB);
  • Claude API com Haiku como padrão (cerca de 10x mais barato que Sonnet);
  • Make.com ou n8n como orquestrador opcional para fluxos com mais de 3 etapas.

Custo total dessa stack para operação de 100 atendimentos por dia: cerca de R$ 200 a R$ 500 mensais. Compare com plano enterprise de Claude direto, que custa 10 a 30 vezes mais.

O que esperar depois de aplicar esse guia

Empresas que aplicam consistentemente as 13 dicas do guia + integração Lovable cortam consumo de Claude em 50% a 80%, mantendo ou aumentando volume de operação.

A diferença não está em pagar plano mais caro. Está em entender como Claude conta o que você envia, e construir workflow que respeita esse mecanismo.

A pergunta que fica é simples. Você vai aplicar isso na próxima semana, ou vai esperar mais 1 mês de fatura crescente para começar a otimizar?

Sobre quem produziu esse documento

Rafael Milagre. Founder do Desenvolver com agentes de IA, plataforma B2B de aplicação de IA em empresas brasileiras. Embaixador Lovable Brasil. Mentor de IA no G4.

Stack pessoal aplicado nesse guia: Claude (Sonnet 4.6 e Haiku), Lovable, Make.com, Supabase, ElevenLabs e Typebot. Operação rodando há mais de 2 anos com método replicável em empresas brasileiras de R$ 1M a R$ 100M de faturamento.

Feito!

segunda-feira, 11 de maio de 2026

Conhecendo as ferramentas para testes de API REST

Testar APIs REST é uma parte essencial do desenvolvimento de software moderno. Felizmente, existem diversas ferramentas que facilitam esse processo, cada uma com suas características únicas. Este artigo apresenta seis das mais populares: curl, Postman, Insomnia, Bruno, HTTPie e Apidog, incluindo instruções de instalação, uso básico e como adicionar autenticação por token em endpoints que exigem autorização.

curl

Instalação

O curl geralmente vem pré-instalado em sistemas Unix-like (Linux, macOS). No Windows, pode ser instalado via:

Uso Básico

Para fazer uma requisição GET simples:

curl https://api.example.com/users

Com Autenticação (Token Bearer)

Para adicionar um token de autenticação no header Authorization:

curl -H "Authorization: Bearer SEU_TOKEN_AQUI" https://api.example.com/protegido

Substitua SEU_TOKEN_AQUI pelo seu token real. Outros métodos (POST, PUT, etc.) seguem o mesmo padrão, apenas alterando o verb (-X POST, -X PUT, etc.).

Postman

Instalação

Baixe o instalador oficial do site postman.com para Windows, macOS ou Linux. Também está disponível como aplicativo Snap (sudo snap install postman) ou via Homebrew (brew install --cask postman no macOS).

Uso Básico

  1. Abra o Postman e clique em "New" → "HTTP Request".
  2. Insira a URL (ex: https://api.example.com/users).
  3. Selecione o método HTTP (GET, POST, etc.) ao lado da URL.
  4. Clique em "Send" para ver a resposta.

Com Autenticação (Token Bearer)

  1. Na aba "Headers" da requisição, clique em "Add".
  2. Em "Key", digite Authorization.
  3. Em "Value", digite Bearer SEU_TOKEN_AQUI.
  4. Clique em "Send".

Alternativamente, use variáveis de ambiente para gerenciar tokens de forma mais segura em múltiplas requisições.

Insomnia

Instalação

Disponível para download no site insomnia.rest. Também pode ser instalado via:

  • Homebrew: brew install --cask insomnia
  • Snap: sudo snap install insomnia
  • Chocolatey (Windows): choco install insomnia

Uso Básico

  1. Abra o Insomnia e clique em "+" → "New Request".
  2. Nomeie a requisição, escolha o método e cole a URL.
  3. Clique em "Send".

Com Autenticação (Token Bearer)

  1. Na requisição aberta, vá para a aba "Headers".
  2. Clique no campo abaixo de "Headers" e selecione "Authorization" no dropdown.
  3. No campo de valor, selecione "Bearer Token" e cole seu token.
  4. Clique em "Send".

O Insomnia também permite salvar tokens em variáveis de ambiente ou em arquivos de configuração para reutilização.

Apidog

Instalação

Apidog está disponível como aplicativo desktop para Windows, macOS e Linux, além de versão web. Pode ser baixado diretamente do site oficial apidog.com. Também oferece versão para deploy privado para equipes que necessitam de solução on-premise.

Uso Básico

  1. Abra o Apidog e clique em "+ New Request" ou use o atalho Ctrl+N.
  2. Insira a URL da API (ex: https://api.example.com/users).
  3. Selecione o método HTTP desejado (GET, POST, PUT, DELETE, etc.) no dropdown ao lado do campo de URL.
  4. Clique no botão "Send" para enviar a requisição e visualizar a resposta.

Com Autenticação (Token Bearer)

  1. Na aba "Headers" da requisição, clique no campo abaixo para adicionar um novo header.
  2. Em "Key", selecione ou digite Authorization.
  3. Em "Value", escolha o tipo "Bearer Token" no dropdown e cole seu token no campo fornecido. Alternativamente, você pode digitar diretamente: Bearer SEU_TOKEN_AQUI.
  4. Clique em "Send" para executar a requisição com autenticação.

O Apidog também permite salvar tokens em variáveis de ambiente ou usar seu sistema de gerenciamento de credenciais integrado para maior segurança e reutilização entre diferentes requisições e ambientes.

Bruno

Instalação

O Bruno é uma ferramenta que pode usar pelo terminal e desktop, com o diferencial em versionamento de requisições via Git. Instale-o via:

Uso Básico

  1. Inicie uma coleção: bruno init minha-colecao
  2. Crie uma nova requisição: bruno request get usuarios (isso cria um arquivo .bru)
  3. Edite o arquivo gerado (ex: minha-colecao/usuarios.get.bru) para definir URL, método, etc.
  4. Execute: bruno run minha-colecao/usuarios.get.bru

Com Autenticação (Token Bearer)

No arquivo .bru, adicione o header de autorização diretamente:

GET https://api.example.com/protegido
Authorization: Bearer SEU_TOKEN_AQUI

Execute como de costume com bruno run. O Bruno é ideal para equipes que preferem armazenar requisições como código-fonte versionado.

HTTPie

Instalação

Instale via:

  • pip: pip install httpie
  • Homebrew: brew install httpie
  • apt (Ubuntu/Debian): sudo apt install httpie
  • Ou veja mais opções em httpie.io/docs#installation

Uso Básico

Para uma requisição GET simples:

http GET https://api.example.com/users

Com Autenticação (Token Bearer)

Adicione o header Authorization diretamente:

http GET https://api.example.com/protegido Authorization:"Bearer SEU_TOKEN_AQUI"

Ou, usando a sintaxe curta para headers:

http GET https://api.example.com/protegido 'Authorization:Bearer SEU_TOKEN_AQUI'

O HTTPie também suporta autenticação via --auth-type e --auth, mas para Bearer Token, definir o header diretamente é o método mais direto.

Considerações Finais

Todas as ferramentas apresentadas cumprem o mesmo propósito fundamental: testar e interagir com APIs REST de forma eficaz. A escolha entre elas depende fortemente de preferências pessoais, contexto de uso e fluxo de trabalho da equipe.

  • curl e HTTPie são excelentes para usuários que preferem trabalhar no terminal, especialmente útil para scripts de automação ou ambientes sem interface gráfica.
  • Postman, Insomnia, Bruno, Apidog, HTTPie oferecem interfaces gráficas intuitivas, recursos avançados como coleções, variáveis de ambiente, geração de código e testes integrados, sendo ideais para exploratory testing e documentação colaborativa.
  • Bruno se destaca por sua abordagem baseada em arquivos, permitindo versionar requisições diretamente no Git, o que é atraente para equipes que adotam práticas de DevOps e Infrastructure as Code.

Não há uma "ferramenta ideal" universal; a melhor escolha é aquela que se alinha melhor com seus hábitos, necessidades específicas e ambiente de trabalho. Experimente algumas delas e adotar aquela que tornar seu processo de teste de API mais eficiente e agradável. Lembre-se: o objetivo é validar suas APIs com confiança, independentemente da ferramenta utilizada.

Boa testagem!

Referências

curl man page

Postman docs

Insomnia

ApiDog

HTTPie Docs

Feito!

sexta-feira, 8 de maio de 2026

Os 8 Níveis de Maturidade em IA para Desenvolvedores

A Inteligência Artificial não vai substituir o desenvolvedor, mas o desenvolvedor que domina a IA certamente substituirá aquele que a ignora. Recentemente, um framework de 8 níveis de maturidade ganhou destaque na comunidade técnica, revelando que a produtividade real não vem da ferramenta que você usa (Cursor, Codex, Claude Code, Gemini CLI, etc), mas do seu modelo mental.

O segredo? A IA é um amplificador de conhecimento. Como diz o ditado: "Um dev ruim com IA apenas fará coisas ruins mais rápido; um dev bom será exponencialmente mais produtivo".

O Framework dos 8 Níveis

A jornada do uso de LLMs (Large Language Models) no desenvolvimento de software segue uma escala de complexidade, confiança e delegação de tarefas:

1. A Base: Do Nível 0 ao 2

Nestes estágios iniciais, a IA é vista apenas como um utilitário de consulta ou assistência visual.

  • Nível 0 (Negacionista): Ignora a ferramenta, acreditando ser apenas um hype passageiro. Escreve tudo à mão.
  • Nível 1 (Cauteloso): Usa o autocomplete básico na IDE. Aceita ou rejeita sugestões linha a linha.
  • Nível 2 (Perguntador): Substitui o Stack Overflow pelo Chat. A IA responde dúvidas teóricas, mas o dev ainda implementa 100% do código.

2. O Grande Salto: Do Nível 3 ao 4

Aqui ocorre a transição mais crítica: deixar de microgerenciar código para especificar comportamento.

  • Nível 3 (Delegador Básico): Pede funções isoladas, mas o processo é lento e exige muitos ajustes manuais ("copia e cola").
  • Nível 4 (Diretor): Você para de pedir "faça essa função" e passa a fornecer contexto e especificações de alto nível.

No Nível 4, o fluxo de trabalho geralmente começa pela definição do comportamento (Test-Driven Development):

// Exemplo de fluxo no Nível 4:
// 1. O Desenvolvedor escreve o teste
test('deve validar CPF com máscara corretamente', () => {
expect(validarCPF('123.456.789-00')).toBe(true);
});

// 2. O Desenvolvedor pede para a IA:
// "Implemente a lógica que faça este teste passar no contexto do projeto X"

3. A Maestria: Do Nível 5 ao 7

Nesta fase, você opera como um gestor de agentes digitais e foca na engenharia de sistemas.

  1. Nível 5 (Orquestrador): A IA usa ferramentas (como agentes) para navegar no projeto, ler arquivos e rodar testes de forma autônoma.
  2. Nível 6 (Multiagente): Você gerencia múltiplos agentes trabalhando em paralelo em diferentes partes da aplicação.
  3. Nível 7 (Arquiteto): O desenvolvedor define contratos de API e design de sistema. O código torna-se uma commodity gerada pelos agentes.

O Paradoxo da Skill: Por que o Hardness importa?

Existe um mito de que a IA facilitará a vida de quem não quer estudar. A realidade é o oposto: quanto mais alto o seu nível de uso de IA, mais conhecimento técnico (Hardness) você precisa.

Para ser um Arquiteto (Nível 7), você precisa dominar:

  • Design Patterns e SOLID.
  • Arquitetura de Software e Escalabilidade.
  • Segurança e Performance de Código.

Sem essa base, você não consegue instruir ao agente de IA corretamente nem julgar se a solução proposta é sustentável a longo prazo. O uso contínuo do LLM cria um ciclo de aprendizado: seu conhecimento técnico guia o agente de IA, e o retorno deste expande sua capacidade de entrega.

Considerações finais: Qual o seu próximo passo?

Se você está estagnado no Nível 2 (tirando dúvidas no chat), seu desafio para esta semana é subir para o Nível 4. Comece a escrever especificações e testes antes de pedir o código. O agente de IA não é uma muleta; é um exoesqueleto. Ela aumenta sua força, mas quem decide a direção é você.

Feito!

quinta-feira, 7 de maio de 2026

O que são as AI Harness e por que elas mudam tudo

Se você já usou o Cursor, o Claude Code, o Codex, o Gemini CLI ou o novo GitHub Copilot e sentiu que a inteligência artificial estava "mágica", lendo seus arquivos e executando comandos como se fosse um humano, temos uma notícia para você: não é magia, é engenharia.

Recentemente, o termo "Harness" (ou arreio/suporte) tornou-se o novo hype do mundo tech. Mas o que isso realmente significa para o desenvolvedor comum e para o futuro dos sistemas autônomos? No presente artigo, vamos desmistificar como os agentes de IA realmente funcionam por "baixo do capô".

1. Desmistificando a "Harness"

Imagine a IA (um modelo como GPT-4 ou Claude ou qualquer outro LLM) como um cérebro superpotente, mas que vive numa redoma de vidro. Ele consegue pensar e falar, mas não tem braços nem pernas. A Harness é a estrutura de código que você constrói ao redor desse cérebro para dar-lhe ferramentas.

"O agente de IA não está dentro do seu computador. Ele é apenas um processador de texto que recebe e envia prompts. A Harness é o que transforma esse texto em ação real no seu disco rígido."

2. O Loop Infinito: Como a IA "age" de verdade

O segredo dos agentes de IA de sucesso não está apenas no modelo, mas no fluxo agêntico. Quando você pergunta algo à sua Harness, acontece um ciclo invisível em três etapas:

A. Envelopamento de Contexto

O sistema não manda apenas a sua pergunta. Ele envia um "manual de instruções" gigante (System Prompt) dizendo à IA exatamente quais ferramentas ela pode usar e como ela deve responder para ser entendida pelo código local.

B. A Chamada de Ferramenta (Tool Call)

A IA percebe que não tem a resposta no seu treinamento. Em vez de inventar, ela responde com um comando específico. Por exemplo:

{
  "action": "run_bash",
  "command": "ls -la ./src"
}

C. Execução Determinística

O código da Harness (escrito em linguagens como Python ou TypeScript) lê esse JSON, executa o comando de verdade no seu sistema operacional, captura a saída de texto e a envia de volta para a IA para que ela possa analisar os dados.

3. Da "Gambiarra" XML ao Function Calling Nativo

Nem sempre foi assim tão fluido. Antigamente, desenvolvedores precisavam "implorar" via prompt para que a IA respondesse em formatos específicos (como tags XML) para que o código conseguisse interpretar as intenções. Hoje, o Function Calling nativo permite que essa comunicação seja direta e precisa.

4. Por que você deve se importar?

Entender que a IA é baseada em código determinístico + prompts muda a forma como construímos software. Não se trata apenas de conversar com um robô, mas de criar sistemas que:

  • Julgam a própria qualidade através de "Judge Models".
  • Medem custos em tokens em tempo real.
  • Decidem qual modelo (Haiku, Sonnet ou Opus) é melhor para cada tarefa.

Para aprender mais sobre como implementar essas ferramentas, confira o canal do Augusto Galego no YouTube, que inspirou esta análise.

Feito!

quarta-feira, 6 de maio de 2026

Como simular a visualização responsiva no celular com esta extensão no Chrome

Testar a responsividade de sites é essencial para desenvolvedores e designers. Em vez de alternar entre múltiplos dispositivos físicos, você pode usar uma extensão do Chrome para simular diferentes tamanhos de tela diretamente no navegador. Este guia mostra como instalar e usar a extensão Mobile simulator - responsive testing tool.

Passo 1: Acesse a página de extensões do Chrome

  1. Abra o Google Chrome.
  2. Clique nos três pontinhos verticais (⋮) no canto superior direito da barra de endereços.
  3. No menu suspenso, selecione More toolsExtensions.
  4. Alternativamente, digite chrome://extensions/ diretamente na barra de endereços e pressione Enter.

Passo 2: Abra a Chrome Web Store

Na página de extensões (chrome://extensions/), procure pelo menu de navegação no canto superior esquerdo (três linhas horizontais ou ☰) e clique nele. Em seguida, escolha a opção Open Chrome Web Store.

Você também pode acessar diretamente a loja através deste link: Chrome Web Store.

Passo 3: Procure pela extensão

Na Chrome Web Store, localize a barra de pesquisa no topo da página. Digite exatamente:

Mobile simulator - responsive testing tool

e pressione Enter. A extensão desejada aparecerá como o primeiro resultado da busca.

Passo 4: Instale a extensão

  1. Clique no cartão ou título da extensão Mobile simulator - responsive testing tool para abrir sua página de detalhes.
  2. Na página da extensão, clique no botão azul Add to Chrome.
  3. Uma caixa de diálogo de confirmação aparecerá; clique em Add extension para concluir a instalação.

Após a instalação, o ícone da extensão (que se parece com um smartphone) será exibido ao lado da barra de endereços do Chrome.

Passo 5: Use o simulador para testar sites

  1. Navegue até o site que você deseja testar pela responsividade.
  2. Clique no ícone da extensão Mobile simulator - responsive testing tool na barra de ferramentas do Chrome.
  3. Um painel será aberto com várias opções de dispositivos pré-definidos (como iPhone X, Pixel 2, iPad, etc.) e um campo para inserir dimensões personalizadas.
  4. Selecione um dispositivo ou digite uma largura e altura específicas (em pixels).
  5. A página será redimensionada automaticamente para simular a tela selecionada, permitindo que você visualize como o site aparece naquele formato.

Dicas para uso avançado

  • Modo retrato/paisagem: Muitos simuladores incluem um botão de rotação para alternar entre orientações.
  • Teste de múltiplos breakpoints: Mantenha o painel da extensão aberto enquanto desenvolve para alternar rapidamente entre tamanhos de tela.
  • User-Agent personalizado: Para testes mais avançados, combine esta extensão com as ferramentas de modo de dispositivo do Chrome DevTools para modificar o User-Agent.
  • Atalhos de teclado: Verifique se a extensão oferece atalhos para acelerar seu fluxo de trabalho (geralmente acessíveis em chrome://extensions/shortcuts).

Considerações finais

A extensão Mobile simulator - responsive testing tool oferece uma maneira rápida e eficiente de validar a responsividade de sites sem sair do Chrome. Ao seguir estes simples passos, você pode integrar testes de tela variados ao seu ciclo de desenvolvimento, economizando tempo e garantindo uma melhor experiência do usuário em todos os dispositivos. Experimente hoje mesmo e aprimore seu fluxo de trabalho de design e desenvolvimento web!

Link direto para a extensão (exemplo - verifique a ID atual na Chrome Web Store): Mobile simulator - responsive testing tool

Feito!

terça-feira, 5 de maio de 2026

ISO 27001: O Padrão Ouro que separa Desenvolvedores Profissionais dos Amadores

Se você é desenvolvedor e ainda pensa que "segurança é problema do setor de TI", prepare-se: a ISO 27001 não é mais apenas um certificado para pendurar na parede – é o divisor de águas entre equipes que entregam software confiável e aquelas que estão um erro de distância do próximo vazamento catastrófico. E sim, isso afeta diretamente o seu código hoje.

Por que a ISO 27001 É o que diferencia "Funciona na Minha Máquina" de "Funciona no Mundo Real"

Vamos falar sério: a maioria dos desenvolvedores enxerga frameworks de segurança como burocracia que atrasa o delivery. Mas aqui está o dado que vai fazer você repensar: 60% das pequenas empresas que sofreram um ataque cibernético fecharam as portas em menos de 6 meses. Não é sobre medo, é sobre matemática simples: vulnerabilidades no seu código são passivos que podem destruir o negócio onde você trabalha.

A ISO 27001 funciona como um Sistema de Gestão de Segurança da Informação (SGIS) que:

  • Mapeia riscos específicos do SEU contexto (nada de checklists genéricos que não se aplicam ao seu stack)
  • Aplica controles proporcionais ao risco real (sem excesso, sem falta)
  • Exige melhoria contínua (porque ameaças de ontem não são as de hoje)
  • Integra segurança no ciclo de desenvolvimento (Secure SDLC não é opcional para profissionais)

O Que Acontece Quando Você Trata ISO 27001 Como "Coisa de Auditor" (Alerta: Não É Bonito)

Lembre-se do vazamento da Equifax? Um simples patch evitou exposição de dados de 147 milhões de pessoas e prejuízo de US$ 1,4 bilhão. Ou o incidente recente com MOVEit Transfer que afetou centenas de organizações? Esses não foram "ataques sofisticados", foram explorações de vulnerabilidades conhecidas que boas práticas de segurança teriam evitado.

No desenvolvimento de software, ignorar práticas alinhadas à ISO 27001 significa:

  • Entregar código com falhas evitáveis que se tornam incêndios em produção
  • Pagar 30x mais para corrigir uma vulnerabilidade em produção vs. durante desenvolvimento (IBM Cost of a Data Breach Report)
  • Perder contratos com empresas que exigem certificação como pré-requisito mínimo
  • Viver em modo de apagão de incêndio вместо de entregar valor real

Como Implementar ISO 27001 sem matar sua velocity (Guia Prático para Devs que Odeiam Burocracia)

Esqueça aquelas imagens de salas cheias de papéis. A ISO 27001 moderna é sobre incorporar segurança no seu fluxo existente e sim, isso pode até acelerar seu time a longo prazo.

1. Comece analisando riscos de verdade (Não a Toa)


//Abordagem amadora: verificar se tem chave e parar por aí
if (secrets.get("API_KEY") == null) {
    throw new IllegalStateException("Missing API key");
}

//Abordagem profissional: 
//entender o CONTEXTO do risco
public class ApiKeyRiskAssessment {
  public RiskLevel evaluateExposure() {
   // Pergunte: 
   // - Qual é a probabilidade de vazamento? 
   //  (Depende do armazenamento, logs, etc.)
   // - Qual seria o impacto? 
   // (Acesso total ao sistema de pagamento? 
   // Apenas leitura de dados públicos?)
   // - Quão fácil é detectar se vazou? 
   // Só assim você decide se investe em cofre de chaves, rotação 
   // automática ou aceita o risco documentado
 }
}

2. Trate segurança como requisito não-funcional (Sério Mesmo)

Sua definição de "Pronto" deve incluir automaticamente:

  • Varredura de dependências vulneráveis (OWASP Dependency-Check, Snyk) no CI
  • Análise estática de segurança (SAST) em cada PR
  • Threat modeling para novas features críticas (não precisa ser BORING 30 minutos em um quadro já ajuda)
  • Treinamento trimestral em secure coding específico para sua stack

3. Documente o suficiente (Não o Máximo)

A ISO 27001 exige evidências, não romance:

  • Mantenha um risk register simples (planilha compartilhada com: risco, probabilidade, impacto, tratamento, responsável)
  • Documente por que você aceitou ou mitigou cada risco (ex: "Aceitamos risco X porque o custo de mitigação > impacto potencial")
  • Use evidências automatizadas (relatórios de scanner, logs de treinamento, screenshots de configuração)

O segredo que ninguém conta: ISO 27001 TE FAZ ENTREGAR MAIS RÁPIDO

Parece contra-intuitivo, mas equipes com SGIS maduro têm menor lead time e maior taxa de sucesso nas entregas. Por quê?

  • Menos emergências de segurança interrompendo sprints importantes
  • Maior confiança para inovar (você sabe que tem processos para gerir o risco novo)
  • Menos retrabalho por falhas que poderiam ser evitadas em design
  • Maior confiança do cliente – fechando negócios maiores e mais estáveis

Seu plano de ação de 15 Minutos (Comece AGORA)

  1. Leia o guia executivo gratuito do Portal 27001 (5 minutos, eles explicam sem jargão de consultoria)
  2. Faça uma avaliação relâmpago (10 minutos):
    • Quais são os 3 maiores riscos de segurança no seu projeto atual?
    • Para cada um: qual é a pior coisa que poderia acontecer se explorado?
  3. Escolha UM controle do Anexo A da ISO 27001 para implementar nesta semana (ex: A.12.6.1 - Gestão de vulnerabilidades técnicas)
  4. Compartilhe isso com sua equipe na próxima retro – segurança é esporte coletivo, não tarefa do "cara de segurança"

"Segurança não é um produto que você compra. É um processo que você incorpora no jeito de trabalhar." Princípio básico da ISO 27001

A ISO 27001 não vai atrapalhar sua velocidade, ela vai proteger o impacto do trabalho que você tanto se esforça para criar. Na próxima vez que alguém disser que "isso é burocracia excessiva", pergunte calmamente: "Você preferiria explicar um vazamento de dados para seus clientes ou passar uma hora documentando como tratamos esse risco específico?"

P.S. Se seu software lida com dados pessoais (LGPD/GDPR), financeiros ou de saúde, a ISO 27001 não é opcional, é o preço de entrada para ser levado a sério no mercado profissional. Não deixe para amanhã o que pode impedir um incidente hoje.

Quer ver como aplicar isso na prática? Veja os recursos da ISO 27001

Feito!

quinta-feira, 16 de abril de 2026

A era da IA Generativa: Ainda vale a pena aprender a programar?

Se você está começando agora na área de tecnologia ou já atua como desenvolvedor Júnior, provavelmente já se deparou com a pergunta: "Por que gastar meses estudando lógica, sintaxe e estruturas de dados se o ChatGPT, Gemini, Claude Code, ou GitHub Copilot escrevem o código em segundos?"

Antes de aprofundarmos, é preciso fazer uma distinção técnica fundamental: quando falamos popularmente em "IA", estamos simplificando um campo vasto da Ciência da Computação. O que utilizamos hoje para gerar código são, na verdade, Agentes de IA baseados em LLMs (Large Language Models - Grandes Modelos de Linguagem). Ferramentas como ChatGPT, Claude, Gemini e GitHub Copilot não "pensam" no sentido humano; elas são modelos probabilísticos altamente sofisticados que preveem o próximo token de código com base em padrões de bilhões de linhas de dados.

A sensação para muitos iniciantes é de que a barra de entrada subiu ou que a profissão está desaparecendo. No entanto, a realidade é oposta: nunca houve um momento tão estratégico para aprender a programar, desde que você entenda a diferença entre escrever código e engenharia de software.

1. O Código como Commodity: A Mudança de Paradigma

Para entender por que a programação ainda é essencial, precisamos primeiro aceitar que o "código" em si tornou-se uma commodity. No mercado de TI, uma commodity é algo que pode ser produzido em massa e tem pouco valor agregado se não houver um diferencial competitivo.

Para o cliente final ou para o dono de uma empresa, o código é apenas o meio para atingir um fim. O cliente não compra "um sistema em Java com Spring Boot", ele compra a solução para um problema de negócio (ex: "preciso que meu estoque seja atualizado em tempo real").

Os agentes de LLM são excelentes em gerar a sintaxe (o "como"), mas eles não possuem visão de negócio nem consciência do contexto organizacional (o "o quê" e o "porquê"). O desenvolvedor que foca apenas na sintaxe será substituído; o desenvolvedor que foca na resolução de problemas usando a tecnologia como ferramenta será promovido.

2. A Armadilha da "Ilusão de Competência"

Um dos maiores riscos para os estagiários e juniores hoje é a ilusão de competência. Isso acontece quando um estudante pede para um agente de IA gerar uma função complexa, o código funciona de primeira e ele assume que "sabe" como aquilo funciona.

O problema surge no momento do debug. Quando o código do LLM falha, e ele falha frequentemente em casos de borda (edge cases) — quem não domina os fundamentos não consegue rastrear o erro. Sem a base, você não é o piloto da IA, você é apenas um passageiro que espera que a máquina não bata.

A diferença entre Operador de Prompt e Engenheiro de Software

Critério Operador de Prompt (Dependente) Engenheiro de Software (Autônomo)
Abordagem Tenta a sorte com prompts até o código "funcionar". Planeja a arquitetura e usa a IA para implementar partes.
Validação Executa o código e, se não deu erro, assume que está correto. Analisa a complexidade temporal, espacial e a segurança.
Manutenção Dificuldade em alterar o código sem quebrar outras partes. Aplica princípios de SOLID e Design Patterns para escalabilidade.
Resolução de Bugs Copia o erro no prompt e reza para a IA corrigir. Usa debuggers, logs e conhecimento de memória/stack para resolver.

3. Os Pilares Inegociáveis: O que você DEVE aprender

Se os agentes de LLM geram o código, onde você deve focar seus estudos? A resposta é: nos fundamentos que a IA não consegue simular com consciência.

  1. Lógica de Programação e Algoritmos: Você precisa entender como os dados fluem. Se você não sabe a diferença entre um Array e uma LinkedList, você não saberá pedir ao LLM a estrutura mais eficiente para o seu caso.
  2. Estruturas de Dados: Saber quando usar um HashMap em vez de percorrer uma lista com um loop for é a diferença entre um sistema que escala e um sistema que trava.
  3. Engenharia de Software:
    • SOLID: Para garantir que o código gerado pela IA não seja um "monolito" impossível de manter.
    • Design Patterns: Saber implementar um Observer ou um Factory para organizar a comunicação entre objetos.
    • Testes Automatizados: O LLM pode gerar o código, mas você deve escrever os testes unitários e de integração para provar que o código é confiável.
  4. Arquitetura de Sistemas: Entender a diferença entre Monólitos, Microsserviços e Serverless. O agente de IA pode escrever a função, mas ele não desenha a topologia da rede ou a estratégia de cache do Redis.

4. O Agente de IA como o "Novo Compilador"

Historicamente, a programação sempre evoluiu para abstrações maiores. Antigamente, programava-se em binário, depois Assembly, depois C, depois linguagens de alto nível como Java e Python.

O uso de LLMs é apenas a próxima camada de abstração. Eles não substituem o programador, eles substituem a digitação manual de códigos repetitivos (boilerplate).


// Exemplo de código commodity 
// (Agente de LLM faz em 1 segundo):
public class User {
    private String name;
    private String email;
    // Getters e Setters repetitivos...
}

O valor real não está em escrever a classe acima, mas em decidir se esse User deve ser persistido em um banco NoSQL para performance de leitura ou em um Relacional para consistência ACID.

5. Considerações finais: O Futuro do Desenvolvedor

A pergunta "Ainda vale a pena aprender a programar?" deve ser substituída por: "Como posso me tornar um desenvolvedor que domina as ferramentas de LLM, em vez de ser dominado por elas?"

A responsabilidade final pelo software continua sendo do ser humano. Se o sistema de um banco falha ou se os dados de um hospital são vazados, a culpa não é do modelo de linguagem que gerou o snippet de código, mas do engenheiro que validou e implementou aquele código sem a devida análise crítica.

Portanto, para os estagiários e juniores: estudem a base. Aprendam a ler código. Questionem cada linha que a IA gera. Transformem-se em arquitetos de soluções. O código é a ferramenta, mas a engenharia é a arte. E a arte, por enquanto, continua sendo humana.

Feito!

quarta-feira, 15 de abril de 2026

Como encontrar e remover arquivos duplicados com essa ferramenta

Você já ficou sem espaço no disco e suspeitou que tinha arquivos duplicados ocupando espaço desnecessário? O fdupes é a ferramenta perfeita para resolver esse problema!

O que é o fdupes?

O fdupes é um programa de linha de comando que identifica arquivos duplicados em um ou mais diretórios. Ele usa uma combinação intelligente de tamanho de arquivo e hash MD5/SHA1 para encontrar duplicatas de forma eficiente, sem precisar comparar byte a byte.

Instalação

Debian/Ubuntu

sudo apt install fdupes

Fedora

sudo dnf install fdupes

Arch Linux

sudo pacman -S fdupes

macOS (via Homebrew)

brew install fdupes

Como usar

Exemplo básico: encontrar duplicatas

fdupes ~/Downloads

Saída esperada:

./Downloads/documento.txt
./Downloads/documento-copia.txt

Ver detalhes dos arquivos duplicados

fdupes -l ~/Downloads

Saída com tamanho:

   1024 ./Downloads/documento.txt
   1024 ./Downloads/documento-copia.txt

Procura recursiva em subdiretórios

fdupes -r ~/Documentos

Primeira opção é a original (mantém primeiro)

fdupes -d ~/Downloads

O fdupes vai pedir confirmação para manter ou excluir cada conjunto de duplicatas.

Opções mais úteis

Lista de opções disponíveis fdupes
Opção Descrição
-r, --recurse Procura recursivamente nos diretórios
-l Lista apenas com detalhes de tamanho
-S, --size Mostra tamanho dos arquivos duplicados
-m, --summarize Mostra estatísticas resumidas
-d, --delete Deleta duplicatas (cuidado!)
-N, --noprompt Com -d, deleta sem pedir confirmação
-f, --omitfirst O primeiro arquivo do grupo é considerado original
-n, --noempty Ignora arquivos vazios
-H, --hardlinks Trata hard links como duplicatas
-q, --quiet Modo silencioso
-1, --sameline Lista em uma única linha
-h Mostra ajuda

Dicas de uso

Encontrar e listar sem deletar (modo seguro)

fdupes -rl ~/Downloads | less

Exemplo prático completo

1. Primeiro, descubra onde estão as duplicatas

fdupes -r ~/Downloads

2. Liste os detalhes para ver quanto espaço pode liberar

fdupes -rl ~/Downloads

3. Crie uma pasta para backups antes de excluir

mkdir ~/duplicadas_backup

4. Copie as duplicatas para a pasta de backup

fdupes -r ~/Downloads -d ~/duplicadas_backup

5. Confirme que as cópias estão na pasta de backup

ls ~/duplicadas_backup

Por que usar fdupes?

  • Economia de espaço: Arquivos duplicados podem consumir gigabytes
  • Organização: Ajuda a limpar projetos e pastas bagunçadas
  • Identificação de projetos duplicados: Encontra projetos/clones repetidos
  • Limpeza de backup: Remove cópias desnecessárias

Cuidado!

  • Sempre use -l primeiro para listar sem alterar nada
  • Faça backup antes de deletar com -d
  • O fdupes pode não funcionar bem com links simbólicos
  • Arquivos com metadados diferentes mas conteúdo igual são considerados duplicatas

Referência

fdupes man page - Linux Command Library

Feito!

terça-feira, 14 de abril de 2026

MUDANÇA NO CNPJ: O que você precisa fazer no seu projeto

A Receita Federal confirmou: a partir de julho de 2026, o CNPJ será alfanumérico (com letras e números). Novo formato: 14 caracteres sendo 12 primeiros alfanuméricos + 2 dígitos verificadores (DV) numéricos.

Isso vai quebrar muitos sistemas. Vamos aos impactos:

1. CNPJ como Integer no banco de dados

Problema: CNPJs novos terão letras (ex: 12AB3456C0001). Tipo INTEGER não suporta letras.

Solução: Migrar coluna para VARCHAR(18) ou CHAR(14), mantenham o tamanho fixo para compatibilidade com sistemas legados.

2. CNPJ como Primary Key

Problema: PKs inteiras não funcionam + índices unique baseados em Integer falharão para novos registros.

Solução:

  • Alterar tipo da PK para VARCHAR(18) ou CHAR(14)
  • Atualizar foreign keys em todas as tabelas relacionadas
  • Regenerar índices unique

3. Validação de DV (Módulo 11)

Problema: Algoritmo atual não reconhece letras.

Solução: Ver algoritmo em pseudocódigo abaixo.

4. Máscaras e formats existentes

Problema: XX.XXX.XXX/0001-XX pode não funcionar com letras.

Solução: Criar máscara flexível que aceite alfanumérico.

5. Integração com APIs e ERPs

Problema: Sistemas legados que recebem CNPJ como número quebrarão.

Solução: Revisar APIs, contratos, e integrações -> tipar como string, não integer.

Cronograma

  • Julho 2026: Primeiros CNPJs alfanuméricos emitidos
  • CNPJs atuais: Permanecem válidos (não precisam migrar)

Ação imediata

  • ✓ Audit no banco: identifique colunas CNPJ com tipo Integer
  • ✓ Planeje migração para VARCHAR/CHAR
  • ✓ Teste o novo algoritmo de validação
  • ✓ Revise integrações externas

Algoritmo de Validação do DV (Módulo 11)

O algoritmo a seguir funciona para CNPJs numéricos (atuais) e CNPJs alfanuméricos (novos).

Tabela de Conversão

Caractere Valor para cálculo
0-9 0-9 (valor numérico)
A 17
B 18
C 19
D 20
E 21
F 22
G 23
H 24
I 25
J 26
K 27
L 28
M 29
N 30
O 31
P 32
Q 33
R 34
S 35
T 36
U 37
V 38
W 39
X 40
Y 41
Z 42

Pseudocódigo

FUNÇÃO obterValorCaractere(caractere):
    SE caractere >= '0' E caractere <= '9':
        RETORNAR inteiro(caractere)
    FIM SE
    
    SE caractere >= 'A' E caractere <= 'Z':
        codigoASCII <- inteiro(caractere)
        RETORNAR codigoASCII - 48
    FIM SE
    
    RETORNAR -1  // Caractere inválido
FIM FUNÇÃO


FUNÇÃO calcularDV(cnpj, posicaoDV):
    // posicaoDV = 1 para primeiro DV, 2 para segundo DV
    
    SE posicaoDV == 1://Primeiros 12 caracteres do CNPJ
        pesos <- [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
        digitos <
    SENÃO://Primeiros 12 caracteres do CNPJ + primeiro DV
        pesos <- [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
        digitos <
    FIM SE
    
    soma <- 0
    PARA i DE 0 ATÉ comprimento(digitos) - 1:
        valor <- obterValorCaractere(digitos[i])
        soma <- soma + (valor * pesos[i])
    FIM PARA
    
    resto <- soma MOD 11
    
    SE resto <= 1:
        DV <- 0
    SENÃO:
        DV <- 11 - resto
    FIM SE
    
    RETORNAR DV
FIM FUNÇÃO


FUNÇÃO validarCNPJ(cnpj):
    // Remove máscara (pontos, barras, hífen)
    cnpjLimpo <- limparMascara(cnpj)
    
    SE comprimento(cnpjLimpo) != 14:
        RETORNAR FALSO
    FIM SE
    
    // Extrai os DVs informados no CNPJ
    dv1Informado <- inteiro(cnpjLimpo[12])
    dv2Informado <- inteiro(cnpjLimpo[13])
    
    // Calcula primeiro DV
    dv1Calculado <- calcularDV(cnpjLimpo, 1)
    
    SE dv1Informado != dv1Calculado:
        RETORNAR FALSO
    FIM SE
    
    // Calcula segundo DV
    dv2Calculado <- calcularDV(cnpjLimpo, 2)
    
    SE dv2Informado != dv2Calculado:
        RETORNAR FALSO
    FIM SE
    
    RETORNAR VERDADEIRO
FIM FUNÇÃO

Exemplo de Implementação em JavaScript

function obterValorCaractere(char) {
    if (char >= '0' && char <= '9') {
        return parseInt(char, 10);
    }
    const codigoASCII = char.charCodeAt(0);
    if (codigoASCII >= 65 && codigoASCII <= 90) {
        return codigoASCII - 48;
    }
    return -1;
}

function calcularDV(cnpj, posicaoDV) {
    const pesos = posicaoDV === 1 
        ? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
        : [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
    
    const digitos = posicaoDV === 1 
        ? cnpj.substring(0, 12) 
        : cnpj.substring(0, 12) + cnpj.charAt(12);
    
    let soma = 0;
    for (let i = 0; i < digitos.length; i++) {
        const valor = obterValorCaractere(digitos[i]);
        soma += valor * pesos[i];
    }
    
    const resto = soma % 11;
    return resto <= 1 ? 0 : 11 - resto;
}

function validarCNPJ(cnpj) {
    const cnpjLimpo = cnpj.replace(/[.\/-]/g, '');
    
    if (cnpjLimpo.length !== 14) {
        return false;
    }
    
    const dv1 = parseInt(cnpjLimpo[12], 10);
    const dv2 = parseInt(cnpjLimpo[13], 10);
    
    if (calcularDV(cnpjLimpo, 1) !== dv1) {
        return false;
    }
    
    if (calcularDV(cnpjLimpo, 2) !== dv2) {
        return false;
    }
    
    return true;
}

// Testes
// true (CNPJ atual válido)
console.log(validarCNPJ('83.847.133/0001-25')); 

// true (CNPJ novo fictício válido)
console.log(validarCNPJ('53.RRV.R8C/9PHH-34')); 

// false
console.log(validarCNPJ('12345678900013')); 

// false
console.log(validarCNPJ('77.888.364/0001-81')); 

// false
console.log(validarCNPJ('X3.VGJ.TBC/0001-43')); 

Referências

Instrução Normativa RFB nº 2.229/2024

Nota Técnica Conjunta CNPJ Alfanumérico 2025.001

Nota Técnica Conjunta COCAD/SUARA/RFB nº 49/2024

A mudança não é complexa, mas exige atenção. Quem esperar o dia pode enfrentar problemas de última hora.

Feito!

segunda-feira, 13 de abril de 2026

Como a matemática criou a confiança digital

Se você faz um Pix, salva um arquivo na nuvem ou simplesmente faz login em uma rede social hoje, você está utilizando uma das tecnologias mais disruptivas da história da computação: o SSL/TLS.

Mas nem sempre foi assim. Em 1994, enviar o número do seu cartão de crédito pela internet era o equivalente tecnológico a gritar sua senha no meio da rua. Qualquer pessoa no caminho do pacote de dados poderia ler o conteúdo. A internet não foi desenhada para ser segura; ela foi desenhada para compartilhar pesquisas acadêmicas.

A mudança de paradigma veio com um nome: Taher Elgamal, e uma sacada matemática que transformou a confiança em equação.

O Problema da "Via Expressa Aberta"

Nos primórdios da web, o protocolo HTTP era como um cartão-postal. Cada roteador e servidor pelo qual a informação passava podia "ler o verso" do cartão. Para que o e-commerce existisse, precisávamos de um envelope blindado.

Foi na Netscape que Elgamal e sua equipe desenvolveram o SSL (Secure Socket Layer). Embora o início tenha sido conturbado (a versão 1.0 foi quebrada em minutos), a versão 2.0 lançada em 1995 mudou o mundo. Hoje, essa tecnologia evoluiu para o TLS (Transport Layer Security), que protege mais de 97% do tráfego web atual.

A magia da assimetria: O truque da tinta

O que torna o SSL/TLS tão poderoso é o conceito de funções unidirecionais. Imagine o seguinte:

Misturar tinta azul e amarela para fazer verde é trivial.

Tentar separar a tinta verde de volta em azul e amarelo é praticamente impossível.

Na criptografia, usamos a exponenciação modular e a fatoração de números primos gigantes. Multiplicar dois números primos de 300 dígitos é algo que seu celular faz em nanossegundos. No entanto, pegar o resultado dessa multiplicação e tentar descobrir quais foram os dois números primos originais é uma tarefa que levaria milhões de anos para os melhores supercomputadores do mundo.

Essa assimetria é o que permite que você e um servidor estabeleçam uma conexão segura sem nunca terem trocado uma chave secreta antes.

Por que isso importa para você leitor e Desenvolvedores em geral?

Como engenheiros de software, muitas vezes tratamos o "cadeado no navegador" como uma commodity, mas há três lições fundamentais na história de Elgamal:

  • Padrões Abertos vencem:
  • Elgamal convenceu a Netscape a tornar o SSL gratuito e aberto, inclusive para concorrentes. Sem isso, a internet teria se fragmentado em silos proprietários e inseguros.

  • Performance vs. Segurança:
  • O TLS 1.3 hoje faz o handshake de segurança em apenas uma "ida e volta" (round-trip), provando que segurança robusta não precisa sacrificar a experiência do usuário.

  • A Matemática como Base:
  • Enquanto algoritmos de recomendação ganham as manchetes, é a criptografia que sustenta os 6,4 trilhões de dólares do e-commerce global.

O Legado de Elgamal

Hoje, Taher Elgamal é reconhecido como o "Pai do SSL". Seu trabalho prova que a engenharia de contexto e a aplicação de conceitos matemáticos puros podem resolver problemas estruturais da sociedade.

Cada vez que você inicia uma transação ou protege um endpoint com HTTPS, você está executando a visão de que a privacidade não deve ser uma exceção, mas o padrão.

A segurança não é um plugin que você adiciona ao final do projeto; é o alicerce matemático que permite que o usuário confie no seu código.

Feito!

quinta-feira, 9 de abril de 2026

Dívida Cognitiva: O "Juro Invisível" que está fritando o cérebro dos desenvolvedores

A promessa era sedutora: os agentes dos provedores de LLM faria o trabalho pesado, geraria o código repetitivo e nós, desenvolvedores, teríamos mais tempo para a estratégia e a criatividade. Mas, após alguns anos de uso intenso de Copilots e agentes, a realidade bateu à porta. Não estamos trabalhando menos; estamos processando informação em uma velocidade inumana.

Esse fenômeno já tem nome: AI Brainfry. E a causa raiz é o que a pesquisadora Margaret-Anne Storey define como Dívida Cognitiva.

O que é Dívida Cognitiva?

Se a dívida técnica é o custo de atalhos tomados no código, a dívida cognitiva é o custo de atalhos tomados no nosso entendimento.

Quando você escreve cada linha de uma função, você constrói um modelo mental daquela lógica. Quando você pede para um agente de um provedor de LLM gerar 200 linhas de código e apenas "dá um joinha", você está pulando a fase de construção desse modelo. O código está lá, funciona (por enquanto), mas você não "sernente" o sistema.

"Dívida cognitiva não quebra o build, quebra a capacidade do time de pensar."

O Alerta de Margaret-Anne Storey

A professora canadense Margaret-Anne Storey observou isso na prática em suas aulas. Equipes de alunos que utilizavam um agente de IA (em algum provedor de LLM) de forma desenfreada chegavam a um ponto de paralisia total por volta da oitava semana. Eles não conseguiam fazer uma alteração simples sem quebrar o sistema. O motivo? Ninguém conseguia explicar por que o design era daquele jeito. O entendimento compartilhado havia desaparecido.

O Perigo do "Vibe Coding" e da produtividade ilusória

Estamos vivendo a era do Vibe Coding. Você abre o Cursor, orquestra três ou quatro agentes, vê o código fluindo na tela e sente que é um super-humano. Mas será que essa velocidade é real?

Estudos recentes mostram que supervisionar uma IA exige 14% mais esforço mental e causa 12% mais fadiga do que codar manualmente. Isso acontece porque o cérebro humano não é tão paralelo quanto um LLM. Tentar acompanhar múltiplos agentes gerando soluções simultâneas cria uma sobrecarga de informação que nos deixa exaustos ao final do dia, mesmo sem termos digitado uma linha de código sequer.

Insights para um Desenvolvimento Sustentável

A solução não é abandonar a IA (agentes dos provedores de LLM), o mercado mudou e não há volta. O desafio é aprender a usá-la de forma saudável e estratégica. Aqui estão alguns pontos cruciais:

  1. A IA deve ampliar o entendimento, não substituí-lo:
  2. Use a ferramenta para explicar trechos complexos, não apenas para gerá-los.

  3. O "CPF" no Pull Request é seu:
  4. Se o código foi para produção, a responsabilidade técnica e moral é do humano. Se você não consegue explicar o que o código faz, você não deveria aprová-lo.

  5. Foco na Arquitetura e Julgamento:
  6. Em um mundo onde o código é commodity, o diferencial do desenvolvedor sênior passa a ser o julgamento crítico. Saber quando dizer não a uma sugestão da IA (agente de algum provedor de LLM) é mais importante do que saber fazer o prompt.

  7. Cuidado com a métrica de tokens:
  8. Ignorar a qualidade em prol de "consumir tokens" ou "gerar volume" é o caminho mais rápido para criar um legado impossível de manter.

Considerações finais

O uso de agentes e ferramentas como o ChatGPT, Codex, Claude Code ou o Gemini não deve ser abandonado, mas sim ressignificado sob uma ótica de Engenharia de Contexto e governança técnica. Ser um profissional "AI-powered" em 2026 exige que você atue como um arquiteto e revisor crítico, e não apenas como um consumidor de código. O uso inteligente dessas ferramentas envolve utilizá-las para acelerar a implementação de padrões que você já domina, mantendo o controle total sobre a arquitetura e garantindo que cada linha gerada seja compreendida e integrada ao modelo mental do projeto. O segredo é garantir que os agentes do provedor de LLM (como Codex, Claude Code, Gemini CLI, etc) trabalhem para o sistema, e não que você se torne um refém da complexidade que eles geram.

Em vez de simplesmente delegar a autoria, o uso profissional desses agentes exige que o desenvolvedor atue como um orquestrador estratégico, utilizando-os para validar hipóteses, acelerar a escrita de especificações e implementar padrões de arquitetura sob rigorosa supervisão humana. Utilizar essas ferramentas de forma inteligente significa manter o controle do "leme" técnico, garantindo que a velocidade de entrega nunca atropele a integridade do modelo mental e a sustentabilidade do código a longo prazo.

Referência

STOREY, Margaret-Anne. The Triple Debt of AI-Assisted Software Development: Technical, Cognitive, and Cultural. arXiv:2603.22106 [cs.SE], 2026. Disponível em: https://arxiv.org/pdf/2603.22106

O que você tem sentido no seu dia a dia? A IA tem libertado sua mente ou fritado seus neurônios? Deixe seu comentário abaixo!

Feito!