Jump to content
EvilBlades Community

EvilBlades

  • entries
    3
  • comments
    0
  • views
    15786

Форум как точка взаимодействия или наш опыт использования трех решений


Sergey

15099 views

 Share

Что такое форум? Это, в своем роде, некоторая площадка для общения некоторого сообщества людей, объединенных какими-либо интересами. Важен ли он? Безусловно, да. Причем как для посетителей, так и для организаторов этого форума. Для посетителей это некоторая база знаний, которая накапливается сама собой с течением времени (и, безусловно, требует работы над ней), для организаторов это один из каналов взаимодействия с посетителями для донесения важной информации. По сути, это довольно простая истина, которая не меняется уже в течение более десяти лет, меняется лишь технология, но не сам принцип. Стоит ли гнаться за новизной и есть ли она? Об этом мы и поговорим в приложении к нашему опыту.

1. Точка старта

Уже более года назад, в марте 2014 года, мы озадачились вопросом поиска решения для организации форума. Признаться, мы не уделяли этому много внимания, поэтому выбор был сделан по довольно простым критериям:

  • Доступность, свободная распространяемость
  • Стабильность
  • Наличие минимально необходимой экосистемы

При этом мы не задумывались о функционале, т.к., по сути, не считали это важным аспектом в принятии решения. Поэтому выбор был довольно оперативно сделан в пользу Simple Machines Forums (SMF) версии 2.х. По сути, довольно простой, в меру функциональный и удобный форум, который и по сей день сохранился на нашем ресурсе как элемент истории. Со временем стала ощущаться некоторая нехватка расширений и экосистемы, в то же время, некоторые вещи все же доставляли ряд проблем, тот же редактор WYSIWYG, который мы до этого обновили. Несмотря на это, форум, в целом, был очень стабильным и в этом плане вопросов не вызывал. Нам удалось найти довольно удачную тему (стоит отметить, платную) и сделать UI форума весьма приятным. Но все же хотелось привнести некоторую интерактивную жилку в процесс общения - добавить модуль репутации с расширенными параметрами и прочее-порчее. Здесь SMF и начал немного сдавать позиции. 

В какой-то момент в "техногиковскую" голову закралась мысль о поиске чего-то принципиально нового, не похожего на десятки типовых форумных решений, которые, если откинуть все расширения и особенности пользовательского интерфейса, равны как на подбор. И после некоторых скитаний по просторам интернета такое решение нашлось. Точнее, даже два. Ими стали Vanilla Forums и NodeBB. Vanilla Forums на тот момент не очень понравился, хотя, допускаем, это могло быть и весьма субъективным ощущением. NodeBB же выглядел как нечто, не идущее по стопам большинства, что весьма привлекало. Написан на NodeJS, все взаимодействие на WebSocket'ах с вытекающими отсюда интересными UI/UX особенностями. Приходящие ПМ-сообщения и новые темы без обновления страницы как push-уведомления и ряд других особенностей - все это казалось весьма привлекательным решением. Тут же нашелся и конвертор из SMF в NodeBB и сомнений не осталось - мы перешли на новую платформу. 

2. В погоне за новизной и технологиями

И вот мы на новой платформе версии 0.4.х. Необычной, в новом обличии, не похожим ни на один другой форум. Был ли этот переход на NodeBB верным решением? Трудно однозначно ответить, но, вероятно, большая часть посетителей ответит "нет" нежели чем "да".  И это довольно легко объяснимо как минимум весьма необычной главной страницей, которая сразу же вызвала ряд нареканий.

nodebb.thumb.png.ed3102c65667a4f1c3c63e8

И, пожалуй, трудно не согласиться с доводами наших посетителей. По сути, большинство посетителей стало ориентироваться по блоку "последние сообщения". Что удивительно - отсутствовали маркеры непрочтенных разделов, что, наверно, являлось одной из самых больших проблем. Также ряд проблем доставляли некоторые текущие недоработки. Но время шло, сначала мы перешли на версию 0.5.х, затем добрались до 0.6.х. По сути, добавлялся некоторый функционал, но принципиально ничего не менялось и главная страница по-прежнему оставалась весьма сложной для восприятия для большинства игроков. Добавляла масла в огонь и разметка Markdown при написании постов - здесь не было привычных WYSIWYG-редактора и BB-кодов, приходилось осваивать базовые вещи новой разметки.  В то же время, нельзя не отметить и плюсы - так, например, чат (ПМ) оказался весьма удобным и оперативным, он не был похож на привычную концепцию ПМ-сообщений других форумов, а, скорее, напоминал инструмент обмена микро-сообщениями - быстро и удобно. 

В какой-то момент мы сами включились в разработку этого решения и, помогая команде NodeBB некоторыми pull request'ами и баг-рапортами, немного продвинулись вперед. Как минимум, удалось хотя бы немного преобразить главную страницу.

nodebb-v2.thumb.png.44d40999ddcb42749e47

По крайней мере, удалось привести отображение разделов в классический вид и добавить долгожданные маркеры новых сообщений. 

Тем временем подкралась версия 0.7.х и мы вновь принялись готовиться к обновлению и опять столкнулись с проблемами. Судя по всему, в текущей экосистеме не было сообществ с количеством пользователей в несколько тысяч, а у нас их было весьма много. И с очередным обновлением мы получили новый ряд проблем. Вооружившись инструментами отладки, мы начали бороться с проблемами. Найдя все проблемы, мы сообщили их решения команде разработчиков NodeBB, но, увидев версию 0.7.х в деле с новой темой, вновь разочаровались. Все же количество недоработок вкупе с нестандартной концепцией заметно затрудняли процесс взаимодействия на таком форуме.Новая тема Persona выглядела уже куда лучше, чем стандартная Lavernar в версии 0.6.х, но переход на новую версию означал изменение API и несовместимость нашей темы с обновленным форумом. 

nodebb-v3.thumb.png.8ddb827f7b1283dc3360

Этот момент, пожалуй, стал последним доводом в пользу очередного перехода на новую платформу. 

3. Исправление ошибок

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

  • Стабильность
  • "Правильный" пользовательский интерфейс 
  • Наличие необходимых расширений
  • Максимально развитая экосистема
  • Наличие большой команды поддержки
  • Развитая поддержка

Из более двух десятков форумов, в том числе модульных (например, компоненты для WordPress и прочие подобные решения) выбор довольно быстро был ограничен тремя вариантами:

  • IPS Community Suite 4.x (он же IPB в новом обличии)
  • XenForo
  • vBulletin 4, vBulletin 5

Благо, каждый из вариантов оказался доступен в виде демо-стенда, предоставляемому по запросу, чем мы и воспользовались. Внимательно проанализировав все решения,  было принято решение исключить  vBulltin из рассматриваемых вариантов. Решение показалось громоздким, неповоротливым, собранным из разного качества компонентов. И сразу же оттолкнул UI. Внимательно прочитав все отзывы пользователей, мы убедились в том, что наше ощущение не было ложным. Многие по-прежнему считают оптимальной версию 3.х. Но оставаться на уже довольно старом (хоть и поддерживаемом) решении нам тоже не хотелось. После этого мы перешли к XenForo, но и он не приглянулся. Не увидев в нем изюминки, мы решили остановиться на IPS как на наиболее оптимальном, простом и в то же время функциональном решении. И, казалось бы, оставалось решить всего одну задачу - перенести контент. Но ожидания о легком и быстром процессе миграции, увы, оказались ложными.

4. Скользкая тропа миграции с NodeBB на IPS

Проблемы начались сразу же. Оказалось, что для NodeBB не существует обратных миграторов. Разработчики позаботились о реализации миграторов для большинства существующих форумов (в том числе и IPB), но вот в обратную сторону решений не было, никаких. Немного проанализировав ситуацию, мы нашли два возможных варианта:

  • Прямая миграция из базы в базу
  • Использование NodeBB API для выгрузки контента и его последующего импорта в IPS

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

Прежде всего стоит отметить одну важную особенность - NodeBB не использует.. реляционные СУБД. Да-да, как бы странно это ни звучало, но здесь вы не увидите классических "таблиц". Либо Redis, либо MongoDB. Поэтому пришлось вооружиться "напильником" покрупнее и взяться за дело. А напильником в данном случае стала.. Java. Да-да, получился весьма интересный набор технологий. PHP, NodeJS для форумов и Java для инструмента миграции. 

Сначала были смигрированы базовые сущности - форумы, темы, посты, пользователи. Казалось, ничего сложного. Но самое любопытное было впереди. Как выяснилось, NodeBB приготовил ряд сюрпризов, вероятно, обусловленных нашей "долгоиграющей" базой, которая пережила миграции с версии 0.4.х до 0.7.х, накопив изрядно мусора. Пришлось вооружиться исходными кодами NodeBB и разобрать все спорные моменты. Но и IPS был не так прост. Так, например, ключи некотрых сущностей формировались как.. MD5-хэш. Что это значит? В целом, ничего сложного, если только знать, от чего взять MD5. И вновь потребовались исходные коды, но уже от IPS. Такой увлекательный процесс растянулся на несколько дней. Если вспомнить все трудности, то можно выделить наиболее интересные:

  • Нереляционная СУБД NodeBB таила весьма много неоднозначных данных, потребовавших нормировки;
  • NodeBB позволяет использовать ссылки для аватарок, IPS - нет (что привело к написанию загрузчика аватарок из интернета и их конвертации под IPS);
  • IPS в ряде таблиц использует MD5-хэши при генерации ключей, при этом параметры неизвестны;
  • Раздел "последние активности" в профиле пользователя не использует таблицу постов, а основан на дополнительной индекс-таблице (что странно и приводит к ощутимой избыточности);
  • IPS крайне нетривиально хранит маркеры непрочитанных сообщений (даже отметка всех тем как прочитанные оказалась не так проста).

Но, как известно, не существует неразрешимых проблем - все подобные задачи были решены. При этом мы опубликовали наш инструмент миграции на bitbucket под максимально открытой лицензией MIT в надежде, что кому-то он еще может пригодиться. 

5. Что же в итоге?

Да, нам полностью удалось перейти на IPS 4.x собственными силами. Не без труда, но работа была сделана. При этом любопытно, что даже сам IPS не предоставляет инструментов миграции сразу на версию 4.х с других форумов, предлагая сначала перейти на 3.х, а затем уже обновиться до 4.х. Но мы решили задачу в один проход. Стоило ли оно того? Полагаем, да. По крайней мере, теперь под рукой заметно больший запас функционала, а решение, в целом, выглядит значительно более стабильным.

Стоит отметить, что мы не используем взломанные версии форума, не требующие лицензии, как это происходит в более ем 90% случаев при создании сообществ. Почему так? Есть ряд важных причин, прежде всего доступ к самым актуальным обновлениям, поддержка разработчиков и включение в закрытую экосистему клиентов IPS. Также немаловажным являются соображения профессиональной этики. Будучи разработчиками ПО, мы хорошо пониманием ценность интеллектуального труда других разработчиков. 

Жаль ли покидать NodeBB? В какой-то мере да, безусловно, этот проект заслуживает уважения, как минимум потому, что он является OpenSource-проектом и, по сути, продвигается вперед командой из 2-3 разработчиков. Концепция, на наш взгляд, весьма хороша, но требует еще долгой и кропотливой работы. Для нашего сообщества в конечном итоге мы все же отдали предпочтение IPS и, думаю, наши посетители этому рады!

Ссылки по данной теме:

 

 

 

Stay tuned!

 Share

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...