viernes, 3 de junio de 2022

Intrusismo laboral

En la informática existe mucho intrusismo, gente que nada tiene que ver con la informática (como físicos, matemáticos, químicos, biólogos, filósofos, geólogos o economistas, por decir sólo algunos) pueden trabajar como informáticos.

Esto podía tener su lógica a principios y mediados de los años 80 del siglo pasado porque en aquella época comenzó el boom de la informática profesional y no existía ninguna formación específica. Por lo tanto, había que formar a quien fuese, incluso al primer tonto que pasase por allí (con perdón de los tontos, que nadie se vaya a ofender). Pero a finales de los años 80 y principios de los 90 del siglo pasado las universidades españolas comenzaron a impartir ingeniería informática apareciendo así los primeros informáticos con formación específica. Actualmente, das una patada a una piedra y aparecen miles de titulados en informática (ingenieros y de FP). De manera que, ¿es necesario tirar de gente que no tenga formación en informática?

A la pregunta anteriormente planteada habrá quien diga "sí", sobretodo los que no tienen formación relacionada con la informática porque según ellos "si estamos aquí es porque los informáticos hacéis las cosas mal". Otros intentan justificarlo, sobretodo los filósofos, con argumentos del estilo de "en filosofía nos han enseñado a pensar y tenemos mucha lógica". Ambas afirmaciones son muy discutibles, vayamos por partes. Con respecto a lo segundo, me pregunto yo: si una carrera que nada tiene que ver con la informática, te enseña a pensar de manera estructurada y a usar la lógica, ¿puedes trabajar en la informática sin tener formación en dicha área? Yo tengo la respuesta muy clara y es la misma a las siguientes preguntas: si yo tengo muchos conocimientos de anatomía y conozco los síntomas de cientos de enfermedades, ¿puedo ejercer la medicina si no tengo la correspondiente licenciatura?; si soy bilingüe en inglés, ¿puedo dar clases de inglés en ciertos lugares aunque no tenga la carrera de filología inglesa? Pues eso. Con respecto a lo primero, al hecho de que los intrusistas estén en esto porque los informáticos lo hagamos mal, esto también es muy discutible y lo es por los siguientes motivos:

1º) Todos los licenciados que he mencionado al inicio del post están en el mundo de la informática por su "incapacidad" de encontrar trabajo en lo suyo. Sí, habéis leído bien, su "incapacidad" para encontrar trabajo en lo suyo. Algunos diréis que en ciertos campos no hay trabajo pero una cosa os diré: siempre hay gente que trabaja de lo suyo en esas áreas y lleva años, ¿por qué otros se tienen que meter a informáticos? Ejem, ejem, no digo nada y lo digo todo (o ¿será que ellos también hacen las cosas mal y no duran ni un "padre nuestro" en sus respectivos trabajos?). Pues bueno, vayámonos a la informática que ahí hay trabajo para todo el mundo.

2º) Gracias a ellos se bajan los sueldos en el mundo de la informática: "curra por esta cifra o vete a trabajar de lo tuyo (uy, perdón, que eres incapaz de encontrar trabajo de lo tuyo)".

3º) Cualquier informático hemos conocido a gente que ha realizado auténticas cagadas a nivel de análisis y casualmente eran "intrusistas". Por ello amigos informáticos (de formación, eso sí), os animo a dejar un comentario donde nos contéis las cagadas de nuestros queridos "intrusistas" y comprueben con vuestras experiencias, ya sean propias o ajenas, lo "bien" que trabajan. Nota: esto último se llama ironía.

En relación al punto 3, para evitar las cagadas de los "intrusistas", porque sí, amigos, vosotros no sois perfectos tampoco y en ocasiones la cagáis pero bien, ¿no será mejor contratar a alguien a quien han enseñado a analizar y a programar? Para que todo salga bien debéis contar con un profesional con la formación y los conocimientos adecuados. Esto se explica muy bien en los siguientes enlace:

http://ssti.es/ingenieria-informatica/

https://www.lne.es/cartas-director/1814/realidad-informatica-espana/575176.html

Y esto sólo se consigue con informáticos con formación específica en dicho terreno. Ya que, por ejemplo, alguien de FP que haya estudiado Desarrollo de Aplicaciones Informáticas habrá adquirido las siguientes competencias y tendrá las siguientes salidas profesionales:

Fuente: https://www.fp-informatica.es/

Y esto en el caso de los ingenieros informáticos:


Fuente: https://grados.ugr.es/informatica/pages/salidas_profesionales

Se puede decir más alto pero no más claro.

viernes, 6 de mayo de 2022

HOST - cruce de ficheros con joinkeys

¿Sabes cómo realizar un cruce de ficheros mediante joinkeys? Pues si no sabemos cómo hacerlo, ya que es un tanto complejo, te vamos a indicar dónde y cómo puedes consultarlo.

mundohost
Blog en el que encontrarás dos entradas muy útiles. Una de ellas se titula Cruce de ficheros con Joinkeys básico y la otra se titula Cruce de ficheros con Joinkeys avanzado.

dinoland
Pagina web con diferentes foros para solucionar dudas. Una de esas dudas es: Unión de ficheros con Joinkeys.

En ocasiones no es una cuestión de saber cómo hacer algo sino de saber dónde buscarlo.

viernes, 1 de abril de 2022

QMF basico

A lo ya explicado en una entrada anterior (pichar aquí), podemos ampliar alguna cosilla con el magnífico post elaborado por Consultorio Cobol acerca del QMF basico.

viernes, 4 de marzo de 2022

Cobol - Coboloco 052

¿No sabéis qué es Coboloco 052? Es un canal de Youtube dedicado al cobol, su enlace es: https://www.youtube.com/channel/UCOaLW9s-x5DRlb8_wTpg-lw

Espero que os sea de utilidad.

viernes, 4 de febrero de 2022

Jcl - error S837

Para saber cómo solucionar el error S837 en un jcl puedes pinchar aquí.

Quizás te acuerdes de un post publicado en este mismo blog titulado Jcl - error SB37 (pinchar aquí para consultar el mencionado post).

Tal y como verás, dicho error y el que estamos viendo en este post se debe a lo mismo: el fichero que se está generando necesita más espacio cuando se está alocando. La solución es la misma: dar más espacio al fichero. Sin embargo, hay una diferencia: el error del post Jcl - error SB37 sucede en un paso de sort mientras que el error que estamos viendo hoy sucede cuando el jcl intenta volcar los datos de una tabla DB2 en un fichero secuencial.

Por lo tanto, sólo os tenéis que quedar con la siguiente idea: cuando se produzca cualquier error del tipo SB37 o S837 la solución corre por ampliar el espacio del fichero en el momento en que se está alocando.

viernes, 7 de enero de 2022

DB2 - filas leídas por un cursor

Primero refrescaremos la memoria con los cursores y las operaciones básicas que se pueden realizar con los cursores. Para ello pincharemos aquí (eso sí, si consideras necesario refrescar la memoria; en caso contrario, no es necesario).

En ocasiones es necesario utilizar un cursor por las especificaciones dadas para implementar en un determinado programa. Si además queremos saber cuántas filas ha leído dicho cursor, ¿cómo se puede hacer? En un principio puede parecer un tanto complejo por los siguientes motivos:
  1. En la copy SQLCA no existe una variable para tal efecto.
  2. Si consultas diferentes foros en los que se trata esta duda, se llega a esta conclusión: no se puede saber de antemano cuántas filas va a leer dicho cursor.
  3. La variable ROWCOUNT se utiliza en gestores de BBDD como Sql Server  para saber cuántas filas devuelve una consulta, pero en DB2 no existe y, por tanto, en Cobol no encontrarás una variable que se use con tal fin (a menos que no definas por programa una variable auxiliar con dicho nombre).

Por lo tanto, llegados a este punto, ¿cómo podemos saber cuántas filas ha leído un cursor? A continuación explicamos una posible solución.

Al realizar el FETCH del cursor, cuando el SQLCODE es igual a 0 podemos incrementar en 1 una variable auxiliar, por ejemplo AUX-ROWCOUNT, que previamente estará inicializada a 0 (si se inicializa antes de abrir/tratar/cerrar el cursor, mejor que mejor).

Cuando hayamos realizado el tratamiento del cursor, con lo que ello implica, podremos saber cuántas filas han sido leídas por el cursor. Tratar un cursor implicaría lo siguiente:
  1. Abrir cursor
  2. Leer cursor
  3. Tratar cursor hasta el final del mismo, en donde se realizan dos operaciones:
    1. Operaciones a realizar con la fila recuperada del cursor
    2. Leer cursor
  4. Cerrar cursor

Y tras tratar el cursor dando estos pasos sabremos las filas leídas por el cursor gracias a la variable auxiliar que habremos ido incrementando en 1 con cada FETCH. En el caso de que el cursor no recuperara ninguna fila tendríamos dicha variable auxiliar con su valor de inicialización (es decir, 0).

¿Qué sucede si el cursor está dentro de un módulo o rutina? No es mayor problema. En la copy de E/S de dicho módulo o rutina, si estuviera correctamente codificada, debería haber una variable dentro de las variables de salida de la misma que se encargara de informarnos de cuántas filas han sido leídas por el cursor en cuestión. Dicha variable se podría llamar, por ejemplo, COPY-S-FIL-RECU-CURSOR o COPY-S-ROWCOUNT.

Si el programa o módulo/rutina no tiene definida una variable a tal efecto puesss....va a ser difícil saber cuántas filas ha leído el cursor. Es difícil pero no imposible, ¿sabéis por qué? Porque se puede aprovechar una modificación en el código para incluir dicha variable que cuente las filas leídas por el cursor y en ese momento ya tendríamos dicha información.

Pues esto ha sido todo, espero que os haya servido de ayuda.

viernes, 3 de diciembre de 2021

Jcl - ICETOOL XSUM

En los pasos de sort estamos acostumbrados a eliminar repetidos, de hecho, esto lo explicamos en una entrada anterior que puedes ver pinchando aquí.

Ahora bien, ¿qué sucede cuando queremos dejar en un fichero los registros (sin repetidos) del fichero origen y todos los repetidos en otro fichero distinto? Pues es muy sencillo, fíjate en el siguiente paso de jcl:

     //SORT0001    EXEC PGM=ICETOOL
     //TOOLMSG  DD SYSOUT=*
     //DFSMSG     DD SYSOUT=*
     //SORTIN        DD DSN=XX.XX.XXXXXXXX.XXXXXXXX.ENT,DISP=SHR
     //SORTOUT     DD DSN=YY.YY.YYYYYYYY.YYYYYYYY.SAL1,
     //                   DISP=(,CATLG,DELETE),
     //                   SPACE=(CYL,1,1)
     //SORTXSUM DD DSN=YY.YY.YYYYYYYY.YYYYYYYY.SAL2,
     //                   DISP=(,CATLG,DELETE),
     //                   SPACE=(CYL,1,1)
     //TOOLIN      DD *
         SELECT FROM(SORTIN) TO(SORTOUT) -
                     ON(1,9,ZD) FIRST DISCARD(SORTXSUM)


Como habrás observado he marcado en azul y amarillo ciertas cosas que se diferencian con el típico paso de SORT:

          ICETOOL sustituye a SORT
          TOOLMSG no existe en el típico paso de sort
          DFSMSG no existe en el típico paso de sort
          SORTXSUM es un fichero de más que el SORT no suele tener a
                 menos que no dividamos el fichero origen en dos ficheros
                 distintos tal y como se explica en el post titulado JCL: Obtener
                 dos ficheros mediante SORT (pinchar aquí para leer dicho
                 post)
          TOOLIN sustituye a SYSIN

           SELECT FROM(SORTIN) TO(SORTOUT) -
                       ON(1,9,ZD) FIRST DISCARD(SORTXSUM)

               Lo anterior sustituye a las típicas cláusulas que van detrás del
               SYSIN en el SORT. Con esto conseguimos realizar lo que
               planteamos en la pregunta realizada al inicio de este post.

Espero que os haya sido de utilidad.

viernes, 5 de noviembre de 2021

COBOL - utilizar un switch

En Cobol solemos utilizar un switch para saber si estamos ante una determinada situación o ante otra.

Empecemos, por ejemplo, por los ficheros. Tenemos un programa que usa dos ficheros: uno de entrada y otro de salida. Dichos ficheros serán FENTRADA y FSALIDA.

Para esos ficheros podremos definir los siguientes switches:

     01 SWITCHES.
          05 FS-FENTRADA        PIC X(02) VALUE ZEROES.
               10 FENTRADA-OK                 VALUE '00'.
               10 FENTRADA-FIN                VALUE '10'.
          05 SW-FIN-FENTRADA PIC X(01).
               10 SI-FIN-FENTRADA            VALUE 'S'.
               10 NO-FIN-FENTRADA           VALUE 'N'.
          05 FS-FSALIDA           PIC X(02) VALUE ZEROES.
               10 FSALIDA-OK                     VALUE '00'.
               10 FSALIDA-FIN                    VALUE '10'.


Cuando definamos los ficheros FENTRADA y FSALIDA en el FILE-CONTROL del área INPUT-OUTPUT SECTION indicaremos lo siguiente con respecto al file status de los ficheros:

     FILE STATUS IS FS-FENTRADA.
     FILE STATUS IS FS-FSALIDA.

Pues bien, vayamos al meollo del asunto. ¿Cómo podemos utilizar estos switch? En el caso del fichero de entrada, cuando abramos dicho fichero (OPEN INPUT FENTRADA) podemos controlar el file status devuelto:

     IF FENTRADA-OK
         <<fichero abierto>>
     ELSE
         <<error lógico>>
     END-IF.

Cuando se lea de dicho fichero (READ FENTRADA INTO COPY) también podemos controlar el file status:

     SET NO-FIN-FENTRADA TO TRUE
*-------------------------------------------------------
     IF FENTRADA-OK
         <<lectura correcta>>
     ELSE
         IF FENTRADA-FIN
             SET SI-FIN-FENTRADA TO TRUE
         ELSE
             <<error lógico>>
         END-IF
     END-IF.

Tras la lectura del fichero de entrada podemos hacer una cosa u otra en función de si se ha llegado o no al final del mismo:

     IF SI-FIN-FENTRADA
         <<se ha llegado al final de FENTRADA, se hará lo que corresponda>>
     ELSE
         <<no se ha llegado al final de FENTRADA, se hará lo que corresponda>>
     END-IF.

Continuamos con otros ejemplo de switch. Sobretodo uno que resulta muy interesante para hacer las condiciones de los IF más sencillas. Veamos el siguiente IF:

     IF (campo = 2 or 4 or 6 or 8 or 10)
         DISPLAY 'ES PAR.'
     ELSE
         DISPLAY 'ES IMPAR.'
     END-IF.

Si declaramos un switch como el siguiente:


     01 SWITCHES.
          05 SW-PAR-O-IMPAR       PIC 9(02).
               10 ES-PAR                 VALUE 2,4,6,8,10.
               10 ES-IMPAR              VALUE 1,3,5,7,9.

Y si se realiza un MOVE como este otro:

     MOVE campo TO SW-PAR-O-IMPAR

La condición del IF anterior quedará tan sencilla como la que viene a continuación:

     IF ES-PAR
         DISPLAY 'ES PAR.'
     ELSE
         DISPLAY 'ES IMPAR.'
     END-IF.

Pues esto es todo lo que puedo contar sobre el fascinante mundo de los switches. Espero que os resulte de utilidad.

sábado, 9 de octubre de 2021

Caída facebook, instagram y whatsapp

Esta semana ha habido una caída de facebook, instagram y whatsapp que ha durado horas.

Me gustaría que leyérais el siguiente artículo pinchando aquí.

Estoy totalmente de acuerdo con la conclusión: "somos adictos a la tecnología digital". Sobretodo unos más que otros ya que los que no tienen ni facebook ni instagram (o lo tienen pero casi ni lo usan) les ha dado igual la caída de ambas redes sociales. Y otros no tienen whatsapp, aunque no os lo creáis hay gente así, y toda esta gente que no tiene absolutamente nada de esto, ¿cómo créeis que han vivido la caída de todo eso? Pues FELICES porque han seguido con su vida con toda normalidad sin estar mirando cada 5 minutos si ya hay conexión y sin sufrir el estrés (ni la angustia) de que no funcione todo eso. Y, ojo, siendo capaces de estar en contacto con la gente que conocen. Y, ¿cómo? Muy fácil, con lo que se ha hecho siempre: llamada o hablando cara a cara con la gente. Con las malditas redes sociales estamos más en contacto con los demás cada uno en su casa o cada uno en calles distintas, si estamos paseando, y nos estamos olvidando de quedar con la gente para hablar cara a cara.

Al hilo de todo esto, siempre recordaré a una persona que dijo: "Whatsapp me ha salvado la vida en más de una ocasión". WHAAAT??? ¿Estoy oyendo bien? Teniendo en cuenta que whatsapp llevará con nosotros, como mucho, 10 años, mi pregunta es: ¿cómo ha funcionado esta persona antes de la existencia del whatsapp? Ha tenido que ser un completo incompetente porque la gente ágil, dinámica y con recursos no necesita de una aplicación de mensajería para funcionar. Y mucho menos para que le salve la vida.

Moraleja, dadle a las redes sociales y a las aplicaciones de mensajería la importancia justa que tienen y nunca dependáis de todo eso para funcionar. Ya que la caída que ha habido de todo eso nos demuestra que si somos totalmente dependientes y no tenemos un plan B, no sólo lo pasamos mal (estrés y angustía por no usar redes sociales y aplicaciones de mensajería) sino que además la total dependencia de algo así como la ausencia de un plan B ante la ausencia de ese algo nos convierte en auténticos seres inútiles que no saben cómo funcionar sin todo eso.

Acordaros de cómo eramos capaces de quedar con gente y hablar con ella en la década de los 80 y de los 90 del siglo pasado. Si nos acordásemos y eso fuese nuestro plan B ante caída de redes sociales y aplicaciones de mensajería, seríamos más felices puesto que podríamos seguir adelante con nuestra vida ante una futura caída.

viernes, 1 de octubre de 2021

QA Tester

Os presento un canal de Youtube llamado The QA Testing Channel: https://www.youtube.com/channel/UCrNuRcUWDHc-gV8-8GgRhGw

A todos los que sois QA Tester, espero que os sea de utilidad.

viernes, 3 de septiembre de 2021

HOST - colas MQ

Hoy vamos a adentrarnos en el fascinante mundo de las colas MQ.

Empezaremos con manuales que tienen la teoría:


Y cualquier otra cosa que vea interesante la iré incorporando a este post mediante sucesivas actualizaciones.

viernes, 2 de julio de 2021

CICS (2): comandos de interés

En esta nueva entrada sobre el CICS trataremos los comandos que podemos usar. Cada vez que me acuerde de otro comando o aprenda uno nuevo actualizaré esta entrada.

Comencemos...

CEMT I PROG(<<pgm-cob-online>>)
CEMT S PROG(<<pgm-cob-online>>)
CEMT FI PROG(<<pgm-cob-online>>)

Vemos si el programa cobol online se ha ejecutado o no.

Desde aquí se hace el NEWCOPY (con N), sólo si se ha ejecutado previamente y estamos en el CICS por el que ha corrido la transacción asociada al programa.

XPED <<pgm-cob-online>>

Xpediter online. Consultar el post dedicado a este comando pinchando aquí.

viernes, 4 de junio de 2021

Apple ha sido hackeada (2)

Como ya sabéis por una entrada anterior, a la que podéis acceder pinchando aquí, apple fue hackeada por un joven de 16 años.

Con una noticia así, no puedo evitar acordarme de todas aquellas personas que creen que Apple es de lo más seguro que hay. Si es tan fácil hackearlo (véase la noticia del joven de 16 años), ¿por qué no hay más ataques a Apple? A lo mejor la respuesta no es tan sencilla pero a primera vista, podría decirse que, si partimos de la premisa de que los hackers buscan hacer el mayor daño posible (por ejemplo, atacando al mayor número de personas posible), y a ello le añadimos que hay más dispositivos con sistema operativo android que con sistema operativo ios, pues diría que está claro: los hackers van a atacar aquellos dispositivos con sistema android pues son la mayoría.

Relativo a este tema, os recomiendo ver el siguiente vídeo en el que Chema Alonso, experto en ciberseguridad, asegura que tu iphone es tan (in)seguro como tu windows:


Bien es verdad que dicho vídeo fue incluido en la entrada que se menciona al inicio de este post pero no está mal que lo veáis si no lo habéis visto todavía. Os lo recomiendo 100%.