Команда состояла из одного 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. Всем хороших выходных!
Комментарии (0)