Домашние задания

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

Настройка окружения

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

  • В вашей учетной записи в Хекслете не подтверждена почта. Это одна из самых частых причин возникновения ошибок.
  • «кракозябры» из-за имени пользователя на русском языке
  • несовместимость софта с системой нативно (например, Docker под Windows или МacOS)
  • ошибки при построении путей к каталогам
  • программа не запускается из-за некорректно прописанных путей в PATH.

Мы рекомендуем работать в *nix-системах, так как они наиболее совместимы с софтом, который вы будете изучать и применять при выполнении домашних заданий. Если вы уже используете Linux или Mac — отлично. Ознакомиться с рекомендуемыми требованиями к компьютеру и ОС можно в этой статье.

Либо если вы работаете в Windows 10 или старше, установите WSL (Windows Subsystem for Linux) или разверните виртуальную машину в VirtualBox. Это позволит получить все преимущества Linux без установки отдельной системы.

Пройдите курс по настройке окружения на Хекслете и настройте систему в соответствии с ним. Для каждого языка программирования это свой курс, его можно найти в соответствующей профессии.

Краткие инструкции по установке языков программирования мы сохранили в репозитории.

Для настройки вам понадобятся навыки работы с терминалом и Git. Получить их помогут наши бесплатные курсы:

Настройка утилиты Hexlet CLI

Чтобы упростить и автоматизировать работу с домашними заданиями, мы написали утилиту hexlet/cli. С её помощью можно связать аккаунты студента в Хекслете и на GitHub, создать репозиторий для сохранения решений и скачать домашние задания со всеми необходимыми файлами.

Чтобы ей воспользоваться:

  1. Установите Node.js по инструкции.
  2. Установите hexlet/cli командой npm install -g @hexlet/cli  

Работа над домашними заданиями происходит на компьютере студента.

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

  • Текст задачи (файл README.md)
  • Тесты кода
  • Линтер
  • Описание зависимостей
  • Пустой файл, в который студент запишет свое решение

Команды в утилите Hexlet CLI

Утилита вызывается по имени hexlet , и содержит несколько команд:

  • assignments init — создает репозиторий с именем hexlet-assignments в профиле студента на GitHub. В этот репозиторий будут отправляться все домашние задания, которые вы выполняете на Хекслете, независимо от учебной программы. Для всех учебных программ репозиторий будет один. Имя hexlet-assignments для репозитория должно быть свободно. Одновременно с созданием репозитория команда  assignments init  совершает еще два действия:
    • Создает конфигурационный файл
    • Создает директорию Hexlet/hexlet-assignments в домашней директории на компьютере студента
  •  assignment download — скачивает домашнее задание

    Эта команда обращается к общей директории Hexlet/hexlet-assignmentsи создает там новые файлы:
    • Поддиректорию с именем курса
    • Поддиректорию с домашним заданием
    • Теперь там будет храниться все необходимое для домашнего задания: файлы для решения, текст задачи, тесты, линтер и прочее. То же самое можно сделать и без команды: надо зайти на страницу домашней работы, найти ссылку на нужное задание и скачать его.
  •  assignment submit — отправляет текущее домашнее задание в репозиторий на GitHub

    Выполненное задание нужно отправить на проверку — именно это и делает команда  submit . Она выполняется из локальной директории домашней работы и пушит в ваш удаленный репозиторий все файлы, связанные с текущим заданием. Когда решение студента готово, тесты и линтер локально пройдены, то можно выполнить submit. На GitHub также подключены тесты и линтер.
  •  assignment reset — скачивает новую версию домашнего задания.

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

Команды  assignment download  и  assignment reset  создают резервную копию домашнего задания, над которым идет работа. Если выполнить команду  assignment reset  или  assignment download , то проделанная работа не потеряется. Старая версия с вашими наработками сохранится в новой директории с текущими датой и временем в названии.

Аргументы

У команд  assignment download  и  assignment reset  есть аргумент  lesson-url . Ниже мы покажем, как он используется и где взять нужные значения:

  •  lesson-url  — адрес урока с домашним заданием. Можно взять его из адресной строки урока или скопировать уже готовую команду для скачивания на странице домашнего задания

Опции

  •  --github-token  – Personal access token из GitHub
  •  --hexlet-token  – Ваш персональный токен Хекслета

Использование

Перед тем, как начать работу с домашним заданием, нужно выполнить инициализацию проекта. Это можно сделать с помощью команды  hexlet assignments init . У нее есть несколько опций:

  •  --github-token  – Обязательная. Personal access token (classic) из GitHub. Создайте свой Personal access token (classic) здесь. При создании токена сделайте его бессрочным и проставьте разрешения на repo и workflow

  •  --hexlet-token  – Обязательная. Ваш персональный токен Хекслета. Этот токен автоматически подставлен в команду на странице домашнего задания
  •  --hexlet-dir  – Необязательная. Директория, в которую будут скачиваться домашние задания. По умолчанию это будет директория Hexlet в вашей домашней директории

Перейдите на страницу домашней работы, которую нужно скачать. На странице по ссылке «Инициализация утилиты» идентификатор hexlet-token уже подставлен в команду для инициализации:hexlet assignments init --hexlet-token=<your hexlet="" token=""> --github-token=<token from="" github=""> </token></your>

Для инициализации проекта остаётся скопировать команду, вставить свой Personal access token (classic) из GitHub и выполнить ее: 

# Можно вызывать из любого каталога 
hexlet assignments init --hexlet-token=<your hexlet token> --github-token=<token from github>

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

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

 # Эта команда скачивает на компьютер домашнее задание с указанным lesson-url hexlet assignment download <https://ru.hexlet.io/courses/java collections/lessons/lists/assignment_unit> 

 # Если во время выполнения появилась новая версия
 # Эта команда скачивает новую версию домашнего задания
 #Предыдущую версию и ваши наработки она скопирует в новую директорию
hexlet assignment reset <https://ru.hexlet.io/courses/java-collections/lessons/lists/assignment_unit>

Команда  assignment submit  выполняется без аргументов из директории выполненного домашнего задания или любой его поддиректории:

 # Отправляет выполненное домашнее задание на GitHub
 # Выполняются команды git add, commit, push
 hexlet assignment submit 

Если вы хотите вспомнить весь список актуальных команд, можно вывести справочную информацию: 

 hexlet assignments --help

 hexlet assignment --help</code><code>

Что-то не работает

Если возникают ошибки, убедитесь, что:

  • Персональный токен GitHub имеет необходимые разрешения. Если после отправки домашнего задания при помощи команды submit проверка на GitHub не начинается, проверьте, что токен имеет разрешение на запуск workflow.
  • Вы используете *nix-систему. В Windows (не считая WSL) могут быть такие проблемы: «кракозябры» в именах файлов, неправильный путь к домашнему каталогу, конфликты софта и пр. Если у вас Windows, установите Linux или настройте WSL.
  • У вас есть права администратора в операционной системе. Если какая-то команда возвращает ошибку доступа (permission denied), должна быть возможность выполнить её от имени администратора. Например, sudo в Linux.
  • Установлена актуальная версия hexlet/cli. Мы регулярно исправляем ошибки и дорабатываем утилиту, после обновления старая версия может перестать работать. В таком случае установите утилиту заново.
  • В командах утилиты нет опечаток. Сравните команды с теми, которые написаны в документации и внутренней справке утилиты, и если что-то не так — просто исправьте команду и попробуйте снова.
  • Обычно провайдер разрешает запросы ко всем необходимым ресурсам. Но в некоторых регионах могут быть заблокированы некоторые ресурсы, необходимые для работы с домашними заданиями, например, GitHub, и другие.
  • Установите hexlet/cli командой  npm install -g @hexlet/cli 
  • Если ни один из пунктов выше вам не помог, то напишите в чат группы в Mattermost, наставник поможет вам разобраться.

 

👆 На этом пока всё