В тридевятом царстве в тридесятом государстве… Свой рассказ о хакатоне в Wrike я начал так, потому что Хакатон — он как сказка: собираются энтузиасты, чтобы дать жизнь своим идеям. Выпускается идея, как стрела сказочная, а дальше может и на боярский двор упасть, а может и в болоте повседневности сгинуть. И, как в сказке, это всегда захватывающе. Не просто ведь за очень короткое время и команду собрать, и из идеи продукт сделать, да еще и показать его так, чтобы люд честной удивить.
![Кирилл](https://habrastorage.org/webt/vt/tj/fs/vttjfsyaoy0creit9_isnjp5kry.jpeg)
А если серьезно, то хочется поделится опытом участия в хакатоне, где мы свою augmented reality (AR) разработали. Расскажу про то, как мы пытались найти готовую AR SDK под нашу задачу, но не смогли. В итоге решили сами написать AR и получилось.
Я очень люблю хакатоны: поучаствовал в нескольких, приходилось самому проводить, и при возможности еще поучаствую.
![В поисках счастья](https://habrastorage.org/webt/ts/f3/xx/tsf3xx6iuuvraiacvqn9dctht98.jpeg)
Хакатоны зачастую проводятся конкретными организациями, и это работает на HR бренд компании. Цели при этом могут быть разные: рассказ о компании или продукте, найм разной степени агрессивности, организация тематического сообщества, поиск свежих идей (несмотря на армии собственных продуктологов, может быть полезно получить букет идей от мечтателей с незамыленным взглядом на предметную область) и т.д.
Для участников это возможность познакомиться с компанией, ведь часто хакатон — это её отражение, и по нему можно делать выводы о внутренней кухне. Чтобы понять процессы в компании, можно смотреть на то, как она организует хакатон: какие ограничения для проектов, участвующих в хакатоне (объем задач, предметная область, технология, инструментарий и т.п.); уровень проведения мероприятия; критерии и прозрачность соревновательной части; судейство — состав и качество; какие установлены правила и методы формирования команд. В целом же, компании делятся на тех, кто проводит хакатоны (внутренние или публичные) и тех, кто нет. Мне больше нравятся те, кто проводит, т.к. это более открытые компании.
Сам я хожу на хакатоны не ради победы, а ради участия. Мне интересно:
Поэтому я с радостью участвую в хакатонах wrike (в этом году был уже третий внутренний хакатон), где мы придумываем и делаем wrike еще лучше: часть предыдущих хакатоновских проектов уже живут в нашем продукте, а некоторые находятся в бэклогах команд. Вдохновляет и масштаб, несмотря на то, что хакатон внутренний, набирается около 30 команд (больше 100 человек) — все со свежими крутыми идеями.
На хакатоне 2018 я решил попробовать работу с AR. В MVP хотелось сделать отображение задач wrike (название, статус, исполнители и т.д.) на экране мобильного телефона при наведении на графический код с зашифрованным в нём идентификатором задачи, а также добавить возможность изменения статуса и назначение / снятия задачи с себя. Идея есть, хакатон есть, за командой дело тоже не встало. В назначенный день все завертелось.
Я особо не готовлюсь к хакатонам в плане настройки окружения (поиск SDK и фреймворков; установка софта; конфигурирование и т.п.), написания кода зарание и т.д., а занимаюсь только проработкой идей, фичей, обдумыванием что в каком порядке делать и т.п. Поэтому посовещались мы с командой решили, что писать будем на Java (на ней же нативно под Android пишут), и была гипотеза, что наверняка полно готовых AR библиотек. Наш план: возьмем удобную SDK, приладим к ней API Wrike, а дальше сосредоточимся на написании логики нашего приложения. Таким образом первой нашей задачей стало найти удобную Java AR SDK, которая позволяет:
Выглядит как довольно простая задача. И мы начали перебирать варианты, основываясь на статьях типа "Top Augmented Reality SDK in 2018"
![Солнце, Луна, Ветер](https://habrastorage.org/webt/kr/et/ic/kretic2lyujcjcmsohl4oqmildw.jpeg)
Сперва свои взгляды мы обратили на Google. Открыли "Быстрый старт", сделали всё по инструкции, запустили и, о чудо, всё работает: у меня на столе появляются Андроидики, которых можно еще и перемещать. Ощущение, что мы нашли «основу» для нашего приложения. Но дальше последовало разочарование, распознавание картинок работает не так, как нам надо: картинка может быть только одна, она должна быть хорошо видна, и она должна быть из базы заранее известных картинок (а у нас для каждой задачи должен быть свой уникальный маркер). И что самое печальное, это невозможность управлять фокусом, из-за чего поймать для распознавания нужное нам изображение становится непростой задачей для пользователя. Правда сейчас с фокусом проблему решили, а нам пришлось продолжить поиски. В целом Google оказался хорош, но не для нашей задачи. А еще из-за специфики работы OpenGL на OSX, мы не смогли заставить работать демку в эмуляторе и всё делали на живом телефоне.
Прочитали документацию, посмотрели ролики, выглядит впечатляюще. Фичей много, например, Image Targets. Решили попробовать: зарегистрировались, скачали, собрали, запустили. Demo приложение запустилось, но ни на эмуляторе, ни на живом android-e не работало. Попытка проверить любую функцию приводила к краху всего приложения. Было решено не тратить время на поиск проблемы и её починку, и перейти к следующему SDK.
Скачали SDK, пошли по туториалу, запустили демку. Тут куча всяких возможностей, демка сразу впечатляет, куча мини примеров, мы вдоволь наигрались (например, есть распознавание лиц), и, о чудо, в демке уже есть распознавание QR. Но проблема в том, что мы получаем то, что зашифровано в коде, но не знаем, где он расположен. Стали разбираться, как устроен сканер QR. Оказалось, что он сделан как надстройка над ZBar в виде плюсового плагина к SDK. Сперва посетила шальная мысль расчехлять gcc и допиливать плагин, чтобы он еще и координаты отдавал, но мы вовремя остановились.
Осознав, что добрая четверть времени из отведенных суток позади, а мы все еще ищем свою SDK (были пробы и других решений, не только описанных выше, но и там тоже фиаско), решили больше не искать «серебряную пулю», а взять всё в свои руки. Созрел новый план: в качестве маркера задачи берем QR код, как простой и распространенный; для их распознавания берем ZXing, который умеет распознавать одновременно несколько кодов и помимо значения, библиотека еще отдает координаты 3 «поисковых» точек QR кода. А затем поверх считывалки кодов будем реализовать свой AR. Засучили рукава и вперед, у нас есть 3 точки, а значит при помощи аффинных преобразований можем получить всё, что нам потребуется.
![Царевна лягушка](https://habrastorage.org/webt/jt/gi/gn/jtgigntu6lhizw2t9ndnp26ngas.jpeg)
Искать библиотеку для математики не стали, благо задача у нас не сложная. Первым делом сделали свой класс для нужного нам перерасчета координат. Итоговый алгоритм работы с QR кодом получился довольно примитивным:
Запилили алгоритм, он работает, тестируем, боремся с утечками памяти, дописываем визуальные эффекты, получаем удовольствие от хакатона.
В хакатонах помимо самого вашего продукта, очень важно то, как вы его представите. Все понимают что у вас очень сжатые сроки и технически красивое решение от вас не ждут, поэтому нужно показать красоту вашей идеи. Мне всегда нравится подход рассказывания истории, где слушателям понятно, для кого делается продукт, в каких условиях он применяется и какую задачу решает.
![Wrike Hackathon](https://habrastorage.org/webt/t8/41/zw/t841zwppg11j60wwou4yqsa7ljs.jpeg)
Поэтому в своей презентации помимо демонстрации полученного функционала, мы призвали силу воображения и описали ситуации, в которых подобная дополненная реальность (AR очки уже скоро станут обыденностью) может улучшать жизнь тем, кто работает не за компьютером, но чья работа связана с wrike. Например, для взаимодействия между дизайнером-архитектором, занимающимся ремонтом дома, и бригадой, которая непосредственно реализует проект в самом доме.
Мне кажется мы с честью продемонстрировали наш MVP, и словили свои лучики любви. Лето закончилось, и подходит к концу пора пикников и отпусков, и мы подумываем посвятить осенние вечера развитию нашей Wrike AR.
За иллюстрации спасибо Sai Kin!
![Кирилл](https://habrastorage.org/webt/vt/tj/fs/vttjfsyaoy0creit9_isnjp5kry.jpeg)
А если серьезно, то хочется поделится опытом участия в хакатоне, где мы свою augmented reality (AR) разработали. Расскажу про то, как мы пытались найти готовую AR SDK под нашу задачу, но не смогли. В итоге решили сами написать AR и получилось.
Присказка
Я очень люблю хакатоны: поучаствовал в нескольких, приходилось самому проводить, и при возможности еще поучаствую.
![В поисках счастья](https://habrastorage.org/webt/ts/f3/xx/tsf3xx6iuuvraiacvqn9dctht98.jpeg)
Хакатоны зачастую проводятся конкретными организациями, и это работает на HR бренд компании. Цели при этом могут быть разные: рассказ о компании или продукте, найм разной степени агрессивности, организация тематического сообщества, поиск свежих идей (несмотря на армии собственных продуктологов, может быть полезно получить букет идей от мечтателей с незамыленным взглядом на предметную область) и т.д.
Для участников это возможность познакомиться с компанией, ведь часто хакатон — это её отражение, и по нему можно делать выводы о внутренней кухне. Чтобы понять процессы в компании, можно смотреть на то, как она организует хакатон: какие ограничения для проектов, участвующих в хакатоне (объем задач, предметная область, технология, инструментарий и т.п.); уровень проведения мероприятия; критерии и прозрачность соревновательной части; судейство — состав и качество; какие установлены правила и методы формирования команд. В целом же, компании делятся на тех, кто проводит хакатоны (внутренние или публичные) и тех, кто нет. Мне больше нравятся те, кто проводит, т.к. это более открытые компании.
Сам я хожу на хакатоны не ради победы, а ради участия. Мне интересно:
- Попробовать новые технологии. На одном «едовом» хакатоне мы взяли Flutter, и написали приложение под ios и android. Хотя до этого никто из нас не пробовал Flutter, правда Dart мы умели.
- Познакомиться и поработать с новыми людьми, так после одного из «городских» хакатонов, я позвал соучастника хакатоновского проекта работать в свою команду на основную работу, о чем ни разу не пожалел. Хакатон — это отличный способ проверить боевого товарища в деле.
- Сделать, что-нибудь, что реально нужно мне самому. На внутреннем хакатоне запилили приложение, которое потом использовали в работе.
- Просто получить позитивные эмоции от созидания. Мне очень нравится атмосфера хакатонов!
Поэтому я с радостью участвую в хакатонах wrike (в этом году был уже третий внутренний хакатон), где мы придумываем и делаем wrike еще лучше: часть предыдущих хакатоновских проектов уже живут в нашем продукте, а некоторые находятся в бэклогах команд. Вдохновляет и масштаб, несмотря на то, что хакатон внутренний, набирается около 30 команд (больше 100 человек) — все со свежими крутыми идеями.
На хакатоне 2018 я решил попробовать работу с AR. В MVP хотелось сделать отображение задач wrike (название, статус, исполнители и т.д.) на экране мобильного телефона при наведении на графический код с зашифрованным в нём идентификатором задачи, а также добавить возможность изменения статуса и назначение / снятия задачи с себя. Идея есть, хакатон есть, за командой дело тоже не встало. В назначенный день все завертелось.
Я спросил у ясеня
Я особо не готовлюсь к хакатонам в плане настройки окружения (поиск SDK и фреймворков; установка софта; конфигурирование и т.п.), написания кода зарание и т.д., а занимаюсь только проработкой идей, фичей, обдумыванием что в каком порядке делать и т.п. Поэтому посовещались мы с командой решили, что писать будем на Java (на ней же нативно под Android пишут), и была гипотеза, что наверняка полно готовых AR библиотек. Наш план: возьмем удобную SDK, приладим к ней API Wrike, а дальше сосредоточимся на написании логики нашего приложения. Таким образом первой нашей задачей стало найти удобную Java AR SDK, которая позволяет:
- Рисовать что-нибудь на заданной виртуальной поверхности.
- Интегрироваться / уже содержит сканер динамических графических элементов (barcode, QR, и т.п.).
- Работать с низким порогом входа (мы же на хакатоне, нам надо быстро): есть демка, есть документация, есть бесплатная / триальная версия.
Выглядит как довольно простая задача. И мы начали перебирать варианты, основываясь на статьях типа "Top Augmented Reality SDK in 2018"
![Солнце, Луна, Ветер](https://habrastorage.org/webt/kr/et/ic/kretic2lyujcjcmsohl4oqmildw.jpeg)
ARCore от Google
Сперва свои взгляды мы обратили на Google. Открыли "Быстрый старт", сделали всё по инструкции, запустили и, о чудо, всё работает: у меня на столе появляются Андроидики, которых можно еще и перемещать. Ощущение, что мы нашли «основу» для нашего приложения. Но дальше последовало разочарование, распознавание картинок работает не так, как нам надо: картинка может быть только одна, она должна быть хорошо видна, и она должна быть из базы заранее известных картинок (а у нас для каждой задачи должен быть свой уникальный маркер). И что самое печальное, это невозможность управлять фокусом, из-за чего поймать для распознавания нужное нам изображение становится непростой задачей для пользователя. Правда сейчас с фокусом проблему решили, а нам пришлось продолжить поиски. В целом Google оказался хорош, но не для нашей задачи. А еще из-за специфики работы OpenGL на OSX, мы не смогли заставить работать демку в эмуляторе и всё делали на живом телефоне.
Vuforia
Прочитали документацию, посмотрели ролики, выглядит впечатляюще. Фичей много, например, Image Targets. Решили попробовать: зарегистрировались, скачали, собрали, запустили. Demo приложение запустилось, но ни на эмуляторе, ни на живом android-e не работало. Попытка проверить любую функцию приводила к краху всего приложения. Было решено не тратить время на поиск проблемы и её починку, и перейти к следующему SDK.
Wikitude
Скачали SDK, пошли по туториалу, запустили демку. Тут куча всяких возможностей, демка сразу впечатляет, куча мини примеров, мы вдоволь наигрались (например, есть распознавание лиц), и, о чудо, в демке уже есть распознавание QR. Но проблема в том, что мы получаем то, что зашифровано в коде, но не знаем, где он расположен. Стали разбираться, как устроен сканер QR. Оказалось, что он сделан как надстройка над ZBar в виде плюсового плагина к SDK. Сперва посетила шальная мысль расчехлять gcc и допиливать плагин, чтобы он еще и координаты отдавал, но мы вовремя остановились.
И бились они 3 дня и 3 ночи
Осознав, что добрая четверть времени из отведенных суток позади, а мы все еще ищем свою SDK (были пробы и других решений, не только описанных выше, но и там тоже фиаско), решили больше не искать «серебряную пулю», а взять всё в свои руки. Созрел новый план: в качестве маркера задачи берем QR код, как простой и распространенный; для их распознавания берем ZXing, который умеет распознавать одновременно несколько кодов и помимо значения, библиотека еще отдает координаты 3 «поисковых» точек QR кода. А затем поверх считывалки кодов будем реализовать свой AR. Засучили рукава и вперед, у нас есть 3 точки, а значит при помощи аффинных преобразований можем получить всё, что нам потребуется.
![Царевна лягушка](https://habrastorage.org/webt/jt/gi/gn/jtgigntu6lhizw2t9ndnp26ngas.jpeg)
Искать библиотеку для математики не стали, благо задача у нас не сложная. Первым делом сделали свой класс для нужного нам перерасчета координат. Итоговый алгоритм работы с QR кодом получился довольно примитивным:
- Изображение с камеры передаем в ZXing, получаем массив с координатами точек и значениями QR кода.
- Из 3 координат рассчитываем 4-ый угол квадрата, квадрат увеличиваем в полтора раза, чтобы перекрыть исходный QR код, и получаем основу для карточки.
- Делаем запрос в API Wrike, чтобы забрать данные о задаче.
- Рисуем карточку, благодаря аффинным преобразованиям, сохраняем все искажения (угол обзора, поворот, масштаб).
Запилили алгоритм, он работает, тестируем, боремся с утечками памяти, дописываем визуальные эффекты, получаем удовольствие от хакатона.
И я там был, мёд-пиво пил
В хакатонах помимо самого вашего продукта, очень важно то, как вы его представите. Все понимают что у вас очень сжатые сроки и технически красивое решение от вас не ждут, поэтому нужно показать красоту вашей идеи. Мне всегда нравится подход рассказывания истории, где слушателям понятно, для кого делается продукт, в каких условиях он применяется и какую задачу решает.
![Wrike Hackathon](https://habrastorage.org/webt/t8/41/zw/t841zwppg11j60wwou4yqsa7ljs.jpeg)
Поэтому в своей презентации помимо демонстрации полученного функционала, мы призвали силу воображения и описали ситуации, в которых подобная дополненная реальность (AR очки уже скоро станут обыденностью) может улучшать жизнь тем, кто работает не за компьютером, но чья работа связана с wrike. Например, для взаимодействия между дизайнером-архитектором, занимающимся ремонтом дома, и бригадой, которая непосредственно реализует проект в самом доме.
Мне кажется мы с честью продемонстрировали наш MVP, и словили свои лучики любви. Лето закончилось, и подходит к концу пора пикников и отпусков, и мы подумываем посвятить осенние вечера развитию нашей Wrike AR.
За иллюстрации спасибо Sai Kin!
Комментарии (5)
shadson
02.09.2018 22:24Не выложите куда-то на github результат?
Venkard
03.09.2018 11:09+1Поддерживаю, хочется поглядеть на то что получилось.
Я тоже перепробовал много sdk, но остановился на vuforia, мне она показалась вроде самой лёгкой в использованииDemetrikl Автор
03.09.2018 11:13То что есть у нас сейчас точно не опубликуем, потому что:
- Стыдно: левой пяткой за 12 часов ничего красивого не пишется
- Очень специфично: мы решали свою задачу, чтобы было что продемонстрировать на демо-фесте хакатона. Это фактически не переиспользовать нигде в таком виде.
Но в планах все-таки причесать и часть наработок отдать общественности.
когда созреет обязательно здесь отпишусь и ссылками поделюсь
akeinhell
Во wrike на внутренние хакатоны только работников берут или с улицы тоже можно придти поучаствовать?
Wriketeam
Пока проводим только внутренние хакатоны.