Translate

terça-feira, 6 de agosto de 2024

SQLCODE sem Mistérios : O Guia de Sobrevivência do Programador COBOL Padawan diante dos Principais Erros do Db2

 

Bellacosa Mainframe e o sqlcode sem misterios

☕ Um Café no Bellacosa Mainframe

SQLCODE sem Mistérios

O Guia de Sobrevivência do Programador COBOL Padawan diante dos Principais Erros do Db2

Imagine a seguinte cena.

Você acabou de escrever seu primeiro programa COBOL acessando uma tabela Db2. O código compilou. O pré-compilador não reclamou. O BIND terminou aparentemente bem. O JCL foi submetido. O job entrou no JES2, executou alguns segundos e terminou com uma mensagem misteriosa:

SQLCODE = -805

O jovem Padawan olha para o número e pensa:

“Meu programa abendou?”

Talvez sim. Talvez não.

Um SQLCODE negativo não é necessariamente um ABEND do sistema operacional. Ele é uma resposta do Db2 informando que não conseguiu executar determinada instrução SQL. É como se o banco de dados dissesse:

“Recebi sua solicitação, mas existe alguma coisa errada. Aqui está o código que explica o motivo.”

O segredo não é decorar centenas de números. O verdadeiro conhecimento está em aprender a interpretar o contexto, capturar as informações do SQLCA, identificar a instrução que falhou e seguir uma sequência organizada de diagnóstico.

É exatamente isso que faremos neste artigo.

Prepare a caneca, abra o SDSF e venha conhecer o lado Jedi do tratamento de erros SQL em COBOL.


1. Antes do SQLCODE: como COBOL e Db2 conversam?

Um programa COBOL não entende SQL nativamente da mesma maneira que entende comandos como:

MOVE
ADD
PERFORM
READ
WRITE

As instruções SQL aparecem dentro do programa como SQL embutido:

EXEC SQL
    SELECT NOME_CLIENTE
      INTO :WS-NOME-CLIENTE
      FROM CLIENTE
     WHERE COD_CLIENTE = :WS-COD-CLIENTE
END-EXEC.

Durante a preparação do programa, um pré-compilador ou coprocessador Db2 identifica os blocos delimitados por EXEC SQL e END-EXEC, separa o SQL do código COBOL e prepara as estruturas necessárias para a execução. A documentação da IBM estabelece justamente esse formato para aplicações COBOL que emitem comandos SQL. (IBM)

Quando o programa executa uma instrução SQL, o Db2 precisa devolver uma resposta.

Essa resposta inclui, entre outras informações:

  • se a instrução funcionou;

  • se ocorreu um aviso;

  • se nenhum registro foi localizado;

  • se houve erro;

  • qual objeto estava envolvido;

  • quais tokens complementam a mensagem;

  • qual estado SQL representa a situação.

É nesse momento que entra o SQLCA.


2. O que é SQLCA?

SQLCA significa:

SQL Communication Area

Em português:

Área de Comunicação SQL

Ela é uma estrutura de dados usada para transportar informações entre o mecanismo SQL e o programa hospedeiro, como COBOL, PL/I, C ou Assembler.

No COBOL, normalmente incluímos essa estrutura assim:

EXEC SQL
    INCLUDE SQLCA
END-EXEC.

Durante o processo de pré-compilação, essa instrução é substituída pela definição correspondente da estrutura SQLCA. A IBM documenta a composição gerada pelo INCLUDE SQLCA para as diferentes linguagens hospedeiras. (IBM)

Conceitualmente, a origem do SQLCA está ligada à necessidade criada pelo SQL embutido: o banco precisava de uma área padronizada para devolver o resultado de cada operação ao programa que o chamou.

Pense nela como uma pequena central de mensagens.

O COBOL envia:

SELECT este cliente.

O Db2 responde através da SQLCA:

Encontrei.
Não encontrei.
Encontrei, mas houve aviso.
Não consegui porque a tabela não existe.
Não consegui porque o package não foi localizado.
Não consegui porque outro processo está segurando o recurso.

O SQLCODE é apenas o campo mais famoso dessa estrutura.


3. Anatomia básica do SQLCA

Uma representação simplificada da SQLCA em COBOL seria semelhante a esta:

01 SQLCA.
   05 SQLCAID          PIC X(8).
   05 SQLCABC          PIC S9(9) COMP-5.
   05 SQLCODE          PIC S9(9) COMP-5.
   05 SQLERRM.
      49 SQLERRML      PIC S9(4) COMP-5.
      49 SQLERRMC      PIC X(70).
   05 SQLERRP          PIC X(8).
   05 SQLERRD OCCURS 6 TIMES
                       PIC S9(9) COMP-5.
   05 SQLWARN.
      10 SQLWARN0      PIC X.
      10 SQLWARN1      PIC X.
      10 SQLWARN2      PIC X.
      10 SQLWARN3      PIC X.
      10 SQLWARN4      PIC X.
      10 SQLWARN5      PIC X.
      10 SQLWARN6      PIC X.
      10 SQLWARN7      PIC X.
      10 SQLWARN8      PIC X.
      10 SQLWARN9      PIC X.
      10 SQLWARNA      PIC X.
   05 SQLSTATE         PIC X(5).

A definição exata pode variar conforme plataforma, compilador e versão, mas os conceitos permanecem.

SQLCODE

É o código numérico principal retornado pelo Db2.

0       Operação bem-sucedida
+100    Nenhum dado encontrado
positivo diferente de +100
        Operação concluída com aviso
negativo
        Erro

A IBM define que SQLCODE 0 representa sucesso, +100 indica ausência de dados e valores negativos indicam que a execução não foi bem-sucedida. (IBM)

SQLSTATE

É um código de cinco caracteres que classifica a condição de maneira mais padronizada.

Exemplo:

02000

Representa a condição “nenhum dado encontrado”, equivalente ao SQLCODE +100.

SQLCODE é muito usado historicamente em ambientes Db2 e mainframe. SQLSTATE é útil por apresentar uma categorização mais padronizada entre diferentes sistemas gerenciadores de bancos de dados.

SQLERRMC

Contém tokens associados à mensagem.

Se o erro envolver o nome de uma tabela, coluna, package, plano ou autorização, essa área pode trazer justamente a informação que faltava para entender o problema.

SQLERRML

Informa o comprimento válido do conteúdo de SQLERRMC.

Portanto, não é uma boa prática exibir os 70 bytes de SQLERRMC indiscriminadamente. O ideal é considerar a quantidade indicada por SQLERRML.

SQLERRP

Pode identificar o módulo ou componente que detectou a condição. No Db2 for z/OS, os primeiros caracteres normalmente trazem a assinatura DSN. (IBM)

SQLERRD

É um conjunto de campos numéricos com informações complementares.

Dependendo da instrução e do SQLCODE, eles podem indicar:

  • quantidade de linhas afetadas;

  • códigos internos;

  • informações relacionadas ao processamento;

  • razão complementar de determinadas condições.

A interpretação dos campos SQLERRD depende do contexto. Portanto, nunca conclua que um determinado índice possui sempre o mesmo significado em qualquer SQLCODE.

SQLWARN

É um conjunto de indicadores de aviso.

Quando SQLWARN0 contém W, pelo menos uma condição de warning foi identificada. Outros campos mostram categorias específicas de aviso, como truncamento ou situações relacionadas aos dados retornados. A SQLCA utiliza esse conjunto de indicadores para comunicar warnings ao programa. (IBM)


4. A primeira regra Jedi: sempre teste o SQLCODE

Um dos erros mais perigosos não é receber um SQLCODE negativo.

É ignorá-lo.

Observe este código:

EXEC SQL
    SELECT SALDO
      INTO :WS-SALDO
      FROM CONTA
     WHERE NUM_CONTA = :WS-NUM-CONTA
END-EXEC.

DISPLAY 'SALDO: ' WS-SALDO.

O que acontecerá se a conta não existir?

O Db2 retornará +100. Entretanto, se o programa não verificar o resultado, WS-SALDO poderá continuar contendo um valor anterior, zeros, espaços ou dados residuais.

O programa poderá apresentar um saldo incorreto como se fosse válido.

O padrão correto é:

EXEC SQL
    SELECT SALDO
      INTO :WS-SALDO
      FROM CONTA
     WHERE NUM_CONTA = :WS-NUM-CONTA
END-EXEC.

EVALUATE TRUE
    WHEN SQLCODE = 0
         PERFORM 3000-PROCESSAR-SALDO

    WHEN SQLCODE = +100
         PERFORM 3100-CONTA-NAO-ENCONTRADA

    WHEN OTHER
         PERFORM 9000-TRATAR-ERRO-SQL
END-EVALUATE.

Esse modelo deixa explícitos três caminhos:

sucesso;
ausência de dados;
erro inesperado.

5. SQLCODE 0 — sucesso, mas continue atento

SQLCODE = 0 significa que a instrução foi executada com sucesso.

Exemplo:

EXEC SQL
    UPDATE CONTA
       SET SALDO = SALDO - :WS-VALOR
     WHERE NUM_CONTA = :WS-NUM-CONTA
END-EXEC.

Entretanto, existe uma armadilha.

Um UPDATE pode retornar SQLCODE zero e ainda assim não ter atualizado a quantidade de linhas que sua regra de negócio esperava.

Imagine uma rotina que deveria alterar exatamente uma linha.

Mesmo após SQLCODE zero, pode ser importante verificar a quantidade de linhas afetadas usando as informações apropriadas da SQLCA, de acordo com a instrução e o ambiente.

A pergunta profissional não é apenas:

“Funcionou?”

É também:

“Funcionou exatamente como a regra de negócio esperava?”


6. SQLCODE +100 — nenhum dado encontrado

O +100 é provavelmente o SQLCODE positivo mais conhecido.

Ele significa:

No data found.

Nenhum dado foi encontrado.

Isso pode ocorrer em situações como:

  • SELECT INTO sem linha correspondente;

  • FETCH após o final do cursor;

  • determinadas operações que esperavam encontrar um registro;

  • exclusão ou atualização sem correspondência, conforme a instrução e o contexto.

A IBM associa o SQLCODE +100 e o SQLSTATE 02000 à condição NOT FOUND. (IBM)

Exemplo com SELECT

EXEC SQL
    SELECT NOME
      INTO :WS-NOME
      FROM CLIENTE
     WHERE COD_CLIENTE = :WS-COD-CLIENTE
END-EXEC.

IF SQLCODE = +100
    DISPLAY 'CLIENTE NAO ENCONTRADO'
END-IF.

Exemplo com cursor

PERFORM UNTIL WS-FIM-CURSOR = 'S'

    EXEC SQL
        FETCH C1
         INTO :WS-CODIGO,
              :WS-NOME
    END-EXEC

    EVALUATE TRUE
        WHEN SQLCODE = 0
             PERFORM 4000-PROCESSAR-CLIENTE

        WHEN SQLCODE = +100
             MOVE 'S' TO WS-FIM-CURSOR

        WHEN OTHER
             PERFORM 9000-TRATAR-ERRO-SQL
    END-EVALUATE

END-PERFORM.

Possíveis soluções

  1. Verifique se os valores das host variables estão corretos.

  2. Confirme se a linha realmente existe na tabela.

  3. Verifique espaços, zeros à esquerda e formatos de data.

  4. Confirme se o predicado WHERE não está restritivo demais.

  5. Em cursores, trate +100 como fim normal da leitura.

  6. Inicialize as variáveis de saída antes do SELECT.

Dica Bellacosa

Não trate todo +100 como erro técnico.

Em muitos programas, “cliente não encontrado” é uma condição normal de negócio. Em um cursor, +100 é praticamente o equivalente SQL ao fim de arquivo.


7. SQLCODE -204 — objeto não definido

O -204 informa que o objeto referenciado não está definido no subsistema ou contexto em que a instrução está sendo executada. A documentação da IBM cita essa condição para diferentes tipos de objetos Db2. (IBM)

Exemplo:

SELECT *
  FROM CLIENTES

Mas a tabela correta é:

SISTEMA1.CLIENTE

Causas comuns

  • nome da tabela digitado incorretamente;

  • creator ou schema ausente;

  • tabela existente em outro ambiente;

  • synonym, alias ou view inexistente;

  • programa executando em outro subsistema Db2;

  • objeto ainda não criado;

  • qualificador definido incorretamente no BIND;

  • diferença entre desenvolvimento, homologação e produção.

Passo a passo

  1. Capture o conteúdo de SQLERRMC.

  2. Identifique o nome exato do objeto mencionado.

  3. Confirme o subsistema Db2 em que o programa executou.

  4. Pesquise o catálogo Db2.

  5. Verifique o schema ou creator.

  6. Compare o DDL entre os ambientes.

  7. Verifique os parâmetros de qualificação usados no BIND.

  8. Corrija o nome ou solicite a criação do objeto.

Exemplo de correção

Antes:

EXEC SQL
    SELECT NOME
      INTO :WS-NOME
      FROM CLIENTE
     WHERE CODIGO = :WS-CODIGO
END-EXEC.

Depois:

EXEC SQL
    SELECT NOME
      INTO :WS-NOME
      FROM CADASTRO.CLIENTE
     WHERE CODIGO = :WS-CODIGO
END-EXEC.

8. SQLCODE -206 — coluna não encontrada ou inválida

O -206 geralmente indica que o nome de uma coluna não é válido no contexto da instrução.

Exemplo:

SELECT NOME_COMPLETO
  FROM CLIENTE

Mas a coluna real se chama:

NOME_CLIENTE

Causas comuns

  • erro de digitação;

  • coluna removida ou renomeada;

  • referência incorreta a alias de tabela;

  • SQL dinâmico montado de maneira errada;

  • DCLGEN desatualizada;

  • programa compilado com uma versão antiga do layout;

  • promoção incompleta entre ambientes.

Diagnóstico

  1. Identifique a coluna em SQLERRMC.

  2. Consulte a definição atual da tabela.

  3. Compare o SQL com a DCLGEN.

  4. Confirme se o alias da tabela foi usado corretamente.

  5. Verifique se a coluna pertence à tabela esperada.

  6. Atualize e regenere as estruturas, se necessário.

Armadilha clássica

SELECT C.NOME
  FROM CLIENTE X

A tabela recebeu o alias X, mas a coluna foi qualificada com C.

A correção seria:

SELECT X.NOME
  FROM CLIENTE X

9. SQLCODE -305 — valor NULL sem indicador

O -305 é um dos primeiros grandes encontros do programador COBOL com a diferença entre o mundo COBOL e o mundo relacional.

No Db2, uma coluna pode possuir valor NULL.

No COBOL tradicional, uma variável hospedeira comum não possui, sozinha, um terceiro estado que signifique “valor desconhecido ou ausente”.

Por isso usamos uma variável indicadora.

Exemplo incorreto:

EXEC SQL
    SELECT COMPLEMENTO
      INTO :WS-COMPLEMENTO
      FROM ENDERECO
     WHERE COD_CLIENTE = :WS-COD-CLIENTE
END-EXEC.

Se COMPLEMENTO for NULL, o programa poderá receber -305.

Correção

01 WS-COMPLEMENTO       PIC X(30).
01 IND-COMPLEMENTO      PIC S9(4) COMP-5.

EXEC SQL
    SELECT COMPLEMENTO
      INTO :WS-COMPLEMENTO
          :IND-COMPLEMENTO
      FROM ENDERECO
     WHERE COD_CLIENTE = :WS-COD-CLIENTE
END-EXEC.

Depois:

IF IND-COMPLEMENTO < 0
    MOVE 'NAO INFORMADO' TO WS-COMPLEMENTO
END-IF.

Regra prática

Indicador negativo:

o valor recebido é NULL.

Indicador zero:

o valor não é NULL.

Certas condições positivas podem representar informações adicionais, como truncamento, dependendo da operação.

Passo a passo

  1. Descubra qual coluna permite NULL.

  2. Adicione uma variável indicadora compatível.

  3. Associe o indicador à host variable.

  4. Verifique o indicador após a instrução.

  5. Defina a regra de negócio para valores nulos.

  6. Não confunda NULL com espaços ou zeros.


10. SQLCODE -302 — valor incompatível ou grande demais

O -302 costuma indicar que uma variável de entrada possui um valor incompatível com o tipo ou tamanho esperado.

Exemplo:

01 WS-CODIGO PIC X(20).

A coluna Db2 espera um número pequeno, mas o programa envia:

ABC123

Também pode haver problemas de comprimento, precisão, escala ou representação.

Causas comuns

  • conteúdo alfanumérico enviado para coluna numérica;

  • número maior do que a coluna suporta;

  • escala decimal incompatível;

  • data em formato inválido;

  • host variable com definição incorreta;

  • estrutura COBOL divergente do DCLGEN;

  • indicador ou comprimento incorreto.

Passo a passo

  1. Exiba o valor da host variable antes do SQL.

  2. Verifique o tipo da coluna no catálogo.

  3. Compare PIC, USAGE, comprimento, precisão e escala.

  4. Valide dados recebidos de arquivo, tela ou API.

  5. Verifique sinais e casas decimais.

  6. Utilize DCLGEN atualizada.

  7. Não corrija apenas aumentando o campo sem entender a origem do valor.

Exemplo

Coluna:

VALOR DECIMAL(9,2)

Host variable recomendada:

01 WS-VALOR PIC S9(7)V99 COMP-3.

Um erro de definição poderia fazer o programa enviar uma representação incompatível.


11. SQLCODE -303 — tipos incompatíveis na atribuição

O -303 aparece quando o Db2 não consegue atribuir um valor à variável hospedeira devido à incompatibilidade de tipos.

Exemplo conceitual:

SELECT DATA_NASCIMENTO
  INTO :WS-VALOR-NUMERICO

Se WS-VALOR-NUMERICO não possuir definição compatível com uma data, haverá problema.

Solução

  • compare o tipo da coluna com a PIC da host variable;

  • use DCLGEN;

  • faça conversões explícitas quando justificadas;

  • evite depender de conversões implícitas;

  • verifique CCSID e codificação quando o erro envolver caracteres;

  • confira precisão e escala em campos decimais.


12. SQLCODE -407 — tentativa de gravar NULL em coluna NOT NULL

O -407 representa a tentativa de atribuir NULL a uma coluna que não aceita valores nulos.

Isso pode ocorrer em:

  • INSERT;

  • UPDATE;

  • processamento de indicadores;

  • triggers;

  • valores omitidos sem default apropriado.

Exemplo

INSERT INTO CLIENTE
       (CODIGO, NOME)
VALUES (:HV-CODIGO, :HV-NOME)

Se o indicador associado a HV-NOME estiver negativo, o programa estará tentando inserir NULL.

Caso NOME seja NOT NULL, a operação falhará.

Passo a passo

  1. Identifique a coluna envolvida.

  2. Verifique os indicadores.

  3. Consulte a definição NULL/NOT NULL.

  4. Confirme se existe valor default.

  5. Valide os campos obrigatórios antes do SQL.

  6. Não substitua NULL por espaços sem autorização da regra de negócio.


13. SQLCODE -803 — chave duplicada

O -803 é o guardião da unicidade.

Ele geralmente ocorre quando um INSERT ou UPDATE tenta gerar um valor que viola um índice único ou uma restrição de unicidade.

Exemplo:

INSERT INTO CLIENTE
       (COD_CLIENTE, NOME)
VALUES (100, 'ANA')

Mas já existe um cliente com código 100.

Causas comuns

  • chave primária já existente;

  • índice único violado;

  • contador ou sequência mal controlada;

  • reprocessamento do mesmo arquivo;

  • mensagem MQ processada duas vezes;

  • reinício de job sem checkpoint;

  • concorrência entre processos;

  • lógica “consultar e depois inserir” sujeita a corrida.

Passo a passo

  1. Identifique a constraint ou índice envolvido.

  2. Verifique quais colunas formam a chave única.

  3. Consulte o registro existente.

  4. Descubra se é duplicidade real ou reprocessamento.

  5. Verifique a origem da chave.

  6. Avalie o uso de sequence ou identity.

  7. Torne o processamento idempotente quando necessário.

  8. Não resolva apagando o registro anterior sem análise.

Dica de produção

Em sistemas distribuídos, o -803 pode ser sintoma de uma mensagem repetida, não de um erro humano.

A pergunta correta pode ser:

“Por que esta transação chegou duas vezes?”


14. SQLCODE -805 — package não encontrado

O -805 é um clássico do Db2 for z/OS.

Ele normalmente informa que o Db2 não encontrou o package necessário para executar a instrução SQL.

Seu programa foi compilado, linkeditado e executado, mas o componente Db2 correspondente não foi localizado na collection esperada.

Causas comuns

  • DBRM não foi bindado;

  • BIND PACKAGE não foi executado;

  • collection incorreta;

  • versão incorreta;

  • package removido;

  • plano não possui PKLIST adequado;

  • programa executando em subsistema diferente;

  • promoção incompleta;

  • load module novo com package antigo;

  • package novo com load module antigo.

Passo a passo de diagnóstico

  1. Capture todo o conteúdo de SQLERRMC.

  2. Identifique location, collection, package e consistência.

  3. Confirme qual load module foi executado.

  4. Verifique a STEPLIB ou JOBLIB.

  5. Confirme o subsistema Db2.

  6. Consulte o catálogo para verificar se o package existe.

  7. Confira collection e versão.

  8. Verifique o PKLIST do plano.

  9. Execute ou solicite o BIND correto.

  10. Confirme se programa e package pertencem à mesma construção.

Analogia Bellacosa

O load module é o guerreiro.

O package é o pergaminho com a estratégia SQL.

O plano ou contexto de execução é a autorização para usar determinados pergaminhos.

No -805, o guerreiro chegou ao campo de batalha, mas o pergaminho correto não estava na biblioteca.


15. SQLCODE -818 — incompatibilidade de timestamp

O -818 normalmente indica que o módulo executável e o DBRM/package associado não pertencem à mesma preparação.

Em termos simples:

o código COBOL e o código SQL ficaram fora de sincronia.

Cenário clássico

  1. Programa é pré-compilado.

  2. Um novo DBRM é produzido.

  3. O programa é compilado e linkeditado.

  4. O BIND usa um DBRM antigo.

Ou:

  1. O package foi atualizado.

  2. O load module antigo continua na load library.

Solução passo a passo

  1. Identifique o load module carregado.

  2. Confirme a data e versão do módulo.

  3. Identifique o DBRM usado no último BIND.

  4. Refaça toda a cadeia de construção.

  5. Pré-compile novamente.

  6. Compile novamente.

  7. Faça o link-edit novamente.

  8. Execute o BIND novamente.

  9. Promova load module e package como uma unidade.

  10. Verifique se a execução está lendo a biblioteca correta.

Dica DevOps

Nunca trate o package e o executável como artefatos independentes.

Eles são partes da mesma entrega.


16. SQLCODE -811 — SELECT retornou mais de uma linha

Um SELECT INTO espera, normalmente, uma única linha.

Exemplo:

EXEC SQL
    SELECT NOME
      INTO :WS-NOME
      FROM CLIENTE
     WHERE CIDADE = :WS-CIDADE
END-EXEC.

Se existirem cem clientes na cidade, o Db2 não poderá decidir qual nome devolver.

Resultado:

SQLCODE -811

Causas

  • predicado incompleto;

  • premissa errada de unicidade;

  • dados duplicados;

  • constraint ausente;

  • chave incorreta;

  • regra de negócio mudou;

  • SELECT deveria utilizar cursor.

Soluções

Quando deveria existir apenas uma linha

  • corrija o WHERE;

  • consulte pela chave correta;

  • elimine duplicidades de forma controlada;

  • implemente constraint única quando fizer sentido.

Quando várias linhas são válidas

Use cursor:

EXEC SQL
    DECLARE C1 CURSOR FOR
        SELECT NOME
          FROM CLIENTE
         WHERE CIDADE = :WS-CIDADE
END-EXEC.

Cuidado com a falsa solução

Adicionar algo equivalente a “pegue apenas a primeira linha” pode esconder um problema de dados.

Antes de limitar o resultado, pergunte:

“Qual linha é realmente a correta?”


17. SQLCODE -904 — recurso indisponível

O -904 indica que a instrução não foi executada porque um recurso necessário estava indisponível. A mensagem traz informações como reason code, tipo do recurso e nome do recurso. (IBM)

Possíveis causas

  • tablespace parado;

  • objeto em estado restritivo;

  • partição indisponível;

  • utilitário em execução;

  • recurso não iniciado;

  • problema de comunicação;

  • recurso auxiliar indisponível;

  • condição de recuperação pendente.

Passo a passo

  1. Capture o reason code.

  2. Capture o resource type.

  3. Capture o resource name.

  4. Consulte a documentação do reason code.

  5. Verifique mensagens Db2 no log.

  6. Consulte o estado do objeto.

  7. Verifique utilitários ativos.

  8. Acione o DBA ou suporte de produção com os dados completos.

  9. Não tente repetir indefinidamente sem entender a indisponibilidade.

Dica importante

-904 sem reason code é apenas metade do diagnóstico.

Dizer ao DBA:

“Deu menos novecentos e quatro”

é pouco útil.

Dizer:

“SQLCODE -904, reason 00C9..., resource type ..., resource name ...”

transforma um pedido genérico em uma investigação objetiva.


18. SQLCODE -911 e -913 — deadlock ou timeout

Esses códigos aparecem em situações de contenção, timeout ou deadlock.

Deadlock

Dois processos ficam esperando recursos mantidos um pelo outro.

Exemplo:

Programa A atualiza CLIENTE e espera CONTA.
Programa B atualiza CONTA e espera CLIENTE.

Nenhum consegue continuar.

O Db2 escolhe uma das unidades de trabalho como vítima para liberar o impasse.

Timeout

Um processo aguarda um recurso por mais tempo do que o limite permitido.

Diferença prática

A interpretação exata deve considerar:

  • SQLCODE;

  • reason code;

  • mensagens;

  • rollback executado;

  • ambiente e parâmetros;

  • informações de trace.

Em muitos cenários, -911 aparece quando a unidade de trabalho sofre rollback, enquanto -913 pode indicar uma condição semelhante sem o mesmo comportamento automático de rollback. A confirmação deve ser feita pelos dados complementares, especialmente reason code e SQLERRD. (Comunidade IBM)

Possíveis soluções

  1. Reduza o tempo entre commits.

  2. Não mantenha cursor ou unidade de trabalho aberta desnecessariamente.

  3. Acesse tabelas na mesma ordem em todos os programas.

  4. Atualize somente as linhas necessárias.

  5. Garanta bons índices.

  6. Evite varreduras extensas durante updates.

  7. Analise isolamento e concorrência.

  8. Implemente retry controlado quando permitido.

  9. Não faça retry infinito.

  10. Registre tentativa, horário e chave processada.

Exemplo de retry controlado

MOVE 0 TO WS-TENTATIVAS.

PERFORM UNTIL WS-SUCESSO = 'S'
           OR WS-TENTATIVAS >= 3

    ADD 1 TO WS-TENTATIVAS

    PERFORM 5000-EXECUTAR-TRANSACAO

    EVALUATE SQLCODE
        WHEN 0
             MOVE 'S' TO WS-SUCESSO

        WHEN -911
             PERFORM 5100-PREPARAR-NOVA-TENTATIVA

        WHEN -913
             PERFORM 5100-PREPARAR-NOVA-TENTATIVA

        WHEN OTHER
             PERFORM 9000-TRATAR-ERRO-SQL
             MOVE 'S' TO WS-ENCERRAR
    END-EVALUATE

END-PERFORM.

O retry precisa respeitar a arquitetura da aplicação. Em alguns casos, repetir a operação automaticamente pode duplicar efeitos externos.


19. SQLCODE -922 — falha de autorização

O -922 normalmente está relacionado à autorização, conexão ou acesso a recursos do Db2.

Possíveis causas

  • usuário sem privilégio;

  • plano sem autorização;

  • package sem autorização de execução;

  • falha na conexão;

  • contexto de segurança incorreto;

  • autorização RACF ou Db2 ausente;

  • ambiente executando com outro ID;

  • mudança de owner ou qualifier.

Passo a passo

  1. Identifique o authorization ID em uso.

  2. Capture os tokens da SQLCA.

  3. Verifique o privilégio exigido.

  4. Confirme quem é o owner do package.

  5. Verifique autorização de EXECUTE.

  6. Confira plano, collection e contexto de execução.

  7. Analise mensagens SAF/RACF quando aplicável.

  8. Solicite o GRANT correto.

  9. Nunca peça privilégios excessivos apenas para “fazer funcionar”.


20. SQLCODE -501, -502 e -514 — problemas com cursor

-501

Tentativa de executar FETCH ou CLOSE em cursor que não está aberto.

-502

Tentativa de abrir um cursor que já está aberto.

-514

O cursor não está em estado adequado para a operação, frequentemente por não estar preparado corretamente em cenários de SQL dinâmico.

Checklist de cursor

A sequência esperada é:

DECLARE
OPEN
FETCH
FETCH
FETCH
...
+100
CLOSE

No COBOL:

EXEC SQL
    OPEN C1
END-EXEC.

IF SQLCODE NOT = 0
    PERFORM 9000-TRATAR-ERRO-SQL
END-IF.

PERFORM UNTIL WS-FIM = 'S'

    EXEC SQL
        FETCH C1
         INTO :WS-CODIGO,
              :WS-NOME
    END-EXEC

    EVALUATE SQLCODE
        WHEN 0
             PERFORM 4000-PROCESSAR
        WHEN +100
             MOVE 'S' TO WS-FIM
        WHEN OTHER
             PERFORM 9000-TRATAR-ERRO-SQL
             MOVE 'S' TO WS-FIM
    END-EVALUATE

END-PERFORM.

EXEC SQL
    CLOSE C1
END-EXEC.

Dica

Use flags explícitas:

01 WS-CURSOR-ABERTO PIC X VALUE 'N'.
01 WS-FIM-CURSOR    PIC X VALUE 'N'.

Elas ajudam a impedir OPEN duplicado ou FETCH após fechamento.


21. WHENEVER: útil, mas não mágico

O Db2 permite instruções como:

EXEC SQL
    WHENEVER SQLERROR
    GO TO 9000-ERRO-SQL
END-EXEC.

Também existem:

EXEC SQL
    WHENEVER NOT FOUND
    GO TO 8000-NAO-ENCONTRADO
END-EXEC.

EXEC SQL
    WHENEVER SQLWARNING
    GO TO 8500-WARNING-SQL
END-EXEC.

A IBM documenta que:

  • NOT FOUND corresponde ao +100;

  • SQLERROR corresponde a SQLCODE negativo;

  • SQLWARNING cobre warnings e códigos positivos diferentes de +100. (IBM)

Entretanto, existe uma característica importante:

WHENEVER é uma diretiva tratada durante a preparação do SQL embutido. Seu efeito depende da posição em que aparece no fonte.

Ela não funciona exatamente como uma configuração dinâmica COBOL tradicional.

Risco

Um programador pode colocar:

EXEC SQL
    WHENEVER SQLERROR GO TO 9000-ERRO
END-EXEC.

e depois esquecer que todas as instruções SQL seguintes estarão sujeitas a esse desvio, até que outra diretiva altere o comportamento.

Alternativa explícita

Muitas equipes preferem:

EXEC SQL
    WHENEVER SQLERROR CONTINUE
END-EXEC.

E verificam o SQLCODE após cada comando:

EXEC SQL
    DELETE FROM TEMPORARIA
     WHERE CHAVE = :WS-CHAVE
END-EXEC.

PERFORM 9100-VERIFICAR-SQL.

Isso pode tornar o fluxo mais previsível.


22. Uma rotina COBOL centralizada de tratamento

Uma boa aplicação não deveria espalhar dezenas de DISPLAY SQLCODE improvisados.

Crie uma rotina padronizada:

9000-TRATAR-ERRO-SQL.

    DISPLAY '**************************************'
    DISPLAY '* ERRO DB2                           *'
    DISPLAY '**************************************'
    DISPLAY 'PROGRAMA : ' WS-NOME-PROGRAMA
    DISPLAY 'PARAGRAFO: ' WS-PARAGRAFO-ATUAL
    DISPLAY 'OPERACAO : ' WS-OPERACAO-SQL
    DISPLAY 'SQLCODE  : ' SQLCODE
    DISPLAY 'SQLSTATE : ' SQLSTATE
    DISPLAY 'SQLERRP  : ' SQLERRP
    DISPLAY 'SQLERRML : ' SQLERRML
    DISPLAY 'SQLERRMC : ' SQLERRMC
    DISPLAY 'SQLERRD1 : ' SQLERRD (1)
    DISPLAY 'SQLERRD2 : ' SQLERRD (2)
    DISPLAY 'SQLERRD3 : ' SQLERRD (3)
    DISPLAY 'SQLERRD4 : ' SQLERRD (4)
    DISPLAY 'SQLERRD5 : ' SQLERRD (5)
    DISPLAY 'SQLERRD6 : ' SQLERRD (6)
    DISPLAY '**************************************'

    MOVE 12 TO RETURN-CODE.

Em produção, avalie cuidados com dados sensíveis. Não exiba:

  • senhas;

  • tokens;

  • informações pessoais desnecessárias;

  • números completos de documentos;

  • dados financeiros sigilosos;

  • comandos SQL contendo informações protegidas.

A observabilidade deve ajudar o diagnóstico sem criar uma nova vulnerabilidade.


23. O passo a passo universal de diagnóstico

Quando aparecer um SQLCODE inesperado, siga esta sequência.

Passo 1 — identifique a instrução

Não procure apenas pelo número.

Descubra:

qual programa;
qual parágrafo;
qual instrução SQL;
qual tabela;
qual chave;
qual operação.

Passo 2 — registre a SQLCA

Capture:

SQLCODE;
SQLSTATE;
SQLERRMC;
SQLERRML;
SQLERRP;
SQLERRD;
SQLWARN.

Passo 3 — descubra a categoria

Pergunte:

É sucesso?
É +100?
É warning?
É erro de dados?
É erro de objeto?
É erro de package?
É erro de autorização?
É indisponibilidade?
É concorrência?

Passo 4 — leia os tokens

Muitos SQLCODEs só ficam claros quando analisamos SQLERRMC, reason code, nome do recurso ou nome do objeto.

Passo 5 — reproduza com os mesmos dados

Tente identificar:

  • chave;

  • conteúdo das host variables;

  • ambiente;

  • versão do programa;

  • package;

  • plano;

  • horário;

  • unidade de trabalho.

Passo 6 — compare estruturas

Verifique:

  • DCLGEN;

  • catálogo;

  • copybooks;

  • tipos;

  • comprimentos;

  • indicadores;

  • nullabilidade;

  • índices;

  • constraints.

Passo 7 — corrija a causa, não apenas o sintoma

Exemplo:

Sintoma: -803.
Correção ruim: ignorar toda duplicidade.
Correção real: descobrir por que a transação foi processada novamente.

Passo 8 — crie proteção contra recorrência

Depois de corrigir:

  • adicione validação;

  • melhore o log;

  • crie teste;

  • atualize documentação;

  • ajuste pipeline;

  • implemente monitoramento;

  • reveja commit e rollback.


24. COMMIT e ROLLBACK: a responsabilidade do Padawan

Uma transação Db2 não é apenas uma sequência de comandos.

Ela é uma unidade lógica de trabalho.

Exemplo:

Debitar conta A.
Creditar conta B.
Registrar movimentação.

Essas três ações precisam ser tratadas como um conjunto.

Se a primeira funcionar e a segunda falhar, você não pode simplesmente continuar.

EXEC SQL
    COMMIT
END-EXEC.

confirma a unidade de trabalho.

EXEC SQL
    ROLLBACK
END-EXEC.

desfaz alterações ainda não confirmadas, dentro das regras e do contexto da aplicação.

Cuidado

Não espalhe commits aleatórios apenas para reduzir locks.

Um commit mal posicionado pode quebrar a atomicidade da transação.

O ponto de commit deve refletir a regra de negócio, não apenas uma tentativa de silenciar problemas de concorrência.


25. Dicas de veterano para o COBOL Padawan

Use DCLGEN

A DCLGEN ajuda a alinhar as colunas Db2 com as variáveis COBOL.

Mas lembre-se:

DCLGEN não é um artefato eterno.

Se a tabela mudar, a declaração precisa ser revisada e regenerada.

Inicialize variáveis

Antes de um SELECT INTO, inicialize as variáveis de saída quando isso fizer sentido.

Isso evita o uso acidental de conteúdo anterior após um +100.

Registre o ponto da falha

Antes da instrução:

MOVE 'SELECT-CLIENTE'
  TO WS-OPERACAO-SQL.

Assim a rotina central sabe exatamente qual comando falhou.

Não use apenas DISPLAY

Em aplicações maduras, prefira uma estratégia padronizada de logging, mensagens de aplicação, códigos de retorno e integração com observabilidade.

Diferencie erro técnico de erro de negócio

+100 procurando cliente opcional:
condição de negócio.

-805:
erro técnico de implantação.

-803 ao reprocessar mensagem:
pode representar condição funcional de idempotência.

-911:
condição técnica de concorrência que talvez permita retry.

Conheça o ambiente

Em Db2 for z/OS, o diagnóstico frequentemente envolve muito mais do que o fonte:

  • subsistema Db2;

  • catálogo;

  • package;

  • collection;

  • plan;

  • DBRM;

  • BIND;

  • load library;

  • RACF;

  • JES2;

  • SDSF;

  • logs;

  • utilitários;

  • locks.


26. Curiosidade: SQLCODE não é ABEND

Um SQLCODE negativo indica que uma instrução SQL falhou.

Um ABEND indica encerramento anormal de uma task, job step ou programa.

Os dois podem aparecer juntos, mas não são a mesma coisa.

Um programa bem escrito pode receber -803, tratar a duplicidade e continuar.

Outro programa pode receber +100, ignorar a condição e mais tarde causar um S0C7 porque tentou usar dados inválidos.

Portanto:

SQLCODE negativo não significa automaticamente ABEND.
SQLCODE positivo não significa automaticamente que tudo está correto.

O resultado depende da maneira como o programa reage.


27. Easter egg do Bellacosa Mainframe

Nos filmes, o jovem Jedi pergunta:

“Mestre, como saberei qual caminho seguir?”

O mestre responde:

“Observe a Força.”

No Db2, a resposta seria:

“Observe a SQLCA.”

O SQLCODE mostra a direção geral.

O SQLSTATE mostra a categoria.

O SQLERRMC revela os personagens envolvidos.

O reason code explica a motivação do vilão.

O SQLERRD guarda pistas escondidas.

O log do Db2 conta o que aconteceu fora da câmera.

E o programa COBOL decide se deve:

continuar;
encerrar;
repetir;
fazer rollback;
informar o usuário;
acionar o suporte.

O verdadeiro Sith não é o SQLCODE negativo.

O verdadeiro Sith é o programa que recebe uma mensagem de erro, ignora a SQLCA e continua processando dados como se nada tivesse acontecido.


28. Tabela de bolso do Padawan

SQLCODE   SIGNIFICADO PRINCIPAL
-------   ----------------------------------------------
0         Execução bem-sucedida
+100      Nenhum dado encontrado / fim do cursor
-204      Objeto não definido
-206      Coluna inválida ou não encontrada
-302      Valor de entrada incompatível ou excessivo
-303      Tipos incompatíveis
-305      NULL recebido sem variável indicadora
-407      NULL enviado para coluna NOT NULL
-501      Cursor não aberto
-502      Cursor já aberto
-514      Cursor em estado inadequado
-803      Violação de chave ou índice único
-805      Package não encontrado
-811      SELECT INTO retornou mais de uma linha
-818      Incompatibilidade entre módulo e DBRM/package
-904      Recurso indisponível
-911      Timeout/deadlock com impacto na unidade de trabalho
-913      Timeout/deadlock; analisar rollback e reason code
-922      Falha de autorização ou conexão

Essa tabela é um mapa inicial, não substitui a documentação completa. O catálogo de códigos Db2 fornece explicações, ações do sistema e respostas recomendadas para cada condição. (IBM)


Conclusão: o erro é uma mensagem, não uma sentença

Aprender Db2 com COBOL não significa decorar uma enciclopédia de SQLCODEs.

Significa construir um método.

Quando uma instrução falhar:

  1. pare;

  2. identifique o SQL;

  3. capture a SQLCA;

  4. leia o SQLCODE;

  5. consulte o SQLSTATE;

  6. analise os tokens;

  7. identifique objetos e reason codes;

  8. verifique host variables;

  9. confirme package, plano e ambiente;

  10. corrija a causa;

  11. proteja o sistema contra recorrência.

Com o tempo, os números deixam de parecer mensagens alienígenas.

O +100 passa a significar fim normal de cursor.

O -305 lembra imediatamente uma variável indicadora esquecida.

O -803 aponta para unicidade ou reprocessamento.

O -805 faz você olhar para package, collection e BIND.

O -818 lembra que load module e DBRM precisam caminhar juntos.

O -911 acende o alerta de concorrência, commit e retry.

O -904 exige reason code, resource type e resource name.

Nesse momento, o Padawan deixa de perguntar:

“Por que o Db2 quebrou?”

E começa a perguntar:

“Qual condição o Db2 está comunicando, quais evidências ele forneceu e qual é a resposta correta da aplicação?”

Essa mudança de postura é o nascimento de um verdadeiro programador de sistemas corporativos.

Porque no Bellacosa Mainframe, cada SQLCODE é uma pista, cada SQLCA é um mapa e cada erro corretamente tratado é mais uma transação protegida no coração do IBM Z.

 


segunda-feira, 5 de agosto de 2024

⚠️ A Filosofia do Desejo em Anime

 

Bellacosa Mainframe e a filosofia do desejo em anime

⚠️ A Filosofia do Desejo em Anime

Entre o Fetiche, o Amor e o Tempo

Introdução
O desejo humano sempre foi um sistema arcaico, cheio de ruídos, desvios e obsessões.
Nos animes, ele encontra formas estéticas, narrativas e simbólicas que transformam o olhar em filosofia.
Esta série explora seis aspectos do desejo: o fetiche pelo corpo, pelo poder, pela solidão, pelo caos e, finalmente, pela eternidade.
Não se trata de pornografia nem de moralismo — trata-se de entender como o humano deseja e como o desejo se manifesta através da arte japonesa.


Índice

  1. Parte 1 — Entre o Desejo e o Estilo: 5 Animes na Fronteira do Fetichismo

  2. Parte 2 — Poder, Submissão e o Mito da Mulher Ideal

  3. Parte 3 — O Fetiche da Solidão: amor, vazio e hiperconectividade

  4. Parte 4 — O Amor como Simulação: quando o humano compete com o virtual

  5. Parte 5 — O Amor e o Fetiche do Caos: quando o desejo vira autodestruição

  6. Parte 6 — O Amor e o Fetiche da Eternidade: quando o desejo desafia o tempo


<a name="parte-1"></a>

Parte 1 — Entre o Desejo e o Estilo: 5 Animes na Fronteira do Fetichismo

Existem animes que flertam com o fetiche sem cruzar a linha do hentai.
Eles exploram o corpo, o poder e o detalhe, transformando o olhar em experiência estética.

Animes e destaques:

  • Kill la Kill (2013) — Uniformes que concedem poder e vulnerabilidade.

  • Neon Genesis Evangelion (1995) — O corpo como prisão e desejo psicológico.

  • Prison School (2015) — Controle, punição e humor exagerado.

  • Code Geass (2006) — Poder como sedução.

  • Black Lagoon (2006) — Força e agressividade feminina como fetiche.

Reflexão de Balcão:
O fetiche não é vulgaridade, é olhar, símbolo e poesia do desejo humano.

Inicio


<a name="parte-2"></a>

Parte 2 — Poder, Submissão e o Mito da Mulher Ideal

O desejo humano é ambivalente: dominar e se entregar.
Nos animes, isso aparece como poder e submissão, e o fetiche se torna filosofia visual.

Animes e destaques:

  • Code Geass — O olhar que domina e seduz.

  • Evangelion — Vulnerabilidade e confiança.

  • Personagens femininas — Rei Ayanami, Belldandy, Esdeath, Revy: ideal vs. força.

Reflexão de Balcão:
O fetiche é o que nos revela o que mais desejamos e tememos: o poder e a entrega.

Parte 2


<a name="parte-3"></a>

Parte 3 — O Fetiche da Solidão: amor, vazio e hiperconectividade

A era digital transformou o desejo em pixel, tela e notificação.
O fetiche moderno é o “quase amor”, a conexão impossível e a saudade virtual.

Animes e destaques:

  • Your Name (2016) — Amor à distância e conexão impossível.

  • Oshi no Ko (2023) — Idol como objeto de desejo consumível.

  • Sword Art Online (2012) — Amor simulado em mundos digitais.

  • Violet Evergarden (2018) — Amor traduzido em cartas e palavras.

Reflexão de Balcão:
O fetiche da solidão mostra que o toque pode não existir, mas o desejo persiste.

Parte 3


<a name="parte-4"></a>

Parte 4 — O Amor como Simulação: quando o humano compete com o virtual

O desejo humano se projeta em máquinas e inteligência artificial.
O fetiche se torna programação emocional, onde amar é interagir com a perfeição sintética.

Animes e destaques:

  • Chobits (2002) — Amor por androide que aprende a sentir.

  • Plastic Memories (2015) — Paixão por IA com prazo de validade.

  • Her (2013) — Vínculo emocional digital perfeito.

  • NieR:Automata (2017) — Androides que amam e sofrem como humanos.

Reflexão de Balcão:
O novo fetiche é amar sem risco físico, mas sentir a dor de forma intensamente real.

Parte 4


<a name="parte-5"></a>

Parte 5 — O Amor e o Fetiche do Caos: quando o desejo vira autodestruição

O amor pode ser destrutivo e fascinante ao mesmo tempo.
O fetiche do caos é amar sabendo que vai doer.

Animes e destaques:

  • Neon Genesis Evangelion (1995) — Traumas e desejo de fusão emocional.

  • Perfect Blue (1997) — A obsessão com a própria imagem.

  • Koi Kaze (2004) — Amor proibido e culpa.

  • Nana (2006) — Destruição mútua e vício afetivo.

Reflexão de Balcão:
O caos revela o humano em sua forma mais crua: desejo, dor e vulnerabilidade.

Parte 5


<a name="parte-6"></a>

Parte 6 — O Amor e o Fetiche da Eternidade: quando o desejo desafia o tempo

O último estágio do fetiche é a memória e a saudade.
O amor se torna eterno na lembrança, mesmo quando o tempo insiste em separar.

Animes e destaques:

  • Your Name (2016) — Conexão impossível e destino.

  • 5 Centimeters per Second (2007) — Amor lento e doloroso.

  • Vivy: Fluorite Eye’s Song (2021) — Amor e falha atravessando décadas.

  • The Garden of Words (2013) — Instantes suspensos, o toque que não acontece.

Reflexão de Balcão:
O fetiche da eternidade é amar alguém que talvez nunca exista — e, ainda assim, sentir-se pleno por isso.

Parte 6


Conclusão da Série

Do corpo ao espírito, do toque ao pixel, do caos à eternidade:
o anime nos ensina que o desejo humano é multifacetado.
O fetiche não é apenas sexual, mas filosófico, psicológico e estético.
É o modo de compreender o amor, a saudade, a solidão e a eternidade.

Como todo bom café de balcão, ele deixa resquícios:
uma sensação de prazer, um pouco de dor e muito sobre o que somos.


sábado, 3 de agosto de 2024

Operação Corpo Digital — A Guerra das Medidas, dos Uniformes e dos Avatares 3D

 

Bellacosa Mainframe e os avatares corporais para aquisição de roupas

☕ Um Café no Bellacosa Mainframe

Operação Corpo Digital — A Guerra das Medidas, dos Uniformes e dos Avatares 3D

Quando o Exército precisou conhecer o corpo brasileiro e o comércio eletrônico tentou transformá-lo em dados

A chuva caía sobre o acampamento improvisado.

Botas afundavam na lama. Caminhões descarregavam caixas de uniformes. Em algum ponto do quartel, um recruta tentava fechar uma calça apertada demais, enquanto outro desaparecia dentro de uma gandola larga como uma barraca de campanha.

Na etiqueta, porém, tudo estava correto.

O tamanho era aquele.

Pelo menos era o tamanho previsto pela tabela.

O problema não estava no soldado. Também não estava necessariamente na fábrica. O verdadeiro inimigo permanecia oculto dentro do sistema: as tabelas usadas para projetar as roupas não representavam adequadamente a população que deveria vesti-las.

Era como executar um programa COBOL brasileiro utilizando um arquivo de parâmetros criado para outro país. O processamento poderia terminar com RETURN-CODE ZERO, mas o resultado operacional continuaria errado.

Durante décadas, grande parte da indústria brasileira utilizou tabelas estrangeiras, adaptações de padrões internacionais, levantamentos limitados ou medidas definidas pela experiência particular de cada confecção. O Brasil possuía fábricas, estilistas, costureiras, consumidores e milhões de corpos diferentes, mas não contava com uma representação antropométrica nacional suficientemente ampla e atualizada.

E então surgiu uma missão digna de uma operação militar:

medir o brasileiro.

Não apenas descobrir sua altura média, mas compreender o comprimento dos braços, a circunferência do tórax, a largura dos ombros, o tamanho das pernas, o formato do tronco e a distribuição estatística dessas medidas.

O objetivo parecia simples: produzir roupas que realmente servissem.

Na prática, tratava-se de construir o cadastro mestre do corpo humano brasileiro.



Capítulo 1 — O inimigo invisível dentro da tabela

Antropometria é o estudo das dimensões, proporções e características físicas do corpo humano.

Ela pode analisar medidas como:

  • estatura;

  • peso;

  • largura dos ombros;

  • comprimento dos braços;

  • circunferência do tórax;

  • cintura;

  • quadril;

  • comprimento das pernas;

  • dimensões das mãos, dos pés e da cabeça;

  • alcance funcional dos membros.

Esses dados são utilizados em roupas, veículos, máquinas, móveis, equipamentos de proteção, postos de trabalho, aeronaves, capacetes, coletes e inúmeros outros produtos.

Uma cadeira projetada para um corpo que não corresponde ao usuário causa desconforto. Um painel mal dimensionado torna comandos difíceis de alcançar. Um colete balístico mal ajustado pode limitar os movimentos ou deixar áreas vulneráveis.

No vestuário, o problema aparece imediatamente.

Imagine que uma tabela estrangeira defina determinado tamanho de camisa considerando um homem com braços mais longos, ombros mais largos e uma relação específica entre tórax e cintura. Ao aplicar essa grade diretamente a outra população, o resultado poderá ter mangas compridas demais, ombros deslocados ou excesso de tecido na região abdominal.

Não significa que todos os americanos tenham um corpo e todos os brasileiros tenham outro. Populações são diversas e não cabem em caricaturas anatômicas. A questão é estatística: distribuições de altura, largura, volume e proporção podem variar conforme população, região, idade, alimentação, condições socioeconômicas e período histórico.

Uma tabela adequada precisa representar não apenas a média, mas também a dispersão.

Esse é o detalhe que separa um relatório bonito de uma operação logística eficiente.



Capítulo 2 — O Exército entra em campo

O Exército possui uma vantagem extraordinária para estudos antropométricos: recebe pessoas de diferentes regiões, origens sociais e características físicas.

Todos precisam de uniformes.

Todos precisam de calçados.

Muitos utilizam capacetes, cintos, mochilas, equipamentos de proteção e materiais que devem ajustar-se ao corpo sem prejudicar a mobilidade.

A memória de levantamentos realizados ou apoiados pelas Forças Armadas aparece com frequência em relatos sobre a busca de medidas mais adequadas ao brasileiro. Existem também estudos posteriores envolvendo militares, uniformes, equipamentos e partes específicas do corpo.

Um trabalho acadêmico sobre padronização do vestuário registra, por exemplo, a formação de um projeto nacional de pesquisa antropométrica que pretendia medir 7.600 pessoas.

Outras pesquisas militares destacaram explicitamente o problema de equipamentos baseados em medidas estrangeiras. Um estudo sobre dimensões da cabeça de militares da Aeronáutica observou que produtos apoiados em medidas de outros países podiam provocar desconforto, justificando a obtenção de dados da população militar brasileira.

Entretanto, é importante separar a lembrança histórica da documentação comprovada.

É plausível que as notícias recordadas nos anos 1990 estivessem relacionadas a levantamentos militares, projetos nacionais de antropometria, fabricação de fardamento ou divulgação de referências para a indústria. Porém, não encontrei documentação primária suficiente para afirmar que uma única pesquisa específica do Exército, naquela década, tenha criado e liberado ao público toda a tabela masculina brasileira ou para confirmar os valores exatos da economia anunciada.

A memória central, contudo, faz sentido técnico e logístico.

Quando uma organização compra milhares de uniformes, errar a distribuição dos tamanhos custa caro.

Não basta saber que existem peças P, M, G e GG. É necessário calcular quantas unidades de cada tamanho devem ser adquiridas.

Um estudo sobre a cadeia de suprimentos do Exército demonstrou justamente o uso de estatística para estimar as quantidades de uniformes destinadas aos recrutas, buscando reduzir desperdícios de recursos públicos e melhorar o ajuste das peças.

Em linguagem COBOL, o problema poderia ser representado assim:

PERFORM UNTIL FIM-DO-ARQUIVO
    READ CADASTRO-DE-RECRUTAS
    CLASSIFY BIOTIPO
    ADD 1 TO QUANTIDADE-DO-TAMANHO
END-PERFORM

Mas o verdadeiro poder não está no PERFORM.

Está na qualidade do arquivo de entrada.

Se a classificação de tamanhos estiver errada, o programa processará o erro em velocidade industrial.

Garbage in, uniformes errados out.


Capítulo 3 — Média não veste ninguém

Suponha que a altura média de um grupo seja 1,75 metro.

Isso não significa que a fábrica possa produzir apenas uniformes para pessoas de 1,75 metro.

A média é apenas o centro do campo de batalha.

Para planejar adequadamente, precisamos dos percentis.

O percentil 5 representa, aproximadamente, uma medida abaixo da qual estão 5% dos indivíduos. O percentil 95 indica uma medida abaixo da qual estão 95% deles.

Em ergonomia, muitos projetos tentam atender uma faixa situada entre os percentis 5 e 95. Isso não resolve todos os casos, mas cobre grande parte da população.

No vestuário, diversas medidas precisam ser consideradas em conjunto.

Dois homens com a mesma altura podem apresentar:

  • pernas de comprimentos diferentes;

  • tóraxes distintos;

  • cinturas diferentes;

  • ombros estreitos ou largos;

  • braços curtos ou longos;

  • posturas diferentes.

Por isso, apenas aumentar proporcionalmente um molde não funciona.

Quando uma camisa M é ampliada matematicamente para se tornar G, parte-se do pressuposto de que todas as dimensões corporais crescem na mesma proporção. O corpo humano, porém, não respeita essa regra como um OCCURS DEPENDING ON perfeitamente comportado.

O ser humano não é um registro de comprimento fixo.

Ele é um arquivo variável, com campos correlacionados, exceções e combinações inesperadas.


Capítulo 4 — A norma não encerrou a guerra

O Brasil desenvolveu normas e referências voltadas ao dimensionamento do vestuário. A ABNT NBR 16060, por exemplo, estabeleceu um sistema de indicação de tamanhos para homens, considerando corpos classificados como normal, atlético e especial.

Essas iniciativas representam avanços importantes.

Entretanto, uma norma de referência não significa obrigatoriamente que todas as marcas utilizarão os mesmos moldes.

Uma empresa pode trabalhar com modelagem ajustada. Outra prefere cortes amplos. Uma terceira desenvolve sua própria grade com base no público que costuma comprar seus produtos.

Além disso, a etiqueta da roupa não descreve completamente a geometria da peça.

Duas calças tamanho 42 podem apresentar diferenças em:

  • cintura;

  • quadril;

  • gancho;

  • largura das pernas;

  • comprimento;

  • elasticidade;

  • caimento;

  • encolhimento;

  • posição das costuras.

O tecido também altera a experiência.

Uma calça com elastano tolera variações corporais que um tecido rígido não tolera. Uma camiseta pode encolher depois da lavagem. Um lote pode apresentar diferenças decorrentes do corte, da costura ou do fornecedor.

Portanto, padronizar o corpo é apenas metade da missão.

Também seria necessário descrever a roupa.


Capítulo 5 — O scanner chega ao front

Anos depois, empresas de tecnologia apresentaram uma solução que parecia definitiva.

O cliente entraria numa cabine, permaneceria alguns segundos diante de sensores e sairia com um avatar tridimensional.

O sistema registraria dezenas ou centenas de medidas.

Depois, ao acessar uma loja virtual, o consumidor não precisaria adivinhar entre M, G ou GG. Seu avatar seria comparado digitalmente com a peça desejada.

Em versões mais sofisticadas, a roupa seria projetada sobre o corpo virtual, oferecendo uma prévia do caimento.

Parecia o futuro.

Na prática, era uma espécie de cadastro biométrico corporal:

01 PERFIL-CORPORAL.
   05 ALTURA              PIC 9(3)V99.
   05 TORAX               PIC 9(3)V99.
   05 CINTURA             PIC 9(3)V99.
   05 QUADRIL             PIC 9(3)V99.
   05 BRACO-DIREITO       PIC 9(3)V99.
   05 BRACO-ESQUERDO      PIC 9(3)V99.
   05 COMPRIMENTO-PERNA   PIC 9(3)V99.

A proposta era revolucionária porque transferia o problema da estimativa coletiva para a personalização individual.

A antropometria militar perguntava:

Quantos uniformes de cada tamanho serão necessários?

O scanner perguntava:

Qual roupa servirá exatamente nesta pessoa?

Era a passagem do processamento em lote para a transação online.

Do SORT populacional para a consulta individual em tempo real.


Capítulo 6 — Por que uma ideia tão boa não venceu?

O fracasso não aconteceu porque a tecnologia fosse inútil.

Ela tentou atravessar um território maior do que parecia.

1. Medir o corpo não media a roupa

O scanner podia conhecer perfeitamente o cliente, mas ainda precisava saber as dimensões reais de cada peça.

Para isso, cada modelo, tamanho, coleção e variação precisaria ser digitalizado ou descrito com precisão.

Não bastava registrar:

CAMISA = TAMANHO G

O sistema precisaria conhecer:

OMBRO = 48 CM
TORAX-PECA = 112 CM
MANGA = 66 CM
TECIDO = ALGODAO
ELASTICIDADE = BAIXA
CORTE = SLIM
ENCOLHIMENTO = 3%

Sem esse cadastro, o avatar tinha medidas, mas não possuía um objeto confiável para comparar.

Era como criar um índice Db2 perfeito para uma tabela incompleta.

2. O hardware era caro

Cabines ocupavam espaço, exigiam instalação, calibração, manutenção, treinamento e integração com sistemas de lojas.

Uma rede precisaria decidir quantas unidades instalar, em quais filiais e quem ajudaria o consumidor durante o processo.

O retorno financeiro dependeria da redução de devoluções ou do aumento das vendas.

Se o benefício não compensasse o investimento, o projeto seria encerrado após a fase de demonstração.

3. O consumidor precisava aderir

A tecnologia exigia que a pessoa se deslocasse até uma loja equipada, entrasse numa cabine e aceitasse ser digitalizada.

Alguns usuários poderiam sentir constrangimento, insegurança ou simplesmente preguiça.

Toda etapa adicional reduz a adesão.

O sistema tecnicamente perfeito pode morrer por causa de uma pergunta operacional:

O cliente realmente fará isso?

4. O avatar corporal virou dado sensível

Um modelo tridimensional pode revelar muito mais do que o tamanho de uma camisa.

Pode indicar postura, assimetrias, mudanças físicas e características corporais extremamente pessoais.

Isso cria perguntas difíceis:

  • Quem é o proprietário do avatar?

  • Por quanto tempo ele será armazenado?

  • Poderá ser compartilhado com outras empresas?

  • Como será protegido?

  • O usuário poderá apagá-lo?

  • O que acontece em caso de vazamento?

O problema deixou de ser apenas moda e passou a envolver governança de dados.

5. O padrão universal nunca existiu

Para que o sistema funcionasse em várias lojas, marcas diferentes teriam de compartilhar descrições compatíveis de suas peças.

Seria necessário um verdadeiro protocolo de comunicação da moda.

Algo como:

BODY-ID + GARMENT-ID + FABRIC-BEHAVIOR = FIT-RESULT

Sem interoperabilidade, cada empresa criava seu pequeno reino, seu avatar, seu aplicativo e seu banco de dados.

O consumidor acabava preso a ecossistemas isolados.

Era a velha guerra dos formatos proprietários.

6. A devolução nem sempre acontece pelo tamanho

Uma peça pode ser devolvida porque:

  • a cor pareceu diferente;

  • o tecido não agradou;

  • o acabamento decepcionou;

  • o consumidor mudou de ideia;

  • a compra foi impulsiva;

  • a roupa chegou atrasada;

  • o estilo não combinou com o comprador.

O scanner resolvia apenas parte do problema econômico.

E um sistema caro que resolve parte de um problema precisa demonstrar resultados extraordinários para sobreviver.


Capítulo 7 — O celular atacou pela retaguarda

Enquanto as cabines lutavam para conquistar espaço nas lojas, o smartphone evoluía silenciosamente.

Câmeras melhoraram.

Sensores ganharam precisão.

Visão computacional avançou.

Modelos de inteligência artificial aprenderam a estimar formas humanas a partir de fotografias, silhuetas e vídeos.

Pesquisas demonstraram técnicas para extrair medidas antropométricas de escaneamentos 3D, com erros variando conforme a dimensão analisada.

Outros estudos passaram a estimar medidas por imagens RGB e conjuntos de dados digitais, justamente com aplicações em roupas, ergonomia e análise corporal.

O ataque era inevitável:

Por que instalar uma cabine cara se o consumidor já possui uma câmera no bolso?

A ideia não morreu.

A arquitetura mudou.

O terminal dedicado perdeu espaço para o dispositivo universal.

É a mesma história que vimos na computação. Muitas funções que exigiam equipamentos especializados migraram para software, APIs e serviços executados em plataformas de uso geral.


Capítulo 8 — SIZEBR: o Brasil volta a se medir

A necessidade de conhecer a população brasileira não desapareceu.

O projeto SIZEBR, conduzido pelo SENAI CETIQT, utilizou tecnologias de escaneamento corporal para caracterizar formas e medidas da população brasileira.

A pesquisa produziu referências masculinas e femininas e procurou identificar diferentes formatos corporais, demonstrando que apenas uma sequência linear de tamanhos não representa adequadamente toda a diversidade humana. Resultados e tabelas do projeto foram disponibilizados para auxiliar modelagens da indústria.

O Instituto Nacional de Tecnologia também desenvolveu uma base antropométrica com milhares de adultos e dezenas de medidas relacionadas ao corpo, vestuário, cabeça, pés, mãos e análise biomecânica. Em 2012, uma divulgação institucional mencionava 4.649 adultos e 53 medidas gerais utilizadas no dimensionamento de postos de trabalho, além de conjuntos específicos para vestuário e outras aplicações.

Isso revela uma verdade importante:

o corpo da população não pode ser medido uma única vez e esquecido.

Gerações mudam.

Alimentação muda.

Altura média pode mudar.

Peso e composição corporal mudam.

Hábitos profissionais mudam.

Envelhecimento populacional muda.

Migrações alteram a composição regional.

Uma tabela antropométrica é semelhante a uma estatística de banco de dados.

Sem atualização, o otimizador toma decisões baseadas num mundo que não existe mais.

É preciso executar o RUNSTATS do corpo humano.


Capítulo 9 — O passaporte corporal

A próxima geração talvez não dependa de uma cabine pública.

O processo poderá acontecer assim:

Passo 1 — Captura

O usuário grava um pequeno vídeo com o celular, usando roupas ajustadas e seguindo orientações de posição, iluminação e distância.

Passo 2 — Reconstrução

A inteligência artificial estima a forma tridimensional do corpo.

Passo 3 — Validação

O sistema solicita medidas simples, como altura, para corrigir a escala e reduzir erros.

Passo 4 — Perfil privado

As medidas são armazenadas de forma protegida no dispositivo ou numa carteira digital controlada pelo usuário.

Passo 5 — Consulta autorizada

A loja não recebe necessariamente o corpo completo. Ela pode receber apenas uma autorização temporária para executar a comparação.

Passo 6 — Recomendação

O sistema retorna:

TAMANHO RECOMENDADO: G
NIVEL DE CONFIANCA: 93%
CAIMENTO: AJUSTADO NO TORAX
ALERTA: MANGA 2 CM MAIS LONGA

Passo 7 — Atualização

O avatar pode ser renovado periodicamente, porque o corpo muda.

Esse modelo seria muito mais seguro do que espalhar cópias completas do corpo digital por dezenas de empresas.

No mainframe, a analogia seria evitar a replicação indiscriminada do cadastro mestre. Em vez disso, serviços autorizados consultariam apenas os atributos necessários, com autenticação, auditoria e privilégio mínimo.

A loja não precisa conhecer todos os campos.

Precisa apenas saber se a peça serve.


Capítulo 10 — O COBOL Padawan entra na operação

O programador iniciante pode aprender muito com essa história.

Primeira lição: dados ruins derrotam sistemas bons

Não importa se o programa foi escrito com excelência.

Uma referência corporal estrangeira ou desatualizada produz decisões erradas.

Antes de programar, pergunte:

  • De onde vieram os dados?

  • Quando foram coletados?

  • Quem está representado?

  • Quem ficou de fora?

  • As medidas continuam válidas?

  • Qual é a margem de erro?

Segunda lição: média não representa indivíduo

Sistemas precisam trabalhar com variações.

O registro médio é útil para planejamento, mas raramente descreve uma pessoa real.

Esse princípio vale para roupas, crédito, saúde, desempenho, capacidade, consumo e segurança.

Terceira lição: resolver metade do problema pode não gerar valor

Os scanners mediam o corpo, mas não conheciam todas as roupas.

Em desenvolvimento, isso acontece quando uma equipe constrói uma interface moderna sem integrar corretamente os dados, processos e regras existentes.

A tela funciona.

A demonstração impressiona.

A operação não fecha.

Quarta lição: interoperabilidade é parte do produto

Um avatar preso a uma única loja possui valor limitado.

Um padrão compartilhado teria muito mais força.

No mundo corporativo, APIs, layouts, esquemas, contratos e padrões de comunicação são tão importantes quanto o código.

Quinta lição: privacidade deve nascer com a arquitetura

Não se coleta tudo “para usar depois”.

Dados corporais precisam de finalidade, consentimento, controle de acesso, retenção definida, criptografia e auditoria.

No universo z/OS, pense em RACF, perfis, logs, segregação de funções e acesso baseado em necessidade.

Sexta lição: tecnologia revolucionária também precisa de ROI

Toda solução empresarial enfrenta perguntas duras:

  • Quanto custa?

  • Quanto economiza?

  • Quantos usuários aderem?

  • Quanto tempo leva para implantar?

  • Quem mantém?

  • Qual é o risco?

  • Qual problema mensurável resolve?

Uma boa ideia sem sustentação econômica pode se transformar numa excelente demonstração abandonada.


Curiosidades da operação

O número da etiqueta não é a medida da roupa

Quando uma peça recebe o número 40, isso não significa necessariamente que sua cintura tenha exatamente 40 centímetros ou outra correspondência direta. O número é uma designação dentro da grade criada pelo fabricante.

O corpo humano é assimétrico

Braços, pernas, ombros e lados do tronco podem apresentar diferenças. A modelagem industrial precisa decidir até que ponto considerará essas assimetrias.

O tecido também possui comportamento

Uma simulação realista precisa considerar gravidade, elasticidade, espessura, atrito, costuras e deformação. Exibir uma textura sobre um avatar não equivale a simular o caimento.

Dados antropométricos envelhecem

Uma base produzida décadas atrás pode não representar adequadamente a população atual.

Um produto pode atender ao tamanho e falhar no movimento

Uma roupa pode parecer adequada numa posição estática, mas apertar quando a pessoa levanta os braços, se agacha ou caminha. Por isso, ergonomia também considera medidas funcionais e movimento.


Easter eggs para quem patrulha o mainframe

O primeiro está escondido no cadastro corporal: nem todo arquivo humano possui RECFM=FB. Alguns corpos são definitivamente RECFM=VB.

O segundo aparece quando a camisa fecha, mas o botão ameaça abandonar a posição: não é um S0C7, porém certamente existe um campo recebendo valor maior do que o definido na PIC.

O terceiro está no depósito de uniformes. Em algum canto escuro, ainda existe uma caixa com centenas de peças tamanho impossível, aguardando um IDCAMS DELETE PURGE.

O quarto é para quem reconheceu a atmosfera da patrulha: no fim da missão, o verdadeiro conflito não ocorre apenas entre homens, máquinas ou fornecedores. Ele acontece entre o sistema que descreve o mundo e o mundo que se recusa a caber na descrição.


Conclusão — Nenhum plano sobrevive intacto ao contato com o corpo humano

A pesquisa antropométrica militar procurava produzir uniformes melhores e planejar aquisições com menos desperdício.

As tabelas brasileiras tentaram substituir referências inadequadas por dados mais próximos da população real.

Os scanners 3D quiseram dar um passo adiante: abandonar a média e criar uma versão digital de cada consumidor.

A ideia parecia destinada a dominar o comércio eletrônico.

Ela não dominou porque o corpo era apenas uma parte do sistema.

Também seria necessário digitalizar roupas, padronizar informações, convencer marcas, reduzir custos, proteger dados sensíveis e criar uma experiência simples para o consumidor.

A primeira geração entrou na selva tecnológica carregando hardware caro, bases isoladas e expectativas gigantescas.

Não foi destruída por um único inimigo.

Foi cercada por dezenas de pequenos problemas operacionais.

Ainda assim, a missão não terminou.

Hoje, smartphones, inteligência artificial, visão computacional, avatares 3D e carteiras digitais estão reconstruindo a mesma proposta com uma arquitetura diferente.

Talvez o futuro não seja uma cabine instalada no shopping.

Talvez seja um pequeno vídeo realizado em casa, transformado localmente num perfil corporal protegido.

O usuário poderá entrar numa loja virtual e perguntar:

Esta roupa realmente servirá em mim?

O sistema consultará as medidas, o molde, o tecido e o histórico daquele produto.

Então responderá com precisão maior do que qualquer letra P, M ou G.

A grande lição para o COBOL Padawan é clara:

antes de automatizar o mundo, precisamos descrevê-lo corretamente.

Quando a tabela não representa a população, a farda não serve.

Quando o cadastro não representa a peça, o avatar erra.

Quando o sistema ignora a realidade, o processamento pode terminar normalmente — mas a operação fracassa.

No campo de batalha dos dados, não vence o programa mais moderno.

Vence aquele que conhece o terreno.


 


sexta-feira, 2 de agosto de 2024

☕🚀 O QUE ANIMES, QUADRINHOS, CENSURA E A INQUISIÇÃO TÊM EM COMUM? UMA VIAGEM PELA PSICOLOGIA HUMANA

Bellacosa Mainframe e a censura nos animes

☕🚀 O QUE ANIMES, QUADRINHOS, CENSURA E A INQUISIÇÃO TÊM EM COMUM? UMA VIAGEM PELA PSICOLOGIA HUMANA

Ao longo das últimas semanas me peguei refletindo sobre um tema aparentemente simples.

Tudo começou com uma notícia sobre tentativas de aumentar controles e restrições sobre determinados animes e mangás japoneses.

Nada de novo.

Quando eu era adolescente, o alvo eram os quadrinhos.

Antes dos quadrinhos, foram os romances populares.

Depois vieram os videogames.

Mais tarde a internet.

Agora os animes.

A cada geração parece surgir uma nova ameaça capaz de destruir a juventude, corromper a sociedade e colocar em risco a civilização.

A pergunta que me veio à mente foi simples:

Por que a humanidade repete esse comportamento há séculos?

Ao investigar essa questão acabamos entrando em um território fascinante que mistura psicologia, sociologia, política, religião e até arqueologia cultural.

Prepare seu café.

A viagem é longa.

☕ A ILUSÃO DE QUE O PROBLEMA ESTÁ SEMPRE NO OBJETO

Quando eu tinha cerca de 15 anos, andar com quadrinhos debaixo do braço era motivo para receber conselhos não solicitados.

Sempre aparecia alguém dizendo:

"Você deveria ler livros de verdade."

O curioso é que eu lia livros.

Muitos livros.

Mas isso não importava.

O quadrinho era visto como um símbolo de atraso intelectual.

Décadas depois, muitos daqueles mesmos quadrinhos são estudados em universidades.

O que mudou?

Os quadrinhos ficaram mais inteligentes?

Ou fomos nós que mudamos nossa percepção?

A resposta nos leva a um fenômeno conhecido na psicologia social como Pânico Moral.

☕ O QUE É PÂNICO MORAL?

O pânico moral ocorre quando uma sociedade identifica um fenômeno novo e passa a enxergá-lo como uma ameaça exagerada aos seus valores.

A lista histórica é impressionante:

  • Romances populares

  • Cinema

  • Rádio

  • Rock and Roll

  • Histórias em quadrinhos

  • RPG

  • Heavy Metal

  • Videogames

  • Internet

  • Redes sociais

  • Animes

O padrão é quase sempre idêntico.

Uma geração mais velha observa um hábito que não compreende completamente.

Surge então a suspeita:

"Isso está estragando os jovens."

Décadas depois, aquilo se torna normal.

Então aparece um novo alvo.

☕ A REATÂNCIA PSICOLÓGICA: O EFEITO DO FRUTO PROIBIDO

Existe uma teoria fascinante proposta pelo psicólogo Jack Brehm chamada Reatância Psicológica.

Ela afirma que quando percebemos que alguém está tentando restringir nossa liberdade, surge um impulso natural para recuperar essa liberdade.

Em termos simples:

Quanto mais tentam proibir algo, mais interessante aquilo se torna.

Esse mecanismo explica o famoso Efeito Streisand.

Quando uma informação é censurada, ela frequentemente se torna mais popular.

O mesmo acontece com livros proibidos, músicas censuradas, filmes vetados e animes controversos.

O cérebro humano possui uma curiosidade quase irresistível pelo proibido.

☕ CORRELAÇÃO NÃO É CAUSALIDADE

Uma das armadilhas mais comuns do pensamento humano é confundir correlação com causalidade.

Se alguém que cometeu um crime assistia filmes violentos, surge a conclusão:

"Os filmes causaram o crime."

Mas essa lógica possui um problema enorme.

Milhões de pessoas assistem exatamente os mesmos filmes e jamais cometem qualquer ato violento.

O mesmo vale para:

  • Animes

  • Jogos

  • Livros

  • Música

A realidade costuma ser muito mais complexa.

Eventos humanos raramente possuem uma única causa.

Massacres, violência e radicalização normalmente envolvem fatores psicológicos, familiares, econômicos, culturais e sociais simultaneamente.

Mas nosso cérebro prefere explicações simples.

E é aí que surgem os bodes expiatórios.

☕ O MECANISMO DO BODE EXPIATÓRIO

Talvez uma das descobertas mais desconfortáveis da psicologia social seja esta:

Seres humanos possuem uma enorme tendência a procurar culpados.

Quando algo dá errado, buscamos alguém para responsabilizar.

É um comportamento ancestral.

Uma colheita fracassou.

Uma epidemia apareceu.

A economia entrou em crise.

Quem é o culpado?

A busca por culpados produz uma sensação temporária de controle.

Mesmo que a explicação seja falsa.

Esse mecanismo aparece repetidamente na história.

☕ DA INQUISIÇÃO ÀS REDES SOCIAIS

Quando estudamos a Inquisição encontramos algo surpreendente.

As vítimas raramente representavam uma ameaça real.

Judeus.

Mouros.

Hereges.

Parteiras.

Mulheres idosas.

Pessoas diferentes.

A grande pergunta é:

Por que eram consideradas tão perigosas?

Porque o medo coletivo amplifica ameaças.

Quando uma sociedade acredita estar enfrentando um perigo existencial, qualquer diferença pode parecer uma ameaça.

A psicologia das multidões transforma suspeitas em certezas.

E certezas em perseguições.

A tecnologia mudou.

A natureza humana nem tanto.

☕ O PODER DOS GRUPOS

Outra teoria importante é a Teoria da Identidade Social.

Ela explica nossa tendência de dividir o mundo em:

"Nós"

e

"Eles"

Essa divisão surge naturalmente.

Meu time.

Minha religião.

Meu partido.

Minha comunidade.

Meu país.

Não há nada de errado nisso.

O problema surge quando passamos a acreditar que:

"Nós somos legítimos."

"Eles são o problema."

É exatamente nesse ponto que conflitos sociais começam a crescer.

☕ A TIRANIA DA MAIORIA

Quando pensamos em regimes autoritários normalmente imaginamos ditadores.

Mas filósofos como Alexis de Tocqueville identificaram outro perigo.

A tirania da maioria.

Imagine uma sociedade dividida em dois grupos.

51% contra 49%.

Se os 51% puderem impor tudo aos demais, a democracia continua existindo apenas no papel.

É por isso que surgiram:

  • Constituições

  • Direitos fundamentais

  • Liberdade religiosa

  • Liberdade de expressão

Esses mecanismos não existem para proteger opiniões populares.

Existem para proteger opiniões impopulares.

☕ O DILEMA DA CENSURA

Toda censura nasce de uma justificativa.

Sempre.

Proteger a moral.

Proteger as crianças.

Proteger a sociedade.

Proteger a segurança nacional.

O problema raramente está na intenção inicial.

O problema está na pergunta seguinte:

Quem decide?

Quem recebe o poder de determinar o que pode ser lido?

O que pode ser assistido?

O que pode ser publicado?

A história mostra que essa pergunta é mais importante do que a justificativa utilizada.

Porque governos mudam.

Ideologias mudam.

Maiorias mudam.

Mas os mecanismos de controle permanecem.

☕ O JAPÃO, OS ANIMES E UMA CONTRADIÇÃO INTERESSANTE

Muitas críticas modernas aos animes partem da ideia de que obras violentas produzem comportamentos violentos.

Mas a realidade apresenta um quadro mais complexo.

O Japão produz algumas das obras mais violentas e sombrias da cultura popular moderna.

Ainda assim apresenta índices de violência muito inferiores aos de diversos países ocidentais.

Isso não prova que a mídia não influencia ninguém.

Mas demonstra que explicações simplistas raramente funcionam.

O comportamento humano é multifatorial.

E talvez essa seja uma das palavras mais importantes da psicologia moderna:

Multifatorial.

☕ O SER HUMANO É UMA MÁQUINA DE NARRATIVAS

Existe uma razão pela qual gostamos tanto de histórias.

Nosso cérebro foi moldado para compreender o mundo através delas.

Mitologias.

Religiões.

Romances.

Quadrinhos.

Animes.

Filmes.

Todas essas formas narrativas servem para explorar medos, sonhos e conflitos humanos.

Quando alguém lê Berserk, assiste Attack on Titan ou acompanha um drama psicológico, não está necessariamente procurando um modelo de comportamento.

Muitas vezes está explorando simbolicamente aspectos da condição humana.

☕ O ARQUEÓLOGO DE 2526

Durante uma conversa surgiu uma hipótese divertida.

Imagine um arqueólogo vivendo daqui a 500 anos.

Ele encontra:

  • Garrafas de Coca-Cola

  • Smartphones

  • Mangás

  • Bonecos de Pokémon

  • Estatuetas de Goku

O que ele concluiria?

Talvez que esses símbolos possuíam enorme importância cultural.

E provavelmente estaria correto.

Assim como estudamos vasos gregos e moedas romanas, futuros historiadores talvez estudem Pikachu, Mario e Goku para compreender o século XXI.

Isso mostra algo fascinante.

Os objetos culturais frequentemente sobrevivem mais do que os debates sobre eles.

As críticas desaparecem.

Os símbolos permanecem.

☕ UMA LIÇÃO DE HUMILDADE HISTÓRICA

Talvez a maior lição de toda essa jornada seja a humildade.

Quase todas as gerações acreditaram ter identificado uma ameaça cultural devastadora.

Quase todas estavam convencidas.

E quase todas erraram em algum grau.

Os quadrinhos não destruíram a juventude.

O rock não destruiu a juventude.

Os videogames não destruíram a juventude.

A internet certamente trouxe problemas reais, mas também transformou o acesso ao conhecimento.

Os animes provavelmente seguirão caminho semelhante.

Isso não significa que devemos abandonar o pensamento crítico.

Significa apenas reconhecer que o medo coletivo frequentemente exagera ameaças.

☕ CONCLUSÃO

Depois de décadas observando tecnologia, sociedade e comportamento humano, cheguei a uma conclusão simples.

As ferramentas mudam.

Os medos mudam.

Os alvos mudam.

Mas os mecanismos psicológicos permanecem surpreendentemente estáveis.

Continuamos formando tribos.

Continuamos procurando culpados.

Continuamos desconfiando do novo.

Continuamos acreditando que nossa geração finalmente descobriu o verdadeiro problema.

Talvez por isso estudar psicologia seja tão fascinante.

No fundo, ela não fala apenas sobre indivíduos.

Ela fala sobre nós.

Sobre nossas esperanças.

Nossos medos.

Nossas certezas.

E principalmente sobre nossa incrível capacidade de repetir os mesmos padrões ao longo dos séculos.

Da próxima vez que alguém disser que uma nova forma de cultura está destruindo a civilização, talvez valha a pena fazer uma pausa e lembrar:

Alguém já disse exatamente a mesma coisa sobre os quadrinhos que eu carregava debaixo do braço quando tinha 15 anos.


quinta-feira, 1 de agosto de 2024

NotebookLM — O “CICS DA ERA DA IA” QUE TRANSFORMA PDFs, DOCs, Blogs e Apostilas em um Especialista Particular

 

Bellacosa Mainframe apresenta o NotebookLM

☕💣📚 OPERADOR, SUA DOCUMENTAÇÃO CORPORATIVA ACABOU DE GANHAR UM CÉREBRO!

NotebookLM — O “CICS DA ERA DA IA” QUE TRANSFORMA PDFs, DOCs, Blogs e Apostilas em um Especialista Particular



Introdução

Imagine a seguinte situação:

Você possui:

  • 500.000 PDFs

  • Apostilas COBOL

  • Manuais IBM

  • Procedimentos operacionais

  • Posts do Blogspot

  • Documentações internas

  • Livros técnicos

  • Normas corporativas

E deseja criar um especialista virtual capaz de responder perguntas utilizando exclusivamente esse conhecimento.

Há poucos anos isso exigiria:

  • Equipe de cientistas de dados

  • Cluster de servidores

  • Banco vetorial

  • Desenvolvimento Python

  • Frameworks de IA

  • Meses de trabalho

Hoje existe uma solução muito mais simples:

NotebookLM

Uma das ferramentas mais revolucionárias já lançadas pelo Google.

Para um profissional Mainframe, pense nele como:

"Um ISPF inteligente alimentado pelos seus próprios datasets."


O que é o NotebookLM?

NotebookLM significa:

Notebook Language Model

É uma plataforma de IA criada pelo Google que permite carregar documentos próprios e conversar com eles.

Diferentemente do ChatGPT tradicional, que utiliza conhecimento geral do modelo, o NotebookLM cria uma IA especializada nas fontes fornecidas pelo usuário.

Ele funciona como um:

  • Consultor virtual

  • Pesquisador

  • Analista documental

  • Tutor personalizado

  • Motor de busca inteligente


Data de lançamento

O projeto surgiu inicialmente como:

Project Tailwind

Durante a conferência Google I/O 2023.

Posteriormente foi renomeado para:

NotebookLM

Disponibilizado inicialmente para testes em:

Julho de 2023

A partir de 2024 recebeu diversos recursos avançados:

  • Resumos automáticos

  • FAQ automática

  • Linha do tempo

  • Mapas mentais

  • Podcasts gerados por IA

  • Integração com Gemini

Hoje é considerado uma das aplicações mais impressionantes da IA generativa.


O que torna o NotebookLM diferente?

A maioria das IAs funciona assim:

Pergunta
    ↓
Modelo responde
    ↓
Conhecimento geral

NotebookLM:

Seus documentos
        ↓
Indexação
        ↓
Vetorização
        ↓
Gemini
        ↓
Resposta baseada nas fontes

Ou seja:

A IA passa a responder utilizando seus próprios materiais.


Analogia Mainframe

Imagine que você possui:

PDS COBOL
PDS JCL
PDS PROC
DB2 Manuals
RACF Guides

NotebookLM seria equivalente a:

SUPER ISPF SEARCH
+
SUPER FILEAID
+
SUPER BOOKMANAGER
+
CHATGPT

Tudo ao mesmo tempo.


Como funciona internamente?

O processo possui cinco etapas.


Etapa 1 — Ingestão

Você envia:

  • PDF

  • DOCX

  • TXT

  • Google Docs

  • URLs

  • Slides


Etapa 2 — Fragmentação

O conteúdo é quebrado em pedaços.

Exemplo:

Capítulo 1
Capítulo 2
Capítulo 3

vira

Chunk 001
Chunk 002
Chunk 003
...
Chunk N

Etapa 3 — Embeddings

Cada trecho recebe uma representação matemática.

Algo parecido com:

"COBOL"

↓

[0.342
 0.721
 0.991
 ...]

Esses vetores representam significado.


Etapa 4 — Banco Vetorial

Os vetores são armazenados.

Quando você pergunta:

Como funciona RESTART em CICS?

A IA procura os trechos semanticamente mais próximos.

Não é busca por palavra.

É busca por significado.


Etapa 5 — Geração da Resposta

Os trechos encontrados são enviados ao Gemini.

O Gemini gera a resposta.

Sempre citando as fontes.


Por que isso é revolucionário?

Porque elimina um problema clássico:

Alucinação

Exemplo:

Pergunta:

Qual é o parâmetro correto do nosso JOB XYZ?

ChatGPT tradicional:

Posso estar enganado...

NotebookLM:

Segundo o documento XYZ.pdf,
página 12...

Muito mais confiável.


Como acessar

Acesse:

NotebookLM

Necessário:

  • Conta Google

Pronto.

Não existe instalação.

Tudo roda na nuvem.


Primeiro Projeto

Vamos criar um especialista em COBOL.


Passo 1

Clique:

Create Notebook

Passo 2

Envie:

COBOL.pdf
JCL.pdf
CICS.pdf
DB2.pdf

Passo 3

Aguarde processamento.

Normalmente:

30 segundos
até
5 minutos

Passo 4

Faça perguntas.

Exemplo:

Explique PERFORM VARYING

Resposta:

Segundo o material enviado...

Criando um especialista Bellacosa Mainframe

Imagine carregar:

100 apostilas COBOL
50 apostilas JCL
20 apostilas RACF
10 apostilas CICS

Resultado:

Você terá um:

BellacosaGPT

Especialista apenas naquele conteúdo.


Caso Real: Blogspot

Você comentou possuir aproximadamente:

3000 posts

NotebookLM é perfeito para isso.


Método

Exporte o Blogspot.

O Blogger permite gerar:

blog.xml

Depois:

  1. Converter para PDF

  2. Dividir em volumes

  3. Importar

Resultado:

Converse com seu próprio blog

Perguntas:

Sobre quais assuntos escrevi mais?
Quais artigos falam de RACF?
Quais posts precisam atualização?
Existe conteúdo duplicado?

Função fantástica: Podcasts

Uma das funções mais impressionantes.

NotebookLM gera:

Podcast automático

A IA cria:

  • Apresentador 1

  • Apresentador 2

Debatendo seus documentos.

Parece um programa de rádio real.


Exemplo

Carregue:

DFSMS

O NotebookLM gera:

Podcast:
"Hoje vamos falar sobre gerenciamento de storage..."

É assustadoramente bom.


Explore o Sherlock holmes no notebooklm

https://notebooklm.google.com/notebook/2c4f0f26-0797-4cc0-a350-48c4b70d14cc


Utilização para Programadores COBOL

Revisão de código

Carregue:

Normas COBOL

Pergunte:

Meu programa segue o padrão?

Treinamento

Carregue:

Curso COBOL

Pergunte:

Crie um quiz

Mentoria

Pergunte:

Explique como se eu fosse um trainee

Onboarding

Novo funcionário?

Carregue:

Procedimentos
Normas
Arquitetura

Ele aprende muito mais rápido.


Limites atuais

Nem tudo são flores.


Problema 1

Arquivos enormes.

Documentações gigantes podem exigir divisão.


Problema 2

Não executa programas.

Ele explica:

COBOL
JCL
REXX

Mas não roda código.


Problema 3

Conhecimento externo limitado.

Ele prioriza suas fontes.


Dicas Avançadas

Dica 1

Não envie tudo de uma vez.

Crie notebooks especializados.

Exemplo:

Notebook COBOL
Notebook RACF
Notebook CICS
Notebook JCL

Melhor precisão.


Dica 2

Use documentos limpos.

Menos ruído.

Melhores respostas.


Dica 3

Padronize nomes.

Exemplo:

COBOL_BASICO.pdf
COBOL_INTERMEDIARIO.pdf
COBOL_AVANCADO.pdf

Facilita rastreabilidade.


Truque de Ouro

Peça:

Crie um mapa mental

Ele gera automaticamente.

Excelente para estudos.


Truque de Ouro 2

Peça:

Quais assuntos não estão cobertos?

A IA encontra lacunas.

Muito útil para instrutores.


Truque de Ouro 3

Peça:

Transforme esta apostila em curso

Surpreendente para criação de treinamentos.


Easter Eggs

Pouca gente conhece.


Easter Egg 1

Peça:

Explique como Star Wars

Easter Egg 2

Peça:

Explique como professor universitário

Easter Egg 3

Peça:

Explique como operador de mainframe

As respostas mudam completamente.


Curiosidade

O NotebookLM utiliza a tecnologia Gemini.

Ou seja:

Quando você conversa com ele está utilizando um dos modelos mais avançados do Google.

Mas com uma diferença:

Seu conteúdo vira o contexto principal.


Arquitetura Simplificada

PDF
DOC
PPT
TXT
URL
      ↓
NotebookLM
      ↓
Chunking
      ↓
Embeddings
      ↓
Vector Search
      ↓
Gemini
      ↓
Resposta

Comparação com Soluções Profissionais

SoluçãoComplexidade
LangChainAlta
LlamaIndexAlta
HaystackAlta
OpenWebUI + RAGMédia
AnythingLLMMédia
NotebookLMMuito Baixa

Para quem é indicado?

Programadores COBOL

✅ Sim

Operadores

✅ Sim

Analistas

✅ Sim

Instrutores

✅ Sim

Estudantes

✅ Sim

Empresas

✅ Sim


O Futuro do Conhecimento Corporativo

Durante décadas armazenamos conhecimento em:

PDS
PDF
Word
Excel
Wiki
SharePoint

O problema sempre foi encontrar a informação certa.

NotebookLM muda completamente o paradigma.

Agora o conhecimento deixa de ser:

Arquivo

e passa a ser:

Conversação

Conclusão

Para um programador COBOL padawan, o NotebookLM é provavelmente a ferramenta de IA mais útil disponível atualmente.

Se o ChatGPT é um consultor generalista, o NotebookLM é um especialista treinado exclusivamente nos seus manuais, apostilas, procedimentos e experiências acumuladas ao longo dos anos.

Pensando no universo Mainframe, ele equivale a colocar dentro de um único terminal:

  • Toda a biblioteca IBM

  • Todos os standards da empresa

  • Todos os procedimentos operacionais

  • Todos os posts do seu blog

  • Todas as suas apostilas Bellacosa Mainframe

e ganhar um analista virtual disponível 24x7 para responder perguntas, gerar treinamentos, criar quizzes, produzir podcasts e acelerar o aprendizado de qualquer padawan COBOL.

Ou, traduzindo para a linguagem do operador veterano:

"O NotebookLM é o primeiro sistema capaz de transformar décadas de documentação esquecida em conhecimento vivo, pesquisável e conversável, sem precisar escrever uma única linha de código." ☕💣📚🚀

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