解决方案

Wolfram 语言 & Mathematica 12.2 上线了:228个新函数!(四)

表格笔记本


收集结构化材料的最佳方法是什么?如果您只想获取一些项,那么使用FormFunction创建的普通表单(例如部署在云中)就可以很好地工作。但是,如果您要收集更长,更丰富的材料怎么办?


例如,假设您要创建一个测验,希望学生输入完整的复杂答案序列。或假设您正在创建一个模板,供人们填写某些内容的文档。在这些情况下,您需要的是我们在版本12.2中引入的新概念:表单笔记本。


表单笔记本基本上是一个设置为用作复杂“表单”的笔记本,其中表单中的输入可以是您习惯于笔记本中的所有事物。


表单笔记本的基本工作流程如下。首先,您编写一个表单笔记本,定义要让表单笔记本的用户填写的各种“表单元素”(或区域)。在创作过程中,您定义要对材料进行的处理。表单笔记本的用户在使用表单笔记本时进入(例如,将材料放入Wolfram Data Drop数据仓中,将材料发送到云API,通过电子邮件将其作为符号表达发送,等等)。


编写表单笔记本后,您将生成一个活动版本,该版本可以发送给将使用表单笔记本的任何人。一旦某人将其资料填写在部署的表格笔记本的副本中,他们便按一个按钮(通常为“提交”),然后将其材料作为结构化的符号表达形式发送到指定的表格笔记本作者的任何目的地。


也许值得一提的是表单笔记本与听起来相似的东西:模板笔记本。从某种意义上说,模板笔记本的作用与表单笔记本相反。表单笔记本是关于让用户输入将要处理的材料。另一方面,模板笔记本将使计算机生成材料,然后将其用于填充笔记本,笔记本的结构由模板笔记本定义。


好的,那么您如何开始使用表格笔记本?只需转到文件>新建>程序笔记本>表单笔记本创作:



这只是一个笔记本,您可以在其中输入所需的任何内容,例如当人们“填写”表格笔记本时要说明的内容。但是,表单笔记本中有一些特殊的单元格或单元格序列,我们称之为“表单元素”和“可编辑笔记本区域”。这些是表单笔记本的用户“填写”以输入“响应”的内容,他们提供的材料是按下“提交”按钮(或定义的任何最终操作)后发送的内容。


在创作笔记本中,工具栏为您提供了可以插入的可能表单元素的菜单:



这是什么意思呢?基本上,表单元素由非常灵活的符号Wolfram语言表达式表示,这为您提供了一种指定所需表达式的方式。您可以在输入字段中输入标签和提示。但是随着诠释器 (Interpreter) 的出现,您开始看到Wolfram语言的强大功能。因为解释器负责将表单笔记本的用户输入该输入字段中的内容,并将其解释为可计算对象。默认值只是将其视为字符串。但这可以是例如“国家”或“ MathExpression”。通过这些选择,材料将自动解释为国家/地区,数学表达式等,如果不能按指定方式解释输入内容,通常会提示用户。


关于输入字段如何工作的详细信息,有很多选项。其中一些在“Add Action”菜单中提供:



除了输入字段,还有许多其他可能的表单元素。诸如复选框、单选按钮和滑块之类的东西。通常,可以使用Wolfram语言中存在的任何丰富的符号用户界面构造。


完成创作后,按“Generate”以生成一个表单笔记本,可以将其提供给用户以供填写。“设置”定义了诸如应如何指定“提交”操作以及已提交表单笔记本时应该作什么:



那么,提交表格笔记本的“结果”是什么?基本上,这是一个关联,它说出笔记本表格每个区域的填充内容。(这些区域是通过在创作笔记本中首次定义区域时指定的关联中的键来标识的。)


让我们看看这在一个简单的情况下如何工作。这是表单笔记本的创作笔记本:



这是生成的表单笔记本,准备填写(假设您有12.2):



以下是表单笔记本如何填写的示例:



这是当按下 Submit 时“返回”的内容:



为了进行测试,您可以将此关联交互地放置在笔记本中。但是实际上,将关联发送到数据仓,将其存储在云对象中或通常将其放置在“集中”的位置更为常见。


请注意,在本示例的最后,我们有一个可编辑的笔记本区域——您可以在其中输入自由格式的笔记本内容(带有单元格、标题、代码、输出等),这些内容将在提交表单笔记本时捕获。


表单笔记本是一个强有力的主意,您会发现它们到处都是。作为第一个示例,Wolfram功能存储库,Wolfram演示项目等的各种提交笔记本正在变成表单笔记本。我们还期望在教育环境中大量使用表单笔记本。作为其一部分,我们正在构建一个系统,该系统利用Wolfram语言来评估表格笔记本(和其他地方)中的响应。


您可以在12.2版中开始看到带有实验功能的 AssessmentFunction,该函数可以像Interpreter一样挂接到表单笔记本中。但是,即使没有为AssessmentFunction计划的全部功能,在使用表单笔记本的情况下,无论是在教育环境还是其他情况下,仍然可以完成大量工作。


顺便说一句,值得一提的是,在任何特定情况下,表单笔记本最终都非常易于使用。是的,他们有很多深度,可以做很多事情。而且,由于Wolfram语言的整个符号结构以及Wolfram笔记本最终以符号表达的形式,它们基本上是唯一可行的。但是,将它们用于特定目的时,它们非常精简和直接,并且在短短几分钟内创建一个有用的表单笔记本是完全现实的。


更多笔记本功能


我们在1987年发明了笔记本(Notebook),它具有所有基本功能(例如,分层单元等)。但是,在三分之一的世纪里,我们一直在逐步完善和简化它们的工作方式。在版本12.2中,有各种有用和方便的新笔记本功能。


点击复制

这是一个非常简单的功能,但非常有用。您在笔记本中看到了某些东西,而您真正想要做的就是复制它(或者复制与之相关的东西)。好吧,那就用ClickToCopy:


ClickToCopy[10!]
3628800


如果要单击复制未计算的内容,请使用Defer:



简化的超链接(和超链接编辑)

自1996年以来就可以用 CMD+Shift 在Wolfram Notebook中插入了超链接。但是在版本12.2中,有两个重要的带有超链接的新事物。首先,自动超链接可以处理各种各样的情况。其次,是用于超链接创建和编辑的现代化且简化的机制。



附加单元格


在版本12.2中,我们将公开内部已有一段时间的东西:将浮动的功能齐全的单元格附加到任何给定单元格(或盒子或整个笔记本)的能力。要访问此功能,需要进行符号化的笔记本编程,但它可以使您完成非常强大的功能——特别是在引入上下文和“及时”界面时。这是一个示例,该示例在单元格支架的右下部分放置一个以质数计数的动态计数器:



模板框基础架构

有时,这对于您所看到的不是您所拥有的很有用。例如,您可能想在笔记本中显示为J 0(x),但实际上是BesselJ [0,x]。多年以来,我们一直将 Interpretation 作为针对特定表达式进行设置的一种方法。但是我们还有一个更通用的机制TemplateBox,它使您可以获取表达式,并分别指定应如何显示和解释它们。


在版本12.2中,我们进一步泛化并简化了TemplateBox,使其可以合并任意用户界面元素,并允许其指定诸如复制行为之类的内容。例如,我们新的 TEX 输入机制基本上只是新TemplateBox的一种应用。


在这种情况下,“TeXAssistantTemplate”是指笔记本样式表中定义的一项功能——其参数由TemplateBox中给出的关联指定:



桌面到云的界面


Wolfram笔记本的一个重要功能是将它们设置为既可以在台式机上也可以在云上运行。即使在Wolfram语言的各个版本之间,笔记本在云中的工作方式也有很多持续的增强。但是在版本12.2中,台式机和云之间的笔记本界面有了一些特殊的精简。


在任何台式机中笔记本已经使用了几年的一种特别好的机制是“文件” >“发布到云”菜单项,它使您可以拿起笔记本 (notebook) 并立即将其作为已发布的云笔记本使用,任何拥有网络浏览器的人都可以访问它。在版本12.2中,我们简化了笔记本发布的过程。


当我进行演讲时,通常会随即创建一个台式笔记本(或使用已经存在的笔记本)。在演讲的结尾,将其发布到云成为我的习惯,因此观众中的任何人都可以与它进行交互。但是,如何为所有人提供笔记本的URL?在虚拟设置中,您只能使用聊天。但是在实际的物理演讲中,这不是一个选择。在版本12.2中,我们提供了一个方便的替代方法:“发布到云”的结果包括一个QR码,人们可以使用手机捕获该QR码,然后立即转到URL并与手机上的笔记本进行交互。



在发布到云中的结果中还有一个值得注意的新项目:“直接JavaScript嵌入”。这是Wolfram笔记本嵌入器的链接,该链接允许通过JavaScript将云笔记本直接嵌入到网页中。


使用iframe将一个网页嵌入另一个网页总是很容易的。但是iframe有很多限制,例如要求预先定义其大小。Wolfram笔记本嵌入器允许对云笔记本进行全功能的流体嵌入,并可以通过网页的其他元素对笔记本进行脚本化控制。而且由于Wolfram笔记本嵌入器已设置为使用oEmbed嵌入标准,因此基本上可以在所有标准Web内容管理系统中使用它。


我们已经讨论过将笔记本从台式机发送到云。但是,版本12.2中的另一项新功能是从桌面上更快,更轻松地浏览云文件系统-可以从File > Open from Cloud and File > Save to Cloud访问。



密码学与安全


我们使用Wolfram语言要做的一件事是使与几乎所有外部系统的连接尽可能容易。在现代,其中的重要部分是能够方便地处理密码协议。自从五年前我们开始将加密技术直接引入Wolfram语言以来,我一直对Wolfram语言的符号特征使我们澄清和简化与加密有关的事情感到惊讶。


一个特别引人注目的例子就是我们如何将区块链集成到Wolfram语言中(版本12.2增加了bloxberg的功能)。在后续版本中,我们将处理密码学的不同应用。在版本12.2中,主要重点是密钥管理的符号功能。版本12.1已引入SystemCredential,用于处理本地“钥匙串”密钥管理(例如,在身份验证对话框中支持“记住我”)。在12.2中,我们还可处理PEM文件。


如果我们导入包含私钥的PEM文件,我们得到一个不错的私有密钥的符号表示:



现代安全基础结构的一个重要部分是安全证书的概念,它是一种数字结构,允许第三方证明特定公钥的真实性。在版本12.2中,我们现在具有安全证书的符号表示形式——提供程序所需的内容,以便以与https相同的方式与外部实体建立安全的通信通道:



只需输入SQL


在12.0版中,我们引入了强大的功能,可以在Wolfram语言中符号查询关系数据库。这是我们连接数据库的方式:



这些查询不仅可以从数据库读取,还可以写入数据库。为了使事情变得更加便捷,我们可以像对待笔记本中的任何其他“外部语言”一样有效地处理SQL。


首先,我们必须注册我们的数据库,比如想要 SQL 进行以下操作:


RegisterExternalEvaluator [“ SQL”,db]
689058cf-abfc-46fc-8f2d-017b24766418


现在,我们只需输入SQL 即可直接在笔记本中返回 Wolfram 语言输出:



微控制器支持32位


您已经用Wolfram语言开发了控制系统或信号处理。现在如何将其部署到一块独立的电子设备上?在12.0版中,我们引入了微控制器套件,用于从符号Wolfram语言结构直接编译为微控制器代码。


我们对此有很多反馈,要求我们扩大支持的微控制器的范围。因此,在版本12.2中,我很高兴地说,我们增加了对36种新微控制器(尤其是32位微控制器)的支持:



这是一个示例,其中我们将符号定义的数字滤波器部署到特定类型的微控制器,显示为该特定微控制器生成的简化C源代码:


4

WSTPServer:Wolfram 引擎的新部署


我们的长期目标是使Wolfram语言及其提供的计算智能尽可能地普及。其中一部分是设置实现该语言的Wolfram引擎,以便可以将其部署在尽可能广泛的计算基础架构设置中。


Wolfram Desktop(以及经典的Mathematica)主要为在本地桌面系统上运行的Wolfram Engine提供笔记本界面。还可以在本地计算机系统上直接作为命令行程序(例如,通过WolframScript)运行Wolfram Engine 。而且,当然,可以通过完整的Wolfram云(公共或私有),或者通过更轻量级的云和服务器产品(现有的和即将推出的)在云中运行Wolfram引擎。


但是在版本12.2中,Wolfram Engine有了新的部署:WSTPServer。如果您在云中使用Wolfram Engine,通常会通过http或相关协议与其进行通信。但是三十多年来,Wolfram语言拥有自己的专用协议,用于传输符号表达式及其周围的所有内容。最初我们将其称为MathLink,但是在最近几年中,由于其不断扩展,我们将其称为WSTP:Wolfram符号传输协议。顾名思义,WSTPServer 的作用是为您提供轻量级的服务器,该服务器可以提供Wolfram引擎,并允许您直接在本机WSTP中与它们进行通信。


为什么这很重要?基本上是因为它为您提供了一种管理持久性Wolfram语言会话池的方法,这些会话可以用作其他应用程序的服务。例如,通常每次调用WolframScript都会获得一个新的Wolfram引擎。但是,通过将Wolframscript -wstpserver与特定的“ WSTP配置文件名称”一起使用,您可以在每次调用WolframScript时保持使用相同的Wolfram引擎。您可以直接在本地计算机或远程计算机上执行此操作。


WSTPServer的一个重要用途是公开Wolfram引擎的池,这些池可以通过版本12.2中新的RemoteEvaluate函数进行访问。也可以使用WSTPServer公开Wolfram引擎以供ParallelMap等使用。最后,由于WSTP(近30年来一直是)笔记本前端与Wolfram Engine内核进行通信的方式,因此现在可以使用WSTPServer建立一个集中的内核池,您可以将笔记本的前端连接到该池,例如,即使您切换到其他笔记本的前端,在另一台计算机上,也可以在内核中继续运行特定的会话(甚至是特定的计算),


RemoteEvaluate:在其他地方进行计算…...


遵循“到处使用Wolfram语言”的思路,版本12.2中的另一个新功能是RemoteEvaluate。我们已经有了CloudEvaluate,它可以在Wolfram云或企业私有云中进行计算。我们有ParallelEvaluate,它对预定义的并行子内核集合进行计算。在版本12.2中,我们获得了RemoteBatchSubmit,该批处理将批处理计算提交给云计算提供者。


RemoteEvaluate是一个通用的轻量级“立即评估”功能,使您可以在具有可访问Wolfram引擎的任何指定远程计算机上进行计算。您可以使用ssh或wstp(或带有Wolfram Cloud端点的http)连接到远程计算机。


4

有时,您可能需要使用RemoteEvaluate来对多种机器进行系统管理之类的事情。有时您可能想收集数据或将数据发送到远程设备。例如,您可能拥有一个都装有Wolfram Engine的Raspberry Pi计算机网络,然后可以使用RemoteEvaluate进行诸如从这些计算机中检索数据之类的操作。顺便说一句,您还可以在RemoteEvaluate中使用ParallelEvaluate,因此您将一台远程计算机作为并行子内核集合的主体。


有时,您每次执行计算时都会希望RemoteEvaluate启动Wolfram Engine的新实例。但是,使用WSTPServer,您也可以使用持久性Wolfram语言会话。RemoteEvaluate和WSTPServer是用于表示正在运行的Wolfram Engine进程的通用符号框架的开始。版本12.2已经具有RemoteKernelObject和$ DefaultRemoteKernel,它们提供了表示远程Wolfram语言实例的符号方式。


还有更多(“无与伦比”的功能)


我至少已经触及了版本12.2的许多新功能。但是还有更多附加功能、增强功能、修复程序以及一般的舍入和修饰。


像在计算几何中一样,ConvexHullRegion现在处理区域,而不仅仅是点。还有诸如CollinearPoints和CoplanarPoints之类的函数可测试共线性和共平面性,或为实现它们提供条件。


有更多的导入和导出格式。就像现在支持存档格式:“ 7z ”,“ ISO ”,“ RAR ”,“ ZSTD ”。还有FileFormatQ和ByteArrayFormatQ用于测试事物是否对应于特定格式。


在核心语言方面,有一些事情需要对定义复杂的ValueQ进行更新。还有RandomGeneratorState给出随机生成器状态的符号表示。


在桌面程序包(即.wl文件)编辑器中,有一个新的(有点实验性的)“格式化单元格”按钮,用于重新格式化代码——可以控制其应具有的“通风”(即,在换行符中应具有的密度)。


在Wolfram|Alpha 模式笔记本(在 Wolfram|Alpha Notebook Edition 中默认使用)中,还有其他新功能,例如针对特定函数使用的函数文档。


TableView 中还有更多功能,以及在实验基础上提供的大量新的paclet创作工具套件。


对我来说,我们能够在版本12.2中整合进这么多功能真是令人惊讶,而且,一如既往,我很高兴它已经面世并且可供所有人使用......