Клиент мечты


В последние годы мы наблюдаем рост популярности проектов, развиваемых сообществами. Разработка программного обеспечения, аппаратные средства, социальная активность, краудсорсинг, производство, образование - тысячи сообществ растут, чтобы добиваться общих целей. Создание нового сообщества может быть сложной задачей и инструменты используемые для построения сообщества играют немаловажную роль. В этой статье я затрону тему инфраструктуры и сервисов, используемых сообщеcтвом.

Сообщество людей связано инструментами для совместной работы. Такими инструментами для проектов с открытым исходным кодом обычно являются вики, распределённые системы управления версиями, системы отслеживания ошибок, IRC, форумы и многие другие. Решение об используемых инструментах может быть достаточно важным, потому что зачастую они определяют степень участия сообщества в проекте. Если инструменты не имеют поддержки совместной работы или слишком сложны для использования, то странно ожидать помощи от сообщества. Джоно Бэкон (бывший менеджер сообщества Ubuntu) порекомендовал список интрументов для проектов с открытым исходным кодом. Большинство этих инструментов прошли проверки временем и являются стандартом де-факто: вики, IRC, Etherpad и т.д. Но в одном я с ним не согласен: открытый проект не должен использовать закрытые сервисов или инструменты. И он этот момент сам упоминает в своей статье:

Социальные медиа это важная часть в жизни открытого проекта. Аккаунты в социальных медиа являются важным инструментом для привлечения аудитории к вашему проекту, а также распространения новостей и информации в вашем сообществе. Казалось бы тут всё просто - размещай тексты в желаемой социальной сети и собирай лайки и фолловеров. Но тут есть пробема: каждая сеть имеет различные нормы, в отношении которого материалы получают лучшие результаты. Например, вы можете часто на твитить и получить много кликов и показов, в то время как на Facebook такие вещи немного более консервативны. По отзывам профессионалов каждый аккаунт в соцсети является отдельным продуктом (тут ещё видео есть) и требует время на обслуживание. Необходим план с регулярным потоком материала, чтобы поддерживать интерес аудитории. Размещение постов должно происходить в наиболее подходящее время. Это означает, что вы должны иметь план по размещению контента и в любое время контект должен быть готов к публикации. Вы можете делать это вручную, используя браузер или приложения для социальных сетей, но опыт показывает, что это требует много времени и становится очень скучным занятием при использовании нескольких сетей. В качестве решения большинство людей использует специальные сервисы для ведения аккаунтов. Мы в проекте OpenVZ не миновали этот этап и тоже попробовали некоторые из них: Amplifr, Hootsuite, Buffer. Но ни один из них нам не подошёл.

Тогда мы попробовали сформировать наши требования для инструмента, который поможет нам с публикацией постов в соцсетях:

  • иметь возможность публикации отложенных постов
  • иметь возможность отложенных ретвитов
  • простота использования
  • иметь возможность участия других людей
  • план размещения твитов
  • поддержка как минимум для Twitter (потому что наиболее активная аудитория в соцсетях у наших Twitter аккаунтов, нежели в других соцсетях)
  • открытость
  • бесплатность (а какой открытый проект готов платить за платный сервис или инструмент?)

Открытость предполагает, что это должен быть или сервис с доступным исходным кодом или самостоятельный инструмент. Но ни один из существующих клиентов нам не подходил. Хотя twty, t, rainbowstream, ttyter, earthquake показались удобными инструментами, но все они не подходили под остальные наши требования. Тогда мы решили сделать такой клиент сами. Так как Twitter API открытое, то существует много библиотек под любые языки программирования. Нам было удобно использовать Python, поэтому использовали бибилотеку tweepy и написали свой клиент twisource. Размер кода у него небольшой, но клиент полностью удовлетворяет нашим требованиям.

Теперь наш процесс публикации твитов выглядит так:

  • все запланированные твиты хранятся в текстовом файле специального формата
  • все кто заинтересован в публикации твита клонирует себе репозиторий с этим текстовым файлом и добавляет туда свои твиты
  • потом создает пулл реквест или присылает патч ментейнеру репозитория с твитами
  • если ментейнер одобряет твиты, то они попадают в репозиторий
  • раз в минуту на сервере запускается скрипт и публикует твиты запланированные на текущее время

Помимо удовлетворённых требований мы получили следующие плюшки:

  • публикация отложенных собщений с помощью crontab(5) или CI (например Jenkins)
  • отложенный ретвит чужого твита
  • модерация предложенных твитов
  • легкий поиск в истории твитов
  • подпись для твитов со ссылкой на сайт проекта
  • легко интегрировать с проверкой орфографии
  • получили процесс публикации твитов такой же как для написания кода, а это очень удобно для разработчиков. К тому же такой процесс позволяет разделить право предложить твиты и право опубликовать их
  • текст можно составлять в любимом текстовом редакторе
  • возможность совместного ведения твиттер аккаунта, то есть привлечь для этой цели сообщество (и каждый может предложить твит!)

Будет здорово, если другие открытые проекты попробуют у себя такой же процесс. Я рад услышать фидбек. :)

Метки: opensource openvz productivity