Engee 文档

在 Engee 中使用 Genie

Engee 提供直接在其环境中使用 Genie 框架开发定制应用程序的能力。这样,用户就可以创建自己的应用程序、网络接口和各种集成解决方案,而无需离开*Engee*工作区。

Engee 是一个随时可用的定制环境,可用于运行使用 Genie 框架创建的应用程序。此外,Engee 还提供修改应用程序的基本功能。下文将向您介绍使用 Genie 的基本原则,了解了这些原则,您就能根据自己的需要调整现成的应用程序。 *Genie*是为Julia开发网络应用程序的框架。有关该框架的更多信息,请访问官方网站

数字滤波器编辑器,雷达方程的计算电网模式计算 已经在 Genie 上编写并完全运行。

尽管有 Julia 内核和 Python 支持,但*Engee*环境已针对 Genie 框架进行了优化,不建议使用任何其他框架。

使用 Genie

要在*Engee*中创建自己的应用程序,请遵循以下说明。应用程序可以是 .jl 脚本的形式,也可以是包含`app.jl`文件的目录形式。此类应用程序放置在 /user 目录中。以下是运行、管理和使用基于 Genie 的应用程序的基本步骤。

  1. 放置应用程序 - 创建的应用程序应放置在 /user`目录中。如果应用程序是一个目录,请确保其中包含 `app.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. Stop application - 停止运行中的应用程序,执行:

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

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

  4. 运行中的应用程序列表 - 要查看当前运行的应用程序,请运行该命令:

    engee.genie.list()
  5. 从应用程序向会话传输数据 - engee.genie.send(wsVarName,value)`函数用于从 Genie 上的应用程序向 Engee 工作区发送数值。第一个参数 `wsVarName 以字符串形式指定变量名。第二个参数 value 是存储在变量中的值。如果没有同名变量,则会自动创建。一般情况下,使用此函数可以保存中间结果和用户数据。例如

    engee.genie.send("a", 42)
    engee.genie.send("message", "Hello")
  6. 从会话获取数据到应用程序 - engee.genie.recv(wsVarName;context=…​)`函数允许您从*Engee*环境中获取变量值,同时在 Genie 上运行应用程序。参数 `wsVarName 指定了变量的名称。如果变量是在其他模块中定义的,context 参数用于指定在哪个命名空间中查找。如果变量是在主应用模块范围之外预先定义的,则必须使用该参数。例如

    engee.genie.recv("a")
    engee.genie.recv("message")
    engee.genie.recv("value"; context=MyModule)
  7. 在工作区中执行代码 - `engee.genie.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 参数,该命令仍将输出当前日志。

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

您可以在应用程序中使用第三方软件包。 为此,请加载 Project.toml 文件并运行该命令:

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

在这种情况下

  • app.jl "和 "Project.toml "文件必须位于"/path/to/app "目录下。

  • Project.toml 不应*包含*Engee*软件包,但 Genie 仍可使用它们。


处理软件包的附加命令:

查看已安装软件包的列表:: 要显示应用程序中使用的所有软件包的列表,请运行以下命令:

+

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"])

使用限制和说明

  • 无法安装未包含在 Engee 版本中的新软件包。不过,您可以使用以下命令查看可用软件包:

    print(read("/usr/local/genie/Project.toml",String))
  • 以带有 app.jl 文件的目录表示的应用程序被视为标准应用程序。这是组织项目的推荐方式。

关于 genie 程序管理公共方法的详细说明,请参阅吉尼的公开计划管理方法 一文。

创建应用程序示例

/user 目录中创建一个 app.jl 文件文件浏览器file browser 7

genie app 2->genie app 3

app.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

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

  2. 连接 GenieFramework 库:

    using GenieFramework
    @genietools

    这里:

    • using GenieFramework:运行网络应用程序的插件库;

    • @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([]): 显示带有指令的文本:输入数字以计算其平方";

      • 第二块 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

然后使用命令运行应用程序:

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

此应用程序允许您对输入的数字进行平方运算,展示了如何在 Engee 工作区中创建自己的应用程序。

genie app 1

如果 Engee 会话已终止,而应用程序仍处于打开状态,系统将产生错误:

genie app 5