Добрый день.
Соскучились по чему-то новенькому? У меня есть чем вас порадовать!
Сам я регулярно провожу какие-то мероприятия — олимпиады, онсайты, контрольные и самостоятельные работы для студентов, в конце концов. С одной стороны, Codeforces уже предлагает уникальный функционал — группы, интеграцию с Полигоном, возможность выбрать задачи из архива и прочее. Но этого мало!
Домены для групп
Вот вам пример такой группы. Она открыта для всех — заходите и смотрите: http://example.contest.codeforces.com
Домен группы
Теперь при создании/редактировании группы можно указать её (под)домен (от 3 до 20 букв-цифр, начинается с буквы). При указании домена группа будет доступна по ссылке вида http://yourgroupdomain.contest.codeforces.com. По ссылке такого вида верно следующее:
- Ничего лишнего отображаться не будет — отображаемый сайт содержит только соревнования/блоги вашей группы и ничего другого.
- Всё, что нужно для отображения — это доступ по HTTP до
77.234.215.194
. Если вы проводите официальный контест, важную тренировку или контрольную — смело блокируйте весь остальной интернет, кроме этого IP-адреса. - Пока такие группы могут содержать только приватные соревнования и тренировки. Например, вы можете сделать свой мэшап и настроить его так, как нужно именно вам. Возможно, в будущем мы что-то придумаем с этим ограничением, а пока — так.
Разрешенные подсети для домена
Чтобы быть уверенным, что лишние люди не перейдут по вашей ссылке вида http://yourgroupdomain.contest.codeforces.com, можно ограничить доступ к ней по IP. Указывайте точные IP-адреса или подсети. Например, 188.93.56.35;212.193.32.0/19
.
Язык интерфейса для домена
Вероятно, при проведении мероприятия в интерфейсе участника достаточно только английского (или только русского) интерфейса. Используя эту настройку, вы можете выбрать нужное поведение.
Html заголовка
Вы можете поменять хедер сайта по адресу http://yourgroupdomain.contest.codeforces.com, чтобы там был не привычный, дорогой сердцу логотип Codeforces, а логотип или название вашего мероприятия. Например, проводя межвузовскую олимпиаду в Саратове, я указывал <h3>Межвузовская олимпиада по программированию 2017 (Саратов)</h3>
.
Пользователи домена (в сайдбаре)
С большой вероятностью, если вы проводите олимпиаду или что-то похожее, у участников может и не быть аккаунта на Codeforces, данные об участниках приходят из отдельной регистрации, и вы хотите видеть в интерфейсе нормальные имена в стиле Вася Тапочкин, Берляндский ГУ, 3 курс
, а не хэндл участника.
Вы можете добавить синтетических пользователей именно для вашей группы с доменом (используя эти аккаунты, зайти в группу можно только через домен). Для этого используйте специальную настройку "Пользователи домена". Каждая строка соответствует одному пользователю и должна быть записана в формате id соревнований (через запятую) | хэндл | пароль | имя
. Вот пример этой настройки для домена example.contest.codeforces.com:
213380 | u01 | 371111 | Petr Korotkevich
213380 | u02 | 627492 | Gennady Soejima
213380 | u03 | 491591 | Makoto Knuth
213380 | u04 | 581711 | Donald Cormen
213380 | u05 | 057259 | Thomas Mitrichev
Да, вы можете почувствовать себя Петром Короткевичем, зайдя на http://example.contest.codeforces.com, используя логин u01 и пароль 371111.
О настройках приватности
У вас есть гибкие возможности настроить всё ровно так, как нужно именно вам. Например, чтобы максимально ограничить доступ в группу (только по домену, лишних пользователей не пускать), установите видимость группе закрытая
, а политику регистрации её участников по приглашению
. В таком случае зайти по доменному адресу смогут лишь пользователи домена (смотрите пункт выше) и те, кого вы пригласили явным образом в группу.
Для приватных контестов можно установить дополнительные настройки:
- Разрешить дорешивание — можно ли решать задачи после официального окончания в неофициальном режиме дорешивания
- Разрешить виртуальное участие — можно ли после окончания официального окончания (или когда угодно, если нет времени старта) участвовать виртуально
- Разрешить участие вне конкурса — зарезервировано под участие вне конкурса, пока вне конкурса можно регистрировать только пользователей домена (для нужных пользователей нужно добавить символ ‘o’ после id соревнования, например “213380o | u01 | 371111 | Petr Korotkevich”)
- Разрешить саморегистрацию — может ли участник группы зарегистрироваться на контест сам (если нет — регистрируйте его)
- Разрешить незарегистрированным пользователям наблюдать за ходом соревнования — может ли участник группы, не зарегистрированный на контест, войти в контест и видеть задачи, статус, результаты и прочие подробности
- Включить общий статус — могут ли участники видеть информацию о попытках других участников, или же им доступна информация исключительно о собственных попытках
- Длительность заморозки и время разморозки. Будьте аккуратны при переносе контеста — время разморозки надо изменять самостоятельно.
- Политика отображения тестов. Возможные варианты: “не показывать вообще”, “показывать непройденные тесты собственных решений”, “показывать полностью все тесты”
- Политика отображения чужих попыток. Возможные варианты: “не показывать вообще”, “показывать решившим задачу”, “показывать всем”.
Будет ли возможность использовать такой же формат контеста как Abbyy Cup 2? Они удобны при проведении IOI соревнований.
Когда добавите IOI правила?
В сочетании с доменом верхнего уровня cf будет вообще здорово: james007.cf
Видимо, мы можем такое легко поддержать. Только домен придется приобретать вам)
Только домен придется приобретать вам)
Как мне известно, домен .cf можно и за бесплатно получить, но только на один год :P
Через личный кабинет можно продлевать каждый год, тогда он навсегда бесплатным останется
Как создать группу Codeforces? пожалуйста скажите?
Нужно стать фиолетовым
Чтобы делать контесты, супер удобно. Еще бы гарантию \ увеличение шансов, что КФ в день контеста будет стабилен и не будет неожиданностей в виде больших очередей \ недоступного сайта. Пока, к сожалению, изредка бывает такое, поэтому страшновато серьезные олимпиады здесь проводить.
По поводу этого, нет варианта перенести вычислительные мощности на собственное железо на время проведения соревнования?
Никаких сложностей уже долгое время нет. Меня заваливает смс-ками и письмами, если что-то работает не штатно. Решения, посланные из доменных групп имеют чуть больший приоритет перед архивом. При проведении большого важного контеста можно согласовать детали со мной.
Получается, через этот IP-адрес доступны страницы всех групп. То есть читеры могут создать свою группу, настроить для неё поддомен и пользоваться ей во время контрольной.
Получается да. Читер должен быть из первого дивизиона, но есть тонкость, согласен. В Саратовском ГУ весь веб через squid, который может и по домену фильтровать (наверное, я не особо вникал). Есть идеи как сделать лучше?
Что если запретить создание групп в течении дня/6 часов после вступления в группу? Или в регистрации на соревнование группы указывать невозможность создания группы в течении соревнования, если того требует создатель группы?
Появилась идея.
Менеджер группы регистрирует домен (может у него уже есть), например, 2019.neerc.ifmo.ru, прописывает dns на свой локальный сервер. На этом сервере поднимает nginx и делает location, который просто прокси уже до icpcneerc19.contest.codeforces.com (и есть группа с доменом icpcneerc19). Настройку для nginx мы даем — она предельно простая.
У участников есть доступ только к 2019.neerc.ifmo.ru, на котором других групп нет.
Если у менеджера группы есть локальный сервер, то он может в DNS и
yourgroupdomain.contest.codeforces.com
прописать так, чтобы он указывал на этот сервер (на локальном DNS-сервере), так что свой домен не обязателен. Хуже, если у менеджера есть только несколько компьютеров (с Windows, естественно, и с одной сетевой картой) и роутер. Многие ли роутеры позволяют так настроить, чтобы у одного из компьютеров был доступ в сеть, а у остальных — нет?Кстати, доступ к DNS также следует ограничивать, а то через него можно передавать данные.
Кажется, настроить правило вида: если
src.ip != (proxy IP) and dst.ip not in (local network) then drop packet
могут практически все домашние роутеры. Только вот доверия по отношению к такому способу фильтрации нет никакого (все обходится IP/MAC-спуфингом). Чтобы подобные атаки не работали, не должно быть маршрутизации между интернетом и сетью, в которой находятся компьютеры участников, т.е. прокси нужно включать в разрыв.Я думаю, в такой ситуации проще и дешевле всего потратить ≤ 1000 рублей на USB или PCI-E сетевую карту и использовать роутер исключительно в качестве свитча и опционально — DHCP-сервера, т.е. подключить прокси напрямую к интернету, а другой сетевой картой завести его в локалку с компьютерами участников. Потому что иначе для полноценной эмуляции включения в разрыв придется использовать единственную сетевую карту в качестве VLAN-trunk'а, что винда нативно не поддерживает (я уж молчу про большинство дешевых роутеров домашнего уровня, а речь здесь именно о них).
А будет ли доступна администратору домена функция Rejudge, например, на случай каких-то проблем с тестами?
P.S. Спасибо за крутейший функционал — будем пользоваться.
Да, будет (если сейчас еще нет).
Оценено
Сделайте возможности ставить статус "посылка не зачтена" на посылки участников, не только в доменах, но и в обычных группах. Иногда кто-то нечестно сдаёт задачу, или есть дополнительные требования на алгоритм или к качеству кода. Сейчас для этого приходится уменьшать TL в полигоне, реджаджить посылку и увеличивать TL обратно.
Можно сделать так чтобы показывались официальные имя и фамилии?
Если вы используете пользователей домена (т.е. сами устанавливаете логины и пароли), тогда можно. Если ваши пользователи входят под логинами с codeforces, тогда нельзя.
Awesome functionality!
Now, when I try to edit an old group, I get error 500. But I hope it's fixed soon :)
Было бы очень здорово иметь возможность показывать анонимным зрителям стендинги соревнований, но не показывать условия задач.
Мы попробовали снять галку «Разрешить незарегистрированным пользователям видеть ход соревнования», но добавить в группу рейтинг. К сожалению, имена пользователей, которых регистрирует админ, в рейтинге имеют вид «g2324=user». Да и сам формат рейтинга менее прозрачен для стороннего зрителя по сравнению со стендингом.
MikeMirzayanov, а это нормально что IP-адрес, указанный в статье (212.193.33.6), недоступен?
И еще один вопрос: какие порты необходимо открыть для доступа к домену группы?
Не очень понятно, что конкретно вы хотели уточнить. Всё работает в штатном режиме, как и написано в статье. Все домены групп располагаются по этому адресу. Переходить в браузере на 212.193.33.6 смысла не имеет, наверняка, вы получите ошибку 403.
Обычный веб-сайт же — если планируете посещать веб-сайт только по HTTP, то 80-й порт, если и по HTTPS, то еще 443.
Спасибо за объяснения!
Добавляю синтетических пользователей домена со своими логинами и паролями. Все работают, один не может войти, выдается надпись "Пожалуйста, подтвердите свой email" Подтверждать ему нечего, логин из списка "пользователи домена", логин и пароль копипастим. Логин совпадает с логином чьего-то реального хэндла на cf, но таких там несколько, все работают.
Вероятно, его логин совпал с хэндлом участника. Попробуйте назначить ему другой логин.
но я проверила, еще у нескольких человек логины совпали с реальными хэндлами — все работает, пускает под "искусственным". Только у одного проблема. Переназначить логин можно (но неудобно), но каковы шансы, что не перестанет пускать кого-то еще?
И когда открываю пример (https://example.contest.codeforces.com/) и когда захожу в мою группу получаю — 502 Bad Gateway nginx
починили, спасибо!
Ломается саморегистрация на группу, если указать одну и ту же почту два раза, но сообщение с паролем приходит. Хотел попробовать очистить пользователей и заново зарегистрировать. Можно ли как-то управлять списком имейлов участников?
Не открываются никакие поддомены для групп — это что-то временное? Например, http://example.contest.codeforces.com
заработало
I'm trying to use
Permitted subnets for the domain
feature, however I've ran into some issues with that.Whenever I specify any IP address (e.g. IP by which my PC is visible outside) and try to access the website through the domain
https://<mycontest>.contest.codeforces.com
I got the following errorAnd looks like it belongs to
Codeforces
.Moreover if I add
194.58.31.81
to the list, then everyone with the link can access the contest.Is it expected?
cc MikeMirzayanov