清除过滤器
文章
Claire Zheng · 七月 20, 2021
InterSystems极客俱乐部线上直播课“Health Connect系统运维培训”回放已准备好,欢迎您点击报名,扫码看回放!
问题
smith tob · 五月 12, 2023
使用sql访问数据库时,如何对sql语句进行加密? 您是想在 插入表数据的时候将数据加密吗? 比如 在执行insert的 时候把一个字段 用md5 hash 起来存储的,这个现成的sql function 是没有的。SQL Functions | InterSystems SQL Reference | InterSystems IRIS for Health 2023.1这个是我们目前最新版本支持的所有 sql function 如果你是想把sql语句作为整体加密,然后在cache执行的时候解密出来,这样操作的话,加密基本都行吧
公告
Jingwei Wang · 八月 29, 2022
各位开发者,
新的视频已经发布在BiliBili平台:
⏯ 在InterSystmes IRIS 使用 Business Process Designer(业务流程设计器)
请观看如何构建一个新的业务流程,在InterSystems Production 中提供业务逻辑和路由功能。了解如何使用管理门户中的业务流程设计器构建一个BPL业务流程。此外,还可以尝试使用InterSystems集成开发环境自己构建一个。
祝您观看愉快 ! B站上能看到字幕
文章
Claire Zheng · 二月 23, 2022
最新一期“极客聊吧”,InterSystems销售工程师们聊了聊这些话题:为什么有些医院和某些商保之间可以直接结算,有些又不能?医院和保险之间的结算难在哪儿?在InterSystems 2021全球线上峰会中提到的医保结算案例对国内实践有哪些借鉴意义?FHIR又能起到什么关键作用?医疗数据实现互联互通的关键是什么?来听听的答案。
文章
Jingwei Wang · 八月 25, 2021
Object Script(一)
概况
ObjectScript是一种用于在InterSystems IRIS数据平台上快速开发编程语言,它是面向对象的弱类型脚本语言,非常适用于各种应用,包括业务逻辑、应用集成和数据处理。
在这里,我将主要介绍ObjectScript的命令脚本,类,方法和Routine等使用方式和语法规范。如有任何疑问,可在InterSystems开发者社区进行深入讨论。
IDE选择
可以使用InterSystems IRIS内置的Studio或Visual Studio Code(需要安装Object Script扩展)来查看和编辑代码。这里我们使用InterSystems IRIS内置Studio来做示例。
如果你已安装InterSystems IRIS或者InterSystems HS 等任何InterSystems产品,找到右下角的图标 ,单击鼠标右键,点击Studio,如下图所示:
输入用户名和密码(用户名:superuser 密码:安装时自己设置的密码),即可进入到Studio开发环境,如下图所示:
Terminal
可以直接打开InterSystems IRIS的终端尝试执行ObjectScript的简单指令。通过右下角的图标 ,单击鼠标右键,点击Terminal,如下图所示:
命名空间
启动一个终端会话后,输入用户名和密码(用户名可以使用superuser,密码是安装时自己设置的密码),之后就会显示你在哪个命名空间下,如下图所示,我的就在USRE这个命名空间下。
命名空间切换
do ^%CD
set $namespace = "Namespace"
Terminal指令语法
在终端中,可以输入各种ObjectScript命令语句。但是不支持多行模式,所以整个命令必须在单行输入。
常用执行指令
指令
缩写
操作
语法/示例
write
w
打印变量
write "Hello World!"
write !
W !
新行打印变量
write !, "This", !, "Is", !, "A", !, "Multi-line", !, "Message!", !
write ?
w ?
列定位打印变量
write !, "This", ?9, "Is", ?18, "A", ?27, "Columnar", ?36, "Message!", !
write #
w #
清除屏幕
write #
zwrite
zw
打印变量的名称和它们的值
zwrite
read
r
读入字段
read x
set
s
赋值
set x = "Hello World!"
kill
k
清除变量,慎用(不加参数调用时将清除内存中的所有变量!)
kill x
quit
q
终止一个例程的执行
后面加返回值(类似return)
do
d
调用函数,routine
do ##class(myclass).[method](…)
if
评估条件,并根据条件来决定运行哪些代码
if condition { code } elseif condition {code} else {code}
for
重复代码的部分
FOR variable=start:increment:end {…}
while
作用与无参数的For类似,都是重复代码的部分.
2. 与for的区别在于条件是在整个代码块之前(While)还是之后(Do/While)被评估
do {code} while condition
或者
while condition {code}
异常错误解读
输入 quit 退出错误
数据类型
%String, %Status, %Integer, %Double, %DateTime等
运算符
关系运算符:= , < ,> ,<= ,>=
算术运算符:+ ,- , * , / 等
逻辑运算符:&& , || , '
连字符:_
运算优先级:严格按照从左到右执行,数学运算没有优先级,但先计算括号内表达式。
文章
Michael Lei · 七月 6, 2021
如果一张图片胜过千言万语,那么一段视频又价值几何? 当然胜过敲一个帖子。
请在 [InterSystems Developers YouTube](https://www.youtube.com/c/InterSystemsDevelopers) 观看我的“Coding talks”:
1. 使用 Yape 分析 InterSystems IRIS 系统性能。 第 1 部分:安装 Yape
在容器中运行 Yape。
2. Yape 容器 SQLite iostat InterSystems
提取和绘制 pButtons 数据,包括时间范围和 iostat。
如果您需要一个简单的方法来捕获和查看 Caché 和 IRIS 以及系统性能指标,可以安排每天运行 pButtons 来轻松实现。 [我之前写过这方面的文章](https://cn.community.intersystems.com/post/intersystems-数据平台的容量规划和性能系列文章)。
我经常需要查看客户系统以进行容量规划和性能检查,这就是我编写 Yape 并在 [GitHub](https://github.com/murrayo/yape "GitHub") 上提供它的原因。 我的 InterSystems 同事 Fabian 将 Yape 的内部结构带入了新方向,并[使其正式在容器中运行](https://community.intersystems.com/post/visualizing-data-jungle-part-iv-running-yape-docker-image)。 Fabian 已经离开 InterSystems,但我继续在 GitHub 上进行开源开发。 在过去一个月左右的时间里,我修复了一些操作系统命令格式错误,使日期处理更智能,在 vmstat 中添加了“Total CPU”图表(倒着看“id”导致我的脖子拉伤),以及其他修饰性更改。
如果您想为 Yape 做出贡献,它在 GitHub 上是开源的。 如果您有功能要求,请[通过建议页面](https://github.com/murrayo/yape/issues)告诉我。
另外,请查看 [Open Exchange 上的 Yape 应用程序](http://bit.ly/2WnqmSt)。
在接下来的几个月,我将分享工作流程中的其他一些技巧,并期望继续开发以使呈现的数据更加有用。 Yape 非常适合检查和查看昨天或过去一周发生的事件的趋势,但是您还需要实时监视和警报... 这里我也对将来的一些帖子做个预告 ;)
文章
Michael Lei · 九月 9, 2021
挑战一:缺乏一个统一的技术体系?InterSystems IRIS 医疗版通过统一的数据库、互操作性/中间件、机器学习和FHIR等医疗行业特有的功能来简化开发,开箱即用。
挑战二:需要高性能的解决方案,可以定制适合医疗行业使用的案例InterSystems IRIS for Health医疗版由医疗行业开发人员创建并为医疗服务服务,具有所需的性能、可扩展性和灵活性,大量的全球、全国大型顶级医院案例。全美排名前20医院,全国客户数百家,百强医院30余家;
挑战三:开源和专有软件缺乏灵活性,无法为医疗行业应用提供高可靠性。InterSystems IRIS医疗版实现一套平台兼容专有和开源模块,同时开发人员可以选择自己喜欢的开发语言和灵活性,支持多种开发语言(ObjectScript,.net, Java, Sql, 等等)
挑战四:缺乏具有医疗卫生领域专业知识的供应商,也没有为开发人员提供持续的支持。InterSystems IRIS 医疗版的产品开发能力、屡获殊荣的支持和长期深耕医疗的企业文化,确保开发人员持续成功。
文章
Claire Zheng · 三月 11, 2021
新冠肺炎疫情大流行史无前例地推动着医疗数字化发展,这一进程不仅影响了医疗服务的提供方式,更带来深刻的行业服务模式变革。经济学人邀请了来自数据技术提供商InterSystems、初级医疗服务提供商Babylon、咨询服务提供商埃森哲、数字化医疗解决方案提供商Kaiser Permanente的专家,从各自的领域和观察出发解读多个热点话题。InterSystems医疗行业解决方案副总裁Don Woodlock参加了此次研讨,分享了InterSystems在数据管理、医疗模式转变、数字化工具面临的优势与挑战、患者对数字化手段的接纳程度等方面的洞察。
能不能搞几个观点摘要? 欢迎课代表留言 请 @Jun.Qian @Li.Yan 同学抽空看看视频,给我们分享一下,谢谢! 好的
文章
Qiao Peng · 四月 7, 2021
如果看了前一篇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应用,放在自己的官网里,有些是免费的,更多是收费的。
公告
Claire Zheng · 九月 22, 2022
中文社区的同学们大家好!
如你所知,从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
各位开发者社区的同学们,大家好!
在各位社区同学的大力支持下,我们的“首届技术征文大赛”圆满完赛!在过去一周多的时间里,我们整理了各类奖项及礼品,目前已经全部寄出!
最新寄出的是开发者征文大赛获奖者的奖品,请以下同学留意查收,如未收到快递信息,请及时与我们联系:
@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
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 同学,也感谢@王喆 和 @银行 郝 同学的参与,感谢所有参与投票的同学,期待大家更精彩的作品!
文章
Michael Lei · 二月 14, 2022
痴呆症是一个重大的全球性问题,困扰着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
# 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

# 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**动作在你希望连接的容器上.

然后配置你的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)

这在使用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:

正如你们看到的,为了 GET passenger 的 ID, 我们需要执行查询并使用它的结果集.
我们也可以直接用IRIS的对象:

在这里, 我们使用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.