Алгоритм примерно следующий:
- Для сдачи всех заданий каждому нужно будет форкнуть этот репозиторий.
- Каждый участник курсов должен в этом репозитории создать папку со своим именем и фамилией ( например Yukihiro_Matsumoto ).
- Каждое задание должно выполняться в отдельной ветке и для него необходимо создать отдельную папку, которая будет отражать номер задания. ( например для задания 1 - Yukihiro_Matsumoto/1/ )
- После завершения задания - нужно выслать pull request ( он же далее PR ) в master-ветку этого репозитория. Формат названия PR должен быть имя_фамилия - номер задания ( например Yukihiro_Matsumoto - 1 ).
- После того как вам PR пройдет ревью от нескольких студентов и ментора - ментор зальвает ваше задание в основной репозиторий. Именно этот момент и будет считаться временем сдачи задания.
Чтобы показать все прелести языка Ruby вам придется пройти через сложный путь к просветлению. На выходе вы получите незабываемые впечатление и навыки написания кода согласно тому, как все привыкли его видеть!
- Настраиваем локальное окружения для запуска ruby.
- Идем на сайт и скачиваем архив с файлами (koans).
- Распаковываем архив и заходим внутрь распакованной папки.
- Запускаем команду
rake
и видим результат выполнения koans. - Фиксим непройденные assert'ы:
4.1 Ищем assert's вида:
assert_equal __, names
. 4.2 Заменяем__
на значение переменной справа.
К примеру,
def test_non_parallel_assignment
names = ["John", "Smith"]
assert_equal __, names
end
names
у нас равно ["John", "Smith"]
, соответственно меняем код следующим образом
def test_non_parallel_assignment
names = ["John", "Smith"]
assert_equal ["John", "Smith"], names
end
- Повторяем шаг 3.
- Если все assert'ы прошли успешно - то вы великолепны! Запечатлите этот момент с помощью записи экрана, чтобы прикрепить это потом к PR.
- Profit!
- Все решения ( вместе с кодом решения ) должны быть залиты в папку, которая отражает номер текущего задания.
- Видео, прикрепленное к PR, обязательно должно показывать, что все koans пройдены.
2021-04-05 19:00:00 UTC+3
На Руси и на чужбине давненько ходят легенды о том что Ruby - мертв и что все проекты на этом языке давно канули в лету. До недавнего времени только самые стойкие и смелые знали что это лишь слухи, намеренно распускаемые разведкой ЦРУ, дабы снизить популярность прорывных японских технологий. Но час пробил. Прямиком из архивов КГБ к нам попал в руки абсолютно засекреченный список из веб-приложений, написанных на Ruby on Rails. Именно вам предстоит выполнить важную миссию и проверить что Ruby не так мертв, как это утверждают.
В рамках задания мы пишем консольную утилиту, которая на вход получает CSV список из URL и проверяет какие из приложений еще живы и отвечают на HTTP запросы.
Пример файла для работы доступен по ссылке.
Пример запуска и выполнения приложения:
./checker rails.csv
circlecityvbc.com - 200 (314ms)
git.mnt.ee - 404 (89ms)
ralphonrails.com - 200 (412ms)
redmine.penflip.com - 500 (78ms)
expreso44a.co - ERROR (getaddrinfo: nodename nor servname provided, or not known)
Total: 5, Success: 2, Failed: 2, Errored: 1
Расшифруем немного вывод:
Для каждого проверенного URL вам необходимо выводить сам URL, HTTP статус, который вернул запрос, и общее время которое было затрачено на получение ответа.
В случае если во время запроса произошла ошибка - то вам нужно вывести подробности этой ошибки.
В конце работы приложения необходимо вывести статистику о том сколько URL вам удалось проверить, сколько из них удачные ( 2xx и 3xx статусы ), сколько неудачных ( 4xx и 5xx статусы ) и сколько произошло ошибок.
Приложение также может получать дополнительные параметры, которые немного меняют его логику работы. Параметры можно комбинировать. Подробности:
- Параметр
--no-subdomains
- игнорирует все доменные имена второго и более уровней и проверяет только домены первого уровня:
./checker --no-subdomains rails.csv
circlecityvbc.com - 200 (314ms)
ralphonrails.com - 200 (412ms)
expreso44a.co - ERROR (getaddrinfo: nodename nor servname provided, or not known)
Total: 3, Success: 2, Failed: 0, Errored: 1
- Параметр
--filter=sales
, который ищет определенное слово в содержании страниц и выводит их только в случае нахождения этого слова на странице:
./checker --filter=payment rails.csv
circlecityvbc.com - 200 (314ms)
Total: 1, Success: 1, Failed: 0, Errored: 0
- Параметр
--exclude-solutions
, игнорирует все приложения, которые скорее всего являются различными open source решениями наподобии redmine или gitlab. Логику фильтрации мы оставляем за вами:
./checker rails.csv
circlecityvbc.com - 200 (314ms)
git.mnt.ee - 404 (89ms)
ralphonrails.com - 200 (412ms)
expreso44a.co - ERROR (getaddrinfo: nodename nor servname provided, or not known)
Total: 4, Success: 2, Failed: 1, Errored: 1
До того как задание будет проверено ментором в этот раз вам нужно будет сперва пройти автоматическое ревью робокопом и исправить все его комментарии.
В текущем решении стоит уделить отдельное внимание самой архитектуре приложения. Вместо того, чтобы написать весь код в одном файлике, подумайте какие смысловые блоки и классы вам тут нужны. Мы ожидаем минимум 2 класса в рамках данного домашнего задания.
Для этого задания нужно будет написать минимум 10 тест-кейсов.
Для парсинга параметров мы рекомендуем не изобретать велосипедов, а воспользоваться или стандартной библиотекой или одним из многочисленных гемов.
Для локальной отладки рекомендуем сделать небольшой файлик в 5-10 доменов чтобы быстро все запускать вместо того чтобы всегда использовать файлик в 10_000 строк из примера.
Лекция по тестированию будет ближе к концy выполнения домашнего задания, поэтому для тех кого это требование испугало - учитывайте это при планировании выполнения домашнего задания.
- Параметр
--parallel=N
- проверяет все домены параллельно вN
потоков:
./checker --parallel=5 rails.csv
circlecityvbc.com - 200 (314ms)
git.mnt.ee - 404 (89ms)
ralphonrails.com - 200 (412ms)
redmine.penflip.com - 500 (78ms)
expreso44a.co - ERROR (getaddrinfo: nodename nor servname provided, or not known)
Total: 5, Success: 2, Failed: 2, Errored: 1
- Все решения ( вместе с кодом решения ) должны быть залиты в папку, которая отражает номер текущего задания.
- Видео, прикрепленное к PR и залитое на внешний сервис, обязательно должно показывать, что утилита работает и что все параметры реализованы.
2021-04-19 19:00:00 UTC+3