Всем привет. В это тяжелое и смутное время, пока одни готовят трактор, другие пробуют себя в политике, а остальные покоряют женские сердца, мы, программисты помельче, продолжаем работать, в том числе и над своими собственными проектами.
Этот пост — рассказ о нашем домашнем проекте. Мы создавали его параллельно с основной работой, буквально на коленках, а через 2 месяца успешно запустили на кикстартере.
Идея
Всё началось около двух лет назад, когда мне подарили arduino (апаратно-программная платформа для быстрого прототипирования). Еще в студенческие годы мне хотелось соорудить какое-то рабочее устройство и запрограммировать его, но меня всегда пугали все эти паяльники, вольты-амперы и сложность микросхем. Да и времени как-то особо и не было, ибо девушки, алкоголь, дота и работа. С ардуиной же моя мечта сбылась: я мог создавать примитивные устройства, просто занимаясь любимым делом — программированием. Поигравшись несколько месяцев, я насытил свою пытливость и забросил ардуину на шкаф собирать пыль.
Но вот, на одной из офисных пьянок (привет, когнианс) я разговорился с дизайнером Пашей. Оказалось, что дизайнеры — тоже пытливые люди, и тоже не прочь побаловаться ардуинками. Паша предложил очень заманчивую идею: а что, если создать проект, который соединит ардуину с приложением в телефоне? Хм, а что, не плохо? Мое сознание сразу же нарисовало будущее, в котором это приложение бьет топ за топом в каждой из стран. В общем, идея мне понравилась. Она не была новой — в интернете то и дело проскакивали новости про некие pet-проекты отдельных людей, которые сами для себя писали сервачки, и через них по http управляли ардуиной, но каких-то готовых жизнеспособных решений на тот момент не было.
Поверхностный анализ показал, что в аппсторе даже есть некое подобие такого приложения. Оно было настолько убого и неюзабельно, что для нас явно вырисовывалась некая ниша. Потратив несколько дней на планирование архитектуры, фич, мы сели за реализацию.
Несколько десятков вечеров после работы, немножко выходных — и первый прототип был готов. Трудно описать то чувcтво радости, которое я испытал, когда смог зажечь диод с помощью своего телефона. Тем более, что это было так просто — установить приложение, зааплоадить код на ардуину, подключить библиотеку — и готово!
Но, как это часто бывает, по достижении цели энтузиазм пропал. Стало понятно, что сделать качественное приложение, сервер и библиотеки займет немало времени (около трех месяцев фултайма для
Сказано — сделано. Спустя полгода мы запустились. На текущий момент компания уже закончилась и собрала уже больше 490% от нашей первоначальной цели и 2300 бэкеров, что даже для нас оказалось неожиданностью (самый топовый проект собрал 62000 бэкеров, а учитывая нишевость продукта, это очень много).
Да, сумма, конечно же, не космическая. Ее едва ли хватит чтобы отбить затраты на разаработку. Но... Это ведь только начало.
Технические детали
Ну, и немножко технических подробностей (это же ДОУ =)).
Библиотеки для ардуины, а потом и для остальных железок пишутся на С++ и будут полностью открыты. Сейчас мы оттачиваем их дизайн и архитектуру для быстрой интеграции с разными железками. Основной вызов тут в слабом железе некоторых микроконтроллеров, в частности если говорить о некоторых Arduino, то это 2кб оперативки и ~27кб флеш памяти.
Сервер изначально будет open-source. Тут мы преследуем сразу 3 цели :
— снизить нагрузку на наши сервера,
— получить отзывы/помощь от сообщества,
— обеспечить безопасность системы для тех, кому это критично важно.
Сервер написан на Java с использованием nettyфреймворка на tcp сокетах. Бинарный протокол пока свой. Но с большой вероятностью мы переключимся на MQTT, если хватит времени. Я рассчитываю держать на нем около 10к активных соединений и около 5 сообщений в сек от одного соединения, то есть около 50к рек/cек.
К счастью, первые нагрузочные тесты показали очень хорошие результаты. Высокопроизводительный сервер — тоже один из больших вызовов для нас, так как мы планируем предоставлять доступ к сервису на бесплатной основе (с некими лимитами, конечно же). Так что постараемся выжать возможный максимум.
Ну, и самая главная фишка — мобильные приложения. Пока мы разрабатываем клиенты только под Android и iOS. Как это ни странно, но в мире Internet of Things огромное количество сервисов и клаудов, которые собирают данные с сенсоров и предоставляют интерфейс для их отображения, но почему-то напрочь отсутствуют мобильные приложения для этих целей. Упор делаем на максимальную простоту использования и удобный интерфейс. В идеале пользователь должен связать железку с мобильным приложением меньше чем за несколько минут.
Я уверен, что наш проект много кого заинтересует. Подробнее можно глянуть тут.
P. S.Я написал этот пост не для пиара, а для того, чтобы в эти нелегкие дни вселить оптимизм и уверенность в тех, кто что-то пробует, делает и не сдается. И удачи в ваших начинаниях!