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

Преамбула

Я работаю в дистанционном образовании. Если точнее, я поддерживаю и постоянно расширяю1 openEdx для нужд повышения квалификации учителей средних школ. В основном московских.

Это монстроидальное по своей природе творение предназначено для обслуживания армий слушателей, причём так, что конкретные оценки конкретного слушателя никого не волнуют, дело поставлено на поток. Нашему образованию такой подход классово чужд, потому что ему требуются постраничные отчёты по всему процессу, на каждого, желательно в реальном времени, а также постоянные почтовые рассылки всем слушателям которые учиться не хотят, потому что заставили. Edx же даже хранить оценки научился только на восьмой год жизни.

Потом в эту систему начинают добавлять школьников и федеральные проекты и начинается полный хаос. Про этот хаос я вам сейчас и расскажу. Трепещите заранее!

Амбула 1: Прочерк-прочерк-прочерк

Дело было уже порядочно давно. Пришёл мне список вида «создать этим гражданам аккаунты и подписать их на обучение тому-то и тому-то». Тогда это ещё было обычное дело. Как обычно, формат списка изменился снова2 и в этот раз вместо полей фамилия-имя-отчество я увидел там одно поле – ФИО.

А у меня в базе они, как положено, отдельно хранятся.

При этом, у многих там были только Ф и И, но не было О. У многих стояло только одно слово и не было понятно, что это – Ф, И или О. Школы, из которых проистекают через длинную цепочку эти списки, по идее должны знать кто у них работает – но не всегда.

Я подумал, раздробил кому мог Ф-И-О на отдельные поля, а самым пострадавшим написал туда прочерк-прочерк-прочерк. То есть Фамилия -, Имя -, Отчество -.

Они же потом могут его исправлять, правда? Они это очень любят. Их 85% женщин, они каждый год десятками выходят замуж и меняют фамилию. Им потом на это ФИО документы получать. Им же нужны документы, да?

Прошёл месяц. Стучат мне из техподдержки, «у меня отчёт сломался».

Смотрю в отчёт, вижу что у некоторых вместо фамилии действительно ерунда. Excel, как и OpenOffice, разбирая csv, думает, что если поле, не обёрнутое в кавычки, начинается с минуса, то есть -, то там число. Видя после минуса букву они рисуют в поле ошибку. Я это конечно исправил, но потом решил выяснить, а откуда они там вообще взялись.

И выяснил. Из 10 пострадавших которым были заменены ФИО на прочерк-прочерк-прочерк, пятеро написали -<Фамилия>, -<Имя>, -<Отчество>.

Занавес.

Амбула 2: Учётная запись

Из письма в техподдержку.

Добрый день. Меня зовут Ольга. Возникла такая проблема: три сотрудника прошли тестирование через одну почту, изменяя просто данные в личном кабинете, ответственный организатор ППИ изменила свои данные в личном кабинете, ввела номер приглашения свой, прошла тест, как ответственный. Далее технический специалист ППИ изменила данные в этом же личном кабинете на свои ФИО и прошла тест, как технический специалист ППИ, под своим приглашением и так же организатор в аудитории. Как теперь быть? Все три человека прошли каждый свой тест, под своим номером приглашения. Как теперь это отразить в личном кабинете или где исправить, чтобы получить соответствующие сертификаты?

Три человека.

Получив три отдельных пригласительных билета.

Прошли три курса под одним аккаунтом.

Полностью изменяя в аккаунте ФИО, но не трогая email-адрес.

И теперь хотят три отдельных документа об окончании курсов.

Потому что они учителя идиоты.

Амбула 3: Почта

Было это дело в эпоху когда мы ввели использование пригласительных билетов – уникальных числовых строк – для регистрации пользователей и подписания их на курсы.3 И стучится ко мне техподдержка, «Тут некая дама не может залогиниться.»

Иду разбираться. Ситуация странная – основным логин-идентификатором у нас является email. Каким-то образом в базе возник второй аккаунт с таким же email, естественно, войти не могут оба. А как так вообще? Ведь они проверяются на дубликаты!

Чтобы изменить email, пользователю на новый email отправляется подписанная ссылка, содержащая, по сути, команду «изменить адрес пользователя X на Y» которая имеет определённый срок действия, но сама по себе не одноразовая. Адрес проверяется на дубликаты в момент когда ссылка отправляется.

Помедитировав, я быстро сообразил, что ошибка в том когда выполняется проверка на дубликат. В ситуации добросовестных пользователей, меняющих свой собственный email-адрес, проблема возникнуть не может никогда. Но если один пользователь контролирует несколько адресов, и пытается жонглировать учётными записями, при ошибке, он может кликнуть на ссылки не в том порядке. Поскольку проверка выполняется до того как ссылка сформирована, а не после, между двумя ссылками касающимися одного и того же адреса возникает race condition.

Как выяснилось, дама была завучем. Она зарегистрировала email на всю школу и создавала им аккаунты, чтобы отчитаться что все они приступили к обучению.

Для этого она создавала учётную запись на своё имя и свой email-адрес, а потом полностью меняла в ней все персональные данные и email-адрес.

И так более 10 раз.

Я написал код отлавливающий такую ситуацию заранее, и обнаружил что таких дам в России множество.

Амбула 4: Дети

Получил я как-то таск.

  1. Взять два csv файла.
  2. Проделать над ними мутные операции, требуемые чтобы подготовить список для массовой рассылки.

Смотрю, это csv по полтораста метров каждый. Смотрю внутрь. Список колонок:

  • код анкеты
  • фамилия
  • имя
  • отчество
  • ВОШ-логин
  • ВОШ-пароль

Бля.

Это - школьники.

Я внезапно стал обладателем более полумиллиона паролей4 по крайней мере формально принадлежащих детям…

Спросите почему так? Всё просто. В нашей конторе уже давно удостоверились что учителя не в состоянии ни придумать пароль сами, ни запомнить его. Безопасность и закон о персональных данных? Нет, не слышали.

Амбула 5: Билеты

Школам было выдано 750 тысяч пригласительных билетов для школьников для обучения их премудростям участия в школьных олимпиадах.

Я молчу что такого количества детей в школах скорее всего на самом деле нет, это ладно.

Я также молчу что их было выдано заранее с запасом 20% сверх того что школы просили «на всякий случай». Угадайте, сколько из этих билетов было использовано.

Правильно, 0.58%.

Резюме

Я совершенно уверен, что сайт, который я по сути пилю в одиночку и на коленке, несмотря на бюджетное учреждение, ужасен и неудобен, и пользователи будут справедливо меня за это ругать. Но в ответ я скажу им:

Россия – страна несметных природных богатств. В каждом образовательном учреждении куда ни глянь – дубы!


  1. Так что оно уже пухнет и лопается давно. ↩︎

  2. Да, тогда это тоже было вполне обычное дело. Каждый год я получал списки в несколько ином формате и никто не мог сказать мне почему. Сейчас мы уже практически отказались от списков, хотя иногда нет-нет да и спускают нам новые. ↩︎

  3. Потому что доверять самим школам прислать списки, как сказано выше, невозможно, а на индивидуальном уровне, неграмотность слушателей беспокоит только самих этих слушателей. ↩︎

  4. Пусть и автоматически сгенерённых. ↩︎