unilog
или история о публикации в open source
О себе
Пишу на C++ уже 12 лет
Из них 9 мне за это платят
В 2GIS уже 5,5 лет
Введение
Всё написано до нас
Введение
Всё написано до нас
Особенно на C++
Введение
Всё написано до нас
Особенно на C++
Ложь!
Проблема
Нет нужных библиотек
Проблема
Нет нужных библиотек
● изменчивость мира
Проблема
Нет нужных библиотек
● изменчивость мира
○ CAS-операции (1970; 2008 Qt 4.4)
○ Asynchronous I/O (2000-2002; 2005 libevent, 2008 boost::asio)
○ inotify (2007)
○ OpenCL (2008)
○ Metal (2014)
Проблема
Нет нужных библиотек
● изменчивость мира
● использование плохих реализаций
Проблема
Нет нужных библиотек
● изменчивость мира
● использование плохих реализаций
○ OpenSSL
○ crypto
○ любая библиотека на C++ для работы с JSON
Проблема
90% open source библиотек — плохие!
Проблема
90% open source библиотек — плохие!
● неопытные разработчики
● нет поддержки
Проблема
Нет нужных библиотек
● изменчивость мира
● использование плохих реализаций
○ OpenSSL
○ crypto
○ любая библиотека на C++ для работы с JSON
○ 90% open source библиотек
Проблема
Нет нужных библиотек
● изменчивость мира
● использование плохих реализаций
○ OpenSSL
○ crypto
○ любая библиотека на C++ для работы с JSON
○ 90% open source библиотек
○ C++
Проблема
Нет нужных библиотек
● изменчивость мира
● использование плохих реализаций
● нежелание делиться кодом
Проблема
Нет нужных библиотек
● изменчивость мира
● использование плохих реализаций
● нежелание делиться кодом
○ код больше никому не нужен (часто верно)
○ код == деньги (как правило, неверно)
○ нет ресурсов на доведение до ума
Проблема
Нет нужных библиотек
● изменчивость мира
● использование плохих реализаций
● нежелание делиться кодом
● отсутствие продвижения
Результат
Большое количество велосипедов
Решение
● принять проблему
Решение
● принять проблему
● выбрать интересную часть кода
Решение
● принять проблему
● выбрать интересную часть кода
● договориться с начальством
Решение
● принять проблему
● выбрать интересную часть кода
● договориться с начальством
● найти единомышленников
Решение
● принять проблему
● выбрать интересную часть кода
● договориться с начальством
● найти единомышленников
● выложить на GitHub
Решение
● принять проблему
● выбрать интересную часть кода
● договориться с начальством
● найти единомышленников
● выложить на GitHub
● заняться продвижением
Решение
● принять проблему
● выбрать интересную часть кода
● договориться с начальством
● найти единомышленников
● выложить на GitHub
● заняться продвижением
● работать с сообществом
Проблема
Слишком много библиотек логирования
Требования
● возможность настройки уровня логирования
● обработка событий в течение всего времени работы
● работа как в отладочной, так и в релизной сборках
● возможность переопределения направления вывода
● как можно более простая работа с библиотекой
Результат
Единая библиотека логирования
Подготовка к open source
Отличный способ командообразования!
Хостинг
github.com/2gis/uniassert — уже доступна
github.com/2gis/unilog — скоро!
Продвижение
Прямо сейчас!
uniassert
UNI_ASSERT(expr);
UNI_VERIFY(expr);
UNI_ENSURE_THROW(condition[, exception_type], message);
UNI_ENSURE_RETURN(condition[, return_code]);
UNI_THROW_IF(condition[, exception_type], message);
UNI_RETURN_IF(expr[, return_code]);
UNI_FUNCTION
UNI_UNUSED(var);
unilog
UNILOG(Info) << “Variable value is “ << var << “ (some other text)”;
unilog
void InitializeLogger(
// Info, Verbose, Warning, Error, Fatal
SeverityLevel min_severity,
const ILogMessageSinkPtr sink);
unilog
struct ILogMessageSink
{
virtual void Transmit(const LightweightMessage &message) = 0;
};
unilog
UNI_ENSURE_LOG_THROW(expr[, exception_type], error_message, severity, log_message);
UNI_ENSURE_LOG_THROW(expr, error_message, severity);
UNI_ENSURE_LOG_RETURN(expr[, return_code], severity, log_message);
*_ELOG_*
*_WLOG_*
*_THROW_IF
*_RETURN_IF
Работа с сообществом
Ждём предложений!
Работа с сообществом
Ждём предложений и pull request’ов!
Выводы
● делитесь кодом
Выводы
● делитесь кодом
● продвигайте свои решения
Выводы
● делитесь кодом
● продвигайте свои решения
● работайте с сообществом
Выводы
● делитесь кодом
● продвигайте свои решения
● работайте с сообществом
● используйте библиотеки uniassert и unilog
Что дальше?
Другие библиотеки
Спасибо!
woodroof@gmail.com
@_woodroof

«Велогосипед», Данил Ильиных