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

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

☕ O Dia em que um Padawan COBOL Enfrentou o Teste Avançado… e Descobriu os Segredos do Mainframe

 

Bellacosa Mainframe e o teste de cobol para padawan

☕ O Dia em que um Padawan COBOL Enfrentou o Teste Avançado… e Descobriu os Segredos do Mainframe

“Muito antes de microservices, Kubernetes e modinhas passageiras, havia tabelas OCCURS, SORTs colossais e programas que movem bilhões… silenciosamente.”

Se você é um Padawan do COBOL, prepare seu café ☕ — hoje vamos atravessar uma jornada digna de Jedi Mainframe.

Este artigo é inspirado em um cenário real: um teste avançado de COBOL cobrindo tabelas, SORT, subprogramas, comunicação interprogramas e OO COBOL.

E sim… isso é exatamente o que sustenta bancos, seguradoras e governos.


🧠 Capítulo 1 — A Força das Tabelas OCCURS

Todo Padawan descobre cedo que:

COBOL não tem “arrays”… tem tabelas.

Exemplo clássico:

01 Salary-Table.
02 Salary PIC 9(4) OCCURS 100 TIMES.

Para zerar a tabela:

MOVE 1 TO Counter
PERFORM UNTIL Counter > 100
MOVE 0 TO Salary(Counter)
ADD 1 TO Counter
END-PERFORM

🧩 Easter Egg #1 — O jeito Jedi

Um Mestre COBOL faria:

INITIALIZE Salary-Table

💥 Mesma coisa. Menos CPU. Mais elegância.


🏥 Capítulo 2 — Tabelas Multinível: O Labirinto dos Índices

Considere:

01 Patient-Table.
02 Ward OCCURS 10 TIMES.
03 Patient OCCURS 120 TIMES.
04 Patient-Name PIC X(50).

Para acessar:

Patient-Name(ward-index, patient-index)

👉 Ordem: de fora para dentro

⚠️ Pegadinha mortal

Se errar a ordem ou quantidade de subscritos:

💥 Pode sobrescrever memória
💥 Pode causar S0C4
💥 Pode derrubar um batch inteiro às 3h da manhã


⚡ Capítulo 3 — Índices vs Subscripts: Velocidade da Luz

Padawans usam:

Salary(5)

Mestres usam:

SET idx TO 5
Salary(idx)

Porque:

CaracterísticaSubscriptIndex
TipoNúmeroOffset
PerformanceMédiaAlta
Uso em SEARCH ALL

🧩 Easter Egg #2

Índices não podem receber MOVE:

MOVE 1 TO idx *> ERRO
SET idx TO 1 *> CORRETO

🔍 Capítulo 4 — SEARCH vs SEARCH ALL

🐢 SEARCH (sequencial)

Procura um a um.

🚀 SEARCH ALL (binário)

Divide ao meio repetidamente.

Mas exige:

✔️ Tabela ordenada
✔️ Índice
✔️ Chave correta

Exemplo:

SEARCH ALL Stock
WHEN Stock-Symbol(idx) = "IBM"
PERFORM Found
END-SEARCH

🧩 Curiosidade histórica

Em grandes bancos:

SEARCH ALL pode reduzir milhões de comparações para poucas dezenas.


🔄 Capítulo 5 — SORT: O Motor Invisível do Batch

O SORT interno envolve três arquivos:

1️⃣ Entrada
2️⃣ Work file (SD)
3️⃣ Saída

SORT Sort-Work
ON ASCENDING KEY Customer-ID
USING Input-File
GIVING Output-File

🔥 Regra de ouro

O Sort Work File:

❌ Não é aberto
❌ Não é fechado
❌ Não é manipulado diretamente

👉 O sistema cuida disso.


🧪 Capítulo 6 — INPUT/OUTPUT PROCEDURE: Magia Avançada

Sem USING/GIVING, você controla tudo:

Entrada → RELEASE

RELEASE Sort-Record

Saída → RETURN

RETURN Sort-Work

💡 Isso permite filtrar, transformar ou gerar dados durante o SORT.


🧩 Capítulo 7 — Subprogramas: Modularidade Jedi

Chamador:

CALL "PROCESS-1" USING parm-area

Subprograma:

LINKAGE SECTION.
01 parm-area PIC X(100).

PROCEDURE DIVISION USING parm-area.

🔥 Regra importante

Por padrão:

👉 Parâmetros são BY REFERENCE
👉 Alterações retornam ao chamador


🌐 Capítulo 8 — Comunicação entre Programas

Tipos de dados compartilhados:

TipoEscopo
GLOBALPrograma + subprogramas embedded
EXTERNALTodo o run unit
LOCALApenas o programa

🧩 Easter Egg #3

EXTERNAL é como memória compartilhada “secreta” entre módulos.

Usar demais = pesadelo de manutenção.


🧬 Capítulo 9 — OO COBOL: O Lado Moderno da Força

Sim, COBOL também tem:

✔️ Classes
✔️ Objetos
✔️ Herança
✔️ Métodos
✔️ Factory

Exemplo simplificado:

CLASS-ID. Account.

FACTORY.
WORKING-STORAGE SECTION.
01 Interest PIC 9V99.

OBJECT.
WORKING-STORAGE SECTION.
01 Balance PIC 9(7)V99.

🔥 Diferença crucial

SeçãoPapel
FACTORYNível classe (static)
OBJECTNível instância

⚔️ Capítulo 10 — INVOKE vs CALL

Padawan erra:

CALL obj "method"

Mestre usa:

INVOKE obj "method"

👉 CALL → programas
👉 INVOKE → métodos OO


☕ Epílogo — O Verdadeiro Poder do COBOL

Após atravessar tabelas, SORTs, subprogramas e OO…

O Padawan percebe:

COBOL não é antigo.
COBOL é maduro.

Ele roda onde:

💰 O dinheiro circula
🏦 As transações acontecem
🌍 O mundo confia


🧠 Curiosidade Final (Easter Egg Supremo)

Estima-se que:

Mais de 70% das transações financeiras globais ainda passam por sistemas COBOL.

Enquanto você lia este artigo…

Provavelmente bilhões foram movimentados por código parecido com os exemplos acima.


🚀 Se você chegou até aqui…

Você já não é apenas um Padawan.

Está iniciando o caminho para:

🥋 Mestre do Mainframe

terça-feira, 27 de julho de 2021

🐙 GitHub Copilot — o “estagiário Jedi” do código (inclusive no Mainframe)

 

Github Copilot em review para mainframers

Um Café no Bellacosa Mainframe

Tema: 🐙GitHub Copilot — o “estagiário Jedi” do código (inclusive no Mainframe)


🤖 Afinal… o que é o GitHub Copilot?

Padawan, sente-se.
O GitHub Copilot é aquele colega que não dorme, não pede café e completa seu código antes de você terminar de digitar. Criado pelo GitHub em parceria com a OpenAI, ele é um assistente de programação baseado em IA, treinado com bilhões de linhas de código público.

Em termos simples (estilo operador de madrugada):

“Você começa a escrever… o Copilot adivinha o que vem depois.”

Ele funciona como um autocomplete turbinado, mas com cérebro. Não é só completar palavra — ele entende intenção, contexto, padrões e estilo.


O que faz o Github Copilot

🧠 O que o Copilot faz na prática?

  • ✍️ Sugere linhas inteiras de código

  • 🧩 Cria funções completas

  • 🔄 Converte comentários em código

  • 🧪 Ajuda a escrever testes

  • 📚 Sugere uso de APIs e bibliotecas

  • 🧹 Refatora código legado (sim, até aquele que ninguém quer mexer)

Tudo isso em tempo real, direto no editor.


🛠️ Onde ele funciona?

  • VS Code (o queridinho)

  • Visual Studio

  • JetBrains (IntelliJ, PyCharm etc.)

  • Neovim (para os monges do terminal 😄)


🎯 Exemplo simples (para Padawans)

Você digita:

# função que calcula fatorial

O Copilot responde:

def fatorial(n): if n == 0: return 1 return n * fatorial(n-1)

Magia?
Não. Machine Learning com café industrial ☕⚙️


💡 Dicas Bellacosa Mainframe (anota no caderninho)

  1. Comente bem o código
    → O Copilot AMA comentários claros.
    Comentário ruim = sugestão ruim.

  2. Não aceite tudo no automático
    → Ele é um estagiário gênio, não o arquiteto.

  3. Use como par de programação
    → Você pensa no “o quê”, ele sugere o “como”.

  4. Excelente para aprender linguagens novas
    → Ideal para Padawans curiosos.

  5. Ótimo para código repetitivo
    → CRUD, validação, parsing, boilerplate… ele faz sorrindo.


🥚 Easter Eggs & Curiosidades

  • 🐙 O nome Copilot vem da aviação:
    Ele ajuda, mas não pilota sozinho.

  • 👀 Ele aprende o estilo do seu projeto.

  • 🤐 Não tem memória pessoal: cada sugestão é baseada no contexto atual.

  • ⚠️ Já sugeriu código inseguro ou obsoleto — por isso, olho de sysprog!


🧓 E AGORA O QUE INTERESSA: GitHub Copilot no IBM Mainframe 😎

❓ “Bellacosa… isso funciona com COBOL?”

Resposta curta:
👉 SIM, MAS COM ASTERISCOS

Resposta longa (a que gostamos):


🖥️ Copilot + COBOL + Mainframe

✅ Onde ele ajuda MUITO

  • 📄 Escrita de código COBOL padrão

    • PERFORM

    • IF/ELSE

    • READ / WRITE

    • Estrutura de PROGRAM-ID, WORKING-STORAGE, etc.

  • 🧾 Conversão de lógica

    • Pseudocódigo → COBOL

    • Comentários → código

  • 🔁 Refatoração de código legado

    • Reduz GOTO

    • Sugere PERFORMs mais limpos

  • 🧪 Geração de programas de teste

    • Dados fictícios

    • Leitura sequencial simples


⚠️ Onde ele AINDA NÃO é Jedi Master

  • ❌ Não conhece seu layout VSAM específico

  • ❌ Não entende copybooks proprietários

  • ❌ Não sabe suas regras de negócio bancárias dos anos 80

  • ❌ Não substitui conhecimento de:

    • CICS

    • DB2 tuning

    • JCL complexo

    • RACF

    • Performance

👉 Aqui entra o Mainframer raiz 💪


📌 Exemplo prático COBOL

Você escreve:

* Ler arquivo de clientes e somar saldo

O Copilot pode sugerir algo como:

READ CLIENTES-FILE AT END MOVE 'S' TO EOF-FLAG NOT AT END ADD SALDO-CLIENTE TO TOTAL-SALDO END-READ.

É perfeito?
Não.

É um ótimo ponto de partida?
👉 SIM.


🧠 Copilot NÃO substitui o Mainframer

E isso precisa ficar claro no El Jefe Midnight:

O Copilot não sabe o que é um ABEND S0C7 às 2h da manhã.
Você sabe.

Ele acelera, mas não decide.
Ele sugere, mas não responde ao auditor.
Ele gera código, mas não conhece o cliente.


☕ Conclusão Bellacosa Mainframe

  • Para Padawans:
    👉 O Copilot é um mestre paciente, que ensina pelo exemplo.

  • Para Mainframers:
    👉 É um acelerador brutal de produtividade, se usado com juízo.

  • Para o futuro do Mainframe:
    👉 Uma ponte entre o legado respeitado e a nova geração.

O Mainframe não morreu.
Ele só ganhou um copiloto.

 

quinta-feira, 16 de julho de 2015

O Manual Real para Sobreviver ao Batch no z/OS ☕💻

 

Bellacosa Mainframe publica guia padawan em mainframe batch jcl e cobol

🔥 Guia do Iniciante em JCL que Ninguém Ensina

O Manual Real para Sobreviver ao Batch no z/OS ☕💻

Todo mundo ensina a sintaxe do JCL.

Pouquíssimos ensinam o que realmente importa:

👉 Como sobreviver ao ambiente batch real
👉 Como não travar a produção
👉 Como entender o que o JOB realmente está fazendo
👉 Como pensar como operador e não apenas programador

Se você domina isso, deixa de ser iniciante de verdade.


🧠 1) JCL não é “script” — é contrato com o sistema operacional

JCL diz ao z/OS:

✔ O que executar
✔ Quais recursos usar
✔ Quais arquivos abrir
✔ Como tratar erros
✔ Onde registrar resultados

Um JCL mal escrito não falha de forma elegante.
Ele pode causar efeitos colaterais enormes.


📦 2) Dataset é mais importante que o programa

Iniciantes focam no EXEC PGM.
Veteranos focam nos DD statements.

Porque:

👉 Programas fazem lógica
👉 Datasetes fazem o processamento real acontecer

Você precisa entender:

  • DSN (nome do dataset)

  • DISP

  • SPACE

  • DCB

  • UNIT

  • CATLG/DELETE

Um erro aqui pode apagar dados ou gerar inconsistências.


💣 3) DISP é a linha mais perigosa do JCL

DISP controla:

  • Criação

  • Uso

  • Catalogação

  • Exclusão

Exemplo aparentemente inocente:

//ARQOUT DD DSN=RELATORIO.DIARIO,
// DISP=(NEW,CATLG,DELETE)

Se o JOB falhar → dataset pode ser deletado.

Muitos incidentes começam aqui.


🔁 4) JOBs não são executados isoladamente

Batch é uma cadeia.

Seu JOB pode:

🔗 Alimentar outro JOB
🔗 Depender de JOB anterior
🔗 Rodar em janela restrita
🔗 Compartilhar arquivos

Um atraso ou erro afeta todo o fluxo noturno.


⏱️ 5) PRIORIDADE e CLASS importam mais do que você imagina

Parâmetros como:

  • CLASS

  • MSGCLASS

  • PRIORITY

  • REGION

Determinam:

✔ Quando seu JOB roda
✔ Onde roda
✔ Quanto recurso usa
✔ Como o output é tratado

Sem entender isso, você pode ficar horas esperando execução.


📊 6) Aprenda a ler o output no SDSF

Rodar o JOB é só metade do trabalho.

Você precisa verificar:

✔ Return Codes (RC)
✔ Mensagens do sistema
✔ Contagem de registros
✔ Warnings
✔ ABENDs

Muitos JOBs “terminam OK” mas produziram dados errados.


🧨 7) SYSOUT pode encher o spool perigosamente

Um programa verboso pode gerar gigabytes de output.

Consequências:

💥 Spool cheio
💥 JOBs bloqueados
💥 Operação impactada

Controle mensagens em produção.


📁 8) PROCLIB e PROC são reutilização poderosa — e perigosa

Procedures simplificam JCLs complexos.

Mas também podem esconder:

  • Datasetes críticos

  • Parâmetros sensíveis

  • Configurações específicas de ambiente

Sempre expanda mentalmente a PROC antes de rodar.


🛑 9) COND e IF/THEN controlam o fluxo real

JCL também tem lógica.

Sem controle adequado:

👉 Passos podem ser pulados
👉 Etapas críticas podem não rodar
👉 JOB pode terminar sem completar o processamento

Exemplo moderno:

IF (STEP1.RC > 4) THEN
EXEC PGM=ABORT
ENDIF

🧠 10) Nem todo erro aparece como ABEND

Situações perigosas:

  • RC alto mas aceitável

  • Arquivo vazio

  • Registros truncados

  • Dados inconsistentes

Operadores experientes analisam contexto, não apenas códigos.


🔒 11) Segurança também passa pelo JCL

Permissões determinam acesso a:

✔ Datasetes
✔ Programas
✔ Recursos do sistema
✔ Ambientes específicos

Um JCL pode falhar simplesmente por falta de autorização.


🔄 12) Restart e Recovery são parte do design

Batch crítico precisa ser reiniciável.

Sem isso:

💥 Reprocessamento manual
💥 Duplicidade de dados
💥 Janela estourada
💥 Risco operacional


🏦 13) Ambiente de produção é diferente de tudo

Em produção existem:

✔ Controles rigorosos
✔ Aprovação formal
✔ Monitoramento contínuo
✔ Dependências externas
✔ SLAs críticos

Nunca trate produção como laboratório.


☕ Filosofia Bellacosa Mainframe

Aprender JCL de verdade é aprender a pensar como o sistema.

Você deixa de perguntar:

“Como executo um programa?”

E passa a perguntar:

“Como esse processamento se comporta dentro do ecossistema operacional?”


⭐ Conclusão

JCL é simples na superfície e profundo na prática.

Dominar apenas a sintaxe é fácil.
Dominar o impacto operacional é o que diferencia profissionais.

“No Mainframe, quem controla o batch controla o negócio.”



segunda-feira, 4 de fevereiro de 2013

COBOL no Mainframe Programa → O Esqueleto: Divisões → Seções → Parágrafos → Frases → Declarações

 


🟦 COBOL no Mainframe e seu esqueleto

Programa → Divisões → Seções → Parágrafos → Frases → Declarações

(ou: como o código mais longevo do planeta ainda governa o mundo)

“COBOL não é velho. Velho é o problema que ele resolve.”
— Bellacosa, olhando um extrato bancário



🧬 Origem: antes do Java, antes do C, antes do hype

COBOL nasceu em 1959, patrocinado pelo Departamento de Defesa dos EUA, com uma ideia revolucionária para a época:

👉 programas legíveis por humanos de negócios, não apenas por matemáticos.

Enquanto outras linguagens focavam em ciência e engenharia, o COBOL foi criado para:

  • Folha de pagamento

  • Contabilidade

  • Bancos

  • Seguros

  • Governo

  • Tudo que não pode parar

E aqui vai o primeiro easter-egg:

🥚 Mais de 70% das transações financeiras globais ainda passam por COBOL.
Se ele cair, o mundo sente.


🧱 O mantra sagrado do COBOL

Todo programa COBOL clássico segue esta hierarquia:

Programa └── Divisões └── Seções └── Parágrafos └── Frases └── Declarações

Isso não é só estilo.
É contrato social, organização mental e engenharia de sobrevivência.

Vamos por partes, Padawan.


🧠 1️⃣ Programa: o universo

O programa COBOL é a unidade máxima:

  • Compilável

  • Executável

  • Chamável por outro programa

  • Controlado por JCL

  • Versionado (ou não… dependendo do museu 😅)

Exemplo:

IDENTIFICATION DIVISION. PROGRAM-ID. ELJEFE01.

Se não tem PROGRAM-ID, não é programa.
É só tristeza.


🧩 2️⃣ Divisões: os grandes blocos da mente COBOL

O COBOL clássico tem 4 divisões principais:

🔹 IDENTIFICATION DIVISION

Quem você é:

  • Nome do programa

  • Autor

  • Data

  • Comentários históricos (às vezes fósseis)

IDENTIFICATION DIVISION. PROGRAM-ID. ELJEFE01. AUTHOR. BELLACOSA.

🥚 Easter-egg: muitos programas em produção ainda têm DATE-WRITTEN. 1987.


🔹 ENVIRONMENT DIVISION

Onde você vive:

  • Arquivos

  • Dispositivos

  • Ambiente de execução

Hoje em dia:

  • Muitas vezes vazia

  • Mas ainda respeitada por tradição


🔹 DATA DIVISION

O coração do COBOL.

Aqui você define:

  • Arquivos

  • Registros

  • Variáveis

  • Estruturas

  • Formatos

  • Tamanhos

  • Regras de negócio implícitas

DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-SALDO PIC 9(9)V99.

👉 Se você erra aqui, o programa compila… e falha em produção.


🔹 PROCEDURE DIVISION

Onde a mágica acontece.

É o fluxo lógico, a história do programa, o passo a passo do negócio.

PROCEDURE DIVISION. PERFORM CALCULA-SALDO DISPLAY WS-SALDO STOP RUN.

🧩 3️⃣ Seções: organização lógica (nem sempre usada)

As seções são agrupadores de parágrafos.

Exemplo clássico:

PROCEDURE DIVISION. MAIN-SECTION.

Hoje:

  • Alguns usam

  • Outros ignoram

  • Todos respeitam quando encontram

🥚 Easter-egg: programas antigos têm seções enormes com 5 mil linhas.


🧩 4️⃣ Parágrafos: unidades de execução

O parágrafo é:

  • Um ponto de entrada

  • Um bloco executável

  • Algo que você pode PERFORM

CALCULA-SALDO. ADD WS-CREDITO TO WS-SALDO SUBTRACT WS-DEBITO FROM WS-SALDO.

👉 Parágrafo bom:

  • Nome claro

  • Uma responsabilidade

  • Fácil de testar (na teoria 😄)


🧩 5️⃣ Frases: uma ou mais declarações terminadas por ponto

No COBOL clássico:

  • O ponto (.) encerra uma frase

  • E também pode quebrar fluxo

Exemplo:

ADD A TO B SUBTRACT C FROM B.

⚠️ Dica Bellacosa:

Ponto em excesso mata legibilidade e cria bugs invisíveis.


🧩 6️⃣ Declarações: as instruções de verdade

Aqui estão os verbos COBOL:

  • MOVE

  • ADD

  • SUBTRACT

  • MULTIPLY

  • DIVIDE

  • IF

  • EVALUATE

  • PERFORM

  • READ

  • WRITE

Exemplo:

IF WS-SALDO < 0 MOVE 'NEGATIVO' TO WS-STATUS END-IF

👉 Leia em voz alta.
Se fizer sentido, é COBOL bem escrito.


🛠️ Boas práticas Bellacosa Approved™

✔ Um parágrafo = uma responsabilidade
✔ Nomeie tudo como se fosse explicar para auditor
✔ Evite GO TO (sim, ele existe…)
✔ Centralize regras no DATA DIVISION
✔ Comente o porquê, não o como
✔ Código COBOL é lido mais do que escrito


🧠 Curiosidades que ninguém te conta

🥚 COBOL foi feito para ser lento para mudar, rápido para confiar
🥚 Programas com 40 anos rodam sem recompilar
🥚 O maior risco não é o COBOL — é ninguém entender o que ele faz
🥚 Modernizar não é reescrever, é encapsular e expor


🧘 Visão final para o Padawan

COBOL não é uma linguagem.
É uma forma de pensar sistemas críticos.

A hierarquia:

Programa → Divisões → Seções → Parágrafos → Frases → Declarações

existe para:

  • Clareza

  • Controle

  • Manutenção

  • Sobrevivência a décadas

Se você entende isso, você:

  • Lê qualquer programa

  • Não tem medo de legado

  • Está pronto para integrar com cloud, APIs, microsserviços

E lembre-se:

“Todo hype passa.
O extrato bancário continua.”