От редакции:
В рубрике DOU Проекторвсе желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на valentina@dou.ua.
Ідея
Вітаю! Сьогодні я вам розповім про те, чим я з братом займався останні два роки. Мій брат та я розробники програмного забезпечення, але це не дуже допомогло нам в реальному житті:).
Одного разу ми звернули увагу на те, що існують декількасекундні періоди в нашому житті, коли ми не в силах контролювати наші дії, думки та емоції. Наче вмикається якийсь механізм, який блокує наш розум, наприклад, під час публічного виступу. Нам захотілося подолати це дивне відчуття безпорадності, тому ми почали створювати приватні челленджі одне для одного в реальному житті.
Через деякий час ми вирішили створити спеціальний сайт для цього, і згодом наші зусилля вилилися у створення гри — FMT. Це безплатна гра, призначена для двох гравців, яка допоможе вам пізнати свої сильні та слабкі сторони в реальному житті. Гра підтримує англійську, українську та російську мови, ви можете грати її в будь-якому браузері, включаючи мобільні:
Зображення головної сторінки та ігрового поля
Також гра має систему нотифікацій та чат для миттєвих повідомлень. Зверніть увагу, ми не вимагаємо електронної адреси під час реєстрації.
Реалізація
Працює все наступним чином: ви створюєте гру та обираєте набір навичок (зону), які ви хочете вдосконалити:
Форма вибору набору навичок (зони)
Потім ви запрошуєте свого друга до гри, який робить теж саме. Після цього ви починаєте створювати приватні челленджі одне для одного відповідно до обраних зон. Коли обоє гравців завершили всі челленджі в обраних зонах, гра закінчується. Ви є переможцем, якщо ви виконали більше челленджів, ніж ваш друг.
Ось так гра працює в реальному житті:
Також більше деталей можна знайти тут.
Стек технологій
Коли ми починали розробку, ми довго вирішували, які базові інструменти обрати, бо вони визначають: чи буде успішним проект, і чи складно буде його підтримувати в майбутньому. Ключовими факторами, які впливали на наші рішення — це досвід роботи з тим чи іншим інструментом та його популярність:
— Nginx.Безплатний веб- та проксі- сервер, який використовувався в багатьох проектах, які я розробляв.
— Twitter Bootstrap.Ще раз переконався, що ця бібліотека значно спрощує життя розробнику. Я був здивований, як легко ми змогли змінити його базові налаштовування та адаптувати його до нашого проекту, використовуючи SASS.
— Angular.На даному етапі повністю задовольняє вимоги проекту, крім того підтримується Google, що означає подальшу підтримку фреймворка та його розвиток.
— Python. Беккенд написаний на Python з використанням фреймворка Django. Окремо хочу виділити бібліотеку Fabric, яку ми використовуємо для створення програмної інфраструктури та оновлення вихідних кодів. Буде цікаво почути в коментарях про те, наскільки часто використовуєте його ви.
— PostgreSQL.Застосовуємо для збереження даних користувачів.
— Redis.Документно-орієнтована база даних, яку ми використовуємо для передачі миттєвих повідомлень між користувачами та кешування даних.
Передача повідомлень
На серверній стороні є два типи процесів, які обслуговуються двома окремими програмами (Django та Websocket for Redis). Одні процеси відповідаю за обробку користувацьких запитів та внесення змін до бази даних, а інші за доставку повідомлень до користувача. Передача повідомлень між двома програмами здійснюється за допомогою Redis Pub/Sub:
Процес передачі повідомлень
Розглянемо приклад того, що відбувається, коли користувач заходить на сторінку, де міститься, наприклад, чат:
1) Засобами Javascript створюється веб-сокет, який звертається до сервера (Websocket for Redis) та інструктує його про те, що йому потрібно повідомляти про нові повідомлення, які відбуваються в чаті;
2) Коли будь-який користувач надсилає нове текстове повідомлення, Django публікує його в Redis. Далі через веб-сокети дані передаються на клієнтську сторону потрібним користувачам.
Для того, щоб дізнатися більше, пропоную прочитати документацію пакета django-websocket-redis. Там міститься інформація про основи, які будуть корисні для всіх, хто починає розробляти подібні програми.
Результати
FMT розробляється та підтримується за допомогою наших власних ресурсів. Нещодавно ми запустили краудфандингову Indiegogo кампанію, де визначили основні напрямки подальшого розвитку та запропонували цікаві подарунки, які будуть корисні для користувачів FMT, стартап-проектів та інженерів програмного забезпечення.
Сподіваюся, що вам сподобалася гра, та ми зробимо все можливе, щоб підтримувати та залишити її безкоштовною в майбутньому, незважаючи на результати краудфандингової кампанії.