Buscar

Limpiar filtro
Artículo
Alberto Fuentes · 15 mayo, 2020

Un contenedor para probar Machine Learning ML con IRIS, Spark y Zeppelin

¡Muy buenas! Repasemos hoy un genial artículo de David E. Nelson sobre cómo montar un entorno de pruebas utilizando contenedores Docker para experimentar con IRIS, Spark y Zeppelin. Gracias a la creciente disponibilidad de contenedores y el cada vez más útil Docker para Windows / MacOs, tengo mi propia selección de entornos preconfigurados para aprendizaje automático y *data science*. Por ejemplo, [Jupyter Docker Stacks](https://jupyter-docker-stacks.readthedocs.io/en/latest/index.html) y [Zeppelin](https://hub.docker.com/r/apache/zeppelin) en Docker Hub. Gracias también a la edición IRIS Community en un contenedor, tenemos un práctico acceso a una plataforma de datos que admite tanto el aprendizaje automático y análisis junto con otras muchas funciones. Al usar contenedores, no necesito preocuparme por actualizaciones automáticas que puedan arruinar mi área de pruebas. Si mi oficina se inundara y el portátil quedara inservible, podría recrear fácilmente el área de pruebas con un único archivo de texto, que por supuesto subí a un sistema de control de versiones ;-) A continuación compartiré el archivo de Docker Compose que usé para crear un área de pruebas basada en un contenedor para Machine Learning. El área de pruebas comprende dos contenedores: uno con un entorno Zeppelin y Spark, el otro con la plataforma de datos InterSystems IRIS community. Ambos usan imágenes disponibles en Docker Hub. Luego mostraré cómo configurar el InterSystems Spark Connector para conectarlos entre sí. Para terminar, cargaré algunos datos en InterSystems IRIS y usaré Spark para hacer exploración y visualización de datos y algún aprendizaje automático muy básico. Por supuesto, mi ejemplo apenas tocará la superficie de las capacidades tanto de Spark como de InterSystems IRIS. Sin embargo, espero que el artículo sea útil para que otros comiencen a realizar tareas más complejas y útiles. ## Archivo Docker Compose * Dos contenedores: uno contiene InterSystems IRIS Community Edition y el otro contiene tanto el entorno de bloc de notas Zeppelin y Apache Spark. Ambos contenedores se basan en imágenes tomadas de la tienda de Docker. * Una conexión de red entre ambos contenedores. Con esta técnica, podemos usar los nombres de los contenedores como nombres de host al configurar la comunicación entre los contenedores. * Directorios locales montados en cada contenedor. Podemos usar estos directorios para hacer que los archivos jar queden disponibles para el entorno Spark y para que algunos archivos de datos queden disponibles para el entorno IRIS. * Un volumen con nombre para la funcionalidad duradera %SYS que requiere InterSystems IRIS. InterSystems IRIS requiere volúmenes con nombres cuando se ejecuta dentro de contenedores en Docker para Windows. Por más información sobre este tema, consulte abajo los enlaces a otros artículos de la comunidad. * Mapear algunos puertos de red dentro de los contenedores a puertos disponibles fuera de los contenedores para brindar un fácil acceso. ``` version: '3.2' services: # contenedor con InterSystems IRIS iris: # imagen de iris community edition a extraer de la tienda Docker. image: store/intersystems/iris:2019.1.0.510.0-community container_name: iris-community ports: # 51773 es el puerto predeterminado del superserver - "51773:51773" # 52773 es el puerto predeterminado del webserver/portal de gestión - "52773:52773" volumes: # Crea un volumen con nombre durable_data que guardará los datos duraderos %SYS - durable:/durable # Mapea un directorio /local para permitir el fácil traspaso de archivos y scripts de prueba - ./local/samples:/samples/local environment: # Configurar la variable ISC_DATA_DIRECTORY al volumen durable_data que definimos antes para usar %SYS duradero - ISC_DATA_DIRECTORY=/durable/irissys # Agrega el contenedor IRIS a la red definida a continuación. networks: - mynet # contenedor con Zeppelin y Spark zeppelin: # bloc de notas zeppelin con imagen de spark para extraer desde docker store. image: apache/zeppelin:0.8.1 container_name: spark-zeppelin # Puertos para acceder al entorno Zeppelin ports: # Puerto para bloc de notas Zeppelin - "8080:8080" # Puerto para página de trabajos Spark - "4040:4040" # Mapea directorios /local para guardar blocs de notas y acceder a archivos jar. volumes: - ./local/notebooks:/zeppelin/notebook - ./local/jars:/home/zeppelin/jars # Agrega el contenedor Spark y Zeppelin a la red definida a continuación. networks: - mynet #Declara el volumen con nombre para el %SYS duradero de IRIS volumes: durable: # Define una conexión de red entre ambos contenedores. networks: mynet: ipam: config: - subnet: 172.179.0.0/16 ``` ## Puesta en funcionamiento Coloca el archivo compose en un directorio. El nombre del directorio se convierte en el nombre del proyecto Docker. Deberá crear subdirectorios que coincidan con los mencionados en el archivo docker-compose.yml. Por lo tanto, la estructura de directorio se ve así: ``` |_local |_ jars |_notebooks |_samples |_ docker-compose.yml ``` Para iniciar los contenedores, ejecuta esta comando dentro del directorio del proyecto: ```console $ docker-compose up –d ``` El *flag*` -d` inicia los contenedores en modo *detached* (estarán ejecutando en *background*). Puedes usar el comando logs de docker para los registros de log: ```console $ docker logs iris-community ``` Para inspeccionar el estado de los contenedores, podemos ejecutar lo siguiente: ```console $ docker container ls ``` Accederemos al Portal de gestión de IRIS con la URL: http://localhost:52773/csp/sys/UtilHome.csp La primera vez que iniciemos sesión en IRIS, entraremos con `superUser / SYS`. A continuación se nos pedirá modificar la contraseña por defecto. Al bloc de notas Zeppelin accedemos a través de la URL: http://localhost:8080 ### Copiar algunos archivos jar Para usar el InterSystems Spark Connector, el entorno Spark debe acceder a dos archivos jar: * intersystems-jdbc-3.0.0.jar * intersystems-spark-1.0.0.jar Estos archivos jar están dentro de IRIS en el contenedor iris-community. Debemos copiarlos al directorio localmente mapeado, para que el contenedor spark-zeppelin pueda acceder a ellos. Para esto, podemos usar el comando cp de Docker para copiar todos los archivos desde dentro del contenedor iris-community hacia uno de los directorios locales visibles para el contenedor spark-zeppelin: ```console $ docker cp iris-community:/usr/irissys/dev/java/lib/JDK18 local/jars ``` ## Agregar datos Sin datos no hay Machine Learning. Podemos usar los directorios locales montados por el contenedor iris-community para agregar datos a IRIS. Utilizaremos el clásico [conjunto de datos sobre la flor Iris](https://en.wikipedia.org/wiki/Iris_flower_data_set). Desde hace tiempo este conjunto de datos cumple la función de ejemplo "Hola Mundo" para Machine Learning. Puedes descargar o extraer una definición de clase de InterSystems para generar los datos, junto con código para varios ejemplos relacionados, de GitHub ([Samples-Data-Mining](https://github.com/intersystems/Samples-Data-Mining)). Nos interesa únicamente un archivo de este conjunto: `DataMining.IrisDataset.cls`. Copia `DataMining.IrisDataset.cls` al directorio `/local/samples`. A continuación, para abrir un intérprete bash dentro del contenedor iris-community, ejecuta: ```console $ docker exec –it iris-community bash ``` Desde el intérprete bash, inicia una sesión de terminal IRIS con el usuario *superuser* y la contraseña que cambiaste anteriormente en el portal de gestión. ```console /# iris session iris ``` Cargamos la clase para generar los datos en IRIS: ``` USER>Do $System.OBJ.Load(“/samples/local/IrisDataset.cls”,”ck”) ``` A continuación, generamos los datos: ``` USER>Set status = ##class(DataMining.IrisDataset).load() USER>Write status ``` La base de datos ahora debería contener ahora datos de 150 ejemplos de flores Iris. ## Lanzar Zeppelin y Configurar nuestro bloc de notas En primer lugar, descarga la nota "Machine Learning Hello World" de Zeppelin disponibles https://github.com/denelson/DevCommunity. Podrás abrir el bloc de notas Zeppelin en su navegador web en la URL http://localhost:8080. Debería verse algo parecido a esto: ![](https://community.intersystems.com/sites/default/files/inline/images/images/image(103).png "Bloc de notas Zeppelin") Hacemos click en *Import note* e importamos la nota “Machine Learning Hello World.json” que habíamos descargado antes. En el primer párrafo de código cargaremos el controlador de InterSystems JDBC y Spark Connector. Por defecto, los blocs de notas Zeppelin ofrecen la variable `z` para acceder al contexto Zeppelin. Tienes más información disponible sobre [contexto Zeppelin](https://zeppelin.apache.org/docs/0.8.0/usage/other_features/zeppelin_context.html) en la documentación. ``` %spark.dep //z supplies Zeppelin context z.reset() z.load("/home/zeppelin/jars/JDK18/intersystems-jdbc-3.0.0.jar") z.load("/home/zeppelin/jars/JDK18/intersystems-spark-1.0.0.jar") ``` Antes de ejecutar el párrafo de código, hacemos click en la flecha abajo que se encuentra al lado de la palabra *anonymous* y escogemos *Interpreter*. ![](https://community.intersystems.com/sites/default/files/inline/images/images/image(104).png "Acceder a la configuración de intérpretes de Zeppelin") En la página *Intepreters*, buscamos *spark*, hacemos click en el botón *restart* (reiniciar) del lado derecho y luego en OK en el cuadro emergente que aparecerá. ![](https://community.intersystems.com/sites/default/files/inline/images/images/image(105).png) Regresamos al bloc de notas "Machine Learning Hello World" y hacemos clic en la pequeña flecha de la derecha para ejecutar el párrafo. Debería resultar algo parecido a esto: ![](https://community.intersystems.com/sites/default/files/inline/images/images/image(107).png) ## Conectar con IRIS y explorar los datos Ya está todo configurado. Ahora podemos conectar el código que se ejecuta en el contenedor *spark-zeppelin* con InterSystems IRIS, que se ejecuta en nuestro contenedor iris-community, y comenzar a explorar los datos que agregamos antes. El siguiente código Python se conecta con InterSystems IRIS y lee la tabla de datos que cargamos en un paso anterior (`DataMining.IrisDataset`), para luego mostrar las primeras diez filas. A continuación dejo algunas notas sobre el siguiente código: * Necesitamos pasar el usuario y la contraseña en la conexión a IRIS. Utiliza la contraseña que hayas establecido en pasos anteriores. En el ejemplo usamos SuperUser/SYS1. * El `iris` dentro del fragmento de código `spark.read.format(“iris”)` es un alias para la clase `com.intersystems.spark`, el conector *spark*. * La URL de conexión, incluyendo "IRIS" al inicio, especifica la ubicación del servidor maestro Spark predeterminado de InterSystems IRIS. * La variable `spark` apunta a la sesión Spark brindada por el intérprete Spark de Zeppelin. ``` %pyspark uname = "SuperUser" pwd = "SYS1" # sesión spark disponible de forma predeterminada a través de la variable spark. # La URL usa el nombre del contenedor, iris-community, como nombre de host. iris = spark.read.format("iris").option("url","IRIS://iris-community:51773/USER").option("dbtable","DataMining.IrisDataset").option("user",uname).option("password",pwd).load() iris.show(10) ``` Nota: tienes más información dispone en [Uso de InterSystems Spark Connector](https://irisdocs.intersystems.com/iris20191/csp/docbook/DocBook.UI.Page.cls?KEY=BSPK_intro) y [SparkContext, SQLContext, SparkSession, ZeppelinContext](http://SparkContext,%20SQLContext,%20SparkSession,%20ZeppelinContext). Al ejecutar el párrafo anterior se obtiene la siguiente salida: ![](https://community.intersystems.com/sites/default/files/inline/images/images/image(108).png) Cada fila representa una flor individual y registra el largo y ancho de sus pétalos, su largo y ancho de sépalo, y la especie de Iris a la que pertenece. ``` %pyspark iris.groupBy("Species").count().show() ``` ![](https://community.intersystems.com/sites/default/files/inline/images/images/image(111).png) Así, hay tres especies de Iris distintas representadas en los datos. Los datos representan a cada especie por igual. Incluso podemos usar la biblioteca *matplotlib* de Python para dibujar algunas gráficas. Este es el código para representar Largo de pétalo (*Petal length*) frente a Ancho de pétalo (*Petal width*): ``` %pyspark %matplotlib inline import matplotlib.pyplot as plt #Recuperar una matriz de objetos de fila desde el DataFrame items = iris.collect() petal_length = [] petal_width = [] for item in items: petal_length.append(item['PetalLength']) petal_width.append(item['PetalWidth']) plt.scatter(petal_width,petal_length) plt.xlabel("Petal Width") plt.ylabel("Petal Length") plt.show() ``` ![](https://community.intersystems.com/sites/default/files/inline/images/images/image(112).png) Incluso para el ojo no entrenado, parece haber una fuerte correlación entre largo y ancho de pétalo. Deberíamos poder predecir de forma confiable el largo de pétalo en base al ancho de pétalo. ## Un poco de aprendizaje automático Para predecir el largo de pétalo en base al ancho de pétalo, necesitamos un modelo de la relación entre ambos. Podemos usar Spark para crear dicho modelo muy fácilmente. A continuación utilizamos un código que usa la API de regresión lineal de Spark para entrenar un modelo de regresión. El código hace lo siguiente: 1. Crea un nuevo *DataFrame* de Spark que contiene las columnas de largo y ancho de pétalo. La columna de ancho de pétalo representa la "característica" y la columna de largo de pétalo representa las "etiquetas". Usamos las características para predecir las etiquetas. 2. Divide los datos aleatoriamente en un conjunto de entrenamiento (70%) y uno de pruebas (30%). 3. Usa los datos de entrenamiento para ajustar el modelo de regresión lineal. 4. Aplica el modelo a los datos de prueba y luego muestra el largo de pétalo, ancho de pétalo, características y predicciones. ``` %pyspark from pyspark.ml.regression import LinearRegression from pyspark.ml.feature import VectorAssembler # Transformar la(s) columna(s) de "Características" (Features) al formato vectorial correcto df = iris.select('PetalLength','PetalWidth') vectorAssembler = VectorAssembler(inputCols=["PetalWidth"], outputCol="features") data=vectorAssembler.transform(df) # Dividir los datos entre conjuntos de entrenamiento y prueba. trainingData,testData = data.randomSplit([0.7, 0.3], 0.0) # Configurar el modelo. lr = LinearRegression().setFeaturesCol("features").setLabelCol("PetalLength").setMaxIter(10) # Entrenar el modelo con los datos de entrenamiento. lrm = lr.fit(trainingData) # Aplicar el modelo a los datos de prueba y mostrar sus predicciones de largo de pétalo (PetalLength). predictions = lrm.transform(testData) predictions.show(10) ``` ![](https://community.intersystems.com/sites/default/files/inline/images/images/image(114).png) ## La línea de regresión El "modelo" no es más que una línea de regresión a través de los datos. Sería interesante conocer la pendiente y punto de intersección con el eje vertical de esa línea. También sería interesante poder visualizar la línea superpuesta a nuestro diagrama de dispersión. El siguiente código recupera la pendiente e intersección con el eje vertical del modelo entrenado y luego las usa para agregar una línea de regresión al diagrama de dispersión de los datos de largo y ancho de pétalo. ``` %pyspark %matplotlib inline import matplotlib.pyplot as plt # recuperar la pendiente e intersección con el eje vertical de la línea de regresión del modelo. slope = lrm.coefficients[0] intercept = lrm.intercept print("slope of regression line: %s" % str(slope)) print("y-intercept of regression line: %s" % str(intercept)) items = iris.collect() petal_length = [] petal_width = [] petal_features = [] for item in items: petal_length.append(item['PetalLength']) petal_width.append(item['PetalWidth']) fig, ax = plt.subplots() ax.scatter(petal_width,petal_length) plt.xlabel("Petal Width") plt.ylabel("Petal Length") y = [slope*x+intercept for x in petal_width] ax.plot(petal_width, y, color='red') plt.show() ``` ![](https://community.intersystems.com/sites/default/files/inline/images/images/image(117).png) ## ¿Qué más podemos hacer? Hay mucho más que podemos hacer. Obviamente, podemos cargar conjuntos de datos mucho más grandes e interesantes en IRIS. Vea, por ejemplo, los conjuntos de datos Kaggle (https://www.kaggle.com/datasets). Con una licencia completa de IRIS podríamos configurar la fragmentación y ver cómo Spark aprovecha el paralelismo que permite la fragmentación al ejecutarse a través del InterSystems Spark Connector. Spark, por supuesto, brinda muchos otros algoritmos de aprendizaje automático y análisis de datos. Admite varios otros lenguajes, incluyendo Scala y R.
Anuncio
David Reche · 11 jul, 2019

Ya está disponible la versión Beta de Atelier 1.3.144

¡Hola a tod@s! El equipo de desarrollo de Atelier está encantado de anunciar la liberación de Atelier 1.3.144 al canal beta para Windows, Mac y Linux. Esta nueva versión incluye dos importantes mejoras - un nuevo mensaje de error para esquemas con encoding incompatible y un parser mejorado. Tienen todos los detalles en las Notas de la Versión. Para obtener la mejor experiencia de actualización, InterSystems recomienda una instalación limpia de Eclipse Photon (4.8) antes de instalar Atelier 1.3. Aquí se detalla cómo pueden hacerlo. Como siempre, ¡esperamos sus comentarios!
Anuncio
Esther Sanchez · 4 dic, 2020

Nuevo vídeo: Cómo usar Visual Studio Code y ObjectScript

¡Hola desarrolladores! Os traemos un nuevo vídeo, disponible en el canal de YouTube de la Comunidad de Desarrolladores en inglés, que muestra cómo desarrollar con InterSystems ObjectScript usando el plug-in de Visual Studio Code. ⏯ Cómo usar Visual Studio Code y ObjectScript App relacionada: VSCode-ObjectScript en Open Exchange Cursos de formación online con material adicional al vídeo: ObjectScript with Visual Studio Code Connecting via Visual Studio Code Esperamos que os resulte útil 👍🏼
Pregunta
Fernando Zañartu · 3 mar, 2021

ODBC Cache

Estimados, junto con saludar les comento que estoy realizando una aplicación en PHP que se tiene que conectar por OBDC a una base de datos cache de InterSystems, pero los enlaces de descarga del driver odbc cache que he encontrado en el foro ya no funcionan, alguien me podria decir de donde descargarlos , estoy siguiendo la siguiente documentacion: https://docs.intersystems.com/latest/csp/docbook/Doc.View.cls?KEY=BGOD_winodbcde ante mano muchas gracias. Hola, Caché ya me suena antiguo pero en cualquier caso siempre lo puedes descargar desde http://wrc.intersystems.com si no tienes cuenta intenta desde http://download.intersystems.com
Anuncio
David Reche · 30 oct, 2020

Séptimo Concurso para Desarrolladores: Interoperabilidad

¡Hola Desarrolladores! Ya está listo el nuevo concurso para crear soluciones de código abierto utilizando InterSystems IRIS o IRIS for Health. El tema de este séptimo concurso es Interoperabilidad. Estará activo durante tres semanas: del 2 al 22 de noviembre 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 🥉 3er puesto - $250 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 2 al 15 de noviembre: Dos semanas para subir las aplicaciones a Open Exchange (durante este período, se pueden modificar los proyectos). Del 16 al 22 de noviembre: Una semana para votar. Los ganadores serán anunciados el lunes 23 de noviembre. Tema del concurso 💡 Soluciones de interoperabilidad para InterSystems IRIS e IRIS for Health 💡 Desarrollo de una solución de interoperabilidad o una solución que ayude a desarrollar y/o mantener soluciones de interoperabilidad, usando InterSystems IRIS o InterSystems IRIS for Health. La aplicación debe funcionar en IRIS Community Edition o IRIS for Health Community Edition o 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. Recursos adicionales 1. Aplicaciones de ejemplo: IRIS-Interoperability-template ETL-Interoperability-Adapter HL7 and SMS Interoperability Demo Twitter Sentiment Analysis with IRIS Healthcare HL7 XML RabbitMQ adapter PEX demo 2. Cómo enviar una aplicación al concurso: How to publish an application on Open Exchange How to submit an application for the contest 3. Cursos online: Interoperability for Business Interoperability QuickStart Interoperability Resource Guide - 2019 4. Vídeos: Intelligent Interoperability Interoperability for Health Overview Jurado Consulta los Criterios del jurado y las Reglas sobre los votos. Así que... Ready. Set. Code! ¡Suerte a todos! ❗️ Echa un vistazo a los Términos Oficiales del Concurso.❗️ Ya ha empezado el concurso para desarrolladores. ¡Estamos deseando ver vuestros proyectos! Bonus tecnológicos para el concurso ¡Hola desarrolladores! Aún queda esta semana para que envieis vuestras aplicaciones al concurso sobre Interoperabilidad. Y no os preocupeis si no habéis terminado el proyecto – podéis modificar vuestras aplicaciones hasta el 22 de noviembre Cómo participar en los concursos Inicia sesión en Open Exchange, ve a "Applications" en tu perfil. Abre la aplicación con la que quieres participar en el concurso y haz clic en "Apply for Contest". Asegúrate de que el estado ha pasado a 'Published'. La aplicación pasará a ser revisada y si encaja en el tema del concurso, se añadirá a la lista del contest board.
Artículo
Muhammad Waseem · 1 dic, 2021

Cómo crear usuarios, conceder privilegios, habilitar/deshabilitar y autentificar/invalidar aplicaciones web mediante programación

En este artículo explicaré cómo, mediante programación, creé el usuario, concedí privilegios, habilité/deshabilité y autentifiqué/invalidé una aplicación web en mi aplicación Data_APP_Security (https://openexchange.intersystems.com/package/Data_APP_Security) Empecemos por la autentificación La autenticación verifica la identidad de cualquier usuario o entidad que intente conectarse a InterSystems IRIS®. Como se dice a menudo, la autentificación es la forma de demostrar que eres quien dices ser. Hay varias formas de autentificar a un usuario; cada uno se conoce como un mecanismo de autenticación. InterSystems IRIS admite varios mecanismos de autenticación: Kerberos — El protocolo Kerberos fue diseñado para proporcionar autentificación segura a los servicios a través de una red no segura. Kerberos usa tickets para autentificar a un usuario y evita el intercambio de contraseñas en la red. Basado en el sistema operativo— La autenticación basada en el SO utiliza la identidad del sistema operativo de cada usuario para identificar a ese usuario en InterSystems IRIS. Autentificación de instancia — Con la autenticación de instancia, InterSystems IRIS solicita al usuario una contraseña y compara un hash de la contraseña proporcionada con un valor que ha almacenado. Protocolo Ligero de Acceso a Directorios (LDAP) — Con el Protocolo Ligero de Acceso a Directorios, InterSystems IRIS autentifica al usuario basándose en la información de un repositorio central, conocido como servidor LDAP. Autenticación delegada— La autenticación delegada proporciona un medio para crear mecanismos de autenticación personalizados. El desarrollador de la aplicación controla por completo el contenido del código de autentificación delegado. Estoy usando Autentificación de instancia, para la creación de usuarios, podemos usar el siguiente comando de ObjectScript : &sql(CREATE USER TestUser IDENTIFY BY demo) Creamos TestUser con contraseña de demostración Autorización Una vez que se realiza la autenticación, debemos crear roles y otorgar privilegios a los roles y luego vincular los roles con los usuarios (Autorización). Esto lo haremos en tres pasos. Paso 1: Crear un rol usando el siguiente comando de ObjectScript. Estamos creando un rol de lectura y escritura &sql(CREATE ROLE ReadWrite) Paso 2: Conceder privilegios SELECT, UPDATE, INSERT en la tabla al rol. Estamos asignando privilegios de la tabla scw.Patient al rol ReadWrite &sql(GRANT SELECT,UPDATE,INSERT ON scw.Patient TO ReadWrite) Paso 3: Conceder rol al usuario. Estamos asignando el rol de lectura y escritura al usuario TestUser &sql(GRANT ReadWrite To TestUser) Habilitar/deshabilitar la aplicación web Podemos habilitar o deshabilitar la aplicación web usando el siguiente código de ObjectScript New $Namespace Set $Namespace = "%SYS" Set App = ##class(Security.Applications).%OpenId("/terminal") Set App.Enabled=0 Do App.%Save() aquí "/terminal" es el nombre de nuestra aplicación. La aplicación se puede deshabilitar configurando "App.Enabled" en 0 y habilitarla configurando el valor en 1 Autentificar/invalidar la aplicación web Podemos configurar la autentificación mediante el siguiente código de ObjectScript New $Namespace Set $Namespace = "%SYS" Set App = ##class(Security.Applications).%OpenId("/terminal") Set App.AutheEnabled=0 Do App.%Save() aquí "/terminal" es el nombre de nuestra aplicación. La autentificación se puede establecer mediante la propiedad "App.AutheEnabled". Se pueden configurar los siguientes valores numéricos property AutheEnabled as Security.Datatype.Authentication [ InitialExpression = 64 ]; Authentication and Session mechanisms enabled (CSP Only). Bit 2 = AutheK5API Bit 5 - AutheCache Bit 6 = AutheUnauthenticated Bit 11 = AutheLDAP Bit 13 = AutheDelegated Bit 14 = LoginToken Bit 20 = TwoFactorSMS Bit 21 = TwoFactorPW Gracias
Anuncio
Esther Sanchez · 2 mar, 2023

Ganadores del 2º concurso de artículos técnicos en español

¡Hola desarrolladores! Muchísimas gracias a todos los que habéis participado, de una forma u otra, en el 2º concurso de artículos técnicos en español! Hemos recibido 🌟 8 ARTÍCULOS INCREÍBLES 🌟 Y... ¡llegó el momento de anunciar los mejores! Estos son los ganadores y sus artículos: ⭐️ Premios de los expertos – los ganadores han sido elegidos por expertos de InterSystems y sumando los puntos de los bonus, cuando aplicaba: 🥇 Primer puesto: Integrando correo Outlook Exchange con oAuth 2.0 en Intersystems IRIS 2020, escrito por @Tomás.Clavero3669 🥈 Segundo puesto: Exportación a JSON - propiedades relacionales y propiedades heredadas, escrito por @Heloisa.Paiva 🥉 Tercer puesto: Añadir validación Api-Key en peticiones REST, escrito por @Daniel.Aguilar, empatado con Cómo publicar un webservice rest con autenticación, escrito por @Jaime.Lerga ⭐️ Premio de la Comunidad – el ganador es elegido por los miembros de la Comunidad y es el artículo con mayor número de "likes": 🏆 Integrando correo Outlook Exchange con oAuth 2.0 en Intersystems IRIS 2020, escrito por @Tomas.Clavero3669 Y... ⭐️ En esta ocasión, vamos a dar un Premio extra al quinto puesto de la clasificación de los expertos, porque ha estado muy cerca del podio. Podrá elegir entre los mismos premios que los clasificados en el tercer puesto. El artículo es: 🏆 Cómo controlar el acceso a tus recursos con OAuth2, escrito por @carlos.gomez ¡Enhorabuena a todos los ganadores! Contactaremos con vosotros para que nos digáis el premio que habéis elegido. ¡Y un fuerte aplauso al resto de participantes! Todos recibiréis un regalo por vuestra participación. @Laura.BlázquezGarcía @Ramón.Rodríguez @Robert.Cemper1003 ¡GRACIAS por vuestro esfuerzo y por contribuir en la Comunidad!!! Aquí podéis ver los 8 artículos y ordenarlos por votos o por expertos. ¡Hasta el próximo concurso!! 👏 felicitaciones a todos los que se han animado con sus artículos y a seguir publicando! todos han estado interesantes de leer y hacer seguimiento. un buen aporte a la comunidad sin duda!! Enhorabuena a los ganadores... ahora os toca hacer un webinar explicando el post 😱 😂 Enhorabuena a todos los que habéis participado... y gracias por compartir vuestra experiencia y conocimiento. El año que viene volvemos a la carga! :-) Enhorabuena a todos los participantes!!. 👏👏
Anuncio
Esther Sanchez · 31 mayo, 2019

Conoce a Francisco López, el primer moderador de la Comunidad de Desarrolladores en español

¡Hola Comunidad!Estamos encantados de dar la bienvenida a @Francisco.López1549 como el primer moderador de la Comunidad de Desarrolladores en español.Echemos un vistazo a su biografía: Francisco López de las Heras es un chico de cuarenta y tantos años, de Málaga (España), muy curioso, fanático de las nuevas tecnologías y que nunca deja de aprender. Fue elegido Advocate of year 2017 Spain."Siempre he trabajado en el sector de la salud, de seguros y reaseguros (Keyhelp, Sequel, CSC...). Desde hace 4 años trabajo en Salutic Soluciones, SL (www.salutic.es), una empresa de software médico con gran experiencia en el sector. Desde hace 2 años trabajo como Jefe de Proyecto y Responsable del departamento de Interoperabilidad".- comenta FranciscoCuéntanos tu experiencia con la tecnología de InterSystems:— Mi primer contacto con Intersystems Ensemble fue hace 3 años cuando una aseguradora de salud nos encargó un proyecto de integración. Y fue un "amor a primera vista". Desde entonces no he parado de investigar, probando trucos y llevando Ensemble al límite.— Espero que mi experiencia y conocimiento sean de ayuda para los demás usuarios de la tecnología de InterSystems.Os dejamos unas fotos de Francisco en Málaga. Nuestro equipo de la "Developer Community" conoció a @Francisco.López1549 en la conferencia "J on the Beach" en este mes de mayo: @Alberto.Fuentes, @David.Reche, @Dmitry.Maslennikov, @Evgeny.Shvarov y @Anastasia.Dyubaylo ¡Enhorabuena Francisco!A ver si entre todos le damos un gran impulso a la comunidad.
Anuncio
David Reche · 12 feb, 2020

Alerta: CSP Gateway puede enviar una respuesta al cliente web equivocado

*** Actualización 11/2/20 2:15pm *** *** La versión 2017.2.1 NO está afectada *** InterSystems ha corregido un defecto que puede ocasionar que el CSP Gateway envíe una respuesta al cliente web incorrecto. Este defecto no está presente en el Web Gateway. El CSP Gateway se distribuye como componente de una instalación en red y también en monopuesto. Ambas distribuciones están afectadas por el problema. El CSP Gateway instalado con el servidor web Apache para el Portal de Administración también es vulnerable. Las versiones afectadas del CSP Gateway están asociadas con Caché o Ensemble: 2016.1.4 y anteriores 2016.2.0, 2016.2.1, y 2016.2.2 2017.1.0, 2017.1.1, y 2017.1.2 2017.2.0 Versiones del CSP Gateway incluidas con todos los productos HealthShare basados en las versiones de Caché/Ensemble listadas arriba El defecto depende de la versión del CSP Gateway y es independiente de la versión de Caché o Ensemble con la que el CSP Gateway se conecta. La corrección de este defecto se identifica como CMT1608. InterSystems recomienda actualizar a la última versión de CSP Gateway (2018.1.3) todas las instalaciones de CSP Gateway afectadas. La última versión está disponible en la web del Centro de Soporte Internacional (WRC), en el apartado ‘Components’. Los clientes con soporte pueden contactar con el WRC. Por favor, contacten con el Centro de Soporte Internacional para cualquier consulta sobre esta alerta.
Anuncio
Jose-Tomas Salvador · 17 jun, 2021

Buscamos Desarrolladores Python para el Early Access Program de Python embebido en IRIS

¡Estamos buscando desarrolladores en Python para participar en nuestro programa de acceso preliminar a Python embebido (EAP IRIS Embedded Python)! Si tu, o alguien que conozcas, es un desarrollador en Python y estais interesados, por favor, ponte en contacto con nosotros a través del email que indicamos abajo. InterSystems está incorporando la potencia y simplicidad de Python a IRIS. Estamos trabajando decididamente para integrar Python en el kernel de IRIS, poniéndose a la par con ObjectScript. Utiliza cualquiera de las miles de librerías de Python ya construidas Accede facilmente a IRIS desde Python, y a Python desde ObjectScript Implementa clases con código mixto, ObjectScript y Python El programa de acceso preliminar (Early Access Program) es un modo de ayudarte de darle forma al futuro de IRIS proporcionándonos feedback sobre funcionalidades que están por venir. Todos los participantes recibirán kits dedicados de software no liberado aún, junto con instrucciones, documentación, y ejemplos de modo que puedas partir de la mejor posición en el desarrollo de increibles soluciones al tiempo que disfrutas de algo nuevo antes que nadie. Además te haremos entrega de una increible camiseta de InterSystems y puede que algo más. Lo único que te pedimos a cambio es tu feedback sobre lo que te ha gustado y dónde deberíamos mejorar. RSVP: python-interest@intersystems.com La fase “Python Developer” del Programa de Acceso Preliminar irá del 28 de Junio al 26 de Julio de 2021
Artículo
Alberto Fuentes · 20 mayo, 2021

Cómo añadir una placa de Open Exchange a tu repositorio de Github

¡Hola desarrolladores! Hoy publico este breve artículo para todos aquellos que quieran añadirse una placa muy chula (shield) de Open Exchange como esta: En tu repositorio de GitHub puedes incluirla añadiendo una simple línea: [![Gitter](https://img.shields.io/badge/Available%20on-Intersystems%20Open%20Exchange-00b2a9.svg)](https://openexchange.intersystems.com/package/csvgen) Recuerda escribir en la URL la ruta a tu página en Open Exchange. Gracias a los participantes del concurso por esta placa tan chula :D ¿Qué otros shields o placas útiles conoces? ¡Compártelos en los comentarios!
Anuncio
Esther Sanchez · 18 nov, 2021

Sesiones grabadas del Virtual Summit 2021

¡Hola Comunidad! Ya están disponibles las grabaciones de todas las sesiones de la Convención Virtual de InterSystems (Virtual Summit) que se celebró en octubre. Podréis acceder a ellas hasta finales de enero. Si estáis registrados en el evento, este es el acceso a la Plataforma Virtual para Asistentes. Si no os registrasteis, podéis hacerlo aquí para ver las grabaciones. Una vez en la Plataforma Virtual para Asistentes, hay que hacer clic en "All Sessions" en el menú y podréis buscar o elegir las sesiones que queráis ver. Así que... ¡no os lo perdáis! ¡Hay más de 60 sesiones para elegir! Dadle al Play... ¡y a disfrutar!
Anuncio
Esther Sanchez · 4 jul, 2022

Ponencias del Global Summit 2022

¡Hola a tod@s! La Convención Anual (Global Summit) de InterSystems de este año en Seattle terminó hace más de una semana y ya podéis ver en YouTube algunas de las presentaciones que allí se realizaron. Pero antes... algunos de los miembros más activos de la Comunidad de Desarrolladores os saludan personalmente desde sus países de origen. ¿Queréis conocerles? Las presentaciones están disponibles en esta lista de reproducción en YouTube: ➡️ Ponencias del Global Summit 2022 en YouTube ¡Esperamos veros el año que viene en Hollywood, Florida! 🤩 ¡Y ya podéis inscribiros a las notificaciones del Global Summit 2023! 😅
Anuncio
Esther Sanchez · 25 oct, 2022

Nueva organización de los retos en Global Masters

¡Hola Comunidad! Os traigo la última novedad en Global Masters: Hemos reorganizado los retos en la pestaña "Retos" y ahora todas las pruebas están organizadas en grupos (carpetas). Esperamos que ahora sea más fácil encontrar los retos más relevantes para cada uno. La página de inicio de Global Masters no ha cambiado. ¿Queréis ver el cambio? Si tenéis algún comentario o idea sobre Global Masters, podéis escribirlo en los comentarios de esta publicación. ¿Aún no eres miembro de Global Masters? Puedes darte de alta utilizando tus credenciales de InterSystems.
Pregunta
Evan Gabhart · 13 abr, 2023

Cómo saltar de línea usando etiqueta + desplazamiento en VS Code

¿Cómo se podría saltar a una línea particular escribiendo una etiqueta y añadiendo un desplazamiento en VS Code (zMethodName + n)? Sé que esto se puede hacer en Studio y sería muy útil para depurar mensajes de error. Puedes ver en la documentación oficial que no tenemos ningún atajo para saltar a una determinada línea: https://intersystems-community.github.io/vscode-objectscript/studio/#bookmarks Se recomienda la instalación de una extensión de terceros para replicar dicha funcionalidad: https://marketplace.visualstudio.com/search?term=bookmark&target=VSCode&category=All%20categories&sortBy=Relevance