11

这可能是一个天真的问题,甚至不是一个有效的问题......

我制作了一个Perl 6 程序(并希望制作其他几个程序),它分析本地数据并考虑到一些用户定义的参数。我的几个同事/同事需要定期输出程序的输出,所以他们将参数发送给我,我运行程序并将输出发回给他们。
由于整个过程不是很方便,我正在考虑可以做些什么来让每个人都更轻松。这是选项,它们似乎都不理想。

  • 在我同事的计算机上安装 Perl 6 并教他们如何使用它。他们中的大多数人没有任何编程经验,数据和程序本身应该在所有计算机上保持最新,程序应该在不同的系统上相同地工作等等,所以这可能会使事情变得更糟,而不是更好。
  • 制作程序的在线变体(使用JS等),以便我的同事可以在浏览器窗口中输入参数并获得结果。这对用户来说更容易(而且我已经为更简单的程序做了这样的事情),但我更喜欢使用Perl 6 ...

所以,我的问题是:是否有可能以某种方式使Perl 6在线工作?它可以在浏览器中运行吗?或者有没有其他解决方案?

4

3 回答 3

11

在我同事的计算机上安装 Perl 6,...这可能会使事情变得更糟,而不是更好。

鉴于您陈述的详细信息,...我同意。

制作程序的[a]变体(使用JS等),以便我的同事可以在浏览器窗口中输入参数并获得结果。

这是 imo 的自然选择。

(请注意,我在引用您的话时省略了“在线”。如果您的同事能够通过内部网络看到您的计算机,那么您仍然可以做一个 JS/Web 解决方案,但做一个不公开的解决方案 - 不在线。基本上做相同的解决方案,但使用略有不同的服务器管道。)

另一种方法是接受结构化电子邮件。更多关于这在适当的地方。

我更喜欢使用 Perl 6 ...

在 Web 解决方案中使用非 JS 语言代码的最常见方法是在解决方案的“前端”中仍然使用 html 等,通常包括 JS,然后包括在服务器上运行的代码调用作为“后端”。

(另一种方法是转译为 JS。理论上,您可以通过实验性 nqp 后端将 Perl 6 转译为 JS 。我认为这是一个令人兴奋的发展,但我怀疑它在短期内会很慢且受到限制。)

(本节的最后一点。如果您最终将 Perl 6 转换为 JS 解决方案,因为您不想学习或处理混合使用的服务器,那么您将使用 Perl 6 作为原型语言。这可能是使用语言的合法方式,但此答案的其余部分假设您将引入服务器。)

介绍和管理服务器

服务器是由于“客户端”(通常是其他计算机)的请求而可靠地保持可用并按需运行软件的计算机或软件。

这听起来很简单,在某些方面确实如此,但在其他方面并非如此。如果有人关掉电源怎么办?或未能支付互联网账单?还是软件泄漏内存导致系统周期性故障?还是黑客攻击并进入?

除非那些使用该服务的人已经可以通过本地网络看到服务器计算机,而且通常情况下,将服务器引入解决方案的现代方法购买在线服务器包(通常是基于虚拟化的)。(想想每月几美元及以上。)假设一个体面的服务提供商,这有效地保证了它会是一个运行良好的服务器,通常保持运行、工作、连接和服务,除非它被黑客入侵或以其他方式损坏,并且如果后者发生,您会及时得到通知。“零成本”的替代方案是让您的桌面也成为服务器。这意味着您有责任保持您的桌面正常运行和连接。

管理服务器的一种现代方法是在服务器之上使用Docker或类似方法。这有效地保证了您几乎可以立即修复运行良好的服务器的问题,如果它被黑客入侵或以其他方式损坏。它还使您可以轻松地拥有一个本地服务器,您可以在该服务器上进行开发和测试,并保证与部署的生产服务器相同。最重要的是,在您的桌面上安装 Docker 或在购买的服务器上使用它,然后放入已经准备好的 docker 文件,这意味着您可以从从未使用过服务器变为拥有工作服务器,只需单击一下即可几个按钮。

有一系列产品同时使用操作系统虚拟化和 docker 或类似 docker 的技术来创建按使用付费的组合,您只需为服务器的使用时间付费,而不是为它 24/7 的可用时间付费。有很多来龙去脉。有些不支持 Perl 6。据我所知,亚马逊 AWS谷歌云都支持按使用付费并允许使用任何编程语言。

构建 Web 应用程序

这个答案的最后几节介绍了一旦你有一个服务器,如何使用 Perl 6,从最不复杂的开始。如果您想直接使用我推荐的解决方案,请跳到关于 Cro 的最后一部分,如果您使用网络路由。

电子邮件客户端响应者

特别是如果您不想将钱花在单独的服务器上,为了简化一些事情,您可以让您的同事将结构化的电子邮件发送到一个电子邮件地址,该地址到达您在桌面上运行的电子邮件客户端,它会响应通过在您的桌面上运行 Perl 6 程序,然后在结果出现时通过电子邮件将它们发回。如果您对此解决方案感兴趣,请发布另一个 SO 询问它。

其余部分采用 Web 解决方案。

CGI 和手卷代码

从网页调用在服务器上运行的代码是微不足道的。

您只需编写一个合适的链接以单击该链接指向动态程序而不是静态 html 页面。

如果你想收集参数,那么你只需编写一个表单和一个合适的提交按钮,然后这样做。

给定一个已经编写好的表单的现有网页,如果您阅读了适当的文章,例如如何使用 CGI 脚本生成网页,您可以在几分钟内了解如何传递参数、调用 Perl 6 代码并显示结果。

模块和委托人

Imo 不值得在手卷 CGI 这么低的水平上做事。这样做是有危险的,并且有一些模块可以使创建和维护事情变得更容易,更不危险。

这些将出现在 modules.perl6.org 的“web”下

Bailador 显然是一个基本解决方案的选择,该解决方案在“路由”(将 URL 映射到代码)和模板方面做得不错。

Cro和SPA

如果您有兴趣使用最基本的自然方法来构建现代网站,我建议您使用 Cro。Cro 使使用SPA方法构建简单的 Web 解决方案变得轻而易举。但它的设计目的是使用 Perl 6 中内置的特性来很好地扩展到可以想象的最复杂的网站,这些网站涉及异步、并发、并行或分布式处理的任何混合以及您希望引入的任何中间件。

正如您在 OP 中建议的那样,对于这样一个非常微不足道的应用程序来说,Cro SPA 可能是矫枉过正,但它仍然非常简单,选择它有无数的好处,而且对您的应用程序没有明显的缺点。(即使它作为 beta 产品的官方身份也适合您的场景 imo。它已经是一个非常可靠的产品,开发人员可以快速响应提出的任何问题,并且对于这些开发人员和 Perl 6 来说,它保持干净、快速都具有战略意义,值得生产,并且维护良好。)

完成整个设置以便您可以开始使用 Cro 的最快方法可能是安装 Docker(如果您的服务器(或桌面,如果您将其用作服务器)上没有它),然后安装croservices /cro-http Docker 容器

学习如何使用 Cro 交付单个网页的最快方法是遵循使用 Cro构建单页应用程序教程。

于 2018-09-24T10:39:51.777 回答
7

一个不错的解决方案是您可以运行 Jupyter Notebook 服务器供他们使用https://github.com/bduggan/p6-jupyter-kernel

或者另一个是在 glot.io 上托管您的代码,以便他们可以在浏览器中运行它https://glot.io/new/perl6

这些将是我的快速解决方案。如果程序非常简单并且在命令行上运行,那么 Rajudo 的 JVM 版本可能会使用 --target=jar 将其打包,以便在安装了 Java 的其他机器上运行。

于 2018-09-24T18:27:31.230 回答
2

由于您实现了一个您似乎很满意的程序,并且它已经用 Perl 6 编写,因此尝试Perlito可能是值得的(作为参考,它列在perl6.org 编译器页面上)。

目标是使用 Perlito 将您的 Perl 6 源代码一次性转换为 JavaScript,当然,它可以在浏览器中运行。未来程序的维护将是以下序列: (1) 更新 Perl 6 源代码;(2) 运行 Perlito 获取 JavaScript 源代码;(3) 用新渲染的源代码替换旧的 JavaScript 源代码。

这整个建议是实验性的,我自己没有做过,所以请持保留态度。

最后,还有一个更详细的 README(提到 JavaScript-to-Perl-6)。

于 2018-09-24T00:43:53.820 回答