Оффтоп Daria Khokhlova
3 953

«На хакатоне очень трудно писать код»

Рассказ команды сервиса путешествий «Туту.ру» о том, чем может быть полезно участие в хакатоне для сработавшейся компании.

В закладки

Этой осенью команда сервиса путешествий «Туту.ру» впервые приняла участие в хакатоне. На три дня мы отправились в Санкт-Петербург, где поучаствовали в соревнованиях по программированию от «ВКонтакте».

Как принять участие в хакатоне

Где узнавать: чаще всего информацию о хакатонах можно найти в соцсетях. Для тех же соревнований от «ВКонтакте» это правило работает на все 100% (что неудивительно).

Часто анонсы ближайших хакатонов можно найти на «Хабрахабре». Крупные компании и площадки, которые проводят хакатоны, так или иначе рекламируют себя, так что пропустить их трудно. Я предпочитаю следить за такой информацией в Twitter.

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

Надо ли платить за участие: участие в хакатоне от «ВКонтакте» бесплатное. Возможно, есть и платные мероприятия, но бесплатных, в общем-то, вполне достаточно, чтобы об этом не думать.

Как мы организовали поездку

Как договориться о поездке с работодателем

«Туту.ру» поощряет обучение сотрудников, и в компании нет проблем с тем, чтобы принять участие в каких-то профессиональных мероприятиях. Главное, чтобы полученные там знания не пропали зря, а могли быть применены в работе.

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

Как собрать команду

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

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

Зачем это нужно компании

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

Команда приобретает новый опыт: как готовиться к соревнованиям, как общаться с заказчиками, как презентовать результаты. Пробует работать в другом режиме — почти двое суток непрерывной разработки вместо стандартного восьмичасового рабочего дня.

С чем мы поехали

В жюри хакатона было несколько компаний и заказчиков, для которых можно было выполнить проект. Мы выбрали ЮНЕСКО и тему кибербуллинга.

Кибербуллинг — травля человека в сети. Это сложная и неоднозначная тема. Не так давно возникшее явление требует детального изучения, и пока нет однозначного ответа, как побороть кибербуллинг. Обидчику недостаточно просто сказать: «Ай-ай-ай, оскорблять людей — плохо», — это не поможет. Нужно попробовать перенаправить агрессию. Например, в спорт или культуру.

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

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

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

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

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

Что у нас получилось

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

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

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

Чем это было полезно

Наша команда «Рой» впервые участвовала в чём-то подобном. Нужно ли говорить, что это был невероятный опыт, а о некоторых сложностях мы даже не подозревали.

Например, о том, как сложно будет не заснуть (хакатон длился двое суток). Два дня кажутся достаточно большим временным отрезком. Думаешь, что можно писать код часов 40 с парой часовых перерывов на сон. И правда, можно написать очень большой объем кода и решить пару действительно серьёзных задач. Но это ошибка, причём большая.

В реальности на хакатоне очень трудно писать код. Первые часов 6-7 могут идти хорошо, скорость написания кода или поиска решений — примерно как в повседневной работе, но потом всё меняется. Чтобы написать простейшие конструкции или решить простейшую задачу, уходит в два-три, а то и в десять раз больше времени.

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

Также мы не подозревали, что нам придётся быстро придумать новую идею, так как после получения новых данных от заказчика мы поняли, что первоначальная идея не пойдет.

Мы пришли на хакатон с готовой идеей создать технологию, которая бы распознавала признаки кибербуллинга в сообщениях в социальных сетях. После общения с представителями ЮНЕСКО стало понятно, что идея подходит лишь с большой натяжкой, да и на её реализацию двух суток не хватит. Тем не менее, треть хакатона уже осталась за плечами.

При этом мы оказались чуть ли единственными, кто обратился к представителям ЮНЕСКО и попытался разобраться в задаче, а не просто принести очередное техническое решение, которое никому не нужно.

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

Наш «Рой-баттл» похож на современные рэп-баттлы. Два игрока придумывают колкости и отправляют их друг другу. За действием следят зрители, в конце каждого раунда они дают оценку буллерам. Побеждает тот, кто заработал больше голосов. Самое важное — здесь всё анонимно. Оппоненты не знают, кто перед ними, зрители тоже.

Стикеры «Рой-баттла»

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

У нас получилось трансформировать идею так, чтобы уложиться в сроки хакатона и не лишить её смысла. Мы сразу поняли, что технически нашу игру нужно реализовывать через чат. Но так как изначально у нас была вообще другая идея, техническую реализацию пришлось придумать достаточно экстренно. Хорошим вариантом оказался чат-бот в Telegram.

Серверная часть отвечает за логику игры, а всё взаимодействие идёт через бота. По сообщениям срабатывает Webhook, который передаёт на сервер информацию. В общем, ничего технически сложного, но из-за усталости процесс написания тормозился.

Сказалась недостаточная подготовка — например, мы не знали, что нам понадобится домен и HTTPS. Причем партнер хакатона предоставил хостинг для проектов, но доменов не было. Эту проблему пришлось решать буквально на ходу — купили домен на GoDaddy и использовали Lets Encrypt для SSL.

Ещё один важный момент: взаимодействие в команде на хакатоне происходит совершенно по-иному. Из-за того, что почти всё время проводишь вместе, работая над одной целью вопреки всему, понимаешь друга уже без слов. Это чем-то похоже на состояние потока, о котором часто пишут в Agile-литературе, и которое достигается за многие итерации спринтов. Хакатон, как мне кажется, позволяет быстрее прийти к нему.

Организация времени — это то, что мы упустили. Сказалось отсутствие опыта и смена первоначальных целей. Вместо того, чтобы спокойно распределить время на сон отдых и еду, всё свободное время мы потратили в самом начале, а потом писали код до последнего, почти без перерывов. Это было в корне неправильно, так как под конец производительность сильно упала.

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

У нас получилось разбить задачи на те, в которых потребуется писать код, и те, где потребуется писать текст или думать над концепцией. Кроме того, на хакатоне нужна была презентация готового продукта, а не только код. И, знаете, презентации — не самая сильная сторона кодеров. Но наш дизайнер справился с этим заданием «на ура». Он не только сделал отличную презентацию, но и так круто рассказал о нашем продукте, что это заинтересовало намного больше людей.

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

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

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

{ "author_name": "Daria Khokhlova", "author_type": "editor", "tags": [], "comments": 13, "likes": 11, "favorites": 1, "is_advertisement": false, "subsite_label": "flood", "id": 31165, "is_wide": false }
00
дни
00
часы
00
мин
00
сек
(function(){ var banner = document.querySelector('.teaserSberbank'); var isAdsDisabled = document.querySelector('noad'); if (!isAdsDisabled){ var countdownTimer = null; var timerItem = document.querySelectorAll('[data-sber-timer]'); var seconds = parseInt('15395' + '50799') - now(); function now(){ return Math.round(new Date().getTime()/1000.0); } function timer() { var days = Math.floor(seconds / 24 / 60 / 60); var hoursLeft = Math.floor((seconds) - (days * 86400)); var hours = Math.floor(hoursLeft / 3600); var minutesLeft = Math.floor((hoursLeft) - (hours * 3600)); var minutes = Math.floor(minutesLeft / 60); var remainingSeconds = seconds % 60; if (days < 10) days = '0' + days; if (hours < 10) hours = '0' + hours; if (minutes < 10) minutes = '0' + minutes; if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; if (seconds <= 0) { clearInterval(countdownTimer); } else { timerItem[0].textContent = days; timerItem[1].textContent = hours; timerItem[2].textContent = minutes; timerItem[3].textContent = remainingSeconds; seconds -= 1; } } timer(); countdownTimer = setInterval(timer, 1000); } else { banner.style.display = 'none'; } })();
{ "id": 31165, "author_id": 5723, "diff_limit": 1000, "urls": {"diff":"\/comments\/31165\/get","add":"\/comments\/31165\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/31165"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

13 комментариев 13 комм.

Популярные

По порядку

Написать комментарий...
6

Если правильно понял:
- юзер регается(пишет имя, город)
- бот ждет пару юзеров
- как только она есть, отправляет обоим сообщение
- далее юзеры пишут боту, бот транслирует сообщение оппоненту

Напишу за 2 часа такого бота, без обид.

Ответить
4

В реальности на хакатоне очень трудно писать код. Первые часов 6-7 могут идти хорошо, скорость написания кода или поиска решений — примерно как в повседневной работе, но потом всё меняется. Чтобы написать простейшие конструкции или решить простейшую задачу, уходит в два-три, а то и в десять раз больше времени.

Регулярно участвую в хакатонах, отлично пишем код на протяжении больших промежутков. Частый отдых от кодинга - залог успеха. Например, питч или прогулка за вкусняшками каждые 1-2 часа на 10-15 минут.

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

Уж не знаю что за задачи вам приходится решать, обычно это схема бд, CRUD с небольшой логикой. Ну и верстка для всего этого. На большинстве хакатонов этого за глаза. Если делаем мобильное приложение, то делимся на бекенд и ребят, которые по api общаются с беком из приложения. Поскольку задача сделать красивую анимацию не стоит, можно сделать все даже в storyboard, прототип же.

В итоге: думаю у вас просто не отлажены процессы работы в алярм-режиме, так как кодинг по 10 часов в день для меня это не изи, но скорее норма. 11-13 уже сложновато, но тоже возможно при обстоятельствах.

Ответить
0

А точно всё не наоборот должно быть? Имею ввиду: на хакатонах писать говнокод, так как это скорее имиджевые проекты для прокачки скилов скорее, которые вряд ли в продакшн пойдут, а на реальных проектах пилить доброкод?

Ответить
3

некоторые технологии не позволяют писать говнокод:)
например, совесть

Ответить
1

или фотошоп

Ответить
0

Для хакатона очень важно иметь определенную базу. У нас была ситуация, когда ребята потратили 4-5 часов тупо на установку софта для разработки, хостинга и тд. Это должно быть сделано до самого хакатона.

А вообще совет: сделать универсальный чеклист, который адаптируется под каждый хакатон индивидуально. И распределить все по ролям если идете готовой командой (back end, front end, mobile, marketing (если нужно), PM, hardware и тд). Главное правило, чтобы все знали что и когда надо делать.

Ответить

Комментарий удален

0

Согласен полностью.
ЮНЕСКО, киберпуллинг - все из пальца.
У общества совсем другие проблемы.

Был я на одном хакатоне, где перед стартом мне парень сказал 'не тупи, гоу к нам, мы второе возьмем место', и они взяли именно второе. Так что я думаю у вас тут тоже либо конкурентов не было, либо кто-то договорился

Ответить
1

Сказалась недостаточная подготовка — например, мы не знали, что нам понадобится домен и HTTPS. Причем партнер хакатона предоставил хостинг для проектов, но доменов не было. Эту проблему пришлось решать буквально на ходу — купили домен на GoDaddy и использовали Lets Encrypt для SSL.

Ребят, есть heroku/c9, на которых все это из коробки. Ну вы чо!

Ответить
1

Ребят, ну какую-то херню вы написали. Начали за здравие, а закончили игрушкой уровня студенческой курсовой

Ответить
0

Про представителей и ненужнве реализации вы не правы.
Обе команды (которые не ваша) с кейсом ЮНЕСКО, которые в итоге вышли на награждении, провели, общаясь с представителем и читая их материалы, часа 4 минимум.

Про объём поддержу остальных: победившая команда успела спроектировать недурную charRNN, научить её 150к комментов, запилить телегам бота раздающего предупреждения и бота для ВК, банящего в группах

Решение не без косяков, комменты из лентача в датасете ведут к тому, что капиталист -- ужасное оскорбление.

Сейчас они с ЮНЕСКО это решение дорабатывают.

Ответить
1

Проблемы из пальца

Ответить
0

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

Ответить
0

сообщение удалено (ошибся темой)

Ответить

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Нейронная сеть научилась читать стихи
голосом Пастернака и смотреть в окно на осень
Подписаться на push-уведомления