| 扬声器 |
文字稿 |
| 约翰·摩尔 |
大家好,感谢收看。我叫约翰·摩尔,今天我们将讨论 Lupine,这是我开发的一个用于创建、发布、管理和监控 JMP 插件的框架。 |
| |
首先简单介绍一下我自己。我叫约翰·摩尔,拥有工程和管理学位,但其实我骨子里是个数据极客。过去19年,我一直在礼来动物保健公司担任分析师。 |
| |
我有一个儿子,一个丈夫,一条狗,目前还有大约 8 万只蜜蜂。 |
| |
所以,你知道,我们是怎么走到这一步的?在礼来公司,我们有技术顾问(TC),他们通常是兽医或营养学家,遍布全球,我们让他们使用 JMP 和 JMP 脚本。 |
| |
而且,由于这些培训中心地处偏远,很多培训中心只能断断续续地接入互联网。 |
| |
所以当时的情况是,脚本都是临时编写的,在人与人之间传递。没有版本控制。根本不知道谁在使用哪个脚本。 |
| |
脚本发布困难,脚本更新也很困难。所以我创建了 Lupine,希望能帮助我们实现脚本标准化、版本控制,让我们能够轻松了解谁在做什么,谁在使用哪些脚本。 |
| |
我们可以轻松地分发更新,而且作为额外奖励,我们还在公式编辑器中添加了一些公式。 |
| |
所以我们来看看 Lupine。好的,安装 Lupine 之后,你会发现它很简单。JMP 上只有一个 Lupine 菜单,里面只有一个“检查更新”的选项。 |
| |
当你查看更新时,你会看到它会列出所有由 Lupine 控制的插件。 |
| |
如果不是最新版本,它会显示“已是最新版本”。如果是最新版本,它会显示“好的”,很简单。这里列出可用的插件。您是否拥有最新版本? |
| |
另外,在公式编辑器中,因为我们发现自己经常使用这些特定的公式,比如 month/year,它会返回月份的第一天。 |
| |
该日期所在的月份已经过去了。我们有年份、季度和季节。此外,我们还有周计数器,您可以在其中执行诸如一周开始、一周结束等操作。 |
| |
Lupine 还具备使用日志功能。因此,每当用户使用 Lupine 管理的脚本时,我们都会创建一个日志文件。这样我们就能知道是谁在什么时间戳使用了哪个脚本和插件。这确实有助于我们判断哪些脚本有用,哪些没用。 |
| |
假设你想在你的组织中安装 Lupine。 |
| |
好的,第一步我们要下载一些压缩文件。我们有一个 Lupine 压缩文件、一个 Lupine 管理器和一个 Lupine 模板。 |
| |
我们还有 Lupine 的示例。所以我建议你找个文件夹,把这三个文件都下载进去。 |
| |
作为管理员,接下来你需要决定的是,网络文件夹应该放在哪里?对于 Lupine 来说,有两个网络文件夹非常重要。 |
| |
首先,您需要在仓库文件夹中添加插件。这个文件夹将包含您所有的插件,以及包含这些插件元数据的 PublishedAddins.jmp 文件。 |
| |
我们需要考虑的另一个文件夹是中央日志文件夹。这个文件夹将存放所有用户每次执行 Lupine 管理的脚本时上传的日志文件。 |
| |
所以您可以看到,这里展示了我们已发布插件文件中所有插件的示例。以下只是一个示例: |
| |
日志文件。每个日志文件都有一个唯一的 ID。我们稍后会详细讨论这一点,但每次我们获取这些文件时,只会获取最新的文件,这样您就不必每次都下载所有文件了。 |
| |
所以,一旦你决定了要把这些文件放在哪里,接下来我们就需要告诉 Lupine 这些文件在哪里。方法是,在你解压缩 Lupine 文件之后,进入那个文件夹。 |
| |
在“添加管理”子文件夹下,你会看到一个名为 setup 的文件,这就是 setup 文件中需要查找的部分。 |
| |
在这里,您可以定义插件仓库路径和中央日志路径。在生产环境中,您需要配置这些网络位置,但为了方便演示,我只在自己的机器上创建了这些路径,您可以在这里定义您的网络路径。 |
| |
完成上述步骤后,现在就可以为您的组织构建 Lupine 了。在 Lupine 文件夹中,您需要下载所有内容,但 gitattributes 文件除外。我使用 GitHub Desktop 来管理我的项目。 |
| |
脚本。我强烈推荐它。它让我的生活变得轻松多了。但是你不需要把这些文件放到你的脚本里,所以除了 gitattributes 文件之外,把所有文件都复制出来。你要右键点击这些文件,选择“发送到”和“删除”。 |
| |
将这些文件发送到一个压缩的 zip 文件夹。这将创建一个包含所有这些文件的 zip 文件。JMP 插件文件实际上就是 zip 文件。所以我们要做的就是将其重命名为 Lupine.jmpaddin。 |
| |
命名完成后,只需双击它,即可完成安装。安装完成后,Lupine 就会出现在你的电脑上。我们暂时还不用对它进行任何操作,但它已经安装好了。如果你查看菜单栏,就能看到 Lupine。 |
| |
接下来,我们来谈谈 Lupine Manager。这是一个独立的插件,专为管理员设计。 |
| |
并且需要跟踪和更新组织内的所有加载项。因此,它可能不会安装在普通用户的计算机上,原因如下: |
| |
它没什么用。它提供的是一系列工具,可以帮助你(作为管理员的你)管理插件。 |
| |
打开 Lupine Manager 后,首先要做的就是向下滚动到设置,然后我们要说的是…… |
| |
我们的唯一用户文件,其中包含您组织中的所有唯一用户和日志数据。 |
| |
好的,唯一用户表关联用户 ID。所以我们正在从你的电脑上获取用户 ID。 |
| |
身份标识,但通常这些标识并不能说明什么特别有意义的信息。例如,我的标识符是 00126545。 |
| |
我们想把“John Moore”这个名字链接到这里。这就是用户唯一身份统计功能的作用。日志数据文件中每条日志都对应一行。这是我们之前创建的所有日志文件的汇总。我们可以尽情地分析这些文件。 |
| |
好的,假设你想开始使用 Lupine Manager。 |
| |
首先,你需要告诉它你想管理哪些加载项。为此,我们将进入“创建加载项”菜单,然后向下滚动到“管理可用加载项”菜单。 |
| |
然后这里会是空白的。找到这里后,点击“添加加载项”,就可以选择包含要管理的加载项文件的文件夹了。 |
| |
完成之后,你会看到这些插件列在可用插件列表中,点击“构建插件”。好的,这里你有两个选项。“构建插件”只是创建插件。 |
| |
脚本所在的文件夹里会添加一个附加文件,所以这很适合用来测试。我想快速构建一个版本,以便测试它是否有效。 |
| |
“构建并发布”操作与此相同,但它还会将该插件复制到您的插件库文件夹,并更新已发布的插件文件。因此,当您完成测试,准备好将其分发给公司时,就可以发布了。 |
| |
现在,如果您想导入所有这些日志数据,您只需转到导入和处理日志数据,它就会导入所有新的日志文件并将它们添加到您的日志数据文件中。 |
| |
这里有一个用户概览,它以表格的形式快速列出哪些用户正在使用哪些插件。这样您就可以快速了解…… |
| |
我的主要用户分别使用了哪些插件?例如,我们可以看到,Lupine 和 LupineManager 使用率很高;LupineExample1 使用率也很高;而 LupinExample 的使用率则相对较低。 |
| |
好的,假设您已经安装了 Lupine 和 Lupine Manager。现在您想在 Lupine 下管理一些插件。那么我们来谈谈具体步骤。 |
| |
首先,你需要找到我们提供的插件模板文件,也就是 Lupine 模板文件,并将其复制到某个地方。这个文件包含了所有必要的脚本以及让 Lupine 与你的插件协同工作的所有要素。所以,请复制它。 |
| |
接下来,我们将逐步完成一些步骤。首先,我们将编辑 addin.def 文件。 |
| |
我们将创建您插件中所需的所有脚本,或者如果您已有脚本,我们将对其进行更新。 |
| |
构建插件后,我们将自定义菜单,使其外观正确。假设您点击菜单,它看起来符合您的预期。菜单修复后,我们将再次构建插件进行测试,确保其显示正常。测试完成后,我们即可发布。 |
| |
所以我们来谈谈addin.def文件;addin.def实际上是一个非常小的文本文件,但每个插件都需要它。它包含了插件的核心重要信息。 |
| |
它的ID和名称是什么?你需要进入编辑页面,将其更改为你的插件名称。 |
| |
而且这只需要操作一次。完成此操作后,以后就不需要再更改插件的设置了。所以只需设置一次即可。 |
| |
接下来,你需要决定我要在这个插件里放哪个脚本?现在我已经创建了一个, |
| |
Lupine 生成日志文件。 |
| |
这段代码会为所有使用 Lupine 的插件创建日志文件。它实际上会创建日志,并允许你进行版本监控。 |
| |
所以我建议把这个头部信息放在所有文件的开头……也就是你要使用的脚本文件的开头,因为正是这个头部信息才能让你进行监控。 |
| |
现在,你的所有脚本都已放入其中,下一步就是将菜单文件设置为你想要的样子。目前,它只显示“模板”。 |
| |
我们先来构建这个东西。就像我们之前构建 Lupine 一样,我们选中除 gitattributes 文件之外的所有内容,右键单击,压缩,然后更改名称。 |
| |
我们也要做同样的事情。但这样一来,菜单就会出错,因为现在它仍然使用的是模板菜单。所以我们需要进去更新那个模板菜单,让它符合我们的需求。 |
| |
好的,安装完成后,您会看到这里的新脚本、新插件和模板。我们右键单击。 |
| |
打开菜单,你会看到一个很长的列表。在列表的最底部,你会看到“自定义”,我们只需要进入“菜单和工具栏”即可。好的,进入之后你会看到类似这样的界面。 |
| |
首先,我们需要告诉 JMP 我们想要编辑什么。我们想要编辑与我们特定插件配套的菜单,它现在被称为模板。 |
| |
所以,我们点击这个更改按钮。点击它,这里会出现很多选项。但我们要做的是点击这里的“JMP 插件”单选按钮,然后向下滚动…… |
| |
我们感兴趣的插件。好的。这里我只是把它当作模板,但如果你……因为你已经在 addin.def 文件中修改过了,那它就会变成那样。 |
| |
完成之后,你就会看到一些零碎的东西。 |
| |
属于您的插件的内容将在左侧以蓝色显示。 |
| |
所以,我们要对这段内容进行编辑和修改,使其成为我们新插件想要的样子。 |
| |
所以我们来看一下。我把“关于”部分作为标准脚本包含在“新增功能”中了,但当你看到它时,你会发现它指向的是…… |
| |
这个模板插件不是你想要的。你想要的是自定义插件名称。所以我们要做的就是点击这个文件中的“运行插件”按钮。 |
| |
点击“使用加载项”文件夹,然后选择所需的加载项。这样就能将 JMP 指向您刚刚创建的新脚本。然后,我们可以点击“浏览”。 |
| |
然后我们可以浏览、导航,找到我们需要的特定脚本,并说:“不,不,我不想在模板中使用它。我想让你在我的新插件中使用它。” |
| |
同样,我们也可以对菜单中的“新增菜品”进行同样的操作。 |
| |
完成这些之后,剩下的就是添加我们想要的其他内容了。 |
| |
如果你在蓝色区域上单击鼠标右键,你会看到“插入在……之前”、“插入在……之后”等选项,你可以在这里添加或删除菜单中的内容。 |
| |
所以你可以添加各种内容,其中大部分是命令。你还可以添加子菜单,让菜单层级更深,或者添加分隔符,让它变成一条漂亮的横线。 |
| |
所以你要创建菜单,把你刚刚创建的脚本中的所有项目都放进去。 |
| |
然后我们要把它保存下来,而且要保存两次。 |
| |
当你在这里保存时,它只会更改你机器上已安装的插件版本。 |
| |
这很好,但我们还需要将其保存到您构建插件的文件夹中。这样,下次构建插件时,它就能使用正确的菜单文件了。 |
| |
所以点击保存后,我们要点击另存为,然后进入包含插件文件的文件夹。 |
| |
好了,脚本都写好了,插件定义也定义了,菜单也设计好了。 |
| |
接下来我们需要做的就是实际搭建并测试这个东西。通常我会把它发给用户,让他们告诉我哪些功能有效,哪些功能无效。 |
| |
之后,我就可以进去发布了。所以当你进去发布的时候,系统会提示你更新信息。 |
| |
最重要的事情(在 Lupine Manager 中)是更改发布日期。这样可以让用户知道有更新的版本。 |
| |
版本可用,对吧。所以……接下来会发生的情况是,它会与未发布日期进行比较,然后 Lupine 将使用比较后的日期,并说,嘿,这里有一个更新的版本供你上传。 |
| |
所以你也可以添加注释,比如修订笔记。这些是我这次修改的内容。这些是我对插件进行的一些重要更新和改进。完成这些操作后,如果你点击“发布”, |
| |
然后 Lupine Manager 会复制该插件,并将其放入创建该插件的文件夹中,也就是存放源代码的文件夹中。 |
| |
它还会将插件发布到插件库,并将已发布的插件文件更新为最新版本。 |
| |
最重要的是,它包含了你的发布日期。然后,如果用户点击“检查更新”,它会提示“嘿,这个插件有新版本可用,您要下载吗?”他们可以点击下载,然后安装到他们的电脑上。 |
| |
好了,介绍就到这里吧。 |
| |
我希望这里的资料足够您自行完成这项工作。如果不够,请联系我,邮箱是john_moore@elanco.com。我很乐意帮助您完成设置。 |
| |
非常感谢,再次感谢。再见。 |