搜索​​​​

清除过滤器
公告
Michael Lei · 二月 28, 2023

医疗数据去标识化工具 抢先体验计划

我们很高兴地宣布我们的抢先体验计划的最新成员 - Health Data De-ID工具。 该工具将根据 *HIPAA 安全港* 对结构化临床数据进行去标识化处理,并允许在需要时进行重新标识。它使用 InterSystems 的 *SDA* 规范格式,该格式用于我们从一种格式到另一种格式的所有标准转换,例如 *HL7* 到 *CDA*、*HL7* 到 *FHIR* 等。虽然该工具使用 XSLT 转换来提高性能原因,它提供了辅助方法,您不需要成为 XSLT 专家的情况下更轻松地调整开箱即用的去标识化规则。 Health Data De-ID 适用于任何 InterSystems 产品,从 InterSystems IRIS for Health 到 Health Connect 再到 Unified Care Record。 您可以在此处加入抢先体验计划 - [如何注册抢先体验计划 (EAP)]?我们需要您的反馈,因此请在您完成整个过程或遇到任何问题时与我们联系。
文章
Claire Zheng · 五月 18, 2023

【视频】对话:“数据二十条”与FHIR标准

“数据二十条”体现了怎样的制度创新和政策智慧?FHIR将如何发挥作用?来看InterSystems亚太区总经理老卢(Luciano Brustia)与CHIMA主任委员王才有的精彩探讨!
公告
Claire Zheng · 七月 4, 2022

2022年全球峰会主题演讲线上观看!

大家好! 一周前,在西雅图举办的InterSystems 2022年全球峰会刚刚结束,但对于那些错过会议现场的人,或者由于种种原因无法亲自参加会议的人(或者只是希望重新回忆并再次聆听会议的人)来说,线上主题演讲刚刚开始! 话不多说,请查收全球峰会上来自社区的问候: 欢迎通过YouTube播放列表观看2022年全球峰会三天所有主题演讲: ➡️ Global Summit 2022 on InterSystems Developers YouTube 明年,来佛罗里达州好莱坞加入我们吧!🤩 详情在这里.
文章
Claire Zheng · 三月 16, 2022

【极客聊吧】如何为用户提供更好的开发体验(上)

谈到开发体验,什么最重要?如何为客户提供更好的开发体验?InterSystems IRIS的最新版本有哪些新特性极大优化了用户的开发体验?这是本月“极客聊吧”聚焦的话题,我们将通过上、下两期视频进行探讨。在本期视频中,InterSystems中国销售工程师吕正之、马浩和WRC产品支持专家杨乐乐针对以下两点进行了分享:(1)开发语言的多样性与对FHIR的支持;(2)探讨开发平台的前瞻性:对Smart Data Fabric架构的支持。
公告
Michael Lei · 三月 25, 2022

新的在线 Kubernetes 练习!

大家好! 对于那些参加了2021年虚拟峰会的体验实验室的人来说,你可能还记得其中一个实验室会议是围绕Kubernetes进行的。我们现在已经将该实验室转换为完全线上按需使用。你可以启动一个小型的虚拟机集群,并按照练习来管理你的Kubernetes集群,将InterSystems IRIS容器部署到其中,并观察它在摧毁一个吊舱时的自我修复性质。 如果你有兴趣,这是一个很好的Kubernetes介绍。请看这里: 用InterSystems IRIS 和 Kubernetes实现高可用
文章
Qiao Peng · 四月 7, 2021

InterSystems IRIS医疗行业版的FHIR服务器上测试和开发SMART on FHIR应用

如果看了前一篇InterSystems IRIS医疗行业版创建FHIR服务器,应该您已经搭建好了FHIR服务器和FHIR资源仓库。除了使用FHIR REST API来操作这个FHIR服务器,您还可以更直观地看看它的价值 - 使用SMART on FHIR应用。这次,基于上次建好的FHIR服务器,我们用10分钟把一个SMART on FHIR运行起来。 SMART on FHIR背景 SMART是Substitutable Medical Applications and Reusable Technology的缩写,它的目标是创建可以被替换、可以复用的医疗应用,简单说就是希望医疗应用可以像我们的手机应用一样:不喜欢当前的天气应用,那么就换一个。SMART,这个起于2011年的哈佛和波士顿儿童医院的合作项目,在2013年注意到并快速采用了FHIR,成就了今天的SMART on FHIR。 不再需要处理数据持久化、数据模型标准化等问题,SMART on FHIR应用相当的轻量级,因此也容易快速开发。它主要借助FHIR API和OAuth认证,连接到FHIR服务器上操作数据。SMART on FHIR应用都是Web应用,它可以独立运行,也可以嵌入到任何现有应用中,例如TrakCare(InterSystems的EMR产品)和HealthShare Personal Community (InterSystems的患者门户),快速丰富和提升这些应用的价值。 现在SMART on FHIR应用商店里已经有很多针对医生或者患者的应用可供免费下载和测试,初步实现了SMART目标。不论您是想借助SMART on FHIR理解FHIR、还是想开发SMART应用、亦或直接测试和使用应用商店里的现成应用,都希望这篇文章对您有所帮助。 测试SMART on FHIR应用 完整的SMART on FHIR应用涉及到OAuth认证,我们先从一个简单的、无需认证的环境开始,快速了解一下SMART on FHIR应用。在下一篇中,我们将在InterSystems IRIS搭建完整的支持环境:不仅是FHIR服务器和FHIR资源仓库,还包括OAuth认证服务器。 1. 下载SMART on FHIR应用 我们先下载一个SMART on FHIR应用,SMART on FHIR应用商店里有很多不错的应用,我们下载儿童生长发育分析的应用,虽然简单,但它很有代表性,也是波士顿儿童医院的杰作。它支持DSTU2和STU3的FHIR版本,不过因为它用的FHIR资源类型不多,因此实际上也支持FHIR R4。 将代码下载到本地后,解压并保存在您上一篇创建的InterSystems IRIS FHIR服务器上,建议您创建一个名为SMART的目录,存放解压后的SMART 代码。 之后,请记得打开命令行,在这个目录下执行: npm install 它会下载需要的一系列文件到node_modules子目录下。 执行完这一步,您已经有一个完整的SMART on FHIR应用了。 2. 修改SMART on FHIR 要连接到我们上一篇创建的FHIR服务器,需要对应用的代码做一点点修改。需要修改的是launch.html文件,它负责OAuth认证并重定向到index.html。 找到您的launch.html文件,用任何文本编辑工具打开它: <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>Growth Chart SMART Application</title> <script src="node_modules/fhirclient/build/fhir-client.js"></script> <!--<script> FHIR.oauth2.authorize({ "client_id": "growth_chart", "scope": "patient/Observation.read patient/Patient.read offline_access", // "client_id": "944d96a0-4caf-4a96-813e-bc38aadb1169" // HSPC // "client_id": "5570f8be-6caf-4915-ae15-69545ab38e68" // Cerner }); </script>--> <script> FHIR.oauth2.authorize({ "client_id": "growth_chart", "scope": "patient/*.read", "fhirServiceUrl": "http://localhost:52776/csp/healthshare/fhirserver/fhir/r4", "patientId": 95, "redirectUri":"index.html" }); </script> </head> <body>Loading...</body> </html> 找到FHIR.oauth2.authorize,我把原来的代码注释起来,用于比对。这里我们做了这些修改: 1. 增加fhirServiceUrl,用于指向FHIR服务器端点。增加它的原因是我们想在这篇文章中,跳过OAuth认证。请修改这个URL指向您的FHIR服务器端点。 2. 增加patientId,用于指定我们想打开的FHIR患者资源。增加它的原因是,我们不是通过其它应用打开这个SMART on FHIR,没有选中的患者上下文,因此我们在这里指定一个患者资源。请找一个您的FHIR资源仓库中,有身高、体重等信息的儿童患者资源,用它的FHIR资源id替换。上一篇中有介绍怎么使用API查找这样的患者。 3. 增加redirectUri,用于重定向页面。这里直接重定向到index.html。 如果您是开发者,FHIR.oauth2.authorize的API的文档在此,供参考。 3. 部署SMART on FHIR应用 将这个SMART on FHIR应用部署到Web服务器上。如果您的环境上没有安装Web服务器,可以使用InterSystems IRIS的私有Apache进行测试。 InterSystems IRIS安装时,会自动安装一个私有的Apache,用于提供管理门户的Web应用。这个私有Apache因为性能原因,不应作为提供外部服务的Web服务器,不过用于我们这次的测试是没有问题的。 在InterSystems IRIS的私有Apache上部署SMART on FHIR应用非常简单: 3.1 创建一个Web应用 打开InterSystems IRIS管理门户网页(http://<IRIS服务器地址>:<Web服务端口>/csp/sys/UtilHome.csp,例如http://localhost:52776/csp/sys/UtilHome.csp),然后在“系统管理>安全>应用程序>Web应用程序"中,点击"新建Web应用程序": 在名称中创建一个新的Web应用,例如/csp/gc; 在命名空间中,选则上一篇创建的FHIRSERVER,或者任何其它的命名空间,如USER; 选中启用“CSP/ZEN”; “CSP文件设置>物理路径”中,选择您下载并解压的SMART on FHIR应用的路径。 其它默认值无需更改,点击保存按钮。 现在您已经部署成功了SMART on FHIR。 3.2 测试SMART on FHIR 您可以直接打开浏览器,输入网址http://<IRIS服务器地址>:<Web服务端口>/csp/gc/launch.html(用您的环境的IRIS服务器IP和端口号)。应该看到和下面类似的页面,它已经自动重定向到了index.html: 这是一个非常直观的FHIR数据可视化的应用,显示了儿童的生长发育曲线。您还可以下载并部署其它SMART on FHIR应用,用于学习或测试。 还有没有其他类似https://apps.smarthealthit.org/apps/ 这样的应用市场?可以给个列表? 目前这是最主要的SMART on FHIR应用市场。但不少厂商都推出了自己的SMART on FHIR应用,放在自己的官网里,有些是免费的,更多是收费的。
文章
Michael Lei · 二月 14, 2022

成功案例分享--Cognetivity Neurosciences利用InterSystems的互操作性技术解决日益严重的痴呆症问题

痴呆症是一个重大的全球性问题,困扰着5400万人,到2050年这个数字将上升到1.3亿。由英国剑桥大学的学者创立的Cognetivity Neurosciences公司设计了一个尖端的解决方案,以帮助缓解全球痴呆症的流行。 根植于先进神经科学的简单解决方案 在出现临床症状之前的早期检测,为专家干预和改变生活方式打开了大门,可以减缓痴呆症的发展,提高生活质量。生活方式的改变有可能将症状的出现推迟五年,进而将普通人群中的痴呆症发病率降低50%。 Cognetivity Neurosciences的综合认知评估测试(ICA)是基于人类对动物刺激的强烈反应,以及健康的大脑在不到200毫秒内处理动物图像的能力。 ICA将基于云的人工智能和神经科学的进展结合起来,进行快速的动物/非动物视觉分类测试,目的是在记忆症状出现之前发现疾病的迹象。它涉及在阿尔茨海默症的前症状阶段受到影响的大脑区域,并检测出信息处理速度的细微损伤。 ICA基于云的敏捷性使临床医生和用户能够在熟悉的硬件上进行ICA测试,如iPad和智能手机,并在任何有互联网连接的地方进行。 Cognetivity Neurosciences正在通过一个先进的、可扩展的解决方案,利用神经科学的进步、人工智能和InterSystems IRIS for Health云数据管理平台的力量,重新发明痴呆症检测。 核心需求是数据的互操作性 任何新的诊断技术的成功都在很大程度上受其与现有工作流程和信息系统的整合程度的影响。对于像ICA平台这样具有巨大全球潜力的解决方案,要想在临床上有效和可扩展,它必须与已有的临床数据整合。在大多数国家,这需要完全遵守强制性的医疗数据标准,如HL7® FHIR®和HL7 V2,这些标准规定了互操作性。 Cognetivity Neurosciences选择InterSystems作为其技术合作伙伴,以实现这一重要的数据管理和互操作性。InterSystems IRIS for Health™数据平台非常适合这一高要求的角色,它是专门为从医疗保健数据中提取洞察力而设计的。它完全云中立,支持在所有主要的公有云、多云和混合云环境中部署。InterSystems IRIS for Health还使该团队能够减少在创建平台时使用的不同技术的数量。结果是--关键信息在正确的时间流向正确的人,这是高效采用和有效决策所需的关键因素。 "Cognetivity Neurosciences的首席技术官Jonathan El-Sharkawy说:"InterSystems作为我们的互操作性和集成合作伙伴,选择是自然的。"从一开始,我们就对引进他们帮助我们发展的决定充满信心。InterSystems IRIS for Health的功能非常强大,经过验证并被英国国家卫生服务系统(NHS)完全接受,更重要的是,InterSystems团队在NHS环境中拥有丰富的经验。" InterSystems IRIS for Health完全云中立,支持在公有云、多云和混合云环境中部署。 一个完全集成的、用户友好的、能发挥作用的测试 InterSystems IRIS for Health使Cognetivity Neurosciences能够与消费者设备和医疗级设备有效连接,并让患者使用现有的iPad和智能手机等硬件进行ICA测试。 随着Cognetivity Neurosciences公司向英国以外的地区扩展,与电子病历(EHR)的高度整合正在推动其技术的广泛采用。该公司还希望扩展到多发性硬化症等疾病的早期检测。 InterSystems IRIS for Health为Cognetivity Neurosciences提供了其尖端技术所需的互操作性和灵活性,以帮助改变整个NHS的痴呆症护理路径,并满足全球对远程测试、诊断和监测工具的广泛需求。 "El-Sharkawy说:"InterSystems IRIS for Health独特的数据管理和整合能力对我们的工作至关重要。"对我们来说,InterSystems IRIS for Health已经成功地与这么多医疗信息系统整合,包括最大的EHR供应商的系统,这对我们来说意义重大。随着我们的平台无缝协作,现在我们可以使用的国际应用程序的范围非常大。" 随着我们的平台无缝连接,我们现在可以使用的国际应用范围很广。 临床实施进展顺利,有可能使数百万人受益 ICA测试是早期痴呆症检测的一个重大进步,使其更快、更便宜、更可靠。它的简单性消除了语言、文化或教育障碍,使该解决方案几乎在世界任何地方都能得到采用。该平台得到了英国药品和保健品监管局的批准,并已在NHS精神健康专业机构North Staffordshire Combined Healthcare NHS Trust部署。它还在英国桑德兰的初级保健中使用。 ICA平台也被英国政府的G-Cloud所接受,并被选入美国德克萨斯医学中心秋季2020创新项目的最后一批小组。 其创新的力量,以及InterSystems IRIS for Health先进的云数据管理和整合能力,使Cognetivity Neurosciences能够大幅扩展,帮助全球数百万人。 "Cognetivity Neurosciences首席执行官Sina Habibi博士说:"我们与InterSystems的合作大有裨益,帮助我们实现了我们的愿景。"和我们一样,InterSystems的员工也热衷于利用技术对病人护理进行重大的、有影响力的改进。InterSystems IRIS for Health为我们提供了我们的尖端技术所需的互操作性和敏捷性,以帮助改变NHS和国际上的痴呆症护理路径。我们可以满足对更快、更准确和更有成本效益的诊断的加速需求。" 关于Cognetivity Neurosciences(https://cognetivity.com/about/) Cognetivity Neurosciences是一家成立于英国剑桥大学的医疗技术公司,它开发了一种由人工智能驱动的五分钟认知功能测试。其综合认知评估(ICA)是一种易于使用、敏感、可靠和可扩展的测试,代表了监测大脑健康的重大进展。ICA通过触摸屏设备和网络提供,为测量认知能力提供了一个独特的端到端解决方案。它可以早期发现神经系统问题,为病人带来更好的结果,并降低医疗系统的成本。Cognetivity正在美国、欧洲、中东和其他地区的医疗和企业市场上将ICA商业化。预计到2026年,全球认知评估和训练的市场规模将达到114亿美元,以26.6%的年均增长率增长,美国、欧盟和中东地区有超过3.5亿的55岁以上人口,Cognetivity的独特技术有望改变测量大脑健康的方式,并服务数百万以上的人群。
文章
Michael Lei · 十二月 16, 2021

翻译文章--InterSystems IRIS 2021.2+ Python 代码样例 (Embedded嵌入式Python, Native 原生APIs 和 Notebooks)

# Iris-python-template 包含各种Python代码的项目模版,可用于InterSystems IRIS 社区容器版Community Edition with container。 特性 : * Notebooks 记事本 * Embedded Python 内核 * ObjectScript 内核 * Vanilla Python 内核 * Embedded嵌入式 Python * Code example代码样例 * Flask demo * IRIS Python Native 原生APIs * Code example ![Diagram](https://user-images.githubusercontent.com/47849411/145866257-cc88109b-db0b-4fed-8886-fddb4c31947d.png) # 2. 目录 - [1. iris-python-template模版](#1-iris-python-template) - [2. 目录](#2-table-of-contents) - [3. 安装](#3-installation) - [3.1. Docker](#31-docker) - [4. 开始编程](#4-how-to-start-coding) - [4.1. 预设条件Prerequisites](#41-prerequisites) - [4.1.1. 使用 ObjectScript编程](#411-start-coding-in-objectscript) - [4.1.2. 使用嵌入式Embedded Python](#412-start-coding-with-embedded-python) - [4.1.3. 使用记事本Notebooks编程](#413-start-coding-with-notebooks) - [5. Repository的内容](#5-whats-inside-the-repository) - [5.1. Dockerfile](#51-dockerfile) - [5.2. .vscode/settings.json](#52-vscodesettingsjson) - [5.3. .vscode/launch.json](#53-vscodelaunchjson) - [5.4. .vscode/extensions.json](#54-vscodeextensionsjson) - [5.5. src folder](#55-src-folder) - [5.5.1. src/ObjectScript](#551-srcobjectscript) - [5.5.1.1. src/ObjectScript/Embedded/Python.cls](#5511-srcobjectscriptembeddedpythoncls) - [5.5.1.2. src/ObjectScript/Gateway/Python.cls](#5512-srcobjectscriptgatewaypythoncls) - [5.5.2. src/Python](#552-srcpython) - [5.5.2.1. src/Python/embedded/demo.cls](#5521-srcpythonembeddeddemocls) - [5.5.2.2. src/Python/native/demo.cls](#5522-srcpythonnativedemocls) - [5.5.2.3. src/Python/flask](#5523-srcpythonflask) - [5.5.2.3.1. How it works](#55231-how-it-works) - [5.5.2.3.2. Launching the flask server](#55232-launching-the-flask-server) - [5.5.3. src/Notebooks](#553-srcnotebooks) - [5.5.3.1. src/Notebooks/HelloWorldEmbedded.ipynb](#5531-srcnotebookshelloworldembeddedipynb) - [5.5.3.2. src/Notebooks/IrisNative.ipynb](#5532-srcnotebooksirisnativeipynb) - [5.5.3.3. src/Notebooks/ObjectScript.ipynb](#5533-srcnotebooksobjectscriptipynb) # 3. 安装 ## 3.1. Docker 这个 repo已经docker化,你可以clone/git 把repo拉到任何本地目录下 ``` git clone https://github.com/grongierisc/iris-python-template.git ``` 打开该目录下的终端并执行: ``` docker-compose up -d ``` 并为记事本Notebooks打开 http://localhost:8888/tree 或, 在VSCode打开克隆的目录, 启动docker-compose 并通过VSCode 菜单打开URL: # 4.如何开始编程 ## 4.1. 前提 确保安装好 [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) and [Docker desktop](https://www.docker.com/products/docker-desktop) 这个repository 已经可以开始在带ObjectiveScript 插件的VSCode中编写代码. 安装 [VSCode](https://code.visualstudio.com/), [Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) and [ObjectScript](https://marketplace.visualstudio.com/items?itemName=daimor.vscode-objectscript) 插件并打开文件夹. ### 4.1.1. 用ObjectScript编程 打开 /src/ObjectScript/Embedded/Python.cls 类并开始尝试变更 - 它会在运行IRIS docker container容器中被编译. ### 4.1.2. 用嵌入式Embedded Python编程 最简单的方法是在容器中运行VsCode. 要连上一个 Docker container, 要么从命令板中选择 **Remote-Containers: Attach to Running Container...** (`kbstyle(F1)`) 或者使用在活动Activity条中选择 **Remote Explorer** 并从 **Containers** 视图中选择 **Attach to Container**动作在你希望连接的容器上. ![Containers Explorer screenshot](https://github.com/microsoft/vscode-docs/raw/main/docs/remote/images/containers/containers-attach.png) 然后配置你的python 解析器 /usr/irissys/bin/irispython ### 4.1.3. 用Notebooks编程 打开这个网址 : http://localhost:8888/tree 你可以用三个不同的内核访问三个不同的notebooks * Embedded嵌入式 Python 内核 kernel * ObjectScript 内核kernel * Vanilla python3 内核kernel # 5. Repository的内容 ## 5.1. Dockerfile 一个安装了某些python 依赖 (pip, venv) 和 容器Sudo的dockerfile 以方便使用. 接下来创建开发目录并拷贝在这个 git repository里 启动IRIS 并倒入Titanics csv 文件, 然后激活 **%Service_CallIn** for **Python Shell**. 使用相关的docker-compose.yml 文件来轻松设置另外的参数如 port number 以及你在哪里配置 keys 和host 文件夹. dockerfile 以安装python模块所需要的东西为终止. 最后一部分是关于安装jupyter notebook记事本和它的内核. 使用 .env/ 文件 来调整在docker-compose里面使用到的dockerfile. ## 5.2. .vscode/settings.json 配置文件可以马上用 [VSCode ObjectScript plugin](https://marketplace.visualstudio.com/items?itemName=daimor.vscode-objectscript)开始编程 ## 5.3. .vscode/launch.json 配置文件如果你想用VSCode ObjectScript debug. [Read about all the files in this article](https://community.intersystems.com/post/dockerfile-and-friends-or-how-run-and-collaborate-objectscript-projects-intersystems-iris) ## 5.4. .vscode/extensions.json 如果你想在容器中运行VSCode添加拓展建议的文档. [更多信息请查看这里](https://code.visualstudio.com/docs/remote/containers) ![Archiecture](https://code.visualstudio.com/assets/docs/remote/containers/architecture-containers.png) 这在使用embedded python非常有用. ## 5.5. src folder文件夹 这个文件夹被分成两部分, one 用来保存 ObjectScript 样例,另一个保存Python 代码. ### 5.5.1. src/ObjectScript 显示如何在IRIS中使用python的不同部分代码. #### 5.5.1.1. src/ObjectScript/Embedded/Python.cls 所有的注释(都是用法文写的因为是法国人编的代码。。。). ```objectscript /// Embedded python example Class ObjectScript.Embbeded.Python Extends %SwizzleObject { /// HelloWorld with a parameter ClassMethod HelloWorld(name As %String = "toto") As %Boolean [ Language = python ] { print("Hello",name) return True } /// Description Method compare(modèle, chaine) As %Status [ Language = python ] { import re # compare la chaîne [chaîne] au modèle [modèle] # affichage résultats print(f"\nRésultats({chaine},{modèle})") match = re.match(modèle, chaine) if match: print(match.groups()) else: print(f"La chaîne [{chaine}] ne correspond pas au modèle [{modèle}]") } /// Description Method compareObjectScript(modèle, chaine) As %Status { w !,"Résultats("_chaine_","_modèle_")",! set matcher=##class(%Regex.Matcher).%New(modèle) set matcher.Text=chaine if matcher.Locate() { write matcher.GroupGet(1) } else { w "La chaîne ["_chaine_"] ne correspond pas au modèle ["_modèle_"]" } } /// Description Method DemoPyhtonToPython() As %Status [ Language = python ] { # expression régulières en python # récupérer les différents champs d'une chaîne # le modèle : une suite de chiffres entourée de caractères quelconques # on ne veut récupérer que la suite de chiffres modèle = r"^.*?(\d+).*?$" # on confronte la chaîne au modèle self.compare(modèle, "xyz1234abcd") self.compare(modèle, "12 34") self.compare(modèle, "abcd") } Method DemoPyhtonToObjectScript() As %Status [ Language = python ] { # expression régulières en python # récupérer les différents champs d'une chaîne # le modèle : une suite de chiffres entourée de caractères quelconques # on ne veut récupérer que la suite de chiffres modèle = r"^.*?(\d+).*?$" # on confronte la chaîne au modèle self.compareObjectScript(modèle, "xyz1234abcd") self.compareObjectScript(modèle, "12 34") self.compareObjectScript(modèle, "abcd") } /// Description Method DemoObjectScriptToPython() As %Status { // le modèle - une date au format jj/mm/aa set modèle = "^\s*(\d\d)\/(\d\d)\/(\d\d)\s*$" do ..compare(modèle, "10/05/97") do ..compare(modèle, " 04/04/01 ") do ..compare(modèle, "5/1/01") } } ``` * HelloWorld *用python简单地打个招呼吧 *在标签Tag熵使用OjectScript wrapper打包器 [ Language = python ] * 对比 * 一个用来对比带有regx的字符串的python 函数, 如果匹配就打印,否则如果找不到匹配就不打印 * compareObjectScript * ObjectScript 中跟Python 一样的函数 * DemoPyhtonToPython * 显示如何在ObjectScript中打包的python代码中使用python函数 ```objectscript set demo = ##class(ObjectScript.Embbeded.Python).%New() zw demo.DemoPyhtonToPython() ``` * DemoPyhtonToObjectScript * 显示如何调用ObjecScript 函数的python函数 * DemoObjectScriptToPython * 显示如何调用python函数的ObjectScript函数(好像绕口令,哈哈) #### 5.5.1.2. src/ObjectScript/Gateway/Python.cls 显示如何用gateway功能调用外部python 代码的ObjectiveScritp 类. 在这个栗子中python 代码并不在同一IRIS进程中“被执行”. ```objectscript /// Description Class Gateway.Python { /// Demo of a python gateway to execute python code outside of an iris process. ClassMethod Demo() As %Status { Set sc = $$$OK set pyGate = $system.external.getPythonGateway() d pyGate.addToPath("/irisdev/app/src/Python/gateway/Address.py") set objectBase = ##class(%Net.Remote.Object).%New(pyGate,"Address") set street = objectBase.street zw street Return sc } } ``` ### 5.5.2. src/Python 显示如何在IRIS中使用嵌入式embedded python的不同部分的python 代码. #### 5.5.2.1. src/Python/embedded/demo.cls 所有的注释(都是用法文写的因为是法国人编的代码。。。) ```python import iris person = iris.cls('Titanic.Table.Passenger')._OpenId(1) print(person.__dict__) ``` 首先倒入iris 模块来启用 嵌入式embedded python 能力. 从IRIS模块中打开一个带cls功能的持久化类 class. 请注意所有 `%` 功能被替换为 `_`. 你需要使用shell来运行这个例子 : ```shell /usr/irissys/bin/irispython /opt/irisapp/src/Python/embedded/demo.py ``` #### 5.5.2.2. src/Python/native/demo.cls 显示如何在python代码中使用native api . ```python import irisnative # create database connection and IRIS instance connection = irisnative.createConnection("localhost", 1972, "USER", "superuser", "SYS", sharedmemory = False) myIris = irisnative.createIris(connection) # classMethod passenger = myIris.classMethodObject("Titanic.Table.Passenger","%OpenId",1) print(passenger.get("name")) # global myIris.set("hello","myGlobal") print(myIris.get("myGlobal")) ``` 为了倒入 irisnative, 你需要在python环境中安装 native api wheels. ```shell pip3 install /usr/irissys/dev/python/intersystems_irispython-3.2.0-py3-none-any.whl ``` 然后你可以执行python代码 ```shell /usr/bin/python3 /opt/irisapp/src/Python/native/demo.py ``` 请注意在这个例子中有一个连接是练到IRIS数据库的, 这意味着, **这个代码是在另一个不同的IRIS 线程中被执行**. #### 5.5.2.3. src/Python/flask 一个完整的结合嵌入式embedded python和微框架flask的demo. 你可以测试一下 : ``` GET http://localhost:4040/api/passengers?currPage=1&pageSize=1 ``` ##### 5.5.2.3.1. 它是如何工作的 为了使用嵌入式embedded Python, 我们使用 `irispython` 作为python 解析 并do: ```python import iris ``` 就在文件的最开头. 我们将能够运行如下的方法methods: ![flaskExample](https://raw.githubusercontent.com/thewophile-beep/integrated-ml-demo/main/misc/img/flaskExample.png) 正如你们看到的,为了 GET passenger 的 ID, 我们需要执行查询并使用它的结果集. 我们也可以直接用IRIS的对象: ![flaskObjectExample](https://raw.githubusercontent.com/thewophile-beep/integrated-ml-demo/main/misc/img/flaskObjectExample.png) 在这里, 我们使用SQL 查询来获得所有表里的 ID, 并从`Titanic.Table.Passenger` 类带有 `%OpenId()` 方法method的表里获取每个passenger (请注意由于 `%` 在 Python是非法字符, 我们用下划线 `_` 来代替). 感谢Flask, 我们已经这样完成了所有的方法和路线. ##### 5.5.2.3.2. 启动 flask server 为了启动服务器, 我们用 `gunicorn` 和 `irispython`. 在 docker-compose 文件里, 我们增加了下面的行: ````yaml iris: command: -a "sh /opt/irisapp/server_start.sh" ```` 这会在容器启动后(感谢 `-a` flag), 启动以下脚本: ````bash #!/bin/bash cd ${SRC_PATH}/src/Python/flask ${PYTHON_PATH} -m gunicorn --bind "0.0.0.0:8080" wsgi:app & exit 1 ```` Dockerfile 里的环境参数如下: ````dockerfile ENV PYTHON_PATH=/usr/irissys/bin/irispython ENV SRC_PATH=/opt/irisapp/ ```` ### 5.5.3. src/Notebooks 带有三种不同内核的三个不同的记事本Notebooks : * 一个跑原生API的 Python3 内核 * 一个嵌入式Embedded Python 内核 * 一个 ObjectScript 内核 记事本Notebooks 在这里访问 http://localhost:8888/tree #### 5.5.3.1. src/Notebooks/HelloWorldEmbedded.ipynb 这个是使用IRIS 嵌入式embedded python 内核的记事本notebook . 它展示了打开和保存持久化类和如何执行sql 查询. #### 5.5.3.2. src/Notebooks/IrisNative.ipynb 这个notebook使用 vanilla python 内核. 它展示了如何执行IRIS原生 native apis. #### 5.5.3.3. src/Notebooks/ObjectScript.ipynb 这个notebook 使用 ObjectScript 内核kernel. 它展示了如何运行ObjectSCript代码以及如何在ObjectScript 中使用嵌入式embedded python.
公告
Claire Zheng · 十一月 9, 2023

InterSystems开发者社区中文版第二届技术征文大赛专家评审团亮相!

大家好! 2023年9月19日-11月24日(北京时间),🏆InterSystems开发者社区中文版第二届技术征文大赛🏆正在进行中(←点击链接进入参赛页面,浏览所有参赛文章)!作为此次大赛重要奖项“专家提名奖”评比的重要部分,我们的专家评审团已组建成团! 以下为我们的专家团成员,来自我们的销售工程师团队与WRC支持团队。 @Yunfei.Lei @Peng.Qiao @Lin.Zhu @jieliang.liu7848 @Ida.Yang @Louis.Lu @Hao.Ma @Jingwei.Wang @Tete.Zhang @Tengzhou.Zhuang 我们期待专家评审团对参赛作品的公平审阅与打分。 作为社区成员,您的个人贡献也会对每一篇参赛文章产生影响,每一次浏览和点赞都将助力您喜欢的文章赢得“开发者社区奖”。 欢迎大家积极投稿、点赞、分享、学习! 欢迎积极参加InterSystems开发者社区中文版第二届技术征文大赛
公告
Claire Zheng · 九月 22, 2022

InterSystems开发者社区中文版首届技术征文大赛专家评审团亮相!

中文社区的同学们大家好! 如你所知,从2022年9月5日-10月24日(北京时间),我们正在举办🏆InterSystems开发者社区中文版首届技术征文大赛🏆(←点击链接进入参赛页面,浏览所有参赛文章)! 截至目前,我们已收获了20余篇佳作 作为此次大赛重要奖项“专家提名奖”评比的重要部分,我们的专家评审团已组建成团! 以下为我们的专家团成员: @Yunfei.Lei @Peng.Qiao @Ida.Yang @Lin.Zhu @Louis.Lu @Hao.Ma @Jingwei.Wang @Tete.Zhang @Tengzhou.Zhuang @jieliang.liu7848 @Duan.Haihua @Wenyi.Liu 我们期待专家评审团对参赛作品的公平审阅与打分。 作为社区成员,你的个人贡献也会对每一篇参赛文章产生影响,你的每一次浏览和点赞都将助力你喜欢的文章赢得“开发者社区奖”。 欢迎大家积极投稿、点赞、分享、学习! 欢迎参赛InterSystems开发者社区中文版首届技术征文大赛
公告
Claire Zheng · 十一月 2, 2022

礼品全部寄出,大赛落下帷幕!一起期待下一次InterSystems开发者社区精彩活动!

各位开发者社区的同学们,大家好! 在各位社区同学的大力支持下,我们的“首届技术征文大赛”圆满完赛!在过去一周多的时间里,我们整理了各类奖项及礼品,目前已经全部寄出! 最新寄出的是开发者征文大赛获奖者的奖品,请以下同学留意查收,如未收到快递信息,请及时与我们联系: @Zhe Wang @姚.鑫 @聆严 周 @John Pan @he hf @sun yao @Meng Cao @lizw lizw @shaosheng shengshao @Guangliang Zhang @zhanglianzhu zhanglianzhu @water huang @yaoguai wan @bai hongtao @Liu Tangh @li wang @Yuxiang Niu 目前我们仍未收到以下几位获奖者的信息,请于11月30日前尽快与我们沟通奖品领取事宜哦:D @Chang Liu @li dong @Vincent Wu 让我们一起期待下一次InterSystems开发者社区的精彩活动吧!如果大家有什么好点子,欢迎跟帖!✿✿ヽ(°▽°)ノ✿ 恭喜获奖的小伙伴 感谢 赞赞赞
公告
Michael Lei · 二月 13, 2023

2023 InterSystems开发者竞赛(Tool)获奖者名单出炉!来看看这优秀的应用吧!

Hi 开发者们, 我们非常高兴地向大家宣布此次InterSystems 开发者竞赛(Tool)的获奖者! 首先,我们要感谢提交了21 份申请的 优秀参与者们 🔥 我们很高兴知道您认为这个主题很重要! 事不宜迟,我们在此公布此次竞赛的获胜者是…… 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇第一名,奖金5,000 美元,获奖项目irissqlcli ,开发者 @Dmitry.Maslennikov 🥈第二名,奖金3,000 美元,获奖项目DX Jetpack for VS Code,开发者 @John.Murray 🥉第三名,奖金1,500 美元,获奖项目OpenAPI-Suite,开发者 @Lorenzo.Scalese 🏅第四名,奖金750 美元,获奖项目iris-geo-map, 开发者 @Muhammad.Waseem 🏅第五名,奖金500 美元, 获奖项目iris-tripleslash,开发者 @José Roberto Pereira, @Henrique Dias, @Henry Pereira 更多获奖者: 🏅 奖金100 美元,获奖项目iris-log-viewer,开发者 @Oliver.Wilms 🏅 奖金100 美元,获奖项目iris-persistent-class-audit,开发者 @Stefan.Cronje1399 🏅 奖金100 美元,获奖项目iris-connections,开发者 @Yuri.Gomes 🏅 奖金100 美元,获奖项目cos-url-shortener,开发者 @Daniel.Aguilar 🏅 奖金100 美元,获奖项目iris-deploy-tools,开发者 @Francisco.López1549 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇第一名,奖金1,000 美元,获奖项目iris-tripleslash,开发者@José Roberto Pereira, @Henrique Dias, @Henry Pereira 🥈第二名,奖金750 美元,获奖项目Intersystems IRIS 平台队列趋势监控组件,开发者 @yubo.mao 🥉第三名,奖金500 美元,获奖项目irissqlcli,开发者 @Dmitry.Maslennikov 我们向所有参赛者和获奖者表示最诚挚的祝贺!所有参赛作品和投票情况可以到我们的参赛作品展示查看。 下次一起来参赛吧😎 恭喜 @Yubo Mao 同学,也感谢@王喆 和 @银行 郝 同学的参与,感谢所有参与投票的同学,期待大家更精彩的作品!
公告
Hao Ma · 五月 7, 2021

开发者社区改版, April 2021

Hi Developers! 看看2021年4月的开发者社区新版本有些什么改善, 主要的新特性包括: This is a release of how did we improve the Developer Community in April 2021. The key features: 代码块里的‘拷贝到剪贴板’按钮 帖子翻译页 私信帖子作者 InterSystems官方版本和安全警示 以下是详细介绍。 代码块里的‘拷贝到剪贴板’按钮Copy-to-clipboard button to code blocks 现在你可以轻松的从任何帖子或者回复里拷贝代码 - 把鼠标放在代码块,然后按这个按钮: 帖子翻译页面 在DC网站你可以请求任意帖子的专业翻译,或者您自己翻译,到5中语言中的一种。为了做起来方便,我们改善了翻译页的界面。 1. 从下拉菜单选择您想要的目标语言: 2. 做出您的选择: 生成翻译 - 如果您希望翻译并发帖,按"Translate" 请求翻译 - 如果您希望我们提供专业翻译,按"Request" 私信帖子作者 现在你可以轻松的发送私信给帖子的作者。点击"Direct Message"按钮,私信会自动添加标题。 InterSystems官方版本和安全警示 InterSystems Official tag 会及时向您更新InterSystems官方声明。现在您可以过滤想要收到的声明,从 releases 和 alerts. 希望您喜欢我们的改版 欢迎提交new requests for improvements and bug reports. 请大家保持关注
文章
姚 鑫 · 七月 13, 2022

第四章 使用嵌入式 Python(一)

# 第四章 使用嵌入式 Python (一) 嵌入式 `Python` 允许使用 `Python` 作为编程 `IRIS` 应用程序的本机选项。 # 预备知识 使用嵌入式 `Python` 所需的 `Python` 版本取决于运行的平台。 在 M`icrosoft Windows` 上,`IRIS` 安装工具包安装正确版本的 `Python`(当前为 `3.9.5`),仅用于嵌入式 `Python`。如果在开发机器上并希望将 `Python` 用于一般用途,建议从 `https://www.python.org/downloads/` 下载并安装相同的版本。 许多基于 UNIX 的操作系统都安装了 `Python`。如果需要安装,请使用包管理器为操作系统推荐的版本,例如: - `macOS`:使用 `Homebrew` 安装 `Python 3.9` `(https://formulae.brew.sh/formula/python@3.9)` - `Ubuntu`: `apt-get install python3` - `Red Hat Enterprise Linux or Oracle Linux: yum install python3` - `SUSE`: `zypper install python3` 如果收到“无法加载 `python`”的错误,这意味着没有安装 `Python`,或者系统上安装了意外版本的 `Python`。使用上述方法之一安装或重新安装。 在基于 `UNIX` 的系统上,可能希望使用 `pip3` 命令安装 `Python` 包。如果尚未安装 `pip3`,请使用系统的包管理器安装包 `python3-pip`。 要防止在运行 `Embedded Python` 时出现 `IRIS_ACCESSDENIED` 错误,请启用 `%Service_Callin`。在管理门户中,` System Administration > Security > Services`,选择 `%Service_CallIn`,然后选中启用服务框。 # 运行嵌入式 Python 本节详细介绍了运行 `Embedded Python` 的几种方法: ## 从Python Shell 可以从终端会话或命令行启动 `Python shell`。 ### 从终端启动 Python Shell 通过调用 `%SYS.Python` 类的 `Shell()` 方法,从 终端会话启动 `Python shell`。这将以交互模式启动 `Python` 解释器。终端会话中的用户和命名空间被传递给 `Python shell`。 通过键入命令 `quit()` 退出 `Python shell`。 以下示例在终端会话中从 `USER` 命名空间启动 `Python shell`。它打印斐波那契数列中的前几个数字,然后使用 `IRIS SYSTEM.OBJ.ShowClasses()` 方法打印当前命名空间中的类列表。 ```java USER>do ##class(%SYS.Python).Shell() Python 3.9.5 (default, Jul 6 2021, 13:03:56) [MSC v.1927 64 bit (AMD64)] on win32 Type quit() or Ctrl-D to exit this shell. >>> a, b = 0, 1 >>> while a < 10: ... print(a, end=' ') ... a, b = b, a+b ... 0 1 1 2 3 5 8 >>> >>> status = iris.cls('%SYSTEM.OBJ').ShowClasses() User.Company User.Person >>> print(status) 1 >>> quit() USER> ``` 方法 `%SYSTEM.OBJ.ShowClasses()` 返回一个 `IRIS %Status` 值。在这种情况下,`1` 表示未检测到错误。 注意:使用 `%SYS.Python` 类的 `Shell()` 方法运行 `Python shell` 时,不需要显式导入 `iris` 模块。继续使用该模块。 ### 从命令行启动 `Python Shell` 使用 `irispython` 命令从命令行启动 `Python shell`。这与从终端启动 `shell` 的工作方式大致相同,但必须传入 `IRIS` 用户名、密码和命名空间。 以下示例从 `Windows` 命令行启动 `Python shell`: ```java C:\InterSystems\IRIS\bin>set IRISUSERNAME = C:\InterSystems\IRIS\bin>set IRISPASSWORD = C:\InterSystems\IRIS\bin>set IRISNAMESPACE = USER C:\InterSystems\IRIS\bin>irispython Python 3.9.5 (default, Jul 6 2021, 13:03:56) [MSC v.1927 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> ``` 在基于 `UNIX` 的系统上,使用 `export` 而不是 `set`。 ```java /InterSystems/IRIS/bin$ export IRISUSERNAME= /InterSystems/IRIS/bin$ export IRISPASSWORD= /InterSystems/IRIS/bin$ export IRISNAMESPACE=USER /InterSystems/IRIS/bin$ ./irispython Python 3.9.5 (default, Jul 22 2021, 23:12:58) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> ``` 注意:如果尝试运行 `import iris` 并看到一条消息说 `IRIS_ACCESSDENIED,请启用 %Service_Callin`。在管理门户中,转至 `System Administration > Security > Services`,选择 `%Service_CallIn`,然后选中启用服务框。