Hola Comunidad,
mira cómo puedes desarrollar en Python y conectar a InterSystems IRIS® Data Platform con PyODBC y Native API:
InterSystems IRIS es una Plataforma completa de datos.
InterSystems IRIS le proporciona todo lo que necesita para capturar, compartir, comprender y actuar sobre el activo más valioso de su organización, sus datos.
Dado que es una plataforma completa, InterSystems IRIS elimina la necesidad de integrar varias tecnologías de desarrollo. Las aplicaciones necesitan una menor cantidad de código, menos recursos del sistema y poco mantenimiento.
Hola Comunidad,
mira cómo puedes desarrollar en Python y conectar a InterSystems IRIS® Data Platform con PyODBC y Native API:
Ya está disponible la versión 1.1 de System Alerting & Monitoring (SAM).
SAM combina el Monitor de Logs y la API de Monitorización de IRIS, basados en estándares, con herramientas que nos resultan familiares, y son estándares de facto en la industria, como Grafana y Prometheus, para crear una solución básica de monitorización y alerta para clusters IRIS.
Para saber más sobre SAM, consulta la Guía de SAM (en inglés).
Novedades en SAM 1.1
Verás mejoras de rendimiento para los gráficos del cuadro de mando de Grafana, especialmente cuando se trabaja con grandes conjuntos de datos. Si vas a actualizar desde SAM 1.0, asegúrate de tener suficiente espacio en disco disponible, ya que SAM 1.1 añade índices adicionales a los datos.
Encontrar errores en tu código o examinar un comportamiento inesperado es el principal objetivo de la depuración.
Trataré de actualizar las herramientas tradicionales aparte de las ayudas que tienen Studio, VScode, Serenji... Las herramientas básicas que han estado ahí antes de que tu EDI preferido lo utilizara en segundo plano.
Todo el código fuente del artículo está disponible en: https://github.com/antonum/ha-iris-k8s
En el artículo anterior, comentamos cómo configurar IRIS en el clúster k8s con alta disponibilidad, basado en el almacenamiento distribuido, en vez del mirroring tradicional. Como ejemplo, ese artículo utilizaba el clúster Azure AKS. En esta ocasión, seguiremos explorando las configuraciones de alta disponibilidad en los k8s.
De vez en cuando, recibimos la pregunta anterior en soporte, algo o alguien está usando más licencias de las esperadas y necesitamos encontrar qué está pasando.
Tenemos dos escenarios. El primer escenario es cuando nos damos cuenta que las licencias están agotadas porque la aplicación no funciona o porque intentamos conectarnos a través del terminal y sale el "encantador" mensaje <LICENSE LIMIT EXCEEDED>:
.png)
El segundo escenario es cuando el usuario final se queja de que no pudo conectarse en algún momento y no nos dió tiempo a conectarnos y ver el problema cuando estaba sucediendo.
Con el lanzamiento de InterSystems IRIS 2021.2 Preview y la nueva funcionalidad LOAD DATA, los conjuntos de datos se pueden añadir con Objectscript Package Manager (ZPM)
Medical Datasets contiene los siguientes 12 conjuntos de datos. Para tablas de conjuntos de datos y detalles de datos, echa un vistazo a la Demo online, usando SuperUser | SYS
| ID | Dataset Name | Tables | Licence |
|---|---|---|---|
| 1 | Synthetic Medical Data | 11 | Public Domain |
| 2 | Health Care Analytics - 1 | 8 | Public Domain |
| 3 | Global Suicide Data | 7 | Public Domain |
| 4 | COVID-19 Polls1 | 7 | CC-BY |
| 5 | Cancer Rates by U.S. State | 2 | Public Domain |
| 6 | Opioid Overdose Deaths | 2 | Public Domain |
| 7 | Heart Disease Prediction | 1 | Public Domain |
| 8 | Yellowpages medical services dataset | 1 | Public Domain |
| 9 | Hospital ratings | 1 | Public Domain |
| 10 | Heart Failure Prediction | 1 | (CC BY 4.0) |
| 11 | Diabetes Dataset | 1 | Public Domain |
| 12 | Chronic Kidney Disease | 1 | Public Domain |
En este artículo, explicaré el uso de las tablas %SQL_Diag.Result y %SQL_Diag.Message junto con la nueva funcionalidad LOAD DATA.
Se recomienda revisar primero la documentación LOAD DATA.
Después del éxito de una operación, LOAD DATA inserta un registro en la tabla %SQL_Diag.Result y los detalles se insertan en la tabla %SQL_Diag.Message
A continuación se muestra el comando básico cuando la tabla ya está creada y el archivo de origen no contiene una fila de encabezado.
LOAD DATA FROM FILE 'C://TEMP/mydata.txt' INTO MyTable
El nombre del archivo debe incluir un sufijo .txt o .csv (valores separados por comas) y tanto el origen como el destino tienen la misma secuencia de columnas de datos.
Hay varias maneras de generar ficheros Excel usando tecnología InterSystems: por ejemplo utilizando informes generados con InterSystems Reports, o los antiguos informes ZEN, o incluso haciendo uso de librerías Java de terceros. Las posibilidades son casi infinitas.
Pero, ¿qué pasa si quieres crear una sencilla hoja de cálculo sólo con ObjectScript? (sin aplicaciones de terceros)
En mi caso, necesito generar informes que contengan muchos datos sin procesar (a los financieros les encantan), pero mi antiguo informe ZEN fallaba y me da lo que me gusta llamar un "archivo con cero bytes". Básicamente, Java se queda sin memoria y provoca una sobrecarga en el servidor de informes.
Encontré este pequeño artículo de @Brendan Bannon de hace unos años... pero creo que es muy útil para cuando tengamos estructuras de almacenamiento basadas puramente en globals y queramos tener la posibilidad de acceder a ellas desde el punto de vista de Objetos y/o Relacional.
El fichero ZIP adjunto contiene un paquete de ejemplos de mapeos SQL Storage (válido para IRIS y Caché) que he hecho y recopilado a lo largo de estos años.
Si tienes globals existentes y quieres exponerlos vía Objectos o SQL, necesitas configurar el mapeo SQL Storage en InterSystems IRIS o
Gracias a @Yuri Marx hemos visto un buen ejemplo de Migración de Bases de datos de Postgres a IRIS.
Mi problema personal es el uso de DBeaver como una herramienta de migración.
En especial, como una de las fortalezas de IRIS (y también Caché) es la disponibilidad de los SQLgateways que permiten el acceso a cualquier base de datos externa, siempre y cuando se puedan acceder usando ODBC/JDBC. Así que he ampliado el paquete para demostrarlo.
En las versiones de InterSystems IRIS >=2021.2 podemos usar irispython para escribir directamente código python encima de nuestras instancias IRIS. Esto nos permite usar paquetes de python, llamar a métodos, hacer consultas SQL y hacer casi cualquier cosa en Objectscript excepto pythonic.
Por ejemplo, a continuación compruebo si hay un namespace:
#!/usr/irissys/bin/irispython
import iris
# call arbitrary class methods
result = iris.cls('%SYS.Namespace').Me gustaría presentaros mi nuevo proyecto para el Concurso de Globals. Una vista totalmente nueva para el navegador de globals.
.png)
Nos encanta anunciaros que hemos creado un nuevo Portal de Sugerencias: InterSystems Ideas.
El objetivo del Portal es mejorar los mecanismos para que podáis sugerir cómo mejorar nuestros productos y cómo hacerlos evolucionar para satisfacer vuestras necesidades. La sección de Preguntas es una excelente manera de interactuar con otros colegas sobre problemas específicos de código; y el Soporte a Clientes es la forma de obtener la solución a un problema.
Si estás implementando más de un entorno/región/nube/cliente, inevitablemente te encontrarás con el problema de la gestión de la configuración.
Aunque todas (o solo varias de) tus implementaciones pueden compartir el mismo código fuente, algunas partes, como la configuración (ajustes, contraseñas) son diferentes de una implementación a otra y se deben gestionar de alguna manera.
En este artículo, intentaré ofrecer varios consejos sobre ese tema. Y comentaré principalmente las implementaciones de los contenedores.
¿Te suenan OAuth2 / OpenID Connect pero no estás seguro de cómo se utilizan? ¿Has necesitado implementar alguna vez Single Sign On, servicios web seguros basados en tokens? ¿Has necesitado incorporar autenticación / autorización a tus aplicaciones web o servicios y no sabías por dónde empezar?
¿Que te parecería poder configurar paso a paso un servidor de autorización, un cliente y un servidor de recursos? Aquí tenéis un ejemplo donde se configuran instancias Intersystems IRIS para actuar como cada uno de esos roles de OAuth2.
He definido una clase con una propiedad de objeto dinámico:
Mi clase
Class test.Dyn Extends %Persistent
{
Property json As %DynamicObject;
/// do ##class(test.Dyn).test()
ClassMethod test()
{
do ..%KillExtent()
for len = 100, $$$MaxStringLength - 1, $$$MaxStringLength, $$$MaxStringLength+1, $$$MaxStringLength *2 {
set sc = ..save(len)
write "Len: ",len, " Result: ",$case($$$ISERR(sc), $$$YES: $System.Status.GetErrorText(sc), : "OK"),!
}
}
ClassMethod save(len)
{
set json = {}
set stream = ..getStream(len-8) // -8 because {"a":""}
do json.%Set("a", stream, "stream")
set obj = ..%New()
set obj.json = json
quit obj.%Save()
}
ClassMethod getStream(len)
{
set stream = ##class(%Stream.TmpCharacter).%New()
if len<$$$MaxStringLength {
do stream.Write($tr($j("",len)," ","A"))
} else {
for i=1:$$$MaxStringLength:len {
do stream.Write($tr($j("",$$$MaxStringLength)," ","A"))
}
do stream.Write($tr($j("",len-i)," ","A"))
}
quit stream
}
}El problema que me encuentro es que si la longitud de una propiedad json serializada es de más de 3641144 símbolos, el objeto no puede guardarla, con el siguiente error (MAXSTRING o STRINGSTACK):
Length: 100 Result: OK
Length: 3641143 Result: OK
Length: 3641144 Result: OK
Length: 3641145 Result: ERROR #5002: ObjectScript error: <MAXSTRING>%GetSerial+1^%Library.DynamicAbstractObject.1
Length: 7282288 Result: ERROR #5002: ObjectScript error: <STRINGSTACK>%GetSerial+1^%Library.DynamicAbstractObject.1¿Hay algún método alternativo? Necesito almacenar jsons relativamente grandes (10-15 Mb) y las propiedades de objetos dinámicos permiten un acceso muy práctico.
$ZSTORAGE está establecido en -1.
¡Hola desarrolladores!
Ya hemos realizado el sorteo entre todas las personas que propusieron un nombre al exoplaneta descubierto en la ruta.
Y el ganador ha sido @Daniel Mory. ¡Enhorabuena!! 🎉🎉
¡Muchas gracias a todos los que habéis participado!
Aquí podéis ver el vídeo del sorteo entre todos los participantes.
¡Hola Comunidad!
Hemos grabado el webinar que hicimos ayer y lo hemos subido al canal de YouTube de la Comunidad de Desarrolladores en español. Si os perdisteis el webinar o lo queréis volver a ver con más detalle, ya está disponible la grabación!
Eduardo Anglada mostró toda la potencia de Python, el nuevo lenguaje de programación añadido a IRIS. Explicó cómo crear datos anónimos, desarrollar cuadros de mando interactivos... ¡y muchas cosas más! Por eso, si queréis conocer la nueva funcionalidad de InterSystems IRIS, ¡no os perdáis el vídeo!
⏯ Explorando las nuevas funcionalidades de IRIS: Python Embebido
¡Hola desarrolladores!
Para el concurso de Opendataset he desarrollado una aplicación, en formato docker, que utiliza InterSystems IRIS y Openflights Dataset en un contenedor y un segundo contenedor con Apache Zeppelin. Puedes encontrar los detalles aquí: https://github.com/andreas5588/openflights_demo
Con esto, se puede consultar el conjunto de datos de Opendflights desde Apache Zepplin sin necesidad de realizar ninguna configuración. Los contenedores están en hub.docker por lo que se puede utilizar de forma muy sencilla.
He desarrollado una aplicación para importar de forma dinámica 12 conjuntos de datos junto con 43 tablas usando el comando LOAD DATA, que carga los datos de una fuente a una tabla SQL de IRIS.
Lista de los conjuntos de datos
¡Hola a todos!
Hoy quiero hablar sobre nuestro proyecto y utilizar el tema del conjunto de datos para el concurso.
Nuestra intención nunca fue ser unos gestores de datos, sobre todo porque a veces nuestros preciosos datos significan mucho para nosotros, pero no para el resto del mundo.

Queremos ir un paso más allá y permitir que los usuarios encuentren el conjunto de datos perfecto para satisfacer sus necesidades.
Nuestro proyecto es un puente entre la comunidad de la Ciencia de Datos y la Comunidad de Desarrolladores, utilizando InterSystems IRIS para lograr esta misión.
¡Hola desarrolladores!
Os invitamos a un nuevo webinar en español: "Explorando las nuevas funcionalidades de IRIS: Python Embebido", el miércoles 30 de marzo, a las 4:00 PM (CEST).
El webinar está dirigido a cualquier desarrollador Python o científico de datos.
Durante el webinar, descubriremos la potencia de Python, el nuevo lenguaje de programación añadido a IRIS. Python es un lenguaje en auge, cuya popularidad aumenta año tras año y que ya cuenta con más de un millón y medio de programadores en el mundo y con miles de librerías a su disposición.
¡Hola desarrolladores!
Estamos muy contentos de anunciaros que InterSystems Iberia va a ser uno de los patrocinadores de la conferencia Internacional "J On The Beach" que tendrá lugar en Málaga los días 28-29 de abril.
¡Y queremos invitaros a uno de vosotros al evento! (*)
El primer día de la Conferencia @David Reche y @Eduardo Anglada darán una ponencia titulada "Capitán Kirk, descubierto un exoplaneta en la ruta usando AutoML". Por ello, para conseguir la entrada gratis (valorada en 250€), tenéis que responder a la siguiente pregunta:
¿Qué nombre le pondrías al exoplaneta descubierto en la ruta?
Este artículo es una continuación de esta publicación.
En ese artículo, analizamos el desarrollo de business processes, que forman parte de los componentes necesarios para la integración del sistema y sirven como coordinadores de la producción.
En este artículo mostraremos la creación de un business service, que es la ventana de entrada de información para la producción.
Y, finalmente, llegamos al último artículo de "¡Utilicemos la interoperabilidad!
¡Hola desarrolladores!
A veces necesitamos publicar la imagen Docker de la solución InterSystems IRIS en la que estamos trabajando. Existen diferentes posibilidades, por ejemplo:
La mejor solución es subir la imagen al Registro Hub de Docker o al Registro de Github.
En este breve artículo, propongo una forma de hacerlo automáticamente cada vez que subas (usando git push) cambios a tu repositorio GitHub.
Soporte te está ayudando a resolver una incidencia con un informe y necesitan reproducir el problema en su sistema local. ¡Es una pena que no puedan ejecutar el informe porque la conexión JDBC al origen de datos fallará! O... ¿hay alguna forma?
Hay una forma de ejecutar un informe offline sin acceso a la base de datos origen. Debes proporcionar los resultados de una query cacheada exportada desde Designer. Es un fichero que contiene los datos de la query. Soporte lo usará para evitar el origen de datos del informe. Cuando ejecuten el informe, cogerá los datos del fichero, no de la conexión JDBC.
La versión 3.3 de InterSystems Kubernetes Operator (IKO) ya está disponible a través de la página de descargas del Centro de Soporte Internacional (WRC) y del Registro de Contenedores de InterSystems.
IKO simplifica el trabajo de InterSystems IRIS e InterSystems IRIS for Health en Kubernetes, al ofrecer una sencilla definición del recurso irisCluster. Consulta la documentación para conocer la lista detallada de funcionalidades, incluyendo sharding sencillo, mirroring y configuración de ECP.
A destacar en IKO 3.3:
irisClusteririsCluster15 de marzo de 2022
InterSystems ha corregido un defecto que provoca la compilación incorrecta de rutinas de ObjectScript.
Este defecto solo ocurre en la versión 2021.1.1, recientemente liberada, de:
InterSystems IRIS Data Platform
InterSystems IRIS for Health
HealthShare Health Connect
Una de nuestras apps utiliza una consulta de clase para un informe ZEN y funciona perfectamente en ese informe, produciendo los resultados esperados. Hemos migrado a InterSystems Reports y nos hemos dado cuenta de que, para un informe que utiliza la misma consulta de clase, aparecen en la parte de abajo más de 100 filas extra con los mismos valores en las columnas.
Descartamos InterSystems Reports como fuente del problema reproduciendo el problema de "filas extra" con una hoja de cálculo de Excel que llama a la misma consulta de clase utilizando un procedimiento almacenado.
¿Cuál era el problema? Cuando llamábamos al procedimiento almacenado desde el antiguo ZEN Report o desde la función SQL Query en el Portal de Administración, no veíamos estas filas adicionales.