Errores en SAP – DUMPs

Hoy vamos a hablar de eso que aparece en tu vida de vez en cuando, que tu no quieres que pase, pero que es inevitable, al principio te enfada y te genera frustración, pero luego comprendes que puede ayudarte conocer y saber lo que pasa para no cometer errores mayores. No, no vamos a hablar de diarrea, bueno, un poco sí. Hoy vamos a hablar de los DUMPs y errores en SAP.


DUMPs

Lo primero que tenemos es que definir qué es un DUMP en SAP. Los DUMPs son los registros que se generan cuando un programa ABAP se ejecuta y algo sale mal que no puede ser manejado por el programa. Es un punto de ruptura o fuga de un programa ABAP en SAP.

Normalmente se tratan de errores generados por código de cliente (Z), normalmente. Pueden generarse en código estándar también, pero esto supondría una corrección por parte de SAP y una actualización del sistema vía support packages o notas. Y todos sabemos que todos los sistemas SAP están siempre, siempre, siempre actualizados ¿no? (no).

Mi cara cuando llego a un proyecto y pregunto por el nivel de parches

Sea como fuere, cuando una parte del código genera un error no controlado, se interrumpe y muestra un DUMP. Y si el programa se está ejecutando en fondo, se interrumpe y genera el DUMP igualmente pero está vez no hay usuario para verlo en directo claro.


Transacción ST22

La herramienta con la que contamos para buscar, identificar y analizar DUMPs es la ST22. Cuando accedemos a la ST22 lo primero que veremos será una pantalla de búsqueda como esta:

Donde tenemos, como importante:

  • Botón de Hoy: Nos permite acceder a la lista de Dumps de hoy en el sistema donde estamos logados, sea cual sea el usuario que generó el error. A la derecha del botón nos dará un contador del total de registros que coinciden.
  • Botón de Ayer: Nos permite acceder a la lista de Dumps de ayer en el sistema donde estamos logados, sea cual sea el usuario que generó el error. A la derecha del botón nos dará un contador del total de registros que coinciden.
  • Bloque de Selección propia: Nos permite buscar DUMPs por otros criterios que los simples «Hoy» y «Ayer». Por defecto vendrá con el usuario y el día de hoy, pero se puede cambiar. En mi experiencia yo solo lo he usado para buscar por otras fechas que no sean «Hoy» y «Ayer». También para filtrar por un usuario concreto.

Una vez ejecutada cualquiera de las opciones veremos la lista de DUMPs que concuerde con los criterios de selección ejecutados.


Listado de DUMPs

Donde como datos interesantes tenemos:

  • Fecha y Hora: Cuando se produjo el DUMP.
  • Usuario: Usuario de ejecución del programa que generó el DUMP
  • Conservar: Este campo refleja si un DUMP concreto ha sido marcado para ser guardado y no ser borrado en el job diario de limpieza de histórico. Para marcar como guardado o liberado debemos marcar un DUMP y pulsar el icono del candado de arriba.
  • Error tiempo ejecución ABAP: Es el tipo de DUMP que se ha generado. Luego vemos los tipos más comunes y su significado.
  • Programa: Lugar del código que ha generado el DUMP.

Si hacemos doble click encima de cualquier linea o le damos al primer icono de la botonera veremos el detalle de ese DUMP.


Vista de detalle del DUMP

Donde veremos que tenemos mucha información. Vamos a intentar desgranarlo porque esto es la parte importante de este artículo. No voy a explicar cada uno de los apartados, porque algunos de ellos no sé interpretarlos ni nunca me han hecho falta. Vamos a hacerlo de forma práctica en base a mi experiencia. Por lo tanto a continuación desgranaremos aquellos que creo fundamentales para saber identificar el error que subyace del DUMP.


Cabecera del Dump

Donde te da los datos básicos de cabecera del DUMP. Donde los más importante son:

  • Err.tmpo.ejec: El tipo de DUMP que estamos viendo
  • Programa ABAP: El programa que generó el DUMP
  • Fecha y hora: El momento en el que se generó.,

Texto Breve

Nos da un resumen muy somero del error ocurrido. Arriba he puesto varios ejemplos de distintos tipos de DUMPs. Nos da cierta información que puede ser importante, como por ejemplo la excepción no controlada que genera el DUMP o el motivo básico del error.


¿Qué ha sucedido?

Es una explicación un poco más extensa, siendo también muy resumida. Puede darnos algo de información dependiendo del tipo de DUMP.


¿Qué puede hacer?

En general este bloque no suele dar información muy valiosa, en algunos casos, como en el DUMP RFC_NO_AUTHORITY de arriba nos da algo más de los permisos que faltan por otorgar.


Análisis de Errores

Empieza la fiesta, este bloque ya puede contener información muy valiosa del error que ha sucedido. Cada tipo de DUMP contará con una información explicativa que puede ayudarnos a saber qué ocurrió.


Notas para corregir errores

Este bloque nos ayuda a buscar notas en el SAP Support Portal o para abrir una incidencia a SAP.


Info posición de cancelación

Este apartado nos da la posición del código donde se ha producido el error. Siendo importante esta información, en el siguiente punto tenemos la misma información pero con más funcionalidad,.


Detalle código fuente (Texto fuente modificado)

Ojo, que estamos en uno de los apartados fundamentales para saber interpretar un DUMP. Nos dice el punto exacto, con su posición dentro del código. Además, y más importante, si hacemos click entraremos dentro del código en cuestión. Con esto podemos poner un break point y volver a probar el proceso que da error para ver el motivo en debugging.,  Tambien llegamos al código pulsando el icono Editor ABAP de la barra de herramientas superior.


Llamadas/Eventos activos

Apartado también fundamental. Nos dice la pila de llamadas que se han ido haciendo para hasta llegar al código que nos da error. Esto es importante porque, en ocasiones, el origen del error no está en el código que ha fallado, sino que es consecuencia de algo que ha pasado antes. Por ejemplo, si no le pasamos una referencia a un objeto instanciada a un método subordinado, posiblemente el código dentro de ese método de error, pero el origen es anterior. Otro ejemplo, si no manejamos la excepción que devuelve un código subordinado, la excepción la da ese código, pero si ponemos un TRY-CATCH en el inmediatamente superior podemos arreglarlo.


Resto de apartados

El resto de apartados de un DUMP:

  • Entorno sistema 
  • Usuario y transacción 
  • Serverseitige Verbindungsinformationen
  • Contenido campos sistema
  • Variables seleccionadas
  • Llamadas de aplicación
  • Lista de programas ABAP implicados 
  • Notas internas
  • Llamadas activas núcleo SAP
  • Directorio de tablas de aplicación
  • Bloq.control ABAP (CONT) (Texto fuente modificado) 

No los considero fundamentales para la investigación y descubrir el motivo del error. Seguro que alguno habrá importante, pero yo no los uso.


Recepción de emails sobre DUMPs

Ahora bien, una vez visto como buscar e interpretar un DUMPs, tenemos claro que si estamos ejecutando un proceso y nos da un error podemos saber donde ir a verlo y cómo interpretarlo. Pero ¿si el DUMP se genera en un proceso en fondo? ¿Si es en producción por un usuario del sistema? ¿Cómo podemos enterarnos de que ha sucedido? ¿Tenemos que estar entrando todos los días varias veces a comprobarlo o esperar la incidencia?. No, para eso tenemos la posibilidad de que el sistema nos mande mails de los DUMPs.

Para eso tenemos tres opciones por un lado podemos crear un job en fondo sobre el report RSSHOWRABAX con una variante del día anterior.

Job Sobre el report RSSHOWRABAX

Luego programamos un job sobre este report con la variante que hemos creado.

Le damos al botón Destino Listas SPOOL e introducimos nuestra dirección de correo.

Elegimos la periodicidad

Y al ejecutar veremos el mail saliente en la SOST

Nota 176492 – Automatic email when an alert occurs (RZ20)

Podemos ver en la nota de SAP «176492 – Automatic email when an alert occurs (RZ20)» la forma de, usando la RZ20 y el CCMS cada vez que se produzca un DUMP recibir un mail de alerta. Pero el procedimiento de alta de esta alerta es realmente complejo, con acceso al mandante 000 incluso. No lo veo muy claro.

También te lo explican en foros de la SAP como:


Report Z de consulta y envío de DUMPs

Hay otra opción, más rudimentaria pero más controlada, es crearnos nuestro propio Report de consulta, recopilación y envío de Dumps vía email. Para ello tendremos que hacer nuestra selección de datos en la tabla que almacena los DUMPs, la SNAP. A continuación os pongo un ejemplo desarrollado por mi, esto pasado a un JOB diario nos da una idea de los DUMPs ocurridos el día, también se puede hacer algo más inmediato programandolo cada hora o incluso como un demonio en el sistema.

&---------------------------------------------------------------------*
*& Report ZJOB_SEND_DUMPS
*&---------------------------------------------------------------------*
*&
*& Autor: Jorge Ocampos
*& Descripción: Program that collects the Dumps of the system at a given
*&              time by the selection and sends an e-mail with the summary
*&---------------------------------------------------------------------*
REPORT zjob_send_dumps.

*&---------------------------------------------------------------------*
*                T A B L E S
*&---------------------------------------------------------------------*
TABLES: somlreci1.

*&---------------------------------------------------------------------*
*                D A T A   T Y P E S
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_text_dump,
         id    TYPE c LENGTH 2,
         ll    TYPE c LENGTH 3,
         errid TYPE snapt-errid,
       END OF ty_text_dump.

TYPES: BEGIN OF ty_data,
         datum TYPE string,
         uzeit TYPE string,
         uname TYPE snap-uname,
         errid TYPE snapt-errid,
       END OF ty_data.


*&---------------------------------------------------------------------*
*               V A R I A B L E S
*&---------------------------------------------------------------------*
DATA: ls_text_dump TYPE ty_text_dump,
      gt_data      TYPE TABLE OF ty_data,
      gt_objtxt    TYPE STANDARD TABLE OF solisti1,
      gt_objpack   TYPE STANDARD TABLE OF sopcklsti1,
      gs_docdata   TYPE sodocchgi1,
      gt_objhead   TYPE STANDARD TABLE OF solisti1.


*&---------------------------------------------------------------------*
*                S E L E C T I O N - S C R E E N
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.

  SELECT-OPTIONS: s_datum FOR sy-datum.

SELECTION-SCREEN END OF BLOCK b1.


SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-004.

  SELECT-OPTIONS: s_mail FOR somlreci1-receiver NO INTERVALS DEFAULT 'tu mail' OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b2.



*&---------------------------------------------------------------------*
*                S T A R T - O F - S E L E C T I O N
*&---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM get_data.

  IF gt_data IS NOT INITIAL.

    PERFORM create_message.

    PERFORM send_message.
  ELSE.
    WRITE:/ 'NO DUMPs in selection!!'.
  ENDIF.

*&---------------------------------------------------------------------*
*                F O R M S
*&---------------------------------------------------------------------*
*&VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV*
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM get_data.

  DATA: ls_data TYPE ty_data.

  SELECT * INTO TABLE @DATA(lt_snap_beg)
                 FROM snap_beg
                WHERE datum IN @s_datum
                  AND seqno = '000'
             ORDER BY datum,
                      uzeit.

  IF sy-subrc = 0.
    DESCRIBE TABLE lt_snap_beg LINES DATA(lv_lines).
    LOOP AT lt_snap_beg INTO DATA(ls_snap_beg).
      ls_text_dump = ls_snap_beg-flist.
      ls_text_dump-errid = ls_text_dump-errid(ls_text_dump-ll).

      MOVE-CORRESPONDING ls_snap_beg TO ls_data.
      ls_data-errid = ls_text_dump-errid.
      CONCATENATE ls_data-datum+6(2)
                  ls_data-datum+4(2)
                  ls_data-datum(4) INTO ls_data-datum SEPARATED BY '/'.
      CONCATENATE ls_data-uzeit(2)
                  ls_data-uzeit+2(2)
                  ls_data-uzeit+4(2) INTO ls_data-uzeit SEPARATED BY ':'.

      INSERT ls_data INTO TABLE gt_data.
      WRITE:/ ls_data-datum, ls_data-uzeit, ls_snap_beg-uname, ls_text_dump-errid.
    ENDLOOP.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM create_message
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM create_message.

  DATA: ls_data    TYPE ty_data,
        ls_objpack TYPE sopcklsti1.

  " Title
  gs_docdata-obj_name  = 'email notification'.

  " Description
  gs_docdata-obj_descr = 'DUMPs overview'.

  PERFORM add_mail_line USING '<html> <body style="background-color:#ffe4c4;">'.
  PERFORM add_mail_line USING 'List of DUMPs:'.
  PERFORM add_mail_line USING '<table style="margin: 10px" cellspacing="0″ cellpadding="3″ width="800″ border="1″><tbody><tr>'.
  PERFORM add_mail_line USING '<th>Day</font></th>'.
  PERFORM add_mail_line USING '<th>Time</font></th>'.
  PERFORM add_mail_line USING '<th>User</font></th>'.
  PERFORM add_mail_line USING '<th>DUMP</font></th>'.

*   table Contents
  LOOP AT gt_data INTO ls_data.

    PERFORM add_mail_table_line USING '<tr><td><center>'
                                      ls_data-datum
                                      '</center></td>'.
    PERFORM add_mail_table_line USING '<td><center>'
                                      ls_data-uzeit
                                      '</center></td>'.
    PERFORM add_mail_table_line USING '<td><center>'
                                      ls_data-uname
                                      '</center></td>'.
    PERFORM add_mail_table_line USING '<td><center>'
                                      ls_data-errid
                                      '</center></td>'.
  ENDLOOP.

  PERFORM add_mail_line USING '</tbody> </table> </body> </html> '.


  DESCRIBE TABLE gt_objtxt LINES DATA(lv_lines).

  READ TABLE gt_objtxt INTO DATA(wa_objtxt) INDEX lv_lines.

  gs_docdata-doc_size = ( lv_lines - 1 ) * 255 + strlen( wa_objtxt ).

* Packing data

  CLEAR ls_objpack-transf_bin.
  ls_objpack-head_start = 1.
  ls_objpack-head_num   = 0.
  ls_objpack-body_start = 1.
  ls_objpack-body_num   = lv_lines.
  ls_objpack-doc_type   = 'HTML'.
  APPEND ls_objpack TO gt_objpack.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM send_message
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM send_message .

  DATA: lt_receivers TYPE TABLE OF somlreci1,
        ls_receiver  TYPE somlreci1.
  LOOP AT s_mail INTO DATA(ls_mail).
    ls_receiver-receiver = s_mail-low.
    ls_receiver-rec_type = 'U'.
    INSERT ls_receiver INTO TABLE lt_receivers.
  ENDLOOP.

*   Send Message to external Internet ID
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      document_data              = gs_docdata
      put_in_outbox              = 'X'
      commit_work                = 'X'
    TABLES
      packing_list               = gt_objpack
*     object_header              = gt_objhead
      contents_txt               = gt_objtxt
      receivers                  = lt_receivers
    EXCEPTIONS
      too_many_receivers         = 1
      document_not_sent          = 2
      document_type_not_exist    = 3
      operation_no_authorization = 4
      parameter_error            = 5
      x_error                    = 6
      enqueue_error              = 7
      OTHERS                     = 8.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form add_line
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM add_mail_line USING p_var.

  DATA: ls_objtxt  TYPE solisti1.

  ls_objtxt-line = p_var.

  APPEND ls_objtxt TO gt_objtxt.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form add_line
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM add_mail_table_line USING p_var1
                               p_var2
                               p_var3.

  DATA: ls_objtxt  TYPE solisti1.

  CONCATENATE p_var1
              p_var2
              p_var3 INTO ls_objtxt-line.

  APPEND ls_objtxt TO gt_objtxt.

ENDFORM.

Como este artículo se ha quedado un poco extenso y hay más cosas que contar abordaremos más información en otros artículos posteriores.

Microgestión

En todos los campos, pero especialmente en Consultoría TI, y sobretodo con personas competentes que ascienden desde puestos técnicos a puestos de gestión sin formación de liderazgo , se da situación de Microgestión o exceso de control del trabajo de los subordinados.

Paco, No olvides de poner el WHERE en el DELETE FROM

A mi me ha pasado, pasar de ser «el que hace» a «el que manda hacer» y saber «dejar hacer» es complicado. Como tú nadie lo va a hacer (de mal), y cuando eres el responsable eres tú el que da la cara, aunque no sepas con todo detalle como se han hecho las cosas.

Identificar la Microgestión

La microgestión se manifiesta a través de:

  • Control Excesivo y Falta de Delegación: Los gestores microgestionan cuando no delegan tareas y toman todas las decisiones, por pequeñas que sean.
  • Supervisión Constante y Detallada: Supervisan cada detalle del trabajo del equipo, sin permitir autonomía.
  • Dependencia en Decisiones del Gestor: El equipo se siente incapaz de tomar decisiones sin la aprobación del gestor.

Esto es como tener un hijo y hacérselo todo. No dejar que se forme con autonomía, no dejando que se construya sus capacidades y que se equivoque y aprenda. (Asi tenemos la generación de cristal tan bonita que viene). Luego esos padres se quejan que les dan mucho trabajo.

Causas de la Microgestión

Pero ¿Por qué sucede la Microgestión? Bueno, algo hemos dicho ya, pero vamos a ordenar las causas:

  • Inseguridad del Gestor: Miedo a perder el control o a que el equipo cometa errores.
  • Falta de Confianza en el Equipo: Creencia de que el equipo no puede realizar tareas correctamente sin supervisión. Porque tú las sabes hacer, y nunca tuviste que aprender ni equivocarte.
  • Cultura Organizacional: Algunas empresas promueven un entorno de trabajo donde la microgestión es la norma. Un ejemplo claro es la micrlimputacion y control de tareas diarias. ¿Cómo pongo el tiempo de ir al baño? Estuve 30 minutos hablando de fútbol, ¿Me abres el proyecto de chorradas para imputar por favor?

Efectos de la Microgestión

Y claro, todo esto tiene consecuencias. Consecuencias que los que trabajamos en esto sabemos y vivimos. Incluso nos metemos en callejones sin salida.

  • Efectos en la Moral y Motivación del Equipo: La microgestión disminuye la moral y desmotiva al equipo. No deja que los profesionales se enfrenten a los retos, se equivoquen, consigan solucionar los retos y consigan exitos.
  • Disminución de la Productividad: El exceso de control ralentiza los procesos y reduce la eficiencia. Es obvio, mientras el gestor hace el trabajo de otros, ni deja hacer, ni hace el suyo propio.
  • Aumento del Estrés y Burnout del equipo: La falta de autonomía aumenta el estrés y puede llevar al agotamiento profesional.
  • Aumento del Estrés y Burnout del gestor: Cuando la microgestión viene impuesta por la empresa. Ya sea por cultura de querer saber que hacen los empleados cada minuto o bien porque no dota el equipo de conocimiento y experiencia suficiente o ambas cosas. En ese caso, el gestor debería gestionar, pero debajo suyo no hay capacidad para desarrollar la la labor y tiene que estar haciendo, sin quererlo, microgestión.

Del síndrome del Burnout ya hablamos en el artículo:

Cómo identificar la Microgestión

Bueno, como muchas otras cosas lo principal es parar, observar, analizar y sacar conclusiones. Pero muchas veces en la cultura empresarial eso se toma como una pérdida de tiempo (tiempo=dinero). Entre otras cosas se pueden ver las siguientes señales:

  • Supervisión Constante: Revisiones frecuentes y detalladas de cada tarea. ¿Qué os parece hacer una reunión diaria de 30 minutos para que me contéis qué hacéis?
  • Poca Delegación: El gestor realiza tareas que deberían ser manejadas por el equipo. Esta bien seguir conectado a los trabajos del día a día, incluso puedes darte tareas como uno más del equipo, pero deja al resto con las suyas de forma autónoma. Mide los resultados, no el proceso.
  • Baja Moral y Alta Rotación de Personal: Indicadores de un ambiente de trabajo tóxico. Hay empresas que sobre el papel le dan importancia a la rotación, pero en realidad, su cultura dista mucho de generar ambientes laborales sanos. Algunas solo usan ese índice para castigar o menguar los bonus de los responsables.

Estrategias para combatir la Microgestión

Bueno, esto es sentido común, el problema es que, en ocasiones, se entra en la espiral de Microgestión si darse cuenta, y además la cultura de la empresa puede ser proclive a la microgestión. No obstabte, para combatir la microgestión buenas prácticas serian:

  • Fomentar la Confianza y la Autonomía: Delegar tareas y confiar en las capacidades del equipo. Medir resultados pero no necesariamente el proceso.
  • Implementar Técnicas de Gestión Efectiva: Utilizar metodologías ágiles y fomentar la comunicación abierta. Las reuniónes de seguimiento son eso, de seguimiento. Proponer reuniones de pares para ayudas técnicas.
  • Capacitación y Desarrollo de Habilidades de Liderazgo: Formar a los gestores en técnicas de liderazgo que promuevan la autonomía y la responsabilidad.
  • Dotar al equipo de perfiles con los conocimientos necesarios: Si el equipo no tiene los conocimientos necesarios, el gestor se verá obligado a hacer su trabajo y parte de los subordinados.

En conclusión

La microgestión es un problema significativo en la consultoría IT que puede afectar negativamente tanto al equipo como a los proyectos. Reducir la microgestión a través de la confianza, la delegación y la formación puede mejorar significativamente el ambiente de trabajo y los resultados del equipo. Es crucial que los gestores y las empresas tomen medidas para evitar este estilo de gestión y fomentar un entorno laboral más saludable y productivo.

El mayor peligro de la IA

¿Cuál es el mayor peligro de la Inteligencia Artificial?

Muchos dirán que el mayor peligro es el despertar de las máquinas a lo Terminator.

The Judgment Day

Otros dirán que el mayor peligro es la cantidad de puestos de trabajo que van a quitar.

Despidos masivos por IA

O incluso un futuro tipo Matrix en el que la humanidad sean las baterías de las máquinas:

Otros piensan que el peligro es que nos convierta en imbéciles (¿más?) que tengamos la vida resuelta y no necesitemos esforzarnos para nada. Tipo Wall-E.

Pero esto es mucho futuro y, en tecnología, como en otras muchas cosas, pensar en un horizonte de muchos años, a no ser que sea Isaac Asimov o Julio Verne, es imposible acertar. Pero hay un peligro que ya está entre nosotros y es real, y que con el tiempo puede acentuarse.


Dependencia Excesiva – Overreliance

La dependencia excesiva o Overreliance en la IA se refiere a la tendencia de delegar demasiadas funciones y responsabilidades a los sistemas de inteligencia artificial, confiando en que estas tecnologías tomarán decisiones críticas sin la intervención humana. Esto puede abarcar desde tareas simples, como recomendaciones de productos, hasta decisiones de gran impacto, como diagnósticos médicos o políticas públicas.

Porque, cualquiera que haya jugado con la Inteligencia Artificial, habrá pasado por el estado de «esto es buenísimo» y habrá visto que hay muchas tareas que se pueden delegar en la IA. Y, por supuesto, muchas tareas pueden delegarse y las cosas funcionan. Y cada vez más, pero de ahí a dejar todo el control a una Inteligencia Artificial, hay un salto grande.

Si conoces este clip, estás en mi equipo

Ejemplo – ‘El chatBot descontrolado’

Pongamos un ejemplo, hacemos un chatbot de atención al cliente en nuestra empresa. Al principio y en entornos controlados, todo funciona a las mil maravillas. Podemos complicarlo todo lo que queramos, que tenga acceso a la Base de Datos, que consulte el estado de Stock, Pedidos, Pagos, etc. Además que pueda comunicarse con el cliente con lenguaje natural. ¿Cuánta gente de call center nos ahorramos? Mucha, pero no hay que pensar en que no tengamos que tener agentes humanos de segunda línea. Si dejamos al cliente sin un segundo nivel de resolución humano, y lo supeditamos todo a la Inteligencia Artificial, corremos el riesgo que las respuestas o los caminos de conversación entre el cliente y nuestra empresa se descontrolen. Todos hemos visto las «alucinaciones» de chatGPT, Copilot, Gemini, etc. que cuando no saben algo, directamente se lo inventan.

Para ello tenemos que entrenar muy bien a nuestro chatbot, acotar mucho su rango de actuación y habilitar una segunda línea de contacto humano a la que pasar la conversación si esta se sale del rango de actuación acotada del chatbot.


Riesgos de la Dependencia Excesiva

Por entrar en materia y mostrar diversas categorías de riesgos que la Dependencia Excesiva (Overreliance) puede traer tendríamos:

Pérdida de Habilidades Humanas

A medida que las máquinas se encargan de más tareas, existe el riesgo de que las personas pierdan habilidades críticas. Un ejemplo actual es la dependencia excesiva en GPS, que hace que nuestro cerebro deje de necesitar fomentar el área de la memoria espacial y las habilidades de navegación y orientación. Lo mismo que pasa con muchas habilidades pre-Internet y pre-Smartphones con la gente que ya nació con estas tecnologías en su vida.

Una mujer belga conduce sin darse cuenta hasta Zagreb por un fallo en el GPS

ElMundo.es

Reducción de la Capacidad Crítica

Confiar ciegamente en los sistemas de IA puede reducir la capacidad de los humanos para cuestionar y verificar decisiones. Esto es especialmente preocupante en áreas como la medicina o la justicia, donde la capacidad de análisis crítico es crucial.

¿Qué está pasando ahora en la educación? Ahora mismo es un reto hacer que los jóvenes hagan trabajos de investigación, análisis y estudio sobre cualquier tema. En la mayoría de los conocimientos, el resultado es lo de menos, lo importante es el camino, y eso es lo que las inteligencias artificiales están quitando de la ecuación. Veo un futuro de mucha gente disfuncional.

Is it harmful or helpful? Examining the causes and consequences of generative AI usage among university students

International Journal of Educational Technology in Higher Education

En este estudio si bien se sacan como conclusiones algunos beneficios potenciales, como que ChatGPT puede ser útil para mejorar la creatividad en la escritura, proporcionar retroalimentación rápida en la programación y facilitar el aprendizaje individualizado.

También concluye que el uso de la IA trae desafíos y riesgos ya que la dependencia excesiva en estas herramientas puede llevar a una menor participación cognitiva, pérdida de habilidades críticas y problemas de integridad académica. Los estudiantes que dependen demasiado de la IA pueden exhibir una disminución en la retención de memoria y en las habilidades de pensamiento crítico. Vamos, que estamos involucionando.


Fallos Técnicos y Vulnerabilidades

Los sistemas de IA no son infalibles, pueden cometer errores, ser hackeados o fallar debido a problemas técnicos. La dependencia excesiva en estos sistemas puede resultar en catástrofes cuando ocurren fallos inesperados. No te quiero contar lo que pasa en mi casa cuando se va Internet, no puedo ni encender las luces.

Apagón de millones de bombillas inteligentes: así fue la caída de Smart Life

ElEspañol.com

Deshumanización de Servicios

La implementación de IA en servicios como la atención al cliente puede llevar a una experiencia deshumanizada. Las máquinas, a diferencia de los humanos, carecen de empatía y comprensión contextual, lo que puede afectar negativamente la calidad del servicio. El ejemplo del «chatBot descontrolado» es un ejemplo de esto. Además también revisa si puedes el artículo de ‘El test de Turing’.

Decisiones Sesgadas

Las IA pueden perpetuar sesgos presentes en los datos con los que fueron entrenadas. Si dependemos demasiado de estas tecnologías sin supervisión adecuada, podemos reforzar y amplificar las desigualdades y discriminaciones existentes. El ejemplo básico es, si una IA es entrenada con los datos históricos pensará que los doctores son siempre hombres, las enfermeras mujeres y Alemania un país que crea Guerras mundiales.

También aquí juega el «Sesgo de Confirmación» (tendencia a buscar, interpretar y recordar información que confirme nuestras creencias preexistentes, mientras se ignora o se minimiza la evidencia contraria.) Por el cual el usuario/humano puede buscar en la IA las respuestas que refuercen su propio sesgo, amplificándolo.

Confianza en Resultados Incorrectos

La sobredependencia puede llevar a aceptar sin cuestionar resultados incorrectos, lo que puede ser particularmente peligroso en campos como la medicina y la justicia, donde los errores pueden tener consecuencias severas. A mi me ha dicho ChatGPT que, con lo que le he dicho, estoy embarazado, ya le he puesto nombre y todo.


Conclusión

Y lo de los futuros distópicos de rebelión de las máquinas como Terminator o Matrix no va a pasar, porque se lo he preguntado a ChatGPT y me ha dicho:

Me quedo más tranquilo
Ahora mejor ¿no?

Zona Desmilitarizada (DMZ)

Hay un concepto en administración de redes y sistemas ampliamente usado y conocido pero que, si no eres de sistemas, terminarás escuchando y no sabrás muy bien lo que significa. Hablo de la DMZ (Demilitarized Zone) o Zona Desmilitarizada.

La calma silenciosa de la DMZ

La DMZ es un término común en el mundo de la ciberseguridad. Aunque se origina en un concepto militar, en el ámbito de las tecnologías de la información se refiere a una subred que actúa como una capa adicional de seguridad. Su propósito es proteger la red interna de una organización de accesos no autorizados, al tiempo que permite ciertas interacciones con redes externas, como Internet.


Las dos Coreas

El término DMZ tiene sus orígenes en el ámbito militar y se refiere a un área en la que los tratados o acuerdos entre naciones, grupos militares o fuerzas beligerantes prohíben las actividades militares o donde se limita el despliegue de fuerzas militares y material bélico. Esta zona suele establecerse para evitar conflictos directos y actúa como un área de amortiguamiento entre dos o más entidades en conflicto.

El ejemplo más conocido de una DMZ en el contexto militar es la Zona Desmilitarizada de Corea, que separa a Corea del Norte y Corea del Sur desde 1953. Esta área sirve como una frontera de facto entre las dos naciones y es un espacio donde no se permite la presencia de fuerzas armadas.

Es paradójico porque es una zona donde no debe haber presencia militar (justo al lado hay claro), pero ay si alguno se salta esa norma.

Historia de la DMZ en IT

El concepto de DMZ fue adoptado en el ámbito de la ciberseguridad durante los años 90, cuando la proliferación de Internet y las crecientes amenazas cibernéticas llevaron a las organizaciones a buscar métodos más avanzados para proteger sus redes internas. La evolución de la DMZ ha sido significativa, adaptándose a nuevas tecnologías y amenazas.


¿Cómo funciona?

La DMZ es una red física o lógica que se sitúa entre la red interna segura de una organización (Intranet) y una red no segura, generalmente Internet. Los dispositivos alojados en la DMZ son accesibles desde ambas redes, pero implementan medidas de seguridad adicionales para prevenir ataques.

Algunos ejemplos comunes de sistemas colocados en la DMZ incluyen servidores web, servidores de correo electrónico y servidores FTP.


Tipos de Implementaciones de DMZ

Hay varias formas de implementar una DMZ.

DMZ con un solo firewall

En esta configuración, un único firewall gestiona el tráfico entre la red externa, la DMZ y la red interna. Es una implementación más simple pero menos segura.

DMZ con dos firewalls

La más común es utilizando dos firewalls. El primer firewall se coloca entre la red externa (Internet) y la DMZ, mientras que el segundo se sitúa entre la DMZ y la red interna.

Esta configuración permite un control detallado del tráfico que entra y sale de la DMZ, así como entre la DMZ y la red interna.

DMZ en la nube

Las DMZ también pueden implementarse en entornos de computación en la nube, donde los servicios y aplicaciones se alojan en servidores virtuales. Aquí las cosas se complican, puesto que todo tu sistema está expuesto al resto de la red global. La implementación en la nube requiere consideraciones adicionales debido a la naturaleza compartida y distribuida de los recursos en la nube.


Beneficios de la DMZ

  • Seguridad Mejorada: La DMZ proporciona una capa adicional de seguridad. Si un atacante compromete un sistema en la DMZ, todavía tendría que atravesar otro nivel de seguridad para acceder a la red interna.
  • Gestión del Tráfico: Permite una mejor gestión y monitoreo del tráfico entre Internet y la red interna.
  • Aislamiento de Servicios: Los servicios expuestos al público, como un sitio web, pueden ser aislados de la red interna, reduciendo el riesgo de una brecha de seguridad.

Desafíos y Consideraciones

  • Configuración y Mantenimiento: Implementar y mantener una DMZ requiere habilidades técnicas especializadas.
  • Costos Asociados: Puede haber costos significativos relacionados con hardware adicional y software de seguridad.
  • Balance entre Seguridad y Accesibilidad: Es crucial encontrar un equilibrio entre la protección de la red y la accesibilidad de los servicios alojados en la DMZ. Y en este punto es donde más afectado me he visto yo. Cuando quieres que otro sistema se conecte al tuyo vía web services o cuando necesitas que accedan usuarios fuera de la red.

Conclusión

La DMZ sigue siendo una herramienta crucial en la ciberseguridad, ofreciendo una capa adicional de protección para las redes internas. Con el avance de las tecnologías y las crecientes amenazas, es esencial que las organizaciones continúen adaptando y mejorando sus implementaciones de DMZ para mantenerse seguras.

Lo importante es que cuando nos hablen de la DMZ sepamos lo que significa y lo que implica, que no deja de ser un termino comúnmente usado en TI.