Translate

quarta-feira, 5 de novembro de 2025

💣🧠 “TRACE ?R”: O SUPERPODER SECRETO DO REXX QUE TRANSFORMA DEBUG EM INVESTIGAÇÃO FORENSE 🧠💣

 


Bellacosa Mainframe apresenta o Trace no REXX


💣🧠 “TRACE ?R”: O SUPERPODER SECRETO DO REXX QUE TRANSFORMA DEBUG EM INVESTIGAÇÃO FORENSE 🧠💣

Quando um EXEC entra em colapso no z/OS… o verdadeiro programador não entra em pânico. Ele ativa o TRACE.


Existe um momento na vida de todo profissional Mainframe em que o EXEC começa a agir como entidade paranormal.

Você roda o REXX.

Ele:

  • não dá ABEND,
  • não retorna RC,
  • não mostra erro,
  • não funciona,
  • e ainda imprime uma mensagem que parece saída de um ritual obscuro do ISPF.

Você olha para a tela.

A tela olha para você.

E naquele instante nasce a pergunta clássica:

“QUE DIABOS ESSE EXEC ESTÁ FAZENDO?”

É aí que entra uma das ferramentas mais poderosas já criadas no universo IBM:

⚡ TRACE ⚡

Mas este artigo não é apenas sobre TRACE.

É sobre:

  • debugging profissional,
  • tratamento de erros,
  • SIGNAL,
  • RC,
  • traps,
  • investigação de falhas,
  • sobrevivência operacional,
  • e a fina arte de impedir que um EXEC destrua sua sanidade mental às 03:17 da manhã em pleno fechamento bancário.

🏛️ O DIA EM QUE O REXX DECIDIU NÃO FALHAR

Uma das características mais bizarras — e ao mesmo tempo geniais — do REXX é:

Ele tenta NÃO te atrapalhar.

Isso parece bonito…

ATÉ VIRAR UM PESADELO.

Exemplo clássico:

/* REXX */

salario = 5000
bonus = 1200

total = salrio + bonus

say total

Você esperaria:

6200

Mas recebe:

SALRIO1200

Sim.

Porque:

  • salrio não existe,
  • o REXX assume o nome da variável,
  • concatena tudo,
  • e segue a vida como se nada tivesse acontecido.

O programa não explode.

O programa apenas:

  • distorce a realidade,
  • corrompe lógica,
  • e abre um portal dimensional dentro do TSO.

🚨 SIGNAL ON NOVALUE — O “AIRBAG” DO REXX

Todo EXEC profissional deveria começar com:

Signal On Novalue

Sem isso:

  • bugs silenciosos vivem entre nós.

Com isso:

  • variáveis inexistentes são capturadas imediatamente.

🧪 Exemplo Profissional

/* REXX */
Signal On Novalue

nome = "BELLACOSA"

say sobrenome

exit 0

Novalue:
say "ERRO: Variavel nao inicializada!"
say "Linha:" sigl
say sourceline(sigl)
exit 20

Resultado:

ERRO: Variavel nao inicializada!
Linha: 5
say sobrenome

ABSOLUTAMENTE LINDO.

Você:

  • identifica o erro,
  • localiza a linha,
  • entende o problema,
  • salva horas de investigação.

🕵️ TRACE — O CSI DO MAINFRAME

Agora chegamos ao coração da magia.

Trace R

Essa instrução transforma o EXEC em um documentário criminal.

Você começa a enxergar:

  • execução linha por linha,
  • resultados intermediários,
  • expressões,
  • variáveis,
  • comandos host,
  • fluxo lógico.

🔥 Exemplo

/* REXX */
Trace R

a = 10
b = 20
c = a + b

say c

Saída típica:

>>>   "a = 10"
>>> "b = 20"
>>> "c = a + b"
>>> "30"
30

Você literalmente vê o cérebro do EXEC funcionando.


👁️ TRACE ?R — O MODO MATRIX DO REXX

Agora prepare-se.

Porque existe algo ainda mais poderoso:

Trace ?R

O ? ativa:

DEBUG INTERATIVO

Sim.

INTERATIVO.

Em pleno ambiente Mainframe.

Tecnologia ancestral da IBM.


🤯 O QUE ISSO FAZ?

O EXEC:

  • pausa em cada instrução,
  • espera comandos,
  • permite inspeção dinâmica.

Você pode:

  • reexecutar linha,
  • alterar variável,
  • testar expressão,
  • inspecionar ambiente,
  • modificar comportamento em tempo real.

🧠 Exemplo

Trace ?R

x = 10
y = 30
z = x + y

say z

Durante execução você pode digitar:

say x

E o EXEC responde.

É praticamente um:

  • debugger,
  • shell,
  • laboratório interativo,
  • máquina do tempo operacional.

☢️ RC — O NÚMERO QUE DEFINE O DESTINO

No Mainframe existe um conceito sagrado:

RETURN CODE

A variável especial:

rc

contém o retorno do último comando host.


🎯 Exemplo

"LISTDS USER.INVALID.DATASET"

say rc

Se dataset não existir:

8

📜 Convenção clássica IBM

RCSignificado
0Sucesso
4Warning
8Problema provável
12Falha séria
16Caos crescente
20O datacenter está pegando fogo

(Ok… o último é interpretação emocional.)


💀 O ERRO MAIS COMUM DOS INICIANTES

Executar comando host…

e IGNORAR o RC.

Exemplo proibido em 37 países:

"ALLOC FI(TESTE) DA('ARQ.INEXISTENTE') SHR"

"EXECIO * DISKR TESTE"

Se ALLOC falhar:

  • EXECIO também falha,
  • mensagens ficam confusas,
  • debugging vira arqueologia.

✅ Forma correta

"ALLOC FI(TESTE) DA('ARQ.INEXISTENTE') SHR"

If rc <> 0 Then Do
Say "Falha na alocacao!"
Exit 8
End

🧨 SIGNAL ON ERROR — O CAÇADOR DE DESASTRES

Outra arma essencial:

Signal On Error

Agora qualquer comando host com RC ruim:

  • desvia execução,
  • entra no trap,
  • permite recovery.

🛡️ Exemplo corporativo

/* REXX */
Signal On Error

"DELETE USER.PROD.ARQ"

say "Arquivo removido"

exit 0

Error:
say "Falha no comando host"
say "RC =" rc
say "Linha =" sigl
exit 12

🧬 SIGL — A LINHA DO CRIME

A variável:

sigl

contém:

a linha onde o erro ocorreu.

Isso é ouro puro.


🧠 SOURCELINE() — A MEMÓRIA FOTOGRÁFICA DO EXEC

Você pode mostrar exatamente a linha problemática:

say sourceline(sigl)

Exemplo:

"DELETE USER.PROD.ARQ"

O EXEC literalmente aponta:

“FOI AQUI.”


🏴‍☠️ EASTER EGG MAINFRAME #1

Veteranos de REXX frequentemente usam:

Trace ?R

como se fosse um mini TSO dentro do próprio EXEC.

É quase um:

  • “REXXCEPTION”,
  • um EXEC rodando dentro do EXEC,
  • enquanto você conversa com ele durante a execução.

🏴‍☠️ EASTER EGG MAINFRAME #2

Existe uma lenda antiga de operadores que:

  • ativavam TRACE,
  • esqueciam de desligar,
  • geravam SYSOUT gigantesco,
  • e enchiam spool JES2 inteiro.

Moral da história:

Trace O

também salva carreiras.


🏴‍☠️ EASTER EGG MAINFRAME #3

Programador Mainframe raiz não chama bug de bug.

Ele chama de:

  • “anomalia operacional”,
  • “comportamento inesperado”,
  • “efeito colateral do ambiente”,
  • ou:

“funciona em produção.”


⚙️ O VERDADEIRO ENSINAMENTO

Debugging não é apenas corrigir erros.

É:

  • entender fluxo,
  • prever falhas,
  • construir resiliência,
  • escrever automações seguras,
  • proteger produção,
  • facilitar manutenção futura.

🏛️ O MAINFRAME NÃO PERDOA DESCUIDO

Um EXEC mal escrito pode:

  • apagar datasets,
  • travar usuários,
  • consumir spool,
  • quebrar automações,
  • causar RC cascata em batch,
  • gerar incidentes gigantescos.

Por isso programadores experientes:

  • validam RC,
  • usam SIGNAL,
  • usam TRACE,
  • documentam tudo,
  • tratam exceções.

🚀 CONCLUSÃO

REXX parece simples.

Mas por trás da simplicidade existe uma linguagem:

  • elegante,
  • introspectiva,
  • extremamente poderosa,
  • absurdamente avançada para sua época.

E quando você domina:

  • TRACE,
  • SIGNAL,
  • RC,
  • NOVALUE,
  • SOURCELINE,
  • SIGL,

você deixa de apenas “escrever scripts”.

Você começa a construir:

automações enterprise-grade dignas do universo z/OS.

Porque no fim…

o verdadeiro programador Mainframe não teme o erro.

Ele:

  • captura,
  • analisa,
  • documenta,
  • trata,
  • e transforma caos operacional em engenharia confiável.

💙🖥️🚀

terça-feira, 4 de novembro de 2025

🎨 olhos de cores não convencionais


 



🔮 1. Diferenciação e impacto visual

  • O anime precisa que o personagem seja memorável. Um olho lilás, vermelho ou dourado chama atenção e ajuda a fixar o personagem na mente do espectador.

  • Em especial nos mangás, onde tudo é preto e branco, a cor do olho é descrita no material extra ou no anime para destacar a personalidade única.


🎭 2. Simbolismo das cores

No Japão (e na narrativa visual), cada cor carrega significados:

  • Amestista / Roxo → nobreza, espiritualidade, mistério, magia. Personagens com esses olhos costumam ter aura de realeza ou ligação com o sobrenatural.

  • Vermelho → intensidade, paixão, poder, às vezes perigo ou sangue. Olhos vermelhos aparecem em vampiros, demônios ou personagens muito fortes.

  • Dourado / Amarelo → divindade, luz, raridade. Usado para figuras quase sagradas ou sobrenaturais.

  • Prateado / Branco → pureza, mistério, ligação com a lua ou espiritualidade.

  • Verde → vida, natureza, equilíbrio. Muitas heroínas gentis têm olhos verdes.

Ou seja, a cor dos olhos ajuda a “contar a história” do personagem antes mesmo dele falar.


🧬 3. Exagero estilístico (anime logic™)

Na vida real, quase todos no Japão têm olhos castanhos ou pretos. Então, dar olhos de cores diferentes é uma forma de quebrar a uniformidade e permitir maior variedade estética.
Isso também serve como atalho narrativo: o público já associa certas cores a traços de personalidade (ex.: azul = frio ou racional, vermelho = explosivo, etc.).


🌌 4. Indicação de poderes especiais ou origem diferenciada

Muitos animes usam a cor dos olhos para:

  • Mostrar que o personagem é sobrenatural (elfo, yokai, vampiro, alienígena).

  • Marcar poder oculto (ex.: sharingan em Naruto, Geass em Code Geass).

  • Destacar linhagens especiais ou “sangue raro”.

Exemplo clássico: em Sailor Moon, a cor dos olhos das guerreiras ajuda a reforçar suas conexões planetárias.


🎨 5. Influência de design ocidental

Nos anos 70-80, muitos criadores se inspiraram em personagens de olhos grandes e coloridos de animações ocidentais e HQs. A estética de olhos grandes e brilhantes, com cores raras, virou assinatura do anime moderno.


📌 Resumo:
Olhos de cor amestista (ou outras cores raras) funcionam como símbolos visuais de personalidade, origem e poder, além de tornarem o personagem marcante e diferente dentro da narrativa.

☕🔥 REXX: O “CALL” QUE SEPARA AMADORES DE MESTRES DO MAINFRAME 🔥☕

 

Bellacosa Mainframe subrotina e funções no REXX

☕🔥 REXX: O “CALL” QUE SEPARA AMADORES DE MESTRES DO MAINFRAME 🔥☕

Quando uma simples subrotina vira arquitetura corporativa no z/OS

Existe um momento curioso na vida de todo profissional de Mainframe.

No começo, o programador escreve scripts REXX pequenos:

  • um SAY
  • um PARSE
  • um LISTDSI
  • um loopzinho no TSO

Tudo parece simples…

Até o dia em que o EXEC cresce.

E cresce.

E cresce MAIS.

De repente:

  • o REXX virou ferramenta operacional
  • automatizou JES2
  • conversa com SDSF
  • consulta DB2
  • gera relatórios
  • envia alertas
  • dispara jobs
  • trata datasets
  • faz parsing de SYSOUT

E então nasce o monstro.

O famoso:

“REXX ESPAGUETE”

O EXEC com:

  • 4 mil linhas
  • 93 labels
  • 17 GOTOs improvisados
  • variáveis globais brigando entre si
  • e um EXIT perdido que encerra tudo sem aviso.

É nesse ponto que Functions e Subroutines deixam de ser “assunto básico”.

E passam a ser:

ENGENHARIA DE SOFTWARE NO z/OS


🧠 O DIA EM QUE O REXX MUDA

A maioria aprende REXX assim:

SAY 'HELLO WORLD'

Depois:

DO I = 1 TO 10
SAY I
END

Mas o verdadeiro salto acontece quando alguém descobre:

CALL

Parece banal.

Mas não é.

Porque o CALL introduz:

  • modularização
  • reutilização
  • encapsulamento
  • separação de responsabilidades

Ou seja:

arquitetura.


☕ A FILOSOFIA UNIX… DENTRO DO MAINFRAME

Existe uma ideia clássica no UNIX:

“Faça uma coisa… e faça bem.”

REXX absorveu isso perfeitamente.

Uma boa subrotina:

  • tem responsabilidade única
  • é reutilizável
  • é previsível
  • é segura

🔥 O ERRO QUE TODO MUNDO COMETE

O clássico:

/* REXX */

contador = 0

CALL SOMA
CALL SOMA
CALL SOMA

SAY contador

EXIT

SOMA:
contador = contador + 1
RETURN

Resultado:

3

O iniciante acha lindo.

O veterano começa a suar frio.

Porque:

  • a subrotina alterou variável global
  • qualquer outra rotina pode quebrar tudo
  • debugging vira inferno

🧨 O APOCALIPSE DAS VARIÁVEIS GLOBAIS

Em ambientes corporativos isso gera:

  • bugs fantasmas
  • comportamento imprevisível
  • corrupção lógica
  • falhas intermitentes

O tipo de erro que:

  • acontece só em produção
  • às 3h da manhã
  • no fechamento bancário

🛡️ PROCEDURE: O HERÓI ESQUECIDO DO REXX

Aí surge ele.

O cavaleiro do encapsulamento:

PROCEDURE

O MESMO CÓDIGO — AGORA PROFISSIONAL

/* REXX */

contador = 0

CALL SOMA
CALL SOMA
CALL SOMA

SAY contador

EXIT

SOMA:
PROCEDURE

contador = contador + 1
RETURN

Resultado:

0

BOOM.

Agora:

  • a variável ficou isolada
  • a rotina ficou segura
  • o EXEC ficou previsível

🧠 O QUE O PROCEDURE REALMENTE FAZ?

Muita gente pensa:

“Ah… ele só protege variáveis.”

Não.

Ele cria:

CONTEXTO DE EXECUÇÃO

Quase como stack frame em linguagens modernas.

Ou seja:

  • escopo local
  • isolamento
  • proteção de memória lógica

Isso é MUITO avançado para uma linguagem criada em 1979.


👀 EASTER EGG MAINFRAME #1

Muitos programadores COBOL estranham isso porque COBOL tradicionalmente compartilha Working-Storage de forma mais explícita.

Já o REXX:

  • pode ser extremamente dinâmico
  • extremamente perigoso
  • ou extremamente elegante

Tudo depende do uso do PROCEDURE.


☠️ O “EXIT” QUE MATOU PRODUÇÃO

Existe um erro lendário em REXX.

Esse aqui:

MINHAROTINA:
EXIT

O programador queria retornar.

Mas o EXIT:

  • encerrou o EXEC inteiro
  • abortou processamento
  • deixou JOB preso
  • não gerou relatório
  • não liberou recurso

Resultado:

  • operador chamou suporte
  • suporte chamou sysprog
  • sysprog chamou o programador
  • o programador fingiu que estava em reunião.

O CORRETO

MINHAROTINA:
RETURN

☕ EASTER EGG MAINFRAME #2

Veteranos de TSO geralmente têm trauma de:

  • IKJ56500I
  • loops infinitos
  • EXEC preso consumindo CPU
  • SDSF mostrando step “ativo eternamente”

Muitas vezes a causa era:

  • RETURN faltando
  • variável compartilhada
  • parsing errado

🔍 FUNCTIONS: A JOIA DO REXX

Subrotina executa ações.

Função:

  • calcula
  • transforma
  • retorna valor

EXEMPLO CLÁSSICO

nome = 'MAINFRAME'

tam = LENGTH(nome)

SAY tam

Resultado:

9

A função:

  • recebe argumento
  • processa
  • devolve resultado

O PODER DAS BUILT-IN FUNCTIONS

REXX é quase um canivete suíço textual.

Tem funções para:

  • palavras
  • parsing
  • HEX
  • EBCDIC
  • decimal
  • binary
  • formatação
  • datas
  • sistema

🔥 O MOMENTO “MATRIX” DO MAINFRAME

Quando alguém descobre:

C2X()
X2C()

o cérebro explode.

Porque agora:

  • dumps fazem sentido
  • buffers CICS fazem sentido
  • mensagens MQ fazem sentido
  • VSAM hexadecimal faz sentido

EXEMPLO

SAY C2X('A')

Resultado:

C1

E aqui está a magia.

No Windows:

  • “A” normalmente seria 41 hexadecimal

No Mainframe:

  • é C1

Porque o z/OS vive no glorioso mundo:

EBCDIC


👀 EASTER EGG MAINFRAME #3

Você sabe que alguém virou “mainframer raiz” quando ele olha:

F1F2F3

e instantaneamente pensa:

123

🚀 PARSE ARG — A ARTE DO REXX

Outras linguagens:

campos = texto.split()

REXX:

PARSE ARG nome sobrenome idade

Fim.

Elegante.
Natural.
Humano.


EXEMPLO PROFISSIONAL

/* REXX */

CALL PROCESSA 'VAGNER BELLACOSA MAINFRAME'

EXIT

PROCESSA:
PROCEDURE

PARSE ARG nome sobrenome area

SAY 'NOME :' nome
SAY 'SOBRENOME:' sobrenome
SAY 'AREA :' area

RETURN

Saída:

NOME      : VAGNER
SOBRENOME : BELLACOSA
AREA : MAINFRAME

🔥 INTERNAL vs EXTERNAL ROUTINES

Esse conceito é GIGANTE.


INTERNAL

Dentro do mesmo EXEC.


EXTERNAL

Outro membro da PDS.

Isso permitiu nascer:

  • frameworks REXX
  • bibliotecas corporativas
  • automação enterprise
  • ferramentas operacionais gigantes

🏦 O REXX QUE NINGUÉM VÊ

Muita gente acha que Mainframe moderno vive só de:

  • COBOL
  • DB2
  • CICS

Mas nos bastidores…

REXX roda:

  • automação operacional
  • health checks
  • deployment
  • monitoramento
  • auditoria
  • SDSF automation
  • RACF tooling
  • DevOps z/OS

☕ EASTER EGG MAINFRAME #4

Em muitos bancos:

  • o sistema crítico é COBOL
  • mas quem “cola tudo” é REXX

O REXX virou:

a fita isolante do z/OS.


🎯 O VERDADEIRO ENSINAMENTO

Esse módulo parece ensinar:

  • CALL
  • RETURN
  • FUNCTION

Mas o que ele REALMENTE ensina é:

COMO ORGANIZAR PENSAMENTO


O SALTO DE MATURIDADE

O iniciante escreve:

  • scripts

O profissional escreve:

  • módulos

O especialista escreve:

  • frameworks reutilizáveis

O veterano escreve:

  • automação que parece sistema operacional.

💡 EXEMPLO FINAL — ESTILO CORPORATIVO

/* REXX */

CALL CABECALHO

usuario = USERID()
data = DATE()
hora = TIME()

msg = MONTA_MSG(usuario,data,hora)

CALL EXIBE msg

EXIT

/* ======================= */

CABECALHO:
PROCEDURE
SAY '================================='
SAY ' SISTEMA DE AUDITORIA MAINFRAME '
SAY '================================='
RETURN

/* ======================= */

MONTA_MSG:
PROCEDURE

PARSE ARG user,data,hora

RETURN 'USUARIO:' user ' DATA:' data ' HORA:' hora

/* ======================= */

EXIBE:
PROCEDURE

PARSE ARG texto

SAY texto

RETURN

RESULTADO

=================================
SISTEMA DE AUDITORIA MAINFRAME
=================================

USUARIO: IBMUSER DATA: 2026-05-07 HORA: 14:32:10

☕ CONCLUSÃO

Functions e Subroutines não são “detalhes” do REXX.

São:

  • modularização
  • arquitetura
  • reutilização
  • encapsulamento
  • engenharia de software

E talvez essa seja a maior surpresa do Mainframe moderno:

Mesmo décadas depois…

O REXX ainda ensina conceitos que muitos sistemas distribuídos continuam tentando reaprender.