Artículo Luis Angel Pérez Ramos · mar 28, 2024 1m read

La Liga no para por la Semana Santa y aquí estamos con una nueva jornada de la Quiniela. Veamos los partidos que forman parte de la jornada 30ª de Primera División y la 33ª de la Segunda:

Y aquí tenemos las previsiones de QuinielaML para Primera División:

Las de Segunda División:

Lo que nos da la siguiente Quiniela:

¡Mucha suerte a todos!

1
0 140
Artículo Luis Angel Pérez Ramos · mar 27, 2024 6m read

Como habréis visto en las últimas publicaciones de la comunidad, InterSystems IRIS ha incluido desde la versión 2024.1 la posibilidad de incluir tipos de datos vectoriales en su base de datos y basado en este tipo de datos se ha implementado las búsquedas vectoriales. Pues bien, estas nuevas funcionalidades me han recordado el artículo que publiqué hace un tiempo que se basaba en reconocimiento facial mediante Embedded Python.

Introducción

0
0 175
Artículo Luis Angel Pérez Ramos · mar 22, 2024 1m read

Jornada atípica de la Quiniela esta semana, al no haber partidos de Primera División la Quiniela se forma con los de Segunda e internacionales:

La estimación para los partidos de Segunda será la siguiente:

Vaya...sólo victorias locales...algo me huele raro.

Veamos que nos dice para los partidos internacionales:

Veamos como queda la Quiniela:

Como véis...todo un acto de fe es esta jornada. Pero bueno, ¡habrá que quemar las ganancias obtenidas la pasada semana!

0
0 188
Artículo Luis Angel Pérez Ramos · mar 19, 2024 8m read

¡Hola Comunidad!

En mi artículo anterior, aprendimos estos temas:

  1. ¿Qué es Docker?
  2. Algunos de los beneficios de Docker
  3. ¿Cómo funciona Docker?
  4. Imagen de Docker
  5. Contenedores Docker
  6. Repositorio de imágenes Docker
  7. Repositorio de imágenes Docker de InterSystems
  8. Instalación de Docker
  9. Comandos básicos de Docker
  10. Ejecutar la Community Edition de IRIS utilizando Docker
  11. Interfaz gráfica de Docker Desktop

En este artículo trataré los siguientes temas:

  1. Uso del archivo Docker Compose (un fichero YAML)
  2. Uso del archivo Docker (empleado para construir una imagen Docker)
  3. Uso de Docker Volume

Comencemos.

2
0 831
Artículo Luis Angel Pérez Ramos · mar 15, 2024 1m read

Aquí estamos nuevamente otro viernes más con la predicción de la Quiniela.

Esta jornada la conformarán partidos de la jornada 29 de la Primera División y la 31 de Segunda División.

Las predicciones para la Primera División serán:

Y para Segunda División:

La predicción nos dará la siguiente Quiniela:

Pues listo, ¡suerte a todos!

2
0 203
Artículo Luis Angel Pérez Ramos · mar 8, 2024 1m read

Aquí estamos nuevamente otro viernes más con la predicción de la Quiniela.

Esta jornada la conformarán partidos de la jornada 28 de la Primera División y la 30 de Segunda División.

Las predicciones para la Primera División serán:

Y para la Segunda División:

Esto nos deja la siguiente quiniela:

¡Suerte a todos!

0
0 207
Artículo Luis Angel Pérez Ramos · feb 29, 2024 5m read

Como seguramente ya sabréis la mayoría de vosotros, desde aproximadamente finales de 2022 InterSystems IRIS incluyo la funcionalidad de almacenamiento columnar a su base de datos, pues bien, en el artículo de hoy vamos a ponerla a prueba en comparación con el almacenamiento en filas habitual.

Almacenamiento columnar

¿Cuál es la principal característica de este tipo de almacenamiento? Pues bien, si consultamos la documentación oficial veremos esta fantástica tabla que nos explica las principales características de ambos tipos de almacenamiento (por filas o por columnas):

2
0 209
Artículo Luis Angel Pérez Ramos · feb 26, 2024 5m read

He estado desarrollando una aplicación web que utiliza IRIS como back-end. Trabajé en ella con acceso no autenticado. Estoy llegando al punto en el que me gustaría implementarla para los usuarios, pero primero necesito añadir la autenticación. En vez de utilizar la contraseña para la autenticación predeterminada de IRIS (con contraseña), me gustaría que los usuarios iniciaran sesión con el Inicio de Sesión Único (SSO) de mi organización, o con algún otro proveedor de identidad popular como Google o GitHub. He leído que OpenID Connect es un estándar de autenticación común, y que es admitido por IRIS. ¿Cuál es la forma más sencilla de ponerlo en marcha?

Ejemplo 1: una aplicación CSP simple

La documentación muestra una opción bastante sencilla para utilizar una aplicación CSP como cliente de OpenID Connect.

Los pasos para ello son los siguientes:

  1. Configurar el servidor OAuth 2.0 y el cliente en IRIS. Consultad la sección "Configuración de Caché" del estupendo artículo de Daniel Kutac para obtener más información.

  2. Copie la rutina OAUTH2.ZAUTHENTICATE del repositorio de ejemplos en GitHub en el Namespace %SYS y renombrarlo como ZAUTHENTICATE.

  3. Habilitar la autenticación delegada en todo el sistema.

  4. Crear una página de inicio de sesión personalizada que se extienda desde %OAuth2.Login, y anule el método DefineParameters para especificar el nombre de la aplicación OAuth 2.0 y los ámbitos:

Class MyOAuth2.Login Extends %OAuth2.Login
{

ClassMethod DefineParameters(Output application As %String, Output scope As %String, Output responseMode As %String)
{
    Set application="my application name"
    Set scope="openid profile email"
    Set responseMode=..#RESPONSEMODE
    Quit
}

}
  1. Habilitar la aplicación web para la autenticación delegada y establecer la página de inicio de sesión personalizada en MyOAuth2.Login.cls.

  2. Un truco final: Para que la página de inicio de sesión personalizada funcione, el usuario CSPSystem en IRIS necesita que se le conceda específicamente acceso de LECTURA (READ) a la base de datos en la que vive MyOAuth2.Login.cls.

En ese momento, el inicio de sesión debería "simplemente funcionar": visitar una página CSP en esa aplicación web redirigirá a la página de inicio de sesión en el proveedor de identidad. Después de iniciar sesión, el usuario tendrá una sesión CSP autenticada. Su $username será igual a su identificador de sujeto de SSO/Google/GitHub/donde sea, así que puedo utilizar la autorización incorporada de IRIS para determinar a qué cosas dar acceso.

Ejemplo 2: el problema con REST

¿Qué ocurre si la aplicación web utiliza un controlador REST? El proceso anterior no funciona. Si una aplicación web está habilitada para REST, no hay forma de definir una página de inicio de sesión personalizada. He descubierto que se necesitan algunos pasos más para solucionar este problema.

  1. Crear una aplicación web independiente que no tenga REST habilitado. La ruta de esa aplicación debe comenzar con la ruta de la aplicación REST. Por ejemplo, si la aplicación REST se llama "/csp/api", podríamos llamar a esta nueva aplicación "/csp/api/login". Hay que habilitar la autenticación delegada y establecer la página de inicio de sesión personalizada en la página MyOAuth2.Login.cls.

  2. Establecer la Ruta de la Cookie de Sesión en esta nueva aplicación como la misma que la de la aplicación REST: por ejemplo, "/csp/api". Esto permitirá que ambas aplicaciones compartan una sesión CSP.

  3. Añadir una página CSP a esta nueva aplicación que actuará como "página de inicio". Un usuario deberá acceder primero a esta página para establecer su sesión. Este es un ejemplo que redirige a un endpoint en la API REST tras el inicio de sesión:

Class App.Home Extends %CSP.Page
{

ClassMethod OnPage() As %Status [ ServerOnly = 1 ]
{
    &html<;>
    return $$$OK
}

}
  1. Asegurarsese de que la clase del controlador REST tiene el parámetro UseSession anulado a true.
Class API.REST Extends %CSP.REST
{

Parameter UseSession As BOOLEAN = 1;

XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{

}

ClassMethod Test() As %Status
{
    write { "username": ($username) }.%ToJSON()
    return $$$OK
}

}

En este punto, el inicio de sesión en la aplicación REST también "simplemente funcionará". El usuario visitará la página de inicio, será redirigido al inicio de sesión SSO y, finalmente, volverá a la aplicación REST, donde tendrá una sesión CSP autenticada. Hasta donde yo sé, ésta es la forma más sencilla de añadir OpenID Connect a una aplicación IRIS REST.

Otra opción es utilizar la muestra "REST.ZAUTHENTICATE" del repositorio de muestras de seguridad. Esto espera que el front-end adjunte un token de portador OAuth 2.0 a cada solicitud. Sin embargo, no hay una forma definida para que el front-end obtenga este token de acceso. Habrá que implementar ese flujo OAuth en JavaScript (o usar una librería como angular-oauth2-oidc.) También hay que asegurarse de que la aplicación JavaScript y el back-end de IRIS coinciden en todos los elementos de la configuración como el endpoint emisor del servidor de autorización, el id de cliente OAuth 2.0, etc. He descubierto que esto no es una tarea sencilla.

Tengo curiosidad por saber si alguien más utiliza OpenID Connect para autenticar una aplicación IRIS. ¿Existe una forma aún más sencilla? ¿O merece la pena utilizar el enfoque más complicado con tokens de portador? Podéis comentarlo más abajo.

0
0 290
Artículo Luis Angel Pérez Ramos · feb 20, 2024 5m read

Finalizamos esta serie de artículos de SMART On FHIR con Auth0 e InterSystems IRIS FHIR Repository revisando nuestra aplicación desarrollada en Angular 16.

Recordemos como es la arquitectura definida para nuestra solución:

Nuestra aplicación de front-end corresponde con la segunda columna y como véis será la encargada de dos cosas:

  1. Redireccionar la petición de login a Auth0 y recibir la respuesta.
  2. Enviar y recibir la respuesta de las solicitudes vía REST enviadas al servidor FHIR.

Angular

5
0 308
Artículo Luis Angel Pérez Ramos · feb 16, 2024 7m read

En el pasado artículo presentamos la arquitectura de nuestro proyecto de SMART On FHIR, así que es hora de meternos en harina y empezar a configurar todos los elementos que vamos a necesitar.

Primeramente comenzaremos con Auth0.

Configuración de AUTH0

Comenzaremos creando una cuenta de Auth0 con un correo válido, una vez dados de alta deberemos crear nuestra primera aplicación, y lo haremos desde el menú de la izquieda:

En nuestro ejemplo la aplicación será del tipo Single Page Web Application al tratarse una aplicación desarrollada en Angular 16. Seleccionamos dicha opción y pulsamos "Create".

0
0 227
Artículo Luis Angel Pérez Ramos · feb 14, 2024 4m read

Introducción

Recientemente participé en un hands-on fantásticamente organizado por @Patrick Jamieson en el que se configuraba una aplicación de Angular junto con un servidor FHIR de IRIS siguiendo los protocolos definidos por SMART On FHIR y me resultó fráncamente interesante, por lo que me puse por mi cuenta a desarrollar mi propia aplicación de Angular y así aprovechar lo aprendido para publicarlo en la comunidad.

SMART On FHIR

Veamos que nos dice Google de SMART On FHIR:

0
0 212
Artículo Luis Angel Pérez Ramos · feb 1, 2024 1m read

Venga que tenemos ya encima la siguiente jornada de la Quiniela. Esta vez nos adelantamos un día para que luego no digáis que se os echa el tiempo encima.

Para esta jornada tenemos novedades y es que, como en todo proyecto que implica el uso de Machine Learning, la calidad de los datos es elemental y para nuestro caso esa calidad se refleja en el "frescor" de los mismos, no son igual de relevantes los resultados de hace 2 años que los obtenidos en esta temporada, para ello he hecho una pequeña modificación que descarta los partidos de la temporada 21/22 y se ha conseguido una mejora en el acierto del modelo de un 2% ascendiendo de un 56% a un 58%.

Aquí tenéis el análisis de nuestro modelo obtenido desde IRIS:

0
0 202
Artículo Luis Angel Pérez Ramos · feb 1, 2024 1m read

El pasado viernes 17 de noviembre me encontré de repente un error en el que ZPM mostraba un error diciendo:

¡ERROR! La apertura del objeto falló porque no se encontró el valor clave 'Nombre' de 'x' (ERROR! Object open failed because 'Name' key value of 'xx' was not found)

Busqué en Google pero no encontré nada que me ayudara. Paso a paso fui capaz de concluir que:

  1. Este es el mensaje de error para el error 5770, también conocido como $$$KeyValueNotFoundOpen.

  2. En ObjectScript, este error puede ser generado por llamadas a NameOpen, en el que 'Name' es la primera parte entre comillas del mensaje de error.

  3. El estado de error se genera cuando hay una llamada a ##class(yy.zz).NameOpen("xx", , .sc), en la que yy.zz hereda de %Persistent y tiene un índice llamado 'Name" y el valor "xx" no existe en ese Índice.

Podéis consultar la documentación: General error messages y el archivo %occErrors (tenéis que #include)

En mi caso, parece que hay un problema de cambio de NAMESPACE.

Pensé que publicar esto podría ser útil para aquellos que se encuentren con este confuso mensaje de error.

0
0 137
Artículo Luis Angel Pérez Ramos · ene 29, 2024 4m read

Preguntas frecuentes de InterSystems

Si el sistema no se para durante 24 horas, los archivos journal serán eliminados a las 0:30 según la "Configuración de la eliminación de archivos journal".

Una posible causa de que los archivos journal permanezcan más tiempo del establecido en la "Configuración de la eliminación de archivos journal" es que hay transacciones que permanecen abiertas.

En ese caso, se podrá eliminar el archivo journal buscando procesos que estén ejecutando transacciones y finalizando las transacciones.

1
0 134
Artículo Luis Angel Pérez Ramos · ene 16, 2024 9m read

La base de datos documental de InterSystems IRIS (DocDB) ofrece un enfoque flexible y dinámico para gestionar datos. DocDB aprovecha el poder de JSON (JavaScript Object Notation), proporcionando un entorno sin esquemas para el almacenamiento y la recuperación de datos.

Es una herramienta poderosa que permite a los desarrolladores evitar un montón de código repetitivo cuando se interactúra con aplicaciones existentes, serialización, paginación e integración. La sencillez del uso de DocDB con los servicios y operaciones API REST permite mejorar en la producción y gestión de APIs.

 Aquí podéis revisar la documentación oficial. En este artículo mostraremos un caso de uso en el que DocDB encaja perfectamente.

0
0 127
Artículo Luis Angel Pérez Ramos · ene 12, 2024 1m read

Retomamos con el nuevo año las predicciones de la Quiniela, siendo este fin de semana las jornadas correspondientes a la 20ª de Primera División y a la 22ª de Segunda División.

Los partidos que conforman la Quiniela son los siguientes:

Las predicciones para la Primera División son las siguientes:

Y para la Segunda División:

Por lo que la predicción de la Quiniela es esta:

Y para los que juguéis con apuestas dobles:

Mallorca - Celta: 1X

Sporting - Huesca: 12

Andorra - Leganés: 12

0
0 155
Artículo Luis Angel Pérez Ramos · dic 31, 2023 5m read

csp-log-tutorial

Requisitos previos

Aseguraos de tener git instalado.

Creé una carpeta git dentro del directorio mgr de IRIS. Hice clic derecho en la carpeta git y elegí "Git Bash Here" en el menú contextual.

git clone https://github.com/oliverwilms/csp-log-tutorial.git

Clonad mi repositorio de GitHub csp-log-tutorial si queréis probarlo vosotros mismos.

En este tutorial, describiré cómo intento utilizar los archivos access.log y CSP.log en los pods de WebGateway para rastrear las solicitudes y respuestas.

Mi equipo trabaja con contenedores IRIS que se ejecutan en la plataforma de contenedores Red Hat OpenShift (Kubernetes) en AWS. Implementamos tres pods con el WebGateway que reciben solicitudes a través de un Balanceador de carga de red (Network Load Balancer). Las solicitudes se procesan en una producción de Interoperabilidad que se ejecuta en tres pods de computación. Usamos una producción como banco de mensajes que se ejecuta en pods de datos replicados (mirrored) como un lugar para revisar todos los mensajes procesados por cualquier pod de computación.

Probamos nuestras interfaces usando pods de alimentación para enviar muchos mensajes de solicitud al Balanceador de carga de red. Enviamos 100 000 mensajes y probamos cuánto tiempo llevaría procesar todos los mensajes en el banco de mensajes y registrar las respuestas en los alimentadores. El recuento de mensajes almacenados en el banco de mensajes y las respuestas recibidas por los alimentadores coinciden con el número de mensajes entrantes.

Recientemente nos pidieron que probáramos la tolerancia ante fallos de los pods y de la Zona de Disponibilidad. Borramos pods individuales con o sin fuerza y periodo de gracia. Simulamos un fallo en la zona de disponibilidad al negar todo el tráfico entrante y saliente a una subred (una de las tres zonas de disponibilidad) a través de la consola de AWS mientras los alimentadores envían muchos mensajes de solicitud al Balanceador de carga de red. Ha sido bastante difícil contabilizar todos los mensajes enviados por los alimentadores.

El otro día, mientras un alimentador enviaba 5 000 mensajes, simulamos el fallo de la Zona de disponibilidad. El alimentador recibió 4 933 respuestas. El banco de mensajes almacenó 4 937 mensajes.

Almacenamos access.log y CSP.log en el directorio de datos de los pods de WebGateway. Añadimos esta línea al Dockerfile de nuestra imagen de WebGateway:

RUN sed -i 's|APACHE_LOG_DIR=/var/log/apache2|APACHE_LOG_DIR=/irissys/data/webgateway|g' /etc/apache2/envvars

Configuramos el Nivel de Registro de Eventos (Event Log Level) en Web Gateway en Ev9r.!

captura de pantalla

Creé los subdirectorios data0, data1 y data2 para nuestros tres pods de webgateway. Copié los archivos CSP.log y access.log de nuestros tres pods de webgateway almacenados en volúmenes persistentes:

oc cp iris-webgateway-0:/irissys/data/webgateway/access.log data0/access.log
oc cp iris-webgateway-1:/irissys/data/webgateway/access.log data1/access.log
oc cp iris-webgateway-2:/irissys/data/webgateway/access.log data2/access.log
oc cp iris-webgateway-0:/irissys/data/webgateway/CSP.log data0/CSP.log
oc cp iris-webgateway-1:/irissys/data/webgateway/CSP.log data1/CSP.log
oc cp iris-webgateway-2:/irissys/data/webgateway/CSP.log data2/CSP.log

Termino con tres subdirectorios, cada uno conteniendo archivos access.log y CSP.log.

Contamos el número de solicitudes procesadas en cualquier pod de webgateway usando este comando:

cat access.log | grep InComingOTW | wc -l

Contamos el número de solicitudes y respuestas registradas en CSP.log usando este comando:

cat CSP.log | grep InComingOTW | wc -l

Normalmente esperamos el doble de líneas en CSP.log en comparación con access.log. A veces encontramos más líneas en CSP.log que el doble esperado de líneas en access.log. Recuerdo haber visto menos líneas de las esperadas en CSP.log en comparación con lo que había en access.log al menos una vez. Sospechamos que esto se debió a una respuesta 500 registrada en access.log, que no se registró en CSP.log, correctamente porque el pod de webgateway se terminó.

¿Cómo puedo analizar muchas líneas de solicitudes y explicar lo sucedido?

Creé las clases persistentes otw.wgw.apache y otw.wgw.csp para importar líneas desde access.log y CSP.log. access.log contiene una línea por solicitud e incluye el estado de la respuesta. CSP.log contiene líneas separadas para solicitudes y respuestas.

Abrid el terminal de IRIS e importad las clases en el directorio src desde el repositorio csp-log-tutorial que habíamos clonado anteriormente:

Set src="C:\InterSystems\IRISHealth\mgr\git\csp-log-tutorial\src"
Do $system.OBJ.LoadDir(src,"ck",,1)

Si no tenéis vuestro propio archivo CSP.log para analizar, podéis importar el que se proporciona en el repositorio csp-log-tutorial:

Set pFile="C:\InterSystems\IRISHealth\mgr\git\csp-log-tutorial\wg2_20230314_CSP.log"
Do ##class(otw.wgw.csp).ImportMessages(pFile,.pLines,.pFilter,1)

pLines y pFilter son parámetros de salida que no son tan importantes en este momento. pImport controla si el Extent se elimina antes de importar los datos.

Después de importar los datos podemos ejecutar consultas SQL como esta:

SELECT count(*) FROM otw_wgw.csp where wgEvent='WebGateway.ProcessRequest'

Si el recuento devuelto es un número impar, indica que hay un desajuste entre las solicitudes y las respuestas.

Podemos ejecutar la siguiente consulta para identificar los nombres de archivo en las solicitudes que no tienen una respuesta coincidente:

select zFilename, count(*) from otw_wgw.csp group by zFilename having count(*) = 1

Tened en cuenta que utilizo el método CalcFilename para establecer la propiedad zFilename antes de guardar una línea importada del archivo CSP.log.

También incluí un archivo access.log de muestra, que podemos importar así: Si no tenéis vuestro propio archivo CSP.log para analizar, podéis importar el que se proporciona en el repositorio csp-log-tutorial:

Set pFile="C:\InterSystems\IRISHealth\mgr\git\csp-log-tutorial\wg2_20230314_access.log"
Do ##class(otw.wgw.apache).ImportMessages(pFile,.pLines,.pFilter,1)

Podemos ejecutar esta consulta para obtener el recuento de mensajes relacionados con este tutorial:

SELECT count(*) FROM otw_wgw.apache where Text like '%tutorial%'

¿Qué más me gustaría hacer si encuentro tiempo?

Me gustaría combinar los datos de las tablas apache y csp y posiblemente incluir datos recogidos de los pods de computación.

Creo que puedo utilizar los datos de access.log para determinar cuándo hubo una interrupción en un pod de webgateway.

0
0 108
Artículo Luis Angel Pérez Ramos · dic 29, 2023 6m read

Parece que fue ayer cuando hicimos un pequeño proyecto en Java para probar el rendimiento de IRIS, PostgreSQL y MySQL (podéis revisar el artículo que escribimos allá por Junio al final de este artículo). Si recordáis IRIS se mostró superior a PostgreSQL y claramente superior a MySQL en las inserciones, no habiendo gran diferencia en las consultas.

Poco después @Dmitry Maslennikov me dijo "¿Por qué no pruebas desde un proyecto en Python?" pues bien, aquí está la versión en Python de las pruebas que realizamos mediante las conexiones JDBC previamente.

2
0 230
Artículo Luis Angel Pérez Ramos · dic 19, 2023 1m read

Bueno, intentemos recuperarnos de la desastrosa jornada pasada de la Quiniela con una nueva predicción. Esto empieza a ser como la Lotería de Navidad, ¡cómo no vas a jugar si tu compañero de trabajo ha jugado! Imagina que le toca y a ti no...

A ver que nos dice para Primera División:

Y para Segunda:

Lo que nos da la siguiente Quiniela:

Según los porcentajes que asigna a cada equipo, las posibles combinaciones dobles serían:

Mallorca - Osasuna: 12

Villarreal - Celta: 1X

Athletic - Las Palmas X2

Muy bien ve a Las Palmas para ganar al Athletic en su casa después de haber vapuleado al Atlético Madrid...

0
0 155
Artículo Luis Angel Pérez Ramos · dic 15, 2023 1m read

¡Cómo íbamos a faltar a nuestra cita semanal con la fortuna!

Vamos con una nueva predicción de la próxima jornada de la Quiniela. Estos son los partidos que entran en la Quiniela:

Veamos cuales son las predicciones para 1ª División:

Y las correspondientes a 2ª:

Por lo que la Quiniela resultante sería de la siguiente manera:

Viendo las probabilidades que se dan para cada partido las apuestas dobles recomendadas serían:

Celta - Granada: 1X

Sporting - Leganés: 12

Levante - Huesca: X2

0
0 127
Artículo Luis Angel Pérez Ramos · dic 8, 2023 1m read

En InterSystems no descansamos ni los días festivos, así que aquí va una nueva predicción de la Quiniela, en esta ocasión con la jornada 16ª de Primera División y la 19ª de Segunda División.

Estos son los partidos que conforman la jornada:

Veamos la predicción correspondiente a Primera División:

Y ahora la predicción para Segunda División:

Veamos la Quiniela como quedaría:

Para los que juguéis con dobles, atendiendo a las probabilidades tendríamos:

Alavés - Las Palmas: X2

Burgos - Mirandés: 1X

Rayo Vallecano - Celta: 1X

Alea jacta est!

1
0 154
Artículo Luis Angel Pérez Ramos · dic 5, 2023 3m read

¡Bienvenidos a todos! 

En este breve artículo quería presentar un ejemplo de uso que seguramente a muchos de los que trabajéis con IRIS como backend de vuestras aplicaciones web os hayáis encontrado en más de una ocasión y sería el de la necesidad de enviar desde el frontend un archivo a vuestro servidor.

0
1 234
Artículo Luis Angel Pérez Ramos · dic 5, 2023 3m read

Preguntas frecuentes de InterSystems

Las definiciones de clases creadas por los usuarios se almacenan en clases de definición de clases. Estas se pueden utilizar para obtener una lista de definiciones de clases desde un programa.

Nota: Las clases de definición de clase se refieren a todas las clases contenidas en el paquete %Dictionary.

En el siguiente código de muestra, se obtiene una lista de definiciones de clases utilizando la consulta Resumen de la clase %Dictionary.ClassDefinitionQuery.

0
0 102
InterSystems Official Luis Angel Pérez Ramos · dic 1, 2023

Cuando AMD publicó el estándar x86-64 en 1999, pocos sabían que estaban inventando lo que se convertiría en la arquitectura de facto para las CPUs de servidor. Pero las CPUs de hoy no son iguales a las que se producían hace 20 años – ahora tienen extensiones para todo, desde Extensiones Vectoriales Avanzadas (AVX) hasta Virtualización Asistida por Hardware (VT-d).

A InterSystems le gustaría aprovechar mejor estas nuevas extensiones en las próximas versiones de InterSystems IRIS. Aunque nuestros compiladores son lo suficientemente inteligentes para crear código optimizado para muchas situaciones, algunas optimizaciones solo se pueden activar si se finaliza específicamente el soporte a procesadores que no tienen ese conjunto de instrucciones. Además, nos resulta cada vez más difícil mantener modelos de CPU más antiguos para realizar pruebas.

0
0 116