Pesquisar

記事
· 2024年5月2日 3m read

LinuxでODBC接続を行う方法

こちらの記事では、LinuxでODBC接続の設定を行う方法をご紹介します。


はじめに、Linuxのバージョンを確認します。

$ cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="9.4 (Plow)"
:


1. yumパッケージのアップデートを行います

$ sudo yum update


2. unixODBCをインストールします

$ sudo yum install unixODBC

確認します

$ which odbcinst
/usr/bin/odbcinst
$ which isql
/usr/bin/isql
$ odbcinst -j
unixODBC 2.3.9
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/ec2-user/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8


3. IRISクライアントをインストールします

※Linuxのバージョンにあったインストーラを使用してください。

$ cd IRIS-2024.1.0.262.0-lnxrh9x64

$ sudo ./irisinstall_client
Your system type is 'Red Hat Enterprise Linux 9 (x64)'.
Enter a destination directory for client components.
Directory: /intersystems/iris
Directory '/intersystems/iris' does not exist.
Do you want to create it <Yes>?
Installation completed successfully


4. 構成ファイルの作成をします

※SYSTEM DATA SOURCES: /etc/odbc.ini に以下を追加します

[ODBC Data Sources]
InterSystemsODBC6435 = InterSystemsODBC6435

[InterSystemsODBC6435]
Description=InterSystems ODBC
Driver = /intersystems/iris/bin/libirisodbcur6435.so
Setup = /intersystems/iris/bin/libirisodbcur6435.so
Unicode SQLTypes = 1
Host=***.***.***.***
Namespace=USER
UID=_SYSTEM
Password=SYS
Port=1972
$ sudo vi /etc/odbc.ini 


5. 環境変数:ODBCINIの登録をします 

※すべてのユーザで使用できるよう、環境変数を永続化させます。

$ sudo vi /etc/profile

# ---- 以下を追加
export ODBCINI=/etc/odbc.ini

(設定を反映させるために、一度ログアウトして再度ログインします)

$ echo $ODBCINI
/etc/odbc.ini

※ご参考:初期化ファイルの名前と場所


6. IRISへのODBC接続確認をします

$ isql -v InterSystemsODBC6435
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> SELECT count(*) FROM INFORMATION_SCHEMA.TABLES
+---------------------+
| Aggregate_1         |
+---------------------+
| 429                 |
+---------------------+
SQLRowCount returns 1
1 rows fetched
SQL>

 

今回は、IRISクライアントインストールで試しましたが、ODBCドライバ単体のインストールも可能です。
詳細は以下のドキュメントをご覧ください。
UNIX® システムでの ODBC のインストールと検証


ODBCデータソースの定義についての詳細は、以下のドキュメントをご覧ください。
UNIX® での ODBC データ・ソースの定義
 

enlightened【ご参考】
PyODBC経由でIRISに接続するAWS Lambda関数を作成するまでの流れ
LinuxでJDBC接続を行う方法

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください
記事
· 2024年4月30日 2m read

Monitoring InterSystems IRIS environments with Red Hat Insights

InterSystems worked closely with the Red Hat Insights team to implement a curated set of recommendations for system administrators to ensure the best experience running InterSystems IRIS on Red Hat Enterprise Linux (RHEL). Included with all RHEL subscriptions, the Insights service proactively identifies potential issues with monitored platforms and applications running on RHEL. Through our joint collaboration, Insights now watches for common scenarios that decrease the performance of IRIS in most cases and offers an InterSystems-approved recommendation for consideration.  

Ten recommendations are currently implemented and can be found under the “InterSystems” topic within the Insights Advisor service.  Advisor recommendations help in areas including:

  1. Performance Tuning Guidance. We provide best practices for configuring HugePages, Transparent HugePages (THP), swappiness, shmmax kernel parameters, and more.
  2. Product Compatibility. Insights highlights which versions of InterSystems products are encouraged to be used to provide the best experience.
  3. Journaling and High-availability Configuration Suggestions, like Write Image Journaling (WIJ) drive mapping, identifying an arbiter to support automatic failure, or enabling FreezeOnError for better integrity and recoverability of InterSystems IRIS database.

Every recommendation contains details about the detected RHEL version, InterSystems IRIS instance information, and system-specific step-by-step instructions to remediate the detected issue.  Links to the InterSystems documentation are also provided for further reference.

Enable Insights with InterSystems today.

Registering your systems with Red Hat Insights is very straightforward and typically requires only a single command to be executed. Alternatively, the Red Hat registration assistant application can be used to complete the necessary steps based on your setup. Analysis of InterSystems IRIS workloads does not require additional steps and is enabled once systems are registered with Insights. Specific recommendations can easily be turned off if they are not applicable to your environment.  

Head to Red Hat Insights to learn more about the service and get started with the registration assistant.

Talk with Red Hat experts at InterSystems Global Summit 2024.

Red Hat will be exhibiting at InterSystems Global Summit June 9-12 and available to discuss Insights and other Red Hat capabilities.

2 Comments
ディスカッション (2)3
続けるにはログインするか新規登録を行ってください
記事
· 2024年4月29日 6m read

Flujos de tareas con InterSystems IRIS Workflow Engine - Introducción

Desde hace un tiempo tenía pendiente hacer algún tipo de prueba de concepto con la funcionalidad de Workflow, la cual, como tantas otras funcionalidades presentes en IRIS, suele pasar bastante desapercibida para nuestros clientes (y por lo cual entono el mea culpa). Por ello me decidí hace unos días a desarrollar un ejemplo de cómo configurar y explotar esta funcionalidad conectándola con una interfaz de usuario desarrollada en Angular.

Para evitar un articulo demasiado largo y hacerlo más asequible voy a dividirlo en 3 entregas. En este primer artículo presentaré la funcionalidad de Workflow así como el ejemplo que vamos a plantear. El segundo artículo entrará en el detalle de la configuración y la implementación de la producción que se encargará de gestionar el Workflow. Finalmente mostraremos como acceder a la información disponible en nuestro Worflow mediante una aplicación web.

InterSystems IRIS Workflow Engine

Qué mejor forma de explicar qué es esta funcionalidad de Workflow que copiar la descripción que da la documentación de IRIS.

Un sistema de gestión de flujo de trabajo automatiza la distribución de tareas entre los usuarios. Automatizar la distribución de tareas de acuerdo con una estrategia predefinida hace que la asignación de tareas sea más eficiente y su ejecución más responsable. Un ejemplo típico es una aplicación de escritorio de ayuda que acepta informes de problemas de los clientes, envía los informes a los miembros de las organizaciones apropiadas para que tomen medidas y, una vez resuelto el problema, informa los resultados al cliente.

InterSystems IRIS Workflow Engine proporciona un nivel mucho más alto de funcionalidad que los sistemas tradicionales e independientes de gestión de flujo de trabajo.

¿Donde encontramos las funcionalidades de Worflow en nuestro IRIS? Muy sencillo, desde el portal de gestión:

Expliquemos someramente cada una de las opciones disponibles antes de meternos con el proyecto de ejemplo.

Workflow Roles

Esta opción hace referencia a roles en los que encuadraremos a los usuarios que harán uso de la funcionalidad. La definición de rol es un tanto confusa, particularmente yo prefiero verlo más como tipos de tareas que podremos crear desde nuestra producción. El nombre asignado a estos roles deberá coincidir con los nombres de las Business Operations que posteriormente declararemos en nuestra producción para crear tareas asociadas a dichos roles.

Workflow Users

Usuarios de IRIS que podrán ser asignados a las diferentes tareas, se asociarán con uno o más roles. Los usuarios deben estar dados de alta en IRIS.

Workflow Tasks

Lista de tareas creadas en el sistema con su información asociada, desde esta ventana se podrán asignar tareas a los diferentes usuarios correspondientes al rol de la tarea.

¿Qué son estas tareas? Muy sencillo, las tareas son instancias de la clase EnsLib.Workflow.TaskRequest, el objeto de este tipo se enviará desde el Business Process en el que se ha generado a una Business Operation de la clase EnsLib.Workflow.Operation y con el nombre del rol que hayamos creado previamente. Esta acción creará a su vez una instancia de la clase EnsLib.Workflow.TaskResponse. El Business Operation no retornará respuesta hasta que no se ejecute el método de CompleteTask de la instancia de la clase TaskResponse.

Workflow Worklist

Similar a la anterior funcionalidad, nos muestra también una la lista de tareas con la información asociada a las mismas pero en este caso únicamente las que están activas.

 Ejemplo de Workflow

El proyecto que podéis encontrar asociado a este artículo plantea un ejemplo simplificado de solución a un problema típico de las organizaciones de salud como es el del tratamiento de pacientes crónicos. Este tipo de pacientes exigen un control continuado y un seguimiento estricto para el que en muchas ocasiones los profesionales involucrados en los cuidados no cuentan con los medios más adecuados.

En el ejemplo vamos a ver cómo se puede realizar un seguimiento de pacientes con hipertensión. Supondremos que los pacientes se toman diariamente la tensión arterial con un tensiómetro que remitirá la lectura al servidor en el que se encuentra instalado nuestro InterSystems IRIS. En el caso de que la lectura de la tensión arterial se superen los valores 140 de sistólica y 90 de diastólica se informará al paciente de que deberá tomarse una segunda vez la tensión pasado un determinado tiempo y, si la lectura vuelve a superar los límites, se informará tanto al paciente como al médico de la situación para que este decida qué medida tomar.

Para ello dividiremos este flujo de tareas en dos etapas:

Etapa 1: Recepción de lectura diaria de tensión arterial.

  1. Recepción en la producción de mensaje HL7 con las medidas de tensión arterial.
  2. Comprobación de la existencia del usuario en el sistema (y creación del mismo si no existe), posteriormente registro del usuario en los roles implicados en el workflow.
  3. Extracción de los datos de tensión arterial y comparación con el criterio de alerta.
  4. Si los datos superan los criterios de alerta:
    1. Creación de tarea para el paciente informándole de la situación y solicitándole una nueva toma de la tensión arterial.
    2. Creación de tarea automática para gestionar la segunda lectura de la tensión arterial.
  5. Si los datos no superan los criterios de alerta se cierra el proceso hasta la siguiente lectura que se reciba el día siguiente.

Etapa 2: Recepción de segunda lectura tras superar la primera lectura los valores de alerta.

  1. Recepción del mensaje de HL7 con la segunda lectura.
  2. Recuperación de la tarea automática pendiente.
  3. Si los niveles de tensión arterial superan los criterios de alerta:
    1. Se cierra la tarea automática indicando el estado de aviso.
    2. Se crea una tarea manual para el médico informando de la situación del paciente.
    3. Se crea una tarea manual para el paciente alertando de la situación y de que se ha informado a su médico.
  4. Si los niveles no superan los criterios de alerta:
    1. Se cierra la tarea automática indicando en la misma que no hay peligro.

En el próximo artículo entraremos más en detalle en el diseño de nuestro diagrama de flujo encargado de reflejar lo expuesto anteriormente.

Interfaz de usuario

Como habéis podido observar en los pantallazos adjuntos la interfaz de usuario que InterSystems IRIS proporciona para la gestión de tareas es, por decirlo de alguna manera, bastante espartana, pero una de las ventajas que tenemos con IRIS es que podemos crear nuestra propia API Rest para gestionar nuestro flujo de tareas de una forma sencillísima, este punto lo trataremos en nuestro último artículo.

Para ofrecer una interfaz amigable a los usuarios hemos desarrollado una pequeña aplicación web en Angular utilizando Angular Material que nos permitirá crear una interfaz simulando una aplicación de móvil. 

Esta aplicación móvil se conectará a InterSystems IRIS haciendo uso de JSON Web Tokens y realizará peticiones HTTP a una determinada aplicación web publicada en IRIS, de tal forma que las acciones que tomen los diferentes actores sobre las tareas se vean reflejadas sobre el flujo de tareas definido.

En el próximo capítulo...

Tras esta introducción  a la funcionalidad de Workflow en nuestro próximo artículo mostraremos como implementar mediante un BPL el flujo de tareas necesario para resolver el ejemplo que hemos presentado, configuraremos la producción al completo y veremos como son las principales clases involucradas en el Workflow (EnsLib.Workflow.TaskRequest y EnsLib.Workflow.TaskResponse).

¡Muchas gracias a todos por vuestra atención!

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2024年4月27日 2m read

Recherche vectorielle géographique #1

Utilisation géographique de la recherche vectorielle

L'idée de base est d'utiliser des vecteurs au sens mathématique.
J'ai utilisé des coordonnées géographiques. Celles-ci ne sont bien sûr que bidimensionnelles
mais elles sont beaucoup plus faciles à suivre en tant que vecteurs dans le cadre d'une analyse de texte à plus de 200 dimensions.

L'exemple charge une liste de capitales mondiales avec leurs coordonnées
Les coordonnées sont interprétées comme des vecteurs à partir du point géographique 0°N/0 W
(un point très humide dans le golfe de Guinée, à plus de 400 km de la côte africaine).
Trouver des directions communes à partir de ce point est tout à fait théorique.
L'ajustement à votre point de départ préféré est donc mis en œuvre.
Il est maintenant logique de trouver des directions similaires pour une ville cible.
Il s'agit d'une utilisation mathématique de la fonction VECTOR_COSINE() autre que la recherche de texte.

Et comme il ne s'agit que de 2 dimensions, la COSINE correspond à ce que nous avons (espérons-le) appris à l'école.
Les résultats sont donc beaucoup plus faciles à comprendre : 

  • 1 = correspondance totale, même direction, écart de 0° par rapport à l'original
  • 0 = pas de correspondance du tout, la direction est éloignée de 90° de l'original
  • -1 = direction totalement opposée, pointant vers l'arrière de 180° par rapport à l'original
  •  ~0,999 = très proche de l'original 

Vous obtenez simplement des informations sur la direction, pas sur la taille.
Ainsi, votre vecteur de Paris à Budapest pointe également vers Minsk ou un autre endroit en Asie.

La démo est contrôlée par un menu plus simple :

  Use Geographc Vectors
=========================
     1 - Initialize Tables
     2 - Import Data
     3 - Set Base Location
     4 - Generate Vectors
     5 - Select Target Location
     6 - Show Best Matches
Select Function or * to exit :

pour plusieurs tentatives, vous redémarrez toujours à

  • #3. Définir le lieu de départ
  • #4. Ajustez les coordonnées à la base que vous avez choisie
  • #5. Définissez votre emplacement cible en définissant votre vecteur de base.
  • #6 voir ce qui se trouve entre ou devant votre vecteur
    • ajuster la tolérance de -1...+1

GitHub

Video

DemoServer Mgmt Portal
DemoServer WebTerminal
 

1 Comment
ディスカッション (1)1
続けるにはログインするか新規登録を行ってください
記事
· 2024年4月27日 3m read

Recherche vectorielle géographique #2

Surprises techniques à l'aide de VECTORs

La construction de mon exemple technologique m'a permis de faire un certain nombre de découvertes que je souhaite partager.
Les premiers vecteurs que j'ai touchés sont apparus avec l'analyse de texte et plus de 200 dimensions.
Je dois avouer que je me sens bien dans le monde à 4 dimensions d'Einstein.
Les 7 à 15 dimensions qui peuplent la théorie des cordes dépassent quelque peu la frontière.
Mais 200 et plus, c'est définitivement bien au-delà de mon horizon mathématique.

Ndt : Je partage avec Robert la difficulté d'abstraction pour un grand nombre de dimensions, ce qui pour moi, rend l'exemple suivant très pertinent

Je me suis donc tourné vers notre planète et j'ai trouvé qu'un vecteur de (latitude, longitude) à 2 dimensions était suffisant pour les tests.
Un tableau pratique des capitales a été trouvé et a fourni un échantillon de données de test (abrégé).

CAPITAL COUNTRY LATITUDE LONGITUDE
Kabul Afghanistan 34.28N 69.11E
Tirana Albania 41.18N 19.49E
Algiers Algeria 36.42N 03.08E
Pago Pago American Samoa 14.16S 170.43W
Andorra la Vella Andorra 42.31N 01.32E
Luanda Angola 08.50S 13.15E
Saint John's Antigua and Barbuda 17.127N 61.846W
Buenos Aires Argentina 36.30S 60.00W
Yerevan Armenia 40.10N 44.31E
Oranjestad Aruba 12.32N 70.02W
Canberra Australia 35.15S 149.08E
Vienna Austria 48.12N 16.22E
Baku Azerbaijan 40.29N 49.56E
Nassau Bahamas 25.05N 77.20W
Manama Bahrain 26.10N 50.30E
Dhaka Bangladesh 23.43N 90.26E
Bridgetown Barbados 13.05N 59.30W
Minsk Belarus 53.52N 27.30E
Brussels Belgium 50.51N 04.21E

#1 Le chargement de ce fichier texte séparé par des tabulations avec LOAD DATA (SQL) a parfaitement fonctionné

#2 La transformation des coordonnées géographiques en INT était un exercice de codage mineur
Il en résulte une ClassMethod projetée en tant que procédure SQL utilisée dans une UPDATE sur la table.

#3 Comme les coordonnées géographiques se réfèrent à (0°N,0°W) quelque part dans l'Atlantique, ce n'est qu'une base théorique pour mes vecteurs.
IRIS supporte quelques fonctions VECTOR mais je n'ai trouvé aucune fonction AddVector() ou SubtractVector().
J'ai donc procédé « manuellement » à partir des coordonnées d'entrée.
Il est nécessaire de transformer les coordonnées en un point de base utile pour comparer ultérieurement les vecteurs
Il existe donc des coordonnées de BASE statiques et des coordonnées d'OEUVRE actives.

Obtenir les valeurs du vecteur est facile avec SQL en utilisant la fonction %EXTERNAL()
tandis qu'en ObjectScript, j'ai obtenu

        set vectorvalues=##class(%Vector).LogicalToOdbc(vectorvaraible) 

c'était moins impressionnant pour travailler avec des vecteurs.

#4
La similitude est calculée avec la fonction VECTOR_COSINE().
Vous calculez l'angle entre 2 vecteurs et COSINE le normalise entre +1 et -1.
L'entrée nécessite 2 vecteurs de même type et de même dimension.
Les exemples présentés dans la documentation fonctionnent bien si vous composez votre chaîne SQL comme suggéré
et TO_VETOR( ?,type,size) est OK avec %SQLStatement pour l'exécution.
MAIS :

J'ai essayé avec du code SQL intégré.
La vérification du code a signalé un certain désaccord, mais la compilation s'est déroulée sans problème
Lors de l'exécution, il s'est avéré que les variables hôtes dans TO_VECTOR(:myvec,INT,2) échouaient.
quelle que soit la combinaison de guillemets, accolades, .... que j'ai essayée.
Soyez donc avertis. Je suis retourné à %SQLStatement pour terminer mon VCOS.

#5 J'ai été surpris d'apprendre à quel point VECTOR_COSINE se propageait.
La vérification du vecteur Paris >> Bucuresti a permis de retracer la moitié du Moyen-Orient et de l'Asie de l'Est.
Limiter les résultats à > 0,999 est donc une bonne pratique dans ce scénario.

3 Comments
ディスカッション (3)1
続けるにはログインするか新規登録を行ってください