清除过滤器
问题
Wang li · 三月 30, 2021
大家好,我想咨询下如何实现用HealthShare开发socket的接口,例如开发socket对外的BS,以及socket调用的BO 您好,InterSystem的产品家族都支持直接使用Socket,借助UDP或TCPIP与第三方通信,参考
TCP:https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.cls?KEY=GIOD_tcp
UDP:https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=GIOD_udp
如果是使用BS或者BO的话,则可以使用IRIS提供的多种适配器按需开发获得,参考
https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.cls?KEY=PAGE_interop_protocols 好的,谢谢
问题
郭 恩意 · 九月 5, 2023
执行SQL语句查询数据时,提示unexpected status code, unable to process HyperEvent:Gateway timeout(504) 您好,方便告知您的联系方式?我们会直接联系您处理问题。
黄嘉
InterSystems 我的电话是:18603816613 Hi 恩意,
这个 504 您是在哪一个界面得到的呢? 是在cache 的网页后台运行查询时候报错,还是使用第三方的客户端比如 jdbc 或者odbc的时候报的错? 是在使用cache 的网页后台运行查询时候报错
文章
姚 鑫 · 三月 18, 2021
# 第十二章 使用嵌入式SQL(二)
# 嵌入式SQL代码
## 简单的SQL语句
可以将简单的SQL语句(单个嵌入式SQL语句)用于各种操作,包括:
- `INSERT`,`UPDATE`,`INSERT OR UPDATE`和`DELETE`语句。
- `DDL语句。
- `GRANT`和`REVOKE`语句。
- 只返回一行的`SELECT`语句(或者如果只对返回的第一行感兴趣)。
简单的SQL语句也被称为非基于游标的SQL语句。本章稍后将介绍基于游标的嵌入式SQL。
例如,以下语句查找ID为43的(唯一的)患者的姓名:
```sql
&sql(SELECT Name INTO :name
FROM Patient
WHERE %ID = 43)
```
如果对可以返回多行的查询使用简单语句,则只返回第一行:
```sql
&sql(SELECT Name INTO :name
FROM Patient
WHERE Age = 43)
```
根据查询的不同,不能保证哪一行将首先被返回。此外,如果一个查询包含一个`INTO`语句,并且该表不包含任何数据(`SQLCODE=100)`,执行该查询将导致未定义(空)的输出主机变量。因此,在访问输出主机变量之前,所有简单嵌入式SQL语句都应该测试`SQLCODE=0`。
## 架构名称解析
表名,视图名或存储过程名是合格的(指定架构名称)或不合格的(不指定架构名称)。如果名称未指定架构名称,则InterSystems IRIS会按以下方式解析架构名称:
- 数据定义:InterSystems IRIS使用系统范围内的默认架构来解析不合格的名称。如果默认模式不存在,则InterSystems IRIS将创建模式和相应的类包。所有数据定义语句都使用系统范围内的默认架构。数据定义语句忽略`#Import`和`#SQLCompile Path`宏预处理程序指令。
- 数据管理:InterSystems IRIS对包含嵌入式SQL语句的类或例程使用`#SQLCompile`路径和/或`#Import`宏预处理程序指令指定的架构搜索路径。 `#Import`和`#SQLCompile Path`指令是具有不同功能的可能模式名称的相互独立列表。二者之一或两者均可用于为不合格的表,视图或存储过程名称提供架构名称。如果未指定架构搜索路径,则InterSystems IRIS将使用系统范围的默认架构名称。
## 文字值
嵌入式SQL查询可能包含文字值(字符串,数字或日期)。字符串应用单引号(`'`)引起来。 (在InterSystems SQL中,双引号指定分隔的标识符):
```java
/// d ##class(PHA.TEST.SQL).EmbedSQL4()
ClassMethod EmbedSQL4()
{
&sql(SELECT 'Employee (' || Name || ')' INTO :name
FROM Sample.Employee)
IF SQLCODEd ##class(PHA.TEST.SQL).EmbedSQL4()
Employee (Adams,Susan E.)
```
数值可以直接使用。在InterSystems IRIS将这些文字值与字段值进行比较之前,先对文字数字和时间戳值进行`“lightly normalized”`,如以下示例所示,其中`+0050.000`被格式化为`50`:
```java
/// d ##class(PHA.TEST.SQL).EmbedSQL5()
ClassMethod EmbedSQL5()
{
&sql(SELECT Name,Age INTO :name,:age
FROM Sample.Person
WHERE Age = +0050.000)
IF SQLCODEd ##class(PHA.TEST.SQL).EmbedSQL5()
Russell,Quentin V. age=50
```
可以指定算术、函数和特殊变量表达式:
```java
/// d ##class(PHA.TEST.SQL).EmbedSQL6()
ClassMethod EmbedSQL6()
{
&sql(DECLARE C3 CURSOR FOR
SELECT Name, Age - 65, $HOROLOG INTO :name,:retire,:today
FROM Sample.Person
WHERE Age > 60
ORDER BY Age, Name)
&sql(OPEN C3)
QUIT:(SQLCODE'=0)
&sql(FETCH C3)
WHILE (SQLCODE = 0) {
WRITE $ZDATE(today)," ",name," has ",retire," eligibility years",!
&sql(FETCH C3)
}
&sql(CLOSE C3)
}
```
```java
DHC-APP>d ##class(PHA.TEST.SQL).EmbedSQL6()
03/13/2021 Moon,Rhonda T. has -4 eligibility years
03/13/2021 Olsen,Ashley G. has -4 eligibility years
03/13/2021 Quixote,Terry J. has -4 eligibility years
03/13/2021 Yoders,Liza U. has -4 eligibility years
03/13/2021 Gore,Alfred M. has -3 eligibility years
03/13/2021 Houseman,Alice R. has -2 eligibility years
03/13/2021 Nichols,Heloisa M. has -2 eligibility years
03/13/2021 Houseman,Martin D. has 0 eligibility years
03/13/2021 LaRocca,David X. has 0 eligibility years
03/13/2021 Ng,Liza Z. has 0 eligibility years
03/13/2021 Smith,Elvis Y. has 0 eligibility years
```
在嵌入式SQL中,字符串文字中不允许使用以`##`开头的一些字符序列,而必须使`##lit`指定。这些字符序列是`##;`, `##beginlit`, `##expression(`, `##function(`, `##quote(`, `##stripq(`, and `##unique(`。例如,以下示例失败:
```java
ClassMethod EmbedSQL7()
{
WRITE "Embedded SQL test",!
&sql(SELECT 'the sequence ##unique( is restricted' INTO :x)
WRITE x
}
```
以下解决方法成功:
```java
/// d ##class(PHA.TEST.SQL).EmbedSQL7()
ClassMethod EmbedSQL7()
{
WRITE "Embedded SQL test",!
&sql(SELECT 'the sequence ##lit(##unique() is restricted' INTO :x)
WRITE x
}
```
```java
DHC-APP>d ##class(PHA.TEST.SQL).EmbedSQL7()
Embedded SQL test
the sequence ##unique( is restricted
```
## 数据格式
在嵌入式SQL中,数据值处于`“逻辑模式”`。也就是说,值采用SQL查询处理器使用的本机格式。对于未定义`LogicalToODBC`或`LogicalToDisplay`转换的字符串,整数和其他数据类型,这无效。数据格式会影响`%List`数据以及`%Date`和`%Time`数据类型。
`%List`数据类型在逻辑模式下显示为以非打印列表编码字符开头的元素值。 `WRITE`命令将这些值显示为连接的元素。例如,`Sample.Person`的`FavoriteColors`字段以`%List`数据类型存储数据,例如:`$LISTBUILD('Red','Black')`。在嵌入式SQL中,这在逻辑模式下显示为`RedBlack`,长度为12个字符。在“显示”模式下,它显示为`“Red,Black”`;在ODBC模式下,它显示为`Red,Black`。在下面的示例中显示:
```java
/// d ##class(PHA.TEST.SQL).EmbedSQL8()
ClassMethod EmbedSQL8()
{
&sql(DECLARE C4 CURSOR FOR
SELECT TOP 10 FavoriteColors INTO :colors
FROM Sample.Person WHERE FavoriteColors IS NOT NULL)
&sql(OPEN C4)
QUIT:(SQLCODE'=0)
&sql(FETCH C4)
WHILE (SQLCODE = 0) {
WRITE $LENGTH(colors),": ",colors,!
&sql(FETCH C4)
}
&sql(CLOSE C4)
}
```
```java
DHC-APP>d ##class(PHA.TEST.SQL).EmbedSQL8()
21: ReOrangYellow
28: ReOrangYellowGreen
35: ReOrangYellowGreenGreen
36: ReOrangYellowGreeYellow
7: White
7: Black
14: GreenWhite
8:Purple
8:Yellow
10: RedRed
```
InterSystems IRIS提供的`%Date`和`%Time`数据类型使用InterSystems IRIS内部日期表示形式(`$HOROLOG`格式)作为其逻辑格式。 `%Date`数据类型在逻辑模式下返回INTEGER数据类型值;在“显示”模式下为`VARCHAR`数据类型值,在`“ODBC”`模式下为`DATE`数据类型值。 `%TimeStamp`数据类型的逻辑,显示和`ODBC`格式使用`ODBC日期-时间`格式(`YYYY-MM-DD HH:MM:SS`)。
例如,考虑以下类定义:
```java
Class MyApp.Patient Extends %Persistent
{
/// Patient name
Property Name As %String(MAXLEN = 50);
/// Date of birth
Property DOB As %Date;
/// Date and time of last visit
Property LastVisit As %TimeStamp;
}
```
针对该表的简单嵌入式SQL查询将以逻辑模式返回值。例如,考虑以下查询:
```java
&sql(SELECT Name, DOB, LastVisit
INTO :name, :dob, :visit
FROM Patient
WHERE %ID = :id)
```
该查询将三个属性的逻辑值返回到主机变量名称,`dob`和`visit`中:
主机变量| 值
---|---
name| "Weiss,Blanche"
dob| 44051
visit| "2001-03-15 11:11:00"
请注意,`dob`是`$HOROLOG`格式。可以使用`$ZDATETIME`函数将其转换为显示格式:
```java
SET dob = 44051
WRITE $ZDT(dob,3),!
```
与`WHERE`子句中的true相同的考虑因素。例如,要查找具有给定生日的患者,必须在WHERE子句中使用逻辑值:
```java
&sql(SELECT Name INTO :name
FROM Patient
WHERE DOB = 43023)
```
或者,使用主机变量:
```java
SET dob = $ZDH("01/02/1999",1)
&sql(SELECT Name INTO :name
FROM Patient
WHERE DOB = :dob)
```
在这种情况下,我们使用`$ZDATEH`函数将显示格式日期转换为其等效的`$HOROLOG`逻辑值。
## 权限检查
嵌入式SQL不执行SQL特权检查。可以访问所有表,视图和列,并执行任何操作,而不管特权分配如何。假定使用嵌入式SQL的应用程序将在使用嵌入式SQL语句之前检查特权。
可以在嵌入式SQL中使用InterSystems SQL `%CHECKPRIV`语句来确定当前权限。
文章
Hao Ma · 三月 25, 2021
Covid-19 肺部 X 射线分类和 CT 检测演示 **关键字**:COVID-19,医学影像,深度学习,PACS Viewer 和 HealthShare。
## **目的**
在这场史无前例的新冠疫情笼罩之下, 我们竭尽所能为客户提供支援,同时利用先进的 AI 技术观察着不同的疫情战线。
去年,我简单提及了一个[深度学习演示环境](https://community.intersystems.com/post/run-deep-learning-demo-python3-binding-healthshare-part-ii)。 在这个漫长的复活节周末,我们就来看一看现实世界的图像,在 Covid-19 肺部 X 射线数据集上测试运行一些深度学习模型以进行快速分类,并见证这类用于 X 射线甚至 CT 的工具如何通过 docker 等方式快速部署到云端,实现及时的“AI 分诊”并协助放射科医生。
这只是一个 10 分钟的快速笔记,希望通过简单的方法帮助各位上手实践。
## **范围**
本演示环境中使用了以下组件, 这是我目前能找到的最简单的形式:
* 一个小型**匿名开放数据集**,共 3 种类型:Covid-19 肺与细菌性肺炎肺与正常透明肺。
* 一组**深度学习模型**,如用于肺部 X 射线分类的 Inception V3 模型
* 带有 Jupyter Notebook 的 **Tensorflow 1.13.2** 容器
* 用于 **GPU 工具的 Nvidia-Docker2** 容器
* 配备 Nvidia T4 GPU 的 AWS **Ubuntu 16.04 VM**(如果不重新训练预训练的模型,笔记本电脑的 GPU 就足够了)
以及,
* “AI 辅助 CT 检测”的演示容器。
* 第三方 Open PACS Viewer 的演示容器。
* HealthShare Clinical Viewer 的演示实例。
以下不在演示范围内:
* PyTorch 越来越受欢迎(下次会用到)
* TensorFlow 2.0 在演示环境中的运行速度过慢(因此我暂时回转到 1.13 版)
* AutoML 等多模型集成(它们在现实世界中越来越流行,但单一老式模型对这个小数据集来说已经足够了)
* 任何现实世界位置的 X 射线和 CT 数据。
## **免责声明**
这个演示更多是关于技术方法,而不是特定领域的临床试验。 基于 CT 与 X 线等证据的 Covid-19 检测已在网上广泛流传,对其有正面评价,也有负面评价。疫情期间,它在各个国家/地区和文化中发挥着不同的作用。 另外,本文的正文和布局可能会根据需要进行修改。 本文完全是出自“开发者”角度的个人观点。
## **数据**
本测试的原始图像来自 Joseph Paul Cohen 公开的 [Covid-19 肺部 X 射线集](https://github.com/ieee8023/covid-chestxray-dataset),以及开放的
Kaggle 胸部 X 射线集中的一些干净的肺,由 Adrian Yu 在 GradientCrescent 仓库中收集为一个小型测试集。 我[在这里上传了测试数据](https://github.com/zhongli1990/Covid19-X-Rays),供有兴趣的读者进行快速测试。 到目前为止,它只包含一个小的训练集:
* 60x Covid-19 肺
* 70x 正常透明肺
* 70x 细菌性肺炎肺
## **测试**
在以下测试中,我根据自己的情况做了些微调:
* Inception V3 模型作为基础,几个 CNN 层作为顶层
* 使用未冻结的底层 Inception 层权重进行迁移学习,以再训练(如果是在笔记本电脑 GPU 上,您只需要冻结预训练的 Inception 层)
* 为弥补目前收集到的少量数据集,略微增加了一些内容。
* 3x 类别而不是二元类别:Covid-19、正常与细菌性(或病毒性)肺炎(我将解释为什么是这三类)
* 计算基本的 3 类混淆矩阵,作为后续可能步骤的模板。
**注**:选择 InceptionV3 而不是其他流行的基于 CNN 的模型,比如 VGG16 或 ResNet50,并没有什么特别的原因。 我只是碰巧最近在其他模型中用它来演示运行了一个骨折数据集,为方便起见就直接重用了。 您可以使用[任何偏好的模型](https://towardsdatascience.com/illustrated-10-cnn-architectures-95d78ace614d)重新运行以下 Jupyter Notebook 脚本。
我也在这篇帖子中附加了以下 Jupyter Notebook 文件。 下面也是为了快速说明。
### 1. 导入必要的库:
# import the necessary packages
from tensorflow.keras.layers import AveragePooling2D, Dropout, Flatten, Dense, Input
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical
from tensorflow.keras import optimizers, models, layers
from tensorflow.keras.applications.inception_v3 import InceptionV3
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix
from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import cv2
import os
### 2. 加载[此处提供的示例图像文件](https://github.com/zhongli1990/Covid19-X-Rays)
# set learning rate, epochs and batch size
INIT_LR = 1e-5 <span style="color:#999999;"># This value is specific to what model is chosen: Inception, VGG or ResNet etc.</span>
EPOCHS = 50
BS = 8
print("Loading images...")
imagePath = "./Covid_M/all/train" # change to your local path for the sample images
imagePaths = list(paths.list_images(imagePath))
data = []
labels = []
# read all X-Rays in the specified path, and resize them all to 256x256
for imagePath in imagePaths:
label = imagePath.split(os.path.sep)[-2]
image = cv2.imread(imagePath)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = cv2.resize(image, (256, 256))
data.append(image)
labels.append(label)
#normalise pixel values to real numbers between 0.0 - 1.0
data = np.array(data) / 255.0
labels = np.array(labels)
# perform one-hot encoding for a multi-class labeling
label_encoder = LabelEncoder()
integer_encoded = label_encoder.fit_transform(labels)
labels = to_categorical(integer_encoded)
print("... ... ", len(data), "images loaded in multiple classes:")
print(label_encoder.classes_)
Loading images...
... ... 200 images loaded in 3x classes:
['covid' 'normal' 'pneumonia_bac']
### 3. 添加基本数据增强,重新构建模型,然后开始训练
# split the data between train and validation.
(trainX, testX, trainY, testY) = train_test_split(data, labels, test_size=0.20, stratify=labels, random_state=42)
# add on a simple Augmentation. Note: too many Augumentation doesn't actually help in this case - I found during the test.
trainAug = ImageDataGenerator(rotation_range=15, fill_mode="nearest")
#Use the InveptionV3 model with Transfer Learning of pre-trained "ImageNet"'s weights.
#note: If you choose VGG16 or ResNet you may need to reset the initial learning rate at the top.
baseModel = InceptionV3(weights="imagenet", include_top=False, input_tensor=Input(shape=(256, 256, 3)))
#baseModel = VGG16(weights="imagenet", include_top=False, input_tensor=Input(shape=(256, 256, 3)))
#baseModel = ResNet50(weights="imagenet", include_top=False, input_tensor=Input(shape=(256, 256, 3)))
#Add on a couple of custom CNN layers on top of the Inception V3 model.
headModel = baseModel.output
headModel = AveragePooling2D(pool_size=(4, 4))(headModel)
headModel = Flatten(name="flatten")(headModel)
headModel = Dense(64, activation="relu")(headModel)
headModel = Dropout(0.5)(headModel)
headModel = Dense(3, activation="softmax")(headModel)
# Compose the final model
model = Model(inputs=baseModel.input, outputs=headModel)
# Unfreeze pre-trained Inception "ImageNet" weights for re-training since I got a Navidia T4 GPU to play with anyway
#for layer in baseModel.layers:
# layer.trainable = False
print("Compiling model...")
opt = Adam(lr=INIT_LR, decay=INIT_LR / EPOCHS)
model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"])
# train the full model, since we unfroze the pre-trained weights above
print("Training the full stack model...")
H = model.fit_generator( trainAug.flow(trainX, trainY, batch_size=BS), steps_per_epoch=len(trainX) // BS,
validation_data=(testX, testY), validation_steps=len(testX) // BS, epochs=EPOCHS)
... ...
Compiling model...
Training the full stack model...
... ...
Use tf.cast instead.
Epoch 1/50
40/40 [==============================] - 1s 33ms/sample - loss: 1.1898 - acc: 0.3000
20/20 [==============================] - 16s 800ms/step - loss: 1.1971 - acc: 0.3812 - val_loss: 1.1898 - val_acc: 0.3000
Epoch 2/50
40/40 [==============================] - 0s 6ms/sample - loss: 1.1483 - acc: 0.3750
20/20 [==============================] - 3s 143ms/step - loss: 1.0693 - acc: 0.4688 - val_loss: 1.1483 - val_acc: 0.3750
Epoch 3/50
... ...
... ...
Epoch 49/50
40/40 [==============================] - 0s 5ms/sample - loss: 0.1020 - acc: 0.9500
20/20 [==============================] - 3s 148ms/step - loss: 0.0680 - acc: 0.9875 - val_loss: 0.1020 - val_acc: 0.9500
Epoch 50/50
40/40 [==============================] - 0s 6ms/sample - loss: 0.0892 - acc: 0.9750
20/20 [==============================] - 3s 148ms/step - loss: 0.0751 - acc: 0.9812 - val_loss: 0.0892 - val_acc: 0.9750
### 4. 为验证结果绘制混淆矩阵:
print("Evaluating the trained model ...")
predIdxs = model.predict(testX, batch_size=BS)
predIdxs = np.argmax(predIdxs, axis=1)
print(classification_report(testY.argmax(axis=1), predIdxs, target_names=label_encoder.classes_))
<span style="color:#999999;"># calculate a basic confusion matrix</span>
cm = confusion_matrix(testY.argmax(axis=1), predIdxs)
total = sum(sum(cm))
acc = (cm[0, 0] + cm[1, 1] + cm[2, 2]) / total
sensitivity = cm[0, 0] / (cm[0, 0] + cm[0, 1] + cm[0, 2])
specificity = (cm[1, 1] + cm[1, 2] + cm[2, 1] + cm[2, 2]) / (cm[1, 0] + cm[1, 1] + cm[1, 2] + cm[2, 0] + cm[2, 1] + cm[2, 2])
<span style="color:#999999;"># show the confusion matrix, accuracy, sensitivity, and specificity</span>
print(cm)
print("acc: {:.4f}".format(acc))
print("sensitivity: {:.4f}".format(sensitivity))
print("specificity: {:.4f}".format(specificity))
<span style="color:#999999;"># plot the training loss and accuracy</span>
N = EPOCHS
plt.style.use("ggplot")
plt.figure()
plt.plot(np.arange(0, N), H.history["loss"], label="train_loss")
plt.plot(np.arange(0, N), H.history["val_loss"], label="val_loss")
plt.plot(np.arange(0, N), H.history["acc"], label="train_acc")
plt.plot(np.arange(0, N), H.history["val_acc"], label="val_acc")
plt.title("Training Loss and Accuracy on COVID-19 Dataset")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")
plt.legend(loc="lower left")
plt.savefig("./Covid19/s-class-plot.png")
从上图可以看出,得益于“迁移学习”的好处,即使只有很小的数据集和不到 5 分钟的快速训练,得出的结果也并不差:12 个 Covid-19 肺全部正确分类,总共 40 个肺中只有 1 个正常肺被错划为“细菌性肺炎”肺。
###
### 5. 为测试真实 X 射线图绘制混淆矩阵
接下来,我们再深入一些,发送真实的 X 射线图测试这个轻度训练的分类器有多有效。
我将上述训练集或验证集中尚未使用的 27 个 X 射线图像上传到模型:
9 个 Covid-19 肺,9 个正常肺,9 个细菌性肺。 (图像也附在本篇帖子中。)
我只在第 2 步中修改了一行代码,确保它从不同路径加载测试图像:
...
imagePathTest = "./Covid_M/all/test"
...
使用上面训练好的模型开始预测:
predTest = model.predict(dataTest, batch_size=BS)
print(predTest)
predClasses = predTest.argmax(axis=-1)
print(predClasses)
...
最后,按照第 5 步重新计算混淆矩阵:
testX = dataTest
testY = labelsTest
... ...
得出一些真实测试结果:
同样,经过训练的模型似乎能够正确分类所有 Covid-19 肺。 对于这么小的数据集来说,这样的结果不算太差。
### 6. 一些进一步的观察:
我在复活节周末尝试了许多种数据集,注意到从 AI 分类器的角度来看,Covid-19 肺似乎具有一些显著特征,相对更容易与其他正常细菌性或病毒性(流感)肺区分开来。
经过一些快速测试,我还发现,实在很难区分细菌性和病毒性(正常流感)肺。 如果有时间的话,我必须用 Ensemble 集群降低它们之间的差异,就像其他 Kaggle 竞争者在这种情况下可能会做的一样。
以上结果是否切实符合临床的真实情况? Covid-19 肺在 X 射线图上真有一些显著特征吗? 我并不确定。 这要向真正的胸部放射科医生征求意见。 就目前而言,我宁愿假设现在的数据集太小,还无法得出最终结论。
**下一步**:我很想收集更多的真实 X 射线图,用 xgsboot、AutoML 或新的 IRIS IntegratedML 工作台全面观察。 还有,我希望我们能够为临床医生和 A&E 分诊医生将 Covid-19 肺按其严重程度进一步分为如 1 级、2 级和 3 级。
不管怎样,[我还是附上了数据集和 Jupyter Notebook](https://github.com/zhongli1990/Covid19-X-Rays)。
## **部署**
在这个“医学影像”领域,我们已经触及了一些快速设置的简易起点。 实际上,这个 Covid-19 领域是我在过去一年中用周末时间和长假研究的第 3 个领域。 其他包括“人工智能辅助骨骨折检测”系统和“人工智能辅助眼(眼科)视网膜诊断”系统。
上面的模型也许还太过简陋,但是我们可能很快就必须面对一个常见问题:[我们要如何将其部署为一种“AI 服务”? ](https://community.intersystems.com/post/deploy-mldl-models-consolidated-ai-demo-service-stack)
这涉及技术堆栈和服务生命周期,还涉及实际的“用例” - 我们要解决哪些问题?它可以提供什么样的实际价值? 答案有时并不像技术本身那样清晰。
英国 [RCR (Royal College of Radiologist) 草案](https://www.rcr.ac.uk/sites/default/files/integrating-ai-with-radiology-reportin%20g-workflow-guidance-covid19.pdf)提出了 2 个简单的用例:“放射科医生的 AI 助手”和“A&E 或基层医疗环境中的 AI 分诊”。 我个人表示同意,并认为“AI 分诊”目前来说更有价值。 幸运的是,得益于云、Docker、AI 以及我们的 HealthShare 的支持,如今的开发者可以运用更多资源应对这类用例。
例如,以下屏幕截图显示了 AWS 托管的企业级“Covid-19 肺 AI 辅助 CT 检测”服务,及其如何直接嵌入 HealthShare Clinical Viewer 进行演示。 与 X 射线类似,DICOM 中的 CT 集可以直接上传或发送到这个打开的 PACS Viewer,点击“AI diagnosis”即可在 10 秒内根据训练的模型给出 Covid-19 概率的定量指示,能够全天候用于快速“AI 分诊”用例。 X 射线分类等模型可以在同一患者的相关信息中,以相同的方式在现有 PACS 查看器上部署和调用,帮助一线临床医生。

## **致谢**
测试图像来自 Joseph Paul Cohen 的 [Covid-19 肺部 X 射线集](https://github.com/ieee8023/covid-chestxray-dataset),以及开放的 [Kaggle 胸部 X 射线集](https://www.kaggle.com/paultimothymooney/chest-xray-pneumonia)中的一些干净的肺,由 Adrian Yu 在 [GradientCrescent 仓库](http://github.com/EXJUSTICE/GradientCrescent)中收集。 我还重用了 [PyImageSearch 的 Adrian ](https://github.com/AleGiovanardi/covidhelper)的结构,添加了我自己改进的训练,如“测试”部分所列。 还要感谢 [HYM](http://en.huiyihuiying.com/) 提供[基于 AWS 云的 Open PACS Viewer](http://ec2-3-8-183-64.eu-west-2.compute.amazonaws.com/doctor/index.html#!/login) 以及 X 射线和 CT 图像的 AI 模块,用于研究测试数据集。
**未来计划**
如今,AI 已经“侵入”到人类健康和日常生活的的方方面面。 根据我高度简化的观点,医疗领域的 AI 应用可能主要有以下几个方向:
* **医学影像**:包括胸部、心脏、眼睛和大脑等的 X 射线、CT 或 MRI 等图像。
* **NLP 理解**:对海量文本资产和知识库的挖掘、理解和学习。
* **人口健康**:包括流行病学等趋势预测、分析和建模。
* 个性化 AI:一组专为个人训练的 AI/ML/DL 模型,作为个人健康助手与用户一起成长和变老?
* 其他 AI:如 AlphaGo,甚至用于 3D 蛋白结构预测来对抗 Covid-19 的 AlphaFold 等,这些前沿突破让人印象深刻。
谁也无法预测我们将来能取得什么样的成果。 而且,这本来就是一个愿望清单,只要我们别在家里待得太久。
**附录** - [文件已上传到此处。 其中包括上文使用的图像和提及的 Jupyter Notebook 文件](https://github.com/zhongli1990/Covid19-X-Rays)。 在周末从头开始设置和运行可能要花费几个小时的时间。
文章
Jingwei Wang · 八月 25, 2021
Object Script(二)
特殊符号
ObjectScript没有定义任何保留字:你可以自由地使用任何字作为标识符(如变量名)。为了达到这个目的,ObjectScript使用了一组内置的命令以及特殊的字符(比如函数名的"$"前缀),以便将标识符与其他语言元素区分开来。
示例
含义
abc^def
调用routine中的一个标签:
def是一个routine,abc是该routine中的一个标签。
i%abcdef
i%<PropertyName>
用于从实例变量自身的Get或Set访问器方法中引用该变量,或者绕过其Get或Set方法
abc->def
这种语法只在InterSystems的SQL语句中可以使用。它指定了一个隐含的左外连接。abc是你正在查询的类中的一个对象值字段,def是子类中的一个字段。
abc?def
一个问号是模式匹配操作符,测试变量abc中的值是否与def中指定的模式相匹配
abc[def
左括号([)是二进制包含运算符。这个表达式检测字符串"abc "是否包含字符串 "def"
abc]def
右括号(])是二进制跟随运算符。这个表达式检测字符串"abc "是否在字符串 "def "之后,以ASCII的顺序排列。
abc]]def
两个右括号(]])是二进制排序运算符。这个表达式检测字符串 "abc "是否排在字符串 "def "之后,以数字下标排序。
..
相对点语法,两个句号组成,是一个类成员内部对另一个类成员的引用的开始。或者用于访问当前对象的一个属性或调用一个方法
##Class()
用于调用一个类的方法,将一个对象引用转换为另一个类来调用一个方法,或者用于访问一个类参数的值。
##super
用于从子类方法中调用父类方法
$abc
系统变量或自定义变量
$abc()
系统函数或者自定义函数,括号中可用逗号分隔参数
$abc.def.ghi(xxx)
$abc是$SYSTEM,def是%SYSTEM包中的类的名称,ghi是该类中一个方法的名称,xxx是该方法的一个可选的逗号分隔的参数列表
$SYSTEM是%SYSTEM包的别名,用来提供对该包中类的方法的访问
$$abc
abc是一个宏,美元符号不是其名称的一部分
$$abc()
是一个定义在包含此引用的routine或函数中的子程序。这种语法调用子程序abc并获得其返回值
%abc
InterSystems IRIS系统类中的大多数包、类和方法都以百分号开头。也有可能是InterSystems IRIS设置的一个局部变量,Routine或者嵌入SQL变量
%%abc
有关于InterSystems SQL,是伪字段的关键字
^abc
一个函数或者一个执行程序(Roution),也可表示为全局参数
^$abc
结构化的系统变量
^||abc
进程私有的全局参数,是一个用于临时存储大数据值的机制
^[XXX]%abc
对另一个名字空间中的全局或例程的引用
常用系统变量及函数:
变量/函数/类
含义
$SYSTEM
提供系统信息
$HOROLOG
当前进程的日期和时间
$zv
系统版本信息
$ZDH()
用于检验日期格式,并将可读的日期格式转换成InterSystems IRIS 数据库可读格式
$zd()
用于检验日期格式,并将InterSystems IRIS数据库日期格式转换成可读的日期格式。
示例:
字符串类型与日期类型相互转换:$ZDH/$ZD
w $ZDH("2017-03-13",3)
w $zd(0)
$Random(range)
返回符合范围内的随机正整数
$zlog()
Log指数计算
$zsqr()
平方根计算
$Case
根据第一个参数,可以返回相关的值,类似于Switch case。或者返回一个procedure或者一个routine
示例:
s x =2
w $CASE(x,1:"single",2:"double",3:"triple",:"input error")
数组
本地数组:生命周期在当前进程
SET a(1) = "A local variable array"
SET a(1,1,1) = "Another local variable array"
全局数组:持久化数组,直接存于磁盘
SET ^||a(1) = "A process-private global array"
SET ^a(1) = "A global array"
文章
Michael Lei · 一月 25, 2022
有时需要将数据和数据模型Schema从Postgres转移或迁移到IRIS。目前有几个选择可以做到这一点,但最流行的两个选项是使用DBeaver(https://openexchange.intersystems.com/package/DBeaver)或SQLGateway。第一种方法将在本文中演示,第二种方法在Robert Cemper的一篇优秀文章中介绍,使用 SQLgateway 迁移数据库(https://community.intersystems.com/post/db-migration-using-sqlgateway),请看本文中如何使用DBeaver执行这种迁移。
为迁移过程获取样本数据
在Github上可以下载一个docker compose项目来构建和运行两个数据库。:
源数据库: 带有样本数据库的PostgreSQL 数据库 Docker 实例 .
目标数据库: 带有Schema就绪接受源数据库的InterSystems IRIS 数据平台Docker 实例.
要获得样本并运行它,请遵循以下步骤:
到 https://openexchange.intersystems.com/package/migration-pg-iris-dataset 下载并到 git repository.
克隆项目: git clone https://github.com/yurimarx/migration-pg-iris.git.
到项目目录 migration-pg-iris.
执行build: docker-compose build.
运行containers: docker-compose up -d.
实例ok后在你的Docker桌面看到:
关于要迁移的数据
要迁移的数据如下所示:
从 PostgreSQL 到 IRIS 的迁移过程将包括:
8 个表.
1,000,000 行销售数据.
250,000 行用户数据.
300 行产品.
500 行店铺.
100 行国家.
30 行城市.
5 行状态名status_name.
迁移目标为 InterSystems IRIS 中USER 命名空间namespace内的 dc_test schema .
从 PostgreSQL 到 IRIS 的开源迁移工具: DBeaver
DBeaver是一个数据库工具,可以连接、创建、下拉、选择、更新和删除市场上主要数据库产品的数据对象。下载地址:https://openexchange.intersystems.com/package/DBeaver。现在按照安装说明,将这个神奇的产品安装在你的笔记本电脑或桌面。DBeaver可以用来在数据库连接之间迁移数据,即使它们来自不同的制造商和版本。
使用DBeaver连接源和目标数据库
现在我们将设置要迁移的数据库连接。在DBeaver里设置PostgreSQL连接:
1. DBeaver 到 文件 File >新建 New.
2. 选择数据库连接并点击下一步:
3. 选择SQL tab > PostgreSQL 点击下一步:
4. 如图填写PostgreSQL 连接项目 :
Host: localhost
Port: 5438
Database: postgres
Username: postgres
Password: postgres
Click Finish.
在 DBeaver设置IRIS连接:
1. DBeaver 到 文件 File >新建 New.2. 选择数据库连接并点击下一步:
3. 选择 SQL tab > InterSystems IRIS 并点击下一步:
4. 如果 DBeaver 要求下载InterSystems IRIS 驱动, 点击 Yes 或 Ok.5. 如图填写InterSystems IRIS 连接项目:
Host: localhost
Database/Schema: user
Username: _SYSTEM
Password: SYS
Click Text Connection and Finish.
6. postgres和用户的连接可以在数据库导航器中找到:
开始迁移
执行以下步骤:1. 打开 postgres connection > public 选择所有表。在选择的表上点击鼠标右键选择导出数据 Export Data, 如图:
2. 如图选择数据库并点击下一步
3. 点击选择按钮:
4. 选择 dc_test 并点击ok.
5. 现在有必要改变目标数据库的一些数据类型配置,因为IRIS和PostgreSQL对整数和小数值使用不同的数据类型。.6. 展开 public.country 表, 选择第一项 (country_id) 并点击 Columns…
7. 把目标类型从 int4 改成 integer 并点击Ok.
8. 对表重复以上过程
a. public.product.b. public.status_name.c. public.users.d. public.city (把city_id 和 country_id类型改成 integer ).e. public.store (把 store_id 和 city_id 类型改成 integer ).f. public.sale (把product_id, user_id 和 store_id类型改成integer,把amount改成 double )
g. public.order_status (把status_name_id 改成 integer).
9. 现在目标数据类型改好了, 点击下一步.
10. 设置获取 Fetch 大小为 1,000,000 并点击下一步.
11. 在Data load数据加载设置中接受默认值并点击下一步.
12. 在确认Confirm页面点击 Proceed.
13. 现在看到在数据库导航器看到在 InterSystems IRIS dc_test schema 下的所有 PostgreSQL表.
对于表来说,迁移过程非常简单,但对于视图、函数、触发器和存储过程,你需要使用ObjectScript或SQL重写SQL源代码。
迁移到 IRIS能得到什么?
总结一下:
API 管理.
可视化报表Visual Reports (IRIS Reports).
自动化机器学习AutoML (IntegratedML).
多语言应用、数据开发环境(Python, Java, .NET, JavaScript).
服务总线ESB.
BI/Analytics.
自然语言处理NLP.
微服务开发Microservices development.
多模型数据库(SQL, JSON, Analytical Cubes, Object Oriented).
数据分片Sharding.
总体来说, 迁移到 IRIS 你得到的是一个数据平台, 其他的你只有一个数据库。
公告
Claire Zheng · 七月 22
📣📣📣2025年7月25日15:00,我们邀请InterSystems销售工程师Kate Lau带来一场关于“InterSystems FHIR to OMOP数据管道”的分享,欢迎参加!
🎉🎉🎉欢迎点击此处报名参会🎉🎉🎉
医疗数据资产化对于现代化医院管理非常重要,因为它正在重塑医疗行业的价值创造逻辑,推动医疗机构从传统的“诊疗服务提供者”向“数据驱动的健康生态参与者”转型。作为数字时代的“石油”,数据资产化正在重新定义医疗行业的价值分配规则——将数据转化为可计量、可交易、可增值资产,成为数据持有方(例如:医疗机构)的必修之路。
然而在数据资产化的过程中,数据持有方(例如:医疗机构)面临四大典型困境:
数据孤岛:EHR、PACS、LIS等系统数据格式割裂,导致患者360视图缺失。
标准缺失:缺乏统一性,一方面大量数据源未采用有效标准;另一方面,行业通用模型众多、数据质量标准不一,且应用场景差异巨大。这些都阻碍了数据的有效利用。
治理耗时:数据治理依赖人工映射,导致ETL耗时过长。
价值沉没:海量数据因缺乏标准化处理,无法支持AI模型训练或科研转化。
这些典型困境的解题钥匙在互操作性和数据标准,那么便离不开FHIR和OMOP这两大标准。
FHIR(Fast Healthcare Interoperability Resources)是HL7组织开发的医疗互操作性标准,以RESTful API和JSON/XML格式为核心,以解决医疗数据交换的实时性、轻量化和跨系统协作问题,因此,FHIR目前在全球医疗健康数据资产化方面占据统治地位,FHIR可以通过标准化数据接口和持久化能力,将原始医疗数据转化为可流通、可复用的资产,为互联网医疗、健康管理、保险精算等场景提供底层支持。
OMOP(Observational Medical Outcomes Partnership)是一个由多学科研究人员组成的国际合作组织,OMOP通用数据模型(CDM)和标准化术语集,为医疗数据分析提供了统一框架和语言,医院、制药公司、数据公司,都可以从OMOP提供的标准化数据资产中获益。通过统一数据结构和术语,支持跨数据库、跨机构的大规模队列研究。OMOP的主导型场景体现在真实世界研究,如药物安全性监测、多中心临床研究、专病数据库建设等方面,通过标准化数据模型和工具链,能够降低科研门槛,加速从数据到知识的转化,成为药物研发、公共卫生政策制定的核心基础设施。
一图理解FHIR与OMOP的场景差异与协同路径
如果说FHIR是数据资产化的“起点”,通过实时交换和标准化接口,将分散的医疗数据转化为可流通的资产;那么OMOP就是科研价值的“终点”,通过标准化模型和工具链,挖掘数据资产中的知识,支撑临床决策和药物研发。从FHIR到OMOP,灵活的转换能够有效推动数据资产的应用落地。
InterSystems FHIR to OMOP数据管道提供了解决方案。通过标准互操作(基于FHIR R4标准构建数据接口)、自动化映射(内置OMOP CDM预构建映射规则,大大缩短传统ETL开发周期)、 自动化数据质量分析和云原生架构(依托AWS HealthLake实现弹性扩展),可以帮助用户快速实现数据资产的OMOP化,为用户在数字时代占据先机!
📣📣📣2025年7月25日15:00,我们邀请InterSystems销售工程师Kate Lau带来一场关于“InterSystems FHIR to OMOP数据管道”的分享,通过Demo演示,详解拆解InterSystems FHIR to OMOP解决方案。欢迎点击此处报名参会!
文章
姚 鑫 · 九月 28, 2022
[toc]
# 第四十六章 功能跟踪器收集使用统计信息
作为 不断努力改进其产品以满足客户需求的一部分, 在 `IRIS®` 数据平台中包含一个名为 `Feature Tracker` 的软件实用程序,该软件实用程序收集软件模块使用情况的统计数据。本主题介绍特征跟踪器。
# 为什么 InterSystems 收集统计数据
`Feature Tracker` 收集的统计数据记录软件模块是否存在并在给定的 `IRIS` 实例中使用。 `Feature Tracker` 每周通过 `https` 将此信息发送给 `InterSystems`。这些统计数据有助于 `InterSystems` 规划开发和支持。
收集的信息不包括任何应用程序数据。
# 日志在哪里
如果 `IRIS` 成功发送数据,它会更新 `\mgr` 目录中的 `FeatureTracker.log` 文件。此文件包含已发送数据的 `JSON` 格式副本。每个条目具有以下形式:
```
"FT.":,
```
如果 `IRIS` 无法发送数据,它会再尝试几次。如果仍然不成功,它将停止尝试并在下一个定期安排的时间再次尝试。
`IRIS` 使用成功和不成功的尝试更新消息日志文件 `(messages.log)`。显示成功发送的条目具有以下形式:
```java
mm/dd/yy-hh:mm:ss 0 %SYS.Task.FeatureTracker transferred data to ats.intersystems.com
```
显示尝试发送失败的条目具有以下形式:
```java
mm/dd/yy-hh:mm:ss 1 %SYS.Task.FeatureTracker failed to transfer data
```
传输的数据包括编码的许可证密钥和主机名,以及实例 `GUID`。
# 收集了哪些统计数据
`Feature Tracker` 记录是否启用了以下软件功能:
- BitTrakCare
- BI User (Runtime) and BI Development
- C-Type License
- ExtremeNoUserLimit
- Healthshare, Healthshare Foundation
- IPNeutral
- Web License
`Feature Tracker` 还记录以下信息:
- 数据库(`DB`)加密:是否启用,以及快照时可用的已挂载加密数据库的数量
- 镜像:此实例是否连接到镜像,故障转移成员的数量,异步成员的数量和类型,以及每个异步成员所属的镜像集的数量
- 系统:授权、 `IRIS` 版本、操作系统、主机名、实例名称、实例 `ID` 和订单 `ID`
# 如何停用功能跟踪器
默认情况下启用功能跟踪器。可以停用它以防止它向 `InterSystems` 发送数据(尽管它仍会收集数据)。要停用功能跟踪器,请使用任务管理器,如下所示:
1. 在管理门户中,选择系统操作 > 任务管理器 > 任务计划。
2. 找到 `Feature Tracker` 行并选择 `Feature Tracker`。
3. 在显示的任务详细信息页面上,选择暂停。
4. 回答问题想在任务应该运行时重新安排任务吗?作为适当的。
5. 选择立即执行此操作以暂停任务。
如果升级 `IRIS`,升级会保留 `Feature Tracker` 的状态。如果任务是在升级之前安排的,它会保持预定状态,如果任务被挂起,它会保持挂起状态。
文章
Yubo Mao · 二月 3, 2023
Intersystems IRIS平台
队列监控组件
概述
随着医院信息化建设的逐步完善,医院业务接口越来越多,业务接口数据处理可能会由于多种因素(网络、消费方系统等)影响下,出现消息堆积过多甚至造成接口卡顿的情况,影响院内正常业务开展,因此对于业务接口组件队列的的监控愈发重要。
当前Intersystems IRIS平台内置的队列监控界面仅展示接口组件实时队列信息,对于对于医院实际应用场景所需要的队列数据信息提供较为局限。队列监控组件程序是基于Intersystems IRIS平台开发,可以对所有接口组件进行统一监控,并展示组件24h内组件队列信息,也可通过设置时间段查询组件历史队列数据,更好满足当前的院内应用需求。
关键应用:IRIS、Analytics
应用介绍
功能简介
通过配置该程序组件,对Intersystems IRIS平台中production运行组件的消息队列实现实时统一监控功能,并展示当前业务接口组件24h队列趋势情况,也可以通过指定时间范围展示历史队列趋势情况,可通过组件历史队列数据分析当前业务接口组件配置是否合理、是否需优化;通过历史队列数据趋势分析,对队列数量产生频次;对于由队列问题引起的事故可通过趋势图快速定位队列起始时间及业务事件ID,减少事故排查时间,极大地提高排查效率。
未来应用场景
智能优化组件运行池配置
队列监控告警
队列top5突出展示
组件队列问题频次统计
程序部署
在安装好的实例上新建命名空间和production,并导入此应用程序代码
为命名空间新建抽取队列信息的定时任务
访问路径查看队列信息 ****为命名空间默认应用程序名称
http://ip:port/****/Demo.QueueMonitoringPage.cls
应用使用
前提条件:由于程序是用来监控队列的,命名空间需要有已启用的production。如果没有,可以打开程序代码内置的production(Demo.Test.Production.TestProduction)并启用它。
将应用程序代码导入已有的命名空间内,通过Demo.QueueMonitor.Task.QueryQueue类新建定时任务,并设置每10分钟运行一次抽取队列信息。
访问url(http://ip:port/****/Demo.QueueMonitoringPage.cls )就可以看到队列趋势的统计情况
如果当前prodution没有队列信息,可通过运行代码 set ^QueueData=1,查看演示数据。不要忘了查看后执行set ^QueueData=0。使程序监控实时数据。
文章
Qiao Peng · 一月 10, 2021
InterSystems 2020线上峰会第二周拉开帷幕。首日专题会议涵盖了大量精彩内容,包括38场主题各异的专题会议。我认为有必要回顾一些重大的公告和谈话要点。
IntegratedML 在正式发布之后公布后global availability for IntegratedML, 本周的多个专题会议都将重点介绍IntegratedML。今天,Thomas Dyar与Baystate Health人口健康项目的业务分析师Joe Cofone进行了交流,讨论InterSystems和Baystate如何利用丰富的Health Insight数据和由IntegratedML构建的预测模型来建立“机器学习沙箱”进而构建应用程序。 如果你错过了本次内容,请查看 "AD000 针对医疗应用的Health Insight& 和IntegratedML展示 ". 明天还将有3场关于IntegratedML的单独会议: "CL006 IntegratedML入门", "DA006 如何使用H2O和IntegratedML", 和 "DA005 使用IntegratedML和DataRobot进行机器学习"!
自适应分析 上周我们还公布了InterSystems IRIS自适应分析, 通过对InterSystems IRIS和IRIS医疗版进行扩展,可为分析最终用户提供更大的灵活性、可扩展性以及更高的效率。 今天有两场会议提供了更多关于这方面的信息。第一场会议简单介绍了计划的方案及其潜在收益,第二场会议对该方案能够解决的问题类型进行了演示和讨论。 我们正在寻找早期采用者,如果您有兴趣,请联系Carmen Logue。明天的会议将涉及更多有关数据仓库 和 商业智能 的信息,敬请关注。
嵌入式Python 上周主题报告中的另一项重要信息是我们在将来会提供嵌入式的Python支持,我们已经对其进行了简要介绍。借助嵌入式Python,IRIS内核可以并排运行Python和ObjectScript,以高速访问Python中的数据,并在Python和ObjectScript之间进行了桥接。其实,我们已经获得了在Objectscript中使用嵌入式Python的经验,包括加载Python库、调用方法和函数等等。我们即将举办一场关于如何在SQL中使用嵌入式Python的分享,欢迎大家观看。如果您有兴趣帮助我们开发嵌入式Python,请通过python-interest@intersystems.com.与我们联系。
Kafka 今天我们还宣布了InterSystems将为具有IRIS互操作性的Apache Kafka提供内置支持。Kafka是世界上扩展性最强(最受欢迎)的流数据服务。企业可以将其应用在消息队列、更改数据捕获等所有事件中。该集成系统支持多种系统架构与IRIS进行互操作,无需使用额外代码实现。
明天的专题会议还将继续介绍Kafka集成相关的话题,因为最新版本的InterSystems API Manager(IAM)同样添加了Kafka插件,可将API流量发布到Kafka主题。我们已经在IAM中很好地演示了开发者门户的增强功能,可以帮助您更加轻松地构建和定制真正适合公司品牌的开发者门户。我们明天将详细介绍IAM。
VS Code - ObjectScript 哇,我们已经介绍了这么多公告了,但我们想说的远不止这些。在上周的主题峰会上,我们正式发布了1.0版本的 Intersystems ObjectScript for Visual Studio Code 插件,将ObjectScript开发引入了市场上最受欢迎的IDE(集成开发环境)平台。该版本可以在所有的操作系统上运行,并支持GitHub和Azure DevOps等客户端源代码控制系统。尤其值得注意的是,这是一项源自开发者论坛的开源项目,InterSystems将和我们的开发者们将持续合作开发该项目。
DEE004 会议对该项目进行了快速概述和简短演示。可以点击此处的演示区域 或在 YouTube上查看更多的演示内容。 In DEE007 在DEE007 会议中,我们的几位产品经理和VS Code – ObjectScript项目管理委员会的两名社区成员一起为大家带来了精彩的现场问答。本周将有更多关于VS Code的内容——请查看 "DEE006 用于ObjectScript的Visual Studio代码:选择IDE/源代码控件组合" 和 "DEE005 用于ObjectScript的Visual Studio代码:服务器端源代码控件". 今天开始的 实战实验室也不可错过。 我们还提供了IntegratedML实战实验室和其他热门话题,例如下面这个话题:
FHIR和API管理 FHIR一直是业界的热门话题,也是我们的合作伙伴比较感兴趣的话题,所以我们在许多专题会议中都涵盖了FHIR相关的主题。我们简要介绍了FHIR——FHIR是医疗保健可操作性的新标准,受到了美国政府的大力支持。美国政府通过ONC最终规则,对FHIR进行标准化并禁止信息封锁。英国等其他国家的政府也在授权FHIR参与所有新的数字健康计划。
IAM可妥善处理众多开发事务,例如安全性、日志记录、监视和控制对FHIR资源的访问等,从而简化FHIR应用程序的构建流程。用户可以通过开发门户轻松学习和测试FHIR查询。建议大家观看。
可以通过FHIR搜索查询患者、观察、诊断报告等FHIR资源。语法基于REST,但是必须为每个FHIR资源查找查询参数。使用修饰符和连接(例如 _include和_revinclude)的高级查询有时会出现令人困惑的语法,不过我们构建了一个工具来简化这些查询,从而提高生产效率并减轻初学者的负担。
NLP 在线上峰会的推动下,我们还发布了开源NLP(自然语言处理)库iKnow的1.0版本,现已完全以Python包的形式提供。Aohan和Benjamin在DA010专题会议中对这一激动人心的版本进行了概述及使用介绍,相关演示可在 演示区.查看。
演示区 您可以在线上峰会注册中心主区打开The 演示区 ,并按照自己的节奏观看超过25个的演示。
现场问答 第一天结束时我们进行了现场问答,明后两天也会有现场问答环节。大家可以借此机会,针对专题会议中或上周主题演讲中遇到到的任何问题向我们提问。更多信息请参见: https://community.intersystems.com/post/ask-intersystems-product-managers-live-qa-session-vsummit20
这绝对是忙碌的一天!接下来还有两天的专题会议。如果您还没有注册,现在还为时不晚,您可以点击这里 免费注册。
那么,您今天关注的重点是什么呢?请在下方的评论中告诉我们。
祝好!
Jeff
公告
Claire Zheng · 三月 1, 2022
Hi开发者们,
是时候公布 InterSystems开发者Python竞赛的优胜者了!准备好了吗!
这些开发者和他们的应用程序赢得了雷鸣般的掌声:
🏆 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出:
🥇 第一名,奖金 $4,000 获奖项目 django-iris ,开发者 @Dmitry.Maslennikov
🥈 第二名,奖金 $2,000 获奖项目 appmsw-sql2xlsx ,开发者 @MikhailenkoSergey
🥉 第三名,奖金 $1,000 获奖项目 iris-python-apps ,开发者 @Muhammad.Waseem
以下为更多优胜者:
🏅 奖金$100 ,获奖项目 iris-python-dashboards ,开发者@Evgeniy.Potapov
🏅 奖金$100 ,获奖项目 GlobalToJSON-ePython-pure ,开发者 @Robert.Cemper1003
🏅 奖金$100 ,获奖项目 blockchain - [ IRIS python ] ,开发者 @davimassaru.teixeiramuta
🏅 奖金$100 ,获奖项目 AI Image Object Detector ,开发者@Yuri.Gomes
🏅 奖金$100 ,获奖项目GlobalToJSON-embeddedPython ,开发者@Robert.Cemper1003
🏅 奖金$100 ,获奖项目 IRIS-Database-and-Machine-Learning-Based-Approaches-for-Prediction-of-Spontaneous-Intracerebral-Hemo ,开发者 @Fatian.Wu
🏅 奖金$100 ,获奖项目 DIMSE Iris Dicom Fhir Service ,开发者@Ron.Sweeney1582
🏅 奖金$100 ,获奖项目 Django-Interop ,开发者 @Fernando.VianaMaia
🏅 奖金$100 ,获奖项目 IRIS Text2Audio ,开发者 @Yuri.Gomes
🏆 社区提名奖(Community Nomination)- 获得总投票数最多的应用:
🥇 第一名,奖金 $1,000 ,获奖项目 django-iris ,开发者 @Dmitry.Maslennikov
🥈 第二名,奖金 $625 ,获奖项目 appmsw-sql2xlsx ,开发者 @MikhailenkoSergey
🥉 第三名,奖金 $625 ,获奖项目 IRIS-Database-and-Machine-Learning-Based-Approaches-for-Prediction-of-Spontaneous-Intracerebral-Hemo ,开发者 @Fatian.Wu
恭喜所有优胜者!
感谢大家对本次比赛的关注和付出!
文章
Claire Zheng · 五月 21, 2023
视频文字版。点击查看视频。
CHIMA主任委员:王才有
老卢,你好。疫情三年我们没见,中国发生了很大的变化,你回来会感觉到。特别是在信息化和数字化方面,确实中国的这三年可以说是政策和制度设计上都有了很大的一些调整和进步,特别是去年政府发布了关于数据基本制度的设计方案,我们管它叫“数据二十条”。
这个制度呢,实际上是避开了数据的所有权的问题,如果说我们在数据的所有权和使用权上长期去争论的话,它的价值就很难发挥。所以说中国这次首次提出了一个“三权”,数据“三权分立”的新的战略设计,不再强调数据是谁的,我们强调数据的控制权——就是数据现在在谁手里;数据的开发权——他这些数据可以用来干什么;数据的受益权——他把这数据再分享给别人,再创造二次价值,或者再创造三次价值,这样数据的资源就得到充分的利用。
所以说一方面要对这种数据基本制度的建立,为今后数据资源市场化是开了一道新的大门。中国是一个数据资源的大国,那这些资源怎么利用好,怎么用在生产,怎么用在服务,怎么用在改善我们医院的管理,给我们患者服务,给这个居民服务,这项我想是一个很大的一个制度上的创新。
当然这个制度的创新也给我们提出了很多新的要求:数据安全的要求,个人信息保护的要求,数据标准的要求……
我国基础制度的形成,将促进数据合规高效流通使用。今后,医疗健康数据将在更大空间交换和共享,这就需要新一代标准体系了,例如FHIR。
我想这方面你也许知道了,在这方面有什么体会呢?咱们可以做做交流。
InterSystems 亚太区总经理卢侠亮(Luciano Brustia):
好的,谢谢。
您所说的这些让我感到很兴奋,谢谢您的发言。因为我同意,当我们在谈论标准、谈论专业术语的时候,每个人都会立即想到FHIR标准。在这方面,InterSystems在全球绝对是领先的。
你可能知道,在过去的这些年里,我们做了许多工作,我们的IRIS数据平台,在全球范围内得到了大范围部署,同时,我们在中国持续地进行本地化创新,构建了中国版的互联互通平台(内嵌FHIR资源仓库),我们称之为“互联互通套件”,用来实现基于FHIR标准的互联互通 。
当谈到专业术语(统一语义)是我们的目标时,FHIR绝对可以作为一个最佳标准选择,我们已经帮助150多家医院通过了国内互联互通标准化成熟度等级评测,其中有近30家医院通过了最高级别的认证(五级乙等),值此(“数据二十条”颁布的)重要时机,我们肯定还会继续加大投入,在这些方面(打通互联互通和FHIR两大生态)开展更多活动。我们现在已经发布了互联互通套件的第三版,目前正在计划进行更多升级。
CHIMA主任委员王才有:
卢总,您刚才讲的系联在中国的一些做法,我很认可。因为系联公司(InterSystems)在中国已经多年,特别是在推进互联互通,推进信息标准的应用方面发挥了很重要的作用。
对这个FHIR来讲,它是针对的移动互联网出现之后,这信息在更大的范围里面交换共享和随时的调用的时候,随机调用的时候,它只有利用这个标准,它才可能实现信息的动态的、语义互操作的这种交换。
而HL7 2.X它面对的是语法层面的交换,语义层面的这个能力呢,它是比较弱的。所以说如果要做得更好,信息在互联网和移动互联网时代,特别是数字,我们说的数字时代,你在更大的空间里面交换和共享信息的时候,同时保持信息理解上的一致性,那我们只有选用FHIR才可能实现得会更好一些。这一方面是技术上的进步,一方面是应用上的需求。
那当然这种技术上的提供和应用上的需求是必须要依赖于工具,依赖于产品。那系联公司这方面的平台支撑和工具支撑上,我想对于促进FHIR在中国的应用还是发挥了很好的作用的。
系联过去确实做得不错,但是我们看到了FHIR的应用还不是特别地普及,原因是多方面的,可能也有一些新的制约和一些新的挑战。我想系联公司在这方面也会进一步地做出努力,推进FHIR在中国的应用。
这方面,卢总下一步你有什么打算呢?
InterSystems 亚太区总经理卢侠亮(Luciano Brustia):
是的,当然有。我们已经将FHIR作为我们所有开发部署的核心,包括我们所有医疗平台。首先,我很高兴在今年CHIMA大会上(HL7中国)将发布《FHIR白皮书》 ,明确界定HL7、CDA和FHIR之间的区别。因为医院采用CDA标准,他们拥有一个庞大的临床数据中心,但我们还需要一个额外的步骤来实现FHIR。
为了让大家更容易理解,我经常举这样一个例子:我总是把FHIR的重要性比作普通话的重要性,因为普通话可以作为人们互相交流的一种共同语言。我也总是喜欢这样说,我看到了一张图片,上面是一匹带着黑色条纹的白马,大家都明白它是什么。你也可以说,你看到了一张图片,上面是一匹带着白色条纹的黑马,大家也都明白它是什么。FHIR不会告诉你这是一匹白马还是一匹黑马,而是会说这是一匹“斑马”——只用一个词,就确切指出了图片内容的唯一标识,以及我们在谈论的是什么。这是深层次的主要区别。
我很高兴《FHIR白皮书》即将在CHIMA上发布,这将有助于理解这一点。InterSystems作为FHIR标准在全球范围的推广者,已经在美国和亚太地区拥有众多成功案例,并且帮助越来越多的国家部署并遵循这种标准,为当地居民提供更多价值,我们很高兴能在中国做同样的事情。
CHIMA主任委员王才有:
刚才没想到您作为一个总裁,对技术细节了解得这么清楚。确实我们要把技术细节搞清楚,把关键的概念搞清楚,这样才能使我们的行动走到正确的轨道上来。对FHIR,它到底是适用于什么场景,什么场景下应该用哪些标准解决什么问题,这我觉得是一个非常重要的一个考虑。任何一个企业、任何一个用户都应该考虑你选用标准的适宜性,我们不能说哪个标准好,哪个标准不好。所以说我们CHIMA,刚才老卢也提到了,我们要在下一次CHIMA大会上发一个白皮书,而这个白皮书实际上就是我们对这些标准的基本概念,它的用途,在什么场景下应用,我们要做一个比较清晰的这种引导,让大家在选择标准和使用标准上,使标准能真正解决自己互联互通上的问题。
那我们CHIMA跟系联一样,也是在推进标准的应用和标准的采纳,实现我们互联互通的目标。前年,我们也组织了专家,在中国的医院编了一个中国医院里边的关于FHIR的应用的一些案例的分享,我们是请的北京友谊医院的专家来共同承担这个课题,也非常感谢系联的专家对这个项目给予了很好的支持。
卢总,我们系联今后在这个信息互联互通和促进,我们叫数字时代的健康场景下,我们公司还有什么好的想法和建议?
InterSystems 亚太区总经理卢侠亮(Luciano Brustia):谢谢。我认为此时来到中国,这是一个非常令人兴奋的时机,因为我们能够带来许多在世界各地获得的经验。我们在日本群马大学建立了日本首个FHIR数据库;我们正在与印度尼西亚的一家超大型医疗集团合作,该医疗集团拥有40多家医院,(借助InterSystems技术)采用FHIR标准,将他们的数据汇聚起来,并在此基础上进行分析。毫无疑问,InterSystems一直都在采用、推广FHIR标准,在FHIR成为互操作性标准之前就是如此,而且我们将带来更多的创新,以确保中国始终与国际最前沿的标准接轨,因为最终真正重要的是,我们这样做是为了确保所有中国居民的利益,而且我认为这对像你我这样从事IT行业,特别是从事医疗IT领域的从业者来说,才是最重要的。我们不仅仅是在做生意,更多的是在提供价值。在人口不断增长的情况下助力全民健康水平提升,中国居民的寿命越来越长,这是一件非常好的事情。但也带来了很多问题,特别是人口老龄化的问题,建设高质量的数据库,采用先进的标准,可以有效地预防更多的慢性疾病发生,我认为这是非常有价值的,也让我们所做的事情更有意义,以上是我的看法,非常感谢。CHIMA主任委员王才有:非常高兴看您为中国医疗信息化做出的贡献。系联公司把国际上的一些标准引用到中国,我们也看到中国自身医疗信息化发展也是非常地快,特别是中国具有一个独特的优势——就是数据资源丰富、应用场景非常之多,所以中国的经验呢,我想也在逐渐地积累和形成。所以说我认为系联公司将来的更重要的任务,把中国的经验引向世界,为全球的人民的健康共同做出贡献。InterSystems 亚太区总经理卢侠亮(Luciano Brustia):是的,当然。我的意思是,就像我一直在说的,我很荣幸来到中国,这已经是我在中国的第15个年头了,而系联来到中国已经不止25年了,我们打算再呆上另一个20年、25年……如果我还能再活二十年,(我会)继续留在这里,继续为各位和所有聪明睿智的中国居民服务。毫无疑问,InterSystems一直致力于把我们的先进技术带到中国,助力中国本土企业做大做强,当然,我们也会将在中国获得的经验,作为一种资源共享给世界其他地方。所以我真的很高兴再次回到中国,我认为这是最好的时候,非常感谢大家!
公告
Qiao Peng · 三月 3, 2021
InterSystems API Manager (IAM) 版本1.5已正式发布。
IAM容器,包括从原有IAM版本升级的所有相关工件, 现在可以在 WRC 软件发布网址 组件区下载。
该版本的小版本号是 IAM 1.5.0.9-4。
InterSystems API Manager 1.5 使管理API通讯、与你的环境集成、加载API用户更加容易。它包含很多新特性,包括:
改进的用户体验
新的开发者门户工具
对Kafka connectivity的支持
这个版本基于Kong Enterprise version 1.5.0.9。之前的IAM版本包括一个贴牌版本的Kong Enterprise, 在本版本中的Kong Enterprise不再贴牌。 这个变化让我们可以更快的节奏带给您新的版本,并更有效地利用Kong提供的文档和其它资源。
请在 这里 查看IAM 1.5 的文档。这个文档仅说明IAM特殊的元素。产品中的文档链接直接打开Kong Enterprise的文档。
从IAM 0.34-1 升级需要通过3个中间版本累积升级,在 文档中有详细的说明。
IAM 仅以OCI (Open Container Initiative) 或 Docker 容器格式发放。容器镜像可运行在Linux x86-64 和 Linux ARM64的OCI 兼容的运行引擎上, 详情请参考 支持的平台。
Best Regards,
Stefan 欢迎开发者们多关注!
公告
Claire Zheng · 三月 18, 2021
中文社区的开发者们,大家好!
我们调整了开发者社区的积分规则,将其调整为双倍积分!自2021年3月18日起,如果您在社区贡献了文章或问题,将获得:
在英文社区获得200积分在西语、葡语、日语和中文社区将获得400积分*
针对译文帖子,将获得100积分
另外,你还可以从特定文章/评论中获得更多积分,详见下表:
第1篇文章
第5篇文章
第10篇文章
第25篇文章
第50篇文章
1,500 分
7,500 分
15,000 分
40,000 分
75,000分
第1个问题
第5个问题
第10个问题
第25个问题
第50个问题
500 分
2,000 分
5,000 分
15,000 分
30,000 分
而且你将可以获得奖励徽章!在 这篇文章里, 你可以看到对应等级和徽章(把鼠标放在徽章上查看如何获得)。
*我们将在一段时间内提升西语/葡语/中文/日语社区的积分
更多关于Global Masters倡导中心的信息:
如何加入InterSystems Global Masters倡导中心?
Global Masters徽章:规则解读
如果您还没有加入InterSystems Global Masters倡导中心 , 现在就加入吧!
如果您有任何疑问,欢迎跟帖回复!
问题
Liang Jianhui · 六月 13, 2022
在找 HealthShare Patient Index 的相关视频和资料,求分享,谢谢 https://learning.intersystems.com/course/view.php?id=632, 更多视频欢迎在learning.intersystems.com 上搜索即可。谢谢! Hi @Liang.Jianhui , 可以参考这个页面的内容:https://www.intersystems.cn/interoperability-platform/patient-index 社区里也有很多:https://community.intersystems.com/smartsearch?search=patient+index,需要哪片文章可以告诉我们,我们可以帮忙翻译。 Only members of audience '1.0 HealthShare Content Access' can self-enrol.
这种情况是我没有权限吗?需要怎么做才能有权限? 你好!您是在点击这个链接:https://learning.intersystems.com/course/view.php?id=632时出现的问题吗?你需要先试着注册一下才能获取权限。如果还是不行,可以告诉我需要查看的资料,我看怎么分享您。谢谢! 你好,我是点击链接之后进入的,也进行了注册登录。 注册登录之后,仍然没有权限。Only members of audience '1.0 HealthShare Content Access' can self-enrol. 还是出现这个提示。我想了解HSPI 在interSystems系统中是如何应用的,以及worklist是怎么生成链接的。谢谢。 您提到的这个部分是需要WRC权限才可以观看的,WRC是我们的全球响应中心服务账户,您可以参考如下信息获取WRC支持:
InterSystems全球响应中心(WRC)联络信息
电话: +86 400-601-9890
邮件: support@intersystems.com
网站: https://wrc.intersystems.cn/
https://wrc.intersystems.com