Развертывание R блестящего приложения как отдельного приложения

Я разработал приложение RShiny, которое я хотел бы поделиться с моими коллегами (размещать приложение на сервере, на данном этапе это не вариант).

Я изучал различные варианты, и я наткнулся на методику объединения вашего приложения в отдельное настольное приложение с файлом установщика, который вы можете поделиться и распространить. (Этот подход объясняется здесь и здесь) Это довольно аккуратно, поскольку для установки и установки этого приложения не требуется R (и любые другие необходимые пакеты) для установки и запуска приложения (у него есть переносные версии R, chrome и т.д.)

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

Однако это мое беспокойство: В идеале я бы не хотел, чтобы мои пользователи имели доступ к исходному коду. Есть ли способ ограничить такой доступ? В учебнике (первая ссылка, которую я опубликовал), это то, что автор говорит:

*

Наконец, имейте в виду, что ваш исходный код легко доступен. Если это вас беспокоит (например, если вы распространяете клиент которые не должны иметь доступ к коду), лучшее, что вы можете сделать, это доступ путем первой компиляции чувствительного исходного кода в двоичный пакет. Тем не менее, любой пользователь, который знает R (и имеет достаточные намерения) может просто выгрузить код на консоль.

*

Есть ли лучшие, более надежные способы препятствовать доступу?

Спасибо!

Ответ 1

Я не уверен, что это будет очень полезно для вопроса о скрытии кода, но пакет RInno предназначен для помогите с проблемой безопасности данных, то есть когда компания не хочет делиться своими данными с третьей стороной. Он также автоматизирует процесс, на который вы ссылались выше, и позволяет подключить ваше приложение к GitHub/Bitbucket, чтобы выталкивать обновления локально установленных блестящих приложений через вызовы API при запуске.

Для начала:

install.packages("RInno")
require(RInno)
RInno::install_inno()

Тогда вам просто нужно вызвать две функции для создания рамок установки:

create_app(app_name = "myapp", app_dir = "path/to/myapp")
compile_iss()

Если вы хотите включить R для своих коллег, у которых его нет, добавьте include_R = TRUE в create_app:

create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE)

По умолчанию он включает в себя shiny, magrittr и jsonlite, поэтому, если вы используете другие пакеты, такие как ggplot2 или plotly, просто добавьте их в аргумент pkgs. Вы также можете включить пакеты GitHub в аргумент remotes:

create_app(
    app_name = "myapp", 
    app_dir  = "path/to/myapp"
    pkgs     = c("shiny", "jsonlite", "magrittr", "plotly", "ggplot2"),
    remotes  = c("talgalili/installr", "daattali/shinyjs"))

Если вас интересуют другие функции, ознакомьтесь с FI Labs - RInno. Если вы хотите узнать, как подключить его к GitHub/Bitbucket, ознакомьтесь с Руководство по непрерывной установке:).

Ответ 2

Теперь есть способ превратить приложение Shiny в отдельное приложение Electron (настольное приложение, используемое для таких приложений, как Slack). Чтобы узнать больше, посмотрите эту превосходную презентацию от useR 2018, которая содержит дополнительные ссылки на репозитории GitHub.

Я надеюсь, это поможет вам.

Ответ 3

Я не знаком с этим подходом, это распространено? Я лично этого никогда не видел. Похоже, что в основном вы делаете это объединение R, Shiny, веб-браузера и вашего кода в файл. Как будто клиент устанавливает R, Chrome, блестящий и запускает ваш код, но он просто делает все за один клик. Вы буквально даете пользователю свой код. Я не знаю, как это работает, но если сам автор заявил, что клиент сможет увидеть исходный код, тогда это имеет смысл для меня, и я не думаю, что вы можете этого избежать.

Почему бы просто не разместить файл на блестящем сервере или shinyapps.io? Тогда клиент не увидит ваш код. Кроме того, действительно ли важно, чтобы они не могли видеть ваш код? Много раз люди боятся, что другие видят свой код, но на самом деле никто не заботится о том, чтобы другие люди кодовали и крали его. Если у вас нет очень запатентованного и запатентованного кода.