Translate

Mostrar mensagens com a etiqueta programação. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta programação. Mostrar todas as mensagens

quinta-feira, 26 de março de 2026

🧪 LABORATÓRIO — DO JCL AO JSON

 

Bellacosa Mainframe do jcl ao json laboratorio pratico

🧪 LABORATÓRIO — DO JCL AO JSON

🐍 Missão: Dominar dados reais com Python

👉 Formato: desafios práticos
👉 Nível: iniciante → intermediário
👉 Ideal para 1–2 dias de hands-on
👉 Pode virar curso ou workshop


🔹 BLOCO 1 — Arquivos (I/O)

🧩 Desafio 1 — Leitor de arquivo sequencial

Crie um programa que:

  • Leia clientes.txt
  • Mostre número total de linhas
  • Mostre a primeira e última linha

💡 Analog: processamento sequencial COBOL


🧩 Desafio 2 — Contador de registros válidos

Arquivo contém linhas vazias e comentários iniciados por #.

Conte apenas registros válidos.


🧩 Desafio 3 — Gerador de arquivo batch

Crie um arquivo relatorio.txt contendo:

  • Data/hora atual
  • Total de registros processados
  • Status “OK”

🧩 Desafio 4 — Conversor TXT → CSV

Entrada:

123;Ana;1200
456;João;950

Produza um CSV com cabeçalho.


🧩 Desafio 5 — Copiador com filtro

Copie transacoes.txt para aprovadas.txt
apenas registros com valor > 1000.


🔹 BLOCO 2 — Pandas (Dados tabulares)

🧩 Desafio 6 — Carregar dataset

Use Pandas para:

  • Ler um CSV
  • Mostrar as 5 primeiras linhas
  • Mostrar número de registros

🧩 Desafio 7 — Filtro de negócios

Mostre apenas clientes com saldo > 1000.

Ordene por saldo decrescente.


🧩 Desafio 8 — Estatísticas rápidas

Calcule:

  • Média do saldo
  • Máximo
  • Mínimo
  • Total

🧩 Desafio 9 — Agrupamento

Agrupe clientes por cidade e conte quantos há em cada uma.

💡 Similar a GROUP BY


🧩 Desafio 10 — Pipeline batch moderno

Leia um CSV → filtre → salve novo CSV com resultados.


🔹 BLOCO 3 — NumPy (Processamento numérico)

🧩 Desafio 11 — Operações vetoriais

Crie dois arrays e calcule:

  • Soma elemento a elemento
  • Produto elemento a elemento
  • Produto escalar

🧩 Desafio 12 — Matriz de desempenho

Simule vendas por região:

  • Matriz 3×4
  • Calcule totais por linha e coluna

🔹 BLOCO 4 — APIs (Integração moderna)

🧩 Desafio 13 — Consumidor de API

Use uma API pública (ex.: cotação de moedas).

Exiba:

  • Valor atual
  • Data/hora
  • Fonte

💡 Biblioteca: requests


🧩 Desafio 14 — API → DataFrame

Obtenha dados JSON de uma API e:

  • Converta para Pandas
  • Mostre estatísticas
  • Salve em CSV

🔹 BLOCO 5 — Web Scraping

🧩 Desafio 15 — Minerador de dados web

Extraia dados de uma página pública:

  • Títulos de notícias OU
  • Tabela da Wikipedia

Salve em arquivo estruturado.

💡 Bibliotecas:

requests
BeautifulSoup
pandas.read_html()

🏆 DESAFIO EXTRA (Modo Arquitetura)

🔥 Mega-missão — Pipeline completo

Construa um fluxo:

👉 Coletar dados de API
👉 Complementar com dados de arquivo local
👉 Processar com Pandas
👉 Salvar resultado final

💥 Isso simula um ETL moderno.


🎯 O que você dominará ao concluir

✔ Manipulação de arquivos
✔ Processamento tabular
✔ Computação numérica
✔ Integração com sistemas externos
✔ Coleta de dados da web
✔ Data pipelines
✔ Base para Data Science


🚀 Tradução para linguagem mainframe

Arquivos → Dataset sequencial

Pandas → DB2 em memória

NumPy → cálculo científico

APIs → integração online

Scraping → coleta automática


quinta-feira, 19 de março de 2026

🚀 Seu cérebro COBOL está pronto para Python? O guia que acelera a migração em horas, não anos

 

Bellacosa Mainframe apresenta Python para Engenheiros e Analistas de Mainframe

🚀 Seu cérebro COBOL está pronto para Python? O guia que acelera a migração em horas, não anos

Python tornou-se uma linguagem estratégica para engenheiros de mainframe que desejam expandir suas habilidades para automação, integração moderna, Data Engineering e Inteligência Artificial. 

Para profissionais acostumados com COBOL, JCL e DB2, Python oferece um modelo mental mais simples e produtivo, substituindo estruturas como WORKING-STORAGE por variáveis dinâmicas, PERFORM por loops e FILE SECTION por manipulação direta de arquivos. 

Com bibliotecas poderosas e sintaxe clara, é possível automatizar rotinas operacionais, processar logs, integrar sistemas legados a APIs REST, consumir serviços web e construir pipelines de dados com muito menos código. 

Python também facilita DevOps, testes de batch, RPA corporativo e modernização de aplicações críticas. Seu uso crescente em nuvem, analytics e machine learning torna essa linguagem uma ponte natural entre o ambiente z/OS e o ecossistema digital atual. 

Aprender Python é, portanto, um passo essencial para mainframe engineers que desejam permanecer relevantes na transformação tecnológica.

🐍🔥 Cheatsheet Python para Mainframe Engineers

🧠 Mental Model — COBOL → Python

Conceito MainframeEquivalente Python
ProgramScript / Module
WORKING-STORAGEVariáveis
PIC clausesTipagem dinâmica
PERFORM UNTILwhile
PERFORM VARYINGfor
COPYBOOKModule / Class
FILE SECTIONFile handling
DB2 cursorIteração
JCL orchestrationScripts + Scheduler

📦 Variáveis (sem DATA DIVISION 😎)

COBOL

01 WS-NUM PIC 9(4) VALUE 100.

Python

ws_num = 100

✔ Sem declaração
✔ Sem tamanho fixo
✔ Tipagem dinâmica


📚 Estruturas de Dados — “Working Storage Turbo”

🔹 List → Tabelas OCCURS

clientes = ["Ana", "João", "Maria"]
clientes.append("Carlos")

👉 Similar a:

OCCURS n TIMES

🔹 Dictionary → Registro com campos nomeados

cliente = {
"nome": "Ana",
"saldo": 1500
}

👉 Mistura de:

✔ Registro
✔ Índice por chave
✔ Estrutura dinâmica


🔹 Tuple → Registro imutável

coordenada = (10, 20)

👉 Ideal quando dados não devem mudar.


🔹 Set → Lista sem duplicatas

codigos = {101, 102, 102, 103}

Resultado:

{101, 102, 103}

👉 Excelente para deduplicação de dados.


🔎 Indexação

nome = "BELLACOSA"

nome[0] # B
nome[-1] # A

👉 Python começa em ZERO (como C, não como COBOL).


⚖️ Condições (IF sem THEN/END-IF)

saldo = 100

if saldo > 0:
print("Positivo")
else:
print("Negativo")

🔁 Loops

🔹 For (PERFORM VARYING)

for i in range(5):
print(i)

🔹 For em coleção

for cliente in clientes:
print(cliente)

👉 Cursor implícito.


🔹 Enumerate (índice + valor)

for i, nome in enumerate(clientes):
print(i, nome)

🔹 While (PERFORM UNTIL)

x = 0

while x < 5:
print(x)
x += 1

🧩 Funções (Subprogramas leves)

def calcular_taxa(valor):
return valor * 0.05

Chamada:

taxa = calcular_taxa(1000)

📏 Built-ins que substituem muito código COBOL

len(lista) # tamanho
sum(lista) # soma
max(lista)
min(lista)
sorted(lista)

⚠️ Tratamento de Erros (sem Abend 😎)

COBOL

ON EXCEPTION

Python

try:
x = int("abc")
except ValueError:
print("Erro de conversão")

📂 Arquivos (QSAM moderno)

Leitura

with open("dados.txt", "r") as f:
for linha in f:
print(linha)

Escrita

with open("saida.txt", "w") as f:
f.write("Hello Mainframe")

👉 with garante fechamento automático.


🧱 Classes (Estruturas + Comportamento)

class Conta:
def __init__(self, saldo):
self.saldo = saldo

def depositar(self, valor):
self.saldo += valor

Uso:

c = Conta(1000)
c.depositar(500)

🔍 Tipos e Debug

type(x)

🚀 Automação — O Superpoder

Executar comandos do sistema

import os

os.system("dir")

Processar arquivos em lote

import glob

for arquivo in glob.glob("*.txt"):
print(arquivo)

🌐 Integração moderna

Consumir API

import requests

r = requests.get("https://api.github.com")
print(r.status_code)

👉 Equivalente moderno de MQ + Web Services.


🧠 Padrões mentais úteis

Python é:

✔ Scriptável
✔ Interativo
✔ Orientado a objetos
✔ Ideal para automação
✔ Excelente para integração


💥 Onde Python brilha para Mainframe Engineers

🔥 Automação operacional
🔥 DevOps e pipelines
🔥 Testes de batch
🔥 Processamento de logs
🔥 APIs REST para legado
🔥 Data Engineering
🔥 Machine Learning
🔥 RPA e scripting corporativo


☕ Frase estilo War Room

👉 COBOL mantém o mundo funcionando.
Python automatiza o mundo que muda.

sábado, 14 de março de 2026

☕ “Você NÃO sabe COBOL (ainda)” — O Caminho Secreto que Separa um Programador de um Jedi do Mainframe

 

Bellacosa Mainframe mostra algo que você não sabe sobre Cobol

☕ “Você NÃO sabe COBOL (ainda)” — O Caminho Secreto que Separa um Programador de um Jedi do Mainframe

Se você acha que terminou COBOL porque passou nos módulos… sente-se. O treinamento agora começa de verdade.


🧙‍♂️ Padawan, parabéns… mas cuidado com a ilusão

Você completou a trilha de COBOL Programming Series.

Pontuações altas. Mastery Tests vencidos. Badges conquistados.

Isso é excelente.

Mas aqui vai a verdade que ninguém conta nos cursos:

🎯 Saber COBOL acadêmico não é o mesmo que sobreviver ao COBOL de produção.

No mundo real do z/OS, o código que move bancos, seguradoras e governos não é bonito, nem simples, nem didático.

Ele é:

  • Antigo e moderno ao mesmo tempo
  • Otimizado para hardware específico
  • Cheio de convenções invisíveis
  • Integrado a um ecossistema gigantesco

Bem-vindo ao verdadeiro treinamento.


🗺️ O mapa do território mainframe

Você dominou os fundamentos:

✔ Estrutura do programa
✔ Controle de fluxo
✔ Arquivos sequenciais, indexados e relativos
✔ Tabelas e indexação
✔ Sort
✔ Subprogramas
✔ OO COBOL

Isso equivale a aprender a pilotar… num simulador.

Agora entram os sistemas reais:

🧩 Enterprise COBOL

O compilador corporativo — onde performance e compatibilidade mandam.

🗄️ IMS + DL/I

Banco hierárquico que ainda roda sistemas críticos.

🧠 Language Environment (LE)

O “sistema nervoso” que gerencia runtime, memória e interoperabilidade.

💡 Easter egg mainframe: LE é o motivo pelo qual programas COBOL, PL/I e C podem coexistir no z/OS.


⚔️ O primeiro choque do mundo real

Padawan, em produção você encontrará coisas como:

  • Programas com 20.000 linhas
  • COPYBOOKs gigantes
  • Convenções locais obscuras
  • Dependências invisíveis
  • Arquivos com layouts herdados de décadas

E o mais importante:

🧨 Você não escreve do zero. Você mantém o que já existe.


🧪 Exemplo realista (bem diferente do livro)

Nos cursos, você viu algo assim:

READ CLIENT-FILE
AT END MOVE "Y" TO EOF
END-READ

No mundo real, pode virar algo como:

READ ARQCLI INTO WS-REG-CLI
INVALID KEY
MOVE 16 TO WS-ABEND-CODE
PERFORM 9000-TRATA-ERRO
NOT INVALID KEY
ADD 1 TO WS-QTD-LIDOS
END-READ

🧠 O que mudou?

  • Tratamento de erro corporativo
  • Contadores operacionais
  • Integração com rotinas padrão
  • Preparação para auditoria
  • Possível integração com CICS ou batch control

👉 O código não está só “lendo um arquivo”.
👉 Ele está participando de um ecossistema.


🪄 Passo a passo para evoluir de Padawan → Cavaleiro

🥇 Passo 1 — Domine o compilador Enterprise COBOL

Não basta saber a linguagem.

Você precisa entender:

  • Opções de compilação
  • Otimizações
  • Compatibilidade com versões antigas
  • Impacto no runtime

💡 Curiosidade: mudar uma flag de compilação pode alterar performance em ordens de magnitude.


🥈 Passo 2 — Entenda o Language Environment

LE controla:

  • Stack
  • Heap
  • Condições de erro
  • Interoperabilidade entre linguagens

Sem LE, você depura no escuro.


🥉 Passo 3 — Aprenda acesso a bancos reais

Principalmente:

  • DB2 (relacional)
  • IMS (hierárquico)

Exemplo DL/I (IMS)

CALL 'CBLTDLI' USING
GU
PCB-MASK
SEGMENT-AREA
SSA.

Sim, parece críptico.
Sim, move sistemas gigantes.

🗄️ Easter egg histórico: IMS nasceu para o programa Apollo da NASA.


🧩 Por que IMS ainda existe?

Porque ele é:

  • Extremamente rápido
  • Ultra estável
  • Determinístico
  • Ideal para workloads massivos

E substituir sistemas críticos custa bilhões.


🧠 O segredo que separa os mestres

Programadores iniciantes pensam:

“Como escrever código COBOL?”

Especialistas pensam:

“Como este programa se encaixa no sistema?”

Isso inclui:

  • JCL
  • Agendadores
  • Segurança (RACF)
  • Arquivos VSAM
  • Logs
  • Recovery
  • Performance batch

COBOL é apenas uma peça.


☕ Curiosidades que poucos contam

🔹 OO COBOL existe desde 2002 e quase ninguém usa
🔹 Muitas empresas ainda compilam código escrito nos anos 80
🔹 O z/OS consegue rodar programas de décadas atrás sem recompilar
🔹 Batch noturno ainda move trilhões de dólares por dia

💰 Se o mainframe parar, o mundo financeiro sente.


🧙‍♂️ Teste do Padawan

Se você consegue responder a estas perguntas, está evoluindo:

  • Como o programa será executado? (batch, online, IMS, CICS)
  • Onde estão os dados?
  • Qual o volume esperado?
  • O que acontece se falhar?
  • Como recuperar?

Se não sabe… ainda está no templo Jedi.


🏁 Conclusão — O verdadeiro início

Você não terminou COBOL.

Você desbloqueou o acesso ao mundo real.

🚀 O caminho agora é Enterprise COBOL → LE → DB2/IMS → CICS → Performance

Quando dominar isso, você não será apenas um programador.

Será um guardião de sistemas que sustentam economias inteiras.


☕ Mensagem final ao Padawan

Se você chegou até aqui:

👉 Continue.
👉 Aprofunde.
👉 Explore o stack completo.

Porque no universo mainframe:

💎 Experiência vale mais que hype.
💎 Estabilidade vale mais que novidade.
💎 Conhecimento profundo vale mais que moda.

E lembre-se…

O mainframe não é antigo. Ele é eterno.

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