company_banner
18 ноября 2016 в 17:22

Как мы делали интерактивный квест для RailsClub

RailsClub — конференция, которую AT Consulting посещает практически с момента ее основания. В этом году мы стали ее золотым партнером и решили придумать для участников что-то более интересное, чем розыгрыш призов, и написали интерактивный квест, включающий 15 заданий. Большая часть из них — на знание Ruby и несколько творческих. Опыт получился интересный, так как это был наш первый квест для мероприятий. По итогам проведения квеста мы собрали много отзывов и вопросов по отдельным заданиям. В этой статье мы расскажем о том, как создавали квест, и разберем ответы.



Команда состояла из одного front-end, двух back-end разработчиков и дизайнера.

Что внутри?


Писали проект, конечно же, на Ruby on Rails. На чём ещё может быть написана программа для RailsClub? Поскольку времени было мало, решили сделать все без излишеств, просто, но при этом непробиваемо: стандартная MVC-архитектура Ruby on Rails (руки так и чесались добавить Trailblazer, но быстро стало ясно, что лишние слои абстракции только запутают и не дадут выигрыша в небольшом проекте), да пачка проверенных временем гемов. На сервер же встал веб-сервер Nginx с SSL-сертификатом от Let’s Encrypt (в 2016-м году запускать любой проект без HTTPS просто стыдно) и сервер баз данных PostgreSQL — в общем, всё, что необходимо приложению для работы. Сервером, кстати, стала одна из виртуальных машин, которые мы обычно используем для прогона тестов (gitlab-ci-runner’ы) других проектов компании. Поскольку конференция была в выходной день, мы решили, что мощности все равно простаивают, и использовали ее, остановив все лишние процессы )

С деплоем тоже всё было просто — это знакомый каждому «рельсовику» Capistrano. Для достаточно простого проекта ничего более навороченного и не требуется.

Линия фронта


Изначально на фронтненде хотели использовать React и redux, однако, поняв суть задачи, мы решили, что в квесте не должно быть динамического UI, поэтому сделали все максимально просто.  Front-end на Turbolinks, Jquery, jquery-ujs.

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

Дизайн


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

Первый psd-файл появился 10 октября, а финальные макеты отдали 21 октября утром (за сутки до RailsClub). Параллельно вместе с HR думали над общей концепцией квеста: этапы, начисление баллов, определение победителей. Также выбирали призы – за первое место решили дарить гироскутер.

Правильные ответы


Квест состоял из 15 заданий, прямо или косвенно связанных с Ruby. Самым сложным оказался вопрос про Array#compact: мы просили реализовать самую краткую версию данного метода. Выглядит она так:

a - [p]

Многие потом спрашивали у нас правильный ответ. Большинство знало вариант a - [nil], но мало кто знал, что p (alias puts) возвращает nil, если запущен без параметров, и это можно использовать в данном контексте.

Самым неудачным, на наш взгляд, оказался вопрос: «Что говорил Матц о GC в Ruby?».  Чтобы правильно ответить, нужно было заглянуть на русскоязычную версию сайта о ruby: «Это полезнее для вашего здоровья». Но все же два человека умудрились ответить на этот вопрос )

Самыми простыми оказались задания заполнить анкету при регистрации и написать, каким языком был вдохновлен Матц при выборе названия для своего языка (ответ — perl).

Остальные вопросы и «ключи» к ним:
Вопрос
«Ключ»
Сколько человек справилось
В каком году была основана компания AT Consulting?

2001 (нужно было зайти на сайт компании в раздел истории)

26

22520 наименьшее число, которое делится на все числа от 1 до 10 без остатка. Какое наименьшее число, которое будет делиться на все числа от 1 до 20 без остатка?

232792560
25
Сделай фото в соцсетях с хэштегом: #atconsultingrailsclub и в поле для ответа скопируй ссылку на него. На фотографии обязательно должен быть логотип АТ Consulting и 2 участника конференции

20

Сумма всех натуральных чисел, меньших 10 и кратных 3, либо 5 равна 23, чему равна сумма чисел меньших 1000?

233168
20
Дано: a, b – массивы. Наш стажер написал следующий код:
a = a + b
a.uniq!
Помоги ему сделать код немного лучше

a |= b

20
Напиши последние 10 цифр суммы 1^1 + 2^2 + 3^3 +… + 1000^1000

9110846700

19
Как можно записать число 1 000 000 в Ruby?"

1e6
16
Напиши код, который будет показывать, есть ли в строке «String» подстрока «ng» «String».include?

«ng» не предлагать %-)

«String»[«ng»]
12
Покажи, каким способом можно выяснить, что в массиве «a» строго больше 5 элементов?

a[5], но на конференции мы выяснили, что если заполнить массив всеми nil, то данный метод не работает, поэтому вопрос был не совсем корректный
11
Как Range (1...10) превратить в массив?

[*1...10]
7

Спасибо коллегам, которые помогали готовить статью: kolin_good и Envek. Всем хороших выходных!
Автор: @fc_arny

Комментарии (6)

  • 0
    1_000_000

    («String» =~ /ng/).to_i > 0 :)

    (1...10).to_a

    • 0
      Как уже написал ниже, идея была выдать самый хитрый/короткий способ решить ту или иную задачу по ruby.

      Но самое большое ограничение которое у нас было — написать за отведенное время максимально простую функцию проверки ответа ) И поэтому такие задания.
  • 0

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

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

      Но в целом согласен с Вами, фибек мы собрали, будем исправляться на RailsClub'17.
  • +1

    Спасибо Вам, было весело!
    Пусть в след году будет еще круче с учетом всех ошибок:


    • из-за квеста пропустил многое из докладов)) хорошо хоть запись есть
    • есть способ подхачить и выиграть все призы (не буду говорить какой)

    Призы отличные в этом году (спасибо за iskra-js), а то Leap Motion с прошлого года валяется без дела.

    • 0
      Спасибо вам за отзыв и за участие, в этом году подарки в рамках выделенного бюджета хотели сделать полезными, среди коллег голосовали и принимали решение)

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

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

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

Самое читаемое Разработка