☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Qualidade de Código. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Qualidade de Código. Mostrar todas as mensagens

quarta-feira, 3 de junho de 2026

☕💣📋 HOW TO PAY BACK TECHNICAL DEBT — O DIA EM QUE O PROGRAMADOR COBOL DESCOBRIU QUE ESTAVA PAGANDO JUROS POR UMA DECISÃO TOMADA EM 1998

 

Bellacosa Mainframe como pagar dividas tecnicas em mainframe



☕💣📋 HOW TO PAY BACK TECHNICAL DEBT — O DIA EM QUE O PROGRAMADOR COBOL DESCOBRIU QUE ESTAVA PAGANDO JUROS POR UMA DECISÃO TOMADA EM 1998

Existe uma frase muito conhecida no mercado de tecnologia:

"Toda empresa tem dívida técnica. Algumas apenas ainda não receberam a cobrança."

Para um programador COBOL Mainframe júnior, a expressão "dívida técnica" parece algo moderno, criado por arquitetos ágeis, consultores de transformação digital ou gurus do DevOps.

Mas a verdade é muito mais divertida.

Muito antes de alguém inventar Scrum, Kanban, DevOps, GitHub ou Microservices, os programadores COBOL já acumulavam dívida técnica sem saber.

Toda vez que alguém dizia:

"Depois a gente arruma."

Nascia uma nova parcela.

E em muitos ambientes z/OS, ainda estamos pagando prestações de decisões tomadas há 20 ou 30 anos.

Pegue seu café porque hoje vamos entender como identificar, medir, controlar e pagar dívida técnica sem derrubar a produção.


O QUE É DÍVIDA TÉCNICA?

A definição mais simples é:

Dívida técnica é o custo futuro criado por uma decisão técnica tomada para resolver um problema rapidamente hoje.

Imagine um programa COBOL.

Você precisa entregar uma alteração urgente.

O correto seria:

  • Revisar arquitetura

  • Atualizar documentação

  • Criar testes

  • Refatorar módulos

Mas o prazo é amanhã.

Então alguém faz:

IF CLIENTE = '999999'
    GO TO TRATAMENTO-ESPECIAL.

Entrega.

Produção funciona.

Cliente feliz.

Projeto encerrado.

Mas daqui a dois anos ninguém lembra por que aquele IF existe.

A dívida nasceu.


O MAIOR MITO DO MAINFRAME

Muita gente acredita que:

"Código antigo é dívida técnica."

Errado.

Código antigo pode ser excelente.

Existem programas COBOL escritos nos anos 80 que ainda hoje são exemplos de engenharia.

Por outro lado, existem programas escritos há seis meses que já nasceram endividados.

A idade do código não importa.

O que importa é:

  • Complexidade

  • Manutenibilidade

  • Clareza

  • Testabilidade

  • Documentação


COMO IDENTIFICAR DÍVIDA TÉCNICA

O primeiro passo é aprender a enxergá-la.

Alguns sintomas clássicos:

Programa que ninguém quer alterar

Quando uma demanda chega e todos falam:

"Tomara que não seja naquele programa..."

Existe dívida.


Alteração simples demora dias

Mudança:

Trocar 20 para 25.

Tempo gasto:

3 dias

Existe dívida.


Muitos abends

Se o mesmo módulo gera incidentes frequentemente:

  • S0C7

  • S0C4

  • SQLCODE negativos

  • Arquivos inconsistentes

Existe dívida.


Dependência de especialistas

Quando apenas uma pessoa entende o sistema.

Isso é uma dívida técnica humana.

Extremamente perigosa.


A METÁFORA DO CARTÃO DE CRÉDITO

A IBM utiliza uma analogia excelente.

Imagine um cartão.

Você compra algo hoje.

O benefício é imediato.

O pagamento fica para depois.

Dívida técnica funciona igual.

Benefício imediato:

Entreguei no prazo

Pagamento futuro:

Mais manutenção
Mais defeitos
Mais testes
Mais retrabalho

O problema não é usar o cartão.

O problema é esquecer da fatura.


COMO MAPEAR A DÍVIDA TÉCNICA

A primeira atividade prática é criar um inventário.

Monte uma planilha contendo:

SistemaProblemaImpactoPrioridade
CadastroGO TO excessivoMédioMédia
CobrançaSem documentaçãoAltoAlta
FaturamentoAlta complexidadeAltoAlta

Você não consegue corrigir aquilo que não consegue enxergar.


MÉTRICA 1 – COMPLEXIDADE CICLOMÁTICA

Uma das métricas mais famosas.

Ela mede quantos caminhos lógicos existem em um programa.

Exemplo:

IF A
   ...
ELSE
   ...
END-IF

Pouca complexidade.

Agora imagine:

IF A
 IF B
  IF C
   IF D

A complexidade explode.

Quanto maior a complexidade:

  • Mais difícil testar

  • Mais difícil manter

  • Maior risco de erro

Regra prática:

ValorSituação
1 a 10Boa
11 a 20Atenção
Acima de 20Risco

MÉTRICA 2 – TEMPO DE MANUTENÇÃO

Métrica simples.

Quanto tempo leva para implementar uma mudança?

Exemplo:

Alteração simples:

4 horas

Virou:

3 dias

A dívida está cobrando juros.


MÉTRICA 3 – QUANTIDADE DE INCIDENTES

Monitore:

  • Chamados

  • Tickets

  • Problemas recorrentes

Se determinado programa gera:

20% dos incidentes

Ele deve entrar imediatamente no backlog técnico.


MÉTRICA 4 – COBERTURA DE TESTES

Quanto do sistema possui testes?

Exemplo:

10%

Muito arriscado.

80%

Muito saudável.

No mundo COBOL isso pode envolver:

  • Unit Test

  • Testes automatizados

  • Batch Validation


MÉTRICA 5 – TEMPO MÉDIO DE RECUPERAÇÃO

MTTR

Mean Time To Recovery.

Quanto tempo leva para resolver um problema?

Exemplo:

10 minutos

Excelente.

8 horas

Existe forte dívida técnica.


A REGRA DOS 20%

Uma prática muito utilizada é reservar:

80% desenvolvimento
20% redução de dívida técnica

Isso impede que a dívida cresça infinitamente.


TÉCNICA 1 – REFATORAÇÃO CONTÍNUA

Refatorar significa melhorar sem alterar comportamento.

Exemplo:

Antes:

GO TO ERRO.
GO TO ERRO.
GO TO ERRO.

Depois:

PERFORM TRATA-ERRO.

Mesmo resultado.

Código mais limpo.


TÉCNICA 2 – MODULARIZAÇÃO

Programas gigantes são fábricas de dívida.

Já encontrei programas com:

80.000 linhas

Divida responsabilidades.

Crie módulos menores.

Mais simples de entender.

Mais simples de testar.


TÉCNICA 3 – DOCUMENTAÇÃO VIVA

Documentação morta é inútil.

Documentação viva é atualizada junto com o sistema.

Documente:

  • Fluxos

  • Arquivos

  • Tabelas

  • Regras de negócio


TÉCNICA 4 – ELIMINAÇÃO DE CÓDIGO MORTO

Existe um cemitério escondido em todo sistema.

Trechos como:

IF FLAG = 'X'

Que nunca mais executam.

Remover código morto reduz:

  • Complexidade

  • Risco

  • Tempo de manutenção


TÉCNICA 5 – BACKLOG TÉCNICO

Crie um backlog específico.

Exemplo:

Remover GO TO
Documentar módulo
Automatizar teste
Eliminar código morto

A dívida precisa aparecer oficialmente.

Caso contrário ela nunca será priorizada.


FERRAMENTAS ÚTEIS NO MUNDO MAINFRAME

IBM Application Discovery

Mapeia dependências.

Mostra:

  • Programas

  • Arquivos

  • CICS

  • DB2

Excelente para arqueologia de sistemas.


IBM ADDI

Application Discovery and Delivery Intelligence.

Permite visualizar relacionamentos invisíveis.

Muito útil para sistemas legados.


SonarQube

Mesmo para COBOL.

Detecta:

  • Complexidade

  • Duplicação

  • Código suspeito


IBM Developer for z/OS

Auxilia:

  • Navegação

  • Análise

  • Refatoração


Jira

Controle de backlog técnico.

Muitas empresas utilizam para registrar dívida técnica.


EASTER EGG MAINFRAME

Quer descobrir rapidamente onde existe dívida?

Procure:

GO TO
ALTER
NEXT SENTENCE

Ou:

STEP099
STEP100
STEP101

Sem documentação.

Você provavelmente encontrou um sítio arqueológico corporativo.


O ERRO MAIS COMUM DOS JUNIORES

Pensar:

"Vou reescrever tudo."

Não.

Esse é o caminho para o desastre.

A melhor estratégia quase sempre é:

Pequenas melhorias contínuas.

Todo dia.

Toda sprint.

Todo projeto.

Toda manutenção.


COMO EVOLUIR COMO PROFISSIONAL

Programadores experientes não são aqueles que escrevem mais código.

São aqueles que reduzem complexidade.

Quando você consegue olhar para um sistema e dizer:

"Esse trecho vai gerar problema daqui a dois anos."

Você começou a pensar como arquiteto.


O SEGREDO DOS MELHORES ANALISTAS DE SISTEMAS

Eles não combatem apenas bugs.

Eles combatem as causas dos bugs.

Essa é a diferença entre apagar incêndios e construir sistemas duradouros.


CONCLUSÃO

Dívida técnica não é um defeito.

Ela é uma ferramenta.

Em alguns momentos vale a pena assumir a dívida para entregar rapidamente.

O problema surge quando ninguém controla o saldo.

O programador COBOL júnior que aprender a:

  • Identificar dívida

  • Medir dívida

  • Priorizar dívida

  • Reduzir dívida

  • Monitorar dívida

Terá uma visão muito mais próxima de um arquiteto de sistemas do que de um simples codificador.

Porque no fim das contas, o maior segredo do Mainframe não é fazer programas funcionarem.

É garantir que eles continuem funcionando daqui a 30 anos sem que alguém precise vender a alma para entender por quê.



terça-feira, 2 de junho de 2026

☕💣📋 DÍVIDA TÉCNICA NO MAINFRAME — O EMPRÉSTIMO QUE VOCÊ FEZ EM 1998 E AINDA ESTÁ PAGANDO COM JUROS EM 2026

 

Bellacosa Mainframe divida tecnica decisões erradas que pagamos até hoje


☕💣📋 DÍVIDA TÉCNICA NO MAINFRAME — O EMPRÉSTIMO QUE VOCÊ FEZ EM 1998 E AINDA ESTÁ PAGANDO COM JUROS EM 2026

Existe uma lenda antiga nos CPDs.

Ela diz que, em algum lugar do ambiente de produção, existe um programa COBOL que ninguém entende.

Ninguém sabe quem escreveu.

Ninguém sabe por que funciona.

Ninguém sabe o que acontece se ele parar.

Mas todos sabem de uma coisa:

ninguém tem coragem de mexer nele.

Se você trabalha em Mainframe há algum tempo, provavelmente já encontrou um desses.

Talvez ele tenha 30 mil linhas.

Talvez possua 700 GO TO.

Talvez utilize arquivos VSAM que nem aparecem mais na documentação.

Talvez tenha comentários escritos por alguém que já se aposentou há vinte anos.

E talvez ele continue processando milhões de reais por dia.

Parabéns.

Você acabou de encontrar um dos sintomas mais clássicos da dívida técnica.


O QUE É DÍVIDA TÉCNICA?

O termo foi criado por Ward Cunningham.

A ideia é simples.

Você faz uma escolha rápida hoje para ganhar velocidade.

Em troca, aceita que precisará corrigir aquilo futuramente.

É exatamente igual a um empréstimo bancário.

Você recebe um benefício imediato.

Mas depois paga juros.

No software, os juros aparecem na forma de:

  • retrabalho;

  • manutenção mais lenta;

  • defeitos;

  • incidentes;

  • dificuldade de evolução;

  • dependência de especialistas.

O problema é que muitas empresas pegam esse empréstimo todos os dias.

E quase nunca pagam.


O DIA EM QUE O SISTEMA COMEÇA A COBRAR JUROS

Imagine um programador COBOL júnior.

Recebe uma demanda urgente.

Precisa incluir um novo código de operação.

O correto seria:

  • revisar regras;

  • criar módulo reutilizável;

  • atualizar documentação;

  • executar testes.

Mas o prazo está apertado.

Então ele faz:

IF COD-OPER = '99'
   MOVE 'S' TO FLAG-ESPECIAL
END-IF.

Entrega.

Funciona.

Todos ficam felizes.

Seis meses depois surge:

Operação 98.

Depois 97.

Depois 96.

Quando alguém percebe, existe:

IF COD-OPER = '99'
OR COD-OPER = '98'
OR COD-OPER = '97'
OR COD-OPER = '96'

O programa continua funcionando.

Mas ficou pior.

Essa diferença entre funcionar e ser saudável é onde mora a dívida técnica.


COMO IDENTIFICAR DÍVIDA TÉCNICA

Os sinais são sempre parecidos.

1. Programas gigantes

Quando um COBOL possui:

  • 10 mil linhas;

  • 20 mil linhas;

  • 50 mil linhas;

ninguém consegue compreender tudo.

Complexidade gera risco.


2. Dependência de uma única pessoa

Quando você ouve:

"Somente o João conhece esse sistema."

Acenda o alerta vermelho.

O João pode tirar férias.

O João pode mudar de empresa.

O João pode se aposentar.

O sistema precisa sobreviver sem heróis.


3. Medo de alterar

Se toda mudança gera receio:

"Vamos torcer para não derrubar produção."

Existe dívida técnica.


4. Muitas correções

Quando a equipe passa mais tempo corrigindo do que evoluindo.

O sistema está pagando juros elevados.


AS PRINCIPAIS MÉTRICAS

Métricas transformam sensação em informação.

Sem métricas ninguém sabe se está melhorando.


1. LEAD TIME

Tempo entre solicitação e entrega.

Exemplo:

Pedido feito em:

01/06

Produção:

10/06

Lead Time = 9 dias

Quanto menor melhor.


2. CYCLE TIME

Tempo efetivamente gasto desenvolvendo.

Exemplo:

Demanda recebida.

Ficou parada cinco dias.

Desenvolvimento levou dois dias.

Cycle Time = 2 dias.


3. CHANGE FAILURE RATE

Percentual de mudanças que causam problemas.

Exemplo:

100 implantações.

10 causaram incidentes.

Taxa:

10%

Quanto menor melhor.


4. MTTR

Mean Time To Recovery.

Tempo médio para recuperar produção.

Exemplo:

ABEND às 10h.

Sistema normal às 11h.

MTTR = 1 hora.


5. REWORK

Retrabalho.

Mede quanto esforço foi gasto corrigindo erros.

Imagine:

100 horas trabalhadas.

25 horas corrigindo problemas.

Rework:

25%

Muito alto.


6. REFATORAÇÃO

Esforço dedicado a melhorar código existente.

Uma equipe saudável normalmente reserva tempo para:

  • limpeza;

  • reorganização;

  • modularização.


ENTENDENDO O GRÁFICO DA LINEARB

Imagine:

59% Novo Trabalho

17% Refatoração

24% Retrabalho

Significa:

A cada 100 horas:

59 horas criam valor.

17 horas melhoram qualidade.

24 horas apagam incêndios.

Quase um quarto da energia da equipe foi desperdiçada.


COMO REDUZIR DÍVIDA TÉCNICA

Agora chegamos ao ponto mais importante.


PASSO 1 — MAPEAR O PROBLEMA

Não tente resolver tudo.

Primeiro descubra:

  • quais programas mudam mais;

  • quais causam mais incidentes;

  • quais possuem maior complexidade.

Faça uma planilha simples.

ProgramaAlteraçõesIncidentes
FIN00112015
FIN002100
FIN0039512

Comece pelos maiores problemas.


PASSO 2 — CRIAR BACKLOG TÉCNICO

Muitas empresas possuem backlog funcional.

Poucas possuem backlog técnico.

Crie itens como:

  • remover código morto;

  • modularizar rotina;

  • eliminar duplicação;

  • documentar interfaces.

Essas atividades precisam ser visíveis.


PASSO 3 — REFATORAR PEQUENO

Erro clássico:

"Vamos reescrever tudo."

Não faça isso.

Melhore gradualmente.

Hoje:

  • extrair um parágrafo.

Amanhã:

  • eliminar duplicação.

Depois:

  • criar módulo reutilizável.

Pequenas vitórias acumulam grandes resultados.


PASSO 4 — DOCUMENTAR

Documentação não precisa ser um livro.

Basta responder:

  • o que faz;

  • entradas;

  • saídas;

  • dependências.

Já ajuda enormemente.


PASSO 5 — REVISÃO DE CÓDIGO

Mesmo no Mainframe.

Principalmente no Mainframe.

Checklist simples:

✓ Nome adequado

✓ Lógica clara

✓ Tratamento de erro

✓ Performance

✓ Documentação

✓ Testes


PASSO 6 — TESTES

O segredo dos sistemas modernos.

Sem testes:

refatorar é perigoso.

Com testes:

refatorar é seguro.

Mesmo em COBOL.

Ferramentas como:

  • IBM Debug Tool

  • IBM Application Discovery

  • IBM ZUnit

  • Micro Focus Unit Testing

ajudam muito.


PASSO 7 — REDUZIR COMPLEXIDADE

Pergunta mágica:

"Existe uma forma mais simples?"

Sempre existe.

Quanto mais simples:

  • menor risco;

  • menor manutenção;

  • menor custo.


FERRAMENTAS ÚTEIS

IBM Application Discovery

Mapeia dependências.

Mostra:

  • programas;

  • copybooks;

  • arquivos;

  • fluxos.

Excelente para arqueologia de sistemas.


SonarQube

Analisa qualidade.

Detecta:

  • duplicação;

  • complexidade;

  • vulnerabilidades.


Git

Mesmo para Mainframe.

Ajuda a controlar mudanças.


Jira

Controle de backlog técnico.


ServiceNow

Correlação entre incidentes e sistemas.


O SEGREDO QUE NINGUÉM CONTA

A maioria das dívidas técnicas não nasce do código.

Nasce da organização.

Promessas irreais.

Prazos impossíveis.

Mudanças constantes.

Prioridades conflitantes.

O código apenas reflete o ambiente em que foi criado.


EASTER EGG MAINFRAME

Existe um teste simples.

Abra um programa COBOL.

Role até o final.

Se encontrar:

GO TO FIM-PROGRAMA

não se assuste.

Se encontrar:

GO TO INICIO

fique atento.

Se encontrar:

GO TO PARAGRAFO-XYZ

que chama outro GO TO que chama outro GO TO...

Parabéns.

Você encontrou uma relíquia arqueológica do período Jurássico dos sistemas corporativos.


O CAMINHO DE EVOLUÇÃO DO PROGRAMADOR JÚNIOR

Nível 1:

Faz funcionar.

Nível 2:

Faz funcionar corretamente.

Nível 3:

Faz funcionar de forma simples.

Nível 4:

Faz funcionar de forma sustentável.

Nível 5:

Melhora o sistema toda vez que toca nele.

É nesse último estágio que nasce o verdadeiro arquiteto de sistemas.


A GRANDE LIÇÃO

O programador iniciante acredita que seu trabalho é escrever código.

O programador experiente descobre que seu trabalho é reduzir complexidade.

Código novo gera valor.

Mas código limpo preserva valor.

A dívida técnica não explode como um ABEND.

Ela cresce silenciosamente.

Linha após linha.

Workaround após workaround.

Correção após correção.

Até o dia em que uma mudança de cinco minutos passa a exigir três semanas.

Nesse momento os juros finalmente chegaram.

E como qualquer empréstimo antigo, quanto mais tempo você esperar para pagar, mais caro ficará.


sábado, 7 de julho de 2018

Blog Analytics : Parte V – Construindo o Bellacosa Blog Doctor Desenvolvendo um Scanner Automático de HTML, SEO e Qualidade para Blogger

 

Bellacosa Mainframe e o blog analytics parte v

☕ Um Café no Bellacosa Mainframe

Blog Analytics : Parte V – Construindo o Bellacosa Blog Doctor

Desenvolvendo um Scanner Automático de HTML, SEO e Qualidade para Blogger

Quando o Feed Atom Deixa de Ser Apenas um Arquivo XML e se Transforma no SYSUDUMP de um Acervo Digital

☕ Um Café no Bellacosa Mainframe

Nas quatro primeiras partes desta série percorremos um caminho que começou com uma suspeita aparentemente pequena e terminou em uma descoberta muito maior.

Primeiro percebemos que o Blogger podia armazenar HTML invisível.

Depois identificamos os resíduos deixados por inteligência artificial, Microsoft Word, Google Docs e outros editores.

Em seguida aprendemos que limpar milhares de posts sem planejamento poderia causar mais problemas do que benefícios.

Por fim, construímos um checklist de auditoria para blogs antigos, tratando um acervo editorial como um sistema crítico que precisa de manutenção preventiva.

Agora chegamos ao ponto em que a teoria precisa virar ferramenta.

Não basta saber que existem resíduos.

Não basta abrir manualmente cada artigo.

Não basta analisar visualmente milhares de páginas.

Precisamos de um scanner.

Um programa capaz de receber o Feed Atom de um blog, percorrer milhares de publicações, interpretar o HTML, aplicar regras de qualidade, calcular indicadores, classificar riscos e produzir um relatório compreensível.

Em outras palavras:

Precisamos construir o Bellacosa Blog Doctor.


O Que é o Bellacosa Blog Doctor?

O Bellacosa Blog Doctor é uma ferramenta de auditoria técnica para Blogger.

Seu objetivo não é editar automaticamente todos os artigos.

Seu objetivo é muito mais importante:

diagnosticar antes de corrigir.

Em ambientes IBM Mainframe, ninguém altera um sistema crítico sem antes reunir evidências.

Primeiro olhamos:

  • logs;

  • dumps;

  • traces;

  • métricas;

  • códigos de retorno;

  • históricos de execução;

  • impactos;

  • dependências.

Somente depois decidimos o que fazer.

O Blog Doctor segue exatamente essa filosofia.

Ele não deve agir como um aspirador de pó cego que remove tudo que parece estranho.

Ele deve funcionar como um laboratório forense digital.

Receber dados.

Analisar.

Classificar.

Explicar.

Priorizar.

Gerar um laudo.


A Filosofia Mainframe Aplicada ao Blogger

Um mainframe não é confiável apenas porque possui hardware robusto.

Ele é confiável porque toda sua operação é baseada em controle, observabilidade e diagnóstico.

Quando um job falha, existem pistas:

  • RC;

  • ABEND;

  • SYSOUT;

  • JESMSGLG;

  • JESYSMSG;

  • CEEDUMP;

  • SYSUDUMP;

  • mensagens do subsistema;

  • registros SMF.

O Blog Doctor deve produzir o equivalente editorial dessas evidências.

Por exemplo:

POST: ABEND sem Mistérios para Programadores COBOL

STATUS GERAL..............ATENÇÃO

HTML......................82
SEO TÉCNICO...............91
ACESSIBILIDADE............76
QUALIDADE EDITORIAL.......94

OCORRÊNCIAS:
- 3 imagens sem ALT
- 1 tabela dentro de parágrafo
- 2 links HTTP
- 4 atributos data-message-id
- heading H3 sem H2 anterior

PRIORIDADE.................MÉDIA
AÇÃO RECOMENDADA...........REVISÃO MANUAL

Esse relatório funciona como um pequeno dump do artigo.

Não diz apenas que existe um problema.

Mostra:

  • onde;

  • qual;

  • quantas vezes;

  • qual gravidade;

  • qual ação recomendada.


A Arquitetura da Ferramenta

Antes de escrever código, precisamos desenhar a arquitetura.

Uma ferramenta de auditoria bem organizada pode ser dividida em cinco camadas.

CAMADA 1 – AQUISIÇÃO
Feed Atom ou Blogger API

CAMADA 2 – NORMALIZAÇÃO
Conversão dos posts para objetos internos

CAMADA 3 – ANÁLISE
HTML, SEO, acessibilidade, conteúdo e metadados

CAMADA 4 – CLASSIFICAÇÃO
Score, gravidade, prioridade e recomendações

CAMADA 5 – RELATÓRIOS
Dashboard, CSV, JSON, tabelas e laudos

Essa separação é fundamental.

Sem ela, o programa rapidamente se transforma em um bloco gigantesco de JavaScript difícil de manter.

No universo mainframe, seria como colocar leitura de arquivo, regra de negócio, banco de dados, impressão e tratamento de erro dentro de uma única SECTION COBOL.

Pode até funcionar.

Mas ninguém gostaria de manter.


Camada 1 – Aquisição dos Dados

O primeiro módulo precisa localizar e carregar os artigos.

Existem duas fontes principais.

Feed Atom

O Feed Atom é excelente para análise porque fornece o conteúdo publicado em formato estruturado.

Ele pode conter:

  • título;

  • data de publicação;

  • data de atualização;

  • categorias;

  • links;

  • HTML completo do artigo.

Exemplo simplificado:

<entry>
  <title>ABEND sem Mistérios</title>
  <published>2026-07-25T20:00:00-03:00</published>
  <category term="COBOL"/>
  <category term="Mainframe"/>
  <content type="html">
    <![CDATA[
      <h2>Introdução</h2>
      <p>Conteúdo...</p>
    ]]>
  </content>
</entry>

O Feed Atom funciona quase como uma unload de banco de dados.

Ele não representa apenas aquilo que aparece visualmente.

Ele revela aquilo que foi armazenado.


Blogger API

A Blogger API fornece dados em JSON.

Isso facilita o processamento porque JavaScript trabalha naturalmente com objetos JSON.

Exemplo:

{
  "title": "ABEND sem Mistérios",
  "published": "2026-07-25T20:00:00-03:00",
  "labels": ["COBOL", "Mainframe"],
  "content": "<h2>Introdução</h2><p>Conteúdo...</p>"
}

Em um projeto mais maduro, o Blog Doctor pode oferecer as duas opções:

  • leitura direta do Feed Atom;

  • leitura da Blogger API.


O Problema da Paginação

Blogs pequenos podem ser lidos em uma única requisição.

Blogs com milhares de posts não.

Tentar carregar quatro mil artigos de uma vez pode gerar:

  • timeout;

  • resposta truncada;

  • consumo elevado de memória;

  • travamento do navegador;

  • falhas de rede;

  • bloqueio temporário.

A solução é processar em lotes.

async function carregarPosts() {
  const lote = 100;
  let inicio = 1;
  const posts = [];

  while (true) {
    const dados = await carregarLote(inicio, lote);

    if (!dados.length) {
      break;
    }

    posts.push(...dados);
    inicio += dados.length;

    if (dados.length < lote) {
      break;
    }
  }

  return posts;
}

Essa lógica lembra um programa batch lendo um arquivo em blocos.

Não importa se existem cem ou dez mil registros.

O processo continua até encontrar o fim.


Camada 2 – Normalização

Os dados recebidos do Feed Atom não devem ser usados diretamente em todas as funções.

Primeiro precisam ser normalizados.

Isso significa converter cada post para um formato interno consistente.

{
  titulo: "ABEND sem Mistérios",
  url: "https://...",
  publicadoEm: Date,
  atualizadoEm: Date,
  html: "<h2>...</h2>",
  texto: "ABEND sem Mistérios...",
  palavras: 1842,
  caracteres: 10920,
  marcadores: ["COBOL", "Mainframe"],
  imagens: [],
  links: [],
  headings: []
}

Esse objeto se transforma no registro mestre da auditoria.

Em COBOL, seria como montar um layout padronizado na WORKING-STORAGE antes de aplicar as regras de negócio.


Convertendo HTML em Texto

Um dos primeiros algoritmos necessários é remover o HTML para obter apenas o conteúdo textual.

function htmlParaTexto(html) {
  const documento = new DOMParser()
    .parseFromString(html, "text/html");

  documento
    .querySelectorAll("script, style, noscript")
    .forEach(elemento => elemento.remove());

  return (documento.body.textContent || "")
    .replace(/\s+/g, " ")
    .trim();
}

Essa função permite calcular:

  • palavras;

  • caracteres;

  • densidade textual;

  • repetições;

  • legibilidade;

  • termos mais usados.


Contando Palavras

A contagem não deve usar apenas:

texto.split(" ")

Esse método falha com:

  • múltiplos espaços;

  • quebras de linha;

  • pontuação;

  • hífens;

  • apóstrofos.

Uma abordagem melhor é usar expressão regular Unicode.

function contarPalavras(texto) {
  const palavras = texto.match(
    /[\p{L}\p{N}][\p{L}\p{N}'’-]*/gu
  );

  return palavras ? palavras.length : 0;
}

O uso de \p{L} ajuda a reconhecer letras acentuadas e outros alfabetos.

Isso é importante em um blog que mistura português, inglês, japonês romanizado, termos técnicos e nomes próprios.


Camada 3 – O Motor de Análise

Aqui está o verdadeiro coração do Bellacosa Blog Doctor.

Cada módulo analisa um aspecto diferente.

MÓDULO HTML
MÓDULO SEO
MÓDULO ACESSIBILIDADE
MÓDULO EDITORIAL
MÓDULO LINKS
MÓDULO IMAGENS
MÓDULO RESÍDUOS
MÓDULO PERFORMANCE

Cada módulo deve produzir ocorrências independentes.

Exemplo:

{
  codigo: "HTML-TABLE-IN-P",
  categoria: "HTML",
  gravidade: "media",
  mensagem: "Tabela encontrada dentro de parágrafo",
  quantidade: 1
}

Scanner de HTML

O scanner de HTML deve procurar estruturas inválidas ou suspeitas.

Tabela dentro de parágrafo

const tabelaEmParagrafo =
  /<p\b[^>]*>\s*<table\b/i.test(html);

Tabela dentro de heading

const tabelaEmHeading =
  /<h[1-6]\b[^>]*>\s*<table\b/i.test(html);

Headings vazios

const headingsVazios = [
  ...documento.querySelectorAll("h1,h2,h3,h4,h5,h6")
].filter(elemento => !elemento.textContent.trim());

Mais de um H1

const quantidadeH1 =
  documento.querySelectorAll("h1").length;

Essas regras parecem simples, mas quando aplicadas a milhares de posts revelam padrões históricos inteiros.


Scanner de Resíduos de IA

Os resíduos deixados por interfaces modernas podem ser identificados por padrões conhecidos.

const residuosIA = [
  /data-message-id\s*=/i,
  /data-message-author-role\s*=/i,
  /data-message-model-slug\s*=/i
];

O algoritmo pode contar cada ocorrência.

function contarPadrao(html, regex) {
  const global = new RegExp(regex.source, regex.flags + "g");
  return (html.match(global) || []).length;
}

Resultado:

data-message-id...............12
data-message-author-role.......4
data-message-model-slug........4

Isso permite identificar não apenas se existe resíduo, mas sua intensidade.


Scanner de Microsoft Word

O Word possui uma assinatura bastante reconhecível.

const possuiWord =
  /\bclass=["'][^"']*\bMso/i.test(html) ||
  /<o:p\b/i.test(html) ||
  /mso-[a-z-]+\s*:/i.test(html);

Também é possível detectar comentários condicionais:

<!--[if gte mso 9]>

Esses resíduos normalmente não quebram a página.

Mas aumentam o tamanho do HTML e tornam a manutenção mais difícil.


Scanner de Google Docs

O Google Docs costuma deixar estruturas mais limpas que o Word, porém pode inserir grande quantidade de spans e estilos inline.

Uma regra simples pode medir densidade de spans.

const spans =
  documento.querySelectorAll("span").length;

const palavras =
  contarPalavras(texto);

const densidadeSpan =
  palavras > 0 ? spans / palavras : 0;

Exemplo:

Palavras..............1.000
Spans...................480
Densidade..............0,48

Uma densidade muito alta pode indicar excesso de formatação.


Análise de Headings

A hierarquia de títulos é essencial para organização semântica.

Um scanner deve verificar:

  • H1 duplicado;

  • H2 ausente;

  • H3 sem H2 anterior;

  • saltos de H2 para H4;

  • headings vazios;

  • headings excessivamente longos.

Algoritmo simplificado:

function analisarHierarquiaHeadings(documento) {
  const headings = [
    ...documento.querySelectorAll("h1,h2,h3,h4,h5,h6")
  ];

  const problemas = [];
  let nivelAnterior = 0;

  headings.forEach(heading => {
    const nivel = Number(heading.tagName.substring(1));

    if (nivelAnterior && nivel > nivelAnterior + 1) {
      problemas.push({
        tipo: "salto-heading",
        de: nivelAnterior,
        para: nivel,
        texto: heading.textContent.trim()
      });
    }

    nivelAnterior = nivel;
  });

  return problemas;
}

Isso funciona como um verificador de estrutura de programa.

É quase um compiler warning editorial.


Scanner de Imagens

Cada imagem deve ser analisada.

const imagens = [
  ...documento.querySelectorAll("img")
];

Para cada uma:

{
  src: imagem.src,
  alt: imagem.getAttribute("alt"),
  title: imagem.getAttribute("title"),
  width: imagem.getAttribute("width"),
  height: imagem.getAttribute("height")
}

Problemas possíveis:

  • ausência de ALT;

  • ALT vazio;

  • URL HTTP;

  • imagem sem dimensões;

  • imagem externa;

  • possível arquivo pesado;

  • imagem duplicada;

  • nome de arquivo genérico.

Exemplo de diagnóstico:

IMG-ALT-MISSING
Gravidade: média
Ocorrências: 3

Scanner de Links

Links quebrados são uma das maiores dívidas técnicas de blogs antigos.

O scanner local pode verificar inicialmente:

  • HTTP;

  • links vazios;

  • href="#";

  • JavaScript no href;

  • links internos;

  • links externos;

  • links duplicados.

const linksHTTP = links.filter(link =>
  /^http:\/\//i.test(link.getAttribute("href") || "")
);

Verificar se uma URL externa realmente responde exige chamadas de rede e pode sofrer limitações de CORS.

Por isso, o Blog Doctor pode classificar a análise em dois níveis:

Nível local

  • estrutura do link;

  • protocolo;

  • domínio;

  • duplicação;

  • consistência.

Nível remoto

  • código HTTP;

  • redirect;

  • página removida;

  • timeout.


Scanner de Conteúdo

O conteúdo também pode ser avaliado.

Indicadores possíveis:

  • quantidade de palavras;

  • tamanho do título;

  • presença de introdução;

  • presença de conclusão;

  • repetição excessiva;

  • parágrafos muito longos;

  • densidade de palavras-chave;

  • excesso de caixa alta;

  • excesso de negrito;

  • excesso de emojis.

Exemplo:

const tituloCurto = titulo.length < 20;
const tituloLongo = titulo.length > 70;
const conteudoCurto = palavras < 300;

Essas regras não devem ser tratadas como leis universais.

Um post curto pode ser perfeitamente válido.

O scanner apenas sinaliza.

A decisão continua sendo humana.


O Índice Técnico de SEO

O Blog Doctor pode calcular uma pontuação de zero a cem.

Exemplo inicial:

Título.........................10
Conteúdo.......................15
Headings.......................10
Imagens........................10
Links internos.................10
Marcadores.....................10
HTML limpo.....................15
Acessibilidade.................10
Estrutura......................10

O algoritmo pode começar com 100 pontos e aplicar penalidades.

function calcularSEO(post) {
  let score = 100;

  if (post.titulo.length < 20) {
    score -= 7;
  }

  if (post.palavras < 300) {
    score -= 15;
  }

  if (post.imagensSemAlt > 0) {
    score -= Math.min(12, post.imagensSemAlt * 3);
  }

  if (post.semLinksInternos) {
    score -= 8;
  }

  if (post.residuoIA) {
    score -= 6;
  }

  return Math.max(0, score);
}

Esse índice não mede posição no Google.

Ele mede qualidade técnica estimada.

É semelhante a uma métrica de saúde.

Um servidor pode estar funcionando e ainda apresentar alertas.

Um artigo pode estar indexado e ainda possuir problemas técnicos.


Gravidade e Prioridade

Nem todo problema merece a mesma atenção.

O Blog Doctor deve separar gravidade de prioridade.

Gravidade

Refere-se ao impacto técnico.

BAIXA
MÉDIA
ALTA
CRÍTICA

Prioridade

Refere-se à ordem de correção.

Um problema tecnicamente médio pode ter prioridade alta se aparecer em centenas de posts.

Exemplo:

Problema........Imagem sem ALT
Gravidade.......Média
Ocorrências.....1.240
Prioridade......Alta

Outro exemplo:

Problema........Resíduo data-message-id
Gravidade.......Baixa
Ocorrências.....3
Prioridade......Baixa

Essa distinção evita pânico.


A Matriz de Risco

Podemos criar uma matriz simples.

                 POUCOS POSTS   MUITOS POSTS

BAIXO IMPACTO       BAIXA          MÉDIA
MÉDIO IMPACTO       MÉDIA          ALTA
ALTO IMPACTO        ALTA           CRÍTICA

Em JavaScript:

function calcularPrioridade(gravidade, ocorrencias) {
  const peso = {
    baixa: 1,
    media: 2,
    alta: 3,
    critica: 4
  };

  const volume =
    ocorrencias > 500 ? 3 :
    ocorrencias > 50 ? 2 : 1;

  const resultado = peso[gravidade] + volume;

  if (resultado >= 6) return "crítica";
  if (resultado >= 5) return "alta";
  if (resultado >= 3) return "média";
  return "baixa";
}

Geração de Relatórios

Uma ferramenta sem relatório é apenas um conjunto de funções.

O Blog Doctor precisa transformar dados técnicos em informação útil.

Ele pode produzir quatro tipos de saída.

Dashboard

Indicadores visuais:

Posts analisados.............4.018
HTML saudável................3.912
Posts com alerta................89
Posts críticos..................17
SEO técnico médio..............92
Imagens sem ALT................243
Links HTTP......................81
Resíduos de IA..................14

Relatório por artigo

TÍTULO: Data Division sem Mistérios

URL: https://...

PALAVRAS..................1.846
IMAGENS.......................4
LINKS INTERNOS................3
MARCADORES....................8

SEO TÉCNICO..................94

ALERTAS:
- 1 imagem sem ALT
- 1 link HTTP

CSV

O CSV permite abrir os resultados no Excel ou LibreOffice.

Colunas possíveis:

Título
URL
Data
Palavras
Caracteres
Marcadores
Imagens
Imagens sem ALT
Links internos
Resíduos IA
Resíduos Word
SEO Score
Prioridade

JSON

O JSON é ideal para integração futura.

{
  "blog": "Bellacosa Mainframe",
  "dataAuditoria": "2026-07-26",
  "posts": [
    {
      "titulo": "ABEND sem Mistérios",
      "score": 92,
      "prioridade": "media",
      "ocorrencias": []
    }
  ]
}

A Tela de Progresso

Em um blog com milhares de posts, o usuário precisa saber que o sistema continua funcionando.

Carregando lote 12...

Posts recebidos........1.200
Posts analisados.......1.175
Palavras processadas...1.832.411

[██████████░░░░░░░░░░] 29%

Essa barra não é apenas estética.

Ela reduz a ansiedade e ajuda a identificar travamentos.

Em sistemas batch, o equivalente seria acompanhar o job no SDSF.


Cache e IndexedDB

Reanalisar quatro mil posts em toda visita é desperdício.

O navegador pode guardar os resultados localmente usando IndexedDB.

Arquitetura:

Primeira execução
Feed → análise → IndexedDB

Próxima execução
IndexedDB → dashboard

Atualização
Buscar apenas posts recentes

Isso transforma o painel em uma aplicação muito mais rápida.


Processamento Incremental

Em vez de reler o blog inteiro, podemos guardar a data da última análise.

{
  ultimaAtualizacao: "2026-07-26T23:10:00-03:00"
}

Na próxima execução, o sistema procura apenas artigos publicados ou atualizados depois dessa data.

É o equivalente editorial de um processamento incremental.

Muito semelhante a um batch que lê apenas os registros alterados.


Web Workers

Analisar milhões de palavras pode travar a interface.

Uma solução futura é usar Web Workers.

O Worker executa o processamento em uma thread separada.

const worker = new Worker("blog-doctor-worker.js");

worker.postMessage(posts);

worker.onmessage = evento => {
  atualizarDashboard(evento.data);
};

Assim, a interface continua respondendo enquanto a análise ocorre.


A Implementação Mínima

Uma primeira versão funcional do Blog Doctor precisa apenas de cinco componentes.

1. Leitor do Feed
2. Normalizador
3. Scanner de HTML
4. Calculador de Score
5. Gerador de tabela

Fluxo:

async function executarAuditoria() {
  const entradas = await carregarTodosOsPosts();

  const posts = entradas.map(normalizarPost);

  const auditados = posts.map(post => {
    const ocorrencias = analisarPost(post);
    const score = calcularScore(post, ocorrencias);

    return {
      ...post,
      ocorrencias,
      score
    };
  });

  gerarRelatorio(auditados);
}

Essa função representa o coração do sistema.


Estrutura de uma Ocorrência

Todas as regras devem produzir o mesmo formato.

{
  codigo: "IMG-ALT-MISSING",
  categoria: "Acessibilidade",
  gravidade: "media",
  quantidade: 2,
  mensagem: "Duas imagens não possuem texto alternativo",
  recomendacao: "Adicionar ALT descritivo"
}

Essa padronização torna possível:

  • ordenar;

  • filtrar;

  • exportar;

  • calcular score;

  • gerar relatórios;

  • criar gráficos.


Criando um Catálogo de Regras

As regras podem ficar em uma lista.

const regras = [
  {
    codigo: "HTML-AI-RESIDUE",
    categoria: "HTML",
    gravidade: "baixa",
    testar(post) {
      return /data-message-id/i.test(post.html);
    },
    mensagem: "Resíduo de interface de IA encontrado"
  },
  {
    codigo: "IMG-ALT-MISSING",
    categoria: "Acessibilidade",
    gravidade: "media",
    testar(post) {
      return post.imagensSemAlt > 0;
    },
    mensagem: "Imagem sem ALT"
  }
];

Depois, o motor executa todas.

function executarRegras(post) {
  return regras
    .filter(regra => regra.testar(post))
    .map(regra => ({
      codigo: regra.codigo,
      categoria: regra.categoria,
      gravidade: regra.gravidade,
      mensagem: regra.mensagem
    }));
}

Essa arquitetura facilita adicionar novas verificações sem alterar o restante do programa.


O Equivalente ao Return Code

No mainframe, um job pode terminar com:

RC=0000
RC=0004
RC=0008
RC=0012
RC=0016

O Blog Doctor pode adotar uma lógica semelhante.

BDC0000 – Post saudável
BDC0004 – Alerta leve
BDC0008 – Revisão recomendada
BDC0012 – Problema grave
BDC0016 – Conteúdo crítico

Exemplo:

BDC0008
Imagem sem ALT e heading inconsistente

Isso adiciona identidade à ferramenta e facilita a leitura dos relatórios.


Mensagens no Estilo Mainframe

A ferramenta pode gerar mensagens padronizadas.

BBDHTML001W TABLE FOUND INSIDE PARAGRAPH
BBDSEO004W INTERNAL LINK NOT FOUND
BBDACC002E IMAGE WITHOUT ALT ATTRIBUTE
BBDIA001I AI INTERFACE METADATA DETECTED
BBDDOC003W MICROSOFT WORD RESIDUE FOUND

Legenda:

I – Information
W – Warning
E – Error
S – Severe

Além de divertido, isso cria consistência.


O Dashboard Final

Imagine a tela principal.

┌─────────────────────────────────────────┐
│ BELLA COSA BLOG DOCTOR                  │
│ BLOG HEALTH MONITOR                     │
├─────────────────────────────────────────┤
│ Posts.........................4.018     │
│ Score médio.....................94      │
│ Alertas.........................126     │
│ Críticos.........................12     │
├─────────────────────────────────────────┤
│ HTML   ████████████████ 96              │
│ SEO    ███████████████  92              │
│ A11Y   ██████████████   88              │
│ LINKS  ███████████████  91              │
└─────────────────────────────────────────┘

Abas:

  • visão geral;

  • HTML;

  • SEO;

  • acessibilidade;

  • imagens;

  • links;

  • resíduos;

  • posts;

  • exportação.


O Que Não Deve Ser Automatizado

Uma ferramenta madura também precisa saber seus limites.

O Blog Doctor não deve:

  • reescrever automaticamente milhares de posts;

  • remover tags sem confirmação;

  • alterar URLs;

  • trocar títulos;

  • apagar marcadores;

  • corrigir links externos de forma cega;

  • publicar alterações sem backup.

Ele deve diagnosticar.

A correção pode ser manual ou assistida.

Mas sempre controlada.


Auditoria Não é Limpeza

Essa distinção é fundamental.

AUDITORIA
Descobre e classifica

LIMPEZA
Altera o conteúdo

Misturar as duas etapas é perigoso.

No mainframe, primeiro analisamos o dump.

Depois corrigimos o programa.

Não alteramos a memória do dump esperando que o sistema volte a funcionar.


O Bellacosa Blog Doctor como Projeto Real

O projeto pode evoluir em versões.

Versão 0.1

  • leitura de 100 posts;

  • contagem de palavras;

  • posts por ano.

Versão 0.5

  • paginação completa;

  • imagens;

  • links;

  • headings.

Versão 1.0

  • scanner HTML;

  • scanner SEO;

  • dashboard;

  • CSV.

Versão 2.0

  • IndexedDB;

  • processamento incremental;

  • mapa de calor;

  • evolução dos marcadores.

Versão 3.0

  • Web Workers;

  • auditoria remota de links;

  • relatórios JSON;

  • comparação entre auditorias.

Versão 4.0

  • sugestões de correção;

  • diff de HTML;

  • histórico de qualidade;

  • integração com Search Console.


Comparando Auditorias

Uma das funções mais poderosas será comparar dois momentos.

AUDITORIA 1 – JULHO/2026
Score geral.................88
HTML inválido...............49
Imagens sem ALT............312

AUDITORIA 2 – OUTUBRO/2026
Score geral.................94
HTML inválido...............11
Imagens sem ALT.............87

Isso permite medir evolução real.

Não apenas sensação.


O Histórico de Saúde

Cada auditoria pode ser salva.

{
  data: "2026-07-26",
  posts: 4018,
  score: 92,
  problemas: {
    html: 49,
    imagens: 312,
    links: 87
  }
}

Depois criamos um gráfico.

Julho...........88
Agosto..........90
Setembro........92
Outubro.........94

Esse é o verdadeiro conceito de evolução técnica.


O RMF Editorial

No z/OS, o RMF ajuda a observar recursos do sistema.

O Bellacosa Blog Doctor pode ser visto como um RMF editorial.

Em vez de medir:

  • CPU;

  • memória;

  • I/O;

  • canais;

  • dispositivos.

Ele mede:

  • HTML;

  • palavras;

  • imagens;

  • links;

  • headings;

  • marcadores;

  • qualidade;

  • acessibilidade.

O objetivo é o mesmo.

Transformar um sistema invisível em algo observável.


Um Scanner para Décadas de História

Um blog antigo não é apenas um conjunto de páginas.

É um sistema que atravessou:

  • mudanças de layout;

  • troca de editores;

  • novas tecnologias;

  • alterações de SEO;

  • migrações;

  • modismos;

  • ferramentas;

  • plataformas;

  • estilos de escrita.

O Blog Doctor permite enxergar essas camadas.

Um artigo de 2012 pode ter HTML completamente diferente de um artigo de 2026.

E isso não é necessariamente ruim.

É história.

O scanner não serve apenas para encontrar defeitos.

Ele também ajuda a compreender a evolução do acervo.


Conclusão

Construir o Bellacosa Blog Doctor significa aplicar ao universo editorial os mesmos princípios que tornaram o IBM Mainframe uma das plataformas mais confiáveis da história da computação.

Observabilidade.

Padronização.

Diagnóstico.

Controle.

Mensuração.

Rastreabilidade.

A ferramenta começa lendo um simples Feed Atom.

Depois converte cada post em uma estrutura organizada.

Em seguida executa algoritmos de análise.

Detecta resíduos.

Avalia HTML.

Examina imagens.

Verifica headings.

Conta palavras.

Classifica problemas.

Calcula scores.

Gera relatórios.

E transforma milhares de páginas dispersas em um sistema mensurável.

Essa talvez seja a maior evolução de toda a série.

No início queríamos apenas descobrir algumas tags invisíveis.

Agora estamos projetando uma plataforma de auditoria capaz de examinar décadas de produção digital.

O Feed Atom deixou de ser apenas um arquivo XML.

Virou dump.

Virou log.

Virou histórico.

Virou matéria-prima para inteligência editorial.

E o Bellacosa Blog Doctor deixa de ser apenas uma ideia curiosa.

Ele se transforma em uma ferramenta de engenharia.

Uma ferramenta que não promete milagres.

Não apaga tudo automaticamente.

Não substitui o julgamento humano.

Mas faz aquilo que as melhores ferramentas de diagnóstico sempre fizeram:

mostra a verdade antes que alguém toque em produção.

Porque, seja em um Data Center IBM ou em um blog com milhares de artigos, a regra continua sendo a mesma:

Primeiro diagnostique. Depois corrija. E nunca altere aquilo que você ainda não compreendeu.

🔎 CSI BLOGSPOT · ARQUIVO DE EVIDÊNCIAS

Blog Analytics: A Investigação Completa

Seis capítulos sobre auditoria de HTML, resíduos invisíveis, limpeza segura, checklist técnico e construção do Bellacosa Blog Doctor.

6 relatórios2018HTML · SEO · Blogger
CASE FILE 01

Blog Analytics — Parte I

Como descobrir evidências invisíveis no HTML de um blog antigo.

HTMLAuditoriaBlogspot
CASE FILE 02

Blog Analytics — Parte II

Os resíduos invisíveis deixados por editores, Word, IA e cópias antigas.

ResíduosWord HTMLIA
CASE FILE 03

Blog Analytics — Parte III

Como limpar milhares de posts sem destruir o acervo editorial.

LimpezaBackupQualidade
CASE FILE 04

Blog Analytics — Parte IV

Checklist de auditoria para blogs antigos e acervos com anos de história.

ChecklistSEO TécnicoAuditoria
CASE FILE 05

Blog Analytics — Parte V

Construindo o Bellacosa Blog Doctor e seu scanner automático.

Blog DoctorScannerJavaScript
CASE FILE 06

Blog Analytics — Parte VI

Criando o motor de regras, scores, prioridades e códigos de retorno.

Motor de RegrasScoreMainframe

Índice textual da série Blog Analytics

Esta série investiga a saúde técnica de blogs antigos no Blogger, cobrindo auditoria de HTML, resíduos de editores, SEO técnico, acessibilidade, limpeza segura, diagnóstico automatizado e motores de regras.

  1. Blog Analytics Parte I — Como descobrir evidências invisíveis
  2. Blog Analytics Parte II — Os resíduos invisíveis do HTML
  3. Blog Analytics Parte III — Como limpar com segurança
  4. Blog Analytics Parte IV — Checklist de auditoria
  5. Blog Analytics Parte V — Construindo o Bellacosa Blog Doctor
  6. Blog Analytics Parte VI — Criando o motor de regras

sexta-feira, 2 de março de 2018

Blog Analytics : Parte I – Como Descobrir HTML Invisível no Blogger Usando o Feed Atom Quando o Navegador Diz "Está Tudo Certo"... Mas o Feed Conta Outra História

 

Bellacosa Mainframe e o blog analytics parte i

☕ Um Café no Bellacosa Mainframe

Blog Analytics : Parte I – Como Descobrir HTML Invisível no Blogger Usando o Feed Atom

Quando o Navegador Diz "Está Tudo Certo"... Mas o Feed Conta Outra História

☕ Um Café no Bellacosa Mainframe

Durante muitos anos imaginei que o Blogger fazia uma limpeza completa do conteúdo que recebia. Afinal, se um post aparecia corretamente no navegador, por que deveria existir qualquer problema escondido?

Foi somente depois de milhares de publicações, centenas de artigos técnicos e uma curiosidade típica de quem trabalha com sistemas críticos IBM Mainframe que resolvi investigar uma hipótese aparentemente absurda:

Será que o Blogger armazena HTML invisível que nunca aparece para o leitor?

A resposta me surpreendeu.

E talvez surpreenda você também.


O Erro de Todo Blogueiro

A maioria das pessoas verifica apenas uma coisa:

  • o post abriu;

  • as imagens aparecem;

  • os títulos ficaram bonitos;

  • o Google indexou.

Fim.

Mas isso equivale a um programador COBOL que testa somente a saída do relatório sem nunca olhar o dump, o SYSOUT ou o JCL.

Quem trabalha com mainframe sabe:

O que aparece na tela nem sempre representa o que realmente foi gravado.

Foi exatamente isso que aconteceu.


A Investigação Começa

Minha suspeita surgiu após utilizar o ChatGPT para produzir artigos longos.

O fluxo era extremamente comum.

ChatGPT

↓

Copiar

↓

Blogger

↓

Publicar

Visualmente tudo parecia perfeito.

Até que comecei a perceber pequenas inconsistências.

Alguns snippets do Google ficavam estranhos.

Algumas tabelas se comportavam diferente.

Determinados títulos não eram interpretados corretamente.

Nada grave.

Mas havia algo...

Como em toda investigação do CSI.

A cena do crime parecia limpa demais.


O Primeiro Suspeito

Minha primeira hipótese foi simples.

Talvez o navegador estivesse corrigindo erros automaticamente.

Então resolvi olhar não a página publicada.

Mas o banco de dados do Blogger.

Existe uma forma de fazer isso.

Pouquíssima gente conhece.

O Feed Atom.


O Feed Atom

Todo blog Blogger possui um feed semelhante a este:

https://SEUBLOG.blogspot.com/feeds/posts/default

ou

https://SEUBLOG.blogspot.com/feeds/posts/default?max-results=500

Também é possível exportar todo o blog pelo painel do Blogger.

Esse arquivo XML contém praticamente tudo que o Blogger realmente armazenou:

  • título

  • conteúdo

  • categorias

  • datas

  • comentários

  • HTML

Ou seja...

É como abrir diretamente um VSAM KSDS ao invés de confiar apenas no CICS.


O Momento da Verdade

Quando começamos a analisar o XML surgiu uma surpresa enorme.

O conteúdo não era apenas texto.

Existiam dezenas de elementos invisíveis.

Como por exemplo:

data-message-author-role
data-message-id
data-message-model-slug

Além de diversos atributos HTML internos.

Esses elementos nunca apareciam para o leitor.

Mas continuavam gravados.


O Que São Esses data-* ?

Quem conhece HTML moderno sabe que atributos iniciados por

data-

são perfeitamente válidos.

Frameworks como React, Vue e Angular utilizam isso o tempo inteiro.

Exemplo:

<div data-user="1234"
     data-role="admin">

Não existe nada errado nisso.

O problema é outro.

Esses atributos pertencem ao funcionamento interno da interface.

Eles nunca deveriam ser publicados dentro de um artigo.


O Mistério do Copiar e Colar

Foi então que a investigação tomou outro rumo.

Quando copiamos um texto da interface do ChatGPT, normalmente imaginamos que estamos copiando apenas caracteres.

Na realidade não.

Na maioria dos navegadores copiamos um bloco chamado Rich Text.

Esse bloco pode conter:

  • HTML

  • CSS

  • spans

  • divs

  • estilos

  • atributos data-*

  • marcações internas

Dependendo do editor utilizado, tudo isso viaja junto.

O Blogger simplesmente recebe.

E grava.


O Blogger Não Reclama

Aqui veio outra descoberta curiosa.

O Blogger praticamente nunca diz:

"Seu HTML está errado."

Ele simplesmente aceita.

Até mesmo estruturas como:

<p>

<table>

...

</table>

</p>

que são inválidas segundo a especificação HTML.


O Navegador "Conserta"

Chrome.

Firefox.

Edge.

Safari.

Todos eles possuem um parser extremamente tolerante.

Quando encontram algo assim:

<p>

<table>

internamente fazem algo parecido com:

<p></p>

<table>

...

</table>

<p></p>

Para o usuário parece perfeito.

Mas o HTML continua tecnicamente incorreto.

É exatamente como um compilador COBOL que gera um Warning, executa normalmente e produz o resultado esperado.

O programa "funciona".

Mas existe uma dívida técnica escondida.


O Feed Não Mente

Foi aí que compreendi algo importante.

O navegador tenta consertar.

O Blogger tenta publicar.

Mas o Feed Atom mostra praticamente o conteúdo bruto armazenado.

Ele é o equivalente ao dump de memória de um programa COBOL.

Ou ao SYSUDUMP de um ABEND.

Não existe maquiagem.

Existe apenas a verdade.


O Que Encontramos

Depois da primeira auditoria apareceram dezenas de problemas.

Entre eles:

  • resíduos do ChatGPT;

  • HTML mal fechado;

  • <p><table>;

  • <h2><table>;

  • spans desnecessários;

  • HTML herdado do Word;

  • atributos internos;

  • caracteres invisíveis.

Nenhum deles era perceptível durante a leitura do blog.


O Impacto no SEO

Será que isso destrói o ranqueamento?

Provavelmente não.

Mas aumenta o ruído.

Motores de busca precisam reconstruir o DOM.

Quanto mais HTML estranho existir:

  • maior o trabalho do parser;

  • maior a chance de interpretações diferentes;

  • maior a possibilidade de snippets inconsistentes.

Em blogs pequenos isso costuma passar despercebido.

Em um acervo com milhares de artigos, pequenas inconsistências acabam se acumulando.


O Maior Ensinamento

Essa investigação deixou uma lição valiosa.

Não basta olhar a página publicada.

É preciso olhar aquilo que realmente foi gravado.

No universo IBM Mainframe aprendemos isso desde cedo.

Um relatório bonito não significa que o programa esteja correto.

Da mesma forma, um post bonito não significa que o HTML esteja limpo.


O Bellacosa CSI

Essa descoberta acabou originando um novo projeto.

Uma espécie de laboratório forense para Blogger.

A ideia é simples.

Tratar o Feed Atom como um dump de produção.

Analisar automaticamente:

  • HTML inválido;

  • resíduos de IA;

  • problemas de SEO;

  • tabelas incorretas;

  • headings mal estruturados;

  • imagens sem atributos;

  • links defeituosos;

  • caracteres invisíveis.

Em outras palavras...

Construir um verdadeiro CSI Blogspot.


Conclusão

Durante anos imaginei que o Blogger funcionava como um compilador rigoroso, eliminando qualquer imperfeição antes da publicação.

Descobri que ele se comporta muito mais como um repositório: recebe, armazena e confia que o navegador fará os ajustes necessários.

Foi o Feed Atom que revelou aquilo que nem o editor do Blogger, nem o navegador e, muitas vezes, nem o próprio autor percebiam.

Se você possui dezenas, centenas ou milhares de artigos publicados, vale a pena fazer essa investigação. Talvez seu blog esteja impecável na superfície, mas carregando pequenas marcas invisíveis acumuladas ao longo dos anos.

No próximo capítulo, entraremos ainda mais fundo na cena do crime. Vamos aprender a identificar, classificar e remover resíduos deixados por ferramentas modernas — como ChatGPT, Google Docs, Microsoft Word e outros editores — antes que eles se transformem em dívida técnica permanente.

Porque, assim como no mundo dos mainframes, os maiores problemas quase nunca aparecem na tela. Eles ficam escondidos nos bastidores, aguardando alguém curioso o bastante para ler o "dump" da história.

🔎 CSI BLOGSPOT · ARQUIVO DE EVIDÊNCIAS

Blog Analytics: A Investigação Completa

Seis capítulos sobre auditoria de HTML, resíduos invisíveis, limpeza segura, checklist técnico e construção do Bellacosa Blog Doctor.

6 relatórios2018HTML · SEO · Blogger
CASE FILE 01

Blog Analytics — Parte I

Como descobrir evidências invisíveis no HTML de um blog antigo.

HTMLAuditoriaBlogspot
CASE FILE 02

Blog Analytics — Parte II

Os resíduos invisíveis deixados por editores, Word, IA e cópias antigas.

ResíduosWord HTMLIA
CASE FILE 03

Blog Analytics — Parte III

Como limpar milhares de posts sem destruir o acervo editorial.

LimpezaBackupQualidade
CASE FILE 04

Blog Analytics — Parte IV

Checklist de auditoria para blogs antigos e acervos com anos de história.

ChecklistSEO TécnicoAuditoria
CASE FILE 05

Blog Analytics — Parte V

Construindo o Bellacosa Blog Doctor e seu scanner automático.

Blog DoctorScannerJavaScript
CASE FILE 06

Blog Analytics — Parte VI

Criando o motor de regras, scores, prioridades e códigos de retorno.

Motor de RegrasScoreMainframe

Índice textual da série Blog Analytics

Esta série investiga a saúde técnica de blogs antigos no Blogger, cobrindo auditoria de HTML, resíduos de editores, SEO técnico, acessibilidade, limpeza segura, diagnóstico automatizado e motores de regras.

  1. Blog Analytics Parte I — Como descobrir evidências invisíveis
  2. Blog Analytics Parte II — Os resíduos invisíveis do HTML
  3. Blog Analytics Parte III — Como limpar com segurança
  4. Blog Analytics Parte IV — Checklist de auditoria
  5. Blog Analytics Parte V — Construindo o Bellacosa Blog Doctor
  6. Blog Analytics Parte VI — Criando o motor de regras
Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...