Три адреса, три назначения
| Ссылка | Что открывается |
|---|---|
/s/… | Живая комната: тетради, файлы, история правок, отметки и вопросы оракулу. Действия зависят от правил и завершения занятия. |
/p/… | Страница занятия: папка с его материалами — тетради с результатами запусков, PDF, данные и всё одним архивом. Без ядра и совместного редактирования. |
/c/… | Курс: расписание по дням со ссылками на страницы занятий. |
Публикация не закрывает комнату. Чтобы оставить группе только чтение, нажмите в комнате «Закончить занятие» (в панели — «Завершить занятие»).
Опубликуйте занятие
Материалы выбирают на экране «Страница занятия». Он открывается тремя путями:
- после завершения занятия, если комната стоит в курсе и страницы у неё ещё нет: в комнате появляется окно «Занятие завершено», кнопка «Выбрать материалы →» открывает экран в новой вкладке, «Не сейчас» закрывает окно до следующего завершения;
- из полосы завершённого занятия в комнате: ссылка «Опубликовать материалы →», после первой публикации — «Страница занятия →». Её видит только преподаватель, и она есть у любой комнаты, в курсе или нет;
- из панели: пункт «Страница занятия…» в меню занятия в списке «Занятия» или в меню строки на странице курса.
- Проверьте отметки в разделах «Тетради» и «Файлы». Colloq ставит их сам, а у неотмеченной строки пишет причину (см. ниже).
- При необходимости переименуйте материалы. Название тетради становится названием вкладки («Лекция», «Семинар»); текст в Markdown (
.md) тоже открывается вкладкой со своим содержанием; название PDF — подписью ссылки; данные, код и папки остаются под путём из комнаты, потому что на него ссылается код. Стрелки ↑↓ меняют порядок тетрадей. - Если появился раздел «Проверка», просмотрите каждое предупреждение и отметьте «Проверил(а) — публиковать как есть».
- Нажмите «Опубликовать». Экран покажет адрес готовой страницы с кнопками «Копировать ссылку» и «Открыть». Откройте её так, как увидит студент.
На странице помещается до 24 материалов общим объёмом до 200 МБ, а каждый файл — не больше лимита загрузки сервера (50 МБ по умолчанию). Папка — один материал, сколько бы файлов в ней ни было (до 1000). Экран показывает занятое место: «Страница: 10,8 МБ из 200 МБ».
Повторная публикация — кнопка «Обновить страницу» на этом экране или пункт «Обновить страницу» в меню строки курса — пересобирает страницу по той же ссылке из того, что сейчас лежит в комнате. Снятую страницу обновление не возвращает: в меню строки этого пункта у неё нет, а на экране «Страница занятия» кнопка называется «Опубликовать снова». Если отмеченного файла уже нет, он стал больше лимита или место на странице кончилось, экран назовёт его в списке «Не вошли на страницу». Папка попадает в этот список только целиком: половина набора данных хуже, чем ничего.
Что отмечено сразу
Тетради отмечены все, кроме пустых и похожих на чужие или закрытые. PDF отмечены, если их не исключает одна из причин ниже: обычно это слайды. Данные, код и тексты отмечены, только если на них ссылается тетрадь (рядом написано «используется в seminar.ipynb») и они небольшие: данные — до 20 МБ, код и тексты — до 200 КБ. README в корне комнаты отмечается и без ссылки.
Отметки — подсказка, а не решение: неотмеченную строку можно отметить, кроме пустой тетради и файла больше лимита загрузки. Правила скорее оставляют лишнее за бортом: добавить файл — один клик, а розданную ссылку обратно не забрать.
| Причина у строки | Когда ставится |
|---|---|
| «тетрадь ученика · Зуев Аким» | Личная тетрадь студента из этой комнаты. |
| «похоже на работу ученика» | В имени файла — имя участника занятия, например ZuevAkim_02.ipynb. |
| «имя начинается с «_»» | Файл или папка на пути начинается с подчёркивания: так удобно прятать черновики. |
| «похоже на ответы» | В имени есть answers, solutions, «ответы», «решения» и похожие слова. |
| «пустая» | В тетради нет ни текста, ни вывода. Такую не отметить. |
| «не упоминается в тетрадях» | Ни одна тетрадь не называет файл или его папку. |
| «похоже на результат запуска» | Файл лежит в outputs/, results/, logs/, checkpoints/ и подобных папках, это веса модели, журнал, HTML больше 1 МБ или файл submission…. |
| «картинка уже в тексте тетради» | Картинка вставлена в текстовую ячейку и попадёт на страницу вместе с тетрадью. |
| «больше …» | Файл больше порога для своего вида. Больше лимита загрузки — отметить нельзя. |
| «похоже на ключ или пароль» | Файл в папке назван как ключ: id_rsa, *.pem, credentials.json, token.txt. |
| «не проверить на ключи — откройте и решите сами» | Файл в папке проверка не прочтёт: HTML, файл без расширения, код или текст больше 2 МБ. |
| «больше 1000 файлов» | В папке больше 1000 файлов. Такую не отметить. |
| «внутри нечего публиковать» | Все файлы папки остаются в комнате по правилам из таблицы. |
Тетради и файлы, появившиеся после прошлой публикации, помечены «новая» и не отмечены: ни выбраны, ни сознательно оставлены.
Папки: данные, модули и картинки
Папка верхнего уровня комнаты — data/, scripts/, assets/ — выбирается целиком, одной строкой: «data/ · 15 файлов · 25 МБ». На странице занятия она тоже одна строка, «Данные · 15 файлов · 25 МБ», и скачивается одним ZIP с папкой внутри. Так рядом с тетрадями оказываются модули, которые они импортируют (from scripts import case_cian as cian), и картинки из текста — по тем же путям, что в комнате.
Папка отмечена сразу, если её использует то, что публикуется: отмеченная тетрадь читает файл из неё или импортирует её как пакет («читается в lecture.ipynb и scripts/eda_tools.py», «импортируется в lecture.ipynb»), её читает код из другой отмеченной папки, или в тексте тетрадей есть картинки из неё. Неотмеченная тетрадь, например solutions.ipynb, папку не отмечает.
Внутри папки действуют правила из таблицы выше, кроме «не упоминается в тетрадях»: черновики на «_», ответы, имя участника в любой части пути (hw/zuev_akim/model.py), результаты запусков и файлы больше лимита загрузки остаются в комнате. Остаются и файлы, которые проверка не может прочитать: названные как ключ и файлы неизвестного вида. Данные и картинки уходят любого размера в пределах лимита. __init__.py уходит всегда, а модуль пакета на «_» — если его импортирует публикуемый код (from ._utils import plot): без него пакет не импортируется после распаковки.
Ссылка «состав папки ▾» под строкой показывает каждый файл с галочкой, а у остающихся в комнате — причину. Галочки можно менять: отметить _utils.py или submission_example.csv, снять holdout.csv. Не отметить только файл больше лимита загрузки. Если по правилам в папке нечего публиковать, отметьте нужный файл в её составе — папка отметится вместе с ним.
Папка больше 1000 файлов, например lib/ после pip install --target, не публикуется: «больше 1000 файлов».
Если сервер откатить на 0.13 или более ранний выпуск, при запуске он удалит из хранилища страниц файлы, на которые ссылаются только папки. После возврата на текущий выпуск Colloq при запуске вернёт их из комнаты, если там лежат те же байты; папку, которую так не восстановить, он уберёт со страницы и напишет об этом в журнал. Выбор папки сохраняется: «Обновить страницу» или следующее завершение занятия вернёт её из комнаты.
Проверка перед публикацией
Адрес комнаты — это право писать в неё, поэтому из ячеек и вывода он убирается всегда и без вопросов: путь /workspace/<комната>/data.csv в трейсбеке становится data.csv. Экран только сообщает: «Адрес комнаты убран из 2 ячеек — на странице его не будет».
Остальное Colloq не исправляет, а показывает в разделе «Проверка»:
- «Похоже на ключ API» — в ячейке, её выводе или отмеченном файле, с тетрадью и номером ячейки или с именем файла и ключом, показанным не целиком;
- «Похоже на имя ученика» — полное имя участника занятия в ячейке, выводе, графике plotly или отмеченном файле; одно имя без фамилии предупреждения не даёт;
- «Адрес комнаты в файле …» — текстовый файл публикуется как есть, адрес в нём не правится.
Файлы с кодом, текстом и данными до 2 МБ проверяются так же, как ячейки: utils.py с ключом, kaggle.json или список группы в CSV уходят на страницу байт в байт, поэтому их показывают в проверке, а не исправляют.
Похожая на ключ строка может быть учебной заглушкой, а полное имя — именем учёного, поэтому решает преподаватель. «Открыть в комнате» ведёт к ячейке: исправьте её там или отметьте «Проверил(а) — публиковать как есть». Пока отметки нет, кнопка публикации не нажимается. Подтверждение запоминается для этой находки; новый ключ или имя — новая находка.
Обновление при каждом завершении
Выбор делают один раз — дальше хватает кнопки завершения. Опция «Обновлять страницу при каждом «Завершить занятие»» включена по умолчанию: отмеченное запоминается, и при каждом следующем завершении этой комнаты Colloq сам пересобирает страницу.
- Ячейки из очереди выполняются и после завершения, поэтому Colloq сначала ждёт, пока они досчитаются, но не дольше двух минут. Преподаватель в комнате видит «Страница обновится, когда досчитаются ячейки», а затем «Страница занятия обновлена · 4 материала».
- Новые тетради, файлы и папки сами не добавляются: в следующий раз они ждут на экране с пометкой «новая». Отмеченную тетрадь, которую удалили из комнаты, обновление пропускает.
- Отмеченная папка перечитывается целиком: новый файл в
data/уходит на страницу по правилам для папок и проходит ту же проверку. Файлы, у которых галочку в «составе папки» меняли вручную, сохраняют это решение. - Если в проверке появилось новое — ключ, имя или адрес комнаты в файле, — страница остаётся прежней, а в комнате появляется «Страница не обновилась: …» с кнопкой «Проверить».
- «Продолжить занятие» страницу не трогает. Если занятие продолжили, страницу сняли или опцию выключили, пока ячейки досчитывались, обновления не будет, и надпись о нём пропадает.
Если занятие завершили из панели, она сообщает то же коротко: «Занятие завершено · страница занятия обновляется». Чтобы страница больше не менялась сама, снимите опцию и опубликуйте ещё раз.
Что станет публичным
Тот же список экран «Страница занятия» показывает перед кнопкой публикации.
| Публикуется | Не публикуется |
|---|---|
Отмеченные тетради — код, текст и результаты запусков: графики, таблицы, сообщения, трейсбеки и картинки в текстовых ячейках. Каждая тетрадь скачивается в .ipynb вместе с результатами и картинками. | Кто что писал и запускал. |
| Отмеченные файлы и папки — как лежат в папке комнаты. PDF открывается во встроенном просмотрщике браузера, папка скачивается одним ZIP, остальное — как есть. | Вопросы оракулу — они остаются в комнате. |
Архив «Скачать всё»: одна папка, в ней материалы и все файлы отмеченных папок по тем же путям, что в комнате, и README с названием, днём, ссылками и списком папок. После распаковки pd.read_csv('data/train.csv') и from scripts import case_cian работают без правок. | Терминал, неотмеченные тетради и файлы, список участников, адрес комнаты в ячейках и выводе. |
Имя, ключ или персональные данные, уже написанные в коде или выводе, становятся частью страницы, а проверка ловит не всё. Просмотрите отмеченные тетради сами.
Страница просит поисковые системы не индексировать её. Это не контроль доступа: любой, у кого есть ссылка, откроет страницу и передаст её дальше. Если архив одного занятия качают сразу многие, сервер отдаёт его троим одновременно (и шестерым на весь сервер), а остальные ждут очереди: загрузка просто начинается чуть позже. Только после минуты с лишним ожидания приходит «Слишком много загрузок — попробуйте через минуту». Загрузка, которая минуту стоит на месте, обрывается и освобождает очередь.
День занятия
У каждого занятия курса есть день — календарная дата по часовому поясу сервера. По нему страница курса раскладывает занятия по месяцам, проводит линию «сегодня» и решает, какое занятие прошлое, а какое следующее. Это день строки курса, а не дата публикации: материалы, выложенные за неделю до занятия, всё равно стоят на его дне.
День появляется сам:
- из плана: у строки есть поле «День занятия»; новая строка по умолчанию получает день предыдущей плюс неделя. Комната, созданная из строки или поставленная в неё, забирает день вместе с темой;
- по посещаемости: при обновлении до этого выпуска строки плана, где в тексте недели назван один день («вс, 6 сен», «06.09»), получили этот день, а уже прошедшие занятия — день, когда в комнату пришло больше всего студентов, иначе день завершения;
- при завершении: если у строки дня нет, она получает день, когда занятие завершили.
Неделя текстом («31 авг — 6 сен») показывается, пока день не задан. Исправить день можно в курсе: меню строки → «Изменить строку…». У страницы вне курса день задаёт поле «День занятия» на экране «Страница занятия»; по умолчанию это день завершения, иначе день первой публикации.
Соберите курс
В панели откройте «Курсы» и создайте курс: название, подпись и адрес. План семестра набирают кнопкой «+ Тема по плану»: тема обязательна, рядом поля «День занятия», «О чём — одна-две фразы» и отметка «Перерыв — без номера» для каникул. «Добавить в план» или Enter сохраняет строку, форма остаётся открытой для следующей.
Комнату для занятия удобнее всего создавать из курса: кнопка «Создать комнату» в строке плана или поле «Занятие курса» на экране «Новое занятие», где свободные строки курсов идут от ближайшей. Комната встаёт в свою строку, тема, день и «о чём» уже там. Уже существующую комнату ставит в строку «Поставить занятие», а «+ Добавить занятие» добавляет её в конец курса. Студенты видят тему строки, а у комнаты, добавленной без плана, — её название; поле «Название для студентов» в «Изменить строку…» задаёт своё.
Колонка «Страница» в таблице курса показывает состояние занятия: «по плану», «страница · 4 материала», «до занятия · 2 материала», если материалы выложены заранее, «снята», а у прошедшего занятия без страницы — предупреждение «Занятие прошло, страницы нет — Опубликовать…». Под адресом страницы — ссылка «Изменить материалы»: она открывает страницу занятия, где материалы добавляют, убирают и публикуют заново. В меню строки — «Страница занятия…», «Обновить страницу», «Адрес страницы…», «Открыть как студент», «Скрыть из курса» и «Снять страницу».
Дайте группе адрес /c/… один раз. На странице курса студент видит:
- блоки «Сейчас»: «Сегодня · вс, 4 окт» или «Следующее · вс, 4 окт · через 2 дня» и «Прошлое занятие · вс, 20 сен» со ссылками на материалы и архив. До начала курса верхний блок называется «Первое занятие», после конца — «Последнее занятие», а в шапке появляется «курс завершён»;
- список «Занятия» в порядке курса, с подписями месяцев («сентябрь», «январь 2027») и линией «Сегодня» между прошедшими и будущими. У занятия со страницей — ссылка и состав: «лекция · семинар · слайды · данные»; у будущего — день; в сам день — «сегодня · материалы после занятия»; материалы, выложенные заранее, подписаны «материалы до занятия»;
- перерывы без номера: «Каникулы — занятий нет»;
- занятия дальше трёх месяцев свёрнуты под «показать весь план», если их больше восьми.
«Сегодня» считается по часовому поясу сервера, а не браузера студента. Если у прошедшего занятия страницы нет, курс пишет «Материалов пока нет.» и предлагает последние опубликованные материалы. Адресов комнат страница курса не раскрывает, кроме кнопки «Войти в комнату» в день занятия (см. ниже).
Вход в комнату со страницы
В комнате остаётся то, чего на странице нет: история правок, отметки и вопросы оракулу с ответами. Чтобы к этому было легко вернуться, на странице занятия под материалами стоит блок «Комната занятия» с кнопкой «Перейти в комнату»; на телефоне это строка «Комната занятия» под кнопкой архива. В день занятия, пока оно идёт, блок «Сегодня» на странице курса превращается в «Сегодня · вс, 4 окт · идёт занятие» с кнопкой «Войти в комнату».
Кому виден вход, преподаватель выбирает на экране «Страница занятия» в разделе «Вход в комнату со страницы». Когда страница уже есть, выбор сохраняется сразу и страницу не пересобирает; до первой публикации он уходит вместе с ней:
| Вариант | Кто видит вход |
|---|---|
| «Все» (по умолчанию) | Любой, у кого есть ссылка на страницу или курс. Под кнопкой написано, что в комнате видны имена участников и их вопросы оракулу. |
| «Участники» | Те, кто входил в эту комнату с этого браузера и не удалён с занятия, и преподаватели этой комнаты. Остальные читают: «Комната открыта только тем, кто был на занятии. Если вы были — откройте эту страницу в том браузере, из которого входили». |
| «Никто» | Только преподаватели этой комнаты: со страницы вход спрятан. |
Кнопка ведёт в саму комнату, и там действуют её правила: пока занятие идёт, вошедший работает как обычный участник, после завершения — только читает. Строка курса без страницы пускает по правилу «Все»: на идущем занятии в комнату войдёт каждый, у кого есть ссылка на курс. У снятой страницы и удалённой комнаты входа нет ни у кого, включая преподавателей. Страницы, перенесённые из прежних выпусков, тоже ведут в комнату по правилу «Все»; другой вариант сохранится со следующей публикацией с этого экрана.
Страницы, опубликованные в 0.13, сохраняют записанный тогда вариант — «Участники», если преподаватель его не менял. Чтобы открыть их комнату всем, переключите вход на «Все» вручную.
При варианте «Участники» в другом браузере или приватном окне кнопки не будет, и новичку ссылку на комнату даёт преподаватель.
Короткие и старые адреса
Для страницы занятия или курса можно задать имя из строчных латинских букв, цифр и дефисов длиной от 3 до 64 символов; начало и конец — буква или цифра. Например, /c/python-autumn. Первая публикация из курса с таким именем получает адрес вида /p/ml-strong-04 (имя курса и номер занятия), если он свободен; перенумерация строк его потом не меняет. Изменить адрес страницы можно в любой момент — на экране «Страница занятия» или пунктом «Адрес страницы…» в меню строки курса.
После переименования прежний адрес продолжает вести к текущему материалу и остаётся занят. Освобождение прежнего имени прекращает работу старой ссылки и позволяет использовать его снова. Освобождайте его только тогда, когда готовы изменить уже розданный адрес.
Снять страницу или удалить комнату
«Скрыть из курса» в меню строки курса (и в меню занятия в списке «Занятия», если оно стоит в курсе) нужно для занятия, выложенного заранее: например, накануне семинара. Пока оно скрыто, студенты видят на месте занятия обычную строку плана с номером, днём и темой строки (если темы нет — «Занятие 3», а не название комнаты). Страница по ссылке /p/…, её материалы и архив отвечают, как будто страницы нет; кнопки «Войти в комнату» у занятия нет; в карточках ссылок оно тоже не показывается. В панели строка подписана «Скрыто из курса», а преподаватели курса открывают страницу как обычно, с пометкой наверху: так её можно проверить до показа. Если комната стоит в двух курсах, скрытие в одном закрывает страницу и во втором; там строка подписана «Скрыто в другом курсе». «Показать в курсе» там же возвращает строку, страницу и материалы без изменений: ничего не снимается с публикации и не собирается заново. Скрыть и показать может тот, кто правит строки курса; каждое действие попадает в журнал действий.
«Снять страницу» в меню строки курса (в списке «Занятия» — «Снять страницу с публикации») закрывает её: по ссылке студенты видят, что преподаватель её снял. «Вернуть страницу» там же или на экране «Страница занятия» открывает её снова. Публикация и архивация не изменяют права живой комнаты.
Удаление комнаты по умолчанию сохраняет страницу; внимательно прочитайте варианты в подтверждении удаления. Материалы хранятся отдельно от комнаты, поэтому страница переживает её удаление, а строка курса продолжает вести к ней. Такие страницы собраны на странице «Курсы» в разделе «Страницы без комнаты»: их можно снять («Снять страницу») или вернуть («Вернуть страницу»), а снятую страницу владелец может удалить навсегда. На экране «Страница занятия» у такой страницы остаются только её материалы: лишнее можно «Убрать со страницы» вместе с его картинками, а добавить новое уже не из чего.
Файлы страниц лежат в data/page-files/ и входят в резервную копию сервера; одинаковый файл в разных страницах хранится один раз. Но страница не заменяет копию: в ней нет всех рабочих файлов, конфигурации, секретов и данных комнаты.
Старые страницы и ссылки
Страницы, опубликованные до появления страниц занятий, при первом запуске нового выпуска стали страницами с одним материалом «Тетрадь»: последнее опубликованное состояние тетради с результатами, содержанием и архивом. Шагов и отмеченных моментов на страницах больше нет; отметки в панели «История» остаются в комнате как точки восстановления.
Розданные ссылки продолжают работать: /p/<адрес>/<номер шага> открывает страницу занятия, а прежняя ссылка на скачивание тетради ведёт к скачиванию первой тетради страницы, теперь с результатами запусков.
Импорт из GitHub забирает теперь и PDF с Markdown: слайды и README из репозитория попадают в комнату, а оттуда — на страницу занятия.
Статической выгрузки курса в репозиторий (make site) больше нет: страницы курса и занятий живут только на вашем сервере, а офлайн-копию занятия даёт его архив «Скачать всё».