Как мы на новый электронный журнал переходили. Дневники внедряльщика

За 10 дней до начала нового учебного года наша школа (под ненавязчивым давлением вышестоящих органов) начала экстренный переход на новую систему электронных журналов. Единую для всего региона, конечно же. Продвигаторы сего программного продукта клятвенно обещали на спешно организованных вебинарах, что новый софт будет «более лучшим», «пипец каким надёжным» и вообще позволит снять с учителей и завучей лишнюю нагрузку, поскольку вся нужная информация будет теперича автоматически попадать куда надо.

Ладно, где наша не пропадала. Качаем инструкции к новой ИС. Целых 6 штук на все случаи жизни (на самом деле — нет!). Грустим, глядя на непривычный интерфейс и смутно-знакомую логику построения ИС — разные точки входа в разные части единой (!) системы, периодическая синхронизация БД между этими модулями («Аверс Директор/Журнал», привет! Уж не ты ли это в новом обличии?). Эта логика самая по себе — тихий ужас для администрации школы. Дело в том, что у части модулей идентичный интерфейс, а на школу выдали один логин администратора. Часть функций по управлению школой выполняется в модуле «Мониторинг образования» (добавление учеников), часть — в модуле «Журнал» (например, указание почасовой нагрузки учителей), а часть — собственно в журнале (у него вообще отдельный адрес, и вход там через Госуслуги — свой для каждого учителя). При подготовке журнала к новому году приходится, во первых постоянно перелогиниваться в разных модулях (либо держать открытыми 2–3 браузера); во-вторых, периодически ждать той самой синхронизации БД.Т. е. я добавляю, например, нагрузку учителя в модуле «Журнал», но не могу тут же поставить ему урок в расписание, т. к. БД ещё не успела синхронизироваться (синхронизаций проходит каждые 10 минут; если повезёт, ждёшь недолго, если не повезёт — 10 минут на каждый чих).

В общем, в конце августа внезапно © оказалось, что частью новой ИС является модуль Мониторинг образования, к которому нас подключили (абсолютно добровольно, конечно же!) в июне месяце. И за лето секретарь и директор совместными усилиями успели забить в БД минимальный набор данных всех сотрудников и учеников. Вот только тогда, в июне, про электронные журналы ничего внятного не сказали, учителя разбежались по отпускам, и инструкции были прочитаны по диагонали. В результате все ученики оказались в едином списке. И вот — конец августа, учителя отдыхают последние деньки (в законом отпуске), и «вдруг граахнул гром»: мы переходим на новый электронный журнал. Отставить отпуск!

А далее начинается самое весёлое. Уже при первом знакомстве с новым электронным журналом стали вылазить (из всех щелей, блин!) различные косяки и баги. В борьбе с ними были потеряны десятки записей из БД. Инструкция по работе с этим добром вводила в ужас даже меня, программиста и юзера с четвертью века стажа, работавшего с немерянным количеством разного софта (в бытность свою техническим журналистом я тыкал в мышкой во всё, что не успевал сожрать из папки «Загрузки» антивирус). Да и электронный журнал этот для меня далеко не первый. Четвёртый, если быть точным. Ранее были попытки играть в «Аверс» (интерфейс их «Директора» в 2012 году вызывал лютую ностальгию по Delphi 3 и первым версиям CBuilder), потом попытка внедрения «Элжура» и, наконец, 8 вполне спокойных лет на Дневник.Ру, который я успешно развернул в 2 школах и не очень успешно в одном техникуме (я уволился, и не знаю, закончили ли внедрение).

В общем, видели, плавали, знаем — думалось мне… Ох, как же я ошибался…

После потери очередной порции ценных данных (и последующего «развлечения» по их повторному внесению в БД), я начал копать ИС на предмет контакта с разработчиками. Никаких копирайтов, названия CMS, ссылок на разработчиков найти не удалось (хотя путём поиска по изображению из инструкции я таки нашёл сайт этой системы и даже узнал парочку реальных имён разработчиков). И к своему удивлению обнаружил некое подобие тикет-системы. Правда, активности там не наблюдалось примерно никакой (до меня был один тикет, похожий на реальный, и пяток явно тестовых — созданных юзером с логином admin или пользователем, который мне позже отвечал от лица разработчиков). Что же, уже неплохо.

А дальше я создавал два первых тикета по всем явным косякам, замеченным в ходе развёртывания журнала. И на следующий день даже дождался ответа одного из разработчиков (ну, или кого-то из саппорта — тут, увы, точно не знаю). Во всяком случае мне обещали исправить проблемы. И то хлеб.

Вот эти первые тикеты. Здесь я ещё описываю проблемы шаблонно. Так, как стал бы описывать баги в любом другом ПО (собственно — почему «стал бы»? я этим периодически балуюсь последние лет 20 с хвостиком).

Тикет 1

Периодические ошибки при сохранении данных сотрудника

При сохранении данных сотрудника (с учениками такое тоже было) вылезает сообщение с ошибкой. При этом данные как бы сохраняются (появляются в общей таблице!), можно перейти к редактированию следующего сотрудника. Но в итоге после перезагрузки страницы (или переходы к другой таблице) все данные внесённые теряются. Я так потерял СНИЛСы 50 сотрудников, пришлось вносить заново.

Ответ разработчиков:

5cfcb1be45abc6c6e8bd4dbd266db896.png

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

Тикет 2

Не сохраняются настройки таблиц (столбцы, сортировка)

Если настроить внешний вид любой (!) таблицы, выбрать нужные столбцы, настроить их ширину, скрыть/показать панель редактора, сортировку — все эти настройки действуют до первой перезагрузки таблицы (перехода к другой таблице), что крайне неудобно при работе с большим объёмами данных. Особенно учитывая, что вся логика работы этого ЭЖ строится на переходе между таблицами. Насколько реально решить эту проблему?

a4211da2d584497394aa3323b3f06c71.png

Поясню: предложенное решение с отключением «автоширины» влияет на удобство примерно никак. Но чуть позже разработчики реально изменили стандартный набор колонок на предложенный мной вариант. Но сохранять ширину колонок они так и не научились. Увы…

Следующие тикеты были созданы через несколько дней, два из которых стали для меня «рабочими выходными», в которые я забивал разные данные в новую ИС, пытаясь обеспечить её минимальное функционирование. Параллельно со мной начали работать другие сотрудники нашей школы.

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

Тикет 3

Сквозной поиск учеников

Очень часто возникает необходимость сквозного поиска по списку учеников (например, мы давеча «потеряли» одного второгодника и минут 5 убили на поиск его в двух параллелях — завучи наши злые после такого). В нашем старом ЭЖ это делалось элементарно, с главной страницы панели администратора. Здесь не можем найти такую функцию. По сотрудникам можно искать с помощью фильтров, т.к. они в одной таблице. А ученики раскиданы по классам и приходится заходить в классы по по очереди и искать в списках. Очень затратно по времени получается, даже если в одной параллели искать ученика. PS. Такого рода сервисы должны облегчать жизнь учителям/завучам, но пока только усложняют, к сожалению :(PPS. Алана Купера разработчикам надо бы прочитать. Метод персонажей — убойная вещь для разработки интерфейсов.

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

db458cfa758386f518f1a2160a2e51bb.png

Однако, внедряльщики посылают всех в другой модуль — там такой поиск есть. Но там нельзя изменять данные пользователей. В общем, выполните, господа учителя, квестик ради простейшей операции. Я, к слову, приспособился бегать в наш старый электронный журнал — там поиск работает хорошо. Но весь год не будешь два журнала поддерживать в актуальном состоянии — это нереально. Впрочем, все пофиг. Школам же некуда деваться — как-нибудь выкрутятся. Завучам можно меньше спать, например.

Тикет 4

Ошибка «Уберите лишние пробелы»

2bab8ad666e9923fed7eb3bc37f2a7f6.png

Уважаемые разработчики, лишние пробелы должна убирать функция trim () или её аналог в том языке/фреймворке, который вы используете. Учителям и завучам есть чем заняться в рабочее время, пожалейте, пожалуйста, наше время!

И чтобы новый тикет не создавать — прикрутите, пожалуйста, проверку формата СНИЛС (а в идеале — его автоматическое форматирование с приведением к формату Госуслуг). У нас только с учителями уже 2 случая лишнего дефиса в СНИЛС — и люди не могут зайти в систему. Что будет, когда начнём учеников и родителей массово подключать — страшно представить (у нас больше 1000 учеников, плюс родители!).

Опять таки — пожалейте учителей и завучей! Мы не компьютеры, а вынуждены работать regexp’ом вместо компьютера, проверяя формат входных данных.

Дальше тон моих тикетов снова немного изменится. Прошло ещё два дня, наполненных хождением по чужим граблям и борьбой с бесконечными косяками UI. Понимая, что к 1 сентября развернуть журнал мы уже точно не успеваем, мы подключили к работе ещё одного учителя, ответственного за работу с расписанием. И как человек, далёкий от IT (но успешно много лет работавший с аналогичными функциями Дневник.Ру), она столкнулась с кучей новый граблей и багов.

Тикет 5

Нелогичная сортировка таблиц

Доброй ночи!

Во всех таблицах сервиса wp2 наблюдается ужасная сортировка данных.

8a4ea1c617a3101952d4901fc1140bf3.png

Пример 1. В таблице расписания звонков сразу при открытии данные расположены в совершенно случайном порядке (я не вижу логики вообще; даже если предположить, что сортировка идёт по скрытому полю id — не катит, т.к. я сам лично добавлял уроки в эту таблицу, и шёл строго по порядку). Сортировка по столбцам, которые видны по умолчанию, порядка не добавляет. Что-то приличное получается только при показе столбца «Группа» и сортировке по нему. И то через раз (там random что-ли где-то затесался в коде сортировки?).

d42382b905a518e8615fa0bc56a07d8e.png

Пример 2. В таблице классы — снова пример ужасного UI. Там просто нет ни одного способа упорядочить классы самым естественным для любого учителя способом (т.е. 1-А, 1-Б, … 11-А, 11-Б). Если сортировать по параллели, литеры классов выстраиваются случайным образом. У нас человек, ответственный за расписание вас заочно прокляла (уж извините за резкость, но с таким UI у меня у самого язык чешется), когда увидела как нужно искать нужный класс в этом плохо упорядоченном списке, и пару раз внесла нагрузку не в тот класс. Плюс 10 и 11 класс оказываются в середине списка, между 1 и 2 классам. Там по алфавиту что-ли сортировка, а не по числовым значениям?!

Пожалуйста, сделайте человеческую сортировку.

PS. Я ещё не смотрел толком интерфейс one/43edu, но уже заранее боюсь, что бОльшую часть учебного года буду не своей работой заниматься, а помогать нашим 60 учителям (половина которых — пенсионеры) бороться с интерфейсом нового журнала. Искреннее надеюсь, что всё будет не так страшно, но wp2 пока не даёт поводов надеяться на лучшее…

И снова — данный запрос многократно повторялся в чате поддержки. Ни одного ответа от разработчиков и внедряльщиков я не видел. Подозреваю, что сортировка используется дефолтная, от виджета таблицы. И там русские буквы не умеют. А исправить никто не может. Других логичных объяснений у меня нет.

Тикет 6

Ученик, выбранный по-умолчанию

(здесь нужно сделать пояснение: в ИС, о которой идёт речь, перенос учеников между классами реализован через «буфер обмена»; алгоритм приведёт в тикете; я таким образом «сортировал» по классам больше 1000 учеников; с десяток при этом были потеряны или случайно перенесены не в тот класс из-за описанной проблемы)

854a44ac1e49c650faf618498567f1f1.png

При открытии списка класса первый ученик выбран по-умолчанию. Это создаёт проблемы при переводе из класса в класс. Мы перед началом учебного года сверяли списки классов, учитывали учеников, которые перешли в другие классы за лето. Типичный сценарий в вашей системе:

1. Открыть класс ОТКУДА переводим.

2. Выделить нужного ученика.

3. ПКМ / Вырезать.

4. Открыть класс, КУДА переводим.

5. ПКМ / Вставить.

Когда таких операций выполняется много, часто забываешь снять галочку с первого ученика. В результате ученики, которые идут первыми по алфавиту в классах, незапланированно «мигрируют» по школе. Потом приходится их искать (см. тикет про невозможность сквозного поиска).

При удалении ученика эта проблема тоже присутствует. Не снял галочку — удалил первого по списку вместе с тем, кого реально нужно было удалить.

Снова усложняете жизнь завучам/секретарю на ровном месте.

Вообще, сам алгоритм перевода — просто типовой пример ужасного интерфейса. Почему нельзя сделать кнопочку (ну ладно, контекстное меню) «Перевести в другой класс», вывести при её нажатии окно с выбором класса назначения и по нажатию 1 (одной!) кнопки отправить ученика в нужный класс? вместо 8 (восьми!) щелчков мышкой на каждого ученика (ну ладно, группу можно), можно обойтись 3 (тремя).

Плюс само копирование через «буфер обмена» — крайне опасный способ с точки зрения сохранности данных. Мы несколько раз потеряли данные учеников при переносе из класса в класс, когда возникали ошибки в вашей системе и буфер очищался.

Для учителей/завучей эта работа — не основная, нам очень жалко времени, потраченного на борьбу с неудобным интерфейсом и повторное внесение потерянных данных.

Пользовательские данные — это «священная корова», любые косяки интерфейса и кода, приводящие к их потере — зло в чистом виде.

Даже всякие ВКонтакте при перезагрузке страницы не теряют данные из форм, хотя там просто переписка, а не ИС.

Тикет 7

Невозможно сохранить расписание звонков после изменения группы

И снова вынужден указать на проблемы с интерфейсом (знаю, что задолбал, но пока мне приходится в рамках нашей школы заниматься борьбой с интерфейсом вашей системы, забив на свою работу и семью, я буду все эти косяки перекладывать на тех, кто за них реально отвечает; честно говоря, страшно представить, что про вас думают сейчас в сельских школах, где даже учителя информатики нормального зачастую нет).

(где-то здесь я понял, что скоро из моих тикетов можно будет собрать целую статью; и «тут Остапа понесло» © работа велась поздним вечером 31 августа в тщетных попытках обеспечить хоть какое-то функционирование системы к 1 сентября; меня пробило на жёсткий стёб)

Итак, берём таблицу «Расписание звонков». Мы в ходе работы над расписанием поняли, что в вашей системе распределение звонков по сменам может работать только в сферической школе в вакууме (или в глухих деревнях), где 1 смена и никто не слышал про нулевые уроки и «подсменку». И стали править расписание звонков, делая сквозную нумерацию с 1 по 12 уроки. При этом группу »1 смена» переименовали в «Основное расписание звонков», а группу »2 смена» просто удалили.

Затем открыли таблицу «Расписание звонков». И там увидели для всех записей бывшей »1 смены» группу…»1 смена». И пофиг, что мы её переименовали уже. Ладно, всё равно половину уроков править — поправим ещё. Мне ночью делать нечего всё равно.

Берём первый урок, меняем группу в редакторе, жмём кнопку «Применить». Стоп! Нет, не жмём, ведь она неактивна! Т.е. я редактирую данные в форме, но сохранить их не могу. Где-то на этот моменте Джеф Раскин перевернулся в гробу. Ладно, не первый раз корявые интерфейсы вижу (и не последний, увы!). Правлю поле «Номер урока», меняю »1» на »2», а потом обратно на »1» («Психбольница в руках пациентов» ©). И — опаньки! Оно живое! В смысле — кнопка «Применить снова активна».

Ещё полчаса жизни убиты на борьбу с интерфейсом. Сегодня 31 августа, время 19.30, расписания в журнале всё ещё нет.

Тикет 8

null вместо отчества в журнале

Добрый день.

Ну вот я и добрался до one.43edu. И тут же нашёл багу (на самом деле не одну, но об остальных позже). У нас есть несколько учеников, которые внесены в списки без отчества. И в журналах для них дописано отчество null.

1394476a2b2c1651e73840185a9e92df.png

Намёк:

if(empty($otchestvo)) {

// не выводим отчество

}

else {

// выводим отчество

}

Хорошо, что var_dump всего массива данных об ученике нам не показали…

Тикет 9

И снова добрый день!

У всех наших завучей (и приравненных к ним учителям, которым пришлось выставить роль «Завуч» в вашей системе) одинаковая проблема — мы всегда видим абсолютно все классы при открытии журналов.

ff797c56b4bf25f12edd9abc8d6ce6b8.png

Как бы объяснить… Когда завуч приходит на урок, ему не нужны все журналы всех классов. Достаточно видеть те классы, в которых у меня есть уроки.

Например, в Дневник.Ру по умолчанию любой учитель видит только функционал учителя, а для перехода в режим завуча/администратора есть отдельная кнопка. В течение учебного года этот нужен нечасто. А тут я даже не могу свернуть лишние ветки дерева (то есть свернуть могу -, но эти настройки не сохраняются, и при следующем входе я снова вижу все классы, и должен копаться в длинном дереве, чтобы найти нужный журнал. Хорошо хоть, здесь классы отсортированы нормально (виджет дерева умеет сортировать лучше, чем виджет таблицы в wp2?).

Тикет 10

Привязка кабинетов к урокам

И ещё раз добрый день!

Никак не можем привязать кабинет к конкретному уроку. Наша школа учимся в 2,5 смены, ситуация, когда учитель ведёт все уроки в одном кабинете — почти фантастика. В Дневнике, ру кабинет назначался для каждого урока отдельно (в шаблоне расписания), здесь назначается для журнала. Фактически мы не можем на данный момент сформировать в электронном виде пригодное к работе расписание (номер урока / предмет / учитель / кабинет).

Без такой привязки у нас один выход — делать классическое бумажное расписание. Для нашей школы это будет сильным откатом в прошлое. Мы 8 лет успешно использовали электронный вариант с привязкой к кабинетам, а на бумажках писали только изменения.

Тикет 11

Очень много лишних названий в таблице «Предметы»

Таблица предметы содержит 91 наименование. Часть из них имеет похожие названия. Например: История, История России, История Отечества. Плюс мы в «школьную» таблицу предметов добавили свои названия. У нас, например есть «История России. Всеобщая история».

В итоге при создании нагрузки в классе сотрудник каждый раз видит такой список:

История

История России

История России. Всеобщая история

История Отечества

И это только один пример. А таких предметов с похожими названиями — много. И операции, требующие выбора предмета из этого списка, нужно повторить сотни раз. Снова часы потерянного времени и слёзы в глазах от бессмысленного чтения десятков лишних слов с экрана. Но кому интересны время и здоровье учителей…

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

На этом месте я приостановил создание тикетов, поскольку обратная связь со стороны разработчиков полностью прервалась 1 сентября. В официальном telegram-канале неудобные вопросы (нее только мои, но коллег со всего региона) тоже игнорируют. На регулярно повторяющиеся вопросы (а как не повторяться, если для поиска ответа нужно пролистать тысячи постов в Telergam — никакого FAQ не ведётся, инструкция ответов на насущные вопросы не даёт) ответственные лица отвечают уже достаточно резко, на грани хамства.

В общем, на сегодняшний день выводы неутешительные. Целому региону навязали неудобную, достаточно глючную систему, рассчитанную на «сферические школы в вакууме». Не проработаны элементарные сценарии использования (тот же сквозной поиск в чате просят регулярно). Борьба с глупыми багами ведётся, вроде бы, но лично я уже две недели чувствую себя не работником школы, а бесплатным бета-тестером. Страшно представить, что сейчас происходит в школах, где нет своих учителей информатики и техников-программистов (а в небольших школах очень часто учителя — совместители, приезжающие раз в неделю; сам так работал 3 года).

А самый главный вопрос — зачем? Зачем внедрять в регионе непонятную информационную систему, если федеральные ведомства упорно продвигают ФГИС «Моя школа» (вот новость, например), и рано или поздно все школы загонят туда? Чую я, что через год-два нас ждёт новый переезд. И снова борьба с багами, разборки с интерфейсом и трата сил, времени и здоровья…

© Habrahabr.ru