Artículo Ricardo Paiva · mayo 28, 2025 2m read

Después de que desplegáramos un nuevo contenedor basado en containers.intersystems.com/intersystems/irishealth:2023.1 esta semana, notasteis de repente que el Repositorio FHIR empezó a responder con un Error 500. Esto se debe a violaciones de PROTECT en el nuevo espacio de nombres y base de datos HSSYSLOCALTEMP, utilizado por esta versión de los componentes FHIR de IRIS for Health.

La solución consiste en añadir "%DB_HSSYSLOCALTEMP" a las Aplicaciones Web que gestionan las solicitudes FHIR.

0
0 44
Artículo Ricardo Paiva · mayo 20, 2025 6m read

Hace trece años, obtuve una doble titulación de grado en ingeniería eléctrica y matemáticas, y enseguida empecé a trabajar a tiempo completo en InterSystems sin utilizar ninguna de las dos. Una de mis experiencias académicas más memorables —y que más me revolvió el estómago— fue en Estadística II. En un examen, estaba resolviendo un problema de intervalo de confianza de dificultad moderada.

0
0 54
Artículo Ricardo Paiva · mayo 19, 2025 2m read

Estoy seguro de que la mayoría de vosotros estáis familiarizados con la utilidad %SYS.MONLBL, que es crucial cuando se analizan los cuellos de botella de rendimiento del código. Permite seleccionar un número de rutinas que queréis monitorizar en tiempo de ejecución y también especificar qué proceso(s) queréis observar. PERO, ¿qué pasa si no sabéis exactamente qué proceso ejecutará vuestro código? Esto es común en muchas aplicaciones basadas en la web (CSP/REST) hoy en día. Queréis minimizar la utilización de recursos en vuestro sistema de producción que necesita análisis.

0
0 34
Artículo Ricardo Paiva · mayo 12, 2025 2m read

¡Hola, desarrolladores!

Este será un artículo muy corto ya que en abril de 2025, con Lovable y otras herramientas de Prompt-to-UI, se vuelve posible crear el frontend mediante indicaciones. Incluso para vosotros, que como yo, no estáis familiarizados en absoluto con las técnicas modernas de UI.

Bueno, al menos conozco las palabras javascript, typescript y ReactJS, así que en este artículo muy corto construiremos la interfaz de usuario en ReactJS para un servidor InterSystems FHIR con Lovable.ai.

¡Vamos con ello!

0
0 61
Artículo Ricardo Paiva · abr 29, 2025 4m read

Cuando trabajáis con InterSystems IRIS, los desarrolladores y arquitectos de bases de datos a menudo se enfrentan a una decisión crítica: si usar SQL Dinámico o SQL Embebido para consultar y actualizar datos. Ambos métodos tienen sus propias fortalezas y casos de uso, pero comprender sus implicaciones en el rendimiento es esencial para tomar la decisión correcta. El tiempo de respuesta, una métrica clave en la evaluación del rendimiento de las aplicaciones, puede variar significativamente dependiendo del enfoque de SQL que utilicéis. El SQL Dinámico ofrece flexibilidad, ya que las consultas pueden construirse y ejecutarse en tiempo de ejecución, lo que lo hace ideal para escenarios con necesidades de consulta impredecibles o altamente variables. Por el contrario, el SQL Embebido enfatiza la estabilidad y eficiencia al integrar el código SQL directamente en la lógica de la aplicación, ofreciendo tiempos de respuesta optimizados para patrones de consulta predefinidos.

En este artículo, exploraré los tiempos de respuesta al usar estos dos tipos de SQL y cómo dependen de las diferentes estructuras de clases y del uso de parámetros. Para ello, voy a utilizar las siguientes clases del diagrama:

0
0 73
Artículo Ricardo Paiva · abr 22, 2025 4m read

Migrar desde Oracle, MSSQL u otros sistemas de bases de datos puramente relacionales a un sistema multimodelo como InterSystems IRIS es una decisión estratégica que requiere una planificación y ejecución cuidadosas. Aunque esta transición ofrece beneficios significativos, como un mejor rendimiento, escalabilidad y soporte para arquitecturas modernas, también conlleva desafíos. En este artículo destacaré algunas de las consideraciones relacionadas con la codificación para asegurar una migración exitosa. Dejaré fuera del alcance de este artículo todo lo relacionado con la migración real de estructuras y datos.

Primero, cuando estáis considerando migrar a un sistema de base de datos diferente, necesitáis comprender vuestra lógica de negocio, ya sea del lado de la aplicación (servidor de aplicaciones) o del servidor de bases de datos. Básicamente, ¿dónde tenéis vuestras sentencias SQL que potencialmente tendréis que reescribir?

0
0 75
Artículo Ricardo Paiva · abr 14, 2025 3m read

Lo que encuentro realmente útil de IRIS al enseñar mi asignatura de bases de datos post-relacionales es el hecho de que es una base de datos multimodelo. Lo que significa que podéis abordar la arquitectura y la estructura una sola vez y, después, mostrar el uso de diferentes modelos (como el objeto, documento, jerárquico) utilizando el mismo lenguaje y enfoque. Y no es un gran salto pasar de un lenguaje de programación orientado a objetos (como C#, Java, etc.) a una base de datos orientada a objetos.

Sin embargo, junto con las ventajas (que son muchas), vienen algunos inconvenientes cuando pasamos del modelo orientado a objetos al relacional. Cuando digo que podéis acceder a los mismos datos utilizando diferentes modelos, también necesito explicar cómo es posible trabajar con listas y arrays del modelo objeto en una tabla relacional. Con los arrays es muy sencillo: por defecto se representan como tablas separadas y eso es todo. Con las listas es más complicado, porque por defecto son cadenas de texto. Pero uno sigue queriendo hacer algo con ellas sin dañar la estructura ni volver esta lista ilegible en el modelo objeto.

Así que en este artículo os mostraré un par de predicados y una función que son útiles al trabajar con listas, y no solo como campos.

0
0 66
Artículo Ricardo Paiva · abr 7, 2025 2m read

¿Qué pasaría si pudierais hablar en un chat para comprobar qué sucede en Interoperabilidad, ver si hay errores e incluso resolver algunos tipos de problemas?

Con el servidor MCP, podéis conectar cualquiera de vuestros clientes MCP, por ejemplo, Claude, a IRIS y pedirle que revise la Interoperabilidad.

0
0 98
Artículo Ricardo Paiva · mar 17, 2025 6m read

InterSystems ha estado a la vanguardia de la tecnología de bases de datos desde su creación, siendo pionera en innovaciones que superan constantemente a competidores como Oracle, IBM y Microsoft. Al centrarse en un diseño eficiente del núcleo y adoptar un enfoque sin concesiones en el rendimiento de los datos, InterSystems se ha hecho un hueco en las aplicaciones de misión crítica, garantizando fiabilidad, velocidad y escalabilidad.

0
0 120
Artículo Ricardo Paiva · mar 6, 2025 1m read

Hola,

como me tomó algún tiempo para averiguar lo que está mal, me gustaría compartir esta experiencia, para que no caigáis en la misma trampa.

Acabo de darme cuenta de que si nombráis a vuestro paquete «code» (todo en minúsculas), en una clase que usa algo de python embebido usando [Language = python], os encontraréis con la <THROW> *%Exception.PythonException <PYTHON EXCEPTION> 246 <class 'ModuleNotFoundError'>: No module named 'code.basics'; 'code' is not a package

Class code.basics Extends %RegisteredObject
{

ClassMethod Welcome() As %Status [ Language = python ]
{
print('Welcome!
0
0 58
Artículo Ricardo Paiva · mar 3, 2025 1m read

Los usuarios de CCR ahora pueden aprovechar una sintaxis mejorada para sustituir tokens predefinidos por enlaces URL en vivo dentro de los campos de texto relacionados con fases. Además del token existente <env> , que se actualiza automáticamente para reflejar el entorno del registro CCR correspondiente, CCR introduce ahora dos nuevas palabras clave: <smp> y <homepage>.

El nuevo token <smp> se reemplaza automáticamente por la URL de la página de inicio del Portal de Gestión del sistema asociado al registro CCR en el entorno que haya recibido cambios más recientemente.

0
0 65
Artículo Ricardo Paiva · feb 10, 2025 1m read

En un entorno con contenedores, podéis gestionar la hora de vuestro contenedor mediante la variable TZ o a través de los directorios /etc/timezone y /etc/localtime.

environment:
      - TZ=Europe/Paris
volumes:
    - "/etc/timezone:/etc/timezone:ro"
    - "/etc/localtime:/etc/localtime:ro"

Podéis encontrar ejemplos completos aquí:

IRIS Community

IRISHealth_Community

IRIS production

IRISHealth production

0
0 79
Artículo Ricardo Paiva · ene 29, 2025 4m read

No estoy seguro de que haya muchos que se conecten a MS SQL para ejecutar consultas, procedimientos almacenados, etc., pero nuestro sistema de salud tiene muchas bases de datos diferentes basadas en MS SQL que usamos en el entorno de interoperabilidad por diversas razones.

Con el impulso de movernos de on-premises a la nube, nos encontramos con algunas dificultades con nuestras conexiones SQL Gateway y cómo configurarlas para usar Microsoft Entra para la autenticación de Active Directory.

0
0 109
Artículo Ricardo Paiva · ene 8, 2025 4m read

Link de Git: https://github.com/ecelg/InterSystems-IRIS-as-a-Spotify-REST-client

Recientemente se me ocurrió una idea: ¿cómo puedo poner mi lista de reproducción en IRIS? 🧐

Al mismo tiempo, me dijeron que debía pagar mi suscripción de Spotify 💸💸... oooh... ¿y si obtengo algunos datos de la API de Spotify? Así que empecé a investigar sobre eso.

Como en la mayoría de los desarrollos, comencemos con la documentación de la API: https://developer.spotify.com/documentation/web-api

Para obtener los datos, se requiere solicitar un token de acceso en la URL del endpoint de

0
0 130
Artículo Ricardo Paiva · dic 23, 2024 2m read

Monitoread los cambios incrementales en la base de datos mediante tareas programadas, mostrad las tendencias de cambio a través de gráficos, estableced umbrales de alarma y escribid la información en el archivo messages.log.

Cómo usarlo

Podéis instalarlo a través de Docker o ZPM.

Despliegue con Docker: Requisitos previos.

Aseguraos de tener instalados git y Docker Desktop.

Instalación

1. Clonad o haced git pull del repositorio en cualquier directorio local.

git clone https://github.com/Sara771dev/Database-Size-Monitoring.
0
0 105
Artículo Ricardo Paiva · dic 9, 2024 1m read

Rúbrica de preguntas frecuentes de InterSystems

Si queréis generar un error personalizado arbitrario en un bloque TRY, podéis pasar una excepción con un throw de la siguiente manera. En el siguiente ejemplo, se genera un error personalizado si el valor de Stcount es menor que 1.

Class User.Test
{

ClassMethod ExceptionTest()
 {
    try
    {
      // : some codes
      if (Stcount<1) {
          throw ##class(%Exception.General).
0
0 117
Artículo Ricardo Paiva · nov 29, 2024 1m read

Rúbrica de preguntas frecuentes de InterSystems

Se puede obtener con una consulta de lista de la clase %SYS.Namespace.  

1. Creáis una rutina como esta:

getnsp
   set statement=##class(%SQL.Statement).%New()
   set status=statement.%PrepareClassQuery("%SYS.Namespace","List")
   set resultset=statement.%Execute()
   while resultset.%Next() {
       write resultset.%Get("Nsp"),!
   }
   quit

2. Ejecutadla en vuestro terminal.

USER>do ^getnsp
%SYS
DOCBOOK
SAMPLES
USER

El método para ejecutar consultas de clase presentado en este artículo se puede aplicar en una variedad de casos.

0
0 79
Artículo Ricardo Paiva · nov 22, 2024 1m read

Rúbrica de Preguntas Frecuentes de InterSystems

La replicación o mirroring solo sincroniza archivos de base de datos.

Para sincronizar otros archivos necesarios para vuestra aplicación (archivos CSP, imágenes, documentos, etc.) entre los dos servidores que forman el conjunto de réplica, seguid uno de los siguientes enfoques:

  1. Colocad esos archivos en un disco compartido introduciendo un NAS u otro dispositivo similar.
  2. O utilizad software de sincronización de archivos para sincronizar los archivos entre los dos servidores.
0
0 61
Artículo Ricardo Paiva · nov 19, 2024 2m read

Preguntas frecuentes de InterSystems

Si el archivo de journal es demasiado grande para buscarlo o filtrarlo mediante el Portal de administración, podemos consultarlo mediante los dos métodos siguientes.

① Usando la utilidad ^JRNDUMP
② Usandolo en código

================================================== ========== 

① Usando la utilidad ^JRNDUMP. Por ejemplo, si deseamos seleccionar todos los registros del archivo de journal que incluyen la referencia global ^ABC, hagamos lo siguiente:

*Ejecuta todos los comandos a continuación en el espacio de nombres %SYS.

0
0 72
Artículo Ricardo Paiva · nov 13, 2024 3m read

Si os gusta Java y tenéis un ecosistema Java activo en el trabajo en el que necesitáis incorporar IRIS, no es un problema. La Pasarela de Lenguaje Externo de Java lo hará sin complicaciones, o casi. Esta pasarela sirve como puente entre Java y ObjectScript en IRIS. Podéis crear objetos de clases Java en IRIS y llamar a sus métodos. Solo necesitáis un archivo jar para hacerlo.

Connection diagram: proxy object <-> Gateway object <-> TCP/IP <-> External server <-> target object

0
0 78
Artículo Ricardo Paiva · nov 5, 2024 2m read

Las funciones de agregación definidas por el usuario han sido compatibles con IRIS desde la versión 2021.1.0. Hace años deseaba tener esta funcionalidad antes de encontrar una forma alternativa y secreta de sobrescribir MAX y MIN en un tipo de dato personalizado, pero no tuve la oportunidad de probarlo realmente hasta hoy. Me pareció una experiencia/ejemplo interesante – ya antes surgió la pregunta de cómo obtener la Mediana en IRIS SQL – así que lo comparto aquí sin extenderme demasiado.

0
0 77
Artículo Ricardo Paiva · oct 22, 2024 4m read

Cuando utilizáis InterSystems IRIS como motor de interoperabilidad, todos sabemos y apreciamos lo fácil que es usar el Visor de Mensajes para revisar las trazas de los mensajes y ver exactamente qué está ocurriendo en vuestra producción. Sin embargo, cuando un sistema maneja millones de mensajes al día, puede que no sepáis por dónde empezar vuestra investigación.

A lo largo de mis años apoyando producciones en IRIS, a menudo me encuentro investigando cosas como...

  • ¿Qué tipo de rendimiento tiene este flujo de trabajo?  
  • ¿Dónde está el cuello de botella?  
  • ¿Cuáles son mis errores más
0
0 95
Artículo Ricardo Paiva · oct 17, 2024 1m read

Rúbrica de preguntas frecuentes de InterSystems

En Windows, esto no se puede cambiar, pero en plataformas tipo Unix, se puede cambiar utilizando el comando iris rename.

iris rename instname(<current instance name>) newname(<new instane name>)

Para obtener más información sobre el comando iris rename, por favor consultad el siguiente documento:

Sobre el comando iris

0
0 87
Artículo Ricardo Paiva · oct 9, 2024 3m read

El 29 de agosto de 2024, el equipo lanzó Language Server v2.6.0, que incluye más mejoras para la autocompletación de código (también conocida como intellisense). Eso significa que #dim, aunque sigue siendo útil, ya no es tan necesario. En mi opinión, eso es algo bueno.

Esta publicación del año pasado (Intellisense y autocompletación de código en VS Code ObjectScript) hablaba sobre el uso de #dim para la autocompletación de referencias de objetos (OREFs). #dim siempre ha sido útil tanto para Studio como para VS Code.

0
0 70
Artículo Ricardo Paiva · oct 2, 2024 4m read

Entonces, si estáis siguiendo desde la publicación anterior o si os incorporáis ahora, pasemos al mundo de las aplicaciones eBPF y echemos un vistazo a Parca. Este se basa en nuestra breve investigación sobre cuellos de botella en el rendimiento utilizando eBPF, pero añade una aplicación revolucionaria sobre vuestro clúster para monitorizar todas vuestras cargas de trabajo de IRIS de forma continua, ¡a nivel de todo el clúster!

Perfilado continuo con Parca, cargas de trabajo IRIS en todo el clúster

0
0 73
Artículo Ricardo Paiva · sep 20, 2024 15m read

Asistí a la Cloud Native Security Con en Seattle con la plena intención de aprovechar el día de OTEL, para luego profundizar en el tema de la seguridad aplicada a las cargas de trabajo nativas en la nube en los días siguientes, culminando con el CTF como ejercicio profesional. Esto fue felizmente interrumpido por un nuevo entendimiento de eBPF, lo cual supuso una mejora muy necesaria para mis pantallas, carrera, cargas de trabajo y actitud, gracias a nuevos enfoques para resolver problemas relacionados con las cargas de trabajo.

Así que llegué a la "fiesta" de eBPF y desde entonces he estado asistiendo a clínica tras clínica sobre el tema. Aquí me gustaría "desempaquetar" eBPF como una solución técnica, mapeada directamente a lo que hacemos en la práctica (aunque no siempre coincida del todo), y recorrer eBPF a través de mis experimentos en el soporte de las cargas de trabajo de InterSystems IRIS, particularmente en Kubernetes, pero sin excluir las cargas de trabajo independientes.

Pasos de eBee con eBPF y Cargas de Trabajo de InterSystems IRIS

0
0 107
Artículo Ricardo Paiva · sep 12, 2024 3m read

Samba es el estándar para la interoperabilidad de servicios de archivos entre Linux, Unix, DOS, Windows, OS/2 y otros sistemas operativos. Desde 1992, Samba ha proporcionado servicios de archivos seguros, estables y rápidos para todos los clientes (sistemas operativos y programas) utilizando el protocolo SMB/CIFS.

0
0 238
Artículo Ricardo Paiva · sep 10, 2024 3m read

Rúbrica de preguntas frecuentes de InterSystems

Los globales temporales almacenados en las bases de datos IRISTEMP/CACHETEMP se utilizan cuando un proceso no necesita almacenar datos de manera indefinida, pero requiere el potente rendimiento de los globales. Las bases de datos IRISTEMP/CACHETEMP no se registran en el diario, por lo que el uso de globales temporales no genera archivos de diario.

El sistema utiliza las bases de datos IRISTEMP/CACHETEMP para almacenamiento temporal y están disponibles para vosotros para el mismo fin.

0
0 116
Artículo Ricardo Paiva · sep 6, 2024 5m read

En la sección anterior, exploramos el proceso de instalación y comenzamos a escribir el IRIS en Python nativo. Ahora procederemos a examinar el recorrido global y a interactuar con los objetos de la clase IRIS.

get: esta función se utiliza para obtener valores del nodo de recorrido

def traversal_firstlevel_subscript():
    """
    ^mygbl(235)="test66,62" and ^mygbl(912)="test118,78"
    """
    for  i in irispy.node('^mygbl'):
        print(i, gbl_node.
0
0 99