Как прошел JetBrains Hackathon 2015

Этим летом в санкт-петербургском и мюнхенском офисах уже в третий раз прошел хакатон — мероприятие, которое всем пришлось по душе и стало ежегодным. Его основная идея состоит в том, чтобы реализовать свои творческие задумки в неформальной обстановке и построить что-то жизнеспособное с нуля в короткие сроки.

В этом году 57 участников в течение 48 часов лихорадочно работали над 21 проектом.

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

В нашем хакатоне принимают участие не только сотрудники компании, но и их друзья и знакомые.

2015-11-21

 

Происходят и забавные случаи: например, в 2009 году у нас в блоге была опубликована первоапрельская шутка о том, что в версии 8.1 IntelliJ IDEA появилось голосовое управление, а в 2015 шутка превратилась в хакатоновский проект!

Призовой фонд Хакатона-2015 составил 15 000$.

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

В 2015 году призовые места заняли проекты New-Generation Debugger, JetFat, Applying Genetic Algorithm for Automatic Code Formatting. Не обошлось и без награды “CEO’s Choice”, которую получил JetBrains App Launcher. А теперь — подробности.

Первое место: «New Generation Debugger»

Команда: Андрей Бреслав, Андрей Старовойт, Николай Чашников, Павел Таланов, Сергей Кукс

Основной целью проекта New Generation Debugger было найти и опробовать принципиальные улучшения по сравнению с существующими отладчиками, то есть поднять процесс отладки на новый уровень. Отладчики появились еще до того, как многие из нас родились, и в них мало что серьезно изменилось с 1980-х годов. Создатели проекта объединили статический анализ кода с «путешествиями во времени», то есть возможностью возвращаться назад в процессе отладки, а также рассмотрели несколько вариантов пользовательского интерфейса.

Команда проекта хотела вдохновить наши продуктовые команды на то, чтобы сделать нечто подобное и в продуктах JetBrains.

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

Debugger

 

Второе место: JetFat

Команда: Максим Ерехинский, Максим Рыжиков, Света Белозерова.

Максим Ерехинский рассказывает, что идея проекта появилась за ужином в одном из наших уютных кафе. Дело в том, что наших сотрудников просят ставить «галочку» в специальном списке напротив своей фамилии, когда они приходят на обед. Ребята обсуждали, что было бы неплохо автоматизировать эти галочки, сделав доступным электронное меню, а также добавить кнопки like/dislike и т.п. Поэтому идея для проекта была готова задолго до начала хакатона — оставалось только собрать команду.

Ребята признаются, что представляли очень смутно, что должно получиться в итоге. Была «железная» составляющая, т. е. считыватели для карт, которые должны были избавить сотрудников от бесполезных действий на кухне. А вот опыта в схемотехнической области у команды не было, поэтому даже простые решения приходилось гуглить — но ведь для этого и нужен хакатон!

В работе над программными продуктами всегда можно по-быстрому что-то проверить, переиграть, переписать; с железом такие трюки не выходят, и пространство для маневра очень ограничено. Cчитыватели работали «криво» вплоть до последнего часа, и когда стало понятно, что raspberry не успевают считывать ответ по протоколу wiegand, возникло разочарование (этот протокол без управления потоком, т. е. считыватель просто шлет данные, не зная, слушает ли его кто-то). Однако унывать не было времени, и на задворках интернета была найдена более быстрая библиотека, написанная на чистом C. Немного шаманства с компиляцией, и, наконец, удалось добиться 100% верного считывания карт (эта библиотека работает с прерываниями на более низком уровне и не «теряет» их). Кстати, на raspberry работает Python скрипт, который отправляет результат считывания на сервер.

Параллельно со всеми этими «веселыми приключениями паяльника» Максим Рыжиков писал клиентское приложение для просмотра и редактирования меню. Был использован такой стек технологий, как angularjs, webpack, material дизайн и т. д. В тоже самое время Светлана Белозерова рисовала иллюстрации; ребята, как и полагается программистам, немного помучили ее просьбами поиграть шрифтами, тенями, цветами, и получился отличный продукт, которым мы теперь пользуемся каждый день.

JetFat-3

 

Третье место: Применение генетического алгоритма к задаче форматирования

Команда: Алексей Уткин, Роман Шейн

Проблема витала в воздухе в проекте CLion (кросс-платформенная IDE для C/C++) по вполне объяснимым причинам: C++ существует уже более 30 лет, а общепринятого стиля форматирования кода нет. Существует как минимум десяток известных и общепринятых стилей! И сотни, а то и тысячи более или менее популярных вариаций.

Алексей Уткин, разработчик CLion, отвечает в частности за встроенный в продукт автоформаттер кода (которым так славятся продукты компании JetBrains). Он рассказывает, что формализация индивидуальных предпочтений по размещению кода по строчкам и внутри них — крайне трудоемкая задача. Например, в CLion для языка С++ настройки форматирования насчитывают более 200 параметров. Ситуация обычно осложняется их взаимовлиянием.

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

Решение стали искать в природе, и нашли — генетический алгоритм и идея естественного отбора. Есть набор генов — параметров форматирования кода — и скалярная функцияопределяющая жизнеспособность этого набора (видоизмененное вычисление лексикографического расстояния между исходным кодом и этим же кодом, но после применения к нему автоматической процедуры форматирования по подобранным параметрам). Тогда все, что потребуется для воспроизведения успехов эволюции, — алгоритм скрещивания параметров и отбраковки «неудачников». Как было проверено в процессе хакатона, всего 40 поколений успешного скрещивания и жестокого отбора на 1-2 минуты дают результат лучший, чем человек достигает логическим перебором подстановок за половину дня!

Алексей и его коллега Роман Шейн не только реализовали сам процесс естественного отбора, но и успели проанализировать различные варианты оптимизации подхода. В дополнение, Роман написал тестовый интерактивный захватчик стилей прямо в платформе, которому по открытому в редакторе файлу получается набор кастомных настроек, сохраненных в схему в IDE (для использования в других файлах). Алгоритм при этом отрабатывает прямо на виду, в окне редактора.

А самым главным результатом стало появление в релизной версии продукта CLion 1.1 (буквально через пару месяцев после проведения Хакатона) заготовленных стилей форматирования кода Google, GNU, Qt и Stroustrup и скобочных правил Allman, Whitesmiths и K&R. Настройки этих стилей были получены как раз по тому самому алгоритму, который реализовали ребята.

AGAACF

 

 CEO’s Choice: JetBrains App Launcher

Команда: Константин Буленков, Евгений Датский, Евгений Петренко, Артем Тиунов, Леонид Шалупов, Виктор Кропп

JetBrains App Launcher — небольшое приложение, которое помогает сторонним сервисам использовать продукты JetBrains. Открыть новый проект напрямую с github? Не проблема для JetBrains App Launcher! Приложение помогает обновить уже установленные IDE и загрузить новые, а также включает в себя список всех проектов, открытых в любой IDE. App Launcher позволяет открыть новый проект одним щелчком мыши, скачав проект из системы контроля версий и сразу установив необходимые плагины для работы с проектом.

AppLauncherDemo-2

 

CEO’s Choice 2014 года: mTest

Команда: Екатерина Соловова, Эд Павлов, Руслан Исакиев

Что же происходит с проектами после хакатона? Некоторые из них попадают в продакшн! Например, mTest, проект 2014 года, превратился в dotMemory Unit!

Победителю хакатона вручили кубок, на нем появилось новое имя проекта и жизнь в JetBrains потекла в прежнем ритме… до следующего хакатона :)

Prize