Saicheg / hexlet-2021

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Алгоритм примерно следующий:

  • Для сдачи всех заданий каждому нужно будет форкнуть этот репозиторий.
  • Каждый участник курсов должен в этом репозитории создать папку со своим именем и фамилией ( например Yukihiro_Matsumoto ).
  • Каждое задание должно выполняться в отдельной ветке и для него необходимо создать отдельную папку, которая будет отражать номер задания. ( например для задания 1 - Yukihiro_Matsumoto/1/ )
  • После завершения задания - нужно выслать pull request ( он же далее PR ) в master-ветку этого репозитория. Формат названия PR должен быть имя_фамилия - номер задания ( например Yukihiro_Matsumoto - 1 ).
  • После того как вам PR пройдет ревью от нескольких студентов и ментора - ментор зальвает ваше задание в основной репозиторий. Именно этот момент и будет считаться временем сдачи задания.

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

Чтобы показать все прелести языка Ruby вам придется пройти через сложный путь к просветлению. На выходе вы получите незабываемые впечатление и навыки написания кода согласно тому, как все привыкли его видеть!

  1. Настраиваем локальное окружения для запуска ruby.
  2. Идем на сайт и скачиваем архив с файлами (koans).
  3. Распаковываем архив и заходим внутрь распакованной папки.
  4. Запускаем команду rake и видим результат выполнения koans.
  5. Фиксим непройденные 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
  1. Повторяем шаг 3.
  2. Если все assert'ы прошли успешно - то вы великолепны! Запечатлите этот момент с помощью записи экрана, чтобы прикрепить это потом к PR.
  3. Profit!

Как доказать, что я справился

  • Все решения ( вместе с кодом решения ) должны быть залиты в папку, которая отражает номер текущего задания.
  • Видео, прикрепленное к PR, обязательно должно показывать, что все koans пройдены.

Дедлайн

2021-04-05 19:00:00 UTC+3

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

На Руси и на чужбине давненько ходят легенды о том что 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

About


Languages

Language:Ruby 100.0%