Мой pet-проект: создание турнирных таблиц
Рассказ о сервисе, который позволяет создавать таблицы по разным форматам турниров.
4К открытий4К показов
Андрей Лапин
тимлид в «Контуре»
Мы в Ижевске регулярно проводим турниры по шахматам и шашкам. Обычно турнир у нас растягивается на несколько дней и нужно где-то хранить результаты. Для круговых турниров мы создавали файл в гугл-таблицах. Для швейцарских пробовали разные веб-сервисы и программы. И всегда сталкивались с какими-нибудь недостатками.
Приложения для компьютера неудобны для публикации результатов и крайне сложны. Онлайн-сервис имел неудобный интерфейс. Несколько раз приходили мысли написать свой веб-сервис. И вот наконец идея воплотилась в реальность. В конце 2018 года был создан сайт SwissSystem.
Как работает сервис
На сайте можно прочитать, какие возможности предоставляет сервис, поэтому тут опишу технические особенности реализации.
Использованные технологии: ASP.NET Core 2.1, Entity Framework, Bootstrap, Maria DB, Nginx, Linux.
Я впервые размещал ASP.NET приложение на Linux и это было интересно. В остальном же были использованы достаточно стандартные для ASP.NET решения. Из коробки можно было использовать авторизацию по логин-паролю и через социальные сети.
Основная сложность была в алгоритмах. Помню, в шахматной школе не каждый тренер мог провести жеребьевку по швейцарской системе. Это именно жеребьевка, поскольку есть элемент случайности. К счастью, я нашел в интернете движок по жеребьевке на JAVA. Это очень помогло, но не до конца. Нужно было уметь правильно подсчитывать очки и тут есть определенные сложности и варианты подсчета (связано с правилами ФИДЕ по подсчету коэффициента бухгольца).
Данные хранятся достаточно просто. Весь турнир сохраняется в виде JSON. Для обеспечения многопоточного изменения поддержана версионность. Операция изменения применяется если прочитанная версия равна версии данных в базе. Если версия изменилась, то данные пересчитываются и применяются еще раз.
Как сервис стал популярным у иностранных шахматистов
Первое время я пробовал раскручивать сайт и потратил где-то 2000 рублей. Было впечатление, что шахматная жеребьевка мало кому интересна. Статистика по ключевым словам в Google это подтверждает. В итоге решил прекратить раскрутку.
Но каким-то образом раскрутка дошла до Бразилии. Одна девушка пользовалась моим сайтом, но ее печалило, что интерфейс не на ее родном языке. Друг этой девушки решил ее удивить и написал мне, что хочет перевести мой сайт. Так появился португальский язык на SwissSystem.org. Думаю, ребята поженились, жили долго и счастливо. ?
Осенью 2019 внезапно на меня вышел Мато Джелик (Mato Jelic) из Австралии, который хотел купить компоненту и встроить ее в свой сайт на вордпрессе. Я ему долго объяснял, что это практически невозможно и нужно будет покупать нормальную виртуальную машину, а не хостинг на PHP. В итоге мы всё-таки договорились и была создана копия сайта. Это был единственный существенный доход, который покрыл расходы на хостинг на много лет вперед.
За последний год в среднем сайт посещает около 500 человек в месяц. В январе 2021 года преимущественно посещают игроки из Великобритании, Индии и США. Организатор турниров в Великобритании пару раз давал пожертвования в виде пары десятков фунтов. Есть идея переписать сайт на ReactJS и выпустить мобильное приложение, но всегда находятся какие-то другие дела.
4К открытий4К показов