Переводим студентов на удаленку за 1 день

от автора

image

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

Что было сделано:

Учебным отделом для преподавателей были разработаны методические рекомендации по ведению лекций online. Например, такие как:

Длительность занятий

Если у вас в расписании запланировано было офлайн-занятие длительностью 4 ак.часа, то вы можете сохранить эту длительность для онлайн, однако ввести более длинный перерыв (30-40 минут), чтобы студенты успели отдохнуть.

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

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

Фокусировка внимания

Теоретические занятия в онлайне максимально похожи на офлайн, но– однако стоит учесть, что фокус внимания в онлайне еще короче, чем в офлайне. Поэтому мы рекомендуем проводить лекции с интерактивным форматом: например, 15-20 минут теоретического материала, после которого следует дискуссия, вовлекающая в обсуждение всех студентов.

Интерактивные занятия лучше всего проводить в малых группах (10-12 человек). Если у вас большая группа (30+ человек), то лучше «разбить» группу на две части и провести, например, первые 2 ак.часа с первой половиной и вторые 2 ак.часа – с другой.

Огромная работа легла на сотрудников первой и второй линии поддержки. В одночасье на поддержке оказались тысячи личных устройств пользователей, на которых надо помочь установить необходимый софт, выдать лицензии на специфическое ПО и еще, внезапно, Zoom не работает в Крыму (кто успел туда уехать), Опера c встроенным VPN`ом помогают.

В качестве основной платформы был выбран Zoom.
Изначально остро встал вопрос с планированием занятий, созданием конференций и информированием всех студентов и проеподавателей.

image

Вот так выглядело расписание Zoom лекций первые несколько дней. В котором все конференции создавались вручную

image

А так, когда оно снова стало вестись в 1с

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

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

image

Интерфейс расписания интегрированного с Zoom

Теперь посмотрим как это работает.
Исходный код

1. Импортируем две библиотеки из SDK: commonlib и mobilertc. Это, наверно, самый печальный этап, т.к. ваше приложение становится тяжелее на 80 мегабайт.

2. Имплементируем InitAuthSDKCallback, MeetingServiceListener в нашу активити или фрагмент. Для работы с зума нужен минимальный API 21 (В документации на сайте указан minSdkVersion 16, но ее не очень оперативно обновляют, лучше ориентироваться на примеры в семплах идущих с SDK).

При создании фрагмента инициализируем SDK

Инициализация Zoom SDK

private View view; private ZoomSDK mZoomSDK; @Override public View onCreateView(             LayoutInflater inflater, ViewGroup container,             Bundle savedInstanceState) {         view = inflater.inflate(R.layout.fragment_first, container, false);          mZoomSDK = ZoomSDK.getInstance();         if (mZoomSDK.isLoggedIn()) {             getActivity().onBackPressed();             return null;         }          InitAuthSDKHelper.getInstance().initSDK(getContext(), this);         if (mZoomSDK.isInitialized()) {              ZoomSDK.getInstance().getMeetingService().addListener(this);             ZoomSDK.getInstance().getMeetingSettingsHelper().enable720p(true);         }          return view; } 

Для этого созаем класс InitAuthSDKHelper и вызываем функцию

initSDK

public void initSDK(Context context, InitAuthSDKCallback callback) {         if (!mZoomSDK.isInitialized()) {             mInitAuthSDKCallback = callback;              ZoomSDKInitParams initParams = new ZoomSDKInitParams(); //            initParams.jwtToken = SDK_JWTTOKEN;             initParams.appKey = SDK_KEY;             initParams.appSecret = SDK_SECRET;             initParams.enableLog = true;             initParams.logSize = 50;             initParams.domain = WEB_DOMAIN;             initParams.videoRawDataMemoryMode = ZoomSDKRawDataMemoryMode.ZoomSDKRawDataMemoryModeStack;             mZoomSDK.initialize(context, this, initParams);         } }

Тут обратим внимание на следующие параметры:
appKey и appSecret — это идентификатор и секретный ключ вашего приложения, которое вы создаете на сайте зума (занимает примерно 1 минуту), зарегитрировавшись как разработчик.
На практике настоятельно не рекомендуется использовать их для идентификации.
Вместо них следует использовать параметр jwtToken, как это сделать написано тут.

Подключение к конференции

private AutoCompleteTextView idMeeting; private AutoCompleteTextView idDisplayName;  private void onClickJoin() {         if(!mZoomSDK.isInitialized())         {             Toast.makeText(getContext(),"ZoomSDK has not been initialized              successfully",Toast.LENGTH_SHORT).show();             InitAuthSDKHelper.getInstance().initSDK(getContext(), this);             return;         }  if (ZoomSDK.getInstance().getMeetingSettingsHelper().isCustomizedMeetingUIEnabled()) {    ZoomSDK.getInstance().getSmsService().enableZoomAuthRealNameMeetingUIShown(false); } else {    ZoomSDK.getInstance().getSmsService().enableZoomAuthRealNameMeetingUIShown(true); }          String number = idMeeting.getText().toString();         String name = idDisplayName.getText().toString();          JoinMeetingParams params = new JoinMeetingParams();         params.meetingNo = number;         params.displayName = name;         ZoomSDK.getInstance().getMeetingService().joinMeetingWithParams(getContext(), params); } 

image

В данной реализации используется родной интерфейс. Но поддерживается возможность его кастомизации.

Выводы:
1) Процес обучения (за исключением тех случаев, когда требуются мастерские и спец. оборудование) можно перевети в online.
2) Важен целенаправленный и систематический подход, чтобы исключить зоопарк инструментов коммуникации, которые каждый тьютор будет использовать.
3) Если у вас на бэкенде учебный процесс был до этого налажен, то внедрение конференций в мобильное приложение не займет много времени.

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


Комментарии

Добавить комментарий

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