Jaxxel

Jaxxel

На Пикабу
4 рейтинг 1 подписчик 0 подписок 2 поста 0 в горячем
Награды:
5 лет на Пикабу
3

Импортозамещение на минималках (ч. 2) домашки, онлайн-доска и боль WebSocket

В прошлой части я показывал самый первый MVP кабинета учителя: ученики, предметы, оценки, домашние задания и программы.
В этой части уже расскажу про то, где началась настоящая разработка, а не просто “нарисовать форму и сохранить данные в таблицу”.

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

Первой серьёзной задачей стали домашние задания.

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

Я решил, что документы учителя должны сохраняться не хаотично, а по понятной структуре. Например:
id_пользователя / формат документа / номер задания

Так проще искать файлы, чистить мусор и не превращать сервер в свалку из file_final_final_2.pdf.

Ранний вариант домашек / ошибки с PDF

Ранний вариант домашек / ошибки с PDF

На этом этапе часто ломалось всё подряд. Особенно работа с PDF и изображениями.
То путь собрался неправильно, то файл сохранился не туда, то код уже третий раз “почти исправлен”, но в итоге ломает соседнюю часть.

После нескольких таких кругов стало понятно: структуру хранения нужно переделывать полностью, а не чинить точечно.

Следующей большой задачей стала онлайн-доска.

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

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

Первая онлайн-доска

Первая онлайн-доска

Первая версия была максимально базовой. Она вроде бы работала, но постоянно вылезали проблемы:
ластик стирал не всегда, линии могли вести себя странно, изображения не добавлялись, сохранение доски иногда отваливалось.

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

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

Позже доска стала уже больше похожа на мини-тетрадь..

Текущая онлайн-доска

Текущая онлайн-доска

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

Отдельная история — звук и видео.
Чтобы это работало стабильнее, пришлось поднимать свой TURN-сервер. До этого связь могла зависеть от сети пользователя: у одного всё хорошо, у другого камера не подключается, у третьего звук есть, но видео нет.

Сейчас доска умеет:

  • рисовать;

  • добавлять текст;

  • работать с фигурами;

  • стирать;

  • добавлять изображения;

  • переключать листы;

  • показывать презентации;

  • подключать аудио/видео;

  • сохранять состояние.

И да, после этого я окончательно понял, почему “простая онлайн-доска” редко бывает простой.


Параллельно развивались домашние задания и библиотека материалов.

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

Просмотр домашнего задания

Просмотр домашнего задания

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

Тут же появилась библиотека.

Библиотека / быстрые действия

Библиотека / быстрые действия

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

На этом этапе стало понятно, что “домашнее задание” — это уже не одно поле с текстом. Это отдельный конструктор.

Создание домашнего задания

Создание домашнего задания

Форма создания задания тоже начала разрастаться.
Можно выбрать, кому выдать задание: одному ученику или группе.
Можно выбрать тип: текст, PDF, WordWall, готовое задание.
Можно привязать предмет, название, описание, срок сдачи.

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

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

Следующий этап — программы обучения.

Идея была такая: если учитель ведёт ученика не разово, а по курсу, то можно заранее собрать программу.
Внутри программы есть предметы, расписание, даты начала и окончания, длительность уроков и будущие домашние задания.

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

На словах красиво. В коде — очередная пачка зависимостей.

Программа связана с предметами.
Предметы связаны с уроками.
Уроки связаны с расписанием.
Расписание связано с домашними заданиями.
Домашние задания связаны с учениками и группами.

И если где-то в этой цепочке ошибиться, потом начинаются весёлые вещи: задание ушло не туда, дата съехала, программа создалась, но уроки не подтянулись.

На этом этапе я понял главную вещь: образовательная платформа очень быстро перестаёт быть “сайтом”.

Сначала кажется, что нужны простые разделы:
ученики, оценки, домашки, расписание.

А потом каждый раздел начинает тянуть за собой ещё пять сущностей и десять сценариев.
Домашка требует библиотеку.
Библиотека требует хранение файлов.
Онлайн-доска требует WebSocket, сохранение состояния и видео.
Программы требуют расписание и автоматизацию.
А всё вместе требует нормальной архитектуры, иначе проект начинает разваливаться под собственным весом.

Самая большая сложность была не в том, чтобы “сделать кнопку”.
Сложность была в том, чтобы все эти кнопки не противоречили друг другу.

В итоге вторая версия стала переходным этапом: уже не сырой MVP, но ещё и не финальный продукт.
Зато именно здесь стало понятно, какие части действительно нужны, какие нужно упрощать, а какие придётся переписывать полностью.

Дальше началась самая болезненная, но самая полезная часть: привести всё это в нормальный вид, убрать лишнее, переписать слабые места и собрать из набора функций цельную платформу.

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

Показать полностью 8

Импортозамещение на минималках (ч. 1): как сайт-визитка для учителя превратился в комбайн

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

В итоге я предложил сделать не просто страницу “обо мне”, а небольшой личный кабинет учителя, где можно вести учебный процесс в одном месте.

Начиналось всё максимально просто. Стек был сырой, первая версия собиралась на MySQL, а основная боль началась не с дизайна, а с базы данных: ученики, предметы, оценки, домашки, программы - всё быстро обрастает связями.

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

Главная: статистика и быстрые действия. Тогда это было скорее меню с карточками, чем полноценный кабинет.

Главная: статистика и быстрые действия. Тогда это было скорее меню с карточками, чем полноценный кабинет.

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

Раздел учеников: список, поиск, статусы, добавление и редактирование.Уже здесь стало понятно, что форма не должна быть огромной “простынёй”. Учителю нужно быстро добавить ученика и пойти дальше, а не заполнять анкету как в поликлинике.

Раздел учеников: список, поиск, статусы, добавление и редактирование.Уже здесь стало понятно, что форма не должна быть огромной “простынёй”. Учителю нужно быстро добавить ученика и пойти дальше, а не заполнять анкету как в поликлинике.

Профиль ученика

Профиль ученика

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

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

Предметы: основа для оценок, домашних заданий и программ.

Предметы: основа для оценок, домашних заданий и программ.

Оценки - журнал оценок

Оценки - журнал оценок

Добавление оценки и последние оценки ученика.

Добавление оценки и последние оценки ученика.

Журнал оценок - один из первых разделов, где стало понятно, что интерфейс должен быть не красивым сам по себе, а быстрым.
Учитель не должен делать 10 кликов ради одной оценки..

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

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

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

Программы обучения стали следующим уровнем сложности.
Если домашка - это одно действие, то программа - это уже цепочка: уроки, порядок, материалы, задания, прогресс.
На этом месте стало понятно, почему многие “простые образовательные сервисы” со временем превращаются в тяжёлые комбайны. Предметная область сама тянет за собой много логики.

На этом этапе я впервые нормально увидел масштаб задачи.
Снаружи кажется: “ну что там, ученики, оценки, домашки — обычные таблицы”.
А внутри быстро появляется куча зависимостей: ученик связан с предметами, оценки - с датами и комментариями, домашки - со сроками и статусами, программы - с уроками и материалами.

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

Поэтому этот MVP я сейчас воспринимаю не как “первую версию продукта”, а как черновик, который помог понять структуру: какие сущности нужны, где появляются связи, какие сценарии повторяются каждый день, а какие можно спрятать поглубже.

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

Так закончился первый этап: сайт-визитка окончательно умер, а вместо него появился сырой, местами страшный, но уже рабочий кабинет учителя

Показать полностью 9
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества