Программирование в Loginom: Python vs JavaScript

Технические аспекты использования языков программирования в Loginom. Сравнительный анализ, ограничения и рекомендации по использованию JavaScript и Python.

Loginom является low-code платформой для продвинутой аналитики. Он прост в использовании и в большинстве случаев позволяет реализовать сложную логику без применения языков программирования. Это является одним из главных его преимуществ. Однако не все задачи можно решить без кода. Иногда написание нескольких строк быстрее и удобнее, чем визуальное проектирование, поэтому Loginom поддерживает два языка программирования — JavaScript и Python.

Есть несколько причин, по которым кодинг может быть полезен аналитику при работе в Loginom:

  • Дополнительные возможности. Использование языков позволяет реализовать функционал, отсутствующий в стандартных компонентах Loginom.
  • Адаптивность. С помощью программирования можно создавать гибкие сценарии, больше соответствующие требованиям конкретного бизнес-процесса.
  • Оптимизация производительности. В некоторых случаях при помощи языков программирования можно оптимизировать производительность и улучшить работу сценария в условиях высоких нагрузок.
  • Переиспользование наработок. Поддержка Python и JavaScript позволяет использовать ранее созданные скрипты в сценариях Loginom.

Рассмотрим, как программирование встраивается в Loginom и в каких случаях нужно применять тот или иной язык.

Встраивание в поток обработки

Первое, что необходимо понимать при использовании кодинга в Loginom, — это принцип работы. JavaScript и Python работают как встроенные в поток обработки данных узлы. Посредством использования компонентов JavaScript и Python можно легко интегрировать скрипты на этих языках в сценарий.

Простота встраивания обеспечивается благодаря Data API — интерфейсу получения данных c входных портов и передачи на выходные. С помощью Data API информация в портах узла прозрачно преобразовывается в структуры соответствующих языков программирования, с которыми в дальнейшем при помощи кода можно производить любые манипуляции.

Структуру таблицы для выходного порта можно задать как на странице Настройка столбцов выходной таблицыJavaScript/Python мастера, так и динамически в ходе исполнения скрипта при установке флага Разрешить формировать выходные столбцы из кода.

Пример получения на JavaScript при помощи Data API данных из входного порта c динамическим формированием структуры выходной таблицы выглядит следующим образом:


import { InputTable,OutputTable } from "builtIn/Data";

// Иницилизация количества полей
const ColCount = InputTable.ColumnCount;
// Иницилизация количества записей
const RowCount  = InputTable.RowCount; 

// Инициализация полей
OutputTable.AssignColumns(InputTable.Columns);

// Заполнение набора данных в цикле по входному набору
for (let i = 0; i < RowCount; i++) { 
    // Добавление новой записи в набор данных
    OutputTable.Append(); 
    for (let j = 0; j < ColCount; j++) {
        // Полученное значение входного набора передается на выходной
        OutputTable.Set(j, InputTable.Get(i, j)); 
    }
}

Аналогичный пример, но в случае применения Python:


from builtin_data import InputTable, OutputTable
from builtin_pandas_utils import to_data_frame, fill_table

# Создание pandas.DataFrame по входному набору
data = to_data_frame(InputTable)

# Копирование столбцов входного набора
OutputTable.AssignColumns(InputTable.Columns)

# Заполнение выходного набора
fill_table(OutputTable, data, with_index=False)

JavaScript

Для выполнения JavaScript-кода применяется движок ChakraCore. Узлы используют общий пул движков, но выполнение происходит в изолированном контексте. Максимальный размер пула зависит от числа логических ядер системы.

Для получения и передачи данных на входных и выходных портах узел JavaScript использует интерфейс Data API, получающий данные «лениво». Методы работы с данными остаются неизменными вне зависимости от того, работает несколько узлов JavaScript параллельно или нет.

Кроме этого, компонент поддерживает:

  • Fetch API — интерфейс для работы с HTTP-запросами и ответами, предоставляет возможность взаимодействия с веб-сервисами, ресурсами сети непосредственно из узла JavaScript. Наиболее популярный кейс использования Fetch API — работа с REST запросами.
  • File Storage API — интерфейс, позволяющий выполнять все файловые операции (чтение/запись файлов, создание папок и прочее). Достоинством реализации данного API в компоненте JavaScript является то, что эти действия выполняются безопасно как в настольных, так и в серверных версиях. В настольных редакциях допускается обращение ко всей файловой системе (с учетом прав пользователя). В серверных редакциях предоставляется доступ только к изолированной области файлового хранилища и к общим папкам, настроенным администратором. Благодаря этому File Storage API не требует предоставления пользователю Loginom прав администратора или выполнения иных небезопасных действий.

В маркетплейсе Loginom есть библиотека компонентов на базе File Storage API — Loginom FileAPI, которая позволяет производить все операции с файлами при помощи визуального проектирования.

Кроме этого предоставляется возможность подгружать иные библиотеки JavaScript. Поддерживаются 2 модульные спецификации — EcmaScript 6 и CommonJS.

JavaScript работает из коробки без каких-либо дополнительных настроек, инсталляций и иных действий.

Помимо узла JavaScript, данный язык программирования можно использовать в обработчике Калькулятор, позволяющем писать формулы как в стиле Excel, так и на JavaScript.

Python

Для работы с Python потребуется установка интерпретатора языка на сервер, где инсталлирован Loginom и предварительная настройка. Применение Python в Loginom может отличаться в зависимости от ОС.

Использование этого языка связано с рисками, т.к. он работает не в «песочнице». Например, с помощью Python можно написать вредоносный код и украсть данные другого пользователя, либо каким-то другим способом навредить системе, на которой развернут Loginom.

Именно поэтому по умолчанию выполнение кода Python запрещено. Для обеспечения безопасной работы рекомендуется запускать интерпретатор Python в контейнерах, что потребует определенной настройки системным администратором.

Под Windows узел Python может запускаться как внутри процесса Loginom, так и в отдельном, а при работе под Linux доступен только вариант работы в отдельном процессе. Кроме того, есть определенные особенности использования и ограничения, которые необходимо учитывать.

Применение Python внутри процесса не требует загрузки/выгрузки данных в файлы или какие-либо другие приемники/источники. Data API «лениво» получает данные (переменные и таблицы) из входного порта и выгружает обработанные результаты (таблицу) в выходной порт, что позволяет экономнее расходовать оперативную память. Но при этом одновременно может работать только один узел Python на сервер Loginom.

При включенной опции Запускать в отдельном процессе параллельно может выполняться более одного узла Python. Но в этом случае анализируемые данные выгружаются в промежуточные файлы и запускаются отдельные процессы интерпретатора Python для каждого узла, что приводит к потерям времени на чтение и запись с диска.

В узле Python доступен вспомогательный модуль builtin_pandas_utils, позволяющий преобразовывать наборы данных Loginom в pandas DataFrame и обратно.

В маркетплейсе Loginom представлена библиотека Python Kits, которая имеет следующие возможности:

  • Автоматизация рутинных операций с наборами данных, расширяющие стандартный функционал Loginom.
  • Быстрый перенос существующего кода на Python (pandas, sklearn) в Loginom с использованием no-code подхода.
  • Разработка универсальных шаблонов-сценариев Loginom, которые будут работать на любом наборе данных.
  • Внедрение в сценарий модели машинного обучения из библиотек на Python.

Выбор языка

Большинство задач в Loginom можно решить за счет визуального проектирования, но если этого недостаточно, то необходимо принимать во внимание особенности встраивания каждого языка программирования в платформу.

Достоинства компонента JavaScript в Loginom:

  1. Безопасный, т.к. запускается в «песочнице»;
  2. Не требует дополнительных действий по установке или предоставлению прав;
  3. Единообразно работает в любой ОС, настольных и серверных редакциях;
  4. Обеспечивает высокую скорость за счет JIT компиляции и кэширования кода;
  5. Всегда использует «ленивое» обращение к данным.

Достоинства применения Python:

  1. Мощный и универсальный язык программирования;
  2. Огромное количество библиотек: работа с данными, машинное обучение, интеграция и т.д.;
  3. Большое количество разработчиков в сфере анализа данных.

Python — популярный среди дата-сайентистов язык. Но необходимо учитывать, что на практике кодинг часто используется не для запуска алгоритмов машинного обучения, а для решения простых задач: добавить новые записи в зависимости от значений определенных полей, видоизменить таблицу с использованием циклов, распарсить JSON и т.п.

Поэтому общее правило применения языков программирования в Loginom следующее: по умолчанию использовать JavaScript, а Python применять только если JavaScript не закрывает задачу.

Другие материалы по теме:

Новые демопримеры Loginom: обзор изменений и улучшений

Библиотеки компонентов Loginom Kits: кому и для чего

Loginom: что под «капотом»

Арустамов Самвел
Loginom, Технический специалист
#loginom#javascript#python

Смотрите также