martes, 4 de mayo de 2021

Utilidades REXX V: modificar todos los miembros de una librería.

 Pues mira tú por dónde que una piensa que ya nadie necesita de sus conocimientos técnicos y de repente surge la oportunidad de hacer algo interesante :-)

La necesidad es lo que tiene.

Hoy os traigo un programa rexx que se recorre todos los miembros de una librería y le añade unas líneas de código. En mi caso una cabecera con comentarios, pero puedes usarlo para lo que necesites, o para hacer reemplazos de código modificándolo un poco.

Vamos al lío:

/* REXX** PGM POUR AJOUTER UNE ENTETE A TOUS LES MEMBRES D'UN PDS*/            
ADDRESS "ISPEXEC"                                       
/*INDIQUER LE PDS D'ORIGIN:*/
PDSORI="NOM.DU.PDS"
/*INDIQUER LE PDS DESTINATEUR:*/
PDSDES="NOM.DU.PDS"
"LMINIT DATAID(LMID) DATASET('"PDSORI"')"
"LMOPEN DATAID("LMID")"  
/*BOUCLE POUR TRATIER TOUS LES MEMBRES DU PDS ORI*/
DO FOREVER = 1                                       
    ADDRESS "ISPEXEC"
    "LMMLIST DATAID("LMID") MEMBER(LMMEM) STATS(YES)"   
    
    IF RC > 0 THEN LEAVE       
    
    /*NOM DU PGM A TRAITER:*/
    SAY "MEMBRE=" LMMEM
    
    FICHIERIN=PDSORI'('LMMEM')'
    ADDRESS TSO
    /*ALOCATION FICHIER ORIGIN*/
    "ALLOC FI(INDD) DA('"FICHIERIN"')"
    /*LECTURE DU FICHIER COMPLET*/
    "EXECIO * DISKR INDD (STEM INDD. FINIS"  
    "FREE FI(INDD)"
    
    FICHIEROUT=PDSDES'('LMMEM')'
    ADDRES TSO 
    "ALLOC FI(OUTDD) DA('"FICHIEROUT"') SHR REUSE"
    
    /*PREPARATION DE L'ENTETE*/
/*AQUI PONED TANTOS OUTDD. COMO OS HAGAN FALTA*/
    OUTDD.=''
    OUTDD.1 = "***************"
    OUTDD.2 = "*CABECERA*"
    OUTDD.3 = "***************"
    
/*AQUI CAMBIAD EL 4 POR EL SIGUIENTE NUMERO AL ULTIMO OUTDD. ANTERIOR*/
    J=4
    DO I=1 TO INDD.0
       OUTDD.J = INDD.I
       J=J+1
    END
    
    /*ECRITURE DU PGM AVEC L'ENTETE*/
    "EXECIO * DISKW OUTDD (STEM OUTDD. FINIS"  
    "FREE FI(OUTDD)"
END                                                     
"LMFREE DATAID("LMID")" 

Disculpad el francés pero es que creé este código para usarlo en el curro, y trabajo en francés xd Pero creo que se entiende bien.

Lo primero que hacemos lo tenéis también en el artículo Utilidades Rexx IV: listar miembros que es precisamente eso, recuperar la lista de miembros que hay en una librería.

El nombre de la librería podríamos pasarla como un parámetro desde el job, pero me dio pereza. Se trata de recorrerse la librería origen, y crear en la librería destino una copia de cada miembro con el código modificado. Lo he hecho así porque no quería "cargarme" el código original pero lo podéis personalizar al gusto.

El JCL para ejecutarlo:

//REXXJCL  JOB (OPC0,001),'CONSU',REGION=0M,NOTIFY=&SYSUID,
//            CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),COND=(4,LT)
//REXXPGM  EXEC PGM=IKJEFT01                              
//SYSEXEC   DD DSN=librería donde tengo el programa rexx,DISP=SHR               
//ISPPROF   DD DSN=&&PROF,UNIT=SYSDA,SPACE=(TRK,(5,5,5)), 
//             RECFM=FB,LRECL=80                          
//ISPSLIB   DD DISP=SHR,DSN=ISP.SISPSLIB                  
//ISPPLIB   DD DISP=SHR,DSN=ISP.SISPPENU                  
//ISPMLIB   DD DISP=SHR,DSN=ISP.SISPMENU                  
//ISPTLIB   DD DISP=SHR,DSN=ISP.SISPTENU                  
//ISPLOG    DD SYSOUT=*,DCB=(LRECL=125,RECFM=VBA)         
//SYSTSPRT DD  SYSOUT=*,DCB=LRECL=125                     
//SYSPRINT DD  SYSOUT=*                                   
//SYSTSIN  DD  *                                          
  ISPSTART CMD(REXXENT)                                   
/*                               

Espero que os sea útil. Cualquier duda, os leo comentarios :-)

lunes, 26 de abril de 2021

El daily "del revés" (agilecobol)

Hola amigas y amigos del Consultorio Cobol.

En año nuevo tuve una revelación. Esta me sobrevino cuando intenté clasificar su especie... digo...

Bueno, digamos más bien el 2 de enero, porque el 1 no estaba yo en condiciones de revelar nada xd

Estaba preparando una presentación sobre los daily meetings para mis equipos, porque estamos en época de cambios y las dailys no se estaban haciendo bien. Y hacía tiempo que lo sabía pero para cambiar el formato no me valía con decir "ahora lo vamos a hacer así porque lo digo yo". Que es muy de manager viejuno pero ya sabéis que yo soy una moderna.

Así que preparé una especie de taller sobre el daily meeting (porque no somos ágiles, pero hacemos daily desde hace mucho) para compartir mis reflexiones con el equipo y también para que ellas y ellos reflexionasen sobre el tema.

Primero, para desmentir algunos mitos, preparé un kahoot con preguntas sobre el daily meeting, a ver cuánto sabía realmente el equipo sobre lo que era y para qué servía. Si os interesa os lo paso.

Luego preparé una ppt de apoyo para soltar la chapa sobre la daily. 

Y estaba yo en esas cuando iba a empezar a explicar que ya no vamos a ir uno por uno soltando el rollo de las 3 preguntas (que ni Jeff Sutherland lo entiende) sino a hablar de los objetivos de la semana y de las tareas en curso, cuando lo supe: íbamos a hacer el daily "del revés".

A lo Stranger Things. 

Con esto lo iba a petar seguro.


#thisistheway

domingo, 25 de abril de 2021

Curiosidades COBOL

[ACTUALIZADO] Últimas entradas añadidas!

Hola Consultorio COBOL

agradeciendo la enorme generosidad de Tania los invito a la lectura de los articulos de la serie Curiosidades COBOL que desarrollo en LinledIn.

Les comparto sus titulos y links

Saludos

Leonardo

18. Migrando a COBOL 6: Nuevas sentencias, clausulas, limites y posibilidades.

17. Migrando a COBOL 5 y 6: Siguen los EXITos

16. CobSolver II Cálculos de Prestamos

15. CobSolver Motor de Cálculo de Formulas

14. Mix de Curiosidades

13. Chau FILLER Chau Bienvenido cualquier nombre de relleno

12. Programas anidados II Niveles, programas comunes y variables globales

11.Programas anidados Una poderosa feature de COBOL poco conocida

10. Extract and Load: De la góndola de un supermercado a los yacimientos de datos
https://bit.ly/3oSJAcL
Video: https://bit.ly/34b0n2z .

9. Herramientas de Automatización II: De un lector de reportes a un test automatizado
https://bit.ly/36lhq3w
Video: https://bit.ly/39qdT5X

8. Había una vez un Banco que cambio su Core Banking...
https://bit.ly/36DjqDg
Video: https://bit.ly/3qCSblf

7. Optimizando el código: Opciones de compilación
https://bit.ly/3mIHACO

6. Optimizando el código
https://bit.ly/3j8OU8r

5. Ambigüedad, cruel ambigüedad
https://bit.ly/3d3ZSur

4. QuaCOBOL, una herramienta de control de calidad
https://bit.ly/35VDEcH
    4.1 QuaCOBOL, video1
    https://bit.ly/3clE3Gp
    4.2 QuaCOBOL, video2
    https://bit.ly/2FSwScF

3. Control de calidad de código COBOL-CICS-DB2
https://bit.ly/3ho1ShK

2. El más pequeño de los programas es el más charlatán
https://bit.ly/2IOFvqJ

1. Un curioso caso de no cancelación de programas 
https://bit.ly/36VO76T

lunes, 15 de febrero de 2021

Resultados de la encuesta: formación técnica

Hola amigas y amigos del Consultorio Cobol.

Parece que no iba yo tan desencaminada y sí que hay una falta de formación en el mundo cobolero.

Estos son los resultados de la encuesta:

A la pregunta ¿Alguna vez tuviste formación técnica (cobol, jcl, db2, cics...) fuera de la "beca" inicial de cobol?




A la pregunta ¿la formación recibida fue "de calidad"?



A la pregunta ¿te habría ayudado recibir formaciones técnicas?




Teniendo en cuenta que en el mundo COBOL la mayoría no somos informáticos (no tenemos una formación base en programación), parece aún más necesario que haya una continuidad en la formación técnica.

Claro que esto es sólo mi opinión. Me encantaría leer la vuestra en comentarios :-)

lunes, 18 de enero de 2021

eXtreme Programming: ¿TDD y Cobol ? (agilecobol)

Hace un par de meses fui a un meetup del grupo "Madriagil - Grupo Meetup de Agilismo de Madrid", organizado por Javier de NeuronUp, sobre eXtreme Programming (XP).

Si no estáis en el grupo, os lo recomiendo. Salen siempre meetups interesantes organizados por verdaderos profesionales. Y lo mismo nos vemos! Éste en concreto terminó siendo muy gracioso xd

Estaba yo ahí flipando un poco con los términos que usaban los participantes expertos en XP con tanto CI/CD, TDD, refactoring, CCO... cuando se abrió la ronda de preguntas y se me ocurrió preguntar si XP se podía aplicar a cualquier lenguaje de programación.
Total que leo en el chat de zoom: con cobol NO.

:-( 
Por qué??!!! Qué ha hecho el pobre cobol para merecer esto??!!

Y eso dio pie a una pequeña disertación sobre si cobol sí o no, si se podían automatizar los test en cobol, si los test unitarios eran factibles, etc etc. Y el chico que había puesto lo de "con cobol NO" tuvo que puntualizar que estaba de broma, y bueno, fue nuestro momento de gloria y me reí un montón xd

Pero entonces qué, cobol sí o cobol no? Somos compatibles con XP? Pues dejadme que os cuente...

Una de las prácticas de XP es el TDD:
Test-driven development.
Los equipos XP practican la técnica de desarrollo guiada por pruebas (TDD) que implica escribir una prueba unitaria automatizada antes del propio código (así resumido).

Vale, igual automatizado automatizado no es, depende de cuánto haya invertido la empresa en herramientas de desarrollo. 
Y a lo mejor unitario unitario no es, un poco por lo mismo, porque en el mundo mainframe todo hay que hacerlo a la carta, o casi todo, y según qué aplicación estés tocando puedes tener unos cuantos CALL y unos cuantos accesos a DB2.

Pero pongámonos en el caso fácil: un batch de tratamiento de ficheros sin DB2.
Esto es factible no? 

Pues resulta que me asignaron proyecto nuevo hace unos meses (ya sabéis, para experimentar con agile management) y de repente caigo en la cuenta de que sí, de que aquí sí hacemos test unitarios (sin automatizar eso sí), y sí hacemos la documentación primero, y sí que usamos ficheros de test estables para regresionar (este verbo creo que no existe xd) y tenemos entornos de pruebas aislados...

Mira tú por dónde!
Y en mi otro proyecto (ahora mismo estoy en una de esas situaciones extrañas de "al 50%") usamos t-tool para automatización de test, en este caso de integración, así que algo sí que se puede hacer con COBOL, no?

Pero es que hasta IBM se dio cuenta y ya existe el IBM Z Open Unit Test. Quién lo ha visto ya es otra historia. 
Si alguien lo conoce y quiere compartir su experiencia, será bienvenida.

Los avances en el mundo mainframe van lentos pero despacio, qué le vamos a hacer. Pero ahí a nuestro ritmo vamos llegando (ojalá no sea tarde).

Mientras tanto, yo ya me lo apunté para experimentar. Esperando que mi querido equipo no me mande a algún sitio lejano, empezaremos a escribir los test antes de tocar el código.

#thisistheway