суббота, 13 июня 2020 г.

Google выпустил новый фреймворк для логгирования в Java

Перевод статьи "Google Releases New Java Logging Framework" 

Недавно Google объявил о выпуске нового open-source Java-фреймворке логгирования под названием Flogger. Признавая мир логгирования на Java чрезвычайно перенасыщенным, Google все же утверждает, что Flogger предлагает разработчикам много преимуществ по сравнению с уже существующими решениями. Улучшения в Flogger включают в себя снижение падения производительности при отключенном логгировании, улучшение читаемости логов и повышение расширяемости системы логгирования.

Flogger - эффективный симбиоз fluent API и логгирования, утверждает, что одним из его главных преимуществ является то, что отключение логгирования обходится практически бесплатно. В то время как другие фреймворки даже при отключении логгирования как правило вносят в байт-код дополнительные вызовы, Flogger стремится полностью избежать этого.

Если конкретнее, обычно в системах логгирования при вызове методов используется varargs, вместо того, чтобы иметь сотни или даже тысячи разнообразных сигнатур. Использование varargs приводит к дополнительным инструкциям на уровне байт-кода, например для выделения памяти под Object[] для хранения аргументов методов логгирования. И хотя эти дополнительные инструкции не являются типичной проблемой, они становятся особенно важными в приложениях с очень детализированными логами или при логгировании, которое происходит в циклах.

Flogger избегает таких дополнительных затрат благодаря разработке собственного API. Цепочка вызовов методов Flogger всегда начинается с вызова селектора для определенного уровня логгирования, например atInfo(). Этот селектор возвращает реализацию, соответствующую выбранному уровню логгирования, а в случае отключения логов - возвращает ничего не делающий синглтон.

Читаемость является еще одной областью, на которой сосредоточился Flogger. По словам Google, Flogger позволяет использовать "самодокументируемый код журналирования" за счет использования более выразительного API. В качестве примера рассмотрим типичный код логгирования сообщения вместе с возникающим исключением

log.error("The arg, '{}' caused an error", arg, exception)

с помощью Flogger то же самое делается так

logger.atError()
	.withCause(exception)
	.log("The arg, ‘%s’ caused an error", arg);

Дополнительно к этому, Flogger был разработан с расчетом на расширяемость. Можно расширить API Flogger и добавить собственные методы в цепочку вызовов fluent API.

И хотя сейчас документации и конкретных примеров собственных расширений не хватает, в качестве примера Google приводит расширение UserLogger, которое для каждого пользователя пишет отдельный от основного лог.

logger.at(INFO)
    	.forUserId(id)
        .log("Message: %s", param);

Дополнительная информация о проекте Flogger можно найти на Github вместе с руководством для начинающих и документацию с лучшими практиками.

понедельник, 25 мая 2020 г.

Распознавание текста с Tesseract

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

суббота, 9 мая 2020 г.

Нотификация в PostgreSQL


Здравствуй, дорогой друг!
Многие из вас, кто уже работает разработчиком, конечно знают, что база данных - это фундамент абсолютного большинства создаваемых систем. Это средоточие информации, сердце практически любой системы.
Но, возможно, вы не знаете, что база данных - это не только ценный мех хранилище, но и отличный мессенджер =)
В этой статье мы обсудим, как обмениваться сообщениями в СУБД PostgreSQL.
Поехали!

среда, 29 апреля 2020 г.

Задачи по программированию


Добрый день, дорогой друг!
Если ты выбрал трудную стезю программиста - то ты наверняка знаешь, что структуры и алгоритмы - это основа основ, ядро, фундамент, на котором зиждется нестройное и причудливое здание программирования.
Именно поэтому способность составлять алгоритмы, приводящие к цели - это базовый навык программиста, с которого начинается все.
Я решил сделать подборку задач, решение которых позволит тебе, дорогой друг, развить в себе этот необходимый для программиста навык.



пятница, 23 августа 2019 г.

Учи таблицу умножения с Бэтменом

Доброе утро али день, мой дорогой друг!
Через несколько дней наступит долгожданная и ненавистная пора школьных занятий и миллионы юных и сонных неучей устремятся в школы за знаниями.
Там их будут мучить домашними заданиями, тестами и прочими контрольными.
А самые юные из них начнут свое знакомство с НЕЙ - великой и ужасной - Таблицей Умножения!
Конечно, родители дома будут продолжать мучить несчастных, неожиданно задавая вопрос посреди разговора: "семь умножить на восемь, быстро??", от чего становится еще тоскливее и печальнее...
Вот было бы классно, если можно выучить таблицу умножения с другом. Причем, с таким другом, который, конечно, круче самих родителей... Например, с Бэтменом!
А у меня и телефончик его завалялся=)
Эй, Рыцарь Ночи, помоги выучить таблицу умножения, будь другом!

пятница, 21 июня 2019 г.

Мутационные тесты на страже нашего кода

Привет, мой брат-программист!
Не спится? Опять твои модульные тесты пропустили зловредный баг? Мне знакома твоя боль... И сегодня я хочу подарить тебе лекарство, которое, хоть и не излечит болезнь полностью, но устранит самые неприятные из ее симптомов.

Не веришь своим ушам? Всего два слова, всего два - и твои модульные тесты станут надежными, как Форт Нокс и полными, как Тихий Океан.
Повторяй за мной: мутационные тесты!


воскресенье, 7 апреля 2019 г.

Фишки Java 13


Все уже в курсе: Java 12 вышла, мои поздравления!
Можно выдохнуть и начинать готовиться к Java 13, которая уже не за горами.
Посмотрим, что нас ждет.