26.09.2026 Технический разбор RU

Открытая замена «КиберДиплома»: архитектура, которую задала Windows 7

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

Никита Конкин

Проект Репозиторий Демо
Языковые версии: RU EN

Предыдущие разборы касались текущего сервиса — связки из трёх сервисов, которая превращает деканатские ведомости в XML для «КиберДиплома». Этот — о том, что может прийти ей на смену. Параллельно ревизии подготовлен черновик архитектуры открытой системы для подготовки, проверки, печати и учёта дипломов и приложений к ним.

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

Зачем замена

Сейчас процесс устроен так. Ведомости и учебный план обрабатываются текущим сервисом в сводную таблицу и XML формата 3.5.1. XML импортируется в «КиберДиплом», там вручную добавляются регистрационный номер, дата выдачи, бланк и данные организации, после чего документы печатаются по шаблонам FastReport на бланках типографии.

Недостатков у этой схемы три. «КиберДиплом» — закрытая платная программа с USB-ключом и зашифрованной базой. Между системами остаются ручные шаги, а на стыках возникают ошибки, которые не ловит ни одна из сторон. И наконец — неудобное признание — сам текущий сервис из трёх рантаймов в Docker на рабочие места вуза не устанавливается.

Требования, которые отсеивают технологии

Черновик начинается с десяти требований, и три из них определяют почти всё остальное:

  • одна сборка, два режима — одиночный компьютер без сети и сервер вуза для многих пользователей;
  • платформы — Windows 7 и 8.1, в том числе 32-битные, Windows 10 и 11, Astra Linux, РЕД ОС и Альт;
  • без Docker и без предустановленных рантаймов — прямое следствие предыдущего пункта.

Причина в том, что в вузах одновременно работают компьютеры всех этих поколений. На старых и 32-битных Windows Docker не работает, а в закрытых контурах Astra Linux при замкнутой программной среде (ЗПС) запускаются только подписанные исполняемые файлы.

Среди остальных требований два заслуживают отдельного упоминания. Первое прямо вытекает из ревизии: ни одна запись не теряется молча, каждое расхождение показывается пользователю. Второе — персональные данные хранятся только в инсталляции вуза, а в открытом репозитории допустимы лишь синтетические данные.

Один файл, два режима

Ответ на первое требование — модульный монолит со встроенным веб-сервером и интерфейсом в браузере. В настольном режиме сервер слушает 127.0.0.1, данные лежат в файле SQLite, при запуске открывается браузер. В серверном режиме тот же исполняемый файл слушает сеть, данные хранятся в PostgreSQL, включаются учётные записи и роли.

Различие между компьютером на кафедре и сервером вуза сведено, таким образом, к адресу прослушивания и СУБД. Установка — распаковать и запустить; обновление — заменить один файл; резервная копия в настольном режиме — копия файла базы.

Модули — справочники, учебные планы, импорт, картотека, проверка, печать, экспорт, аудит и доступ — разделены явными границами и не обращаются к таблицам друг друга напрямую. Интерфейс собирается на сервере с минимумом JavaScript и должен работать в Chrome 109 и Firefox ESR 115 — последних версиях этих браузеров для Windows 7.

У двух СУБД есть цена: код ограничен подмножеством SQL, одинаково работающим в обеих, схема меняется только нумерованными миграциями, а тесты слоя данных прогоняются дважды. Отвергнуты три альтернативы: микросервисы в Docker (как сейчас), нативное настольное приложение, которому серверный режим не достаётся бесплатно, и чисто серверный веб, не покрывающий компьютер без сети.

Импорт, в котором нельзя потерять запись

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

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

Молчаливая потеря записи становится невозможной по построению. Цена — на один шаг больше: отчёт нужно просмотреть.

Здесь же сделан вывод о текущем парсере. Он держит данные в строке индекса вида «Название_тип_з.е.», сопоставляет подстроками и меняет индекс таблицы на ходу — отсюда и дефект с многосеместровыми дисциплинами. Такой код решено не рефакторить, а один раз переписать как модуль импорта новой системы: с явной моделью строки ведомости (дисциплина, семестр, часы, форма контроля, оценка), сложением семестров и сопоставлением с учебным планом. Существующие тесты при этом становятся спецификацией поведения.

Печать в миллиметрах

Дипломы печатаются на защищённых бланках типографий: титул — лист A4 альбомной ориентации, приложение — четыре страницы A3. Шаблоны «КиберДиплома» — файлы FastReport 4 (.fr3, сжатый XML) с координатами полей в пикселях при 96 dpi. Принтеры сдвигают печать каждый по-своему, а браузеры могут масштабировать PDF.

Решение складывается из нескольких частей:

  • собственный формат шаблона, где страницы и поля заданы в миллиметрах — координаты, шрифт, выравнивание, перенос, ужатие и перетекание таблицы дисциплин между страницами приложения;
  • выход — PDF в масштабе 1:1 со встроенными шрифтами; изображение бланка используется только в предпросмотре;
  • калибровка на каждый принтер — смещения dx и dy в миллиметрах, подобранные по тестовому листу;
  • импорт существующих шаблонов .fr3 с пересчётом координат: 1 мм = 3,7795 пикселя при 96 dpi.

Шрифт по умолчанию — PT Astra Serif: открытая лицензия и метрическая совместимость с Times New Roman. Шаблоны типографий в открытый репозиторий не попадают, пока не проверены их лицензии, — каждый вуз импортирует свои. Целевая точность — отклонение текста от поля бланка не более 0,5 мм после калибровки.

Черновик честно называет самую сложную часть MVP: собственный движок раскладки текста. Отвергнутые варианты показывают, почему без него не обойтись: печать HTML из браузера зависит от браузера и его настроек, FastReport — проприетарный компонент под Windows, а прямая печать в драйвер принтера требует своей реализации для каждой ОС и не работает в серверном режиме.

Совместимость без взлома

На переходный период вуз продолжает печатать в «КиберДипломе». Его база и карточки — зашифрованный контейнер закрытого формата. Открытый путь обмена один: XML «ФайлОбменаКиберДиплом» 3.5.1, который программа импортирует и который текущий сервис уже умеет генерировать.

Поэтому экспорт в XML 3.5.1 входит в MVP, импорт того же XML идёт через промежуточную зону, а закрытые файлы не разбираются и не расшифровываются. Решение снимает юридические риски, связанные с обходом защиты чужого формата, но имеет понятную цену: историю выдачи из «КиберДиплома» автоматически не перенести. Отвергнута и автоматизация интерфейса программы, применявшаяся в 2025 году: она хрупка и зависит от версии программы и разрешения экрана.

Стек: Java 11

Три требования отсеивают большинство кандидатов ещё до сравнения удобства. Нужен инструмент, который получает обновления безопасности и собирает под Windows 7 x86; работает на Astra Linux 1.7 со старой glibc 2.28 и, возможно, с ЗПС; не требует установки рантайма и при этом читает .xls и .xlsx и формирует PDF с точностью до миллиметра.

Сразу отклонены современный .NET (не работает на Windows 7), Node.js и Electron (для Windows 7 давно без обновлений) и Rust (Windows 7 осталась лишь в целях третьего уровня поддержки). Всерьёз сравнивались четыре варианта:

  • Python 3.8 с PyInstaller — прямое переиспользование кода, но это последняя версия с Windows 7, и её поддержка закончилась в октябре 2024 года; сборка с pandas превышает 100 МБ, а однофайловые сборки часто не нравятся антивирусам;
  • Go — один статический файл без зависимости от glibc, лучший вариант для Linux; однако официально Windows 7 поддерживает только Go 1.20, а дальше — форк сообщества с одним сопровождающим, и чтение .xls в Go слабое;
  • Free Pascal / Lazarus — отличная переносимость, но узкое сообщество и нет опыта в команде;
  • Java 11 LTS с рантаймом в поставке — сборка Liberica JDK 11 официально поддерживает Windows 7 32 и 64 бит и продолжает получать обновления, для российских Linux есть сертифицированная отечественная сборка, Apache POI — лучшая библиотека для обоих форматов Excel, а шлюз текущего сервиса уже написан на Java.

Выбор сделан в пользу Java 11: это единственный кандидат, у которого все обязательные требования закрываются компонентами с обновлениями безопасности. Состав — урезанный через jlink рантайм, встроенный веб-сервер, HTML на сервере с htmx, JDBC и миграции Flyway, Apache POI, OpenPDF или PDFBox для печати по координатам.

Цена записана тут же. Поставка и потребление памяти (ожидается 150–250 МБ) больше, чем у Go. У Java 11 есть «потолок»: новые ветки части библиотек требуют Java 17, поэтому их версии фиксируются. Если прототип покажет, что рантайм 17 работает на 32-битной Windows 7, базой станет Java 17. Запасной вариант — Go на форке для Windows 7, если Java не уложится в память и время запуска.

Что ещё не проверено

Черновик остаётся черновиком. Шесть из семи архитектурных решений имеют статус «предложено»; выбор стека принят владельцем проекта, но с оговоркой — до проверки прототипом.

Прототип задуман одинаковым для всех платформ: HTTP-сервер со страницей, запись и чтение SQLite, чтение .xls и .xlsx в макете деканатских ведомостей, PDF с полем в заданных миллиметрах и кириллическим шрифтом, печать тестового листа. Критерии тоже заданы заранее: запуск без установки чего-либо, старт быстрее пяти секунд, память меньше 300 МБ, отклонение на отпечатке не больше 0,5 мм. Стенды — 32-битная Windows 7 с 2 ГБ памяти, Astra Linux 1.7 с ЗПС и без неё, Windows 11. Эти проверки пока отложены, и до их прохождения выбор стека — обоснованная гипотеза с названным запасным вариантом.

Переход тоже расписан поэтапно. Текущий сервис продолжает работать. MVP новой системы — справочники, учебные планы, импорт, картотека, проверка и экспорт XML, — пока печать остаётся за «КиберДипломом». Затем печать: один выпуск печатается параллельно в обеих системах, и отпечатки сравниваются. После MVP — выгрузка в ФИС ФРДО и шаблоны других типографий.

Выводы

  1. Требования к платформам сильнее предпочтений: Windows 7 x86 и замкнутая среда Astra Linux отсеяли почти все современные стеки ещё до сравнения их удобства.
  2. Одна сборка на два режима дешевле двух продуктов: различие между компьютером без сети и сервером вуза сведено к адресу прослушивания и СУБД.
  3. Молчаливую потерю записи надёжнее исключить устройством процесса, чем проверками поверх него: промежуточная зона не даёт подтвердить импорт, пока есть расхождения.
  4. Точность печати — свойство всей цепочки, а не шаблона: миллиметры в шаблоне, PDF в масштабе 1:1, калибровка принтера и печать без масштабирования.
  5. Выбор стека до прототипа — гипотеза. Честнее записать критерии проверки и запасной вариант, чем объявить решение окончательным.

Доступность

Черновик архитектуры и семь записей архитектурных решений находятся в каталоге docs/architecture/ репозитория; проект открыт под лицензией MIT.

Теги

программирование архитектура java astra-linux печать

Другие обновления по проекту

25.09.2026 Инженерное обновление Сервис автоматизации приложений к дипломам

Сервис дипломов: 27 дефектов после ревизии и почему худшие из них молчали

Ревизия кода и сверка с реальными входными данными дали 27 дефектов. Худший класс — молчаливые: студент выпадал из XML без ошибки. Разбор того, как тихие пропуски стали явными о...

27.08.2026 Инженерное обновление Сервис автоматизации приложений к дипломам

Ошибка вместо «500»: как сервис научился объяснять, что пошло не так

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