Статьи

Почему JavaScript и Интернет вещей?

JavaScript зарекомендовал себя как в мире веб-приложений на стороне клиента, так и на стороне сервера, но почему он имеет потенциал в постоянно расширяющемся Интернете вещей (IoT)?

За последние два года я рассказал о растущем количестве технологий, которые разработчики JavaScript могут использовать в моих статьях JavaScript Beyond the Web и JavaScript Beyond the Web в 2014 году здесь, в SitePoint, а также в различных презентациях на конференциях и встречах. , Существует огромный уровень энтузиазма по поводу JavaScript и IoT, и это здорово (приятно знать, что я не одинок в этой страсти), но многие разработчики задают один очень разумный вопрос — почему JavaScript? Каковы преимущества использования JavaScript с Интернетом вещей? Я решил, что было бы полезно изучить эту тему более подробно и изложить много своих мыслей в письменной форме.

Большая часть Интернета уже говорит на JavaScript

Вся идея Интернета вещей проста. Мы хотим подключить ряд новых устройств к Интернету, чтобы они могли общаться с серверами и устройствами по всему миру. В то время как следующее большое IoT-устройство, которое меняет мир, вероятно, будет тем, чего мы не ожидаем (это просто природа технологии, верно?), Мы знаем технологические основы, на которых оно, вероятно, будет стоять — подключение устройств к веб-API в новых и неожиданных способах (надеюсь) принести пользу обществу. На каком языке говорят наши веб-страницы и веб-приложения прямо сейчас? JavaScript. Имеет смысл распространить ту же стандартную платформу на Интернет вещей, связываясь с большим количеством устройств с использованием того же языка.

Мы можем поделиться функциональностью

Возможность JavaScript быть везде огромна. При подключении сети устройств к вашему серверу, все они говорят на одном языке, что облегчает жизнь. Если у вас есть большое количество различных подключенных устройств, которые все понимают JavaScript, и у вас есть сервер, на котором работает Node.js, вы уменьшили сложность и можете совместно использовать функции, выполняющие аналогичные функции, на разных устройствах. Допустим, в вашем приложении есть бизнес-логика, которую нужно повторно использовать для разных устройств и ответов сервера. С помощью JavaScript вы можете с легкостью повторно использовать одни и те же функции для вызовов на разные устройства — создать один раз и использовать повторно.

Существующие библиотеки, плагины и API

У JavaScript есть ряд существующих библиотек, плагинов и API, многие из которых можно использовать в Интернете вещей. Хотя старые плагины jQuery не являются наиболее пригодными для повторного использования для кода, не относящегося к клиентской части, существует постоянно развивающийся мир модулей npm в JavaScript, которые можно повторно использовать для множества решений на клиенте, сервере и за его пределами.

Библиотеки утилит JavaScript, такие как Underscore.js , lodash , traverse и Async, идеально подходят для использования в различных ситуациях на разных устройствах. В вышеупомянутых модулях есть несколько очень мощных функций, которые были бы полезны для проектов IoT.

Другим примером отличного модуля JavaScript, который идеально подходит для IoT, является Socket.io — модуль, обеспечивающий обмен данными на основе событий в реальном времени между несколькими устройствами.

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

JavaScript хорош в приложениях, управляемых событиями

JavaScript довольно хорош в приложениях, управляемых событиями. Это виды приложений, в которых каждое устройство прослушивает различные события и реагирует на возникающие события, о которых оно заботится. Socket.io хорош в этом.

В Node есть «цикл обработки событий». Хотя в этой статье нет возможности подробно объяснить это, он позволяет нам выполнять ряд задач, не ожидая завершения каждой задачи, прежде чем перейти к следующей. , Мы можем получать и отвечать на события, а затем ждать обратного вызова от каждого события, которое уведомляет нас о его завершении. Это означает, что мы можем реагировать на события по мере их возникновения, манипулируя множеством задач одновременно по мере их поступления. Несколько устройств также могут реагировать на одни и те же события. Это хорошо работает в Интернете вещей.

Давайте представим, что у вас есть интернет с умной гидромассажной ванной, которая наполняется водой, когда вы идете домой. Это довольно случайный пример, но давайте пойдем с этим! Ваш телефон сигнализирует, что вы находитесь в пяти минутах от дома. Ванна видит это событие и начинает автоматически заполняться водой. Вам тоже хочется узнать последние эпизоды Готэма, поэтому вы открываете мобильное приложение и выбираете для загрузки и воспроизведения последние эпизоды сезона на большом дисплее над гидромассажной ванной в своей ванной комнате, когда вы приедете. Да, это довольно модная джакузи. Ванна получает это событие и начинает искать, какие эпизоды шоу вы смотрели.

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

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

JavaScript вырос как язык

Существует распространенное заблуждение, что JavaScript по-прежнему грязный язык для работы. Я не согласен. Вполне возможно создать очень стабильную и поддерживаемую кодовую базу, используя современные методы JavaScript. JavaScript — это достаточно развитый язык, чтобы его можно было использовать не только в простых клиентских приложениях. У нас уже есть JavaScript- линтеры, такие как JSHint, чтобы гарантировать соответствие кода определенному стандарту, и тестовые фреймворки JavaScript, такие как Mocha, которые также могут быть расширены для работы с системами IoT.

Данные

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

JavaScript открыт

Для разработчика JavaScript не требуется использовать конкретную IDE или одну операционную систему. Не нужно платить ежегодную плату за публикацию приложений на языке. Нет закрытой мегакорпорации, которая охраняет язык и его развитие из самых темных глубин. JavaScript — это открытый стандарт, который может быть реализован с использованием различных механизмов JavaScript. Я действительно надеюсь, что открытый стандарт JavaScript приведет ко многим открытым IoT-устройствам, которые могут сотрудничать и опираться друг на друга, поддерживая идеалы открытого Интернета в целой новой эре Интернета.

JavaScript — лучший выбор для новых разработчиков

Я думаю, что когда дело доходит до различных вариантов привлечения разработчиков к Интернету вещей, JavaScript имеет самые низкие барьеры для входа. Это более простой для начинающих язык, но существует целый ряд передовых способов структурирования и превращения проекта в действительно масштабируемую систему.

Невероятное сообщество

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

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

Это уже началось

Уже есть IoT-устройства с поддержкой JavaScript. См. Мои статьи JavaScript Beyond the Web и JavaScript Beyond the Web в 2014 году для ознакомления с некоторыми из них.

Вывод

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

Это все мои собственные мнения, но я хотел бы услышать ваши мысли в комментариях. Есть ли преимущества, которые я пропустил? Вещи, которые я мог бы сказать лучше? Был ли у вас опыт работы с JS и IoT, которым вы хотели бы поделиться?

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

Спасибо Phill Farrugia и Джереми Брауну за их мысли, когда я выкладывал вопрос в Twitter.