Как я написал библиотеку для Qt и понял, что создать — это полдела
Программированием я занимаюсь уже много лет. За это время успел поработать над разными проектами — и коммерческими, и личными. Но всегда где-то на задворках сознания сидела мысль: надо бы отдать долг open-source сообществу.
Сколько раз чужие библиотеки спасали мне часы, а то и дни работы? Бесчисленное количество. Кто-то потратил своё время, написал код, выложил его бесплатно — а я просто взял и использовал. Это ведь невероятно, если задуматься. Люди по всему миру делятся результатами своего труда просто так, потому что хотят помочь другим разработчикам.
И вот однажды, работая над очередным Qt-проектом, я в который раз столкнулся с проблемой логирования. Стандартные средства Qt — это хорошо для отладки, но для серьёзного приложения их не хватает. Нужна запись в файлы, ротация, чтобы логи не съедали весь диск, асинхронность, чтобы не тормозить программу, фильтрация, отправка ошибок на сервер... Каждый раз я писал что-то своё, копировал код из проекта в проект, дорабатывал.
В какой-то момент я понял: а ведь эту проблему решают все Qt-разработчики. Снова и снова, каждый по-своему. Почему бы не сделать нормальную библиотеку и не поделиться ей?
Так родился QtLogger. Я собрал весь свой опыт, все наработки, продумал архитектуру, сделал удобный API. Хотелось, чтобы библиотека была простой в использовании, но при этом мощной и гибкой. Чтобы можно было подключить её одной строкой и сразу получить результат. Но при желании — настроить всё до мелочей.
Работа заняла много времени. Надо было поддержать все платформы — Linux, Windows, macOS, Android, iOS. На каждой свои особенности, свои нативные механизмы логирования. Надо было обеспечить совместимость со старыми версиями Qt — не у всех есть возможность обновиться на последнюю. Надо было написать документацию, примеры, тесты.
И вот библиотека готова. Выложил на GitHub, написал подробный README, оформил всё красиво. Сижу, жду... А ничего не происходит.
Оказалось, что создать хороший проект — это только половина дела. Вторая половина — рассказать о нём людям. И вот тут начались проблемы, о которых я раньше не задумывался.
Поисковики упорно не хотят показывать мой проект. Ищешь "qt logging library" — на первых страницах всё что угодно, только не QtLogger. Алгоритмы предпочитают старые, раскрученные проекты. Новичку пробиться практически невозможно.
Попробовал написать пост на Reddit — аккаунт заблокировали. Видимо, система решила, что это спам. Та же история с Medium — попытка опубликовать статью о своём проекте закончилась баном. Без объяснений, без возможности обжаловать.
Это было обидно и неожиданно. Я ведь не пытаюсь что-то продать или обмануть людей. Просто хочу поделиться полезным инструментом, который сам бы с радостью использовал, если бы кто-то другой его написал. Но современные платформы так устроены, что любая самореклама воспринимается как зло. Даже если это бесплатный open-source проект.
Получается парадоксальная ситуация. Open-source держится на энтузиастах, которые в своё свободное время пишут код для всеобщего блага. Но рассказать об этом коде практически невозможно. Крупные проекты с историей получают всё внимание, а новые — варятся в собственном соку, невидимые для потенциальных пользователей.
Я не жалуюсь — скорее делюсь наблюдением. Возможно, кто-то из вас тоже сталкивался с подобным. Или наоборот — знает способы, как достучаться до аудитории, не нарвавшись на бан.
А пока — если вы пишете на Qt и вам нужно нормальное логирование, загляните на мой проект. Там есть запись в файлы с ротацией, асинхронная работа, красивый вывод в консоль, поддержка всех платформ и много других полезных вещей. Библиотека бесплатная, под MIT-лицензией, можно использовать где угодно.
Буду рад, если кому-то пригодится. Ради этого всё и затевалось.