New post

検索

Article
· Sep 24, 2024 7m read

Access IRIS database with ODBC or JDBC using Python

Problems with Strings

I am accessing IRIS databases with JDBC (or ODBC) using Python. I want to fetch the data into a pandas dataframe to manipulate the data and create charts from it. I ran into a problem with string handling while using JDBC. This post is to help if anyone else has the same issues. Or, if there is an easier way to solve this, let me know in the comments!

I am using OSX, so I am unsure how unique my problem is. I am using Jupyter Notebooks, although the code would generally be the same if you used any other Python program or framework.

Discussion (0)1
Log in or sign up to continue
Article
· Sep 24, 2024 1m read

SMART on FHIR app - Muestra con instrucciones de ejercicios prácticos/talleres

Basado en una gran muestra y el taller construido por @Luis Angel Pérez Ramos (ver artículos relacionados y relacionados con Open Exchange app), que incluía un contenedor local de InterSystems IRIS for Health (y la configuración deseada), esta muestra presentada aquí, adaptó el taller para usar el Servidor FHIR en la Nube de InterSystems, y su configuración relacionada.
 

El Open Exchange relacionado y el repositorio de GitHub incluyen instrucciones detalladas (y capturas de pantalla relacionadas) para crear el proyecto y el flujo deseados.

También se incluye una serie de vídeos breves para acompañar los pasos a realizar.

Básicamente los pasos incluyen:

  • Configuración de un Servidor Cloud FHIR Configuración de un servidor OAuth (auth0 by Okta)
    • Creación de una aplicación
    • Creación de una API
    • Creación de un usuario
  • Configuración del Servidor FHIR
    • Creación de un servidor OAuth
    • Creación de una aplicación
  • Adaptación de la aplicación (Angular) para apuntar a los servidores FHIR y OAuth
    • Adaptación de proxy.config.json
    • Adaptación de nginx.conf
    • Adaptación de app.module.ts

¡Disfrutadlo!

Discussion (0)1
Log in or sign up to continue
Article
· Sep 23, 2024 5m read

IRIS的列存储介绍

InterSystems IRIS 数据平台作为关系数据库使用时,传统上以行为单位存储数据。现在,由于底层数据结构的灵活性,您也可以按列存储数据。虽然每种选择都有其优点,但在列中存储数据(称为列式存储)可以在数据分析的业务中显著提高各种用例的性能。列存储自2022.2 版的IRIS起做实验功能引入, 2023.1 起正式支持,到目前已经迭代了几个版本。

假设一家公司使用基于行的存储来保存收到的所有订单数据,跟踪订单 ID、订单日期、客户、优先级、状态和总金额等数据,使用行存储可以被示意为下面的图形:

row_storage

每一行数据在逻辑上对应一个订单,单行中的所有数据在物理上存储在一起。

这种模式便于快速添加或更新订单。订单可以一次添加一个,数据库的每次写入正好对应一行。当发生了订单的事务,除了要更改的行之外,无需访问或更新表中的任何数据。

Discussion (0)1
Log in or sign up to continue
Article
· Sep 23, 2024 2m read

第三十一章 使用派生密钥令牌进行加密和签名 - 变体:创建隐式 DerivedKeyToken

第三十一章 使用派生密钥令牌进行加密和签名 - 变体:创建隐式

变体:创建隐式 <DerivedKeyToken>

还可以创建隐式 <DerivedKeyToken>,这是引用 <DerivedKeyToken> 的快捷方法。在此方法中:

  • 消息中不包含 <DerivedKeyToken>
  • 在使用 <DerivedKeyToken> 的元素中,<SecurityTokenReference> 元素指定 Nonce 属性,该属性包含用于 <DerivedKeyToken>nonce 值。这向消息接收者表明派生密钥令牌是隐含的,并且是从引用的令牌派生的。

要创建隐式 <DerivedKeyToken>,请使用前面描述的一般过程,但有两处更改:

Discussion (0)1
Log in or sign up to continue
Article
· Sep 23, 2024 6m read

UnitTest(ユニットテスト)の自動化について考察

コミュニティの皆さんこんにちは。

突然ですが、皆さんはIRISの機能にある「ユニットテスト」は利用されているでしょうか。
筆者はまだ実装まで行えていませんが、各関数の品質保証を担保するため導入を検討している段階です。

現状、IRISのユニットテストには下記2点の対応すべき点があると考えています。

  1. テスト結果の可読性が低い(先日vscodeで拡張機能が出ていましたが、やはり見ずらいと感じました)
  2. ユニットテストを自動で実行する手段がない

特にテストが継続的に自動で実施されないと、ユニットテスト自体が次第に陳腐化し、実行されなくなり忘れ去られる恐れがあると考えます。
ただし、意味もなく定期的にテストを実行しても効果がありません。
そこで、Gitのpushのタイミングで行おうと考えました。

次にテスト環境です。
テスト環境の構築は、テスト自動化の観点からみるとCI/CDツール等を利用するのが一般的だと思います。
ただ今回は、テスト環境の構築を簡易にすませたいと考え、IRISの既存技術を組み合わせて構築しようと考えました。

そこで運用幅の広いInteroperabilityとユニットテストを組み合わせて、テストの自動化が可能か考察していきたいと思います。

 

【ユニットテスト全体概要】

 

 

【全体の流れ】

 ■ユーザの開発環境

  ①ユーザは改修したクラスをGitへpushする

 ■Git用のサーバ

  ②GitリモートリポジトリのHook「post-receive」が、テストサーバへHTTP通信を実施

 ■ユニットテスト用のサーバ

  ③RestAPIから②を受け取り、interoperabilityのサービス「ServiceRest」をキック

  ④Interoperability処理
    プロダクションは下記となっています。 ※主要な機能しかまだ作っていません。

    

プロダクション説明
項目 名称 説明
サービス ServiceRest RestAPIよりキックされ、プロセス「TestProcesse」をキックする。
「TestProcesse」が起動中の場合は、更新が重複するため何もしない。
  ServiceTimer 「TestProcesse」が動作中に発生したGitの更新は、定期的な監視を行っているこのサービスでフォローする
プロセス DeleteProcess 指定日を越えたユニットテストのデータと出力したファイルを削除する
  MainProcesse テスト結果を検証し、HTMLファイル・CSVファイルを出力する
オペレーション「SendMail」とプロセス「DeleteProcess」をキックする
  TestProcesse Gitの更新・テストクラスの配置・クラスのインポート・テスト実施を行う
プロセス「MainProcess」をキックする
オペレーション SendMail MainProcessよりテスト結果を受け、出力したファイルを添付してメールする

 


【一連の連携で追加した機能】

 ■テスト結果を参照するHTMLファイル・CSVファイルの作成
  IRISの機能であるテスト結果参照ページは、テスト結果の可読性が低いです。
  そこで、HTMLファイル・CSVファイルの出力を別途行うようにしました。


 ・既存のユニットテスト・ポータル画面
    

  TestAssertsまでドリルダウンしていかないと、エラーが発生の詳細な原因を判別するのが難しい。
  テスト全体を見渡すことが難しい。

 

 ・HTMLファイル出力

   

  テストデータをHTMLファイルに含んでいるため、スタンドアロンで表示させる事が可能。
  また、データ量が多くなる事を踏まえて、スクロールバーを下げる事で一定行数毎に結果を追加する仕様。
 

 ・CSVファイル出力

   

  ただのCSVファイルのため、特筆すべき点はありません。

 

■各テスト関数の処理時間を検証

 データの取得・登録を含んだ関数を改修した際、ごく稀に処理時間が想定外にかかるような場合があります。
 大概はロジックが悪いケースですが、処理時間の比較は割と見落としてしまう点だと思います。

 そこで、ユニットテストついでに処理時間の比較を行おうと考えました。
 ただ各テスト毎に処理時間の比較機能を組み込むのは、手間がかかるため困難です。

 そこで、ユニットテストの処理時間(関数実行時の処理時間)に着目しました。

 この「処理時間」をプロセスの処理で記録し、そこから得た中央値を利用して比較しようと考えています。
  ※注)テスト関数の処理時間を比較に利用するため、テスト関数内部の個々の処理自体に対する速度検証にはなりません。

 処理時間の比較は、下記流れにそって行っています。 ※フラグ制御にて比較自体を不可にもできる

   ①テスト関数のステータスが「passed(成功)」している事を確認する
   ②該当テスト関数が2回目以降である事を確認する(初回の場合は比較対象が無い為)
   ③過去の処理時間リストより、中央値を取得する
   ④ ③より、係数を利用して比較用の値を算出する
    係数は、テストクラスにパラメータとして設定します。パラメータ名は下記仕様に準じています。
     ・関数名 + 「ADD」→中央値にパラメータの値を加算する
     ・関数名 + 「MUL」→中央値にパラメータの値を乗算する
       

    テスト関数の係数(パラメータ)が設定されていない場合は、下記値を係数としています。
     ・プロセス「MainProcess」のプロパティ「BaseTime」に設定している値と中央値を乗算する

    ⑤ ④の値と比較し、今回実行時の処理時間が大きい場合、テスト関数のステータスを「passed」から「timeout」へ変更する
     timeoutへのステータス変更は、出力されるファイルへ反映する事になります。

       例)中央値から外れた場合のHTMLファイルの表現
        

    ⑥今回の処理時間を特定のグローバルに保存する。

 


【出力したファイルをメールの添付ファイルとして送付】

  オペレーション「SendMail」では、Embedded Pythonを利用してメールを送付しています。

  恥ずかしながら、interoperabilityのメール機能で複数のファイルを添付する方法が分からなかった為、Pythonで実行するように切り替えました。
  困ったら別の手段が検討できる、この柔軟さがIRISの良いところだと思います。

    例)エラーが発生した場合のメール内容

     

 

 


以上になります。

今回は考察が主なため、細かい作り込みは行っていません。
エラー処理や、GIT更新後のクラスインポート・コンパイルを更新があったクラスのみに絞る等々、まだまた実用化には長い道のりだと感じています。
他にも実装したいロジックはありますが、一旦ここで筆を置きたいと思います。


Interoperabilityの機能を使うことで、ユニットテストの自動化を実現する事は可能だと考えています。
拙筆ではありますが、何かの参考になれば幸いです。

サンプルPGはGithubに置いてあります。

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