Limpiar filtro
Artículo
Pierre-Yves Duquesnoy · 26 mar, 2025
Las versiones recientes de IRIS contienen varios cambios que afectan a la instalación y condiguración de la herramienta OpenSource WebTerminal.
En este articulo, vamos a ver los pasos de instalación, y aprender a buscar y resolver los errores del WebGateway paso a paso.Esta guía de instalación se ha realizado con la versiones siguientes, las más recientes soportadas a fecha de marzo de 2025:
Windows 2022 on Internet Information Server (IIS)
IRIS 2024.3
Package Manager 0.9.2
WebTerminal 4.9.6
IRIS2024.3 es la primera versión de IRIS que no incluye un Servidor Web como parte de la instalación (con la excepción de las versiones "Community" de capacidades más limitadas, que siguen incluyendo un Servidor Web Apache para simplificar el "on-boarding"). En consecuencia, es importante instalar y configurar rimero el Servidor Web IIS antes de proceder a la instalación de IRIS. De esta manera, el instalador de IRIS detecta la presencia del IIS, y propose instalar/configurar un WebGateway que redirige las peticiones Web desde IIS a IRIS. Es posible realizar los pasos en orden inverso (instalar IRIS, despues instalar IIS), pero este requiere la instalación y configuración manual del componente Webgateway de InterSystems.
Guia Rapida para los impacientes
Algunos no querreis leer el articulo entero, resumo aqui los elementos principales de esta guía:
Instalar IIS primero
Añadir protocolo WebSockets
Instalar IRIS
con la opción de modificar la configuración de IIS
Instalar el ZPM en IRIS con
s version="latest" s r=##class(%Net.HttpRequest).%New(),r.Server="pm.community.intersystems.com",r.SSLConfiguration="ISC.FeatureTracker.SSL.Config" d r.Get("/packages/zpm/"_version_"/installer"),$system.OBJ.LoadStream(r.HttpResponse.Data,"c")
Configurar el ZPM para que acceda a los package del community
zpm "enable -community"
Instalar WebTerminal en el namespace USER
zpm "install webterminal"
Añadir el privilegio Publico de "READ" sobre el recurso %DB_USER
en IIS:
Añadir las aplicaciones /terminal y /terminalsocket a IIS. Redigirlas para usar el module CSPms del Webgateway, sin verificar si el archivo existe.
Connectar con
http://localhost/terminal/
Y Ahora, pasamos a la guía completa con más detalles...
Instalación y configuración de IIS
Un requerimiento del WebTerminal es el uso de WebSockets, protocolo que no esta habilitado por defecto en IIS.
El Windows Server Manager permite añadir "Roles de Servidor", e instalar IIS:
Se escoge IIS:
Y en las opciones siguientes, se despliega "Aplication Development" para escoger la opción de "WebSockets":
Instalación de IRIS
Se instala IRIS 2024.3. Como ya esta instalado IIS, en un paso del Wizard de instalación, se pregunta si se quiere configurar IIS. Este paso instala y configura el InterSystems WebGateway como Modulo de IIS:
Instalación del Package Manager IPM
El codigo y la documentación de InterSystems Package Manager (IPM anteriormente ZPM) esta en
https://github.com/intersystems/ipm
Para la instalación, se puede usar el comando descrito en el README.MD de github
s version="latest" s r=##class(%Net.HttpRequest).%New(),r.Server="pm.community.intersystems.com",r.SSLConfiguration="ISC.FeatureTracker.SSL.Config" d r.Get("/packages/zpm/"_version_"/installer"),$system.OBJ.LoadStream(r.HttpResponse.Data,"c")
Y Despues, usar el siguiente comando para permitir el acceso al los Packages de la communidad y habilitar el Package Manager en todos los namespaces
zpm "enable -community"
Instalación del WebTerminal
zpm "install webterminal"
En este paso, se puede validar que el aceso al WebTerminal todavia no esta operacional, ya que IIS + el Webgateway no redirigen la URL /terminal/ a la instancia de IRIS
http://127.0.0.1/terminal/
Abrimos la aplicación de configuración de IIS, para añadir las 2 aplicaciones Web Siguientes
Aplicación
/terminal
/terminalsocket
/terminal y /terminalsockets:
A Continuación se debe definir el handler Mapping para esta aplicación, de manera que todas la peticiones estén gestionadas por el WebGateway:
Además, en el "Request Restrictions", es importante permitir las llamadas sin validar que exista un fichero correspondiente. Esto se hace sacando el "check" al "Invoke handler only if request is mapped to:".
Con estos cambios realizados, el IIS ya reenvia las peticiones http://localhost/terminal/ al WebGateway, y la configuración por defecto del Web Gateway redirige estas peticiones a IRIS.
Se puede validar este paso haciendo una traza de las peticiones del Web gateway mediante la pagina de configuración disponible en http://localhost/csp/bin/system/Module.cxw
En el menu "View HTTP Trace" s puede ver la petición y la respuesta de IRIS (un Error 401).
En IRIS, se puede investigar la causa del error 401, con las paginas del Audit, que informan de la naturaleza del error interno:
Menu de Portal de Gestión "Administration" / "Security" / "Auditing" / "Configure System Events".
Para ello, hace falta añadir el "System Event" de "Protect" a la lista de Eventos a registar, y cambiar su estado a "Yes":
Desde el Log de Audit, haciendo una búsqueda sobre los últimos errores, podemos ver 2 errores vinculados con la peticion a /terminal/:
Y los detalles del Error Protect:
La Aplicacion WebTerminal ha sido instalada en el namespace "USER", cuya base de datos esta protegida por el recurso "%DB_USER". El CSP Gateway, cuando establece la conexión e intenta acceder a la aplicación REST /terminal en este namespace, necesita permisos de lectura para responder a las peticiones HTTP Options (preflight requests para CORS).La solución es dar el permiso publico de Lectura sobre el recurso %DB_USER:
Se hace con el menu "System" /" Security" / "Resources", seleccionando %DB_USER, y añadiendo "Read" como permiso publico.
Y finalmente, se puede volver a hacer la prueba y acceder al terminal, introduciendo usuario y password:
http://localhost/terminal/
Anuncio
Esther Sanchez · 19 abr, 2022
¡Hola desarrolladores!
Día a día, el equipo de la Comunidad de Desarrolladores hace que ésta sea un lugar mejor para los desarrolladores de InterSystems. En esta nueva publicación os mostramos cómo hemos mejorado la Comunidad en los últimos meses.
Principales novedades:
Edición del perfil de usuario
Nueva página de Concursos para los concursos de artículos técnicos
Contador de caracteres y palabras
Os explicamos cada cambio más abajo.
Edición del perfil de usuario
¡Un diseño completamente nuevo! Ahora es más fácil añadir información a tu perfil.
En el bloque "Información de contacto", puedes añadir tu número de teléfono profesional, cambiar tu foto y la dirección de email en la que quieres recibir las notificaciones de la Comunidad.
En los siguientes bloques, puedes añadir más información sobre ti, así como enlaces a tus perfiles en redes sociales. ¡Así podemos estar todos conectados!
Esta información aparecerá en tu perfil, y también en las publicaciones en las que seas el autor:
En la "Configuración de la cuenta", puedes especificar tu zona horaria, a quién quieres que se muestre tu información de contacto y también configurar las notificaciones de los Mensajes Directos.
Nueva página de Concursos para los concursos de artículos técnicos
Como sabéis, en 2021 lanzamos un nuevo concurso para los miembros de la Comunidad de Desarrolladores de InterSystems Community - el Concurso de Artículos Técnicos.
Para cada concurso, hemos creado una página nueva, con un diseño nuevo y nuevas funcionalidades:
Primer Concurso de Artículos Técnicos
Segundo Concurso de Artículos Técnicos
Podéis encontrar la nueva página de Concursos en la sección "Eventos" en el menú de la página de inicio de la Comunidad:
Si aparece un punto al lado de "Concurso de Artículos Técnicos" significa que el concurso está activo en ese momento.
En la página de un concurso activo puedes añadir fácilmente un artículo haciendo clic en el botón "Participa en el concurso". Las reglas del concurso aparecen en la columna de la izquierda . Y los artículos que participan en el concurso aparecen a la derecha.
En cada artículo, puedes ver una etiqueta con el número de "likes". Cuando finaliza el concurso, el contador se para y muestra el número total de "likes" de cada artículo (nota: esto no limita el hecho de poder seguir haciendo clic en "Me gusta" en los artículos).
También cuando finaliza el concurso aparece una etiqueta con el número de votos de los Expertos.
Contador de caracteres y palabras
Hemos implementado un contador de caracteres y palabras en el editor de la Comunidad, para poder controlar fácilmente la cantidad de contenido de cada publicación.
Al escribir cualquier texto en la página de creación de publicaciones, el editor lee las palabras y los caracteres y muestra el conteo de forma automática en la esquina inferior izquierda.
Nota: El contador solo funciona en el formato WYSIWYG.
¡Esperamos que os resulten útiles estos cambios!
Podéis solicitar mejoras o reportar errores en el GitHub de la Comunidad. O en los comentarios de esta publicación, claro.
¡Muchas gracias!
Artículo
Dani Fibla · 4 nov, 2022
Según la consultora IDC, el 80% de todos los datos producidos son NoSQL. Mira:
Hay documentos digitales y escaneados, textos online y offline, contenido BLOB (objeto binario grande) en SQL, imágenes, vídeos y audio. ¿Te imaginas una iniciativa de Analítica Corporativa sin todos estos datos para analizar y apoyar las decisiones?
En todo el mundo, muchos proyectos están utilizando tecnologías para transformar estos datos NoSQL en contenido de texto, para poder analizarlo. Fíjate:
Imágenes escaneadas e imágenes con texto extraído usando OCR (Google Tesseract es una buena opción);
Vídeos analizados con Visual Computing soportado por Machine Learning (OpenCV es una buena opción) y transformando los resultados en conjuntos de datos JSON o XML;
Contenido externo de Internet y Scraping en Redes Sociales usando Python y almacenando los resultados en contenido de texto.
Todo este contenido extraído se guarda como texto y podría ser analizado con motores de PLN, como InterSystems IRIS Text Analytics (iKnow).
Hay varias opciones para hacerlo:
1. Guardar en una tabla los datos de texto extraídos y crear un Dominio NLP (PLN en inglés) para esa tabla, mira:
2. Usar una API NLP para enviar en tiempo real a NLP el texto extraído, así:
$SYSTEM.iKnow.IndexString("OcrNLP", pRequest.FileName, pRequest.Text, , 0, .src)
3. Guardar el texto extraído en archivos de texto y configurar la localización de los datos en una carpeta de archivos.
4. Crear un canal RSS para que NLP consuma el texto extraído.
Ahora, con tu NLP configurado puedes analizar los resultados:
Sin esfuerzo, IRIS realizó el ranking de conceptos, agrupó entidades similares (cosas, hechos, nombres, sustantivos) y creó las relaciones entre entidades (conceptos), el CRC - Conceptos/Relaciones/Conceptos. Fue posible analizar la ruta para llegar a un concepto y se pueden usar colores para conocer características como sentimientos, negaciones y otras, incluyendo características modeladas en un diccionaria customizado.
Para aprender y perfeccionar los resultados, IRIS NLP utiliza diccionarios, como: https://github.com/intersystems-community/irisdemo-demo-twittersentiment/raw/master/twittersentiment/twittersentiment-atelier-project/IRISDemo/NLP/Sentiment.cls
Finalmente, el análisis se puede consumir usando la API nativa de IRIS con Java, .NET, Python y Node.js. También se puede consumir como una API REST , mira: https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GIKNOW_rest#GIKNOW_rest_swagger
Para ver todos los detalles de estos proyectos:
1. https://openexchange.intersystems.com/package/Twitter-Sentiment-Analysis-with-IRIS
2. https://openexchange.intersystems.com/package/COVID-19-iKnow-Content-Navigator
3.https://openexchange.intersystems.com/package/OCR-Service
Artículo
Ricardo Paiva · 16 dic, 2019
¡Hola a tod@s!
Al usar Studio, ODBC o una conexión de terminal a Caché o Ensemble, quizás se haya preguntado cómo podría implementar una conexión segura. Una opción es agregar TLS (también conocido como SSL) a su conexión. Las aplicaciones cliente de Caché (TELNET, ODBC y Studio) todas entienden cómo agregar TLS a la conexión. Tan solo es necesario configurarlas para hacerlo.
Configurar esos clientes es más fácil en la versión 2015.1 y posteriores. A continuación discutiré este nuevo método. Si ya usa el viejo método, este seguirá funcionando, pero le recomiendo considerar pasarse al nuevo.
Contexto
Estas aplicaciones cliente pueden instalarse en una máquina que no tenga la instalación de servidor. No pueden depender de tener acceso a los lugares normales para guardar configuraciones, tales como la base de datos CACHESYS o el archivo cpf. En vez, su configuración sobre qué certificados o protocolos aceptar se almacena en un archivo de texto. Muchos de los ajustes contenidos en este archivo son similares a los ajustes de una configuración SSL/TLS en el portal de gestión.
¿Dónde está el archivo de configuración?
Deberá crear su propio archivo. El instalador del cliente no crea uno por usted.
De forma predeterminada, el archivo de configuración se llama SSLDefs.ini y debería colocarse en el directorio InterSystems\Cache bajo el directorio para archivos de programa comunes de 32 bits. Este directorio se encuentra en la variable de entorno de Windows CommonProgramFiles(x86) en Windows de 64 bits o en CommonProgramFiles en Windows de 32 bits.
Por ejemplo, en Windows 8.1, el archivo predeterminado es:
C:\Program Files (x86)\Common Files\InterSystems\Cache\SSLdefs.ini
Si desea cambiar esto, deberá indicarle a los ejecutables del cliente dónde encontrar el archivo de configuración. Para hacer esto, defina la variable de entorno ISC_SSLconfigurations y configúrela para toda la ruta y el nombre de archivo de su archivo. Puede que necesite permisos de administrador para hacerlo.
¿Qué hay en el archivo de configuración?
El archivo tiene dos tipos de secciones. El primer tipo vincula conexiones con configuraciones TLS. Por ejemplo, puede que le indique a Studio usar la sección llamada "Default Settings" para encontrar sus parámetros TLS al conectarse a development.intersystems.com.
El segundo tipo define los ajustes de TLS a usar para la conexión. Por ejemplo, esto definiría qué Autoridad de Certificación debería esperarse que firme el certificado del servidor. Los ajustes de estas secciones son muy similares a los ajustes de una configuración SSL/TLS en un servidor Caché o Ensemble.
El primer tipo de selección se ve así:
[Development Server]
Address=10.100.0.17
Port=1972
TelnetPort=23
SSLConfig=DefaultSettings
El nombre entre corchetes puede ser lo que usted desee. Sólo está ahí para permitirle hacer un seguimiento más fácil de qué conexión se trata.
Los ajustes de Address (dirección), Port (puerto) y TelnetPort (puerto Telnet) se usan para decidir qué conexiones deberían coincidir con esta sección. Se pueden usar ya sea direcciones IP o nombres DNS para la dirección en clientes 2016.1 o posteriores. Tanto la dirección como ya sea el puerto o el puerto Telnet deben coincidir con la conexión de la aplicación cliente para poder usar la configuración.
El parámetro final (SSLConfig) es el nombre de la configuración de la cual se tomarán los ajustes TLS. Debe coincidir con el nombre de una de las configuraciones del archivo.
El segundo tipo de sección se ve así:
[DefaultSettings]
VerifyPeer=2
VerifyHost=1
CAfile=c:\InterSystems\certificates\CAcert.pem
CertFile=c:\InterSystems\certificates\ClientCert.pem
KeyFile=c:\InterSystems\certificates\ClientKey.key
Password=
KeyType=2
Protocols=24
CipherList=ALL:!aNULL:!eNULL:!EXP:!SSLv2
El nombre de la sección se lista en la primera línea: [DefaultSettings] y coincide con el nombre listado en el parámetro SSLConfig de la primera sección del ejemplo anterior. Por lo tanto, esta configuración se usará para conexiones al servidor 10.100.0.17 en el puerto 1972 o el puerto 23.
Usar copiar+pegar en el ejemplo anterior a menudo genera caracteres que no se imprimen en su archivo de texto. Por favor, asegúrese de haber quitado cualquier carácter extra, por ejemplo guardando el archivo como solo texto y abriéndolo nuevamente.
Aquí puede ver una descripción de lo que significan los parámetros:
VerifyPeer
Las opciones para esto son 0=ninguna, 1=solicitar y 2=requerir. Requerir es el valor recomendado. Si elige "ninguna", un servidor malicioso podría simular ser el servidor al que usted pretende conectarse. Si elige requerir, deberá ingresar una Autoridad certificadora en la que confíe para que verifique los certificados para el valor CAFile. Esto es el equivalente a la "Verificación de certificado de servidor" en el portal. (Nota: la solicitud no tiene sentido para una configuración de cliente, pero la incluyo aquí para que pueda entender por qué las opciones son 0 y 2.)
VerifyHost
Las opciones para esto son 0=ninguna, 1=requerido. Esta opción verifica que el certificado del servidor lista el nombre de host o la IP a la que ha solicitado conectarse en los campos Subject's Common Name o Subject's Common Name. Este campo no tiene un equivalente en el portal, pero es del mismo tipo de verificación que la propiedad SSLCheckServerIdentity de la clase %Net.HttpRequest. Solo es configurable si su cliente usa Caché / Ensemble 2018.1 o posterior, o cualquier versión de la plataforma de datos IRIS de InterSystems
CAfile
La ruta al archivo de la Autoridad Certificadora (CA) de confianza. Esto debería ser la CA que firmó el certificado del otro lado (el servidor), no su propio certificado. Debería completar esto si no ha elegido un valor de VerifyPeer de 2. Este es el equivalente de "Archivo que contiene certificado(s) de Autoridad certificadora confiable" en el portal. Los certificados deben estar en formato PEM
CertFile
La ruta a su propio certificado. Esto debería quedar en blanco si su cliente no cuenta con uno. Este es el equivalente de "Archivo que contiene el certificado del cliente" en el portal. Los certificados deben estar en formato PEM
KeyFile
La ruta a la clave privada correspondiente para CertFile. Debe completar esto si tiene un CertFile, o dejarlo en blanco en caso contrario. Este es el equivalente de "Archivo que contiene clave privada asociada" en el portal
Contraseña
La contraseña necesaria para descifrar su clave privada. Esto debe dejarse en blanco si no usa un certificado para este cliente, o si la clave privada del certificado no está cifrada en el disco
KeyType
¿Su clave privada es RSA (2) o DSA (1)? El valor solo es importante para configuraciones que tienen configurado CertFile y KeyFile. Si no está seguro de cuál es, su clave probablemente sea RSA
Protocols
Esta es una representación decimal de valores de bit para las versiones de SSL/TLS soportadas. Las opciones son: 1=SSLv2, 2=SSLv3, 4=TLSv1, 8=TLSv1.1, 16=TLSv1.2. SSLv2 y SSLv3 tienen problemas conocidos y no se recomiendan. Es posible especificar más de una versión agregando números. Por ejemplo, 24 es TLSv1.1 y TLSv1.2. Esto es el equivalente de las casillas "Protocols" en el portal. (Nota: los 8 y 16 bits no están en la versión 2015.1. Si quiere usarlos, necesitará actualizar a 2015.2 o superior)
CipherList
Este es el equivalente de "Enabled ciphersuites" en el portal. Esto controla exactamente qué tipos de cifrado y hashing serán aceptados por este cliente. ALL:!aNULL:!eNULL:!EXP:!SSLv2 es el valor predeterminado para este ajuste en el portal de gestión. Si experimenta problemas con su conexión, probablemente no sea esto. Cambiar esto puede hacer que su conexión sea menos segura, ya que permitirá un cifrado más débil. Puede encontrar más información sobre este valor en el sitio web de openssl
Notas finales
¡Eso es todo lo que necesita hacer! Si crea su archivo y lo coloca en la ubicación conocido, se usará automáticamente si el nombre o la dirección IP y puerto al que se está conectando coinciden con una de las conexiones enumeradas en el archivo.
Configuración del servidor
Este artículo trata sobre cómo configurar el lado de cliente de su conexión para que use SSL, pero no olvide que el servidor al que se está conectando también debe comprender cómo aceptar SSL. Puede encontrar la documentación sobre la configuración del SuperServer para que use SSL aquí:http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_ssltls#GCAS_ssltls_superserver
Y la documentación para configurar el servicio Telnet está aquí:http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_ssltls#GCAS_ssltls_telnet_svr
El método $SYSTEM.Security.Users.SetTelnetSSLSetting() le permite controlar si el servidor Telnet permite o requiere el uso de SSL. Está disponible en la versión 2016.1 y posteriores.
Configuración de DSN
No necesita cambiar la DSN para una conexión ODBC siempre que tenga en su archivo de configuración una dirección y puerto de conexión correspondientes. Se usará SSL incluso si se selecciona Contraseña como método de autenticación el DSN. Las opciones Password with SSL/TLS (contraseña con SSL/TLS) y SSL/TLS server name (nombre de servidor SSL/TLS) eran la forma de configurar SSL para ODBC antes de la versión 2015.1.
Enlace a la documentación
La documentación sobre TLS para aplicaciones cliente ahora está disponible en el sitio de documentos de IRIS:https://irisdocs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_ssltls#GCAS_ssltls_windotinifile
Anuncio
Esther Sanchez · 14 dic, 2021
¡Hola a todos!
¿Alguno de vosotros tiene que cambiar su dirección de correo electrónico PRINCIPAL (email para iniciar sesión) y no quiere perder toda su actividad en los Ecosistemas para Desarrolladores de InterSystems (Comunidad, Global Masters y Open Exchange)?
¡Muy fácil! ¡Nosotros nos encargamos! ¿Queréis saber cómo?
1️⃣ Transferiremos correctamente toda vuestra información de la antigua cuenta a la nueva.
Todas vuestras publicaciones, comentarios, menciones, "me gusta", etc. se guardarán en la nueva cuenta.
2️⃣ Si sois miembros de Global Masters, vuestro nivel, insignias, puntos, etc. también se transferirán a la nueva cuenta.
3️⃣ También nos ocuparemos de transferir vuestras aplicaciones en Open Exchange.
4️⃣ Si solo necesitáis desactivar vuestra antigua cuenta (y no transferir su actividad), también lo podemos hacer.
Solo tenéis que contactar con @Irina.Podmazko - escribidle un Mensaje Directo a través de la Comunidad o un email. En ambos casos:
enviad el enlace a vuestra antigua cuenta (-s)
enviad el enlace a vuestra nueva cuenta (-s)
indicad a qué Ecosistema (-s) necesitáis transferir vuestra actividad (DC/GM/OEX/todos)
Contactad con nosotros si os encuentráis en alguna de las situaciones anteriores.
P.D. También podéis enviar los enlaces a vuestras cuentas indicándolos en un comentario en esta publicación.
Artículo
Jose-Tomas Salvador · 29 dic, 2021
Para aquellos a los que, en un momento dado, necesitan probar cómo va eso del ECP para escalabilidad horizontal (cómputo y/o concurrencia de usuarios y procesos), pero les da pereza o no tienen tiempo de montar el entorno, configurar los nodos, etc..., acabo de publicar en Open Exchange la aplicación/ejemplo OPNEx-ECP Deployment .
Se trata de un pequeño proyecto, que he dejado disponible en GitHub para todo aquel que quiera usarlo. Basicamente te va a permitir montar en tu propio equipo, en local, 3 instancias de InterSystems IRIS actuando como servidores de aplicación y 1 instancia actuando como servidor de datos, conectadas por ECP.
Lanzará también un LoadBalancer (utilizando el WebGateway), como nodo independiente del resto de instancias, que será el punto de entrada (via HTTP) a tu sistema y que se encargará de repartir las peticiones entre los distintos servidores.
Con muy pequeño esfuerzo puedes añadir tu código de aplicación y aprovechar el proyecto para probar tu aplicación en ECP distribuido. Los servidores de aplicación se precargan con otros módulos Open Source muy interesantes (ZPM, WebTerminal, RestForms2 y Restforms2-ui), además de un pequeño paquete OPNEx-MModel con algunas clases y unos servicios REST implementados a modo de ejemplo.
Tienes información más detallada en Open Exchange o en el propio repositorio GitHub.
Bueno, espero que te sea de ayuda!
Happy Coding!!
Artículo
Sergio Farago · 28 mar, 2025
Hola a todos 😁
Como quizás sabéis, ayer tuvimos un meetup en las oficinas de Iberia. Pudimos hablar de la comunidad, InterSystems y sobre todo: lo pasamos genial 🎉
@LuisAngel.PérezRamos nos dio una buenísima charla de IA y RAG, viendo ejemplos prácticos, y siempre con el humor que le caracteriza (en la foto está serio, pero rebosa emoción por dentro). Es difícil mantener a un público enganchado durante toda la charla. Su dinamismo y constantes bromas lo consiguieron. Es un orgullo poder contar con él.
Cabe mencionar la introducción de @David.Reche, que nos puso en contexto y amenizó la tarde. Fuimos de lo general a lo concreto, entendiendo conceptos básicos como LLM, modelos, RAG... para acabar aterrizándolos en casos prácticos.
Estuvo muy bien que en todo momento los asistentes participaron. Pudimos ver la opinión de otros desarrolladores, resolver dudas, etc. Hubo mucha participación y debate, y era lo que queríamos ¡Fantástico!
Por supuesto, hubo tiempo para picar y beber algo. En este rato tuvimos conversaciones más informales, presentaciones y vivos perspectivas de diferentes perfiles: analistas, investigadoras, matemáticos, desarrolladores, arquitectos, expertos en formación, etc.
Y como iba a faltar... ¡nuestro kahoot! Tuvimos un emocionante Kahoot que estuvo reñido hasta la última pregunta. Nuestros tres vencedores se llevaron un premio extra a casa.
Fue una jornada muy divertida, y como todos pedís... seguramente habrá más pronto. Esperamos veros por allí. Gracias por venir, apoyar a la comunidad y vuestro ánimo!
Artículo
Nancy Martínez · 9 jun, 2020
Para conocer un poco más sobre Sharding decidí crear un conjunto "por mi cuenta".Para ello, creé 1 Master (Win10) y 2 Shard "slaves" en Ubuntu64.La instalación fue bien y empecé a seguir un curso online, sin tener ningún problema:
> Introducción a Sharding en InterSystems IRIS>>> InterSystems: ISC1125 Curso básico de Sharding: Planificación e Implementación>>>>> 2. Implementación y Uso de Cluster>>>>>>> IMPLEMENTACIÓN USANDO API
Todo iba bien y según lo descrito.
¡Pero no pude crear una Tabla Shard!{ I skip all fruitless attempts }
Al realizar un diagnóstico de lo que salió mal:
MASTER>s sc=$SYSTEM.Sharding.ListShards()Shard Host Port Namespc Mirror Role VIP1 192.168.0.104 51773 SHARD2 192.168.0.103 51773 SHARD MASTER>zw scsc=1
esto aún se ve bien, pero:
MASTER>s sc=$SYSTEM.Sharding.VerifyShards()MASTER>do $system.OBJ.DisplayError(sc) ERROR #9355: 2 shards failed verificationERROR #9354: Shard 1 failed verificationERROR #5002: ObjectScript error: <SUBSCRIPT>getConnection+28^%SYS.BigData.ECP *() Subscript 1 is ""ERROR #9354: Shard 2 failed verificationERROR #5002: ObjectScript error: <SUBSCRIPT>getConnection+28^%SYS.BigData.ECP *() Subscript 1 is ""
primer aprendizaje adicional:
MASTER>s sc=$system.Sharding.SetOption("MASTER","AutoVerify",1)
Ahora la ejecución se verifica directamente después de añadir un Shard.Esto es muy útil al principio.Después de que recibí un consejo de @Michael.Braam revisé mi red local
Y eso no estaba escrito en ninguna parte (o simplemente no lo encontré):Los host que se utilizaron y sus hostname deben ser visibles y accesibles desde el MASTER y los servidores Shard.
En lugar de configurar un servidor DNS privado únicamente para este caso, se debe configurarun archivo hosts file { on Win10 >>>> C:\Windows\System32\drivers\etc\hosts ubuntu >>>> /etc/hosts ubuntu >>>> /etc/hostname}
Ahora se podría añadir Shards con nombres de servidores "reales", lo que podría dar como resultado una configuración que funcione.
MASTER>s sc=$SYSTEM.Sharding.ListShards() zw sc
Shard Host Port Namespc Mirror Role VIP1 ubuntu64c 51773 SHARD2 ubuntu64d 51773 SHARDsc=1MASTER>s sc=$SYSTEM.Sharding.VerifyShards() zw scsc=1
Ahora, la creación de Tablas Shard fue así de fácil como se muestra en la formación online.No investigué si con la configuración del servidor para el Master en Shard sólo habría sido suficiente ya que esto únicamente era una interrupción/más allá de tenerlo para todos los servidores involucrados y ya no sufrir más dolores de cabeza.
Artículo
Muhammad Waseem · 22 dic, 2021
La interoperabilidad en la asistencia sanitaria es esencial para mejorar la atención a los pacientes, reducir los costes de los proveedores de atención médica y ofrecer una imagen más precisa a los proveedores. Pero con tantos sistemas diferentes, los datos se presentan en diferentes formatos. Se han creado muchos estándares para tratar de resolver este problema, incluyendo HL7v2, HL7v3 y CDA, pero cada una tiene sus limitaciones.
FHIR, o Fast Healthcare Interoperability Resources, es un estándar para el intercambio de datos de salud, que tiene como objetivo resolver estos problemas. Fue desarrollado por Health Level Seven International (HL7), una organización que también desarrolló HL7v2, HL7v3 y CDA.
En este artículo descubriremos cómo crear y validar recursos FHIR usando el esquema FHIR con la ayuda de IntelliSense y la función de autocompletado en VS Code.
**Paso 1**: Descargar el archivo JSON Schema para Validación de Recursos desde la web oficial de FHIR: https://www.hl7.org/fhir/
.png)
.png)
**Paso 2:** Crear una carpeta (en este ejemplo estoy usando la carpeta Patient y el recurso Patient) y copiar el archivo fhir.schema.json extraído, en la misma carpeta. A continuación, abrir la carpeta desde VS Code
.png)
**Paso 3:** Configurar el código VS para reconocer el esquema FHIR modificando el archivo setting.json.
Presionar CTRL+SHIFT+P y escribir en el espacio de trabajo settings.json
.png)
**Paso 4:** Crear un nuevo archivo patient.fhir.json, en la misma carpeta.
Pulsar Ctrl+ESPACIO y se obtendrán todos los atributos de los recursos de FHIR a través de IntelliSense
# .png)
Escribir "resourceType": "Patient" y todos los atributos relacionados con el recurso Patient comenzarán a aparecer en el IntelliSense.
.png)
**VS Code validará automáticamente la estructura y la sintaxis del recurso.**
.png)
Con la ayuda de IntelliSense y la función de autocompletado hemos creado y validado nuestro recurso para los pacientes.
.png)
Paso 5: Publicar el recurso creado en el servidor FHIR de InterSystems usando la API Rest de Postman
.png)
Recuperar el recurso de Patient Creado utilizando el método GET
.png)
¡Enhorabuena! Hemos creado y validado nuestro recurso Patient, y lo hemos publicado y recuperado correctamente en el Servidor FHIR de InterSystems usando Postman.
De esta manera podemos crear y validar fácilmente cualquier Recurso FHIR.
Pregunta
Yone Moreno · 13 jun, 2022
Hola buenos días,
Agradeceríamos si ustedes nos leen y responden:
Disponemos de 2 entornos: INTegracion en HealthConnect 2020 y PREproduccion en Ensemble 2018
¿Que un tipo de dato sea %GlobalCharacterStream influye? en concreto: ¿se generan ficheros .stream en el servidor si subimos clases que hagan uso de %GlobalCharacterStream?
Ojeando la documentación, parece que explica lo siguiente:
Parece que NO sería persistente , parece que "almacena caracteres en nodos de datos globales"
https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?&LIBRARY=%25SYS&PRIVATE=1&CLASSNAME=%25Library.GlobalCharacterStream
%Library.GlobalCharacterStream
deprecated stream class %Library.GlobalCharacterStream extiende %Library.CharacterStream, %Library.GlobalStreamAdaptorDeprecated in favor of %Stream.GlobalCharacter. Stream class that stores character data in global nodes.
Aunque nuestra duda viene por el hecho de que en PRE 2018 la propiedad la guarda como %Library.CacheStorage:
Sin embargo, en INT 2020 como: "%Storage.Persistent"
Por favor, nos podrían responder a la cuestión: ¿este uso de tipo de datos %GlobalCharacterStream repercute en caché , huérfanos, etc...?
Hemos observado que se encuentra deprecado:
Deprecated in favor of %Stream.GlobalCharacter
Significa eso que ¿ustedes nos recomiendan cambiar a %Stream.GlobalCharacter?
En ese caso: ¿%Stream.GlobalCharacter? y/o %GlobalCharacterStream repercuten en caché , huérfanos, etc; es decir generan ficheros .stream persistentes en el servidor...?
Muchas gracias por atendernos
Un saludo Hola Yone,
Comentarte que las preguntas enviadas a la comunidad no tienen porqué ser respondidas por personal de InterSystems. La comunidad está abierta a que todos compartamos nuestra dudas y soluciones (incluidos los empleados de InterSystems, que, de vez en cuando también preguntamos). Si necesitas algo urgente y quieres estar segura de obtener respuesta por nuestra parte, lo mejor es que nos abras un caso en soporte desde el WRC.
Respecto a tu pregunta, todo lo que se guarda el un global de una base de datos distinta a la temporal, va a ser persistente. En el caso de los GlobalCharacter, se van a guardar en un global y por tanto va a ser persistente (es decir, que una vez guardado, si reinicias el servidor, el dato va a estar ahí).
Al ser persistente, si los mensajes no se purgan correctamente, podría dejar nodos huérfanos. Todo dependerá de como hayas implementado la clase y las purgas. Si tienes dudas al respecto, te animo a que abras otro nuevo hilo.
Finalmente, tal y como indica la documentación, lo suyo es que uses el tipo %Stream.GlobalCharacter, que tiene la misma función y es el que se va a mantener en futuras versiones. El tipo anterior, por estar "deprecated" dejará de funcionar en alguna versión futura.
Hola Yone,
Los Streams se utilizan para almacenar cadenas de datos sin límite de tamaño. Si en una clase persistente, incluyes propiedades de tipo Stream serán persistentes.
`%Stream.GlobalCharacter`, `%Stream.GlobalBinary`: persisten los datos en globals (en la base de datos).
`%Stream.FileCharacter`, `%Stream.FileBinary`: persisten los datos en ficheros (.stream).
Lo que te recomienda la documentación es que utilices estas clases en lugar de sus versiones antiguas, por ejemplo:
* Utiliza `%Stream.GlobalCharacter` en lugar de la antigua `%GlobalCharacterStream`.
* Utiliza `%Stream.FileCharacter` en lugar de la antigua `%FileCharacterStream`.
La gestión de los mensajes huérfanos es como siempre. Si tienes un árbol de clases persistente que cuelga de un mensaje de interoperabilidad (incluya o no Streams), recuerda siempre implementar el método `%OnDelete` para borrar su contenido adecuadamente.
Artículo
Laura Blázquez García · 17 feb, 2023
No sé si alguna vez os ha ocurrido. Nosotros trabajamos con VSCode para programar en IRIS, sincronizamos las clases con un servidor de desarrollo y lo tenemos conectado a un repositorio Git.
Tenemos proyectos que tienen cientos de clases, algunos hasta miles. Nos ocurre a menudo que, estamos realizando un desarrollo en un Namespace, y sin terminarlo, surge una incidencia que hay que solventar (o un nuevo desarrollo más prioritario). Dejamos el desarrollo que estamos haciendo, comiteando todo lo realizado hasta el momento.
Creamos una rama nueva con la versión de Producción para solventar la incidencia, pero... resulta que en el servidor de desarrollo está la versión en la que estábamos trabajando previamente. ¿Qué hacemos?
Lo primero, no entrar en modo pánico. Primero hacemos una copia del contenido del Namespace. Desde el portal, vamos a Explorador > Clases:
Vamos a nuestro Namespace, buscamos las clases de nuestro proyecto, las seleccionamos todas y las exportamos (hacemos un backup):
¿Por qué un backup? Nos gusta hacerlo por si acaso, no sea que se nos haya olvidado exportar algún archivo modificado desde el Portal al VSCode, por ejemplo
Una vez hecho el backup, las eliminamos:
Con esto hemos dejado el Namespace vacío.
Ahora, en el VSCode nos posicionamos en la rama que hemos creado desde Producción. Esto nos traerá todo el código a nuestro equipo local. Vamos al sistema de archivos, donde tengamos el repositorio, y comprimimos la carpeta src:
Cogemos este archivo src.zip, lo subimos al servidor de desarrollo y lo descomprimimos:
Entramos a la carpeta src y borramos todo lo que no sean clases:
Si como nosotros, trabajas con Mac, lo más probable es que tengas archivos ocultos en varias carpetas llamados .DS_Store. Los buscamos, y los borramos también:
¿Para qué todo esto? Ya llego, tranquilos...
Ahora tenemos un Namespace vacío y una carpeta en el servidor con nuestras clases. Cómo las importamos?
Podríamos, desde el mismo VSCode, importar y compilar todas las clases. Pero... este proyecto tiene miles de clases, y acaba dando timeout. Podemos ir por lotes, pero podemos tardar una eternidad... Así que...
Si tenemos instalada la aplicación WebTerminal, todo será mucho más sencillo Sino, desde un terminal también se puede ejecutar.
Accedemos al terminal, nos posicionamos en nuestro Namespace, y escribimos la siguiente instrucción (con la ruta donde hemos descomprimido la carpeta src):
set sc = $System.OBJ.ImportDir("C:\\InterSystems\despliegues\TEST\src\","*","ck",.error,1,.imported,0,.list)
Al lanzar esta instrucción se importarán y compilarán todas las clases que hemos descomprimido en el servidor, directamente en nuestro Namespace.
Cuando acabe, si todo ha ido bien, aparecerá un mensaje como el siguiente:
Si por el contrario hubiese habido algún error, veremos esto:
Para saber qué ha ocurrido exactamente, podemos escribir lo que tenga la propiedad error:
(Veis? Por eso borramos los archivos .DS_Store, porque sino son muy molestos a la hora de importar, y generan confusión al importar las clases )
---------------------------------------------
Con esto restauramos en desarrollo la versión que había en Producción, permitiéndonos corregir la incidencia sin mezclar desarrollos en diferentes ramas.
Espero que os sea de utilidad!
P.D.: Gracias al equipo de Intersystems por darnos la idea de utilizar esa instrucción Muy interesante Laura, gracias por compartirlo y mucha suerte en el concurso
¡Muchas gracias por publicar el artículo, Laural! ¡Y mucha suerte en el Concurso de Artículos!
Artículo
Daniel Aguilar · 3 jul, 2023
Hola Comunidad!!
Acabo de subir mi última aplicación "IRIS Api Tester" al Open Exchange.
Es un proyecto docker con InterSystems IRIS + Newman que permite lanzar test sobre tus colecciones de Postman de una manera rápida y fácil.
El proyecto viene listo para funcionar, solo debes clonar el repositorio: https://github.com/daniel-aguilar-garcia/irisapitester
Arrancar el fichero docker-compose:
Abrir esta url en tu navegador:
http://localhost:52773/csp/user/index.html
Luego en Postman, añade algunos test a tu colección:
En este ejemplo he añadido un test global para todas las entradas de la colección añadiendo el test en la sección "Test" de la colección pero también se pueden añadir test individuales para cada entrada en la sección "Test" de cada una de ellas.
Para esta prueba estoy comprobando que el código de respuesta recibido sea igual a 200, en caso que el código de respuesta sea distinto a 200 el item aparecerá como error en el informe.
Después de añadir los test, exporta la colección en formato json:
Arrastra el fichero json a la página de IRIS APi Tester y presiona el botón "Run test":
Después de unos segundos serás redirigido a la página del informe:
Donde podrás navegar por el informe y examinar todas las entradas en detalle:
Si lo prefieres también puedes usar el proyecto sin interfaz gráfica, puedes lanzar la siguiente petición:
Petición tipo POST para ejecutar los test:
localhost:52773/run_tests
Ejemplo del cuerpo de la llamada (es el contenido del fichero de la colección exportado desde Postman):
{
"collection" : {
"info": {
"_postman_id": "79cfb5de-a2ab-4548-aa54-4a1712bf67a4",
"name": "TestNewman",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_exporter_id": "838575"
},
"item": [
{
"name": "test_ok",
"event": [
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "localhost:52773/test_ok",
"host": [
"localhost"
],
"port": "52773",
"path": [
"test_ok"
]
}
},
"response": []
},
{
"name": "test_ko",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "localhost:52773/test_ko",
"host": [
"localhost"
],
"port": "52773",
"path": [
"test_ko"
]
}
},
"response": []
}
],
"event": [
{
"listen": "prerequest",
"script": {
"type": "text/javascript",
"exec": [
""
]
}
},
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": [
"pm.test(\"Verificar código de cabecera\", function () {",
" pm.response.to.not.have.status(500);",
"});"
]
}
}
]
}
}
Una vez ejecutado puedes recuperar el informe en html.
Lanza una petición GET a y listo:
localhost:52773/show_report
Por si quieres probar la aplicación, he dejado un fichero de pruebas dentro del proyecto para que puedas probar:
Espero que esta app pueda serte de utilidad.
Y si te ha gustado recuerda que puedes votarme para el concurso hasta el día 09/07/23:
https://openexchange.intersystems.com/contest/32#334
Gracias por leerme!!
Como extra os dejo un video del funcionamiento:
¡Gracias por el artículo, Daniel!
Y desarrolladores... ¡no os olvidéis de votar por su aplicación en el Gran Premio de Programación de InterSystems! ✅
Anuncio
David Reche · 1 abr, 2020
La versión 2020.1 de HealthShare Health Connect ya ha sido lanzada.
Los kits para la instalación y las imágenes del contenedor están disponibles en la página de distribución de software del Centro de Soporte Internacional (WRC).
El número de compilación de estas versiones es 2020.1.0.215.0.
HealthShare Health Connect 2020.1 incluye muchas funcionalidades nuevas:
Healthcare Interoperability
FHIR R4 Support
HL7 Productivity Tools
API Management
InterSystems API Manager
Open API/Swagger Specification-First REST Development
New Look in the Management Portal
SQL Enhancements
Universal Query Cache
Interoperability Production Enhancements
New Framework for Coding Interoperability Business Hosts in Java and .NET
Port Authority for Monitoring Port Usage in Interoperability Productions
X12 Validation Enhancements
Enhanced DTL Support for X12
X12 Import X12 Schemas from XSD Files
MQTT Adapters
Infrastructure and Cloud Deployment Improvements
New Automatic Configuration Customization
Analytics Enhancements
Selective Cube Build
PowerBI Connector
Pivot Table Preview
Other Enhancements and Efficiency Improvements
La documentación está disponible aquí:
Documentación de Health Connect 2020.1
Las plataformas soportadas para producción se detallan en el documento de plataformas soportadas.
Anuncio
Esther Sanchez · 8 mar, 2021
¡Hola desarrolladores!
Últimamente nos han preguntado varias personas cómo participar en la Comunidad y ser un miembro activo y útil en ella.
Es muy sencillo. Podéis:
1. Responder preguntas
Hay muchas preguntas sin respuesta y también preguntas sin una respuesta aceptada. Todos los miembros de la Comunidad pueden responder a las preguntas, compartir su conocimiento y ayudar a otros.
2. Publicar artículos
Todos los miembros de la Comunidad pueden escribir artículos que describan su experiencia con la tecnología de InterSystems: la solución que utilizan, su conocimiento, trucos...
Hay muchos ejemplos de artículos que han sido y siguen siendo muy útiles para la Comunidad.
También se pueden traducir artículos a español, portugués, inglés o japonés.
3. Contribuir en Open Exchange
Todos los miembros de la Comunidad pueden compartir librerías, soluciones y herramientas en Open Exchange - a través de Github, Gitlab o cualquier otro repositorio público.
No dudéis en preguntar cualquier duda o dejar vuestros comentarios en esta publicación. Todas las colaboraciones, ideas y propuestas son bienvenidas, para hacer que la Comunidad sea lo más útil posible para todos, en todo el mundo.
Gracias por traducir este articulo @Esther.Sanchez
Muchas Gracias! Gracias por tu mensaje, Adrián! Y bienvenido a la Comunidad de Desarrolladores en español! Si tuvieras cualquier duda o consulta, puedes publicar una pregunta en la Comunidad. También puedes aprender mucho leyendo los artículos de tu tema de interés (buscando por hashtag, por ejemplo). O si quieres contribuir con artículos escritos por ti, eso estaría genial! :D
¡Nos vemos!
Artículo
Rob Tweed · 7 ene, 2022
Para aquellos que sois nuevos en IRIS, e incluso para los que habéis utilizado Cache o IRIS durante un tiempo pero queréis explorar más allá de los límites y prácticas normalmente admitidos, puede que os guste bucear en esta investigación detallada del motor de la base de datos, situado en su centro, y descubrir lo que realmente podéis hacer con él, yendo más allá de lo que InterSystems ha hecho con él por vosotros.
Descubriréis que en realidad es un motor de almacenamiento increíblemente sencillo, además de extremadamente potente, que permite modelar cualquier tipo de base de datos de vuestra elección, una vez que se entienden y dominan sus principios, básicos y sencillos. Su modelo de almacenamiento puede denominarse como "Almacenamiento Global", que puede ser modelado sobre cualquier motor de almacenamiento de datos jerárquico, e incluso sobre la base de datos NoSQL Redis. Sin embargo, las implementaciones "nativas", es decir, en IRIS y Cache, son las más rápidas con un margen significativo, superando a la que el mundo de las bases de datos reconoce normalmente como la base de datos más rápida del planeta (es decir, LMDB).
El Almacenamiento Global es (tristemente) uno de los secretos mejor guardados del mundo de las bases de datos, pero he condensado en este conjunto de artículos mis cuarenta y tantos años de conocimiento y experiencia en el uso y esfuerzo de llevar esta tecnología de base de datos a sus límites. Es mi intento de hacerla al menos un poco menos secreta y abrir vuestros ojos a lo que realmente hay por debajo!
Así que... abrochaos los cinturones y seguid leyendo aquí:
https://github.com/robtweed/global_storage