Limpiar filtro
Anuncio
David Reche · 7 ago, 2020
¡Hola desarrolladores!
¡Ya está listo el siguiente concurso para crear soluciones de código abierto utilizando InterSystems IRIS Data Platform!
El tema de este quinto concurso es FHIR.
El concurso estará activo durante tres semanas: del 10 al 30 de agosto de 2020.
Premios
1. Nominación de los expertos - los ganadores serán elegidos por un jurado especialmente formado para el concurso. Los premios serán:
🥇 1er puesto - $2,000
🥈 2ª puesto - $1,000
🥉 3er puesto - $500
2. Nominación de la Comunidad - ganará la aplicación que obtenga el mayor número total de votos. Los premios serán:
🥇 1er puesto - $1,000
🥈 2º puesto - $500
Si dos o más participantes obtienen la misma cantidad de votos, todos serán considerados ganadores y el dinero del premio se repartirá entre todos.
¿Quién puede participar?
Cualquier miembro registrado en la Comunidad de Desarrolladores de cualquier país puede participar en el concurso, excepto los empleados de InterSystems. Regístrate aquí en la Comunidad si aún no tienes una cuenta >>
Duración del concurso
Del 10 al 23 de agosto de 2020: Dos semanas para subir las aplicaciones a Open Exchange (durante este período, se podrán modificar los proyectos).
Del 24 al 30 de agosto de 2020: Una semana para votar.
Los ganadores serán anunciados el día 31 de agosto de 2020.
Tema del concurso
💡 FHIR - Fast Healthcare Interoperability Resources 💡
Desarrollo de una solución FHIR utilizando InterSystems IRIS for Health.
Se elegirá la mejor aplicación FHIR construida con InterSystems IRIS for Health. La aplicación puede ser una librería, paquete, herramienta o cualquier solución de FHIR que utilice InterSystems IRIS for Health.
La aplicación debe funcionar en IRIS Community Edition, en IRIS for Health Community Edition o en IRIS Advanced Analytics Community Edition.
La aplicación debe ser Open Source y publicarse en GitHub.
Y las aplicaciones que implementen unos requisitos tecnológicos adicionales, obtendrán bonus tecnológicos.
Aplicaciones de muestra
Se publicarán en los próximos días.
Recursos adicionales
1. Cómo enviar una aplicación a un concurso:
How to publish an application on Open Exchange
How to submit an application for the contest
2. Documentación:
FHIR Support in InterSystems Products
3. Cursos online:
Learn FHIR for Software Developers
Building SMART on FHIR Apps with InterSystems FHIR Sandbox
Exploring FHIR Resource APIs
Using InterSystems IRIS for Health to Reduce Readmissions
Connecting Devices to InterSystems IRIS for Health
Monitoring Oxygen Saturation in Infants
FHIR Integration QuickStart
4. Vídeos:
6 Rapid FHIR Questions
SMART on FHIR: The Basics
Developing with FHIR - REST APIs
FHIR in InterSystems IRIS for Health
FHIR API Management
Searching for FHIR Resources in IRIS for Health
También hay una lista de reproducción de FHIR en el Canal de YouTube de la Comunidad de Desarrolladores en inglés.
5. Otros recursos:
Echa un vistazo a las publicaciones con la etiqueta "FHIR" en la CD en español o en la DC en inglés.
Puedes hacer preguntas en la Comunidad de FHIR: community.fhir.org
Jurado
Consulta los Criterios del jurado y Reglas sobre los votos.
Así que... Ready. Set. Code.
¡Suerte a todos!
❗️ Echa un vistazo a los Términos Oficiales del Concurso.❗️
Anuncio
Esther Sanchez · 1 sep, 2020
¡Hola desarrolladores!
El quinto concurso de programación con InterSystems IRIS ya ha terminado. ¡Muchas gracias a todos los participantes!
Ya podemos anunciar los ganadores...
Un fuerte aplauso para estos desarrolladores y sus aplicaciones:
🏆 Nominación de los expertos - los ganadores fueron elegidos por un jurado especialmente formado para el concurso:
🥇 1er puesto y $1,500 para el proyecto iris-fhir-portal de @Henrique.GonçalvesDias
🥇 1er puesto y $1,500 para el proyecto iris4health-fhir-analytics de @José.Pereira
🥉 3er puesto y $500 para el proyecto fhir-chatbot de @Renato.Banzai
🏆 Nominación de la Comunidad - las aplicaciones que recibieron el mayor número de votos:
🥇 1er puesto y $1,000 para el proyecto iris-fhir-portal project de @Henrique.GonçalvesDias
🥈 2º puesto y $500 para el proyecto iris4health-fhir-analytics de @José.Pereira
¡Enhorabuena a todos!
Y gracias de nuevo a todos los participantes, por el esfuerzo e ingenio que habéis puesto en el concurso
¿Y qué más?
Hay una serie de concursos planificados para todo el año, así que ya podéis inscribiros al siguiente!
➡️ Próximos concursos. ¡Felicitaciones a todos los ganadores! Aplicaciones increíbles
Anuncio
Esther Sanchez · 10 sep, 2020
¡Hola Comunidad!
Estamos encantados de invitaros a un webinar sobre InterSystems Open Exchange.
Será el próximo viernes 18 de septiembre a las 17:00 PM (CEST) / 11:00 AM (EDT).
En el webinar, que será en inglés, aprenderéis todo sobre InterSystems Open Exchange – una galería de soluciones, herramientas y plantillas construidas con InterSystems IRIS, IRIS for Health y otras plataformas de InterSystems.
En el webinar se mostrará:
Qué es Open Exchange y cómo puedes usarlo a tu favor
Dónde encontrar soluciones de InterSystems
Cómo promover tu propia solución realizada con InterSystems IRIS
Cómo publicar, instalar y desplegar soluciones de Open Exchange
Cómo crear tu perfil de empresa en Open Exchange
El webinar será presentado por @Evgeny.Shvarov, Developer Ecosystem Manager de InterSystems.
Fecha: Viernes 18 de septiembre de 2020Hora: 11:00 AM EDT
➡️ Puedes registrarte aquí
Artículo
Bernardo Linarez · 28 oct, 2020
Prometheus es uno de los sistemas de monitorización adaptado para recoger datos de series temporales.
Su instalación y configuración inicial son relativamente sencillos. El sistema tiene un subsistema gráfico integrado llamado PromDash para la visualización de datos, pero los desarrolladores recomiendan usar un producto de otro proveedor, llamado Grafana. Prometheus puede monitorizar muchas cosas (hardware, contenedores, distintos sistemas de gestión de base de datos), pero en este artículo me gustaría analizar la monitorización de una instancia de Caché (para ser exactos, será una instancia de Ensemble, pero las métricas serán de Caché). Si te interesa, sigue leyendo.
En nuestro caso extremadamente simple, Prometheus y Caché vivirán en una única máquina (Fedora Workstation 24 x86_64). Versión de Caché:
%SYS>write $zvCache for UNIX (Red Hat Enterprise Linux for x86-64) 2016.1 (Build 656U) Fri Mar 11 2016 17:58:47 EST
Instalación y configuración
Vamos a descargar un paquete de distribución de Prometheus desde la página oficial y lo vamos a guardar en la carpeta /opt/prometheus.
Descomprime el archivo, modifica el archivo de configuración de plantilla según tus necesidades e inicia Prometheus. De forma predeterminada, Prometheus mostrará sus registros directamente en la consola, por eso guardaremos sus registros de actividad en un archivo de log.
Iniciar Prometheus
# pwd/opt/prometheus# lsprometheus-1.4.1.linux-amd64.tar.gz# tar -xzf prometheus-1.4.1.linux-amd64.tar.gz# lsprometheus-1.4.1.linux-amd64 prometheus-1.4.1.linux-amd64.tar.gz# cd prometheus-1.4.1.linux-amd64/# lsconsole_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool# cat prometheus.yml global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.scrape_configs: - job_name: 'isc_cache' metrics_path: '/metrics/cache' static_configs: - targets: ['localhost:57772']# ./prometheus > /var/log/prometheus.log 2>&1 &[1] 7117# head /var/log/prometheus.logtime=«2017-01-01T09:01:11+02:00» level=info msg=«Starting prometheus (version=1.4.1, branch=master, revision=2a89e8733f240d3cd57a6520b52c36ac4744ce12)» source=«main.go:77»time=«2017-01-01T09:01:11+02:00» level=info msg=«Build context (go=go1.7.3, user=root@e685d23d8809, date=20161128-09:59:22)» source=«main.go:78»time=«2017-01-01T09:01:11+02:00» level=info msg=«Loading configuration file prometheus.yml» source=«main.go:250»time=«2017-01-01T09:01:11+02:00» level=info msg=«Loading series map and head chunks...» source=«storage.go:354»time=«2017-01-01T09:01:11+02:00» level=info msg=«23 series loaded.» source=«storage.go:359»time=«2017-01-01T09:01:11+02:00» level=info msg="Listening on :9090" source=«web.go:248»
La configuración prometheus.yml se escribe en lenguaje YAML, que no se lleva bien con los símbolos de tabulación, por lo que solo deberías usar espacios. Ya mencionamos que las métricas se descargarán desde http://localhost:57772 y enviaremos solicitudes a /metrics/cache (el nombre de la aplicación es arbitrario), es decir, la dirección de destino para recopilar métricas será http://localhost:57772/metrics/cache. Se agregará una etiqueta "job=isc_cache" a cada métrica. Una etiqueta, de forma muy aproximada, es el equivalente a WHERE en SQL. En nuestro caso no se usará, pero funcionará bien para más de un servidor. Por ejemplo, los nombres (y/o instancias) de servidores pueden guardarse en etiquetas, y luego se pueden usar las etiquetas para parametrizar solicitudes para realizar gráficas. Vamos a asegurarnos de que Prometheus está funcionando (en la salida de arriba podemos ver el puerto que está escuchando: 9090):
Se abre una interfaz web, lo que significa que Prometheus está funcionando. Sin embargo, aún no ve métricas de Caché (verifiquemos haciendo clic en Status → Targets):
Preparación de métricas
Nuestra tarea es dejar las métricas disponibles para Prometheus en un formato adecuado en http://localhost:57772/metrics/cache. Usaremos las capacidades REST de Caché debido a su simplicidad. Es necesario saber que Prometheus solo "entiende" las métricas numéricas, por lo que no exportaremos métricas de cadenas de texto. Para obtener lo último, usaremos la API de la clase SYS.Stats.Dashboard. Estas métricas las usa el propio Caché para mostrar la barra de herramientas de Sistema:
Ejemplo de lo mismo en el Terminal:
%SYS>set dashboard = ##class(SYS.Stats.Dashboard).Sample() %SYS>zwrite dashboarddashboard=<OBJECT REFERENCE>[2@SYS.Stats.Dashboard]+----------------- general information ---------------| oref value: 2| class name: SYS.Stats.Dashboard| reference count: 2+----------------- attribute values ------------------| ApplicationErrors = 0| CSPSessions = 2| CacheEfficiency = 2385.33| DatabaseSpace = "Normal"| DiskReads = 14942| DiskWrites = 99278| ECPAppServer = "OK"| ECPAppSrvRate = 0| ECPDataServer = "OK"| ECPDataSrvRate = 0| GloRefs = 272452605| GloRefsPerSec = "70.00"| GloSets = 42330792| JournalEntries = 16399816| JournalSpace = "Normal"| JournalStatus = "Normal"| LastBackup = "Mar 26 2017 09:58AM"| LicenseCurrent = 3| LicenseCurrentPct = 2. . .
El espacio USER será nuestro "entorno controlado" (sandbox). Para empezar, creamos una aplicación/métricas REST. Para añadir un nivel muy básico de seguridad, protegeremos nuestro inicio de sesión con una contraseña y asociaremos la aplicación web con algún recurso, que llamaremos PromResource. Necesitamos desactivar el acceso público al recurso, por lo que haremos lo siguiente:
%SYS>write ##class(Security.Resources).Create("PromResource", "Resource for Metrics web page", "")1
La configuración de nuestra aplicación web:
También necesitaremos un usuario con acceso a este recurso. El usuario también debería poder leer desde nuestra base de datos (USER, en nuestro caso) y guardar datos en ella. Además de esto, el usuario necesitará permisos de escritura para la base de datos del sistema CACHESYS, ya que más tarde pasaremos al espacio %SYS en el código. Seguiremos el esquema estándar, es decir, crear un rol PromRole con estos permisos y luego crear un usuario PromUser asignado a este rol. Para la contraseña, usaremos "Secret":
%SYS>write ##class(Security.Roles).Create("PromRole","Role for PromResource","PromResource:U,%DB_USER:RW,%DB_CACHESYS:R")1%SYS>write ##class(Security.Users).Create("PromUser","PromRole","Secret")1
Este usuario PromUser será el que usaremos para autenticación en la configuración de Prometheus. Una vez hecho, enviaremos una señal SIGNUP al proceso del servidor, para releer la configuración.
Una configuración más segura
# cat /opt/prometheus/prometheus-1.4.1.linux-amd64/prometheus.ymlglobal: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.scrape_configs: - job_name: 'isc_cache' metrics_path: '/metrics/cache' static_configs: - targets: ['localhost:57772'] basic_auth: username: 'PromUser' password: 'Secret'## kill -SIGHUP $(pgrep prometheus) # or kill -1 $(pgrep prometheus)
Ahora Prometheus puede pasar la autenticación con éxito, para usar la aplicación web con métricas.
Las métricas serán provistas por la clase de procesamiento de solicitudes my.Metrics. Aquí está la implementación:
Class my.Metrics Extends %CSP.REST
{
Parameter ISCPREFIX = "isc_cache";
Parameter DASHPREFIX = {..#ISCPREFIX_"_dashboard"};
XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
<Route Url="/cache" Method="GET" Call="getMetrics"/>
</Routes>
}
/// Output should obey the Prometheus exposition formats. Docs:
/// https://prometheus.io/docs/instrumenting/exposition_formats/
///
/// The protocol is line-oriented. A line-feed character (\n) separates lines.
/// The last line must end with a line-feed character. Empty lines are ignored.
ClassMethod getMetrics() As %Status
{
set nl = $c(10)
do ..getDashboardSample(.dashboard)
do ..getClassProperties(dashboard.%ClassName(1), .propList, .descrList)
for i=1:1:$ll(propList) {
set descr = $lg(descrList,i)
set propertyName = $lg(propList,i)
set propertyValue = $property(dashboard, propertyName)
// Prometheus supports time series database
// so if we get empty (for example, backup metrics) or non-digital metrics
// we just omit them.
if ((propertyValue '= "") && ('$match(propertyValue, ".*[-A-Za-z ]+.*"))) {
set metricsName = ..#DASHPREFIX_..camelCase2Underscore(propertyName)
set metricsValue = propertyValue
// Write description (help) for each metrics.
// Format is that the Prometheus requires.
// Multiline descriptions we have to join in one string.
write "# HELP "_metricsName_" "_$replace(descr,nl," ")_nl
write metricsName_" "_metricsValue_nl
}
}
write nl
quit $$$OK
}
ClassMethod getDashboardSample(Output dashboard)
{
new $namespace
set $namespace = "%SYS"
set dashboard = ##class(SYS.Stats.Dashboard).Sample()
}
ClassMethod getClassProperties(className As %String, Output propList As %List, Output descrList As %List)
{
new $namespace
set $namespace = "%SYS"
set propList = "", descrList = ""
set properties = ##class(%Dictionary.ClassDefinition).%OpenId(className).Properties
for i=1:1:properties.Count() {
set property = properties.GetAt(i)
set propList = propList_$lb(property.Name)
set descrList = descrList_$lb(property.Description)
}
}
/// Converts metrics name in camel case to underscore name with lower case
/// Sample: input = WriteDaemon, output = _write_daemon
ClassMethod camelCase2Underscore(metrics As %String) As %String
{
set result = metrics
set regexp = "([A-Z])"
set matcher = ##class(%Regex.Matcher).%New(regexp, metrics)
while (matcher.Locate()) {
set result = matcher.ReplaceAll("_"_"$1")
}
// To lower case
set result = $zcvt(result, "l")
// _e_c_p (_c_s_p) to _ecp (_csp)
set result = $replace(result, "_e_c_p", "_ecp")
set result = $replace(result, "_c_s_p", "_csp")
quit result
}
}
Usaremos la consola para verificar que nuestros esfuerzos no han sido en vano (agregamos la clave --silent para que curl no nos estorbe con su barra de progreso):
# curl --user PromUser:Secret --silent -XGET 'http://localhost:57772/metrics/cache' | head -20# HELP isc_cache_dashboard_application_errors Number of application errors that have been logged.isc_cache_dashboard_application_errors 0# HELP isc_cache_dashboard_csp_sessions Most recent number of CSP sessions.isc_cache_dashboard_csp_sessions 2# HELP isc_cache_dashboard_cache_efficiency Most recently measured cache efficiency (Global references / (physical reads + writes))isc_cache_dashboard_cache_efficiency 2378.11# HELP isc_cache_dashboard_disk_reads Number of physical block read operations since system startup.isc_cache_dashboard_disk_reads 15101# HELP isc_cache_dashboard_disk_writes Number of physical block write operations since system startupisc_cache_dashboard_disk_writes 106233# HELP isc_cache_dashboard_ecp_app_srv_rate Most recently measured ECP application server traffic in bytes/second.isc_cache_dashboard_ecp_app_srv_rate 0# HELP isc_cache_dashboard_ecp_data_srv_rate Most recently measured ECP data server traffic in bytes/second.isc_cache_dashboard_ecp_data_srv_rate 0# HELP isc_cache_dashboard_glo_refs Number of Global references since system startup.isc_cache_dashboard_glo_refs 288545263# HELP isc_cache_dashboard_glo_refs_per_sec Most recently measured number of Global references per second.isc_cache_dashboard_glo_refs_per_sec 273.00# HELP isc_cache_dashboard_glo_sets Number of Global Sets and Kills since system startup.isc_cache_dashboard_glo_sets 44584646
Ahora podemos verificar lo mismo en la interfaz de Prometheus:
Y aquí está la lista de nuestras métricas:
No nos enfocaremos en verlas en Prometheus. Puedes seleccionar la métrica que necesites y hacer clic en el botón "Execute". Selecciona la pestaña "Graph" para ver la gráfica (muestra la eficiencia del caché):
Visualización de métricas
Con fines de visualización, instalemos Grafana. Para este artículo, elegí la instalación desde un tarball. Sin embargo, hay otras opciones de instalación, desde paquetes hasta un contenedor. Sigamos los siguientes pasos (después de crear la carpeta /opt/grafana y entrar a ella):
Dejemos la configuración sin cambios por ahora. En nuestro último paso, iniciamos Grafana en segundo plano (background mode). Guardaremos el log de Grafana a un archivo, igual que lo hicimos con Prometheus:
# ./bin/grafana-server > /var/log/grafana.log 2>&1 &
Por defecto, la interfaz web de Grafana está accesible a través el puerto 3000. Usuario/contraseña: admin/admin.
Para tener instrucciones detalladas sobre cómo hacer que Prometheus funcione con Grafana, hac clic aquí. En resumen, necesitamos añadir una nueva Fuente de Datos del tipo Prometheus. Selecciona tu opción para acceso directo/proxy:
Una vez hecho esto, necesitamos añadir un tablero con los paneles necesarios. El ejemplo de prueba de un tablero está disponible públicamente, junto con el código de la clase de recolección de métricas. Es posible importar fácilmente un tablero a Grafana (Dashboards → Import):
Tras la importación, obtendremos lo siguiente:
Guarda el tablero:
Puedes seleccionar el intervalo de tiempo y el plazo de actualización en la esquina superior derecha:
Ejemplos de tipos de monitorización
Probemos la monitorización de llamadas a globales:
USER>for i=1:1:1000000 {set ^prometheus(i) = i}USER>kill ^prometheus
Podemos ver que el número de referencias a globales por segundo ha aumentado, mientras que la eficiencia del caché cayó (la global ^Prometheus aún no se ha guardado en caché):
Veamos nuestro uso de licencias. Para esto, vamos a crear una página CSP primitiva, llamada PromTest.csp, en el namespace USER:
<html><head><title>Prometheus Test Page</title></head><body>Monitoring works fine!</body></html>
Y la visitaremos tantas veces (asumimos que la aplicación /csp/user no está protegida por contraseña):
# ab -n77 http://localhost:57772/csp/user/PromTest.csp
Veremos la siguiente imagen de uso de licencias:
Conclusiones
Como podemos ver, implementar la funcionalidad de monitorización no es nada difícil. Incluso después de unos pocos pasos iniciales, podemos obtener información importante sobre el trabajo del sistema, como: uso de licencias, eficiencia del caché de globales (globals caching) y errores de aplicación. Para este tutorial usamos el tablero SYS.Stats.Dashboard, pero otras clases de paquetes SYS, %SYSTEM, %SYS también merecen atención. También puedes escribir tu propia clase que genere métricas personalizadas para tu propia aplicación. Por ejemplo: el número de documentos de un tipo en particular. Algunas métricas útiles, con el tiempo, se compilarán en una plantilla separada para Grafana.
Continuará
Si le interesa aprender más sobre este tema, escribiré más sobre el mismo. Estos son mis planes:
Preparar una plantilla para Grafana con métricas para el daemon de registro. Sería interesante hacer algún tipo de gráfico equivalente de la herramienta ^mgstat – al menos para alguna de sus métricas.
La protección con contraseña para las aplicaciones web es buena, pero sería bueno verificar la posibilidad de usar certificados.
Usar Prometheus, Grafana y algunos exportadores para Prometheus como contenedores Docker.
Usar servicios de descubrimiento (discovery services) para añadir automáticamente nuevas instancias de Caché a la lista de monitorización de Prometheus. Aquí es también donde querría demostrar (en la práctica) lo conveniente que son Grafana y sus plantillas. Esto es parecido a los paneles dinámicos, donde se muestran las métricas de un servidor seleccionado en particular, todo en el mismo tablero.
Administrador de Alertas de Prometheus (Prometheus Alert Manager).
Ajustes de configuración de Prometheus relacionados con la duración de los datos almacenados, así como posibles optimizaciones para sistemas con una gran cantidad de métricas y un intervalo corto de recopilación de estadísticas.
Otras ideas útiles y detalles que surgirán en el camino.
Enlaces útiles
Al preparar este artículo, visité varios sitios web útiles y vi una gran cantidad de videos:
Prometheus project website
Grafana project website
Blog of one of Prometheus developers called Brian Brazil
Tutorial on DigitalOcean
Some videos from Robust Perception
Many videos from a conference devoted to Prometheus
¡Gracias por leer hasta aquí! Este artículo está etiquetado como "Mejores prácticas" ("Best practices")
(Los artículos con la etiqueta "Mejores prácticas" incluyen recomendaciones sobre cómo desarrollar, probar, implementar y administrar mejor las soluciones de InterSystems).
Anuncio
Esther Sanchez · 20 oct, 2020
¡Hola desarrolladores!
¡Tenemos buenas noticias para todos los usuarios de nuestra comunidad que hablan portugués!
Estamos encantados de anunciar el lanzamiento oficial de la Comunidad de Desarrolladores de InterSystems en portugués! 🎉
Y os presento a @Rochael.Ribeiro y @Angelo.Braga5765, de InterSystems Brazil, que serán las personas que gestionarán la Comunidad de Desarrolladores en portugués.
Repasamos algunos de los aspectos básicos sobre las traducciones:
➡️ Podéis elegir el idioma de la Comunidad con los botones situados en la parte superior derecha de la página de inicio:
Si sabes hablar portugués, sería genial que contribuyeras con artículos, preguntas, respuestas... en la nueva Comunidad!
Además...
➡️ Puedes usar el Botón de idioma para cambiar a la versión en portugués de las publicaciones.
➡️ Si publicas un artículo en inglés, puedes ser traducido al portugués por cualquiera, para que sea útil para más personas.
Ahora, cualquiera puede añadir la traducción de un artículo publicado en la Comunidad. Si quieres añadir una traducción, solicita permiso al autor en el mismo artículo, en la pestaña "Traducción" o, si ya tienes la traducción hecha, añade la URL ahí:
➡️ De la misma forma sucede con la Comunidad en portugués – puedes traducir a inglés los artículos en portugués. Solo debes asegurarte de que conoces bien los dos idiomas! :)
¡Bienvenidos todos a la Comunidad de Desarrolladores en portugués! 🚀
No dudes en comentar o dar tu opinión sobre cómo hacer aún mejor la nueva Comunidad.
Anuncio
Esther Sanchez · 21 oct, 2020
¡Hola Comunidad!
Os traemos un nuevo vídeo, disponible en el canal de YouTube de la Comunidad de Desarrolladores en inglés:
⏯ Introducción a InterSystems Reports
InterSystems Reports, desarrollado junto con Logi Analytics, es una herramienta de generación de informes, que permite crear y visualizar, de forma sencilla, informes con todo tipo de datos. El vídeo muestra cómo funciona InterSystems Reports y sus principales componentes.
➡️ Podéis suscribiros al canal de YouTube de la Comunidad de Desarrolladores en inglés.
Esperamos que os resulte útil
Anuncio
Esther Sanchez · 13 oct, 2020
¡Hola desarrolladores!
El sexto concurso para desarrolladores de InterSystems ya ha terminado. ¡Muchas gracias a todos los participantes!
Ya podemos anunciar los ganadores...
Un fuerte aplauso para estos desarrolladores y sus aplicaciones:
🏆 Nominación de los expertos - los ganadores fueron elegidos por un jurado especialmente formado para el concurso:
🥇 1er puesto y $2,000 para el proyecto npm-iris de @Henrique.GonçalvesDias
🥈 2º puesto y $1,000 para el proyecto apptools-admin de @MikhailenkoSergey
🥉 3er puesto y $500 para el proyecto realworld-intersystems-iris de @Dmitry.Maslennikov
🏆 Nominación de la Comunidad - las aplicaciones que recibieron el mayor número de votos:
🥇 1er puesto y $1,000 para el proyecto npm-iris de @Henrique.GonçalvesDias
🥈 2º puesto y $250 para el proyecto apptools-admin de @MikhailenkoSergey
🥈 2º puesto y $250 para el proyecto restoreUI de @Vasiliy.Bondar
¡Enhorabuena a todos!
Y gracias de nuevo a todos los participantes, por el esfuerzo e ingenio que habéis puesto en el concurso
¿Y qué más?
Hay una serie de concursos planificados para todo el año, así que ya podéis inscribiros al siguiente!
➡️ Próximos concursos
Anuncio
Esther Sanchez · 4 nov, 2020
¡Hola desarrolladores!
Os traemos un nuevo vídeo sobre InterSystems Reports, la nueva herramienta desarrollada junto con Logi Analytics, para la generación de informes.
InterSystems Reports permite crear y visualizar, de forma sencilla, informes con todo tipo de datos. ¡Echadle un vistazo!
⏯ Un vistazo a InterSystems Reports
👉🏼 Aquí podéis suscribiros al canal de YouTube de la Comunidad de Desarrolladores en inglés.
Esperamos que os resulte útil
Anuncio
Esther Sanchez · 29 dic, 2020
¡Hola, Comunidad!
Hemos añadido la categoría **"Servicios Empresariales" a los regalos disponibles en [Global Masters](https://intersystems.influitive.com/)**. Así que ahora, a cambio de los puntos que consigas, puedes promocionar aplicaciones, soluciones y servicios de tu empresa en la Comunidad de Desarrolladores y en nuestras redes sociales.
Cupón de $1 000 para Google AdWords;
Banner promocional en la sección "Noticias" de la Comunidad de Desarrolladores;
Promoción de tu proyecto Open Exchange en la Comunidad de Desarrolladores;
Webinar apoyado por InterSystems;
Vídeo en el canal de YouTube de la Comunidad de Desarrolladores en inglés;
Etiqueta para tu empresa en la Comunidad de Desarrolladores.
Cupón de $1 000 para Google AdWords
Canjea este premio y podrás promocionar tu aplicación OEX en Google Adwords.Nosotros organizaremos la campaña (palabras clave, descripción, audiencia) y enviaremos un informe cuando la campaña haya terminado.
Requisitos: La aplicación debe funcionar en InterSystems IRIS/IRIS for Health o ser una herramienta que pueda administrarse/desarrollarse con IRIS.
3 000 puntos
Banner promocional en la sección "Noticias" de la Comunidad de Desarrolladores
Canjea este premio y podrás promocionar servicios, eventos o vacantes de tu empresa en la Comunidad de Desarrolladores. Duración: 1 semana. El banner se mostrará en todos los sitios web de la Comunidad de Desarrolladores, en la columna lateral derecha de la página de inicio. Nuestro diseñador preparará el banner para ti.
Requisitos: Los servicios de desarrollo, eventos o vacantes han de estar relacionados con la tecnología de InterSystems.
1 500 puntos
Promoción de tu proyecto Open Exchange en la Comunidad de Desarrolladores
Canjea este premio y podrás promocionar tu proyecto OEX en la Comunidad de Desarrolladores.Se mostrará un banner con un enlace a tu proyecto, bajo el título "App de la semana", en todos los sitios web de la Comunidad de Desarrolladores, en la columna lateral derecha de la página de inicio. Duración: 1 semana.
1 000 puntos
Webinar apoyado por InterSystems
¿Te gustaría organizar un webinar profesional para desarrolladores, para promocionar una solución/herramienta y los servicios de tu empresa? Canjea este premio y te ayudaremos a organizarlo.
Qué obtendrás:
El equipo de InterSystems organizará un webinar online;
Promoción del webinar en la Comunidad de Desarrolladores y sus redes sociales;
Página de inscripción en la Comunidad de Desarrolladores;
Prueba antes del webinar y soporte técnico durante el mismo.
Requisitos: La aplicación debe funcionar en InterSystems IRIS/IRIS for Health o ser una herramienta que pueda administrarse/desarrollarse con IRIS.
3 000 puntos
Vídeo en el canal de YouTube de la Comunidad de Desarrolladores en inglés
¿Tienes un vídeo en YouTube que describe una herramienta, solución o servicio relacionado con InterSystems? Puedes aumentar el tráfico a tu vídeo si eliges el "Video Boost Pack":
Qué obtendrás:
Promoción del vídeo en el canal de YouTube de la Comunidad de Desarrolladores en inglés.
Mostrarlo en el resumen de vídeos del mes ("InterSystems Developers Videos"). Aquí puedes ver un ejemplo.
Promoción en Global Masters y las redes sociales de la Comunidad de Desarrolladores.
1 500 puntos
Etiqueta para tu empresa en la Comunidad de Desarrolladores
Canjea este premio y obtendrás una etiqueta para tu empresa, que se añadirá al listado de etiquetas de la Comunidad de Desarrolladores. La etiqueta incluye una descripción, y la posibilidad de obtener suscriptores a tu etiqueta.
5 000 puntos
¿Cómo obtener los premios si aún no eres miembro de Global Masters?
➡️ Te invitamos a participar:
1. Inicia sesión en [Global Masters](http://intersystems.influitive.com/) con las mismas credenciales que utilizas en la Comunidad de Desarrolladores.
2. Responde las cuatro preguntas del desafío “[Customize your program! START HERE!](http://intersystems.influitive.com/challenges/75)".
3. Los puntos que obtengas por tu contribución en OEX y en la Comunidad de Desarrolladores se te añadirán automáticamente durante los siguientes tres días.
4. Puedes canjear los premios disponibles en el catálogo de [Rewards](http://intersystems.influitive.com/rewards).
La Comunidad de Desarrolladores de InterSystems cuenta con una audiencia de más de 35 mil personas que la visitan cada mes. ¡Deja que todos conozcan tus aplicaciones, soluciones y servicios basados en la tecnología de InterSystems!
Si tenéis cualquier duda o consulta, podéis escribirnos en los comentarios de abajo.
* * *
Información adicional sobre Global Masters: ¿Qué es Global Masters? Comenzar aquí
Anuncio
Esther Sanchez · 23 nov, 2020
¡Hola desarrolladores!
El séptimo concurso para desarrolladores de InterSystems ya ha terminado. ¡Muchas gracias a todos los participantes!
Así que ya podemos anunciar los ganadores...
Un fuerte aplauso para estos desarrolladores y sus aplicaciones:
🏆 Nominación de los expertos - los ganadores fueron elegidos por un jurado especialmente formado para el concurso:
🥇 1er puesto y $2,000 para el proyecto Open API Client Gen de @Lorenzo.Scalese
🥈 2º puesto y $1,000 para el proyecto OCR Service de @Yuri.Gomes
🥉 3er puesto y $250 para el proyecto IRIS Interoperability Message Viewer de @Henrique.GonçalvesDias
🥉 3er puesto y $250 para el proyecto interoperability-integratedml-adapter de @José.Pereira
🏆 Nominación de la Comunidad - las aplicaciones que recibieron el mayor número de votos:
🥇 1er puesto y $1,000 para el proyecto OCR Service de @Yuri.Gomes
🥈 2º puesto y $500 para el proyecto IRIS Interoperability Message Viewer de @Henrique.GonçalvesDias
🥉 3er puesto y $250 para el proyecto Open API Client Gen de @Lorenzo.Scalese
¡Enhorabuena a todos!
Y gracias de nuevo a todos los participantes, por el esfuerzo e ingenio que habéis puesto en el concurso
¿Y qué más?
¡Ya está listo el útlimo concurso del año! El tema es: InterSystems Analytics y podréis participar desde el día 7 de diciembre. ¡Así que ya podéis empezar a pensar en vuestra próxima aplicación! Muchas gracias @Esther.Sanchez y ES comunidad
Anuncio
Jose-Tomas Salvador · 23 nov, 2020
Estamos encantados de anunciar que DBeaver soporta InterSystems IRIS con la configuración predeterminada desde la versión 7.2.4. Ya no necesitas configurarlo manualmente, solo busca el icono de IRIS en la "Connections list".
Todos los campos necesarios ya están completados. Pero no te olvides de introducir tu nombre de usuario y password.
Por defecto, el driver de InterSystems IRIS no está incluido en DBeaver. Para la primera conexión, DBeaver sugiere descargar el driver del repositorio oficial de InterSystems en GitHub. Este driver se usará para todas las conexiones siguientes.
La versión actual no contiene las caracterísitcas específicas de IRIS, pero todas las funciones principales de DBeaver funcionarán para tu base de datos. Si consideras que puede ser importante añadir algo más, háznoslo saber.
Muchas gracias para explicarlo! Ahora es más fácil!
Anuncio
Esther Sanchez · 28 dic, 2020
¡Hola desarrolladores!
El octavo concurso para desarrolladores de InterSystems ya ha terminado. ¡Muchas gracias a todos los participantes!
Así que ya podemos anunciar los ganadores...
Un fuerte aplauso para estos desarrolladores y sus aplicaciones:
🏆 Nominación de los expertos - los ganadores fueron elegidos por un jurado especialmente formado para el concurso:
🥇 1er puesto y $2,000 para el proyecto iris-analytics-notebook de @José.Pereira
🥈 2º puesto y $1,000 para el proyecto website-analyzer de @Yuri.Gomes
🥉 3er puesto y $500 para el proyecto iris-analytics-package de @Henrique.GonçalvesDias
🏆 Nominación de la Comunidad - las aplicaciones que recibieron el mayor número de votos:
🥇 1er puesto y $1,000 para el proyecto iris-analytics-package de @Henrique.GonçalvesDias
🥈 2º puesto y $500 para el proyecto iris-analytics-notebook de @José.Pereira
🥉 3er puesto y $250 para el proyecto website-analyzer de @Yuri.Gomes
¡Enhorabuena a todos!
Y gracias de nuevo a todos los participantes, por el esfuerzo e ingenio que habéis puesto en el concurso
¿Y qué más?
Pronto anunciaremos el próximo concurso - ¡estad atentos a las noticias de la Comunidad!
➡️ Más detalles en esta publicación Gracias comunidad ES!
Artículo
Eduardo Anglada · 23 jun, 2021
Según la consultora IDC, más del 80% de la información es de tipo NoSQL, especialmente texto en documentos. Cuando los servicios o aplicaciones digitales no procesan toda esta información, la empresa pierde. Para resolver este desafío, es posible utilizar la tecnología OCR. El Reconocimiento Óptico de Caracteres (OCR) utiliza la tecnología de *machine learning* y/o el reconocimiento de patrones en imágenes para transformar los pixeles de las imágenes en texto. Esto es importante porque muchos documentos se escanean como imágenes, o muchos documentos contienen imágenes con texto en su interior. Por eso la tecnología OCR es un paso importante para obtener toda la información posible de un documento.
Para hacer OCR de un documento, la solución de código abierto más utilizada es Tesseract de Google, es la más popular entre la comunidad que utiliza Python y Java. Tesseract es compatible con más de 100 idiomas y puede aprender a reconocer nuevos modelos, como matrículas de automóviles, captchas y muchas cosas más. Tesseract fue creada en C++, de modo que Java lo utiliza con la ayuda de un intermediario llamado Tess4J. Este código sirve de muestra:
private String extractTextFromImage(File tempFile) throws TesseractException {
ITesseract tesseract = new Tesseract();
tesseract.setDatapath("/usr/share/tessdata/"); //directory to trained models
tesseract.setLanguage("eng+por"); // choose your language/trained model
return tesseract.doOCR(tempFile); //call tesseract function doOCR()
//passing the file to be processed with OCR technique
}
Para permitir que IRIS utilice esta clase de Java y obtenga los resultados desde Java, necesitamos utilizar las soluciones PEX y Java Gateway.
En primer lugar, es necesario configurar el proxy de Java en la producción y, en segundo lugar, configurar una *Business Operation* o *Service* en PEX para comunicar IRIS y Java en una producción.
Class dc.ocr.OcrProduction Extends Ens.Production
{
XData ProductionDefinition
{
<Production Name="dc.ocr.OcrProduction" LogGeneralTraceEvents="false">
<Description></Description>
<ActorPoolSize>2</ActorPoolSize>
<Item Name="OcrService" Category="" ClassName="dc.ocr.OcrService" PoolSize="1" Enabled="true"
Foreground="false" Comment="" LogTraceEvents="false" Schedule="">
</Item>
<Item Name="JavaGateway" Category="" ClassName="EnsLib.JavaGateway.Service" PoolSize="1"
Enabled="true" Foreground="false" Comment="" LogTraceEvents="false" Schedule="">
<Setting Target="Host" Name="ClassPath">.:/usr/irissys/dev/java/lib/JDK18/*:/opt/irisapp/*
:/usr/irissys/dev/java/lib/gson/*
:/usr/irissys/dev/java/lib/jackson/*:/jgw/ocr-pex-1.0.0.jar
</Setting>
<Setting Target="Host" Name="JavaHome">/usr/lib/jvm/java-8-openjdk-amd64/</Setting>
</Item>
<Item Name="OcrOperation" Category="" ClassName="EnsLib.PEX.BusinessOperation" PoolSize="1"
Enabled="true" Foreground="false" Comment="" LogTraceEvents="false" Schedule="">
<Setting Target="Host" Name="%gatewayPort">55555</Setting>
<Setting Target="Host" Name="%remoteClassname">community.intersystems.pex.ocr.OcrOperation</Setting>
<Setting Target="Host" Name="%gatewayExtraClasspaths">.:/usr/irissys/dev/java/lib/JDK18/*
:/opt/irisapp/*:/usr/irissys/dev/java/lib/gson/*
:/usr/irissys/dev/java/lib/jackson/*
:/jgw/ocr-pex-1.0.0.jar
</Setting>
</Item>
</Production>
}
}
¡Ahora cualquier producción de IRIS puede comunicarse con Java y Tesseract! Para comprobarlo, mira:
//call ocr method to get text from image, if you want to use pex
Set pRequest = ##class(dc.ocr.OcrRequest).%New()
Set pRequest.FileName = file.Filename
// call java pex operation to do ocr, passing file into pRequest and receive ocr text with pResponse
Set tSC = ..SendRequestSync("OcrOperation", pRequest, .pResponse, 1200)
//save the results into database to use text analytics - nlp
Set ocrTable = ##class(dc.ocr.OcrTable).%New()
Set ocrTable.FileName = file.Filename
Set ocrTable.OcrText = pResponse.StringValue
Set tSC = ocrTable.%Save()
Toda la información sobre el código, con los respectivos comentarios, puede encontrarse en mi repositorio del servicio OCR (https://openexchange.intersystems.com/package/OCR-Service).
Ahora, con el texto extraído, necesitamos utilizar el motor PNL de IRIS para analizar los datos del texto y obtener información que nos permita tomar decisiones. Para ello, cuando se extrae un texto, se guarda en una tabla, y dicha tabla es utilizada por el motor de PNL como una fuente de texto. Mira la tabla %Save() anterior y analiza el siguiente código con PNL, que hace referencia a la OCRTable (que incluye los textos extraídos):
Class dc.ocr.OcrNLP Extends %iKnow.DomainDefinition [ ProcedureBlock ]
{
XData Domain [ XMLNamespace = "http://www.intersystems.com/iknow" ]
{
<domain name="OcrNLP" disabled="false" allowCustomUpdates="true">
<parameter name="DefaultConfig" value="OcrNLP.Configuration" isList="false" />
<data dropBeforeBuild="true">
<table listname="OcrNLPTable" batchMode="true" disabled="false"
listerClass="%iKnow.Source.SQL.Lister" tableName="dc_ocr.OcrTable" idField="ID"
groupField="ID" dataFields="OcrText" metadataColumns="FileName" metadataFields="filename" />
</data>
<matching disabled="false" dropBeforeBuild="true" autoExecute="true" ignoreDictionaryErrors="true" />
<metadata>
<field name="filename" operators="=" dataType="STRING" storage="0" caseSensitive="false" disabled="false" />
</metadata>
<configuration name="OcrNLP.Configuration" detectLanguage="true" languages="en,pt"
userDictionary="OcrNLP.Dictionary#1" summarize="true" maxConceptLength="0" />
<userDictionary name="OcrNLP.Dictionary#1" />
</domain>
}
}
Consulta toda la información y la configuración en mi repositorio de GitHub sobre el servicio OCR.
Ahora podemos cargar algunos archivos e ir al Explorador para ver los conceptos y el CRC generados.
Este gif incluye todos los pasos comentados en este artículo:

Anuncio
Esther Sanchez · 13 ene, 2021
¡Hola desarrolladores!
Ya tenemos el listado de vídeos más vistos durante 2020 en el canal de YouTube de la Comunidad de Desarrolladores en inglés.
¿Los habéis visto todos? ¡Mirad el "top 10" por número de visualizaciones y por tiempo de visualización! ⬇️
Top 10 vídeos por visualizaciones
№
Vídeo
Visualizaciones
1
Active Directory Integration with LDAP
13 079
2
SMART on FHIR: The Basics
7 463
3
Building Modern Web Applications
6 133
4
ObjectScript with Visual Studio Code
5 491
5
Developing with FHIR - REST APIs
5 195
6
Create Your First InterSystems ObjectScript Code with IRIS Community, GitHub, Docker and VSCode
1 487
7
Managed File Transfer
1 326
8
Sizing and Capacity Planning
1 200
9
Using Visual Studio Code and ObjectScript
1 155
10
Creating CRUD REST API for InterSystems IRIS in 5 minutes
1 013
Top 10 vídeos por tiempo de visualización
№
Vídeo
WT (horas)
1
SMART on FHIR: The Basics
1 226,6
2
Active Directory Integration with LDAP
798,1
3
Building Modern Web Applications
485,6
4
Developing with FHIR - REST APIs
446,3
5
Introducing InterSystems IRIS Data Platform
104,5
6
Sizing and Capacity Planning
101,0
7
Introduction to VSCode-ObjectScript Webinar
86,1
8
Create Your First InterSystems ObjectScript Code with IRIS Community, GitHub, Docker and VSCode
79,7
9
Certificate Revocation, OCSP Stapling and KMIP
72,4
10
ObjectScript with Visual Studio Code
63,9
Esperamos que os resulten útiles
Y recordad que podéis suscribiros al canal de YouTube de la Comunidad de Desarrolladores en inglés para manteneros formados e informados.
Anuncio
Esther Sanchez · 12 ene, 2021
¡Hola Comunidad!
Os traemos un nuevo vídeo, que muestra cómo usar herramientas de validación en InterSystems IRIS para evaluar y validar el comportamiento de una producción:
⏯ Cómo validar tus producciones de InterSystems
Esperamos que os resulte útil
Y... podéis suscribiros al canal de YouTube de la Comunidad de Desarrolladores en inglés para manteneros formados e informados.