Как стать автором
Обновить
24
0
Владимир Долженко @vladimir_dolzhenko

Пользователь

Отправить сообщение

Запускаем инспекции IntelliJ IDEA на Jenkins

Время на прочтение7 мин
Количество просмотров9.9K

IntelliJ IDEA на сегодня обладает наиболее продвинутым статическим анализатором кода Java, по своим возможностям оставившим далеко позади таких «ветеранов», как Checkstyle и Spotbugs. Её многочисленные «инспекции» проверяют код в различных аспектах, от стиля кодирования до характерных багов.


Однако пока результаты анализа отображаются лишь в локальном интерфейсе IDE разработчика, от них мало пользы для процесса разработки. Статический анализ необходимо выполнять в качестве первого шага конвейера сборки, его результаты должны определять quality gates, а сборка должна фейлиться, если quality gates не пройдены. Известно, что TeamCity CI интегрирован с IDEA. Но даже если вы не используете TeamCity, вы вполне можете попробовать запускать инспекции IDEA в любом другом CI-сервере. Предлагаю посмотреть, как это можно сделать, используя IDEA Community Edition, Jenkins и Warnings NG plugin.

Читать дальше →
Всего голосов 34: ↑33 и ↓1+32
Комментарии7

Раздача халявы: нетормозящие треды в Java. Project Loom

Время на прочтение18 мин
Количество просмотров40K

Хотите ли вы в джавке треды, которые не жрут память как не в себя и не тормозят? Хорошее похвальное желание, и на данный вопрос отвечает этот выпуск.


Объясняем работу Project Loom на коробках с пиццей! Налетай!


Всё это снимается и пишется специально для Хабра.




Читать дальше →
Всего голосов 94: ↑82 и ↓12+70
Комментарии143

Основы Kubernetes

Время на прочтение13 мин
Количество просмотров836K
В этой публикации я хотел рассказать об интересной, но незаслуженно мало описанной на Хабре, системе управления контейнерами Kubernetes.

image

Что такое Kubernetes?


Kubernetes является проектом с открытым исходным кодом, предназначенным для управления кластером контейнеров Linux как единой системой. Kubernetes управляет и запускает контейнеры Docker на большом количестве хостов, а так же обеспечивает совместное размещение и репликацию большого количества контейнеров. Проект был начат Google и теперь поддерживается многими компаниями, среди которых Microsoft, RedHat, IBM и Docker.
Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии86

Международный туризм оказывает сильное влияние на климат

Время на прочтение3 мин
Количество просмотров16K


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

Специалисты изучили объем выброса парниковых газов с 2009 по 2013 годы и обнаружили, что более ранние оценки количества выбрасываемых газов в четыре раза меньше реальной цифры. Туристическая индустрия, а именно путешествия является причиной выбора в атмосферу около 4,5 гигатонн эквивалентов диоксида углерода в год.
Читать дальше →
Всего голосов 33: ↑25 и ↓8+17
Комментарии53

Австралия: небольшая реколонизация Земли

Время на прочтение11 мин
Количество просмотров167K
Побывать в «ничейных землях» пустынь Австралии — это почти как попасть в научно-фантастический роман про колонизацию экзопланеты. Только взаправду. Белые люди системно пришли всего около 200 лет, и за это время успела сложиться молодая, эффективная и очень интересная инфраструктура. Так что ощущения просто космические.

В Австралии опасно. Не так, чтобы всё живое хотело вас убить, но близко. Смертей десятки в год, что близко не лежало в сравнении с ДТП, но зато они очень, скажем так, изобретательные. Например, к воде вообще нельзя подходить — там, в зависимости от водоёма, крокодилы, ядовитые кубомедузы, акулы и змеи. Благодаря одному немецкому туристу, последние слова которого были «Да нет тут никаких крокодилов», знаки об их наличии по шоссе Стюарта теперь на двух языках. А благодаря одной женщине, решившей искупаться во время менструации, мы теперь знаем, что акулы умеют подниматься вверх по течению ручья на 2 километра. Хворост около трассы для биваков туристов собирают строго гиды — отлучаться с асфальта опасно для жизни, потому что в топ-20 самых ядовитых змей мира всего 2 строки принадлежат неместным. К огромному неудовольствию австралийцев.


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

А ещё Австралия постоянно либо затоплена, либо горит, либо находится в короткой передышке между этими состояниями. Но давайте начну с самого начала. Сначала мы оказались в Nowhere Land Северной территории.
Читать дальше →
Всего голосов 276: ↑275 и ↓1+274
Комментарии351

Используйте Stream API проще (или не используйте вообще)

Время на прочтение7 мин
Количество просмотров179K

С появлением Java 8 Stream API позволило программистам писать существенно короче то, что раньше занимало много строк кода. Однако оказалось, что многие даже с использованием Stream API пишут длиннее, чем надо. Причём это не только делает код длиннее и усложняет его понимание, но иногда приводит к существенному провалу производительности. Не всегда понятно, почему люди так пишут. Возможно, они прочитали только небольшой кусок документации, а про другие возможности не слышали. Или вообще документацию не читали, просто видели где-то пример и решили сделать похоже. Иногда это напоминает анекдот про «задача сведена к предыдущей».


В этой статье я собрал те примеры, с которыми столкнулся в практике. Надеюсь, после такого ликбеза код программистов станет чуточку красивее и быстрее. Большинство этих штук хорошая IDE поможет вам исправить, но IDE всё-таки не всесильна и голову не заменяет.

Читать дальше →
Всего голосов 71: ↑71 и ↓0+71
Комментарии50

Сударь, ваша команда — не команда

Время на прочтение5 мин
Количество просмотров57K
За свои 12 лет работы в сфере разработки ПО, мне посчастливилось поработать в команде только два раза. Хотя я сменил порядка десяти мест работы. Но попробовав раз, ем и сейчас… Т.к. я не жадный, и готов своими достижениями делиться с сообществом, то решил я предпринять попытку вывести из равновесия неумных руководителей, которые до сих пор не осознали важность команды, а также тех руководителей, которые профессионально занимаются самообманом — мол, они строят команду, а на деле — тьфу, а не команда.
Читать дальше →
Всего голосов 110: ↑95 и ↓15+80
Комментарии254

Minimal Value Types

Время на прочтение43 мин
Количество просмотров16K

Эта статья — перевод спецификации, посвященной описанию минимальной реализации типов-значений в Java, которую с нетерпением ждут уже несколько лет. Добро пожаловать в MVT!


Замечания к переводу


Этот текст предназначен, в первую очередь, для разработчиков платформы Java. Мы даже немного поспорили с разработчиками: насколько может быть интересен такой текст широкой общественности? В нем слишком много посторонних, очень точных деталей про внутреннюю магию.

Читать дальше →
Всего голосов 47: ↑47 и ↓0+47
Комментарии6

Как JVM аллоцирует объекты?

Время на прочтение16 мин
Количество просмотров35K

Как JVM создает новые объекты? Что именно происходит, когда вы пишете new Object()?


На конференциях периодически рассказывают, что для аллокации объектов используются TLAB'ы (thread-local allocation buffer): области памяти, выделенные эксклюзивно каждому потоку, создание объектов в которых очень быстрое за счет отсутствия синхронизации.


Но как правильно подобрать размер TLAB'а? Что делать, если нужно выделить 10% от размера TLAB'а, а свободно только 9%? Может ли объект быть аллоцирован вне TLAB'а? Когда (если) обнуляется выделенная память?
Задавшись этими вопросами и не найдя всех ответов, я решил написать статью, чтобы исправить ситуацию.


Перед прочтением полезно вспомнить как работает какой-нибудь сборщик мусора (например, прочитав этот цикл статей).

Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии12

Не используйте return в Scala

Время на прочтение5 мин
Количество просмотров11K

Сегодня я бы хотел представить вашему вниманию перевод небольшой статьи Роберта Норриса, возможно, знакомого вам под никнеймом tpolecat. Этот человек достаточно хорошо известен в Scala-сообществе как автор бибилиотеки doobie и участник проекта cats.


В своей публикации Роберт рассказывает о том, что использование return может негативно повлиять на семантику вашего кода, а также проливает свет на пару интересных особенностей реализации return в Scala. Оригинал статьи вы можете найти в блоге автора по ссылке.

Чем же так плох return?
Всего голосов 27: ↑24 и ↓3+21
Комментарии10

StringBuffer, и как тяжело избавиться от наследия старого кода

Время на прочтение3 мин
Количество просмотров13K
Всем привет. Эта статья — вольный перевод поста StringBuffer, and how hard it is to get rid of legacy code. Как-то очень он мне запал в душу, поэтому решил перевести. Поехали.

В 2006-м, в 5-й java появился StringBuilder. Более легковесная и разумная альтернатива StringBuffer. Вот, что говорит официальная документация по StringBuffer:

Этот класс дополнен аналогичным классом предназначенным для использования в одном потоке — StringBuilder. В общем случае нужно отдавать предпочтение классу StringBuilder, так как он поддерживает все те же операции, что и этот (StringBuffer), но быстрее, так как не выполняет никаких синхронизаций.

Иметь synchronized в StringBuffer вообще никогда не было хорошей идеей. Основная проблема в том, что одной операции никогда не достаточно. Одиночная конкатенация .append(x) бесполезная без других операций, таких как .append(y) и .toString(). В то время, когда каждый конкретный метод потокобезопасный, вы не можете сделать несколько вызовов без конкуренции между потоками. Ваша единственная опция — внешняя синхронизация.

Так, что? Получается, 10 лет спустя уже никто не использует StringBuffer!? Ну, по крайней мере, точно не для нового функционала!?

Сколько объектов создает этот код?


Как я уже писал раньше, виртуальная машина создает много объектов на старте или при загрузке основных библиотек. Гораздо больше, чем Вы могли бы представить, задавая вопрос выше:

public class Main {
    public static void main(String... args) {
        System.out.println("Hello " + "world");
    }
}

Oracle JVM 8-й версии создает приблизительно 10_000 объектов для выполнения этой программы.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии33

Как вы можете сделать Java лучше

Время на прочтение7 мин
Количество просмотров24K

Многие люди жалуются, что в Java чего-то не хватает, что-то глючит или медленно работает. Хорошая новость: у вас есть возможность не жаловаться, а своими силами сделать Java лучше. Java практически полностью открыта в виде проекта OpenJDK. У этого проекта есть свои особенности, но в целом вам ничего не мешает самим сообщать о проблемах, исправлять их и даже разрабатывать новую функциональность. В этой статье я немного расскажу, как это делать новичку.

Читать дальше →
Всего голосов 42: ↑39 и ↓3+36
Комментарии19

Личность и звук: Фриц Зеннхайзер — победа, начавшаяся с поражения

Время на прочтение6 мин
Количество просмотров13K
Первоначально, я хотел приурочить пост ко дню рождения немецкого изобретателя и бизнесмена, но публиковать статью о немце 9-го мая, было бы не слишком корректно ввиду непредсказуемой реакции некоторых представителей российской общественности. Благодаря этому человеку мир получил одну из лучших радиотехнических компаний мира, производящую профессиональную и бытовую аудиоаппаратуру. Сегодня сложно представить себе человека, интересующегося аудио, который так или иначе не знал бы о компании, которую создал герой этого поста.



Интересная жизнь инженера и ученого Фрица Зеннхайзера не всегда была лёгкой. Забегая немного вперед, отмечу, что создание компании волей случая было предопределено поражением Германии во Второй Мировой. Изобретательность и плодовитость инженера заложили базис для длительной и успешной работы. Сегодня, созданная им компания производит известные во всем мире наушники, микрофоны, системы связи, радиосистемы, авиационное оборудование и многое другое.
Читать дальше →
Всего голосов 22: ↑20 и ↓2+18
Комментарии29

Что там с JEP-303 или изобретаем invokedynamic

Время на прочтение8 мин
Количество просмотров10K

Блогеры и авторы, пытающиеся быть на передовой, уже немало писали про проект Amber в Java 10. В этих статьях обязательно упоминается вывод типов локальных переменных, улучшения enum и лямбд, иногда пишут про pattern matching и data-классы. Но при этом незаслуженно обходится стороной JEP 303: Intrinsics for the LDC and INVOKEDYNAMIC Instructions. Возможно, потому что мало кто понимает, к чему это вообще. Хотя любопытно, что именно об этой фиче ребята из NIX_Solutions фантазировали на Хабре год назад.


Широко известно, что в виртуальной машине Java, начиная с версии 7, есть интересная инструкция invokedynamic (она же indy). Про неё многие слышали, однако мало кто знает, что она делает на самом деле. Кто-то знает, что она используется при компиляции лямбда-выражений и ссылок на методы в Java 8. Некоторые слышали, что через неё реализована конкатенация строк в Java 9. Но хотя это полезные применения indy, изначальная цель всё же немного другая: делать динамический вызов, при котором вы можете вызывать разный код в одном и том же месте. Эта возможность не используется ни в лямбдах, ни в конкатенации строк: там поведение всегда генерируется при первом вызове и остаётся постоянным до конца работы программы (всегда используется ConstantCallSite). Давайте посмотрим, что можно сделать ещё.

Читать дальше →
Всего голосов 31: ↑31 и ↓0+31
Комментарии15

Анализ доклада Руслана Черёмина с JPoint 2016

Время на прочтение5 мин
Количество просмотров3.9K
Всем добрый день, с вами снова Роман Поборчий в блоге JUG.ru, и сегодня мы разбираем доклад Руслана cheremin Черёмина про escape-анализ и скаляризацию:


Слайды можно посмотреть и скачать тут. Традиционный disclaimer: про Java только разбираемый в статье доклад, а не сама статья.
Всего голосов 16: ↑16 и ↓0+16
Комментарии8

Атаки на сетевое оборудование с Kali Linux

Время на прочтение4 мин
Количество просмотров66K
image

 
В данной статье мы рассмотрим актуальные атаки на сетевое оборудование и инструменты, доступные в популярном дистрибутиве Kali Linux для их проведения.

Читать дальше →
Всего голосов 38: ↑38 и ↓0+38
Комментарии10

FSE кодирование

Время на прочтение9 мин
Количество просмотров14K
Finite State Entropy (FSE) – алгоритм энтропийного кодирования, чем-то похожий и на алгоритм Хаффмана, и на арифметическое кодирование. При этом он взял лучшее от них обоих: работает так же быстро, как хаффмановский, и со степенью сжатия как у арифметического кодирования.

FSE принадлежит семейству кодеков ANS (Asymmetric Numeral Systems),  изобретённых Яреком Ду́дой. На основе его исследований Ян Колле разработал оптимизированный вариант алгоритма, впоследствии названный FSE.

В заметках Яна Колле непросто разобраться, поэтому я изложу объяснение в несколько ином порядке, более удобном для понимания, на мой взгляд.


Читать дальше →
Всего голосов 47: ↑44 и ↓3+41
Комментарии6

Как работает hashCode() по умолчанию?

Время на прочтение12 мин
Количество просмотров120K

Попытка заглянуть вглубь hashCode() привела к спелеологическому путешествию по исходному коду JVM, с рассмотрением структуры объектов и привязанной блокировки (biased locking), а также удивительных последствий для производительности, связанных с использованием hashCode() по умолчанию.
Читать дальше →
Всего голосов 59: ↑57 и ↓2+55
Комментарии53

Trove 4.0? Примитивы в стандартном каркасе коллекций из Java 8

Время на прочтение5 мин
Количество просмотров9.7K
Около месяца назад на Хабре была статья про Trove — самую часто упоминаемую библиотеку, когда спрашивают про структуры данных с примитивами на Java. Примерно за пару дней до этого я сел эту библиотеку переписывать. Время решительно кончилось, поэтому делюсь поиском с вами, хотя не очень-то надеюсь, что кто-то продолжит это дело.

На данный момент сделаны хеш-таблицы 6 типов: множества примитивов, объектов и все 4 варианта мапов: примитив — примитив, примитив — объект, объект — примитив и объект — объект, над которыми нависает туча обобщающих интерфейсов.

Меня всегда удивляло, почему все подобные библиотеки создают еще одну иерархию типов, а не встраиваются в давно уже зарекомендовавший себя стандартный каркас коллекций Явы. Никаких принципиальных проблем с этим я не видел и не вижу. Поэтому над моей тучей интерфейсов, как на пантеоне, возвышаются java.lang.Iterable, java.util.Collection и java.util.Map. Я не зря дал ссылки на документацию по Java 8. Реализованы почти все методы из будущих интерфейсов, кроме spliterator(). Можно начинать привыкать.
Читать дальше →
Всего голосов 21: ↑18 и ↓3+15
Комментарии31

Новый синхронизатор Phaser

Время на прочтение5 мин
Количество просмотров56K
Phaser (Этапщик) — мощная и гибкая реализация паттерна синхронизации Барьер. Включен в JDK 7 в составе пакета java.util.concurrent.

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

Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии4
1

Информация

В рейтинге
Не участвует
Откуда
Leiderdorp, Zuid-Holland, Нидерланды
Зарегистрирован
Активность