☕ 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

terça-feira, 10 de janeiro de 2017

🎼 Leitmotif : Quando um Programador COBOL Descobre que John Williams Também Programava... Só que em Notas Musicais

 

Bellacosa Mainframe apresenta o leitmotif usado para criar trilhas sonoras ost soundtracks

🎼 Leitmotif sem Mistérios

Quando um Programador COBOL Descobre que John Williams Também Programava... Só que em Notas Musicais

Existe um momento curioso na vida de qualquer pessoa que ama cinema, anime, séries ou jogos.

Você está andando pela casa.

Talvez preparando um café.

Talvez mexendo em um velho programa COBOL.

Talvez olhando para uma tela verde que parece ter sobrevivido a três gerações de diretores, quatro fusões bancárias e pelo menos dois fins do mundo previstos pela imprensa.

De repente, alguém assobia:

tan tan tan taaaaan...

E, imediatamente, sua mente viaja.

Você não precisa ver o chapéu.

Não precisa ver o chicote.

Não precisa ver a pedra gigante descendo pelo templo.

Você já sabe.

É Indiana Jones.

Outra pessoa faz:

tan tan tan ta-tan ta-tan...

E surge Darth Vader caminhando por um corredor, acompanhado por soldados imperiais, oficiais nervosos e algum técnico da Estrela da Morte tentando descobrir quem autorizou aquela mudança diretamente em produção.

Como poucas notas conseguem fazer isso?

Como uma sequência tão pequena consegue carregar um personagem, uma história, um universo inteiro?

A resposta está em uma das ferramentas mais poderosas da composição musical:

O leitmotif


O que é um leitmotif?

Leitmotif é uma pequena ideia musical associada a algo específico.

Pode representar:

  • um personagem;

  • um lugar;

  • uma emoção;

  • um objeto;

  • uma ameaça;

  • uma lembrança;

  • um povo;

  • um destino;

  • uma ideia abstrata.

Ele pode ter apenas algumas notas.

Às vezes quatro.

Às vezes três.

Às vezes uma pequena sequência rítmica.

Mas, quando bem construído, funciona como uma assinatura.

Você ouve e reconhece.

É quase um identificador musical.

No mundo do mainframe, poderíamos dizer que o leitmotif é o PROGRAM-ID da emoção.

Ele informa ao cérebro:

“Atenção. Este tema pertence a este personagem.”

Mesmo quando o personagem ainda não apareceu.

Mesmo quando aparece apenas sua sombra.

Mesmo quando alguém menciona seu nome.

Mesmo quando a história quer sugerir que sua presença ainda está viva.


Antes de John Williams, veio Wagner

Embora muita gente associe leitmotifs a filmes como Star Wars, Indiana Jones ou Harry Potter, a ideia é muito mais antiga.

Richard Wagner utilizou extensivamente essa técnica em suas óperas.

Ele criou temas associados a:

  • personagens;

  • espadas;

  • maldições;

  • deuses;

  • famílias;

  • destinos;

  • objetos mágicos.

A música não estava apenas acompanhando a história.

Ela estava comentando a história.

Ela revelava relações escondidas.

Antecipava tragédias.

Ligava personagens.

Recordava eventos anteriores.

Era quase um banco de dados emocional.

Cada motivo funcionava como uma chave.

Quando surgia, acionava uma série de associações na mente do público.

John Williams, décadas depois, levou essa lógica para o cinema popular.

E fez isso com tanta eficiência que milhares de pessoas passaram a reconhecer personagens apenas por algumas notas.


Leitmotif não é apenas uma melodia bonita

Aqui começa o primeiro erro dos iniciantes.

Muita gente imagina que um leitmotif precisa ser uma música completa.

Não precisa.

Na verdade, ele funciona melhor quando é pequeno.

Um leitmotif eficiente pode ser composto por:

  • poucas notas;

  • um ritmo marcante;

  • um intervalo incomum;

  • uma direção melódica clara;

  • uma pausa memorável.

Ele não precisa contar toda a história.

Precisa apenas carregar o DNA dela.

Imagine um programa COBOL gigantesco.

Milhares de linhas.

Dezenas de arquivos.

Centenas de parágrafos.

Mas tudo começa com algumas definições fundamentais.

O leitmotif é isso.

É o COPYBOOK emocional da trilha.


O cérebro ama padrões

Nosso cérebro foi construído para reconhecer padrões.

Reconhecemos rostos.

Vozes.

Passos.

Cheiros.

Ritmos.

Sons.

É por isso que uma criança consegue reconhecer uma música antes mesmo de saber explicar o que é uma nota.

Ela não pensa:

“Isto é uma sequência ascendente com determinado intervalo.”

Ela pensa:

“Eu conheço isso.”

O leitmotif funciona exatamente nesse nível.

Ele contorna a análise racional.

Vai direto para a memória.

É quase um acesso indexado.

Sem necessidade de varredura completa.

Um verdadeiro VSAM musical.


Indiana Jones e o chamado da aventura

O tema de Indiana Jones é um exemplo perfeito.

Ele possui energia.

Movimento.

Heroísmo.

Certo exagero.

Certa alegria.

Não é apenas uma música de ação.

É uma música que diz:

“Levante. Existe uma aventura esperando.”

O tema poderia facilmente ser apenas triunfal.

Mas ele possui algo a mais.

Ele parece avançar.

Parece caminhar.

Parece saltar.

Parece tropeçar, recuperar o chapéu e continuar correndo.

Esse é um detalhe importante.

Um bom leitmotif não representa apenas quem o personagem é.

Ele representa como ele se move pelo mundo.

Indiana Jones não é um herói imóvel.

Ele corre.

Erra.

Apanha.

Escapa.

Improvisa.

Por isso seu tema não soa como uma estátua.

Soa como uma perseguição.


Darth Vader e o peso do sistema

A Marcha Imperial possui outra lógica.

Ela é pesada.

Regular.

Militar.

Autoritária.

Os acordes parecem blocos.

As notas não pedem licença.

Elas entram.

O ritmo lembra uma tropa avançando.

A música diz:

“A estrutura chegou.”

Não é apenas Darth Vader.

É o Império.

É a máquina.

É o poder burocrático, militar e tecnológico esmagando tudo pela frente.

No Bellacosa Mainframe, seria o equivalente a ouvir o som de um job crítico entrando na fila com prioridade absoluta, consumindo CPU, memória e a esperança de todos os demais usuários.

O leitmotif de Vader não acompanha apenas o personagem.

Ele anuncia o impacto de sua presença.


Tubarão: quando duas notas bastam

Talvez um dos exemplos mais impressionantes seja o tema de Tubarão.

Duas notas.

Apenas duas.

Repetidas.

Lentas.

Depois mais rápidas.

Mais próximas.

Mais intensas.

Isso mostra algo fundamental:

O poder de um motivo não depende de quantidade.

Depende de contexto.

Depende de repetição.

Depende de expectativa.

Depende do que a história ensinou o público a sentir quando aquela sequência aparece.

Depois de algum tempo, você nem precisa ver o tubarão.

As notas já bastam.

O som se transforma na criatura.

É como um código de erro.

Você vê o número e já sabe que algo ruim aconteceu.


Era Uma Vez no Oeste e o assobio que atravessa o deserto

Ennio Morricone entendia que identidade musical não nasce apenas de melodias.

Nasce também do timbre.

Um assobio pode ser um personagem.

Uma harmônica pode ser um passado.

Uma guitarra pode ser um duelo.

Uma voz sem palavras pode ser uma paisagem inteira.

Em Era Uma Vez no Oeste, a música não apenas acompanha o cenário.

Ela cria o espaço.

Você sente o calor.

A poeira.

A distância.

A espera.

O silêncio.

Morricone compreendia uma verdade poderosa:

O instrumento escolhido também conta a história.

A mesma melodia tocada em um piano infantil, uma tuba, uma harmônica ou um coral terá significados completamente diferentes.

O código pode ser o mesmo.

Mas o ambiente de execução muda tudo.


Leitmotif é como uma sub-rotina

Agora entramos na parte que qualquer programador COBOL reconhece imediatamente.

Imagine que você tem uma pequena rotina:

PERFORM TEMA-DO-HEROI.

Ela pode ser chamada em vários momentos.

Na primeira vez, o herói está começando sua jornada.

Então o tema aparece fraco.

Talvez em uma flauta.

Talvez incompleto.

Depois o herói vence sua primeira batalha.

O mesmo tema retorna.

Agora com cordas.

Mais tarde, ele perde alguém importante.

O tema aparece lento.

Em tom menor.

Quase destruído.

No final, quando finalmente aceita seu destino, a mesma melodia surge completa.

Com orquestra.

Metais.

Percussão.

Coral.

O tema não mudou de identidade.

Mudou de estado.

Exatamente como um programa que recebe novos parâmetros.


A mesma melodia pode viver muitas vidas

Um dos maiores segredos dos grandes compositores é não criar uma música diferente para cada cena.

Eles criam uma identidade e depois a transformam.

Um leitmotif pode aparecer:

  • rápido;

  • lento;

  • alegre;

  • triste;

  • sombrio;

  • infantil;

  • heroico;

  • ameaçador;

  • incompleto;

  • invertido;

  • escondido no baixo;

  • tocado por um único instrumento;

  • executado por uma orquestra inteira.

Essa transformação acompanha a narrativa.

O público talvez nem perceba conscientemente.

Mas sente.

Quando um tema conhecido aparece de maneira diferente, o cérebro entende:

“Algo mudou.”

Essa é uma das formas mais sofisticadas de contar histórias sem palavras.


O motivo pode contar o que o personagem não diz

Imagine um personagem sorrindo.

Ele parece feliz.

Mas, ao fundo, surge uma versão triste de seu tema.

A música informa que o sorriso é falso.

Agora imagine um vilão falando calmamente.

Nada visualmente indica perigo.

Mas uma pequena parte de seu motivo aparece nos graves.

O público entende que algo está errado.

O leitmotif pode revelar:

  • medo escondido;

  • amor não declarado;

  • culpa;

  • conexão entre personagens;

  • destino inevitável;

  • lembrança reprimida;

  • ameaça futura.

Ele é uma espécie de comentário secreto da narrativa.

Quase como um log do sistema.

O usuário vê uma tela tranquila.

Mas o log já registrou que o desastre começou.


Não confunda leitmotif com trilha de fundo

Uma trilha de fundo pode apenas criar clima.

Tristeza.

Suspense.

Ação.

Romance.

O leitmotif possui identidade.

Ele está ligado a algo específico.

Por exemplo:

Uma música triste genérica pode tocar durante uma despedida.

Mas, se aquela música contém o tema do personagem que morreu, ela ganha outro significado.

Ela não representa apenas tristeza.

Representa aquela pessoa.

A memória dela.

Sua ausência.

Sua presença invisível.

É aí que a trilha deixa de ser decoração.

E passa a ser narrativa.


Como criar um leitmotif do zero

Agora vem a parte prática.

Você não precisa começar escrevendo uma sinfonia.

Comece como um programador começaria.

Com uma definição simples.


Etapa 1 — Defina o objeto musical

Pergunte:

O que esse tema representa?

Pode ser:

  • um herói;

  • uma cidade;

  • uma ameaça;

  • uma máquina;

  • uma lembrança;

  • uma guilda;

  • um sistema antigo;

  • uma jornada.

Não tente representar tudo ao mesmo tempo.

Um tema sobre coragem, medo, saudade, raiva, amor, tecnologia, guerra e café provavelmente não representará nada com clareza.

Escolha um núcleo.


Etapa 2 — Defina três palavras

Descreva o tema com três palavras.

Exemplo:

Herói veterano

  • cansado;

  • digno;

  • persistente.

Vilão tecnológico

  • frio;

  • preciso;

  • inevitável.

Cidade antiga

  • misteriosa;

  • grandiosa;

  • decadente.

Essas palavras orientarão:

  • ritmo;

  • velocidade;

  • instrumento;

  • direção melódica;

  • intensidade.


Etapa 3 — Escolha um ritmo

Antes das notas, bata o ritmo na mesa.

Faça algo simples:

TAN — TAN TAN — TAAAAAN

Ou:

TAN TAN TAN — pausa — TAN

O ritmo muitas vezes é mais memorável do que as próprias notas.

Você pode trocar todas as notas e ainda reconhecer um tema pelo ritmo.

É como a estrutura de um registro.

Os valores mudam.

O layout permanece.


Etapa 4 — Use poucas notas

Comece com três a cinco notas.

Não tente criar vinte.

Exemplo:

Dó — Mi — Sol — Fá

Toque.

Repita.

Depois altere uma nota.

Dó — Mi — Sol — Lá

Compare.

Agora mude o ritmo.

Depois faça a sequência descer.

Sol — Mi — Ré — Dó

A partir dessas pequenas experiências, algo começa a ganhar personalidade.


Etapa 5 — Crie uma surpresa

Uma melodia memorável geralmente possui algo esperado e algo inesperado.

Você repete duas notas.

Depois salta.

Ou sobe.

Depois cai.

Ou faz uma pausa onde o ouvinte esperava continuidade.

Essa pequena quebra é a assinatura.

Sem surpresa, o tema pode soar correto.

Mas genérico.

O cérebro gosta de padrões.

Mas lembra das irregularidades.


Etapa 6 — Escolha o timbre

Agora pergunte:

Quem toca esse tema?

Se for um aventureiro:

  • trompa;

  • cordas;

  • percussão.

Se for uma lembrança:

  • piano;

  • flauta;

  • caixa de música.

Se for um vilão:

  • metais graves;

  • sintetizador;

  • coral;

  • contrabaixo.

Se for um mundo antigo:

  • instrumentos acústicos;

  • vozes;

  • sons ambientais;

  • percussão ritual.

O timbre é como o ambiente do mainframe.

O mesmo programa executado em contextos diferentes pode produzir experiências completamente distintas.


Um exemplo Bellacosa Mainframe

Vamos imaginar um personagem:

Um velho programador entra sozinho no data center durante a madrugada para corrigir o último erro antes da aposentadoria.

Três palavras:

  • solitário;

  • experiente;

  • determinado.

Ritmo:

TAN — TAN — TAN TAN — TAAAAAN

Notas possíveis:

Ré — Fá — Mi — Lá — Ré

Instrumento inicial:

Piano elétrico.

Depois:

Cordas graves.

No final:

Metais e coral.

A primeira versão poderia representar o cansaço.

A segunda, o perigo.

A terceira, a vitória.

A quarta, a despedida.

O mesmo motivo.

Quatro estados.

Uma narrativa inteira.


A importância do silêncio

Morricone entendia isso.

John Williams também.

Joe Hisaishi também.

Yoko Kanno também.

Silêncio não é ausência de música.

É espaço.

É expectativa.

É contraste.

Um motivo tocado após cinco segundos de silêncio pode ter muito mais força do que uma orquestra tocando sem parar.

Na engenharia de sistemas, ninguém presta atenção em um alarme que soa o tempo inteiro.

Mas um único alerta no meio do silêncio...

Esse muda tudo.


Leitmotif nos animes

Os animes utilizam essa técnica de maneira brilhante.

Em Attack on Titan, determinados temas carregam guerra, destino, liberdade e tragédia.

Em Made in Abyss, melodias reaparecem alteradas, lembrando que o fascínio e o horror pertencem ao mesmo mundo.

Em Frieren, temas suaves ajudam a transformar tempo, memória e saudade em algo quase físico.

Em filmes do Studio Ghibli, Joe Hisaishi cria melodias simples que parecem ter existido desde sempre.

Em jogos como Final Fantasy, Nobuo Uematsu construiu identidades musicais que continuam vivas décadas depois.

Esses compositores não escrevem apenas música.

Eles escrevem memória.


O erro do excesso

Um iniciante frequentemente acredita que complexidade gera qualidade.

Então adiciona:

  • muitas notas;

  • muitos acordes;

  • muitos instrumentos;

  • muitas mudanças;

  • muitos efeitos.

O resultado pode impressionar tecnicamente.

Mas não grudar.

Um bom leitmotif precisa sobreviver sem produção.

Se você consegue assobiá-lo...

Ele funciona.

Se precisa de oitenta instrumentos, vinte camadas e um manual técnico para ser reconhecido...

Talvez ainda não esteja pronto.


O teste do assobio

Esse é um dos testes mais simples e cruéis.

Assobie seu tema.

Sem acompanhamento.

Sem bateria.

Sem efeitos.

Sem orquestra.

Ele ainda tem identidade?

Você consegue repeti-lo?

Alguém consegue lembrar depois?

Se sim, existe uma boa base.

Se não, continue reduzindo.

Muitas vezes, a força surge quando você remove.

Não quando adiciona.


A música como engenharia emocional

Essa é talvez a maior ligação entre composição e programação.

Ambas trabalham com:

  • padrões;

  • repetição;

  • variação;

  • estrutura;

  • modularidade;

  • expectativa;

  • dependência;

  • reutilização.

Um tema musical bem escrito é quase um módulo.

Pode ser chamado.

Alterado.

Executado em outro contexto.

Combinado com outros temas.

Invertido.

Fragmentado.

Expandido.

Mas continua reconhecível.

O grande compositor não joga notas aleatórias.

Ele projeta relações.


Quando dois leitmotifs se encontram

Existe ainda uma técnica maravilhosa.

Misturar dois temas.

Imagine um herói e um vilão.

Cada um possui seu leitmotif.

Durante a batalha final, os dois aparecem simultaneamente.

Um nas cordas.

Outro nos metais.

Eles brigam musicalmente.

Depois um domina.

Ou os dois se fundem.

Isso pode simbolizar:

  • confronto;

  • união;

  • parentesco;

  • transformação;

  • corrupção;

  • reconciliação.

É quase um MERGE musical.

Dois arquivos.

Duas identidades.

Uma nova saída.


O leitmotif também pode falhar

Assim como qualquer projeto, ele pode sofrer problemas.

Motivo genérico

Parece com centenas de outros.

Motivo longo demais

Difícil de memorizar.

Falta de repetição

O público não aprende a reconhecê-lo.

Excesso de repetição

Perde impacto.

Instrumentação incoerente

O som não combina com a identidade.

Transformação excessiva

Muda tanto que deixa de ser reconhecível.

É preciso equilíbrio.

O motivo precisa evoluir sem perder o nome.

Como um sistema legado modernizado corretamente.


A lição de John Williams

John Williams não criou apenas músicas memoráveis.

Ele entendeu algo fundamental:

O público precisa de âncoras.

Em mundos gigantescos, cheios de personagens, planetas, batalhas e conflitos, a música ajuda a organizar a experiência.

Ela diz:

  • quem chegou;

  • o que está ameaçado;

  • o que foi perdido;

  • o que está retornando;

  • o que ainda vive.

É uma espécie de mapa emocional.

Sem ele, muitas cenas ainda funcionariam.

Mas perderiam profundidade.


A lição de Morricone

Morricone mostrou que não é preciso obedecer às regras tradicionais.

Uma trilha pode usar:

  • assobios;

  • chicotes;

  • sinos;

  • respiração;

  • gritos;

  • ruídos;

  • instrumentos incomuns.

Ele tratava som como matéria-prima.

Isso é importante.

Você não precisa começar com uma orquestra.

Pode começar com um ruído.

Uma porta.

Uma máquina.

Um apito.

Uma tecla.

Um ventilador.

Um terminal.

Talvez o próximo grande leitmotif de um programador COBOL comece com o som de uma impressora matricial.


Conclusão: o COPYBOOK da memória

Um leitmotif é pequeno.

Mas carrega muito.

Poucas notas.

Uma identidade.

Uma emoção.

Uma promessa.

Ele pode atravessar filmes, temporadas, décadas e gerações.

Pode ser tocado por uma orquestra.

Assobiado por uma criança.

Executado em um piano.

Reproduzido em um celular.

E continuará sendo reconhecido.

Essa é sua força.

No Bellacosa Mainframe, poderíamos defini-lo assim:

IDENTIFICATION DIVISION.
PROGRAM-ID. LEITMOTIF.

DATA DIVISION.
WORKING-STORAGE SECTION.

01 EMOCAO.
   05 PERSONAGEM PIC X(20).
   05 MEMORIA    PIC X(20).
   05 DESTINO    PIC X(20).

PROCEDURE DIVISION.

    PERFORM CRIAR-POUCAS-NOTAS
    PERFORM REPETIR-COM-PROPOSITO
    PERFORM VARIAR-SEM-PERDER-IDENTIDADE
    PERFORM GRAVAR-NA-MEMORIA

    STOP RUN.

John Williams talvez nunca tenha escrito COBOL.

Mas compreendia perfeitamente:

  • reutilização;

  • modularidade;

  • padrões;

  • chamadas;

  • variações;

  • identidade;

  • processamento emocional.

Ele programava.

Só que em vez de registros...

Usava notas.

Em vez de arquivos...

Usava memória.

Em vez de JCL...

Usava orquestra.

E em vez de gerar relatórios...

Gerava arrepios.


Aqui está um bloco completo em **HTML + CSS + JavaScript**, pronto para colar em uma página ou postagem do **Blogspot**, com visual inspirado em trilhas sonoras de anime, previews por iframe, resumos, botões externos e links fixos rastreáveis por Google e Bing. ```html
🎼
UM CAFÉ NO BELLACOSA MAINFRAME

Anime Soundtrack Mainframe

Uma viagem pelo código-fonte invisível das trilhas sonoras, dos leitmotifs e das melodias que continuam executando na memória muito depois dos créditos finais.

JOB SOUNDTRACK-HUB EXECUTANDO — RC=0000
TRACK 01
🎼

Leitmotif sem Mistérios

Quando um Programador COBOL Descobre que John Williams Também Programava... Só que em Notas Musicais

Descubra como pequenas sequências musicais podem representar personagens, lugares, ameaças, lembranças e destinos. Um mergulho no leitmotif como COPYBOOK emocional do cinema, dos animes e dos games.

Carregar preview do artigo O iframe será carregado somente quando solicitado.
Abrir artigo ↗
TRACK 02
🎹

Como Criar seu Primeiro Leitmotif

Quando um Tema Inesquecível Cabe em Menos Espaço que um Copybook

Um tutorial prático para criar um motivo musical usando apenas quatro notas. Aprenda a trabalhar ritmo, repetição, timbre, variação, personagem e emoção como módulos reutilizáveis de um sistema musical.

Carregar preview do artigo O iframe será carregado somente quando solicitado.
Abrir artigo ↗
TRACK 03
🧠

Os 10 Segredos de uma Melodia Inesquecível

Quando o Cérebro Também Possui Cache e Alguns Temas Nunca Sofrem RESET

Ritmo, repetição, intervalos, pausas, surpresa, expectativa e resolução. Conheça os mecanismos que fazem temas de filmes, animes e jogos permanecerem residentes no cache emocional durante décadas.

Carregar preview do artigo O iframe será carregado somente quando solicitado.
Abrir artigo ↗
TRACK 04
🎧

O Código-Fonte Invisível dos Animes

Quando as Trilhas Sonoras Também Executam Jobs em Segundo Plano

Uma análise sobre como leitmotifs, instrumentação, silêncio e repetição conduzem personagens, memórias, batalhas, perdas e revelações dentro das trilhas sonoras dos animes.

Carregar preview do artigo O iframe será carregado somente quando solicitado.
Abrir artigo ↗
TRACK 05
💿

Acervo e Coletânea de Trilhas Sonoras

Descubra Onde Pesquisar, Ouvir e Estudar Anime Soundtracks

Um ponto de partida para localizar álbuns, compositores, coleções, bancos de dados, comunidades e referências ligadas às trilhas sonoras de animes, filmes, jogos e produções japonesas.

Carregar preview do artigo O iframe será carregado somente quando solicitado.
Abrir artigo ↗
🎵 ROTEIRO + 🎞️ ANIMAÇÃO + 🎼 TRILHA SONORA = ❤️ MEMÓRIA

segunda-feira, 9 de janeiro de 2017

Mainframe History : O Guia - Muito Antes do IBM Z Existia Outro "Z"

 

Bellacosa Mainframe e o outro computador z indice 

☕ Um Café no Bellacosa Mainframe

Histórias com Cheiro de Naftalina

O Guia do Viajante do Tempo

Muito Antes do IBM Z Existia Outro "Z"

"Nenhum Mainframe nasceu pronto. Antes dos bilhões de transações por segundo, antes dos processadores Telum, antes do z/OS, antes mesmo da IBM entrar definitivamente na computação eletrônica, existiram homens e mulheres que ousaram imaginar máquinas impossíveis."

Se você chegou até aqui procurando apenas a história do Z1 ou do IBM Z, prepare-se para uma surpresa.

Esta série não fala apenas sobre computadores.

Ela fala sobre pessoas.

Sobre engenheiros.

Sobre matemáticos.

Sobre inventores.

Sobre oficinas improvisadas.

Sobre laboratórios secretos.

Sobre universidades.

Sobre guerras.

Sobre cafés frios esquecidos sobre bancadas repletas de desenhos técnicos.

Sobre ideias que mudaram o mundo.

Ao longo desta jornada, percorremos quase cento e cinquenta anos de evolução tecnológica.

Começamos em um apartamento de Berlim.

Passamos pelos laboratórios britânicos escondidos em Bletchley Park.

Visitamos universidades americanas.

Entramos nos primeiros centros de processamento de dados da IBM.

Terminamos diante da arquitetura que deu origem ao Mainframe moderno.

Pegue sua caneca.

Nossa máquina do tempo está pronta.

INDICE : 


☕ Parte 1

O Engenheiro que Cansou de Fazer Contas

Conhecemos Konrad Zuse, um jovem engenheiro alemão que decidiu automatizar cálculos de engenharia e transformou a sala de estar da casa de seus pais em um laboratório.

Foi ali que nasceu a ideia do primeiro computador binário programável.

Você aprenderá:


☕ Parte 2

Abrindo a Tampa do Z1

Neste capítulo desmontamos o Z1 peça por peça.

Descobrimos como milhares de pequenas barras metálicas representavam bits.

Como funcionava sua memória.

Sua CPU.

Seu sistema de ponto flutuante.

Seu relógio mecânico.

Você aprenderá:


☕ Parte 3

Quando os Bits Faziam Barulho

A mecânica atingia seus limites.

Konrad Zuse substituiu parte dela por relés telefônicos.

Nascia o Z2.

Um computador muito mais confiável.

Muito mais rápido.

Um enorme passo rumo à computação eletrônica.

Você aprenderá:


☕ Parte 4

O Computador que Desafiou a História

Chegamos ao lendário Z3.

O primeiro computador digital programável totalmente funcional para muitos historiadores.

Aqui entendemos por que ele ocupa um lugar tão especial na história da computação.

Você aprenderá:


☕ Parte 5

O Computador que Sobreviveu à Guerra

O Z4 escapou dos bombardeios, cruzou montanhas e tornou-se um dos primeiros computadores científicos utilizados regularmente na Europa.

Você aprenderá:


☕ Parte 6

Plankalkül

Muito antes de COBOL.

Muito antes de FORTRAN.

Muito antes de ALGOL.

Konrad Zuse imaginou uma linguagem de programação.

Décadas à frente do seu tempo.

Você aprenderá:


☕ Parte 7

IBM, Hollerith e os Cartões Perfurados

Enquanto Zuse construía computadores científicos, a IBM revolucionava o processamento de dados administrativos.

Descobrimos como essas duas histórias caminharam separadas até finalmente se encontrarem.

Você aprenderá:


☕ Especial 8A

Tommy Flowers e o Colossus

Um dos capítulos mais importantes da série.

Conhecemos o engenheiro britânico que acreditou em milhares de válvulas quando quase ninguém acreditava.

O Colossus ajudou a decifrar mensagens estratégicas da máquina Lorenz e permaneceu em segredo durante décadas.

Você aprenderá:


☕ Parte 8

A Guerra dos Gigantes

Quem inventou o computador?

A resposta não é simples.

Neste capítulo reunimos Babbage, Ada Lovelace, Hollerith, Zuse, Aiken, Flowers, Eckert, Mauchly e Von Neumann para mostrar que a computação moderna nasceu da contribuição de muitos pioneiros.

Você aprenderá:


☕ Parte 9

IBM System/360

Chegamos ao verdadeiro divisor de águas da computação corporativa.

O projeto que consolidou a compatibilidade entre gerações e lançou as bases dos modernos Mainframes IBM.

Você aprenderá:


☕ Parte 10

Das Engrenagens ao IBM Z

Encerramos nossa jornada mostrando que os princípios fundamentais da computação permanecem vivos até hoje.

Mudaram os materiais.

Mudou a velocidade.

Mudou a escala.

Mas os conceitos continuam surpreendentemente familiares.

Você aprenderá:


O Que Existe em Todos os Capítulos?

Ao longo da série você encontrará quadros exclusivos do Bellacosa Mainframe:

Café com Naftalina
Curiosidades, bastidores e histórias pouco conhecidas dos pioneiros da computação.

📦 Baú do Sysprog
Lições que conectam máquinas históricas aos ambientes IBM Z modernos.

🔧 Oficina do Engenheiro
Explicações técnicas detalhadas sobre hardware, arquitetura, memória, lógica digital, programação e evolução dos computadores.


O Grande Ensinamento

Talvez a maior lição desta série seja que nenhum computador nasceu do nada.

O IBM Z não surgiu apenas da genialidade da IBM.

Ele carrega um pouco de Charles Babbage.

Um pouco de Ada Lovelace.

Um pouco de Herman Hollerith.

Um pouco de Konrad Zuse.

Um pouco de Tommy Flowers.

Um pouco de Howard Aiken.

Um pouco de Eckert.

Um pouco de Mauchly.

Um pouco de John von Neumann.

E muito do trabalho silencioso de milhares de engenheiros, técnicos, operadores, matemáticos e programadores que dedicaram suas vidas a transformar ideias em máquinas capazes de processar informação com precisão absoluta.

Quando um Sysprog observa um IPL terminar com sucesso.

Quando um programa COBOL executa sem alterações após décadas.

Quando bilhões de transações financeiras são concluídas com segurança.

Quando um IBM Z permanece disponível dia após dia.

Estamos vendo o resultado de quase dois séculos de evolução contínua.

E talvez seja exatamente isso que torna a computação uma das maiores aventuras da engenharia humana.


☕ O Próximo Café

A viagem até aqui contou a origem da computação.

A próxima série contará a evolução do Mainframe IBM.

Vamos acompanhar, geração por geração:

  • IBM 701

  • IBM 704

  • IBM 7090

  • IBM Stretch

  • IBM System/360

  • IBM System/370

  • IBM 303X

  • IBM 308X

  • IBM 3090

  • ESA/370

  • ESA/390

  • System/390

  • zSeries

  • System z

  • IBM Z

  • Telum

  • Spyre

  • z17

Porque conhecer a origem dos computadores é fascinante.

Mas acompanhar a extraordinária evolução do Mainframe IBM é compreender por que, mais de sessenta anos depois, ele continua sendo a plataforma que move o mundo.

Nos encontramos no próximo café.


☕ Um Café no Bellacosa Mainframe

Histórias com Cheiro de Naftalina

O Guia do Viajante do Tempo

Muito Antes do IBM Z Existia Outro “Z”

Viaje pelas origens da computação, conhecendo Konrad Zuse, Herman Hollerith, Tommy Flowers, John von Neumann, o Colossus, o EDVAC, o IBM System/360 e os pioneiros que construíram o caminho até o IBM Z.

ARTIGO SELECIONADO

O Guia do Viajante do Tempo

Abrir em nova guia ↗
Preparando a máquina do tempo...

Caso o navegador impeça a exibição incorporada, utilize o botão Abrir em nova guia.

☕ Quem não conhece o passado não entende o código do futuro.

Bellacosa Mainframe — tecnologia, história, COBOL, IBM Z e memória.

Regex sem Mistérios — A Linguagem Secreta que Todo Programador COBOL Padawan Precisa Conhecer

 

Bellacosa Mainframe e o regex sem misterios

☕ Um Café no Bellacosa Mainframe

Regex sem Mistérios — A Linguagem Secreta que Todo Programador COBOL Padawan Precisa Conhecer

Como encontrar, validar, limpar e transformar dados caóticos usando Expressões Regulares — com exemplos, curiosidades, armadilhas e analogias dignas da Frota Estelar

Existe um momento inevitável na carreira de qualquer profissional de tecnologia.

Você recebe um arquivo.

À primeira vista, parece apenas mais um CSV inofensivo vindo de algum sistema legado, planilha departamental, parceiro comercial, API moderna ou aplicação construída às pressas numa sexta-feira à tarde.

Então você abre o arquivo.

E encontra isto:

JOAO   DA SILVA
João da Silva
 joao da silva
JOAO DA SILVA     

Depois aparecem os telefones:

11999999999
(11) 99999-9999
+55 11 99999-9999
11-99999-9999
99999 9999

Logo abaixo, as datas:

17/07/2026
2026-07-17
17-07-26
20260717
Jul 17, 2026

E, como se a tripulação tivesse entrado em uma anomalia temporal, surgem e-mails sem domínio, endereços IP impossíveis, preços com ponto e vírgula trocados, espaços em excesso e descrições misturadas com informações entre parênteses.

Nesse instante, o programador percebe que o problema não é apenas “ler o arquivo”.

O problema é reconhecer padrões dentro do caos.

É aí que entra a Regex.

Regex é a abreviação de Regular Expression, ou Expressão Regular. Trata-se de uma pequena linguagem especializada em localizar, validar, extrair, substituir e reorganizar padrões dentro de textos.

Pode parecer estranha no começo.

Uma Regex típica se parece com isso:

^[\w.-]+@[\w.-]+\.\w{2,}$

Para quem está começando, isso parece uma mensagem interceptada de uma nave romulana.

Mas, quando desmontamos a expressão peça por peça, tudo começa a fazer sentido.

E esse é o objetivo desta missão: mostrar que Regex não é magia negra, não é privilégio de cientistas de dados e tampouco exige decorar centenas de símbolos.

Você precisa aprender a enxergar os componentes.

Assim como um programa COBOL é construído com IDENTIFICATION DIVISION, DATA DIVISION, PROCEDURE DIVISION, campos PIC, condições, PERFORM e IF, uma Regex também é formada por pequenos blocos previsíveis.

Prepare o café, ajuste o uniforme da Frota e abra o terminal.

Nossa missão começa agora.


1. O que é uma Expressão Regular?

Uma Expressão Regular é uma descrição compacta de um padrão textual.

Imagine que você deseja encontrar todas as matrículas formadas por três letras seguidas de quatro números:

ABC1234
XPTO9876
ZOS2026

Você poderia procurar cada matrícula individualmente.

Mas isso seria impossível se existissem milhares delas.

Com Regex, você descreve o formato:

[A-Z]{3}\d{4}

Essa expressão significa:

[A-Z]  → uma letra maiúscula
{3}    → repetida exatamente três vezes
\d     → um dígito
{4}    → repetido exatamente quatro vezes

Portanto:

[A-Z]{3}\d{4}

significa:

encontre três letras maiúsculas seguidas de quatro números.

A Regex não precisa saber quais letras ou números aparecerão. Ela sabe apenas qual estrutura deve procurar.

Isso muda completamente a maneira de lidar com textos.


2. Regex é como uma cláusula PIC do COBOL

Para um programador COBOL, existe uma comparação especialmente útil.

Considere:

01 WS-CODIGO PIC X(3)9(4).

Esse campo espera:

  • três caracteres alfanuméricos;

  • quatro dígitos.

Em Regex, um padrão semelhante poderia ser:

^[A-Z]{3}\d{4}$

As duas construções descrevem um formato esperado.

A diferença é que a cláusula PIC define como o dado será armazenado em um campo COBOL, enquanto a Regex procura ou valida padrões em textos.

Podemos imaginar que a Regex é uma espécie de PIC móvel.

Ela percorre uma linha, um arquivo, uma página, um log ou uma coluna inteira procurando ocorrências compatíveis.

Essa analogia é poderosa porque retira a Regex do território do mistério.

Você já conhece a ideia.

Apenas muda a sintaxe.


3. Onde Regex aparece?

Muitos programadores COBOL acreditam que Regex pertence apenas ao mundo de JavaScript ou Python.

Nada poderia estar mais distante da realidade moderna.

Regex aparece em:

  • editores de texto;

  • ferramentas de ETL;

  • scripts Python;

  • Bash;

  • PowerShell;

  • Java;

  • JavaScript;

  • C#;

  • bancos de dados;

  • ferramentas de Data Analytics;

  • pipelines de DevOps;

  • Jenkins;

  • Git;

  • VS Code;

  • Notepad++;

  • Zowe;

  • Unix System Services;

  • análise de logs;

  • observabilidade;

  • segurança;

  • parsing de arquivos;

  • validação de APIs;

  • transformação de CSV;

  • tratamento de JSON e XML.

No universo IBM Z, talvez você não execute Regex diretamente em um programa COBOL tradicional, mas certamente poderá encontrá-la em scripts auxiliares, automações, pipelines, arquivos YAML, utilitários Linux, integrações REST e processos de modernização.

O mainframe não vive isolado.

Ele conversa com o restante da galáxia.

E Regex é um dos idiomas usados nessas comunicações.


4. Os símbolos fundamentais da Regex

Antes de estudar os quinze padrões essenciais, precisamos conhecer as peças básicas.

O ponto: .

Em Regex, o ponto normalmente representa qualquer caractere.

a.c

Pode encontrar:

abc
a1c
a-c
a_c

O ponto não significa necessariamente um ponto literal.

Para procurar um ponto verdadeiro, usamos:

\.

Esse detalhe é extremamente importante.

A expressão:

\d+.\d+

aceita:

12.50
12,50
12X50

Porque o ponto significa qualquer caractere.

A versão mais correta seria:

\d+\.\d+

Agora, o separador precisa ser realmente um ponto.


O asterisco: *

Representa zero ou mais ocorrências.

AB*

Pode aceitar:

A
AB
ABB
ABBBBB

O B pode não aparecer ou aparecer várias vezes.


O sinal de mais: +

Representa uma ou mais ocorrências.

AB+

Aceita:

AB
ABB
ABBBBB

Mas não aceita apenas:

A

O ponto de interrogação: ?

Indica que o elemento anterior é opcional.

https?

Aceita:

http
https

O s pode existir ou não.


Os colchetes: []

Definem uma classe de caracteres.

[ABC]

Procura:

A
B
C

Já:

[A-Z]

representa qualquer letra maiúscula entre A e Z.

E:

[0-9]

representa qualquer dígito.


\d

Representa um dígito.

\d

É semelhante a:

[0-9]

\w

Normalmente representa letras, números e sublinhado.

\w

Pode encontrar:

A
z
5
_

O comportamento exato pode variar conforme o mecanismo Regex e o suporte a Unicode.


\s

Representa caracteres de espaço em branco.

Pode incluir:

  • espaço normal;

  • tabulação;

  • quebra de linha;

  • retorno de carro.


Circunflexo: ^

Indica o começo da string ou da linha.

^ABC

Encontra:

ABC123

Mas não encontra:

000ABC123

Cifrão: $

Indica o final da string ou da linha.

XYZ$

Encontra:

123XYZ

Mas não:

XYZ123

Quando usamos:

^\d+$

estamos dizendo:

do começo ao fim, aceite somente dígitos.


Chaves: {}

Controlam quantidades.

\d{4}

Exatamente quatro dígitos.

\d{2,4}

Entre dois e quatro dígitos.

\d{2,}

Dois ou mais dígitos.


Parênteses: ()

Criam grupos.

(ABC)+

Pode encontrar:

ABC
ABCABC
ABCABCABC

Os grupos também podem capturar partes específicas do texto.


Barra vertical: |

Significa “ou”.

COBOL|PL/I|REXX

Encontra qualquer uma das três palavras.


5. Padrão 1 — Endereço de e-mail

Uma expressão prática para e-mails simples é:

^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$

Vamos desmontar:

^

Começo da string.

[\w.-]+

Uma ou mais letras, números, sublinhados, pontos ou hífens.

@

O caractere arroba obrigatório.

[\w.-]+

O domínio.

\.

Um ponto literal.

[A-Za-z]{2,}

Uma extensão com pelo menos duas letras.

$

Fim da string.

Aceita:

usuario@gmail.com
vagner.bellacosa@empresa.com.br
programador-cobol@mainframe.org

Rejeita:

usuario@
@empresa.com
usuario.com
usuario@empresa

Porém existe uma observação importante.

E-mails reais podem seguir regras muito complexas. O padrão oficial permite formatos que quase nunca vemos no dia a dia.

Portanto, uma Regex simples é excelente para detectar erros comuns, mas não deve ser considerada uma implementação completa de todas as regras possíveis de e-mail.

Uma dica prática: em sistemas reais, muitas vezes o melhor teste de e-mail é enviar uma mensagem de confirmação.

A Regex valida o formato.

O envio confirma a existência operacional.


6. Padrão 2 — Número de telefone

Telefone é um dos maiores desafios de validação.

Considere:

+55 11 99999-9999
(11) 99999-9999
11 99999 9999
11999999999
+1 (555) 123-4567

Não existe uma única Regex perfeita para todos os países.

Uma expressão prática para formatos brasileiros poderia ser:

^(?:\+55\s?)?(?:\(?\d{2}\)?\s?)?\d{4,5}[-\s]?\d{4}$

Ela permite:

  • código do Brasil opcional;

  • DDD opcional;

  • parênteses opcionais;

  • espaço ou hífen opcional;

  • telefone com oito ou nove dígitos locais.

Mesmo assim, formato válido não significa número existente.

Uma Regex pode aceitar:

(00) 00000-0000

Embora isso não represente um telefone real utilizável.

Em aplicações internacionais, o ideal é normalizar os dados e trabalhar com um padrão como E.164:

+5511999999999

Esse formato remove espaços, parênteses e hífens, preservando apenas o sinal de mais, o código do país e o número.


7. Padrão 3 — Data no formato DD/MM/AAAA

Uma expressão comum é:

\b(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/\d{4}\b

Ela limita:

  • dia entre 01 e 31;

  • mês entre 01 e 12;

  • ano com quatro dígitos.

Aceita:

17/07/2026
01/01/2000
31/12/1999

Mas pode aceitar:

31/02/2026

Por quê?

Porque Regex reconhece formato, não necessariamente lógica de calendário.

Ela sabe que 31 está dentro de 01 a 31.

Ela sabe que 02 está dentro de 01 a 12.

Mas não sabe automaticamente que fevereiro não possui 31 dias.

Para validar datas reais, o procedimento recomendado é:

  1. usar Regex para verificar o formato;

  2. converter o texto para um tipo de data;

  3. deixar a linguagem ou banco de dados validar o calendário.

É o equivalente a uma primeira inspeção feita pelo sensor da nave, seguida por uma análise completa no computador de bordo.


8. Padrão 4 — Data ISO AAAA-MM-DD

\b\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])\b

Aceita:

2026-07-17
2025-12-31
2000-01-01

O formato ISO é excelente porque organiza as partes da maior para a menor:

ano-mês-dia

Isso traz vantagens para ordenação textual.

Considere:

2024-12-31
2025-01-01
2026-07-17

Mesmo como texto, a ordem cronológica é preservada.

Por isso, esse formato aparece em:

  • APIs;

  • bancos de dados;

  • logs;

  • arquivos CSV;

  • integrações;

  • sistemas distribuídos;

  • aplicações modernas.

Para um programador COBOL envolvido com APIs e modernização, o formato ISO deve se tornar um velho amigo.


9. Padrão 5 — Horário HH:MM

\b([01][0-9]|2[0-3]):[0-5][0-9]\b

Aceita:

00:00
09:30
18:45
23:59

Rejeita:

24:00
12:99
99:99

A primeira parte:

([01][0-9]|2[0-3])

aceita horas de 00 a 23.

A segunda:

[0-5][0-9]

aceita minutos de 00 a 59.

Essa expressão é muito útil para:

  • logs de processamento batch;

  • registros de ponto;

  • agendas;

  • monitoramento;

  • relatórios operacionais;

  • arquivos de auditoria.


10. Padrão 6 — URL

Uma Regex simples:

https?://[^\s]+

Significa:

http
seguido de um s opcional
seguido de ://
seguido de um ou mais caracteres que não sejam espaços

Aceita:

https://www.ibm.com
http://servidor.local/relatorio
https://exemplo.com/api/clientes?id=10

Essa expressão é útil para extração, mas não valida toda a estrutura de uma URL.

Também pode capturar pontuação colada no final:

Acesse https://exemplo.com.

Dependendo do mecanismo, o ponto final poderá entrar na captura.

Podemos refinar o padrão, mas existe uma lição importante:

quanto mais perfeita tentamos tornar uma Regex, mais complexa e difícil de manter ela pode ficar.

Regex deve resolver o problema necessário, não todos os problemas possíveis do universo.


11. Padrão 7 — Nome de domínio

Uma expressão prática:

\b(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,}\b

Pode encontrar:

ibm.com
empresa.com.br
portal.exemplo.org
mainframe.local

Esse tipo de extração aparece em:

  • análise de leads;

  • classificação de empresas;

  • segurança;

  • logs;

  • marketing;

  • inventário de URLs;

  • descoberta de integrações.

Por exemplo, a partir do e-mail:

usuario@empresa.com.br

podemos extrair:

empresa.com.br

E então agrupar contatos por organização.


12. Padrão 8 — Endereço IPv4

Uma expressão estrutural simples:

\b(?:\d{1,3}\.){3}\d{1,3}\b

Ela encontra:

192.168.0.1
10.0.0.25
172.16.1.100

Porém também pode aceitar:

999.999.999.999

Isso acontece porque cada bloco aceita de um a três dígitos, sem verificar o limite de 255.

Uma versão mais rigorosa é:

\b(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|1?\d?\d)\b

Essa expressão é mais precisa, mas também muito menos legível.

Aqui surge uma decisão de engenharia:

  • você precisa apenas extrair valores com aparência de IP?

  • ou precisa validar endereços IPv4 rigorosamente?

Para extração inicial de logs, a versão simples pode bastar.

Para segurança ou configuração de rede, a versão rigorosa ou uma biblioteca de IP é mais apropriada.


13. Padrão 9 — Valores monetários

Valores monetários são traiçoeiros porque cada país usa formatos diferentes.

Brasil:

R$ 1.299,99
R$ 25,00
1.000.000,50

Estados Unidos:

$1,299.99
$25.00
1,000,000.50

Uma expressão básica para valores brasileiros:

R\$\s?\d{1,3}(?:\.\d{3})*(?:,\d{2})?

Aceita:

R$ 25
R$ 1.299,99
R$ 10.000.000,50

Uma expressão básica para valores em dólares:

\$\s?\d{1,3}(?:,\d{3})*(?:\.\d{2})?

Nunca assuma o separador decimal sem conhecer a origem do dado.

Um erro de interpretação pode transformar:

1.234

em mil duzentos e trinta e quatro ou em um vírgula duzentos e trinta e quatro, dependendo da convenção utilizada.

Em sistemas financeiros, esse detalhe não é cosmético.

É crítico.


14. Padrão 10 — Percentuais

\b\d+(?:[.,]\d+)?%

Aceita:

18%
42,5%
98.75%

A parte:

(?:[.,]\d+)?

permite uma parte decimal opcional com ponto ou vírgula.

Mas novamente devemos perguntar:

  • o valor máximo é 100%?

  • valores acima de 100% são permitidos?

  • números negativos são válidos?

  • deve haver espaço antes do sinal de porcentagem?

Em relatórios de crescimento, isto pode ser válido:

250%

Em progresso de uma tarefa, talvez não.

A Regex deve refletir a regra do negócio, não apenas a aparência do dado.


15. Padrão 11 — Somente números

^\d+$

É uma das expressões mais úteis de todas.

Ela verifica se a string inteira possui apenas dígitos.

Aceita:

12345
000001
987654321

Rejeita:

123A
12-34
 123
123 

Pode ser utilizada para validar:

  • matrícula;

  • código de cliente;

  • CPF sem máscara;

  • número de lote;

  • quantidade;

  • identificador numérico.

Mas cuidado: um campo formado apenas por dígitos não é necessariamente um número matemático.

Um CPF, CEP ou código de cliente pode começar com zero.

Se convertermos:

001234

para número, podemos obter:

1234

e perder informação.

Isso também é familiar ao programador COBOL.

Nem todo PIC 9 representa um valor que deve participar de cálculos. Às vezes ele é apenas um identificador composto por caracteres numéricos.


16. Padrão 12 — Número decimal

^-?\d+(?:\.\d+)?$

Aceita:

10
10.5
-25
-25.75

A parte:

-?

permite um sinal negativo opcional.

A parte:

\d+

exige pelo menos um dígito.

E:

(?:\.\d+)?

permite uma parte decimal opcional.

Para vírgula decimal brasileira:

^-?\d+(?:,\d+)?$

Ou, para aceitar ambos:

^-?\d+(?:[.,]\d+)?$

Entretanto, aceitar os dois formatos pode gerar ambiguidades em dados com separadores de milhar.

A melhor estratégia costuma ser:

  1. identificar o padrão de origem;

  2. remover separadores de milhar;

  3. normalizar o separador decimal;

  4. converter para número.


17. Padrão 13 — Remover espaços extras

\s+

Substitua por um único espaço:

" "

Antes:

Analista       de      Sistemas

Depois:

Analista de Sistemas

Esse padrão é extremamente poderoso.

Mas ele também pode substituir:

  • tabs;

  • quebras de linha;

  • múltiplos espaços.

Portanto, se você estiver trabalhando com um texto multilinha, pode acabar transformando parágrafos inteiros em uma única linha.

Para espaços horizontais apenas, alguns mecanismos oferecem:

[ \t]+

Isso procura espaços e tabulações, mas não quebras de linha.

Sempre teste a substituição em uma cópia do arquivo.

A primeira diretriz da Frota Estelar de tratamento de dados deveria ser:

nunca execute uma transformação destrutiva sem possuir backup e uma amostra de validação.


18. Padrão 14 — Remover espaços do começo e do final

^\s+|\s+$

Significa:

espaços no começo
OU
espaços no final

Antes:

"     Power BI Dashboard      "

Depois:

"Power BI Dashboard"

Essa operação é chamada de trim.

Em linguagens modernas, normalmente existe uma função pronta para isso.

Mesmo assim, a Regex é útil quando estamos fazendo substituições em massa dentro de um editor, ferramenta ETL ou arquivo inteiro.


19. Padrão 15 — Texto dentro de parênteses

Para capturar o conteúdo entre parênteses:

\((.*?)\)

Considere:

Plano Corporativo (Premium)

A captura será:

Premium

Os parênteses literais precisam ser escapados:

\(
\)

O trecho:

.*

significa qualquer caractere, zero ou mais vezes.

O ponto de interrogação torna a busca não gulosa:

.*?

Isso significa que a Regex captura o mínimo necessário.

Sem o ?, em:

Produto (Azul) Tamanho (Grande)

uma expressão gulosa poderia capturar:

(Azul) Tamanho (Grande)

Com:

\((.*?)\)

ela pode capturar separadamente:

Azul
Grande

O conceito de busca gulosa é uma das curiosidades mais importantes da Regex.

Um quantificador guloso tenta consumir o máximo possível.

Um quantificador não guloso tenta consumir o mínimo necessário.


20. Regex encontra formato, não verdade

Esta é provavelmente a lição mais importante de todo o artigo.

Uma Regex pode reconhecer que:

usuario@empresa.com

tem aparência de e-mail.

Mas não sabe se a caixa postal existe.

Pode reconhecer:

31/02/2026

como uma data estruturada.

Mas não sabe se o dia existe no calendário.

Pode reconhecer:

999.999.999.999

como algo semelhante a IPv4, dependendo da expressão.

Mas não sabe automaticamente que os octetos são inválidos.

Pode reconhecer:

R$ 999999999999

como valor monetário.

Mas não sabe se o valor faz sentido para aquela transação.

Regex trabalha na camada sintática.

A lógica de negócio trabalha na camada semântica.

Em linguagem de Frota Estelar:

Regex é o scanner. A aplicação é o oficial científico que interpreta o resultado.


21. Passo a passo para construir uma Regex

Não comece tentando escrever a expressão inteira.

Siga um processo.

Passo 1 — Reúna exemplos válidos

Imagine códigos:

CLI-0001
CLI-1025
CLI-9999

Passo 2 — Reúna exemplos inválidos

CLI0001
cli-0001
CLI-001
CLI-12345

Passo 3 — Identifique partes fixas

CLI-

Passo 4 — Identifique partes variáveis

Quatro dígitos:

\d{4}

Passo 5 — Monte o padrão

CLI-\d{4}

Passo 6 — Ancore o começo e o final

^CLI-\d{4}$

Passo 7 — Teste casos extremos

CLI-0000
CLI-9999
CLI-12A4
XCLI-0001
CLI-0001-TESTE

Passo 8 — Documente

Explique o que a Regex faz.

Não deixe apenas:

^(?:\+55\s?)?(?:\(?\d{2}\)?\s?)?\d{4,5}[-\s]?\d{4}$

Adicione um comentário no código ou documentação.

Uma Regex não documentada pode se tornar um artefato klingon perdido dentro do sistema.

Todos têm medo de alterá-la.

Ninguém sabe exatamente o que ela faz.


22. Regex em Python — pequeno laboratório

import re

dados = [
    "usuario@gmail.com",
    "email-invalido",
    "programador@empresa.com.br"
]

padrao = re.compile(r"^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$")

for valor in dados:
    if padrao.fullmatch(valor):
        print(f"Válido: {valor}")
    else:
        print(f"Inválido: {valor}")

Resultado esperado:

Válido: usuario@gmail.com
Inválido: email-invalido
Válido: programador@empresa.com.br

Observe o prefixo r antes da string:

r"..."

Em Python, isso cria uma raw string, reduzindo conflitos entre as barras invertidas da linguagem e as barras utilizadas pela Regex.


23. Regex no PowerShell

No Windows, um Padawan pode experimentar:

$email = "usuario@empresa.com"

if ($email -match '^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$') {
    Write-Host "E-mail válido"
} else {
    Write-Host "E-mail inválido"
}

Para substituir espaços repetidos:

$texto = "Programador      COBOL      Padawan"
$limpo = $texto -replace '\s+', ' '

Write-Host $limpo

Resultado:

Programador COBOL Padawan

24. Regex no Linux e no USS

Com grep:

grep -E '^[0-9]+$' arquivo.txt

Isso procura linhas compostas apenas por números.

Para encontrar datas ISO:

grep -E '\b[0-9]{4}-[0-9]{2}-[0-9]{2}\b' aplicacao.log

Com sed, podemos reduzir espaços:

sed -E 's/[[:space:]]+/ /g' arquivo.txt

No Unix System Services do z/OS, esses recursos podem fazer parte de scripts de automação, preparação de dados, análise de logs e pipelines DevOps.


25. Armadilhas comuns

Esquecer de escapar o ponto

Errado:

\d+.\d+

Melhor:

\d+\.\d+

Usar Regex para tudo

Regex não é a melhor ferramenta para interpretar estruturas profundamente aninhadas.

Tentar processar JSON ou XML complexo inteiramente com Regex costuma produzir soluções frágeis.

Para JSON, use um parser JSON.

Para XML, use um parser XML.

Use Regex para tarefas localizadas, como identificar padrões simples antes ou depois do parsing.


Criar uma expressão impossível de manter

Uma Regex gigantesca pode funcionar, mas tornar a manutenção perigosa.

Às vezes é melhor dividir a validação em etapas:

  1. normalizar;

  2. verificar formato;

  3. converter;

  4. aplicar regra de negócio.


Não considerar Unicode e acentos

Padrões como:

[A-Za-z]

não incluem automaticamente:

á
é
ç
õ
ü

Dependendo da linguagem, você pode usar recursos Unicode, propriedades como \p{L} ou flags específicas.


Não testar casos negativos

Muitas pessoas testam apenas entradas válidas.

Uma boa bateria de testes deve conter:

  • entradas válidas;

  • entradas inválidas;

  • valores vazios;

  • espaços;

  • caracteres especiais;

  • limites máximos;

  • limites mínimos;

  • texto muito longo;

  • acentos;

  • valores nulos.


26. Dicas de sobrevivência para o Padawan

Primeira dica: não memorize Regex inteiras.

Memorize conceitos:

^     começo
$     final
\d    dígito
\w    caractere de palavra
\s    espaço
+     uma ou mais vezes
*     zero ou mais vezes
?     opcional
[]    classe
()    grupo
|     ou
{}    quantidade

Segunda dica: construa aos poucos.

Terceira dica: teste em uma amostra pequena.

Quarta dica: mantenha exemplos válidos e inválidos.

Quinta dica: dê nome ao padrão no código.

Em vez de:

if re.match(r"^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$", texto):

prefira:

PADRAO_EMAIL_SIMPLES = r"^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$"

if re.match(PADRAO_EMAIL_SIMPLES, texto):

Sexta dica: documente limitações.

Exemplo:

Valida apenas o formato geral do e-mail.
Não implementa integralmente todas as regras da RFC.

Sétima dica: não confie em Regex como única barreira de segurança.

Regex pode ajudar a validar entrada, mas segurança exige escaping, parametrização, autorização, limites de tamanho e tratamento adequado de dados.


27. Easter egg da Frota Estelar

Imagine que o computador da USS Enterprise recebeu o seguinte log:

STARDATE=47634.44 | SHIP=NCC-1701-D | STATUS=WARP_CORE_WARNING
STARDATE=47634.45 | SHIP=NCC-1701-D | STATUS=STABLE
STARDATE=47634.46 | SHIP=NCC-74656 | STATUS=TRANSWARP_DETECTED

Queremos extrair apenas os registros da Enterprise-D:

SHIP=NCC-1701-D

Queremos extrair todas as naves:

SHIP=NCC-\d+(?:-[A-Z])?

Isso poderia encontrar:

SHIP=NCC-1701-D
SHIP=NCC-74656

Queremos extrair todas as datas estelares:

STARDATE=\d+\.\d+

E agora o Easter egg:

procure no log uma nave cujo registro contenha:

NCC-1701

Ao encontrar esse padrão, o sistema poderia responder:

Tea, Earl Grey, hot.

Sim, Padawan: até uma Regex pode conter espírito de tripulação.


28. Curiosidades sobre Regex

Expressões regulares possuem raízes na matemática e na ciência da computação teórica.

O conceito está relacionado a linguagens formais e autômatos finitos.

Posteriormente, Regex tornou-se popular em ferramentas de processamento de texto, especialmente no ambiente Unix e em linguagens como Perl.

Perl teve enorme influência na sintaxe moderna das expressões regulares.

Por isso, muitos mecanismos são chamados de “compatíveis com Perl” ou PCRE, de Perl Compatible Regular Expressions.

Mas nem toda implementação é idêntica.

Uma expressão que funciona em Python pode precisar de ajustes em:

  • Java;

  • JavaScript;

  • PowerShell;

  • grep;

  • sed;

  • banco de dados;

  • editor de texto.

Alguns mecanismos suportam:

  • lookahead;

  • lookbehind;

  • grupos nomeados;

  • Unicode avançado;

  • modo multilinha;

  • modo case-insensitive;

  • quantificadores não gulosos.

Outros possuem limitações.

Sempre confirme qual mecanismo Regex está sendo utilizado.


29. Regex e qualidade de dados

Regex não serve apenas para encontrar texto.

Ela participa diretamente da qualidade dos dados.

Podemos usar Regex para:

  • detectar campos fora do padrão;

  • separar registros válidos e inválidos;

  • normalizar entradas;

  • extrair partes relevantes;

  • mascarar informações;

  • remover ruído;

  • identificar anomalias;

  • construir regras de qualidade;

  • preparar dados para análise.

Imagine uma coluna com CPFs:

123.456.789-00
12345678900
123 456 789 00
CPF: 123.456.789-00

Primeiro, poderíamos remover tudo que não seja dígito:

\D

Substituindo por vazio.

Resultado:

12345678900
12345678900
12345678900
12345678900

Depois, validamos se existem onze dígitos:

^\d{11}$

Isso ainda não valida os dígitos verificadores do CPF.

Essa validação exige algoritmo específico.

Mais uma vez:

  • Regex normaliza e verifica a forma;

  • a lógica de negócio verifica o significado.


30. Um plano de aprendizado em sete missões

Missão 1 — Aprender os metacaracteres

Pratique:

.
*
+
?
^
$
[]
()
{}
|

Missão 2 — Aprender as classes

\d
\w
\s
\D
\W
\S

Missão 3 — Validar campos simples

Crie expressões para:

  • matrícula;

  • CEP;

  • data;

  • horário;

  • código de produto.

Missão 4 — Extrair informações

Use Regex para extrair:

  • e-mails;

  • URLs;

  • IPs;

  • números;

  • textos entre parênteses.

Missão 5 — Fazer substituições

Experimente:

  • reduzir espaços;

  • remover caracteres;

  • reorganizar datas;

  • limpar máscaras.

Missão 6 — Integrar com uma linguagem

Escolha:

  • Python;

  • PowerShell;

  • JavaScript;

  • Java;

  • REXX com apoio de ferramentas externas;

  • Bash no USS.

Missão 7 — Aplicar em um problema real

Pegue uma cópia de um arquivo bagunçado e execute um pequeno processo:

entrada
→ identificação
→ normalização
→ validação
→ rejeição
→ saída limpa

Esse fluxo transforma conhecimento em habilidade.


Conclusão — Regex não é magia; é reconhecimento de padrões

Quando olhamos pela primeira vez para:

^(?:\+55\s?)?(?:\(?\d{2}\)?\s?)?\d{4,5}[-\s]?\d{4}$

é natural sentir que estamos diante de uma linguagem extraterrestre.

Mas não estamos.

A expressão é formada por pequenas decisões:

  • começo da linha;

  • código do país opcional;

  • espaço opcional;

  • DDD opcional;

  • parênteses opcionais;

  • quatro ou cinco dígitos;

  • separador opcional;

  • quatro dígitos finais;

  • fim da linha.

Cada símbolo possui função.

Cada grupo representa uma regra.

A Regex só parece complicada quando tentamos enxergá-la inteira de uma vez.

O segredo é desmontá-la.

É exatamente como analisar um programa COBOL antigo com vinte mil linhas.

Você não compreende tudo olhando o fonte inteiro.

Você identifica:

  • arquivos;

  • layouts;

  • campos;

  • parágrafos;

  • chamadas;

  • condições;

  • regras;

  • pontos de entrada;

  • saídas.

Regex segue o mesmo princípio.

Divida.

Nomeie.

Teste.

Documente.

Evolua.

Não tente decorar todas as expressões possíveis. Nem Spock faria isso.

Aprenda os componentes fundamentais e mantenha um pequeno arsenal de padrões úteis.

O verdadeiro poder não está em possuir uma lista com quinze Regex.

Está em compreender como adaptá-las.

Quando chegar o arquivo com quarenta mil telefones inconsistentes, datas em cinco formatos e clientes cadastrados por sistemas de épocas diferentes, você não verá mais caos.

Você verá padrões.

E quando o restante da equipe perguntar como você conseguiu limpar o arquivo em minutos, ajuste o comunicador, olhe para a tela verde do terminal e responda com serenidade:

“Não foi magia. Foi lógica aplicada ao texto.”

Missão cumprida, tripulante.

O arquivo está limpo.

Os dados foram validados.

A Enterprise pode voltar à velocidade de dobra.


domingo, 8 de janeiro de 2017

Como um Padawan COBOL Pode Descobrir que Existe uma Forma de Administrar Milhares de Servidores sem Escrever um JCL para Cada Um Deles

Bellacosa Mainframe apresenta o Ansible


☕ O Holocron do Ansible

Como um Padawan COBOL Pode Descobrir que Existe uma Forma de Administrar Milhares de Servidores sem Escrever um JCL para Cada Um Deles

Existe um momento na jornada de todo Padawan COBOL em que ele percebe uma verdade desconfortável.

Os servidores estão se multiplicando.

Primeiro era apenas um LPAR.

Depois vieram dois ambientes.

DEV.

QA.

HML.

PRD.

DR.

Cloud.

Linux.

Windows.

Containers.

OpenShift.

Z/Linux.

zCX.

z/OS Connect.

MQ.

CICS.

DB2.

E de repente alguém faz uma pergunta aparentemente simples.

— Bellacosa... como atualizamos 800 servidores?

O Padawan pensa.

"Talvez um REXX."

"Talvez um script."

"Talvez um FTP."

"Talvez um JCL."

O Sysprog veterano apenas sorri.

Abre uma caneca de café.

E responde:

— Existe uma ferramenta chamada Ansible.

E ela parece magia.

Mas não é magia.

É apenas automação feita direito.


O que é o Ansible?

Ansible é uma plataforma de automação Open Source criada para executar tarefas administrativas em múltiplos sistemas de maneira centralizada.

Seu objetivo é simples:

Fazer uma única ação e replicá-la em centenas ou milhares de máquinas.

Por exemplo:

Instalar software.

Criar usuários.

Alterar permissões.

Subir serviços.

Executar scripts.

Aplicar patches.

Configurar firewalls.

Gerenciar cloud.

Criar containers.

Automatizar IBM Z.

Em outras palavras:

"Ansible é o equivalente moderno do JCL PROC para infraestrutura."

Se você já executou:

//STEP1 EXEC PROC=COBOLCOMP

Você já entendeu metade da filosofia do Ansible.


Origem do Ansible

O Ansible nasceu em 2012.

Criador:

Michael DeHaan.

O mesmo desenvolvedor que participou do projeto Cobbler.

A ideia era resolver problemas encontrados em ferramentas da época.

Chef

Puppet

CFEngine

Todas eram poderosas.

Mas tinham um problema.

Precisavam instalar agentes.

E agentes são chatos.

Consomem memória.

Precisam atualizar.

Quebram.

Geram vulnerabilidades.

Michael pensou:

"Por que não usar apenas SSH?"

Nascia o Ansible.

Em 2015 a Red Hat comprou a empresa.

Em 2019.

A IBM comprou a Red Hat.

Hoje Ansible faz parte do ecossistema IBM.

Padawan COBOL:

Sim.

Você pode automatizar o mainframe usando uma tecnologia que pertence ao mesmo guarda-chuva corporativo do IBM Z.


Versões

Atualmente temos:

Ansible Community

Open Source

Red Hat Ansible Automation Platform

Comercial

AWX

Projeto upstream

Ansible Navigator

CLI moderna

Automation Hub

Coleções certificadas

EDA

Event Driven Automation


O segredo do Ansible

Ele funciona usando três componentes.

Inventory

Lista de servidores.

hosts.ini

linux01
linux02
linux03

ou

all:

 children:

  prod:

   hosts:

     db01:



Playbook

É o JCL do Ansible.

Arquivo YAML.

Exemplo:

---
- hosts: all

  tasks:

   - name: Criar usuário

     user:

       name: padawan

       state: present

Modules

São programas prontos.

Exemplos.

copy

service

yum

apt

shell

uri

zos_job_submit

zos_copy

zos_data_set

Existem milhares.


Por que YAML?

Porque YAML é legível.

Exemplo.

name: Bellacosa
idade: 52
profissao: Sysprog Jedi

Até um gerente consegue ler.

E isso assusta alguns desenvolvedores.


Instalação

Linux

sudo dnf install ansible

Ubuntu

sudo apt install ansible

Pip

pip install ansible

Verificar

ansible --version

Exemplo.

ansible [core 2.19]


Primeiro laboratório

Arquivo.

inventory.ini

localhost

Playbook.

hello.yml

---
- hosts: localhost


 tasks:


 - name: Mostrar mensagem

   debug:

      msg: "Olá Padawan"

Executar.

ansible-playbook hello.yml

Saída.

TASK

Olá Padawan


ok=1

Missão cumprida.


Exemplo real

Instalar Apache.

---
- hosts: webservers


 tasks:


 - name: Instalar


   yum:

     name: httpd

     state: present



 - name: Iniciar


   service:


      name: httpd

      state: started



100 servidores.

1 comando.

Fim.


Ansible no Mainframe

Aqui a coisa fica divertida.

IBM criou a coleção.

IBM Z Ansible Collection.

Módulos.

zos_copy

zos_data_set

zos_job_submit

zos_operator

zos_tso_command

zos_ping

zos_fetch


Criando dataset

- name: criar


 zos_data_set:



   name: BELLA.TESTE


   type: seq


   state: present

Submeter JCL

- name: submit



 zos_job_submit:


    src: teste.jcl

Executar comando

zos_operator:


 cmd: D IPLINFO

Casos reais

Deploy COBOL.

Copiar load modules.

Atualizar PROCLIB.

Executar REORG DB2.

Backup VSAM.

Verificar CICS.

Consultar JES2.

Gerenciar USS.

Criar usuários RACF.

Automatizar IPL checks.


Vantagens

Sem agentes

SSH.

WinRM.

z/OS.

Pronto.


Fácil aprender

Muito menos complexo que Puppet.


Reutilização

Roles.

Templates.

Collections.


Infraestrutura como Código

Git.

GitHub.

GitLab.

Azure DevOps.


Auditoria

Tudo fica registrado.


Desvantagens

SSH lento.

Em milhares de máquinas.


YAML depende de espaços.

Erro clássico.

tasks:
-name:



Kaboom.


Debug pode ser difícil.


Curva de aprendizado.

Jinja2.

Templates.

Loops.

Facts.


Truques Jedi

Dry Run

--check

Não altera nada.


Diff

--diff

Mostra mudanças.


Tags

tags:

 - db2

Executar.

ansible-playbook play.yml --tags db2

Vault

Senhas criptografadas.

ansible-vault encrypt

Facts

debug:


 var=ansible_hostname

Curiosidades

Ansible originalmente usava vacas ASCII.

Existe.

cowsay

Saída.

 __________________

< Deploy completo >

 ------------------

        \   ^__^

         \  (oo)\_______



Pode trocar por animais.

Dragon.

Tux.

Moose.

Daemon.


Easter Eggs

Execute.

ansible all -m ping

Não é ICMP.

É um módulo.

Resposta.

pong

Outra curiosidade.

Existe um módulo chamado.

debug

Que é provavelmente o módulo mais utilizado do planeta.


Ansible e o Futuro do IBM Z

O IBM Z moderno está cada vez mais próximo das práticas DevOps.

Git.

Pipelines.

OpenShift.

Terraform.

Zowe.

Ansible.

O Sysprog de 2030 provavelmente não ficará digitando comandos repetitivos no SDSF.

Ele terá um repositório Git.

Um pipeline.

Um Playbook.

E um botão chamado:

Deploy em Produção

E talvez seja justamente isso que assuste alguns veteranos.

Porque durante décadas aprendemos que administrar infraestrutura exigia decorar centenas de comandos obscuros.

Ansible propõe outra filosofia.

Descreva o estado desejado.

A ferramenta cuida do restante.

É quase como ensinar um aprendiz Jedi.

Você não diz exatamente como mover cada músculo do braço.

Você apenas diz:

— Pegue o sabre.

E a Força faz o resto.

No universo do IBM Z, Ansible não substitui o conhecimento profundo de JES2, RACF, CICS, DB2 ou z/OS.

Mas permite que um Padawan COBOL transforme esse conhecimento em automação reproduzível, auditável e compartilhável.

E talvez este seja o maior ensinamento do Holocron do Ansible:

"Um Sysprog poderoso não é aquele que executa mil comandos por dia. É aquele que ensina uma máquina a executá-los corretamente para sempre."

Posso também criar a continuação "O Holocron do Ansible para IBM Z – 20 laboratórios práticos para Padawans COBOL", com exercícios usando zos_job_submit, zos_copy, zos_operator, RACF, CICS e DB2.

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