Мои текущие инструменты для онлайн курса
Список инструментов
Прошлогодняя заметка по тому, что я использую в работе, но уже без привязки к курсам.
Во время лекции:
- онлайн лекции: FreeConferenceCall (FCC)
- микрофон: Blue Yeti
- слайды: формат markdown, показ lookatme (раньше gitpitch)
- показываю код: mRemoteNG, ipython, vim, tmux
- запись лекций: OBS, FCC как бекап, конвертация HandBrake
- общение на курсе: slack
- таймер Toggl
Сайт курса, методичка:
Задания, проверка заданий:
- процесс работы с заданиями завязан на git и GitHub
- скрипт pyneng для слушателей - проверка заданий тестами, посмотреть ответ, сдать на проверку
- скрипт check для проверки заданий - проверка заданий тестами, перенос в отдельную ветку, …
- проверка заданий тестами: pytest
Лекции
FCC
Лекции проводятся в FreeConferenceCall (FCC).
Коротко об FCC:
- лимит на кол-во человек в конференции огромный (1000, насколько я знаю)
- есть клиент; клиент работает на разных ОС
- можно подключаться через браузер
- есть возможность делать запись
- screen sharing
- whiteboard для рисования
- чат
- бесплатный
В FCC есть все, что мне нужно и нет ничего лишнего. И тут меня сразу спрашивают почему не zoom или еще что-то подобное. Выбор софта я делала года два назад, пересмотрела очень много разных платформ, платных и бесплатных. Покупала подписки, пробовала какое-то время одну платформу, потом брала следующую.
FCC мне понравился всем: работает в браузере и есть клиент, как выглядит интерфейс, возможности, частые обновления. Он еще и бесплатный, хотя хотелось бы иметь возможность как-то оплачивать сервис и где-то год назад эту возможность добавили и теперь можно заплатить за него любую сумму в месяц.
Почему я потом не перешла на что-то типа zoom? Тут особенность чисто моя - если мне что-то нравится, то я не буду метаться за каждой новомодной софтиной, которая делает плюс-минус то же самое. Скорее всего, я останусь с этим же выбором очень надолго, пока меня будет все устраивать.
Микрофон, рабочий стол
Рабочий стол:
На левом мониторе я показываю код и слайды, на правом открыты: книга, slack, FCC, OBS. Лекции читаю стоя, так как так лучше голос и в целом все более бодро.
Использую микрофон: Blue Yeti.
Организация desktop
Я работаю на Windows, но технически Windows используется только как хост, а реальная работа идет на виртуалках с Debian.
На лекциях мне часто надо переключаться между окнами: слайды, код, браузер. Рекомендую посмотреть какими комбинациями это можно делать в вашей ОС, чтобы процесс был удобен и вам и смотрящим.
У меня переключение между приложениями сохраненными в taskbar это Win + число. И удобно когда уже запоминаешь что где, в моем случае win - 1 это mRemoteNG, 2 - браузер, 3 - slack.
На левом мониторе я показываю код и слайды, на правом открыты: книга, slack, FCC, OBS. Поэтому для Windows я делаю правый монитор основным, чтобы все мелькания при переключении уходили на него. Toolbar ставлю вертикальным справа и только на одном экране, такой вариант мне больше всего нравится для лекций, а потом и совсем к нему привыкла. Это все мелочи, но все эти мелочи тоже сильно влияли на удобство при чтении лекций, поэтому делюсь.
Слайды
Для показа слайдов долгое время пользовалась GitPitch. Это был идеальный для меня сервис, но, к сожалению, он закрылся. При этом я уже привыкла к слайдам в формате markdown, и назад во всякие powerpoint для меня дороги нет.
Поэтому искала какой-то вариант показывать существующие слайды в markdown. Пересмотрела несколько сервисов, но пока ни один не подошел. У меня все максимально просто в слайдах и кроме текста, кода и пары картинок мне ничего не нужно. При этом, некоторые сервисы, хоть и позволяют загрузить слайды в markdown, потом не дают редактировать их как один документ, поэтому от них отказалась.
На данный момент остановилась на модуле lookatme. Он позволяет показывать слайды в формате markdown в командной строке. Пробовала и другие варианты слайдов в командной строке, но этот понравился больше всего. Слайды показывает хорошо, навигация удобная, пока единственное чего не хватает после gitpitch это навигации вертикально. Для слушателей минус, что теперь нет PDF варианта слайдов, только markdown документ, хотя он тоже достаточно удобен. PDF из markdown сделать можно, но у меня пока не получилось сходу, с этим надо будет разбираться.
Цветовая гамма зависит от терминала, то есть можно сделать слайды и на светлом фоне.
Демонстрация кода
Основное время на лекции уходит на показ кода. Так как работаю на Windows, но показываю все на vm с Debian, подключаюсь на виртуалку SSH клиентом mRemoteNG. Почему не что-то другое? Вспоминаем, что если Наташа что-то выбрала, то это надолго. Так когда-то пересмотрела много SSH-клиентов и мне приглянулся именно mRemoteNG. Все что мне нужно, он умеет, не хватает только комбинаций для переключения между вкладками, но на мой процесс не сильно влияет.
Дальше внутри vm Debian и все лекции я показываю в tmux. Tmux позволяет разделять терминал на части, что очень удобно для лекций, так как можно показывать в одной части код, в другом запускать его.
На базовом курсе по Python, многие примеры небольшие, поэтому половину курса мы сидим в ipython. Вторую половину времени, показываю код в редакторе - для меня это vim. Показываю в vim, потому что именно им пользуюсь все время.
Ссылки на конфиги и лекции по vim и tmux в заметке Мои текущие инструменты
Вопросы во время лекций и курса
Вопросы во время лекции пишутся текстом в slack. Технически можно голосом, но это обычно не очень удобно потому что я много говорю и сложно “прорваться” и текстом часто проще. Используем slack, а не чат FCC, потому что удобно чтобы все было в одном месте, а так как все общение и так в slack, проще там же задавать вопросы.
Меня постоянно спрашивают почему slack, а не telegram. Основных причины две: удобство выкладывания кода и наличие каналов и веток разговора. К сожалению, slack используем бесплатный, так что история это проблема.
Не платный вариант, потому что с платным получилось бы, что оплачивать было бы смысл только на время курса, то есть опять история бы хранилась мало. Вместо этого остаемся на бесплатном, но при этом есть одно общее сообщество для тех, кто учится или учился на курсе и всегда есть кому задать вопросы.
Каждые несколько месяцев пересматриваю какие есть альтернативы slack, но пока по-преждему остаюсь в нем. Это же касается всего софта, который меня не до конца устраивает. Это просто к тому, что я не просто тут решила один раз и забыла, я об этом часто думаю и смотрю варианты, но пока мне все еще больше всего подходит slack.
Запись лекций
Запись лекций делаю OBS и как бекап использую запись лекции в FCC. OBS отличный софт и работает на разных платформах. Он бесплатный, но можно и нужно поддержать автора на patreon.
После лекции выкладываю запись как есть из OBS на youtube. И конвертирую mkv в mp4 с помощью HandBrake и выкладываю mp4 на Google Drive. Это и как бекап и возможность скачать лекции небольшого размера себе локально для слушателей.
Сайт курса, методичка
Для курса создан отдельный сайт с помощью GitHub Pages. Там выкладывается все, кроме записи лекций. Плюс использую на всех сайтах: два курса и свой сайт ту же тему Minimal Mistakes.
На сайт выкладываю: инструкции по курсу, календарь, посты по лекциям с ссылками, программу с ссылками на посты по лекции. Там же страница с выпускниками курса (теми, кто получил сертификат). На данный момент я наконец привела все это к виду, которым я довольна в целом.
GitHub Pages позволяют писать все содержимое сайта в markdown. При этом весь сайт хранится в виде репозитория на GitHub, а публикуется по умолчанию на github.io.
Также так сложилось с базовым курсом, что сначала была книга, а потом появился курс. Удобно для слушателей, что та же информация продублирована текстом. Конечно написать и прочитать курс и написать то же самое текстом, это разные вещи и в целом не особо относящиеся друг к другу, но если какая-то методичка есть, ее можно опубликовать на readthedocs. И получить автоматом онлайн версию, PDF и Epub.
Опять пишем все в репозитории GitHub в Markdown, а получаем методичку такого вида
Работа с заданиями
Это та часть, которая будет интересна только тем, кто делает или собирается делать что-то похожее с курсами.
Прежде чем я нагородила такой вариант, я рассматривала массу готовых решений. И это было не разовое мероприятие, я снова и снова примерно каждые полгода смотрела, что еще есть из готовых продуктов/сайтов. К такому варианту я пришла потому что все готовые сайты требовали, как правило, тыцать кнопки на сайте, например, для проверки заданий. А так как у меня на курсе порядка 100 заданий, то мне становилось дурно только при представлении, что мне надо будет каждое задание для каждого слушателя смотреть нажимая кнопки.
Как обычно, если вам подходит готовый вариант, конечно лучше брать готовый. Мне они не подошли, но это ничего не значит.
Выполнение заданий
- процесс работы с заданиями завязан на git и GitHub
- скрипт pyneng для слушателей - проверка заданий тестами, посмотреть ответ, сдать на проверку
- скрипт check для проверки заданий - проверка заданий тестами, перенос в отдельную ветку, …
- проверка заданий тестами: pytest
Работа с заданиями на курсе организована через git и GitHub. Каждому слушателю на курсе я делаю приватный репозиторий на GitHub, в котором находятся задания, тесты и утилита pyneng (на текущем курсе называется ptest, но это имя пересекается с существующим модулем). Пример репозитория
Слушатели делают задания каждый в своем репозитории, в ветке main (master). Для каждого задания подготовлен файл, в котором скопировано самое задание. И код надо писать прямо в этом файле, потому что многое завязанно на определенную структуру каталогов. Например, если надо сделать задание 4.1, оно делается в файле exercises/04_data_structures/task_4_1.py сразу после описания задачи.
Задания выполняются в любом редакторе, но я всем начинающим очень-очень рекомендую посмотреть на редактор Mu. На мой взгляд ничего лучше для начинающих нет. Редактор достаточно простой, но при этом в нем есть такие вещи как дебаггер.
Запись лекций по редактору Mu:
После выполнения задания в редакторе, его надо запустить, проверить все ли ок, а потом проверить задание тестом. Раньше тесты начинались не с первых тем и там я уже могла рассказать про pytest, но сейчас я добавила тесты для всех заданий, даже для самых первых, поэтому было бы неправильно сразу грузить начинающих тем как работать с pytest.
Вместо этого, я сделала маленький скрипт, который запускает те же тесты и pytest, но снимает вопросы запуска тестов, параметров запуска, плюс в этом же скрипте добавлен функционал, который копирует ответы (варианты решения), если тесты прошли, и позволяет сдавать задание на проверку.
У скрипта достаточно простой интерфейс запуска: pyneng 1-3
значит что надо запустить
тесты для заданий 1-3. Если добавить -a
, то при прохождении теста скопируется ответ,
а если добавить -c
задание будет сдано на проверку.
Инструкции по работе с утилитой pyneng со стороны слушателей
Сдача задания на проверку заключается в том, что код заданий добавляется на GitHub, а затем скрипт pyneng пишет комментарий на GitHub под коммитом со сдачей заданий. Комментарий нужен для генерации оповещения. Мне на почту приходят оповещения и это и есть очередь на проверку заданий.
Я в курсе что есть pull request и знаю что многие используют их в такой схеме. Мне больше нравится мой вариант.
Проверка заданий
Для того чтобы слушатели могли делать задания максимально комфортно, проверка заданий делается в отдельной ветке их репозиториев. В эту ветку task_check я копирую решения заданий, смотрю на них и, если есть какие-то нюансы, замечания и так далее, пишу это в коде.
Проверку заданий я делаю вручную, но у меня есть вспомогательный скрипт, который снимает с меня всю рутину.
Скрипт я назвала check. Он тянет обновления в репозитории, копирует решения в ветку task_check, запускает тесты для указанных заданий и открывает эти задания в табах в vim. В итоге у меня открыты нужные файлы, я их быстро смотрю в vim и затем еще раз вызываю check чтобы отправить оповещение слушателю, что задания проверены.
Оповещение про проверку генерируется тоже из-за комментария на GitHub, который пишет check и слушателям приходят письма со ссылкой на комментарий и там же коммит в котором видно diff.
Так же мы работаем весь курс, в двух ветках. При этом все вопросы и обсуждения заданий в процессе выполнения происходят в slack.
Создание репозиториев
Кроме того, у меня есть несколько мелких скриптов, которые упрощают начало курса, когда надо создать много репозиториев, всем отправить приглашения в репозитории. Они не особо красивые и я хочу их причесать во внятный интерфейс с CLI как check и pyneng, но пока этого не сделала.
Тесты для заданий
Тесты и проверка тестами выполняется с помощью pytest. На курсе он у меня спрятан в утилиту pyneng, но она по сути просто вызывает тот же pytest, только со определенными плагинами и параметрами вызова.
Пока на курсе мы использовали pytest напрямую, без скрипта pyneng, написала инструкцию по нему. Может быть тоже кому-то пригодится для курсов.
Основной плагин pytest для курса - pytest-clarity. Он делает diff более понятным и особенно начинающим легче понять, что в решении не совпадает с задачей.
На данный момент для всех заданий, кроме 25 раздела по базам данных, есть тесты. Тесты проверяют правильность выполнения задания, проверяют его на разных данных.
Главное, что надо знать про тесты к заданиям - это ни в коем случае не смотреть на них как образец написания тестов. Особенно тесты для 4-7 разделов. Там мне приходилось писать дикие извращения чтобы протестировать базовый код, никак не нагружая учащихся. Как только пошли функции (9 раздел), там тесты уже получше, но они все еще не образец написания тестов, так как мне надо написать тест, при этом не подсказывая решение и чтобы все это работало на любой машине.
В общем в эти тесты можно посмотреть для примера только если вам тоже надо писать тесты для заданий.