☕ 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

sábado, 9 de julho de 2022

John Malkovich, Rua Garrett e o Autógrafo que Eu Não Pedi

 

Bellacosa Mainframe e o dia que vi John Malkovich

☕ Um Café no Bellacosa Mainframe

John Malkovich, Rua Garrett e o Autógrafo que Eu Não Pedi

Ou: como encontrei um dos meus atores favoritos descendo o Chiado, tive alguns segundos para fazer exatamente aquilo que qualquer fã faria — e resolvi simplesmente sorrir

Há histórias que sobrevivem porque alguém tirou uma fotografia.

Outras porque existe uma carta.

Um ingresso amarelado.

Uma assinatura num guardanapo.

Uma fotografia tremida com metade de um dedo na frente da lente.

Um recibo esquecido dentro de um livro.

Algumas sobrevivem porque alguém teve a extraordinária previdência de escrever uma data atrás da foto:

Lisboa, 2003.

E existem aquelas que não possuem absolutamente nada.

Nenhuma fotografia.

Nenhum autógrafo.

Nenhuma testemunha.

Nenhum vídeo.

Nenhum registro.

Nenhum metadata.

Nenhum backup.

Nada.

Apenas alguns segundos gravados dentro da cabeça de alguém.

Esta é uma dessas histórias.

E talvez justamente por isso eu ainda me lembre dela.

Pegue um café.

Porque certa tarde eu estava subindo a Rua Garrett, em Lisboa, quando encontrei John Malkovich.

E decidi não conhecê-lo.


🇵🇹 Primeiro precisamos subir o Chiado

Quem conhece Lisboa sabe que certas ruas não servem apenas para levar alguém de um ponto A até um ponto B.

Elas atrapalham deliberadamente o percurso.

A Rua Garrett é uma delas.

Você pode ter compromisso.

Pode estar atrasado.

Pode ter alguém esperando.

Pode inclusive jurar que desta vez vai simplesmente atravessar o Chiado sem olhar para os lados.

Boa sorte.

Lisboa tem outros planos.

Há turistas.

Lisboetas.

Cafés.

Livrarias.

Sebos.

Montras.

Prédios que obrigam você a levantar a cabeça.

Gente entrando e saindo dos Armazéns do Chiado.

E, naturalmente, Fernando Pessoa tranquilamente instalado diante d'A Brasileira, observando há décadas aquela humanidade passar como se soubesse de alguma coisa que nós ainda não descobrimos.

Eu conhecia aquele caminho.

Naquele dia estava subindo a Rua Garrett para encontrar Carmen, que trabalhava no Largo do Calhariz.

Era uma caminhada cotidiana.

Nada de particularmente extraordinário deveria acontecer.

Eu caminhava do meu jeito habitual: suficientemente depressa para parecer que tinha destino, mas suficientemente devagar para continuar olhando tudo.

Tenho esse defeito.

Ou qualidade.

Nunca consegui decidir.

Olho prédios.

Olho placas.

Olho vitrines.

Olho carros.

Olho detalhes arquitetônicos.

E olho pessoas.

Principalmente pessoas.

Uma cidade sem pessoas é apenas infraestrutura.

E foi olhando as pessoas que meu sistema encontrou uma anomalia.



⚠️ CELEBRITY DETECTED

Ele vinha no sentido contrário.

Talvez meia dúzia de passos.

Não houve apresentação.

Não houve segurança abrindo caminho.

Não houve flashes.

Não houve tapete vermelho.

Não houve ninguém gritando:

— Senhoras e senhores, diretamente de Hollywood...

Nada.

Era simplesmente um homem descendo uma rua de Lisboa.

E então nossos olhares se cruzaram.

Meu cérebro precisou de uma fração ridiculamente pequena de segundo.

É ELE.

John Malkovich.

Não alguém parecido com John Malkovich.

Não um português careca que depois de três copos de vinho lembraria vagamente John Malkovich.

John Malkovich.

O ator.

Aquele ator cujo nome, para mim, sempre funcionou praticamente como certificado de interesse.

Se aparecesse nos créditos:

John Malkovich

eu assistiria.

Filme bom?

Assistiria.

Filme ruim?

Assistiria também.

Filme esquisito?

Melhor ainda.

Porque existem atores que interpretam personagens e existem atores cuja simples presença faz você prestar atenção.

Malkovich sempre pertenceu à segunda categoria.

E agora o sujeito estava ali.

Na minha frente.

Descendo a Rua Garrett.


🖥️ O mainframe entrou imediatamente em estado de exceção

Internamente, a operação foi mais ou menos assim:

IDENTIFY MALKO

Resultado:

RC=0000

Confiança:

99.999999%

Imediatamente várias subtarefas foram disparadas.

PEDIR_AUTOGRAFO

FALAR_QUE_SOU_FÃ

PERGUNTAR_SOBRE_FILMES

ARRANJAR_FOTO

NÃO_DEIXAR_ELE_ESCAPAR

Todas requisitando prioridade máxima.

O fã dentro de mim estava completamente alucinado.

Eu queria correr.

Queria falar.

Queria dizer que admirava seu trabalho.

Queria pedir um autógrafo.

Talvez dois.

Talvez dezessete.

E havia ainda a fotografia.

Hoje qualquer pessoa colocaria a mão no bolso, puxaria o telefone e:

— Mister Malkovich, selfie?

Mas precisamos lembrar que estamos falando de outra época.

O telefone celular ainda não havia transformado cada ser humano num correspondente fotográfico permanente de sua própria existência.

Para conseguir uma fotografia seria necessário possuir uma câmera naquele momento, encontrar alguém para fotografar ou improvisar alguma solução.

E eu sempre fui louco por fotografias.

Portanto, alguma coisa eu inventaria.

O problema não era técnico.

O problema apareceu quando faltavam talvez três ou quatro passos.


👀 Ele percebeu

Esse é o pedaço da história que nenhuma fotografia poderia registrar.

John Malkovich percebeu que eu o reconhecera.

Tenho certeza disso.

Porque existe uma expressão específica no rosto de alguém quando ocorre esse reconhecimento.

Meu olhar provavelmente entregou tudo.

Por alguns milissegundos deixei de ser um transeunte qualquer da Rua Garrett.

Virei:

FÃ DETECTADO.

E acredito que ele conhecesse muito bem aquele protocolo.

Afinal, devia acontecer constantemente.

O olhar.

A hesitação.

O sorriso.

A pessoa decidindo se aproxima.

Ele me viu processando aquilo.

E aconteceu algo curioso.

Não senti nele aquela reação de quem pensa:

"Lá vem mais um."

Pelo contrário.

Houve uma pequena abertura.

Uma simpatia.

Aquela disponibilidade educada de quem provavelmente teria parado caso eu falasse alguma coisa.

Eu poderia abordar.

Ele permitiria.

Talvez conversássemos durante alguns minutos.

Eu teria meu autógrafo.

Talvez minha fotografia.

Talvez hoje tivesse uma bela prova material desta história.

Foi exatamente aí que alguma outra coisa assumiu o controle.


🧠 O WLM humano mudou a prioridade

Olhei para ele.

Olhei para a rua.

E percebi uma coisa muito simples.

O homem estava passeando.

Só isso.

Não era John Malkovich numa estreia.

Não era John Malkovich num festival.

Não era John Malkovich numa sessão de autógrafos.

Não era John Malkovich diante de jornalistas.

Era um sujeito caminhando por Lisboa.

Exatamente como eu.

Eu estava apreciando a cidade.

Ele aparentemente também.

E naquele instante aconteceu uma pequena disputa interna entre o fã e o ser humano.

O fã dizia:

VAI!

O outro respondia:

Deixa o homem em paz.

O fã:

MAS É JOHN MALKOVICH!

O outro:

Eu sei.

É justamente por isso.


🙂 Então eu simplesmente sorri

Não disse nada.

Não pedi nada.

Não bloqueei seu caminho.

Não puxei papel.

Não procurei caneta.

Não tentei encontrar uma câmera.

Apenas olhei para ele e dei provavelmente o sorriso mais sincero que poderia dar.

Depois fiz um pequeno aceno com a cabeça.

E aquele gesto dizia tudo.

Não sei se existe um protocolo internacional para encontros ocasionais entre fãs e atores de Hollywood nas ruas de Lisboa.

Mas, se existe, naquele momento utilizamos a versão mais econômica possível.

Meu gesto dizia:

"Eu sei quem você é."

"Sou seu fã."

"Admiro seu trabalho."

"Fiquei absurdamente feliz de encontrar você aqui."

"Mas não vou atrapalhar seu passeio."

E então aconteceu a melhor parte.

Ele entendeu.

John Malkovich sorriu.

Não o sorriso profissional da fotografia.

Não aquele sorriso automático que pessoas famosas provavelmente aprendem depois da milionésima abordagem.

Foi um pequeno sorriso de cumplicidade.

Quase agradecido.

E respondeu com o olhar.

Durante talvez dois segundos aconteceu uma conversa inteira sem uma única palavra.

— É você.

— Sou eu.

— Sou muito seu fã.

— Percebi.

— Não vou te incomodar.

— Obrigado.

— Aproveite Lisboa.

— Você também.

E continuamos andando.


🚶 Dois turistas

Ele desceu.

Eu subi.

E foi isso.

Nenhuma multidão percebeu.

Nenhum jornalista registrou.

Fernando Pessoa permaneceu sentado.

Os cafés continuaram servindo bicas.

As pessoas continuaram entrando nas livrarias.

Os elétricos continuaram fazendo aquele barulho de Lisboa.

Provavelmente alguém reclamava de alguma coisa num balcão próximo, porque afinal estávamos em Portugal e certas instituições nacionais precisam ser preservadas.

E dois homens que jamais haviam se encontrado continuaram andando em direções opostas.

Um deles era John Malkovich.

O outro estava indo encontrar Carmen no Largo do Calhariz.

Durante alguns segundos, porém, éramos simplesmente duas pessoas passeando pela mesma cidade.


📸 A fotografia que não existe

Naturalmente, depois veio o arrependimento.

Porque o fã continua sendo fã.

PORRA, VAGNER!

ERA JOHN MALKOVICH!

Você poderia ter pedido um autógrafo!

Poderia ter conseguido uma fotografia!

Poderia ter falado com ele!

Poderia hoje mostrar para todo mundo:

— Olha aqui eu com John Malkovich em Lisboa.

Não tenho.

Não existe.

Não tenho sequer um guardanapo dizendo:

To Vagner, best wishes, John Malkovich.

Nada.

Do ponto de vista documental, esta história possui uma infraestrutura lamentável.

Auditoria reprovaria imediatamente.

Evidência material:

ZERO.

Testemunhas conhecidas:

ZERO.

Fotografia:

FILE NOT FOUND

Autógrafo:

DATASET NOT CATALOGED

Vídeo:

NO RECORDS FOUND

Logs:

expirados há décadas.

Se isso fosse um incidente de produção, ninguém aceitaria meu RCA.


☕ Mas talvez eu tenha trazido algo melhor

Com o passar dos anos comecei a perceber que talvez eu não tenha perdido coisa alguma.

Um autógrafo seria um objeto.

Uma fotografia seria uma fotografia.

Talvez estivesse numa caixa.

Talvez num álbum.

Talvez digitalizada.

Talvez eu já nem soubesse onde estava.

Mas aquele momento continua perfeitamente armazenado.

A rua.

O movimento.

A direção em que eu caminhava.

A surpresa.

A distância diminuindo.

O reconhecimento.

O olhar.

A decisão.

Meu sorriso.

O sorriso dele.

E cada um seguindo seu caminho.

Curiosamente, não pedir o autógrafo transformou aqueles segundos em algo muito mais interessante.

Porque não tenho uma história sobre:

"o dia em que tirei uma fotografia com John Malkovich."

Tenho uma história sobre:

"o dia em que encontrei John Malkovich e decidi não interromper John Malkovich."

É diferente.


🎭 Existe uma pessoa atrás dos créditos

Talvez essa tenha sido a pequena lição daquela tarde.

Nós transformamos artistas em personagens.

Eles vivem dentro das telas.

Nos créditos.

Nas entrevistas.

Nas fotografias.

Nos cartazes.

E esquecemos facilmente que, quando termina o filme, aquela pessoa continua existindo.

Come.

Anda.

Viaja.

Entra numa livraria.

Toma café.

Olha uma vitrine.

Passeia por uma rua.

Talvez queira passar alguns minutos sendo absolutamente ninguém.

E existe algo estranhamente bonito em reconhecer alguém justamente oferecendo-lhe o direito de continuar anônimo.

Eu poderia ter recebido um autógrafo de John Malkovich.

Em vez disso recebi durante dois segundos o sorriso de um homem que percebeu:

"Ele me reconheceu e vai me deixar continuar andando."

Foi pouco.

E foi muito.


🗄️ O arquivo que nunca foi apagado

Décadas depois aquela memória continua aqui.

Sem fotografia.

Sem papel.

Sem assinatura.

Sem cloud.

Sem backup externo.

Apenas naquele storage absurdamente pouco confiável chamado cérebro humano.

E, ironicamente, alguns arquivos desaparecem enquanto outros parecem possuir DISP=KEEP eterno.

Esse ficou.

Talvez porque nunca tenha sido concluído da maneira convencional.

Não houve clímax.

Não houve diálogo.

Não houve fotografia.

Ficou uma pequena operação pendurada no tempo.

John Malkovich descendo.

Eu subindo.

Dois olhares se encontrando.

Dois sorrisos.

E Lisboa continuando ao redor.


🧙 O velho barbudo finalmente documenta o incidente

Agora, tantos anos depois, finalmente existe um registro.

Não o autógrafo.

Não a fotografia.

Mas esta história.

Talvez daqui a muitas décadas algum arqueólogo digital encontre este texto perdido num canto da Internet e pense:

"Naturalmente não existe nenhuma prova disso."

Correto.

Não existe.

E está tudo bem.

Porque algumas das melhores coisas que aconteceram conosco ocorreram antes de termos uma câmera permanentemente apontada para nossa própria vida.

Elas simplesmente aconteceram.

Nós vimos.

Sentimos.

Guardamos.

E seguimos andando.


☕ Epílogo — RETURN CODE 0000

Às vezes penso novamente naquela tarde.

Imagino o que teria acontecido se tivesse parado.

Provavelmente Malkovich teria sido gentil.

Eu teria dito alguma bobagem de fã.

Ele assinaria alguma coisa.

Talvez conseguíssemos improvisar uma fotografia.

Eu agradeceria.

Ele continuaria descendo.

Eu continuaria subindo.

Seria uma ótima lembrança.

Mas não seria esta lembrança.

Prefiro a que ficou.

Porque durante alguns segundos não houve estrela de Hollywood e fã brasileiro.

Havia dois sujeitos numa rua de Lisboa.

Um reconheceu o outro.

O outro percebeu.

O primeiro decidiu não incomodar.

O segundo agradeceu sorrindo.

Nenhuma palavra foi necessária.

Então John Malkovich continuou descendo a Rua Garrett.

Eu continuei subindo para encontrar Carmen no Largo do Calhariz.

E Lisboa, absolutamente indiferente à importância cinematográfica do acontecimento, continuou fazendo aquilo que Lisboa faz maravilhosamente bem:

acontecendo.

O fã perdeu o autógrafo.

O fotógrafo perdeu a fotografia.

Mas o homem ganhou um sorriso.

Décadas depois, ainda acho que fiz um excelente negócio.

IEF142I VAGNER MALKO - STEP WAS EXECUTED

COND CODE 0000

Arquivo mantido.

DISP=KEEP.

☕

sexta-feira, 8 de julho de 2022

🔥 PARTE 2 — CLOUD PARA MAINFRAMEIROS RAIZ

 

Bellacosa Mainframe e a cloud

🔥 PARTE 2 — CLOUD PARA MAINFRAMEIROS RAIZ

(Ou: “Explicando cloud pra quem já sobreviveu a VSAM corrompido, JCL sem SYSOUT e abend S0C7 às 17h35.”)

Pegue seu café, abra o SDSF no coração e vem comigo.


☁️ 1️⃣ EC2 — Explicado como se fosse uma LPAR (porque… é quase isso mesmo)

Na visão Bellacosa Mainframe:

👉 EC2 = LPAR com liberdade de adolescente que acabou de ganhar a primeira moto.

Enquanto a LPAR do z/OS é aquela coisa séria, parruda, certificada, com CPU, memória e I/O milimetricamente controlados pelo PR/SM…
EC2 é o “irmão caçula” moderninho, criado para escalar, quebrar e renascer com a facilidade de um RESTART JOB no JES2.

🧠 Tabela mental:

Conceito MainframeEquivalente Cloud
LPAREC2 Instance
CP / IFL / zIIPvCPU
HCD / IOCPFlavor / Instance Type
IPLBoot da VM
Hipervisor PR/SMHypervisor Xen/KVM da AWS
HLASM do sistemaAMI (Amazon Machine Image)

💡 Curiosidade estilo Bellacosa:

Se no mainframe você precisa abrir chamado, pedir mudança, esperar janela…
No EC2 você clica em “Launch Instance” e pronto.
Desprotegido? Sim.
Perigoso? Com certeza.
Divertido? Demais. 😎




☁️ 2️⃣ Kubernetes — explicado como se fosse um Sysplex adolescente

Se o Sysplex fosse um jovem rebelde, cheio de hormônios, tatuagem de “Available 99.999%”, e que adora brigar com todo mundo…
ele seria o Kubernetes.

🧠 Analogia oficial do Bellacosa:

Sysplex / Parallel SysplexKubernetes
Várias LPARs cooperandoVários nós (nodes)
XCF/XES faz o cluster conversarControl Plane/Gossip
WLM distribui workloadScheduler
CICS Regions, DB2 Data SharingPods/Deployments/StatefulSets
IPL, PARMLIBYAML (sim, YAML é o novo PARMLIB gagá)
VTAM / TCPIPkube-proxy / CNI

O Kubernetes faz balancing, reinicia container que cai, escala instâncias e mantém tudo estável — exatamente como um Sysplex faria…
Só que com muito mais drama, logs misteriosos e YAML torto.

🍜 Easter egg para Otakus da Infra:

“Pod” lembra aquelas cápsulas de dormir de anime cyberpunk?
Pois é, funciona parecido: cada pod é um mini-contâiner pronto para morrer no próximo deploy.
Kubernetes é puro shonen: luta, dor, respawn infinito.


☁️ 3️⃣ S3 — explicado como datasets SEM limite de extents (o sonho proibido)

Sim, meus caros…
O S3 é o dataset que o VSAM gostaria de ser quando crescer.

🤯 No S3:

  • Não tem EXTENT

  • Não tem SPACE=TRK

  • Não tem DSORG=PS

  • Não tem REPRO corrompendo dados

  • Você guarda TUDO e ele não reclama

🧠 Comparação:

MainframeS3
DatasetObjeto
Catálogo / VVDSBucket Index
SMS ClassStorage Class
HSM MIGRATE/RECALLLifecycle Policy
RACF DATASET ProfilesIAM Policies

O S3 é basicamente um GDG infinito que nunca dá “limit exceeded”.
Imagina um STORAGE que nunca vira “primary/secondary insufficient”.
É o paraíso dos operadores e o inferno de quem paga a conta.


☁️ 4️⃣ MAPA MÁGICO — Cloud explicado com equivalências Mainframe

🧵 CICS (transações)

→ Lambda, API Gateway, Fargate
(Pedacinhos rápidos de lógica servidos sob demanda.)

🔐 RACF (segurança, profiles, permissões)

→ IAM (políticas, usuários, roles, MFA, keys)

IAM é praticamente um RACF com interface bonitinha (mas tão complicado quanto RACF se você usar errado).

📄 JCL (orquestração de jobs)

→ CloudWatch Events, Step Functions, Terraform, CI/CD YAML
(Jobs em YAML… a vida é cruel.)

📬 JES2 (fila e roteamento de jobs)

→ SQS, SNS, EventBridge
(Filas, roteamento e distribuição — sem o charme do $HASP.)

🌐 VTAM (rede e sessões)

→ VPC, Subnets, Security Groups
(VTAM era o pai do networking, a VPC é o filho hipster dele.)

🤖 OPS/MVS, REXX, Automação

→ Lambda + EventBridge + API + Scripts
(O equivalente moderno ao operador ninja das madrugadas.)


🧙‍♂️ Bellacosa Dica Ninja

Se você entende bem mainframe, a cloud fica MUITO mais fácil, porque:

z/OS já fazia tudo antes da cloud existir.
Cloud = um Sysplex gigante e improvisado, distribuído pelo planeta.


quinta-feira, 7 de julho de 2022

🌠 「短冊」– Tanzaku: os papéis dos desejos que dançam com o vento

 


🌠 El Jefe | Bellacosa Mainframe apresenta:

「短冊」– Tanzaku: os papéis dos desejos que dançam com o vento

☕ Uma história onde o mainframe encontra o céu estrelado


Se você já viu uma árvore enfeitada com tiras coloridas de papel balançando sob o céu noturno de julho, parabéns — você testemunhou um dos rituais mais poéticos do Japão: o Tanzaku (短冊), os papelzinhos dos desejos do festival Tanabata (七夕).

Mas por trás daqueles papéis balançando graciosamente ao vento, há séculos de poesia, astronomia, amor e superstição — e, claro, umas boas fofoquices cósmicas.


🌌 A origem: amor, estrelas e caligrafia

O Tanzaku nasceu junto com o Tanabata Matsuri, o Festival das Estrelas, celebrado em 7 de julho.
A lenda fala de Orihime (a princesa tecelã) e Hikoboshi (o pastor de estrelas) — amantes separados pela Via Láctea, que só podem se encontrar uma vez por ano.

Durante essa época, o povo japonês começou a escrever poemas e desejos em pequenos papéis coloridos — os tanzaku — e pendurá-los em bambus, acreditando que o vento levaria os pedidos ao céu.

Os primeiros registros datam do período Heian (794–1185), quando a aristocracia japonesa já amava transformar tudo em arte, inclusive os sonhos.


🪶 O formato do sonho

O Tanzaku é uma pequena tira retangular de papel, tradicionalmente de washi (papel japonês feito à mão), e cada cor tem um significado simbólico — como se fosse o JCL dos desejos:

CorSignificado“Parâmetro espiritual”
🟦 AzulAprendizado, sabedoria//TANZAKU EXEC PGM=ESTUDO
🟥 VermelhoAmor, paixão, coragem//HEART DD DISP=SHR
🟩 VerdeSaúde, vitalidade//LIFE DD SYSOUT=*
🟨 AmareloAmizade, prosperidade//SOCIAL DD DISP=KEEP
⚪ BrancoPureza, introspecção//SOUL DD DCB=(RECFM=F)

As pessoas escrevem frases curtas — desejos, metas, orações ou até confissões românticas — e penduram nos ramos de bambu, símbolo de força e flexibilidade.


💫 Curiosidades que o El Jefe adoraria

  • 🎋 Depois do festival, os bambus com tanzaku costumam ser queimados ou lançados em rios, para que os desejos subam aos céus com a fumaça — um upload celestial.

  • 🖌️ Antigamente, estudantes escreviam pedidos para melhorar sua caligrafia, em homenagem à deusa tecelã Orihime.

  • 🌠 A prática foi inspirada na tradição chinesa do Qixi, que também celebra o encontro das estrelas Vega e Altair.

  • 📜 Monges zen veem no tanzaku um exercício de impermanência — o vento leva o desejo, o tempo leva o papel.


💕 Fofoquices do universo

Reza a lenda que, se chove no Tanabata, Orihime e Hikoboshi não conseguem se encontrar, e o choro dos amantes forma os rios da Terra.
Mesmo assim, há quem acredite que, quando o vento balança um tanzaku, é Hikoboshi sussurrando “vou te ver de novo”.

E no Japão moderno?
Os tanzaku viraram até memes!
Muita gente escreve desejos engraçados como “Quero férias pagas” ou “Tomara que meu chefe nunca descubra o bug de produção” 😂


📺 Tanzaku nos animes

Ah, o espírito dos desejos está em todo lugar no universo otaku:

🌌 “Your Name (君の名は)” — a ligação entre os protagonistas ecoa o mesmo fio invisível do Tanabata e seus desejos.
🎋 “Clannad” — há uma cena com tanzaku que representa esperanças e reconciliação familiar.
🌠 “Kimi ni Todoke” — os desejos românticos dos estudantes sob o bambuzal são puro Tanabata moderno.
✨ “Cardcaptor Sakura” — um episódio inteiro mostra os tanzaku e a crença na magia dos pedidos inocentes.

E claro:
em muitos slice-of-life, o tanzaku é aquele toque final — o detalhe que transforma uma cena cotidiana num momento de poesia.


🌿 Dica Bellacosa Mainframe

Escreva o seu próprio tanzaku digital.
Abra seu terminal e digite:

DISPLAY "願い事: Que eu nunca perca a curiosidade pelos mistérios da vida."

Depois...
feche os olhos e imagine seu desejo sendo compilado no universo,
com retorno code 0000.


☕ Conclusão

O Tanzaku é mais do que papel e tinta — é um lembrete de que todo sonho precisa ser escrito, mesmo que o vento o leve embora.
Porque, no fim das contas, a esperança também precisa de um JOB agendado.


🎋 Bellacosa Mainframe – onde até os desejos têm um SYSOUT no céu.
Post do blog El Jefe, edição especial Tanabata Night.


quarta-feira, 6 de julho de 2022

Viagem ao Fundo do Banco — O Dia em que o Seaview Mergulhou no Db2 para Descobrir Quem Cobrou o Mesmo Pedido Duas Vezes

 

Bellacosa Mainframe analisando querys sob a otica de um QA

☕ Um Café no Bellacosa Mainframe

Viagem ao Fundo do Banco — O Dia em que o Seaview Mergulhou no Db2 para Descobrir Quem Cobrou o Mesmo Pedido Duas Vezes

Ou: como SELECT, JOIN, GROUP BY, HAVING, Window Functions, timestamps, logs, APIs, retries, idempotência, observabilidade e um pouco de desconfiança transformam SQL de “consulta ao banco” em instrumento forense — e por que o Almirante Nelson jamais aceitaria “acho que tem dado duplicado” como relatório de missão

Imagine a cena.

O relógio marca 02:17 da madrugada.

No Centro de Processamento de Dados, alguém acabou de descobrir que clientes podem estar sendo cobrados duas vezes. O telefone do suporte toca. O monitor de produção pisca. O café da máquina já passou da classificação “bebida” para “reagente químico”.

E, estacionado metaforicamente no fundo do oceano de dados, encontra-se o Seaview, o submarino de Viagem ao Fundo do Mar.

O Almirante Nelson olha para o painel.

O Capitão Crane olha para Nelson.

Chip Morton olha para os instrumentos.

E Kowalski, que provavelmente teve a infelicidade de ficar com o plantão daquela madrugada, pergunta:

— Almirante, encontramos doze registros estranhos. Posso abrir o incidente?

Nelson responde:

— Encontrou doze registros ou descobriu o que aconteceu?

Silêncio no submarino.

E é exatamente aqui que começa nossa viagem.

Porque muita gente aprende SQL como se fosse apenas isto:

SELECT *
FROM CLIENTES;

Depois aprende:

WHERE
ORDER BY
GROUP BY
JOIN

faz algumas provas, ganha um certificado e conclui:

“Eu sei SQL.”

Mas saber SQL não é apenas conhecer sua gramática.

Da mesma maneira que conhecer COBOL não significa saber investigar um S0C7, conhecer SELECT não significa saber investigar produção.

A diferença aparece quando existe um incidente real.

E neste artigo vamos descer lentamente até o fundo desse oceano.



1. Primeiro mergulho — o chamado chegou da superfície

Nossa história começa com uma reclamação:

“Alguns clientes parecem ter sido cobrados duas vezes.”

Observe a palavra perigosa:

parecem.

Não temos ainda um bug.

Temos uma suspeita.

O primeiro erro de um investigador inexperiente é tentar provar imediatamente que sua primeira ideia está correta.

O investigador experiente faz algo diferente.

Ele transforma suspeitas em perguntas.

Por exemplo:

Existem realmente duas cobranças?

Quantos clientes foram afetados?

Quando aconteceu?

Os valores são iguais?

Os casos possuem algo em comum?

Houve deploy?

Houve timeout?

Houve retry?

A primeira cobrança já tinha sido processada quando o retry aconteceu?

Esse é o verdadeiro começo da investigação.

Não é SQL.

É pensamento investigativo.

SQL virá depois como sonar.



2. O QA Jr liga o sonar

Nosso primeiro tripulante executa:

SELECT *
FROM PEDIDOS
WHERE STATUS = 'ERROR';

Resultado:

12 linhas

E abre o ticket:

“Existem 12 pedidos com erro no banco.”

Isso está errado?

Não necessariamente.

É uma observação válida.

O problema é que ela praticamente não responde à reclamação original.

Pedidos com erro podem existir por dezenas de motivos:

endereço inválido
estoque indisponível
cartão recusado
timeout
cancelamento
erro de integração
falha de cadastro

E nenhum deles necessariamente implica cobrança duplicada.

O QA Jr encontrou peixes no oceano.

Ainda não encontrou o submarino desaparecido.


3. Um SELECT pode responder perfeitamente à pergunta errada

Esta é uma das lições mais importantes de SQL.

Imagine:

SELECT *
FROM PAGAMENTOS
WHERE STATUS = 'APROVADO';

O banco retorna:

427.816 linhas

Excelente.

Agora sabemos que existem pagamentos aprovados.

E daí?

Nada.

O fato de uma consulta retornar dados não significa que ela produziu evidência útil.

Um bom investigador aprende a perguntar:

Qual pergunta exatamente esta query está respondendo?

Se não conseguir responder em português simples, provavelmente ainda não sabe por que está executando aquela consulta.

Por exemplo:

SELECT *
FROM PAGAMENTOS
WHERE PEDIDO_ID = 9;

Agora temos uma pergunta clara:

“Quais pagamentos pertencem ao pedido 9?”

Resultado imaginário:

PAGAMENTO_ID   PEDIDO_ID   VALOR    STATUS      HORARIO

88341          9           999.99   APROVADO    14:32:08
88352          9           999.99   APROVADO    14:32:11

Interessante.

Agora temos dois pagamentos aprovados para o mesmo pedido.

O Seaview acabou de detectar algo grande no sonar.


4. O QA Pleno pergunta: isso aconteceu só uma vez?

Esta é a primeira grande mudança de mentalidade.

O iniciante normalmente encontra um caso.

O profissional mais experiente procura um padrão.

Em vez de investigar apenas o pedido 9:

SELECT
    PEDIDO_ID,
    COUNT(*) AS QTD
FROM PAGAMENTOS
WHERE STATUS = 'APROVADO'
GROUP BY PEDIDO_ID
HAVING COUNT(*) > 1;

Agora estamos dizendo ao banco:

“Agrupe os pagamentos por pedido e mostre apenas aqueles que possuem mais de uma ocorrência aprovada.”

E aparecem:

PEDIDO_ID    QTD

9            2
17           2
28           2
31           2
...

Doze pedidos.

Agora a história mudou.

Não parece mais um registro corrompido isolado.

Existe um padrão.

Mas cuidado.

O Almirante Nelson ainda não autorizaria tocar o alarme vermelho.


5. COUNT(*) > 1 não significa automaticamente bug

Este detalhe é importantíssimo.

Imagine um pedido de R$ 1.000.

O sistema pode permitir:

Cartão A: R$ 500
Cartão B: R$ 500

Duas transações aprovadas.

Perfeitamente legítimo.

Ou pode existir:

Autorização
Captura

duas operações associadas ao mesmo pedido.

Ou:

pagamento
estorno
nova cobrança

Portanto:

HAVING COUNT(*) > 1

não significa:

“Achei o bug!”

Significa:

“Encontrei algo que merece investigação.”

Esta diferença parece pequena, mas separa SQL mecânico de SQL investigativo.


6. Descendo mais fundo: precisamos conhecer a regra de negócio

Antes de perguntar ao banco se algo está errado, precisamos saber o que significa certo.

Suponha que a regra seja:

Para cada pedido, deve existir no máximo uma captura financeira aprovada no valor total do pedido.

Agora conseguimos escrever uma consulta melhor:

SELECT
    PEDIDO_ID,
    COUNT(*) AS QTD_CAPTURAS,
    SUM(VALOR) AS TOTAL_CAPTURADO
FROM PAGAMENTOS
WHERE STATUS = 'APROVADO'
  AND TIPO = 'CAPTURE'
GROUP BY PEDIDO_ID
HAVING COUNT(*) > 1;

Essa consulta já conhece mais do negócio.

Mas ainda podemos melhorar.


7. O verdadeiro problema talvez não seja duplicidade — seja dinheiro a mais

Imagine:

Pedido = R$ 999,99

Captura 1 = R$ 999,99
Captura 2 = R$ 999,99

Se executarmos:

SUM(VALOR)

obteremos:

R$ 1.999,98

Mas o prejuízo excedente não é R$ 1.999,98.

Uma cobrança era legítima.

O excedente é:

R$ 999,99

Então uma consulta mais inteligente seria:

SELECT
    P.ID AS PEDIDO_ID,
    P.VALOR_TOTAL,
    COUNT(PG.ID) AS QTD_CAPTURAS,
    SUM(PG.VALOR) AS TOTAL_CAPTURADO,
    SUM(PG.VALOR) - P.VALOR_TOTAL AS VALOR_EXCEDENTE
FROM PEDIDOS P
JOIN PAGAMENTOS PG
    ON PG.PEDIDO_ID = P.ID
WHERE PG.STATUS = 'APROVADO'
  AND PG.TIPO = 'CAPTURE'
GROUP BY
    P.ID,
    P.VALOR_TOTAL
HAVING SUM(PG.VALOR) > P.VALOR_TOTAL;

Agora a pergunta mudou novamente.

Não estamos procurando apenas:

“Quem possui dois pagamentos?”

Estamos perguntando:

“Quais pedidos receberam mais dinheiro do que deveriam?”

Isso é muito mais próximo do problema real.


8. Easter egg Bellacosa nº 1 — SQL não é VARIG, mas também exige saber para onde você está indo

Um SELECT sem pergunta bem definida lembra aquele passageiro que chega ao aeroporto e diz:

“Quero viajar.”

Excelente.

Para onde?

Um banco de produção pode conter bilhões de registros.

Você precisa de destino.

tabela
período
cliente
endpoint
status
versão
produto
transação

Caso contrário, seu maravilhoso:

SELECT *

é praticamente um bilhete de volta para o DBA perguntar por que você resolveu fazer turismo pelo tablespace inteiro às 14:30.


9. O relógio do Seaview começa a revelar o assassino

Os doze pedidos duplicados possuem outro detalhe.

Veja:

Pedido 9

14:32:08 primeira cobrança
14:32:11 segunda cobrança

Pedido 17:

14:33:24
14:33:27

Pedido 28:

14:34:01
14:34:04

Estranho.

A diferença é quase sempre três segundos.

Esse tipo de repetição é extremamente valioso.

O investigador agora pergunta:

“Existe alguma configuração do sistema que também seja de três segundos?”

Resposta:

HTTP timeout = 3 segundos

O sonar começou a apitar com vontade.


10. Window Functions — quando SQL ganha uma máquina do tempo

Aqui entram funções que assustam iniciantes:

LAG()
LEAD()
ROW_NUMBER()
RANK()
SUM() OVER()

Mas elas são maravilhosas para investigação.

Imagine:

SELECT
    PEDIDO_ID,
    PAGAMENTO_ID,
    CRIADO_EM,
    LAG(CRIADO_EM) OVER (
        PARTITION BY PEDIDO_ID
        ORDER BY CRIADO_EM
    ) AS PAGAMENTO_ANTERIOR
FROM PAGAMENTOS
WHERE STATUS = 'APROVADO';

LAG() basicamente pergunta:

“Qual era o registro anterior dentro desse grupo?”

Para cada pedido, conseguimos olhar para trás.

Algo quase digno do Seaview atravessando uma fenda temporal.

Podemos encontrar:

Pedido 9
Pagamento 1001     14:32:08
Pagamento 1002     14:32:11

E então calcular o intervalo.

Se todos os incidentes apresentam aproximadamente:

3 segundos

temos uma assinatura.


11. Mas SQL ainda não provou a causa

Aqui devemos ser cuidadosos.

Encontramos:

duas cobranças
+
intervalo de 3 segundos
+
timeout configurado em 3 segundos

Isso é uma excelente hipótese.

Mas ainda não significa:

“Provado: retry sem idempotência.”

Para provar o mecanismo, precisamos subir do fundo do banco e consultar outros instrumentos.

Logs.

Tracing.

Histórico de deploy.

Configuração.

Código.

É aqui que uma investigação realmente Sênior começa a parecer uma sala de controle.


12. Logs são a caixa-preta do submarino

Imagine o log:

14:32:08.104
POST /checkout/payment
pedido_id=9
request_id=ABC123

14:32:11.107
TIMEOUT esperando resposta

14:32:11.110
RETRY POST /checkout/payment
pedido_id=9
request_id=DEF456

E o gateway financeiro registra:

14:32:08.350
payment_authorized
transaction=TX8811

14:32:11.340
payment_authorized
transaction=TX8819

Agora conseguimos reconstruir a sequência.

Aplicação
   |
   | cobrança
   v
Gateway
   |
   | aprova
   |
   v
Dinheiro capturado

Resposta demora

Aplicação
   |
   | timeout
   |
   | retry
   v
Gateway
   |
   | aprova novamente
   v
Segunda cobrança

O ponto decisivo é este:

timeout não significa necessariamente que a operação falhou.

Significa apenas:

“Não recebi a resposta no intervalo esperado.”

A operação remota pode ter funcionado perfeitamente.


13. Bem-vindo ao maravilhoso mundo dos sistemas distribuídos

Aqui está um conceito que programadores COBOL acostumados a processamento transacional precisam entender cada vez mais.

Imagine:

Sistema A envia mensagem para Sistema B.

Sistema B processa.

Sistema B responde.

A resposta se perde.

O Sistema A sabe que enviou.

Mas não sabe se B processou.

Então tenta novamente.

Esse é um problema clássico:

“at least once delivery”

ou seja:

a operação pode chegar mais de uma vez.

Se aquilo que será executado envolve dinheiro, estoque, emissão de nota ou alguma alteração irreversível, precisamos de proteção.


14. Entra em cena a idempotência

Uma operação idempotente pode ser repetida sem provocar efeitos adicionais depois da primeira aplicação.

Por exemplo:

PUT /cliente/123

Conteúdo:

{
  "cidade": "Itatiba"
}

Executar dez vezes continua resultando em:

cidade = Itatiba

Agora compare com:

POST /cobrar

Primeira execução:

cobra R$ 999,99

Segunda execução:

cobra mais R$ 999,99

Não é exatamente o tipo de repetição que queremos.


15. A chave mágica: Idempotency-Key

Uma API pode receber:

Idempotency-Key: PEDIDO-9-PAGAMENTO

Na primeira tentativa:

chave não existe
        ↓
processa
        ↓
grava resultado

No retry:

chave já existe
        ↓
não processa novamente
        ↓
retorna resultado anterior

Podemos ainda reforçar isso no banco:

CREATE UNIQUE INDEX UX_PAYMENT_IDEMPOTENCY
ON PAGAMENTOS (IDEMPOTENCY_KEY);

Agora temos duas camadas de defesa.

Aplicação.

Banco.

Se uma falhar, a outra pode impedir o desastre.


16. O mainframe olha para isso e pergunta: “vocês descobriram integridade?”

Quem trabalha com Db2, CICS e sistemas transacionais antigos provavelmente está sorrindo.

Muitos “novos problemas da computação distribuída” têm parentes bem velhos.

Integridade.

Commit.

Rollback.

Locks.

Uniqueness.

Recovery.

Auditoria.

Exatamente as coisas que o mundo mainframe vem discutindo há décadas.

A tecnologia muda.

A física da transação continua bastante teimosa.


17. O QA Sênior pergunta quando começou

Agora encontramos doze casos.

Hora de perguntar:

“Eles sempre existiram?”

Agrupamos por horário.

Exemplo PostgreSQL:

SELECT
    DATE_TRUNC('hour', CRIADO_EM) AS HORA,
    COUNT(*) AS QTD
FROM PAGAMENTOS
GROUP BY DATE_TRUNC('hour', CRIADO_EM)
ORDER BY HORA;

Resultado imaginário:

10h    normal
11h    normal
12h    normal
13h    normal
14h    12 duplicidades
15h    normal

Consultamos deploy:

14:21 nova versão entrou em produção

Primeira ocorrência:

14:32

O deploy entra imediatamente na lista de suspeitos.

Mas atenção.

Correlação temporal ainda não é causalidade.


18. “Depois do deploy” não significa necessariamente “por causa do deploy”

Talvez às 14:30 tenha acontecido:

degradação da rede
latência no gateway
falha no DNS
mudança de feature flag
fila congestionada
mudança de configuração

Portanto um profissional experiente escreve:

“O problema passou a ocorrer após o deploy.”

Em vez de:

“O deploy causou o problema.”

Até encontrar evidência.

Palavras importam.

Em incidentes, elas podem separar investigação de caça às bruxas.


19. Git entra no submarino

Então alguém compara o código.

E encontra:

for tentativa in range(2):
    try:
        return cobrar(pedido)
    except Timeout:
        continue

A intenção era boa.

Resiliência.

Mas existe uma pergunta fundamental:

“Podemos repetir cobrar(pedido) com segurança?”

Se não existir idempotência, o retry pode transformar uma falha de disponibilidade em problema financeiro.

E aqui aparece algo interessante.

O bug não é:

retry

O bug pode ser:

retry + operação não idempotente

Dois componentes perfeitamente razoáveis isoladamente criaram um problema juntos.


20. Causa raiz frequentemente é uma cadeia, não um ponto

Veja uma RCA mais completa:

Deploy muda uma consulta
        ↓
consulta fica mais lenta
        ↓
resposta ultrapassa 3 segundos
        ↓
timeout
        ↓
retry automático
        ↓
primeira chamada continua processando
        ↓
segunda chamada entra
        ↓
não existe idempotência
        ↓
duas capturas

Agora aparecem várias disciplinas:

SQL
performance
API
HTTP
resiliência
banco
observabilidade
arquitetura
negócio

É por isso que bugs interessantes raramente cabem dentro de uma única tecnologia.


21. Onde EXPLAIN ANALYZE entra na história?

Imagine que antes do deploy uma consulta levasse:

200 ms

Depois:

4.200 ms

E o timeout da aplicação seja:

3.000 ms

Podemos investigar o plano.

Em alguns bancos:

EXPLAIN ANALYZE
SELECT ...

Talvez encontremos:

antes:
Index Scan

depois:
Sequential Scan

ou um JOIN produzindo milhões de linhas intermediárias.

Então o aparente incidente:

“clientes cobrados duas vezes”

pode ter começado com:

“uma query perdeu um índice adequado.”

Bem-vindo à engenharia de produção.


22. Easter egg nº 2 — o monstro marinho talvez fosse um FULL TABLE SCAN

No seriado, vez ou outra surgia alguma coisa enorme pela janela do submarino.

Se Viagem ao Fundo do Mar fosse produzido dentro de um CPD, provavelmente a tripulação gritaria:

— Almirante! Há algo gigantesco vindo em nossa direção!

Nelson olharia o monitor:

TABLESPACE SCAN
2.4 bilhões de linhas

— Fechem as comportas e chamem o DBA.


23. O Sênior mede o raio de explosão

Encontrar o bug ainda não basta.

Precisamos saber:

“Quantos foram afetados?”

Suponha:

12 pedidos duplicados

Parece muito?

Pouco?

Não sabemos.

Se existiram:

4.000 pedidos no período

então:

12 / 4000 = 0,003

ou:

0,3%

Isso é o chamado blast radius.

Mas percentual sozinho também engana.

0,3% de usuários pode representar:

R$ 500

ou:

R$ 5 milhões

Por isso precisamos combinar quantidade e impacto.


24. SQL deve calcular impacto com semântica, não só matemática

Um erro muito comum é executar:

SUM(VALOR)

e chamar aquilo de prejuízo.

Nem sempre.

Imagine:

cobrança legítima    R$ 100
cobrança duplicada   R$ 100

SUM:

R$ 200

Impacto excedente:

R$ 100

Agora adicione:

estorno
chargeback
taxas
parcelamento
moeda
captura parcial

e ficará ainda mais delicado.

Dados financeiros exigem entendimento de negócio.


25. Window Functions são excelentes para reconstruir eventos

Vamos usar ROW_NUMBER():

SELECT
    PEDIDO_ID,
    PAGAMENTO_ID,
    CRIADO_EM,
    ROW_NUMBER() OVER (
        PARTITION BY PEDIDO_ID
        ORDER BY CRIADO_EM
    ) AS ORDEM
FROM PAGAMENTOS
WHERE STATUS = 'APROVADO';

Temos:

Pedido 9     Pagamento A     ordem 1
Pedido 9     Pagamento B     ordem 2

Então podemos procurar:

ORDEM > 1

Ou seja:

pagamentos posteriores ao primeiro.

Isso é bastante útil para auditoria.


26. LAG() também pode revelar estados impossíveis

Imagine uma tabela histórica de pedidos:

PEDIDO_ID
STATUS
DATA_EVENTO

Fluxo esperado:

CRIADO
   ↓
PAGO
   ↓
SEPARADO
   ↓
ENVIADO

Agora aparece:

CANCELADO
   ↓
ENVIADO

Opa.

Ou:

CANCELADO
   ↓
PAGO

Podemos usar funções analíticas para enxergar transições.

O SQL deixa de ser apenas fotografia.

Passa a reconstruir filme.


27. Aqui nasce outro conceito poderoso: invariantes

Uma invariante é algo que deveria permanecer verdadeiro.

Exemplo:

estoque não pode ficar negativo.

Consulta:

SELECT *
FROM ESTOQUE
WHERE QUANTIDADE < 0;

Resultado esperado:

0 linhas

Outra:

pedido cancelado não deve receber captura posterior.

SELECT
    P.ID
FROM PEDIDOS P
JOIN PAGAMENTOS PG
    ON PG.PEDIDO_ID = P.ID
WHERE P.STATUS = 'CANCELADO'
  AND PG.STATUS = 'APROVADO'
  AND PG.CRIADO_EM > P.CANCELADO_EM;

Esperado:

0 linhas

Agora SQL tornou-se uma ferramenta de validação de regras.


28. Procure também aquilo que deveria existir e não existe

LEFT JOIN é maravilhoso para isso.

Pagamentos órfãos:

SELECT PG.*
FROM PAGAMENTOS PG
LEFT JOIN PEDIDOS P
       ON P.ID = PG.PEDIDO_ID
WHERE P.ID IS NULL;

Tradução:

“Mostre pagamentos cujo pedido correspondente não existe.”

Pedidos sem pagamento:

SELECT P.*
FROM PEDIDOS P
LEFT JOIN PAGAMENTOS PG
       ON PG.PEDIDO_ID = P.ID
WHERE PG.ID IS NULL;

Isso muda a pergunta.

Você não procura apenas dados estranhos.

Procura ausências estranhas.


29. Cardinalidade: o recife onde muita query naufraga

Existe um problema traiçoeiro.

Suponha:

Pedido
 ├── 2 pagamentos
 └── 5 itens

Faça:

PEDIDOS
JOIN PAGAMENTOS
JOIN ITENS

Pode resultar em:

2 × 5 = 10 linhas

Então você executa:

SUM(PAGAMENTOS.VALOR)

e multiplica dinheiro sem perceber.

Parabéns.

Você acaba de descobrir uma nova modalidade de inflação.

😄

Por isso é fundamental conhecer cardinalidade:

1:1
1:N
N:N

Antes de agregar.

Muitas vezes devemos agregar previamente:

WITH PAGAMENTOS_AGG AS (
    SELECT
        PEDIDO_ID,
        SUM(VALOR) AS TOTAL
    FROM PAGAMENTOS
    GROUP BY PEDIDO_ID
)
SELECT ...

Isso evita explosões causadas pelos JOINs.


30. Uma query pode estar sintaticamente perfeita e semanticamente errada

Este é um conceito que vale guardar.

O banco pode dizer:

SQLCODE = 0

E você ainda assim estar completamente errado.

O SQL executou.

A pergunta estava errada.

No Db2, Oracle, PostgreSQL ou qualquer outro banco, sucesso de execução não significa sucesso de raciocínio.

Um resultado pode ser:

matematicamente correto

e:

conceitualmente inútil

ao mesmo tempo.


31. O QA Sênior procura características discriminantes

Suponha que os doze casos tenham algo em comum:

endpoint = /checkout/payment

Ótimo.

Vamos verificar outro atributo.

gateway = XPTO

Todos os doze.

Outro:

versão = 4.12.7

Todos.

Outro:

retry_count = 1

Todos.

Agora reduzimos enormemente o espaço de busca.

Começamos:

4.000 pedidos

Depois:

12 duplicados

Depois:

1 endpoint

Depois:

1 gateway

Depois:

1 versão

Depois:

retry

Depois:

sem idempotency key

Esse é um método poderoso.

Você está fechando o cerco.


32. Mas agora vem a pergunta que separa investigação de confirmação de viés

Se todos os bugs têm retry, talvez retry seja a causa.

Certo?

Calma.

Pergunte:

Quantos retries ocorreram sem duplicidade?

Isso é importantíssimo.

Imagine:

40.000 retries
12 duplicidades

Então retry sozinho claramente não explica tudo.

Talvez a condição seja:

retry
+
versão X
+
endpoint Y
+
gateway Z
+
ausência de idempotência

O investigador bom não procura somente evidência que confirma sua hipótese.

Ele procura evidência capaz de destruí-la.

Isso é ciência aplicada.


33. Uma curiosidade: correlação pode nos enganar lindamente

Imagine que todos os doze clientes afetados usam Chrome.

Ticket:

“Bug ocorre no Chrome.”

Então alguém consulta a população normal:

98% dos clientes usam Chrome.

Bem...

O Chrome acabou de deixar de ser um suspeito particularmente interessante.

Esse tipo de comparação é essencial.

Pergunte não apenas:

“Os casos ruins possuem X?”

Pergunte também:

“Quantos casos bons possuem X?”


34. O passo a passo de uma investigação madura

Em vez de decorar cinquenta comandos, pense assim.

Comece confirmando existência.

Depois quantifique.

Depois encontre período.

Depois segmente.

Depois procure diferenças entre casos afetados e normais.

Depois correlacione com deploy, configuração e eventos externos.

Depois use logs e tracing para reconstruir sequência.

Depois verifique código.

Depois tente reproduzir.

Depois calcule impacto.

Por fim, valide a correção e crie defesa contra recorrência.

Este é o ciclo completo.


35. O ticket muda completamente

Um ticket inicial pode dizer:

“Há pedidos duplicados.”

Um melhor:

“Encontramos 12 pedidos com duas capturas aprovadas entre 14:32 e 14:57.”

Um ticket realmente útil:

Entre 14:32 e 14:57 foram identificados 12 pedidos com duas capturas financeiras aprovadas, correspondendo a 0,3% dos pedidos do período e R$ 12.430 de cobrança excedente. Todos foram processados pelo endpoint /checkout/payment após o deploy X. As segundas chamadas ocorreram aproximadamente três segundos após as primeiras, valor compatível com o timeout configurado. Os logs mostram retry após timeout enquanto a primeira captura já havia sido concluída pelo gateway. As requisições não apresentavam mecanismo de idempotência. O comportamento foi reproduzido em ambiente controlado.

Isto já não é:

“Tem algo estranho.”

É praticamente um relatório de investigação.


36. Mas nem o Sênior deveria escrever “provei sozinho com SQL”

Esse é um detalhe importante.

SQL é excelente para provar:

existência
quantidade
padrão
período
impacto

Mas causa raiz frequentemente exige:

logs
traces
configuração
código
deploy
reprodução

Portanto, em vez de:

“SQL provou que retry causou o problema.”

Melhor:

“SQL demonstrou o padrão e o impacto; logs e tracing demonstraram o mecanismo de retry; código e reprodução confirmaram a ausência de idempotência.”

Muito mais preciso.


37. O melhor investigador mantém humildade epistemológica

Palavra grande.

Ideia simples.

Não diga:

“Tenho certeza porque minha query voltou 12 linhas.”

Diga:

“Os dados atualmente sustentam esta hipótese.”

Isso permite que uma nova evidência mude sua conclusão.

Produção adora humilhar excesso de confiança.

Ela tem talento para isso.


38. SQL investigativo também precisa respeitar produção

Aqui entra outra lição essencial.

Você está investigando um incidente.

Não deve criar outro.

Evite executar sem necessidade:

SELECT *
FROM PAGAMENTOS;

sobre bilhões de linhas.

Prefira filtros:

WHERE CRIADO_EM BETWEEN ...

Escolha colunas.

Conheça índices.

Use ambiente read-only quando disponível.

Tenha cuidado com dados pessoais.

E nunca confunda:

investigar

com:

“já que estou aqui vou dar um UPDATE rapidinho...”

É assim que nasce a segunda temporada do incidente.


39. No mainframe, RACF estaria observando

Em um ambiente z/OS bem administrado, acesso não deveria significar:

“Faça qualquer coisa.”

Existem permissões.

Auditoria.

Perfis.

Separação de funções.

O equivalente moderno continua sendo:

least privilege
read-only
audit trail
mascaramento
roles
timeouts
resource limits

Um QA não precisa necessariamente possuir poderes para alterar produção.

Ele precisa de visibilidade suficiente para investigar com segurança.


40. Timestamps — as correntes marítimas invisíveis

Outro assassino de investigações:

timezone

Imagine:

Banco: America/Sao_Paulo
API: UTC
Observabilidade: UTC
Deploy: horário local

Banco:

14:32

Log:

17:32

Alguém conclui:

“Não corresponde.”

Mas é o mesmo instante.

Por isso qualquer investigação temporal deve entender:

timezone
precisão
sincronização de relógio
formato

Caso contrário você pode passar três horas procurando um fantasma.


41. Consistência também importa

Banco de produção está vivo.

Você roda:

SELECT COUNT(*)

Às 14:00:00.

Depois:

SELECT SUM(VALOR)

Às 14:01:00.

Enquanto isso, milhares de transações aconteceram.

Talvez você esteja comparando dois universos diferentes.

Dependendo do banco e da investigação, conceitos como:

READ COMMITTED
REPEATABLE READ
SNAPSHOT
MVCC

podem importar.

Até um SELECT tem contexto transacional.


42. Do SQL para Db2 for z/OS

Agora chegamos ao nosso CPD.

Um programador COBOL pode encontrar algo muito parecido em Db2.

Por exemplo:

SELECT PEDIDO_ID,
       COUNT(*) AS QTD
FROM PAGAMENTO
WHERE STATUS = 'A'
GROUP BY PEDIDO_ID
HAVING COUNT(*) > 1;

Nada conceitualmente diferente.

Você pode executar consultas por ferramentas autorizadas como SPUFI ou outras interfaces corporativas.

Depois correlacionar com:

CICS
Db2
MQ
JES
SMF
logs da aplicação
APIs

Imagine um programa COBOL/CICS emitindo uma solicitação.

Depois MQ entrega.

Depois uma API externa processa.

Depois ocorre timeout.

Depois há nova mensagem.

Você pode ter criado no século XXI um problema cuja solução exige disciplina transacional conhecida desde os dinossauros do CPD.


43. Easter egg nº 3 — o Seaview encontrou um SQLCODE

Alarmes.

Luzes vermelhas.

Kowalski:

— Capitão! SQLCODE negativo!

Crane:

— Qual?

— -811, senhor!

Nelson entra correndo.

— Então a query que esperava uma linha encontrou várias. Finalmente o banco resolveu colaborar com a investigação.

Quem trabalha com Db2 conhece o drama.

Uma aplicação espera unicidade.

O banco entrega duas linhas.

De repente uma regra implícita se materializa em erro.

Às vezes o bug esteve ali durante anos, esperando os dados certos para aparecer.


44. O SQL da investigação pode virar teste

Isto é belíssimo.

Você encontra o incidente com:

SELECT PEDIDO_ID
FROM PAGAMENTOS
WHERE STATUS = 'APROVADO'
GROUP BY PEDIDO_ID
HAVING COUNT(*) > 1;

Depois da correção, essa mesma consulta pode se tornar parte de uma validação.

Esperado:

0 rows

Teste:

envia requisição
simula timeout
executa retry

Nova consulta:

0 rows

Excelente.

O incidente se tornou teste de regressão.


45. Melhor ainda: a query pode virar monitoramento

Agora execute periodicamente uma consulta equivalente.

Se:

resultado = 0

normal.

Se:

resultado > 0

alerta.

O fluxo mudou de:

cliente reclama
        ↓
investigamos

para:

sistema detecta
        ↓
investigamos antes de dezenas de clientes reclamarem

Isso é evolução operacional.


46. Sanity check pós-deploy

Antes do deploy você conhece certos números normais:

duplicidades = 0
erros = 0,02%
aprovação = 98,7%
pedidos órfãos = 0

Depois do deploy executa verificações equivalentes.

Se aparece:

erro = 4,8%

não espere o telefone tocar.

Esta é uma aplicação prática excelente de SQL para QA.

SQL deixa de ser apenas “consulta durante defeito”.

Vira instrumento de observabilidade.


47. Migrations também merecem investigação

Imagine:

ALTER TABLE PEDIDOS
ADD COLUMN STATUS_V2 VARCHAR(20);

QA iniciante verifica:

“A coluna existe.”

Bom começo.

QA mais maduro verifica:

SELECT COUNT(*)
FROM PEDIDOS
WHERE STATUS_V2 IS NULL;

Depois:

SELECT
    STATUS,
    STATUS_V2,
    COUNT(*)
FROM PEDIDOS
GROUP BY STATUS, STATUS_V2;

Agora estamos verificando:

estrutura
+
conteúdo
+
coerência

Uma migration pode funcionar tecnicamente e falhar semanticamente.


48. Jr, Pleno e Sênior não são comandos SQL diferentes

Existe uma caricatura comum:

Jr sabe SELECT

Pleno sabe JOIN

Sênior sabe Window Function

Não.

Um Jr pode dominar Window Functions.

Um Sênior pode solucionar um incidente inteiro usando:

COUNT(*)

A diferença é mais interessante.

O Jr pergunta:

“O que existe?”

O Pleno pergunta:

“Que padrão existe?”

O Sênior pergunta:

“Que mecanismo produziria exatamente esse padrão e como posso provar que minha hipótese está errada?”

Isto é maturidade investigativa.


49. E depois do Sênior existe outra pergunta

Imagine alguém no nível Staff, Principal ou arquitetura.

Ele olha para toda a investigação e pergunta:

“Por que nosso sistema permitiu que isso acontecesse?”

Não:

“Quem escreveu esse retry?”

Mas:

Por que uma API financeira não exigia idempotência?

Por que o banco permitia a duplicidade?

Por que não havia alerta?

Por que não existia teste de timeout?

Por que o gateway não possuía reconciliação?

Por que o deploy não tinha sanity check?

Por que demoramos para detectar?

Agora estamos corrigindo o sistema, não apenas o código.


50. Defesa em profundidade — ou quantas comportas possui o Seaview?

Uma arquitetura madura pode colocar várias barreiras:

cliente
   ↓
idempotency key
   ↓
API
   ↓
controle de duplicidade
   ↓
serviço
   ↓
regra de negócio
   ↓
banco
   ↓
unique constraint
   ↓
gateway
   ↓
reconciliação
   ↓
monitoramento

Se uma proteção falhar, outra ainda pode ajudar.

É a mesma filosofia de compartimentos estanques de um submarino.

Uma seção pode sofrer danos sem afundar a embarcação inteira.


51. O verdadeiro papel do SQL

Depois de toda esta viagem, chegamos ao fundo do oceano.

SQL não é apenas:

SELECT
INSERT
UPDATE
DELETE

Para um investigador, SQL permite perguntar:

Onde a realidade deixou de obedecer ao modelo que construímos?

Uma query de QA pode dizer:

mostre pedidos impossíveis
mostre transições inválidas
mostre valores inconsistentes
mostre relacionamentos quebrados
mostre duplicidades
mostre ausências
mostre anomalias temporais

Isso é extraordinariamente poderoso.


52. Uma regra Bellacosa para levar para casa

Antes de executar uma consulta durante um incidente, pergunte:

“Que hipótese estou tentando testar?”

Depois da consulta:

“Este resultado poderia ter outra explicação?”

Depois de encontrar um padrão:

“Os casos normais também possuem esse padrão?”

Depois de encontrar correlação:

“Consigo demonstrar o mecanismo?”

Depois de encontrar a causa:

“Como impedimos que volte?”

Se você incorporar apenas isso à sua maneira de trabalhar, seu SQL ficará muito melhor sem aprender um único comando novo.


Epílogo — Emergindo do fundo do banco

O Seaview finalmente volta à superfície.

Missão concluída.

No relatório inicial havia:

“Acho que tem cobrança duplicada.”

No relatório final temos:

12 pedidos afetados
0,3% da população do período
R$ 12.430 de cobrança excedente
mesmo endpoint
mesmo intervalo
mesma versão
segunda requisição ~3 segundos depois
timeout configurado em 3 segundos
retry confirmado pelos logs
primeira captura já havia sido concluída
ausência de idempotência
problema reproduzido
correção aplicada
constraint adicionada
teste de regressão criado
monitoramento implementado

Almirante Nelson fecha a pasta.

Crane pergunta:

— Então SQL resolveu o caso?

Nelson olha pela janela do submarino.

— Não. SQL nos mostrou onde procurar e quanto dano havia. Logs mostraram a sequência. Tracing mostrou o caminho. Código explicou o mecanismo. O teste provou que conseguimos reproduzir. E a arquitetura nos ensinou por que aquilo jamais deveria ter sido permitido.

No fundo da sala alguém executa:

SELECT COUNT(*)
FROM PAGAMENTOS_DUPLICADOS;

Resultado:

0

Nelson sorri.

Até que Kowalski aparece correndo:

— Almirante...

— O que foi agora?

— Encontramos um pedido cancelado que foi enviado três horas depois.

Nelson olha para Crane.

Crane olha para o café.

O Seaview começa a mergulhar novamente.

Porque em produção, meu caro programador COBOL, todo fundo do mar possui outro fundo logo abaixo.

E talvez essa seja a verdadeira lição da nossa viagem:

o profissional iniciante usa SQL para encontrar registros; o profissional experiente usa SQL para testar hipóteses; o profissional Sênior combina dados, logs, arquitetura e conhecimento de negócio até transformar suspeita em evidência.

Não é o SELECT complicado que encerra o caso.

É a pergunta certa.

E, como diria qualquer veterano do CPD diante de um incidente às duas da madrugada:

antes de culpar o programa, consulte os dados. Antes de culpar os dados, confira o JOIN. Antes de culpar o JOIN, olhe o timestamp. E antes de executar um UPDATE em produção... chame o DBA.

☕ Um Café no Bellacosa Mainframe

Onde às vezes descemos ao fundo do oceano apenas para descobrir que o monstro marinho era um retry de três segundos sem Idempotency-Key.

segunda-feira, 4 de julho de 2022

Quando a inocência encontra o desejo — o desconforto de Usagi Drop

Bellacosa Mainframe apresenta o controverso anime Usagi Drop


Quando a inocência encontra o desejo — o desconforto de Usagi Drop

(Um ensaio Bellacosa sobre limites, afeto e o que nos assusta na ficção)


🌸 O anime que começou com ternura

“Usagi Drop” é, à primeira vista, uma das histórias mais doces que o Japão já produziu.
Um homem adulto, Daikichi Kawachi, assume a criação de Rin — uma menina silenciosa e gentil, filha ilegítima de seu falecido avô.
A narrativa acompanha o florescimento de um vínculo puro, quase sagrado: o amor cotidiano, feito de cuidado, paciência e doçura.

Mas quem prestava atenção notava algo nas entrelinhas: uma ligação emocional profunda, complexa, e não totalmente inocente.
Um amor que, embora paternal, carregava um tipo de intimidade emocional intensa demais para ser simples.


🕊️ O salto que dividiu corações

Quando o mangá avançou no tempo e revelou Rin adulta, confessando seu amor por Daikichi, o público explodiu em raiva.
O que antes era terno tornou-se, de repente, incômodo.
Como aceitar que aquele vínculo — que representava a pureza — se transformasse em algo romântico?

Mas o choque revela algo sobre nós, não apenas sobre a autora.
Afinal, por que esse final parece tão errado, se no fundo muitos já o sentiram possível?


🧩 A psicologia do desconforto

O que Usagi Drop faz é tocar em um ponto raríssimo na ficção moderna:
a ambiguidade emocional.
O amor, quando vivido intensamente, nem sempre se encaixa em rótulos.
Entre o cuidado paternal e a admiração, há uma linha tênue — e é nela que o mangá dança, sem pedir desculpas.

O desconforto vem porque a autora expôs o que o leitor pressentia, mas não queria reconhecer.
Ela quebrou o pacto tácito de “pureza eterna”, e forçou o público a encarar uma emoção que não cabe na moral convencional.


🔥 A coragem (ou imprudência) de Yumi Unita

Yumi Unita não escreveu sobre romance proibido — escreveu sobre o tempo.
Sobre como duas pessoas podem crescer juntas e, ao amadurecer, ver seus papéis se dissolverem.
Ela quis mostrar que o amor muda de forma, e às vezes isso é bonito, às vezes é desconcertante.

Mas o público queria conforto, não reflexão.
Queria um final de laços familiares, não um espelho psicológico.
E quando a arte reflete o que a moral não quer ver, o autor vira vilão.


🧠 Entre o certo e o verdadeiro

Usagi Drop nos coloca diante de uma verdade incômoda:
as emoções humanas não obedecem fronteiras éticas com a mesma rigidez que os códigos sociais.
E a ficção, quando é honesta, nos obriga a olhar para isso.

Não é sobre justificar o final — é sobre entender o que ele revela.
Rin não é símbolo de incesto ou tabus.
Ela é metáfora da passagem do tempo, do afeto que cresce e se transforma, e da fragilidade com que o ser humano redefine seus vínculos.


💬 Comentário Bellacosa

O ódio ao final de Usagi Drop não nasceu de um erro da autora — nasceu do nosso desejo de que o amor fique no formato que nos conforta.
Mas o amor, na vida real, raramente respeita moldes.
Ele muda, confunde, às vezes dói.

Yumi Unita apenas ousou mostrar o que quase ninguém tem coragem:
que até a pureza pode amadurecer e que o amor, quando cresce demais, perde o rótulo e ganha humanidade.



☕ Para pensar

Talvez Usagi Drop nunca tenha sido uma história sobre paternidade.
Talvez sempre tenha sido sobre como o tempo desfaz os papéis e deixa apenas o sentimento nu.

E talvez o desconforto que sentimos não seja sobre eles —
mas sobre o medo de que, dentro de nós, também haja afetos que não cabem nas definições que o mundo aceita.


Porque no fim, o que mais assusta em Usagi Drop não é o que a autora escreveu — é o que ela fez a gente sentir.

https://eljefemidnightlunch.blogspot.com/2018/04/usagi-drop-quando-docura-se-transforma.html

domingo, 3 de julho de 2022

GAIKOTSU KISHI-SAMA, TADAIMA ISEKAI E ODEKAKECHUU — O ISEKAI QUE COLOCOU UM ADMINISTRADOR DE SISTEMAS NÍVEL 99

Bellacosa Mainframe e o gaikotsu kishi-sama tadaima isekai e odekakechuu

☕💣💀 OPERADOR, O SISTEMA ACABA DE DETECTAR UM USUÁRIO ROOT PRESO DENTRO DE UM AVATAR ESQUELÉTICO COM ACESO TOTAL AO REINO!

GAIKOTSU KISHI-SAMA, TADAIMA ISEKAI E ODEKAKECHUU — O ISEKAI QUE COLOCOU UM ADMINISTRADOR DE SISTEMAS NÍVEL 99 DENTRO DE UM ESQUELETO E TRANSFORMOU UMA FANTASIA MEDIEVAL EM UM AMBIENTE DE PRODUÇÃO SEM SUPORTE TÉCNICOS


Identificação do Sistema

Título Original: Gaikotsu Kishi-sama, Tadaima Isekai e Odekakechuu (骸骨騎士様、只今異世界へお出掛け中)

Título Internacional: Skeleton Knight in Another World

Autor da Light Novel: Ennki Hakari

Ilustrador Original: KeG

Estúdio: Studio Kai + HORNETS

Direção: Katsumi Ono

Lançamento do Anime: Abril de 2022

Temporadas: 1

Episódios: 12

Gêneros:

  • Isekai

  • Fantasia

  • Aventura

  • Ação

  • Comédia

  • Sword & Sorcery

Classificação Indicativa:

  • Adolescente e adulto jovem

  • Violência moderada

  • Escravidão

  • Temas de discriminação racial


Sinopse

Um jogador adormece enquanto joga seu MMORPG favorito.

Quando desperta, descobre que foi transportado para outro mundo exatamente na forma de seu personagem.

O problema?

Seu avatar é um cavaleiro lendário absurdamente poderoso.

O problema maior?

Ele também é um esqueleto.

Agora Arc precisa sobreviver em um mundo que considera mortos-vivos monstros perigosos enquanto tenta agir como um herói e evitar que descubram sua verdadeira aparência.


Resumo da História

A estrutura do anime lembra um RPG clássico.

Arc não possui uma missão principal claramente definida no início.

Ele simplesmente viaja.

E é justamente isso que torna a obra interessante.

Ao longo de sua jornada ele encontra:

  • Elfos escravizados

  • Reinos corruptos

  • Mercadores criminosos

  • Monstros

  • Conspirações políticas

  • Espíritos mágicos

O anime funciona quase como uma campanha de RPG de mesa onde cada episódio apresenta uma nova quest.


O Grande Diferencial

A maioria dos isekais modernos segue um padrão:

  • Protagonista vira rei

  • Cria harém

  • Conquista império

  • Torna-se deus

Arc não faz nada disso.

Ele é praticamente um jogador veterano explorando o mapa.

Sua motivação principal é ajudar pessoas.

Isso aproxima a obra dos RPGs clássicos dos anos 90.

Existe muito de:

  • Record of Lodoss War

  • Dragon Quest

  • Ultima

  • Wizardry

misturado à fórmula moderna dos isekais.


Arc: O Operador de Produção Preso no Avatar Errado

O paradoxo central

Arc representa uma ideia curiosa.

Sua aparência é monstruosa.

Seu caráter é heroico.

O anime brinca constantemente com essa inversão.

A sociedade julga pela aparência.

O espectador conhece sua verdadeira personalidade.

É uma metáfora simples, mas bastante eficaz.

Em linguagem Mainframe:

Arc é um programa COBOL impecável executando atrás de uma tela cheia de mensagens de erro.

Por fora parece um desastre.

Por dentro funciona perfeitamente.


Ariane: O RACF dos Elfos

Ariane é uma guerreira élfica.

Inicialmente desconfiada.

Posteriormente torna-se a principal companheira de Arc.

Sua participação expande a narrativa para um dos temas centrais da série:

A escravidão dos elfos

Ariane não existe apenas para servir de parceira de aventura.

Ela representa um povo perseguido.

É através dela que o anime explora:

  • Racismo

  • Xenofobia

  • Tráfico humano

  • Colonialismo

Temas surpreendentemente pesados para uma obra aparentemente leve.


Ponta: O Subsistema Mais Estável do Ambiente

Ponta é um espírito animal.

Funciona como:

  • Mascote

  • Detector de ameaças

  • Alívio cômico

  • Elemento emocional

Mas existe algo mais.

Ponta representa a natureza.

Enquanto humanos exploram e escravizam, Ponta simboliza a harmonia entre os povos e o mundo natural.


A Temática Oculta

Muitos espectadores enxergam apenas um isekai divertido.

Mas existem camadas mais profundas.


1. Preconceito pela Aparência

Arc é julgado constantemente.

Ninguém vê sua alma.

Todos veem apenas o esqueleto.

A obra questiona:

Quanto da nossa opinião sobre alguém é baseada apenas em aparência?


2. Racismo

Os elfos sofrem perseguição sistemática.

São sequestrados.

Vendidos.

Torturados.

O anime usa fantasia para discutir preconceitos humanos reais.


3. Poder e Responsabilidade

Arc poderia dominar o mundo.

Mas escolhe não fazê-lo.

Essa talvez seja a principal mensagem da série.

O verdadeiro herói não é aquele que possui poder.

É aquele que escolhe como utilizá-lo.


4. Identidade

Arc passa boa parte da história escondendo quem realmente é.

Isso gera uma discussão interessante:

Somos aquilo que parecemos?

Ou aquilo que fazemos?


As Aventuras

A jornada de Arc pode ser vista como uma sequência de incidentes operacionais.

Cada região visitada revela um novo problema do sistema.

Quest de Resgate

Libertação de escravos.

Quest Política

Conflitos entre reinos.

Quest Diplomática

Relações entre humanos e elfos.

Quest de Exploração

Ruínas e territórios desconhecidos.

Quest de Combate

Confrontos contra monstros e criminosos.

Essa variedade impede que o anime se torne repetitivo.


Houve Censura?

Sim.

Este é um dos assuntos mais comentados da estreia.

O primeiro episódio possui uma tentativa de violência sexual que gerou controvérsia.

Algumas emissoras e plataformas utilizaram versões editadas.

Existiram transmissões com cortes de determinadas cenas mais pesadas.

A intenção era reduzir o impacto visual para determinadas faixas de exibição.

Curiosamente, após esse começo bastante sombrio, o anime adota um tom muito mais leve na maior parte da temporada.

Essa mudança de tom causou estranheza em parte do público.


Impacto Cultural

Skeleton Knight não revolucionou o gênero.

Mas conquistou uma base sólida de fãs.

Os principais elogios foram:

  • Protagonista carismático

  • Boa animação

  • Humor agradável

  • Fantasia clássica

  • Ausência de harém excessivo

O anime tornou-se especialmente popular entre espectadores cansados dos isekais que seguem exatamente a mesma fórmula.


O Trabalho do Studio Kai

O Studio Kai ficou conhecido por:

  • Uma Musume Pretty Derby Season 2

  • Super Cub

  • Fuuto PI

Em Skeleton Knight entregou:

  • Boas cenas de ação

  • Design fiel à novel

  • Excelente trabalho com armaduras

  • Boa direção de combate

O uso de CGI no personagem Arc poderia ter sido problemático.

Mas foi empregado de forma relativamente discreta.

O resultado final ficou acima da média para um isekai de temporada.


O Que Existe de Diferente?

O anime reúne elementos raros hoje em dia:

✅ Herói genuinamente bondoso

✅ Pouquíssimo foco em romance

✅ Quase nenhum fanservice exagerado

✅ Estrutura de aventura clássica

✅ Mundo de fantasia tradicional

✅ Influência clara dos RPGs antigos

✅ Protagonista overpower sem ser arrogante

Essa combinação faz a obra parecer uma carta de amor aos RPGs da era Dragon Quest.


Avaliação Bellacosa Mainframe ☕

Performance do Sistema

CPU Heroica: 100%

Consumo de Mana: Baixo

ABENDs Narrativos: Poucos

Taxa de Diversão: Alta

Compatibilidade com fãs de RPG clássico: Excelente

Dependência de clichês isekai: Moderada

Disponibilidade do Ambiente: 99,99%


Veredito Final

Gaikotsu Kishi-sama, Tadaima Isekai e Odekakechuu não é o isekai mais revolucionário.

Não possui a profundidade filosófica de Mushoku Tensei.

Não possui a construção política de Overlord.

Não possui a complexidade emocional de Re:Zero.

Mas entrega algo cada vez mais raro:

uma aventura de fantasia honesta, divertida e otimista.

É como executar um velho sistema COBOL que não possui inteligência artificial, blockchain, microserviços ou buzzwords modernas...

...mas continua funcionando perfeitamente há décadas porque foi construído sobre fundamentos sólidos.

Nota Bellacosa Mainframe: 8,5/10

☕💀 Status Final do Job: CONCLUÍDO COM SUCESSO.

Mensagem JES2:

$HASP395 ARC ENDED - RC=0000 - HEROISMO EXECUTADO COM ÊXITO

 

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