皆さん、こんにちは。私の最新のプロジェクトの1つをご紹介します。 Grafana用データソースプラグインです。これは、InterSystems IRISに直接接続して(将来的に)あらゆるデータを収集できるプラグインです。
.png)
InterSystems IRISは総合データプラットフォームです
InterSystems IRISは、企業にとって最も価値のある資産(データ)の取得、共有、理解、そしてデータに基づく行動のために必要なすべてのものを提供します。
完全なプラットフォームである InterSystems IRIS は、複数の開発技術を統合する必要がありません。より少ないコードで開発が可能で、そのアプリケーションは、システムリソース、メンテナンスなども少なくて済みます。
皆さん、こんにちは。私の最新のプロジェクトの1つをご紹介します。 Grafana用データソースプラグインです。これは、InterSystems IRISに直接接続して(将来的に)あらゆるデータを収集できるプラグインです。
.png)
これは、InterSystems FAQサイトの記事です。
監査ログをプログラミングで出力するために、監査ログの一覧を取得する%SYS.Audit クラスのListクエリを利用することができます。
サンプルコードは以下のようになります。
Set statement=##class(%SQL.Statement).%New()
Set status=statement.%PrepareClassQuery("%SYS.Audit","List")
Set rs=statement.%Execute()
Set tab = $char(9)
While rs.%Next() {
Write rs.%Get("TimeStamp")_tab_rs.%Get("Event")_tab_rs.%Get("Username"),!
}これは、InterSystems FAQサイトの記事です。
CSPアプリケーションでは、リクエスト処理時間がサーバー応答タイムアウト値(CSPゲートウェイ管理ページで設定、既定値60 sec)を経過すると、CSPゲートウェイからクライアントブラウザにタイムアウトを通知し、処理を続けているデータプラットフォームサーバプロセスにエラーを発生させます。
エラーが発生している処理を確認して頂き、処理遅延の改善、例えばタイムアウトが発生しないように処理内容を見直して応答時間を短くすることや必要に応じてサーバ応答タイムアウト値を大きくすることで対処可能です。
2021年12月13日 - 勧告: Apache Log4j2ライブラリの脆弱性がインターシステムズ製品に与える影響
インターシステムズは現在、Apache Log4j2に関するセキュリティ脆弱性の影響を調査しています。
この脆弱性は少なくともApache Log4j2 (バージョン2.0から2.14.1)に影響を与えるもので、最近Apacheから発表され、米国国家脆弱性データベース (NVD) ではCVE-2021-44228 として報告されており、深刻度は最も高い10.0となっています。
脆弱性に関する詳細ならびにインターシステムズ製品に影響を与えるかどうかの最新情報は こちら をご参照ください。
開発者の皆さん、こんにちは!
InterSystems IRIS 2021.2 Preview 版 がリリースされました。新しい機能として LOAD DATA があります。
ということで、今回のコンテストでは、この新しい「LOAD DATA」をテストするコンテストにしてみたいと思います!
🏆 InterSystems Datasets Contest 🏆
応募期間: 2021年12月27日~2022年1月9日
💰 賞金総額: $9,450 💰
着想: @Evgeny Shvarovとその記事より
Deploying InterSystems IRIS Embedded Python Solutions with ZPM Package Manager
このアイデアを発展させ、同じことを**Node.js.**のモジュールで行ってみました。
このケースは、私の「IRIS Native API for Node.js」の例に基づいています。
InterSystems IRIS はクライアントとしてネイティブでWebSocketsをサポートしているというわかりきった返答を期待して:
その通りです。そして、私がその昔書いた関連記事とOEXのサンプルへのリンクはこちらです。
これは、InterSystems FAQサイトの記事です。
グローバル単位でジャーナルのON/OFF設定を行いたい場合は、グローバルマッピング設定で、
・ジャーナルしたいグローバル ⇒ ジャーナルON(「はい」)のデータベースにマッピング
・ジャーナルしたくないグローバル ⇒ ジャーナルOFF(「いいえ」)のデータベースにマッピング
と、分けることで可能です。 但し、通常のデータベースは、ジャーナルOFF設定であっても、トランザクション中の更新についてはジャーナルファイルに記録されます。
一時グローバルを保存するIRISTEMP/CACHETEMPデータベースは、トランザクション中でもジャーナルファイルに記録されませんので、トランザクションデータもジャーナル記録したくない場合にはこれをマッピング先にすることも可能です。
但し、IRISTEMP/CACHETEMPデータベースは一時データベースであるため、インスタンス再起動でグローバルデータは失われますので注意が必要です。
一時グローバルと IRISTEMP データベース
キーワード: IRIS、IntegratedML、機械学習、Covid-19、Kaggle
前のパート1の続き... パート1では、Kaggleに掲載されているこのCovid-19データセットにおける従来型MLのアプローチを説明しました。
今回のパート2では、IRISのIntegratedMLを使用して、可能な限り単純な形態で同じデータとタスクを実行しましょう。IntegratedMLは、バックエンドAutoMLオプション用に洗練された優れたSQLインターフェースです。 同じ環境を使用します。
integredML-demo-templateには、IRISにデータを読み込む様々な方法が定義されています。 たとえば、このCSV形式のxlsファイルに固有のカスタムIRISクラスを定義し、それをIRISテーブルに読み込むことができます。 大量のデータをより適切に制御することができます。
ただし、この記事では、単純化された怠惰な方法を使用します。データフレーム全体を私が作成したカスタムPython関数で読み込む方法です。 そうすることで、生のデータフレームや処理されたデータフレームのさまざまなステージをいつでもIRISに保存し、前のMLアプローチを使用して、類似性比較を行えます。
これは、InterSystems FAQサイトの記事です。
【 管理ポータルへのパスワード認証設定方法 】
管理ポータルの、
[ホーム] > [システム管理] > [セキュリティ] > [アプリケーション] > [ウェブ・アプリケーション]
で /csp/sys、および、/csp/sys/ 以下の各アプリケーション(/csp/sys/expなど) の編集画面を開き、“許可された認証方法” の、"認証なし" のチェックを外し、“パスワード” のみチェックをして保存します。
また、これと同様のことを、ターミナルから、^SECURITYルーチンを使用して実行することも可能です。
以下は/csp/sys/アプリケーションに対する実行例です。*実行は%SYSネームスペースで行って下さい。*
これは、InterSystems FAQサイトの記事です。
プライベートWebサーバを使用して、HTMLファイルをリクエストした際に、日本語が文字化けする場合があります。
その場合には、HTMLファイルをBOM(バイト・オーダー・マーク)付で保存してください。
※原則的に、プライベートWebサーバを使用してアプリケーションを稼働することは推奨しておりません。
アプリケーション稼働には、必ず、IISやApache等の製品版のWebサーバを使用してください。
プライベートWebサーバについては、以下のドキュメントをご参照ください。
プライベート Web サーバおよび管理ポータル【IRIS】
プロダクション Web サーバおよび Caché 付属のプライベート Web サーバ
これは、InterSystems FAQサイトの記事です。
このメッセージが出力される要因は以下の2つになります。
詳細は以下の通りです。 メッセージログ/コンソールログに、以下のようなメッセージがある場合、これはロールバック処理にて出力されています。
※バージョンによってメッセージは多少異なります。
キーワード: IRIS、IntegratedML、機械学習、Covid-19、Kaggle
最近、Covid-19患者がICU(集中治療室)に入室するかどうかを予測するKaggleデータセットがあることに気づきました。 231列のバイタルサインや観測で構成される1925件の遭遇記録が含まれる表計算シートで、最後の「ICU」列では「Yes」を示す1と「No」を示す0が使用されています。 既知のデータに基づいて、患者がICUに入室するかどうかを予測することがタスクです。
このデータセットは、「従来型ML」タスクと呼ばれるものの良い例のようです。 データ量は適切で、品質も比較的適切なようです。 IntegratedMLデモキットに直接適用できる可能性が高いようなのですが、通常のMLパイプラインと潜在的なIntegratedMLアプローチに基づいて簡易テストを行うには、どのようなアプローチが最も単純なのでしょうか。
次のような通常のMLステップを簡単に実行します。
上記との比較で、次を実行します。
Docker-composeなどを使用して、AWS Ubuntu 16.04サーバーで実行します。
こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。
私はIRISでSQLアクセスを行うプログラムをを作成しており、
テーブルアクセスには%ScrollableResultSetクラスのAPIを用いて処理を実現しています。
作成するSQLはインジェクション対策のため、?パラメータを用いておりますが、
この度、大量のパラメータ(600項目)を用いるSQLを作成する必要が出てきました。
https://irisdocs.intersystems.com/iris20191/csp/docbookj/DocBook.UI.Pag…
こちらによりますと、可変長引数を用いても引数の上限値は255個となっており、
実際に600個のパラメータを引数に与えてSQLアクセスしようとすると、<STACK>エラーが発生する状況です。
Set query = "SQL文"
Set result = ##class(%ScrollableResultSet).%New("%DynamicQuery:SQL")
Do result.Prepare(query)
Do result.Execute(parameterValue...) #; ここに600個のパラメータをセット開発者の皆さん、こんにちは!
InterSystems セキュリティコンテスト は終了し、投票結果が発表されました!
この記事では、コンテスト受賞者を発表します!
受賞された開発者の皆さん、👏おめでとうございます!🎊
キーワード: ディープラーニング、Grad-CAM、X線、COVID-19、HealthShare、IRIS
イースターウィークエンド中に、Covid-19に感染した胸部X線画像分類とCT検出デモを実行するを触ってみました。 デモの結果は上出来で、このトピックに関するその頃の学術研究出版物に一致しているようでした。 でも、本当に「上出来」と言えるのでしょうか。
最近、「機械学習における説明可能性」に関するオンラインランチウェビナーを聴くことがあったのですが、たまたまその講演の最後でDonがこの分類結果について話していました。
上図は研究論文にも示されています。『“Why Should I Trust You?” Explaining the Predictions of Any Classifier』という論文です。 分類器は実際に、ペットの犬か野生の狼に分類するための主な入力として、雪といった自然環境などの背景ピクセルを取るようにトレーニングされていることがわかります。
これを見て、私は以前から持っていた関心を思い出しました。このやり方に、確かに好奇心を掻き立てられます。
InterSystems 製品のキットには Apache Web サーバが含まれています。
これにより、お客様が外部Webサーバをインストールせずに Caché/IRIS 管理ポータルを動作させる為の便利な方法を提供しています。
ただし、このWebサーバを実稼働インスタンスに使用しないでください。お客様は、システムに応じたニーズとセキュリティ/リスク要件に適合するWebサーバを別途インストールする必要があります。
最近のテストでは、現在含まれている Apache Web サーバにいくつかのセキュリティ問題があることがわかっていますが InterSystems が管理していないテクノロジである為、
InterSystems は、Apache または別のサードパーティから直接取得した Web サーババージョンをインストールし、付属の Apache Webサーバ を無効にすることをお勧めします。
InterSystems は、今後のリリースに Apache Web サーバの新しいバージョンを含める予定です。
現在のバージョンと同様に、そのバージョンも本番インスタンスには使用できません。
当社の製品の将来のリリースでは、InterSystems はWeb サーバを同梱またはインストールしません。
計画の詳細については、今後、更新情報を提供する予定です。
これは、InterSystems FAQサイトの記事です。
InterSystems製品のデータ(テーブルの行データ、オブジェクトのインスタンスデータ)は、グローバル変数に格納されています。
各グローバルのデータサイズは、管理ポータル>システム>構成>ローカルデータベース>グローバルのページから参照したいグローバルのプロパティをクリックし、表示されるグローバル属性ページ上のサイズ計算ボタンをクリックすることで個別のグローバルのサイズを取得することができます。
ネームスペース上のグローバルのデータサイズをまとめて表示するには、ターミナル上で^%GSIZEユーティリティを起動することで取得することができます。
実行方法は以下の通りです。
これは InterSystems FAQ サイトの記事です。
InterSystems製品開始時に、OSの実行ファイルやコマンド、InterSystems製品内に作成したプログラムを実行したい場合は SYSTEM^%ZSTART ルーチンに処理を記述します。
(%ZSTARTルーチンは%SYSネームスペースで作成します)
SYSTEM^%ZSTART に記述する処理は、事前にあらゆる条件下でうまく動作することを確認してください。
^%ZSTART ルーチンの記述ミスや、記述は正しくとも起動時にコマンドが応答を返さなかったり処理でエラーが起こった場合、InterSystems製品が起動できなくなることがあります。
詳しくは、以下ドキュメントをご参照ください。
OData(Open Data Protocol)は、RESTful APIの構築と消費に関する一連のベストプラクティスを定義するISO/IEC認定のOASIS標準です。 ODataは、リクエストとレスポンスのヘッダー、ステータスコード、HTTPメソッド、URL変換、メディアタイプ、ペイロード形式、クエリオプションなどを定義するための多様なアプローチを気にせずに、RESTful APIを構築しながらビジネスロジックに専念するのに役立ちます。 また、ODataには変更の追跡、再利用可能なプロシージャの関数/アクションの定義、および非同期/バッチリクエストの送信に関するガイダンスも提供されています(出典: OData.org)。
これは InterSystems FAQ サイトの記事です。
SELinuxの機能が有効になっているとファイルアクセス時にセキュリティコンテキストのチェックで permission エラーになります。
CSP のページについても同様に permission エラーになっているため、Apache にて 403 Forbidden エラーになります。
以下の設定でSELinuxの機能を無効にすることで回避できます。
設定ファイル /etc/selinux/config の SELINUX=disableに設定し、OS の再起動を行います。
例:
これは InterSystems FAQ サイトの記事です。
設定内容によって、方法が異なります。
システム構成について
管理ポータルの [システム管理] > [構成]
以下の設定については(※1)、パラメータファイル(InterSystems IRISは iris.cpf、Caché/Ensemble/HealthShareは cache.cpf) に格納されます。
このファイルはテキストファイルとなっていますのでこのファイルの一部を他のシステムにコピーして反映させることが可能です。
ただし、ディレクトリ名など各システム固有の情報が多く含まれるため、そのままファイル全体をコピーしても設定内容を反映させることはできません。
(※1) 【Caché/Ensemble2010.2以前】 [システム管理ポータル] > [構成] (システム構成) メニュー以下の設定が対象です。
パラメータ・ファイルの各項目については、以下ドキュメントをご参照ください。
InterSystems パラメータ・ファイル・リファレンスについて【IRIS】Caché パラメータ・ファイル・リファレンスについて
セキュリティについて
^SECURITY ユーティリティを使用してエクスポート/インポートすることが可能です。
ターミナルを起動し、%SYSネームスペースで以下のコマンドを実行してください。
これは InterSystems FAQ サイトの記事です。
タイムアウトを無効にするためには、DSNの設定でクエリタイムアウト無効に設定します。
Windowsコントロールパネル > [管理ツール] > [データソース(ODBC)] > [システムDSN]の構成
で クエリタイムアウト無効 にチェックを入れますと、タイムアウトは無効になります。
アプリケーション側で変更する場合は、ODBC APIレベルで設定することが可能です。
ODBCのSQLSetStmtAttr関数をコールする際に、SQL_ATTR_QUERY_TIMEOUT属性を設定してから、データソースに接続してください。
これは InterSystems FAQ サイトの記事です。
バックアップ先に、共有フォルダを指定することは可能ですが、推奨しません。
バックアップの最終フェーズのDBアクセスを禁止する箇所で万一ネットワークエラー等で、バックアップがハングアップすることがあれば、システム全体に影響が及ぶリスクがあります。
しばらく前、GitHubはGitHub Codespacesという新しい機能を発表しました。 ブラウザでVSCodeを実行する機能があります。マシンでローカルに実行するのとほぼ同じ性能がありますが、クラウドの能力も備わっているため、最大32CPU、64 GB RAMのマシンタイプを選択することが可能です。
.png)
素晴らしいことですね。 でも、このことは、InterSystems IRISで駆動するプロジェクトで作業する上で、どのように役立つのでしょうか。 それをどのように構成するのか見てみましょう。
これは InterSystems FAQ サイトの記事です。
InterSystems製品のプロセスが消費するメモリ領域は以下の6つの領域になります。
プロセスのプライベートな領域
1. プロセスパーティション(ローカル変数テーブル等、プロセスごとに使用するメモリ)
2. 長い文字列(LongString)使用メモリ
3. 文字列スタック...等
プロセス間共有領域
4. データベースキャッシュ
5. ルーチンキャッシュ
6. 一般ヒープメモリ(プロセステーブル、ロックテーブル等)
プロセスが使用するメモリ領域は、「プライベート領域」と「共有領域」の大きく2種類に分かれます。
プライベートな領域はそのプロセスのみが使用し、個々のプロセス毎にメモリを割り当てます。
共有領域は、プロセス間で一つのメモリ領域を共有してアクセスしていますので実体はメモリ上に 1つです。
以下それぞれの領域の値は、管理ポータルで指定します(設定可能な場合)。
(1) プロセスパーティションのサイズ
[システム管理] > [構成] > [システム構成] > [メモリと開始設定] > [プロセスあたりの最大メモリ(KB)]
IRISインターオペラビリティのメッセージビューワで何かを変更できるとしたら、何を変更しますか?
開発者の皆さん、こんにちは!
この記事では、【GettingStarted with IRIS】シリーズの MQTT アダプタを簡単に試せるサンプルの利用方法についてご紹介します!.png)
(MQTTブローカーはインターネット上に公開されているテスト用ブローカーを利用しています)
サンプルは、こちら👉https://github.com/Intersystems-jp/Samples-MQTT-EKG-Devices (コンテナで動作します)
IRIS/IRIS for Health のバージョン2020.1から、IoT の世界でよく利用される MQTT プロトコルに対応できる MQTT アダプタが追加されました。
MQTTインバウンドアダプタでは、メッセージの Subscribe が行え、MQTTアウトバンドアダプタでは、メッセージの Publish が行えます。
サンプルでは、MQTT を使った遠隔モニタリングをテーマに、患者さんに装着した心電図から心拍数(BPM)をリアルタイムに近い状態で取得し、モニタ画面に患者さん毎の心拍数を表示します(IRIS の MQTT インバウンドアダプタを利用したメッセージの Subscribe をご体験いただけます)。
サンプルでは、演習環境毎にユニークになるようにコンテナ開始時に以下の形式でトピックを作成しています(末尾の # はワイルドカードの指定です)。
/Student_4629/acmeHospital/EKG/#実際に Publish されるトピックは患者さんに装着した心電図のデータになるので、# の部分は、Patient-1 や Patient-2 などのように患者さんを特定できる文字列が入ります。
サンプルのシナリオは、1つの医療機関の患者情報を取得する流れにしています(本来であれば複数の医療機関の患者情報をモニタできるようにしたほうが良いのですがシンプルに試すため、1つの医療機関の患者情報を取得する流れにしています)。
サンプルには1つHTMLファイルが用意されています。このファイルをブラウザで開くと MQTT ブローカーに接続し、データ(心拍数)を1秒ごとにブローカーへ Publish します。
.png)
IRIS は、MQTTブローカーから指定のトピックを Subscribe します。
MQTT ブローカーを Subscribe する設定を行った IRIS のサービスは、ブローカーからトピックを取得します。
実際の設定は以下の通りです。
.png)
受信したトピックは IRIS の中ではメッセージ(EnsLib.MQTT.Message)として扱われ、次のコンポーネントであるプロセス(図では Process_MQTT_Request)に渡します。
.png)
プロセスでは、受信した MQTT 用メッセージからモニタ表示に利用するデータ(Solution.HeartRate)に変換するため、データ変換を呼び出します。
プロセスエディタの開き方と、中で行われているデータ変換の呼び出しの設定を確認する方法は以下の通りです。
.png)
MQTT ブローカーから Subscribe した心拍数をリアルタイムに近い状態で画面表示するため、データ変換で作成された Solution.HeartRate から1秒ごとに患者ごとの心拍数を収集し、画面に表示しています。
.png)
この表示を行うため、1秒間隔で Solution.HeartRate に対するSELECT文が実行されています。
このクエリを実行しているのが、メトリックと呼ぶクラスです。プロダクションでは以下の場所に設定されています。
.png)
メトリックでは、指定の呼び出し間隔で Solution.HeartRate から患者ごとの BPM を収集しています。詳細はソースコードをご参照ください。
この連載の最初の記事では、大きなチャンクのデータをHTTP POSTメソッドのRaw本体から読み取って、それをクラスのストリームクラスとしてデータベースに格納する方法を説明しました。 2つ目の記事では、ファイルとファイル名をJSON形式にラップして送信する方法を説明しました。
それでは、大きなファイルを分割してサーバーに送るという構想を詳しく見ていきましょう。 これを行うために使用できるアプローチにはいくつかあるのですが、 この記事では、Transfer-Encodingヘッダーを使用してチャンク転送を指示する方法を説明します。 Transfer-EncodingヘッダーはHTTP/1.1仕様で導入されたものです。RFC 7230第4.1項では説明されているものの、HTTP/2仕様からはその説明が無くなっています。
開発者の皆さん、こんにちは!
次の InterSystems オンラインプログラミングコンテストが決定しました!
お題は・・・・ 🏆 InterSystems Security Contest 🏆
応募期間は 2021年11月15日~11月28日 です!
💰 賞金総額: $9,450 💰
.png)
