扬声器
|
成绩单
|
| 迈克尔·阿克曼 |
克里斯蒂。 |
| 克里斯蒂西班牙 |
早上好,迈克尔,你好吗? |
| 迈克尔·阿克曼 |
你好吗。 |
| 克里斯蒂西班牙 |
太好了 让我关闭我的电子邮件,这样我就听不见了。 |
| 迈克尔·阿克曼 |
是的,我正在简化我的计算机设置,以便什么都没有,什么也没有。 |
| 克里斯蒂西班牙 |
知道我点击了我的工具栏是我吗。 |
| |
认为我拥有一切。 |
| |
周末过得如何。 |
| 迈克尔·阿克曼 |
太好了,你过得怎么样,你的周末过得怎么样。 |
| |
好的。 |
| 克里斯蒂西班牙 |
所以你生活在黑暗中吗? |
| 迈克尔·阿克曼 |
海伦等着我们。 |
| |
好吧,是的,离总部很近,我会去真正的发现峰会,它是。 |
| |
亲自出席。 |
| |
这也很令人失望,但是。 |
| |
是哟嘿嘿。 |
| 克里斯蒂西班牙 |
你好早上好,你好吗。 |
| 约翰 |
做得很好。 |
| 迈克尔·阿克曼 |
我需要在我身后设置一堵博学的墙,就像你在那里一样,约翰。 |
| 约翰 |
我确实点击了。 |
| |
这和丹尼的书在那里,所以你将无法认出。 |
| 克里斯蒂西班牙 |
看起来挺好的。 |
| |
我为上周的混乱道歉,但是。 |
| |
我很高兴能够以虚拟方式与你们见面。 |
| |
既然我是支持新星区域的主要团队的一员,我不应该他们无论如何都应该将我分配给你们。 |
| |
让我们看看,我有一些事情需要完成,你们两个都将显示设置为 2010 年 19 月。 |
| |
我愿意。 |
| 约翰 |
让我仔细检查一下。 |
| 克里斯蒂西班牙 |
惊人的。 |
| |
和 |
| |
如果你的声音很好,我会说没有人戴着标志。 |
| |
确保没有任何可能导致侵犯版权的物品我不知道你的书在那里会有问题。 |
| |
是的,让我们这样做,以防万一。 |
| 迈克尔·阿克曼 |
其中之一是由前 JMP 发现峰会主题演讲者组成。 |
| 约翰 |
谁是。 |
| 迈克尔·阿克曼 |
哦,我不是他来和解说员说起那件事。 |
| 克里斯蒂西班牙 |
哦,是的,我有那本书。 |
| 迈克尔·阿克曼 |
是啊是啊。 |
| 约翰 |
我没有。 |
| |
保存了电子邮件中的任何一个,但我可以继续将其从电子邮件中取出。 |
| 迈克尔·阿克曼 |
我很高兴我的网络摄像头安装在手臂上,在那里我可以像往后一样向我移动它,然后上下左右移动,就像永远摆弄它一样,因为它就像我可以移动它一样。 |
| 克里斯蒂西班牙 |
哦,这是个好主意。 |
| |
从来没有见过我在正确的地方是的。 |
| |
然后每个人都在打他们所有的应用程序展望任何我是团队。 |
| |
像那样。 |
| 迈克尔·阿克曼 |
关闭的团队不应收到任何通知。 |
| 克里斯蒂西班牙 |
您有 30 分钟的时间是正确的。 |
| 迈克尔·阿克曼 |
这是我的理解是的。 |
| 克里斯蒂西班牙 |
你们会吗。 |
| |
理想情况下,我们只想开始并直接完成。 |
| |
你想在你的屏幕上做一个测试共享,所以每当你过渡时。 |
| 迈克尔·阿克曼 |
因为我们要在我的屏幕和你在屏幕之间切换,所以让我先分享我的屏幕。 |
| |
不需要分享声音。 |
| |
所以。 |
| 迈克尔·阿克曼 |
让我们从这里开始。 |
| 克里斯蒂西班牙 |
嗨亚历克斯对。 |
| |
好的。 |
| 迈克尔·阿克曼 |
所以你在我们做了它做了它做了它做了那个然后我们被交给了你。 |
| 约翰 |
是的,我们会自己控制屏幕共享,我们可以为我们使用制作人。 |
| 克里斯蒂西班牙 |
你会你应该这样做是的。 |
| |
哦,你的背景看起来不错。 |
| 约翰 |
谢谢。 |
| 克里斯蒂西班牙 |
我应该有那个。 |
| 迈克尔·阿克曼 |
我想我可以更多,我们可以更统一。 |
| 约翰 |
不,我们应该有自己的个性,我没有。 |
| |
是的。 |
| 克里斯蒂西班牙 |
是的,让我们去找迈克尔。 |
| 约翰 |
是的。 |
| |
我想我不会有太多的屏幕链接,你会做大部分的谈话,然后我们会做屏幕共享,然后。 |
| 迈克尔·阿克曼 |
我不确定在共享屏幕时我们会看到什么。 |
| 克里斯蒂西班牙 |
好吧,所以每当我取回录音时。 |
| |
我得到四个不同的。 |
| |
有一个版本,当它不包含你时,我不确定杰夫·珀金森会编辑所有内容,所以我不知道他会选择哪一座山。 |
| |
我认为他想向演讲者展示。 |
| 迈克尔·阿克曼 |
我在屏幕上看到,我想。 |
| |
顺便说一下,如果您右键单击,您可以关闭图标。 |
| 约翰 |
在设法混淆窗口,它看起来像。 |
| 克里斯蒂西班牙 |
嗯,真的有那么难做吗。 |
| 约翰 |
哦耶。 |
| |
那么什么右键单击并查看和。 |
| 迈克尔·阿克曼 |
是的,他觉得这很酷。 |
| |
因为我不记得确切的位置了。 |
| |
伙计 我从来没有在我的桌面上打开我的图标我只是让东西安装到它上面,所以如果我打开它就像。 |
| 约翰 |
是的。 |
| 克里斯蒂西班牙 |
所以,迈克尔,当你完成后,你会在你的屏幕共享上说好的,把它交给你,然后我们就从那里开始,我们真的不会,我们不会休息,换句话说是的。 |
| 迈克尔·阿克曼 |
你在我的房间里有一个黄色的过滤器。 |
| 克里斯蒂西班牙 |
哦,你有你喜欢的红灯。 |
| 迈克尔·阿克曼 |
虽然是的,但让我变蓝。 |
| 克里斯蒂西班牙 |
还没有投资其中之一,因为我的办公桌很小,而且我在这里有很多空间。 |
| 迈克尔·阿克曼 |
是的,我很早就独立了,我的老板一直在抱怨我的麦克风质量和我的相机质量,所以我很喜欢你给我买一个新的麦克风相机。 |
| 克里斯蒂西班牙 |
对你有好处,我没有得到这个新耳机。 |
| 迈克尔·阿克曼 |
让我快点关上门。 |
| 克里斯蒂西班牙 |
哦,好吧,如果你认识毛茸茸的朋友或跑来跑去的孩子,这很重要。 |
| 约翰 |
是的,也不是很好,是的,我会关上门。 |
| 克里斯蒂西班牙 |
和约翰你在哪里。 |
| 约翰 |
在公司。 |
| 克里斯蒂西班牙 |
比我的好哦。 |
| |
完全。 |
| 约翰 |
哦,你去过。 |
| 克里斯蒂西班牙 |
我有一个朋友结婚了。 |
| |
哥本哈根的一个人来自丹麦,所以我们去那里参观。 |
| |
哦,是的,美丽。 |
| 克里斯蒂西班牙 |
好的,所以,如果我能让你们说出您的公司名称和摘要标题,那就太好了。 |
| |
这不是为了录音这只是为了杰夫的目的,比如确定什么是你的。 |
| 迈克尔·阿克曼 |
名字是肯定的,我的名字是 Michael increment 我在 novozymes 摘要标题就像上传照片一样简单。 |
| |
关于包装和账单的一些事情我忘了确切的了。 |
| 克里斯蒂西班牙 |
没关系。 |
| 迈克尔·阿克曼 |
你们。 |
| 约翰 |
我的名字是联合国。 |
| |
还有,没意思。 |
| 克里斯蒂西班牙 |
我们将录制此内容并将其发布到发现峰会会议上,如果您获得此录制内容的许可,将可供公众查看。 |
| 迈克尔·阿克曼 |
我们做我做。 |
| |
当你去。 |
| 约翰 |
哦,是的,对不起,我只是我的想法。 |
| 克里斯蒂西班牙 |
可以,然后呢。 |
| |
让我先为你关掉相机。 |
| |
没有人想见我。 |
| 克里斯蒂西班牙 |
我想我们已经准备好了,你们准备好了吗? |
| 迈克尔·阿克曼 |
我想我们将从我的屏幕开始。 |
| 克里斯蒂西班牙 |
你还没准备好让我们看看时间是什么。 |
| |
909 所以从技术上讲,你有 939 但是。 |
| |
给或拿保险丝罚款,所以只要你准备好了。 |
| 迈克尔·阿克曼 |
大家好,欢迎收听我们今天关于“你们所有人”的演讲。 这是一个我们在 Novozymes 中构建的插件包管理器,用于在我们的全球公司中自动执行 JMP 插件共享以及脚本的更新和维护。 我是 Michael Akerman,我的联合主持人是 Johan Olsen。 |
| |
今天,我想,我们想和你们谈谈你们,也把这个工具包介绍给你们,让你们中的任何一个对它感兴趣的人...... |
| |
...谁可能想将它用于个人用途或您的组织,知道如何获取此工具包并开始使用它,以及它是什么。 所以我们将首先讨论我们是谁以及我们为什么建立 Y'All ...... |
| |
... Y'All 中的主要功能以及用户体验。 因此,Johan 将介绍用户在使用此工具包时所看到的内容。 |
| |
当用户与其交互时,我们将深入了解 Y'All 工具包背后发生的事情,然后我们将进行总结和回顾,并提供一些有关在您的组织中采用 Y'All 的提示(如果您发现它)对你的目的很有趣。 |
| |
我们是一家名为 Novozymes 的公司的数据科学家。 我的共同主持人是约翰奥尔森。 他是农业和工业生物溶液应用研究领域的数据科学家。 |
| |
我是诺维信同组的高级数据科学家。 如果您想联系 Y'All 或其他任何事情,我们已在此处提供了我们的联系信息。 请随时与我们联系。 |
| |
Johan 的电子邮件地址是 jpko@novozymes.com,他是 JMP 用户社区的 JPKO。 我是 mxak@novozymes.com。 |
| |
Michael Akerman Michael mxak 在 JMP 用户社区,因此,如果您对 Y'All 或改进我们构建的内容以及我们正在使用的内容有任何疑问、跟进或评论,请随时与我们联系. |
| |
我们为诺维信工作。 Novozymes 是一家全球性的生物技术公司。 我们为可持续发展构建生物解决方案... |
| |
...并为全球各行各业提高性能并降低成本。 因此,我们支持农业和生物燃料、家庭护理、食品和饮料、动物保健以及更多行业...... |
| |
...使用这些生物解决方案。 我们在全球拥有 6000 多名员工,在这组员工中,我们拥有数百名 JMP 用户。 |
| |
我之所以提到这一点,是因为我们有大量的 JMP 用户支持,我们与他们一起工作,他们都在使用 JMP 并在 JMP 中构建东西,这确实是你们所有人的灵感来源。 |
| |
作为一家公司,我们的目标是“在不断发展的世界中,我们一起为改善生活找到生物学上的答案——让我们重新思考明天。” |
| |
正如我所提到的,我们在 Novozymes 中有一个非常大的 JMP 用户队列。 |
| |
因此,我们希望让他们更轻松地使用 JMP 脚本和 JMP 插件,并使他们的代码更可重用和更容易发现。 |
| |
所以首先,我们想让更新变得容易。 我们观察到,在 Novozymes 中,人们来回通过电子邮件发送脚本。 |
| |
有在个人网络驱动器上发送 JSL 文件。 他们中的一些人将它放在闪存驱动器上并分发给他们。 我们希望尽可能轻松地分发新的和更新的 JMP 脚本。 |
| |
我们想制作一个保护代码的档案。 我们有很多 JMP 用户,所有这些工作都为组织带来了很多价值。 |
| |
因此,这是一个中央存储库,所有有价值的代码都在其中存储、备份和存档。 |
| |
我们希望随着时间的推移跟踪版本,所以随着脚本的变化和改进,我们希望能够看到这些变化并随着时间的推移跟踪这些变化。 |
| |
我们想让发现和重用脚本变得容易,所以如果您是 JMP 开发人员...... |
| |
...如果您是编写 JSL 脚本的开发人员,您可以找到其他开发人员编写的相关脚本并对其进行改进或... |
| |
以它们为基础,满足您的任何需求。 因此,可以方便地获取这些脚本并基于它们进行构建,还可以方便地在 JSL 中共享、导入和重用组织其他成员认为有用的功能。 |
| |
因此,为了实现这一目标,我们将三个组件放在一起。 我们有一个 Python 构建脚本,我们有一个 GitLab 界面,我们有一个 JSL 加载和更新脚本,所有这些都在这个工具包中协同工作。 |
| |
Python 构建脚本是一个自动脚本,它将在 Python 3 或更高版本中运行,可自动将 JSL 文件解析并构建为加载项菜单结构。 |
| |
它还写入加载项定义文件。 它生成一个导入的自定义函数脚本,将所有这些可重用的实用程序函数添加到 JMP 脚本索引和 JMP IDE,并将其全部压缩到 .jmpaddin 文件中以供用户使用。 |
| |
GitLab 是我们的用户与加载项脚本交互和使用加载项构建器本身的界面。 GitLab 是 GitHub 的开源替代品或竞争对手。 |
| |
我们在 Novozymes 内部发布了这个,它提供了一个非常简单的点击式用户界面,用于将脚本上传到这个中央存储库... |
| |
...所有这些脚本都存储在其中并且构建实际发生的地方。 |
| |
并且 CICD 管道(代表持续集成持续部署)自动执行 Python 构建脚本并通过发行版和测试版渠道分发加载项,因此用户可以... |
| |
...稳定的质量控制版本,或者如果他们是开发人员,他们可以使用此工具包中使用的每个脚本的最新版本频繁快速发布。 |
| |
最后,我们得到了 JSL 加载和更新脚本。 当 JMP 打开并且加载此插件时,... |
| |
...他们可以检查,它将检查所选频道(测试版或发行版频道)上的新版本,并提供下载和更新该插件包的机会。 这也将自定义函数导入到脚本索引中。 |
| |
我们在 Y'All 中从任何 JMP 用户那里获得了超级简单的脚本贡献。 这就像在社交媒体上上传照片一样简单。 |
| |
您进入用户界面,单击上传按钮,几秒钟后它就可以在 Y'All 的测试版频道上使用了。 |
| |
我们有这些脚本的自动版本控制和存储,自动或手动 JMP 插件更新,所以当 JMP 打开时,你们都会提供更新...... |
| |
...或者用户可以选择通过 Y'All 菜单手动更新 Y'All。 |
| |
如果您是编写脚本的开发人员,以便在更新脚本并对其进行更改时获取最新版本的加载项,我们有 Beta 版频道可用于快速构建和测试。 我们有一个用于受控部署和质量控制的发布渠道。 |
| |
这为我们提供了可发现和可重用的 JSL 文件,以便人们可以查看 Novozymes、Y'All 用户提交的脚本的这种文件结构,并查看并查看... |
| |
...找到满足接近他们想要的目的的脚本,并为他们自己的目的修改它们。 |
| |
我们还在脚本索引中添加了便利的实用函数;你可以看到一个小截图...... |
| |
...在左侧和 JSL 编辑器中,因此构建脚本会自动添加可导入和可重用到 JMP 脚本索引的函数,并带有一个漂亮的小文档字符串(如果可用于描述此函数的工作原理和使用方法)它。 |
| |
我确实想花一点时间来确认我们为了演示目的而包含在 Y'All 中的一些代码。 Novozymes 中使用的大部分代码特定于 Novozymes 的系统,不能在公司外部使用。 |
| |
因此,我已经抓取了 JMP 用户社区中已有的一些脚本,并将它们包含在内,作为演示目的。 你可以随意保留这些或从你们所有人中删除它们...... |
| |
...如预期的。 所以我们有一个来自 Xan Gregg 和 Craige Hales 的 json 解析器脚本。 我们在 2020 年 JMP 发现峰会上展示了一个数据清理脚本助手...... |
| |
...由 Jordan Hiller 和 Mia Stephens 撰写。 我们在 2020 年探索峰会上获得了 Heidi Hardner 和 Serkay Olmez 提供的图像表工具。 |
| |
颜色行 selection.jsl 由 Nick Holmes。 Byron Wingerd 的多 Y 轴图表和自动验证设置,我相信,也在 JMP 发现峰会上展示过...... |
| |
...去年由 Mike Anderson 编写,我们为 Riffyn 数据捕获软件 Riffyn Nexus 提供了一套可导入的功能... |
| |
...与他们的 API 一起工作,由 Riffyn 编写,并在获得许可的情况下从他们的 Riffyn 工具 JMP 插件中获取。 这是我们在 Novozymes 中大量使用的工具。 我们包含此代码是因为如果还有其他 Riffyn 用户,您也可以随意使用此代码。 |
| |
因此,除此之外,我们想跳入一些现场演示,从用户体验以及用户在使用 Y'All 工具包时看到和执行的操作开始。 为此,我将把控制权交给我的共同主持人 Johan。 |
| |
约翰,你静音了。 |
| 约翰 |
谢谢你,迈克尔。 |
| |
对于那个很抱歉。 让我分享我的屏幕。 |
| |
你看到这个了吗? |
| 迈克尔 |
是的。 |
| 约翰 |
好的。 |
| |
正如迈克尔所说,我将带您了解使用 Y'All 的用户体验。 |
| |
成为 Y'All 的用户真的是一个三层的事情。 我们的绝大多数用户基本上都把它当作一个内置的 JMP 平台来使用。 他们... |
| |
...指向并单击脚本,然后按照预期目的运行它们。 我们还有一个相当大的用户群,他们正在为脚本做出贡献,也正在经历如何... |
| |
您可以贡献简单的脚本。 然后我们有一小群开发人员和维护人员(??)做更高级的事情,我们也会尝试拉一点。 |
| |
但首先,Y'All 的真正简单用法。 安装它就像单击此链接到在我们的 GitLab 存储库中创建的构建工件 (??) 的链接并下载 JMP 编辑文件并使用 JMP 运行它一样简单。 |
| |
现在这提示我进行更新,这次我打算取消,但你可以在我的菜单栏上看到,我有 Y'All 菜单...... |
| |
...迈克尔提到的一些演示脚本。 我不会详细介绍这些脚本中的任何一个,因为它们实际上并不是 Y'All 软件包的一部分,而只是出于演示目的而包含在内。 但是我要做的就是尝试进去然后…… |
| |
...哎呀,启用,对不起,这已经启用了,它出现了。启用 beta 测试,这样,既然我们开始创建一些东西,我们就可以立即看到它们。 |
| |
大多数用户将禁用 Beta 测试,并且在主要版本(每几周一次)之后打开 JMP 时会提示他们更新。 但是对于启用了 beta 测试的用户来说,beta 分支更新的时间可能是一天几次到一周几次。 |
| |
所以这基本上就是普通用户的内容。 |
| |
如果你想为此贡献脚本,有几种方法可以做到。 一件事是通过 GitLab UI。 现在我们刚刚看到的菜单结构反映在... |
| |
... ...中的目录结构 |
| |
...存储库。 所以创建一个新... |
| |
...菜单或子菜单就像创建一个新目录一样简单。 在这里,让我们称之为... |
| |
...“演示” |
| 约翰 |
并添加它。 |
| 约翰 |
如果我们想添加一个脚本,我们可以简单地在 JMP IDE 中创建它,因此您想要制作一个非常简单的。 |
| |
你好,世界。 |
| |
这将足够好。 实际上还有一些额外的细节,就是以一种很好的方式命名菜单项以获得工具提示,我们实现了 [???] 或代码魔术,也就是说,如果您从编写注释掉开始,哎呀。 |
| |
和你。 |
| |
菜单名称。 |
| 迈克尔·阿克曼 |
你们。 |
| |
菜单名称。 |
| 约翰 |
你们所有的菜单名称 |
| 迈克尔·阿克曼 |
老习惯。 |
| 约翰 |
让我们称之为你好。 然后是你们的工具提示。 |
| |
好吧,让我们继续保存这个。 |
| |
到哪里,我想,让我们看看,桌面。 然后在这里上传。 |
| |
是考试吗? |
| 迈克尔·阿克曼 |
这是脚本,但应该没问题。 |
| 约翰 |
现在... |
| |
一旦我们上传了这个文件,我们就在这个自动化的 [听不清] 中触发了一个管道。 |
| |
[音频不清晰] 系统,这是先克隆存储库,然后... |
| |
...然后构建加载项,这应该会在重新启动 JMP 时提示, |
| 约翰 |
并更新所有编辑。 |
| 约翰 |
一旦我们选择更新,演示菜单就会出现,其中包含测试脚本。 |
| |
所以这是向 JMP 贡献脚本的最简单方法。 如果您熟悉使用 Git,还可以使用更经典的 Git 工作流程。 只是要在这里打开一个批处理窗口。 就让我... |
| |
我们可以克隆存储库。 让我们回到... 我们在此处展示的一些内容将特定于使用我们在此处使用的 GitLab。 |
| |
但在其他远程存储库编码、代码托管系统中也会类似。 |
| |
所以现在我们正在克隆存储库,我们将在本地系统中拥有一个完整的存储库镜像。 和之前类似,我们可以看到这里镜像的目录结构,我们试试看能不能创建一个... |
| |
另一个脚本。 |
| |
为了这。 Y'All 菜单名称改进 |
| |
你好。 |
| |
说我们愿意,也许这一次.. |
| |
...改为打开提示。 |
| |
它说你好世界。 |
| |
现在,这一次,我们可以使用 JMP 附带的内置函数之一。 让我们转到脚本索引,我们可以... |
| |
...搜索Y'All utils。 |
| |
并找到 errorModal 函数,它带有一个关于如何使用它的小文档字符串。 |
| |
而且它已经被进口了所以...... |
| |
你们所有的 utils errorModal |
| 约翰 |
我们可以打个招呼,世界。 |
| 约翰 |
让我们看看这个。 |
| |
进入我们的存储库... |
| |
...在演示下。 并推送代码。 |
| |
现在代码被推送到远程存储库,触发 CICD 管道,并且... |
| |
...几秒钟,应该可以看到正在运行的管道和... |
| |
...很快就好了。 |
| |
还没开始呢 |
| |
可能我有点... |
| |
...不耐烦。 我们走了。 |
| |
果然,如果我们进去检查 Y'All 的更新,我们会看到一个新的更新。 是这样吗? |
| |
我们会选择更新... |
| |
...加载项,现在演示将有我们改进的 hello world。 |
| |
好的,所以我认为这就是我为用户演示所做的。 |
| 迈克尔·阿克曼 |
谢谢,约翰。 如果你同意的话,我会收回屏幕共享。 |
| 约翰 |
是的。 |
| 迈克尔·阿克曼 |
当这种用户体验发生时,我想深入了解幕后发生的事情。 所以我将在 Visual Studio Code 中查看这段代码。 |
| |
一旦你下载了 Zip 文件,你就可以在任何你想要的地方查看它,我将很快进入 Zen 模式,让它更容易看到。 开始了。 |
| |
所以这是这个 GitLab CICD 管道,每当 Johan 上传该脚本时,它就会运行。 于是他进入了 Git 仓库…… |
| |
...他点击了加号按钮上传了一个脚本,然后启动了这个 CICD 管道。 所以这是一个小脚本,它定义了服务器应该如何应对这种情况。 |
| |
一个准备步骤和一个构建步骤...... |
| |
...在那里它将 Git 存储库和其中的所有文件(包括 Johan 的新脚本)克隆到工作目录中,其中... |
| |
...这个称为运行器的处理模块可以处理该代码。 然后它构建它,所以它运行这个构建阶段,在那里它...... |
| |
CDs -- 改变目录 -- 进入那个构建目录并运行那个 Python 构建脚本。 所以这真的很容易。 它将所有这些新文件克隆到一个工作文件夹中,移动到该文件夹中并在 Python 3 中运行 Python 构建脚本。 |
| |
那么让我们来看看那个 Python 构建脚本。 我要控制选项卡。 这是 build_yall.py。 |
| |
所以这是很多代码,但是如果您正在查看此内容并希望获得有关如何查看它的指南,请一直向下滚动到此流程函数。 它说def过程。 |
| |
这是构建 Y'All 并逐步完成它的主要代码。 因此,我们将在进行时查看此内容。 |
| |
发生的第一件事是 Python 脚本构建了一个菜单层次结构。 所以让我们来看看。 它正在做的是制作一个嵌套的 Python 字典,它在 src/scripts 下查看该文件夹结构... |
| |
...并将它找到的所有 JSL 文件提取到一个字典中,该字典包含该 JSL 文件的名称、工具提示和文件位置。 所以它基本上一次一个文件夹构建嵌套字典,然后爬行。 |
| |
然后我们检查每个 JSL 文件的命令名称。 我们尝试解析这些文件并查找您看到 Johan 放在脚本顶部的 Y'All 菜单名称和 Y'All 工具提示以... |
| |
...在 JMP 的加载项菜单中定义按钮名称应该是什么以及工具提示应该是什么。 每当你们安装时,你们都会显示菜单,如果你将鼠标悬停在它上面,应该调用什么以及工具提示应该说什么。 |
| |
如果它找不到 Y'All 菜单名称或 Y'All 工具提示类型的魔法命令,它只会退回到没有工具提示的脚本名称。 所以 test.jsl 会变成 test,就像你从 Johan 看到的那样。 |
| |
菜单中的命令字典按字母顺序排序,以便于查找内容,但帮助和设置菜单除外,它会弹出到顶部以使其始终位于菜单顶部。 |
| |
因为帮助和设置很重要。 然后将所有这些信息写入 JMPcust 文件。 |
| |
因此,.jmpcust 文件本质上是一种标记语言文档,它为 JMP 定义了如何... |
| |
菜单按钮应该是什么,菜单本身应该在哪里,工具提示应该是什么,都在这个.jmpcust文件中定义。 |
| |
我要控制标签到你们所有人,所以你可以看到它的样子。 这实际上是一堆关于菜单是什么的定义...... |
| |
..以及菜单的名称以及它们包含的内容。 所以我们可以看到帮助和设置菜单包含检查 Y'All 更新、关闭 Beta 测试模式等等。 |
| |
因此,Python 脚本将使用此 write jmpcust file 函数自动编写该文件。 |
| |
然后我们将编写我们的加载项定义文件。 所以 addin.def 和 version.txt。 Addin.def——我将切换到一个例子——有点…… |
| |
... JMP 用于识别加载项和查找版本号的描述,以及支持的最低 JMP 版本。 |
| |
我们说12。 这对我们来说是一种随意的选择,只是为了不必担心 12 点之前的事情。 如果您自己开始使用它,您可以在 Python 代码中更改它。 如您所见,此处还定义了插件版本。 |
| |
我们将其写入一个名为 version.txt 的文件中,这样您刚刚在 addin.def 中看到的相同整数也会出现在 version.txt 中。 |
| |
原因是这是一个很好的小文件,我们可以远程读取。 我们可以在服务器中通过 HTTP 在 JMP 中打开... |
| |
...并在该 version.txt 文件中非常快速地查看该版本号,以与我们当前的版本进行比较。 因此,如果我们当前安装的版本与 version.txt 不匹配... |
| |
...这意味着我们需要更新,或者我们至少可以更新。 我们使用的版本号是它在 UTC 时区中运行的日期时间。 |
| |
我们将其转换为 1970 年以来的基本秒数。 所以它是一个整数,可以转换回日期时间格式。 |
| |
所以我们可以在整数的基础上比较这两个数字,这很好。 我们可以很容易地看到它们是否大于或小于彼此,我们仍然可以将其转换回日期。 因此,对于我们来说,在 JMP 中存储该版本号是一种非常有效的方法。 |
| |
最后。 |
| |
接下来我们要做的事情——所以我们已经编写了那些添加深度文件——我们创建了一个自定义函数脚本。 所以这有点奇怪,有点难以解释。 我会尽量做到快速简洁。 |
| |
JMP 有两种定义自定义函数的方法。 一个是在 JMP 脚本语言中使用名为 function 的函数,它的作用是什么 - 我将切换到 utils.jsl 和 Y'All 的 importables 子目录。 |
| |
Function 定义了一个可以从其他位置使用和调用的自定义函数。 您可以使用命名空间定义它。 所以在这种情况下,我们有命名空间 Y'All utils... |
| |
...使用函数名称重新编码 if。 它需要这些参数,我们有这个文档字符串和这里写的这个函数代码。 |
| |
在 JSL 中编写自定义函数的第二种方法是使用新的自定义函数 function,这与 function 不同。 我相信这是添加的和 JMP 14。 |
| |
新的自定义函数的作用是将函数添加到 JMP 脚本索引和 JSL IDE 中,以便非常容易地使用该函数并在其他地方的文档中重用它。 |
| |
所以函数的优点是它一直工作到我什至不知道JMP是什么版本...... |
| |
...在我使用 JMP 之前。 新自定义函数的优点是它更健壮一些,您可以获得文档和 JMP 脚本索引以及在 JSL IDE 中对其进行着色并获得... |
| |
...编写代码时的提示。 所以我们喜欢新的自定义函数,但我们希望在 JMP 14 之前支持 JMP。 所以构建脚本... |
| |
...在这里,将基本上解析 importables 目录,查找与函数 function function 匹配的任何函数定义... |
| |
...在带有文档字符串的 JSL 中。 因此,它将尝试解析斜线星号分界之间的文档字符串,并将其拉入新的自定义函数中。 所以你可以在这里看到一个例子。 |
| |
我们使用 recode if 函数,现在将其自动重写为 Y'All utils 命名空间中名为 recode if 的新自定义函数。 |
| |
我们有一个原型、一个描述和一个脚本索引类别,所有这些都显示出来。 因此,JMP 开发人员可以自动使用所有这些内容。 因此,您可以使用 JSL 中较旧的函数来编写内容,并且仍然可以获得此 JMP 脚本索引... |
| |
...能力,通过自动使用 Y'All 构建脚本。 在此处向下滚动到我的流程代码。 |
| |
所有这些都写好了,我们现在构建加载项。 JMP 插件使用经过修改的 Zip 格式。 因此,我们使用 Python 3 将其压缩在一起,将其重命名为 YALL.jmpaddin,现在可以在 CICD 运行程序工作的工作目录中找到它。 |
| |
因此,在此构建脚本完成后,此 CICD 管道的最后一步是进入该工作目录并上传工件。 |
| |
构建工件是 GitLab CICD 的概念,我们将这两个文件 YALL.jmpaddin 和 version.txt 上传到服务器,并通过特定的 URL 使它们可用。 |
| |
所以这个 URL 总是一致的,并且它与我们在 GitLab 中运行它的分支相关联,所以如果我们使用 beta 版本而不是主要发布版本。 |
| |
现在,在 JMP 中——我要跳过,哈!... |
| |
...自动升级.jsl。 这是我们检查加载项新版本的地方。 当 JMP 加载时,你们将运行这个自动升级脚本,... |
| |
...在 GitLab 存储库中查找那些新版本。 你可以在这里看到我们加载了我们的 beta 标志,无论是在 beta 模式还是主模式。 |
| |
我们查看该模式的特定频道。 所以我们拉... |
| |
...来自基于该频道选择的特定 URL。 因此,如果我们处于 Beta 模式,它将查看 Beta 频道。 如果我们处于主模式,它将查看主通道。 我们寻找 YALL.jmpaddin 文件和 version.txt |
| 迈克尔·阿克曼 |
现在我们要将该版本号与我们安装的版本号进行比较,如果不同,请向用户请求更新。 弹出一个你在 Johan 的屏幕上看到的对话框...... |
| 迈克尔·阿克曼 |
...询问他们是否需要更新并告诉他们该版本号是什么。 他们可以选择或不选择。 |
| |
所以。 |
| |
这就是全部。 所有这些都发生在幕后,对于用户而言。 他们使用加号按钮通过 GitLab UI 上传脚本来上传文件并构建新的... |
| |
...JMP 插件,即 Y'All JMP 插件,并使其可供连接到同一存储库的其他用户使用。 |
| |
这一切都发生在幕后。 对于用户来说,就像从 JMP 中的红色热点保存 JMP 脚本并将其上传到 GitLab 存储库一样简单。 |
| |
所以我想回顾一下 Y'All 的功能。 |
| |
我们有非常简单的脚本贡献。 如您所见,您有一个很好的用户界面来上传文件、上传 JSL 脚本并使其可用。 |
| |
随之而来的是自动版本控制和代码归档。 因此,由于这一切都是通过存储在 Novozymes 服务器上的中央 GitLab 存储库发生的,所有这些都被跟踪和存储...... |
| |
……永远。 自动更新,因此开发人员可以非常轻松地向用户发布脚本,并且他们始终可以拥有最新版本... |
| |
...那些运行正常且质量受控的脚本。 我们有测试版和发布渠道。 |
| |
因此,beta 频道将基本上立即构建,在新脚本击中 Y'All 后的几秒钟内可用,并经常更新。 释放通道将是一个更缓慢的受控释放结构。 我想谈谈我们如何做到这一点。 |
| |
您可以在此处查看我们的 GitLab 存储库中的分支结构。 我们有一个包含大量更新的 beta 分支。 我们有一个发布分支。 我们有一个主分支。 我们在诺维信做什么——这完全取决于用户的选择—— |
| 迈克尔·阿克曼 |
...当它处于我们想要发布它的状态时,我们采用这个 beta 分支。 我们在 beta 和 release 之间打开一个合并请求,并将其移动到 release 分支。 这将基本上冻结屏幕发布分支...... |
| 迈克尔·阿克曼 |
...在我们这样做的代码版本中,这将代码锁定在此发布分支上。 |
| |
测试版仍然可以改变。 人们仍然可以在测试版中添加脚本和更改脚本。 但是现在发布被冻结了。 我们会进行质量检查,当我们准备好,当我们对它的状态感到满意时...... |
| |
...我们将其发布到 main 并将其合并到那里,现在 Y'All 的主要分支用户可以使用它。 |
| |
我们有可发现的代码。 一切都在中央存储库的文件结构中可用。 开发人员可以查看脚本并... |
| |
...找到类似的以建立和改进。 我们已经将实用函数自动添加到脚本索引中,自动供开发人员使用,以便他们可以重用代码块,例如重新编码,如果... |
| |
...或一些数据库查询和类似的东西,我们也作为演示包括在内。 所以,如果你翻阅你们所有人...... |
| |
...安装了 Y'All 的 JMP 脚本索引中的命名空间。 您会看到,我们已经包含了一些 postgres 数据库查询和 postgres 数据库工具,以演示我们如何使用它们。 |
| |
所有这一切都是通过在 JMP 中使用用户创建的 JSL 脚本开始的,他们希望与 Y'All 用户群中的其他人共享。 |
| |
他们进入 GitLab。 并在用户界面中将其上传到与他们在 Y'All 中想要的菜单位置匹配的子目录中,因此如果他们想要在演示中演示测试... |
| |
...他们会把它放在 src slash scripts slash demos slash demos 子目录中。 一旦他们这样做了,一个自动构建管道就会启动,启动 Python 构建脚本,该脚本解析结构并构建插件...... |
| |
...添加并将其重新上传到 GitLab 服务器。 然后 JMP 会找到该新更新并自动提供下载它并更新 JMP 中的 Y'All 插件。 该脚本可在几秒钟内向该 Beta 频道的用户提供。 |
| |
所以我们希望您对 Y'All 感到兴奋。我们希望您对自己或在您的组织中使用 Y'All 感兴趣。 如果您愿意,我们想就如何开始提供一些提示。 |
| |
如果您在 JMP 用户社区中观看此视频,则在 JMP 用户社区中发布的 Zip 文件(它应该在同一页面上)包含开始使用所需的所有元素。 其中一些需要修改。 其中一些是供您使用的演示代码。 |
| |
但请随意下载并查看。 该 Zip 文件中的 Python 构建脚本基于原生 Python 3 库构建。 在我们的构建系统上除了 Python 什么都没有安装。 它应该在任何标准的 Python 3 安装上运行。 |
| |
我们使用 GitLab for CICD 进行的中央存储库存储和自动化,用于持续集成和部署,可通过其他提供商获得。 GitLab、GitHub、Azure、AWS 都有类似的实现。 |
| |
那里有一个巨大的选项生态系统,因此实施细节将特定于您的组织。 |
| |
不幸的副作用是 CICD 管道文件 gitlab-ci.yml 将需要修改,如果你想在你自己的系统上以自动方式运行它。 它不会像在您的系统上那样工作,除非您是 Novozymes 的员工。 |
| |
我们的实用程序函数中反映我们内部 beta 数据库的任何连接字符串都已替换为 ODBC 我的下划线连接下划线字符串。 |
| |
如果您想使用这些函数中的任何一个,您必须进入工作目录中的代码并更改这些字符串以反映您的数据库。 |
| |
所以,再一次,我们希望你对你们感到兴奋。 我们希望你对你们感兴趣。 如果您有任何反馈、问题、意见,请随时联系我或约翰... |
| |
...跟他们。 如果您使用此代码并对其进行改进或使用此工具包并以有趣的方式使用它,我们也会喜欢您所做的任何贡献。 谢谢你。 |
| 克里斯蒂西班牙 |
好吧,那太好了。 |
| 迈克尔·阿克曼 |
时间。 |
| 克里斯蒂西班牙 |
合理的完美是的。 |
| 迈克尔·阿克曼 |
可以。 |
| |
约翰说没有 JMP 想要,这并不重要。 |
| 克里斯蒂西班牙 |
你懂。 |
| 迈克尔·阿克曼 |
我觉得,大多数人可能不会抓住它。 |
| 克里斯蒂西班牙 |
作为一个新词,我喜欢它。 |
| 约翰 |
所以我们被告知不要使用它,所以我们不得不重命名这个东西,而我因为没有删除我拥有的版本而被抛弃。 |
| |
以前安装过。 |
| |
所以当我意识到我已经处于测试阶段时,它有点让我失望,然后我只是。 |
| |
无论如何。 |
| 克里斯蒂西班牙 |
是的,我认为这很好,但现在这很棒非常有趣,我认为人们会喜欢看到这一点,所以我们非常感谢你们的参与。 |
| |
正如我所说,我将上传视频供杰夫编辑,我不确定何时完成,但是。 |
| |
不管怎样,你们会看到那个十月的一切,但如果有什么事情发生,我肯定会让你们知道。 |
| |
再次感谢,如果。 |
| 约翰 |
你有一个关于正常 JMP 的新品种。 |
| 迈克尔·阿克曼 |
关于你说你在别的地方只是有点。 |
| |
是的。 |
| 约翰 |
你们所有的目录。 |
| 克里斯蒂西班牙 |
是的,非常感谢,我知道了。 |
| |
为疾病做了很多工作,我们很感激。 |
| 迈克尔·阿克曼 |
我们的荣幸。 |
| |
感谢。 |
| 迈克尔·阿克曼 |
移动后很快就上来了。 |
| 克里斯蒂西班牙 |
是的,伙计,很高兴见到你们俩。 |
| |
希望下次再来。 |
| |
至少和迈克尔会面,约翰,我想在那边见见你,但是。 |
| |
是的。 |
| 迈克尔·阿克曼 |
你总是知道他是否在,特别是如果他在每次峰会上发表演讲,或者是过去的事情,因为在罗利所有事情都在同一周开放,所以你可以像整整一周一样。 |
| |
计算会议。 |
| |
并看到一群当地本地员工。 |
| 约翰 |
可能更容易争论旅行预算,然后是的。 |
| 克里斯蒂西班牙 |
二对一的权利。 |
| |
是的。 |
| 约翰 |
好的。 |
| 克里斯蒂西班牙 |
好的,你们周一度过了美好的一周,谢谢。 |
| |
你也可以很快再和你说话。 |
| 约翰 |
再见。 |
| |
再见。 |