Блог пользователя MikeMirzayanov

Автор MikeMirzayanov, 8 лет назад, По-русски

Добрый день.

Соскучились по чему-то новенькому? У меня есть чем вас порадовать!

Сам я регулярно провожу какие-то мероприятия — олимпиады, онсайты, контрольные и самостоятельные работы для студентов, в конце концов. С одной стороны, 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”)
  • Разрешить саморегистрацию — может ли участник группы зарегистрироваться на контест сам (если нет — регистрируйте его)
  • Разрешить незарегистрированным пользователям наблюдать за ходом соревнования — может ли участник группы, не зарегистрированный на контест, войти в контест и видеть задачи, статус, результаты и прочие подробности
  • Включить общий статус — могут ли участники видеть информацию о попытках других участников, или же им доступна информация исключительно о собственных попытках
  • Длительность заморозки и время разморозки. Будьте аккуратны при переносе контеста — время разморозки надо изменять самостоятельно.
  • Политика отображения тестов. Возможные варианты: “не показывать вообще”, “показывать непройденные тесты собственных решений”, “показывать полностью все тесты”
  • Политика отображения чужих попыток. Возможные варианты: “не показывать вообще”, “показывать решившим задачу”, “показывать всем”.
  • Проголосовать: нравится
  • +609
  • Проголосовать: не нравится

»
8 лет назад, # |
Rev. 2   Проголосовать: нравится +20 Проголосовать: не нравится

Будет ли возможность использовать такой же формат контеста как Abbyy Cup 2? Они удобны при проведении IOI соревнований.

»
8 лет назад, # |
  Проголосовать: нравится +22 Проголосовать: не нравится

Когда добавите IOI правила?

»
8 лет назад, # |
  Проголосовать: нравится +55 Проголосовать: не нравится

В сочетании с доменом верхнего уровня cf будет вообще здорово: james007.cf

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится +52 Проголосовать: не нравится

    Видимо, мы можем такое легко поддержать. Только домен придется приобретать вам)

    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится +15 Проголосовать: не нравится

      Только домен придется приобретать вам)
      Как мне известно, домен .cf можно и за бесплатно получить, но только на один год :P

      • »
        »
        »
        »
        8 лет назад, # ^ |
          Проголосовать: нравится +8 Проголосовать: не нравится

        Через личный кабинет можно продлевать каждый год, тогда он навсегда бесплатным останется

»
8 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Как создать группу Codeforces? пожалуйста скажите?

»
8 лет назад, # |
Rev. 2   Проголосовать: нравится +66 Проголосовать: не нравится

Чтобы делать контесты, супер удобно. Еще бы гарантию \ увеличение шансов, что КФ в день контеста будет стабилен и не будет неожиданностей в виде больших очередей \ недоступного сайта. Пока, к сожалению, изредка бывает такое, поэтому страшновато серьезные олимпиады здесь проводить.

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    По поводу этого, нет варианта перенести вычислительные мощности на собственное железо на время проведения соревнования?

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Никаких сложностей уже долгое время нет. Меня заваливает смс-ками и письмами, если что-то работает не штатно. Решения, посланные из доменных групп имеют чуть больший приоритет перед архивом. При проведении большого важного контеста можно согласовать детали со мной.

»
8 лет назад, # |
  Проголосовать: нравится +21 Проголосовать: не нравится

Всё, что нужно для отображения — это доступ по HTTP до 212.193.33.6 Если вы проводите официальный контест, важную тренировку или контрольную — смело блокируйте весь остальной интернет, кроме этого IP-адреса.

Получается, через этот IP-адрес доступны страницы всех групп. То есть читеры могут создать свою группу, настроить для неё поддомен и пользоваться ей во время контрольной.

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Получается да. Читер должен быть из первого дивизиона, но есть тонкость, согласен. В Саратовском ГУ весь веб через squid, который может и по домену фильтровать (наверное, я не особо вникал). Есть идеи как сделать лучше?

    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится -23 Проголосовать: не нравится

      Что если запретить создание групп в течении дня/6 часов после вступления в группу? Или в регистрации на соревнование группы указывать невозможность создания группы в течении соревнования, если того требует создатель группы?

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Появилась идея.

    Менеджер группы регистрирует домен (может у него уже есть), например, 2019.neerc.ifmo.ru, прописывает dns на свой локальный сервер. На этом сервере поднимает nginx и делает location, который просто прокси уже до icpcneerc19.contest.codeforces.com (и есть группа с доменом icpcneerc19). Настройку для nginx мы даем — она предельно простая.

    У участников есть доступ только к 2019.neerc.ifmo.ru, на котором других групп нет.

    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Если у менеджера группы есть локальный сервер, то он может в DNS и yourgroupdomain.contest.codeforces.com прописать так, чтобы он указывал на этот сервер (на локальном DNS-сервере), так что свой домен не обязателен. Хуже, если у менеджера есть только несколько компьютеров (с Windows, естественно, и с одной сетевой картой) и роутер. Многие ли роутеры позволяют так настроить, чтобы у одного из компьютеров был доступ в сеть, а у остальных — нет?

      Кстати, доступ к DNS также следует ограничивать, а то через него можно передавать данные.

      • »
        »
        »
        »
        8 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Многие ли роутеры позволяют так настроить, чтобы у одного из компьютеров был доступ в сеть, а у остальных — нет?

        Кажется, настроить правило вида: если src.ip != (proxy IP) and dst.ip not in (local network) then drop packet могут практически все домашние роутеры. Только вот доверия по отношению к такому способу фильтрации нет никакого (все обходится IP/MAC-спуфингом). Чтобы подобные атаки не работали, не должно быть маршрутизации между интернетом и сетью, в которой находятся компьютеры участников, т.е. прокси нужно включать в разрыв.

        Хуже, если у менеджера есть только несколько компьютеров (с Windows, естественно, и с одной сетевой картой) и роутер

        Я думаю, в такой ситуации проще и дешевле всего потратить  ≤ 1000 рублей на USB или PCI-E сетевую карту и использовать роутер исключительно в качестве свитча и опционально — DHCP-сервера, т.е. подключить прокси напрямую к интернету, а другой сетевой картой завести его в локалку с компьютерами участников. Потому что иначе для полноценной эмуляции включения в разрыв придется использовать единственную сетевую карту в качестве VLAN-trunk'а, что винда нативно не поддерживает (я уж молчу про большинство дешевых роутеров домашнего уровня, а речь здесь именно о них).

»
8 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

А будет ли доступна администратору домена функция Rejudge, например, на случай каких-то проблем с тестами?

P.S. Спасибо за крутейший функционал — будем пользоваться.

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Оценено

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Сделайте возможности ставить статус "посылка не зачтена" на посылки участников, не только в доменах, но и в обычных группах. Иногда кто-то нечестно сдаёт задачу, или есть дополнительные требования на алгоритм или к качеству кода. Сейчас для этого приходится уменьшать TL в полигоне, реджаджить посылку и увеличивать TL обратно.

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Можно сделать так чтобы показывались официальные имя и фамилии?

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Если вы используете пользователей домена (т.е. сами устанавливаете логины и пароли), тогда можно. Если ваши пользователи входят под логинами с codeforces, тогда нельзя.

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Awesome functionality!

Now, when I try to edit an old group, I get error 500. But I hope it's fixed soon :)

»
8 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Было бы очень здорово иметь возможность показывать анонимным зрителям стендинги соревнований, но не показывать условия задач.

Мы попробовали снять галку «Разрешить незарегистрированным пользователям видеть ход соревнования», но добавить в группу рейтинг. К сожалению, имена пользователей, которых регистрирует админ, в рейтинге имеют вид «g2324=user». Да и сам формат рейтинга менее прозрачен для стороннего зрителя по сравнению со стендингом.

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

MikeMirzayanov, а это нормально что IP-адрес, указанный в статье (212.193.33.6), недоступен?

И еще один вопрос: какие порты необходимо открыть для доступа к домену группы?

  • »
    »
    6 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    MikeMirzayanov, а это нормально что IP-адрес, указанный в статье (212.193.33.6), недоступен?

    Не очень понятно, что конкретно вы хотели уточнить. Всё работает в штатном режиме, как и написано в статье. Все домены групп располагаются по этому адресу. Переходить в браузере на 212.193.33.6 смысла не имеет, наверняка, вы получите ошибку 403.

    И еще один вопрос: какие порты необходимо открыть для доступа к домену группы?

    Обычный веб-сайт же — если планируете посещать веб-сайт только по HTTP, то 80-й порт, если и по HTTPS, то еще 443.

»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Добавляю синтетических пользователей домена со своими логинами и паролями. Все работают, один не может войти, выдается надпись "Пожалуйста, подтвердите свой email" Подтверждать ему нечего, логин из списка "пользователи домена", логин и пароль копипастим. Логин совпадает с логином чьего-то реального хэндла на cf, но таких там несколько, все работают.

  • »
    »
    5 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Вероятно, его логин совпал с хэндлом участника. Попробуйте назначить ему другой логин.

    • »
      »
      »
      5 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      но я проверила, еще у нескольких человек логины совпали с реальными хэндлами — все работает, пускает под "искусственным". Только у одного проблема. Переназначить логин можно (но неудобно), но каковы шансы, что не перестанет пускать кого-то еще?

»
5 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится

И когда открываю пример (https://example.contest.codeforces.com/) и когда захожу в мою группу получаю — 502 Bad Gateway nginx

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Ломается саморегистрация на группу, если указать одну и ту же почту два раза, но сообщение с паролем приходит. Хотел попробовать очистить пользователей и заново зарегистрировать. Можно ли как-то управлять списком имейлов участников?

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Не открываются никакие поддомены для групп — это что-то временное? Например, http://example.contest.codeforces.com

»
2 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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 error

IP address is not allowed: 194.58.31.81

And 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