本次演讲中,我将展示如何使用 JSL 编写类似 JMP 的用户界面脚本,我常用的模板类型,以及在开发此类平台时所做的决策。我还会演示不同的显示框、如何使用 JSL 创建用户界面、脚本模板、编写用户界面脚本时的决策过程,以及一些 JMP 脚本编写的技巧和最佳实践。
欢迎观看我的海报展示,主题是使用结构化JSL构建用户界面。先简单介绍一下我的背景。我在芬兰一家电子公司工作,是数据集成团队的数据集成和数据科学专家。我的工作之一是创建自定义JMP应用程序,而我创建这些应用程序的方式,或者更确切地说,我如何在这些应用程序中构建内容,正是本次海报的主题。这原本是一篇论文,所以我不得不快速完成,但应该没问题。
咱们开始吧。我觉得这张海报最重要的信息是,你应该尽量模仿 JMP 平台。原因在于用户对 JMP 平台非常熟悉。如果你能像 JMP 那样组织内容,用户就能更快地上手使用你的工具。
这里我们展示一个 JMP 平台的示例。在这个例子中,它是一个非常简单的发行版。左侧是启动器,右侧是报表。在启动器和报表中,我们都可以看到窗口标题图标,JMP 将内容组织在面板框中。在左侧,您可以使用筛选列选择器生成列选择器。在其下方,有时还会出现一些额外的选项。
中间是这些按钮。接下来的两个按钮是列列表框,用户可以在其中选择要分析或执行操作的列。列表框的名称也清楚地说明了这些列的用途。右侧是操作按钮。
报告中的结构通常非常垂直。就此而言,我使用了法规,因为这样更容易理解我的观点。内容采用父子结构,即层级结构,并且通常使用带有红色三角形的轮廓框来构建。我们尝试这种结构,是因为用户可以从这些红色三角形中启动架构和分析。内容中包含一些组织结构,例如设计框、表格框等等。但这种结构是用户(尤其是 JMP 用户)所熟悉的。
在构思工具和用户时,要考虑他们将如何使用你的工具。例如,你可以使用故事板来辅助说明。它不必像图中所示那样,你也可以使用漫画风格。我们也有类似的设计:用户先看到一个视图,然后点击某个元素,接着切换到下一个视图,以此类推。
在构建这个程序时,思考一下 JMP 平台的工作原理会很有帮助,因为这样就能回归熟悉的操作方式。我不会详细讲解,这只是一个实现示例。
这里有一些原型示例。您可以快速演示或作为界面的初步设计。这里我有一个非常简单的纸质版本。我喜欢从这个开始。它们很容易修改,如果需要更新也很方便,而且如果有什么问题,您可以重新创建一个。我通常会很快去找JMP(Jampling Studio)的专业人士帮忙。这是一个非常简单的版本,但我可以试用一下。这个版本有效,这个版本无效,如果需要可以修改。我或许可以用我的模板做一个更简洁的版本,看看它在实际应用中的效果。
下一个模型。类似的区域,先用纸笔画,然后我用了一个单独的工具。这里我用的是 Excalidraw。做一个模型。我还可以在这里添加一些注释等等,以及更高级的 JMP 原型演示。这部分已经来自原型应用程序,但你也可以自己完成一部分。
它包含数据筛选器,然后还有一些图表构建器。这可以完全独立。它包含一些来自其他地方的图片。如果您刚刚配置好这个布局,请将这些图片移动到单独的工具中。我可能会使用 PowerPoint。在那里移动它们很容易。您可以在 PowerPoint 中构建结构,然后更好地了解用户界面可能的样子。
接下来,考虑使用模板,并且不要忘记用户体验。我使用自己的脚本风格模板。我之所以使用这些模板,是为了更快地创建应用程序。这些模板更加稳定可靠,而且看起来也更专业。另外需要说明的是,我的用户界面设计不会针对更高的分辨率,或者更确切地说,不会针对低于全高清的分辨率,因为大多数用户仍然使用全高清分辨率。
用户体验。由于 JMP 是一款交互性很强的工具,我认为考虑用户体验也很重要,而不仅仅是界面设计。我这里举几个糟糕的用户体验例子。例如,在平台局域网共享的模型窗口中,用户无法返回数据表查看应该使用哪些列。他们必须先关闭启动器,关闭数据表,然后再重新运行启动器。在我看来,这是一种糟糕的用户体验。
另一个问题是,如果使用了可折叠的轮廓框等功能,窗口大小往往会自动调整。我尽量在窗口创建后将其大小固定,然后使用滚动框来浏览窗口。最后一点是,他们没有对用户隐藏工具栏和菜单,因为在 JMP 中,您可以启动不同的平台。您可以先打开一个平台,然后转到工具栏菜单启动下一个平台,这样可以大大加快分析速度。
对比我的平台和 JMP 平台。顶部是 JMP 平台。这里展示的是一个窄型平台,底部是类似的界面。左侧是列选择器,右侧是用户添加的常用列表和操作。我认为与启动器最大的区别在于,我这里有一个正在分析的表名。在 Maneuver 平台中,我可能也会看到应用程序名称,但这里没有。
但这里我遇到的问题比我们的报告更大。我没有设置任何选项框,因为我已经为用户定义了几乎所有选项。他们不需要访问红色三角形菜单。在 JMP 平台上,你需要访问这些菜单。我可以使用页面框和工作表框。
我觉得更重要的是,我可以……我之所以横向组织内容,是因为我们的屏幕更宽,而且屏幕也更高。很多 JMP 平台都比较长。我喜欢横向布局,因为这样更节省空间。另外,这里表格和应用程序名称也都可见。
这里有一个示例应用程序。我们之后会有两个示例,但我已经简单介绍了一下。这基本上就是用户运行我的应用程序所需的脚本。我将脚本的不同部分进行了拆分,每个部分都有各自的职责。配置、实用程序和用户界面都放在各自的脚本中,我认为这样更容易管理。
然后是脚本。这个主脚本会显示一些初始文本,例如表格是否打开、窗口是否已打开,以及所有条件都满足时,应用程序是否正在运行。根据检查结果,我可能会向用户抛出一个模态窗口错误。例如,如果窗口已经打开,它就不是模态窗口,我会将应用程序置于前台,以便用户可以继续操作。
下面基本上是应用程序运行后的主窗口。这将创建应用程序窗口。这些表达式也在这里被分成了单独的部分。在这个新窗口之外管理较小的表达式比管理可能长达数百行的新窗口要容易得多。通常情况下,管理冗长的代码很困难。而这些单独的表达式更容易处理。
有时候你可能需要进行一些评估,并考察多种能力,但总的来说,我认为这种方式更好。你可以在社区找到这个例子,以及我在2023年芬兰用户组演讲中提到的一些其他例子。
这篇海报的简要总结如下:尽量模仿 JMP 平台的发布和报告流程,因为用户已经很熟悉这些流程。这样他们就能更快地适应你的工具。考虑一下用户将如何使用你的应用程序。创建故事板和模型,以便快速预览其外观。添加一些模板。你可以创建一个强大而专业的循环应用程序。熟悉最常用的显示框以及如何在 JSL 中组织内容。
由于 JMP 是一款交互性很强的工具,请不要忘记用户体验,因为 JMP 的交互性至关重要。务必考虑用户体验和用户界面。谢谢。