Обновить
128K+

Java *

Объектно-ориентированный язык программирования

113,22
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Избавляемся от boilerplate кода в Protocol Buffers 2

Время на прочтение5 мин
Охват и читатели3.3K
Если вы разрабатываете корпоративные приложения, и не только, вероятно вы уже знакомы с протоколом сериализации Protocol Buffers от Google. В данной статье поговорим о его второй версии. И о том, что он заставляет писать много boilerplate кода, с которым мы и будем бороться.
Читать дальше →

Как включить шифрование в JetBrains Projector

Время на прочтение6 мин
Охват и читатели3.9K

Projector — это способ запускать IntelliJ IDEA на удалённом сервере. Недавно я писал об этом статью, но умолчал о важной для любого параноика вещи — шифровании данных на вебсокете.


Генерация и подкладывание ключей — довольно муторный кусок работы. Тут придётся познакомиться с особенностями Docker и криптографии в Java. К сожалению, убежать от этого никуда нельзя, потому что это Java, и ребята из JetBrains совершенно не виноваты.


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

Читать дальше →

Работаем в IntelliJ IDEA на слабом железе

Время на прочтение7 мин
Охват и читатели52K

Обнаружил секретный репозиторий на гитхабе JetBrains под названием Projector. Благодаря нему написал кусок кода в IntelliJ IDEA, запущенной на Android-планшете. Рассказываю, как это повторить.


Читать дальше →

Выбор библиотеки ассертов для проекта на Kotlin

Время на прочтение15 мин
Охват и читатели7.8K

В одном из старых проектов в кучу были навалены ассерты из JUnit, kotlin.test и AssertJ. Это было не единственной его проблемой: его вообще писали как письмо Дяди Федора, а времени остановиться и привести к единому виду не было. И вот это время пришло.


В статье будет мини-исследование про то, какие ассерты лучше по субъективным критериям. Хотел сначала сделать что-то простое: накидать набор тестов, чтобы быстренько копипастом клепать варианты. Потом выделил общие тестовые данные, некоторые проверки автоматизировал, и как поехало все… В результате получился небольшой розеттский камень и эта статья может пригодится вам для того, чтобы выбрать библиотеку ассертов, которая подойдет под ваши реалии.


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


Читать дальше →

Как скачать файл порциями?

Время на прочтение9 мин
Охват и читатели15K

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

В этой статье опишу каким образом реализовать скачивание файла небольшими порциями на языке Java по протоколу HTTP.

HTTP


Для таких целей HTTP предоставляет заголовок Range для запроса. В котором указывается диапазон байтов для скачивания. Заголовок Range относится только к телу запроса, заголовки сюда не входят.

Спецификация определяет следующие форматы указания значений заголовка:

Range: bytes=first-byte-pos "-" [last-byte-pos]


first-byte-pos — начальное смещение байта с которого необходимо начать (продолжить) скачивание, оно должно быть больше либо равно 0, и меньше либо равно last-byte-pos;

last-byte-pos — конечное смещение байта до которого необходимо скачать файл, оно должно быть больше либо равно first-byte-pos и при этом меньше либо равно скачиваемому размеру файла минус один (потому что это смещение, то есть индекс в массиве байтов).
Читать дальше →

Создаем Gatling скрипты с помощью VS Code

Время на прочтение3 мин
Охват и читатели4.6K

Перевод статьи подготовлен в преддверии старта курса «Нагрузочное тестирование».





Предисловие


Недавно, благодаря комментарию одного из студентов, изучающих мой курс Gatling Fundamentals, я узнал о том, что вы можете создавать Gatling скрипты с помощью Visual Studio Code. Я, честно говоря, понятия не имел, что это возможно, — но был приятно удивлен, обнаружив, насколько хорошо это работает!

Читать дальше →

«Я бросил свой бизнес и стал разработчиком в 43 года»

Время на прочтение7 мин
Охват и читатели13K
Интернет пестрит захватывающими историями о людях, которые бросили наёмную работу ради собственного бизнеса. У Сергея Парахина, разработчика из московского офиса EPAM, ситуация другая. Он больше 20 лет развивал свой собственный бизнес, который всегда был связан с IT. По иронии судьбы именно стремительное развитие информационных технологий в корне изменило его компанию, и бизнес всё дальше уходил от IT-сферы. Это побудило Сергея задуматься о смене профессии, и он решил стать разработчиком.

Сергей рассказал, почему в 43 года бросил бизнес и стал разработчиком в IT-компании, и описал, к каким сложностям стоит быть готовым.


Читать дальше →

Spring Integration — динамические потоки данных

Время на прочтение12 мин
Охват и читатели37K
Салют, Хабр! Сегодня мы разберем достаточно специфичную область — потоковая обработка данных, с помощью Spring Integration фреймворка и как сделать эти потоки в runtime без предварительной инициализации в контексте приложения. Полный пример приложения лежит в Гите.

Введение


Spring Integration — фреймворк корпоративной интеграции (EIP), использующий под капотом механизмы обмена сообщениями между адаптерами различных протоколов/систем интеграции на основе каналов сообщений (условные очереди). Известными аналогами являются — Camel, Mule, Nifi.

Из тестового кейса у нас будет — сделать REST сервис, который умеет считывать полученные параметры запроса, ходить в нашу базу, к примеру, postgres, делать обновление и выборку из данных таблиц по параметрам, полученных от источника, и отдавать результат в очередь обратно (request/response), а также сделать несколько экземпляров с разными путями запроса.

Условно диаграмма data flow (потока) будет выглядеть так:

image

Далее я покажу, как это можно просто сделать без особых танцев с бубном, с помощью IntegrationFlowContext, с REST-управляющими эндепоинтами компонентов/потоков. Весь основной код проекта будет расположен в репозитории, здесь укажу лишь некоторые вырезки. Что ж, кто заинтересован, прошу под кат.
Читать дальше →

JPoint 2020: новый формат, новые возможности

Время на прочтение8 мин
Охват и читатели4.1K
С 29 июня по 3 июля 2020 года в онлайн-формате прошла Java-конференция JPoint 2020. Информация о докладах, спикерах, особенностях проведения, впечатления от конференции — всё это можно прочитать далее.


Читать дальше →

JetBrains Technology Day for Java

Время на прочтение2 мин
Охват и читатели3K
В мае языку Java исполнилось 25 лет. Такое событие нельзя пропустить! Давайте праздновать вместе с JetBrains 10 июля на первом в мире виртуальном митапе для Java энтузиастов — JetBrains Technology Day for Java.

image

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

Здесь вся программа.
Читать дальше →

Можете написать Deadlock на Camunda BPM? А я могу

Время на прочтение8 мин
Охват и читатели11K
image

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

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

Блокировка двойного клика. Велосипед?

Время на прочтение6 мин
Охват и читатели5.3K

С чего началось


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

Оставим за скобками вопрос о том, правильно ли так делать или надо просто качественно выносить реинтерабельные обработчики в бэкграундные потоки. Просто будем делать очередной велосипед, может быть немного более удобный.
Читать дальше →

Вероятно, хватит рекомендовать «Чистый код»

Время на прочтение13 мин
Охват и читатели237K
Возможно, мы никогда не сможем прийти к эмпирическому определению «хорошего кода» или «чистого кода». Это означает, что мнение одного человека о мнении другого человека о «чистом коде» обязательно очень субъективно. Я не могу рассматривать книгу Роберта Мартина «Чистый код» 2008 года с чужой точки зрения, только со своей.

Тем не менее, для меня главная проблема этой книги заключается в том, что многие примеры кода в ней просто ужасны.
Читать дальше →

Ближайшие события

Подключение к session в Java и Python. HttpURLConnection и CookieManager (Java). Requests(Python)

Время на прочтение4 мин
Охват и читатели14K
Допустим, что нам надо подключиться к серверу, авторизоваться и поддерживать сессию. В браузере это выглядит следующим образом:

  1. На адрес http://localhost:8080/login отправляется пустой GET запрос.
  2. Сервер присылает формочку для заполнения логина и пароля, а также присылает Cookie вида «JSESSIONID=094BC0A489335CF8EE58C8E7846FE49B».
  3. Заполнив логин и пароль, на сервер отправляется POST запрос с полученной ранее Cookie, со строкой в выходном потоке «username=Fox&password=123». В Headers дополнительно указывается «Content-Type: application/x-www-form-urlencoded».
  4. В ответ сервер нам присылает новую cookie c новым «JSESSIONID=». Сразу же происходит переадресация на http://localhost:8080/ путём GET запроса с новой Cookie.
  5. Далее можно спокойно использовать остальное API сервера, передавая последнее Cookie в каждом запросе.

Рассмотрим, как это можно реализовать на Java и на Python.


Читать дальше →

Weapon wheel в Doom 1993

Время на прочтение5 мин
Охват и читатели3.3K
Приветствую.

Многие из нас с теплотой относятся к олдскульным видеоиграм, вышедшим на стыке веков. У них превосходная атмосфера, бешеная динамика и множество оригинальных решений, которые не устарели спустя десятилетия. Однако в наши дни видение интерфейса игр несколько изменилось — на смену запутанным уровням пришли линейные коридоры, на смену аптечкам — регенерация, а вместо длинного ряда клавиш 0-9 для выбора арсенала пришли сначала колесико мыши, а затем — виртуальное колесо. Именно о нем сегодня и пойдет речь.

image
Читать дальше →

Понятнее о S.O.L.I.D

Время на прочтение8 мин
Охват и читатели69K
Большинство разработчиков с разговорами о принципах архитектурного дизайна, да и принципах чистой архитектуры вообще, обычно сталкивается разве что на очередном собеседовании. А зря. Мне приходилось работать с командами, которые ничего не слышали о S.O.L.I.D, и команды эти пролетали по срокам разработки на многие месяцы. Другие же команды, которые следовали принципам дизайна и тратили очень много времени на буквоедство, соблюдение принципов чистой архитектуры, код-ревью и написание тестов, в результате значительно экономили время Заказчика, писали лёгкий, чистый, удобочитаемый код, и, самое главное, получали от этого кайф.

Сегодня мы поговорим о том, как следовать принципам S.O.L.I.D и получать от этого удовольствие.



Что такое S.O.L.I.D? Погуглите — и получите 5 принципов, которые в 90% случаев описываются очень скупо. Скупость эта потом выливается в непонимание и долгие споры. Я же предлагаю вернуться к одному из признанных источников и хотя бы на время закрыть этот вопрос.

Источником принципов S.O.L.I.D принято считать книгу Роберта Мартина «Чистая архитектура». Если у Вас есть время прочесть книгу, лучше отложите эту статью и почитайте книгу. Если времени у Вас нет, а завтра собес — велком.
Читать дальше →

27 июня, стрим-конференция «Кодинг будущего»

Время на прочтение2 мин
Охват и читатели2.5K
Привет!

Если вы читали наши предыдущие посты, то уже знаете про Alfa Battle для Java-разработчиков. Послезавтра в прямом эфире можно будет посмотреть финал чемпионата, с 12.00 до 18.00.

Мы запустим стрим-конференцию под названием «Кодинг будущего», где с партнерами чемпионата (Билайн и X5 Retail Group) поговорим о футуристических прогнозах в IT. От компаний будут ведущие разработчики и топ-менеджеры.



Зарегистрироваться на конференцию можно на этой странице. Прямо во время конференции можно будет задавать спикерам вопросы, автор самого интересного получит билет на JPoint.

Основных модулей стрим-конференции у нас получилось 6 штук:

  1. AI
  2. Web-банкинг
  3. Growth hacking
  4. Mobile banking
  5. Продуктовый дизайн
  6. Архитектуры Java-проектов

А вот сами доклады и спикеры.
Читать дальше →

Используем Xtend для прикладной кодогенерации: сеанс чёрной магии с разоблачением

Время на прочтение12 мин
Охват и читатели8.7K

Привет Хабр! Меня зовут Когунь Андрей. В КРОК я руковожу группой разработчиков Java (у нас большая распределённая по всей стране команда). Ещё я провожу встречи московского сообщества Java разработчиков JUG.MSK. Делаю это исключительно в корыстных целях: фотографируюсь там со всеми докладчиками, и однажды открою галерею с самыми интересными людьми в мире Java-разработки. Также помогаю делать конференции для разработчиков: JPoint, Joker и DevOops — в качестве члена программного комитета. Ну и для души, так сказать, преподаю Java-технологии студентам.


В КРОК мы с коллегами в основном занимаемся заказной разработкой. Одно из наших направлений — так называемые учётные системы. Их надо делать по возможности быстро. Они типовые, различия обычно наблюдаются только в доменной модели. Поэтому мы постоянно боремся за то, чтобы писать меньше бойлерплейт-кода, будь то тривиальные геттеры-сеттеры, конструкторы и т.п. или CRUD-репозитории и контроллеры. Мы для этого активно пользуем кодогенерацию.


Про неё сейчас и расскажу: покажу как взять кодогенерацию под контроль, чтобы она стала реально полезным инструментом разработчика. Попутно расскажу про технологию Xtend и покажу практические приёмы как с ней можно работать. Покажу как создавать собственные активные аннотации, писать и отлаживать код процессора аннотаций.


Читать дальше →

Kotlin vs Java

Время на прочтение4 мин
Охват и читатели74K
И снова здравствуйте. В преддверии старта нового курса «Backend-разработка на Kotlin», мы подготовили для вас перевод статьи, в которой рассказывается о том, чем же Kotlin отличается от Java.




«Kotlin – новый язык программирования, который заставит вас отказаться от Java». На европейской конференции Zebra APPFORUM 2017 в Праге наш Android-разработчик Питер Оттен вдохновлял других начать писать на Kotlin. Расстроены, что пропустили? Не переживайте! Питер расскажет вам, почему он стал большим поклонником этого языка.

Подъем


Kotlin – это язык программирования, разработанный компанией Jetbrains, которая знаменита IntelliJ, WebStorm, PhpStorm и плагином ReSharper для Visual Studio. Они занялись поисками нового языка программирования, который был бы лучше, чем Java, но все еще функционально совместим с ним. Вдохновляясь языками Java, C#, Scala и Groovy, ребята из Jetbrains собрали команду для разработки нового языка программирования. Kotlin проектировался людьми, которые испытали всю боль Java.
Читать дальше →

Управление несколькими JDK в Mac OS, Linux и Windows WSL2

Время на прочтение4 мин
Охват и читатели25K
И снова здравствуйте. В преддверии старта курса «Разработчик Java» подготовили для вас перевод интересной статьи.





Если вам, как и мне, приходится одновременно работать с несколькими проектами (как с легаси, так и с современными), а возможно, вы разрабатываете какую-то библиотеку или утилиту для пользователей с разными версиями Java, то вы поймете проблему с переключением между разными JDK.



В наши дни установка, управление и переключение между JDK при разработке становится непростой задачей, потому что большое количество разработчиков все еще работает с Java 8, хотя многие уже переходят на Java 11. Эта проблема может быть решена разными способами. В этой статье мы рассмотрим некоторые из них.
Читать дальше →