Embeddedpy-bridge: Un kit de herramientas para Embedded Python
Visión general
Embedded Python es un cambio radical para InterSystems IRIS, ya que ofrece acceso al vasto ecosistema de Python directamente dentro de la base de datos. Sin embargo, salvar la brecha entre ObjectScript y Python a veces puede parecer bastante complicado.
Para hacer que esta transición sea fluida, podéis usar embeddedpy-bridge.
¿Cuantas veces habéis tenido que recibir o generar un JSON y habéis añorado el poder trabajar sobre él haciendo uso de DTLs y sin tener que ir manejando DynamicObjects intentando recordar cual era el nombre de cada campo?
¿Deseas trocear y hacer más digerible tu gigantesco JSON?
En mi caso, nunca, pero he pensado que a alguien le podría resultar de utilidad una funcionalidad que capture tu JSON y lo descomponga en una serie de clases de ObjectScript con las que puedas trabajar de forma más cómoda y sencilla.
Pues bien...¡contemplad el JSON2Class en toda su gloria!
¿Cómo funciona JSON2Class?
Probablemente os suene esta situación:
Hace tiempo encontraste una función muy especial, $ZU, para un tipo de problema muy concreto. Como una especie de fórmula mística. Esta se popularizó y muchos desarrolladores la utilizaron en su código.
Tras varias versiones y actualizaciones, ISC informa de que vuestro mágico $ZU está obsoleto y ya no es soportado. Se os recomienda reemplazarlo por un nuevo $loquesea().
Entonces, ¿cómo podrías localizar y documentar el uso de este mágico $ZU? Puede estar en clases, en código MAC, INT o INC o incluso distribuido en múltiples namespaces.
¡Sí sí! ¡Adelante! No os habéis equivocado, estáis en vuestra querida Comunidad de Desarrolladores de InterSystems en español.
Os preguntaréis a qué viene el título de este artículo, pues muy sencillo, hoy estamos aquí reunidos para honrar al Inquisidor y elogiar la gran labor desempeñada por el mismo.
Y bien, ¿quién o qué es el Inquisidor?
Hola comunidad,
Quería compartir mi experiencia trabajando en proyectos con grandes volúmenes de datos. A lo largo de los años, he tenido la oportunidad de manejar enormes cantidades de datos de pacientes, datos de aseguradoras y registros transaccionales mientras trabajaba en la industria hospitalaria. He tenido la oportunidad de crear informes muy extensos que requerían usar lógicas avanzadas para obtener datos de múltiples tablas, cuyos índices no me ayudaban a escribir un código eficiente.
Esto es lo que he aprendido sobre cómo gestionar grandes volúmenes de datos de manera eficiente.
Elegir el método de acceso a datos adecuado
Como todos sabemos en esta comunidad, IRIS ofrece múltiples formas de acceder a los datos. Elegir el método correcto dependerá de lo que necesitemos.
- Acceso directo a los Globales: el más rápido para operaciones masivas de lectura/escritura. Por ejemplo, si tengo que recorrer índices y obtener datos de pacientes, puedo iterar sobre los globales para procesar millones de registros. Esto ahorra mucho tiempo.
Set ToDate=+HSet FromDate=+$H-1ForSet FromDate=$O(^PatientD("Date",FromDate)) Quit:FromDate>ToDate Do
. Set PatId=""ForSet PatId=$Order(^PatientD("Date",FromDate,PatID)) Quit:PatId=""Do
. . Write$Get(^PatientD("Date",FromDate,PatID)),!- Uso de SQL: útil para requisitos de generación de informes o análisis, aunque más lento para conjuntos de datos muy grandes.
¡Bienvenidos, estimados miembros de la Comunidad!
En este artículo vamos a presentar un ejemplo de un proyecto de implementación de una solución basada en FHIR. Este proyecto se basará en el proyecto nacional (nacional de España), conocido como ÚNICAS.
¿Qué es ÚNICAS?
Usando sus propias palabras:
¡Hola a todos!
Es muy fácil importar datos CSV en IRIS. Pero, ¿qué pasa si queremos preservar los IDs originales del CSV?
Recientemente me encontré con la situación en la que necesitaba importar dos CSVs en IRIS que estaban vinculados por una columna que hacía referencia a la columna de otro CSV: una situación típica de clave primaria y clave externa, donde csv1 contiene esta columna como clave primaria, y csv2 como clave externa con IDs relacionados con csv1.

La imagen fue generada por ChatGPT, así que no lo culpéis: hizo lo mejor que pudo al generar países como claves primarias con una relación countries.csv–cities.csv :)
ObjectScript puede parecer solo otro lenguaje de programación, pero aquí está el giro:
Vuestro código aquí puede vivir para siempre (sí, incluso después de que os hayáis pasado a otro proyecto). Por eso es importante mantenerlo ordenado, fácil de leer y a salvo de errores misteriosos.
(Una guía para principiantes para mantener vuestro código ordenado, amigable y preparado para el futuro)
Bienvenidos a la jungla de ObjectScript, donde vuestro código puede tener un alcance global y ser persistente por naturaleza.
Mantengamos las cosas limpias, legibles y resistentes a errores.
¡Saludos estimados miembros de la comunidad!
Muchos recordaréis las capacidades NLP disponibles en IRIS con el nombre de iKnow y que fueron deprecadas hará no mucho tiempo. Pero...¿Deprecado todo? ¡NO! Una pequeña aldea resiste a la deprecación, ¡los índices iFind!
Y os preguntaréis, ¿para qué valen estos magníficos índices? Pues muy sencillo, sirven para indexar los textos presentes en las columnas de tipo String y Stream y acelerar dramáticamente la velocidad de consulta sobre las mismas.
¿Qué son los índices %iFind?
Seguramente os hayais encontrado durante los últimos 10 - 15 años los términos Data Lake, Data Warehouse, Data Fabric hasta en la sopa, todo se arregla y soluciona con alguna de estas 3 cosas o con alguna combinación de las mismas (aquí y aquí tenéis un par de artículos de nuestra página oficial por si tenéis alguna duda de a qué corresponde cada uno de los términos). Si tenemos que resumir de forma visual cual es el objetivo de todos esos términos podríamos decir que se intenta solucionar con todos ellos situaciones como esta:
Hola desarrolladores. Solo quería compartir con vosotros un hallazgo que podría ahorraros unos valiosos minutos de vida como desarrolladores con InterSystems IRIS.

¡Como así!
Debería funcionar. Desplegasteis la API REST correctamente y todo está en su lugar.
¿Qué puede estar saliendo mal?
¡Hola, estimados miembros de nuestra comunidad de desarrolladores!
En el artículo de hoy vamos a echar un vistazo a una de las últimas funcionalidades de telemonitorización de nuestras instancias de IRIS que se han añadido al producto. Estoy hablando de la compatibilidad con OpenTelemetry.
¿Qué es OpenTelemetry?
OpenTelemetry es un framework open source que proporciona las herramientas necesarias como SDKs y estándares para implementar la observabilidad en sistemas y aplicaciones.
Esta observabilidad se extiende a tres tipos de datos:
Hola comunidad,
En este artículo, os voy a presentar mi aplicación iris-fhir-bridge.
Pregunta:
¿Cómo podéis crear, modificar, etc., configuraciones de seguridad como Usuarios y Roles programáticamente?
Respuesta:
Podéis usar las clases del paquete Security en el NAMESPACE %SYS. Por ejemplo Security.Roles o Security.Users.
Por supuesto, para llevar a cabo estas acciones, necesitaréis la autorización correspondiente.
Aquí tenéis un pequeño ejemplo usando Security.Roles:
¿A quién no le ha pasado que está desarrollando un precioso ejemplo usando una imagen de IRIS de Docker y le ha fallado el proceso de generación de la imagen en el Dockerfile porque la licencia con la que se creo la imagen no contiene determinados privilegios?
Preguntas frecuentes de InterSystems
La configuración predeterminada para Stay Connected y Pool Size para los hosts de negocio (antiguamente, business service) que utilizan el adaptador TCP es la siguiente:
PoolSize = 1
Al lío, que lo bueno, si breve, dos veces bueno.
Jornadas 30ª de Primera División y 34ª de Segunda.
Predicciones para Primera División:
Y para Segunda:
Esto nos da la siguiente Quiniela:
¡Suerte a todos!
¡Acabo de caer en la cuenta de que nunca terminé esta serie de artículos!
En el artículo de hoy vamos a echar un vistazo a la producción que se encarga de extraer los diagnósticos en CIE-10 más similares a nuestro texto, de tal forma que podamos seleccionar la opción más adecuada desde nuestro frontend.
Buscando similitudes de diagnósticos:
Desde la pantalla que nos muestra las solicitudes de diagnósticos recibidas en HL7 en nuestra aplicación podremos buscar cuales son los diagnósticos CIE-10 más próximos al texto introducido por el profesional.
Venga que se nos pasa la jornada de la Quiniela. Esta jornada vuelven los partidos de Primera y Segunda División tras el parón de selecciones 29ª jornada en primera y 33ª en Segunda.
Estas son las predicciones para Primera:
Y estos los de Segunda:
Quedando así la Quiniela:
¡Mucha suerte a todos!
Después de tantos años de espera, por fin tenemos un controlador oficial disponible en Pypi
.png)
Además, encontré el driver JDBC finalmente disponible en Maven desde hace ya 3 meses, y el driver .Net en Nuget desde hace más de un mes.
Como autor de multitud de implementaciones de librerías de Python con soporte de IRIS, quería probarlo. La implementación de DB-API significa que debe ser reemplazable e implementar las funciones definidas en el estándar. La única diferencia entre las diferentes bases de datos debería ser únicamente el SQL.
Y la belleza de usar librerías existentes que ya implementaron la conectividad con otras bases de datos usando el estándar DB-API, es que estas librerías deberían ser totalmente compatibles con el controlador.
Decidí probar el driver oficial de InterSystems implementando su soporte en la librería SQLAlchemy-iris.
Como bien sabréis se ha procedido a eliminar el denominado Private Web Server que venía con cada instalación de IRIS, lo que hace necesario un servidor web externo.
En el caso de los despliegues en docker lo más común es hacer uso de la imagen webgateway (disponible aquí) junto con la de IRIS para poder acceder sin problemas al portal de gestión. Esta imagen se puede configurar para acceder vía HTTPS sin ningún problema configurando los certificados.
Problema 1: Unable to verify the first certificate
¡Hola compañeros!
Otra vez más me he dado cuenta de que no hay una forma supersencilla de mostrar el error de la variable %Status, cosa que necesito con relativa frecuencia desde el terminal.
Sí, conozco las macros $$$, pero no son demasiado útiles en un terminal.
Habitualmente lo que hago es intentar recordar de memoria o copiar de algún sitio la fórmula:
USUARIO>w $System.State.DisplayError(st)Desde la introducción de Embedded Python siempre ha estado la duda sobre su rendimiento respecto a ObjectScript y en más de una ocasión lo he comentado con @Guillaume Rongier , pues bien, aprovechando que estaba haciendo una pequeña aplicación para capturar los datos de los concursos públicos en España y poder realizar búsquedas utilizando las capacidades de VectorSearch he visto la oportunidad de realizar una pequeña prueba.
Datos para la prueba
Después de un más que inmerecido descanso que me tomé la pasada semana, ¡retornamos con nuestras predicciones quinielísticas! Jornadas 27 de Primera División y 30 de Segunda.
Veamos los partidos que entran esta jornada:
Predicciones para la Primera División:
Lo mismo para Segunda:
Veamos que Quiniela resulta de lo anterior:
Confiemos en que Bordalás esté levantando un tabique en las porterías del Getafe para ese empate.
Pues ya tenemos nueva jornada de Liga y de Quiniela, 25ª de Primera División y 28ª de Segunda. Veamos qué partidos entrarán esta jornada:
Aquí tenemos la predicción para Primera División:
Y aquí para Segunda División:
Esto nos da la siguiente Quiniela:
¡Mucha suerte esta jornada!
Es posible que hayáis notado que, para configurar un mirror en InterSystems IRIS for Health™ y HealthShare® Health Connect, hay un requisito especial. En este artículo, quiero guiaros paso a paso por el proceso.
Esto supone que ya habéis configurado el segundo miembro de conmutación por error y habéis confirmado un estado exitoso de dicho miembro en el monitor del mirror:
Paso 1: Activad el usuario HS_Services (en el servidor de respaldo y en el principal)..png)
Es muy habitual en el día a día de los usuarios de IRIS o de Health Connect que sea necesario instalar nuevas instancias o bien actualizar las que ya tienen y en muchas ocasiones no son estos mismos usuarios los que realizan la instalación, si no personal de sistemas que en muchas ocasiones no tiene en consideración las particularidades de la asignación de permisos necesarios para la instalación.
Venga, al lío, que tenemos nueva jornada de la Quiniela, veamos que partidos entran de Primera (24ª jornada) y Segunda (27ª).
Predicciones para Primera División:
Y las de Segunda:
Esto nos da la siguiente Quiniela:
¡Suerte y feliz viernes!
Venga que nos vamos acercando ya en aciertos, veamos que tal se da esta 41ª jornada de la Quiniela, con partidos de la jornada 23ª de Primera División y 26ª de Segunda.
Veamos los partidos que entran en esta Quiniela:
Con pleno al 15 del derby madrileño por excelencia.
Aquí están las predicciones de Primera División:
Y las de Segunda:
Dándonos la siguiente Quiniela:
¡Suerte y buen fin de semana a todos!