Дарья Добрынина
8 068
Блоги

Как делаются спецпроекты на TJ

На примере квеста с белым кроликом.

Поделиться

В избранное

В избранном

Привет! Меня зовут Даша, я делаю спецпроекты на TJ, vc.ru и DTF.

Недавно мы запустили проект с «Альфа-Банком». Это квест по поиску разработчиков с кодовым названием «Белый кролик».

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

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

Этап 1. Бриф

Обычно все наши проекты начинаются с брифа. В этот раз к нам пришла Лера Митяева, которая занимается развитием бренда работодателя в «Альфа-Банке». Мы уже работали с Лерой, делали не менее крутой квест.

Бриф выглядел примерно так:

Даш, привет!

Через две недели пройдет конференция JPoint. Нужно придумать проект, с помощью которого мы поиграем с Java-разработчиками на конфе, расскажем об «Альфа-Банке» и соберем контакты всех заинтересованных.

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

Возьмётесь?

Лера Митяева
эксперт по развитию бренда работодателя в «Альфа-Банке»

Что? Конференция через две недели? Ладно, пойдём думать…

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

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

Пример:

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

Помогите протодиакону вычислить значение следующего выражения: ПОКАЙСЯ + МОЛИТВА * ПОСТ

задача ИТ-компании GridGain

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

Хотелось придумать что-то другое, и вот идея пришла!

Этап 2. Идея

Квест, где есть только одна задачка. У каждого участника уникальные вводные данные, поэтому и решение, и ответы не повторяются.

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

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

Далее участник видит шифр и код.

По римлянину (скульптуре Цезаря) слева от шифра и «Аve» несложно догадаться, что текст зашифрован шифром Цезаря. Это самый простой и известный (по крайней мере всем разработчикам) шифр.

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

Участник получил два ряда чисел, которые нужно поменять местами в коде. Соответственно, Arr1 = 34,12,5,61,34,2 Аrr2 = 3,4,1,2,5,0.

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

Слава Крайнов
Android-разработчик «Комитета»

Короче, компилируем код в уме или копипастим в компилятор и получаем ответ типа 61° 5′ 12″ 34° 2′ 34″.

Повторюсь, что у каждого участника один и тот же код, но уникальные данные на входе, а также почти уникальный (34 варианта) зашифрованный текст, поэтому на выходе получаются координаты без повторов. Координаты показывают реальное место на карте. Например, полученные 61° 5′ 12″ 34° 2′ 34″ — место рядом с экопоселением Гришино.

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

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

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

Координаты «клада» выбирались случайно из координат правильно ответивших участников. Первому счастливчику вручали Lego Mindstorms. За второе и третье место давали «Lego-Чубакку» и «Дарта Вейдера».

Таким образом:

  1. Задачи у каждого участника были уникальными;
  2. Участники хранили вторую часть листа с информацией об «Альфа-Банке» до конца конкурса.

Формат понравился разработчикам, и мы сделали ещё два проекта для конференции Mobius (мобильная разработка) и HolyJS (фронтенд), а потом, заходя далеко вперед, перенесли механику и на TJournal.

Этап 3. Продакшн

Продакшн первого проекта состоял из шести этапов. Между каждым этапом — согласование.

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

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

В ночь перед конференцией я решила ещё раз проверить решение и выяснила, что мы сделали дурацкую ошибку. Широта не может быть больше 90 градусов, а у нас была. К счастью, кажется, никто кроме нас этого не заметил :)

Итоги после трёх конференций:

Этап 4. Перенос на сайт

С переносом на сайт были проблемы. Нужно было придумать лаконичный сюжет с поиском координат.

Я предложила поставить на стартовую страницу карту с пятью серыми точками, в которые якобы (пираты?) спрятали Lego. Каждому бы выдавалось своё задание с уникальными данными на входе.

Решил правильно + Координаты соответствуют кладу = Получил приз.

Коллеги сказали, что это скучно, «и вообще причём тут пираты? И как мы в конце подведём это к вакансиям для разработчиков?»

Альтернативный вариант:

Искатель приключений и археолог Индиана Форд выяснил, что в пяти точках планеты спрятаны несметные богатства, однако их точные координаты зашифрованы.

Поскольку у каждого уважающего себя героя есть специалист по технологиям и шифрам, Индиана просит помощи у вас. Если повезёт, вы получите приз — Lego Mindstorms.

От лица Индианы: «Привет, друг! Я знаю, что на этой табличке может быть указано местонахождение клада. Попробуй расшифровать её — вдруг тебе повезёт».

Артём Слободчиков
Продюсер «Комитета»

Звучит как-то притянуто. И главное: получается, что Индиана Форд ищет какие-то богатства, а призы Lego – это награда разработчиков за найденный клад, а не сам клад.

Мы ещё долго спорили, пока внезапно не пришла идея: «А почему бы не сделать даркнет чат, как в «Матрице»? Можно вообще от координат избавиться».

Как мы вдруг перешли на «Матрицу» непонятно, но идея тут же всем понравилась. Вот, что из неё получилось.

Спецпроект на TJournal

Заходим на стартовую страницу проекта:
ТJournal взломали. Следуй за белым кроликом.

Кролик, кстати, не белый а чёрный. Сначала просто никто не заметил, а потом решили, что это не баг, а фича.

Следующий шаг — выбираем профиль разработки.

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

Мы решили не использовать шифр Цезаря в этом проекте — слишком легко.

Хотя догадаться, как зовут человека на фото, не намного сложнее. Достаточно посмотреть самые лёгкие шифры, либо поискать картинку в Google. Мы специально корректировали фотографию с помощью CSS-фильтров, а не «Фотошопа», чтобы она оставалась оригинальной и её можно было легко найти.

Вторая ссылка ведёт на шифр Виженера в Википедии.

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

Калькулятор говорит, что нужен ключ. Это и есть слово «Пифия» над фотографией Виженера.

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

Вставляем в калькулятор ключ «Пифия» — получаем расшифрованное сообщение.

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

О том, как включить копипаст, можно прочитать в одной из статей, посвящённой расшифровке задачи.

Итак, копируем код, вставляем данные в компилятор.

Вводим получившийся результат.

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

Теперь пробуем ввести неправильный ответ.

А это альтернативная визуальная метафора выбора, которую мы решили всё-таки не использовать :)

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

Мы подготовили восемь вариантов текста шеров — по четыре для правильного и неправильного результатов.

Текст для шеров шифровался теми же 20 ключами, то есть всего было 80 разных вариантов.

Этап 5. Аносирование

Публикация — это ещё не всё! Дальше идёт рекламная кампания и анонсирование проекта.

Мы привлекали внимание к проекту разными способами:

1. Баннерами на TJ, vc.ru и DTF.

2. Анонсами в социальных сетях.

3. Пасхалками в коде.

4. Анонсами на площадках «Типичного программиста».

А ещё проект дополнительно анонсировали читатели, которые писали руководства по решению квеста и делали смешные видосы про взлом Пентагона ❤️

Этап 6. Подведение итогов

Ребята из рекрутмента «Альфы» рассказали, что было очень приятно читать письма, которые приходили во время кампании на hr.alfabank.ru.

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

Один парень даже зашифровал текст с рассказом о своём опыте работы ❤️

Мимими

Производство спецпроекта на сайте состояло из девяти этапов, которые в свою очередь делились на более мелкие.

По поим неточным подсчётам в проекте участовало не менее 16 человек, каждый из которых внёс свою лепту. Это не считая сотрудников «Комитета», которые помогали с тестированием. Обычно перед публикицией я кидаю ссылку в нашу общую группу в Фейсбуке, и коллеги помогают тестировать проект.

Механику с уникальными данными придумала я, а наш технический директор Илья Чекальский оформил её в рабочий шифрокод.

Разработчики «Альфа-Банка» усложнили задачу, придумав интересную логику с массивом.

Лёша Панин делал дизайн листовок и героически смог уместить все элементы. Кстати, с оформлением этого материала тоже помогал он.

Над переносом проекта на сайт мы думали с Сашей Мураховским и Артёмом Слободчиковым (тоже продюсеры «Комитета»). Я в этот момент находилась во Владивостоке, Саша — в Минске, а Артём — на кухне героя интервью, которое он снимал для другого коммерческого проекта.

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

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

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

Лера Митяева из «Альфа-Банка» активно участовала в тестировании и отговорила нас от опасного Пикачу. Да и вообще Лера крутая, как минимум потому, что согласилась без вопросов и бюрократических процедур на такой странный проект.

А наши читатели дополнительно проанонсировали проект своими материалами.

Работа над ошибками

Всё, довольно лирики. Несмотря на то, что проект получился успешным, идеальным его назвать нельзя, и вот почему.

Ошибка №1

Во время тестирования проекта мы ввели кодовое слово dasha, аналог правильного ответа, при вводе которого появлялась анимация с Эйштейном.

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

Ошибка №2

На старте в контактной форме не было никаких ограничений на отправку данных. Поэтому через какое-то время помимо классических упоминаний **** [мужских половых органов] в таблице с контактами появилось примерно 1.5 тысячи записей с молдавским телефонным номером.

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

Валерий Ситцов
frontend-разработчик «Комитета»

Ошибка №3

Которую заметил наш менеджер по продукту Денис Ширяев.

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

Ошибка №4

«А ещё не хватает весёлой музычки» — отметил всё тот же Денис Ширяев.

Планы на будущее

Надеюсь, мы будем допускать меньше ошибок.

В следующих статьях я расскажу, как мы делали игру на DTF в стиле Death Stranding и ооочень сложный квест для «Лаборатории Касперского».

{ "author_name": "Дарья Добрынина", "author_type": "self", "tags": [], "comments": 41, "likes": 80, "favorites": 18, "is_advertisement": false, "section_name": "blog", "id": "74687", "is_wide": "" }
Популярные материалы
Показать еще
{ "is_needs_advanced_access": true }

Популярные комментарии

Дискуссии по теме
доступны только владельцам клубного аккаунта

Купить за 75₽
Авторизоваться

Преимущества
клубного аккаунта

  • отсутствие рекламы
  • возможность писать комментарии и статьи
  • общение с членами клуба
Подробнее

Преимущества
клубного аккаунта

  • отсутствие рекламы
  • возможность читать и писать комментарии
  • общение с членами клуба
  • возможность создавать записи

Сколько это стоит?

Членство в клубе стоит всего 75₽ в месяц. Или даже дешевле при оплате за год.

Что такое клуб?

Клуб ТЖ это сообщество единомышленников. Мы любим читать новости, любим писать статьи, любим общаться друг с другом.

Вступить в клуб

Комментарии Комм.

Популярные

По порядку

0

Прямой эфир

Вы не против подписаться на важные новости от TJ?

Нет, не против
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "i", "ps": "cndo", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "i", "ps": "cndo", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "ezfk" } } }, { "id": 6, "disable": true, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byswn", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "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", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "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": "cndo", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223677-0", "render_to": "inpage_VI-223677-0-130073047", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=cndo&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": "byudv", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fzvc" } } } ]