Small app framework что это
Хочу представить фреймворк для написания микрофронтеднов с поддержкой Webpack Module Federation. Фреймворк позволяет связывать приложения написанные на любых библиотеках, ванильном JS, и даже IFrame, если дела совсем плохи.
Недавно была статья, где довольно подробно было расписано, что есть на рынке. Однако большинство решений навязывают некие дополнительные концепции, будь то раутинг или реестр приложений, хотя по факту иногда ничего из этого не нужно, а нужен лишь простой и легкий способ внедрить одно приложение в другое.
Но отступим на секунду назад, зачем вообще нужен подход с микро-фронтендами? В какой-то момент любое большое приложение перерастает само себя, билд процесс замедляется, каждое мелкое изменение выливается в минуты ожидания в watch mode, кода становится слишком много, и его уже невозможно эффективно поддерживать.
Проблема усугубляется если команда хочет переходить на новый стек/фреймворк. Мы пытались плавно перейти с одного фреймворка на другой, заменив один монолит другим. Весь период перехода приходилось поддерживать оба продукта, и когда мы, наконец, закончили финальный монолит оказался совершенно огромным. В какой-то момент была высказана идея начать дробить его на под-приложения, но каждое из них разрабатывалось разными командами, имело разный интерфейс общения с хост-приложением, а некоторые под-приложения вообще были IFrame, т.к. нужна была максимальная изоляция. Такой подход, не смотря на минусы зоопарка, проработал какое-то время и был весьма успешен. Но на долгую перспективу он не работал.
Как включить приложение написанное на одном фреймворке в другое приложение на другом фреймворке? **Нужен абстрактный оркестратор!**
Прежде чем мы перейдем непосредственно к фреймворку, обозначим базовые термины:
- Хост — это приложение которое содержит в себе более мелкие приложения
- Под-приложение (или просто Приложение) — это IFrame, Глобальное Приложение или Приложение-Веб Компонент, которые включаются в хост, они в свою очередь могут быть хостами для более вложенных приложений
- Оркестратор: Web Apps Framework — агент, позволяющий хосту общаться с приложениями, загружать их и тд
- Приложения не говорят друг с другом напрямую, но хост может их соединить
Web Apps Framework
Web Apps framework это фреймворко-независимый способ внедрить любое приложение в любое приложение, с обобщенным коммуникационным интерфейсом и другими бонусами.
Рассмотрим скриншот из демо:
Стрелки указывают на разные приложения, которые бесшовно связаны, но при этом могут быть отдельно разработаны и задеплоены. Два из них даже IFrame, что может быть полезно, если нужно внедрить лютый легаси-код, который вообще может быть написан без JS, или приложение которому нужна максимальная изоляция стилей и кода.
Само собой, существуют и другие фреймворки, делающие то же самое, но Web Apps отличается особым минимализмом по части оберток и загрузчиков, и предоставляет унифицированный интерфейс для всех фреймворков: Angular, Vue, React, jQuery, без JS вообще, и т.д.
Есть два способа вставить приложение, как веб-компонент, и более оптимизированная версия для React. Все что нужно — указать URL и вуаля, приложение будет загружено и вставлено в DOM хоста, а все обработчики событий автомагически будут созданы:
Коммуникация может быть через события или через props (они же HTML attributes, в зависимости от способа подключения). События передаются в любой тип приложений, включая IFrame, через одинаковый интерфейс, так что хост может подменять приложения в любой момент, без необходимости знать тип. Это пригодится если вам надо загружать приложение для главной контентной области в зависимости от URL, откуда может быть взять ID приложения (в демо сделано именно так).
Вот пример как внедрять приложение в хосты, которые не написаны на React:
Как написать приложение?
Никаких особых техник для подготовки приложения не требуется, просто пишете его как обычно, и добавляете небольшую обертку в самом начале, в зависимости от типа приложения:
Глобальное приложение — просто скрипт который получает DOM Node и вставляет в него приложение
Приложение-веб компонент — приложение загружается как скипт и создает Custom Element, в который завернуто все остальное, позволяет добиться более хорошей изоляции от хоста благодаря Shadow DOM и Shadow CSS
Приложения IFrame Apps — для дополнительной изоляции и безопасности, когда хост не может полностью доверять приложению и показывать его в той же среде, что и он сам
Глобальные приложения
Допустим мы хотим внедрить приложение на React. С поддержкой Module Federation, точка входа будет выглядеть как просто default export функции, принимающей DOM Node и рисующей в ней приложение:
Мы плотно работали с авторами Module Federation (спасибо Zack Jackson) чтобы интеграция была максимально легкой.
Можно добавить MutationObserver , тогда можно пробросить изменения динамически в Реакт приложение в качестве props.
Если на хосте нет поддержки Module Federation, не беда, есть выход через простой JSONP-вызов:
Приложения на Web Component
Другой способ внедрить приложение — завернуть его в Web Component для лучшей изоляции CSS стилей посредством Shadow DOM и Shadow CSS:
Поскольку на изменения attributes можно подписаться, их можно пробросить в Реакт приложение.
Приложения IFrame
Для использования IFrame не нужно вообще никакого кода в самом простом случае. Но если вы хотите коммуницировать, то можно добавить следующее:
А что насчет общих библиотек?
Очевидно, как только у каждого приложения появляется свой билд-процесс, то все общие зависимости вроде react or react-dom начинают дублироваться. Иногда на это можно закрыть глаза, но иногда это проблема. Можно, конечно, обойтись externals, и другими трюками, но, к счастью, есть и более хорошее решение: Webpack 5 Module Federation.
Фреймворк Web Apps поддерживает Module Federation из коробки, и позволяет иметь общие зависимости между хостом и приложеиями, равно как и между приложениями (чего невозможно добиться стандартными костылями). Фреймворк и так довольно минималистичен, а федерация позволяет оптимизировать все еще больше. Module Federation также умеет автоматически догружать зависимости если хост не может их предоставить, грузить нужные версии. Настраивается все абсолютно стандартно:
Вот и все, теперь хост и приложение могут иметь общие зависимости, чисто и прозрачно.
Еще немного об IFrame
А вот взаимодействие с попапами несколько хитрее.
Обратите внимание на визуальное различие хоста и приложения: серый фон под попапом не распространяется на хост (что неудивительно, т.к. он внутри фрейма). Выглядит некрасиво!
Как можно увидеть, границы больше нет.
Также фреймворк умеет синхронизировать высоту фрейма и содержимое фрейма, чтобы длинные тексты отображались без подрезок.
Ниже вы найдете текстовую версию доклада и его видеозапись.
Друзья, привет! Меня зовут Кристина, я backend-разработчик SberDevices и тимлид сервиса управления диалогом, который используется для работы виртуальных ассистентов Салют. Расскажу вам сегодня о новом инструменте SmartMarket – SmartApp Framework, который мы выложили в open source.
Итак, давайте посмотрим, что же это такое. Во-первых, это Python-фреймворк, который создан для того, чтобы вы могли разрабатывать backend для смартапов с поддержкой виртуальных ассистентов Салют. Мы активно используем этот фреймворк внутри Сбера, большое число наших собственных смартапов построено на нем. Это такие диалоговые приложения, как погода, текущее время, многие банковские навыки, это и диалоговая часть Canvas App, про который очень хорошо и подробно рассказал мой коллега Антон. Наш самый любимый и вкусный пример Canvas App – это заказ попкорна, а также это app каталога.
C помощью фреймворка можно разрабатывать диалоговую часть Native App, как яркий пример – это app видео. (О разных типах смартапов можно узнать здесь. – Примеч. ред.)
Диалоговая механика
Давайте рассмотрим, что нам предоставляет фреймворк, на чем он основан. Одна из его основных особенностей в том, что диалоговая механика построена на механизме слотфиллинга. Что это такое? Приведу пример. Допустим, мы с вами хотим создать диалоговый навык P2P-перевода. Диалоговую часть можно схематично описать некоей формой, поля которой – это те сущности, которые мы хотим узнать у пользователя. В частности, для случая P2P-перевода мы хотим у пользователя узнать его имя, сумму, которую он хочет перевести, и согласие на подтверждение операции.
Одно из основных свойств поля – филлер. Филлер – это сущность, извлекающая из запроса пользователя информацию, которую мы хотим узнать. Помимо этого у поля есть свойство — question, которое позволяет задать вопрос пользователю.
Здесь есть несколько важных, на мой взгляд, моментов. Во-первых, диалог может строиться в произвольном порядке. Например, по шагам, когда пользователь сначала называет получателя, затем сумму. Также можно сказать в одном предложении: «Переведи 100 рублей папе». Или просто: «Переведи 100 рублей», и ассистент уточнит: «Кому?». Таким образом, нет необходимости переспрашивать у пользователя информацию и учитывать всю вариативность в описании диалога.
Извлеченные из диалога сущности можно переиспользовать, например, в других сценариях смартапа или далее по сценарию, это возможно «из коробки».
Сам диалоговый сценарий мы можем описывать несколькими путями. Первый и самый простой – декларативно с помощью нашего внутреннего языка DSL, который выглядит, как JSON. Здесь я привела пример того, как декларативно описать поле, которое извлекает имя пользователя и задает ему вопрос.
Но стоит помнить, что это все-таки фреймворк, то есть не только DSL, но и много кода. Мы старались проектировать фреймворк так, чтобы разработчик практически любую его часть мог легко переопределить. Сразу после входа в ваше приложение доступен его config, в котором все базовые классы можно легко переопределить, поддержав интерфейс. Мы этому посвятили целый раздел нашей документации для разработчика.
Предобработка текста
На практике механизм слот филлинга плохо работает без хорошей предобработки текста. Каждый запрос от пользователя перед тем, как попадает в ваш смартап, проходит этап предобработки, что позволяет внутри фреймворка извлекать такие именованные сущности, как: временной интервал, организация, локация, ФИО, валюта, сумма и многие другие.
На слайде приведен небольшой пример того, как выглядит результат предобработки текста, который приходит в смартап.
Работать с сырым JSON неудобно, поэтому для разработчиков внутри SmartApp Framework реализовано представление результатов предобработки в виде объектов классов, позволяющих удобно обращаться к сущностям предобработки. Благодаря этому филлер, который извлекает из предобработанного текста фамилию, имя, отчество пользователя, можно описать одной строкой на DSL или парой строк кода.
Запуск и тестирование смартапа
- первый – это поставить сам фреймворк из GitHub;
- второй шаг – создать смартап командой create_app. Вместе с проектом развернётся пример диалогового сценария для того, чтобы вам было проще начать разработку;
- третий – командой run_app вы запускаете смартап и уже можете тестировать. «Из коробки» вам будет доступен тестовый сценарий, который «знакомится с пользователем» и показывает базовые умения ассистента.
На этом у меня все. Будем рады вашим отзывам, пулреквестам и даже issues. SmartApp Framework доступен по ссылке.
Приглашаем 11 февраля на Второй онлайн-митап разработчиков SmartMarket.
В этот раз поговорим об устройстве хорошего мультимодального приложения для виртуальных ассистентов Салют, возможностях ASR и TTS, а также о монетизации смартапов на платформе SmartMarket.
Узнать подробнее, что вас ждет на митапе, и зарегистрироваться на него можно здесь.
Xposed - это продукт независимых разработчиков, который позволяет вносить изменения в системные ресурсы и конфигурационные файлы, что необходимо для добавления новых или модификации существующих функций Android. В рамках этого проекта были написаны десятки, а может уже и сотни различных утилит, каждая из которых служит для своей конкретной задачи. Например, есть инструменты, которые отключают встроенную рекламу в программах, изменяют вид и цвет иконок в строке состояния, позволяют управлять смартфоном жестами и многое другое. Эти утилиты работают в специальной среде выполнения Xposed Framework, к которой подключаются в виде отдельных модулей.
Таким образом, для получения полного доступа ко всем скрытым возможностям своего смартфона нам придется сначала получить рут, затем инсталлировать Xposed Framework, после этого загрузить и установить необходимые модули. Расскажем о каждом из перечисленных шагов подробнее.
Как установить Xposed Framework
Установить Xposed Framework возможно только с помощью специальной утилиты, которая называется Xposed Installer. Сделать это придется из apk-файла, так как в каталоге Google Play эта программа отсутствует. Для установки необходим Android версии 4.0.3 и выше, однако Android L пока не поддерживается. Перед началом необходимо убедиться, что у вас разрешена установка программ из незнакомых источников. Сделать это можно в разделе Безопасность настроек операционной системы. Кроме этого, еще раз хочу напомнить о необходимости обладания правами суперпользователя. Если все эти требования вами соблюдены, то выполните следующие шаги:
1. Скачайте apk-файл с этой страницы и сохраните его в любом удобном месте на своём гаджете.
2. Откройте инсталляционный файл и установите утилиту Xposed Installer.
3. Запустите установленную программу. Перейдите в раздел Фреймворк и нажмите кнопку Установить/Обновить.
4. После этого появится запрос на предоставление прав суперпользователя, с которым вы должны согласиться. Далее автоматически загрузятся и установятся необходимые для работы фреймворка файлы.
5. Перезагрузите устройство.
Теперь в вашем телефоне появилась среда выполнения Xposed Framework и можно найти и подключить нужные модули.
Как установить модули Xposed
Модули для Xposed Framework могут быть установлены сразу несколькими способами. Во-первых, многие модули вы сможете найти в магазине приложений Google Play и установить как обычные программы. Во-вторых, в сети существует специальный каталог Xposed Module Repository, откуда вы сможете их скачать в виде apk-файлов. И третий способ заключается в использовании установленного нами ранее Xposed Installer. Остановимся на этом методе подробнее
Для того, чтобы добавить новый модуль прямо из интерфейса утилиты Xposed Installer необходимо выполнить следующие действия:
1. Запустите Xposed Installer и перейдите в раздел Загрузка.
2. Здесь вы увидите длинный перечень доступных модулей и их краткое описание.
3. Найдите необходимый вам элемент с помощью строки поиска.
4. Нажмите на название нужного модуля. Перед вами откроется его подробное описание.
5. Свайпом перейдите на соседнюю вкладку Версии и нажмите кнопку Загрузка. Начнется установка выбранного вами модуля.
6. Вернитесь обратно в раздел Модули Xposed Framework и активируйте установленный модуль установкой флажка возле его названия.
7. Перезагрузите устройство.
Обратите внимание, что два последних пункта вам необходимо выполнить независимо от способа установки. То есть даже в том случае, если вы установили модуль из Google Play или в виде отдельного файла, вам все равно перед использованием нужно активировать его в списке Xposed Installer и перезагрузить устройство.
Возможно, для некоторых наших читателей, особенно только знакомящихся с устройством Android, данная инструкция покажется слишком длинной и сложной. Однако это совсем не так - все описанные действия занимают буквально несколько минут и ни в коем случае не могут нанести вред вашему гаджету. Зато взамен вы получите десятки полезных функций, которые позволят вам использовать свое устройство намного быстрее, удобнее и продуктивнее. О некоторых из них мы расскажем в следующих статьях.
Android – прекрасная платформа для мобильных устройств, она работает на миллионах смартфонов в 200 странах по всему миру. В этом посте я собрал несколько популярных фреймворков для разработки приложений под Android, из числа популярных среди разработчиков.
Смысл фреймворка – увеличить производительность, уменьшив затраты усилий на разработку. В идеале они экономят разработчикам время на то, чтобы заняться реально важными при разработке приложения вопросами.
1) Corona SDK
Богатый инструментарий для создания игр и приложений за рекордно короткое время
Обеспечивает возможность очень быстрой разработки. Элегантный API упрощает добавление сложных функций, технологический процесс позволяет сразу же видеть внесённые изменения, сама же разработка идёт на Lua – простом для изучения языке. Всё это приводит к рекордной скорости разработки.
Самый популярный фреймворк, часто используется разработчиками игр, но подходит для любого рода приложений. Уже более миллиона разработчиков пользуются API, поддержкой нативного интерфейса, встроенным движком и рекламной платформой.
2) Phonegap
Простое создание приложений при помощи веб-технологий.
Использует HTML5, CSS и JavaScript. Спонсируется Apache и Adobe. Версия 2.0 предлагает поддержку Windows phone, новых библиотек и функций CLI. Для вставки кода в крупные приложения используется инструмент Cordova WebView
3) Xamarin
4) Sencha Touch 2
Идеальная платформа для разработки и управления безопасными бизнес-приложениями, работающими на разных устройствах. Разработка ведётся на JavaScript и HTML5. Встроенная система MVC, 50 различных встроенных компонентов, система управления разработкой. Имеется бесплатная функция публикации приложения в Google Play.
5) Appcelerator
Разработчики утверждают, что в мире работают два миллиарда приложений, созданных на этом фреймворке. Частью фреймворка является Titanium SDK, который поддерживает разработку на языке JavaScript
6) Basic4Android
RAD (быстрая разработка приложений) и наличие своего IDE. Разработка ведётся на простом языке программирования, напоминающем Visual Basic.
7) JQuery Mobile
JQuery, заточенный под работу с сенсорными экранами. Помогает разработчикам строить сайты с отзывчивым дизайном и приложения, работающие как на десктопах, так и на планшетах и смартфонах.
8) Dojo Mobile
Фреймворк для создания приложений на базе HTML5 + JavaScript, помогающий реализовать быструю разработку мобильных приложений для Android и iOS. Присутствует набор форм, MVC, и симпатичные темы приложений.
9) Sproutcore
MVC-дизайн, оптимизация быстродействия и забота о расширяемости приложений.
10) Theappbuilder
Основан на HTML5. Предлагает простой drag and drop интерфейс без написания кода, что позволяет очень быстро разрабатывать приложения. Особое внимание уделяется интеграцией с соцсетями и прямая отправка приложений в Google Play.
11) DHTMLX Touch
Библиотека на основе AJAX и JavaScript, предназначенная для создания виджетов и приложений на основе HTML5.
12) Mo Sync SDK
Поддержка HTML5, JavaScript, C++ и 9-и различных платформ. Также возможно сопряжение с PhoneGap. Для отладки предлагается эмулятор под названием MoSync Reload.
Читайте также: