Нам нужны твои мозги

Хотите расти как разработчик и найти крутую работу? Не протирайте штаны — займитесь Open Source проектами. Так легче всего попасть в лучшие команды разработчиков и положить себе в резюме настоящий проект, вместо нелепых «примеров кода». Но найти подходящий проект для участия сложно. Начинаются лень и отговорки, а за ними — отсутствие профессионального роста, критики по-настоящему крутых программистов, уныние и застой.

На Cult of Martians мы собираем интересные задачи для современных веб-программистов. Можно выбрать подходящую по сложности, продолжительности и специализации. Задачи не выдуманы «из воздуха» — каждая решает насущную проблему, и решить ее можно через создание нового Open Source проекта или улучшение существующего. Решайте задачи, прокачивайтесь, присылайте решение на оценку. Лучших могут пригласить к себе на работу компании, программистам которых понравится ваше решение.

Бэк: Добавить новые источники данных в Ossert: Twitter

Для уверенных в себе, задача на несколько дней

Нужно добавить в Ossert новые источники данных. Отличным кандидадатом с достаточно богатым API является Twitter.

Это позволит измерить еще один важный аспект развития Open-Source библиотек — хайп, реакцию на посты про проект, а также количество заинтересованных проектом.

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

Как это должно работать?

Сейчас сбор информации уже работает для RubyGems, GitHub, Bestgems и StackOverflow. Нужно совместимым образом организовать сбор с новых источников.

Кейс с Twitter представляет особую сложность, так как поиск по истории твитов доступен только на 7 дней назад. Таким образом, это будет первый источник данных с инкрементальным сбором. То есть, нужно побороть возможность утраты уже накопленных данных.

Также, стоит отметить, что у Twitter API нет схемы, так что придется продумать валидации исходящих и распознавание получаемых данных.

Советы по реализации

module Ossert
  module Fetch
    class Twitter
      def initialize(project)
        ...
      end

      def process
        # Метод сбора основных метрик по проекту
      end
    end
  end
end

Для этого нужно проанализировать возможность API вашего источника данных и выбрать:

  1. параметры для сбора;
  2. полезные метрики, которые можно измерить на их основании.

Рекомендации:

  • Собрать охват по постам с URL проекта на GitHub или по строке "<author>/<project name>"
  • Охват (количество пользователей, которые увидели информацию) = количество твитов о геме * подписчиков авторов твитов + количество ретвитов оригинальных твитов * подписчиков ретвитеров
  • Количество ретвитов/лайков/комментариев по постам о проекте

У нас нет возможности собрать полную историю по запросам API, поэтому предлагается для всех метрик Twitter использовать Moving Average за семь дней. То есть, мы каждый день собираем данные за последние 7 дней и считаем среднее значение (с пересечением усредняемых данных).

В Ossert данные выводятся по кварталам, так что для Twitter потребуется как минимум отдельный способ хранения.

Также неизвестными являются ограничения на количество запросов, хотя надо продумать как сделать возможной синхронизацию более чем 100K гемов.

Бонус

Если получится организовать надежный сбор, то метрики Twitter будут удостоенны отдельного раздела на ossert.evilmartians.io из-за повышенной сложности сбора и отличного фрейминга по времени.

Инструкции по выполнению

  1. Форкнуть проект Ossert на GitHub.
  2. Реализовать необходимый функционал.
  3. Сделать Pull Request.