Skip to content

Kwynto/funbox_qt_elixir

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FunBoxQTElixir

Выполненное квалификационное задание на вакансию Elixir-разработчик в FunBox

Результат: После рассмотрения кода потенциальным работодателем, был получен ответ вынуждены отказать и список недочетов. Все недочеты перечислять не имеет смысла, просто всем возможным соискателям имеет принять как должное, мой код является примером того, как делать не надо. Делайте по-другому почти всё и получите другой результат.

Запуск проекта FunBoxQTElixir:

  • Перейдите в папку с проектом, например 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

About

Elixir qualification task for FunBox

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published