☕ 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, 7 de janeiro de 2010

📦 SMP/E for z/OS – SYSMOD Packaging

Bellacosa Mainframe apresenta smp/e sysmod packaging

📦 SMP/E for z/OS – SYSMOD Packaging

Entendendo MCS e técnicas de empacotamento sem dor de cabeça


🧠 Ideia central (em uma frase)

SYSMOD = conteúdo + instruções (MCS)
O como, onde e quando instalar é decidido pelas MCS.


🧩 O que existe dentro de um SYSMOD?

Todo SYSMOD tem duas coisas:

  1. Texto de modificação

    • módulos

    • macros

    • source

    • dados

    • HFS / JAR

  2. MCS – Modification Control Statements

    • instruções para o SMP/E

    • dizem onde, quando e em que ordem instalar

📌 Durante o RECEIVE, o SMP/E:

  • lê primeiro as MCS

  • grava tudo no SMPPTS

  • cada SYSMOD vira uma MCS entry


🧱 Tipos de elementos em DLIB / TLIB

TipoO que é
ModuleCódigo compilado/ligado
MacroFonte reutilizável
SourceCódigo fonte
DataCLIST, PARM, PROC etc
HFSArquivos Unix
JARJava Archive

🧾 Regras básicas das MCS (cai em prova)

  • Todas começam com ++

  • Colunas 1–2++

  • Terminam com ponto (.)

  • Podem continuar linha se não houver ponto antes da coluna 73

  • Colunas 73–80 são ignoradas


🪪 HEADER e identificação do SYSMOD

++HEADER

  • identifica o tipo do SYSMOD

  • define o SYSMOD-ID

Tipos de SYSMOD

TipoPara quê
FUNCTIONIntroduz produto
PTFCorreção testada
APARCorreção de problema
USERMODCorreção local

🧬 FMID — quem “é dono” do código

  • FMID = Function Modification ID

  • 7 caracteres

  • identifica a função dona do elemento

  • em FUNCTION, o FMID é o próprio SYSMOD-ID

📌 Todo SYSMOD exceto base FUNCTION usa FMID no ++VER.


🔗 ++VER — relacionamento e dependências

O ++VER é o cérebro da compatibilidade

Regras:

  • Obrigatório

  • Deve vir logo após o HEADER

  • Define:

    • release suportado (SREL)

    • dependências

    • pré-requisitos

    • co-requisitos

    • supersedes

Operandos importantes

OperandoFunção
SRELRelease do sistema
FMIDFunção dona
PREPré-requisito
REQCo-requisito
SUPSupersede

🚦 ++HOLD — bloqueios controlados

Existem 3 tipos:

TipoQuando usar
ERRORPTF com erro
SYSTEMAção manual necessária
USERRegra local

📌 HOLD impede APPLY/ACCEPT até ser resolvido
📌 Pode vir no SYSMOD ou em HOLDDATA separado


🏗️ MCS estruturais – como o sistema é montado

++JCLIN

  • descreve como o load module é ligado

  • não executa, apenas é analisado

  • grava estrutura no TZONE

Sem JCLIN → SMP/E não sabe reconstruir load modules.


🧩 MCS de elemento (o que será instalado)

MCSO que instala
++MODMódulo
++SRCSource
++MACMacro
++DATADados
++HFSArquivo Unix
++JARJAR inteiro
++ZAPPatch binário
++SRCUPDUpdate de source
++MACUPDUpdate de macro
++JARUPDUpdate parcial de JAR

📌 ZAP / UPD = alteração parcial
📌 DATA / HFS = sempre substituição total


☕ JAR no SMP/E (pegadinha comum)

  • ++JAR → substitui o JAR inteiro

  • ++JARUPD → atualiza arquivos internos

  • SMP/E usa comandos do JDK (jar x / jar u)


📦 Técnicas de empacotamento SYSMOD

Como o conteúdo chega até o SMP/E

1️⃣ Relative File (tape)

📼 Clássico IBM

  • MCS em um arquivo

  • elementos em arquivos seguintes

  • usa RELFILE

✔️ Muito usado em FUNCTION SYSMOD


2️⃣ Inline

📄 Tudo junto

  • MCS + conteúdo no mesmo arquivo

  • registros fixos de 80 bytes

  • simples, direto

⚠️ Dados variáveis precisam de GIMDTS


3️⃣ Indirect Library

📚 USERMOD raiz

  • MCS no SMPPTS

  • conteúdo fica fora (PDS indicado no APPLY)

  • usa TXLIB, LKLIB

✔️ Ideal para USERMOD


4️⃣ GIMZIP Archive

🌐 Moderno / rede

  • arquivo compactado no HFS

  • inclui:

    • MCS

    • elementos

    • HOLDDATA

  • usa:

    • GIMZIP

    • GIMUNZIP

    • RECEIVE FROMNETWORK

✔️ Base do Shopz / Internet delivery


❌ “What’s wrong with this picture?” (clássico de prova)

Erros comuns:

  1. ++MOD não é o último MCS

  2. Inline com RELFILE

  3. FMID ausente

  4. Falta ponto final

  5. SREL inválido (2038 ≠ Z038)


🧠 Resumo final (para memorizar)

🔑 RECEIVE lê MCS
🔑 APPLY instala no target
🔑 ACCEPT congela no DLIB
🔑 ++VER controla dependências
🔑 JCLIN explica como montar
🔑 Packaging define onde está o conteúdo

terça-feira, 5 de janeiro de 2010

🖥️ MVS Console Commands – Principais Comandos

 

 

Bellacosa Mainframe apresenta MVS Commands


🖥️ MVS Console Commands – Principais Comandos

⚠️ Aviso importante
A maioria desses comandos exige privilégio de operador (OPERCMDSOPERATIONS, etc.).
Em ambiente restritivo, eles são substituídos por SDSF.


🔍 1️⃣ Comandos de Display (D)

Usados para consulta (os mais comuns e mais seguros).

🔹 D A,L – Displays Active Jobs

D A,L

📌 Mostra jobs ativos no sistema
🧠 Base de automação e monitoramento


🔹 D R,L – Displays Outstanding Replies

D R,L

📌 Mostra WTORs pendentes
💬 Operação vive aqui


🔹 D U,ALL – Displays Users

D U,ALL

📌 Usuários logados
⚠️ Pode ser restrito por segurança


🔹 D IPLINFO

D IPLINFO

📌 Data/hora do último IPL
🧠 Muito usado em troubleshooting


🔹 D OMVS

D OMVS

📌 Status do UNIX System Services (USS)


🔹 D XCF,STRUCTURE

D XCF,STRUCTURE

📌 Estruturas de sysplex
🧠 Ambiente Parallel Sysplex


▶️ 2️⃣ Comandos de Job Control ($ – JES2)

🔹 $D JOBS

$D JOBS

📌 Lista jobs no spool


🔹 $DA jobname

$DA PAYROLL

📌 Detalhe de um job específico


🔹 $C jobname

$C PAYROLL

📌 Cancela job
⚠️ Perigoso – exige autoridade


🔹 $P jobname

$P PAYROLL

📌 Pausa job


🔹 $A jobname

$A PAYROLL

📌 Libera job pausado


🔄 3️⃣ Comandos de Sistema (FSP)

🔹 S procname

S TCPIP

📌 Inicia started task


🔹 P procname

P TCPIP

📌 Para started task
⚠️ Impacto alto


🔹 F procname,command

F JES2,STATUS

📌 Envia comando para STC

🧠 Muito usado para CICS, DB2, MQ.


🧠 4️⃣ Comandos de Memória / Performance

🔹 D ASM

D ASM

📌 Status de memória auxiliar


🔹 D REAL

D REAL

📌 Memória real


🔹 D VIRT

D VIRT`

📌 Memória virtual


🔹 D IOS

D IOS

📌 Subsystem de I/O


🌐 5️⃣ Rede / Comunicação

🔹 D NET,ID=

D NET,ID=VTAM

📌 Status VTAM


🔹 D TCPIP

D TCPIP

📌 Status da pilha TCP/IP


🧾 6️⃣ Storage, Datasets e Devices

🔹 D U,DASD

D U,DASD

📌 DASDs online/offline


🔹 VARY ONLINE

VARY 1234,ONLINE

📌 Ativa device
⚠️ Altíssimo impacto


🔹 VARY OFFLINE

VARY 1234,OFFLINE

📌 Desativa device


🧯 7️⃣ Comandos de Emergência (raros)

🔹 CANCEL

CANCEL jobname

🔹 RESET

RESET`

⚠️ Normalmente restritos a operadores sênior.


🧪 8️⃣ Uso via REXX

ADDRESS MVS "D A,L"

📌 Alternativa segura:

ADDRESS SDSF ISFEXEC DA

💬 Bellacosa comenta:

“REXX + console é espada de dois gumes.”


📊 Resumo rápido (cola de operador)

CategoriaComando
Jobs ativosD A,L
WTORD R,L
Spool JES$D JOBS
Cancelar job$C job
STCS / P / F
IPLD IPLINFO
RedeD NETD TCPIP
DASDD U,DASD

☕ Conclusão Bellacosa Mainframe

“Console command não é para testar —
é para saber exatamente o que está fazendo.”

Em ambiente moderno:

  • 👑 Operador usa console

  • 🧪 Automação usa SDSF

  • 🔐 Auditoria dorme tranquila


segunda-feira, 4 de janeiro de 2010

⚖️ Lei da Casualidade — ou: nada acontece “do nada” (ao estilo Bellacosa Mainframe) ⚖️

 

Bellacosa Mainframe e a lei da casualidade

⚖️ Lei da Casualidade — ou: nada acontece “do nada” (ao estilo Bellacosa Mainframe) ⚖️

Eu sempre gostei de observar padrões. Talvez seja deformação profissional de quem passou a vida debugando COBOL, analisando dumps, JES2 lotado e aquele abend que “simplesmente apareceu”. No fundo, a tal lei da casualidade funciona exatamente assim: nada acontece por acaso absoluto — há sempre uma cadeia de eventos, mesmo que a gente não enxergue todas as linhas do JCL da vida.


🧠 O que é a Lei da Casualidade?

De forma simples:
👉 Todo efeito tem uma causa, ainda que seja sutil, invisível ou esquecida.

Ela aparece em várias filosofias:

  • No budismo, como causa e efeito (karma)

  • No taoismo, como fluxo natural das coisas

  • Na filosofia ocidental, desde Aristóteles

  • E no dia a dia… quando a gente diz:

    “isso não aconteceu por acaso”

Casualidade não é sorte.
Casualidade é consequência acumulada.


🏗️ Origem do conceito

O termo vem do latim causalis — aquilo que gera algo.
No Japão, isso conversa fortemente com ideias como:

  • Inga ōhō (因果応報): causa e retribuição

  • Shikata ga nai: aconteceu porque tinha que acontecer

  • Mottainai: desperdiçar causa desequilíbrio

Nada surge do vácuo. Nem um bug crítico em produção 😄


💾 Bellacosa Mainframe Mode ON

Pensa assim:

  • A vida é o sistema

  • Suas ações são o código

  • O resultado é o output

Se o batch deu erro, alguém:

  • Alterou um copybook

  • Esqueceu um IF

  • Mudou um dataset

  • Ignorou um warning

A casualidade é só o log dizendo:

“isso aqui já vinha sendo construído faz tempo”


🧩 Como entender na prática

✔️ Observe padrões recorrentes
✔️ Veja onde você insiste nos mesmos comportamentos
✔️ Analise os “pequenos eventos”
✔️ Aceite que nem tudo é imediato

Na vida, muito resultado é batch noturno — você só vê no dia seguinte.


🛠️ Como praticar (dicas reais)

  • Pare de culpar o acaso

  • Revise suas decisões passadas

  • Aja melhor hoje (o efeito vem depois)

  • Não ignore sinais pequenos

  • Tenha paciência com o processamento

💡 Dica de ouro:

Se algo se repete, não é azar. É lógica.


🥚 Easter eggs & curiosidades

  • No Japão, encontros “por acaso” são chamados de en (縁) — laços invisíveis

  • Muitos animes usam isso como motor da história (Steins;Gate, Your Name)

  • O “destino” japonês raramente é mágico — ele é construído

  • Até o caos segue regras… só que muito complexas


😏 Fofoquices filosóficas

Sabe aquela pessoa que “sempre se dá mal”?
Ou aquela que “sempre cai em boas oportunidades”?

Spoiler:
👉 não é sorte
👉 é histórico de decisões + ambiente + atitude

O universo não pune nem recompensa — ele responde.


🌏 Importância cultural

A lei da casualidade ensina:

  • Responsabilidade

  • Consciência

  • Humildade

  • Paciência

  • Observação

No Japão, isso molda:

  • Relações pessoais

  • Trabalho

  • Ética

  • Persistência

  • Resiliência silenciosa


🧾 Fechando o job (sem abend)

“Nada acontece por acaso.
A gente só esquece de olhar o log.”

Entender a lei da casualidade é aceitar que cada pequena ação escreve uma linha do nosso próprio programa de vida. E quando o resultado vem… não adianta culpar o sistema.

Porque, no fundo,
o código foi nosso.

domingo, 3 de janeiro de 2010

Como treinar IA para Mainframe

 


Passo a passo para evoluir legado em IA

Definição de Padrões Técnicos, Controle de Qualidade e Melhoria de Processos

Definir métricas de sucesso de qualidade específicas para COBOL em projetos de anotação de código e rotulagem de conjuntos de dados.

Desenvolver Procedimentos Operacionais Padrão (POPs), rubricas de garantia da qualidade (QA) e materiais de referência específicos para cada projeto, a fim de garantir que os resultados estejam alinhados com os padrões técnicos do cliente.

Revisar os resultados do projeto (scripts COBOL, anotações de código, exemplos de modernização de sistemas legados) em relação aos padrões definidos, sinalizando e corrigindo defeitos antes da entrega ao cliente.

Realizar verificações de QA estruturadas nos entregáveis; rastrear, sinalizar e resolver defeitos de forma eficiente para cumprir os prazos de entrega.

Devolver o trabalho aos contratados com notas de correção precisas e contexto sobre a sintaxe COBOL, lógica e padrões de sistemas legados.

Fornecer consultoria sobre ferramentas, frameworks, emuladores e melhorias de fluxo de trabalho para manter os padrões de qualidade em ambientes de mainframe e processamento em lote.

Lidar com alterações de especificações e cenários extremos (por exemplo, diferentes dialetos COBOL, codificação EBCDIC vs. ASCII, dependências de JCL) e elaborar os critérios de aceitação ou soluções alternativas correspondentes.

Organize bibliotecas de exemplos de código COBOL de "padrão ouro", exemplos de modernização e anotações de conjuntos de dados para calibração e consistência entre projetos.

Avaliação de Talentos e Melhoria de Resultados

Participe de avaliações técnicas de talentos terceirizados, incluindo a revisão de avaliações de código COBOL e avaliações baseadas em tarefas.

Revise exemplos de resultados de terceirizados e forneça feedback escrito claro e acionável para melhorar a correção, legibilidade e eficiência do código.

Desenvolva recursos de treinamento e calibração direcionados, como:

Diretrizes de qualidade de código COBOL (por exemplo, consistência de divisão de dados, estruturação de parágrafos)

Melhores práticas para código procedural limpo e de fácil manutenção

Documentação de referência para padrões de interação com sistemas legados

Padrões de rotulagem de conjuntos de dados para treinamento de modelos relacionados a COBOL


Suporte à Entrega de Projetos

Aconselhe sobre o escopo e os requisitos técnicos durante a configuração do projeto, incluindo versionamento de COBOL, integração de JCL e formatos de dados de mainframe.

Forneça orientação especializada para casos extremos e alterações de especificações, como o tratamento de copybooks, registros de comprimento variável ou integração com DB2 e VSAM.

Contribuir para as revisões pós-projeto a fim de capturar lições aprendidas e refinar continuamente os padrões.

Identificar e resumir insights do sistema do cliente, como problemas recorrentes de sintaxe, erros de lógica ou inconsistências na formatação de dados.

Criar painéis ou rastreadores de defeitos com problemas categorizados para revelar temas recorrentes e impulsionar melhorias de processo.

Conduzir análises pós-projeto para analisar tendências de defeitos e propor etapas de garantia de qualidade atualizadas, melhorias na documentação ou treinamentos de reciclagem.


sábado, 2 de janeiro de 2010

O Incidente do Queijo Suíço: Doctor Who, COBOL e o Dia em que Todos os Buracos se Alinharam

Bellacosa Mainframe e o incidente do queijo suico

☕ Um Café no Bellacosa Mainframe

O Incidente do Queijo Suíço: Doctor Who, COBOL e o Dia em que Todos os Buracos se Alinharam

Uma viagem pela TARDIS dos incidentes para entender por que sistemas seguros também falham

Imagine a seguinte manhã.

08:02.

Você chega ao trabalho.

Café na mesa.

TSO aberto.

ISPF funcionando.

Nenhum chamado desesperado.

Nenhum gerente perguntando por que a produção está parada.

Nenhum telefone tocando com aquela frase que todo analista veterano aprendeu a temer:

— Você mexeu em alguma coisa ontem?

Uma manhã perfeita.

Naturalmente, isso significa que alguma coisa terrível está prestes a acontecer.

Às 08:17, um pequeno alerta aparece no monitoramento.

Nada grave.

Às 08:22, outro.

Também aparentemente irrelevante.

Às 08:41, um job termina com RC=04.

Alguém olha.

— RC=04 não é erro.

Tecnicamente, a pessoa está correta.

O que, em informática, às vezes é uma maneira particularmente eficiente de estar completamente errada.

Às 09:06, uma fila começa a crescer.

Às 09:35, um batch demora sete minutos a mais que o normal.

Às 10:12, um operador executa um procedimento alternativo que já havia sido usado outras vezes.

Às 10:46, uma aplicação recebe dados incompletos.

Às 11:03, a primeira reclamação chega.

Às 11:11, cinquenta reclamações.

Às 11:27, alguém pronuncia a palavra que transforma adultos perfeitamente civilizados em personagens de filme-catástrofe:

produção.

E então, em algum lugar do universo, ouvimos o som característico da TARDIS.

VWORP.

VWORP.

VWORP.

Aquela velha cabine policial azul pousa discretamente ao lado de um IBM Z.

A porta se abre.

O Doctor olha para os consoles.

Olha para os operadores.

Olha novamente para os consoles.

E provavelmente diz:

— Fascinante.

Pausa.

— Vocês têm café?

Porque hoje não estamos procurando simplesmente quem errou.

Estamos procurando algo muito mais interessante:

como diversas pequenas falhas conseguiram se alinhar e atravessar todas as defesas do sistema.

Bem-vindo ao Swiss Cheese Model.



🧀 Afinal, o que queijo suíço tem a ver com incidentes?

O chamado Swiss Cheese Model, ou Modelo do Queijo Suíço, foi desenvolvido e popularizado pelo psicólogo britânico James Reason no estudo de erros humanos, acidentes e segurança de sistemas complexos.

A ideia central é brilhantemente simples.

Imagine que uma organização possua várias barreiras destinadas a impedir que alguma coisa ruim aconteça.

Por exemplo:

  • procedimentos;

  • treinamento;

  • validações;

  • testes;

  • segregação de funções;

  • revisão de código;

  • monitoramento;

  • autorização;

  • redundância;

  • backups;

  • controles automáticos.

Cada uma dessas barreiras seria uma fatia de queijo suíço.

O problema?

Nenhuma fatia é perfeita.

Cada uma possui buracos.

Esses buracos representam fragilidades.

Uma pessoa pode estar cansada.

Um procedimento pode estar desatualizado.

Um teste pode não cobrir determinado cenário.

Um alerta pode ter sido configurado incorretamente.

Uma documentação pode ser ambígua.

Um sistema pode permitir determinada operação sem confirmação.

Uma decisão gerencial tomada seis meses atrás pode ter reduzido redundâncias.

Normalmente isso não produz um desastre.

Por quê?

Porque existe outra fatia depois.

E outra.

E outra.

Um operador erra, mas o sistema detecta.

O sistema não detecta, mas a revisão humana percebe.

A revisão não percebe, mas uma validação posterior bloqueia.

A validação falha, mas o monitoramento dispara.

E assim por diante.

O acidente aparece quando, temporariamente, os buracos das diferentes fatias ficam alinhados.

A ameaça atravessa todas as barreiras.

É como se alguém pudesse olhar através de cinco pedaços de queijo e enxergar perfeitamente o outro lado.

Nesse momento:

Houston, nós temos um problema.

Ou, para manter nossa viagem britânica:

Doctor, I think we have a problem.


🌀 A TARDIS pousa antes do incidente

Existe algo especialmente interessante no Swiss Cheese Model.

Ele nos obriga a viajar no tempo.

Quando investigamos um incidente da maneira tradicional, existe uma tendência natural de começar pelo último acontecimento.

O programa apagou o arquivo.

Quem executou?

João.

Caso encerrado.

João apagou o arquivo.

Treinamos João.

Mandamos um memorando dizendo:

“Tenham mais atenção ao apagar arquivos.”

Pronto.

Problema resolvido.

Até o próximo João.

O Swiss Cheese Model pergunta:

Por que João tinha capacidade de apagar aquele arquivo?

Outra pergunta:

Por que não havia confirmação?

Outra:

Por que não havia backup imediatamente recuperável?

Outra:

Por que o procedimento permitia aquela operação?

Outra:

Por que ninguém percebeu durante os testes que esse cenário era possível?

Outra:

Por que João estava realizando aquela atividade sob pressão às duas horas da manhã?

Outra:

Por que aquele trabalho precisava acontecer às duas horas da manhã?

Outra:

Quem decidiu isso?

Outra:

Quando essa decisão foi tomada?

Agora entramos na TARDIS.

Porque descobrimos que o incidente das 02:17 começou talvez seis meses antes.


🧀 Fatia número 1 — O programador COBOL

Vamos construir um exemplo.

Você é um programador COBOL iniciante.

Recebe uma alteração:

“Excluir registros temporários com mais de 90 dias.”

Programa simples.

Algo conceitualmente parecido com:

IF WS-DIAS > 90
    DELETE ARQUIVO
END-IF.

Você desenvolve.

Compila.

Testa.

Funciona.

Primeira fatia de queijo.

Mas existe um buraco.

A variável que calcula os dias eventualmente recebe uma data inválida.

Seu teste não cobre essa situação.

Ainda não aconteceu nada.


🧀 Fatia número 2 — Code Review

Outro desenvolvedor revisa seu código.

Ele verifica:

  • sintaxe;

  • nomes;

  • padrões;

  • fluxo;

  • chamadas;

  • tratamento de erros.

Tudo parece razoável.

A alteração é aprovada.

Segunda fatia.

Mas existe outro buraco.

O revisor também não percebe a condição envolvendo datas inválidas.

Dois buracos.

Ainda não estão alinhados necessariamente.


🧀 Fatia número 3 — Homologação

O programa vai para homologação.

Testam:

  • registro com 30 dias;

  • registro com 89;

  • registro com 90;

  • registro com 91;

  • registro com 180.

Perfeito.

Só que ninguém testa uma data zerada.

Ninguém testa 31 de fevereiro.

Ninguém testa um registro antigo migrado de outro sistema cujo campo possui um formato historicamente diferente.

Terceira fatia.

Terceiro buraco.

A ameaça continua avançando.


🧀 Fatia número 4 — Controle operacional

O programa entra em produção.

Existe uma previsão:

antes da exclusão definitiva, deveria ser produzido um relatório para conferência.

Excelente defesa.

Só existe um pequeno detalhe.

O volume cresceu muito nos últimos anos.

O relatório agora possui centenas de milhares de linhas.

Ninguém realmente o lê.

Ele existe.

É produzido.

É arquivado.

A auditoria pode verificar que o controle existe.

Todo mundo fica feliz.

Exceto o queijo.

Porque temos outro buraco.

Essa situação possui inclusive um nome extremamente importante no estudo de incidentes:

controle ritualístico.

Um mecanismo continua existindo formalmente, mas perdeu sua função prática.

O relatório nasceu para ser conferido.

Com o tempo virou:

“o relatório que precisamos gerar porque o procedimento manda.”

Isso acontece assustadoramente em ambientes corporativos.


🧀 Fatia número 5 — Backup

Mas tudo bem.

Temos backup.

A palavra mais reconfortante da informática.

Até alguém perguntar:

— Já testamos o restore?

Silêncio.

Um silêncio tão profundo que quase podemos ouvir a TARDIS estacionando.

Ter backup não significa necessariamente possuir capacidade de recuperação.

Existe uma diferença gigantesca entre:

backup realizado

e

restauração comprovadamente funcional dentro do tempo necessário.

Mais um buraco.


💥 Agora os buracos se alinham

Chega o dia.

Um conjunto de registros antigos possui datas inconsistentes.

O programa interpreta incorretamente.

A homologação nunca testou.

O code review não percebeu.

O relatório operacional é grande demais e ninguém verifica.

O job executa.

Os registros são apagados.

O backup existe.

Mas a restauração é lenta e nunca havia sido ensaiada adequadamente.

Pronto.

Incidente.

E agora surge a pergunta tradicional:

Quem escreveu o programa?

Nosso Doctor provavelmente levantaria uma sobrancelha.

Porque essa é uma pergunta extremamente conveniente.

Mas muito pobre.

O programador participou do incidente?

Sim.

Foi a causa?

Não exatamente.

Ele foi uma das fatias.


👨‍⚕️ James Reason e os dois tipos de falha

Aqui aparece uma das partes mais importantes dessa teoria.

Reason diferencia especialmente dois grupos de condições:

Falhas ativas

São erros próximos do evento.

Exemplos:

  • operador pressionou botão errado;

  • desenvolvedor criou condição incorreta;

  • administrador executou comando errado;

  • piloto selecionou opção equivocada;

  • enfermeiro administrou medicamento incorreto.

São extremamente visíveis.

Por isso recebem atenção.


🕰️ Condições latentes

Agora começam as coisas interessantes.

Condições latentes são fraquezas que podem permanecer escondidas durante semanas, meses ou anos.

Por exemplo:

  • treinamento insuficiente;

  • equipe reduzida;

  • documentação ruim;

  • arquitetura frágil;

  • alertas excessivos;

  • procedimento inadequado;

  • pressão por prazo;

  • interface confusa;

  • ausência de segregação;

  • manutenção atrasada;

  • testes incompletos;

  • metas conflitantes.

Essas condições ficam esperando.

Como Cybermen adormecidos em uma instalação esquecida.

Até surgir a combinação adequada.


🧠 O erro humano frequentemente é consequência, não origem

Essa ideia merece ser colocada em letras garrafais.

“Erro humano” não deveria encerrar uma investigação.

Deveria iniciá-la.

Quando alguém diz:

“O incidente aconteceu por erro humano.”

Nossa próxima pergunta deveria ser:

“Excelente. Agora podemos começar a investigação?”

Porque dizer que um humano errou explica aproximadamente tanto quanto dizer que um avião caiu porque deixou de voar.

Precisamos descobrir por quê.

A pessoa estava cansada?

A interface induzia ao erro?

Havia duas opções visualmente idênticas?

O procedimento estava errado?

Existia pressão para terminar rapidamente?

Era normal ignorar aquele alarme?

A pessoa havia sido treinada?

O sistema permitia desfazer?

A ação exigia dupla autorização?

Quanto mais investigamos, mais descobrimos que aquilo que chamamos de “erro humano” frequentemente é a manifestação visível de problemas sistêmicos.


🚨 Os pequenos sinais antes da invasão

Uma das missões de nossa série será procurar weak signals, os sinais fracos.

Antes do grande incidente, normalmente existem pequenas pistas.

Imagine:

segunda-feira:

RC=04.

terça:

job demorou dez minutos a mais.

quarta:

um operador precisou reiniciar manualmente.

quinta:

duas reclamações.

sexta:

um arquivo ficou próximo de 90% de utilização.

Individualmente, parecem pequenas coisas.

Em conjunto podem formar uma narrativa.

É aqui que observabilidade e cultura operacional tornam-se fundamentais.

Não basta perguntar:

“O sistema está funcionando?”

Precisamos perguntar:

“O sistema está se comportando como normalmente se comporta?”

São perguntas muito diferentes.


📊 Baseline: conheça o normal antes de procurar o anormal

Imagine um batch que normalmente processa dez milhões de registros em 45 minutos.

Hoje levou 47.

Normal.

Amanhã 48.

Normal.

Depois 51.

Hmm.

Depois 56.

Ainda funciona.

Depois 63.

Continua RC=00.

Depois 81.

RC=00 novamente.

Tudo verde.

Mas existe uma tendência.

Um iniciante frequentemente procura ABEND.

Um profissional experiente procura mudança de comportamento.

Esse é um conhecimento importantíssimo para quem entra no mainframe.

RC=00 significa apenas que determinado programa terminou segundo critérios que foram definidos como sucesso.

Não significa:

“Todo o universo está em perfeita harmonia.”


🧀 Não existe queijo perfeito

Talvez você pense:

“Então precisamos eliminar todos os buracos.”

Seria ótimo.

Também seria ótimo possuir uma TARDIS.

Na engenharia real, sistemas possuem limitações.

Pessoas possuem limitações.

Processos possuem limitações.

Recursos são finitos.

Não existe segurança absoluta.

A estratégia é criar defesa em profundidade.

Se uma barreira falhar, outra deverá impedir a propagação.

Essa filosofia aparece em:

  • segurança cibernética;

  • aviação;

  • medicina;

  • energia nuclear;

  • sistemas financeiros;

  • engenharia industrial;

  • mainframes.

Nunca confie exclusivamente em uma única proteção.


🏦 Exemplo Bellacosa Mainframe: transferência bancária

Imagine uma transferência de R$ 10 milhões.

Seria pouco prudente possuir apenas:

EXEC CICS
     TRANSFER MONEY
END-EXEC

e torcer pelo melhor.

Em um sistema sério existirão diversas barreiras:

autenticação;

autorização;

limite transacional;

validação da conta;

saldo;

controle antifraude;

segregação de funções;

confirmação;

log;

monitoramento;

reconciliação;

auditoria.

Cada uma é uma fatia do queijo.

Uma pode falhar.

Talvez duas.

O objetivo é impedir que todas falhem simultaneamente.


🛠️ Como aplicar o Swiss Cheese Model em um incidente

Agora vamos transformar teoria em método.

Imagine que ocorreu um incidente ontem.

Não comece procurando culpados.

Pegue café.

Abra um quadro.

E faça o seguinte.

Passo 1 — Defina o evento

Escreva claramente o que aconteceu.

Evite:

“O sistema deu problema.”

Prefira:

“Entre 14:03 e 14:47, transações do canal X foram processadas duas vezes.”

Precisão importa.


Passo 2 — Construa uma timeline

14:00 — deploy.

14:03 — primeiro erro.

14:04 — alerta.

14:09 — operador reconhece alerta.

14:16 — chamados aparecem.

14:22 — equipe de aplicação acionada.

14:31 — processamento interrompido.

14:47 — serviço estabilizado.

Timeline frequentemente revela coisas que narrativas escondem.


Passo 3 — Identifique as defesas esperadas

Pergunte:

O que deveria impedir isso?

Talvez:

  • teste automatizado;

  • revisão;

  • autorização;

  • monitoramento;

  • reconciliação;

  • rollback.

Cada mecanismo vira uma fatia.


Passo 4 — Descubra o buraco de cada fatia

Por que o teste não detectou?

Por que a revisão não detectou?

Por que o alerta não funcionou?

Por que o operador não percebeu?

Por que não houve rollback?

Não aceite:

“porque fulano esqueceu.”

Pergunte por que era possível esquecer.


🔍 Passo 5 — Procure condições latentes

Agora viaje meses para trás.

Houve corte de equipe?

Mudança organizacional?

Migração?

Novo fornecedor?

Pressão por entrega?

Acúmulo de dívida técnica?

Procedimento antigo?

Alertas demais?

Sistema sem manutenção?

Você ficará surpreso com quantos acidentes possuem raízes muito anteriores ao evento.


🧹 Passo 6 — Não corrija apenas o último buraco

Depois de um incidente causado por um comando incorreto, uma organização pode decidir:

“Treinaremos novamente os operadores.”

Ótimo.

Mas talvez também fosse necessário:

  • alterar a interface;

  • exigir confirmação;

  • restringir permissão;

  • registrar comando;

  • automatizar operação;

  • criar rollback;

  • melhorar documentação.

Treinamento sozinho frequentemente é a correção favorita porque é barata e transfere responsabilidade para pessoas.

Mas pessoas continuam sendo pessoas.

E continuarão errando.

Projetar sistemas seguros significa considerar essa realidade.


🔁 Passo 7 — Feche o loop

Aqui entramos no verdadeiro objetivo da nossa série:

melhoria contínua.

Incidente sem aprendizado é apenas sofrimento administrativo.

Depois do post-mortem, crie ações.

Cada ação precisa de:

responsável;

prazo;

prioridade;

evidência de conclusão;

validação posterior.

Caso contrário teremos um documento lindíssimo armazenado em algum SharePoint que ninguém jamais abrirá novamente.

Possivelmente ao lado de outros 847 post-mortems.

Todos chamados:

INCIDENT_FINAL_V2_FINAL_AGORA_VAI.docx


🪤 A grande armadilha: hindsight bias

Depois que sabemos o resultado, tudo parece óbvio.

“Como ninguém percebeu?”

Essa frase aparece depois de praticamente todos os grandes acidentes.

Mas existe um fenômeno chamado hindsight bias, o viés retrospectivo.

Nós conhecemos o final.

As pessoas naquele momento não conheciam.

Elas estavam tomando decisões com informações incompletas.

Por isso uma investigação justa pergunta:

“Com as informações disponíveis naquele instante, essa decisão parecia razoável?”

Essa pergunta muda tudo.


⚖️ Blameless não significa ausência de responsabilidade

Outra confusão comum.

Um post-mortem sem caça às bruxas não significa:

“ninguém é responsável por nada.”

Existem negligência, violações deliberadas e comportamentos imprudentes.

Eles precisam ser tratados.

Mas um ambiente que pune automaticamente qualquer erro cria outro problema:

as pessoas começam a esconder erros.

E sistemas complexos onde ninguém relata pequenos problemas são maravilhosos.

Até explodirem.


🛸 Doctor Who e o paradoxo da prevenção

Existe uma injustiça curiosa na segurança.

Quando você evita um incidente, aparentemente nada aconteceu.

Você detectou um problema.

Corrigiu.

Produção continuou.

No relatório executivo:

0 incidentes.

Alguém então pergunta:

— Por que gastamos tanto com essa equipe se nunca acontece nada?

Essa talvez seja uma das grandes ironias corporativas.

O sucesso da prevenção frequentemente parece evidência de que prevenção não era necessária.

O Doctor conhece bem esse problema.

Salva o universo.

Volta para a TARDIS.

E provavelmente ninguém aprovou sequer uma hora extra.


🧀 O queijo suíço aplicado à sua primeira semana como COBOL

Se você está começando agora, crie este hábito.

Ao escrever um programa, pergunte:

Se meu código estiver errado, o que impedirá o desastre?

Depois:

E se essa proteção também falhar?

Depois:

Existe outra?

Exemplo:

Programa gera arquivo.

Fatia 1: validação no programa.

Fatia 2: contagem de registros.

Fatia 3: totalizadores financeiros.

Fatia 4: comparação com histórico.

Fatia 5: validação antes da aplicação.

Fatia 6: possibilidade de rollback.

Agora você não está apenas programando.

Está pensando como engenheiro de confiabilidade.


🧪 Teste também o impossível

Uma das melhores lições para iniciantes:

testar apenas o caminho feliz é fácil.

Teste:

  • arquivo vazio;

  • arquivo duplicado;

  • número negativo;

  • campo inválido;

  • data impossível;

  • registro maior;

  • registro menor;

  • sequência incorreta;

  • arquivo inexistente;

  • disco cheio;

  • timeout;

  • retorno inesperado.

Pergunte constantemente:

“O que aconteceria se...?”

Essa pergunta talvez seja uma das ferramentas mais poderosas da engenharia.


👻 Easter Egg nº 1

Em Doctor Who existe uma regra quase universal:

se existe um corredor escuro onde claramente ninguém deveria entrar, alguém inevitavelmente entra.

Em TI existe uma versão semelhante:

se existe um parâmetro chamado:

BYPASS-VALIDATION=YES

alguém eventualmente usará.

Provavelmente numa sexta-feira.

Às 17:43.


🧯 Near Miss: quando o Dalek erra o tiro

Nem todo alinhamento de buracos termina em desastre.

Às vezes alguma defesa final salva o sistema.

Isso é um near miss.

Quase acidente.

E near misses são ouro.

Uma organização madura não comemora simplesmente:

“Ufa, não aconteceu nada.”

Ela pergunta:

“Por que quase aconteceu?”

Porque o universo acabou de oferecer uma investigação gratuita.

Sem clientes prejudicados.

Sem manchetes.

Sem diretor telefonando.

Estude seus near misses.

Eles são trailers dos incidentes futuros.


📚 Curiosidade: acidentes são bibliotecas

Existe um hábito poderoso para profissionais de tecnologia:

estudar acidentes de outras áreas.

Leia sobre:

aviação;

energia nuclear;

medicina;

ferrovias;

exploração espacial;

indústria química.

Por quê?

Porque tecnologias mudam.

Comportamentos sistêmicos, nem tanto.

Você começa a reconhecer padrões.

Pressão por prazo.

Alertas ignorados.

Redundância removida.

Normalização de desvios.

Comunicação falha.

Treinamento insuficiente.

Confiança excessiva na automação.

É quase assustador.

Troque cockpit por data center e certos relatórios parecem familiares.


🔄 Regeneração

E chegamos à palavra perfeita para nossa série.

No universo de Doctor Who, o Doctor não simplesmente morre.

Ele regenera.

Muda.

Aprende.

Continua.

Uma organização madura deveria fazer algo parecido depois de cada incidente.

Não restaurar simplesmente o estado anterior.

Mas perguntar:

como voltaremos melhores?

Esse é o objetivo da melhoria contínua.

Incidente.

Análise.

Aprendizado.

Mudança.

Validação.

Monitoramento.

Novo aprendizado.

Um loop.


🌀 A verdadeira mensagem do Swiss Cheese Model

Talvez o maior ensinamento seja abandonar a fantasia confortável de que acidentes possuem uma causa única.

Encontramos frequentemente diagramas assim:

João executou comando errado
        ↓
Sistema caiu

Simples.

Elegante.

Provavelmente incompleto.

A realidade costuma parecer mais assim:

pressão por prazo
        ↓
procedimento abreviado
        ↓
treinamento incompleto
        ↓
interface ambígua
        ↓
permissão excessiva
        ↓
comando incorreto
        ↓
alerta ignorado
        ↓
rollback indisponível
        ↓
INCIDENTE

Agora temos algo que pode realmente ser melhorado.


☕ Diário do Doctor

Se você guardar apenas algumas ideias desta nossa primeira viagem pela TARDIS dos incidentes, guarde estas:

Um acidente raramente nasce de uma única falha.

Existem diversas camadas de proteção.

Todas possuem fragilidades.

Incidentes surgem quando essas fragilidades se alinham.

O erro visível geralmente está próximo do fim da cadeia.

Condições latentes podem existir durante meses ou anos.

Erro humano deve iniciar perguntas, não encerrá-las.

Near misses precisam ser investigados.

Monitorar comportamento é tão importante quanto monitorar falhas.

Defesa em profundidade é melhor que confiar numa única proteção.

Post-mortems precisam produzir mudança verificável.

E talvez a mais importante:

não procure apenas quem estava segurando a chave de fenda quando a máquina explodiu. Descubra por que havia uma máquina capaz de explodir quando alguém segurasse aquela chave de fenda daquele jeito.


🧀 O último pedaço de queijo

Nosso programador COBOL iniciante fecha o notebook.

Olha para o velho mainframe.

Agora entende algo que talvez nenhum manual de sintaxe tenha explicado.

Programar não é apenas escrever instruções corretas.

É imaginar o que acontece quando alguma coisa estiver errada.

Porque estará.

Algum dia.

Em algum lugar.

Um campo virá inválido.

Um arquivo ficará cheio.

Uma rede cairá.

Uma pessoa ficará cansada.

Um procedimento estará desatualizado.

Um teste esquecerá um cenário.

Uma mensagem será interpretada incorretamente.

Não podemos eliminar completamente esses buracos.

Mas podemos evitar que se alinhem.

Lá fora ouvimos novamente:

VWORP.

VWORP.

VWORP.

A TARDIS começa a desaparecer.

O Doctor coloca a cabeça para fora da porta.

— Ah, mais uma coisa.

Olha para nosso jovem programador COBOL.

— RC=00?

O programador sorri.

— Sucesso.

O Doctor faz aquela expressão de quem acabou de encontrar algo terrivelmente interessante.

— Não. Apenas significa que o programa acredita que terminou bem.

Fecha a porta.

A TARDIS desaparece.

Na console chega uma mensagem:

JOB12345 ENDED - RC=0000

Tudo parece perfeito.

E é justamente por isso que resolvemos dar uma olhada nos logs.

Porque esta série está apenas começando.

Next stop: Normalization of Deviance.

Ou, como provavelmente diria algum operador veterano:

“Sempre fizemos desse jeito e nunca deu problema.”

Até o dia em que deu.

☕🌀


sexta-feira, 1 de janeiro de 2010

☕🔥 BUG DO MILÊNIO (Y2K) — O DIA EM QUE O MUNDO DESCOBRIU QUE O FUTURO CABIA EM 2 DÍGITOS

 

Bellacosa Mainframe e o bug do milenio y2k

☕🔥 BUG DO MILÊNIO (Y2K) — O DIA EM QUE O MUNDO DESCOBRIU QUE O FUTURO CABIA EM 2 DÍGITOS

Uma visão 10 anos depois

O Bug do Milênio não foi apenas um problema técnico.

Foi:

  • um choque filosófico,

  • um terremoto econômico,

  • uma guerra entre gerações tecnológicas,

  • um divisor entre o mundo centralizado dos mainframes e o mundo distribuído dos PCs,

  • e talvez o maior projeto coletivo da história da computação.

O mais fascinante?

O problema foi previsto em 1958.
E ignorado por quase 40 anos.


☕ COMO TUDO COMEÇOU

O mundo em 1958

Em 1958:

  • COBOL ainda estava nascendo,

  • memória era absurdamente cara,

  • armazenamento era microscópico,

  • computadores ocupavam salas inteiras,

  • e cada byte economizado importava.

Um IBM 1401 tinha:

  • cerca de 2 KB de memória.

DOIS KILOBYTES.

Hoje uma foto de WhatsApp é milhões de vezes maior.


☕ O PECADO ORIGINAL DA COMPUTAÇÃO CORPORATIVA

Datas eram gravadas assim:

Data RealGravado
196262
197575
198989

Por quê?

Porque:

  • economizava espaço,

  • reduzia custo,

  • diminuía I/O,

  • cabia nos cartões perfurados,

  • acelerava processamento.

Num cartão de 80 colunas:

  • dois bytes eram preciosos.


☕ BOB BEMER — O “PROFETA IGNORADO”

Bob Bemer, da IBM:

  • percebeu imediatamente o risco,

  • tentou alertar:

    • IBM,

    • ISO,

    • governos,

    • programadores.

Ele basicamente dizia:

“Um dia 99 vai virar 00.”

Mas ninguém queria ouvir.

Porque em 1958:

  • o ano 2000 parecia ficção científica.


☕ O PROBLEMA REAL NÃO ERA A DATA

Aqui está o detalhe profundo que muita gente não entende:

O problema NÃO era “mostrar 00”.

O problema era:

☕ LÓGICA DE NEGÓCIO

Exemplo:

Data
991228
000105

O sistema comparava numericamente:

IF DT-PAGAMENTO > DT-VENCIMENTO

E então:

000105 < 991228

O computador concluía:

“2000 aconteceu ANTES de 1999.”

E isso quebrava:

  • juros,

  • seguros,

  • aposentadorias,

  • vencimentos,

  • cálculo atuarial,

  • bolsas,

  • bancos,

  • aviação,

  • energia,

  • telecom.


☕ O VERDADEIRO PÂNICO

O medo nunca foi:

  • “o computador mostrar data errada”.

O medo era:

☠️ EFEITO CASCATA

Porque sistemas estavam interligados.

Um erro de data poderia:

  • invalidar transações,

  • gerar loop infinito,

  • corromper arquivos,

  • travar batch noturno,

  • derrubar compensação bancária,

  • falhar controle industrial.


☕ O MUNDO MAINFRAME DA ÉPOCA

Naquela época:

  • bancos,

  • governos,

  • seguradoras,

  • bolsas,

  • companhias aéreas,

  • telecomunicações

rodavam em:

  • IBM Mainframe,

  • COBOL,

  • PL/I,

  • Assembler,

  • IMS,

  • CICS,

  • DB2,

  • VSAM.

E quase tudo dependia de processamento batch.


☕ O IMPACTO DAS REDES SNA

Aqui entra um detalhe histórico gigantesco.


☕ SNA — SYSTEMS NETWORK ARCHITECTURE

A IBM criou o SNA nos anos 70.

Era:

  • centralizado,

  • hierárquico,

  • controlado,

  • extremamente confiável.

Paradigma SNA

Terminal → Controlador → Mainframe

Tudo girava ao redor do host.

O terminal:

  • era “burro”,

  • não processava quase nada.

Os famosos:

  • 3270,

  • 3278,


☕ ENTÃO CHEGA O TCP/IP

Nos anos 80 e 90:

  • PCs explodem,

  • redes LAN crescem,

  • Unix avança,

  • Internet nasce.

E surge outro paradigma:

☕ COMPUTAÇÃO DISTRIBUÍDA

Agora:

  • vários servidores,

  • várias aplicações,

  • vários bancos,

  • redes descentralizadas.


☕ DOWNSIZING — A GRANDE PROMESSA

No fim dos anos 80 surgiu a crença:

“Vamos abandonar mainframes.”

Isso ficou conhecido como:

☕ DOWNSIZING

Migrar:

  • do grande host central,

  • para servidores menores.

A promessa:

  • mais barato,

  • mais moderno,

  • mais flexível.


☕ O “NOVO MUNDO”

Diziam que o futuro era:

  • Clipper,

  • Visual Basic,

  • Delphi,

  • PowerBuilder,

  • Unix,

  • Client/Server.

E o COBOL?
Segundo muitos:

“já estava morto”.

Só que…


☕ O QUE REALMENTE ACONTECEU

O downsizing funcionou:

  • para sistemas periféricos,

  • departamentos pequenos,

  • aplicações locais.

Mas os sistemas CORE:

  • continuaram no mainframe.

Porque:

  • eram estáveis,

  • rápidos,

  • seguros,

  • absurdamente escaláveis.


☕ RIGHTSIZING — A REALIDADE

Então nasceu o termo:

☕ RIGHTSIZING

Não era:

“tirar tudo do mainframe”.

Era:

“usar a tecnologia certa para cada carga.”

Mainframe:

  • missão crítica,

  • alta escala,

  • transações massivas.

PC/Unix:

  • interface,

  • departmental,

  • aplicações locais.

Esse foi o nascimento da arquitetura híbrida moderna.


☕ PARADIGMAS DE PROGRAMAÇÃO

O Y2K expôs uma guerra de paradigmas.


☕ MUNDO MAINFRAME

Paradigma:

  • procedural,

  • batch,

  • orientado a registros,

  • altíssima eficiência.

Exemplo COBOL:

READ ARQUIVO
AT END MOVE 'S' TO EOF
END-READ

Foco:

  • performance,

  • previsibilidade,

  • I/O.


☕ MUNDO CLIENT/SERVER

Paradigma:

  • orientado a eventos,

  • GUI,

  • objetos,

  • interação humana.

Exemplo Visual Basic:

Private Sub Botao_Click()

☕ O Y2K MOSTROU ALGO BRUTAL

Sistemas “antigos”:

  • ainda sustentavam o planeta.

Enquanto muita tecnologia “moderna”:

  • ainda era imatura.


☕ O PASSO A PASSO DO CAOS

1. Anos 60–70

Economia de bytes.


2. Anos 80

Primeiros sinais aparecem no mercado financeiro.


3. Final dos 80

Downsizing promete resolver tudo.


4. Início dos 90

Percebem:

  • sistemas antigos NÃO serão substituídos.


5. 1995–1999

Pânico mundial.


☕ A MAIOR CORRIDA TECNOLÓGICA DA HISTÓRIA

Empresas:

  • contratavam qualquer programador COBOL disponível,

  • aposentados voltaram ao mercado,

  • havia guerra salarial,

  • consultorias disputavam profissionais.

Foi literalmente:

  • mobilização global.


☕ AS DUAS GRANDES SOLUÇÕES


☕ 1. EXPANSÃO

Transformar:

AAMMDD

em:

AAAAMMDD

Problema:

  • quebra layout,

  • muda tamanho de registro,

  • afeta VSAM,

  • afeta copybooks,

  • afeta interfaces,

  • afeta rede,

  • afeta banco.

Era cirurgia cardíaca em avião voando.


☕ 2. JANELAMENTO (WINDOWING)

A solução “esperta”.

Usava:

  • ano pivot.

Exemplo:

  • pivot = 40.

Então:

  • 39 = 2039,

  • 41 = 1941.


☕ EXEMPLO REAL COBOL

Original:

IF DT-PAGAMENTO > DT-VENCIMENTO

Corrigido:

CALL 'JANELAMENTO'

Convertendo temporariamente:

  • para AAAAMMDD.


☕ EASTER EGG HISTÓRICO

Muitos sistemas:

  • escolheram pivot 2040.

Resultado?

O problema foi apenas EMPURRADO.

Ou seja:

☕ O BUG DO MILÊNIO AINDA EXISTE

Só está dormindo.


☕ Y2K38 — O PRÓXIMO FANTASMA

Unix usa:

  • segundos desde 01/01/1970.

Em 32 bits:

  • isso estoura em 2038.

Ou seja:

  • outra bomba relógio histórica.


☕ IMPACTO NO MUNDO INFORMÁTICO

O Y2K mudou tudo.


☕ 1. GOVERNANÇA DE TI

Nasce:

  • inventário de sistemas,

  • gestão de dependência,

  • análise de impacto.


☕ 2. TESTES CORPORATIVOS

Antes:

  • quase ninguém fazia testes massivos integrados.

Depois do Y2K:

  • virou obrigatório.


☕ 3. DOCUMENTAÇÃO

Empresas descobriram:

  • ninguém sabia tudo que existia.


☕ 4. O COBOL SOBREVIVEU

E mais:

provou ser resiliente.


☕ 5. MAINFRAME SOBREVIVEU AO FUNERAL

O mundo percebeu:

substituir sistema crítico é MUITO mais difícil do que vender PowerPoint.


☕ A MAIOR LIÇÃO DO Y2K

O problema nunca foi técnico.

Foi:

  • humano,

  • econômico,

  • político,

  • organizacional.

Porque:

  • TODOS sabiam do problema,

  • durante QUARENTA anos.

E ninguém quis pagar a conta antes.


☕ CONCLUSÃO

O Bug do Milênio:

  • não foi um bug simples,

  • foi um retrato da evolução da computação.

Ele revelou:

  • limitações do hardware,

  • mudanças de paradigma,

  • disputa entre arquiteturas,

  • arrogância tecnológica,

  • dependência de legado,

  • e a incrível resistência dos sistemas mainframe.

E talvez a maior ironia da história seja esta:

Os sistemas que “iriam morrer”…
foram justamente os que salvaram o mundo da crise.


terça-feira, 29 de dezembro de 2009

Que beijinho mais gostoso o Luigi e os Esquilos natalinos.

Bellacosa Mainframe e os esquilinhos natalinos

☕ Um Café no Bellacosa Mainframe

🎄 Um Natal Guardado no Backup da Memória

Ou: quando Luís tinha três anos, a lareira estava acesa e três esquilinhos de Natal ainda sabiam cantar

Existem backups que fazemos porque somos profissionais responsáveis.

Existem backups porque o auditor exige.

Existem aqueles que ninguém sabe exatamente por que ainda estão guardados, mas todo mundo tem medo de apagar.

E existem alguns poucos que não estão em fita, disco, nuvem ou cartucho.

Estão dentro da gente.

Às vezes passam anos sem serem montados.

Até que alguma coisa — uma música, um cheiro, uma fotografia, um enfeite velho encontrado no fundo de uma caixa — executa silenciosamente:

RESTORE MEMORIA.NATAL.2000

E, de repente, tudo volta.

A árvore.

A lareira.

Os presentes.

A família.

E um pequeno Luís, com apenas três anos de idade, olhando para o Natal como somente uma criança consegue olhar.

Como se aquilo tudo fosse absolutamente verdadeiro.


🎄 A árvore não era uma árvore

Para um adulto, árvore de Natal é decoração.

Você monta.

Desembaraça aquele maldito pisca-pisca que passou onze meses dentro de uma caixa desenvolvendo espontaneamente técnicas avançadas de macramê.

Pendura bolas.

Coloca alguns enfeites.

Tenta descobrir por que metade das lâmpadas não funciona.

E pronto.

Árvore montada.

Para uma criança de três anos, porém, aquilo era outra coisa.

Era uma instalação mágica no meio da sala.

Durante quase todo o ano aquele espaço obedecia às leis normais da física doméstica.

Mas chegava dezembro e aparecia ali uma árvore coberta de luzes, cores, pequenos personagens e objetos brilhantes.

O mundo havia mudado.

E ninguém parecia particularmente preocupado com isso.

Os adultos continuavam andando pela casa normalmente.

Luís, provavelmente, ainda não tinha aprendido essa estranha capacidade que adquirimos depois de crescer:

a capacidade de deixar de achar maravilhoso aquilo que vemos todos os anos.

Para ele, cada luz merecia ser observada.

Cada enfeite tinha importância.

Cada pacote que aparecia debaixo da árvore era um novo mistério colocado em produção.

E havia uma pergunta fundamental:

o que será que tem ali dentro?


🐿️ Então entravam em produção os esquilinhos

Ah, os esquilinhos cantantes.

Hoje podemos descrevê-los friamente.

Brinquedos natalinos.

Decoração eletrônica.

Pequenos bonecos mecânicos que cantavam músicas de Natal.

Tudo tecnicamente correto.

E absolutamente incapaz de explicar o que eles realmente eram.

Porque dentro daquela casa, naquele Natal, aqueles esquilinhos faziam parte do espetáculo.

Cantavam.

Mexiam-se.

Animavam os enfeites.

E havia um menino de três anos assistindo.

A engenharia interna podia ser ridiculamente simples: um pequeno motor elétrico, algumas engrenagens, alto-falante, pilhas e um circuito provavelmente mais humilde que muita calculadora de bolso.

Mas experimente explicar isso para Luís.

Não.

Os esquilos cantavam.

Fim da documentação técnica.

E talvez essa seja uma das coisas mais bonitas da infância.

A criança ainda não precisa desmontar a magia para compreender o mecanismo.

Nós, adultos, olhamos e pensamos:

motor, pilha, engrenagem, gravação.

A criança olha e pensa:

O ESQUILO ESTÁ CANTANDO!

E quem dos dois realmente entendeu melhor aquele Natal?

Tenho minhas dúvidas.


🔥 E havia uma lareira acesa

Essa parte muda tudo.

Porque Natal também é cheiro.

É temperatura.

É som.

É luz.

A lareira acesa transformava a sala.

O fogo crepitava enquanto as luzes da árvore piscavam.

De um lado, aquele amarelo vivo das chamas.

Do outro, pequenas luzes coloridas espalhadas pelos galhos.

E entre essas duas fontes de luz estava a família.

Talvez conversando.

Talvez rindo.

Talvez alguém reclamando de alguma coisa absolutamente irrelevante que, vinte anos depois, ninguém conseguiria sequer recordar.

É curioso.

Naquele momento ninguém provavelmente pensava:

“Estamos vivendo uma memória que um dia será preciosa.”

Nós nunca pensamos.

Esse é um dos grandes bugs da existência.

Os momentos mais importantes raramente aparecem acompanhados de uma mensagem:

ICH00001I ATENÇÃO: MOMENTO FELIZ EM EXECUÇÃO

Não existe alerta.

Não aparece janela perguntando:

Deseja salvar este instante permanentemente?

Você simplesmente vive.

A criança brinca.

Alguém coloca mais lenha na lareira.

Os esquilos cantam outra vez.

Uma pessoa atravessa a sala.

Outra tira uma fotografia.

Alguém ri.

E o instante passa.

Só muitos anos depois descobrimos que aquilo foi gravado.


🎁 Debaixo da árvore existia o maior datacenter de mistérios do universo

Os presentes.

Para uma criança de três anos, um pacote embrulhado é praticamente uma falha deliberada de segurança da informação.

Existe alguma coisa ali.

Os adultos sabem o que é.

Ele não sabe.

Portanto, naturalmente, começa uma operação de inteligência.

Sacudir discretamente.

Examinar dimensões.

Tentar olhar pelas laterais.

Avaliar peso.

Comparar com brinquedos conhecidos.

Perguntar:

— O que é?

Receber a resposta universal dos adultos:

— Depois você vai descobrir.

Uma crueldade psicológica perfeitamente aceita durante o Natal.

E então chegava o momento de abrir.

O papel, cuidadosamente colocado algumas horas antes, adquiria expectativa de vida inferior à de um job submetido com JCL errado.

Rasga daqui.

Fita adesiva voando dali.

Caixa aberta.

Olhos arregalados.

E naquele momento o objeto quase importava menos que a descoberta.

Porque havia felicidade.

Daquela felicidade infantil que ainda não aprendeu a fazer análise de custo-benefício.


👨‍👩‍👦 Mas o verdadeiro Natal estava em volta da árvore

É isso que os anos ensinam.

Na época olhamos as fotografias e vemos os presentes.

Depois de algumas décadas, olhamos novamente e vemos as pessoas.

Quem estava sentado naquele sofá?

Quem colocou os presentes ali?

Quem preparou a comida?

Quem riu daquela piada?

Quem acendeu a lareira?

Quem apertou o botão para fazer os esquilinhos cantarem pela décima sétima vez porque uma criança de três anos queria ouvir novamente?

É aí que a fotografia muda.

Quando somos jovens, enxergamos o cenário.

Quando envelhecemos, começamos a enxergar o tempo.

E percebemos uma coisa extraordinária:

éramos felizes e talvez nem soubéssemos exatamente o tamanho daquela felicidade.

Não porque tudo fosse perfeito.

Famílias nunca são.

Casas nunca são.

Natais nunca são.

Certamente alguém se irritou.

Alguma coisa queimou na cozinha.

Alguém chegou atrasado.

Talvez faltasse uma pilha justamente no brinquedo que precisava de quatro.

Provavelmente existiram pequenas discussões e contratempos.

Mas a memória possui seu próprio sistema de compressão.

Ela vai descartando os arquivos temporários.

E conserva aquilo que realmente interessa.

A árvore iluminada.

A lareira.

Os presentes.

Os esquilos cantando.

E Luís com três anos.


🧒 Três anos

Há algo quase brutalmente bonito nessa idade quando observada muitos anos depois.

Porque naquela época parecia normal.

Luís tinha três anos.

No ano seguinte teria quatro.

Depois cinco.

Seis.

Dez.

Quinze.

Dezoito.

A matemática é simples.

O coração não acha graça nenhuma nela.

Porque aquele menino específico existiu durante pouquíssimo tempo.

O Luís de três anos teve aproximadamente 365 dias de produção.

Depois recebeu upgrade obrigatório.

LUIS.V3 → LUIS.V4

E nunca mais foi possível fazer rollback.

Claro que continua sendo Luís.

Mas aquela voz, aquele tamanho, aquela maneira de olhar os esquilinhos, aquela compreensão particular do mundo...

pertencem àquela versão.

Descontinuada.

Sem suporte oficial.

Mas perfeitamente executável dentro da memória do pai.


🐿️ E os esquilinhos continuam cantando

Essa talvez seja a parte mais curiosa.

Objetos sobrevivem de maneiras estranhas.

Às vezes desaparecem.

Quebram.

São guardados.

Mudam de casa.

Ficam décadas dentro de caixas.

Ou simplesmente somem naquela misteriosa dimensão paralela onde vivem meias sem par, cabos de equipamentos que ninguém mais possui e controles remotos de aparelhos aposentados em 2007.

Mas alguns objetos deixam de ser objetos.

Viram ponteiros.

Você pensa no esquilinho e ele aponta para a árvore.

A árvore aponta para a sala.

A sala aponta para a lareira.

A lareira aponta para a família.

E a família aponta para um pequeno menino de três anos.

Pronto.

Um brinquedo eletrônico barato acaba de montar um filesystem inteiro dentro da cabeça.


☕ Talvez seja isso a saudade

Durante muito tempo achei curioso quando as pessoas tratavam saudade apenas como tristeza.

Não é.

Pelo menos não necessariamente.

Existe uma saudade que dói.

Mas existe também aquela saudade boa.

A que faz sorrir antes de apertar um pouquinho o peito.

Você olha para trás e não pensa:

“Eu quero voltar.”

Porque sabemos que não podemos.

E talvez nem devêssemos.

Você pensa:

“Que bom que eu estive lá.”

Que bom que houve aquela casa.

Que bom que aquela árvore existiu.

Que bom que a lareira esteve acesa.

Que bom que havia presentes espalhados.

Que bom que aqueles ridículos e maravilhosos esquilinhos cantavam.

Que bom que a família estava ali.

E, principalmente:

que privilégio ter conhecido Luís com três anos.


🎄 O Natal que nunca termina

Talvez um dia alguém encontre uma fotografia daquele Natal.

Talvez veja apenas uma criança, uma árvore e alguns enfeites antigos.

Quem olhar de fora não ouvirá nada.

Fotografias são terrivelmente silenciosas.

Mas quem estava lá consegue ouvir.

Consegue ouvir a lenha estalando.

As conversas.

As risadas.

O papel dos presentes sendo rasgado.

E, em algum canto daquela memória, três pequenos esquilos eletrônicos iniciando novamente sua apresentação natalina.

Talvez Luís nem se lembre de todos os detalhes.

É natural.

Ele tinha três anos.

Mas alguém lembra.

E enquanto alguém lembrar, aquele Natal continua existindo em algum pequeno volume protegido do grande mainframe da memória.

Sem necessidade de energia.

Sem contrato de suporte.

Sem risco de obsolescência.


Hoje a árvore pode ser outra.

Os presentes certamente são outros.

As pessoas cresceram.

Algumas casas ficaram para trás.

A vida executou milhares de jobs desde então.

Mas existe uma pequena LPAR que nunca foi desligada.

Lá é Natal.

A lareira continua acesa.

A árvore está iluminada.

Os presentes ainda esperam para ser abertos.

A família está reunida.

E um pequeno Luís de três anos olha fascinado para alguns esquilinhos que começaram a cantar.

Não precisamos voltar.

Basta lembrar.

E sorrir.

Porque algumas das coisas mais bonitas que possuímos não estão no presente.

Também não ficaram exatamente no passado.

Elas simplesmente passaram a morar conosco.

☕🎄🐿️

E, enquanto houver alguém capaz de executar aquele velho RESTORE, os esquilinhos continuarão cantando.

 Feliz Natal do pequeno Luigi para a famiglia Bellacosa. O pequenino Luigi aprontando arte, brincando com os Esquilinhos dançantes. Na época para ele era uma loucura ouvir esses esquilinhos, ele adorava brincar, agarrar, abraçar, apertar as musiquinhas sempre fazendo bagunca com eles.




https://eljefemidnightlunch.blogspot.com/2020/08/dona-mercedes-o-core-system-da-minha.html

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