Pesquisar este blog

quinta-feira, 24 de janeiro de 2019

REXX para bom dia! - Gera arquivos de configuração do Debug Tool - Submete Hrecall para todos os membros

Scripts REXX e JCL para Automação no z/OS

Scripts REXX e JCL para Automação no z/OS

Script REXX para Automação no z/OS

BOM#DIA.REXX

/* REXX */                                                    
trace off;                                                    
CLEAR                                                          
SAY 'Ola Buga!'                                                
SAY ' '                                                        
SAY 'Seja vem vindo...'                                        
SAY ' '                                                        
SAY ' '                                                        
parse PULL rola                                                
/******************************/                              
call verifica_primeira_vez_do_dia                              
say flag                                                      
if flag = 'S' then                                            
 do                                                            
    call grava_ja_rodamos;                                    
    call aloca_debug_tool_files;                              
    call hrecall_de_tudo;                                      
 end;                                                          
ISPF                                                          
exit 0                                                        
/******************************/                              
grava_ja_rodamos:                                              
/******************************/                              
dsname = 'walbuga.apagador'                                    
"ALLOC FI(Pdsout) DA('"dsname"') new                          
    tracks space(10 10) dir(01)                                
    Recfm(F B) LRECL(80)"                                      
"FREE  FI(Pdsout)"                                            
"allocate dataset('walbuga.apagador(#15)') fi(#15) shr reuse"  
"execio 0 diskw #15 (stem o. open)"                            
o.1 = 'CEBOLA '                                                
"execio * diskw #15 (stem o. finis)"                          
"free fi(#15)"                                                
return                                                        
/******************************/                              
/******************************/                              
dsname = 'walbuga.apagador'                                    
"ALLOC FI(Pdsout) DA('"dsname"') new                          
    tracks space(10 10) dir(01)                                
    Recfm(F B) LRECL(80)"                                      
"FREE  FI(Pdsout)"                                            
"allocate dataset('walbuga.apagador(#15)') fi(#15) shr reuse"  
"execio 0 diskw #15 (stem o. open)"                            
o.1 = 'CEBOLA '                                                
"execio * diskw #15 (stem o. finis)"                          
"free fi(#15)"                                                
return                                                        
/******************************/                              
verifica_primeira_vez_do_dia:                                  
/******************************/                              
"allocate dataset('walbuga.apagador(#15)') fi(#15) shr reuse"  
"execio * diskr #15 (stem oia. finis)"                        
   if pos('CEBOLA',oia.1) > '0' then                          
      do                                                      
         say 'TSO te derrubou, neh amigao ?'                  
         flag = 'N'                                            
      end                                                      
   else                                                        
      do                                                      
         say 'Divirta-se Buga'                                
         flag = 'S'                                            
      end                                                      
return                                                        
/******************************/                              
aloca_debug_tool_files:                                        
/******************************/                              
debug_tool = "'WALBUGA.G#NG.SEMANA09(DEBUG#01)'"              
SUBMIT debug_tool                                              
return                                                        
/******************************/                              
hrecall_de_tudo:                                              
recall = "'WALBUGA.G#R0.DATA(JCL#0004)'"                      
SUBMIT recall                                                  
return                                

JCL para Alocação de Arquivos de Debug (DEBUG#01)

WALBUGA.G#NG.SEMANA09(DEBUG#01)

DEBUG#01.JCL

//WALBUGA2 JOB NG,BUGA,CLASS=K      RESTART=STEP#002                  
/*NOTIFY WALBUGA                                                      
//*--------------------------------------------------------------------
//* Aloca arquivos utilizados pelo debug tool no z/OS                  
//*--------------------------------------------------------------------
//STEP#001  EXEC PGM=IEFBR14                                          
//SAVINGS      DD DSN=WALBUGA.DBGTOOL.SAVESETS,                        
//             DISP=(NEW,CATLG,DELETE),                                
//             UNIT=SYSDA,SPACE=(CYL,(20,10)),                        
//             DCB=(LRECL=3204,BLKSIZE=0,DSORG=PS,RECFM=VB)            
//SETTINGS      DD DSN=WALBUGA.DBGTOOL.SAVEBPS,                        
//             DISP=(NEW,CATLG,DELETE),                                
//             UNIT=SYSDA,SPACE=(CYL,(20,10)),                        
//             DCB=(LRECL=3204,BLKSIZE=0,DSORG=PO,RECFM=VB),          
//             DSNTYPE=LIBRARY                                        
//*--------------------------------------------------------------------
//* Carrega configuracoes que o Buga gosta!                            
//*--------------------------------------------------------------------
//STEP#002  EXEC PGM=IEBGENER                                          
//SYSIN    DD DUMMY                                                    
//SYSPRINT DD SYSOUT=X                                                
//SYSUT1   DD *                                                        
      COMMENT YES
      SET ASSEMBLER OFF;                                              
      SET ASSEMBLER STEPOVER EXTONLY;                                  
      SET AUTOMONITOR ON NOLOG CURRENT;                                
      SET CHANGE STATEMENT;                                            
      SET COLOR TURQUOISE NONE      HIGH TITLE HEADERS;                
      SET COLOR GREEN     NONE      LOW  TITLE FIELDS;                
      SET COLOR TURQUOISE REVERSE   LOW  MONITOR AREA;                
      SET COLOR TURQUOISE REVERSE   LOW  MONITOR LINES;                
      SET COLOR WHITE     REVERSE   LOW  SOURCE AREA;                  
      SET COLOR TURQUOISE REVERSE   LOW  SOURCE PREFIX;                
      SET COLOR YELLOW    REVERSE   LOW  SOURCE SUFFIX;                
      SET COLOR RED       REVERSE   HIGH SOURCE CURRENT;              
      SET COLOR GREEN     NONE      LOW  SOURCE BREAKPOINTS;          
      SET COLOR TURQUOISE NONE      HIGH PROGRAM OUTPUT;              
      SET COLOR YELLOW    NONE      LOW  TEST INPUT;                  
      SET COLOR GREEN     NONE      HIGH TEST OUTPUT;                  
      SET COLOR BLUE      REVERSE   HIGH LOG LINES;                    
      SET COLOR WHITE     NONE      HIGH COMMAND LINE;                
      SET COLOR GREEN     REVERSE   HIGH WINDOW HEADERS;              
      SET COLOR BLUE      REVERSE   HIGH TOFEOF MARKER;                
      SET COLOR RED       NONE      HIGH TARGET FIELD;                
      SET DEFAULT LISTINGS;                                            
      SET DEFAULT DBG;                                                
      SET DEFAULT MDBG;                                                
      SET DEFAULT SCROLL PAGE;                                        
      SET DEFAULT VIEW STANDARD;                                      
      SET DEFAULT WINDOW SOURCE;                                      
      SET DISASSEMBLY OFF;                                            
      SET DYNDEBUG ON;                                                
      SET ECHO ON;                                                    
      SET EXECUTE ON;                                                  
      SET EXPLICITDEBUG OFF;                                          
      SET FIND BOUNDS 1 *;                                            
      SET HISTORY ON 100;                                              
      SET IGNORELINK OFF;                                              
      SET LDD SINGLE;                                                  
      SET LIST TABULAR OFF;                                            
      SET LIST BY SUBSCRIPT OFF;                                      
      SET LOG OFF;                                                    
      SET LOG KEEP 1000;                                              
      SET LOG NUMBERS ON;                                              
      SET LONGCUNAME ON;                                              
      SET MONITOR DATATYPE OFF;                                        
      SET MONITOR LIMIT 1000;                                          
      SET MONITOR NUMBERS ON;                                          
      SET MONITOR WRAP ON;                                            
      SET MSGID OFF;                                                  
      SET PACE 2;                                                      
      SET PF1     "?" =    ?;                                          
      SET PF2     "STEP" = STEP;                                      
      SET PF3     "QUIT" = QUIT;                              
      SET PF4     "LIST" = LIST;                              
      SET PF5     "FIND" = IMMEDIATE FIND;                    
      SET PF6     "AT/CLEAR" =AT TOGGLE;                      
      SET PF7     "UP" =   IMMEDIATE UP;                      
      SET PF8     "DOWN" = IMMEDIATE DOWN;                    
      SET PF9     "GO" =   GO;                                
      SET PF10    "ZOOM" = IMMEDIATE ZOOM;                    
      SET PF11    "ZOOM LOG" =IMMEDIATE ZOOM LOG;              
      SET PF12    "RETRIEVE" =IMMEDIATE RETRIEVE;              
      SET PF13    "?" =    ?;                                  
      SET PF14    "STEP" = STEP;                              
      SET PF15    "QUIT" = QUIT;                              
      SET PF16    "LIST" = LIST;                              
      SET PF17    "FIND" = IMMEDIATE FIND;                    
      SET PF18    "AT/CLEAR" =AT TOGGLE;                      
      SET PF19    "UP" =   IMMEDIATE UP;                      
      SET PF20    "DOWN" = IMMEDIATE DOWN;                    
      SET PF21    "GO" =   GO;                                
      SET PF22    "ZOOM" = IMMEDIATE ZOOM;                    
      SET PF23    "ZOOM LOG" =IMMEDIATE ZOOM LOG;              
      SET PF24    "RETRIEVE" =IMMEDIATE RETRIEVE;              
      SET POPUP 15;                                            
      SET PROMPT LONG;                                        
      SET REFRESH OFF;                                        
      SET RESTORE SETTINGS AUTO;                              
      SET RESTORE BPS AUTO;                                    
      SET RESTORE MONITORS AUTO;                              
      SET REWRITE 50;                                          
      SET SAVE SETTINGS AUTO;                                  
      SET SAVE BPS AUTO FILE WALBUGA.DBGTOOL.SAVEBPS;          
      SET SAVE MONITORS AUTO;                                  
      SET SCROLL DISPLAY ON;                                  
      SET SUFFIX ON;                                          
      SET WARNING ON;                                          
      WINDOW SIZE 3 LOG;                                  
      WINDOW SIZE 28 SOURCE;                              
      WINDOW SIZE 8 MONITOR;                              
      SET SCREEN ON;                                                  
      SET SCREEN 1 MONITOR SOURCE LOG;                                
      SET KEYS ON 12;                                      
      SET MONITOR COLUMN ON;                                          
//SYSUT2   DD DSN=WALBUGA.DBGTOOL.SAVESETS,                            
//             DISP=(OLD,CATLG,DELETE),                                
//             UNIT=SYSDA,SPACE=(CYL,(20,10)),                        
//             DCB=(LRECL=3204,BLKSIZE=0,DSORG=PS,RECFM=VB)            
//                                                                    
//*                                                                    
                                                                       
SET SAVE SETTINGS AUTO ;                                              
SET SAVE BPS AUTO ;                                                    
SET SAVE MONITORS AUTO ;                                              
                                                                       
SET RESTORE SETTINGS AUTO ;                                            
SET RESTORE BPS AUTO ;                                                
SET RESTORE MONITORS AUTO ;                                            
                                                                       
SET AUTO ON;                                                          
WINDOW SIZE 30 SOURCE; window size 3 log;

JCL para Recall de Datasets do Usuário

'WALBUGA.G#R0.DATA(JCL#0004)'      

//WALBUGA1 JOB R8,'BUGA',MSGLEVEL=(1,1),CLASS=K,MSGCLASS=1,RD=NC        
//*---------------------------------------------------------------------
//*                                                                    
//*   PROCEDIMENTO PARA RECALL DE TODOS OS DATASETS DE UM USUARIO      
//*                                                                    
//*---------------------------------------------------------------------
/*NOTIFY WALBUGA         ** ME NOTIFIQUE                                
/*XEQ ECA                ** RODAR EM SECA                              
//*---------------------------------------------------------------------
//    EXPORT  SYMLIST=(USUARIO,ESTRELA)                                
//    SET     USUARIO=&SYSUID                                          
//    SET     ESTRELA='*'                                              
//*---------------------------------------------------------------------
//*          SCRATCH TODOS OS ARQUIVOS DE SAIDA                        
//*---------------------------------------------------------------------
//STEP#001 EXEC PGM=IDCAMS                                              
//SYSPRINT DD SYSOUT=*                                                  
//SYSIN    DD *,DLM=FIM,SYMBOLS=JCLONLY                                
  DELETE &USUARIO..LISTCAT.OUTPUT                                      
FIM                                                                    
//*---------------------------------------------------------------------
//*       SOLICITA RECALL DOS ARQUIVOS --- OPS NAO PODE                
//*---------------------------------------------------------------------
//STEP#002 EXEC PGM=IKJEFT01                                            
//SYSTSPRT DD SYSOUT=*                                                  
//SYSTSIN  DD *,SYMBOLS=JCLONLY                                        
 HRECALL &USUARIO..&ESTRELA NOWAIT                                      
//*---------------------------------------------------------------------
//* Entra em ação o plano 'B'                                          
//*       LISTA TODOS OS DATASETS DO USUARIO                            
//*---------------------------------------------------------------------
//STEP#003 EXEC PGM=IDCAMS                                              
//SYSPRINT DD   SYSOUT=*                                                
//SYSIN    DD  *,SYMBOLS=JCLONLY                                        
 LISTCAT LEVEL(&USUARIO) -                                              
   OUTFILE(OUTDD)                                                      
//OUTDD    DD DSN=&USUARIO..LISTCAT.OUTPUT,                            
//         DCB=(RECFM=VBA,LRECL=125,BLKSIZE=629),UNIT=DASD,            
//         SPACE=(CYL,(1,1)),                                          
//         DISP=(NEW,CATLG)                                            
//*---------------------------------------------------------------------
//*    COPIA PARA ARQUIVO TEMPORARIO                                    
//*---------------------------------------------------------------------
//STEP#004 EXEC PGM=IEBGENER                                            
//SYSPRINT DD   SYSOUT=*                                                
//SYSOUT   DD SYSOUT=*                                                  
//SYSIN    DD DUMMY                                                    
//SYSUT1   DD DSN=&USUARIO..LISTCAT.OUTPUT,DISP=SHR                    
//SYSUT2   DD DSN=&&TMP1,                                              
//         DCB=(RECFM=VBA,LRECL=125,BLKSIZE=629),UNIT=DASD,            
//         SPACE=(CYL,(1,1)),                                          
//         DISP=(MOD,PASS)                                              
//*---------------------------------------------------------------------
//*    EXTRAI DO RELATORIO DO IDCAMS QUE LISTOU OS ARQUIVOS O NOME DOS  
//* DATASETS QUE SERÃO RECUPERADOSLOGO NA SEQUENCIA                    
//*---------------------------------------------------------------------
//STEP#005 EXEC  PGM=SORT    ,COND=(0,NE)                              
//SORTIN   DD DSN=&&TMP1,DISP=(OLD,DELETE)                              
//SORTOUT  DD DSN=&&TMP2,                                              
//         RECFM=FB,LRECL=00060,                                        
//         SPACE=(CYL,(10,10),RLSE),                                    
//         DISP=(MOD,PASS)                                              
//SORTIN   DD SYSOUT=*                                                  
//SYSIN    DD *,SYMBOLS=JCLONLY                                        
 SORT FIELDS=COPY                                                      
 INCLUDE COND=(22,7,EQ,C'&USUARIO'),FORMAT=CH     *** 4 BYTES DO RDW    
 OUTFIL FNAMES=SORTOUT,VTOF,                                            
 OUTREC=(C' HRECALL ',22,44,C' NOWAIT')                                
//SYSOUT   DD  SYSOUT=*                                                
//SORTMSG  DD  SYSOUT=*                                                
//*---------------------------------------------------------------------
//*    REALIZA O HRECALL DOS MEMBROS DO USUARIO                        
//*---------------------------------------------------------------------
//STEP#006 EXEC PGM=IKJEFT01                                            
//SYSTSPRT DD SYSOUT=*                                                  
//SYSTSIN  DD *                                                        
 /* Vai que alguem resolveu customizar */                              
 PROFILE NOPREFIX                                                      
//         DD DSN=&&TMP2,DISP=(OLD,DELETE)                              
//*                                                                    
//*---------------------------------------------------------------------
//*    ENVIA MENSAGEM INFORMANDO O FINAL DO PROCESSAMENTO              
//*---------------------------------------------------------------------
//STEP#007 EXEC PGM=IKJEFT01                                            
//SYSPRINT DD SYSOUT=*                                                  
//SYSTSPRT DD SYSOUT=*                                                  
//SYSTSIN  DD *,SYMBOLS=JCLONLY                                        
 SEND 'Processo de Recall de arquivos finalizado!     ' USER(&USUARIO)  
/*                                                                      

Testes Unitários em COBOL

Testes Unitários em COBOL

Walter BUGA Ramos
buga.bug.buga@gmail.com


Testes unitarios cobol - NeoPragmav.pptx
Testes unitarios cobol - NeoPragmav.pdf

Fontes disponiveis em 
https://github.com/buga-buga-buga/paradinhas_mainframe/tree/main/CUT
------------------------------------------------------------------------
INDICE  - Esse documento                                                
------------------------------------------------------------------------
CLG#001 - Compila. linka e executa modulo fonte Cobol                   
CLG#002 - Compila linka e executa modulo fonte Cobol  (evolucao)        
CLG#003 - Compila linka e executa modulo fonte Cobol  (evolucao 2)      
------------------------------------------------------------------------
ZUTZCPC - Código Fonte do Pre-compilador                                
------------------------------------------------------------------------
ZUTZCPD - Book de instruções do pre-compilador                          
------------------------------------------------------------------------
ZUTZCWS - Book de variaveis do pre-compilador                           
------------------------------------------------------------------------
SAMPLE  - Programa Cobol que sera objeto do teste                       
------------------------------------------------------------------------
SAMPLET - Instrucoes do que quer que seja testado                       
                       Não consegui rodar como particionado             
                            utilize de 'BUGAARQ.SIGLA.SAMPLET'           
------------------------------------------------------------------------
UTSTCFG - Configuration file                                            
------------------------------------------------------------------------


Entendendo o cenário de desenvolvimento de Software

Cobol Unit Test - CUT

  • Projeto colaborativo disponível no GitHub
  • Pré-Compilador escrito em Cobol que gera um programa Cobol específico com o caso de testes a ser executado

Pirâmide de Testes


            /        \
           /          \
          /            \
         /Exploratórios \
        /________________\
       / End to End       \
      /____________________\
     / Testes de Componente \  
    /________________________\
   /       Integração         \
  /____________________________\
 /           UNITÁRIO           \
/________________________________\
  • Exploratórios: Testes manuais para descobrir comportamentos inesperados.
  • End to End: Testes que validam o fluxo completo do sistema.
  • Testes de Componente: Validam partes isoladas do sistema.
  • Integração: Verificam a interação entre componentes.
  • Unitário: Testam unidades individuais de código.

Metodologia de desenvolvimento

A arquitetura mainframe é diferente da distribuída e da nuvem.
A linguagem procedural (Cobol/PL1/Rexx) é diferente da orientação a objetos.
Entretanto, vamos utilizar conceitos de outras arquiteturas e linguagens para melhorar a qualidade de nosso código e facilitar a codificação!


(Des)conceituando o teste unitário

Procura verificar se o código está correto, em sua menor parte.
A menor parte do fonte a ser testado é um método de uma classe.
Sendo assim, os testes unitários são aplicados a esses métodos, a partir da criação de classes de testes.


Então o que testar no COBOL?

Ainda não temos um conceito formado sobre isso, mas esperamos que seja algo parecido com o mock de outras linguagens.
Num dos exemplos do projeto da ferramenta, o teste versa sobre o conteúdo de variável esperada depois da execução de uma section.


Funcionamento da ferramenta

Por algum motivo que desconheço, não tem nada sobre como rodar a ferramenta no mainframe; no micro funciona de boa, só seguir o texto base que tem lá no Git.
A importação dos fontes e adaptações foram tranquilas e alguns ajustes foram necessários.
O que mais demorou e que apanhei um bocado foi pra gerar o JCL “redondinho”.


Etapas

Depois da ferramenta ter sido compilada e linkeditada, temos:

  • Rodar a ferramenta informando o programa e os casos de teste
  • Compilar/Linkeditar o “programa” gerado
  • Executar esse ‘programa’ com os casos de teste

Mãos à obra!

Particionado com os componentes necessários está disponível em:
WALBUGA.SIGLA.CUT.COBOL


Obrigado!

terça-feira, 15 de janeiro de 2019

Bolsonaro Rojão - Hotel seleção Itália

Bolsonaro soltando rojões na frente do repórter

Um dia ainda acho a entrevista completa com ele soltando os rojões na frente do repórter!

0:00 a federal jair bolsonaro do pp soltou 0:02 morteiros na calçada em frente ao 0:04 sheraton da barra ele diz que fez isso 0:06 em protesto contra o barulho provocado 0:08 por equipamentos instalados pela tutela 0:10 sobre humano 0:11 o condomínio onde o deputado mora fica 0:13 nos fundos do hotel ele disse que já 0:15 pediu providências mas até agora nada 0:17 foi feito a gente procurou a direção do 0:19 sheraton que reconheceu o problema

sexta-feira, 19 de outubro de 2018

Material - Certificação Lean IT Foundation

Certificações, Carreira e Lean IT

Atualização 2024 09 25 - Não rolou de sair pra vereador nem na de 2020 que foi pandemia e tals e nem nessa de 2024, quem sabe na de 2028, vou perguntar pro sunega como que foi esse rola.

Sobre as certificações, firme e forte, não faço mais provas faz um tempo, mas é sempre bom um papel que certifique seus conhecimentos.

Uns anos atrás, seilá uns 5 (estamos em 2018), não me ligava em certificação, sempre quis fazer, mas nunca fui atrás, seja porque onde eu trabalhava ninguém tinha e quando eu puxava o assunto recebia sempre críticas do tipo... a gente nunca precisou, pare com essa ideia de aprender coisas novas, gastar tempo e dinheiro à toa, enfim, eu tinha vontade de fazer certificação de PMP - Project Management Professional tinha dois amigos meus que tinham, o Allan e o Flavio, cheguei a conversar com eles, mas tinha que ler o tal do livro da Rita, fazer 352 mil exercícios e ficar um dia todo fazendo prova além do que era uma graninha considerável o processo todo, e acabei deixando pra lá.

Depois que vim para o "mercado" o pessoal começou a cobrar e como não tenho formação na área de computação abracei a ideia e fui mandando ver nas certificações básicas pra saber ao menos o essencial pra poder conversar com o pessoal que manja dos assuntos... pra eu parar com os achismos e ter um pouco mais de conhecimento, afinal conhecimento nunca é demais.

Nessa jornada das certificações, fiz algumas bem "diferentes" mas que me fizeram ter uma visão mais mercadológica ou mesmo acadêmica das disciplinas que eu tinha contato, mas estava aprendendo ou fazia as coisas na orelhada, sem muito embasamento teórico. O caso do Lean é um desses casos! Trabalhei com metodologias ágeis e desenvolvimento enxuto na IBM mas lá eles deram uma customizadinha das boas nos processos e embora eu já tivesse trabalhado com SCRUM anteriormente na Stefanini e parando pra pensar no próprio Banco do Brasil a gente se organizava e trabalhava bem alinhado com o manifesto ágil, mas voltando ao Lean, estou atualmente trabalhando com "Lean Digital Transformation" recebi uma enxurrada de material, consegui garimpar bastante, aprendi muito no dia a dia, mas pra variar falta o "reconhecimento", nem que seja pra eu mesmo pra saber que sei o que o pessoal está falando, consigo entendê-los e conversar na mesma língua!

Sempre curti estudar, o problema é priorizar isso com todos os eventos da vida atualmente, mas consegui parar um tempinho, estudar, fiz um treinamento on-line pela TIEXAMES, que abordou praticamente tudo que caiu na prova, a dinâmica do treinamento deixa um pouco a desejar, mas ajuda bastante quem estiver inseguro ou meio perdido com os textos.... Sem falar que só pode fazer o exame depois de ter cursado um treinamento de alguma entidade associada.

O site da Lean IT é o https://www.leanitassociation.com/

e os PDFs pra você estudar sozinho estão aqui:

Foi isso, boa sorte, a prova é super tranquila, se você tem bom senso e já trabalhou com Lean, dá pra passar sem sequer ler um texto! É básico! Café com leite pra quem, assim como eu, já está trabalhando com o assunto, entretanto, como disse, um papel pra mim significa bastante, não sei porque, talvez um dia junto com minha psicóloga consiga descobrir, mas por enquanto continuo sob a mesma condição!...

Colecionando certificados!

Aproveito aqui pra deixar a hashtag #Buga2020 pois pretendo sair de vereador aqui por campinas em 2020 e nada melhor que começar a campanha cedo!

Certificação de LITA Lean IT Foundation do Buga

Figura 1: Certificação de LITA Lean IT Foundation do Buga

quinta-feira, 20 de setembro de 2018

Mainframe - Prova de conceito captura de telas terminal 3270 e execução de comandos via script/macro

Próximos Passos

Com essa base, você pode:

  1. Automatizar testes de programas COBOL
  2. Integrar com pipelines CI/CD
  3. Monitorar execução de jobs via scripts

Video 1 : Macro script em execução rodando comandos do windows no mainframe


Automatizando Tarefas no Mainframe: Script com ws3270 e Transferência de Arquivos

Neste video, demonstramos como automatizar conexões, transferências de arquivos e submissão de jobs no mainframe usando o emulador ws3270 e scripts batch.

Tudo capturado e documentado para reprodutibilidade!

Configuração do Ambiente

Arquivos Necessários

Na pasta C:\Ferramentas\ws3270, temos:

- x3270ifTest.bat    # Script principal
- x3270if.exe        # Utilitário de automação
- HELLOWORLD.txt     # Programa COBOL a ser transferido
- OUTPUT.TXT         # Arquivo de log das telas capturadas

Script Batch (x3270ifTest.bat)


# Autenticação e navegação inicial
x3270if -t 5000 -v "Connect(192.86.32.159)"
x3270if -t 5000 -v "Wait(InputField)"
x3270if -t 5000 -v "String(logon AU04660)"
x3270if -t 5000 -v "Enter()"

# Transferência do arquivo
x3270if -t 5000 -v "Transfer(Direction=send,Localfile=HELLOWORLD.txt,HostFile=AU04660.HELLOWRD)"

# Navegação e submissão do job
x3270if -t 5000 -v "Tab(4)"
x3270if -t 5000 -v "Enter()"
x3270if -t 5000 -v "String(sub)"
x3270if -t 5000 -v "Enter()"

Execução do Processo

Comando usado para iniciar a automação e capturar logs:

cmd> x3270ifTest.bat >> output.txt

Exemplo de Tela Capturadas no Output.txt

Captura da tela inicial pre login
Figura 1: Conexao ao z/Os pela macro


Captura do 'sub no job'

*** JOB AU04660Z (JOB09955) SUBMITTED ***

Detalhes do Job Submetido

O programa COBOL transferido (HELLOWRD):


//AU04660Z JOB R8,'BUGA',MSGLEVEL=(1,1),CLASS=K,MSGCLASS=1,RD=NC,
// NOTIFY=&SYSUID
//CLG EXEC IGYWCLG
//COBOL.SYSIN DD *
    ID DIVISION.
        PROGRAM-ID. BUGA001.
    PROCEDURE DIVISION.
        DISPLAY "Hello world!"
        STOP RUN.
/*
//LKED.SYSLMOD DD DSN=AU04660.LOADS(BUGA001),DISP=OLD

Resultados e Aplicações

  • ✅ Autenticação automática no TSO
  • ✅ Upload de arquivos via script
  • ✅ Navegação por menus do ISPF
  • ✅ Submissão de job com número JOB09955
  • ✅ Log completo em output.txt

segunda-feira, 10 de setembro de 2018

javafx scene builder download - esse funciona de verdade! Curso em Video Java

JavaFX Scene Builder: download e configuração

Atualização 2024 09 25

Apenas pela historia, nada deve funcionar mais hoje em dia ou perdeu a função.

Aqui o link que esta ativo em 11.09.2018 pra baixar o JAVAFX SCENE BUILDER pra usar no curso em video junto com o NetBeans ou com alguma outra, seilá, vai que voce esta precisando igual eu!

http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html

Estou a fazer um treinamento de Java pela internet em videos dum tal de "curso em video", como tenho noçoes super reduzidas de linguagens não mainframe ou mesmo orientadas a objeto, embarquei da aula 1 pra frente e vamos ver o que dá.

Um dos problemas que encontrei foi o raio do javafx scene builder, que quando o zé fez o video tinha pra baixar de boas no site da Oracle e hoje (2018) ninguém mais acha em lugar nenhum!

Depois de muito bater a cabeça cheguei ao site do link acima que deixa baixar de boa, era pra ter vindo junto com meu NetBeans (sim, instalei o NetBeans pra fazer o curso, tambem tem o IntelliJ e o Eclipse pra usar aqui na maquina, mas vamos seguir a receita de bolo pra ver se aprendo certinho seguindo os exemplos no passo a passo). E foi justamente isso que fez eu escrever essa postagem que é pra eu nao esquecer mais!...

Bom, pega lá o .fxml que não abrir no tal do Scene Builder e vamos a configuração, afinal já baixei o programa ali do link la em cima ou aqui de baixo do pcloud

esse daqui é o da Oracle mesmo

https://drive.google.com/file/d/1cadbrJ5sPcVDI9PGaxE0_smP5Pag5ZwL/view?usp=sharing

e instalei ele em :

"C:\Program Files (x86)\Oracle\JavaFX Scene Builder 2.0"

Vou lá no NetBeans na opcao de ferramentas e

Clica em Ferramentas seguido de Opções no NetBeans
Figura 1 - Clica em Ferramentas seguido de Opções

Lá nas opções, ah, como fiquei no desespero baixei um outro Scene Builder e instalei ele em

"C:\Users\bugolino\AppData\Local\SceneBuilder"

voltando... lá nas opções :

Java, JavaFX, procurar onde está o Scene Builder
Figura 2 - Java, JavaFX, Procurar onde esta o Scene Builder

Pronto, agora dando dois cliques no fxml vai abrir a interface do Scene Builder!...

Java FX Scene Builder - Splash Screen
Figura 3 - Java FX Scene Builder - Splash Screen

é isso, deixa eu colocar aqui uma imagem do MTM 2018 (Master The Mainframe) que achei bem legal e vai que perco depois no google photos e nao acho nunca mais, igual o logo da BugaSoft

Banner Master The Mainframe 2018
Figura 4 - Banner Master The Mainframe que achei da horinha

quarta-feira, 8 de agosto de 2018

Master The Mainframe 2018 - Acesso a mainframe de graça, pra todos!

Master the Mainframe: Competição Global de Mainframe da IBM

Logotipo Master the Mainframe
Figura 1 - Logotipo - Master the Mainframe

https://www.ibm.com/it-infrastructure/z/education/master-the-mainframe

Em tese é um concurso, está em sua décima quarta edição agora em 2018, eu recomendo pra todos! Iniciantes e dinossauros quase extintos! Sempre tem uns negócios novos, alguma coisa que você só tinha ouvido falar e o mais legal de tudo:

  • Você tem um usuário e senha pra usar
  • A parada é fabulosa, entra lá, segue uns desafios, veja as edições anteriores e desenferruje-se ou aprenda o novo!
  • Se você é estudante de faculdade, aproveita que os caras sempre mandam brinde!

http://mtm2018.mybluemix.net/

Lembra de registrar como "Try the Learning System" System

quinta-feira, 21 de junho de 2018

Esqueci a senha da fatec - Redefinir Senha e-mail FATEC WEB-MAIL

Como Recuperar a Senha do E-mail da FATEC

Como Recuperar a Senha do E-mail da FATEC

Cara, essa dica é pra quem, como eu, não anota as senhas em lugar nenhum e acredita que a única senha que precisamos saber é a do e-mail!

O que fazer quando você esquece a senha do e-mail?

Aconteceu isso com meu e-mail da FATEC e apanhei bastante pra conseguir acessar. Então, segue aqui pra eu lembrar no futuro.

Link para redefinir a senha

Para recuperar a senha, acesse o sistema da Microsoft pelo link abaixo:

Redefinir senha do e-mail da FATEC

Simples assim!

Simples assim! A Microsoft podia melhorar a página dela pra quando a gente diz que não lembra a senha ou está com problemas para acessar, mostrar essa opção diretamente, em vez de mandar falar com alguém da organização!

segunda-feira, 16 de abril de 2018

Some People are Gay. Get Over It!

Reflexão sobre Homofobia e o Futuro do Jornalismo

Atualização 25/09/2024 - Bela profecia sobre não termos mais jornalistas!

Campanha contra homofobia de 2007

Camiseta com a frase 'Some people are gay. Get over it!' usada em campanha contra homofobia nas escolas britânicas em 2007

GET OVER IT original - homofobia nas escolas britânicas - outdoors de 2007

Crítica à desinformação na internet

A primeira vez que vi a foto da camiseta do sr. Ian lembrei da trollada do facebookson!!! Não acredite em tudo que vê na internet!! Analise, seja crítico! Em alguns anos não haverá mais jornalistas de verdade, apenas blogueiros e troladores! hahaha

terça-feira, 6 de março de 2018

CNPJ UNICLASS RENDA FIXA LP FICFI CNPJ

Pra não ter que procurar mais!

UNICLASS RENDA FIXA LP FICFI(01)

Uniclass Renda Fixa LP FICFI

05756488000103

05756488/0001-03

Não é tão difícil descobrir que FICFI é acrônimo de FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO

Muito menos deveria ser achar o CNPJ do fundo no site do Itaú, no informe de rendimentos ou mesmo no Google!

Informe de rendimentos Uniclass Renda Fixa LP FICFI

terça-feira, 6 de junho de 2017

Retirar dinheiro do Google AdSense para conta bancaria nos Estados Unidos ou pagando pouco

Saque de dólares do Google Adsense – Conta internacional, taxas e dicas

Esses dias recebi um e-mail do Google me informando que eu precisava atualizar meus dados bancários... quão foi minha surpresa ao ver que tinha 100 doletas prontas para uso!

Como tenho conta corrente nos States, no BBAmericas - já devo ter escrito algo sobre ela, se achar coloco o link... achei - tentei gravar essa conta como recebedora do montante, mas olha, não teve jeito, procurei na ajuda e também não achei nada, num fórum especializado do próprio Adsense encontrei o tópico abaixo:

https://productforums.google.com/forum/#!topic/adsense/LGzXZCRxoZo;context-place=topicsearchin/adsense/brazil

Percebi que não fui o primeiro, não serei o último e pelo visto não tem como mandar a grana pra lá!

Lembrei uma vez que a Ju recebeu uma grana dum trampo que ela fez pra federação de hemofilia lá dos States (eu acho) que recebeu por transferência internacional (nessa época eu ainda não tinha a conta lá) e lembro que dos 500 dólares entrou na conta 300! O resto virou fumaça nas tarifas infindáveis e absurdas pagas no processo, sem falar que demorou uns 4 meses e a Carla já estava pra jogar a toalha quando lembrei do Mafei que resolveu a parada, eu acho também, faz bastante tempo não tem como lembrar direito.

Bom, pelo que procurei na net, o mais esquema hoje no momento é o banco rendimento: 20 doletas independente do valor e só alegria!...

https://www.rendimento.com.br/para-voce/google-adsense/

Links úteis


terça-feira, 2 de maio de 2017

IBM Debug Tool perdendo os break points a cada execução e não guarda a configuração da tela

JCL para Recuperar Configuração do Debug Tool no Mainframe

No mainframe, o Debug Tool utiliza dois arquivos de controle: um para salvar os breakpoints e outro para guardar suas configurações personalizadas. Como no ambiente em que trabalho os arquivos são deletados automaticamente sem aviso, já perdi minhas preferências algumas vezes. Para não passar mais por isso, montei um JCL que recria tudo de forma automática. Agora, sempre que entro no sistema, rodo junto com o HRECALL e mantenho minha configuração do jeito que gosto!


//C001BUGA JOB BUGA,BUGA,CLASS=K       RESTART=STEP#002
/*NOTIFY WALBUGA
//*--------------------------------------------------------------------
//* Aloca arquivos utilizados pelo debug tool no z/OS
//*--------------------------------------------------------------------
//STEP#001  EXEC PGM=IEFBR14
//SAVINGS     DD DSN=WALBUGA.DBGTOOL.SAVESETS,
//               DISP=(NEW,CATLG,DELETE),
//               UNIT=SYSDA,SPACE=(CYL,(20,10)),
//               DCB=(LRECL=3204,BLKSIZE=0,DSORG=PS,RECFM=VB)
//SETTINGS    DD DSN=WALBUGA.DBGTOOL.SAVEBPS,
//               DISP=(NEW,CATLG,DELETE),
//               UNIT=SYSDA,SPACE=(CYL,(20,10)),
//               DCB=(LRECL=3204,BLKSIZE=0,DSORG=PO,RECFM=VB),
//               DSNTYPE=LIBRARY
//*--------------------------------------------------------------------
//* Carrega configuracoes que o Buga gosta!
//*--------------------------------------------------------------------
//STEP#002  EXEC PGM=IEBGENER
//SYSIN      DD DUMMY
//SYSPRINT   DD SYSOUT=X
//SYSUT1     DD *
      COMMENT YES - DO NOT MODIFY THIS LINE 12/18/2018 10:50:06 AM;
      SET ASSEMBLER OFF;
      SET ASSEMBLER STEPOVER EXTONLY;
      SET AUTOMONITOR ON NOLOG CURRENT;
      SET CHANGE STATEMENT;
      SET COLOR TURQUOISE NONE     HIGH TITLE HEADERS;
      SET COLOR GREEN     NONE     LOW  TITLE FIELDS;
      SET COLOR TURQUOISE REVERSE  LOW  MONITOR AREA;
      SET COLOR TURQUOISE REVERSE  LOW  MONITOR LINES;
      SET COLOR WHITE     REVERSE  LOW  SOURCE AREA;
      SET COLOR TURQUOISE REVERSE  LOW  SOURCE PREFIX;
      SET COLOR YELLOW    REVERSE  LOW  SOURCE SUFFIX;
      SET COLOR RED       REVERSE  HIGH SOURCE CURRENT;
      SET COLOR GREEN     NONE     LOW  SOURCE BREAKPOINTS;
      SET COLOR TURQUOISE NONE     HIGH PROGRAM OUTPUT;
      SET COLOR YELLOW    NONE     LOW  TEST INPUT;
      SET COLOR GREEN     NONE     HIGH TEST OUTPUT;
      SET COLOR BLUE      REVERSE  HIGH LOG LINES;
      SET COLOR WHITE     NONE     HIGH COMMAND LINE;
      SET COLOR GREEN     REVERSE  HIGH WINDOW HEADERS;
      SET COLOR BLUE      REVERSE  HIGH TOFEOF MARKER;
      SET COLOR RED       NONE     HIGH TARGET FIELD;
      SET DEFAULT LISTINGS;
      SET DEFAULT DBG;
      SET DEFAULT MDBG;
      SET DEFAULT SCROLL PAGE;
      SET DEFAULT VIEW STANDARD;
      SET DEFAULT WINDOW SOURCE;
      SET DISASSEMBLY OFF;
      SET DYNDEBUG ON;
      SET ECHO ON;
      SET EXECUTE ON;
      SET EXPLICITDEBUG OFF;
      SET FIND BOUNDS 1 *;
      SET HISTORY ON 100;
      SET IGNORELINK OFF;
      SET LDD SINGLE;
      SET LIST TABULAR OFF;
      SET LIST BY SUBSCRIPT OFF;
      SET LOG OFF;
      SET LOG KEEP 1000;
      SET LOG NUMBERS ON;
      SET LONGCUNAME ON;
      SET MONITOR DATATYPE OFF;
      SET MONITOR LIMIT 1000;
      SET MONITOR NUMBERS ON;
      SET MONITOR WRAP ON;
      SET MSGID OFF;
      SET PACE 2;
      SET PF1      "?"... =   ?;
      SET PF2      "STEP" = STEP;
      SET PF3      "QUIT" = QUIT;
      SET PF4      "LIST" = LIST;
      SET PF5      "FIND" = IMMEDIATE FIND;
      SET PF6      "AT/CLEAR" =AT TOGGLE;
      SET PF7      "UP" =   IMMEDIATE UP;
      SET PF8      "DOWN" = IMMEDIATE DOWN;
      SET PF9      "GO" =   GO;
      SET PF10     "ZOOM" = IMMEDIATE ZOOM;
      SET PF11     "ZOOM LOG" =IMMEDIATE ZOOM LOG;
      SET PF12     "RETRIEVE" =IMMEDIATE RETRIEVE;
      SET PF13     "?"... =   ?;
      SET PF14     "STEP" = STEP;
      SET PF15     "QUIT" = QUIT;
      SET PF16     "LIST" = LIST;
      SET PF17     "FIND" = IMMEDIATE FIND;
      SET PF18     "AT/CLEAR" =AT TOGGLE;
      SET PF19     "UP" =   IMMEDIATE UP;
      SET PF20     "DOWN" = IMMEDIATE DOWN;
      SET PF21     "GO" =   GO;
      SET PF22     "ZOOM" = IMMEDIATE ZOOM;
      SET PF23     "ZOOM LOG" =IMMEDIATE ZOOM LOG;
      SET PF24     "RETRIEVE" =IMMEDIATE RETRIEVE;
      SET POPUP 15;
      SET PROMPT LONG;
      SET REFRESH OFF;
      SET RESTORE SETTINGS AUTO;
      SET RESTORE BPS AUTO;
      SET RESTORE MONITORS AUTO;
      SET REWRITE 50;
      SET SAVE SETTINGS AUTO;
      SET SAVE BPS AUTO FILE WALBUGA.DBGTOOL.SAVEBPS;
      SET SAVE MONITORS AUTO;
      SET SCROLL DISPLAY ON;
      SET SUFFIX ON;
      SET WARNING ON;
      WINDOW SIZE 3 LOG;
      WINDOW SIZE 28 SOURCE;
      WINDOW SIZE 8 MONITOR;
      SET SCREEN ON;
      SET SCREEN 1 MONITOR SOURCE LOG;
      SET KEYS ON 12;
      SET MONITOR COLUMN ON;
//SYSUT2     DD DSN=WALBUGA.DBGTOOL.SAVESETS,
//              DISP=(OLD,CATLG,DELETE),
//              UNIT=SYSDA,SPACE=(CYL,(20,10)),
//              DCB=(LRECL=3204,BLKSIZE=0,DSORG=PS,RECFM=VB)
//

Dica: Usando esse JCL, você nunca mais perde suas configurações do Debug Tool, mesmo que o sistema delete seus arquivos sem aviso. Personalize o nome dos datasets conforme sua necessidade!

Figura 1: Tela do Debug Tool no mainframe z/OS mostrando arquivos de configuração e breakpoints alocados
Figura 1: Debug Tool iniciando o debug de um programa

sexta-feira, 10 de fevereiro de 2017

O Dia da Telefonia

O dia da Telefonia

Caraca, quanta gente na loja da TIM será que tão dando aparelho pré pago de graça?

Mal ai os erros de português, sejam eles de concordância, ortográficos, regência entre tantos outros que ocorrerão ao longo do texto. Ai que me caiu a ficha... quem tá lá pode não estar descontente com a TIM, mas com sua antiga operadora, no meu caso eu já me fodi de verde e amarelo com celular uma pá de vez...

Tinha meu BCP em Sampa que funcionava uma boa nos primórdios mas só em Sampa, mudei pro interior de São Paulo pra fazer faculdade e o BCP já não me atendia mais, comprei um TESS que funcionava de vez em quando e até em outros estados uma maravilha, aí uma tal de CLARO comprou a tal da TESS e então que começaram meus problemas com celular... a CLARO só queria colocar no meu toba, sei lá deve ser porque eu morava em Campinas e tal... aí mandei pras picas a CLARO e comprei não, digo, minha mina de saco cheio de ver eu reclamando da CLARO e me deu um TIM, putz, show de bola falar de graça ou por 7 centavos (nem lembro mais) funcionava que era uma maravilha até que um dia o telefone simplesmente parou de funcionar...

Esses ainda tenho os protocolos de reclamação neles e na ANATEL... deixa eu procurar aqui... merda não achei, mas lembro que foi mais de 50 ligações daquelas que você fica esperando uma cara e depois de uma meia hora a linha simplesmente cai... mas consegui depois de muito custo que me respondessem que o que tava com problema era meu chip, beleza, mandei pras picas a TIM e fiquei mais umas 4-5 semanas sem celular, afinal o TIM já não funcionava a uns 25 dias mesmo, e fui feliz no meu breve período sem celular, mas aí já viu né, não ter um celular o pessoal taxa você de fugiu a palavra e tal... então fui lá e comprei um da VIVO.

Ah lembrei aqui que antes do BCP minha mãe tinha um TELESP mas era meados de 90 e era um símbolo de digamos status e precisava ter ele. Pô, nem lembro mais onde eu estava ah sim... que comprei um VIVO, até aí tudo bem, depois da primeira conta desisti, tinham clonado a criança logo na primeira semana depois da compra... mandei cancelar, paguei a multa de cancelamento de contrato e tal (não paguei a conta ao menos isso) e mandei de volta o celular pra eles com aviso de recebimento e tudo mandando o Jones enfiar ele bem no meio da musiquinha... hehe... falaram que a mina foi no jo um dia desses mas eu to dormindo cedo já faz algum tempo...

Bom... como já tinha experimentado todas as operadoras do estado fiquei meio sem opção e resolvi comprar um Vesper, uma vez que eu estava viajando muito pouco e em Campinas ele me atendia na cidade inteira... pegava até me Pedreira!! Uma maravilha de operadora (tudo bem que é fixa! hahah, mas tá valendo!) e fui feliz por um bom tempo, comprei um TIM de novo e tudo ia na boa...

Ah lembrei uma vez em Minas comprei duma tal de Oi eu acho ou era Telemig (sei lá) e dessa não tive do que reclamar, funcionou belezinha em toda minha visita pelo estado, tudo bem que o tiozinho que me vendeu o chip cobrou 30tão pra fazer o meu TIM funcionar com o cartão que ele tava me vendendo, até que saiu barato... bom e aí vai com alguns solavancos até que aí me mandaram pro meio do planalto central transferi o meu celular ainda estava com um TIM e bah nem te conto deu o mesmo pau que eu já presenciara anos atrás com meu telefone mudo, sem fazer nem receber ligação e às vezes recebia mensagens que tinham me ligado e tal...

Dessa vez foi mais rápida a resposta, me ligaram no trampo perguntaram se eu podia falar naquele momento, disse que não e ok, pensei que me ligariam depois e tal... que nada, porra nenhuma... depois de uns 3 dias da ligação que recebi, liguei lá de novo e me informaram que a minha reclamação estava encerrada e que o problema estava resolvido... ri e com toda elegância e fineza que recebi de algum lugar mandei a atendente ir tomar no meio da musiquinha e fiquei muito feliz mesmo... liguei mais umas 3 vezes até conseguir que me reabrissem o chamado, nesse meio tempo liguei na ANATEL que registrou novamente a minha reclamação como problema continua. Deu uns dias me ligaram informando que em minha região não havia torre e que meu celular nunca funcionou no endereço que indiquei nem no meu trampo pois é área não coberta, ri denovo, nessa altura já tinha comprado um celular da BrasilTelecom (merda igual, mas depois eu conto) e tava com o TIM só esperando ver o que daria minhas reclamações... enfim com a TIM acabou não dando em nada, me cansei... sai de mentiroso, afinal meu celular nunca funcionou em casa nem no trampo e que eu deveria procurar outra operadora... não que eu não tenha feito isso conforme disse acima, mas vai tomar no cu, funcionava e um belo dia parou...

Dessa vez descobri que tiraram a porra da antena daqui de perto e que mais uma porrada de gente tinha tomado no boga e perdido o precioso número do telefone... mas beleza... sem galho... eu nunca fiquei muito tempo com o mesmo telefone só mesmo o 19 30328810 esse era clássico e todo mundo tinha... hoje ainda ligo nele perguntando se alguém deixou recado pra mim... hahaha e o pior que de vez em quando tem e olha que o cara é gente fina e me avisa... eu já dei meus telefones certinho pra ele, falando nisso preciso ligar lá e passar o meu novo telefone que comprei ontem um da Claro, porque a BrasilTelecom me deixou na mão na primeira semana e olha que tive que ir rapidinho pra Sampa resolver uns problemas tipo comprei o celular na quinta e viajei na sexta, algo assim, e a criança parou de funcionar no sábado...

Depois de muita reclamação o sistema bloqueou minhas chamadas, pois eu estava em roaming e meu padrão de utilização não "seguia" a tendência de uso... hahaha... que padrão... eu tinha acabado de comprar e isso não existe, detesto algumas regras de negócios que o pessoal da tecnologia tem que seguir e programar em seus sistemas essa trava é idiota, mas tá certo né... até o boy já teve um diretinho (celular com conta que alguém abre com documentos falsos e funciona uns dias depois já era...) nem sei se hoje ainda tem, mas o fato é que mandei a BrasilTelecom pras picas e passei no shoppinho num quiosquinho da Claro e comprei meu chip e desbloqueei meu celular que acabara de comprar na outra semana da BrasilTelecom...

Muito complicado agora cansei desse tal de conta e cansei mesmo... comprei o chip pré pago já com o desbloqueio e saiu 50tinha. O celular pagarei multa novamente, mas já acostumei, deve sair uns 700 mangos pra eu desistir da BrasilTelecom, acho que dessa vez vou ligar o foda-se e que meu CPF me perdoe! Afinal tempo pra ir no Procon nunca terei e advogado que se preze não perde tempo com picuinha (afinal aqui não é os istatis). Acho que é isso aí pessoal, Bom final de semana, Buga Ah porra tava esquecendo... o porque que escrevi isso tudo... não importa qual, já testei quase todas e cara acho que nenhuma se safa. Se pelo menos os meus aparelhos fossem desbloqueados eu teria muito menos dor de cabeça e menos gastos com cláusulas muito inteligentes nos contratos - como gostei de um que dizia assim - Não li mas concordo!!!!

Fui.

Provavelmente escrito em Brasilia em meados de Julho de 2009

quinta-feira, 3 de novembro de 2016

Mass Insert DB2 - Inserindo uma caralhada de dados no on-line de uma vez só! Da hora, funciona!

Pequena alteração? Só um insert...

Esses dias me deparei com uma alteração de um programa (já entregue, testado e evidenciado) que precisou de uma “pequena alteração”, só um insert dizia o pedido.

Esse tipo de situação é muito corriqueira (lembro uma vez que trabalhei um carnaval inteiro (desde a sexta feira antes do carnaval até a quarta de cinzas porque tinha que ir pra produção no almoço da quarta de cinzas – esse fiz questão (só pra saber que não era urgente porra nenhuma e que não teria a volumetria informada nunca) de colocar contador de execução e emissão de relatório pra eu saber a real utilização da parada – BINGO, nem o cara que pediu usou na tal quarta de cinzas! Um tempo depois chegou uma solicitação pra desencanar da parada (o “projeto” inicial era bem trabalhoso e saiu só um cotoquinho na quarta de cinzas – afinal milagre é outro departamento, mágica ainda vai!) acho que até hoje deve ter um texto meu no código fonte bem puto explicitando que as vezes fazemos papel de palhaço atendendo pedidos que sabemos que não vai ter futuro, mas que os chefes nas camaradagens e nas boas vizinhanças acabam aceitando (mesmo também sabendo e concordando que não vai vingar) sinceramente não entenderei jamais os meandros do mundo corporativo!

Lembrei de uma vez que o Mané pediu um lê-grava na sexta pra entregar na segunda que era boiada... humpft, outro final de semana e madrugadas, mas esse usaram bastante!

Enfim, voltando a minha pequena alteração de hoje (outubro 2016). Depois que conversei com o figura que fez a solicitação inicial e na hora que integrou tudo reparou que precisava da “alteração” porque esqueceu na hora de “especificar” ou o “cliente” mudou de ideia, enfim, me pagam para além de fazer mágica, resolver pepinos e aqui estou!

A parada era simples, de verdade! Só ler uma tabela recebida via linkage e ir inserindo os caras que não fossem “branco” numa tabela XPTO. Como trabalhei bastante tempo com sistemas on-line de alta performance e diga-se de passagem quando comecei a trabalhar com isso foi justamente retirando os acessos ao DB2 substituindo-os para acesso a arquivos VSAM e outras soluções bem interessantes (como as TS residentes para “tabelas” pequenas).

Isso posto – como diria o nosso advogado Rodrigo – sei e tenho a noção que sair da QR (o programa é CICS e não é ThreadSafe) e ir pra L8 uma porrada de vezes pra gravar no DB2 não é uma boa ideia. Sai então pra pesquisa, afinal alguem já deve ter tido uma situação parecida de fazer uma inserção em massa no DB2 de uma vez só.

A pesquisa foi relativamente simples, tem bastante coisa de DB2 que aparece quando ‘googla’ direitinho (procurei por multiple-row-insert), vi o manual do DB2 – 11 e localizei o que eu precisava. Só os exemplos que estavam meio capengas, mas nada que com uma fuçada aqui e ali não resolvesse.

A parada ficou bem legal pro que eu precisava e deixa eu colocar o código aqui pra não esquecer – afinal pra isso que fiz esse blog!...

Simplificando... a tabela ‘digamos’ que tenha só 2 campos SMALLINT e not null os 2 e a chave é os 2.

As variáveis:

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
/                                                              
*---------------------------------------------------------------*
*   MASS INSERT DB2                                            
*---------------------------------------------------------------*
01  FILLER             PIC X(30) VALUE 'MASS INSERT'.
01  GD-MASS-INSERT.
   03 I                PIC S9(4) COMP VALUE 1.
   03 GD-NR-LINHAS     PIC S9(4) COMP VALUE 0.
   03 GD-CAMPO1        PIC S9(4) COMP OCCURS 1000.
   03 GD-CAMPO2        PIC S9(4) COMP OCCURS 1000.
/                                                               

Na section do insert fiz um loopzinho básico pra varrer a entrada e mover os dados válidos e acumular quantos eram eles.

O insert é bem “normal”

    EXEC SQL
        INSERT INTO BVISANET.TABELA_XPTO
        (CAMPO_HUM, CAMPO_DOIS)
        VALUES (:GD-CAMPO01, :GD-COMPO02)
        FOR :GD-NR-LINHAS ROWS
        NOT ATOMIC CONTINUE ON SQLEXCEPTION
    END-EXEC.

E no meu caso nem se deu certo ou não eu precisava, nos testes deu uns erros 253 que indica que “olha eu tentei fazer o que voce pediu, mas não garanto porque deu caca” e o 254 que olha amigo, não rolou nem unzinho! Em ambos ou se quiser analisar a parada mais a fundo tem o “GET DIAGNOSTICS” que sai do escopo desse post (afinal nem usei a criança).

O “NOT ATOMIC” é pra não parar se der erro, afinal eu quero uma inserção em massa, os erros depois vejo o que faço com eles, quer dizer, nesse caso nada!

Fiquei puto com a “pequena alteração” ainda mais sabendo que meu patrão não recebe um centavo disso - na real quem deveria saber e cobrar sequer fica sabendo ou se sabe faz o lance da boa vizinhança, e enfim, entramos no mesmo lance do mundo corporativo que não entendo. mas aprendi uma nova e como não manjo nada de DB2 acho que foi bem produtivo!

Deixa eu colocar a fotinho do TSO pra eu lembrar que sou trouxa e trabalho depois do horário (achei que fosse coisa do meu outro serviço, mas parece que é crônico, afinal tudo é urgente e pra ontem!) e mais trouxa ainda porque não entro na justiça processando meu empregador!...

Figura 1: Buga Troxa

Figura 1: Buga Troxa

Os Códigos de SQL da versão 11 do DB2 podem ser pesquisados no link abaixo

http://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/codes/src/tpc/db2z_n.html

Nota:

Ver com o Aldenon ou com o Thiago se eles ainda tem o e-mail de outra vez que trabalhei igual maluco nas madrugada pra abrir o criptograma na mão com todos os passos e tals...

Achei!
Re: Documentação da função CVN 17 de 22.06.2013 tem o anexo e tudo com o passo a passo! (esse só pra eu lembrar mesmo porque tem muita informação $40, vulgo confidencial) e pra não esquecer que se o viadinho do Chahad tivesse descolado o programinha que ele usava tinha resolvido isso instantâneamente!

segunda-feira, 3 de outubro de 2016

SLATVARS - Saindo da ignorância rumo ao conhecimento!

SLATVARS - Saindo da Ignorância Rumo ao Conhecimento!

Depois de quase uma década trabalhando com mainframe utilizando utilitários da CA para versionamento/controle de versões/etc sempre me deparei com o SLATVARS (incluida pelo step de compilação que chama o librarian) e nos pós compiladores/verificadores/padronizadores de código se a variável não existe ou se esta fora de sintonia com o esperado o programa é rejeitado.

Sempre encontrei problemas com isso justamente por querer saber como que as coisas funcionam e para o que serve cada coisa. Não sou muito fã do copiar e colar, apenas quando é a única opção e essa era a minha opção para o SLATVARS.

Como não existe quase nada sobre mainframe na internet, nunca nenhuma de minhas pesquisas retornou algum dado sobre isso. Da leitura do manual do Roscoe nunca achei nada, no manual do Librarian que eu tinha não falava nada sobre como configurar, de onde vem os dados enfim, não sabia nem qual era o significado do SLATVARS, afinal o VARS é invenção da instalação (shop) que eu trabalhei, o nome correto é só SLAT.

Descobrindo o Significado de SLATVARS

Pelo menos nesse último quesito, o significado, agora é conhecido. SLATVARS é um acrônimo para Source Load Audit Trail! Agora entendo porque meus fontes compilados sem o Step do Librarian caiam pro pessoal de qualidade e eles reclamavam que não tinha o SLATVARS!

Referência Útil

Pra não perder o manual do Librarian - Implementation Guide r4.4.

segunda-feira, 11 de julho de 2016

Manuais do Roscoe - Ca-Roscoe Release 6 - RPF Language Guide - Roscoe User Guide

Manuais CA Roscoe para Mainframe – Download

Tudo bem que atualmente o pessoal está usando o RDz, o MicroFocus e outras ferramentas "modernas" para programar em mainframe, mas sempre vai ter alguém que precisa do bom e velho Roscoe. Então deixa eu salvar os manuais aqui pra não perder.

Manuais Individuais

Nome do Arquivo Tamanho Download
b001733e - User Guide.pdf 1.4 MB Download
b001723e - System Reference Guide.pdf 988 KB Download
b001712e - System Commands Guide.pdf 554 KB Download
b001702e - Security Administration Guide.pdf 307 KB Download
b001692e - RPF Language Guide.pdf 1.2 MB Download
b001682e - Release Guide.pdf 264 KB Download
b001673e - Programs and Utilities Guide.pdf 958 KB Download
b001662e - Messages and Codes Guide.pdf 1,017 KB Download
b001653e - Installation Guide.pdf 476 KB Download
b001642e - Getting Started.pdf 390 KB Download
b001632e - Extended Facilities for System Programmers Guide.pdf 824 KB Download
b001622e - Extended Development Tools Guide.pdf 450 KB Download
b001613e - Command Reference Guide.pdf 1.8 MB Download

Pacote Completo

Pacotão - B001743E.TGZ

quarta-feira, 22 de junho de 2016

PROTEÇÃO DE CÓDIGO FONTE VIA OFUSCAMENTO - Cobol - magos do mainframe - Exemplos

Atualização do TCC: Slides, Vídeo e Arquivos sobre Ofuscamento de Código

Atualização 14.11.2022 – O vídeo parece que perdi, vou procurar em algum backup pra ver se acho, tinha subido no Dropbox, mas aparentemente minha conta foi pro espaço.

Em tempo, achei as lâminas da apresentação:

E no YouTube:

Finalizado o TCC.

O vídeo está tosco porque cortou na hora de mandar pro YouTube, deve ter ficado em casa a versão certinha, mas como é pra eu não esquecer, deixa ele aqui pra garantir.

Tem o PDF e o WORD do TCC entregue. (Coloquei o WORD também porque enche o saco copiar e colar de PDF!)

Vídeo 1: Apresentação

Assista ao vídeo da apresentação no YouTube

sábado, 4 de junho de 2016

6 Bips Máquina de Lavar Roupas LS12Q - Electrolux - Manual de Instruções

Electrolux LS12Q – Saga dos 6 Bips e Solução

Essa máquina deu trabalho!

Os 6 bips (avisos sonoros) intermitentes que de uma hora pra outra faz a máquina parar de funcionar é de deixar qualquer um de cabelo em pé!

Troquei primeiro a válvula de 2 vias que deu pau (nítido porque não entrava água na máquina a contento) depois começaram os bips, aí foi uma verdadeira saga, primeiro troca a placa de nível, vulgo Pressostato Eletrônico,

Pressostato Eletrônico LS12Q

Figura 1: Pressostato Eletrônico LS12Q

volta a funcionar depois volta o problema, depois a placa central (Placa Potência/Controle) PaulaHigh

Placa Potência LS12Q

Figura 2: Placa Potência LS12Q

mas caiu no mesmo esquema, volta a funcionar e a intermitência do problema retoma a vida!).

Por fim achei um site especializado (para técnicos em geral) que tava perguntando/relatando a mesma situação:

http://www.eletrorespostas.com.br/diversas-lavadoras-eletrolux-dando-defeito

Percebi que a parada iria ser na tentativa e erro, sem falar que quando desconectava e reconectava a mangueira do nível o defeito sumia, quando ficava muito tempo desligada também... Enfim, trocamos a fiação/rabicho/chicote e nunca mais deu o problema, acho que era alguma coisa dando mal contato ou oxidada, mas a certeza jamais saberei.

Anexo1: Manual usuário LS12Q

nem alusão aos avisos sonoros (bipes)

Atualização em 11.6.2016

Agora que descolei o manual de serviços! Valeu o comentário do leitor!

Eletrolux LS12Q - Manual de Serviços LS12Q (LAVADORAS DE ROUPAS TOP LOAD - ELETROMECÂNICAS LTR10/LTR12/LTS12/LS12Q)

Eletrolux LS12Q - Manual de Instruções



quinta-feira, 19 de maio de 2016

Pra não esquecer - Naffer

Memórias e saudades do Naffer

Sinceramente não lembro sempre fui péssimo para datas, o uso de ferramentas do tipo agenda sempre me foram muito úteis, agora nos tempos de nuvem e com integração de todos os lados essa tarefa de lembrar ficou muito mais fácil, porém o que queria lembrar era algo meio mórbido, no caso a data que um grande camarada meu veio a falecer... esse tipo de coisa você não coloca na agenda, ainda mais que não fui ao velório então sequer existe registro de alguma atividade relacionada a esse evento em “minha agenda”, coloquei entre aspas porque quem a comanda hoje (na maioria dos eventos é o google).

Enfim, a tarefa até que foi simples porque lembrei de uma singela lembrança que postei no facebook quando soube de seu falecimento sobre um joguinho de trocar letras on-line tipo scramble que esse meu amigo adorava passar seu tempo vago jogando.

Achei a tal da publicação e lembrei mais ou menos a data não é precisa, mas isso também não importa. O que importa é o que um dia a Ju me falou de um pai de um paciente que morreu de câncer e o maior medo dele – lagrimas escorrem do meu olho nesse momento, pausa volto depois de me recompor – era o de esquecer.

E não sei dizer o porque mas ontem lembrei do Naffer algumas vezes durante o dia, como minha memória de curto e médio prazo é quase inexistente quem me deu um toque sobre isso foi a Ju - Ou... você já falou do Naffer umas 4 vezes hoje! – dai eu tentar lembrar se fazia um ano que ele tinha falecido ou mesmo descobrir o porque da memoria ativada, não faz uma ano, faz um pouquinho mais, pelo que consegui resgatar ele deu baixa em 22 de março de 2014... ai só sobrou o que realmente importava, o não esquecer.

Me lembro apenas da ultima lembrança que tive ontem (não falei que minha memoria é péssima) enfim, foi a de um dormindo a noite antes de sair de carro para ir a algum lugar. Fazia alguns anos que já isso não mais acontecia na minha vida; resumindo, costumava trabalhar nas madrugadas de quarta para quinta-feira (mesmo tendo trabalhado na quarta e ter jornada normal na quinta, 11 horas de descanso entre as jornadas é para os fracos – ossos do óficio como diria o seu Irá) e num dado momento depois de algumas modificações e ajustes na estrutura da equipe ficamos só eu e o Naffer realizando essa magnifica tarefa. Eu ia pra casa normalmente na quarta feira, dormia um pouco mais cedo que o habitual e acordava umas 2:30 para ir trampar, comia alguma coisa, separava besteiras e um suco de caixinha ou similar, pegava o maço de Marlboro a chave do carro, descia até a garagem (sempre com as luzes acesas) e dirigia 20 minutos pelo planalto central quase sem ninguém nas estradas, ligava pro Naffer na descida do Carrefour (com comando de voz) avisando ele que eu estava chegando em 5 minutos. Eu nunca me atraso, não precisava ligar, ele sabia que eu estaria lá na portaria do condomínio dele na hora marcada 5 pras 3 (la vem novas lagrimas, acho que devo ter parado cedo demais de tomar o remédio de depressão, ou deve ser normal quando a gente lembra que nunca mais vamos ver alguém), conversa de nada novo, do tipo e ai bastante frio , essa chuva que não passa ou essa seca ta brava esse ano, ou mesmo alguma coisa que ele falava de futebol e eu só balançava a cabeça afinal nunca me interessei ou entendi algo desse universo, o Naffer curtia o tal do Futebol, não tanto quanto o Thyago Luiz mas gostava bastante, sempre dava um jeito de ir trampar com alguma camisa de time de futebol que ficava apertando a pança de leve. 5 minutos depois já estávamos no imponente complexo central de tecnologia do conglomerado do Banco do Brasil, vulgo, sede IV. Revisavamos os “check-list” do que tínhamos que fazer, uma analisada ou outra de ultima hora em algum pedaço de código que tenha gerado dúvida (como não lembro, mas sinto que nunca encontrei nenhuma merda digna de nota que ele tenha feito, exceto não comentar nada dentro do código, mas que com o tempo e muita encheção de saco ele começou a fazer isso e até hoje posso dizer que está entre os 5 melhores analistas/programadores que já conheci) e ficávamos aguardando a baixa no TIM e o newcopy para acompanhar se deu tudo certo ou se tínhamos de sair ligando pra Deus e o mundo pra dar newcopy na mão ou recompilar tudo de novo com a versão antiga e sair pra prancheta analisando o que deu errado (algumas vezes voltamos pra prancheta e não achamos o erro, baixamos a versão de novo na outra semana e magicamente dessa vez funcionou... lembrei aqui de uma exit do cics do ICSF que não voltava nunca se a compilação não fosse estática... até hoje não sei se já arrumaram isso), voltando ao mineiro quieto que como diria o Leandro muito quieto demora pra responder porque enquanto ele pensa ele esta localizando dentro da memoria dele o código do label (o programa era tão doido que nem section tinha, e os labels tinham código tipo o K200 que ia lá no AMOA procurar o registro uma vez que não achamos no log (nossa eu também ainda lembro!) e não cabia na AWS do roscoe de tanta linha que tem, enfim, o cara manjava, muito do negocio!

Nos nossos churrascos sempre na dele, quietão conversando com um ou outro, circulando pelas rodinhas, bebia moderadamente e costumava voltar de taxi sempre, seilá porque mas como ele era extremamente reservado devia ser algum trauma de andar com motorista bêbado ou seilá, acho que essa é a mais provável, trauma, uma vez que ele não dirigia. Devo ter perguntado alguma vez o porque ou alguém deve ter me contado, mas olha ai, não lembro, esqueci... que merda!... Gostava bastante também de falar de filmes velhos (seilá o que é velho hoje, mas uma vez me arrisquei a pegar um que o Aldisio tinha emprestado pra ele - ledo engado esse DVD da NetMovies deve ter sido extraviado! – nossa esse foi outro mercado que surgiu muito rápido e desapareceu mais rápido ainda (aluguel de filmes por “courrier”) – enfim, os dois haviam falado extremamente bem do filme e tal do ator, do carro, do enredo, resumo da ópera, filmão! Filmão porra nenhuma, puta filme tosco do caralho... spoiler alert - um cara que rouba um carro, sai fugindo pelos estado unidos e se mata no final batendo o carro contra uma barricada da policia, infelizmente, fica aqui meu pedido de desculpas, mas não lembro o nome do filme e não tenho certeza se ele roubava o carro ou se o filme já começava com ele no carro e nem ficamos sabendo qual o crime que ele cometeu ou mesmo o porque de estra em fuga. Talvez quando eu fique velho, fale isso pra molecada de algum filme que achei o máximo (tipo matrix) e eles tenham essa mesma impressão.

Ele estava sempre matutando alguma coisa pra implementar de melhoria no sistema... suas sacadas e tiradas de sarro eram sutis e palavrões nunca eram proferidos, exceto em situações extremamente tragicomicas do tipo de alguém vir com um problema daqueles que já ficou mais de semana tentando resolver e senta do lado dele explica tudo e ele só prestando atenção e anotando uma ou outra coisa em sua companheira inseparável folha de papel A4 ininteligivel para outros humanos, depois de algum tempo e de analisar o código (sempre em silencio) ele vira e pergunta, você fez tal coisa no código ? (ele já sabia a resposta, era sempre uma pergunta retórica) sempre a resposta era ou que fez ou que não fez (afinal não existe outra possibilidade para essa resposta, se respondesse não sei ou não lembro não estaria trabalhando na nossa equipe, quer dizer, não lembro eu respondia direto, mas ia rapidinho procurar e voltava com a resposta (essa daqui aprendi com o Perez!). E depois da resposta que vinha o bordão clássico, então é ai que fudeu!

Agora deixa eu ir dormir que são 5 da manhã, qualquer dia continuo, se não continuar fica aqui uma pitada de lembrança pra essa cuca que não lembra muito bem das coisas.

quinta-feira, 12 de maio de 2016

Mainframe Tips - Quem diabos estaria segurando o arquivo ???

Resolvendo Problemas com DataSet no Mainframe: Waiting for DataSet

Essa daqui pra quem é programador é casca, ainda mais quando você bota o Job pra rodar e ele fica "Waiting for DataSet", algo corriqueiro e por vezes até normal, mas e quando um Zé Ruela qualquer, NúBi da vida resolve mandar o JCL sem DISP share?

Pelo que aprendi do virtuoso "Nelson F1", fui lá ver quem estava segurando o DataSet no TSO mesmo, opção 3.4 que é a que mais gosto para mexer com arquivos, achei o raio do arquivo, mas TEM ALGUM INFELIZ QUE ESTA SEGURANDO O ARQUIVO COM ACESSO EXCLUSIVO!

Você vai lá da o F1, mas, mas

"Since more than 72 users are using the data set, this list is incomplete"

E nada de mostrar o job vermelhinho que esta te sacaneando.

Então vai lá e executa o comando na console, ué!

Acessando a Console via ULOG

Tela de acesso à console via ULOG no mainframe

Figura 1 - Acessando a console via ULOG

Executando o Comando na Console

/D GRS,RES=(*,CICSTS23.... CICS.SDFHLOAD)

Lá no FandezHi

Execução do comando GRS na console do mainframe

Figura 2 - Execução do comando

Relatório da Execução

De boa,

Relatório de execução do comando GRS no mainframe

Figura 3 - Relatório da execução

Só pra variar não lembro qual era o arquivo que ficou preso nem em qual "mainframe", mas como não posso dar print dos sistemas que trabalho, os ilustrativos aí de cima já devem me ajudar a lembrar na próxima vez que aconteça.

quarta-feira, 27 de abril de 2016

Manual fogão cooktop suggar

Perda do Espalhador de Chama do Fogão

Nossa secretária conseguiu a façanha de perder uma das capinhas dos queimadores do fogão!

Ininicia-se a saga à procura do "espalhador de chama" que é o nome técnico da peça perdida!

Download do arquivo relacionado ao espalhador de chama

terça-feira, 19 de abril de 2016

Aplicativos de Camaradas - COBOL Up

Era pra ter saido pela BugaSoft, mas não deu certo...

https://play.google.com/store/apps/details?id=br.com.elabore.cobolup

Infelizmente não testei, afinal sou metido a rico e tenho um iphone!

COBOL Up

Alexsandro Ferreira Pinheiro Ferramentas

Este app é compatível com todos os seus dispositivos.

Instalado

O aplicativo COBOL UP tem como objetivo auxiliar todos os "COBOLEIROS" a sanarem as suas dúvidas e adquirir conhecimento. Através do COBOL UP é possível obter detalhes dos erros que ocorrem no programa COBOL e no ambiente mainframe.

Os erros que podem ser consultados são:

  • File Status - VSAM
  • EIBRESP
  • SQLCODE - DB2
  • System Abend
  • User Abend

Baixe também a nossa versão PREMIUM, além de não ter anúncios, contém SQLCODES que não estão disponíveis nessa versão.

Espero que o app seja útil no seu dia a dia :D.

sábado, 16 de abril de 2016

Qual o tamanho do meu monitor ?

Como medir o tamanho do monitor (sem fita métrica!)

Esses dias me deparei com aquelas situações completamente banais, mas que por algum motivo requerem uma intervenção!

A tarefa de medir o tamanho de um monitor é algo extremamente simples, pegue uma régua ou algo parecido e meça a diagonal, mas e se você não tem uma fita métrica? A tecnologia pode te ajudar! Ideias aparentemente sem sentido ou propósito podem te tirar de situações bem interessantes, que foi o nosso caso.

Precisava descobrir qual o tamanho do meu monitor!

Antigamente - na época do tudo de raios - a proporção era 4x3, atualmente - 2016 - é 16x9 que sempre existiu, mas era só pra cinema. Enfim, devaneios à parte, eu nunca me importei durante a transição e a coca cola esticada não me fazia nenhum tipo de mal, mas existiram pessoas, tipo o seu Irá que não gostava muito e sempre reclamava quando via um filme "esticado pros lados" e é esticado pros lados mesmo por a altura na proporção.

Aquela velha TV de 29 polegadas que pesava seus 40 quilos e custou uns 1000 reais em 2004 não é mais fabricada e sua "área de exibição" deve corresponder a uma TV nova dessas de OLED (conta de padaria) de umas 35 polegadas, por isso os antigos sempre teimam em dizer que a TV deles era maior que as de hoje, de certa forma era mesmo!

Mais uma das coisas de velho que ainda existem e não deveriam pra adicionar na lista... dia de vencimento do licenciamento/IPVA de veículos! Junte-se a mainframes, caixas pretas, som de carro (central multimídia já é um avanço) e mais algumas outras coisas que esqueci no momento, mas basicamente ainda existem porque quando jovem você questiona, te ignoram, você continua questionando e sempre recebendo as mesmas respostas até que um dia você desencana... e quando você está na posição para mudar algo, você nem lembra mais que o quis um dia!...

Enfim, só pra finalizar

Clica aqui pra ir no site do china e descobrir o tamanho do seu monitor!

A ideia é fantástica! Afinal um cartão de crédito todo mundo (quase) tem na carteira!

domingo, 10 de abril de 2016

Figuras para o MercadoLivre

Shape De Skate Liso - Sem Estampa - Direto Da Fábrica - Sk8

Shape de skate liso sem estampa
Logo da Bugolina2

Preço e Detalhes do Produto

R$ 45,00

  • Shape com 7 lâminas de marfim
  • Resina epóxi de primeira linha
  • Leve e resistente
  • Inclua sua lixa por +R$10,00
Banner de perguntas para Bugolina2
Figura 1: Pergunte a Bugolina!

Sobre a Loja

A Roda Skate Wheels

  • De skatista para skatista! Preços imbatíveis!
  • Atendimento excelente!
  • Produtos de qualidade! Ampla variedade de artigos!

Veja todos os nossos produtos à venda!

Imagem promocional da A Roda Skate Wheels
Aviso sobre a seriedade do lance no Mercado Livre

MÄLLET® Skateboard Decks - Há 11 anos no mercado!

Banner de perguntas para Bugolina2 no Mercado Livre
Figura 2: Pergunte antes de comprar - Bugolina2
Banner promocional tudo junto
Figura 3: Tudo junto
Aviso para evitar negativação no Mercado Livre
Figura 4: Evite ser negativado - Bugolina2

Visite Nosso eShop

A Roda Skate Wheels

  • De skatista para skatista! Preços imbatíveis!
  • Atendimento excelente!
  • Produtos de qualidade! Ampla variedade de artigos para SKATE!

Veja todos os nossos produtos à venda

Aviso final sobre a seriedade do lance
Figura 5: Lance é coisa séria!

xxxxxxxxxxxxxxxxxxxxxx