Совместный семинар по ML · ФКН ВШЭ

Семинары, где делают, а не смотрят

Одна ссылка на всю аудиторию. Студент вводит имя — и открывает тот же ноутбук, что и вы, с тем же живым Python-ядром. Ничего не нужно ставить, и ни у кого ничего не может не импортироваться.

Развернуть у себяСКОРО Заглянуть в комнатуСКОРО

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

Зачем

Кто-то конспектирует, кто-то фотографирует экран. Но не делает.

01

Colab называется collaborative, но вдвоём в одном ноутбуке не поработать

Каждый открывает свою копию. Через двадцать минут в аудитории тридцать разных ноутбуков, и ни один не совпадает с тем, что на проекторе.

02

На каждый семинар найдётся студент, у которого что-то не импортируется

Другая ОС, другая версия torch, чужой CUDA. Десять минут семинара уходят на чужое окружение, а остальные ждут.

03

Тот, кто пытается повторить, теряет нить рассказа

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

Одна комната

Все правят один документ и запускают одно ядро

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

Рабочий экран Colloq: общий ноутбук, список файлов и людей в комнате, панель оракула справа

Три шага, и все внутри

≈ 40 секунд

Шаг 01 · Преподаватель

Создаёте семинар и копируете ссылку

В панели — название. Ни списка группы, ни расписания, ни приглашений на почту; дату студент видит на афише сам — это время, когда открыли комнату. Там же выбирается остальное: пустой ноутбук или ссылка на GitHub, окружение, кто запускает ячейки.

Шаг 02 · Студент

Открывает ссылку, пишет своё имя

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

Шаг 03 · Аудитория

Дальше вся аудитория работает вместе

Общий ноутбук, общее ядро, общая папка с файлами и общий терминал. Вопрос к оракулу видит вся комната.

You’re joining

Computer Vision Seminar

The fox is yours Picked from the ones nobody in this room has taken, so your cursor is always yours.

No account, no email. The link is the seminar — close the tab and the same link brings you back.

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

Девяносто минут

Как проходит пара

Четыре момента одного занятия. Время условное — важен порядок и то, чего в нём нет: ни установок, ни рассылок, ни «у меня не запускается». Переключатель меняет кресло: та же пара с места преподавателя и с места студента.

Чьими глазами смотреть на пару
  1. Аудитория входит

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

    Аудитория входит

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

  2. Ячейку дописывает студент

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

    Ячейку дописывает студент

    Печатает в том же файле, что на проекторе: его строка появляется на большом экране раньше, чем он успевает поднять руку. Ctrl+Z отменяет только его собственные правки — чужую работу так не отменить.

  3. Комната расходится по своим ячейкам

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

    Комната расходится по своим ячейкам

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

  4. после

    Ядро гаснет, файл остаётся

    Ноутбук — обычный .ipynb: в репозиторий курса, в чат, куда угодно. Ссылка продолжает открываться, и следующая пара начинается с того же файла.

    Ядро гаснет, файл остаётся

    Кто не дописал — дописывает вечером по той же ссылке. Ядро погасло и переменных больше нет, но файл и его правки на месте.

Общее — это буквально общее

Не «синхронизация раз в секунду», а один документ и один процесс Python на всю комнату. Отсюда всё остальное.

Одно ядро

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

Мария, студентка · ячейка 3

df = pd.read_csv("data.csv")
df.shape

Вы · ячейка 4

df["target"].mean()

Постановочный прогон на этой странице, не живая комната.

Один документ на всех

CRDT под капотом: двое правят одну ячейку и никто ничего не затирает. Курсор соседа виден там, где он печатает.

Одно ядро на комнату

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

Общий терминал

Один pip install — и пакет появился у всей аудитории. Команды двоих не перемешиваются: они встают в очередь, и Stop сбрасывает её целиком.

Оракул в комнате

Вопрос и ответ попадают в общий тред, а не в чью-то личную вкладку. Спросил один — прочитали все.

Общие файлы

Перетащили data.csv — он у всех, и Python читает его по имени: без путей, дисков и монтирований.

Своё железо

Один docker compose up на вашей машине или VPS. Ни тарифов, ни лимитов, ни чужого облака.

История комнаты

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

Оракул правит ячейку

Просите переписать — он показывает диффом, что предлагает. Принять или отклонить решает комната, и решение видно в треде.

Правила комнаты

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

Границы

Это не LMS и не хочет ею стать

Colloq делает ровно одно: девяносто минут семинара, в течение которых аудитория работает в одном месте. Всё, что происходит до и после пары, остаётся там, где уже живёт.

Что уходит наружу

Остаётся на вашей машине

  • Содержимое файлов, которые перетащили в комнату
  • Логи ядра и терминала
  • Пиксели графиков: вместо картинки уходит только пометка о её размере

Уходит — и только при обращении к оракулу

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

Кнопки у ячейки — объяснить, починить, подсказать, переписать — это тоже обращение: ноутбук уходит и без набранного вопроса. И только туда, чей адрес и ключ вы вписали — в .env или в панели администратора. Без ключа оракула в комнате просто нет, и комната работает без него. А если модель поднята рядом, своей Ollama или vLLM, наружу не уходит вообще ничего: две строки в .env — и всё остаётся на вашей машине. Проверить каждую строку выше можно будет по коду сборщика контекста — когда исходники откроются.

А если

Что ломается и что тогда

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

«Студент закрыл вкладку»

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

«Кто-то запустил бесконечный цикл»

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

«Кто-то стёр половину ячеек»

Стереть может любой — запрета тут нет. Но комната пишет историю: видно, кто и что менял и как было до. Преподаватель откатывает одну ячейку или весь ноутбук; откат приезжает всем сразу и сам становится строкой в истории, так что отменить можно и его. Ctrl+Z при этом остаётся вашим личным: он возвращает только ваши правки.

«У студента упал интернет»

Отваливается он один, пара продолжается. Его правки лежат у него в браузере и доезжают, когда сеть вернётся, — даже если он успел закрыть ноутбук.

«Пара идёт дистанционно»

Ссылка работает откуда угодно, но Colloq не заменяет звонок. Голос и лицо остаются там, где уже есть; общими становятся только ноутбук и ядро.

«Студент не хочет, чтобы его код видели»

Тогда это не тот инструмент. Что написано в комнате — видит комната, как доска в аудитории. Домашняя работа живёт вне Colloq.

Развернуть

Ставится одной командой

Код откроется под MIT. Работает на ноутбуке преподавателя, на кафедральной машине или на VPS — ядру по умолчанию отдаётся два гигабайта. Данные семинара никуда не уезжают.

bash — colloq
git clone <репозиторий>
cd colloq && cp .env.example .env
docker compose up
✓ colloq готов на http://localhost:3000 Рядом поднимаются двое: сам Colloq и ядро — Python 3.11 с ноутбучным стеком. Пакеты курса кладутся отдельным файлом окружения: у семинара по CV своё, у NLP своё. Но это localhost, и аудитория по такому адресу не зайдёт. Наружу выводит вторая команда, make host: она поднимает туннель и сама подставляет адрес в ссылку.

Макет установки, а не прогон: репозиторий ещё закрыт.

Следующий семинар можно провести иначе

Развернуть у себяСКОРО Читать статьюСКОРО

Страница пока только рассказывает. Ссылки появятся здесь же, когда проект выйдет из обкатки.