У нас появились почтовые рассылки новостей! Наши программисты обратили внимание, что любят получать информацию о других продуктах по электронной почте, а для PVS-Studio такой возможности нет. Поэтому одна из команд разработки собралась и сделала рассылки, какими хотела бы их видеть. Свой "велосипед" за год, зато интересно! Узнали себя? Добро пожаловать под кат.
В августе 2021 года мы были на середине разработки новой системы для обработки запросов от наших пользователей (пробные лицензии, поддержка и т.п.). Именно в этот момент мы поняли, что новости из нашего блога – это точно такой же материал о нашем продукте, который мы уже доставляем нашим пользователям по почте в ответ на запросы с сайта. А технически это реализуется почти идентично. Тогда мы решили включить разработку рассылок в новый проект и ввязались в эпический таск на целый год:
Прежде всего, мы начали с анализа того, какой материал у нас есть и как его интересно доставить пользователям.
Наш блог сейчас выглядит примерно так:
Конструктор рассылок со всеми возможными опциями показался слишком сложным решением для восприятия даже по мнению программистов.
В итоге мы упростили концепт рассылки до таких сущностей:
Можно подписаться на эти опции вместе или раздельно.
Написание и публикация подборок новостей должны быть такими же удобными, как написание и публикация статей, а для этого у нас уже есть готовое решение.
Мы пишем статьи с комфортом в Word, а собственная программа Publisher делает из документов страницы для сайта в такой последовательности:
Этап движения статьи |
Описание |
---|---|
Автор |
Пишет и закладывает статью в репозиторий. |
SCM |
Система контроля версий хранит последнюю версию файла. |
Local Server |
Выкачивает себе все актуальные документы. |
Publisher |
Конвертация Word-файлы в Html страницы. |
Importer |
Загружает файлы на облачный сервер. |
Site |
Публикует статью на сайте в раздел "Блог". |
Для поддержи рассылок просто расширяем функционал программы Publisher.
Телом писем для рассылки будет Html-разметка. Поэтому мы заказали вёрстку у коллег из web-команды, взяли готовый класс, который уже реализует конвертацию Word в Html:
public class HtmlTransform : WTransform
{
....
}
и реализовали новый класс рассылки (сначала релизы), переопределяя реализацию разных элементов документа:
public class ReleaseTransform : HtmlTransform
{
....
public override bool SaveImages() => false;
public override string DocumentStart() => Resource.Release_Start;
public override string DocumentEnd() => Resource.Release_End;
....
}
Новость о релизе — это фактически та же статья о релизе, но с другими стилями.
А вот с рассылкой новостей посложнее. Сначала пришлось запретить многие элементы родительского генератора:
public class DigestTransform : HtmlTransform
{
....
public override void TransformHeading3(StringBuilder content,
WHeading header)
{
NotSupported("Digest doesn't support Heading 3.");
}
public override void TransformTable(StringBuilder content,
WTable table)
{
NotSupported("Digest doesn't support tables.");
}
public override void TransformList(StringBuilder content,
List<WListItem> listItems)
{
NotSupported("Digest doesn't support lists.");
}
....
}
А потом реализовать поддержку нового формата текста, чтобы документы с новостями конвертировались в письма для рассылки.
Как я упоминал ранее, все авторы пишут статьи в Word. Чтобы упростить автоматическую конвертацию для новостей, мы придумали определённый формат написания текста.
Вот как выглядит исходник будущего письма из двух новостей:
Новые публикации в блоге PVS-Studio
PVS-Studio 7.19: что новенького?
Дата: 24.06.2022
Теги: Release
Пост: https://pvs-studio.com/ru/blog/posts/0958/
Картинка: https://import.viva64.com/docx/blog/0958_Release_7_19_ru/image1.png
Недавно вышла новая версия PVS-Studio – 7.19. В этой заметке расскажем, что нового появилось в анализаторе, какие разделы документации мы улучшили, а также о том, что почитать, посмотреть и... во что поиграть.
Игра: найди ошибку в C++ коде
Дата: 29.06.2022
Теги: Cpp
Пост: https://pvs-studio.com/ru/blog/posts/cpp/0960/
Картинка: https://import.viva64.com/docx/blog/0960_Game_Cpp_ru/image.png
Авторы анализатора PVS-Studio предлагают вам проверить свою внимательность и развлечься. Попробуйте быстро отыскать баг в фрагменте исходного кода и ткнуть в него мышкой.
Так как 99 % записей будут состоять из собственных статей, то здесь напрашивалась полная автоматизация.
Поэтому мы добавили новый функционал в наш плагин для Word:
Теперь достаточно нажать на значок с папкой Word, в открывшемся окне выделить нужные документы со статьями, после чего сгенерится новостной текст прямо в открытом документе. При желании можно дописать новость, не связанную с опубликованной ранее статьёй. При нажатии на Digest будет создано письмо в Html, которое надо только заложить в систему контроля версий. Это нужно, чтобы в письме можно было дать ссылку на версию для браузера.
Для создания письма про релиз достаточно просто открыть статью о нём и нажать Release.
В админке сайта появился планировщик рассылок, в который необходимо добавить полученные Html-файлы и нажать Schedule:
В октябре 2021 года полностью был готов генератор писем. А также мы ещё раз переделали верстку, потому что если долго не выпускать проект в свет, то внешние условия меняются без учёта его существования, и приходится догонять разработки коллег из других отделов.
В феврале 2022 года состоялся релиз нашей новой системы для работы с запросами пользователей, но рассылки не были включены, потому что мы ещё не провели необходимую работу с нашим сайтом. Поэтому следующим этапом стала разработка функционала подписки/отписки на сайте.
В июле 2022 года мы возвращаемся к рассылкам (хотя сайт давно готов), потому что с момента запуска новой системы в феврале нас накрыло новыми идеями её развития, что стало занимать абсолютно всё время. Также часть рассылок снова сломалась, т.к. на сайте изменились пути к картинкам. Причина всё та же – пока мы не релизнули этот функционал, другая команда развивала сайт без оглядки на наш незапущенный подпроект. Вывод: затягивать с релизом очень вредно для разработки.
В августе 2022 мы снова возвращаемся к рассылкам :D, в этот раз после отпусков, чтобы закончить начатое ровно год назад.
Сразу отвечу на вопрос, почему не рассматривался внешний сервис для рассылок. Ну письма и так надо было бы делать самим на основе нашего контента. Собственная реализация рассылки была выбрана с целью объединения всех активностей пользователей в одном месте. В будущем это станет основой для создания личного кабинета. Причём не только для клиентов, но и для бесплатных пользователей.
Если вам понравилась идея менять документы через плагин Word (пишется на C#), то рекомендую не торопиться начинать новый такой проект. Будущее этой технологии туманно. Microsoft уже объявила о прекращении развития VSTO-плагинов, заморозив SDK на версии .NET Framework 4.8. Но многочисленное комьюнити продолжает бороться за развитие своих подобных проектов. Возможно, мы увидим перерождение этой технологии после открытия исходников, если этого добьются.
Как вы уже поняли, в PVS-Studio есть ещё несколько команд разработки, которые занимаются не статическим анализатором кода. Наша работа состоит в другом – нести автоматизацию во все процессы компании и помогать другим командам быть более заметными для наших клиентов, пользователей и подписчиков. Поэтому залетайте на долгожданную страницу подписки здесь, чтобы увидеть результат нашей разработки своими глазами.