☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

quinta-feira, 21 de novembro de 2019

🕯️ Formigão e Formiguinha: Memórias de Um Pai na São Paulo dos Anos 70



 ,🕯️ “Formigão e Formiguinha: Memórias de Um Pai na São Paulo dos Anos 70”

(Um post ao estilo Bellacosa Mainframe, com nostalgia, ternura, história paulistana e aquela poética do cotidiano que vive na memória.)




🌙 Prefácio: Quando o Coração Troca o Modo IPL para o Modo Memórias

Fim de ano tem essa magia silenciosa: o coração dá um warm start, o ar fica diferente, a nostalgia sobe como uma job class de alta prioridade e, de repente, tudo o que nos fez ser quem somos começa a desfilar no nosso spool interno.

E é nessa estação emocional que aparecem os rostos que moldaram nossa alma.
Hoje, entre tantas figuras importantes — sua mãe Mercedes, sua avó Anna — você escolhe acender o spotlight sobre ele:

Seu pai, o Formigão.
E você, o pequeno Formiguinha, correndo ao lado.

Um duo improvável e perfeito.
Um capítulo inteiro da história Bellacosa que mora na infância.




🐜 Formigão & Formiguinha: A Dupla Inesquecível

Ninguém sabe de onde vieram esses apelidos.
Talvez de uma brincadeira qualquer.
Talvez de um filme, de uma piada, de um gesto.
Ou talvez, simplesmente, porque pai e filho eram como duas formiguinhas trilhando o mundo:
— Ele carregando o peso do mundo nas costas.
— Você carregado nos ombros, vendo o mundo de cima, seguro, feliz.

Essa imagem…
Um pai grande, firme, forte como um mainframe IBM 3033.
Um filho pequeno, curioso, elétrico, sorridente.

É a espécie de memória que nunca morre —
apenas se fortalece a cada dezembro.




🐎 O Cavalinho nos Ombros: O Primeiro Passeio no Horizonte

Você lembra do cavalinho nos ombros?
Ah… aquele era o seu primeiro cockpit, a sua primeira visão aérea da Vila Rio Branco e do mundo. O vento batendo no rosto, as risadas, o equilíbrio perfeito entre aventura e proteção.

Era a maior tecnologia da época:
um sistema de transporte emocional movido a amor.




🍅 Os Tomatinhos: A Piada Infame, Gore e Eterna

Todo pai tem uma piadinha infame.
Mas a do tomatinho… essa entrou no folclore Bellacosa.

Você, pequeno, ouvia aquilo com a mesma mistura de horror e fascínio que sentiríamos vendo um JCL sendo apagado por engano em plena produção.

Era ruim, era bizarra, era gore…
Mas era de pai.
E pai pode.

Porque é assim que memórias de verdade nascem:
do imperfeito, do simples, do espontâneo.




🛠️ Ferro-Velhos: O Parque de Diversões do Formigão

Na década de 1970, ferro-velho era quase um planeta paralelo.
Seu pai te levava para esses lugares que cheiravam a ferrugem, graxa e histórias — e lá vocês caçavam peças para os automóveis dele, sempre meio tortos, meio remendados, meio “caindo de podre”.

Mas para o Formigão, eram máquinas com alma.
Para você, eram aventuras siderais.

E, de algum modo mágico, essas incursões moldaram o olhar técnico, investigativo e detalhista que você carrega até hoje — sim, o mesmo olhar que te levou aos mainframes, aos códigos COBOL, às lógicas profundas do mundo profissional.

Tudo começou ali, com carros velhos e parafusos perdidos.




🎖️ Histórias do Exército: O Mundo de Um Adulto Aos Olhos de Uma Criança

Quando o Formigão falava do tempo de Exército, era como se abrisse um dataset secreto.
Você ouvia com atenção, imaginando uniformes, marchas, aventuras, disciplina — tudo ampliado pela imaginação fervilhante de um menino de 5 anos.

Esses fragmentos eram portais para outra realidade.
Para um tempo que não era seu, mas que você adorava visitar.




📸 O Universo da Fotografia Profissional: A São Paulo Que Existia

Aqui está um dos capítulos mais cinematográficos da sua memória:

Vocês dois caminhando pela São Paulo setentista — uma metrópole viva, pulsante, industrial — atravessando:

  • Rua Antonio de Godoy

  • Rua São Bento

  • Rua Xavier de Toledo

E não era turismo.
Era imersão técnica.

Laboratórios fotográficos, casas de equipamentos, livrarias que eram templos. O cheiro de químicos fotográficos, os papéis especiais, os quadros, as lentes, os filtros, as Nikon, Yashica, Pentax… tudo aquilo entrava em você como um novo idioma.

Aquele mundo era fascinante.
E você fez parte dele.

Porque o Formigão te levava.
Porque você era o Formiguinha.




🌆 A São Paulo Que Crescia e Crescia... e Crescia

Nos anos 70, São Paulo era uma máquina descomunal, uma espécie de mainframe urbano que processava milhões de vidas simultaneamente.

E vocês dois caminhavam dentro dela como se estivessem dentro do coração da cidade.

Esse é um privilégio.
E uma memória rara.




☀️ Mas… Nem Todo Pai É Herói o Tempo Todo

Essa parte faz arder um pouco.
Porque você sabe — e diz, com honestidade e coragem — que o mesmo Formigão que foi seu herói na infância, mais tarde tornou-se seu vilão.

Coisas da vida.
Das feridas.
Das escolhas.
Da década de 1980, que estava longe no horizonte, mas um dia chegou.

Mas aqui, neste post…
O recorte é o do menino de 5 anos.
Do amor puro.
Da aventura.
Do brilho no olhar.
Do cavalinho nos ombros.

E isso ninguém tira.




🕯️ Epílogo: O Formiguinha Carrega o Formigão Dentro de Si

Hoje, quando você olha para trás com esse sorriso triste e bonito, sabe que tudo isso — o bom, o mágico, o confuso e o difícil — te moldou profundamente.

E que o Formigão, com seus defeitos e brilhos, vive no seu jeito de ver o mundo, de trabalhar, de contar histórias.

Vive em você, Bellacosa.
Vive em cada memória que você reativa como um dataset cheio de amor.

E quando dezembro chega,
e as luzes se acendem,
e o coração aquece…

O Formigão volta para os ombros do Formiguinha.
Sempre.,

quarta-feira, 13 de novembro de 2019

O Caso do Return Code que Decidiu Quem Viveria no Batch

 

Bellacosa Maifnrame e o caso do return code que decidiu quem viveria no batch

☕ Um Café no Bellacosa Mainframe

O Caso do Return Code que Decidiu Quem Viveria no Batch

JCL IF/THEN/ELSE: o detetive invisível que interroga programas, examina falhas e escolhe o próximo passo

A chuva caía sobre o data center como uma sequência interminável de registros gravados em fita.

Do lado de fora, a cidade dormia. Dentro da sala de operações, milhares de luzes piscavam em silêncio, enquanto o z/OS processava folhas de pagamento, transferências bancárias, seguros, cartões de crédito, estoques, relatórios fiscais e uma quantidade de dinheiro que faria qualquer contador perder o sono.

Eram duas horas e dezessete da madrugada quando o telefone tocou.

— Bellacosa, temos um problema.

Do outro lado da linha, um jovem programador COBOL parecia nervoso.

— O relatório não foi enviado. O programa de geração terminou, mas o passo seguinte não executou. No spool aparece uma coisa chamada IF/THEN/ELSE. Acho que o JCL decidiu ignorar meu programa.

Acendi o abajur, empurrei para o lado uma velha revista de mistério dos anos 1950 e observei o copo de café frio sobre a mesa.

O rapaz ainda não sabia, mas havia acabado de encontrar uma das figuras mais discretas e poderosas do mundo batch.

O JCL não era apenas uma lista de programas.

Ele também podia tomar decisões.

E, em algum lugar daquele JOB, uma condição havia interrogado um Return Code, analisado as evidências e decidido que determinado passo não merecia executar.

O nome do suspeito?

IF / THEN / ELSE

Esta é a história de como o JCL aprendeu a escolher caminhos.


1. O JCL não é apenas um carregador de programas

Para um programador COBOL iniciante, o JCL costuma parecer uma espécie de porteiro do mainframe.

Ele informa:

  • qual programa será executado;

  • quais arquivos serão utilizados;

  • onde os relatórios serão gravados;

  • quais parâmetros serão enviados;

  • quais recursos o JOB precisará.

Um exemplo simples poderia ser:

//RELATOR  JOB (1234),'BELLACOSA',CLASS=A,MSGCLASS=X
//STEP01   EXEC PGM=GERAREL
//ENTRADA  DD DSN=EMPRESA.VENDAS.DIARIO,DISP=SHR
//SAIDA    DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*

Nesse caso, o JCL solicita ao sistema que execute o programa GERAREL.

Durante algum tempo, o iniciante imagina que o JCL faz apenas isso: chama programas e associa arquivos.

Mas existe um nível mais profundo.

Um JOB pode conter vários passos:

//STEP01 EXEC PGM=VALIDA
//STEP02 EXEC PGM=ATUALIZA
//STEP03 EXEC PGM=RELATOR
//STEP04 EXEC PGM=ENVIA

Agora surge uma pergunta crítica:

todos os passos devem executar mesmo quando um dos anteriores falhar?

Naturalmente, não.

Se o programa de validação descobrir que o arquivo de entrada está inválido, não faz sentido atualizar o banco de dados.

Se a atualização não for concluída, não é seguro gerar um relatório afirmando que tudo terminou corretamente.

Se o relatório não existir, não há motivo para tentar enviá-lo.

Foi para controlar decisões como essas que o JCL recebeu estruturas condicionais.


2. O que é IF/THEN/ELSE no JCL?

O IF/THEN/ELSE permite que o JOB escolha quais passos deverão executar com base no resultado de passos anteriores.

A ideia fundamental é a mesma encontrada no COBOL.

Em COBOL, podemos escrever:

IF WS-SALDO > 0
    DISPLAY 'CONTA POSITIVA'
ELSE
    DISPLAY 'CONTA SEM SALDO'
END-IF

O programa examina uma condição e escolhe uma ação.

No JCL, entretanto, a decisão é maior.

O JCL não escolhe apenas uma instrução.

Ele pode decidir se um programa inteiro será ou não executado.

Veja o exemplo básico:

//STEP01   EXEC PGM=PROGA
//TESTE01  IF (STEP01.RC = 0) THEN
//STEP02   EXEC PGM=PROGB
//         ELSE
//STEP03   EXEC PGM=PROGC
//         ENDIF

O fluxo é o seguinte:

  1. STEP01 executa o programa PROGA.

  2. O sistema registra o Return Code produzido por esse passo.

  3. O JCL avalia a condição STEP01.RC = 0.

  4. Se a condição for verdadeira, executa STEP02.

  5. Caso contrário, executa STEP03.

  6. Ao encontrar ENDIF, o fluxo condicional termina.

Visualmente:

                 STEP01
                   |
          STEP01.RC é igual a 0?
              /             \
           SIM               NÃO
            |                  |
         STEP02             STEP03
            \                  /
                 CONTINUA

É uma bifurcação na estrada do batch.

Um caminho será percorrido.

O outro ficará registrado no spool como um passo não executado por causa da lógica condicional.


3. O Return Code: a testemunha principal

O coração dessa história não é o IF.

É o Return Code.

O Return Code, geralmente abreviado como RC, é um valor devolvido por um programa ao terminar.

Ele comunica ao sistema o resultado da execução.

Uma convenção comum é:

Return CodeSignificado habitual
0Processamento concluído com sucesso
4Sucesso com advertência
8Erro de processamento
12Erro grave
16Falha severa

Mas existe uma regra fundamental:

O significado do Return Code pertence ao programa ou ao utilitário que o produziu.

Não existe uma lei universal determinando que RC=4 seja sempre aceitável ou que RC=8 represente exatamente o mesmo erro em todos os programas.

No IDCAMS, no DFSORT, em programas COBOL internos ou em produtos de terceiros, os significados podem variar.

Por isso, o programador deve conhecer o contrato de retorno do programa executado.

Imagine um programa de validação de clientes:

RC=0   Todos os registros são válidos
RC=4   Existem registros com advertências
RC=8   Existem registros rejeitados
RC=12  O arquivo não pôde ser processado

Nesse caso, talvez seja permitido continuar com RC=4.

A condição poderia ser:

//CHKVALID IF (STEP01.RC <= 4) THEN
//STEP02   EXEC PGM=ATUALIZA
//         ELSE
//STEPERRO EXEC PGM=TRATAERR
//         ENDIF

Agora o JOB aceita retorno zero ou quatro.

Isso demonstra por que o teste simplista RC = 0 nem sempre é suficiente.


4. Como um programa COBOL define o Return Code?

Em COBOL, o programa pode atribuir um valor ao registrador especial RETURN-CODE.

Exemplo:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. VALIDA01.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01  WS-QTD-ERROS       PIC 9(05) VALUE ZERO.

       PROCEDURE DIVISION.

           PERFORM PROCESSAR-ARQUIVO

           IF WS-QTD-ERROS = ZERO
               MOVE 0 TO RETURN-CODE
           ELSE
               MOVE 8 TO RETURN-CODE
           END-IF

           GOBACK.

Quando o programa termina com:

MOVE 0 TO RETURN-CODE

o passo pode aparecer no spool com retorno zero.

Quando termina com:

MOVE 8 TO RETURN-CODE

o JCL poderá testar esse valor em um passo posterior.

Essa comunicação é extremamente importante.

O programa COBOL conhece o resultado funcional do processamento.

O JCL conhece o fluxo completo do JOB.

O Return Code é a ponte entre os dois.

É como se o programa deixasse um bilhete sobre a mesa:

“Terminei. Este é o estado do caso.”

O JCL lê o bilhete e decide o que fazer.


5. A anatomia correta de uma estrutura condicional

Observe este exemplo mais completo:

//FECHAMEN JOB (ACCT),'FECHAMENTO',CLASS=A,MSGCLASS=X
//*
//VALIDA   EXEC PGM=PGMVALID
//ARQENT   DD DSN=EMPRESA.MOVIMENTO.DIA,DISP=SHR
//RELERR   DD SYSOUT=*
//*
//IFVALID  IF (VALIDA.RC <= 4) THEN
//*
//ATUALIZA EXEC PGM=PGMATU
//ARQENT   DD DSN=EMPRESA.MOVIMENTO.DIA,DISP=SHR
//CADASTRO DD DSN=EMPRESA.CLIENTES.MASTER,DISP=OLD
//*
//IFATU    IF (ATUALIZA.RC = 0) THEN
//RELATOR  EXEC PGM=PGMREL
//SAIDA    DD SYSOUT=*
//         ELSE
//ERROATU  EXEC PGM=PGMERRO
//         ENDIF
//*
//         ELSE
//ERROVAL  EXEC PGM=PGMERRO
//         ENDIF

Temos dois níveis de decisão.

Primeiro:

IF (VALIDA.RC <= 4) THEN

Se a validação for aceitável, o JOB executa ATUALIZA.

Depois:

IF (ATUALIZA.RC = 0) THEN

Se a atualização terminar com sucesso, o relatório será gerado.

Caso contrário, ERROATU será executado.

Se a validação inicial falhar, o JOB nem chega à atualização. Ele segue diretamente para ERROVAL.

Esse é um exemplo de IF aninhado.

Funciona bem, mas exige disciplina.

Quanto mais níveis de aninhamento existirem, mais difícil será compreender o JOB.

Um JCL com sete ou oito IFs dentro de outros IFs pode se transformar em uma mansão noir cheia de corredores, portas falsas e quartos onde ninguém se lembra de ter entrado.


6. Operadores de comparação

O JCL permite comparar Return Codes de diferentes maneiras.

Igualdade

//TESTE IF (STEP01.RC = 0) THEN

Também pode ser encontrada a forma mnemônica:

//TESTE IF (STEP01.RC EQ 0) THEN

Diferente

//TESTE IF (STEP01.RC NE 0) THEN

Dependendo do ambiente e da codificação disponível, símbolos como ¬= podem aparecer, mas as formas mnemônicas são frequentemente mais claras e evitam problemas de caracteres.

Maior que

//TESTE IF (STEP01.RC GT 4) THEN

Menor que

//TESTE IF (STEP01.RC LT 8) THEN

Maior ou igual

//TESTE IF (STEP01.RC GE 8) THEN

Menor ou igual

//TESTE IF (STEP01.RC LE 4) THEN

As formas mnemônicas são:

OperadorSignificado
EQIgual
NEDiferente
GTMaior que
LTMenor que
GEMaior ou igual
LEMenor ou igual

7. Condições compostas com AND e OR

O JCL pode analisar mais de uma evidência.

Utilizando AND

//TESTE IF (STEP01.RC = 0 & STEP02.RC = 0) THEN

Ou, conforme a forma adotada:

//TESTE IF (STEP01.RC EQ 0 AND STEP02.RC EQ 0) THEN

A condição será verdadeira somente se os dois passos terminarem com retorno zero.

Exemplo prático:

  • STEP01 valida o arquivo de clientes;

  • STEP02 valida o arquivo de contratos;

  • STEP03 executa apenas quando os dois arquivos são válidos.

//IFOK     IF (STEP01.RC EQ 0 AND STEP02.RC EQ 0) THEN
//STEP03   EXEC PGM=ATUALIZA
//         ENDIF

Utilizando OR

//IFERRO   IF (STEP01.RC GE 8 OR STEP02.RC GE 8) THEN
//TRATAERR EXEC PGM=ERROGER
//         ENDIF

Aqui, o tratamento será executado se qualquer um dos passos retornar oito ou mais.

A importância dos parênteses

Em condições complexas, use parênteses para deixar a intenção visível:

//TESTE IF ((STEP01.RC LE 4) AND
//          (STEP02.RC EQ 0)) THEN

O JOB não é lugar para jogos de adivinhação.

Um programador pode compreender uma expressão hoje e esquecê-la seis meses depois. Um colega chamado às três da madrugada terá ainda menos paciência.

Escreva para a manutenção, não apenas para o interpretador.


8. RC não é a mesma coisa que ABEND

Essa é uma das distinções mais importantes para um iniciante.

Um Return Code significa que o programa chegou a uma conclusão normal e devolveu um resultado.

Um ABEND significa que ocorreu uma terminação anormal.

Exemplos de ABEND:

S0C7
S0C4
S806
U4038

Um S0C7, por exemplo, frequentemente está relacionado a uma operação numérica inválida, como tentar tratar conteúdo não numérico como número.

Um S806 pode indicar que o programa não foi encontrado em uma biblioteca de carga acessível.

Nesses casos, não estamos simplesmente diante de um RC=8.

O programa sofreu uma interrupção anormal.

O JCL permite testar situações de ABEND.

Exemplo:

//STEP01   EXEC PGM=PROGA
//IFABEND  IF (STEP01.ABEND) THEN
//DUMP     EXEC PGM=GERADUMP
//         ENDIF

Também é possível testar se um passo executou normalmente:

//IFNORMAL IF (STEP01.RUN AND NOT STEP01.ABEND) THEN
//STEP02   EXEC PGM=PROGB
//         ENDIF

A disponibilidade e a forma exata dos testes devem ser verificadas de acordo com os padrões do ambiente e a documentação utilizada pela instalação, mas o conceito central permanece:

  • RC trata o resultado de uma conclusão normal;

  • ABEND trata uma terminação anormal;

  • um passo pode não executar por causa de uma condição anterior;

  • um passo não executado não deve ser confundido com um programa que executou e retornou erro.

No spool, essas diferenças contam a história real do JOB.


9. O que acontece quando não existe ELSE?

O ELSE é opcional.

Podemos escrever:

//STEP01   EXEC PGM=PROGA
//SEOK     IF (STEP01.RC EQ 0) THEN
//STEP02   EXEC PGM=PROGB
//         ENDIF

Se STEP01.RC for zero, STEP02 executará.

Caso contrário, o bloco será ignorado e o JOB continuará depois do ENDIF.

Isso é útil quando existe uma ação necessária apenas em uma situação específica.

Exemplo:

//AVISO IF (VALIDA.RC EQ 4) THEN
//EMAIL EXEC PGM=ENVIAAV
//      ENDIF

O e-mail será enviado somente quando houver advertências.


10. Vários passos dentro do THEN e do ELSE

Um erro comum é imaginar que cada bloco pode conter apenas um EXEC.

Na verdade, vários passos podem ser agrupados.

//STEP01   EXEC PGM=VALIDA
//FLUXOOK  IF (STEP01.RC LE 4) THEN
//STEP02   EXEC PGM=ATUALIZA
//STEP03   EXEC PGM=RELATOR
//STEP04   EXEC PGM=ENVIA
//         ELSE
//STEP90   EXEC PGM=LOGERRO
//STEP91   EXEC PGM=NOTIFICA
//         ENDIF

Se a validação for aceitável, três programas serão executados.

Se não for, dois programas de tratamento serão acionados.

Esse tipo de construção aparece com frequência em ambientes de produção.


11. Exemplo realista: fechamento de vendas

Considere o seguinte processo noturno:

  1. Receber arquivo de vendas.

  2. Validar estrutura.

  3. Atualizar banco de dados.

  4. Gerar relatório.

  5. Enviar relatório.

  6. Em caso de erro, registrar ocorrência e notificar o suporte.

O JCL poderia ser:

//VENDAS   JOB (FIN),'FECHAMENTO',CLASS=A,MSGCLASS=X
//*
//VALIDA   EXEC PGM=VALVEND
//ARQVEN   DD DSN=LOJA.VENDAS.DIARIA,DISP=SHR
//RELERR   DD SYSOUT=*
//*
//IFVAL    IF (VALIDA.RC LE 4) THEN
//*
//ATUALIZA EXEC PGM=ATUVEND
//ARQVEN   DD DSN=LOJA.VENDAS.DIARIA,DISP=SHR
//BASEVEN  DD DSN=LOJA.VENDAS.MASTER,DISP=OLD
//*
//IFATU    IF (ATUALIZA.RC EQ 0) THEN
//RELATOR  EXEC PGM=RELVEND
//RELATORI DD DSN=LOJA.RELATORIO.DIARIO,
//            DISP=(NEW,CATLG,DELETE),
//            SPACE=(CYL,(5,2)),
//            DCB=(RECFM=FB,LRECL=133,BLKSIZE=0)
//*
//ENVIA    EXEC PGM=MAILBAT
//ARQMAIL  DD DSN=LOJA.RELATORIO.DIARIO,DISP=SHR
//         ELSE
//LOGATU   EXEC PGM=LOGERRO
//AVISAATU EXEC PGM=AVISOPS
//         ENDIF
//*
//         ELSE
//LOGVAL   EXEC PGM=LOGERRO
//AVISAVAL EXEC PGM=AVISOPS
//         ENDIF

Agora examine a lógica.

Cenário 1: validação retorna zero

O arquivo está correto.

O JOB entra no primeiro THEN.

Cenário 2: validação retorna quatro

O arquivo contém advertências permitidas.

Como a condição é LE 4, o processamento continua.

Cenário 3: validação retorna oito

O JOB ignora atualização, relatório e envio.

Executa LOGVAL e AVISAVAL.

Cenário 4: atualização retorna oito

A validação foi aceita, mas a atualização falhou.

O relatório e o envio não executam.

O JOB chama LOGATU e AVISAATU.

Esse desenho impede que um relatório aparentemente correto seja enviado após uma atualização malsucedida.

É assim que uma estrutura condicional protege a integridade operacional.


12. IF/THEN/ELSE versus COND

Antes da popularização das estruturas condicionais explícitas, muitos JOBs utilizavam intensamente o parâmetro COND.

Exemplo:

//STEP02 EXEC PGM=PROGB,COND=(0,NE,STEP01)

O problema é que COND trabalha com uma lógica que muitos iniciantes consideram invertida.

O parâmetro indica uma condição para ignorar o passo.

Em outras palavras, quando a condição do COND é verdadeira, o passo não executa.

Isso exige atenção.

No exemplo:

COND=(0,NE,STEP01)

a interpretação é aproximadamente:

Ignore STEP02 se o Return Code de STEP01 for diferente de zero.

Portanto, STEP02 executa apenas quando STEP01.RC é zero.

O equivalente com IF é mais legível:

//TESTE IF (STEP01.RC EQ 0) THEN
//STEP02 EXEC PGM=PROGB
//      ENDIF

Compare:

COND=(0,NE,STEP01)

com:

IF (STEP01.RC EQ 0) THEN

A segunda forma parece uma frase.

Por isso, em fluxos complexos, o IF/THEN/ELSE geralmente facilita a leitura e a manutenção.

Isso não significa que COND esteja morto.

Muitos JOBs antigos e novos ainda o utilizam.

Um profissional de mainframe precisa compreender os dois.

Mas deve evitar misturar COND e estruturas IF sem necessidade, pois a combinação pode criar comportamentos difíceis de analisar.


13. Passo a passo para investigar um JOB condicional

Quando você encontrar um JCL grande, não tente compreender tudo ao mesmo tempo.

Use o método Bellacosa de investigação batch.

Passo 1 — Localize todos os EXEC

Anote cada step:

VALIDA
ATUALIZA
RELATOR
ENVIA
LOGERRO
AVISOPS

Isso revela os atores da história.

Passo 2 — Localize todos os IF

Procure:

IF
ELSE
ENDIF

Marque o início e o fim de cada bloco.

Passo 3 — Descubra qual step está sendo testado

Exemplo:

IF (VALIDA.RC LE 4) THEN

O suspeito interrogado é VALIDA.

Passo 4 — Consulte o significado dos Return Codes

Descubra o contrato do programa.

Talvez:

0 = sucesso
4 = aviso
8 = arquivo inválido
12 = falha de abertura

Sem essa informação, a condição é apenas um número sem contexto.

Passo 5 — Desenhe o fluxo

Use papel, quadro ou editor de texto:

VALIDA
  |
RC <= 4?
 /      \
SIM      NÃO
 |        |
ATUALIZA  LOGERRO
 |
RC = 0?
 /      \
SIM      NÃO
 |        |
RELATOR  AVISOPS
ENVIA

Passo 6 — Compare com o spool

Verifique:

  • quais passos realmente executaram;

  • quais foram ignorados;

  • quais retornaram código;

  • se houve ABEND;

  • qual foi o maior Return Code do JOB;

  • se alguma condição alterou o fluxo.

O spool é a cena do crime.

Não confie apenas no que o desenvolvedor acredita que aconteceu.

Leia as evidências.


14. Erros comuns de iniciantes

Considerar qualquer valor diferente de zero como desastre

Nem sempre RC=4 representa falha.

Pode ser apenas uma advertência.

O contrato do programa deve definir isso.

Testar o step errado

IF (STEP02.RC EQ 0) THEN

não funciona como esperado se STEP02 não executou ou se a intenção era testar STEP01.

Nomes claros reduzem esse risco.

Esquecer o ENDIF

Cada estrutura precisa ser encerrada corretamente.

Em fluxos aninhados, identação e comentários ajudam muito.

Criar condições excessivamente complexas

Uma expressão com muitos AND, OR, NOT e parênteses pode funcionar, mas se tornar impossível de manter.

Às vezes, dividir o processamento em mais de um bloco é melhor.

Confundir step ignorado com erro

Um passo dentro de um ramo não escolhido pode aparecer como não executado.

Isso não significa que seu programa falhou.

Significa que o JCL decidiu não chamá-lo.

Tratar ABEND como Return Code comum

Um S0C7 não é simplesmente RC=7.

ABENDs possuem outra natureza e exigem tratamento apropriado.

Não documentar Return Codes funcionais

Um programa COBOL que retorna RC=6, RC=20 ou RC=32 sem documentação está deixando uma bomba-relógio para a equipe de produção.


15. Boas práticas para JCL de produção

Use nomes significativos

Evite:

//STEP1
//STEP2
//STEP3

Prefira:

//VALIDA
//ATUALIZA
//GERAREL
//ENVIA

O nome do step deve ajudar a contar a história do JOB.

Nomeie os blocos condicionais

//IFVALID IF (VALIDA.RC LE 4) THEN

Isso facilita localizar mensagens e interpretar o fluxo.

Comente decisões incomuns

//* RC=4 INDICA REGISTROS REJEITADOS, MAS PROCESSAMENTO PODE CONTINUAR

Um bom comentário economiza horas de investigação.

Padronize Return Codes

A equipe deve saber o que cada faixa representa.

Por exemplo:

0      Sucesso
4      Advertência
8      Erro funcional
12     Erro técnico
16+    Falha severa

Evite aninhamento profundo

Se o JOB parecer uma boneca russa de IFs, talvez seja hora de redesenhar o fluxo.

Sempre pense no tratamento de erro

Não basta impedir a execução de passos posteriores.

Pergunte:

  • quem será notificado?

  • onde o erro será registrado?

  • o arquivo será preservado?

  • será necessário restart?

  • o operador saberá qual ação tomar?

  • o scheduler interpretará o resultado corretamente?

Um bom IF não apenas impede problemas.

Ele orienta a recuperação.


16. Curiosidades do mundo batch

O JOB pode terminar “bem”, mas o negócio ter falhado

Tecnicamente, um programa pode terminar com RC=0 mesmo quando não processou nada útil.

Por exemplo, o arquivo estava vazio, mas o programa considerou isso normal.

O sistema operacional vê sucesso.

O negócio talvez veja um desastre.

Por isso, Return Codes devem representar estados relevantes para a operação.

O maior RC costuma chamar atenção

Ferramentas de operação e schedulers frequentemente analisam o maior Return Code encontrado no JOB.

Mas o comportamento exato depende das regras da instalação e da automação utilizada.

Schedulers também tomam decisões

Produtos como IBM Workload Scheduler, Control-M e outras soluções podem avaliar status de JOBs, Return Codes, dependências, horários e recursos.

Nesse cenário, existe uma cadeia de inteligência:

Programa COBOL
      ↓
Return Code
      ↓
JCL IF/THEN/ELSE
      ↓
Resultado do JOB
      ↓
Scheduler
      ↓
Próximo processamento

Um pequeno número devolvido por um programa pode impedir a execução de uma cadeia inteira de processamento corporativo.

Um RC mal definido pode custar caro

Imagine um programa que detecta inconsistência financeira, grava uma mensagem no relatório, mas termina com RC=0.

O JCL entende que tudo ocorreu corretamente.

O relatório é enviado.

O scheduler libera os próximos JOBs.

Horas depois, alguém descobre que os dados estavam errados.

O problema não foi apenas técnico.

Foi uma falha de comunicação entre programa e operação.


17. O exemplo definitivo para um Padawan COBOL

Vamos construir um fluxo simples e completo.

O objetivo é:

  1. validar um arquivo;

  2. processá-lo se estiver correto;

  3. gerar relatório se o processamento terminar bem;

  4. executar tratamento se algo falhar.

//PEDIDOS  JOB (1234),'PEDIDOS',CLASS=A,MSGCLASS=X
//*
//VALIDA   EXEC PGM=VALPED
//ARQPED   DD DSN=EMPRESA.PEDIDOS.ENTRADA,DISP=SHR
//SYSOUT   DD SYSOUT=*
//*
//IFVAL    IF (VALIDA.RC LE 4) THEN
//*
//PROCESSA EXEC PGM=PROCPED
//ARQPED   DD DSN=EMPRESA.PEDIDOS.ENTRADA,DISP=SHR
//CADPED   DD DSN=EMPRESA.PEDIDOS.MASTER,DISP=OLD
//SYSOUT   DD SYSOUT=*
//*
//IFPROC   IF (PROCESSA.RC EQ 0) THEN
//RELATOR  EXEC PGM=RELPED
//RELATORI DD SYSOUT=*
//         ELSE
//ERROPROC EXEC PGM=TRATPED
//MOTIVO   DD *
FALHA NO PROCESSAMENTO DE PEDIDOS
/*
//         ENDIF
//*
//         ELSE
//ERROVAL  EXEC PGM=TRATPED
//MOTIVO   DD *
ARQUIVO DE PEDIDOS REPROVADO NA VALIDACAO
/*
//         ENDIF

O raciocínio é:

VALIDA
  |
  +-- RC 0 ou 4?
        |
        +-- SIM → PROCESSA
        |            |
        |            +-- RC 0?
        |                  |
        |                  +-- SIM → RELATOR
        |                  |
        |                  +-- NÃO → ERROPROC
        |
        +-- NÃO → ERROVAL

O iniciante que aprende a desenhar esse fluxo já está deixando de apenas “ler JCL”.

Ele começa a pensar como alguém de produção.


18. O easter egg do velho operador

Dizem que, em um data center antigo, havia um operador chamado Moretti.

Ninguém sabia sua idade. Alguns juravam que ele já trabalhava ali quando os discos ainda pareciam máquinas de lavar.

Moretti tinha um ritual.

Sempre que um JOB terminava, ele não olhava primeiro para o programa, para o consumo de CPU ou para o horário.

Ele procurava o Return Code.

Certa madrugada, um novato perguntou:

— Por que o senhor olha primeiro para um número tão pequeno?

Moretti respondeu:

— Porque os programas falam muito nos relatórios, mas dizem a verdade no retorno.

Anos depois, quando Moretti se aposentou, encontraram um cartão perfurado em sua gaveta.

Nele havia apenas uma frase:

RC=0 NÃO SIGNIFICA QUE O UNIVERSO ESTÁ CORRETO.
SIGNIFICA APENAS QUE O PROGRAMA DISSE QUE ESTÁ.

Ninguém sabe se a história é verdadeira.

Mas todo programador mainframe deveria guardar a frase.


19. A conclusão do caso

Naquela madrugada, o jovem programador voltou ao telefone.

— Bellacosa, encontrei o problema. O primeiro programa terminou com RC=4. O IF estava testando apenas RC=0. Por isso o passo de envio não executou.

— E o que significa RC=4 nesse programa?

Houve silêncio.

Depois, ouvi o som de páginas sendo folheadas.

— Significa que o relatório foi gerado, mas alguns registros foram ignorados. Ainda é permitido enviá-lo.

— Então o erro não estava no programa.

— Estava na condição.

Exatamente.

O programa havia feito seu trabalho.

O JCL também.

O problema era que alguém havia escrito uma regra incompleta.

A condição dizia:

IF (STEP01.RC EQ 0) THEN

Mas a regra de negócio deveria aceitar zero e quatro:

IF (STEP01.RC LE 4) THEN

Uma pequena diferença.

Dois caracteres.

Uma decisão completamente diferente.

No mainframe, muitas catástrofes não começam com explosões, fumaça ou mensagens dramáticas.

Elas começam com detalhes.

Um dataset com o DISP errado.

Um campo numérico mal inicializado.

Uma biblioteca ausente no STEPLIB.

Um Return Code não documentado.

Ou um IF que pergunta a coisa errada.

O IF/THEN/ELSE transforma o JCL em algo muito maior do que uma sequência estática de comandos. Ele permite que o JOB observe resultados, escolha caminhos, evite processamentos inúteis, proteja dados, acione tratamentos e automatize decisões operacionais.

Para quem trabalha com COBOL, produção, suporte, operações ou sistemas, dominar esse recurso não é opcional.

É parte da alfabetização batch.

Quando você compreender o Return Code, começará a entender o programa.

Quando compreender o IF, começará a entender o JOB.

E quando conseguir seguir o fluxo inteiro pelo spool, examinando cada passo, cada retorno, cada desvio e cada programa ignorado...

Bem...

Nesse momento, jovem Padawan, você já não estará apenas executando JCL.

Estará investigando o mainframe.

E em uma madrugada chuvosa, quando um JOB de milhões de reais parar sem explicação aparente, talvez alguém ligue para você.

Na tela, uma única linha estará esperando:

//MISTERIO IF (STEP01.RC GT 4) THEN

O café estará frio.

A sala estará escura.

E o caso será seu.

terça-feira, 12 de novembro de 2019

Obtendo geolocalização e exibindo um mapa do google map




Clique no botão para obter sua localização:







Exibindo a localização em um mapa com imagem estática




Clique no botão para obter sua localização:





Onde estou?




Onde estou?
Clique no botão para receber as coordenadas:




☕ Um Café no Bellacosa Mainframe

Onde Estou? — Dilbert, COBOL e a Geografia Impossível do El Jefe Midnight Lunch

🧭🦖 Quando você entra procurando mainframe, tropeça em Júlio Verne, passa por anime, encontra Grace Hopper tomando café e percebe que ninguém sabe exatamente em qual departamento este blog deveria estar

Existe uma pergunta absolutamente legítima que qualquer pessoa pode fazer depois de passar quinze minutos pelo El Jefe Midnight Lunch:

Onde diabos eu estou?

Você chegou pelo Google procurando:

COBOL S0C7

Perfeito.

Encontrou um artigo técnico.

Clicou num link.

Foi parar em:

JÚLIO VERNE

Clicou novamente.

RED TEAM

Mais um.

ANIME

Outro.

GRACE HOPPER

Outro.

TEORIA DOS JOGOS

Outro.

MAINFRAME

Ufa.

Voltamos.

Clica novamente.

Agora existe um dinossauro usando gravata explicando Db2 enquanto Phileas Fogg tenta submeter um JCL antes de completar a Volta ao Mundo em 80 Dias.

Você fecha a aba.

Abre novamente.

Confere o endereço.

Sim.

É o mesmo blog.

Bem-vindo.



🧑‍💼 Dilbert entra no prédio

Imagine Dilbert chegando para seu primeiro dia no El Jefe Midnight Lunch Corporation.

Recepção:

— Bom dia. Qual departamento?

Dilbert:

— Desenvolvimento.

— COBOL?

— Pode ser.

— Mainframe?

— Sim.

— Segurança?

— Talvez.

— Inteligência Artificial?

— Também.

— História?

— Como?

— Anime?

— Não.

— Júlio Verne?

— Senhora, eu só vim corrigir um programa.

A recepcionista entrega um crachá:

EL JEFE MIDNIGHT LUNCH

DEPARTAMENTO:
¯\_(ツ)_/¯

Primeira lição:

Aqui o organograma falhou.


🗺️ Onde estou?

Tecnicamente?

Num blog.

Conceitualmente?

Essa resposta é mais complicada.

O El Jefe Midnight Lunch parece menos uma publicação tradicional e mais um:

Knowledge Graph que tomou café demais.

Não existe apenas:

ARTIGO A
ARTIGO B
ARTIGO C
ARTIGO D

Existe:

             COBOL
            /     \
        MAINFRAME  HISTÓRIA
          /           \
       CICS          VERNE
        |              |
       DB2          FUTURO
        \              /
         \            /
             IA
            /  \
      RED TEAM  CULTURA
          \       /
            ANIME

Dilbert olha o desenho.

— Quem projetou isso?

Resposta:

— Foi crescendo.

Dilbert fecha os olhos.

Ele já ouviu essa frase antes.


🦖 Você está num blog de mainframe

Sim.

Definitivamente.

Existe COBOL.

Muito COBOL.

Tem:

JCL
CICS
Db2
VSAM
IMS
RACF
z/OS
JES2
SDSF
REXX
Assembler
LinuxONE
APIs
DevOps

Você pode entrar aqui sem saber o que significa:

DISP=(NEW,CATLG,DELETE)

e sair algumas horas depois sabendo.

Ou pelo menos sabendo que deveria tomar cuidado.

Portanto:

é um blog técnico.

Caso encerrado.

Não tão rápido.


🚀 Você também está numa máquina do tempo

Porque COBOL sem história é apenas sintaxe.

Mainframe sem contexto vira catálogo de produto.

Então abrimos uma porta.

Grace Hopper aparece.

Outra.

System/360.

Outra.

Anos 1970.

CICS.

Outra.

Internet.

Cloud.

IA.

De repente Júlio Verne entra pela lateral e pergunta:

“Vocês já pensaram em viajar até o centro da Terra?”

Claro.

Pegamos COBOL junto.

Porque por que não?


📚 Dilbert protesta

— Isso não é metodologia educacional.

Talvez seja.

Existe uma coisa curiosa sobre memória.

Compare:

“CICS é um monitor de processamento de transações.”

com:

“CICS é a cidade subterrânea encontrada durante nossa Viagem ao Centro do CPD.”

Qual você lembra amanhã?

Provavelmente a cidade subterrânea.

Agora imagine:

JES2 = ESTAÇÃO FERROVIÁRIA
JCL  = BILHETE DA VIAGEM
JOB  = TREM
DD   = BAGAGEM
COBOL = PASSAGEIRO
SDSF = PAINEL DA ESTAÇÃO

Tecnicamente a analogia possui limites.

Didaticamente?

Seu cérebro acabou de construir ganchos.


🧠 Você está dentro de uma cabeça hiperlinkada

Talvez essa seja uma descrição melhor.

Pensamento humano raramente funciona assim:

A
↓
B
↓
C
↓
D

Ele funciona mais assim:

COBOL
 ↓
1959
 ↓
GRACE HOPPER
 ↓
MARINHA
 ↓
NAVIOS
 ↓
JÚLIO VERNE
 ↓
NÁUTILUS
 ↓
CAPITÃO NEMO
 ↓
SUBMARINO
 ↓
SISTEMA CRÍTICO
 ↓
REDUNDÂNCIA
 ↓
MAINFRAME
 ↓
COBOL

Voltamos ao começo.

Dilbert observa:

— Isso parece um loop infinito.

COBOLzeiro:

PERFORM UNTIL END-OF-CURIOSITY

Dilbert:

— E quando END-OF-CURIOSITY fica TRUE?

Silêncio.

Nunca pensamos nessa possibilidade.


🎌 E por que tem anime aqui?

Excelente pergunta.

O executivo da IBM chegou procurando:

Enterprise COBOL 6.x

Encontrou.

Gostou.

Scroll.

Mais COBOL.

Scroll.

z/OS.

Scroll.

Red Team.

Scroll.

Júlio Verne.

Interessante.

Scroll.

Anime.

O executivo para.

Volta.

Confere.

Sim.

Anime.

Nesse instante acontece uma coisa importante.

O blog deixa de parecer documentação corporativa.

Ele ganha personalidade.


🧑‍💼 O Pointy-Haired Boss entra na reunião

Chefe:

— Precisamos definir nosso público-alvo.

Dilbert:

— Desenvolvedores mainframe.

Chefe:

— Excelente.

— Profissionais de segurança.

— Excelente.

— Estudantes.

— Excelente.

— Pessoas interessadas em história da computação.

— Excelente.

— Fãs de ficção científica.

— Hmm.

— Anime.

— Espere.

— Cultura japonesa.

— Dilbert...

— Cinema.

— Pare.

— Filosofia.

— PARE.

— Viagens.

— QUAL É O NICHO?

Silêncio.

No fundo da sala alguém responde:

Vagner.

Fim da reunião.


🏪 O problema da loja especializada

A internet moderna adora nichos.

Crie:

COBOLBLOG.COM

Fale apenas de COBOL.

Ótimo para classificação.

Mas depois de algum tempo você escreveu:

O QUE É COBOL
HISTÓRIA DO COBOL
VARIÁVEIS COBOL
PERFORM
COPYBOOK
ARQUIVOS
DB2
CICS

E então?

O mundo real não possui divisórias perfeitas.

COBOL conversa com:

NEGÓCIO
HISTÓRIA
ECONOMIA
BANCOS
SEGURANÇA
IA
CULTURA
PESSOAS

A partir daí começam as pontes.


🌉 O segredo são as pontes

Talvez o visitante chegue por:

JÚLIO VERNE

e descubra:

COBOL

Outro chega por:

COBOL

e encontra:

GRACE HOPPER

Outro:

RED TEAM

e encontra:

RACF

Outro chega por:

ANIME

e quinze cliques depois está lendo sobre:

NORMALIZATION OF DEVIANCE

Não pergunte como.

O grafo sabe.


🕸️ O blog como mainframe

Agora percebi o verdadeiro problema.

Talvez o El Jefe Midnight Lunch seja arquitetado como um mainframe.

Na superfície existem milhares de portas.

Por baixo:

                 BLOG
                   |
          +--------+--------+
          |                 |
      TECNOLOGIA          CULTURA
          |                 |
     +----+----+       +----+----+
     |         |       |         |
   COBOL      IA     ANIME     CINEMA
     |         |       |         |
    CICS    RED TEAM  JAPÃO    HISTÓRIA
     \         |       /         /
      \        |      /         /
       +-------+-----+---------+
               |
            PESSOAS
               |
           EXPERIÊNCIA

E lá no centro:

CURIOSIDADE.

Essa talvez seja a verdadeira CPU do negócio.


🐶 Dogbert oferece consultoria

Naturalmente Dogbert percebe uma oportunidade.

Entra usando terno.

Slide 1:

EL JEFE DIGITAL TRANSFORMATION STRATEGY

Slide 2:

CONTENT SYNERGY
KNOWLEDGE FABRIC
AI-DRIVEN STORYTELLING
CROSS-DOMAIN ENGAGEMENT
HYPERLINK ECOSYSTEM

Slide 3:

CONSULTORIA: US$ 250.000

Dilbert levanta a mão:

— Isso significa que ele escreve sobre coisas que acha interessantes e coloca links entre elas?

Dogbert:

— Não diga isso na frente do cliente.


🔬 Mas existe método no caos

Aparentemente encontramos aleatoriedade.

Por baixo existe uma estrutura recorrente.

Um assunto técnico aparece.

Depois contexto.

Depois história.

Depois analogia.

Depois cultura.

Depois humor.

Depois voltamos à tecnologia.

Algo como:

CONCEITO
   ↓
HISTÓRIA
   ↓
ANALOGIA
   ↓
ABSURDO
   ↓
PIADA
   ↓
EXPLICAÇÃO
   ↓
CONCEITO NOVAMENTE

Esse loop é importante.

Porque tecnologia pura pode ser árida.

Humor puro pode ser descartável.

História pura pode virar nostalgia.

Quando os três se encontram:

TECNOLOGIA
+
HISTÓRIA
+
HUMOR

surge algo que talvez você lembre.


🦖 Por isso existe um dinossauro

COBOL é chamado de dinossauro.

Então vamos usar um dinossauro.

Não apenas escrever:

“COBOL possui elevada longevidade.”

Isso é correto.

Também possui a capacidade de anestesiar pequenos mamíferos.

Melhor:

O dinossauro se recusa a morrer porque ainda está fechando o movimento do banco enquanto você escreve o obituário.

Agora temos uma imagem mental.

Didática também é engenharia de memória.


☕ Por isso existe café

O café também não é acidente.

Mainframe possui algo profundamente humano que frequentemente desaparece das apresentações técnicas.

Por trás de:

99,999%

existem pessoas.

Operadores.

Programadores.

DBAs.

Sysprogs.

Analistas.

Arquitetos.

Gente trabalhando às 03:17 porque:

JOB ABENDED

E alguém precisa descobrir por quê.

O café representa essa pessoa.


📊 Onde estou? — versão corporativa

Dilbert precisa preencher o formulário.

TIPO DE SITE:

Ele tenta:

[ ] BLOG TÉCNICO
[ ] BLOG PESSOAL
[ ] EDUCAÇÃO
[ ] HISTÓRIA
[ ] CULTURA
[ ] ENTRETENIMENTO
[ ] TECNOLOGIA

Marca todos.

Sistema:

ERROR:
SELECT ONLY ONE CATEGORY

Dilbert:

— Temos um problema.

COBOLzeiro:

— Não.

— O formulário tem um problema.


🤖 Então chega a Inteligência Artificial

Agora a confusão fica ainda melhor.

Porque IA consegue atravessar exatamente essas fronteiras.

Podemos perguntar:

“Explique COBOL usando Júlio Verne.”

E surge uma viagem ao centro do CPD.

“Explique debugging usando um inventor de desenho animado.”

Surge outra história.

“Explique um road map mainframe como a Volta ao Mundo em 80 Dias.”

Phileas Fogg imediatamente ganha acesso ao SDSF.

Estamos utilizando cultura como interface para conhecimento técnico.

Isso é muito mais interessante do que simplesmente:

CAPÍTULO 1
INTRODUÇÃO AO JCL

🗺️ Você não está numa biblioteca

Bibliotecas dizem:

TECNOLOGIA → ESTANTE 4
LITERATURA → ESTANTE 7
CINEMA → ESTANTE 12

Aqui alguém colocou um túnel entre as estantes.

Você entra em literatura.

Sai em CICS.

Entra em anime.

Sai em filosofia.

Entra em mainframe.

Sai em história.

O bibliotecário pediu demissão.


🧭 Então, novamente:

ONDE ESTOU?

Resposta curta:

No El Jefe Midnight Lunch.

Resposta técnica:

Num grande corpus hiperlinkado de tecnologia, mainframe, história, cultura, experiências, humor e curiosidade.

Resposta Bellacosa:

Num CPD mental sem mapa de evacuação.


🚪 Não existe porta principal

Talvez essa seja outra característica curiosa.

Você não precisa começar pelo primeiro artigo.

Nem existe realmente “primeiro”.

Pode chegar por qualquer porta.

GOOGLE
LINKEDIN
X
YOUTUBE
LINK INTERNO
BUSCA
ACASO

A partir dali começa sua própria rota.

É quase um RPG.

Você escolhe:

> COBOL
  IA
  HISTÓRIA
  ANIME
  RED TEAM
  VIAGENS
  FILOSOFIA

Seleciona COBOL.

Are you sure?

YES

Cinco horas depois você está lendo Júlio Verne.

Não reclame.

Foi avisado.


🧑‍💻 Dilbert finalmente entende

Depois de percorrer dezenas de páginas, Dilbert retorna à recepção.

A funcionária pergunta:

— Descobriu qual é o departamento?

Ele olha para o crachá:

DEPARTAMENTO:
¯\_(ツ)_/¯

Pensa alguns segundos.

Pega uma caneta.

Risca.

Escreve:

CURIOSIDADE APLICADA.

Talvez seja isso.

Não importa se o ponto de partida é COBOL, Verne, IA, um filme, uma viagem, um incidente ou alguma tecnologia esquecida.

A pergunta fundamental é sempre:

“O que existe atrás dessa porta?”

E então abrimos.


☕ Epílogo — Você está aqui

Imagine finalmente um gigantesco mapa do blog.

Milhares de páginas.

Milhares de conexões.

No centro existe aquela clássica marca vermelha:

📍 VOCÊ ESTÁ AQUI

Ao lado:

COBOL ................ 300 m
JÚLIO VERNE .......... 450 m
CICS ................  600 m
ANIME ................ 700 m
RED TEAM ............. 900 m
IA .................. 1,2 km
HISTÓRIA ............ 1,5 km
PRÓXIMA IDEIA ....... ???

Dilbert olha o mapa.

— Como volto para a página inicial?

O mainframeiro aponta para uma placa:

RETURN

Dilbert segue.

A placa seguinte diz:

PERFORM UNTIL END-OF-BLOG

Ele congela.

— Qual é o END-OF-BLOG?

O velho COBOLzeiro serve outra xícara de café.

Sorri.

E responde:

“Esse campo nunca foi inicializado.”

☕🦖🧭💾

Bem-vindo ao El Jefe Midnight Lunch.

Você pode até descobrir onde está.

O problema...

é saber onde vai estar daqui a três cliques.



Onde estou?


segunda-feira, 11 de novembro de 2019

🥜 A Batida de Amendoim – O Mainframe Etílico dos Botecos Paulistanos


 

🥜 A Batida de Amendoim – O Mainframe Etílico dos Botecos Paulistanos
por El Jefe – Bellacosa Mainframe Midnight Lunch Edition



Há bebidas que passam, e há sistemas que ficam.
Entre as taças de vinho pretensiosas e os coquetéis com nome em inglês, há uma velha guardiã da autenticidade paulistana: a batida de amendoim.
Doce, cremosa, traiçoeira — a verdadeira soft drink da malandragem de balcão.




🥄 Origem – quando o amendoim encontrou a pinga
A história começa nas décadas de 1950 e 1960, nos bares e armazéns do centro velho de São Paulo.
O amendoim, barato e abundante, era torrado para petisco e moído em pilão para fazer paçoca.
Um dia, alguma alma iluminada (ou entediada) decidiu misturá-lo com pinga, leite condensado e gelo — e o milagre aconteceu: nasceu a batida de amendoim, o milk-shake do proletariado.

Era a bebida que unia o doce e o amargo, o sagrado e o profano.
Servida no copo de 7, bem gelada, parecia inofensiva... até levantar o sujeito pela alma.

📜 A bebida que virou código social
Nos anos 70, ela já era onipresente nos botecos do Brás, da Mooca, da Lapa e do Tatuapé.
A batida virou uma espécie de handshake da boemia:
— “E aí, quer uma batidinha?”
Não era convite, era ritual de integração.
O primeiro gole selava amizade, o segundo começava a confissão e o terceiro… bem, o terceiro apagava o log da memória RAM.

As receitas variavam conforme o bairro, mas o espírito era o mesmo:

  • Pinga ou cachaça boa (nunca as de plástico)

  • Leite condensado (geralmente o mais doce possível)

  • Amendoim torrado e moído

  • Às vezes, um toque de chocolate em pó ou mel pra “amaciar o fogo”

Tudo batido no liquidificador Arno da década de 80, aquele que já fazia barulho de boteco antes mesmo de ligar.

🍶 A tecnologia da simplicidade
A batida é a versão líquida da gambiarra genial brasileira: uma solução doce pra um problema quente.
Enquanto o uísque era coisa de escritório e o gim de boutique, a batida era coisa de balcão de ferro, rádio AM e sinuca atrás do balcão.

Ela não precisava de copo fancy — só de boa companhia e música de fundo.
Geralmente vinha acompanhada de um tremoço ou um bolovo, numa combinação de sabores que faria qualquer bartender moderno pedir demissão.

⚙️ As adaptações e mutações da batida
Com o tempo, surgiram versões paralelas: batida de coco, de maracujá, de morango…
Mas a de amendoim permaneceu a mãe de todas as batidas, a que manteve o sistema legado em funcionamento mesmo em meio às modernizações.
Em festas de garagem dos anos 80, ela era obrigatória — guardada em garrafa de vidro de refrigerante, resfriada em balde com gelo e servida em copinhos plásticos de festa.

E como todo sistema que dá certo, foi clonada, pirateada, remixada.
Hoje, há quem venda “batida artesanal gourmet” por 20 reais a dose.
Mas o Bellacosa garante: se não for servida num copo de 7, trincado e suando, não é batida, é bug.

📚 Lendas e folclores do balcão
Dizem que na Mooca existia um bar chamado “Doce Veneno”, onde a batida de amendoim era feita com receita secreta — passada de pai pra filho, e de garçom pra garçom.
Reza a lenda que um político famoso tomou três copos antes de um comício e discursou meia hora sobre “os direitos do amendoim na Constituição”.
Há também quem jure que a batida servia pra “amaciar o coração” antes da cantada — e que muita história de amor começou num copo pequeno e gelado.

💬 Filosofia de balcão – a verdade vem batida
A batida de amendoim é a prova de que o paulistano não precisa de muito pra ser feliz.
É a harmonia perfeita entre doce, álcool e ironia — um blend existencial que faz o tempo desacelerar e a conversa ganhar poesia.
Em cada gole há infância (por causa do sabor), e maturidade (por causa do estrago).

💡 Dicas do Bellacosa Mainframe
Quer sentir o espírito original?

  • Vá a um boteco antigo, de azulejo branco e porta de aço.

  • Peça “uma batidinha de amendoim, gelada, no 7”.

  • Tome devagar, sem pressa.

  • E ouça o som do liquidificador rodando — é o hino nacional da boemia paulistana.

🖤 Reflexão do El Jefe Midnight Lunch
A batida de amendoim é o mainframe emocional do boteco:
resiliente, doce, honesta e perigosa.
Ela roda há décadas sem precisar de atualização.
É o código-fonte da alegria simples — a prova de que nem todo reboot melhora o sistema.


🥜 Bellacosa Mainframe – porque algumas versões da vida só rodam com leite condensado e cachaça.

domingo, 10 de novembro de 2019

☕💥 A Jornada do Padawan COBOL – Parte 11 Desvendando o Universo dos CALLs no Mainframe

 

Bellacosa Mainframe apresenta o call em cobol parte xi

☕💥 A Jornada do Padawan COBOL – Parte 11

Desvendando o Universo dos CALLs no Mainframe

GRS, ENQ/DEQ, VVDS, VTOC, UCB, IOS, FICON, Channel Subsystem e os Segredos dos Guardiões do Storage IBM Z

Ou como descobrir que, antes de um simples OPEN funcionar, dezenas de componentes já trabalharam silenciosamente para você

Por Vagner Bellacosa – Bellacosa Mainframe


O dia em que o Padawan percebe que um OPEN não é apenas um OPEN

Após dez capítulos, nosso Padawan já entende:

✔ CALL

✔ LE

✔ CICS

✔ JES2

✔ RMF

✔ Telum

✔ Spyre

✔ DevOps

Então ele escreve:

OPEN INPUT CLIENTES

E pensa:

Deve ser simples...

Veterano do Storage sorri.

Não responde.

Abre RMF.

Abre ISMF.

Abre DEVSERV.

E diz:

— Vamos conversar.


O Grande Segredo

Antes do OPEN ocorrer.

Diversos subsistemas trabalham.


Visualmente


COBOL

↓

OPEN

↓

LE

↓

Access Method

↓

Catalog

↓

VVDS

↓

VTOC

↓

UCB

↓

IOS

↓

Channel Subsystem

↓

FICON

↓

DASD


Padawan:

— Tudo isso?

Veterano:

— Apenas para abrir um arquivo.


GRS

Global Resource Serialization


Pouquíssimos desenvolvedores conhecem.

Todos usam.

Diariamente.


Ele evita.

Caos.


Imagine:

Programa A

Atualizando KSDS.

Programa B

Atualizando KSDS.

Programa C

Atualizando KSDS.


Sem GRS.

Corrupção.


Com GRS.

Ordem.

Disciplina.


ENQ

Reserve recurso.


Exemplo

ENQ


SYSDSN


CLIENTE.MASTER

Programa obtém.

Exclusividade.


DEQ

Libera.


Exemplo

DEQ


CLIENTE.MASTER

Easter Egg

Muitos problemas batch.

São.

ENQ presos.


Como descobrir?

SDSF

GRSQ

D GRS


RESERVE

Mais antigo.


Bloqueia.

Dispositivo físico.


Pouco usado.

Hoje.


Sysplex prefere.

GRS.


Catalog

O Google.

Do Mainframe.


Pergunta.

Onde está.

CLIENTE.MASTER?

Catalog responde.

Volume.

Device.

VVDS.


VVDS

VSAM Volume Data Set


Armazena.

Informações VSAM.


Exemplo

KSDS.

ESDS.

RRDS.


VTOC

Volume Table Of Contents


O índice.

Do disco.


Sem VTOC.

Nada existe.


Visualmente


3390


↓

VTOC


↓

Dataset



DSCB

Data Set Control Block


Informações.

Dataset.


Organização.

Extents.

Blocos.


UCB

Unit Control Block


Representa.

Dispositivo.


Exemplo

3390-123


UCB


ONLINE

IOS

Input Output Supervisor


Herói desconhecido.


Gerencia.

I/O.


Escalona.

Requisições.


Comunica.

Canal.


Channel Subsystem

Uma obra-prima IBM.


CPU.

Não conversa.

Diretamente.

Com disco.


Canal conversa.


Visualmente


CPU


↓


CSS


↓


FICON


↓


Storage




FICON

Fiber Connectivity


Substituiu.

ESCON.


Velocidade.

Gigabits.


Latência.

Mínima.


Disponibilidade.

Enorme.


Pidb

Pouco conhecido.


Performance Information Data Base


Engenheiros IBM.

Gostam.

Muito.


Dynamic Path Management

Storage inteligente.


Falhou caminho?

Troca automaticamente.


Aplicação.

Nem percebe.


HyperPAP

Outro segredo.


Balanceia.

I/O.


Otimiza.

Caminhos.


OPEN em detalhes

Padawan escreve.

OPEN INPUT CLIENTE

Sistema executa.


OPEN


↓

Catalog


↓

VVDS


↓

VTOC


↓

GRS


↓

IOS


↓

CSS


↓

FICON


↓

DASD


↓

Retorna



Tudo.

Em milissegundos.


O dia em que o arquivo não abre

Padawan vê.

IEC161I

Pânico.


Veterano pergunta.

Volume?

Catalog?

VVDS?

ENQ?

Path?

FICON?

IOS?


Padawan.

Silêncio.


Ferramentas Jedi

LISTCAT

LISTCAT ENT(CLIENTE.MASTER)

D U,DASD

Ver dispositivos.


DEVSERV

Ver caminhos.


D GRS

Ver locks.


ISMF

Storage Management.


RMF

Pode mostrar.


Tempo de I/O.


Cache Hit.

Miss.


Path Busy.


SMF

Tipos úteis.

SMF42

DFSMS

SMF74

Coupling

SMF70

CPU


Dicas Bellacosa

Dica 1

Aprenda LISTCAT.


Dica 2

Estude VVDS.


Dica 3

GRS salva vidas.


Dica 4

FICON é fascinante.


Dica 5

IOS merece respeito.


Easter Egg Mainframe

Existe um pequeno grupo.

Que consegue olhar.

Isto.

IOS000I


GRS


SMF42


RMF74


UCB


VVDS


E descobrir.

Em dez minutos.

Porque um banco inteiro.

Parou.


Eles.

Não usam capa.

Mas deveriam.


São conhecidos.

Como.

Os Guardiões do Storage IBM Z


Checklist Jedi

✅ Entender GRS

✅ Conhecer ENQ

✅ Conhecer DEQ

✅ Estudar Catalog

✅ Dominar LISTCAT

✅ Aprender VVDS

✅ Entender VTOC

✅ Conhecer UCB

✅ Respeitar IOS

✅ Estudar CSS

✅ Conhecer FICON

✅ Interpretar RMF


A Filosofia Jedi – Parte 11

O Padawan iniciante acredita:

OPEN é um comando.

O desenvolvedor experiente pensa:

OPEN localiza datasets.

O especialista compreende:

OPEN coordena dezenas de componentes do z/OS.

E o Arquiteto IBM Z sabe algo ainda mais profundo:

Um simples OPEN INPUT CLIENTE aciona mecanismos de serialização global, gerenciamento de catálogos, subsistemas de I/O, canais FICON, estruturas de controle de storage e décadas de engenharia IBM, tudo isso para que o desenvolvedor apenas enxergue:

OPEN INPUT CLIENTE

E continue acreditando que foi algo simples.


Próxima aventura do Padawan COBOL – Parte 12

"As Runas Finais do IBM Z: PSA, CVT, ASCB, TCB, RB, SRB, ACEE, CSA, ECSA, SQA, LSQA, PSA Internals e os mistérios dos Control Blocks que sustentam todo o universo z/OS."


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