Документация Engee

Работа с Genie в Engee

Страница в процессе разработки.

Engee предоставляет возможность разрабатывать собственные приложения непосредственно в своей среде с помощью фреймворка Genie. Это позволяет пользователям создавать собственные приложения, веб-интерфейсы и различные интеграционные решения прямо в рабочем пространстве Engee.

Engee — это готовое и настроенное окружение для запуска приложений, созданных с использованием фреймворка Genie. Engee также предоставляет базовый функционал для их модификации. Далее в статье показаны основные принципы работы с Genie, зная которые, вы сможете адаптировать готовые приложения под свои нужды.

Genie — это фреймворк для разработки веб-приложений для Julia. Подробнее о фреймворке читайте на официальном сайте.

На Genie уже написан и полностью функционирует Редактор цифровых фильтров.

Среда Engee оптимизирована под работу с фреймворком Genie и несмотря на ядро Julia и поддержку работы с Python, не рекомендуется использовать любые другие фрейморки.

Использование Genie

Чтобы создать собственное приложение в Engee, следуйте следующим инструкциям. Приложение может быть представлено в виде .jl-скрипта или директории с файлом app.jl. Размещение таких приложений выполняется в пределах директории /user. Ниже описаны основные шаги для запуска, управления и работы с приложениями на основе Genie.

  1. Размещение приложения — созданное приложение необходимо поместить в директорию /user. Если приложение представляет собой директорию, то убедитесь, что в ней есть файл app.jl. Удалите файлы config и *.toml, если они присутствуют. Пример размещения:

    /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.genie.logs("/user/apps/MyGenieApp")

    Если при запуске приложения параметр log_file не был указан, то команда все равно выведет текущие логи.

Ограничения и особенности использования

  • Невозможна установка новых пакетов, не включенных в сборку Engee. Однако с помощью следующей команды можно посмотреть доступные пакеты:

    print(read("/usr/local/genie/Project.toml",String))
  • Приложение, представленное в виде директории с файлом app.jl, считается стандартным. Это рекомендуемый способ организации проекта.

Пример создания приложения

Создайте файл app.jl в директории /user файлового браузера file browser 7:

genie app 2genie 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

    Это начало модуля 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([]): Отображение текст с инструкцией: "Enter a number to calculate its square";

      • Второй блок cell([]): Поле ввода числа (textfield("N", :N));

        • "N": Подпись поля ввода;

        • :N: Связь поля с переменной N;

      • Третий блок cell([]): Отображение результата (квадрата числа) с помощью bignumber;

        • "The square of the number is:": Подпись;

        • :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

Полезные ссылки