Engee 文档

在Engee与Genie合作

*Engee*提供了使用*Genie*框架直接在您的环境中开发自己的应用程序的机会。 这允许用户在不离开Engee工作区的情况下创建自己的应用程序、web界面和各种集成解决方案。

*Engee*是一个现成的和定制的环境,用于运行使用Genie框架创建的应用程序。 *Engee*还为其修改提供了基本功能。 接下来,这篇文章展示了与精灵合作的基本原则,知道哪些,你可以根据你的需要调整现成的应用程序。 *Genie*是为Julia开发web应用程序的框架。 阅读更多有关框架的资料,请浏览 官方网站

精灵已经写好了,功能齐全 数字滤波器编辑器, 雷达方程的计算电网模式的计算.

*Engee*环境经过优化,可与Genie框架配合使用,尽管完全支持Julia和Python内核,但不建议使用任何其他框架。

使用精灵

要在*Engee*中创建自己的应用程序,请按照以下说明操作。 应用程序可以表示为。带有’app’的jl脚本或目录。jl’文件。 这些应用程序放置在`/user`目录中。 启动、管理和使用基于Genie的应用程序的基本步骤如下所述。

  1. 应用程序放置-创建的应用程序必须放置在'/user’目录中。 如果应用程序是一个目录,请确保它包含"应用程序"。jl’文件。 安置的例子:

    /user/apps/MyGenieApp/
        app.jl
        public/
        src/
  2. 启动应用程序-要启动应用程序,请运行以下命令:

    engee.genie.start("/user/apps/MyGenieApp", devel=true, log_file="/user/apps/MyGenieApp")

    这里:

    • 'devel`:可选参数,启用开发模式,允许您在不重新启动的情况下查看更改。

    • 'log_file':保存应用程序日志的路径。 这是没有必要指定。

      如果指定了相对路径,则该命令搜索相对于当前目录的应用程序。

  3. 停止应用程序-要停止正在运行的应用程序,请运行:

    engee.genie.stop("/user/apps/MyGenieApp")

    路径可以设置为相对或绝对。

  4. 正在运行的应用程序列表-要检查当前正在运行的应用程序,请运行命令:

    engee.genie.list()
  5. 将数据从应用程序传输到会话-"engee"功能。精灵。send(wsVarName,value)`用于将值从Genie应用程序传输到*Engee*工作区。 第一个参数’wsVarName’将变量名称设置为字符串。 第二个参数’value’是存储在变量中的值。 如果没有具有该名称的变量,则会自动创建该变量。 使用此功能一般保存中间结果和用户数据。 例如:

    engee.genie.send("a", 42)
    engee.genie.send("message", "Hello")
  6. *从会话获取数据到应用程序*是’engee’功能。精灵。recv(wsVarName;context=…​)'允许您在Genie上的应用程序执行期间从*Engee*环境中获取变量的值。 'WsVarName’参数指定变量的名称。 如果变量是在另一个模块中定义的,那么`context`参数用于指定要在哪个命名空间中查找它。 如果变量预先定义在主应用程序模块的范围之外,这是必要的。 例如:

    engee.genie.recv("a")
    engee.genie.recv("message")
    engee.genie.recv("value"; context=MyModule)
  7. *工作区中的代码执行*是’engee’功能。精灵。eval(code::AbstractString)`允许您直接从Genie应用程序在*Engee*工作区中的Julia上执行任意代码。 它用于运行单个表达式、调试或动态执行代码,而无需重新启动应用程序。

    engee.genie.eval("x = 10")
    engee.genie.eval(“println(\”x的值:\$x\“)”)

    传递的字符串’code::AbstractString`在当前*Engee*会话的全局作用域中执行。 这样,您可以通过在Engee会话中传递来自Genie应用程序的命令来从外部控制变量或逻辑。

  8. 查看应用程序日志-要获取正在运行的应用程序的日志,请使用命令:

    engee.genie.logs("/user/apps/MyGenieApp")

    如果启动应用程序时未指定`log_file’参数,则该命令仍将输出当前日志。

在应用程序中使用第三方包

您可以在应用程序中使用第三方包。 要做到这一点,下载`项目。toml’文件并运行命令:

engee.genie.pkg_instantiate("/path/to/app")

与此同时:

  • 文件的应用程序。jl’和’项目。toml’必须位于目录'/path/to/app’中。

  • '项目。toml'*不应该包含*Engee*包,但它们仍然可用于精灵。


用于处理包的其他命令:

查看已安装软件包的列表

要列出应用程序中使用的所有包,请运行命令:

engee.genie.pkg_status("/path/to/app")
安装新软件包

要安装一个或多个软件包,请使用:

engee.genie.pkg_add("/path/to/app", "SomePackage")

engee.genie.pkg_add("/path/to/app", ["SomePackage1", "SomePackage2"])
删除包

要删除一个或多个包,请运行:

engee.genie.pkg_rm("/path/to/app", "SomePackage")

engee.genie.pkg_rm("/path/to/app", ["SomePackage1", "SomePackage2"])

使用的限制和特点

在Genie中,数组从零开始索引,不像Julia,索引从一开始。
  • 无法安装未包含在*Engee*构建中的新软件包。 但是,您可以使用以下命令查看可用的包:

    print(read("/usr/local/genie/environments/v1.10/Project.toml",String))
  • 一个应用程序显示为一个目录与"应用程序"。jl’文件被认为是标准的。 这是组织项目的推荐方式。

文章中详细介绍了软件管理"精灵"的公共方法。 精灵的公共软件管理方法.

创建应用程序的示例

创建’应用程序。jl’文件在'/user’目录下 文件浏览器 file browser 7:

genie app 2 cngenie app 3 cn

在’应用程序。jl’文件,添加使用Genie框架编写的应用程序代码`:

module App
using GenieFramework
@genietools

@app begin
    @in N = 0
    @out squared = 0
    @onchange N begin
        squared = N^2
    end
end

function ui()
    [
        cell([
            p("Enter a number to calculate its square:")
        ]),
        cell([
            textfield("N", :N)
        ]),
        cell([
            bignumber("The square of the number is:", :squared)
        ])
    ]
end

@page("/", ui)
end
应用代码详解
  1. 创建模块:

    module App

    这是’App’模块的开始。 在Julia中,模块用于组织代码并将其隔离。 所有的应用程序代码都将在这个模块中。

  2. 连接"精灵工作"图书馆:

    using GenieFramework
    @genietools

    这里:

    • '使用GenieFramework':连接库以与web应用程序一起工作;

    • '@genietools':为应用程序准备环境的宏,包括必要资源(如图标和样式)的连接。

  3. 声明响应式应用程序:

    @app begin
        @in N = 0
        @out squared = 0

    这里:

    • '@app':应用程序的响应式代码块的开头;

    • @in N=0':声明一个响应变量’N,它将存储一个自定义值;

    • @out squared=0:响应变量`squared’的声明,它将包含数字的平方。 此变量是只读的。

  4. 反应式逻辑:

    @onchange N begin
            squared = N^2
    end

    这里:

    • `@onchange N':表示当变量N的值被改变时,执行以下代码块;

    • 'squared=N^2':更新’squared’变量的值(将输入的数字平方)。

  5. 定义用户界面:

    function ui()
        [
            cell([
                p("Enter a number to calculate its square:")
            ]),
            cell([
                textfield("N", :N)
            ]),
            cell([
                bignumber("The square of the number is:", :squared)
            ])
        ]
    end

    这里:

    • 'function ui()':定义创建应用程序界面的函数;

    • '细胞([。..])`:将界面元素打包成一个结构块:

      • 第一个块’cell([]':显示带有指令的文本’"输入一个数字以计算其平方";

      • 第二块’cell([]':数字输入字段'(textfield("N",:N));

        • `"N"':输入字段签名;

        • `:N:`字段与变量`N’的关系;

      • 第三个块是’cell([])':使用`bignumber’显示结果(数字的平方);

        • '"数字的平方是:"':标题;

        • ':squared:`与`squared’变量的关系。

  6. 创建路由并关闭模块

    @page("/", ui)
    end

    这里:

    • '@page("/")':定义应用程序主页面的路由'`/)`;

    • 'ui':表示页面内容将由`ui`函数生成;

    • 'end':'App’模块的结束。

接下来,保存应用程序文件’app。jl’与所做的更改。:

genie app 4 cn

并使用命令运行应用程序:

engee.genie.start("/user/app.jl")

此应用程序允许您将输入的数字平方,演示如何在Engee工作区中创建自己的应用程序。

genie app 1

如果*Engee*会话已完成且应用程序保持打开状态,系统将发出错误。:

genie app 5