company_banner

Hackathon@JetBrains 2014



    Прошло уже больше года с тех пор, как в нашей компании прошел первый хакатон, давший жизнь новым проектам. За это время “идеафон” (тот самый брутально-музыкальный инструмент, состоящий из газовых труб и молоточков, управляемых с помощью Arduino) посетил несколько выставок и продолжал вдохновлять наших разработчиков на новые идеи.

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



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

    Как это было





    Участвовать в хакатоне могли все желающие (не только разработчики). Темы проектов тоже ничем не ограничивались. Два офиса JetBrains – петербургский и мюнхенский — на 2 дня превратились в базы для участников проектов, с полным обеспечением: тематические ланчи (немецкие для питерского офиса и русские для мюнхенского), наборы для выживания (плед, подушка, беруши, маска для сна) и 48-часовая инфраструктурная поддержка проектов.



    Писать про то, как писали код (уж простите за тавтологию), думаю, особого смысла нет. Все хабрачитатели и так прекрасно представляют, как это происходит. Единственное, на что я хотел бы обратить внимание — это символика. Организаторы решили выделить участников хакатона флажками и браслетиками среди всех сотрудников, чтобы все знали: эти ребята работают сейчас в другом измерении.





    О приложениях


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

    TravelPie


    Одна из команд за 48 часов сделала приложение для путешественников, которые, очутившись в новом месте, хотят полезно провести время и узнать город в своем собственном стиле.



    Приложение не содержит стандартных туров по городу, оно каждый раз автоматически создает уникальный тур в зависимости от интересов пользователя. На входе выбираешь город, куда собираешься поехать (сейчас это только Санкт-Петербург, хакатон жеж), количество дней и адрес, где планируешь остановиться. Далее из списка выбираешь то, что тебе интересно, и в каких пропорциях (составляешь свой собственный travel pie интересов). На выходе получаешь маршрут на каждый день с учетом того, где перекусить, куда сходить, чем заняться и все это — исходя из твоих предпочтений.



    На каких технологиях построено?
    Для поднятия бэкенда было принято решение использовать знакомые технологии и затратить наименьшие усилия: Java, Servlet 3, H2 Database. Для фронтенда использовали Backbone.js и RequireJS для модульности и управления зависимостями. Все, естественно, писалось в IntelliJ IDEA, для хранения кода использовался git.

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

    JetSocialism


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



    Поскольку каждый человек так или иначе уникален, то приложение может попробовать выделить сильные стороны пользователя – например, кто-то постит больше других meta-issues, или его коммит чаще других валит билд, а кто-то просто пишет большие тексты или быстро фиксит минорные задачи…



    Таким образом, по довольно сложной формуле выясняется, что человек работает очень быстро, и тогда он разлочивает бейдж «Спиди Гонзалес». А другой закрывает древние ишью, он — “Убийца мумий”, ну и так далее… Формулы бывают и простые, и сложные. На выходе получаем фан — а данные и так уже давно существуют и будут существовать.

    JetWorld


    У нас много пользователей по всему миру, очень приятно, когда в некоторых городах есть сильные сообщества, которые делятся внутри себя знаниями, но мы хотели бы сделать еще один шаг навстречу нашим пользователям и попытаться показать все события, связанные с JetBrains на карте мира. JetWorld — инструмент, задача которого — помочь пользователям продуктов JetBrains по всему миру создать более тесные локальные сообщества.

    Технологически — это веб-приложение, использующее API Google Maps для представления данных. В качестве хранилища данных используется MongoDB, бэкенд написан на Kotlin, а фронтенд — на чистом JavaScript. В качестве платформы для хостинга используется Heroku.



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

    Есть и возможность добавления организаций на карту, которая может позволить сторонним компаниям рассказывать о своем опыте использования продуктов JetBrains. Разработчики JetWorld хотят дать возможность отдельным пользователям, которые являются экспертами в наших продуктах, рассказывать о себе. Доступ к базе экспертов будет очень полезен пользователям и компаниям в обучении, обмене опытом в использовании продуктов JetBrains.

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



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

    О победителях


    Ну и конечно же нужно сказать о победителях.

    Robot — painter


    Третье место выиграла Екатерина Тузова со своим роботом-художником, который за 6 с небольшим часов мог в одну линию нарисовать любую картинку формата А3. Робот построен на шаговых двигателях, управляемых с помощью Arduino. Программное обеспечение по анализу изображения и построения пути было написано на питоне.



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



    Wachter


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



    Сначала родилась идея сделать веб-кнопку, которая при нажатии посылает сигнал на сервер и активирует шлагбаум. Но ребята из проекта с шуточным названием “Wachter” пошли дальше. Они получили доступ к камерам наружного наблюдения и с помощью библиотеки OpenCV стали «разбирать» автомобильные номера. У нас есть своя внутренняя социальная сеть JetPeople, в которой у каждого сотрудника на страничке указан госномер транспортного средства. Уже в первый день Wachter научился различать номера (правда не все) и проверять их на соответствие записям сотрудников.



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

    HandCartoon


    Первое место досталось проекту по анимации плоских картинок на планшете. Об этом проекте мы решили снять небольшой ролик-интервью:



    Вот наши победители:



    А теперь будем ждать следующего года.

    Keep hacking!
    JetBrains
    139.33
    Делаем эффективные инструменты для разработчиков
    Share post

    Comments 18

      +4
      “Wachter” пропустит человека с распечатанным госномером кого-то из сотрудников или у него есть таки синдром вахтёра?
        0
        Под шлагбаумом человек может итак спокойно пролезть, проблема в другом, можно напечатать номер, и для заезда на парковку наклеить его на свой номер
          0
          О том и речь, что у человека будет не настоящий номер, а картинка. А где эта картинка будет — дело десятое.
            +5
            Тогда спасибо за номер =))
            0
            Пропустит, если будет хорошо распечатан. Хотя синдром вахтера иногда случается (не всегда номер распознается корректно)
              0
              И шлагбаум не закроется, если что-то мешает (например, машина ещё не проехала)? Тогда подходит кто-то с бумажкой и за ним колонна машин.
            +3
            Аааааа!!! Хочу HandCartoon под iOS!!! Выпустите приложение, дайте купить! :)
              0
              Как же клево наверное с его помощью будет забавные баннеры с анимацией самому делать и мини-комиксы… если будет экспорт в гифки, например.
              +3
              Отличные продукты! отличная компания! отличная команда!
              • UFO just landed and posted this here
                  +2
                  По поводу робота-художника есть важный комментарий – исходную картинку он обрабатывает и представляет в виде одной линии, картина рисуется с помощью обхода змейкой (как можно видеть из ролика), темные места выделяются скачками на линии (чем больше отклонение, тем более темная область). Мону Лизу да Винчи тоже сможет, но в своем исполнении. Вам сделать?
                  • UFO just landed and posted this here
                      +2
                      beenom, конечно, художественно преувеличивает =)

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

                      Это действительно не да Винчи, потому что требуется слегка напрячь воображение, чтобы разглядеть Джоконду =)
                      Размер пикселей, которые рисует робот напрямую связан со временем, которое он тратит на рисование. Так что на сложную картину с хорошей детализацией, думаю, уйдет не меньше суток.
                      • UFO just landed and posted this here
                  +3
                  Катя ты монстр!
                  Ножницы висящие — прекрасны!
                  Луч искреннего восхищения!
                    +1
                    Спасибо =)
                    Подбор грузов, оказался по-настоящему творческим делом.
                    0
                    А можно подробнее рассказать про Robot Painter? Может быть у меня получится его повторить.

                    1. Есть что-нибудь в открытом доступе из софта?

                    2. Вот этот комментарий я не понял:
                    темные места выделяются скачками на линии (чем больше отклонение, тем более темная область)

                    3. На видео совсем не заметил змейки. Почему-то я увидел как ручка движется, имея две степени свободы, хоть и перемещается по кривым. А также эта ручка может либо рисовать, либо не рисовать (вкл-выкл).
                      +2
                      1. В открытом доступе пока нет. В основном, потому что внутри все достаточно сильно завязано на параметры конкретного робота. Плюс удобство использования пока тоже оставляет желать лучшего =)
                      У меня написано 2 программы:
                      Первая (python) умеет по изображению генерировать команды, которые будут посылаться роботу. Набор команд весьма ограниченный — нарисовать пиксель с указанием размера, либо перейти на следующую линию.
                      Вторая программа (arduino) умеет слушать порт и обрабатывать полученные команды.

                      2. Вблизи картинка выглядит таким образом



                      3. Я сходу не придумала как делать разрывы в линии, поэтому исходила из ограничения, что вся картинка будет нарисована непрерывной линией.

                    Only users with full accounts can post comments. Log in, please.