anúncios

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!

quarta-feira, 8 de abril de 2026

Instalando o software IRPF 2026 no Linux

Procedimentos de instalação do software IRPF 2026 no Linux (qualquer distro)

Pré-requisitos:

Ter o openJDK 1.8 ou superior configurado no PATH do SO.

Copie a linha seguinte e cole no terminal da distribuição Linux que estiver usando ou clique no link https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/download/pgd/dirpf

Setar a permissão para execução

$ chmod +x IRPF2026Linux-x86_64v1.1.sh.bin $ ./IRPF2026Linux-x86_64v1.1.sh.bin

Na primeira tela, clique no botão "Avançar"

Clique no botão "Avançar".

O próximo passo é escolher o diretório de instalação que deseja salvar, clique em "Avançar".

Confirme a instalação no botão "Avançar".

Por fim, clique no botão "Terminar".

Pronto, a instalação do IRPF2026 está concluída, poderá abrir no atalho que foi criado na área de trabalho.

Agora, pode fazer a sua declaração do imposto de renda no Linux.

Após fazer a sua declaração e salvar o comprovante que fez a declaração do imposto de renda 2026, se quiser, pode desinstalar o software IRPF 2026.

Execute no terminal.

~/ProgramasRFB/IRPF2026/uninstall

Confirme o tipo de desinstalação (padrão ou completa), clique no botão "Avançar" e confirme.

Feito!

terça-feira, 7 de abril de 2026

Além do Hype: O guia de sobrevivência em IA para Desenvolvedores

Se você abre o LinkedIn ou o YouTube hoje, é bombardeado por siglas: NLP, LLM, RAG, MCP, Agentes. Parece que a cada 24 horas o que você aprendeu ontem se tornou obsoleto. A sensação de insegurança é real, mas aqui vai um segredo: as ferramentas mudam, mas os fundamentos são os mesmos desde a década de 50.

No presente artigo, vamos dissecar os conceitos apresentados pelo canal balta, separando o que é barulho do que é base sólida para a sua carreira.

  1. IA não é uma "Ferramenta", é uma Categoria
  2. Muitas vezes ouvimos que "o Google lançou uma nova IA". Tecnicamente, isso está errado. A Inteligência Artificial é um termo "guarda-chuva" cunhado em 1956. O que estamos vendo hoje são novos modelos e arquiteturas dentro dessa categoria.

    Entender isso acalma os nervos. Você não precisa aprender uma "nova IA" toda semana; você precisa entender como os novos modelos se comportam dentro do ecossistema que já existe.

  3. O coração do código: Redes Neurais e Probabilidade
  4. Tudo o que vemos hoje, do ChatGPT, Gemini, Claude Code e etc baseia-se em Redes Neurais Artificiais.

    O que são: Microfunções (neurônios) organizadas em camadas.

    Como funcionam: Elas não "pensam". Elas recebem um input, processam através de pesos matemáticos e entregam uma probabilidade.

    Quando você interage com um LLM (Large Language Model), ele está apenas prevendo o próximo token (pedaço de palavra). Não existe um processo criativo ou consciência; existe estatística de alto nível.

    Por isso a alucinação acontece: a função do provedor de LLM é continuar o texto, mesmo que ela precise inventar algo para que a frase faça sentido gramatical.

  5. Onde está o valor real? (Dica: não é no modelo)
  6. Qualquer pessoa com R$ 100 pode assinar o ChatGPT Plus. Se o seu diferencial como dev ou empresa for apenas "usar o provedor de LLM", você não tem diferencial.

    O verdadeiro ouro está nos dados.

    Modelos como o GPT-4, Gemini, Claude Code foram treinados com dados públicos da internet (que muitas vezes são ruidosos ou desatualizados). O valor competitivo surge quando você conecta esses modelos aos seus dados privados e estruturados.

  7. O Trio de Ferro: RAG, MCP e Agentes
  8. Para tirar o provedor de LLM do "chat" e levá-la para o mundo real, usamos três pilares:

    • RAG (Retrieval-Augmented Generation)
    • O provedor de LLM é como um gênio que leu toda a biblioteca do mundo até 2023, mas não sabe o que aconteceu hoje de manhã na sua empresa. O RAG é a técnica de "dar um livro aberto" para o provedor de LLM consultar antes de responder. Você fornece o contexto (seus PDFs, bancos de dados) e ela responde com base nisso.

    • MCP (Model Context Protocol)
    • Não basta o provedor de LLM ler; ele precisa agir. O MCP é um protocolo que padroniza como o provedor de LLM se comunica com o seu sistema. É através dele que a IA entende que pode "chamar uma função" para emitir uma nota fiscal ou consultar um estoque.

    • Agentes e Skills
    • Agentes: São programas autônomos que decidem como resolver um problema passo a passo.

      Skills: São habilidades passivas (ex: saber formatar um texto em Markdown) que os agentes utilizam para cumprir sua missão.

  9. Por que os Programadores não vão sumir?
  10. O provedor de LLM é estocástica (imprevisível). Ela pode dar uma resposta diferente para o mesmo comando. Sistemas críticos, como transferências bancárias ou diagnósticos médicos, exigem determinismo.

    A engenharia de software continua sendo sobre como construir sistemas robustos, seguros e escaláveis. A IA será uma peça desse quebra-cabeça, mas o "arquiteto" que decide onde cada peça se encaixa ainda é você.

Considerações finais

O segredo para não temer aos provedores de LLM é parar de olhar para a interface de chat e começar a olhar para a arquitetura. Entender tokens, embeddings, camadas e protocolos transforma você de um simples "usuário de ferramentas" em um engenheiro capaz de construir o futuro.

Feito!

segunda-feira, 6 de abril de 2026

O novo "Contrato" do Desenvolvedor: Por que os agentes de IA não vão salvar seu código (mas podem te tornar um Arquiteto)

A era do desenvolvimento assistido por Inteligência Artificial (IA) chegou com uma promessa tentadora: "Copie e cole sua ideia, e nós geramos o código". E, de fato, os agentes de IA dos provedores de LLM (ChatGPT/Codex da OpenAI, Claude Code da Anthropic, Gemini do Google e etc) são impressionantes. Eles escrevem funções em segundos, sugerem refatorações e explicam bugs complexos.

No entanto, há um coro crescente nos fóruns de programação: "A IA introduziu um bug sutil no meu projeto" ou "Pedi X e ela entregou Y, totalmente fora do contexto".

A verdade crua é: a responsabilidade pelo código final continua sendo, 100%, do desenvolvedor.

Os agentes de IA não são "mágicos"; eles são ferramentas de processamento de linguagem extremamente avançadas. Atribuir a culpa de um bug a um LLM é como culpar o compilador por um erro de sintaxe. O erro estava na intenção ou na instrução.

Vamos explorar o paralelo que define essa nova fase do desenvolvimento e os desafios técnicos onde os agentes de IA ainda falham terrivelmente.

O Paralelo com o PO: Prompt raso = Requisito raso

Imagine a cena (clássica para qualquer Dev): o Product Owner (PO) ou o Scrum Master (SM) chega com um requisito de uma linha: "Precisamos de um sistema de login". Você, o desenvolvedor, acena, acha que entendeu e implementa um sistema simples com email/senha. Na entrega, o PO diz: "Mas eu precisava de login social (Google/Apple) e autenticação em dois fatores (2FA)".

O resultado? Frustração e retrabalho. De quem é a culpa? Do desenvolvedor que aceitou o requisito sem questionar.

O mesmo se aplica aos agentes de IA dos provedores de LLM. Um prompt raso é um requisito raso. O agente, treinado para ser útil, vai "adivinhar" o resto do contexto com base nos seus dados de treinamento. É aqui que nascem as "alucinações": o agente cria uma solução que parece correta, mas que não se encaixa no seu ecossistema específico.

A lição: Do mesmo modo que exigimos requisitos completos do PO, devemos fornecer contextos completos (prompts detalhados) aos agentes. Se você não tirar as dúvidas antes de gerar o código, o agente vai entregar o que "acha" que você quer, não o que você precisa.

Onde os agentes de IA falham e onde você é indispensável?

Mesmo com o melhor prompt do mundo, os agentes de IA atuais têm limitações estruturais que exigem o raciocínio humano.

  1. A falta de visão sistêmica e arquitetural
  2. Os agentes de IA são excelentes em resolver o "problema da função" atual (ex: ordenar uma lista). Eles muitas vezes falham em enxergar o sistema como um todo.

    O risco: Ao pedir para alterar um módulo de pagamento para aceitar uma nova moeda, o agente pode não perceber que essa mudança quebra a conciliação financeira em um microsserviço legado do outro lado da arquitetura. Ele foca no contexto imediato (o arquivo aberto), não na integridade arquitetural a longo prazo.

  3. A "última milha" da depuração profunda (Deep Debugging)
  4. Bugs de lógica simples? Os LLMs resolvem. Mas e as condições de corrida (race conditions)? Vazamentos de memória sutis? Bugs que só ocorrem sob alta latência de rede?

    O risco: O agente trabalha com o código estático ou logs que você fornece. Ele não "sente" o ambiente de execução. Depurar um erro que só acontece quando o banco de dados está a 90% de carga e o usuário cancela a requisição no meio do handshake ainda exige o instinto detetive de um desenvolvedor experiente.

  5. Segurança e a "alucinação de pacotes"
  6. Este é um risco crescente e crítico (Supply Chain Security).

    O risco: Às vezes, o agente sugere bibliotecas ou pacotes que não existem ou, pior, que foram criados por atacantes com nomes similares (typosquatting) para injetar código malicioso. Se o desenvolvedor apenas copia e cola (npm install), ele abre uma brecha de segurança grave. A curadoria de dependências continua sendo uma tarefa estritamente humana.

  7. As regras de negócio implícitas
  8. A documentação do Jira raramente contém 100% da verdade. O conhecimento real muitas vezes está na cabeça dos desenvolvedores sêniores.

    O risco: O agente de IA pode sugerir remover um trecho de código "feio" ou "redundante" por um ( Clean Code). O que ele não sabe é que esse código trata uma exceção bizantina de um cliente que representa 40% do faturamento da empresa. A IA não conhece a história e a política por trás do código.

O Caminho: Spec-Driven Development (SDD)

Então, como usar os agentes de IA dos provedores de LLM de forma profissional? O segredo não é "pedir código", é "pedir validação".

Esta é a fronteira entre o amadorismo e o profissionalismo no uso de IA:

  • Brainstorm com o agente:
  • Use a skill de brainstorm do agente. Diga: "Tenho essa ideia de recurso. Que perguntas você me faria para garantir que entende todos os requisitos de negócio, técnicos e de segurança?".

  • Geração da Spec.md:
  • Com base nas suas respostas, peça ao agente para gerar um arquivo Spec.md (Especificação Técnica) detalhando a implementação.

  • Validação Humana (SEU PAPEL):
  • Leia a especificação. É o que o negócio precisa? Segue a arquitetura? É seguro? Valide a Spec.

  • Geração do Código:
  • Só depois de validar a Spec, peça para o agente gerar o código com base nela.

É mais barato corrigir um parágrafo de texto do que 500 linhas de código em alguma linguagem de programação.

Considerações finais

O desenvolvimento de software não mudou fundamentalmente; as ferramentas mudaram. O maior desafio hoje não é escrever código, mas sim saber o que pedir e garantir que o que foi entregue é o que o negócio precisa.

O desenvolvedor deixou de ser apenas um construtor de tijolos para ser o arquiteto que revisa cada viga da obra. Os agentes de IA são seus operários mais rápidos, mas você ainda é o responsável pelo prédio não cair.

Feito!

terça-feira, 31 de março de 2026

Resolvendo erro 404 ao instalar pacotes no Ubuntu

Recentemente, ao tentar instalar o libsqlite3-dev no Ubuntu 24.10 (Oracular), deparei com o seguinte erro:

Err:1 http://security.ubuntu.com/ubuntu oracular-updates/main amd64 libsqlite3-dev amd64 3.46.1-1ubuntu0.2
404 Not Found [IP: 2a06:bc80:0:1000::17 80]
Error: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

Por que isso acontece?

O Ubuntu segue um ciclo de lançamento semestral. A cada 6 meses, uma nova versão é lançada, e as versões anteriores são movidas para o repositório old-releases.ubuntu.com.

O Ubuntu 24.10 (codinome "Oracular") foi lançado em outubro de 2024. No entanto, os mirrors e repositórios de segurança podem não ter todas as versões de pacotes imediatamente disponíveis, especialmente durante o período de transição.

Por que o apt update não resolve?

Em alguns casos, mesmo após executar apt update, o erro persiste porque:

  1. O pacote foi movido antes da sincronização
  2. O repositório de segurança pode ter movido o pacote para old-releases antes do apt-get update refletir essa mudança

  3. Sincronização incompleta
  4. Nem todos os mirrors estão sincronizados com o repositório principal

  5. Ciclo de vida curto
  6. Versões não-LTS têm suporte de apenas 9 meses, então os repositórios são migrados mais rapidamente

A Solução

A solução é simples: alterar o sources.list.d/ubuntu.sources para usar old-releases.ubuntu.com em vez de archive.ubuntu.com.

Procedimentos

  1. Faça backup do ubuntu.sources:
  2. sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.backup
  3. Edite o arquivo (substitua todas as ocorrências):
  4. sudo sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list.d/ubuntu.sources
    sudo sed -i 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list.d/ubuntu.sources

    Ou edite manualmente se o arquivo estiver em outro local como /etc/apt/sources.list.d/ubuntu.sources:

    deb http://old-releases.ubuntu.com/ubuntu oracular main restricted universe multiverse
    deb http://old-releases.ubuntu.com/ubuntu oracular-updates main restricted universe multiverse
    deb http://old-releases.ubuntu.com/ubuntu oracular-security main restricted universe multiverse
  5. Atualize e instale:
  6. sudo apt update
    sudo apt install libsqlite3-dev

É Comum em Versões Não-LTS?

Sim, é relativamente comum, especialmente em versões de curto suporte (non-LTS).

ciclo de Vida do Ubuntu

Versão Codnome Tipo Lançamento Fim de Suporte Status
Ubuntu 24.04 Noble Numbat LTS Abril 2024 Abril 2029 ✅ Suportado
Ubuntu 24.10 Oracular Oriole Non-LTS Outubro 2024 Julho 2025 ✅ Suportado
Ubuntu 23.10 Mantic Minotaur Non-LTS Outubro 2023 Julho 2024 ❌ End of Life
Ubuntu 22.04 Jammy Jellyfish LTS Abril 2022 Abril 2027 ✅ Suportado
Ubuntu 22.10 Kinetic Kudu Non-LTS Outubro 2022 Julho 2023 ❌ End of Life
Ubuntu 21.10 Impish Indri Non-LTS Outubro 2021 Julho 2022 ❌ End of Life
Ubuntu 20.04 Focal Fossa LTS Abril 2020 Abril 2025 ❌ End of Life

Por que é mais comum em non-LTS?

  1. Ciclo mais curto:
  2. Os pacotes são migrados para old-releases mais rapidamente

  3. Menos prioridade:
  4. Mantimentos de repositórios podem priorizar versões LTS

  5. Volume de usuários:
  6. Menos pessoas usam versões non-LTS, então bugs podem demorar mais para serem reportados

  7. Transição de versão:
  8. O período entre o lançamento e a sincronização completa dos mirrors pode gerar inconsistências

Histórico de problemas similares:

  • Ubuntu 23.10 (Mantic)
  • diversos pacotes tiveram problemas semelhantes

  • Ubuntu 22.10 (Kinetic)
  • mesmo problema

  • Ubuntu 21.10 (Impish)
  • mesmo cenário

Considerações finais

Se você encontrar erro 404 ao instalar pacotes em versões não-LTS do Ubuntu, não se preocupe, é um problema comum e facilmente resolvido. A solução de usar old-releases.ubuntu.com é temporária e não deve causar problemas a longo prazo, já que essas versões têm suporte limitado de qualquer forma.

Para ambientes de produção, sempre recomendo usar versões LTS (como 22.04 ou 24.04) para evitar surpresas como essa.

Feito!