Translate

Mostrar mensagens com a etiqueta Blogger. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Blogger. Mostrar todas as mensagens

quinta-feira, 22 de setembro de 2022

Arquitetura Final : El Jefe Midnight Lunch Wiki


Arquitetura Final

                   Blogger XML
                        │
                        ▼
              Conversão para Markdown
                        │
                        ▼
              Bellacosa Knowledge Vault
                  (Obsidian Vault)
                        │
     ┌──────────────────┼──────────────────┐
     │                  │                  │
     ▼                  ▼                  ▼
 Graph View       Busca Instantânea     IA
     │                  │                  │
     ▼                  ▼                  ▼
 Relações         Wikilinks         Melhorias
     │                  │                  │
     └──────────────┬──────────────────────┘
                    ▼
             Exportação WordPress

ETAPA 1 — Fazer backup do Blogger

Baixe o XML completo.

Exemplo:

blog-2026.xml

Nunca trabalhe diretamente sobre ele.

Faça uma cópia.

Backup/
    Blogger.xml

Trabalho/
    Blogger.xml

ETAPA 2 — Converter XML para Markdown

Objetivo:

1 artigo = 1 arquivo .md

Resultado esperado

Vault

    COBOL

        ALTER.md

        PERFORM.md

        CICS.md

    IA

        Agentes.md

        MCP.md

    LinuxONE

    Kubernetes

    Docker

    DevOps

Cada postagem vira um Markdown.


ETAPA 3 — Instalar o Obsidian

Criar um Vault chamado

Bellacosa Mainframe Vault

Estrutura recomendada

Vault

00 Inbox

01 Artigos

02 Imagens

03 Fontes

04 Templates

05 Projetos

06 Pessoas

07 Empresas

08 Cursos

09 Rascunhos

10 Publicados

99 Lixeira

ETAPA 4 — Organizar por assunto

Ao invés de datas, organize por conhecimento.

Exemplo

COBOL

CICS

IMS

JCL

VSAM

DB2

REXX

Assembler

LinuxONE

IBM Z

OpenShift

Docker

Kubernetes

Cloud

IA

Machine Learning

Anime

Star Trek

DevOps

Segurança

Observabilidade

Muito mais fácil de pesquisar.


ETAPA 5 — Padronizar FrontMatter

Todo artigo começa assim:

---
title: Docker sem Mistérios
author: Vagner Bellacosa
date: 2026-07-15
category: Docker
tags:
   - docker
   - containers
   - devops
seo:
   description: Guia Docker
status: publicado
blog: Bellacosa Mainframe
---

Depois vem o texto.


ETAPA 6 — Criar Wikilinks

Ao invés de links comuns

Docker

vira

[[Docker]]

[[Kubernetes]]

[[OpenShift]]

[[DevOps]]

[[IBM Z]]

Automaticamente nasce uma rede.


ETAPA 7 — Criar páginas índice

Exemplo

COBOL.md

Dentro

# COBOL

## Sintaxe

[[PERFORM]]

[[ALTER]]

[[CALL]]

[[SECTION]]

[[PARAGRAPH]]

## Arquivos

[[VSAM]]

[[QSAM]]

[[ESDS]]

## Banco

[[DB2]]

[[IMS]]

## CICS

[[COMMAREA]]

[[Pseudo Conversacional]]

É literalmente uma Wikipédia.


ETAPA 8 — Instalar Plugins

Dataview ⭐⭐⭐⭐⭐

Transforma notas em banco de dados.

Exemplo

TABLE tags

FROM "01 Artigos"

WHERE contains(tags,"cobol")

Omnisearch ⭐⭐⭐⭐⭐

Busca em milhares de artigos instantaneamente.

Melhor que Windows Search.


Backlinks

Mostra

Quem cita Docker?

Quem cita CICS?

Quem cita ALTER?

Tag Wrangler

Organiza milhares de tags.


Homepage

Cria uma Home bonita.


Calendar

Histórico de produção.


QuickAdd

Automatiza criação de artigos.


Templater ⭐⭐⭐⭐⭐

Cria modelos.

Novo artigo já nasce pronto.


Excalidraw

Diagramas.


Canvas

Mapas mentais.


Local Graph

Fantástico.

Mostra somente os vizinhos do artigo.


ETAPA 9 — Criar Templates

Novo artigo

Título

Resumo

Introdução

História

Como funciona

Arquitetura

Exemplo

Código

Boas práticas

Curiosidades

Easter Egg

Leia também

Links oficiais

Sempre igual.


ETAPA 10 — Criar Tags

Exemplo

#cobol

#cics

#db2

#linuxone

#ibmz

#docker

#cloud

#ia

#anime

#star-trek

#performance

#tutorial

#curso

#segurança

#devops

ETAPA 11 — Criar MOCs (Maps of Content)

Um dos recursos mais poderosos do Obsidian.

Exemplo

MOC - COBOL

↓

Sintaxe

↓

Comandos

↓

Arquivos

↓

Performance

↓

Debug

↓

Boas práticas

↓

Cursos

↓

Artigos

É o índice mestre.


ETAPA 12 — Graph View

Depois de alguns milhares de artigos...

Você verá algo assim.

             COBOL
             ●
          /  |  \
         /   |   \
      CICS DB2 VSAM
       |      |
       |      |
     IMS    SQL
       \      /
        \    /
        IBM Z
          |
      LinuxONE
          |
      OpenShift
          |
       Docker
          |
     Kubernetes
          |
      DevOps
          |
      GitHub

Seu conhecimento vira uma galáxia.


ETAPA 13 — Git

Todo Vault fica dentro de um repositório.

git init

Depois

commit

commit

commit

commit

Nunca perde nada.

Pode voltar anos.


ETAPA 14 — IA

Agora entra o ChatGPT.

Ao abrir um artigo.

Peça

Melhore este artigo.

Adicione 800 palavras.

Inclua curiosidades.

Inclua exemplos.

Explique para um COBOL Padawan.

Crie SEO.

Crie FAQ.

Crie Links Internos.

Crie Tags.

Crie Easter Eggs.

Sugira imagens.

Sugira artigos relacionados.

Encontre informações desatualizadas.

Em minutos o artigo fica muito superior.


ETAPA 15 — Exportar para WordPress

Quando terminar.

Converta Markdown para

WordPress XML

ou

HTML

ou

Gutenberg Blocks

Depois apenas importe.


ETAPA 16 — IA sobre TODO o acervo

Esse é o ponto em que seu projeto se diferencia.

Imagine perguntar:

Onde já expliquei CICS?

ou

Quais artigos falam de RACF?

ou

Liste tudo sobre IA relacionado ao Mainframe.

ou

Quais artigos precisam ser atualizados para IBM z17?

ou

Quais artigos citam Kubernetes mas não mencionam OpenShift?

A IA responde usando todo o seu acervo.


ETAPA 17 — Evolução para um "Bellacosa Mainframe Knowledge Vault"

Depois de consolidado, o Vault deixa de ser apenas um editor de artigos e passa a ser um sistema de conhecimento integrado. Além dos artigos, você pode incluir cursos, apresentações, PDFs, imagens, vídeos, laboratórios, códigos COBOL, scripts REXX, JCLs e links externos, todos interligados por wikilinks e pesquisáveis em segundos.

Resultado esperado

Ao final, você terá uma plataforma com características que vão muito além de um blog:

  • 3.000+ artigos interligados por links semânticos.

  • Pesquisa instantânea em todo o acervo.

  • Visualização em grafo das relações entre os temas.

  • Templates padronizados para novos conteúdos.

  • Versionamento completo com Git.

  • Funcionamento totalmente offline.

  • Integração com IA para revisão, expansão e atualização contínua.

  • Exportação para WordPress, HTML ou outros formatos quando desejar.

Na prática, seu conteúdo deixa de ser uma sequência cronológica de postagens e se transforma em uma enciclopédia técnica viva, onde COBOL, CICS, Db2, IMS, DevOps, IA, LinuxONE, IBM Z e todos os demais assuntos passam a formar uma rede de conhecimento navegável, preservando e valorizando o enorme patrimônio intelectual que você já construiu.


OBSIDIAN https://eljefemidnightlunch.blogspot.com/2022/09/obsidian-sem-misterios-o-guia.html

segunda-feira, 19 de julho de 2021

Do Blogger ao Obsidian: A Jornada para Transformar um Blog Antigo em uma Wiki Pessoal Digna da Frota Estelar

 

Bellacosa Mainframe uma wiki para usar o obsidian

☕ Um Café no Bellacosa Mainframe

Do Blogger ao Obsidian: A Jornada para Transformar um Blog Antigo em uma Wiki Pessoal Digna da Frota Estelar

Há um momento na vida de todo programador COBOL em que ele percebe uma verdade desconfortável:

o código pode sobreviver por décadas, mas o conhecimento pode desaparecer em uma tarde.

Um programa COBOL criado em 1987 ainda pode estar processando milhões de transações. Um JCL escrito antes de muita gente nascer pode continuar rodando religiosamente às duas da manhã. Um arquivo VSAM pode carregar a memória operacional de uma empresa inteira.

Mas um blog?

Um blog depende de plataforma, servidor, domínio, política comercial, formato de exportação, links, imagens, bancos de dados, APIs, temas, plugins e, às vezes, de uma boa dose de sorte.

Foi exatamente nesse ponto que começou esta missão.

O objetivo inicial parecia simples:

baixar um blog do Blogspot, abrir o conteúdo em uma ferramenta desktop, editar os artigos, melhorar os textos, incluir novas informações e, mais tarde, converter tudo para WordPress.

Mas, como acontece em qualquer missão da Frota Estelar, a pergunta inicial escondia uma arquitetura muito maior.

O que parecia ser apenas uma migração de blog revelou-se um projeto de preservação de conhecimento.

E assim nasceu a ideia de construir uma verdadeira:

El Jefe Midnight Lunch Wiki

Uma Wikipédia pessoal, offline, pesquisável, versionada, enriquecida com inteligência artificial e construída sobre o Obsidian.

Prepare o café. Ajuste o uniforme. Verifique o estado dos escudos. Esta viagem começa em um arquivo XML e termina em uma galáxia de conhecimento.


1. O problema real não é mover o blog

Quando alguém diz:

“Quero converter meu Blogger para WordPress”

a primeira reação costuma ser procurar um conversor.

Blogger XML para WordPress XML.

Parece lógico.

Mas essa abordagem enxerga apenas o transporte, não o patrimônio.

Imagine um mainframe com milhares de programas COBOL. Você não faria uma migração simplesmente copiando todos os fontes para uma pasta chamada NOVO-SISTEMA.

Seria necessário identificar:

  • programas ativos;

  • programas obsoletos;

  • dependências;

  • chamadas entre módulos;

  • arquivos utilizados;

  • tabelas acessadas;

  • rotinas duplicadas;

  • versões antigas;

  • documentação;

  • regras de negócio;

  • riscos operacionais.

Com um blog de milhares de artigos acontece a mesma coisa.

Você não possui apenas postagens.

Você possui:

  • conhecimento técnico;

  • memórias;

  • séries;

  • tutoriais;

  • análises;

  • imagens;

  • títulos;

  • categorias;

  • marcadores;

  • hyperlinks;

  • relacionamentos invisíveis;

  • artigos incompletos;

  • textos duplicados;

  • conteúdos atualizados;

  • conteúdos desatualizados;

  • material que pode virar curso;

  • material que pode virar livro;

  • material que pode virar newsletter;

  • material que pode virar vídeo.

O verdadeiro projeto, portanto, não é:

Blogger → WordPress

O verdadeiro projeto é:

Blog antigo
    ↓
Base de conhecimento
    ↓
Edição
    ↓
Enriquecimento
    ↓
Organização
    ↓
Preservação
    ↓
Publicação multiplataforma

Essa diferença é gigantesca.


2. Por que o Obsidian entra nesta história?

O Obsidian é uma ferramenta desktop baseada em arquivos Markdown.

Markdown é um formato de texto simples.

Um artigo pode ser armazenado assim:

# COBOL sem Mistérios

COBOL é uma linguagem criada para processamento de negócios.

## Principais características

- Legibilidade
- Estabilidade
- Precisão decimal
- Integração com arquivos e bancos

Esse arquivo é apenas texto.

Não depende de um banco de dados secreto.

Não depende de uma plataforma proprietária.

Não depende do Blogger.

Não depende do WordPress.

Não depende sequer do próprio Obsidian.

Você pode abrir o arquivo com:

  • Bloco de Notas;

  • Visual Studio Code;

  • Notepad++;

  • GitHub;

  • qualquer editor de texto;

  • scripts Python;

  • ferramentas Linux;

  • geradores de site estático;

  • sistemas de inteligência artificial.

Essa é uma diferença fundamental.

No Blogger, seu conteúdo vive dentro da plataforma.

No Obsidian, seu conteúdo vive em seus arquivos.

O Obsidian é a ponte de comando.

Mas os dados continuam sendo seus.


3. O que é um Vault?

No Obsidian, uma coleção de notas é chamada de Vault.

Em português, poderíamos chamar de cofre.

Para o projeto Bellacosa, o nome perfeito seria:

Bellacosa Mainframe Vault

ou:

El Jefe Midnight Lunch Wiki

Esse Vault nada mais é do que uma pasta no computador.

Exemplo:

C:\BellacosaVault

Dentro dela você poderia ter:

00-Inbox
01-Artigos
02-Imagens
03-Templates
04-Cursos
05-Livros
06-Pesquisas
07-Códigos
08-Fontes
09-Publicados
10-Rascunhos
99-Arquivo

Cada artigo seria um arquivo .md.

Exemplo:

01-Artigos\COBOL\Alter-sem-Misterios.md
01-Artigos\CICS\Commarea-sem-Misterios.md
01-Artigos\DB2\SQLCODE-sem-Misterios.md
01-Artigos\IA\Agentes-de-IA.md
01-Artigos\Anime\Log-Horizon.md

É como se cada postagem fosse um membro da tripulação.

Cada uma tem função própria.

Mas todas pertencem à mesma nave.


4. Por que isso se parece com uma Wikipédia?

Porque o Obsidian permite criar links entre notas usando uma sintaxe muito simples:

[[COBOL]]
[[CICS]]
[[Db2]]
[[VSAM]]
[[IBM Z]]

Suponha que você esteja escrevendo um artigo sobre programas COBOL executados no CICS.

Você poderia escrever:

Um programa [[COBOL]] pode ser executado sob o controle do [[CICS]], acessar dados no [[Db2]] e manipular arquivos [[VSAM]].

Cada termo entre colchetes vira um link.

Ao clicar em [[CICS]], você abre a nota CICS.

Ao clicar em [[Db2]], abre a nota Db2.

Ao clicar em [[VSAM]], abre a nota VSAM.

Agora imagine isso em três mil artigos.

Seu blog deixa de ser uma linha cronológica.

Ele vira uma rede.

Um mapa.

Uma enciclopédia.

Uma galáxia.


5. O poder dos backlinks

Os backlinks mostram quem aponta para determinada nota.

Imagine abrir a nota:

CICS.md

E o Obsidian mostrar:

Artigos que mencionam CICS:

- COBOL Online sem Mistérios
- COMMAREA sem Mistérios
- Pseudoconversacional
- BMS
- EIBRESP
- CEDF
- CECI
- CICS Web Services
- z/OS Connect

Isso é extremamente poderoso.

No Blogger, você precisa lembrar manualmente quais artigos estão relacionados.

No Obsidian, o sistema mostra automaticamente.

Backlink é como uma tabela de chamadas de programas.

Se um módulo COBOL é chamado por vinte programas, você quer saber quem são eles.

Se um artigo sobre CICS é citado por vinte outros textos, você também quer saber.

A lógica é parecida.


6. O Graph View: a galáxia do conhecimento

O Graph View é uma visualização gráfica das notas e ligações.

Imagine algo assim:

                  IBM Z
                    |
          ----------------------
          |          |         |
        COBOL       CICS      Db2
          |          |         |
       JCL        COMMAREA    SQL
          |          |         |
       JES2        BMS       BIND

Cada nota aparece como um ponto.

Cada ligação aparece como uma linha.

Em um acervo pequeno, o grafo é curioso.

Em um acervo de milhares de artigos, ele se torna um mapa intelectual.

Você pode descobrir que:

  • muitos artigos de COBOL se conectam a CICS;

  • textos de DevOps se conectam a Git, Jenkins e Ansible;

  • artigos sobre IA se ligam a segurança, governança e automação;

  • conteúdos de anime se conectam a cultura japonesa, filosofia e tecnologia;

  • Star Trek aparece como metáfora em vários temas técnicos.

O Graph View mostra algo que o Blogger nunca mostrou:

como sua mente organiza o conhecimento.

Esse é um dos grandes easter eggs do Obsidian.

Você começa pensando que está organizando arquivos.

Depois percebe que está visualizando sua própria arquitetura mental.


7. O primeiro cuidado: o arquivo XML correto

Durante a missão apareceu um arquivo chamado:

export.xml

Parecia promissor.

Mas ao abrir o conteúdo, surgiu uma surpresa.

O arquivo começava com:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

E continha estruturas como:

<url>
    <loc>https://eljefemidnightlunch.blogspot.com/...</loc>
    <lastmod>2026-07-13T21:29:22Z</lastmod>
</url>

Isso significa que o arquivo não era o backup completo do Blogger.

Era um sitemap.

Um sitemap é uma lista de URLs destinada principalmente a mecanismos de busca.

Ele informa:

  • endereço da página;

  • data de modificação;

  • às vezes prioridade;

  • às vezes frequência de atualização.

Mas não possui necessariamente:

  • corpo do artigo;

  • título completo em campo estruturado;

  • marcadores;

  • comentários;

  • autor;

  • conteúdo HTML;

  • imagens incorporadas;

  • configurações da postagem.

O arquivo enviado era, portanto, um mapa de rotas, não a carga da nave.

Essa distinção é importantíssima.

Um sitemap diz:

“Existe uma página neste endereço.”

O backup do Blogger diz:

“Aqui está a página, o título, o conteúdo, a data, as categorias e seus metadados.”

Em linguagem mainframe:

O sitemap é como um catálogo de datasets.

O backup completo é como o conteúdo real dos datasets.

Saber que HLQ.PRODUCAO.CLIENTES existe não significa que você possui os registros dentro dele.


8. Como reconhecer um verdadeiro backup do Blogger

Um backup completo do Blogger normalmente usa o formato Atom.

Ele costuma começar com algo parecido com:

<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom'>

Dentro dele aparecem várias estruturas <entry>.

Exemplo simplificado:

<entry>
    <title>COBOL sem Mistérios</title>
    <published>2026-07-10T10:00:00Z</published>
    <content type="html">
        <![CDATA[
            <p>COBOL é uma linguagem...</p>
        ]]>
    </content>
</entry>

Cada <entry> pode representar:

  • uma postagem;

  • um comentário;

  • uma página;

  • uma configuração;

  • outro item exportado pelo Blogger.

O conversor precisa analisar o tipo de entrada.

Não basta transformar cada <entry> em artigo.

É necessário filtrar corretamente.


9. Passo a passo para obter o arquivo certo

No Blogger, o caminho normalmente é semelhante a:

Configurações
    ↓
Gerenciar blog
    ↓
Fazer backup do conteúdo
    ↓
Download

Depois do download, guarde o arquivo original em uma pasta segura.

Exemplo:

D:\Backup-Blogger\Original\blog-backup.xml

Faça uma cópia de trabalho:

D:\Backup-Blogger\Trabalho\blog-backup.xml

Nunca altere diretamente o original.

Essa é uma regra clássica de operações.

Um operador experiente jamais testa uma rotina de reorganização usando o único arquivo de produção disponível.

O mesmo vale para seu blog.


10. A estratégia correta de conversão

O melhor projeto não gera apenas um formato.

Gera vários.

Blogger Atom XML
        |
        |---- WordPress WXR
        |
        |---- Markdown
        |
        |---- HTML
        |
        |---- JSON
        |
        |---- SQLite
        |
        |---- CSV de índice
        |
        |---- Relatório de erros

Por quê?

Porque cada formato atende a uma missão.

WordPress WXR

Serve para importar no WordPress.

Markdown

Serve para Obsidian, GitHub, Hugo, Jekyll, MkDocs e edição offline.

HTML

Preserva melhor o conteúdo visual original.

JSON

Facilita automações e integração com scripts.

SQLite

Permite pesquisas estruturadas.

CSV

Ajuda a criar inventários.

Relatório de erros

Mostra:

  • títulos ausentes;

  • datas inválidas;

  • HTML quebrado;

  • imagens externas;

  • links problemáticos;

  • artigos duplicados;

  • entradas vazias.

Esse é o equivalente editorial de rodar uma validação antes do deploy.


11. Como deve ficar cada arquivo Markdown

Um artigo convertido não deve conter apenas o texto.

Ele deve carregar metadados.

Exemplo:

---
title: "CICS sem Mistérios"
author: "Vagner Bellacosa"
published: 2026-07-10
updated: 2026-07-15
status: publicado
original_url: "https://eljefemidnightlunch.blogspot.com/..."
categories:
  - Mainframe
  - IBM Z
tags:
  - cics
  - cobol
  - bms
  - mainframe
seo_description: "Guia introdutório sobre CICS para programadores COBOL."
source: blogger
---

Essa área é chamada de frontmatter.

Depois vem o conteúdo:

# CICS sem Mistérios

## Introdução

O CICS é um monitor transacional...

O frontmatter transforma o texto em um registro estruturado.

É como a WORKING-STORAGE SECTION do artigo.

O corpo é a narrativa.

O frontmatter é a estrutura de dados.


12. Organização por pastas ou por tags?

Essa é uma pergunta clássica.

A melhor resposta é:

use os dois, mas não exagere.

Uma estrutura possível:

01-Artigos
    Mainframe
    IA
    DevOps
    Anime
    Cultura Japonesa
    Star Trek
    Memórias

Dentro dos artigos, use tags mais específicas:

tags:
  - cobol
  - cics
  - tutorial
  - iniciante
  - ibm-z

As pastas organizam grandes territórios.

As tags descrevem características.

Pense assim:

  • pasta é o setor da nave;

  • tag é a função do tripulante.

Um artigo pode estar na pasta Mainframe, mas ter tags:

cobol, cics, tutorial, performance, iniciante

13. Plugins essenciais do Obsidian

O Obsidian já é poderoso sem plugins.

Mas alguns recursos ampliam muito o sistema.

Dataview

Permite consultar notas como banco de dados.

Exemplo:

TABLE published, tags
FROM "01-Artigos"
WHERE contains(tags, "cobol")
SORT published DESC

Isso gera uma tabela com todos os artigos COBOL.

É quase um SQL para notas.

Para um programador COBOL, isso soa familiar.

Templater

Cria modelos de artigos.

Ao iniciar uma nova nota, ela pode nascer com:

  • título;

  • data;

  • autor;

  • estrutura;

  • seções;

  • campos de SEO;

  • checklist.

Omnisearch

Melhora a pesquisa em grandes acervos.

Tag Wrangler

Ajuda a renomear e consolidar tags.

QuickAdd

Automatiza criação de notas e fluxos.

Excalidraw

Permite criar diagramas.

Canvas

Ajuda a montar mapas visuais.

Git

Permite versionar o Vault.


14. Git: o SMF do seu conhecimento

O Git registra versões.

Você edita um artigo hoje.

Amanhã altera novamente.

Depois percebe que a versão anterior era melhor.

Com Git, você pode recuperar.

Exemplo:

git init
git add .
git commit -m "Importação inicial do Blogger"

Depois:

git add .
git commit -m "Revisão dos artigos COBOL"

Mais tarde:

git add .
git commit -m "Inclusão de backlinks entre CICS e Db2"

Cada commit é um checkpoint.

É como se seu Vault tivesse um histórico de mudanças semelhante a um log operacional.

O Git não substitui backup.

Mas adiciona rastreabilidade.

Regra de ouro:

Git registra mudanças. Backup protege contra perda física.

O ideal é usar os dois.


15. Como integrar inteligência artificial

A IA pode atuar em três níveis.

Nível 1 — Artigo individual

Você abre um texto e pede:

  • melhorar a clareza;

  • corrigir erros;

  • expandir conceitos;

  • adicionar exemplos;

  • criar FAQ;

  • gerar SEO;

  • sugerir título;

  • identificar informações desatualizadas;

  • criar links internos;

  • adaptar para iniciante.

Nível 2 — Conjunto de artigos

Você seleciona uma pasta e pergunta:

  • quais artigos estão duplicados?

  • quais podem virar uma série?

  • quais estão incompletos?

  • quais mencionam IBM z14 e precisam ser atualizados?

  • quais falam de CICS sem citar COMMAREA?

  • quais poderiam formar um curso?

Nível 3 — Todo o acervo

Aqui surge a verdadeira inteligência editorial.

Você pode perguntar:

“Mostre todos os textos que relacionam COBOL com DevOps.”

Ou:

“Quais artigos sobre IA mencionam governança, risco e segurança?”

Ou:

“Monte uma trilha de aprendizado para um iniciante usando apenas artigos existentes.”

Nesse momento, seu blog deixa de ser arquivo morto.

Ele se torna um sistema consultável.


16. IA local ou IA na nuvem?

Existem dois caminhos.

IA na nuvem

Exemplos:

  • ChatGPT;

  • Claude;

  • Gemini;

  • APIs comerciais.

Vantagens:

  • modelos mais avançados;

  • excelente qualidade;

  • pouca configuração.

Cuidados:

  • custos;

  • privacidade;

  • limite de tokens;

  • envio de conteúdo para serviços externos.

IA local

Exemplos:

  • Ollama;

  • Open WebUI;

  • AnythingLLM;

  • modelos locais.

Vantagens:

  • maior controle;

  • funcionamento offline;

  • privacidade;

  • integração local.

Desvantagens:

  • exige mais memória;

  • exige configuração;

  • modelos podem ser menos capazes;

  • processamento pode ser lento.

Uma estratégia híbrida costuma ser melhor.

Use IA local para:

  • busca;

  • classificação;

  • perguntas simples;

  • análise de grandes volumes.

Use modelos de nuvem para:

  • reescrita sofisticada;

  • criação de artigos;

  • revisão editorial;

  • síntese complexa.


17. O perigo das imagens externas

Muitos blogs antigos possuem imagens hospedadas em serviços externos.

O artigo pode conter:

<img src="https://algum-servidor.com/imagem.jpg">

Isso funciona enquanto o servidor existir.

Se o serviço desaparecer, a imagem quebra.

Esse fenômeno é chamado de link rot.

Durante a migração, o ideal é:

  1. localizar todas as URLs de imagens;

  2. baixar as imagens;

  3. renomear os arquivos;

  4. guardar em 02-Imagens;

  5. atualizar os links nos artigos;

  6. registrar a URL original;

  7. identificar imagens ausentes.

Exemplo:

02-Imagens
    2026
        cics-sem-misterios-01.jpg
        cics-sem-misterios-02.png

No Markdown:

![[cics-sem-misterios-01.jpg]]

Ou, para compatibilidade externa:

![Diagrama CICS](../02-Imagens/2026/cics-sem-misterios-01.jpg)

18. Por que não converter diretamente para Xanga?

O WordPress possui diferentes importadores, incluindo formatos históricos.

Na tela mostrada, aparecia o importador Xanga.

Mas isso não significa que o Xanga seja a melhor rota.

Converter Blogger para Xanga apenas para importar no WordPress seria parecido com:

COBOL
  ↓
Assembler intermediário
  ↓
Java
  ↓
Aplicação final

Pode funcionar.

Mas cria etapas desnecessárias.

A rota mais limpa é:

Blogger Atom XML
        ↓
WordPress WXR

Ou:

Blogger Atom XML
        ↓
Markdown
        ↓
WordPress

O formato Xanga só faria sentido se o importador do WordPress aceitasse melhor aquele padrão e não houvesse alternativa.

Em geral, o formato WXR é mais adequado.


19. O WordPress WXR

WXR significa WordPress eXtended RSS.

É um XML com elementos como:

<item>
    <title>CICS sem Mistérios</title>
    <wp:post_date>2026-07-10 10:00:00</wp:post_date>
    <content:encoded><![CDATA[
        <p>Conteúdo...</p>
    ]]></content:encoded>
    <wp:post_type>post</wp:post_type>
</item>

Ele pode carregar:

  • posts;

  • páginas;

  • categorias;

  • tags;

  • autores;

  • comentários;

  • campos personalizados;

  • datas;

  • status.

Por isso é o formato natural para migração ao WordPress.


20. Plano de ação prático

Fase 1 — Preservação

  • localizar o backup Atom correto;

  • copiar o arquivo original;

  • calcular hash;

  • guardar em dois locais;

  • validar o XML;

  • contar entradas.

Fase 2 — Inventário

  • contar posts;

  • contar páginas;

  • contar comentários;

  • listar tags;

  • listar categorias;

  • identificar imagens;

  • identificar URLs.

Fase 3 — Conversão

  • gerar Markdown;

  • gerar WordPress WXR;

  • gerar HTML;

  • gerar JSON;

  • gerar relatório de erros.

Fase 4 — Obsidian

  • criar Vault;

  • importar Markdown;

  • configurar anexos;

  • instalar plugins;

  • padronizar frontmatter;

  • criar templates.

Fase 5 — Organização

  • consolidar tags;

  • criar MOCs;

  • criar índices;

  • adicionar wikilinks;

  • identificar duplicações.

Fase 6 — IA

  • revisar artigos;

  • expandir conteúdo;

  • atualizar informações;

  • gerar SEO;

  • criar FAQ;

  • sugerir links internos.

Fase 7 — Publicação

  • testar importação em WordPress local;

  • revisar mídia;

  • revisar slugs;

  • configurar redirecionamentos;

  • publicar gradualmente.


21. MOCs: os mapas de conteúdo

MOC significa Map of Content.

É uma nota que funciona como índice temático.

Exemplo:

# MOC — COBOL

## Fundamentos

- [[História do COBOL]]
- [[Estrutura de um programa COBOL]]
- [[DIVISION]]
- [[SECTION]]
- [[PARAGRAPH]]

## Controle de fluxo

- [[PERFORM]]
- [[EVALUATE]]
- [[IF]]
- [[GO TO]]
- [[ALTER]]

## Arquivos

- [[QSAM]]
- [[VSAM]]
- [[ESDS]]
- [[KSDS]]

## Online

- [[CICS]]
- [[COMMAREA]]
- [[BMS]]

O MOC é como uma tabela de conteúdo viva.

Ele não precisa listar tudo automaticamente.

Pode ser editorial.

Você decide qual caminho o leitor deve seguir.


22. Curiosidades de bastidores

Curiosidade 1 — Markdown nasceu para ser simples

A ideia do Markdown é que o texto continue legível mesmo sem renderização.

Isso o torna ideal para preservação.

Curiosidade 2 — Wikilinks são antigos

O conceito de ligar documentos por referências existe desde os primeiros sistemas de hipertexto.

O Obsidian apenas tornou isso simples para arquivos locais.

Curiosidade 3 — Blogs envelhecem cronologicamente

Uma postagem excelente de 2013 pode ficar enterrada porque blogs priorizam data.

Uma wiki prioriza assunto.

Curiosidade 4 — Seu sitemap ainda tem valor

Mesmo sem trazer o conteúdo, ele pode ajudar a:

  • conferir se todas as URLs foram importadas;

  • descobrir páginas faltantes;

  • comparar o blog atual com o backup;

  • gerar mapa de redirecionamentos.

Curiosidade 5 — Seu arquivo mais importante não é o XML

O arquivo mais importante é o plano de preservação.

Um único XML sem cópias e sem validação continua sendo um ponto único de falha.


23. Easter egg da Frota Estelar

Em Star Trek, a nave Enterprise não é poderosa apenas por causa de seus motores.

Ela é poderosa porque possui:

  • sensores;

  • mapas;

  • registros;

  • redundância;

  • protocolos;

  • engenharia;

  • oficiais;

  • memória computacional;

  • capacidade de análise.

Seu blog também não se torna valioso apenas porque tem milhares de artigos.

Ele se torna poderoso quando esses artigos podem ser:

  • encontrados;

  • relacionados;

  • atualizados;

  • reutilizados;

  • versionados;

  • ensinados;

  • publicados;

  • preservados.

A Enterprise sem computador seria apenas uma estrutura metálica no espaço.

Um blog sem arquitetura de conhecimento é apenas uma sequência de páginas.


24. O que o programador COBOL pode aprender com tudo isso?

Muito.

Esse projeto ensina princípios clássicos de sistemas.

Separação entre dado e plataforma

O conteúdo não deve depender exclusivamente do Blogger ou WordPress.

Portabilidade

Markdown permite mover o conhecimento entre ferramentas.

Redundância

Backup em mais de um local.

Versionamento

Git registra mudanças.

Metadados

Frontmatter descreve o conteúdo.

Integridade

Validação evita perda silenciosa.

Relacionamentos

Backlinks revelam dependências.

Indexação

Pesquisa full text encontra rapidamente informações.

Automação

Scripts podem converter, classificar e enriquecer dados.

Governança

É necessário saber o que é original, revisado, publicado ou obsoleto.

Perceba: estamos falando de conteúdo, mas os fundamentos são os mesmos usados em sistemas corporativos.


25. A arquitetura final

Ao término da missão, a arquitetura pode ser:

                        BLOGGER
                           |
                           v
                    BACKUP ATOM XML
                           |
              ---------------------------
              |            |            |
              v            v            v
          Markdown       WXR          JSON
              |
              v
       OBSIDIAN KNOWLEDGE VAULT
              |
      --------------------------
      |       |       |        |
      v       v       v        v
   Busca   Backlinks  Git      IA
      |       |       |        |
      --------------------------
              |
              v
      CONTEÚDO ENRIQUECIDO
              |
       --------------------
       |        |         |
       v        v         v
   WordPress  Blogger   Livros
       |
       v
   NOVA PRESENÇA DIGITAL

Essa é a arquitetura da El Jefe Midnight Lunch Wiki.


Conclusão — O blog não foi baixado; foi resgatado

Existe uma enorme diferença entre salvar arquivos e preservar conhecimento.

Salvar arquivos é copiar.

Preservar conhecimento é organizar, validar, relacionar, documentar e garantir que ele continue utilizável.

O Blogger foi o porto original.

O WordPress pode ser o próximo planeta.

Mas o Obsidian será a nave.

O Markdown será o formato universal.

O Git será o registro de bordo.

A IA será o oficial científico.

Os backlinks serão os corredores entre os decks.

O Graph View será o mapa estelar.

E cada artigo será um tripulante carregando uma parte da missão.

Para um programador COBOL iniciante, esta jornada oferece uma lição valiosa:

sistemas duradouros não sobrevivem apenas porque funcionam. Eles sobrevivem porque seus dados, regras, dependências e histórias são preservados.

O seu blog não é somente um conjunto de postagens antigas.

É um sistema de conhecimento acumulado.

É documentação.

É memória.

É história técnica.

É cultura.

É experiência.

É legado.

E legado não deve ficar preso a uma única plataforma.

Na ponte de comando da El Jefe Midnight Lunch Wiki, a ordem final é simples:

CAPITÃO: Estado do acervo?

SPOCK: Conteúdo preservado, indexado e relacionado.

SCOTTY: Backups redundantes e versionamento ativos.

DATA: Metadados normalizados.

WORF: Links quebrados identificados.

COMPUTADOR: Obsidian Vault online.

CAPITÃO: Curso definido.

Computador, iniciar conversão.

E em algum diretório silencioso do Windows, entre arquivos Markdown, backlinks e diagramas, um velho artigo COBOL de 2013 desperta novamente.

Não como relíquia.

Mas como parte viva de uma nova galáxia de conhecimento.

sábado, 5 de setembro de 2020

☕🚀 Como Tornar Seu Blogspot Compatível com o IndexNow – Guia Passo a Passo

 

Bellacosa Mainframe e o indexnow

☕🚀 Como Tornar Seu Blogspot Compatível com o IndexNow – Guia Passo a Passo

Padawan, antes de tudo existe uma verdade importante:

O Blogger (Blogspot) não possui suporte nativo ao protocolo IndexNow.

Diferente de WordPress, Joomla ou sites próprios, você não consegue instalar plugins ou alterar o backend do Blogger para enviar notificações automáticas aos buscadores.

Mas existem alternativas para ficar o mais próximo possível do conceito do IndexNow.


O que é necessário para usar IndexNow?

O protocolo exige:

  1. Um domínio próprio

  2. Acesso ao servidor

  3. Upload de um arquivo de verificação

  4. Capacidade de enviar requisições HTTP para os buscadores

O Blogger oferece apenas parcialmente esses recursos.


Passo 1 – Usar Domínio Próprio

Em vez de:

meublog.blogspot.com

Use:

www.seudominio.com.br

No Blogger:

Configurações

→ Publicação

→ Domínio personalizado

Configure seu domínio.

Benefícios:

✅ Mais profissional

✅ Melhor SEO

✅ Permite verificações adicionais


Passo 2 – Registrar o Site no Bing Webmaster Tools

O Bing é um dos criadores do IndexNow.

Acesse:

Bing Webmaster Tools

Faça login.

Adicione seu site.


Passo 3 – Registrar o Site no Google Search Console

Acesse:

Google Search Console

Adicione seu blog.

Envie o sitemap:

https://seudominio.com/sitemap.xml

ou

https://seublog.blogspot.com/sitemap.xml

Passo 4 – Habilitar Sitemap do Blogger

O Blogger gera automaticamente:

/sitemap.xml

Teste:

https://seublog.blogspot.com/sitemap.xml

ou

https://www.seudominio.com/sitemap.xml

Se abrir, está funcionando.


Passo 5 – Forçar Indexação Manual

Sempre que publicar um artigo:

Google

No Search Console

→ Inspeção de URL

→ Solicitar Indexação


Bing

No Webmaster Tools

→ URL Submission

→ Enviar URL

Isso reproduz parcialmente o comportamento do IndexNow.


Passo 6 – Criar Ping Automático

Após publicar um artigo, acesse:

Bing

https://www.bing.com/ping?sitemap=https://www.seudominio.com/sitemap.xml

Google

https://www.google.com/ping?sitemap=https://www.seudominio.com/sitemap.xml

Embora o Google tenha reduzido a importância desse método, ainda ajuda em alguns cenários.


Passo 7 – Criar Automação com Make ou Zapier

Você pode automatizar:

Evento

Novo post no Blogger

Ação

Enviar URL ao Bing

Ação

Atualizar sitemap

Ação

Enviar notificação

Ferramentas:


Passo 8 – Utilizar Cloudflare

Se você possui domínio próprio:

  1. Coloque o domínio atrás da Cloudflare.

  2. Ative recursos de cache e desempenho.

  3. Configure regras de sitemap.

Site oficial:

Cloudflare


Passo 9 – Publicar o Sitemap no robots.txt

No Blogger:

Configurações

Rastreadores e Indexação

robots.txt personalizado

Adicione:

User-agent: *
Allow: /

Sitemap: https://www.seudominio.com/sitemap.xml

Passo 10 – Acompanhar Cobertura

Verifique semanalmente:

Google

  • URLs indexadas

  • Erros

  • Cobertura

Bing

  • Crawling

  • Indexação

  • Backlinks


Solução Avançada (Mais Próxima do IndexNow)

Se você quiser IndexNow de verdade, a melhor estratégia é:

Blogspot
      ↓
Domínio próprio
      ↓
Cloudflare
      ↓
Worker Cloudflare
      ↓
IndexNow API

Nesse modelo, um Worker da Cloudflare detecta atualizações e envia notificações ao protocolo IndexNow.

É uma solução mais técnica, mas permite que um Blogspot participe do ecossistema IndexNow mesmo sem suporte nativo.

Resumo para o Padawan Mainframe

Se o Blogger fosse um sistema CICS:

  • Sitemap = catálogo de transações

  • Googlebot = operador consultando periodicamente

  • IndexNow = WTO enviando mensagem imediatamente ao operador

  • Search Console = SDSF da internet

  • Bing Webmaster = console de monitoramento

O Blogger não fala IndexNow nativamente, mas com domínio próprio, Search Console, Bing Webmaster, sitemap correto e automações externas, você consegue chegar muito perto do mesmo resultado prático em SEO. ☕🚀


domingo, 5 de agosto de 2018

Blog Analytics : Parte VI – Criando o Motor de Regras do Bellacosa Blog Doctor

 

Bellacosa Mainframe e o blog analytics parte vi

☕ Um Café no Bellacosa Mainframe

Blog Analytics : Parte VI – Criando o Motor de Regras do Bellacosa Blog Doctor

Como transformar sinais dispersos em diagnósticos padronizados, prioridades, códigos de retorno e recomendações automáticas

Quando um simples if deixa de ser suficiente e nasce o RACF das regras editoriais

☕ Um Café no Bellacosa Mainframe

Na Parte V, construímos a arquitetura geral do Bellacosa Blog Doctor.

Definimos a ferramenta como um scanner automático capaz de ler o Feed Atom do Blogger, normalizar milhares de publicações, analisar HTML, SEO, acessibilidade, conteúdo, links, imagens e resíduos deixados por editores externos.

Mas uma arquitetura, por melhor que seja, ainda é apenas o mapa do Data Center.

Ela mostra:

  • onde os dados entram;

  • onde são processados;

  • onde são classificados;

  • onde os relatórios serão gerados.

Falta agora construir aquilo que realmente decide se um post está saudável, suspeito, degradado ou perigosamente próximo de um ABEND editorial.

Falta o Motor de Regras.

É esse componente que transforma observações técnicas em diagnósticos consistentes.

Sem ele, teríamos apenas dezenas de funções independentes:

if (tituloCurto) ...
if (imagemSemAlt) ...
if (possuiResiduoIA) ...
if (naoTemLinkInterno) ...
if (temTabelaDentroDeParagrafo) ...

No começo, isso parece funcionar.

Depois surgem vinte regras.

Em seguida cinquenta.

Logo aparecem exceções, categorias, pesos diferentes, severidades, mensagens, sugestões de correção, limites configuráveis e versões históricas.

Quando percebemos, o código virou um emaranhado de decisões espalhadas por toda a aplicação.

No mainframe, isso seria como esconder regras críticas de negócio em centenas de parágrafos COBOL, sem tabela de decisão, sem copybook, sem documentação e sem qualquer possibilidade de saber qual alteração afetou qual processamento.

O Bellacosa Blog Doctor precisa de algo melhor.

Precisa de um motor centralizado, extensível, auditável e previsível.


O Que é um Motor de Regras?

Um motor de regras é um componente responsável por receber dados, aplicar condições predefinidas e produzir resultados padronizados.

No nosso caso, ele recebe um objeto representando um post:

{
  titulo: "ABEND sem Mistérios",
  palavras: 1842,
  html: "<h2>...</h2>",
  imagens: 4,
  imagensSemAlt: 2,
  linksInternos: 0,
  marcadores: ["COBOL", "Mainframe"],
  residuosIA: 3
}

Depois percorre um catálogo de regras.

Cada regra responde perguntas como:

  • este post viola alguma condição?

  • qual é a gravidade?

  • quantos pontos devem ser descontados?

  • qual mensagem deve ser apresentada?

  • qual recomendação deve ser exibida?

  • qual código de diagnóstico será associado?

  • a regra deve ser ignorada em algum contexto?

O resultado deixa de ser apenas um booleano.

Passa a ser um diagnóstico completo.

{
  codigo: "BBDACC002E",
  categoria: "Acessibilidade",
  gravidade: "alta",
  quantidade: 2,
  penalidade: 8,
  mensagem: "Foram encontradas imagens sem texto alternativo",
  recomendacao: "Adicionar atributos ALT descritivos às imagens"
}

Esse formato é o equivalente editorial de uma mensagem padronizada de sistema.


Por Que Não Espalhar if Pelo Código?

Imagine uma versão inicial.

let score = 100;

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

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

if (post.imagensSemAlt > 0) {
  score -= 10;
}

Esse código não está errado.

O problema aparece quando o projeto cresce.

Suponha que cada regra também precise ter:

  • código;

  • categoria;

  • mensagem;

  • recomendação;

  • gravidade;

  • penalidade máxima;

  • quantidade;

  • exceção;

  • versão;

  • documentação.

O if simples já não é suficiente.

Pior: se as regras estiverem espalhadas em funções diferentes, torna-se difícil responder:

  • quantas regras existem?

  • quais estão ativas?

  • quais pertencem ao módulo SEO?

  • quais são críticas?

  • qual regra gerou determinado alerta?

  • qual versão introduziu a penalidade?

  • quais regras devem ser desativadas em posts antigos?

Em sistemas críticos, regra espalhada é dívida técnica.

O Motor de Regras existe para concentrar as decisões.


A Estrutura Básica de uma Regra

Uma regra deve ser tratada como um objeto configurável.

const regraTituloCurto = {
  codigo: "BBDSEO001W",
  nome: "Título muito curto",
  categoria: "SEO",
  gravidade: "media",
  penalidade: 7,
  testar(post) {
    return post.titulo.length < 20;
  },
  mensagem(post) {
    return `O título possui apenas ${post.titulo.length} caracteres`;
  },
  recomendacao:
    "Revisar o título e torná-lo mais descritivo sem exagerar no comprimento"
};

Essa estrutura já é muito mais poderosa.

Ela separa:

  • identidade;

  • lógica;

  • gravidade;

  • penalidade;

  • explicação;

  • recomendação.

O motor não precisa saber os detalhes de cada regra.

Ele apenas executa todas de forma padronizada.


O Catálogo Central de Regras

O ideal é guardar as regras em um único catálogo.

const regras = [
  regraTituloCurto,
  regraTituloLongo,
  regraConteudoCurto,
  regraImagemSemAlt,
  regraSemLinkInterno,
  regraResiduoIA,
  regraResiduoWord,
  regraTabelaEmParagrafo
];

Ou diretamente:

const regras = [
  {
    codigo: "BBDSEO001W",
    categoria: "SEO",
    gravidade: "media",
    penalidade: 7,
    testar: post => post.titulo.length < 20,
    mensagem: post =>
      `Título com ${post.titulo.length} caracteres`,
    recomendacao:
      "Criar um título mais informativo"
  },
  {
    codigo: "BBDACC002E",
    categoria: "Acessibilidade",
    gravidade: "alta",
    penalidade: 4,
    penalidadeMaxima: 12,
    testar: post => post.imagensSemAlt > 0,
    quantidade: post => post.imagensSemAlt,
    mensagem: post =>
      `${post.imagensSemAlt} imagem(ns) sem ALT`,
    recomendacao:
      "Adicionar texto alternativo descritivo"
  }
];

Agora temos algo parecido com uma tabela de parâmetros.

Em vez de alterar dezenas de funções, adicionamos ou modificamos uma entrada no catálogo.


O Executor de Regras

O executor recebe um post e percorre o catálogo.

function executarRegras(post, regras) {
  const ocorrencias = [];

  for (const regra of regras) {
    const resultado = regra.testar(post);

    if (!resultado) {
      continue;
    }

    const quantidade =
      typeof regra.quantidade === "function"
        ? regra.quantidade(post)
        : 1;

    const penalidadeBase =
      typeof regra.penalidade === "function"
        ? regra.penalidade(post, quantidade)
        : regra.penalidade || 0;

    const penalidade = regra.penalidadeMaxima
      ? Math.min(penalidadeBase * quantidade, regra.penalidadeMaxima)
      : penalidadeBase;

    ocorrencias.push({
      codigo: regra.codigo,
      nome: regra.nome,
      categoria: regra.categoria,
      gravidade: regra.gravidade,
      quantidade,
      penalidade,
      mensagem:
        typeof regra.mensagem === "function"
          ? regra.mensagem(post, quantidade)
          : regra.mensagem,
      recomendacao: regra.recomendacao
    });
  }

  return ocorrencias;
}

A lógica está centralizada.

Cada regra decide quando deve disparar.

O executor apenas padroniza o resultado.


Mensagens no Estilo Mainframe

Uma das identidades mais interessantes do Bellacosa Blog Doctor pode ser o uso de mensagens inspiradas no universo IBM.

Exemplo:

BBDSEO001W TITLE LENGTH BELOW RECOMMENDED VALUE
BBDACC002E IMAGE WITHOUT ALT ATTRIBUTE DETECTED
BBDHTML004E TABLE FOUND INSIDE PARAGRAPH
BBDIA001I AI INTERFACE METADATA DETECTED
BBDDOC003W MICROSOFT WORD RESIDUE FOUND

A estrutura pode seguir este padrão:

BBD + MÓDULO + NÚMERO + SEVERIDADE

Exemplo:

BBDSEO001W

Significado:

BBD........Bellacosa Blog Doctor
SEO........Módulo SEO
001........Número da mensagem
W..........Warning

Podemos adotar:

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

Assim, cada ocorrência possui uma identidade única.


Definindo os Módulos

O catálogo pode ser separado por áreas.

HTML

Prefixo:

BBDHTML

Exemplos:

BBDHTML001W – Heading vazio
BBDHTML002E – Tabela dentro de parágrafo
BBDHTML003W – Mais de um H1
BBDHTML004W – Excesso de estilos inline

SEO

Prefixo:

BBDSEO

Exemplos:

BBDSEO001W – Título curto
BBDSEO002W – Título longo
BBDSEO003W – Conteúdo curto
BBDSEO004W – Sem links internos

Acessibilidade

Prefixo:

BBDACC

Exemplos:

BBDACC001E – Imagem sem ALT
BBDACC002W – Link sem texto descritivo
BBDACC003W – Heading fora de sequência

Resíduos

Prefixos:

BBDIA
BBDDOC

Exemplos:

BBDIA001I – Resíduo de interface de IA
BBDDOC001W – Resíduo do Microsoft Word
BBDDOC002W – Excesso de spans do Google Docs

Links

Prefixo:

BBDLNK

Exemplos:

BBDLNK001W – Link HTTP
BBDLNK002W – Link vazio
BBDLNK003E – Link JavaScript suspeito

Gravidade Não é a Mesma Coisa que Penalidade

Uma regra pode ter gravidade alta, mas penalidade moderada.

Outra pode ter gravidade baixa e aparecer centenas de vezes.

Precisamos separar os conceitos.

Gravidade

Representa o impacto técnico de uma ocorrência individual.

INFORMATIVA
BAIXA
MÉDIA
ALTA
CRÍTICA

Penalidade

Representa quanto aquela ocorrência reduz o score.

Exemplo:

{
  gravidade: "alta",
  penalidade: 4,
  penalidadeMaxima: 12
}

Se houver uma imagem sem ALT:

Penalidade: 4

Se houver três:

Penalidade: 12

Se houver dez:

Penalidade: continua limitada a 12

Sem um limite, um único tipo de erro poderia zerar o score inteiro.


Penalidade Fixa e Penalidade Progressiva

Existem dois modelos principais.

Penalidade fixa

A regra desconta sempre a mesma quantidade.

penalidade: 8

Exemplo:

Sem links internos: -8

Penalidade progressiva

A penalidade depende da quantidade.

penalidade: 3,
penalidadeMaxima: 12

Exemplo:

1 imagem sem ALT........-3
2 imagens sem ALT.......-6
3 imagens sem ALT.......-9
4 ou mais..............-12

Esse modelo é ideal para ocorrências repetidas.


Regras Dependentes do Contexto

Uma ferramenta inteligente não deve aplicar regras de forma cega.

Imagine a regra:

Post sem link interno

Ela faz sentido para um artigo de 2.000 palavras.

Talvez não faça sentido para um comunicado de 80 palavras ou uma página composta apenas por vídeo.

Logo, a regra precisa de contexto.

{
  codigo: "BBDSEO004W",
  categoria: "SEO",
  gravidade: "media",
  penalidade: 8,

  aplicavel(post) {
    return post.palavras >= 500;
  },

  testar(post) {
    return post.linksInternos === 0;
  }
}

O executor deve verificar primeiro se a regra é aplicável.

if (
  typeof regra.aplicavel === "function" &&
  !regra.aplicavel(post)
) {
  continue;
}

Isso evita falsos positivos.


Falsos Positivos: O Inimigo Invisível

Todo scanner automático corre o risco de acusar problemas onde não existem.

Exemplo:

Conteúdo curto

Um post pode possuir apenas 120 palavras porque contém:

  • um vídeo;

  • um infográfico;

  • uma galeria;

  • um aviso rápido;

  • uma imagem histórica.

Outro exemplo:

Sem heading

Um post de 250 palavras pode não precisar de subtítulos.

O motor deve ser conservador.

Melhor classificar uma situação como “revisar” do que afirmar “erro crítico” sem contexto.

A ferramenta deve usar palavras como:

possível
provável
recomendado
sugestão
revisão manual

O Blog Doctor não é juiz.

É perito.


Regras com Evidências

Um diagnóstico fica muito mais útil quando mostra a evidência.

{
  codigo: "BBDHTML002E",
  mensagem: "Tabela localizada dentro de parágrafo",
  evidencia: "<p><table class=\"...\">",
  posicao: 3842
}

Para capturar trechos:

function extrairEvidencia(html, regex, margem = 80) {
  const match = regex.exec(html);

  if (!match) {
    return "";
  }

  const inicio = Math.max(0, match.index - margem);
  const fim = Math.min(
    html.length,
    match.index + match[0].length + margem
  );

  return html.slice(inicio, fim);
}

Isso funciona como o trecho relevante de um dump.

Não precisamos mostrar o HTML inteiro.

Apenas a região onde o problema foi encontrado.


Regras com Seletores DOM

Nem toda regra precisa usar expressão regular.

Quando o HTML é convertido por DOMParser, podemos usar seletores.

const documento = new DOMParser()
  .parseFromString(post.html, "text/html");

Exemplo de imagens sem ALT:

const imagensSemAlt = [
  ...documento.querySelectorAll("img")
].filter(imagem => {
  return !String(
    imagem.getAttribute("alt") || ""
  ).trim();
});

Headings vazios:

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

Mais de um H1:

const multiplosH1 =
  documento.querySelectorAll("h1").length > 1;

O DOM é ideal para estrutura.

Regex é útil para resíduos ou padrões textuais.

Um bom scanner usa ambos.


Um Exemplo Completo de Regra

const regraImagemSemAlt = {
  codigo: "BBDACC001E",
  nome: "Imagem sem texto alternativo",
  categoria: "Acessibilidade",
  gravidade: "alta",
  penalidade: 3,
  penalidadeMaxima: 12,

  aplicavel(post) {
    return post.imagens > 0;
  },

  testar(post) {
    return post.imagensSemAlt > 0;
  },

  quantidade(post) {
    return post.imagensSemAlt;
  },

  mensagem(post, quantidade) {
    return quantidade === 1
      ? "Foi encontrada uma imagem sem atributo ALT"
      : `Foram encontradas ${quantidade} imagens sem atributo ALT`;
  },

  recomendacao:
    "Adicionar texto alternativo objetivo e descritivo às imagens relevantes"
};

Esse formato pode ser copiado para dezenas de novas regras.


Calculando o Score Final

Depois de executar as regras:

const ocorrencias = executarRegras(post, regras);

Somamos as penalidades.

function calcularScore(ocorrencias) {
  const total = ocorrencias.reduce(
    (soma, ocorrencia) =>
      soma + ocorrencia.penalidade,
    0
  );

  return Math.max(0, 100 - total);
}

Resultado:

Score inicial................100
Título curto.................-7
Imagem sem ALT...............-6
Sem links internos...........-8
Resíduo do Word...............-6

Score final...................73

Scores por Categoria

Um único score geral é útil, mas não conta toda a história.

Podemos calcular scores separados.

HTML.........................84
SEO..........................92
Acessibilidade...............70
Conteúdo.....................96
Links........................88

Algoritmo:

function calcularScoresPorCategoria(ocorrencias) {
  const categorias = {};

  for (const ocorrencia of ocorrencias) {
    if (!categorias[ocorrencia.categoria]) {
      categorias[ocorrencia.categoria] = 100;
    }

    categorias[ocorrencia.categoria] -=
      ocorrencia.penalidade;
  }

  for (const categoria in categorias) {
    categorias[categoria] = Math.max(
      0,
      categorias[categoria]
    );
  }

  return categorias;
}

Isso permite entender onde está o problema.

Um post pode ter SEO excelente, mas acessibilidade fraca.

Outro pode possuir HTML limpo, porém quase nenhum link interno.


Classificação por Faixa

O score pode ser convertido em status.

function classificarScore(score) {
  if (score >= 90) return "saudável";
  if (score >= 75) return "atenção";
  if (score >= 60) return "revisão recomendada";
  if (score >= 40) return "degradado";
  return "crítico";
}

Exemplo:

96........Saudável
83........Atenção
67........Revisão recomendada
48........Degradado
29........Crítico

O Equivalente ao Return Code

No z/OS, o código de retorno resume o resultado de uma etapa.

O Blog Doctor pode adotar uma escala própria.

BDC0000 – Nenhum problema relevante
BDC0004 – Alertas informativos ou leves
BDC0008 – Revisão recomendada
BDC0012 – Erros importantes
BDC0016 – Situação crítica

Algoritmo:

function calcularReturnCode(ocorrencias, score) {
  const possuiCritica = ocorrencias.some(
    item => item.gravidade === "critica"
  );

  const possuiAlta = ocorrencias.some(
    item => item.gravidade === "alta"
  );

  if (possuiCritica || score < 40) {
    return "BDC0016";
  }

  if (possuiAlta || score < 60) {
    return "BDC0012";
  }

  if (score < 75) {
    return "BDC0008";
  }

  if (ocorrencias.length > 0) {
    return "BDC0004";
  }

  return "BDC0000";
}

Isso deixa o relatório muito mais familiar para profissionais de mainframe.


Prioridade de Correção

Gravidade individual não basta.

Precisamos considerar também o alcance.

Uma regra pode ocorrer uma vez ou em mil posts.

Podemos calcular prioridade global.

function calcularPrioridadeGlobal(
  gravidade,
  quantidadePosts,
  totalPosts
) {
  const percentual =
    totalPosts > 0
      ? quantidadePosts / totalPosts
      : 0;

  const pesoGravidade = {
    informativa: 0,
    baixa: 1,
    media: 2,
    alta: 3,
    critica: 4
  };

  const pesoVolume =
    percentual >= 0.50 ? 4 :
    percentual >= 0.20 ? 3 :
    percentual >= 0.05 ? 2 :
    quantidadePosts > 0 ? 1 : 0;

  const total =
    pesoGravidade[gravidade] + pesoVolume;

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

Exemplo:

Regra................Imagens sem ALT
Posts afetados........1.240
Total do blog..........4.018
Cobertura..............30,86%
Gravidade..............Alta
Prioridade.............Crítica

Configuração Externa das Regras

Em uma versão avançada, os limites não devem ficar fixos no código.

Podemos criar uma configuração.

const configuracao = {
  titulo: {
    minimo: 20,
    maximo: 70
  },
  conteudo: {
    minimoPalavras: 300,
    exigirHeadingAcimaDe: 500
  },
  marcadores: {
    maximo: 12
  },
  seo: {
    scoreSaudavel: 90
  }
};

A regra consulta a configuração.

testar(post, config) {
  return post.titulo.length <
    config.titulo.minimo;
}

Isso permite adaptar o scanner para outros blogs.


Ativando e Desativando Regras

Nem todas as regras serão úteis para todos os usuários.

Uma regra pode possuir:

ativa: true

O executor ignora regras desativadas.

if (regra.ativa === false) {
  continue;
}

Também podemos filtrar por módulo.

const modulosAtivos = new Set([
  "HTML",
  "SEO",
  "Acessibilidade"
]);

Assim o usuário pode realizar:

  • auditoria completa;

  • apenas SEO;

  • apenas HTML;

  • apenas acessibilidade;

  • apenas resíduos.


Regras por Período Histórico

Um blog com quinze anos não pode ser julgado inteiramente pelos padrões atuais.

Um artigo de 2012 foi criado em outro contexto.

Talvez o tema do Blogger inserisse automaticamente estruturas que hoje parecem estranhas.

Podemos criar regras condicionadas ao ano.

{
  codigo: "BBDHTML010I",

  aplicavel(post) {
    return post.publicadoEm.getFullYear() >= 2020;
  },

  testar(post) {
    return post.excessoEstiloInline;
  }
}

Ou reduzir penalidade em conteúdo antigo.

penalidade(post) {
  const ano = post.publicadoEm.getFullYear();

  return ano < 2015 ? 2 : 6;
}

Isso torna o scanner historicamente consciente.


Versionamento das Regras

O Motor de Regras também precisa de versão.

{
  codigo: "BBDSEO001W",
  versao: "1.2.0",
  criadaEm: "2026-07-26",
  alteradaEm: "2026-08-10"
}

Por quê?

Porque o score de um post pode mudar mesmo sem alteração no conteúdo.

Talvez a regra tenha sido ajustada.

Exemplo:

Auditoria de julho
Regra de título curto: mínimo 15 caracteres

Auditoria de setembro
Regra de título curto: mínimo 20 caracteres

Sem registrar a versão, a comparação histórica fica enganosa.


Testando o Motor de Regras

Nenhum motor deve entrar em produção sem testes.

Podemos criar posts simulados.

const postTeste = {
  titulo: "COBOL",
  palavras: 120,
  imagens: 2,
  imagensSemAlt: 2,
  linksInternos: 0,
  marcadores: [],
  residuosIA: 1
};

Depois executamos.

const ocorrencias =
  executarRegras(postTeste, regras);

console.table(ocorrencias);

Resultado esperado:

BBDSEO001W – Título curto
BBDSEO003W – Conteúdo curto
BBDACC001E – Imagens sem ALT
BBDSEO004W – Sem links internos
BBDSEO006W – Sem marcadores
BBDIA001I  – Resíduo de IA

Testes Unitários

Podemos criar pequenas verificações.

function afirmar(condicao, mensagem) {
  if (!condicao) {
    throw new Error(
      "Teste falhou: " + mensagem
    );
  }
}

const resultado =
  executarRegras(postTeste, regras);

afirmar(
  resultado.some(
    item => item.codigo === "BBDSEO001W"
  ),
  "Deveria detectar título curto"
);

Em uma versão profissional, podemos usar Jest, Vitest ou outra biblioteca.

Mas até testes simples já ajudam.


Evitando Regras Duplicadas

O catálogo deve validar códigos duplicados.

function validarCatalogo(regras) {
  const codigos = new Set();

  for (const regra of regras) {
    if (codigos.has(regra.codigo)) {
      throw new Error(
        `Código duplicado: ${regra.codigo}`
      );
    }

    codigos.add(regra.codigo);
  }
}

Também podemos validar campos obrigatórios.

const obrigatorios = [
  "codigo",
  "categoria",
  "gravidade",
  "testar"
];

É como validar um copybook antes de compilar o programa.


Relatório por Regra

Depois de auditar todos os posts, podemos agrupar ocorrências por código.

function agruparPorRegra(postsAuditados) {
  const resumo = new Map();

  for (const post of postsAuditados) {
    for (const ocorrencia of post.ocorrencias) {
      if (!resumo.has(ocorrencia.codigo)) {
        resumo.set(ocorrencia.codigo, {
          codigo: ocorrencia.codigo,
          mensagem: ocorrencia.mensagem,
          gravidade: ocorrencia.gravidade,
          posts: 0,
          ocorrencias: 0
        });
      }

      const item = resumo.get(ocorrencia.codigo);
      item.posts++;
      item.ocorrencias += ocorrencia.quantidade;
    }
  }

  return [...resumo.values()];
}

Relatório:

BBDACC001E
Posts afetados.............312
Ocorrências................487
Gravidade..................Alta

BBDIA001I
Posts afetados..............14
Ocorrências.................62
Gravidade...........Informativa

Relatório por Post

Cada post recebe:

{
  titulo: "ABEND sem Mistérios",
  score: 82,
  returnCode: "BDC0008",
  status: "revisão recomendada",
  ocorrencias: [...]
}

Tabela:

RC        SCORE  TÍTULO
BDC0000     98   Data Division sem Mistérios
BDC0004     88   O Mercado das Linguagens
BDC0008     72   História do COBOL
BDC0012     54   Post antigo importado
BDC0016     31   Página com HTML corrompido

Recomendação Automática

Cada regra deve sugerir uma ação.

Exemplo:

Problema:
Imagem sem ALT

Recomendação:
Adicionar texto alternativo que descreva a finalidade visual da imagem.

Evitar:
alt="imagem"
alt="foto"
alt="banner"

Preferir:
alt="Fluxo de processamento de cartão via CICS"

Para tabela em parágrafo:

Problema:
Tabela encontrada dentro de parágrafo.

Recomendação:
Fechar o elemento <p> antes da tabela e abrir um novo parágrafo depois dela.

A recomendação deve ser prática.

Não basta dizer “corrigir HTML”.


Ações Automáticas Seguras

Algumas correções podem ser sugeridas ou simuladas.

Exemplo:

function sugerirRemocaoResiduoIA(html) {
  return html
    .replace(/\sdata-message-id="[^"]*"/gi, "")
    .replace(/\sdata-message-author-role="[^"]*"/gi, "")
    .replace(/\sdata-message-model-slug="[^"]*"/gi, "");
}

Mas a ferramenta deve apresentar um diff.

ANTES:
<div data-message-id="abc123" class="markdown">

DEPOIS:
<div class="markdown">

Somente após revisão a mudança poderia ser aplicada.


Regras Informativas

Nem toda regra precisa reduzir score.

Exemplo:

{
  codigo: "BBDINF001I",
  categoria: "Informação",
  gravidade: "informativa",
  penalidade: 0,
  testar(post) {
    return post.palavras >= 5000;
  },
  mensagem(post) {
    return `Artigo longo com ${post.palavras} palavras`;
  },
  recomendacao:
    "Considere criar índice interno ou dividir o conteúdo em partes"
}

Essa regra não acusa erro.

Ela oferece contexto.


Regras Positivas

Também podemos reconhecer boas práticas.

{
  codigo: "BBDPOS001I",
  tipo: "bonus",
  categoria: "Qualidade",
  bonus: 3,
  testar(post) {
    return (
      post.palavras >= 1500 &&
      post.linksInternos >= 3 &&
      post.imagensSemAlt === 0
    );
  },
  mensagem:
    "Artigo extenso, interligado e acessível"
}

Nesse caso, o score poderia receber bônus limitado.

Mas é importante impedir valores acima de 100.

score = Math.min(100, score + bonus);

O Motor como uma Espécie de RACF Editorial

O RACF decide:

  • quem pode acessar;

  • qual recurso está protegido;

  • qual regra se aplica;

  • qual decisão deve ser tomada;

  • qual evento será registrado.

O Motor de Regras do Blog Doctor decide:

  • qual análise se aplica;

  • qual condição foi violada;

  • qual gravidade existe;

  • qual mensagem será registrada;

  • qual recomendação será emitida.

Não é segurança no sentido clássico.

Mas a filosofia é semelhante.

Centralização de regras.

Decisões previsíveis.

Auditoria.

Rastreabilidade.


Log da Auditoria

Cada execução pode gerar um log.

22:31:04 BBD0001I AUDIT STARTED
22:31:04 BBD0002I RULESET VERSION 1.0.0
22:31:05 BBD0003I FEED BATCH 1 LOADED
22:31:18 BBD0004I 100 POSTS PROCESSED
22:36:47 BBD0005I 4018 POSTS PROCESSED
22:36:48 BBD0006I REPORT GENERATED
22:36:48 BBD0007I AUDIT COMPLETED RC=0008

Esse log ajuda a investigar falhas do próprio scanner.


Tratamento de Erros nas Regras

Uma regra mal escrita não deve interromper toda a auditoria.

try {
  const resultado = regra.testar(post);
} catch (erro) {
  ocorrencias.push({
    codigo: "BBDENG999E",
    categoria: "Motor",
    gravidade: "alta",
    penalidade: 0,
    mensagem:
      `Falha ao executar a regra ${regra.codigo}`,
    detalhe: erro.message
  });
}

Assim, o sistema continua processando os demais posts.

É o equivalente a isolar uma etapa com erro sem derrubar o job inteiro.


Performance do Motor

Suponha:

4.000 posts
80 regras

Isso significa:

320.000 avaliações

Parece muito, mas boa parte dessas verificações é simples.

Mesmo assim, podemos otimizar.

Primeiro, o HTML deve ser parseado apenas uma vez por post.

Errado:

cada regra cria um novo DOMParser

Correto:

const documento = parsearHTML(post.html);

const contexto = {
  post,
  documento,
  imagens: [...documento.querySelectorAll("img")],
  links: [...documento.querySelectorAll("a[href]")],
  headings: [...documento.querySelectorAll("h1,h2,h3,h4,h5,h6")]
};

Todas as regras usam o mesmo contexto.


O Contexto de Auditoria

Podemos criar um objeto preparado.

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

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

  const links = [
    ...documento.querySelectorAll("a[href]")
  ];

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

  return {
    post,
    documento,
    imagens,
    links,
    headings,
    imagensSemAlt: imagens.filter(
      img => !String(
        img.getAttribute("alt") || ""
      ).trim()
    )
  };
}

A regra passa a receber o contexto.

testar(contexto) {
  return contexto.imagensSemAlt.length > 0;
}

Isso reduz processamento repetido.


Processamento em Lotes

Mesmo o Motor de Regras deve trabalhar em lotes.

async function auditarEmLotes(
  posts,
  tamanhoLote = 25
) {
  const resultados = [];

  for (
    let inicio = 0;
    inicio < posts.length;
    inicio += tamanhoLote
  ) {
    const lote = posts.slice(
      inicio,
      inicio + tamanhoLote
    );

    resultados.push(
      ...lote.map(auditarPost)
    );

    atualizarProgresso(
      resultados.length,
      posts.length
    );

    await new Promise(
      resolve => setTimeout(resolve, 0)
    );
  }

  return resultados;
}

A pausa permite que o navegador atualize a tela.


Evolução Futura: Regras Declarativas

Em uma versão mais avançada, algumas regras poderiam ser definidas em JSON.

{
  "codigo": "BBDSEO001W",
  "campo": "titulo.length",
  "operador": "<",
  "valor": 20,
  "gravidade": "media",
  "penalidade": 7
}

O motor interpreta a configuração.

Isso permitiria criar regras sem alterar código.

Mas esse modelo possui limites.

Regras complexas ainda precisariam de JavaScript.

O melhor caminho pode ser híbrido:

  • regras simples declarativas;

  • regras complexas programadas.


O Painel de Regras

O dashboard pode mostrar o catálogo ativo.

CÓDIGO       MÓDULO          STATUS
BBDSEO001W   SEO             ATIVA
BBDSEO002W   SEO             ATIVA
BBDACC001E   ACESSIBILIDADE  ATIVA
BBDIA001I    RESÍDUOS        ATIVA
BBDLNK004E   LINKS REMOTOS   DESATIVADA

Também pode permitir:

  • ativar;

  • desativar;

  • alterar limites;

  • consultar documentação;

  • testar uma regra;

  • exportar configuração.


O Relatório Mestre

Ao final, o Motor de Regras poderá produzir algo como:

BELLACOSA BLOG DOCTOR
RELATÓRIO MESTRE DE AUDITORIA

Blog................Bellacosa Mainframe
Posts...............4.018
Regras ativas..........62
Versão...............1.0.0
Return Code.........BDC0008

SCORE GERAL..............91

HTML.....................93
SEO......................94
ACESSIBILIDADE...........84
LINKS.....................89
CONTEÚDO..................96

TOP 5 OCORRÊNCIAS

1. Imagens sem ALT........312 posts
2. Links HTTP..............87 posts
3. Sem link interno........76 posts
4. Resíduo Word............29 posts
5. Resíduo IA..............14 posts

Isso transforma milhares de ocorrências em uma visão operacional.


O Principal Princípio

O Motor de Regras não deve ser criado para punir conteúdo antigo.

Ele deve ser criado para tornar a manutenção possível.

Seu papel é responder:

  • onde estão os riscos?

  • quais são recorrentes?

  • quais são isolados?

  • quais podem ser ignorados?

  • quais merecem prioridade?

  • quais exigem revisão humana?

  • quais podem ser corrigidos com segurança?

Essa é a diferença entre um scanner útil e uma máquina de produzir alarmes.


Conclusão

A Parte V construiu a arquitetura do Bellacosa Blog Doctor.

A Parte VI construiu seu cérebro.

O Motor de Regras transforma dados técnicos em decisões organizadas.

Ele recebe um post.

Cria um contexto de análise.

Executa regras padronizadas.

Registra evidências.

Calcula penalidades.

Agrupa problemas.

Define gravidade.

Gera recomendações.

Calcula score.

Produz um Return Code.

E entrega um laudo que pode ser compreendido por um programador, editor, administrador ou responsável pelo acervo.

O que antes era apenas uma coleção de if espalhados pelo JavaScript se transforma em uma estrutura comparável aos melhores sistemas de diagnóstico corporativo.

Cada regra possui identidade.

Cada alerta possui código.

Cada penalidade possui limite.

Cada diagnóstico possui evidência.

Cada recomendação possui uma ação.

Esse é o momento em que o Bellacosa Blog Doctor deixa de ser apenas um leitor de Feed Atom.

Ele passa a pensar.

Não como uma inteligência artificial misteriosa.

Mas como um bom programa mainframe.

Com regras claras.

Entradas conhecidas.

Saídas previsíveis.

Mensagens padronizadas.

Logs auditáveis.

E uma responsabilidade fundamental:

Nunca declarar um ABEND editorial sem antes mostrar a evidência, o código, a gravidade e o caminho seguro para a recuperação.

🔎 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...