Спасаем рекламные бюджеты: какой канал холодных продаж подойдет именно вам?

Для «холодных» продаж чаще всего используют 3 инструмента: email-рассылку, WhatsApp-маркетинг и холодные звонки по телефону. Но какой из них подходит именно вам? Команда APIsender оценила каждый канал по 5 критериям, чтобы вы смогли максимально эффективно использовать рекламный бюджет для запуска рассылки. Читайте и делайте правильный выбор.

Вкратце об инструментах: email, WhatsApp и звонки

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

WhatsApp на 2023 год занимает 1-е место среди соцсетей по количеству пользователей. 

По данным CNews, в январе 2023 года в России WhatsApp использовали 76 млн. человек. Представьте потенциал рассылки с помощью этого канала. Тот же Telegram расположился на втором месте ТОПа, но  его аудитория гораздо меньше — 48,8 млн человек. 

Холодные звонки постепенно отходят в прошлое — мы все реже поднимаем трубку, если видим на экране незнакомый номер. Борьбе со спам-звонками способствуют и приложения, такие как «Яндекс. Определитель номера», «Truecaller» или «GetContact». В последние годы стали популярны роботы автодозвона — они позволяют сэкономить время сотрудникам и совершают звонки гораздо продуктивнее менеджеров (в плане скорости и количества).

Отчасти данный метод считается незаконным. С одной стороны, абоненты, попавшие в лист обзвона, сами дали свое согласие, получив услугу и не заметив маленькую галочку. С другой, из-за огромного количества жалоб граждан, ФАС вовсю ополчилась против телефонных спамеров. Но холодные звонки как использовали, так и будут использовать в ближайшие годы.

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

Критерий 1: Скорость и процент отклика

Email-рассылки

Согласно исследованиям Mindbox, открываемость писем варьируется от 9 до 23% (в зависимости от отрасли), а кликабельность по ссылкам — 1-3%. Так, отправив 100 000 сообщений, вы получите 2-3 тысячи переходов по вложенной ссылке.

Открываемость писем в разных сферах бизнеса согласно Cossa.ru.
Открываемость писем в разных сферах бизнеса согласно Cossa.ru.

WhatsApp-рассылки 

Открываемость сообщений в WhatsApp  превышает 91 % (по данным анализа 6 млн рассылок). Это значит, что 9 из 10 пользователей просматривают сообщения. Отклик в  среднем составляет 35%. 

Что касается скорости, то как и с почтовыми рассылками на открытие писем в WhatsApp уходит нескольких минут. Показатели эффективности почти не зависят от объёма рассылок, времени отправки сообщений, отрасли и других факторов.

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

Холодные звонки

По данным IT World, показатель конверсии при роботизированном обзвоне составляет около 4%. Конверсия в нашем случае — готовность абонента продолжить разговор (который продлился более минуты). Следующий этап воронки звонка — согласие на обсуждение условий сделки. Его дают 25–30% абонентов. Итоговая конверсия на промежуточное действие (до конечной сделки) составит примерно 1%.

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

Критерий 2: Способ подачи информации

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

Email-рассылка 

В email есть возможность верстать графически навороченные письма или написать целый лонгрид. Важный нюанс: успех рассылки во многом зависит от качества текста и дизайна. Так что не экономьте на специалистах.

Пример правильно свёрстанного письма по мнению Postium.ru
Пример правильно свёрстанного письма по мнению Postium.ru

WhatsApp-рассылки 

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

Слева представлен неудачный вариант визуального оформления сообщения, справа — удачный
Слева представлен неудачный вариант визуального оформления сообщения, справа — удачный

Размер письма тоже имеет значение. Длинные тексты — табу, здесь никто не будет тратить время на «много букв». Сообщение должно быть ёмким и конкретным. Оптимальный размер для WhatsApp — это один экран, то есть не более 700 символов.

До момента прочтения текста получателем оно будет в ТОПе списка чатов. Значит, привлечёт к себе внимание с большей вероятностью, чем, например, email-письмо, попавшее в папку «Спам».

Холодные звонки

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

Критерий 3: Обратная связь 

Email-рассылка

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

В электронных письмах часто можно встретить такую фразу
В электронных письмах часто можно встретить такую фразу

Что можно сделать? Вставьте кнопку перехода на сайт, где есть форма обратной связи, или настроить функцию «спросить в мессенджере».

Вариант вставки кнопки перехода
Вариант вставки кнопки перехода

WhatsApp-рассылки

Рассылка в WhatsApp позволяет продолжить общение, подогреть клиента и закрыть на сделку. Например, настроить чат-бота для ответа на частые вопросы и продажи. Ещё вариант: встроить в текст кнопку-меню (оно может включать до 10 пунктов), чтобы пользователям не пришлось самостоятельно набирать ответ. Как известно, чем проще действие, тем выше конверсия.

Что даёт кнопка-меню в WhatsApp:

●  Увеличивает конверсию в целевое действие в 1,5-2 раза: проще нажать на кнопку, чем набирать текст вручную;

●   Кликабельность (CTR): в районе 40%;

●  Элемент геймификации — все любят жать на кнопки и получать результат.

Холодные звонки

Обзвон по базе не предполагает обратной связи. Даже если клиент перезвонит, то попадёт на сотрудника колл-центра, который не связан с компанией напрямую.

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

По данным проекта «Пульс», роботы показывают конверсию на 40% ниже, чем живые менеджеры, но при этом роботизированный обзвон дешевле. Таким образом, «Автообзвон» при одинаковом бюджете приводит в 18 раз больше клиентов, чем менеджер. Хотя тут всё зависит от зарплаты сотрудника… 

Критерий 4: Пригодность для B2B и B2C сегментов

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

Клиент b2c: Увидел рекламу → Захотел купить продукт → Сформулировал проблему → Посмотрел обзоры, почитал отзывы, сравнил цены →  Купил или заказал

Клиент b2b:  Сформулировал проблему → Изучил решения → Нашёл продукт → Проанализировал варианты нескольких компаний → Оценил свой бюджет → Купил или заказал

Email-рассылка 

Email одинаково хорошо подходит для обоих сегментов. Возможности электронных писем позволяют создать больше контента, чтобы рассказать о преимуществах вашего товара/услуги. Однако открываемость и конверсия оставляют желать лучшего.

С b2c всё проще: прочитал интересное предложение в письме, нажал на ссылку, если всё устроило — купил. Здесь есть смысл сконцентрироваться на визуальном оформлении, чтобы продавать не только словами, но и образами.

К слову, по данным Data & Marketing Association, разница между открываемостью (Open Rate) у B2B и B2C писем относительно небольшая: в рассылках B2C — 33,4%, а в B2B — 28.8%.

Open Rate в рассылках B2C и B2B сегментов согласно HubSpot
Open Rate в рассылках B2C и B2B сегментов согласно HubSpot

WhatsApp-рассылки

Современному человеку нравится общаться в мессенджерах, там он проводит большую часть своего времени. Поэтому рассылки в соцсетях используют преимущественно компании в b2c-сегменте. Грамотная рассылка, интегрированная в CRM, способна стать началом долгого контакта с клиентом.

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

Холодные звонки

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

Критерий 5: Стоимость рассылки

Email-рассылки

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

Стоимость у сервисов разная, начинается от 560 руб/мес и зависит от:

  • количества контактов;

  • набора инструментов;

  • сегментации и персонализации базы.

WhatsApp-рассылки

Если у вас в базе до 1000 контактов, то цена рассылки составит около 2500 руб/мес (при оплате за год). Если планируете отправлять до 10 000 сообщений в месяц (300 лидов в день), рассылка в этом мессенджере обойдётся вам в 10 000 руб/мес (при оплате за год).

Затраты будут выше, если:

  • у вас большой поток лидов;

  • вы работаете на входящем трафике;

  • вы редко пользуетесь шаблонными сообщениями.

Холодные звонки

Стоимость работы колл-центра или автодозвона индивидуальна и зависит от многих параметров. Ориентировочные расценки таковы: 

  • запуск проекта — от 5 000 руб/мес; 

  • автообзвон — от 6 руб/мин;

  • презентация по телефону — от 8 руб/мин.

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

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

Три канала продаж: сравнительная таблица
Три канала продаж: сравнительная таблица

А выбор будет зависеть только от ваших приоритетов. Работаете в b2b-сегменте? Выбирайте email. Важен процент отклика и конверсия? Обратите внимание на WhatsApp. Хотите охватить большую аудиторию в кратчайшие сроки — воспользуйтесь услугами колл-центра Сформулировав свои цели и задачи, вы сможете выбрать оптимальный для вас вариант (или варианты).


ссылка на оригинал статьи https://habr.com/ru/post/719586/

[Проект вуза] Психоаналитический коучинг, который работает

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

Да, сейчас многие специалисты берут высокую плату за консультации, но существует и другой вариант получить квалифицированную помощь. Какой? В рамках нашего проекта «Доступный коучинг» слушатели и выпускники магистерской программы НИУ ВШЭ «Психоанализ и психоаналитическое бизнес-консультирование» помогут справиться с профессиональными сложностями. Наша цель — помочь вам найти выход из сложной ситуации и понять, куда двигаться дальше.

О проекте

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

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

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

Эффективность сессий

Что дают три часа бесплатных консультаций длительностью 50 минут каждая? Результат зависит от каждой конкретной ситуации. 

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

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

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

Процесс подбора специалиста

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

Форматы возможной работы

Каждый может выбрать удобный для себя формат: офлайн или онлайн. 

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

Но если вы из Москвы и хотели бы присутствовать на очных сессиях, то наши кабинеты в зданиях «Вышки» на Мясницкой доступны и открыты.

Полная конфиденциальность — главное правило проекта

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

Проект «Доступный коучинг» действительно помогает

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

Рассказала Марина Фролова, руководитель проекта «Доступный коучинг» кафедры «Психоанализ и бизнес-консультирование» НИУ ВШЭ.


ссылка на оригинал статьи https://habr.com/ru/post/719588/

Как мы упростили процесс трудоустройства в Fix Price с помощью создания лендинга и рассылки в мессенджерах

Привет, Хабр! Это снова Вадим Райский. Сегодня поговорим о том, как мы в Fix Price запустили специальную экосистему для найма сотрудников на работу, что позволило значительно упростить и ускорить процесс трудоустройства. Далее я подробно расскажу о каждом инструменте экосистемы и, конечно же, о технических моментах реализации.

Создание лендинга

Раньше после получения оффера будущий сотрудник должен был принести в офис,  магазин или склад (если речь идет о линейном персонале) свои документы (паспорт, СНИЛС, ИНН, трудовую книжку). Предоставленные данные сотрудники HR-отдела переносили в договор и другие внутренние документы, необходимые для оформления в штат. Этот процесс занимал определенное время, обычно около 1-3 дней.

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

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

  • Будущий сотрудник вносит в форму необходимые данные, прикрепляет сканы или фото требуемых документов. Если какие-то поля не заполнены, система не даст завершить оформление.

  • После успешного заполнения форма отправляется на проверку менеджеру по персоналу.

  • Система создает кадровую документацию принятого сотрудника в корпоративных базах данных и приложениях (например, в программе «БОСС-Кадровик»).

Техническая реализация проекта по лендингу

Для проверки корректности введенных данных мы используем DaData. Она безопасна и не имеет проблем с интеграцией. Кроме того, функционал сервиса нас полностью устроил: есть проверка ФИО, паспортных данных, подсказки для пользователей, которые помогают людям вводить данные быстрее.

Вопрос с безопасностью данных также решен. Она обеспечивается за счет принятых стандартов разработки и с помощью встроенных в процесс разработки инструментов. Добавлю, что все данные хранятся на стороне SAP. Кроме того, лендинги имеют ограниченный жизненный цикл: как только создаются профили в нужных базах (того же «БОСС-Кадровика»), соответствующая страничка удаляется. Это значительно затрудняет подбор ссылок, но даже при успешном подборе такой ссылки злоумышленник увидит только пустую форму.

Шаг второй: как выстроено взаимодействие с кандидатами 

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

Каких целей нам позволила достичь экосистема?

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

  • Сократили время оформления новых сотрудников с 2-3 дней до 20-30 минут (при условии, что все нужные документы у человека под рукой). Раньше оформление могло затянуться из-за того, что соискатель, к примеру, принес неполный комплект документов. Теперь оформлением можно заниматься дома, а значит, с легкостью найти все необходимые документы, сделать фото или скан.

  • Минимизировали отток кандидатов. При долгом оформлении человек мог передумать и устроиться на работу в другое место. Существенное сокращение времени оформления позволило свести показатель оттока фактически к нулю.

  • Создали единый профиль кандидата. До внедрения лендинга нам было трудно отслеживать путь кандидатов, который они проходили при трудоустройстве. Теперь на основе лендинга формируется единый профиль со всей необходимой информацией о работнике, начиная с момента его отклика на вакансию. У компании появилась возможность отслеживать полный путь сотрудника и делать выводы об эффективности затрат на рекламу на различных площадках вакансий (например, HeadHunter, Avito).

А благодаря рассылке в мессенджеры мы теперь можем:

  • рассылать сообщения кандидатам при трудоустройстве для заполнения формы-лендинга;

  • рассылать персонализированные сообщения бывшим потенциальным кандидатам в случае, если открывается аналогичная вакансия в другом магазине.

В настоящее время к процессу оформления через лендинг подключены все российские магазины Fix Price, однако пока у них сохраняется альтернативная возможность использования старого метода трудоустройства и часть из них так и делает. К лету самостоятельное оформление будет доступно всему линейному персоналу в России, включая распределительные центры, а также сотрудникам центрального офиса в Москве.

Что в планах

В настоящий момент проверку актуальности вводимых работниками данных заведующие и менеджеры по персоналу частично выполняют вручную. Поэтому главная задача на ближайшие месяцы — автоматизация верификации данных за счет распознавания изображений и обращений к открытым источникам различных баз данных (МВД, ФНС, Пенсионного фонда).

Также в разработке процесс маркировки данных, чтобы проверяющий сотрудник сразу понимал, с какими конкретно сведениями возникли проблемы при автоматической проверке. А еще мы работаем над внедрением алгоритмов распознавания рукописного текста, который встречается в некоторых документах. Кроме того, мы планируем модернизировать UX-дизайн сайта.

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


ссылка на оригинал статьи https://habr.com/ru/company/fix_price/blog/719590/

C++, параллелизм и введение в автоматное программирование в SimInTech

Поводом для написания статьи послужило не очень приятное для меня событие: модератор Хабра убрал теги – «С++» и «Параллельное программирование» из моей крайней статьи [1]. Этому предшествовало сообщение пользователя, который по его словам не заметил в статье ни С++, ни параллелизма и поспешил об этом известить весь свет. На самом деле он, скорее всего, просмотрел статью по диагонали и попросту «не врубился». Другим объяснить сей казус сложно. Я объяснил причины его заблуждения, но это не было принято во внимание. В ответ – тишина и, более того, пошли у него на поводу.

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

Но дело даже не в содержании постов. Если раньше управлять спорными постами доверялось автору, то теперь модератор решил взять на себя это право. Может, у нас месячник усиленной модерации? Но только в чем причины столь сильного недоверия автору? Ведь, модератор явно не очень вникал в суть проблемы и причины появления подобных постов. Логично было бы предоставить, как и ранее, автору решать вопросы, связанные с содержанием его же статей. Последнее сообщение, хотя и содержало критику, но в целом не нарушало правила сообщества. Хотя, обобщать на всю Бауманку, конечно, не стоило бы.

Однако, оставим пересуды в стороне, а поговорим про С++,  параллелизм и об автоматном программировании. А тут без ВКПа и, как ни странно, без SimInTech не обойтись. Так уж сложилось, что есть, что сказать на обозначенные темы и для нее.

1. С++ и ВКПа

Автором только  на Хабре написано более двух десятков статьей на тему ВКПа. И если не в каждой, то в большинстве из них подчеркивается, что ее основой является С++. Говоря ВКПа, мы должны подразумевать С++ ровно также, как мы это делаем в контексте упоминания тех же Visual Studio или Qt. Для ВКПа С++ не просто язык, на котором она разработана, но и ее внутренний язык программирования (ЯП). И если, например, MATLAB  или SimInTech имеют свои внутренние ЯП, то здесь им является именно С++.

Иметь С++ в двух ипостасях, языка проектирования самой среды и ее внутреннего ЯП,  весьма удобно, т.к. не требует специализированного языка программирования среды. Создание последнего — сама по себе задача весьма сложная и трудоемкая.  В ВКПа же есть все то, что есть или будет в С++. На текущий момент сюда подключаются также возможности библиотеки Qt и ее средств проектирования (до этого – Visual Studio).

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

Активные автоматные объекты качественно расширяют С++. Могу ошибаться, но, думаю, пока в стандартах С++ на эту тему нет и речи. В него внедрили другое: так называемое, многопоточное параллельное программирование, корутины и им подобное.  Все это по большей части вызывает только большое сожаление, т.к. добавленные «языковые конструкции» не отвечают теории и только усложняют язык, создавая ему проблемы.

Если говорить о надстройке над С++, то в ВКПа он был расширен диалоговыми средствами реализации простых автоматных алгоритмов. Именно такая ситуация была показана в рамках «забаненной» статьи. Там была создана модель управления нагревателем без привлечения мощи языка С++. Получилось проще, быстрее  и под силу тем, кто не знает С++, но должен хоть немного понимать в автоматах.  Причем речь идет не о диаграммах Харелла, а о более простых и строгих – классических автоматах.

Покажем разницу двух подходов, приведя реализацию блоков проекта «Нагреватель» из упомянутой выше статьи на С++. Первый листинг (листинг. 1) – автомат управления, второй – простейший переключатель (листинг 2).  По технологии проектирования автоматов на С++ требуется внести  определенные дополнения в код их реализации, что не так уж сложно. Сюда, во-первых, входит создание необходимых ссылок на переменные среды и указателей на другие процессы, используя стандартный метод автоматного класса — FCreationOfLinksForVariables. Во-вторых, добавить в автомат петлю при начальном состоянии, нагруженную предикатом и действием (см. листинги). В процессе работы только после создания ссылок автомат выполняется переход в те или иные рабочие состояния автомата. Заметим, что эти же действия на уровне диалогов среды (см. применение диалога FAutomaton в [1]) реализуются средой автоматически. Потому-то автомат там и выглядит проще.

Листинг 1. Код блока управления нагревателем
#include "lfsaappl.h"  class FHeatingControl :     public LFsaAppl { public:     LFsaAppl* Create(CVarFSA *pCVF) { Q_UNUSED(pCVF)return new FHeatingControl(nameFsa, pCVarFsaLibrary); }     bool FCreationOfLinksForVariables();     FHeatingControl(string strNam, CVarFsaLibrary *pCVFL);     virtual ~FHeatingControl(void) { }     CVar    *pVarStrT;// имя переменной температуры     CVar    *pVarStrT_set;// имя переменной уставки температуры     CVar  *pVarCoolingDelay;   // время охлаждения     CVar    *pVarHeatingDelay;   // время нагрева protected:     int x1(); int x2(); int x12();     void y1(); void y2(); void y12();     CVar*pVarT;// температура воды     CVar*pVarT_set;// уставка температуры };  #include "stdafx.h" #include "FHeatingControl.h" static LArc TBL_HeatingControl[] = {     LArc("st","st","^x12","y12"),     LArc("st","off","x12","y2"),     LArc("on","off","^x2","y2"),     LArc("on","off","^x1","y2"),     LArc("off","on","x1^x2","y1"),     LArc() };  FHeatingControl::FHeatingControl(string strNam, CVarFsaLibrary *pCVFL):     LFsaAppl(TBL_HeatingControl, strNam, nullptr, pCVFL) { }  bool FHeatingControl::FCreationOfLinksForVariables() {      pVarCoolingDelay = CreateLocVar("dCoolingDelay", CLocVar::vtInteger, "cooling time");     pVarHeatingDelay = CreateLocVar("dHeatingDelay", CLocVar::vtInteger, "heating time");      pVarStrT = CreateLocVar("strNameT", CLocVar::vtString, "current temperature");     string str = pVarStrT->strGetDataSrc();     if (str != "") { pVarT = pTAppCore->GetAddressVar(pVarStrT->strGetDataSrc().c_str(), this); }      pVarStrT_set = CreateLocVar("strNameT_set", CLocVar::vtString, "temperature setpoint");     str = pVarStrT_set->strGetDataSrc();     if (str != "") { pVarT_set = pTAppCore->GetAddressVar(pVarStrT_set->strGetDataSrc().c_str(), this); }     return true; } // predicates int FHeatingControl::x1() { return pVarT->GetDataSrc() <= pVarT_set->GetDataSrc(); } int FHeatingControl::x2() { return FIsActiveParDelay(); } int FHeatingControl::x12() { return pVarT != nullptr && pVarT_set; } // action void FHeatingControl::y1() { FCreateParDelay(pVarCoolingDelay->GetDataSrc()); } void FHeatingControl::y2() { FCreateParDelay(pVarHeatingDelay->GetDataSrc()); } void FHeatingControl::y12() { FInit(); } 

Листинг 2. Код переключателя
#include "lfsaappl.h"  class FHeatingSwitch :     public LFsaAppl { public:     LFsaAppl* Create(CVarFSA *pCVF) { Q_UNUSED(pCVF)return new FHeatingSwitch(nameFsa, pCVarFsaLibrary); }     bool FCreationOfLinksForVariables();     FHeatingSwitch(string strNam, CVarFsaLibrary *pCVFL);     virtual ~FHeatingSwitch(void) { }     CVar    *pVarStrInput;// имя входной переменной     CVar    *pVarStrInput1;// имя входной переменной     CVar    *pVarStrInput2;// имя входной переменной     CVar    *pVarStrOutput;// имя выходной переменной protected:     int x1(); int x12();     void y1(); void y2(); void y12();     CVar    *pVarInput;// адрес входной переменной     CVar    *pVarInput1;// адрес входной переменной     CVar    *pVarInput2;// адрес входной переменной     CVar    *pVarOutput;// адрес выходной переменной };  #include "stdafx.h" #include "FHeatingSwith.h" static LArc TBL_HeatingSwitch[] = {     LArc("st","st","^x12", "y12"),     LArc("st","s1","x12","--"),     LArc("s1","s1","^x1","y2"),     LArc("s1","s1","x1", "y1"),     LArc() };  FHeatingSwitch::FHeatingSwitch(string strNam, CVarFsaLibrary *pCVFL):     LFsaAppl(TBL_HeatingSwitch, strNam, nullptr, pCVFL) { }  bool FHeatingSwitch::FCreationOfLinksForVariables() {      pVarStrInput = CreateLocVar("strNameInput", CLocVar::vtString, "input");     string str = pVarStrInput->strGetDataSrc();     if (str != "") { pVarInput = pTAppCore->GetAddressVar(pVarStrInput->strGetDataSrc().c_str(), this); }     pVarStrInput1 = CreateLocVar("strNameInput1", CLocVar::vtString, "input1");     str = pVarStrInput1->strGetDataSrc();     if (str != "") { pVarInput1 = pTAppCore->GetAddressVar(pVarStrInput1->strGetDataSrc().c_str(), this); }     pVarStrInput2 = CreateLocVar("strNameInput2", CLocVar::vtString, "input2");     str = pVarStrInput2->strGetDataSrc();     if (str != "") { pVarInput2 = pTAppCore->GetAddressVar(pVarStrInput2->strGetDataSrc().c_str(), this); }     pVarStrOutput = CreateLocVar("strNameOutput", CLocVar::vtString, "output");     str = pVarStrOutput->strGetDataSrc();     if (str != "") { pVarOutput = pTAppCore->GetAddressVar(pVarStrOutput->strGetDataSrc().c_str(), this); }     return true; } // predicates int FHeatingSwitch::x1() { return int(pVarInput->GetDataSrc()); } int FHeatingSwitch::x12() { return pVarInput != nullptr && pVarInput1 && pVarInput2 && pVarOutput; } // action void FHeatingSwitch::y1() { pVarOutput->SetDataSrc(nullptr, pVarInput1->GetDataSrc()); } void FHeatingSwitch::y2() { pVarOutput->SetDataSrc(nullptr, pVarInput2->GetDataSrc()); } void FHeatingSwitch::y12() { FInit(); } 

Код на С++ позволяет, создавать автоматы любой сложности (или, по-другому, активные объекты), которые легко превращаются в элементы библиотек.  Включенные в библиотеки подобные активные объекты можно многократно использовать в любом проекте среды ВКПа.

2. О параллелизме ВКПа

«Уж сколько раз твердили миру», что сеть автоматов — параллельная модель, в которой каждый автомат — параллельный процесс, синхронизация которых реализуется путем обмена информацией о состояниях (подробнее о параллелизме автоматов см. [3]). В автоматной сети фактически нет проблем, порождаемых типовым подходом к реализации параллелизма.

Если же мы вернемся к проекту нагревателя, то только прикладных, т.е. относящихся к самому проекту, параллельных автоматов пять. Это рассмотренные выше два автомата, еще два автомата управления индикацией и автомат-интегратор (см. также [1]). Необходимо еще учесть динамически порождаемые параллельные процессы задержек. С учетом диалогов управления средой в нашем проекте в общей сумме одномоментно крутится до двадцати параллельных автоматов. И после этого кто-то еще смеет может утверждать, что в проекте нет параллелизма!? Ну, а если нужно знать точное число параллельных процессов, то их отражает стандартный диалог автоматных пространств. Можно о них получить и более детальную информацию, открыв диалог автоматных переменных. Здесь отражается информация о библиотеке и ее элементе, от которого порожден процесс, и его имя, как процесса. Еще один параллельный диалог позволят управлять локальными переменными процесса. Это ли не в целом параллельное решение, заслуживающее соответствующего тега?

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

Сетевая автоматная модель — суть ВКПа. Не признавать ее параллелизм — это лишать человека права дышать, рыбе жить в воде, а птице летать. Ведь, не нужно уточнять, что человек дышит, рыба плавает, а птица летает, а потому нет нужды каждый раз долбить и долбить оговаривать, что ВКПа — это про параллелизм. Можно, правда, называть это «авторским взглядом», но это тот взгляд, который отражен во множестве статей автора и не только на Хабре. Нужны ли еще какие-то аргументы, чтобы отрицать параллелизм ВКПа?

На мой взгляд, если какие-то аргументы и понадобятся, то только в ситуациях, которые невозможно создать/описать в рамках алгоритмической параллельной модели среды ВКПа. И если вдруг (!) такое случится, то это будет крушением основ дискретной кибернетики, в которой автоматы составляют базу [4]. Формально, конечно,  подобное исключать нельзя. Допускаю даже,  что, может быть, это когда-либо и случится. Но это сродни тому, как пока нельзя доказать отсутствие/наличие Бога. Здесь все сходится к тому, что, как минимум, при жизни автора это не произойдет. Хотя, как знать… Может, где-то что-то уже есть и осталось только опубликовать?

3. Автоматы и SimInTech

Перейдем от общих слов к конкретным делам. И тут вспомним про SimInTech, представив свой вариант реализации автоматных процессов на примере его демонстрационного проекта «Нагреватель» [2]. В этот раз блоками приложения будут автоматные параллельные процессы, реализованные  по определенному шаблону на внутреннем ЯП среды.  Пример такого решения  приведен на рис. 1.

Рис. 1. Реализация проекта «Нагреватель» на автоматах
Рис. 1. Реализация проекта «Нагреватель» на автоматах

В нем созданы аналоги всех блоков исходного  решения в SimInTech (см. рис. 2, а подробнее в [2]). Можно было «упаковать» блоки в субмодели, как это сделано в исходной модели (а мы это еще сделаем), но пока все они будут открыты для оценки структуры и связей проекта.

Рис. 2. Исходный проект Нагреватель
Рис. 2. Исходный проект Нагреватель

Рассмотрение начнем с задержки, код которой приведен в листинге 3. Она стартует, когда ее вход (bStart) примет значение не равное нулю. Далее задержка измеряется в дискретных шагах проекта. При этом само ее значение задается в микросекундах — вход delay. На выход блока задержки выдается текущее значение числа шагов задержки – выход value и признак ее активности – выход State (0 — не активна, 1 – активна).

Листинг 3. Код блока «Задержка»

Замечание 1. Чтобы задержка отработала верно, необходимо не только установить значение входа, но до ее истечения его сбросить. В противном случае задержка будет запущена повторно.

Листинг 4. Код блока «Управление»

На листинге 4 представлен код контроллера нагревателя (на рис. 1 – блок «Управление»). Здесь сразу же, т.е. на первом переходе, запускается задержка (40 сек). Для этого нужно установить выход out40 и затем, перейдя в состояние 1 (состояние отключения нагревателя), дождавшись инициации задержки, сбросить тот же сигнал out40. Когда интервал задержки истечет, а температура воды будет меньше заданной, переходим в состояние включения нагревателя – 2, выдав при этом сигнал запуска задержки 20 сек – выход out20. Затем, аналогично состоянию 1 сбрасываем сигнал запуска задержки и ожидаем ее завершения или превышения температуры уставки.  Дождавшись или того, или другого, переходим в состояния отключения нагревателя. Далее все повторяется.

Замечание 2. Код автомата на листинге 4 демонстрирует использование «теневого состояния» — tmpState. В процессе работы новое текущее состояние автомата записывается сначала в него, чтобы на новом цикле работы модели стать текущим состоянием. 

Рис. 3. Результаты тестирования модели
Рис. 3. Результаты тестирования модели

На рис. 3 приведены результаты тестирования модели. Обращают на себя внимание графики работы задержек. Если до 460-й секунды задержки работают строго последовательно, то далее они пересекаются. На работе модели это не сказывается, но,  если подходить строго, такого быть не должно. Для устранения замеченного «непорядка» достаточно ввести сигнал сброса/останова работы задержки.

Замечание 3. Графики задержек демонстрируют параллелизм работы блоков в SimInTech.

4. Где собака порылась?

Но все же, в каком блоке скрываются проблемы «автоматов» исходного проекта? Для локализации ошибки провернем «обратный рефакторинг». В этих целях заменим блоки интегратора – «Интегратор» и ключа – «Key» (см. рис. 1) блоком «Модель нагревателя» из исходного проекта. Получим модель, показанную на рис. 4. Тестирование показало, что результаты работы не изменились. Следовательно, проблема скрывается в блоке «контроллер нагревателя» (см. рис. 2). Только в чем же конкретно эта проблема – вопрос к авторам проекта.

Рис. 4. Тестирование субмодели «Модель нагревателя»
Рис. 4. Тестирование субмодели «Модель нагревателя»

5. Создание модели управления индикацией работы нагревателя

Мы создали модель управления и модель нагревателя, но для реализации в полном объеме технического задания необходимо создать еще и управление индикатором. Возьмем за основу модель, предложенную в статье [1]. Но сначала, используя правильные и хорошие качества SimInTech, запрячем наше управление в субмодель. Такое решение показано на рис. 5.

Рис. 5. Создание субмодели «Управление нагревателем»
Рис. 5. Создание субмодели «Управление нагревателем»

Теперь можно приступать к модели управления индикатором. Она, как и в [1], будет состоять из автоматов – параллельных автоматов (!) — автоматы зеленого и красного цветов. Именно такое решение показано на рис. 6, где кроме самого проекта – рис. 6а, раскрыта структурная модель субмодели «Индикация» — рис. 6б и далее субмодели «Остывание» и «Нагрев» — рис. 6в и рис. 6г соответственно. А уже их блоки, реализованные на ЯП, приведены соответственно на листингах 5 и 6. 

И все бы хорошо, если бы не график индикации, приведенный на рис. 7. Сильно смущает однократный всплеск при переключении индикатора с красного на зеленый (после 475-й секунды).  Похоже, что в этот момент суммируются (см. оператор суммы на рис. 6б) значения, определяющие текущий цвет индикатора. По замыслу этого быть не должно.

Рис. 6. Создание субмодели «Индикация»
Рис. 6. Создание субмодели «Индикация»
Рис. 7. График включения индикатора
Рис. 7. График включения индикатора

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

Рис. 8. Автоматы модели управления нагревателем
Рис. 8. Автоматы модели управления нагревателем

Структуру модели «Управление нагревателем» с учетом новых задержек (задержки с сигналом сброса) демонстрирует рис. 9. Заметим, что буферный блок для выхода numstate введен, чтобы транслировать  на его выход только состояния 0 и 1, игнорируя остальные состояния блока «Управление» (см. на рис. 8 автомат HeatCntrl и его состояния — 77, 40 и 20).

Рис. 9. Структурная модель блока «Управление»
Рис. 9. Структурная модель блока «Управление»
Листинг 5. Коды блоков управления индикатором.
input bInStateHeat, bInStateLed, bIn5sec; output nOutColorLed, curState, out5sec; var tmpState=0; curState = tmpState;  if curState=0 and bInStateHeat = 0 and bIn5sec = 0 and bInStateLed = 0 then  begin out5sec=1; nOutColorLed = 1; tmpState = 51; end if curState=51 and bIn5sec > 0 then begin out5sec=0; tmpState = 1; end if curState=1 and bIn5sec = 0 then begin out5sec = 1; nOutColorLed = 0; tmpState = 50; end if curState=1 and bInStateHeat = 1 then  begin nOutColorLed = 0; tmpState = 0; end// переход при резком изменении режима if curState=50 and bIn5sec > 0 then begin out5sec=0; tmpState = 0; end  input bInStateHeat, bInStateLed, bIn5sec; output nOutColorLed, curState, out5sec; var tmpState=0; curState = tmpState; if curState=0 and bInStateHeat = 1 and bIn5sec = 0 and bInStateLed = 0 then begin out5sec=1; nOutColorLed = 2; tmpState = 51; end if curState=51 and bIn5sec > 0 then begin out5sec=0; tmpState = 1; end if curState=1 and bIn5sec = 0 then begin out5sec = 1; nOutColorLed = 0; tmpState = 50; end if curState=1 and bInStateHeat = 0 then  begin nOutColorLed = 0; tmpState = 0; end// переход при резком изменении режима if curState=50 and bIn5sec > 0 then begin out5sec=0; nOutColorLed = 0; tmpState = 0; end 

А теперь поговорим начистоту. Среда SimInTech – программная реализация, как представляется, гениальной идеи,  однако, требующее  существенной проверки и доработки. Это пояснит почти любой программист, хорошо знакомый с обычными универсальными языками программирования и средами их разработки — IDE. С гениальностью – сложнее. Лично меня давно «сразила» среда МВТУ, которая единственная на тот момент ввела RS-триггер в режим генерации (правда, ненадолго).  А поскольку она  – предтеча SimInTech, то восхищение первой естественным образом распространилось и на вторую. Тем более, что в SimInTech есть и другие интересные и интересующие меня черты.  

В контексте обсуждения понятия «гениальность» хочется возразить тем, кто считает Россию лучшей страной в мире. Она – не лучшая. Но  Россия в чем-то гениальная страна, выживающая в жестком  мире рыночной экономики за счет своих гениальных качеств, которые пока еще работают.  Помнится, когда-то меня очень впечатлил мультик «Самый, самый, самый, самый». В нем львенок стремится стать самым сильным, самым красивым, самым отважным, самым умным или, короче, самым, самым, самым. Хотя бы потому, что по определению он «Царь зверей». В конечном итоге он им и становится (а куда тут денешься – по праву рождения), но до него доходит, что каким бы сильным он не был – найдется сильнее, каким бы ты красивым не стал – найдется красивее, найдутся отважнее, быстрее, умнее и т.д. и т.п. Бывает и такое – умный царь! И лев — уже взрослый лев — понимает, что главное счастье — найти того, в глазах кого ты будешь самым-самым-самым-самым. И он находит – ее (правда, что уж там скрывать, она его). Ту, для которой он самый-самый. Счастливый конец.  Конец, ради которого стоит жить и творить льву и, наверное, любому другому… Так что – смотрите мультики. Лучше старые, советские мультики…  А не этот, как его, — «Король Лев».  

Россия – далеко не лучшая страна мира. Это факт – статистический. Но есть много, очень много, даже миллионы людей, для которых она самая-самая. И это главное для России, да и, надо понимать, для любой другой страны мира. Смысл жизни: не стремиться быть самым-самым и для этого лезть из кожи. Быть «халифом на час» — не тот путь, который приведет к счастливой жизни. Ну и, конечно, Россию.

Среда SimInTech – явно не лучшая среди себе подобных. Но в ней есть нечто, что на текущий момент делает ее для меня единственной и неповторимой. Познакомившись с SimInTech лишь недавно (с конца прошлого – 2022 года) и, что там скрывать,  зная ее достаточно поверхностно, это, тем не менее, позволило в ней реализовать важные для меня «автоматные идеи». Со средой МАТЛАБ такой «любви» как-то не случилось, хотя знаком с ней достаточно давно.  Почему так – объяснять, наверное, долго и нудно. Но факт остается фактом – не случилось и все тут. Хотя, как теперь понимаю, в ней можно тоже провернуть нечто подобное. Но все равно SimInTech – первая. Как первая любовь…

Автоматы в SimInTech – совсем не те автоматы, которые я могу признать и даже назвать автоматами. Безусловно, есть и, вероятно, будут те, кто со мной не согласится, и для них они — самые-самые конечные автоматы (как и диаграммы Харелла). Но только, похоже, они теорию автоматов давно не пересматривали. Или они ее просто не признают или уж, что совсем крайний случай, о ней они просто не знают…  

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

Литература

1.       Автоматное программирование в SimInTech и ВКПа. [Электронный ресурс], Режим  доступа: https://habr.com/ru/post/709358/ свободный. Яз. рус. (дата обращения 28.02.2023).

2.       Конечные автоматы в среде динамического моделирования SimInTech. [Электронный ресурс], Режим  доступа: https://habr.com/ru/post/307090/ свободный. Яз. рус. (дата обращения 28.02.2023).

3.       Модель параллельных вычислений. [Электронный ресурс], Режим  доступа: https://habr.com/ru/post/486622/ свободный. Яз. рус. (дата обращения 28.02.2023).

4.       Глушков В.М. Введение в кибернетику. Изд-во АН Украинской ССР. К.:  1964. — 324с.

5.       Автоматная модель управления программ. [Электронный ресурс], Режим  доступа:  https://habr.com/ru/post/484588/ свободный. Яз. рус. (дата обращения 28.02.2023).


ссылка на оригинал статьи https://habr.com/ru/post/719592/

Campus. Система, позволяющая управлять образовательным процессом

Вступление

В этой статье будет обзор функционала системы Campus.

Campus — это комплекс, состоящий из нескольких сервисов для управления образовательным процессом, включающий:

  • Мобильное приложение Android, IOS, — предназначенный для студентов, школьников, преподавателей, учителей;

  • Система администрирования — веб приложение, предназначенное для преподавателей, учителей, методистов, библиотекарей;

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

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

Сразу определимся с терминологией:

ОП — образовательный процесс;
СА — система администрирования;
УЗ — учебное заведение;
УП — учебный план.

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

Цель

Главная цель Campus — помочь, автоматизировать, упростить ОП. Хотелось сделать приложение, которое подойдет не только студентам, но и преподавателям, облегчив работу методистам и учебному отделу.

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

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

Функционал

  • Расписание занятий;

  • Расписание экзаменов и пересдач;

  • Учебный план;

  • Контроль посещений занятий;

  • Заметки к парам;

  • Уведомления, напоминания;

  • Бронирование аудиторий;

  • Управление документами;

  • Система групп и семестров;

  • Кураторы групп;

  • Читательский билет, библиотека;

  • Зачетная книжка;

  • Журнал оценок;

  • Факультеты;

  • Курсы, тесты;

  • Индивидуальный грейдинг;

  • Персональный QR Code;

  • Статьи и новости;

  • Рейтинг студентов;

  • Экспорт данных.

Система прав и ролей

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

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

Все эти настройки выполняются через СА.

Расписание занятий

Текущие занятия, расписание, просмотр занятия
Текущие занятия, расписание, просмотр занятия

В Campus есть несколько видов расписаний:

  • Расписание группы, куда попадают все групповые занятия;

  • Персональное расписание, куда попадают индивидуальные занятия. Индивидуальные занятия планируются отдельно для каждого студента/ученика. Например, в некоторых вузах полностью отсутствуют групповые пары и все студенты учатся по индивидуальному плану;

  • Расписание преподавателя. Каждый преподаватель видит только те предметы, которые он ведет;

  • Расписание аудитории. Показывает какие занятия проводятся в выбранной аудитории.

Для составления расписания также есть несколько вариаций:

  • Можно составить расписание самому;

  • Можно составить расписание на основе УП. В данному случае система будет показывать соответствие текущего расписания УП;

  • Автоматическое составление расписания. На основе УП, при непротиворечивых входных данных, система может автоматически составить расписание и распределить предметы по дням и по времени.

Также предусмотрена помощь в составлении расписания. При составлении расписания система автоматически покажет:

  • Есть ли пересечения внутри группы. Например, выбранное время уже занятой внутри группы;

  • Есть ли пересечения с аудиторией. Например, в выбранное время в выбранной аудитории уже проводится занятие;

  • Есть ли пересечения у преподавателя. Например, у преподавателя уже стоит пара на выбранное время;

  • Валидации, перечисленные выше, также работают для подгрупп внутри занятия.

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

Для каждого занятия можно указывать следующие атрибуты:

  • День недели;

  • Неделя — «четная», «нечетная», «четная и нечетная»;

  • Повторяется на неделях;

  • Аудитория;

  • Преподаватель;

  • Начало занятия, продолжительность;

  • Ссылка на место проведения;

  • Теги;

  • Исключить определенные даты, например, праздники или отсутствие преподавателя;

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

Редактор занятия
Редактор занятия

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

Расписание звонков
Расписание звонков

Расписание экзаменов и пересдач

Из расписания занятий вытекает несколько видов экзаменов:

  • Экзамены группы, как правило, это предметы, которые изучались группой в течение семестра;

  • Персональные экзамены. Если студент обучался по персональному расписанию, следовательно, экзамены он тоже будет сдавать персональные.

Для составления расписания экзаменов есть несколько вариаций:

  • Составление расписания экзаменов самому;

  • Составление расписания на основе УП. Система автоматически подстроит выбор экзаменов под учебный план.

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

Учебный план

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

Редактирование учебного плана
Редактирование учебного плана

Контроль посещений занятий

Отметить студента на занятии, просмотр посещений, персональный QR-code
Отметить студента на занятии, просмотр посещений, персональный QR-code

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

  • Через приложение отметить каждого студента индивидуально;

  • Отметить сразу всех студентов;

  • Отметить студента, отсканировав его персональный QR-code. В мобильном приложении уже встроен свой QR-code сканер, который прекрасно и быстро работает.

Всего есть три вида посещений:

  • Был на паре;

  • Пропустил;

  • Болел.

Далее статистику по посещениям можно посмотреть в мобильном приложении. Более подробную статистику можно экспортировать через СА или мобильное приложение. Где, соответственно, преподаватель получает всю информацию о группе, а студент о себе. На основе посещений формируется рейтинг студента. Об этом расскажу ниже.

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

Заметки к парам

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

Заметки к занятию, создание заметки
Заметки к занятию, создание заметки

Уведомления, напоминания

Список уведомлений, добавить уведомление, настройки уведомлений
Список уведомлений, добавить уведомление, настройки уведомлений

Для занятий, экзаменов, пересдач, бронирований можно добавлять напоминания.

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

Бронирование аудиторий

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

Создание бронирования аудитории через СА
Создание бронирования аудитории через СА

Управление документами

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

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

Система групп и семестров

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

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

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

Редактирование группы
Редактирование группы

Кураторы групп

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

Студент видит кураторов своей группы.

Читательский билет, библиотека

В Campus есть возможность добавлять книги по нескольким разделам.

Далее мы можем добавить книгу студенту в читательский билет, используя QR-code книги, либо через СА. В СА можно будет посмотреть все книги студента за каждый семестр и статус возврата.

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

Зачетная книжка

В зачетную книжку студента автоматически попадают все оценки по экзаменам, курсовым работам, зачетам. Оценки выставляются через мобильное приложение. Студент может посмотреть свои оценки за каждый семестр. Есть возможность посмотреть каким преподавателем, во сколько, по какому предмету, в какой аудитории выставлялась оценка.

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

Студент может экспортировать зачетную книжку в один из предложенных форматов (см. Экспорт данных)

Журнал оценок

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

Преподаватель может экспортировать журнал оценок всей группы по любому предмету.

Факультеты

Факультеты настраиваются через СА. Для каждого факультета можно добавить специальности, преподавателей и остальных работников кафедры, указывается дополнительная информация (кабинет, специальность, должность).

Далее вся информация по факультетам отображается в профиле преподавателя в мобильном приложении.

Курсы, тесты

Превью курса, дерево курса, просмотр модуля
Превью курса, дерево курса, просмотр модуля

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

Редактирование контента курса
Редактирование контента курса

Все задание делится на модули. К каждому модулю добавляются вопросы.

Представлено несколько типов вопросов:

  • Длинный ответ;

  • Короткий ответ;

  • Один вариант ответа;

  • Несколько вариантов ответа;

  • Загрузка ответа.

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

Оценка задания проводится преподавателем через СА. Каждое задание проходит несколько этапов: от выполнения до взятия на проверку и выставления оценки.

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

Студент может выполнять задания в мобильном приложении.

Индивидуальный грейдинг

Можно создавать индивидуальные шкалы оценивания. Например, 5-ти бальная шкала, 10-ти бальная шкала или 100-бальная шкала, если это курс или тест. Шкалу оценок можно создать через СА. После создания шкалы оценок, ее можно использовать для экзаменов, заданий.

Создание шкалы оценок
Создание шкалы оценок
Выбор шкалы оценок для задания
Выбор шкалы оценок для задания

Персональный QR Code

У каждого студента в мобильном приложении есть свой персональный QR-code. По QR-code можно отметить студента на занятии или отметить учебник/книгу в читательском билете.

QR-code можно сохранить через мобильное приложение и показывать его без входа в приложение.

Статьи и новости

Список статей, просмотр статьи
Список статей, просмотр статьи

УЗ может писать новости или статьи через СА. Статья проходит модерацию и публикуется в мобильном приложении. К статьям есть комментарии, закладки, отметки нравится.

Рейтинг студентов

Просмотр профиля пользователя, личный рейтинг, общий рейтинг
Просмотр профиля пользователя, личный рейтинг, общий рейтинг

Для каждого студента рассчитывается индивидуальный рейтинг. На рейтинг влияют:

  • Посещения, пропуски, больничный;

  • Оценки за экзамены;

  • Оценки за задания.

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

Экспорт данных

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

  • png, jpg;

  • xlsx;

  • pdf;

  • csv;

  • ics — очень удобен для расписаний. Например, можно экспортировать свое расписание занятий на месяц или на семестр и добавить его в Google Calendar или Outlook.

Экспорт расписаний
Экспорт расписаний

Настройки

Разумеется, в СА и в мобильном приложении есть много настроек, которые мы не разбирали выше:

  • Темная/светлая тема;

  • Уведомления: на почту, в мобильном приложении. Есть возможность точечно отключить уведомления;

  • Язык интерфейса;

  • Личный профиль;

  • Выбор типа расписания занятий;

  • Выбор типа экзаменов и пересдач;

  • Возможность перехода между семестрами и группами;

  • Виджеты с расписаниями;

  • Расписание звонков;

  • Коэффициенты для рейтингов;

  • Автоматическое назначение ролей.

Заключение

Использовать систему администрирования можно по ссылке https://campus-ui.ru/auth/login

Скачать мобильное приложение для Android можно тут https://play.google.com/store/apps/details?id=com.campus_mobile

Статью написал ведущий разработчик «Campus» Никита Филонов


ссылка на оригинал статьи https://habr.com/ru/post/719596/