Сейчас вовсю идёт тестирование новой версии MyChat — 4.13. Одна из фишек, которая была реализована в готовящейся версии — это цветовая и шрифтовая разметка сообщений. Более подробно о технологии написано в официальной новости. Вроде не супер-пупер-мега фишка — всего-то сделали разметку сообщений, а раньше был просто чёрный текст. Удобнее теперь стало.
Пользователи недоумевают — а чего же так долго новая версия не выходит? Всего-то добавили мелочь, а свежей версии всё нет и нет. «Тестируют» что-то разработчики. Думаю, следует обстоятельно рассказать, «почему, что и как», дабы непосвящённые люди понимали «кухню» разработки коммерческого софта.
Итак, начнём сначала.
Реальность. В действительности, если программа установлена не на двух компьютерах, дома и на работе, а на десятках тысяч, как MyChat — проблемы и неприятности будут сыпаться каждый день, неослабевающим потоком. Большие и маленькие ошибки, недоработки, несовместимости с разными программами, нюансы работы в разных операционных системах, при разных настройках сети, антивирусов (я их люблю отдельно 🙂 ), файрволов и прочего добра.
То есть, если версия более-менее стабильна, нет крупных ошибок — проблемы всё равно будут. И их нужно всё время решать. И разработчики не размышляют, плюя в потолок, чего бы такого крутого и нового придумать, а решают повседневные задачи и проблемы своих пользователей — покупателей продукта. Пусть и не мгновенно. Возможно, закладывая нужный функционал на будущую версию, но всё равно — решают.
Реальность. Часто, чтобы просто исправить какую-то проблему или доработать нужный функционал, нужны месяцы труда. Мало того, дать версию сейчас клиенту — означает обеспечить совместимость для перехода с текущей версии на промежуточную, а также с промежуточной — на релиз, который будет доступен всем. Чтобы было более-менее понятен объём работы — приведу пример с внедрением шрифтовой разметки в сообщениях, которая уже работает в версии 4.13.
Всё начинается с идеи. Один пользователь предложил сделать нам цветовую и шрифтовую разметку сообщений. Мы давно об этом думали, но всё было как-то недосуг, да и запросов серьёзных не было от клиентов. Теперь — есть. Решено, делаем.
Делать разметку, как в форумах, используя BB-коды, как-то несолидно. Во-первых, нужно как в нормальных текстовых редакторах, в режиме WYSIWYG. Нажал кнопочку — шрифт жирный, нажал другую — зелёный, третью — по правому краю, и так далее. А во-вторых, если сделать BB-кодами, большая часть пользователей не сможет ими пользоваться. Это сложно для обычных людей, коих на порядки меньше, чем гиков. Значит, придумываем интерфейс, функции и расположение кнопок. Сделали с десяток разных вариантов и остановились на панели инструментов, которая будет скрыта по умолчанию, чтобы не загромождать экран, а включаться только тогда, когда нужно будет использовать эту самую разметку. Ну и, ясное дело, быстрые клавиши никто не отменял. Ctrl+L, Ctrl+R, Ctrl+B и так далее. Они должны работать. Забегая вперёд, покажу, что из этого вышло:
Нужно сказать, что мгновенно придумать готовый интерфейс получается только у гениев, обычно это долгий труд, перебирание вариантов и куча потраченного времени.
Разрабатываем технологию разметки, как это будет работать в окошке воода сообщений, как будет отрисовываться в окне истории полученных и отправленных сообщений, как формировать пакеты данных для отправки на сервер, как обрабатывать полученные данные и так далее.
Технология вроде бы опробована, функционировать может. Теперь планомерно начинаем реализацию всех нужных нам методов. Панель форматирования приобрела вот такой вот вид:
Пришлось переделать часть «быстрых» клавиш, которые уже были заняты, для того, чтобы у пользователей не было «ломки». Например, общепринятая комбинация клавиш Ctrl+R в Miscrosoft Word — это выравнивание текста по правому краю. В MyChat же это была конвертация набранного текста в неверной раскладке («Ghbdtn» -> «Привет»).
Реализовываем разметку жирный/наклонный/подчёркнутый/зачёркнутый шрифт. Разбираемся с динамическим формированием стилей текста, когда разные стили накладываются друг на друга.
Реализовываем выравнивание текста по абзацам. Слева, справа, по центру, по ширине. Новые права на сервере для включения/отключения функции шрифтовой разметки сообщений на клиентах. На это уходит два дня.
Цвет текста, фона, фон абзацев. Очистка стилей после отправки сообщений. Рефакторинг функций рендеринга текста во всех окнах чата с учётом новой технологии. Опция в настройках для отключения разметки входящих сообщений, чтобы клиент имел возможность получать текст с сервера без форматирования, как раньше.
Изменяемый размер шрифта сообщений, отступы для текста, перенос функционала в приваты и оповещения. Изменение серверной и клиентской баз данных для хранения оповещений с учётом шрифтовой разметки. Подготовка «нулевых» баз данных клиента и сервера с учётом новых изменений для инсталляторов MyChat Client и MyChat Server. Дополнения к функциям экспорта и импорта настроек клиента чата.
Специальный парсер сообщений, который преобразовывает внутренний код сообщений MyChat в «удобоваримую» для человека форму, чтобы можно было передавать текст сообщений в плагины и обратно, в MyChat клиент. Отладка, тестирование. Изменения в автоматической системе обновления базы данных сервера и клиента для новой версии. Ещё 4 дня.
А у нас ещё есть история отправленных и принятых сообщений. На клиенте чата. В каналах, приватах, принятые и отправленные оповещения. Надо обновить базу данных истории сообщений, чтобы она была в новом формате. У меня лично, например, основная база клиента, в котором я постоянно общаюсь по рабочим вопросам, создана была в 2009 году. В базе истории находится 208 тысяч сообщений на сегодняшний день. И это всё нужно сконвертировать в автоматическом режиме, чтобы обновление старых клиентов прошло максимально гладко. Потеря истории сообщений недопустима.
Продолжаем «пилить» обновление базы данных, тестируем алгоритмы конвертации, делаем локализацию интерфейса на украинский и английский языки (названия кнопок и всплывающие подсказки панели форматирования текста). Реализация «быстрых» клавиш для разметки текста.
Так что, несмотря на кажущуюся простоту создания программного обеспечения, это большой и сложный труд.