Translate

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

quinta-feira, 2 de julho de 2026

As 16 Recomendações da IBM que Todo Programador COBOL Padawan Deveria Conhecer

 

Bellacosa Mainframe e 16 recomendacoes Jedi para seu programa COBOL século XXI

☕ Um Café no Bellacosa Mainframe

As 16 Recomendações da IBM que Todo Programador COBOL Padawan Deveria Conhecer

Da Era dos Cartões Perfurados ao IBM Z Moderno: Como Escrever COBOL Preparado para os Próximos 30 Anos

"A maior diferença entre um Programador COBOL Júnior e um Arquiteto Mainframe não está em quantos comandos ele conhece, mas em entender por que a linguagem evoluiu."

Existe uma frase muito comum entre desenvolvedores iniciantes:

"Sempre fizemos assim."

Ela parece inofensiva.

Mas, no mundo Mainframe, ela pode esconder décadas de dívida técnica.

Muitos sistemas COBOL que ainda executam hoje foram escritos quando:

  • o IBM System/360 ainda era novidade;

  • cartões perfurados eram utilizados;

  • memória era medida em kilobytes;

  • não existia Internet;

  • não existia Java;

  • não existia JSON;

  • ninguém imaginava APIs REST.

Mesmo assim, esses sistemas continuam processando bilhões de dólares diariamente.

Então surge uma pergunta inevitável:

Se eles funcionam tão bem, por que a IBM continua evoluindo o COBOL?

A resposta é simples.

Porque o mundo mudou.

O hardware mudou.

Os processadores IBM Z mudaram.

O Language Environment (LE) mudou.

As aplicações passaram a conversar com Java, Python, Node.js, microsserviços, OpenShift, APIs REST e serviços em nuvem.

O COBOL também precisou evoluir.

E é exatamente isso que veremos neste café.


A filosofia da IBM

Existe um detalhe curioso.

A IBM raramente muda uma linguagem apenas porque existe uma novidade tecnológica.

Ela muda quando existe ganho real.

Os princípios normalmente são:

  • mais segurança

  • mais desempenho

  • menos CPU

  • menos manutenção

  • melhor integração

  • melhor diagnóstico

  • maior reutilização

Sempre que surgir uma recomendação da IBM, pergunte:

"Qual problema essa mudança resolveu?"

Essa pergunta transforma um Padawan em um profissional que entende arquitetura.


1. STOP RUN → GOBACK

Provavelmente a recomendação mais conhecida.

Durante décadas escrevíamos:

STOP RUN.

Hoje, novos projetos costumam utilizar:

GOBACK.

Por quê?

Imagine um restaurante.

Você pede um café.

O garçom leva até sua mesa.

Quando termina de beber, o correto é devolver a xícara ao garçom.

Não faz sentido fechar o restaurante inteiro.

Foi exatamente isso que aconteceu com o COBOL.

Nos anos 60 o programa era praticamente o dono da execução.

Hoje ele normalmente é apenas um componente.

Pode ser chamado por:

  • outro COBOL

  • CICS

  • IMS

  • Java

  • API REST

  • MQ

  • z/OS Connect

Se um módulo chamado executar STOP RUN...

Toda a Run Unit termina.

Com GOBACK...

O controle simplesmente retorna ao chamador.

Dica Bellacosa

Sempre imagine:

"Meu programa está prestando um serviço."

Quem chamou deve decidir quando terminar a aplicação.


2. NUMCHECK

Todo programador já viu um S0C7.

Normalmente ele aparece na madrugada.

Em produção.

Na sexta-feira.

O motivo quase sempre é simples.

Dados inválidos.

Exemplo:

MOVE "ABC" TO WS-VALOR.
ADD 10 TO WS-VALOR.

Visualmente parece correto.

Na prática...

Explode.

NUMCHECK faz o compilador inserir verificações para identificar esse tipo de problema antes que ele vire um incidente.

Curiosidade

Muitos S0C7 não nascem onde ocorrem.

O dado inválido pode ter sido gravado horas antes por outro programa.


3. SSRANGE

Imagine um armário com 100 gavetas.

Você tenta abrir a gaveta 101.

Ela simplesmente não existe.

Sem SSRANGE...

Seu programa pode acessar memória indevida.

Com SSRANGE...

O erro é detectado imediatamente.

Exemplo:

01 TABELA.
   05 ITEM OCCURS 100 TIMES.

MOVE "X" TO ITEM(101).

Esse erro pode permanecer escondido durante anos.

Até que um dia...

Produção.


Curiosidade

Grande parte dos erros difíceis de reproduzir está relacionada ao acesso indevido de memória.

SSRANGE ajuda justamente nisso.


4. TEST

Quantos DISPLAY você já encontrou em produção?

DISPLAY "CHEGUEI AQUI".

DISPLAY SQLCODE.

DISPLAY WS-CLIENTE.

Eles ajudam?

Sim.

Mas apenas temporariamente.

Hoje existem ferramentas de Debug muito mais completas.

Com TEST, o programa pode ser analisado sem transformar o código em uma árvore de DISPLAY.


5. Unicode

Durante décadas tudo era EBCDIC.

Hoje recebemos:

  • JSON

  • XML

  • APIs

  • Web

  • Smartphones

  • Emojis

  • Idiomas internacionais

O COBOL moderno suporta Unicode.

Isso significa muito mais integração.

Imagine um banco atendendo clientes no Japão, Brasil e Alemanha.

Tudo utilizando a mesma aplicação.


Curiosidade

Muitos desenvolvedores COBOL nunca perceberam que o Enterprise COBOL moderno possui excelente suporte a Unicode.


6. JSON PARSE

Há alguns anos montar JSON significava algo parecido com isto:

STRING "{"

...

"}"

Muito código.

Muito risco.

Muito difícil de manter.

Hoje basta utilizar:

JSON GENERATE.

Ou

JSON PARSE.

O compilador faz praticamente todo o trabalho.


Isso muda completamente a modernização

Imagine integrar COBOL com:

  • React

  • Angular

  • Flutter

  • Java

  • Python

JSON virou a linguagem universal.


7. XML PARSE

O mesmo aconteceu com XML.

Antes era comum utilizar:

UNSTRING.

INSPECT.

STRING.

Hoje o compilador entende XML nativamente.

Menos código.

Menos bugs.

Mais produtividade.


8. RENT

Talvez uma das opções menos conhecidas pelos iniciantes.

RENT significa:

Reentrant.

Ou seja...

O programa pode ser executado simultaneamente por diversos usuários.

Imagine um banco.

Cinco mil clientes consultando saldo.

O mesmo programa atende todos.

Isso só funciona porque ele foi escrito corretamente.


Dica

Sempre evite gravar informações temporárias em áreas compartilhadas.


9. DYNAM

No passado quase tudo era ligado durante o Link-Edit.

Hoje queremos mais flexibilidade.

CALL dinâmico permite substituir módulos sem reconstruir toda a aplicação.

É um grande aliado em ambientes modernos.


10. EVALUATE

Existe um momento na vida de todo Padawan em que ele escreve isto:

IF
ELSE
IF
ELSE
IF
ELSE

Depois de alguns meses...

Nem ele entende mais.

EVALUATE resolve exatamente isso.

Exemplo:

EVALUATE WS-TIPO

WHEN 1

WHEN 2

WHEN 3

WHEN OTHER

END-EVALUATE

Muito mais limpo.


11. END-IF

Antigamente muitos programas dependiam de ponto final e NEXT SENTENCE.

Isso gerava ambiguidades.

Hoje escrevemos:

IF ...

END-IF

O compilador entende exatamente onde cada bloco termina.


12. Intrinsic Functions

Durante muitos anos criávamos rotinas para tudo.

Hoje o compilador já oferece dezenas de funções.

Exemplos:

FUNCTION CURRENT-DATE

FUNCTION LENGTH

FUNCTION TRIM

FUNCTION LOWER-CASE

FUNCTION UPPER-CASE

Além de deixar o código mais elegante, elas costumam ser mais eficientes.


13. Evitar ALTER

ALTER era considerado brilhante.

Na década de 70.

Hoje virou pesadelo.

Ele altera dinamicamente o fluxo do programa.

Resultado:

  • difícil de entender;

  • difícil de depurar;

  • difícil de otimizar.

Por isso praticamente desapareceu dos novos projetos.


14. Reduzir GO TO

Existe um mito.

GO TO não é proibido.

Mas o excesso dele transforma um programa em um labirinto.

Imagine tentar seguir uma história cuja página seguinte muda aleatoriamente.

É exatamente essa sensação.

PERFORM e EVALUATE tornam o fluxo muito mais claro.


15. Migrar para Enterprise COBOL 6.x

Essa talvez seja a maior evolução dos últimos anos.

O compilador moderno entende muito melhor os processadores IBM Z atuais.

Isso significa:

  • menos CPU;

  • otimizações automáticas;

  • melhores diagnósticos;

  • suporte ampliado a JSON e XML;

  • novas funções intrínsecas.

Em muitos casos, apenas recompilar um programa com ajustes adequados já produz ganhos perceptíveis de desempenho.


16. Pensar em Integração

Esta talvez seja a maior mudança cultural.

Antes escrevíamos programas Batch.

Hoje escrevemos serviços corporativos.

Um programa COBOL pode atender:

  • Mobile Banking

  • Internet Banking

  • PIX

  • APIs REST

  • Java

  • Python

  • Node.js

  • OpenShift

  • Mensageria MQ

O código precisa nascer preparado para esse mundo.


O impacto nos programas antigos

A boa notícia é que a IBM sempre valorizou compatibilidade. Muitos programas escritos há décadas ainda compilam e executam nas versões atuais do Enterprise COBOL.

Isso, porém, não significa que estejam aproveitando os recursos modernos.

É comum encontrar aplicações com:

  • STOP RUN em todos os módulos;

  • dezenas de GO TO;

  • ALTER;

  • manipulação manual de XML e JSON;

  • ausência de verificações de dados;

  • poucas opções de diagnóstico.

Esses programas continuam funcionando, mas tendem a ser mais difíceis de manter, testar e integrar.

Modernizar não significa reescrever tudo. Em muitos casos, basta evoluir gradualmente: substituir comandos antigos, ativar opções do compilador, introduzir funções intrínsecas e organizar melhor o código.


A evolução de um Programador COBOL

Todo desenvolvedor passa por etapas.

Padawan

Aprende a sintaxe.

Consegue compilar.

Resolve problemas.

Programador

Começa a reutilizar código.

Escreve módulos.

Documenta interfaces.

Desenvolvedor Sênior

Pensa em desempenho.

CPU.

Memória.

Escalabilidade.

Arquiteto

Pensa no sistema inteiro.

Integração.

Disponibilidade.

Evolução.

Governança.

Perceba que, à medida que você cresce, a linguagem deixa de ser o foco principal. O importante passa a ser a qualidade das decisões.


O Mainframe moderno

Existe um mito antigo de que o Mainframe "parou no tempo".

Nada poderia estar mais distante da realidade.

Hoje um IBM Z pode:

  • expor APIs REST;

  • consumir serviços externos;

  • executar aplicações Java;

  • trabalhar com contêineres;

  • integrar-se ao OpenShift;

  • processar JSON e XML;

  • utilizar DevOps, Git e pipelines CI/CD;

  • compartilhar dados em tempo real com aplicações distribuídas.

O COBOL moderno acompanha essa evolução. As recomendações da IBM existem justamente para que o código continue relevante nesse novo cenário.


Conclusão

Existe uma frase que resume toda essa evolução:

"O melhor código não é aquele que apenas funciona hoje; é aquele que continuará funcionando, sendo compreendido e evoluído daqui a vinte anos."

As recomendações da IBM não representam uma ruptura com o passado. Elas representam a continuidade de uma filosofia que sempre guiou o Mainframe: estabilidade, desempenho, confiabilidade e evolução gradual.

Trocar STOP RUN por GOBACK, utilizar NUMCHECK, adotar SSRANGE nos testes, explorar JSON PARSE, JSON GENERATE, XML PARSE, RENT, funções intrínsecas e estruturas mais legíveis não é seguir uma moda. É escrever código preparado para um ambiente onde COBOL conversa diariamente com APIs, microsserviços, aplicações móveis e plataformas em nuvem.

Como Programador COBOL Padawan, seu objetivo não deve ser apenas aprender comandos. Deve ser entender por que eles existem, quando utilizá-los e como eles ajudam a construir sistemas capazes de sobreviver por décadas.

No Bellacosa Mainframe, costumamos dizer que a verdadeira modernização não começa com uma nova tecnologia. Ela começa quando o desenvolvedor muda sua forma de pensar. O compilador evolui, o hardware evolui, o IBM Z evolui — e o profissional que acompanha essa jornada deixa de apenas escrever programas para construir soluções que atravessam gerações.


sábado, 1 de novembro de 2025

XML com indexação do Site - Teste



 



https://eljefemidnightlunch.blogspot.com/ 2025-11-01

Teste de indexação

El Jefe Midnight Lunch


https://eljefemidnightlunch.blogspot.com


https://eljefemidnightlunch.blogspot.com


https://eljefemidnightlunch.blogspot.com


https://eljefemidnightlunch.blogspot.com


https://eljefemidnightlunch.blogspot.com

1

https://eljefemidnightlunch.blogspot.com/atom.xml?redirect=false&start-index=1&max-results=500


https://eljefemidnightlunch.blogspot.com/atom.xml?redirect=false&start-index=501&max-results=500


https://eljefemidnightlunch.blogspot.com/atom.xml?redirect=false&start-index=1001&max-results=500


https://eljefemidnightlunch.blogspot.com/atom.xml?redirect=false&start-index=1501&max-results=500



terça-feira, 9 de julho de 2024

COBOL Ponteiros de Memória: Os Cristais Kyber Escondidos do IBM Z – O Padawan Avançado - Parte IV

 

Bellacosa Mainframe e os ponteiros de memoria em cobol Parte IV

COBOL Ponteiros de Memória: Os Cristais Kyber Escondidos do IBM Z

Parte 4 – O Padawan Avançado

COBOL, Metal C, APIs, Buffers Compartilhados, JSON, MQ e as Técnicas Jedi de Alto Desempenho no IBM Z

Por Bellacosa Mainframe


"O Padawan aprende MOVE. O Cavaleiro aprende BASED. O Mestre aprende que um ponteiro pode conectar universos inteiros."

Mestre Bellacosa Sysprog Jedi


Introdução

Chegamos ao último módulo do Holocron dos Ponteiros COBOL.

Nas partes anteriores aprendemos:

Parte 1

  • USAGE POINTER

  • ADDRESS OF

  • SET

  • AMODE

  • Heap

  • Stack

Parte 2

  • BASED

  • ALLOCATE

  • FREE

  • CEEGTST

  • Estruturas dinâmicas

Parte 3

  • SOC4

  • Memory Leak

  • Overlay

  • CEEDUMP

  • IPCS

  • Fault Analyzer

O jovem Padawan então pergunta:

Mestre...

Eu entendi os ponteiros.

Mas onde eles realmente são usados?

O mestre aponta para um gigantesco IBM z17.

E responde.

Em praticamente todos os lugares importantes.


O grande segredo

Poucos desenvolvedores percebem.

Mas produtos IBM utilizam ponteiros intensivamente.

Exemplos.

CICS

DB2

MQ

LE

z/OS

TCP/IP

JES2

JES3

RACF

SMF

VSAM

IMS

Todos.


O COBOL moderno

COBOL não vive sozinho.

Ele conversa.

Com:

C

Metal C

Assembler

Java

MQ

JSON

REST

Sockets


E o idioma dessa conversa é.

Ponteiros.


COBOL e C

Talvez seja o casamento mais comum.


C

Produz buffer.


COBOL

Consome.


Arquitetura.

C


↓

malloc()


↓

PTR



↓

COBOL


BASED

Exemplo conceitual

Programa C.

malloc(1024);

Retorna.

Endereço.


COBOL.

01 WS-PTR POINTER.

Recebe.


Associa.

SET ADDRESS OF BUFFER

TO WS-PTR

Pronto.


COBOL agora enxerga.

Memória criada em C.


Metal C

Mais interessante.


Executa próximo do hardware.


Pode usar.

64 bits.

Storage Keys.


Compartilhar.

Buffers.


Muito utilizado.

Middleware.


Shared Memory

Outro uso avançado.


Vários programas.

Mesmo buffer.


Visualmente.

Programa A


↓

Shared Buffer


↑


Programa B

Sem cópia.


Muito rápido.


MQ

Excelente exemplo.


MQGET

MQPUT


Mensagem.


Buffer.


COBOL.

Ponteiro.


Estrutura BASED.


Visualmente.

MQ


↓

Buffer


↓

PTR


↓

BASED

Processamento.

Zero cópia.


JSON

Muito utilizado hoje.


Imagine.

{
"name":"Bellacosa",

"idade":52
}

Parser.

Cria árvore.


Cada nó.

Possui ponteiros.


Pai.

Filho.

Irmão.


Exemplo.

JSON ROOT


↓


name


↓


idade

XML

Mesma ideia.


DOM.


Tree.


Ponteiros ligam.

Nós.


APIs

z/OS Connect.


Buffers.


Payload.


Parser.


Muito comum.


Sockets

TCP/IP.


Recebe.

4096 bytes.


Ponteiro.


COBOL lê.


Mais eficiente.


Cache

Outro caso.


Tabela gigante.


Ponteiro.

Evita copiar.


Exemplo.

100 MB.


Mover.

Custa.


Apontar.

8 bytes.


Quase instantâneo.


Tabelas in-memory

Excelente.


DB local.


Lookup rápido.


Hash.


B-tree.


Implementável.


Estruturas avançadas

Lista Duplamente Encadeada

NODE


PREV


NEXT

Árvore AVL


Balanceada.


Ponteiros.


B-tree

Muito utilizada.

Banco dados.


Grafo

Exemplo.

A


/ \


B  C


\ /


D

Tudo possível.


Comparação com outras linguagens

LinguagemPonteiros
COBOLSim
CSim
C++Sim
RustControlado
JavaReferências
GoSim
PythonOculto

Curiosidade

Java.

Esconde.


COBOL.

Mostra.


C.

Expõe totalmente.


Rust.

Protege.


Quando usar?

Bellacosa recomenda.


Excelente.

Buffers

MQ

JSON

XML

APIs

Cache

LE

Middleware

Parsers

Estruturas dinâmicas


Quando evitar?

Cadastro.


Folha pagamento.


VSAM simples.


DB2 comum.


Relatórios.


Performance

Muito alta.


Sem MOVE.


Sem COPY.


Sem serialização.


Muito usada.

Em produtos IBM.


Segurança

Ainda importante.


Ponteiro errado.

Continua.

SOC4.


Heap inválido.


Overlay.


Corrompe.


Documentação

Obrigatória.


Desenhe.

Diagramas.


Exemplo.

PTR1


↓

NODE1


↓

NODE2


↓

NODE3

Ajuda manutenção.


Bellacosa Best Practices

Regra 1

Inicialize.

Sempre.

SET PTR TO NULL

Regra 2

Documente.


Regra 3

Libere.


Regra 4

Nunca reutilize.

Após FREE.


Regra 5

BASED bem definido.


Regra 6

Evite engenharia excessiva.


O Teste do Mestre

Pergunta ao Padawan.

Você precisa.

Criar.

Lista encadeada?


Não?


Use OCCURS.


Sim?


Use ponteiros.


Curiosidades Finais

A maioria dos desenvolvedores COBOL jamais precisará escrever uma árvore AVL.

Ou um parser XML próprio.

Ou um cache compartilhado.

Ou uma estrutura dinâmica baseada em CEEGTST.

Mas os profissionais que sabem fazer isso normalmente pertencem a grupos bastante especializados:

  • Sysprogs

  • Middleware Engineers

  • Desenvolvedores CICS

  • Equipes MQ

  • Produtos IBM

  • Desenvolvedores de Frameworks

  • Especialistas em LE

  • Equipes de Modernização IBM Z


O Conselho Final do Mestre Bellacosa

Os ponteiros em COBOL são quase como cristais Kyber escondidos em uma antiga câmara do templo IBM Z.

Durante décadas, muitos desenvolvedores passaram por eles sem percebê-los.

Outros ouviram histórias assustadoras sobre SOC4, overlays e memory leaks e decidiram nunca tocá-los.

E alguns poucos escolheram estudá-los profundamente.

Esses poucos descobriram algo fascinante.

Ponteiros não servem apenas para criar problemas.

Eles são a base invisível que sustenta grande parte das tecnologias modernas do ecossistema IBM Z.

São eles que permitem compartilhar buffers entre linguagens.

São eles que fazem parsers navegarem por documentos JSON gigantescos.

São eles que ajudam produtos IBM a movimentar milhões de mensagens MQ por segundo.

São eles que transformam estruturas estáticas em sistemas vivos, capazes de crescer, adaptar-se e responder dinamicamente às necessidades do negócio.

Mas existe uma última lição.

Talvez a mais importante.

Um ponteiro não possui moral.

Ele não distingue sabedoria de imprudência.

Ele apenas aponta.

E cabe ao desenvolvedor decidir se está usando esse poder para construir um elegante mecanismo de alto desempenho ou para abrir um portal direto para um CEEDUMP de 500 páginas às três horas da manhã de um fechamento bancário.


Fim do Holocron Bellacosa Mainframe

COBOL Ponteiros de Memória: Os Cristais Kyber Escondidos do IBM ZParte 1 a Parte 4 concluídas.


sexta-feira, 31 de março de 2023

COBOL Recursivo — Muito Além do Fatorial (Parte II Section B)


 

Bellacosa Mainframe apresenta cobol recursivo parte II sec b

☕ Um Café no Bellacosa Mainframe

COBOL Recursivo — Muito Além do Fatorial (Parte 2B)

Quando a Recursividade Deixa de Ser Exercício e Passa a Resolver Problemas Reais no IBM Mainframe

"Depois que um programador entende o Call Stack, surge uma pergunta inevitável: se a recursão é mais lenta que um PERFORM, por que compiladores, bancos de dados, processadores XML e até o próprio z/OS utilizam algoritmos recursivos? A resposta está no tipo de problema que estamos tentando resolver."


Introdução

Na Parte 2A utilizamos o exemplo do fatorial.

Foi uma excelente ferramenta didática.

Mas sejamos honestos.

Você dificilmente encontrará um sistema bancário calculando fatoriais durante o fechamento do dia.

Da mesma forma, poucas empresas utilizam Fibonacci em produção.

Esses algoritmos são importantes porque ensinam os fundamentos.

Entretanto, a verdadeira força da recursividade aparece quando o problema deixa de ser linear.

É exatamente aí que muitos programadores COBOL começam a enxergar a diferença entre escrever código e modelar problemas.

Hoje vamos abandonar os exemplos acadêmicos e explorar situações que realmente aparecem em software corporativo.


O primeiro sinal de que um problema pode ser recursivo

Existe uma pergunta simples.

"O objeto que estou processando pode conter outro objeto igual a ele?"

Se a resposta for sim...

Existe uma grande chance de a recursividade ser uma excelente solução.

Observe.

Uma pasta contém...

Pastas.

Um departamento possui...

Subdepartamentos.

Um XML contém...

Outros elementos XML.

Um menu possui...

Submenus.

Uma árvore possui...

Galhos.

Cada galho possui...

Outros galhos.

O próprio problema descreve sua solução.


Fibonacci: o exemplo que ensina e também alerta

Depois do fatorial, Fibonacci é provavelmente o algoritmo recursivo mais famoso.

F(0)=0

F(1)=1

F(2)=1

F(3)=2

F(4)=3

F(5)=5

F(6)=8

Sua definição é extremamente elegante.

F(N)=F(N-1)+F(N-2)

Visualmente.

               F(6)

          /            \

      F(5)            F(4)

     /    \          /    \

 F(4)    F(3)    F(3)    F(2)

Perceba algo importante.

A mesma conta aparece diversas vezes.

F(4).

F(3).

F(2).

Tudo é recalculado.


O lado sombrio da recursividade

Embora o algoritmo seja bonito...

Ele é extremamente ineficiente.

Imagine calcular:

F(50)

Milhares de chamadas serão repetidas.

A árvore cresce exponencialmente.

É um excelente exemplo de como uma solução elegante pode se tornar um desastre de desempenho.

É por isso que muitos algoritmos recursivos modernos utilizam Memoization (armazenar resultados já calculados) ou são convertidos em versões iterativas quando desempenho extremo é necessário.

Essa é uma lição importante para qualquer Padawan: nem toda recursão elegante é uma boa solução para produção.


Árvores: onde a recursividade realmente brilha

Imagine o organograma de uma empresa.

                Presidente

        /          |           \

 Financeiro       RH          Tecnologia

                 /   \

           Folha     Recrutamento

Cada departamento pode possuir outros departamentos.

Cada um deles pode possuir outros.

Não existe um limite fixo.

Como percorrer isso?


Solução utilizando PERFORM

É possível.

Mas rapidamente surgem:

  • tabelas auxiliares;

  • índices;

  • controle de profundidade;

  • pilhas artificiais;

  • lógica de retorno.

O código cresce.

A manutenção se torna complicada.


Solução recursiva

A lógica passa a ser quase uma descrição em português.

Processe este departamento.

Para cada filho

    processe o filho.

Observe.

A estrutura do algoritmo é praticamente igual à estrutura da árvore.

Esse é o verdadeiro poder da recursividade.


XML: um dos melhores exemplos no Mainframe

Hoje praticamente todo ambiente IBM Z conversa com XML.

Imagine.

<empresa>

   <departamento>

      <funcionario>

         <dependente/>

      </funcionario>

   </departamento>

</empresa>

Cada elemento pode conter outros elementos.

Que podem conter outros elementos.

Que podem conter outros elementos.

Até centenas de níveis.

Como percorrer isso?

Recursivamente.


Visualmente.

Empresa

↓

Departamento

↓

Funcionário

↓

Dependente

Cada elemento executa exatamente o mesmo algoritmo.

"Procure meus filhos."

Se encontrar.

Execute novamente.


JSON segue exatamente a mesma ideia

Imagine.

{
   "cliente":
   {
      "endereco":
      {
         "cidade":
         {
            "bairro":"..."
         }
      }
   }
}

Cada objeto contém outro objeto.

Cada objeto utiliza exatamente a mesma lógica.

É uma árvore.

E árvores gostam de recursão.


O XML PARSER do Enterprise COBOL

Poucos desenvolvedores sabem disso.

Quando utilizamos o recurso XML PARSE do Enterprise COBOL, internamente existe um processamento altamente estruturado para percorrer nós, atributos e elementos aninhados.

Embora a implementação interna da IBM utilize diversas otimizações, o conceito fundamental continua sendo o de navegar por uma estrutura hierárquica.

Esse é um excelente exemplo de como compreender recursividade ajuda a entender tecnologias que usamos diariamente, mesmo sem escrever chamadas recursivas explicitamente.


Sistemas de menus

Imagine um sistema.

Cadastros

↓

Clientes

↓

Endereços

↓

Histórico

Outro menu.

Financeiro

↓

Pagamentos

↓

Boletos

Tudo isso pode ser representado por árvores.

A rotina que desenha um menu pode chamar a si própria sempre que encontrar um submenu.


Diretórios do z/OS UNIX

Embora muitos profissionais associem Mainframe apenas a datasets, o z/OS possui um ambiente UNIX extremamente robusto.

Imagine.

/

├── u

│     ├── vagner

│     ├── projetos

│     └── scripts

└── tmp

Uma rotina que lista diretórios faz exatamente isto.

Entre.

Liste arquivos.

Encontrou pasta?

Entre novamente.

Esse algoritmo praticamente escreve sozinho utilizando recursividade.


Busca em Profundidade (DFS)

Um dos algoritmos mais importantes da Computação.

Depth First Search.

Visualmente.

          A

      /      \

     B        C

   /   \       \

  D     E       F

A busca acontece assim.

A

↓

B

↓

D

↑

B

↓

E

↑

A

↓

C

↓

F

Observe.

Sempre mergulhamos o máximo possível.

Depois retornamos.

Depois continuamos.

Isso acontece naturalmente utilizando recursão.


Busca em Largura (BFS)

Já a Breadth First Search prefere percorrer nível por nível.

Ela normalmente utiliza filas.

Não recursão.

Esse é um ótimo exemplo de que nem todo algoritmo sobre árvores precisa ser recursivo.

O desenvolvedor deve escolher a ferramenta adequada ao problema.


QuickSort

Outro algoritmo clássico.

Imagine.

15

↓

Escolha pivô

↓

Menores

Maiores

↓

Repita para cada lado

Cada metade repete exatamente o mesmo algoritmo.

Recursivamente.


MergeSort

Visualmente.

64 15 10 5

↓

64 15

10 5

↓

64

15

10

5

Quando cada pedaço está ordenado.

Eles são reunidos novamente.

O algoritmo divide.

Depois conquista.

Exatamente como o fatorial.


Divide and Conquer

Existe uma família inteira de algoritmos baseada nesse princípio.

  1. Dividir o problema.

  2. Resolver problemas menores.

  3. Unir os resultados.

Sempre que enxergamos esse padrão, vale a pena perguntar:

"A recursividade simplifica esta solução?"


Árvore B e índices de banco de dados

Db2.

IMS.

VSAM.

Sistemas de arquivos.

Todos utilizam árvores internamente.

Imagine procurar um registro.

Você começa na raiz.

Depois escolhe um galho.

Depois outro.

Depois outro.

Até encontrar a folha.

Embora o código interno dos produtos IBM seja altamente otimizado e frequentemente utilize abordagens iterativas para reduzir consumo de pilha, a lógica conceitual é equivalente ao caminhamento recursivo de uma árvore.


Compiladores

Pouca gente imagina.

Mas compiladores adoram recursão.

Imagine.

A+B*C

Transforma-se em.

          +

      /       \

     A         *

            /     \

           B       C

Cada nó da árvore representa uma operação.

O compilador percorre.

Depois gera código.

Esse processo é conhecido como navegação por uma Árvore Sintática Abstrata (AST).

Mesmo quando a implementação final utiliza otimizações sofisticadas, pensar recursivamente torna a construção dessas estruturas muito mais natural.


Interpretadores

Motores de regras.

Interpretadores.

Calculadoras.

Expressões matemáticas.

Todos trabalham sobre árvores.

Por isso a recursão aparece com frequência.


Onde isso aparece no IBM Z?

Mais do que muitos imaginam.

Alguns exemplos.

  • Processamento XML.

  • Navegação JSON.

  • Ferramentas de análise sintática.

  • Produtos que interpretam linguagens.

  • Utilitários de transformação de documentos.

  • Ferramentas de administração de diretórios USS.

  • Alguns componentes de compiladores e analisadores.

Mesmo que você nunca implemente esses produtos, entender como eles funcionam amplia sua capacidade de projetar soluções.


Um erro muito comum

Depois de aprender recursão.

Alguns desenvolvedores tentam utilizá-la em tudo.

Por exemplo.

Ler arquivo VSAM

↓

Processar registro

↓

Chamar novamente

Não.

Esse é um processamento linear.

O correto continua sendo.

PERFORM UNTIL EOF

Recursão aqui apenas aumenta:

  • consumo de memória;

  • número de chamadas;

  • profundidade da pilha;

  • tempo de execução.

Sem qualquer benefício.


Um teste simples

Antes de decidir.

Pergunte.

Meu problema é:

  • Linear?

ou

  • Hierárquico?

Se for linear.

Use PERFORM.

Se for uma estrutura em árvore.

A recursão provavelmente merece consideração.


A maior lição desta parte

A recursividade não existe para substituir laços.

Ela existe para modelar problemas cuja própria natureza é recursiva.

Quando a estrutura do problema se repete dentro dela mesma, a solução recursiva tende a ser mais elegante, mais legível e mais próxima da forma como pensamos o domínio do problema.

É por isso que ela continua relevante, mesmo em uma linguagem tradicionalmente associada ao processamento sequencial como o COBOL.


Easter Egg Bellacosa ☕

Existe uma curiosidade interessante que raramente aparece em cursos de COBOL.

Quando um programador aprende recursão, normalmente acredita que o objetivo é escrever programas que chamam a si mesmos.

Na prática, o maior ganho costuma ser outro.

Depois de estudar recursividade, muitos desenvolvedores passam a compreender muito melhor:

  • por que existe LOCAL-STORAGE;

  • como funciona o CALL BY REFERENCE;

  • por que o Language Environment (LE) precisa administrar uma pilha de execução;

  • como compiladores preservam contexto entre chamadas;

  • por que produtos como Db2, CICS, XML PARSER e diversos componentes do z/OS conseguem processar estruturas complexas de forma organizada.

Curiosamente, alguns dos programadores COBOL mais experientes que você encontrará talvez nunca tenham escrito uma rotina recursiva em produção. Ainda assim, eles entendem profundamente o conceito porque sabem que recursão é uma ferramenta para compreender arquitetura, não apenas um estilo de programação.


Encerrando o Café

Se o fatorial nos ensinou como uma chamada recursiva nasce e morre, os exemplos desta parte mostram por que essa técnica continua viva mais de sessenta anos depois do surgimento do COBOL.

Árvores, XML, JSON, compiladores, algoritmos de busca e estruturas hierárquicas compartilham uma característica em comum: todos descrevem problemas que contêm versões menores de si mesmos.

É exatamente nesses cenários que a recursividade deixa de ser um exercício de faculdade e passa a ser uma poderosa ferramenta de modelagem.

No próximo café, vamos olhar para a recursão sob a ótica de um Programador Mainframe Sênior. Analisaremos desempenho, consumo de memória, profundidade de pilha, Tail Recursion, otimizações do compilador, depuração, análise de dumps, interação com o Language Environment e diversas dicas práticas para decidir, com segurança, quando usar — e principalmente quando evitar — a recursividade em aplicações Enterprise COBOL.

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

sábado, 9 de janeiro de 2010

🔥☕ XML: O “DINOSSAURO IMORTAL” QUE AINDA MOVE BANCOS, GOVERNOS E O MAINFRAME — A TECNOLOGIA QUE SOBREVIVEU À INTERNET, À NUVEM E AO JSON ☕🔥

 


Bellacosa Mainframe apresenta o XML

🔥☕ XML: O “DINOSSAURO IMORTAL” QUE AINDA MOVE BANCOS, GOVERNOS E O MAINFRAME — A TECNOLOGIA QUE SOBREVIVEU À INTERNET, À NUVEM E AO JSON ☕🔥

Tem tecnologia que nasce como moda.

E tem tecnologia que vira infraestrutura invisível da civilização digital.

O XML pertence ao segundo grupo.

Muita gente nova olha para XML como se fosse apenas “aquele formato verboso cheio de tags”.
Mas o programador COBOL sênior sabe de uma coisa:

👉 Quando o assunto é integração corporativa séria, rastreabilidade, contratos rígidos, padronização e interoperabilidade… o XML ainda reina em silêncio.

Enquanto startups brigavam por frameworks JavaScript…

O XML estava movimentando:

  • bancos centrais,
  • sistemas SWIFT,
  • telecomunicações,
  • ERPs,
  • SOA corporativo,
  • NF-e,
  • SOAP,
  • mensageria,
  • e toneladas de integrações no z/OS.

Sim…

O “velho XML” ainda respira dentro de milhões de transações por segundo.


☕ O NASCIMENTO DO XML — QUANDO A WEB VIROU BAGUNÇA

No começo da internet, o HTML dominava tudo.

Mas existia um problema gigantesco:

HTML servia para exibir dados.
Não para descrever dados.

Ou seja:

  • visual bonito,
  • estrutura fraca,
  • sem semântica corporativa,
  • difícil integração entre sistemas.

A indústria percebeu rapidamente:

“Precisamos de um padrão universal para troca estruturada de informações.”

Foi aí que nasceu o XML.


🔥 QUEM CRIOU O XML?

O XML foi criado por um grupo do W3C (World Wide Web Consortium).

O principal nome associado ao XML é:

🚀 Jon Bosak

Engenheiro da Sun Microsystems.

Conhecido até hoje como:

“O Pai do XML”.

Bosak liderou o Working Group responsável pela especificação.


📅 DATA OFICIAL DE LANÇAMENTO

O XML 1.0 tornou-se recomendação oficial do W3C em:

📌 10 de fevereiro de 1998

E praticamente explodiu no mercado corporativo.


💣 A IDEIA REVOLUCIONÁRIA DO XML

O XML não queria substituir HTML.

Ele queria resolver outro problema:

🔥 DAR SIGNIFICADO AOS DADOS

Exemplo:

<cliente>
<nome>Vagner Bellacosa</nome>
<conta>45892</conta>
<saldo>9500.75</saldo>
</cliente>

Agora o sistema entende:

  • o que é nome,
  • o que é conta,
  • o que é saldo,
  • e como transportar isso entre plataformas diferentes.

Isso mudou completamente a integração corporativa.


☕ O XML VIROU A “LINGUAGEM UNIVERSAL” DAS EMPRESAS

Nos anos 2000, XML virou praticamente religião corporativa.

Tudo era XML:

  • Web Services SOAP,
  • ESB,
  • integração B2B,
  • mensageria,
  • ERP,
  • telecom,
  • middleware,
  • governo eletrônico,
  • documentos fiscais.

Era o Esperanto da TI corporativa.


🚀 XML NO MAINFRAME — A FUSÃO ENTRE O LEGADO E A INTERNET

Aqui começa a parte que o programador COBOL sênior conhece profundamente.

Quando o mundo começou a falar:

  • APIs,
  • e-business,
  • internet banking,
  • SOA,
  • integração distribuída,

o mainframe precisava conversar com o planeta.

E o XML virou a ponte.


🔥 O DIA EM QUE O COBOL COMEÇOU A “FALAR INTERNET”

A IBM integrou XML ao ecossistema z/OS de várias formas:

  • CICS Web Services
  • IMS Connect
  • MQ
  • SOAP Services
  • DB2 XML
  • z/OS Connect
  • Enterprise COBOL XML PARSE
  • XML GENERATE

De repente:

👉 programas COBOL passaram a consumir e gerar XML nativamente.


☕ EXEMPLO REAL EM COBOL — XML GENERATE

Gerando XML diretamente do COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. XMLTEST.

DATA DIVISION.
WORKING-STORAGE SECTION.

01 CLIENTE.
05 NOME PIC X(20) VALUE 'BELLACOSA'.
05 CONTA PIC 9(6) VALUE 123456.
05 SALDO PIC 9(5)V99 VALUE 150075.

01 XML-SAIDA PIC X(500).

PROCEDURE DIVISION.

XML GENERATE XML-SAIDA
FROM CLIENTE

DISPLAY XML-SAIDA.

STOP RUN.

Resultado aproximado:

<CLIENTE>
<NOME>BELLACOSA</NOME>
<CONTA>123456</CONTA>
<SALDO>1500.75</SALDO>
</CLIENTE>

Sim…

O COBOL virou produtor de XML sem precisar reinventar parser manual.


💣 XML PARSE — QUANDO O COBOL COMEÇOU A ENTENDER TAGS

Depois veio o:

XML PARSE

Agora o COBOL conseguia interpretar XML de entrada.

Isso foi revolucionário.

O legado deixou de ser “isolado”.

O mainframe passou a:

  • consumir serviços externos,
  • receber payloads SOAP,
  • integrar ERPs,
  • conversar com Java,
  • integrar aplicações distribuídas.

🚀 XML E O IMPÉRIO DO SOAP

Antes do REST dominar o hype…

SOAP era o rei absoluto das integrações corporativas.

E SOAP é baseado em XML.

Exemplo:

<soap:Envelope>
<soap:Body>
<consultaSaldo>
<conta>123456</conta>
</consultaSaldo>
</soap:Body>
</soap:Envelope>

Milhões de transações bancárias ainda usam isso HOJE.


☕ O XML É “VERBOSO”? SIM. E ISSO É DE PROPÓSITO.

A nova geração reclama:

“XML é grande demais.”

Mas existe um motivo.

O XML foi criado pensando em:

  • legibilidade,
  • validação,
  • governança,
  • auditoria,
  • contratos formais,
  • interoperabilidade corporativa.

Ele privilegia:

clareza acima da compactação.


🔥 VANTAGENS DO XML

🚀 Estrutura rígida

Excelente para ambientes críticos.


🚀 Auto descritivo

Os dados explicam a si mesmos.


🚀 Padronização mundial

Quase toda plataforma suporta XML.


🚀 Extensível

Você cria suas próprias tags.


🚀 Forte validação

Com:

  • DTD
  • XSD Schema

🚀 Excelente para integração corporativa

Principalmente em ambientes heterogêneos.


💣 DESVANTAGENS DO XML

⚠️ Verbosidade

Arquivos grandes.


⚠️ Parsing pesado

Consome CPU e memória.


⚠️ Mais lento que JSON

Especialmente em APIs modernas.


⚠️ Complexidade

Schemas gigantes podem virar monstros corporativos.


☕ O JSON “MATOU” O XML?

Não.

Ele apenas ocupou outro espaço.

JSON venceu:

  • mobile,
  • microservices,
  • front-end,
  • APIs leves.

Mas XML continua fortíssimo em:

  • bancos,
  • telecom,
  • governo,
  • seguros,
  • sistemas críticos,
  • integrações legadas,
  • contratos corporativos.

🚀 CURIOSIDADES QUE MUITA GENTE NÃO SABE

🔥 XML influenciou profundamente o mundo moderno

Muitas tecnologias nasceram em cima dele:

  • SOAP
  • WSDL
  • XSLT
  • SVG
  • RSS
  • XHTML
  • Office Open XML

🔥 DOCX É XML

Sim.

Um arquivo Word moderno:

.docx

na verdade é:

  • um ZIP
  • cheio de XMLs internos.

🔥 Excel também usa XML

O formato XLSX é praticamente XML compactado.


🔥 Android usa XML em layouts

Até hoje.


💣 EASTER EGG HISTÓRICO

O nome XML significa:

eXtensible Markup Language

Mas internamente, muitos engenheiros brincavam dizendo:

“XML = eXtremely Much Language”

por causa da verbosidade absurda.


☕ XML NO DB2 — O BANCO RELACIONAL VIROU HÍBRIDO

O DB2 introduziu suporte nativo XML.

Isso foi gigantesco.

Agora era possível:

  • armazenar XML puro,
  • indexar XML,
  • consultar XML com XPath/XQuery,
  • misturar SQL relacional com dados hierárquicos.

O banco relacional começou a absorver características semiestruturadas.

Muito antes do hype NoSQL.


🚀 XML E O z/OS CONNECT

Hoje o z/OS Connect traduz:

  • REST ⇄ COBOL
  • JSON ⇄ estruturas legadas

Mas internamente muitos ambientes ainda convertem:

  • XML,
  • SOAP,
  • payloads corporativos.

O XML continua sendo peça fundamental da integração enterprise.


🔥 O GRANDE PARADOXO DO XML

Todo mundo fala que XML morreu.

Mas:

  • bancos continuam usando,
  • governos continuam usando,
  • seguradoras continuam usando,
  • o mainframe continua usando,
  • middleware continua usando.

É o típico caso da tecnologia invisível:

quanto mais crítica ela é…

menos as pessoas percebem que ela existe.


☕ CONCLUSÃO — O XML NÃO É MODA. É INFRAESTRUTURA.

O programador COBOL sênior entende algo que o mercado esquece rápido:

👉 tecnologia corporativa não vive de hype.

Ela vive de:

  • estabilidade,
  • compatibilidade,
  • governança,
  • previsibilidade,
  • integração,
  • longevidade.

E nisso…

o XML virou praticamente aço estrutural da computação enterprise.

Enquanto frameworks nascem e morrem em dois anos…

o XML segue silenciosamente:

  • integrando continentes,
  • movendo trilhões,
  • conectando sistemas críticos,
  • e mantendo o mainframe conversando com o mundo moderno.

🔥 Porque no fim…

o XML nunca quis ser “cool”.

Ele queria ser eterno.

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