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

Екипът се състоеше от един front-end, двама back-end разработчици и дизайнер.
Какво има вътре?
Написахме проекта, разбира се, в Ruby on Rails. На какво друго може да бъде написана програма на RailsClub? Тъй като имаше малко време, решихме да направим всичко без излишни украшения, просто, но в същото време непроницаемо: стандартната Ruby on Rails MVC архитектура (ръцете ни сърбяха да добавим Trailblazer, но бързо стана ясно, че допълнителните слоеве на абстракция само ще объркат и няма да дадат победа в малък проект) и пакет от изпитани във времето скъпоценни камъни. На сървъра се появи уеб сървърът Nginx със SSL сертификат от Let’s Encrypt (през 2016 г. е просто жалко да стартирате всеки проект без HTTPS) и сървър на база данни PostgreSQL - като цяло всичко, което приложението трябва да работи. Сървърът, между другото, е една от виртуалните машини, които обикновено използваме за провеждане на тестове (gitlab-ci-runners) на други фирмени проекти. Тъй като конференцията беше в почивен ден, решихме, че капацитетът така или иначе е празен и го използвахме, спирайки всички ненужни процеси)
С разгръщането също всичко беше просто - товапознат на всеки "релсов" Капистрано. За един доста прост проект не се изисква нищо повече фантазия.
Предна линия
Първоначално искахме да използваме React и redux във фронтенда, но след като разбрахме същността на задачата, решихме, че мисията не трябва да има динамичен потребителски интерфейс, така че направихме всичко възможно най-просто. Преден край на Turbolinks, Jquery, jquery-ujs.
При разработването на такива задачи е необходимо повече време за самата разработка, за да се вземат предвид всички нюанси във фронтенда, а именно: проверка на проекта на различни устройства под различни платформи, финализиране на валидирането при изпращане на куеста и др.
![]() | ![]() | ![]() |
![]() |
Правилни отговори
Мисията се състоеше от 15 задачи, пряко или косвено свързани с Ruby. Най-трудният въпрос беше за Array#compact: поискахме да приложим най-кратката версия на този метод. Изглежда така:
Мнозина тогава ни попитаха за верния отговор. Повечето хора познаваха варианта a - [nil], но малцина знаеха, че p (alias puts) връща нула, ако се изпълнява без параметри, и това може да се използва в този контекст.
Най-нещастният според нас беше въпросът: „Какво каза Матц за GC в Ruby?“. За да отговорите правилно, трябваше да погледнете българската версия на сайта за рубин: „По-добре е за здравето“. Но все пак двама души успяха да отговорят на този въпрос)
Най-простите задачи се оказаха да попълните регистрационен формуляр и да напишете от какъв език се е вдъхновил Матц, когато избира име за своя език (отговорът е perl).