Выполненное квалификационное задание на вакансию Elixir-разработчик в FunBox
Результат:
После рассмотрения кода потенциальным работодателем, был получен ответ вынуждены отказать
и список недочетов.
Все недочеты перечислять не имеет смысла, просто всем возможным соискателям имеет принять как должное,
мой код является примером того, как делать не надо.
Делайте по-другому почти всё и получите другой результат.
- Перейдите в папку с проектом, например
cd ./funbox_qt_elixir
- Установите пакеты зависимостей
mix deps.get
- Откройте конфигурационные файлы
./config/dev.exs
,./config/test.exs
,./config/prod.exs
и замените токен в строкеconfig :funbox_qt_elixir, :auth_gha, ...
. Почему нужно сделать эту замену объясненно ниже в разделе "Важно". - Запустите сервер
mix phx.server
илиiex -S mix phx.server
Теперь Вы можете открыть localhost:4000
в вашем браузере.
- Для запуска тестов перейдите в папку с проектом, например
cd ./funbox_qt_elixir
- Установите пакеты зависимостей
mix deps.get
- Настройте аутентификацию в файле
./config/test.exs
в строкеconfig :funbox_qt_elixir, :auth_gha, ...
. - Если вы находитесь внутри директории с проектом и все зависимости были удовлетворены ранее, то выполните команду
mix test
- Для управления состоянием используется модуль FunboxQtElixir.AwesomeServer
- Состояние хранится в DETS, при каждом запуске сервера и через каждые сутки после запуска производится опрос GitHub
- Все парсеры расположенны в модуле FunboxQtElixir.AwesomeParse
- Все функции опроса GitHub API расположены в модуле FunboxQtElixir.AwesomeProbing
- Количество потоков для паралельного опроса GitHub задается в конфигурации через
config :funbox_qt_elixir, :count_flow, 15
- Технология опроса GitHub устанавливается в конфигурации через
config :funbox_qt_elixir, :enquiry_gha, ...
- Авторизация GitHub API задается в конфигурации через
config :funbox_qt_elixir, :auth_gha, ...
, если :enquiry_gha == true - Используется единственный контроллер FunboxQtElixirWeb.PageController
- В проекте использованы дополнительные пакеты :earmark > 1.4, :httpoison > 0.11 и :floki > 0.29
- В конфигурационных файлах есть одинаковые строки вида
config :funbox_qt_elixir, :auth_gha, ...
. Эта запись конфигурации дает возможность авторизоваться на GitHub через OAuth. Строка авторизации имеет видLOGIN:TOKEN
. Токен авторизации удаляется через 1 год поле последнего использования, но если токен будет скомпроментирован, то токен удаляется немедленно. Сам факт загрузки исходного кода с элементами Basic Authentication очень хорошо опознается GitHab'ом и мгновенно приводит к удалению токена. Если этот код предназначался для Вас, то значит я сопроводил его актуальным рабочим токеном в переписке. Если у Вас нет токена, то напишите мне и я постараюсь в картчайшие сроки сгенерировать новый токен. Также Вы можете сами сгенерировать токен в своем аккаунте GitHub черезSetings->Developer settings->Personal access tokens->Generate new token
, ваш токен будет привязан к вашей учетной записи и Вам нужно будет указать в конфигурации не только токен, но и ваш логин. - В модуле FunboxQtElixir.AwesomeProbing есть функция enquiry_github_data_via_floki/2, которая предоставляет альтернативный метод опроса GitHub через html-парсер Floki вместо GitHub API. Данная функция предназначенна только для демонстрации альтернативного метода опроса. Эта функция специально замедленна через таймаут, для того чтобы не получить блокировку от GitHub'а. Кроме того, при использовании этой функции следует уменьшить количество потоков до 2 (двух).
- Задание выполнил: Завизион Константин
- Контактная почта: kwynto555@gmail.com