搜索​​​​

清除过滤器
文章
Claire Zheng · 十月 19, 2021

如何在InterSystems开发者社区学习?第二部分:标签(Tags)

Hi 亲爱的开发者们, 在这篇帖子中,我们将向您展示如何善用开发者社区的各类标签(Tags),让我们充分利用这个开发者社区的选项吧! 一个标签(Tag)就是一个描述帖子主题的单词或短语,是一种将开发者社区成员和专家与文章联系起来的方法,通过合理地运用标签(Tag),他们将能够讨论/给出正确的答案,将文章分类为具体的、定义明确的类别。 标签(Tag)也可以用来帮助你识别你感兴趣或相关的文章。 在开发者社区顶部的菜单中,你可以看到 标签(Tag)完整列表 标签(Tag)的类型和开发者社区的标签树(Tag Tree) 在开发者社区有两种标签: 标签组(Groups)– 所谓的主标签,用于标识广泛的主题,包括所有InterSystems技术。 标签(Tags)–用于更专门化主题的常规标签。 每个帖子必须至少有一个这样的组(Group)。你知道所有的组(Group)吗? 针对InterSystems technology的标签组 (9): 针对 Visual Studio Code的标签组: InterSystems开发者社区的官方声明标签组“official announcements” : 来自Worldwide Response Center (WRC)的警告和警报标签组: Open Exchange的一个标签组(InterSystems软件解决方案和框架的InterSystems库),另一个标签组是Global Masters(InterSystems游戏化平台),还有一个另一个标签组是Partner Directory (合作伙伴目录,客户和合作伙伴的InterSystems平台): 标签组Global Summit(全球峰会),这是InterSystems的年度盛会: 标签组Online Learning (在线学习)和Documentation(文档): 供用户进行评论、发表意见、提供建议的标签组 DC Feedback: 与InterSystems技术相关的工作标签组 job opportunity announcements (工作机会发布): 用以标记那些无法用前述标签归类的文章的标签组Others: 除了标签组(Group)之外,开发者社区成员还使用标签(Tags)来指定更多的帖子内容。 在 开发者社区标签树(Tag Tree),你会看到一些子标签(subtags),对标签的内容进行分类。 例如,在"语言(Languages)"标签下有如下子标签:"C++", "Python", "JavaScript", "MultiValue Basic", "ObjectScript", "Java" and ".NET". 需要注意的是,为帖子加标签(Tags)并非强制性的,但是在发帖前你必须为帖子选择至少一个"标签组(Groups)”: 标签(Tags)归类: 你可以通过 开发者社区标签树(Tag Tree)以三种不同方式为标签归类: 1. 按热门程度: 标签组(Groups)和标签(Tags)根据它们在帖子中被使用的次数排列,这个数字会出现在每个标签(Tag)旁边的括号内。 例如,标签“Open Exchange” 出现在了368篇帖子中: 2. 按名称: 标签组(Groups)和标签(Tags)按字母顺序排列。 3. 按新增: 在这种模式下,新增标签组(Groups)和标签(Tags)会出现在最前面。 标签(Tag)页:按标签关注、排序、筛选文章 每个标签(Tag)都有自己的URL/网页,在那里你可以看到所有使用该标签的帖子。 例如, "XML" 标签(Tag)的标签页面是:https://cn.community.intersystems.com/tags/xml, 在这个页面展示了所有使用这一标签的文章: 在标签页面上,所有的帖子都可以通过不同的标准进行再次排列:按更新时间、按日期、按点赞、按查看数、按回复。 它们也可以按发布类型分类:公告、文章、问题、讨论、视频或工作。你需要到左上角的菜单,选择你要找的文章类型。 快来关注你感兴趣的标签(Tags)吧! 如果你对某个主题感兴趣,你可以在开发者社区标签树(Tag Tree)中寻找它的标签,选择它,然后点击它旁边的“关注”按钮。当你关注了某一标签(Tags)时,你会收到所有使用该标签(Tags)的帖子的邮件。 我们推荐您可以关注以下标签: Best practices(最佳实践) | Tips and tricks(提示和技巧) | Beginner(初学者) | Tutorial(教程). 那么,现在就来看看开发者社区标签树(Tag Tree)吧——一大波儿有趣的主题(标签)和各种有用的内容正在等着你! 阅读所有与你感兴趣的主题相关的文章; 关注标签走,这样你就不会错过任何关于你最喜欢的话题的帖子了。 如果你有任何关于标签(Tags)的问题,或者你想@任何人,请在下面留下你的评论/建议!
公告
Claire Zheng · 九月 19, 2022

欢迎来了解一下 InterSystems Ideas ——我们的官方反馈门户

开发者社区的同学们,大家好! 我们一直以来都有一个想法——改进收集、分析和回应开发者社区成员们的产品改进请求的过程。我们知道,我们需要一个良好的用户体验,甚至更好的内部流程,来确保收集、听取和响应最好的想法。现在,这个想法终于实现了! 我们在此向您介绍 InterSystems官方反馈门户 💡 >> InterSystems Ideas << 💡 InterSystems Ideas InterSystems Ideas是一个全新的、推动改进的渠道,您可以通过它向我们提交与InterSystems服务(文档、开发社区、全球大师等)相关的产品改进请求和想法,看看其他人提交了什么,为你喜欢的想法投票,投票给你最喜欢的,并从InterSystems获得反馈。 我们开始积极开发和推广创意门户网站InterSystems Ideas和您的创意。我们希望这可以为您提供一个公开的方式来获得我们的产品经理和社区成员的反馈。 ✅ 获得投票最多的想法会得到产品管理部门的评审。 来社区分享你的想法吧!通过投票和评论为其他想法提供贡献——投票越多,影响力越大! 点击看看创意网站 InterSystems Ideas portal!
公告
Claire Zheng · 六月 3, 2024

欢迎报名 | InterSystems 2024 SUTA培训现已启动:聚焦Mirror

SUTA培训作为专业的InterSystems技术学习平台之一,汇聚了权威技术专家与值得探讨的技术主题,内容涵盖了InterSystems数据平台基础管理运维的技能和知识。通过SUTA培训,新客户能够系统学习管理运维工作的整体架构和基础概念,老客户可以更深入、全面地加强对管理运维工作的理解和提升。 InterSystems 2024 SUTA培训现已启动,欢迎参加! 如果您是首次参加SUTA培训,请点击此处 或 扫描下图左侧的二维码注册报名。报名信息需经过审核,请您耐心等待。审核通过的用户,点击此处 或 扫描下图右侧的二维码,使用报名时填写的手机号码登录查看课程。 如果您曾报名参加过2022年、2023年的SUTA培训,无需重复注册报名。点击此处 或 扫描下图右侧的二维码,使用报名时填写的手机号码登录查看课程。 建议通过电脑端参加培训,点击进入直播间。
文章
Michael Lei · 九月 26, 2024

使用 GitLab 持续交付 InterSystems 解决方案 – 第 1 部分:Git

大家都搭建了测试环境。 有些人很幸运,可以在完全独立的环境中运行生产。 -- 佚名.在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:Git 101Git 流程(开发流程)GitLab 安装GitLab 工作流GitLab CI/CD包含容器的 CI/CD第一部分将介绍现代软件开发的基础 – Git 版本控制系统和各种 Git 流程。Git 101虽然我们将主要探讨软件开发的概况以及 GitLab 如何帮助我们实现这一目标,但 Git,或者说 Git 设计中的几个基础的高级概念对于更好地理解后面的概念非常重要。也就是说,Git 是基于这些概念的版本控制系统(还有更多概念,但这几个概念最为重要):非线性开发意味着,虽然我们的软件是从版本 1 到版本 2、再到版本 3 相继发布的,但实际上从版本 1 到版本 2 的升级是并行完成的 – 多名开发者会同时开发许多功能/错误修复。分布式开发意味着开发者独立于一个中央服务器或其他开发者,可以轻松地在自己的环境中进行开发。合并 – 基于前面提到的两个概念,我们会发现很多不同的版本同时存在,我们需要将它们统一成一个完整的状态。我的意思不是说 Git 发明了这些概念。 Git 并没有发明这些概念, 而是使这些概念变得简单、流行,并加入了多个相关创新概念,也就是说,架构即代码/容器化改变了软件开发。核心 git 术语仓库是存储数据以及关于数据的元信息的项目。“从物理层面来讲”,仓库是磁盘上的目录。仓库用于存储文件和目录。仓库还会存储每个文件的完整变更历史。仓库可以:存储在您自己的计算机本地远程存储在远程服务器上但从 git 的角度来看,本地仓库与远程仓库之间没有特殊的区别。提交是仓库的固定状态。 很显然,如果每次提交都存储仓库的完整状态,我们的仓库很快就会变得非常大。 因此,提交会存储差异,也就是当前提交与其父提交之间的差异。不同的提交可以具有不同数量的父提交:0 个 – 仓库中的第一个提交没有父提交。1 个 – 一切如常 - 我们的提交改变了仓库中的某些内容,就像在父提交期间一样2 个 – 当我们有两个不同的仓库状态时,我们可以将它们合并成一个新状态。 该状态和该提交就会有 2 个父提交。>2 个 – 当我们将 2 个以上的不同仓库状态合并为一个新状态时,就会有 2 个以上的父提交。 这一概念与我们的讨论并没有特别大的关系,但它确实存在。现在,对于父提交,每个与之不同的提交都被称为子提交。 每个父提交可以有任意数量的子提交。分支是对提交的引用(或指针),如下图所示:该图像显示的仓库具有两个提交(灰色圆圈),第二个圆圈是 master 分支的头部。 在我们添加更多提交后,仓库开始变成下图所示的状态:这是最简单的情况。 我们的开发者一次负责处理一个更改。 但通常会有很多开发者同时负责处理不同的功能,我们需要使用提交树显示仓库中的变化。提交树我们从相同的起始状态开始。 仓库具有两个提交:但现在,两名开发者在同时工作,为了避免相互干扰,他们在单独的分支中工作:一段时间后,他们需要合并所做的更改,为此,他们创建了合并请求(也叫拉取请求), 顾名思义,该请求可将两个不同的仓库状态(本例中,我们要将 develop 分支合并到 master 分支中)合并为一个新状态。 接受相应审查并获得批准后,仓库状态如下图所示:开发继续进行:Git 101 - 总结主要概念:Git 是一个非线性的分布式版本控制系统。仓库用于存储数据以及关于数据的元信息。提交是仓库的固定状态。分支是对提交的引用。合并请求(也叫拉取请求)是将两个不同的仓库状态合并为一个新状态的请求。如果您想了解更多关于 Git 的信息,可以阅读相关书籍。Git 流程现在,读者已熟悉基本的 Git 术语和概念,我们来探讨一下如何使用 Git 管理软件生命周期的开发部分。很多实践(称为流程)介绍了使用 Git 的开发流程,但我们只会探讨其中两个:GitHub 流程GitLab 流程GitHub 流程GitHub 流程非常简单。 具体如下:从仓库创建一个分支。将更改提交到新分支从您的分支发送一个拉取请求,其中包含您提议的更改,以发起讨论。根据需要在您的分支上提交更多更改。 您的拉取请求将自动更新。在分支准备好合并后,立即合并拉取请求。我们需要遵守几条规则:master 分支始终可部署(并且可正常运行!)不直接在 master 分支中进行开发在功能分支中进行开发master 分支 == 生产* 环境**需要尽可能频繁地部署到生产环境* 不要与“Ensemble 生产”混淆,这里的“生产”是指正式。** 环境是配置好的代码运行位置,可以是服务器、虚拟机,甚至可以是容器。如下图所示:有关 GitHub 流程的更多信息,请参阅此处。 我们还提供了图解指南。GitHub 流程非常适合小型项目,如果您刚开始使用 Git 流程,可以尝试一下。 不过,GitHub 也会使用 GitHub 流程,因此也可以在大型项目中使用 GitHub 流程。GitLab 流程如果您还没有准备好立即部署到生产环境,GitLab 流程提供 GitHub 流程 + 环境。 具体做法是:在功能分支中进行开发(与上例相同),合并到 master 分支中(与上例相同),但这里有一个不同之处: master 分支仅等同于测试环境。 除此之外,还有链接到可能存在的各种其他环境的“环境分支”。通常存在三个环境(可以根据需要创建更多环境):测试环境 == master 分支预生产环境 == preprod 分支生产环境 == prod 分支进入其中一个环境分支的代码应立即移至相应的环境中,此流程可通过以下方式完成:自动(我们将在第 2 部分和第 3 部分探讨)半自动(与自动方式相同,唯一的区别是应按下按钮授权部署)手动完整的流程是:在功能分支中开发功能。对功能分支进行审查并将其合并到 master 分支中。一段时间(合并了多个功能)后,将 master 分支合并到 preprod 分支中一段时间(用户测试等)后,将 preprod 分支合并到 prod 分支中在我们进行合并和测试时,多个新功能已开发完毕并合并到 master 分支中,因此转到 3。具体如下图所示:有关 GitLab 流程的更多信息,请参阅此处。结论Git 是一个非线性的分布式版本控制系统。Git 流程可用作软件开发周期的准则,有多种 Git 流程可供选择。链接Git 书籍GitHub 流程GitLab 流程Driessen 流程(更全面的流程,用于比较)本文的代码讨论问题您使用 Git 流程吗? 使用哪一种?您为普通项目使用多少个环境?后续内容在接下来的部分中,我们将:安装 GitLab。探讨一些建议的调整。讨论 GitLab 工作流(不要与 GitLab 流程混淆)。敬请关注。
公告
Claire Zheng · 一月 10, 2024

InterSystems 编程大赛:FHIR和数字医疗互操作性

Hi 开发者们, 我们非常高兴地邀请大家参加新的 InterSystems 在线编程竞赛,此次编程大赛关注于“FHIR与数字医疗互操作性”这个主题。 🏆 InterSystems编程大赛:FHIR 与数字医疗互操作性🏆 时间: 2024年1月15日至2月5日(美国东部时间) 奖金池: 14,000 美元 话题 欢迎您开发互操作性 FHIR 解决方案或医疗互操作性解决方案,您也可以开发辅助类解决方案,以帮助其他用户使用 InterSystems IRIS for Health、Health Connect 或 FHIR 服务器开发或/和维护互操作性解决方案。 一般要求: 应用程序或库必须功能齐全。该应用程序不应该是另一种语言中已有库的导入或直接接口(C++ 除外,您确实需要做大量工作来为 IRIS 创建接口)。不允许对现有应用程序或库进行复制粘贴。 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用程序应在 IRIS Community Edition 或 IRIS for Health Community Edition 上运行。两者都可作为host (Mac, Windows)版从Evaluation Site下载,或者可以按从InterSystems Container Registry或Community Container中提取的容器形式使用: intersystemsdc/iris-community:latest 或 intersystemsdc/irishealth-community:latest 。 该应用程序需开源并在GitHub上发布。 应用程序的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 一名开发者只允许提交 3 份作品。 注意。我们的专家将根据申请的复杂性和实用性标准对是否批准参加比赛拥有最终决定权。他们的决定是最终决定,不得上诉。 奖品 1. 专家提名奖(Experts Nomination)——获奖者由我们特别挑选的专家团选出: 🥇第一名 - 5,000 美元 🥈第二名 - 3,000 美元 🥉第三名 - 1,500 美元 🏅第四名 - 750 美元 🏅第五名 - 500 美元 🌟第 六名~第十名 - 100 美元 2. 社区提名奖(Community Nomination)- 获得总票数最多的应用程序: 🥇第一名 - 1,000 美元 🥈第二名 - 750 美元 🥉第三名 - 500 美元 🏅第四名 - 300 美元 🏅第五名 - 200 美元 如果几位参与者获得相同数量的选票,他们都将被视为获胜者,奖金由获胜者分享。 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。 ✅ 还没有账号?点击此处创建一个账号! 👥开发人员可以组队创建协作应用程序。一个团队允许 2 到 5 名开发人员。 请注意,要在您的README文件中标注您的团队成员——社区用户profile。 重要截止日期: 🛠 应用程序开发和注册阶段: 2024 年 1 月 15 日(美国东部时间 00:00):比赛开始。 2024 年 1 月28 日(美国东部时间 23:59):提交截止日期。 ✅ 投票期限: 2024 年 1 月 29 日(美国东部时间 00:00):投票开始。 2024 年 2 月 5 日(美国东部时间 23:59):投票结束。 注意:在整个参赛期间(开发与投票期间),开发者可持续编辑、提升其应 资源助力: ✓ 应用示例(英文): FHIR 服务器模板 iris-healthtoolkit-模板 互操作性-嵌入式-python FHIR HL7 SQL 演示FHIR DropBox HL7 和 SMS 互操作性演示 IrisHealth 演示 单元测试 DTL HL7 医疗保健 HL7 XML FHIR 互操作性示例 FHIR-Orga-dt FHIR 伪匿名化代理 FHIR-客户端-java FHIR-客户端-.net FHIR-客户端-python Open Exchange 上的 FHIR 相关应用程序 Open Exchange 上的 HL7 应用程序 ✓ 在线课程(英文): 交互式数字医疗互操作性基础- 使用 InterSystems IRIS for Health 构建数字医疗互操作性产品的入门课程 FHIR 集成 HL7 集成 了解软件开发人员的FHIR 探索 FHIR 资源 API 使用 InterSystems IRIS for Health 减少再入院率 将设备连接到 InterSystems IRIS for Health 监测婴儿的血氧饱和度 FHIR 集成快速入门 ✓ 视频(英文): 6 个 FHIR 快速问题 SMART on FHIR:基础知识 使用 FHIR 进行开发 - REST API InterSystems IRIS for Health 中的 FHIR FHIR API 管理 在 IRIS for Health 中搜索 FHIR 资源 ✓ IRIS 初学者(英文): 使用 InterSystems IRIS 构建服务器端应用程序 初学者的学习路径 ✓ 对于ObjectScript 包管理器 (IPM)的初学者(英文): 如何使用 InterSystems IRIS 的 REST 应用程序构建、测试和发布 IPM 包 采用 InterSystems IRIS 和 IPM 的封装优先开发方法 ✓ 如何将您的APP提交给大赛: 首先您需要发布应用:如何在 Open Exchange 上发布应用程序 然后,您可以提交申请:如何提交比赛申请 需要帮忙? 加入 InterSystems Discord 服务器上的竞赛频道或在本文评论中留言告诉我们。 期待您的精彩项目——加入我们的编码马拉松吧! ❗️参加本次比赛即表示您同意此处列出的比赛条款。请在继续之前仔细阅读它们。 ❗️ 中文资源参考-视频合集 | InterSystems IRIS医疗版互联互通套件产品用例
文章
Michael Lei · 七月 18, 2024

InterSystems 常见问题系列--如何使用命令获得应用错误 (^ERRORS)

InterSystems 常见问题系列 使用 ErrorList 查询 SYS.ApplicationError 类. 注 1: 在 %SYS 命名空间中运行. 注 2: 这是个非存储的utility, 所以我们用 %ResultSet 类而不用 %SQL.Statement. 执行命令的例子如下. USER>set $namespace="%SYS" //equal to zn "%SYS" %SYS>set rset=##class(%ResultSet).%New() %SYS>set rset.ClassName="SYS.ApplicationError" %SYS>set rset.QueryName="ErrorList" // The first argument of the query is the namespace name, the second argument is the date (in MM/DD/YYYY format). %SYS>do rset.Execute("USER","08/17/2020") // To display the results on the screen, execute the %Display() method. %SYS>do rset.%Display() Error # Error message Time Process DisplayPID Username Code line 1 <DIVIDE> 02:43:10 2536 2536 irisowner 1 Rows(s) Affected %SYS>do rset.Close() 以下显示如何获得在浏览行时获取SELECT的列值The following shows how to get column values ​​of a SELECT while navigating through rows. 使用Next()方法来移动到一行(如果行存在的话返回1) 获取一列的话使用 Get("column name"). 具体列名,请参考类文档里面的ErrorList 查询描述。 关于ErrorList 查询的列名. %SYS>do rset.Execute("USER","08/17/2020") %SYS>while rset.Next() { write rset.Get("Error #"),"-",rset.Get("Error message"),"-",rset.Get("Time"),"-",rset.Get("Code line"),!} 1-<DIVIDE>-02:43:10- For terminal viewing, you can also use the ^%ER routine. Execute the following while in the namespace you want to reference (the example is executed in the USER namespace). The green bold underlined text indicates the input area. USER>do ^%ER For Date: ?L Thu 09/17/2020 (T) 2 Errors Mon 09/07/2020 (T-10) 3 Errors Mon 08/31/2020 (T-17) 1 Error Mon 08/24/2020 (T-24) 1 Error For Date: 09/17/2020 17 Sep 2020 2 Errors Error: ?L 1. " *a" at 9:05 am. $I=|TRM|:|13484 ($X=0 $Y=15) $J=13484 $ZA=0 $ZB=$c(13) $ZS=262144 ($S=268271680) 2. "^%ETN" at 9:05 am. $I=|TRM|:|13484 ($X=0 $Y=17) $J=13484 $ZA=0 $ZB=$c(13) $ZS=262144 ($S=268263368) %ETN ;%STACK-related error log Error: 1 1. " *a" at 9:05 am. $I=|TRM|:|13484 ($X=0 $Y=15) $J=13484 $ZA=0 $ZB=$c(13) $ZS=262144 ($S=268271680) Variable: Error: For Date: USER> 日期: 错误发生的日期格式为 mm/dd/yyyy 错误: 明确错误编号. 看完之后,回车即可退出。
文章
Claire Zheng · 六月 12, 2023

在 InterSystems 开发者社区发帖时如何嵌入视频?

大家好! 这是一篇关于如何将视频嵌入您的帖子的简短文章。 其实很简单。您只需要按照以下步骤操作。 1. 打开您希望嵌入的B站视频,在视频右下角找到分享按钮; 2. 选择“嵌入代码”并复制代码 3.在社区帖子中切换到Source视图,并将您在步骤2中复制的代码粘贴在您希望嵌入视频的地方(如嵌在<p>后); 4.再次点击“Source”,回到编辑页面,您会看到如下“IFRAME”框; 5.双击红色的“IFRAME”,并如图所示填写视频尺寸(请务必按下图数值填写),点击“确定”,即可完成视频嵌入。 希望这个帖子能帮助到您:) 在评论部分留下您对这个主题的想法,或者告诉我们您还希望了解哪些社区玩儿法。
公告
Michael Lei · 六月 8, 2023

InterSystems 测试管理器 - %UnitTest 框架的新 VS Code 扩展

如果您已经使用%UnitTest 框架构建了单元测试,或者正在考虑这样做,请查看InterSystems 测试管理器Test Manager。 无需离开 VS Code,您现在可以浏览单元测试、运行或调试它们,并查看之前的运行结果。 InterSystems 测试管理器适用于 ObjectScript 扩展支持的两种源代码位置范例。您的单元测试类可以在 VS Code 的本地文件系统(“客户端编辑”范例)或服务器命名空间(“服务器端编辑”)中掌握。在这两种情况下,实际测试运行都发生在服务器命名空间中。 欢迎反馈。
公告
Claire Zheng · 二月 13, 2023

技术奖励结果公布 | 2023 InterSystems 开发者竞赛:工具(Tool)

Hi,开发者们! 以下是2023 年 InterSystems 开发者竞赛:工具(Tool)参赛者应用的技术奖励分数! Project Idea Implementation Python Docker ZPM Online Demo Code Quality First Article on DC Second Article on DC Video on YouTube First Time Contribution Total Bonus Nominal 3 3 2 2 2 1 2 1 3 3 22 gateway-sql 3 2 2 2 1 10 xml-to-udl 2 1 2 3 3 11 iris-persistent-class-audit 2 2 1 2 3 3 13 GlobalStreams-to-SQL 2 2 2 1 2 1 3 13 DX Jetpack for VS Code 2 2 2 1 3 10 JSONfile-to-Global 2 2 2 1 2 1 3 13 apptools-admin 3 2 5 irissqlcli 3 2 2 7 OpenAPI-Suite 3 2 2 2 1 2 1 13 iris-connections 2 2 1 2 1 3 11 Intersystems IRIS platform queue trend monitoring component 2 2 3 7 message_key_query 2 2 3 7 iris-log-viewer 3 2 2 2 1 2 1 3 16 iris-tripleslash 3 2 2 1 2 1 3 14 iris_log_analytics 3 3 iris-deploy-tools 2 2 2 6 blockchain - [ IRIS python ] 3 3 cos-url-shortener 3 2 2 1 2 3 3 16 iris-geo-map 3 2 2 2 1 2 1 3 16 ISC DEV 0 IRIS Data Migration Manager 3 3 奖金可能会有更新变化。 请在下面的评论或Discord 聊天中跟帖。
文章
Kelly Huang · 二月 27, 2023

物联网 (IOT) 在 InterSystems IRIS 平台上的应用

物联网( IoT ,Internet of things )即“万物相连的互联网”,是互联网基础上的延伸和扩展的网络,将各种信息传感设备与网络结合起来而形成的一个巨大网络,实现任何时间、任何地点,人、机、物的互联互通 物联网是新一代信息技术的重要组成部分,IT行业又叫:泛互联,意指物物相连,万物万联。由此,“物联网就是物物相连的互联网”。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。因此,物联网(Internet of Things,简称IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、 连接、互动的物体或过程,采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接,实现对物品和过程的智能化感知、识别和管理。物联网是一个基于互联网、传统电信网等的信息承载体,它让所有能够被独立寻址的普通物理对象形成互联互通的网络。在https://baike.baidu.com/item/物联网/7306589?fromtitle=IoT&fromid=552548&fr=aladdin 查看更多信息 IoT(物联网)作为一个互连事物的网络,包括车辆、机器、建筑物、家用设备或任何其他具有嵌入式 TCP/IP 远程连接可用的事物,允许其接收和发送执行指令和数据。每个事物都为物联网网络提供一项或多项服务。例如,智能灯泡提供关灯和开灯服务;智能空调维持环境温度;智能相机在捕捉运动时发送通知。然而,所有这些设备都可以一起运行以提供建筑物安全性,例如。当摄像头检测到运动时,灯就会亮起。那些可以提供业务和集成服务(例如构建安全性)的流程的编排由服务器软件控制器完成。它可以从十几个智能设备接收数据和指令并将其发送到 TCP/IP 网络(如 Internet),以将这些东西作为主要服务进行操作。 事物和服务器软件使用两种协议来互操作数据和指令:MQTT(消息队列遥测传输)和 REST(表述性状态传输)API。第一个更常见,因为它的结构更简单。某些设备的内存和处理器功能有限,没有足够的资源来使用 REST。因此,本文将详细介绍如何使用 MQTT 实现服务器端软件以与物联网进行互操作。 关于 MQTT MQTT 是一种用于消息队列/消息队列服务的轻量级、发布-订阅、机器对机器网络协议。它专为连接具有资源限制或网络带宽有限的设备的远程位置而设计。它必须在提供有序、无损、双向连接的传输协议上运行——通常是 TCP/IP。它是一个开放的 OASIS 标准和 ISO 推荐标准 (ISO/IEC 20922)。在https://baike.baidu.com/item/MQTT/3618851?fr=aladdin 上查看更多信息。 MQTT 协议有两个角色来在事物之间互操作数据:消息代理和客户端。第一个角色是服务器软件,用于接收和发布由一个或多个客户端生成或使用的消息。另外一个角色是智能设备和服务器软件,用于使用物的服务提供主要服务,例如提供楼宇自动化服务的服务器软件,或使用智能信号量和公共摄像头服务控制城市交通的软件。 MQTT 代理 市场上有各种 MQTT 消息代理,比较受欢迎的是 Eclipse Mosquitto (https://mosquitto.org/),因此我们将在示例中使用它。MQTT 代理类似于 JMS 或 MQ 代理。它是一种用于接收消息并将其发布到主题中的中间体。因此,连接的客户端可以订阅一个或多个主题以生成或使用来自这些主题的消息。这些主题允许客户端(软件和设备)以一种非耦合和异步的方式完成他们的工作。这意味着每个客户端都会观察一条消息并在必要时采取行动。他们也可以自己发布新消息。例如,如果恒温器在主题“A 楼”中发送一条指示高温的消息,则安装在该建筑物中并列在主题“A 楼”中的空调可以从那里获取此消息并自行打开以降低温度.但是,通常会看到带有业务规则的服务器端软件在温度达到特定值时自动打开空调。如果将 MQTT 代理配置为在关闭时保留消息并在再次打开时恢复它们,则它还可以保证消息传递。 MQTT Broker 的其他优点包括(来自维基百科): 消除易受攻击和不安全的客户端连接(如果配置为这样做)。 能够轻松地从单个设备扩展到数千个小工具。 管理和跟踪所有客户端连接状态,包括安全凭证和证书(如果配置为这样做)。 在不影响安全性的情况下减少网络压力,如果配置为这样做(使用蜂窝或卫星网络时)。 MQTT消息 有 3 种类型的消息: 连接:在 TCP/IP 会话中建立代理和客户端之间的连接。 断开连接:断开服务器和客户端与 TCP/IP 会话的连接。 发布:将消息放入主题并将该消息的副本发送给订阅该主题的每个客户端。 查看正在运行的消息示例: InterSystems IRIS 支持物联网和 MQTT 协议 根据 InterSystems IRIS 文档,目前支持的版本是 MQTT 3.1。此 MQTT 规范被定义为 OASIS 标准, MQTT 版本 3.1.1 。 IRIS 的互操作性模块定义了一个入站(用于使用 MQTT 消息)和一个出站(用于生成 MQTT 消息)MQTT 适配器。可以使用这些适配器开发自定义业务服务和操作,或者您可以分别使用内置业务服务和操作EnsLib.MQTT.Service.Passthrough和EnsLib.MQTT.Operation.Passthrough 。 如果您想在互操作性生产之外使用 MQTT 协议,您可以使用较低级别的 %Net.MQTT 类。 MQTT 类使用Eclipse Paho MQTT C 客户端库。 创建业务服务以使用 MQTT 消息 Class packagename.NewService1 Extends Ens.BusinessService { Parameter ADAPTER = "EnsLib.MQTT.Adapter.Inbound" ; Method OnProcessInput(pInput As EnsLib.MQTT.Message, pOutput As %RegisteredObject ) As %Status { set tsc= $$$OK set messageContent = pInput.StringValue …. Quit tsc } } 创建业务操作以生成/发送 MQTT 消息 Class packagename.NewOperation1 Extends Ens.BusinessOperation { Parameter ADAPTER = "EnsLib.MQTT.Adapter.Outbound" ; Parameter SETTINGS = "-SendSuperSession" ; Method OnMessage(pRequest As packagename.Request, Output pResponse As packagename.Response) As %Status { #dim tSC As %Status = $$$OK #dim e As %Exception.AbstractException Try { Set message = ##class (EnsLib.MQTT.Message). %New () Set message.Topic = ..Adapter .Topic Set jsonValue = {} Set jsonValue.message = "Response message” Set message.StringValue = jsonValue.%ToJSON() Set tSC=..Adapter.Send(message.Topic,message.StringValue) Set pResponse = ##class(packagename.Response).%New() Set pResponse.message = “Message response” } Catch e { Set tSC=e.AsStatus() } Quit tSC } 入站和出站 MQTT 适配器的设置 业务服务和业务运营都可以配置以下参数(来源:https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=EMQTT_reference): 客户 ID:这是向经纪人标识此客户的字符串。它必须是 ASCII 编码的并且包含 1 到 23 个字符。 连接超时:这是连接超时。连接到繁忙的服务器可能需要一些时间,因此可以使用此超时来避免过早的连接失败。它指定在连接尝试失败之前等待的秒数。 凭据名称:这是用于访问 MQTT 代理的一组凭据值的 ID 名称。 Credentials 项中定义的用户名和密码必须是 ASCII 编码的。如果代理不需要登录凭据,则不需要。 Keep Alive:指定在客户端发送给代理的消息之间传递的最大秒数。 QOS:这决定了所需的服务质量。它可以有以下两个值之一:0 - QOSFireAndForget:不等待来自代理的响应和 1 - QOSWaitForDelivery:等待来自代理的响应,如果代理没有响应则发出错误。 保留:这是向代理指示消息是否应保留的标志。 主题:这是您希望发布或订阅的主题的名称。主题必须是 ASCII 编码的。主题通常是一个层次结构字符串,其子主题级别由 /(正斜杠)分隔。在订阅中,主题可以使用通配符作为主题级别。 URL:这是您希望与之通信的经纪人的 URL。该方案是“tcp”或“ssl”,后跟域名和以“:”分隔的端口,例如“tcp://BIGBADAPPLE.local:1883”。通常启用 TLS 的端点配置有 8883 端口,但这不是强制性的。 下载并安装示例应用程序 IRIS IoT 示例是一个简单的应用程序,向您展示如何使用互操作性生产来使用(接收)和生成(发送)MQTT 消息。要获取它,请访问 https://openexchange.intersystems.com/package/IoT-Sample。现在,执行后续步骤。 1. clone/git pull repo 到任何本地目录 -----0----- 2、在该目录下打开终端,运行: -----1----- 3. 使用您的项目运行 IRIS 容器: -----2----- 如果要使用 ZPM 安装它,请按照以下步骤操作: 1. 打开启用了互操作性的 IRIS 命名空间。2. 打开终端并调用: -----3----- 运行示例应用程序。 1.打开制作,开始制作。它将开始观察 MQTT 主题 /DeviceStatusInputTopic 并生成对 MQTT 主题 /DeviceStatusOutputTopic 的响应。查看: 2. 使用MQTT 客户端发送消息并测试生产。为此,请在您的 Google Chrome 浏览器上访问https://chrome.google.com/webstore/detail/mqttbox/kaajoficamnjijhkeomgfljpicifbkaf 。它是 Chrome 插件 MQTTBox。只需点击添加到 Chrome,然后点击添加应用程序。 3. 在您的 Google Chrome 浏览器中,转到 chrome://apps/ 并选择 MQTTBox(如果需要,单击仍然打开)。 4. 单击创建 MQTT 客户端按钮。 5. 使用以下设置配置 MQTT 连接: 客户名称:本地 协议:mqtt/tcp 主机:本地主机:1883 用户名:admin 密码:管理员 所有其他设置保留默认值。 6. 配置 MQTT 主题以发送和接收 MQTT 消息: 要发布的主题:/DeviceStatusInputTopic 订阅主题:/DeviceStatusOutputTopic 有效载荷: { "deviceId" : "Air Conditioner Level 1" , "statusDate" : "2023-01-07 14:03:00" , "status" : 0 } 7. 单击按钮订阅以检查关于主题 /DeviceStatusOutputTopic 的消息。 8. 单击按钮 Publish 将消息发送到 /DeviceStatusInputTopic,并在 /DeviceStatusOutputTopic 上查看 IRIS 生产产生的结果。 9. 检查 IRIS 管理门户 Visual Trace 上的消息处理会话 示例应用程序源代码 Dockerfile ARG IMAGE=intersystemsdc/irishealth-community ARG IMAGE=intersystemsdc/iris-community FROM $IMAGE WORKDIR /home/irisowner/irisbuild ARG TESTS= 0 ARG MODULE= "iris-iot-sample" ARG NAMESPACE= "USER" RUN --mount= type = bind ,src=.,dst=. \ iris start IRIS && \ iris session IRIS < iris.script && \ ([ $TESTS -eq 0 ] || iris session iris -U $NAMESPACE "##class(%ZPM.PackageManager).Shell(\"test $MODULE -v -only\",1,1)" ) && \ iris stop IRIS quietly 最新版本的 InterSystems IRIS Community 用于创建 InterSystems IRIS 的 docker 实例,其命名空间名为 USER。 docker-compose 文件 version: '3.6' services: mosquitto: image: eclipse-mosquitto: 2 container_name: mosquitto user : root volumes: - ./mosquitto/config/:/mosquitto/config/ - ./mosquitto/log/:/mosquitto/log/ - ./mosquitto/data/:/mosquitto/data/ ports: - 1883 : 1883 - 9001 : 9001 iris: build: context: . dockerfile: Dockerfile restart: always command: --check-caps false ports: - 1972 - 52795 : 52773 - 53773 volumes: - ./:/irisdev/app 现在创建了两个 docker 容器实例,并且启动并运行。第一个是基于 Eclipse Mosquitto 产品的 MQTT 代理(mosquitto 服务),第二个是 MQTT 服务器端软件,负责消费和生产 MQTT 消息以提供设备监控服务。mosquitto docker 实例在文件 /mosquitto/config/mosquitto.conf 中配置。在那里定义了端口、消息持久性、安全和日志问题。文件 /mosquitto/config/password.txt 也将用户确定为 admin,密码也是 admin。但是,它是通过命令 mosquitto_passwd -U password.txt 加密的(您可以在https://mosquitto.org/man/mosquitto_passwd-1.html阅读更多相关信息)。 虹膜脚本文件 zn "%SYS" Do ##class (Security.Users).UnExpireUserPasswords( "*" ) zn "USER" Do ##class (EnsPortal.Credentials).SaveItem( 0 , "mosquitto_cred" , "mosquitto_cred" , "admin" , "admin" , "" ) zpm "load /home/irisowner/irisbuild/ -v" : 1 : 1 halt 该文件为业务服务和业务操作创建凭证。登录到 MQTT Broker 并运行 ZPM 文件 module.xml。 模块.xml 该文件用于在服务器上编译源代码以及在使用 ZPM 时安装示例应用程序。 <?xml version= "1.0" encoding= "UTF-8" ?> <Export generator= "Cache" version= "25" > <Document name= "iris-iot-sample.ZPM" > <Module> <Name>iris-iot-sample</Name> <Description>A simple IRIS interoperability application - for IoT using MQTT.</Description> <Version> 1.0 .8</Version> <Packaging> module </Packaging> <Dependencies> <ModuleReference> <Name>sslclient</Name> <Version> 1.0 .1</Version> </ModuleReference> </Dependencies> <SourcesRoot>src</SourcesRoot> <Resource Name= "dc.irisiotsample.PKG" /> <SystemRequirements Version= ">=2020.1" Interoperability= "enabled" /> </Module> </Document> </Export> 在 SourceRoot 标签上有要编译的源包。 DeviceStatus 持久类 Class dc.irisiotsample.DeviceStatus Extends %Persistent { Property deviceId As %String ; Property statusDate As %TimeStamp ; Property status As %Boolean ; Storage Default { <Data name= "DeviceStatusDefaultData" > <Value name= "1" > <Value>% %CLASSNAME </Value> </Value> <Value name= "2" > <Value>deviceId</Value> </Value> <Value name= "3" > <Value>statusDate</Value> </Value> <Value name= "4" > <Value>status</Value> </Value> </Data> <DataLocation> ^dc .irisiotsample.DeviceStatusD</DataLocation> <DefaultData>DeviceStatusDefaultData</DefaultData> <IdLocation> ^dc .irisiotsample.DeviceStatusD</IdLocation> <IndexLocation> ^dc .irisiotsample.DeviceStatusI</IndexLocation> <StreamLocation> ^dc .irisiotsample.DeviceStatusS</StreamLocation> <Type> %Storage.Persistent </Type> } } 此类用于将 DeviceStatus 保存在 SQL 表中。 DeviceStatusRequest 类 Class dc.irisiotsample.DeviceStatusRequest Extends Ens.Request { Property deviceId As %String ; Property statusDate As %TimeStamp ; Property status As %Boolean ; Storage Default { <Data name= "DeviceStatusRequestDefaultData" > <Subscript> "DeviceStatusRequest" </Subscript> <Value name= "1" > <Value>deviceId</Value> </Value> <Value name= "2" > <Value>statusDate</Value> </Value> <Value name= "3" > <Value>status</Value> </Value> </Data> <DefaultData>DeviceStatusRequestDefaultData</DefaultData> <Type> %Storage.Persistent </Type> } } 此类用于在互操作性组件之间交换数据。 设备状态服务 Class dc.irisiotsample.DeviceStatusService Extends Ens.BusinessService { Parameter ADAPTER = "EnsLib.MQTT.Adapter.Inbound" ; Method OnProcessInput(pInput As EnsLib.MQTT.Message, pOutput As Ens.StringResponse) As %Status { set tsc= $$$OK set DeviceStatusValue = ##class ( %DynamicAbstractObject ). %FromJSON (pInput.StringValue) set DeviceStatus = ##class (dc.irisiotsample.DeviceStatusRequest). %New () set DeviceStatus.deviceId = DeviceStatusValue.deviceId set DeviceStatus.statusDate = DeviceStatusValue.statusDate set DeviceStatus.status = DeviceStatusValue.status set tsc = ..SendRequestSync ( "DeviceStatusProcess" , DeviceStatus, .Response, - 1 , "Device Status Process" ) set pOutput = Response quit tsc } } adapter 参数表示在接收 MQTT 消息时使用 MQTT 适配器。方法 OnProcessInput 在 pInput 上接收 MQTT 消息并将其发送到业务流程,调用方法 SendRequestSync 作为同步消息。 设备状态进程 Class dc.irisiotsample.DeviceStatusProcess Extends Ens.BusinessProcess { Method OnRequest(request As dc.irisiotsample.DeviceStatusRequest, Output response As Ens.StringResponse) As %Status { Set tsc = 1 Set response = ##class (Ens.StringResponse). %New () Set DeviceStatus = ##class (dc.irisiotsample.DeviceStatus). %New () Set DeviceStatus.deviceId = request.deviceId Set DeviceStatus.status = request.status Set DeviceStatus.statusDate = request.statusDate Set tsc = DeviceStatus. %Save () If $$$ISOK (tsc) { Set tsc = ..SendRequestSync ( "DeviceStatusOperation" , request, .pResponse, - 1 , "Device Status Operation" ) Set response.StringValue = "Device id " _pResponse.deviceId_ " has the status " _pResponse.status } Else { Set response.StringValue = "Error on save the device status" Set SuspendMessage = 1 } quit tsc } Storage Default { <Type> %Storage.Persistent </Type> } } 此类从业务服务接收消息,将其保存到数据库,并调用 DeviceStatusOperation 发送(生成)带有结果的消息。 DeviceStatusOperation Class dc.irisiotsample.DeviceStatusOperation Extends Ens.BusinessOperation { Parameter ADAPTER = "EnsLib.MQTT.Adapter.Outbound" ; Parameter SETTINGS = "-SendSuperSession" ; Method NotifyDeviceStatus(pRequest As dc.irisiotsample.DeviceStatusRequest, Output pResponse As dc.irisiotsample.DeviceStatusResponse) As %Status { #dim tSC As %Status = $$$OK #dim e As %Exception.AbstractException Try { Set message = ##class (EnsLib.MQTT.Message). %New () Set message.Topic = ..Adapter .Topic Set jsonValue = {} Set jsonValue.message = "Device " _pRequest.deviceId_ " has status " _pRequest.status Set message.StringValue = jsonValue. %ToJSON () Set tSC= ..Adapter .Send(message.Topic,message.StringValue) Set pResponse = ##class (dc.irisiotsample.DeviceStatusResponse). %New () Set pResponse.deviceId = pRequest.deviceId Set pResponse.status = pRequest.status } Catch e { Set tSC=e.AsStatus() } Quit tSC } XData MessageMap { <MapItems> <MapItem MessageType= "dc.irisiotsample.DeviceStatusRequest" > <Method>NotifyDeviceStatus</Method> </MapItem> </MapItems> } } 此类从业务流程接收消息,并生成一条 MQTT 消息,发送到具有流程响应的主题。 设备状态生产 Class dc.irisiotsample.DeviceStatusProduction Extends Ens.Production { XData ProductionDefinition { <Production Name= "dc.irisiotsample.DeviceStatusProduction" LogGeneralTraceEvents= "false" > <Description></Description> <ActorPoolSize> 2 </ActorPoolSize> <Item Name= "DeviceStatusService" Category= "" ClassName= "dc.irisiotsample.DeviceStatusService" PoolSize= "1" Enabled= "true" Foreground= "false" Comment= "" LogTraceEvents= "false" Schedule= "" > <Setting Target= "Adapter" Name= "ClientID" >InterSystemsIRIS</Setting> <Setting Target= "Adapter" Name= "Topic" >/DeviceStatusInputTopic</Setting> <Setting Target= "Adapter" Name= "Url" >tcp: //mosquitto:1883</Setting> <Setting Target= "Adapter" Name= "CredentialsName" >mosquitto_cred</Setting> </Item> <Item Name= "DeviceStatusProcess" Category= "" ClassName= "dc.irisiotsample.DeviceStatusProcess" PoolSize= "1" Enabled= "true" Foreground= "false" Comment= "" LogTraceEvents= "false" Schedule= "" > </Item> <Item Name= "DeviceStatusOperation" Category= "" ClassName= "dc.irisiotsample.DeviceStatusOperation" PoolSize= "1" Enabled= "true" Foreground= "false" Comment= "" LogTraceEvents= "false" Schedule= "" > <Setting Target= "Adapter" Name= "ClientID" >InterSystemsIRIS</Setting> <Setting Target= "Adapter" Name= "Topic" >/DeviceStatusOutputTopic</Setting> <Setting Target= "Adapter" Name= "Url" >tcp: //mosquitto:1883</Setting> <Setting Target= "Adapter" Name= "CredentialsName" >mosquitto_cred</Setting> </Item> </Production> } } 此类使用所需参数配置业务服务、业务流程和业务操作,并将这些组件放在一起工作。 主要配置的参数有: URL:设置 MQTT Broker 地址。 主题:接收和发送 MQTT 消息的队列。 DeviceStatusInputTopic 用于业务服务,DeviceStatusOutputTopic 用于业务操作。 CredentialsName:使用用户名和密码设置凭据以连接 MQTT 代理。 ClientID:它是为 InterSystems IRIS 分配的逻辑名称,代理需要它来识别 MQTT 客户端。 如您所见,用于 MQTT 的 IRIS 互操作性适配器是一个非常简单且功能强大的工具,用于使用和生成 MQTT 消息以及自动化涉及 IoT 设备的业务流。所以享受它。 查看原贴由 @Yuri.Gomes 撰写
文章
Michael Lei · 七月 7, 2024

InterSystems 常见问题系列 如何在启动时执行特定动作

InterSystems 常见问题FAQ 如果您想在InterSystems 产品启动时执行一个操作系统可执行文件,命令或者程序,可以在SYSTEM^%ZSTART routine里面写明流程 ( %ZSTART routine在 %SYS 命名空间里面创建). 在 SYSTEM^%ZSTART 里面写代码之前, 请确保他可以在任何情况下能正常工作 如果 ^%ZSTART routine 写的不对,或者没有响应或者发生错误,InterSystems 产品可能会无法启动。 更多信息,请参考一下文档。 About writing %ZSTART and %ZSTOP routines [IRIS]About writing %ZSTART and %ZSTOP routines
公告
Tete Zhang · 二月 16, 2023

InterSystems 产品支持的平台 - 版本更新 (2023 年 2 月)

InterSystems 产品支持的平台 - 版本更新 (2023 年 2 月 我们经常收到有关 InterSystems IRIS 数据平台支持的平台和框架的问题。此更新旨在分享最近的更改以及我们对即将发生的更改的当前决策。(预测未来是一项棘手的工作,不应将此视为我们对未来支持平台和框架的承诺。) 我们计划大约每 3 个月发布一次此类更新,然后在一年内重新评估。如果您觉得此更新有用,请告诉我们!我们很感激您的建议。 关于更新…… IRIS 生产操作系统和 CPU 架构 红帽企业版 Linux 近期变动 IRIS 2022.1.2 添加了对RHEL 9.0的支持。 9.0 是一个操作系统主版本,将 Linux 内核更新到 5.14,将 OpenSSL 更新到 3.0, 将 Python 更新到 3.9 IRIS 2022.2.0 移除了对 RHEL 7.x 的支持。 IRIS 的早期版本仍支持 RHEL 7.9。 即将发生的变化 RHEL 9.1 于 2022 年 11 月发布。Red Hat 仅在 RHEL 9.2 发布之前支持此次版本。 RHEL 9.2 计划于 2023 年第二季度末发布。 Red Hat 计划在未来4年内继续支持 9.2。 InterSystems 计划通过一项我们称为“操作系统次版本认证”的新流程,对 RHEL 9.2 上的 IRIS 进行额外测试。该流程旨在提供额外的安全性,即操作系统次版本更新不会对产品有大的影响。 RHEL 8.4 扩展维护将于 2023 年 5 月 31 日结束,这意味着 IRIS 也将在那时停止支持此次版本。 进一步阅读: RHEL 发布页面 Ubuntu 近期变动 IRIS 2022.1.1 增加了对Ubuntu 22.04的支持。 22.04 是一个操作系统主版本,将 Linux 内核更新到了 5.15,将 OpenSSL 更新到 3.0.2,将 Python 更新到 3.10.6 IRIS 2022.2.0 移除了对 Ubuntu 18.04 的支持。 IRIS 的早期版本仍然支持 Ubuntu 18.04。 IRIS 2022.1.1 及更高版本的容器都是基于 Ubuntu 22.04的。 即将发生的变化 Ubuntu 20.04.05 LTS 和 22.04.01 LTS 最近已经发布。 InterSystems 计划通过一项我们称之为“操作系统次版本认证”的新流程,在 20.04.05 LTS 和 22.04.01 LTS 上对 IRIS 进行额外测试。我们将在未来的通告中详细介绍这个新流程。 Ubuntu 的下一次重大更新定于 2024 年 4 月 进一步阅读: Ubuntu 发布页面 SUSE 操作系统 近期变动 IRIS 2022.3.0 增加了对SUSE Linux Enterprise Server 15 SP4的支持。 15 SP4 是一个操作系统主版本,将 Linux 内核更新到 5.14,将 OpenSSL 更新到 3.0,将 Python 更新到 3.9 即将发生的变化 根据他们的发布节奏,我们预计 SUSE 将在第二季度末或第三季度初发布 15 SP5。在那之后我们将把此版本加入到IRIS支持的平台列表中。 延伸阅读: SUSE 生命周期 Oracle Linux 近期变动 IRIS 2022.3.0 添加了对Oracle Linux 9的支持。 Oracle Linux 9 是跟随 RHEL 9 的操作系统主版本,因此它也将 Linux 内核更新到 5.14,将 OpenSSL 更新到 3.0,将 Python 更新到 3.9 即将发生的变化 Oracle Linux 9.1 于 2023 年 1 月发布。 进一步阅读: Oracle Linux 支持政策 微软Windows 近期变动 自 IRIS 2022.1 中添加了 Windows Server 2022 以来,我们未对支持的 Windows 版本列表进行任何更改 即将发生的变化 Windows Server 2012 的扩展支持将于 2023 年 10 月结束。如果您仍在该平台上运行,现在可以开始计划迁移了。 进一步阅读: Microsoft 生命周期 AIX 近期变动 自从在 IRIS 2022.1 中添加了 AIX 7.3 并移除了 7.1 以来,我们没有对支持的 AIX 版本列表进行任何更改 即将发生的变化 InterSystems 正与 IBM 密切合作以增加对 OpenSSL 3.0 的支持。这不会包含在 IRIS 2023.1.0 中,因为 IBM 需要在未来的 TL 版本中包含该功能。好消息是 IBM 正计划在 AIX 7.2 和 7.3中支持OpenSSL 3.0。 IBM 于 12 月发布了 AIX 7.3 TL1,认证正在进行中。 下一个 TL 版本预计在 4 月发布。 进一步阅读: AIX 生命周期 容器 近期变动 我们现在正在发布 IRIS 容器的多架构描述文件(manifest)。这意味着拉取标记为2022.3.0.606.0的 IRIS 容器将为您的 CPU(Intel/AMD 或 ARM)下载正确的容器。 如果您需要为特定 CPU 拉取容器,我们为特定架构的容器制定了标签。例如, 2022.3.0.606.0-linux-amd64将拉取 Intel/AMD 容器, 2022.3.0.606.0-linux-arm64v8将拉取 ARM 容器。 即将发生的变化 我们将在今年下半年逐步淘汰 arm 的镜像(image)名称,例如iris-arm64,以进一步向多架构描述文件转移。 我们还将开始使用“-preview”标记IRIS体验版(Preview)的容器,以便于和最新的正式版本(GA Release)进行区分。 IRIS 开发操作系统和 CPU 架构 MacOS 近期变动 自从我们在 IRIS 2022.1 中迁移到 MacOS 11 以来,我们没有对支持的 MacOS 版本列表进行任何更改 即将发生的变化 我们计划在 2023 年添加对 MacOS 13 的支持,最早可能会在 IRIS 2023.1版本上添加。 CentOS 我们正在考虑取消对 CentOS/CentOS Stream 的支持。以下是我们的考虑。 Red Hat 几年来一直在运行一项开发者计划,该计划使开发人员能够获得非生产环境的免费许可证。这个项目旨在鼓励正在使用CentOS的开发者通过此项目切换到 RHEL。 CentOS Stream 现在是 RHEL 的“上游”,这意味着它具有 RHEL 不包含的缺陷和功能。它还在每天更新,这可能会给平台上的开发人员和测试人员带来不稳定性。 自从我们在 IRIS 2022.1 中添加了对 CentOS 8-Stream 的支持并移除了对 CentOS 7.9 的支持后,我们没有对支持的 CentOS 版本列表进行任何更改 Caché & Ensemble 生产操作系统和 CPU 架构 近期变动 Cache 2018.1.7 增加了对 Windows 11 的支持 InterSystems 支持的平台列表文档 InterSystems 支持的平台列表信息的最终版将发布在InterSystems 支持的平台列表文档中。 IRIS 2020.1 支持的服务器平台 IRIS 2021.1 支持的服务器平台 IRIS 2022.1 支持的服务器平台 IRIS 2022.3 支持的服务器平台 Caché & Ensemble 2018.1.7 支持的服务器平台 以上就是这一次发布的全部信息。如果您想了解更多信息,请联系我们。
公告
Jingwei Wang · 一月 26, 2023

2023 年 InterSystems 开发者工具大赛的技术奖励

以下是 2023 年 InterSystems 开发者工具大赛的技术红利,您可以在投票中获得额外加分: 嵌入式 Python的使用 Docker容器的使用 ZPM 包部署 在线演示 代码质量通过 开发者社区文章 开发者社区第二篇文章 上传 YouTube 视频 第一次贡献 请参阅下面的额外加分项详细信息: 嵌入式 Python的使用 - 3 分 在您的应用程序中使用嵌入式 Python,可以获得 3 分加分。您至少需要 InterSystems IRIS 2021.2及以上版本。 Docker 容器的使用 - 2 分 如果应用程序使用在 docker 容器中运行的 InterSystems IRIS,则该应用程序将获得“Docker 容器”奖励。这是最简单的模板。 ZPM 包部署 - 2 分 如果您为您的全栈应用程序构建和发布 ZPM(ObjectScript 包管理器)包,您可以获得2分加分,以便它可以使用如下方式部署: zpm "install your-multi-model-solution" 已安装的ZPM 客户端命令,请参考: ZPM客户端。文档。 项目的在线演示 - 2 分如果您将项目作为在线演示提供给云,则可额外获得 3 个奖励积分。您可以自己完成,也可以使用此模板- 这是一个 示例。这是有关如何使用它的视频。 代码质量通过且零错误 - 1 分 包括用于代码静态控制的代码质量 Github 操作,并使其显示 0 个 ObjectScript 错误。 关于开发者社区的文章 - 2 分 在 Developer Community 上发表一篇文章,描述您的项目的功能。每篇文章获得2分。不同语言的翻译也有效。 开发者社区第二篇文章 - 1分 您的第二篇文章或其应用的翻译文章可以获得额外的奖励积分。第 3 篇及以上不会带来更多积分,但文章和应用程序的关注度将全部归您所有。 上传 YouTube 视频 - 3 分 制作演示您的产品的 Youtube 视频,每个视频可获得 3 分奖励积分。例子。 首次贡献 - 3 分 如果您是第一次参加 InterSystems Open Exchange 竞赛,可获得 3 个奖励积分! 奖励积分清单可能会发生变化。敬请关注! 祝比赛好运!
公告
Claire Zheng · 五月 31, 2023

欢迎参加InterSystems 2023年度编程大奖赛(Grand Prix)!

Hi 开发者们!一年一度的 InterSystems IRIS 开发者大奖赛已启动! 我们非常高兴地邀请大家参加此次编程大赛——使用 InterSystems IRIS 数据平台构建开源解决方案! 🏆 InterSystems 2023 年度编程大奖赛🏆 时间: 2023年6月12日-7月9日(美国东部时间) 奖金池: 26,000 美元 主题 InterSystems Grand Prix 是我们的年度编程大赛,旨在寻找使用 InterSystems IRIS 的最佳应用程序。我们欢迎您提交任何主题的申请! 欢迎展示任何类型的 InterSystems IRIS API 或数据模型,提交以 InterSystems IRIS 为后端(API 或数据库)的任何应用程序。 欢迎您对去年在 InterSystems 竞赛系列中展示的应用程序进行改进,并将它们提交给大奖赛。 欢迎您提交 100% 全新的应用参与竞赛。 一般要求: 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用可以在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition上运行。 该应用需开源并在GitHub上发布。 该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 每位开发者最多可提交 3 个申请。 竞赛大奖: 1. 专家提名奖(Experts Nomination)- 获奖者由InterSystems专家团选出: 🥇第一名 - 7,000 美元 🥈第二名 - 5,000 美元 🥉第三名 - 3,000 美元 🏅第四名 - 2,000 美元 🏅第 五 名 - 1,000 美元 🌟第 六~十 名 - 200美元 🌟第 十一~二十 名 - 100美元 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇第一名 - 3,000 美元 🥈第二名 - 2,000 美元 🥉第三名 - 1,000美元 ✨ 所有获奖者都将获得Global Masters徽章! 注:如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金 关键参赛节点: 🛠 应用开发&提交阶段: 2023 年 6 月 12 日(美国东部时间 00:00):竞赛启动。 2023 年 7 月 2 日(美国东部时间 23:59):提交截止。 ✅ 投票时间: 2023 年 7 月 3 日(美国东部时间 00:00):投票开始。 2023 年 7 月 9 日(美国东部时间 23:59):投票结束。 注意:在整个参赛期间(开发与投票期间),开发者可持续编辑、提升其应用。 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个! 👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。 请注意,要在您的README文件中标注您的团队成员——社区用户profile 资源助力: ✓ InterSystems IRIS(初学者): 使用 InterSystems IRIS 构建服务器端应用程序 新手学习路径 ✓ ObjectScript 包管理器 (ZPM) 初学者: 如何使用 InterSystems IRIS 的 REST 应用程序构建、测试和发布 ZPM 包 使用 InterSystems IRIS 和 ZPM 的封装优先开发方法 ✓ 如何将您的APP提交给大赛: 如何在InterSystems Open Exchange上发布应用程序 如何把参赛APP提交给大赛 ✓ IRIS 应用程序示例: intersystems-iris-dev-template iris-embedded-python-template interoperability-embedded-python isc-cloud-sql-python-demo rest-api-template integratedml-demo-template iris-fhir-template iris-fullstack-template iris-interoperability-template iris-analytics-template 需要帮助? 加入InterSystems' Discord server频道,或跟帖评论提出您的问题! 期待您的精彩提交!祝好运 👍 参加本次比赛,即表示您同意此处列出的比赛条款。请在继续之前仔细阅读它们。 往期国内作品展示一Intersystems IRIS平台队列监控组件 汇总了一下近年来InterSystems中文社区的成员们往期参赛作品—— iris_log_analytics @银行 郝 message_key_query @王喆 Student score query @yang shijie IRIS-Database-and-Machine-Learning-Based-Approaches-for-Prediction-of-Spontaneous-Intracerebral-Hemo @Fatian Wu AlertDashboard @John Pan HealthInfoQueryLayer @Botai Zhang Dictionary comparison scheme of cache database @Weiwei Yang Create a unified hospital data extraction scheme based on IRIS for Health @Deming Xu RESTFUL_API_For_Hotel_OverBooking_System @jingqi LIu Intersystems IRIS platform queue trend monitoring component @yubo mao
文章
姚 鑫 · 二月 2, 2023

第六十四章 使用 SNMP 监控 IRIS - 扩展 InterSystems IRIS MIB

# 第六十四章 使用 SNMP 监控 IRIS - 扩展 IRIS MIB 应用程序员可以添加托管对象定义并扩展 `IRIS` 子代理为其提供数据的 `MIB`。这不是一个完整的 `MIB` 编辑器或` SNMP` 工具包;相反,它是一种添加简单应用程序指标的方法,可以通过 `SNMP` 浏览或查询这些指标。 注意:对象必须遵循基本的 `IRIS SNMP` 结构,对 `SNMP` 表结构的支持有限(仅支持整数值索引),并且不会创建 `SNMP` 陷阱(请参阅新选项卡类中的 `%Monitor.AlertOpens`) 对管理信息的 `SNMP` 结构有一个基本的了解是很有帮助的。 要创建这些对象,请执行以下操作: 1. 在继承 `%Monitor.Adaptor` 的类中创建 `IRIS` 对象定义。 2. 执行 `SNMP` 类方法以在 `SNMP` 中启用这些被管理对象,并创建 `MIB` 定义文件供管理应用程序使用。实现此目的的方法是 `MonitorTools.SNMP.CreateMIB()`。 该方法为 `%Monitor` 数据库中定义的特定应用程序创建私有企业 `MIB` 树的一个分支。除了为应用程序创建实际的 `MIB` 文件之外,该方法还创建了 `MIB` 树的内部轮廓。 `IRIS` 子代理使用它来注册 `MIB` 子树,为 `GETNEXT` 请求遍历树,并引用特定对象方法以在 `GET` 请求中收集实例数据。 所有托管对象定义都使用与 `IRIS` 企业 `MIB` 树相同的通用组织,即:`application.objects.table.row.item.indices`。所有表格的第一个索引是 `IRIS` 应用程序 `ID`。所有应用程序都必须向 IANA 注册以获得自己的私有企业编号,这是 `CreateMIB()` 方法中的参数之一。 要禁用 `SNMP` 中的应用程序,请使用 `MonitorTools.SNMP.DeleteMIB()` 方法。这会删除应用程序 `MIB` 的内部轮廓,因此 `IRIS` 子代理不再注册或回答对该私有企业 MIB 子树的请求。 # `IRIS SNMP` 陷阱 除了通过 `SNMP` 查询提供的对象数据和指标外, `IRIS` 还可以发送异步警报或 `SNMP` 陷阱。下表描述了 `IRIS` 特定的 `SNMP` 陷阱。 ### IRIS SNMP 通知对象(陷阱) Trap Name (Number)| Description ---|--- irisStart (1) | IRIS 实例已启动。 irisStop (2)| IRIS 实例正在关闭。 irisDBExpand (3)| IRIS 数据库已成功扩展。 irisDBOutOfSpace (4)| IRIS 数据库的未来扩展可能会受到限制;文件系统上的可用空间不足,无法再扩展 10 次,或者可用空间不足 `50 MB`。 irisDBStatusChange (5)| IRIS 数据库的读/写状态已更改。 irisDBWriteFail (6) |写入 IRIS 数据库失败。它包括写入失败的 IRIS 错误代码。 irisWDStop (7)| IRIS 实例的写入守护进程已停止。 irisWDPanic (8) | IRIS 实例的写入守护进程已进入“恐慌panic”模式;也就是说,写入守护进程缓冲区不足,必须将数据库块直接写入磁盘,而无需先将它们提交到写入映像日志 (WIJ) 文件。 irisLockTableFull (9)| IRIS 实例的锁表已满,导致后续 `Locks` 失败。 irisProcessFail (10)|进程异常退出 IRIS(由于访问冲突)。 irisECPTroubleDSrv (11)| IRIS 数据库与此 `ECP` 数据服务器的连接遇到了严重的通信问题。 irisECPTroubleASrv (12)|从该 `ECP` 应用程序服务器到远程 IRIS 数据库的连接遇到了严重的通信问题。 irisAuditLost (13)| IRIS 未能记录审核事件。最可能的原因是审计数据库的空间有问题,这需要操作员的帮助。 irisLoggedError (14)|`messages.log` 文件中记录了一个“严重”错误。此陷阱包括在 `irisSysErrorMsg` 中定义的错误消息。 irisLicenseExceed (15)| 许可证请求已超出当前可用或允许的许可证数量。 irisEventLogPost (16)| 互操作性事件日志中发布的条目。 irisAppAlert (100)| 这是一个通用陷阱, IRIS 应用程序可以使用它通过 SNMP 生成警报。有关如何使用此陷阱的详细信息,请参阅 `%Monitor.Alert.External` 类方法。 下表描述了可以在上表中描述的陷阱中发送的 IRIS 特定辅助对象。 Auxiliary Object Name (Number) |Description ---|--- irisDBWriteError (1)| 数据库写入失败的 IRIS 特定错误代码。可能的值为:``、``、``、` `或 ``。 irisApp (2) |一个短文本字符串(最多 `20` 个字符),用于标识生成(或来源)`irisAppAlert` 陷阱的应用程序。 irisAppSeverity (3)|指示 `irisAppAlert` 陷阱问题严重性的代码。代码可以是 `0`(信息)、`1`(警告)、`2`(严重)或 `3`(严重)。 irisApptext (4) |导致 `irisAppAlert` 陷阱的问题、错误或事件的文本字符串描述(最多 `1024` 个字符)。