Есть ли порох в пороховницах? Hackathon Radio Canada 2018 (Часть первая, собираем команду)

в 15:18, , рубрики: AI, azure, Канада, монреаль, Хакатоны

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

Извините коротко не получилось, текста много и не всё по теме.

image

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

Предисловие, где автор вспоминает то, что никому не интересно

Я уже давно не студент, но в мои студенческие годы не было ни хакатонов ни возможности особо выехать из страны и посмотреть «как оно там».

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

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

Как я уже сказал я не новичок в программировании и прошло много лет с момента когда я получил диплом с гордой записью «Программист ПЭВМ и АСУ» в 1994 в Кишиневе. Так сложилось что по окончании техникума особо работы по специальности не было. Был «большой» перерыв когда я как и многие кто заканчивал вместе со мной переключались не не связанные с программированием области и подрабатывали «компьютерщиками» или уходили в комерцию или любую другую профессию за которую платили. После этих постперестроечных лет не так много друзей вернулось обратно к программированию. И я был один из немногих кому повезло.

Я хочу сказать, что, с тех пор, я, как бы, не уверен в своих способностях и знаниях. В нашем деле начиная с 80х годов идет дикое развитие. И если я хочу оставаться на плаву, то оказывается надо учить новый язык и другие технологии (которые появляются и исчезают, пусть не со скоростью света, но, с пугающей меня скоростью) каждые 3-4 года, а еще лучше каждый год.

Я пытаюсь угнаться за миром технологий и программирования, оставаясь востребованным профессионалом, читая умные книги раньше и не менее умные статьи теперь. Я понимаю, что я точно не Линус Торвальдс, не Бьерн Страуструп, не Денис Ричи и не Расмус Лердорф (которого я видел на расстоянии вытянутой руки, когда он представлял новшества PHP7, что было для меня довольно большим событием пару лет назад). Но я знаю, что я могу писать код лучше многих с кем мне довелось работать. И мне хочется знать насколько я хорош? Это может звучать эгоистично, неэтично или просто глупо, но да, мне хочется быть лучше других и иметь представление о том насколько хороши окружающие меня колеги. И, мне кажется, что хакатон это хороший способ проверить свои силы, познакомиться с новыми технологиями, оценить что может быть написано за пару дней и вообще понять что происходит вокруг, поскольку порой мы слишком заняты текущими рутинными задачами чтобы вникнуть в то что происходит вокруг (BigData, AI, Cloud, CI/CD, DevOps и т.д.).

Итак, пару недель назад я узнал о предстоящем хакатоне организованном Radio Canada и Microsoft в нашем «родном» Монреале.

Тема хакатона — Искусственный Интеллект.

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

Основные требования к прототипу на французском

Cette compétition amicale vise cette année à expérimenter sur la place de l’intelligence artificielle dans l’industrie des médias et à développer un prototype d’application web ou mobile.

  • Les prototypes proposés doivent obligatoirement respecter les critères suivants:
    Utilisation d’une des sources de données de Radio-Canada
  • Développement hébergé dans la plateforme Azure ou avec un de ses services intégrés
  • Interfaces conformes aux critères d’accessibilité WCAG 2.0 AA
  • Chaque équipe peut également utiliser d’autres sources de données ouvertes et des services publics

Tous types de code, design ou autres éléments servant à la conception du projet devront être créés exclusivement durant l’Hackathon 2018 et devront respecter la propriété intellectuelle des tiers.

Прототип должен отвечать следующм требованиям:

  • Приложение должно использовать данные Radio Cnada (предоставляемые через непубличный api, доступ к которому будет открыт участникам хакатона)
  • Разработка должна осуществляться/базироваться/с использованием облачных сервисов MS Azure
  • Интерфейс должен соответствовать требованиям стандарта WCAG 2.0 AA (интересный факт — на википедии нет русской версии этой страницы, ну я и не сильно искал, может есть немного другая)
  • Команды могут использовать другие публичые сервисы и источники данных
  • Весь прототип, от дизайна архитектуры до кода и прочих элементов, должен быть создан во время проведения. (Давайте это запомним, я вернусь к этому критерию позже)

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

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

Формирование команды - ключ к успеху, или причина неудачи?

К сожалению коллеги с которыми я работаю сейчас довольно тяжелы на подъем и мне не хотелось ни с кем из них «идти в разведку».

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

Я буду назвать ее далее Звездочка.
Я попросил ее начать поиск среди одногруппников, это же именно то что должно быть им интересно. Но все оказалось все не так просто. как и в моем случае не так много однокашников выглядят для нее привлекательно в качестве соратником для интенсивного проекта, коих она уже имела в достаточном количестве в колледже чтобы понимать и что такое проект/задание и как люди работают или не работают в команде и под давлением, так что круг подозреваемых кандидатов быстро сузился. Она привела двух человек назовем их Меркурий и Фаэтон.

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

Фаэтон — русскоговорящий разработчик, который недавно закончил тот же колледж и имеющий дружеские отношения со Звездочкой. В данный момент работает на С++ (кажется) с утра до вечера, перерабатывает и днем и ночью и видимо по выходным. Реальные скилсы не известны, попытка их иденцифицировать до начала хакатона не увенчалась успехом.

На момент когда стало известно что у нас уже есть 4 человека в команде я был вполне спокоен по участвовать есть с кем. И Звездочка продолжала поиск последнего разработчика. Причем самым страшным на взгляд каждого из нас было словосочетание Искусственный Интеллект, о котором у меня было какое-то общее представление, а у Звездочки отсутствовало вообще. Ну как вообще, все мы знаем про Скайнет? и про EX_MACHINA, но это же не в счет, правда?

Как раз в это время случились выходные. И к нам в гости зашел мой друг и знакомый (назовем его Платон) с супругой, так сказать на чай с баранками. Надо отметить что большинство моих друзей и знакомых так или иначе связано с ИТ и разарботкой, ну или с телекоммуникациями.

Познакомились мы с Платоном несколько лет назад в одном проекте где мы оба работали, но не пересекались в одной команде. Платон занимался и занимается до сих пор embeded системами, пришет в основном на Си (да, да на нем все еще пишут), чем он меня очень впечатляет. Я тоже когда-то писал конечно и на ассемблере, что-то типа 2+2 100 лет назад. Но я давно ушел на более высокие уровни абстракции и Docker контейнер для меня выглядит однозначно проще чем функция на Си и параметры компиляции. С другой стороны магия слов RESTful api звучит весьма загадочно для Платона. И где-то глубоко я понимаю, а может просто хочу верить, что я в случае необходимости смогу осилить магию расковырять код на Си, а Платон разберется с кодом на моем любимом PHP.

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

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

Итак команда сформирована.

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

Основная несуразность которая настораживала — они просили презентацию в формате PowerPoint и предоставляли шаблон из 6 слайдов:

  • Титульная с логотипом Radio Canada и плэйсзолдером для названия команды
  • Титульная для самого проекта с его кратким описанием
  • Описание идеи проекта
  • Описание причин для… Наверное целевая аудитория и/или ценность для пользователей
  • Ценность для бизнеса, пути монетизации
  • И последний слайд — презентация членов команды

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

Финальная регистрация. На первый второй рассчитайся!

Думаете это просто? Как бы не так!

Нет, проблемы не с регистрацией как таковой, а со временем у каждого члена команды, ну и немного с французским.

Звездочку я назначил негласным капитаном и администратором. Она зарегистрировалась первой, потом я.
Я написал Платону, у него нашлось свободное время лишь через пару дней.
Нам немного подфартило, на сайте продлили сроки регистрации еще на неделю.

Меркурий зарегистрировался через неделю, все это время я дергал Звездочку, а она в свою очередь его.

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

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

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

Почему не получилось собратья? Ну совсем неинтересно и банально

Я семейный человек. Работа с 9 до 5, плюс дорога на работу утром и вечером еще по часу. Итого дома в рабочие дни грубо в 6. Вечера Понедельник, Среда и Четверг заняты (спорт с ребенком, вожу туда-обратно). В субботу отвожу его же в русскую школу к 9 забираю оттуда же в 3. Как раз в этот же период в одну из суббот случились соревнования так что день был выбит. Это я просто к тому что я занят как бы всегда за небольшими исключениями.

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

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

Меркурий получается в такой же ситуации, хотя не уверен работает ли он. Но то что занят учебой по самое не могу — это точно.

Фаэтон — как я уже писал работает по 60 часов в неделю. На звонки и сообщения практически не отвечал.

Так что после пары дней попыток, я понял что организовать встречу нереально.

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

Конструктивная критика и вопросы приветствуются.

Автор: dzsysop

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js