Обзор книги Learning OpenShift

Мне очень приглянулся openshift с самого начала. Я уже не помню, когда я первый раз задеплоил туда свое первое приложение. На протяжении всех этих лет я конечно поглядывал одним глазком на конкурентов, но каждый раз, когда мне неожиданно нужен был сервис для развертывания java-приложения, я непременно вспоминал про openshift и возвращался назад. По мне, так это самый удобный сервис для быстрого деплоя, прототипированя ваших приложений.

<span title='2015-01-12 00:00:00 +0000 UTC'>January 12, 2015</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;volyx

Получение метаданых о фотографии

В файле какого-нибудь изображения хранится очень много всякой полезной информации, например: дата съемки, размеры, всякие уровни компресии, марка и модель фотоаппарата и т д … Хотелось бы как-то получить ее в java Все это в java можно вытащить с помощью удобной библиотеки metadata-extractor. Она умеет понимать следущие форматы: Exif IPTC XMP JFIF / JFXX ICC Profiles Photoshop fields PNG properties BMP properties GIF properties Например вот Exif А вот краткий пример на groovy, который позволяет получить достаточно много информации...

<span title='2014-12-18 00:00:00 +0000 UTC'>December 18, 2014</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;volyx

Красивишная печать дерева в консоль TreeNode

Cтруктура, известная у программистов как дерево, используется довольно часто. Соответственно, так же часто возникает проблема отладки кода, который работает с этой структурой. Очень удобно иметь под рукой удобный метод “toString()”, который нарисует это дерево, например в консоли в графическом виде. Печатает дерево в консоли, с помощью System.out {% highlight java %} public void print(TreeNode root) { print(root, “”, true); } private void print(TreeNode root, String prefix, boolean isTail) { System.out.println(prefix + (isTail ?...

<span title='2014-12-02 00:00:00 +0000 UTC'>December 2, 2014</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;volyx

Замыкания

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

<span title='2014-11-18 00:00:00 +0000 UTC'>November 18, 2014</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;volyx

Изменить размер фотографий с помощью groovy и imgscalr

Простой кейс: у вас лежит где-то папка с фотографиями, которые используются в блоге и жестко “закодированны”, но размер их очень большой. Загрузка страницы занимает около МИНУТЫ! Итак, ваша задача изменить параметры каждой фотки, не меняя названия и к тому же сохранить исходные фотографии. Можно конечно надолго зависнуть в интернете и потратить время на изучение и опробование разных готовых бесплатных программ, или можно быстро на коленке написать свое решение например на groovy!...

<span title='2014-11-10 00:00:00 +0000 UTC'>November 10, 2014</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;volyx

Класс - обёртка

Напарник метода-оберки по оборачиванию, но на уровень выше - это класс - обертка. Он использует примерно такой же подход. Если нам требуется добавить новое поведение в систему, мы можем добавить его в существующий метод, но также мы можем добавить его к чему-нибудь еще. К тому, кого тоже использует этот метод. Это что-нибудь другое и есть наш класс-обертка.

<span title='2014-11-05 00:00:00 +0000 UTC'>November 5, 2014</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;volyx

Метод - обёртка

Добавить новое поведение в существующий метод легко, но часто это бывает не совсем верным решением. Когда изначально создается какой-то метод, то он обычно делает строго одно действие. Любое добавление нового кода выглядит немного подозрительно. Скорее всего, вы добавляете новый код, потому что хотите, чтобы он выполнялся в одно время с уже существующим кодом. Раньше, такой способ называли “временным связыванием”, код становится довольно некрасивым, если делать это слишком часто. Если группировать процедуры вместе только потому что они должны выполняться в одно и тоже время, то связь между ними весьма слаба....

<span title='2014-10-25 00:00:00 +0000 UTC'>October 25, 2014</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;volyx

Ветвление классом

Ветвление методом это хорошо, но в некоторых ситуациях, например с кучей зависимоcтей, этот подход проигрывает другой технике. Рассмотрим ситуацию, когда вы должны внести изменения в класс, но нет никакой возможности создать зависимые объекты для тестирования. Получается, что не возможно вставить ответвляющийся метод и покрыть его тестами. Возможно, ваш класс просто зависит от тяжелых в создании объектов или имеет какие-то скрытые зависимости. Чтобы избавится от них, вам нужно сделать глубокий рефакторинг и отделить их, для того чтобы протестировать.

<span title='2014-10-14 00:00:00 +0000 UTC'>October 14, 2014</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;volyx

Ветвление методом

Такая ситуация наверняка была с каждым. Представьте к вам подходит ваш начальник и говорит: - Клиенты требуют от нас новую фичу - сможем мы сегодня ее добавить? Обычно все что вы можете пролепетать в ответ это:- Я не знаю… смотря куда …. смотря что … И тут вы задумываетесь… Ну, допустим, мы сможем ее быстро добавить. А как мыпротестируем, что ничего не сломали? А в слух говорите, что-то типа:- А как срочно она нужна?Вы понимаете , что нужно будет сделать это изменение в 10 местах и это займет 5 часов, но в конечном итоге мы никак не сможем удостовериться, что код работает правильно и что на других концах приложения ничего не отвалилось!

<span title='2014-10-14 00:00:00 +0000 UTC'>October 14, 2014</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;volyx

Обзор книги Working with legacy code

Рефакторинг кода - это определенно круто! Это то, что вы должны делать каждый день для того, чтобы выжить в мире постоянно изменяющихся требований. Существуют подходы изменения кодбэйза проекта, следуя которым можно сильно упростить себе жизнь. Хотя все разработчики в принципе, интуитивно следуют им, но в слух их не произносят. Самые близкие из них часто можно встретить в книгах о рефакторинге.

<span title='2014-10-05 00:00:00 +0000 UTC'>October 5, 2014</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;volyx

Hello, Pixyll!

Pixyll is a simple, beautiful theme for Jekyll that emphasizes content rather than aesthetic fluff.

<span title='2014-06-11 15:31:19 +0000 UTC'>June 11, 2014</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;volyx

Javaswag выпуск 23

Привет! В выпуске усатый движок шаблонов, серверный рендеринг и миллиарды реквестов за 120$.

2 min&nbsp;·&nbsp;volyx

Javaswag выпуск 26

В выпуске компилируем код на лету, пишем свой сплитератор и генерируем видео для ютьюба по статьям из википедии.

2 min&nbsp;·&nbsp;volyx

Shared Objects and Synchronization

Как сказал David Wheeler, все проблемы в Computer Science могут быть решены еще одним уровнем абстракции. Netty как раз предлагает такой уровень абстракции для клиент-серверных приложений, работающих через NIO(non-blocking input-output). Netty упрощает разработку TCP, UDP серверов, но также дает доступ к использованию низкоуровнего API, представляя свои высокоуровневые абстракции.

1 min&nbsp;·&nbsp;volyx

Vk Cup 2017

Учавствовал в Vk Cup 2017. Квалификация 1

1 min&nbsp;·&nbsp;volyx