Интерактивная программа что это значит

Интерактивный контент: что это кроме квизов и как его использовать?

Всем привет! Меня зовут Олег Лукинов. Я один из основателей Interacty, сервиса для создания интерактивного контента. В статье расскажу о том, каким бывает интерактивный контент и как он может помочь вашему бизнесу. Спойлер: это не только квизы!

На Западе интерес к интерактивному контенту стал заметно расти примерно с 2016 года – как раз в это время активно развиваются такие сервисы, как Playbuzz (с 2019 года – EX.CO), Apester и многие другие. В России преимущества интерактивного контента раньше других оценили Медуза, РИА Новости и Арзамас, а также крупные бренды, которые стали активно создавать интерактивные спецпроекты в партнерстве с социальными сетями (в первую очередь с OK.ru).

Тем не менее многие интернет-издания все еще воспринимают интерактивный контент как что-то несерьезное. Например, не так давно я общался с представителем одного новостного портала, и на мой вопрос «почему вы не используете интерактивный контент», мне ответили: «Мы же серьезное издание!». В самом деле, интерактивы – это скорее про развлечения? Или не только? Давайте разбираться.

Поскольку чаще всего в контексте интерактивного контента в первую очередь вспоминают всевозможные тесты (их еще называют квизы от английского quiz), давайте с них и начнем.

Тесты делятся на два основных типа. Первый условно можно назвать «Проверь себя» (в английской версии Trivia), например «Знаете ли вы программу первого класса?». Здесь все просто: чем больше верных ответов, тем лучше результат.

Второй тип – тесты, в которых нет верных и неверных ответов. В таких тестах пользователи узнают что-то про себя. Например «Какой вы диван?». В английской терминологии такие тесты называют Personality. Мы называем их «Узнай себя».

И первые и вторые тесты – прекрасный инструмент для вовлечения аудитории. Кроме того тесты позволяют сегментировать аудиторию по уровню знаний, интересам, предпочтениям, что открывает возможности для квиз-маркетинга: после прохождения теста «подогретому» пользователю вы можете предложить релевантные товары или услуги. Также вы можете разместить лид-форму, в которой пользователь сможет оставить свои контакты. В этом случае вы получаете более высокую конверсию в заявку.

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

Если вы серьезное медиа, то тесты на актуальные темы помогут аудитории не только проверить знания, но и разобраться в деталях вопроса. Свежий пример: тест «Много ли вы знаете о коронавирусе?» на Bloomberg.

Современные инструменты позволяют опубликовать проект даже если у вас нет собственного сайта, что сильно облегчает задачу маркетологам. Но про квиз-маркетинг написано уже много – давайте посмотрим, на что способны другие интерактивы.

Фотоистории (или слайдшоу) несмотря на кажущуюся простоту тоже интерактивный формат. Вы много раз встречали его на новостных порталах вроде Коммерсанта или BFM. Этот формат сильно недооценен: если разместить на фото подпись, цену и кнопку «купить» – получится интерактивный каталог. Добавьте текст, интегрируйте в статью – и у вас готовый спецпроект. Кроме того, в конце вы также можете разместить лид-форму.

Цитаты – частный случай фотогалерей. Все любят цитаты ©. Интернет-издания часто делают подборки высказываний политиков, бизнесменов, звезд шоу-бизнеса. Этот формат отлично подходит для образовательных проектов, а некоторые издания собирают из цитат полноценные спецпроекты.

Можно ли использовать цитаты для повышения продаж? Как это часто бывает, все ограничивается лишь вашей фантазией. Но даже если вы захотите с помощью этого формата продавать книги с цитатами, подписку на интернет-издание или что-то другое, необязательно бежать за программистом: cуществующие сервисы помогут вам бесплатно поэкспериментировать и с этим форматом тоже.

Формат «До и после» еще называют «Было/Стало». Этот прекрасный формат, который позволяет сравнить два изображения, имеет свой неинтерактивный аналог – две фотографии рядом, показывающие произошедшее изменение, например, кто-то похудел/накачался/накрасился и тд. Тем не менее этот формат отлично подходит для более серьезных историй. Например, Авто Mail.ru вполне удачно использует этот инструмент, чтобы рассказывать про автомобили.

Формат «до и после» подходит для серьезных изданий и спецпроектов. С его помощью можно сравнить улицы города «тогда и сейчас», показать известных людей в юности и сегодня, результат таяния ледников или других драматических событий.

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

Мемори можно использовать не только для поиска одинаковых карточек, но и для поиска соответствий. Например, можно предложить найти пары: футболист и клуб, за который он играет, автомобиль и логотип компании производителя, политик и партия, которую он представляет. Онлайн-конструкторы Мемори позволяют добавить поясняющий текст, который появляется после верно найденного соответствия (как это сделано в примере с Романовыми). В конце игры при желании можно также разместить лид-форму, показать важное сообщение с кнопками действий или предложить скидку.

Эти форматы позволяют понять предпочтения аудитории и повысить активность на сайте. Голосования могут быть серьезными (поддерживаете ли вы изменение Конституции), а могут – шуточными (например, какого цвета платье?)

В первом случае важно, чтобы результат был точным. Часто его показывают пользователю только после того, как он проголосовал. Для второго примера можно использовать другой формат – голосование-баттл. Это формат, который позволяет голосовать неограниченное количество раз, выводя понравившийся вариант в топ. Кошки или собаки? Оксимирон или Гнойный?

Интерактивный таймлайн может стать украшением любой статьи или спецпроекта. Материал, поданный в таком виде, интересно рассматривать и изучать, а значит пользователи с большой вероятностью проведут на вашем сайте больше времени.

Это формат, позволяющий размещать на фотографии специальные метки, при нажатии на которые можно увидеть дополнительную информацию (текст, кнопки перехода, увеличенный фрагмент изображения). По этой причине мы называем этот формат Zoom. И здесь в качестве примера опять обзор автомобиля. Загрузите фото модели в одежде модных брендов, поставьте метки, а к пояснению добавьте цену и кнопку «Купить» – и вот вам еще одна идея для распродажи. Современные онлайн-редакторы позволяют без труда встроить любой интерактивный проект на сайт или в блог, поэтому на одной странице вы можете объединять разные форматы и интерактивы.

Наверное, самый нетривиальный инструмент, использование которого ограничивает лишь воображение (и иногда, учитывая кастомную разработку, бюджет). Здесь могут быть самые разные примеры. Если ваш проект про образование, то берите пример у Арзамаса: Превратите The Beatles в Монеточку или Соберите авангард из кусочков. Если пишете про новости и политику, берите пример с Медузы. Кстати, вот целая статья про то, как делаются игры на Медузе.

Разумеется, нет. Интерактивный контент – это целая философия, в основе которой попытка пробиться сквозь информационный шум, рассказать о сложных вещах просто и интересно, сделать контент более персонализированным, а значит более полезным и цепляющим.

Есть еще интерактивное видео, интерактивные книги, AR, VR, калькуляторы, флип-карты и многое другое.

Плюс в том, что сейчас практически любой интерактивный формат можно сделать в онлайн-редакторе бесплатно или по подписке. Например, 7 из перечисленных механик можно протестировать на Interacty.

Есть что добавить – пишите в комментариях. Нужна консультация в выборе инструментов или помощь в создании интерактивных проектов? Пишите в личку – буду рад помочь!

Источник

Интерактивное веб-приложение без программирования? Легко! Mavo вам в руки

Вы владеете HTML и CSS и умеете создавать простые (и не очень) статические веб-страницы, а хотели бы вдохнуть в них больше «жизни» и интерактивности? У вас есть работы (картины, фотографии, стихи, коллекция марок и т. п.), которыми вам хотелось бы поделиться с миром, но создание сайта-портфолио или блога, куда можно их разместить и без лишних усилий обновлять, вам не под силу? Или мечтаете вести дневник путешественника, или собирать необычные кулинарные рецепты, или отслеживать свою фитнес-активность и делать всё это онлайн на собственном сайте? Возможно, у вас есть любимый питомец, уход за которым требует особых процедур, и их обязательно нужно отслеживать и оперативно фиксировать?

Но от упоминания JavaScript вас бросает в лёгкую (а иногда и не очень) дрожь, а количество технологий и концепций, которыми нужно овладеть, чтобы реализовать ваши задумки, приводит вас в замешательство и отчаяние? В итоге вы задаётесь вопросами: «Почему веб-программирование должно быть таким трудным? Неужели нельзя что-то придумать, чтобы сделать его проще?».

Тогда вы пришли точно по адресу. Прочитав статью, вы получите в руки инструмент, с помощью которого, я уверен, сможете воплотить в жизнь, если не все, то многие свои идеи, аналогичные перечисленным выше.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значит

Автор оригинальных картинок: Mart Virkus (toggl.com)

Маститые и умудрённые опытом фронтенд-разработчики, не спешите закрывать статью с криками, что сейчас тут будут что-то «втирать» новичкам и вам здесь делать нечего. Я уверен, вы тоже сможете почерпнуть для себя что-то полезное. Главное, помните: если что-то станет простым для новичков, это автоматически станет простым для всех! А значит, в какой-то мере упростит жизнь и вам. Это неплохо, согласитесь?

Итак, к делу! Эта статья будет целиком и полностью посвящена Mavo.

Mavo — это новый подход к разработке интерактивных веб-приложений только за счёт написания HTML и CSS, без необходимости написания кода на языке JavaScript и разворачивания собственного сервера.

Mavo разрабатывается группой учёных Haystack Group лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института (MIT CSAIL) под руководством Лии Веру.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Хотите узнать чуть больше о том, какие идеи были положены в основу Mavo, какие черты своих предшественников он впитал, какие развил, а от каких пришлось отказаться и почему? Тогда очень рекомендую к прочтению эти две публикации, специально подготовленные для ежегодного форума, посвящённого иновациям в области человеко-машинного взаимодействия, — The ACM Symposium on User Interface Software and Technology (UIST):

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитНебольшое отступление для читателей из России!

Сайт Mavo хостится на серверах Netlify, адреса которых попали в «чёрный список» в результате «войны» с мессенджером Telegram. А значит, ресурсы, размещённые на этих серверах, равно как и все связанные с ними сервисы заблокированы на территории России (по крайней мере, на момент написания этой статьи).

Есть, правда, и хорошая новость: мы с Лией Веру (Lea Verou) активно работаем над решением этой проблемы. Надеюсь, в скором времени мы и это уладим. А до тех пор, пожалуйста, пользуйтесь, например, VPN для работы с Mavo (это справедливо как при доступе к сайту Mavo, так и при изучении демо-приложений на Codepen, а также и при создании собственных веб-приложений).

(ОБНОВЛЕНИЕ) Те, кто не готов и/или не хочет связываться с VPN, могут поиграть с Mavo на Stackblitz или подключить его к свому проекту через cdnjs.

Я убежден (и, думаю, я не одинок), что лучший способ «пощупать» новую технологию и оценить, на что она способна, — это построить что-то полезное с её помощью. Не очень сложное, иначе мы можем просто не увидеть леса за деревьями, но нужное. Осталось только выбрать что. О! Есть идея.

Думаю, многие из вас изучают иностранный язык (может быть, для кого-то таким является язык программирования). И, скорее всего, для его изучения вы используете какое-нибудь приложение. Новые слова в этих приложениях обычно изучают с помощью карточек. Кстати, этот приём изучения иностранного языка отлично работает и в офлайне. Но сейчас не об этом.

Так вот, почему бы нам с вами вместе не разработать такое приложение? Назовём его… (барабанная дробь!) «Карточки». Это будет полноценное CRUD-приложение для изучения иностранного языка с помощью карточек, которое позволит:

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значит

Годится? Надеюсь, да. Тогда в путь!

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

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

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

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитПрактика — путь к совершенству!

В конце некоторых разделов я буду предлагать вам небольшие самостоятельные упражнения, выполнив которые, вы сможете чуть лучше познакомиться с возможностями Mavo и одновременно улучшить разрабатываемое приложение. Подобного рода упражнения будут помещаться вот в такие фрагменты.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитЗапоминай через руки!

Готовы, следуя за нитью моего изложения, сразу применять новые знания на практике? Отлично! Ведь, как известно, мы лучше запоминаем то, что делают наши руки. Вы можете постепенно разрабатывать своё приложение, читая статью от начала и до конца, либо можете начать с любого интересующего вас этапа.

В таких фрагментах будут приводиться ссылки на соответствующие версии приложения на Codepen.

Теперь всё. Начинаем!

Статическая веб-страница

Чтобы проиллюстрировать, как Mavo расширяет возможности HTML, мы создадим статическую HTML-страницу, которую затем с помощью Mavo превратим в полнофункциональное веб-приложение.

Предположим, у нас есть следующий HTML-код внутри элемента :

В приведённом выше фрагменте кода элемент соответствует одной карточке.

Добавим немного стилей, чтобы наша страничка стала больше похожа на будущее приложение:

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значит

Хотите полностью увидеть исходный код? Вы можете сделать это здесь.

Подключаем Mavo

Пока у нас есть только статический макет. Настало время превратить его в полноценное веб-приложение. Вот тут как раз Mavo и вступает в игру!

Чтобы использовать Mavo, нам необходимо подключить его JavaScript- и CSS-файлы к нашей странице. Для этого добавим в элемент две следующие строки:

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитНебольшое отступление для читателей из России!

Вы можете загрузить соответствующие файлы из репозитория Mavo и подключить их к своей странице аналогичным образом.

(ОБНОВЛЕНИЕ) Вы также можете подключить Mavo к свому проекту через cdnjs.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Возможно, ваше приложение должно корректно работать в старых браузерах? Или вы хотите иметь возможность заглянуть в исходный код Mavo и ожидаете, что он будет читаемым? Всё в ваших руках. Вы можете тонко настроить, с какой сборкой и/или версией Mavo вы хотите поработать, ответив на несколько простых вопросов.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Если не присвоить атрибуту mv-app значение и при этом в том же самом элементе нет ни одного из атрибутов: id или name, — Mavo автоматически присвоит приложению имя mavo1, mavo2 и т. п.

Однако я настоятельно рекомендую вам явно указывать имя приложения, так как оно используется (явно и неявно) в других местах приложения.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитЗапоминай через руки!

Итак, пусть в нашем случае элемент будет содержать будущее приложение. Добавим к нему атрибут mv-app, а в качестве его значения укажем имя нашего приложения — flashcards:

Атрибут property

Теперь пора сообщить Mavo, какие элементы приложения являются важными, то есть будут редактироваться и/или сохраняться, а также, возможно, будут использоваться в выражениях (но об этом чуть позже — запаситесь терпением).

В нашем приложении пока есть два таких элемента — это элементы

. Добавим к этим элементам атрибут property, сообщив тем самым Mavo, что эти элементы содержат данные, с которыми нужно работать. Элементы с атрибутом property называются свойствами (properties).

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Атрибут property можно добавить к любому HTML5-элементу — Mavo знает, как сделать его редактируемым. Например, содержимое элемента вы сможете редактировать вручную с клавиатуры, а значение элемента (дату или время) вы сможете установить с помощью соответствующего виджета.

Набор правил, по которому Mavo делает элементы редактируемыми, может быть легко расширен с помощью плагинов. Нужно, чтобы пользователь мог форматировать текст с помощью панели инструментов, аналогичной той, что есть у таких программ, как Microsoft® Wordpad или Microsoft® Word, т. е. работать с текстом, как в любом WYSIWYG-редакторе? Или вы хотите разрешить пользователю набирать текст с использованием команд языка Markdown? Нет никаких ограничений. Просто активируйте соответствующие плагины. Нет подходящего плагина? Не проблема. Напишите свой. Mavo поддерживает соответствующий функционал прямо «из коробки».

Имейте в виду, что значение атрибута property должно описывать назначение элемента так, как обычно его описывают значения атрибутов id или class.

Превратим наши элементы

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Если у элемента уже есть атрибут id, class или itemprop, точно описывающий его назначение, можно не присваивать атрибуту property значение. Например, одно из свойств нашего приложения можно было бы описать так:

Заметили какие-нибудь изменения в нашем приложении после добавления в него свойств? Уверен, что да. Вверху приложения появилась панель инструментов Mavo (Mavo bar) с кнопкой Edit. Эта кнопка позволяет переключаться между двумя режимами работы приложения: режимом чтения и режимом редактирования. Сейчас наше приложение находится в режиме чтения. Это означает, что мы не можем редактировать его данные непосредственно в окне браузера.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Панель инструментов Mavo полностью настраиваемая (как и все элементы интерфейса, автоматически добавляемые Mavo в приложение): вы можете изменить её положение, внешний вид, задать набор доступных на ней кнопок или даже назначить ей свой HTML-элемент.

Чуть позже мы увидим один из вариантов такой кастомизации панели инструментов Mavo. А пока, если хотите чуть подробнее познакомиться с описанными возможностями, почитайте документацию на официальном сайте.

Что ж, самое время переключиться в режим редактирования и познакомиться с ним. Нажмите кнопку Edit.

Что же изменилось? Поменялось название кнопки: теперь её имя Editing. Это визуальный сигнал для нас: внимание, мы находимся в режиме редактирования. Попробуйте навести курсор мыши на любой из абзацев с текстом («Слово или фраза» или «Перевод»). Mavo сообщает нам с помощью жёлтой подсветки, что по этому фрагменту можно щёлкнуть и отредактировать его.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значит

Смелее! Щёлкните по тексту и внесите в него изменения. Ну разве это не здорово?! Мы можем редактировать содержимое страницы непосредственно в окне браузера!

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитПрактика — путь к совершенству!

Предположим, что помимо изучаемого слова (или фразы) и его перевода, мы хотим, чтобы на карточке присутствовал пример употребления этого слова (фразы) в предложении. Мы же знаем, что именно так нужно учить иностранные слова — в контексте, правда?

Усовершенствуйте приложение, добавив в него недостающий элемент, и дайте ему имя, например, example.

Атрибут mv-multiple

На данный момент в нашем приложении всего одна карточка. Откровенно говоря, это не очень-то полезно! Для полноценного приложения нам не хватает возможности добавлять новые карточки, удалять ненужные, а также переставлять карточки так, как нам удобно. Но как мы можем всё это реализовать?

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитЗапоминай через руки!

Будучи разработчиками приложения, мы могли бы добавить в него новые карточки, просто добавив ещё элементов в его HTML-код. Но тогда каким образом пользователь сможет добавлять и удалять карточки самостоятельно?

К счастью, в Mavo есть то, что позволит нам добавить в приложение соответствующий функционал на раз-два — атрибут mv-multiple. С помощью этого атрибута мы указываем Mavo, какие элементы приложения могут быть размножены. Атрибут mv-multiple превращает элемент, к которому он добавлен, в редактируемую коллекцию элементов (collection). При этом Mavo добавит к элементам такой коллекции элементы управления, с помощью которых можно добавлять в коллекцию новые элементы, удалять существующие и упорядочивать элементы коллекции с помощью перетаскивания. И да, стиль этих элементов управления тоже полностью настраиваемый!

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Если добавить атрибут mv-multiple к элементу без атрибута property, Mavo автоматически исправит эту ситуацию: добавит property со значением collection (или collection2, collection3, чтобы сохранить уникальность имени).

Однако, как и в случае с именем приложения, я рекомендую обязательно использовать атрибут property с коллекциями: это гарантирует сохранность данных приложения при внесении изменений в его HTML-структуру.

Что ж, давайте добавим атрибут mv-multiple к элементу приложения, чтобы превратить нашу одинокую карточку (flashcard) в полноценную редактируемую коллекцию карточек (обратите внимание, что при этом мы добавили ещё и атрибут property):

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Теперь смело переключайтесь в режим редактирования. Заметили, что под карточкой появилась кнопка Add flashcard? Устроим ей тест-драйв: добавьте с её помощью пару новых карточек. Это просто что-то невероятное: мы можем динамически добавлять новые карточки в приложение, даже если в его исходном коде нет соответствующих элементов!

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Заметили, что добавление атрибута property к элементу не сделало его содержимое редактируемым? Mavo считает этот элемент группой. Так происходит, когда атрибут property добавляется к элементу, содержащему внутри себя другие свойства, то есть элементы с атрибутом property.

Но и это ещё не всё! Наведите курсор мыши на любую из карточек. Видите, что у правого верхнего угла карточки Mavo добавил три новые кнопки (слева направо): для удаления карточки, добавления новой и перемещения существующей. И наводя курсор мыши на любую из этих кнопок, можно легко догадаться по генерируемой Mavo подсветке, к какой именно карточке они относятся.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значит

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Генерируемые Mavo кнопки работы с элементами коллекции полностью настраиваемые. Например, вы можете создать свою собственную кнопку перемещения элемента коллекции, добавив класс mv-drag-handle к соответствующему HTML-элементу.

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

Атрибут mv-storage

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитЗапоминай через руки!
https://codepen.io/dsharabin/pen/WNeYwpj

Теперь, когда основной интерфейс будущего приложения разработан, предлагаю сделать следующее:

Только спокойствие! На самом деле, мы никогда не указывали Mavo, что он должен сохранять редактируемые данные. Тем более мы не указывали, где конкретно он должен их сохранять.

Так давайте сделаем это сейчас. Для этого в Mavo есть специальный атрибут — mv-storage. Осталось только выяснить, какие значения он может принимать. И оказывается, Mavo открывает нам широчайшие возможности. А плагины — открывают ещё большие!

Пусть наше приложение сохраняет данные в локальном хранилище браузера — localStorage. Это самый простой из доступных в Mavo вариантов и отлично подходит для нашего первого приложения. Всё, что нам нужно сделать, — просто добавить атрибут mv-storage со значением local к корневому элементу приложения (так называется элемент с атрибутом mv-app, помните?):

А теперь взгляните на панель инструментов Mavo. Заметили новую кнопку Save? Помимо прямого назначения — сохранять изменения в приложении — у неё есть ещё одна полезная функция. Попробуйте отредактировать данные ещё раз. Обратите внимание, что кнопка Save теперь подсвечена. Наведите на неё курсор мыши, и Mavo подсветит вам данные, которые вы отредактировали, но не сохранили!

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значит

Нажмите кнопку Save и обновите страницу (при этом не обязательно переключаться в режим чтения). Ну что, теперь ваши данные сохранились? Отлично! Мы стали ещё на один шаг ближе к полноценному веб-приложению.

Атрибут mv-autosave

Сейчас наше приложение работает так, что пользователь должен нажимать кнопку Save всякий раз, когда ему нужно сохранить внесённые в приложение изменения. Это правильно с точки зрения сохранения жизненно важной информации, но часто пользователи забывают это делать. Как же быть? Вот бы наше приложение могло сохранять данные автоматически через какие-то промежутки времени! «А что, это реально можно сделать с помощью Mavo?» — спросите вы. А я с радостью и гордостью отвечу, что да, можно!

Итак, чтобы научить приложение автоматически сохранять изменения, вносимые пользователем в данные, мы можем воспользоваться атрибутом mv-autosave. Добавить его нужно к корневому элементу приложения. Значение этого атрибута — количество секунд, которое должно пройти с момента внесения пользователем изменений в данные до их сохранения приложением. Внесём соответствующие изменения в наше приложение:

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Атрибут mv-autosave=»3″ предписывает Mavo сохранять вносимые в данные изменения раз в три секунды. Наличие подобного рода задержки между сохранениями становится принципиально важным, если выбранный для сохранения данных сервис (бэкенд) хранит историю их изменения (например, GitHub и Dropbox). Отсутствие такой задержки сделает историю изменений просто-напросто бесполезной.

Чтобы увидеть и оценить внесённые в приложение изменения, ещё раз обновите данные на какой-либо из карточек и обратите внимание на кнопку Save. Заметили? Сначала она была подсвеченной, но через три секунды погасла, указывая тем самым, что несохранённых данных в приложении нет. Теперь все изменения сохраняются автоматически!

Таким образом, основная часть нашего приложения выглядит сейчас следующим образом:

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитПрактика — путь к совершенству!

Мы почти закончили с альфа-версией нашего приложения. Ура-ура! Теперь ваша очередь сделать его ещё лучше. Не волнуйтесь! Вы вооружены всеми необходимыми знаниями, чтобы выполнить задание, которое я вам предложу.

Усовершенствуйте приложение так, чтобы карточки, объединённые общей тематикой, можно было собирать в группы. Например, в одну группу входят все слова, имеющие отношение к одежде, в другую — названия профессий, в третью — названия продуктов питания и т. п.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитПодсказки!

Существует несколько способов решить поставленную задачу. Вам решать, какой из способов выбрать и по какому пути пойти. Но я хочу, чтобы вы подумали над ответами на пару вопросов, которые, возможно, помогут вам с поиском решения.

Чтобы «набить руку» и чуть больше познакомиться с Mavo и его возможностями, реализуйте оба этих способа решения.

Атрибут mv-bar

Продолжим расширять функционал нашего приложения. Мы настроили его так, что данные пользователя хранятся в локальном хранилище браузера. Но наше приложение остаётся однопользовательским: пользователи не могут делиться своими карточками с другими пользователями. А было бы здорово иметь такую возможность! Да и учить иностранный язык в компании куда веселее, не так ли?

Есть ли в Mavo способ разрешить пользователям экспортировать из приложения свои карточки и импортировать в него чьи-то чужие? Нам повезло! И этот функционал поддерживается в Mavo, как говорится, «из коробки». Конечно, это не сделает наше приложение многопользовательским в каноническом понимании этого слова, но наличие подобного функционала — уже немало для столь простого приложения, согласитесь.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитЗапоминай через руки!

Для подобных задач в Mavo есть атрибут mv-bar, с помощью которого можно указывать, какие кнопки отображаются на панели инструментов Mavo (если там вообще нужны какие-либо кнопки). Обычно этот атрибут добавляется к корневому элементу приложения. Сами кнопки имеют очень логичные (с точки зрения их наименования на английском языке) идентификаторы. Вот лишь некоторые из них: edit, import, export.

Поскольку мы хотим лишь добавить кнопки к уже имеющемуся на панели инструментов Mavo набору, мы можем воспользоваться так называемым относительным синтаксисом (relative syntax). Такой синтаксис позволяет нам добавлять и удалять кнопки из дефолтного набора без необходимости явно перечислять все кнопки, входящие в него. Всё, что нам достаточно сделать в нашем случае, — просто начать значение атрибута mv-bar с ключевого слова with, а затем перечислить (через пробел) идентификаторы нужных нам кнопок:

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитПрактика — путь к совершенству!

Устройте тест-драйв только что добавленному функционалу: добавьте в приложение несколько карточек и экспортируйте их в файл. Удалите все карточки из приложения, а затем импортируйте в него ранее экспортированные карточки.

Выражения. MavoScript

Перефразируя известную фразу, произнесённую персонажем Евгения Евстигнеева в знаменитом советском фильме «Берегись автомобиля», спрошу: «А не замахнуться ли нам в нашем приложении на статистику?!» Предлагаю отображать где-то вверху приложения общее количество карточек в нём. Заинтригованы? На это я и рассчитывал.

Но прежде чем суметь «замахнуться» и реализовать намеченное, нам нужно узнать кое-что новое о Mavo.

Мы уже знаем, что важные элементы приложения (которые, в частности, можно редактировать и сохранять) называются свойствами. Напомню, это элементы, для которых указан атрибут property. Значение этого атрибута — имя свойства, описывающее его роль в приложении.

Так вот, мы можем использовать значение любого свойства, ссылаясь на него, в любом месте внутри приложения Mavo (даже в значениях HTML-атрибутов). Для этого нужно просто заключить имя свойства в квадратные скобки. Вот так: [имяСвойства]. Эта запись является примером так называемого простого выражения. Простые выражения позволяют нам производить вычисления всякий раз, как только что-то в приложении меняется, то есть реактивно.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Язык выражений, поддерживаемый Mavo, называется MavoScript. Он очень похож на язык формул в электронных таблицах (таких как Microsoft® Excel, Apple Numbers или Google Sheets) и позволяет производить вычисления и другие операции с числами, текстом, списками и т. п.

Создатели Mavo разработали MavoScript так, чтобы выражения, записанные на этом языке, были хорошо читаемыми: продолжая аналогию с электронными таблицами, можно сказать, что в выражениях используются не безликие адреса ячеек, а именованные диапазоны, делающие формулу более простой для восприятия человеком.

Плюс, MavoScript позволяет работать с данными, имеющими иерархическую структуру.

Более подробно о выражениях Mavo и языке MavoScript можно почитать в официальной документации.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитЗапоминай через руки!

Перейдём от слов к делу и посмотрим на реактивность в действии. В качестве эксперимента, давайте добавим выражение [source] внутрь свойства flashcard. Например, между свойствами source и translation:

Какие же изменения произошли в нашем приложении? Как минимум, мы видим, что значение свойства source отображается в карточке дважды. Так? Так!

Идём дальше. Переключимся в режим редактирования и попробуем изменить значение свойства source. Видите, что происходит в то время, как вы меняете значение этого свойства? Значение выражения [source] реактивно вычисляется, и изменения, которые вы вносите в значение свойства source, автоматически отображаются ниже: там, где мы использовали выражение. Ну не чудо ли?!

Это, разумеется, здорово, но пока мы не приблизились к решению нашей задачи — отображению информации о количестве карточек в приложении. Почему? Просто выражение [source], помещённое внутрь карточки, всегда будет возвращать ровно одно значение — значение свойства source именно этой карточки. А нам бы нужно как-то добраться до всех карточек в приложении.

А что если теперь мы поместим выражение [source] не внутри свойства flashcard, а снаружи? Вот так:

Как это будет отличаться от рассмотренного ранее случая? Чтобы увидеть эти самые изменения, добавьте в приложение несколько карточек. Обратите внимание, что теперь вместо одного значения над карточками мы видим список разделённых запятыми значений свойства source всех(!) имеющихся в приложении карточек. Если мы посчитаем, сколько значений в этом списке, то получим количество карточек в приложении. Согласны?

Осталось устранить одно маленькое логическое противоречие. Какое? Не кажется ли вам, что логичнее было бы считать количество самих карточек, а не количество значений их свойства source? В конце концов, добавляемая в приложение карточка уже существует до того, как пользователь заполнит её свойство source или translation. Как же поступить? Я предлагаю просто скорректировать выражение и сделать его более логичным: вместо [source] написать [flashcard]. В итоге получим:

Как же отразились внесённые нами изменения на том, что мы видим в приложении? У нас всё ещё есть список разделённых запятыми значений, но значения эти теперь являются комплексными значениями — объектами. Каждый объект соответствует одной карточке и содержит все её свойства (даже если карточка пустая(!)).

Таким образом, теперь у нас есть, что посчитать (количество объектов, соответствующих карточкам, в списке), но остаётся вопрос, как это сделать. Что ж, у Mavo есть ответ и на этот вопрос. В MavoScript есть функция count(), которая позволит нам посчитать количество элементов в списке.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

MavoScript — достаточно богатый язык выражений. В нём изначально есть почти всё необходимое, включая наиболее часто используемые функции.

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

Мы получили ровно то, к чему стремились, — теперь наше приложение показывает полезную статистику!

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значит

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитПрактика — путь к совершенству!

Надеюсь, вы уже достаточно разогрелись и готовы продолжить экспериментировать с Mavo и… статистикой. Предупреждаю, здесь задание будет чуть позаковыристее, и вам придётся кое-что самостоятельно изучить. Но не волнуйтесь, нужными подсказками я вас вооружу.

Усовершенствуйте приложение так, чтобы статистика отображалась не только по общему количеству карточек в приложении, а также отдельно по каждой группе карточек (если вы добавляли соответствующий функционал ранее).

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитПодсказка!

Вам может понадобиться умение отбирать карточки, удовлетворяющие определённому критерию, и подсчитывать их количество. Для этих целей вам пригодится оператор where или функция filter().

Самооценка

У нас уже есть готовое приложение, которое позволяет создавать, редактировать и хранить набор карточек. Но как отслеживать наш прогресс: какие карточки мы уже хорошо выучили, а с какими нужно поработать ещё? Давайте подумаем, что мы можем здесь сделать.

Предлагаю остановиться на очень полезной и в то же время модной (можно сказать, хайповой) функции — функции самооценки.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитЗапоминай через руки!

Итак, добавим в наше приложение две кнопки: Плохо и Хорошо. Какого поведения мы ожидаем от приложения, когда пользователь нажимает эти кнопки? В принципе, идея достаточно простая:

Теперь, когда мы определились с тем, что мы хотим сделать, нужно провести небольшие подготовительные работы и добавить соответствующие элементы в наше приложение:

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значит

Атрибут mv-action

Mavo предоставляет нам возможность описывать собственные правила, по которым должны обрабатываться пользовательские данные нашим приложением, — так называемые настраиваемые действия (custom actions).

Чтобы определить настраиваемое действие, необходимо добавить атрибут mv-action к соответствующему элементу приложения. Описанное с помощью данного атрибута действие выполняется при каждом щелчке по элементу, к которому добавлен этот атрибут. Это как раз соответствует тому, какое поведение мы ожидаем от кнопок самооценки — Плохо и Хорошо.

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Значением атрибута mv-action является выражение. При построении этого выражения можно использовать любые операции и функции, предоставляемые нам MavoScript, а также несколько специальных функций манипулирования данными: add(), set(), move() и delete().

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

Итак, вернёмся к реализации функции самооценки. При нажатии кнопок Плохо и Хорошо мы должны перемещать карточку внутри коллекции карточек на новое место: первое или последнее. Именно это действие позволяет реализовать функция move(). В качестве первого аргумента функции нужно указать перемещаемую карточку, а в качестве второго — новое место (позицию) этой карточки в коллекции. Имейте в виду, что элементы коллекции нумеруются с нуля, то есть первая карточка имеет в коллекции позицию 0.

Теперь у нас достаточно знаний, чтобы реализовать первую часть функционала самооценки: при нажатии пользователем кнопки Плохо соответствующая карточка перемещается в начало коллекции, т. е. становится первой. В коде приложения это будет выглядеть следующим образом:

Обратите внимание, что в значении атрибута mv-action мы ссылаемся на свойство flashcard внутри самого этого свойства. Это позволяет нам работать с текущей карточкой и перемещать именно её.

Если мы попытаемся по аналогии реализовать и вторую часть функционала самооценки, то неминуемо столкнёмся с проблемой. Можете, не заглядывая вперёд, догадаться, с какой?

Вспомним, что происходит при нажатии кнопки Хорошо: соответствующая карточка перемещается в конец коллекции, то есть становится последней. А чтобы сделать карточку последней, нам нужно знать, сколько всего карточек в коллекции (приложении). К счастью, мы уже знаем, как решить задачу вычисления количества карточек в приложении, и даже реализовали соответствующий функционал. Сможем ли мы воспользоваться найденным ранее способом решения в этой новой ситуации?

К сожалению, нет. И вот почему: чтобы подсчитать количество карточек в коллекции, мы ссылались на соответствующее свойство — flashcard — вне самого этого свойства. Но в этом случае нам пришлось бы сослаться на свойство flashcard внутри него. То есть нам пришлось бы написать что-то типа такого:

И это не сработает! Вы можете легко в этом убедиться экспериментальным путём.

Так как же нам быть в этой ситуации?

Вычисляемые свойства. Элемент

Итак, с одной стороны, мы знаем, что выражение [count(flashcard)] возвращает в качестве результата количество карточек в приложении, если оно записано вне свойства flashcard. С другой стороны, нам необходимо использовать результат этого выражения внутри свойства flashcard. Да, дилемма!

Чтобы её разрешить, нам нужно суметь вычислить значение выражения [count(flashcard)] вне свойства flashcard и каким-то образом сохранить результат, чтобы впоследствии можно было его использовать в любом месте приложения. А в нашем случае — внутри свойства flashcard. Для решения такого рода задач в Mavo есть, так называемые, вычисляемые свойства (computed properties).

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитЗапоминай через руки!

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитСледуй за белым кроликом!

Имейте в виду, что по умолчанию вычисляемые свойства, в отличие от обычных свойств, не сохраняются.

Добавим вычисляемое свойство flashcardCount в приложение. Но не забывайте, что мы должны добавить это свойство обязательно вне свойства flashcard (но использовать его значение мы сможем в любой части приложения):

Теперь мы сможем реализовать недостающий шаг в функционале самооценки: при нажатии кнопки Хорошо соответствующая карточка перемещается в конец коллекции, то есть становится последней. В коде это будет выглядеть следующим образом:

Вот мы и закончили! Наше приложение готово. Поздравляю!

Интерактивная программа что это значит. Смотреть фото Интерактивная программа что это значит. Смотреть картинку Интерактивная программа что это значит. Картинка про Интерактивная программа что это значит. Фото Интерактивная программа что это значитПрактика — путь к совершенству!

Есть и другой способ решения этой задачи — с помощью специального свойства $all.

Специальное свойство $all, использованное внутри коллекции, соответствует ей всей. Таким образом, отпадает необходимость прибегать к вычисляемому свойству для работы со всей коллекцией внутри этой коллекции. Попробуйте самостоятельно применить специальное свойство $all вместо вычисляемого свойства flashcardCount для реализации функционала самооценки другим способом. Какой из способов вам нравится больше? Почему?

В реализованном нами приложении осталась крошечная деталь, которую нужно поправить. Теперь, когда у нас есть вычисляемое свойство, мы можем (и должны) использовать его для вычисления количества карточек в приложении. Внесите соответствующие изменения.

Выводы

Мы прошли с вами достаточно долгий путь разработки пусть и простого, но полноценного интерактивного веб-приложения. И при этом мы не написали ни одной строчки кода на языке JavaScript. Если это не чудо, то я не знаю, как это назвать по-другому. И если вы читаете эти строки, то вы оказались «крепкими орешками». Благодарю вас за это.

Как известно, образование — то, что остается после того, как забыто все, чему учили в школе. Давайте напоследок соберём воедино всё, что, я надеюсь, останется в вашей памяти после прочтения этой статьи. Итак, чтобы превратить статическую HTML-страницу в полноценное приложение Mavo, необходимо выполнить нескольких несложных шагов:

Вместо эпилога

Вот мы и разработали наше приложение. Идеальное ли оно? Конечно, нет. В этом мире нет ничего идеального. Всегда есть, что можно улучшить, и всегда найдётся функционал, который можно было бы включить в приложение (например, можно сделать приложение многоязычным). Как говорится, нет предела совершенству. Дерзайте! Улучшайте приложение на ваше усмотрение. Не бойтесь экспериментировать и пробовать что-то новое — это прекрасный способ учиться и закреплять приобретённые знания! Откуда знаю? Просто уже больше 17 лет учить людей — моя профессия (работаю в учебном центре «Сетевая Академия ЛАНИТ»)!

Всё, что мы узнали про Mavo, — всего лишь верхушка айсберга, и он способен на гораздо большее. Изучите документацию и примеры реализованных с помощью Mavo проектов и убедитесь в этом лично. Вот несколько источников для самостоятельной работы: официальный сайт Mavo и коллекции демо-приложений, выполненных Лией Веру и вашим покорным слугой.

Mavo ещё очень молод. И если вам понравился заложенный в него подход к разработке веб-приложений, вы можете стать полноценными участниками нашего сообщества. Как? Есть несколько вариантов:

Благодарности

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

В первую очередь, я очень благодарен Лие Веру (Lea Verou), которая не только сподвигла меня к написанию оригинала этой статьи на английском языке (и помогла мне воплотить её в жизнь), но и постоянно вдохновляет меня своим примером: тем, как она делает мир веб-разработки лучше для всех. Я никогда не встречал столь одарённого человека и безумно рад, что мне выпала счастливая возможность поработать с ней!

Я также благодарю Джеймса Мура (James Moore). Примеры, которые он использует в своем курсе «Функциональное программирование в JavaScript для начинающих» на платформе Udemy, а также выбранный им подход к обучению, мотивировали меня к созданию первой версии приложения «Карточки». Он замечательный учитель!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *