New post

Find

Article
· Feb 5 2m read

Streamlining Interoperability with Embedded Python in InterSystems IRIS

Interoperability of systems ensures smooth workflow and management of data in today's connected digital world. InterSystems IRIS extends interoperability a notch higher with its Embedded Python feature, which lets developers seamlessly integrate Python scripts into the IRIS components, like services, operations, and custom functions.


Why Embedded Python in IRIS?
Embedded Python brings the flexibility of Python into the powerful world of InterSystems IRIS and provides the following: Access to Python Libraries: Leverage popular libraries such as pandas, NumPy, and requests for advanced data processing.
Ease of Use: Python simplifies the implementation of complex logic.
Efficient Interoperability: Develop services, operations, and transformations directly within IRIS, reducing the need for external tools.

Below is the code I tried to implement for a python business operation:

from iris import irisnative  

class SamplePythonOperation:  
    def on_message(self, request):  
        # Connect to IRIS  
        conn = irisnative.createConnection("localhost", 1972, "USER", "_SYSTEM", "SYS")  
        iris_obj = irisnative.createIRIS(conn)  

        # Log the request message  
        iris_obj.set("Received: " + request.get("MessageText"), "MyApp", "Log")  

        # Process the request  
        response = "Hello, " + request.get("MessageText")  
        return {"Result": response}  

Embedded Python in InterSystems IRIS allows developers to leverage the flexibility of Python with the robustness of IRIS for interoperability solutions. In transforming data, building APIs, or integrating external systems, traditional expectations are that Embedded Python is a revolution for modern applications.

Use Embedded Python today, and discover new avenues of seamless interoperability! 

4 Comments
Discussion (4)1
Log in or sign up to continue
Article
· Feb 5 6m read

Présentation du framework web Python Stream



Salut la Communauté!

Dans cet article, je présenterai le framework web Python Streamlit.

Ci-dessous, vous trouverez les sujets que nous aborderons:

  • 1-Introduction au framework web Streamlit
  • 2-Installation du module Streamlit
  • 3-Lancement de l'application Streamlit
  • 4-Commandes de base de Streamlit
  • 5-Affichage du contenu multimédia 
  • 6-Widgets d'input
  • 7-Affichage des progrès et de l'état
  • 8-Barre latérale et conteneur
  • 9-Visualisation des données
  • 10-Affichage de DataFrame

 

Commençons donc par le premier sujet.

Discussion (0)2
Log in or sign up to continue
Article
· Feb 5 2m read

Retornar imagens usando pesquisa de vetor (2)

Você precisa instalar o aplicativo primeiro. Se não estiver instalado, por favor, consulte o artigo anterior.

Demonstração do aplicativo

Após executar com sucesso o aplicativo de busca de vetores de imagem de íris, alguns dados precisam ser armazenados para suportar a recuperação de imagens, pois não são inicializados na biblioteca.

Armazenamento de imagens

Primeiramente, arraste e solte a imagem ou clique no ícone de upload, selecione a imagem e clique no botão de upload para enviar e vetorizá-la. Este processo pode ser um pouco lento.

Esse processo envolve o uso de Python incorporado para chamar o modelo CLIP e vetorizar a imagem em dados vetoriais de 512 dimensões.

ClassMethod LoadClip(imagePath) As %String [ Language = python ]
{
import torch
import clip
from PIL import Image

device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

image = preprocess(Image.open(imagePath)).unsqueeze(0).to(device)

with torch.no_grad():
    image_features = model.encode_image(image)
return str(image_features[0].tolist())
}

Ver dados vetoriais

Observando os dados vetoriais no Portal de Administração

Consulta de vetores

O processo de consulta de vetores utiliza VECTOR_COSINE para recuperar a similaridade dos dados vetoriais, o que pode ser realizado através do seguinte SQL.

select top ? id Image,VECTOR_COSINE(TO_VECTOR(ImageVector,double),(select TO_VECTOR(ImageVector,double) from VectorSearch_DB.ImageDB where id= ? )) Similarity from VectorSearch_DB.ImageDB order by Similarity desc

 

Após enviar várias imagens, selecione a consulta e a imagem com a maior similaridade à esquerda será exibida à direita. Clique em "próximo" para visualizar a próxima página. A similaridade entre as duas imagens diminuirá gradualmente a cada clique.

 

Esta aplicação é uma demonstração da recuperação de vetores de imagem. Se você estiver interessado, pode verificar oOpen Exchange ou visitar o Github tpara ver mais informações.

Discussion (0)1
Log in or sign up to continue
Article
· Feb 5 8m read

Cómo montar un cluster de nodos IRIS en sharding en 1 minuto

Os voy a mostrar cómo podéis montaros en vuestra máquina, muy rápidamente, un cluster de nodos InterSystems IRIS en sharding. En este artículo no es mi objetivo hablar del sharding en detalle, ni definir una arquitectura de despliegue para un caso real, sino enseñaros como podéis montar de forma rápida, en vuestro equipo, un cluster de instancias de IRIS en sharding con el que poder jugar y hacer pruebas. Si estáis interesados en indagar más sobre el sharding en IRIS, podéis echar un vistazo a la documentación pinchando aquí.  

Vaya por delante que la tecnología sharding de IRIS nos va a permitir 2 cosas de inicio:

  • Definir, cargar y consultar tablas fragmentadas o shards, cuyos datos serán distribuidos transparentemente entre los nodos del cluster
  • Definir tablas federadas, que ofrecen una vista global y compuesta de datos pertenecientes a tablas distintas y que, fisicamente, están almacenadas en distintos nodos distribuidos.

Así que , lo dicho, dejamos para otros artículos el tema de jugar con shards o con tablas federadas, y nos centramos ahora en el paso previo, esto es, en montar el cluster de nodos en sharding.

Bien, pues para nuestro ejemplo vamos a utilizar Docker Desktop (para Windows o Mac) y nos vamos a apoyar en la funcionalidad de IRIS: CPF Merge o fusionado del fichero de configuración;  que nos permite utilizar un fichero de texto plano en el que incluiremos secciones y propiedades de configuración de IRIS que queremos aplicar para modificar la configuración actual de la instancia de IRIS. Basicamente este fichero se sobrepone al iris.cpf que define la configuración por defecto de la instancia.

Este fusionado lo "activamos" automáticamente al añadir la variable de entorno: ISC_CPF_MERGE_FILEa la que deberemos haberle asignado una ruta válida a un fichero que contenga esas secciones del fichero cpf que queremos cambiar. Cuando IRIS arranca, comprueba si se le ha indicado que haga un merge (basicamente, si existe esa variable de entorno y apunta a un fichero válido). Si es así, hace el fusionado y arranca.

No me enrollo más y os incluyo el fichero docker-compose.yml que hará la magia:

 
docker-compose.yml

Y también un ejemplo de los ficheros CSP.conf y CSP.ini:

 
CSP.conf
 
CSP.ini

En este caso, estamos creando 3 servicios:

  • irisnode1 - Primer nodo del cluster, que tiene un rol especial, y de ahí que le denominemos específicamente como node1
  • irisnode2 - Nodo de datos adicional del cluster, cuyo rol es data (de estos podemos tener tantos como queramos)
  • webgateway - Servidor Web preconfigurado para acceder a las instancias de IRIS (Apache + Webgateway)

Para crear la imagen shardnode:latest, hemos utilizado el siguiente dockerfile:

 
Dockerfile

Dentro del dockerfile llamamos a iris.script, que nos permitirá ejecutar comandos en ObjectScript para realizar configuraciones, importar y compilar código, etc.., de la imagen de IRIS que estamos construyendo:

 
iris.script

Los ficheros utilizados para hacer el merge para el nodo1 y los nodos de data del cluster de IRIS son:

 
merge_first_data-node.cpf
 
merge_data-node.cpf

Podríamos tener más nodos de tipo data en el cluster con tan sólo añadir más servicios con la misma definición que el irisnode2 (cambiando el nombre claro)

Por otro lado, para que nos funcione correctamente el direccionamiento en nuestro servidor web, y podamos acceder a los Portales de Administración de cada una de las instancias, hemos de cambiar en cada una de ellas el parámetro CSPConfigName, y eso lo hacemos con los ficheros: configure_first_data-node.sh y configure_data-node.sh; que en este ejemplo son iguales, pero que he dejado diferentes porque, en un momento dado, podríamos querer hacer acciones distintas en el arranque de cada instancia de IRIS, según se trade del nodo1 o un nodo de tipo data del cluster.

 
configure_data-node.sh

Y básicamente ya estaría.

Se podrían definir los nodos utilizando la API disponible en la clase %SYSTEM.Cluster, pero la verdad es que la posibilidad de introducir acciones conjuntamente con la funcionalidad de CPF Merge nos simplifica la tarea muchísimo. Os recomiendo que miréis aquí, en concreto en el apartado que se refiere a la sección [Actions].

Para construir las imágenes y desplegar el cluster, podríamos construir nuestra imagen sharnode:latest y lanzar el docker-compose desde VS Code o, desde nuestra shell, desde el directorio en que se encuentre el fichero, docker-compose.yml, podríamos ejecutar estos comandos:

docker compose build
docker compose up

Tardará un poco la primera vez porque ha de instanciarse la instancia marcada como node1 antes de que se inicien por primera vez cualesquiera otros nodos de tipo data del cluster. Pero todo debería estar funcionando y listo en un minuto o menos.

Si todo ha ido bien, deberías poder entrar a los portales de gestión de cada una de las instancias:

Y, ¡listo! A partir de aquí, el límite en cuanto a volumen de almacenamiento de BBDD y tamaño de tablas, ya lo pone vuestro hardware.Tendrías un cluster de nodos de IRIS listo para definir tablas en sharding o tablas federadas.

¡¡Espero que os sirva!! Nos vemos por aquí... 

2 Comments
Discussion (2)2
Log in or sign up to continue
Discussion (0)1
Log in or sign up to continue