Обновить
129.75

Java *

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

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

Графика для JVM

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


Допустим, я хочу создавать качественные десктопные приложения. Я также хочу сделать это на JVM. Не надейтесь — мы еще не достигли цели. Но у меня есть план.

Почему именно JVM?


Это производительность на достаточно высоком уровне, но не заставляет вас слишком много задумываться о каждом выделение памяти. Это кроссплатформенно. В нем есть отличные языки — Kotlin, Scala и, конечно же, Clojure. C # тоже подойдет, но в нем нет Clojure.

Разве вы уже не можете создавать десктопные приложения на JVM?


Вы можете. Но традиционно AWT, Swing и JavaFX сопровождались множеством недостатков в качестве и производительности. Они были настолько существенными, что только одной компании удалось создать прилично выглядящее приложение на Swing. Это возможно, но требует огромных усилий.

Разве не все пользовательские интерфейсы Java прокляты?


Нет, не совсем. У AWT, Swing и JavaFX есть свои проблемы, но это исключительно их проблемы. Нет фундаментальной причины, по которой невозможно создать высококачественный пользовательский интерфейс на JVM. Просто это еще не было сделано.

Почему это еще не было сделано?


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

Почему не Electron?


Первая причина — производительность. JS — отличный язык для создания пользовательского интерфейса, но он намного медленнее, чем JVM. Wasm может быть быстрым, но подразумевает C ++ или Rust.
Читать дальше →

Okta: безопасный доступ к приложениям на Angular + Spring Boot

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

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

Okta — это облачный сервис, который позволяет управлять удостоверениями и доступом. Согласно документации Okta, это сервис корпоративного уровня, который создан для управления удостоверениями в облачной среде, но при этом совместим и со многими локальными приложениями. С его помощью ИТ-специалисты могут управлять доступом сотрудников к любому приложению или устройству. Сервис развернут на надежной и защищенной облачной платформе, которая обладает широкими возможностями аудита и тесно интегрируется с локальными приложениями, службами каталогов и системами управления удостоверениями. Подробную информацию о том, как Okta интегрируется с приложениями, можно получить по этой ссылке.

Для авторизации пользователей в Okta используется протокол OAuth2. Подробнее о протоколе OAuth2 и стандарте Open ID Connect (OIDC) можно почитать в блоге Okta.

В этой статье мы рассмотрим демонстрационное приложение «Контакты» и настройку разрешений на просмотр, создание, редактирование и удаление контактов. Это вторая часть цикла статей о приложении «Контакты», посвященная его защите с помощью Okta. О базовом приложении подробно написано в первой статье цикла: «Разработка веб-приложения на Spring Boot + Angular».

Читать далее

Меняем промежуточное представление кода на лету в Ghidra

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

Когда мы разрабатывали модуль ghidra nodejs для инструмента Ghidra, мы поняли, что не всегда получается корректно реализовать опкод V8 (движка JavaScript, используемого Node.js) на языке описания ассемблерных инструкций SLEIGH. В таких средах исполнения, как V8, JVM и прочие, один опкод может выполнять достаточно сложные действия. Для решения этой проблемы в Ghidra предусмотрен механизм динамической инъекции конструкций P-code — языка промежуточного представления Ghidra. Используя этот механизм, нам удалось превратить вывод декомпилятора из такого:

Читать далее

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

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

Я начал работать над передовыми инструментами для разработчика 9 лет назад. Когда я начинал, «инструменты программирования» означали средства просмотра форматов файлов, редакторы и, возможно, варианты grep. Отмечу, что существует большая проблема с определением целей внесения изменений, а еще у меня есть вопросы что у нее общего с поиском и заменой текста

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

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

1000 и 1 способ сесть на мель в Spring WebFlux при написании высоконагруженного сервиса

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

Источник изображения: Shutterstock.com/photowind

Добрый день, меня зовут Тараканов Анатолий, я senior java разработчик SberDevices. 2.5 года программирую на Java, до этого 6 лет писал на C# и 1 год на Scala. Хочу поделиться опытом создания сервиса-оркестратора Voice Processing Service. Он является точкой входа для пользователей семейства виртуальных ассистентов Салют. Через него также проходит часть трафика приложений SmartMarket, где любой разработчик может написать навык для наших виртуальных ассистентов Салют.

Одним словом, на сервис приходится немалая нагрузка. Давайте посмотрим, какие проблемы при его создании возникли и как мы их решали, а также сколько времени ушло на поиск причин. И всё это в контексте реактивного фреймворка Spring WebFlux.

Немного о сервисе


Начнем с обзора архитектуры нашего сервиса-оркестратора. Он управляет процессом обработки входящего трафика от пользователей, формированием и передачей ответа. Среди смежных систем, к которым он обращается, есть такие сервисы:

  • идентификации по токену, а также голосовым и видеоданным;
  • насыщения запроса дополнительными данными о пользователе и истории взаимодействия;
  • преобразования речевого сигнала в текстовое представление;
  • обработки естественного языка;
  • преобразования текста в голосовое представление;
  • запуска пилотных фич;
  • распознавания музыки и другие.

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

Hibernate и Spring Boot: кто отвечает за имена таблиц?

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

Когда мы добавляем зависимость в проект, мы подписываем контракт. Зачастую, многие условия в нем «написаны мелким шрифтом». В этой статье мы рассмотрим кое-что, что легко  пропустить при подписании трехстороннего контракта между вами, Hibernate и Spring Boot. Речь пойдет о стратегиях именования.

Читать далее

Как проходил первый после локдауна митап выпускников Java Mentor в Росбанке

Время на прочтение2 мин
Охват и читатели1.9K
17 апреля в офисе Росбанка в башне «Око-2» прошел митап для выпускников Java Mentor. Это было первое мероприятие после длительного перерыва. Рассказываем и показываем, как это было.

Митап проходил в рамках карьерной поддержки выпускников Java Mentor – для ребят, которые трудоустроились Java-разработчиками в разные компании Москвы после обучения в JM. Такие встречи – это возможность послушать экспертов из IT-компаний, а также отличный нетворкинг внутри сильного Java-комьюнити.


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

Full-stack мониторинг на примере Java приложений

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

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

Сегодня мы с вами рассмотрим, что такое Full Stack мониторинг и чем он отличается от привычного “уху” понятию мониторинга, нюансы Full Stack мониторинга для Java и сложности мониторинга микросервисных приложений на Java. Расскажем, как мы реализуем Full Stack мониторинг с помощью OpenSource стандартов и платной платформы. 

Давайте определимся, что мы называем Full Stack мониторингом?

Full stack мониторинг – это подход в мониторинге производительности приложений, который подразумевает под собой мониторинг всего стека, что включает в себя:

Мониторинг приложений – сбор метрик приложения, сбор трейсов транзакций, обеспечение видимости на уровне кода и т.д.

Мониторинг инфраструктуры – метрики хостов, процессов, контейнеров и т.д.

Мониторинг конечных пользователей – сбор метрик с браузера пользователя, мобильного приложения, синтетические проверки и т.д.

Читать далее

Что такое ExecutorService?

Время на прочтение2 мин
Охват и читатели75K
Честно говоря, вопрос этот не слишком новый. Со времени выхода Java 5 и пакета java.util.concurrent.* прошло более 13 лет, но мне, за всю мою десятилетнюю практику, так ни разу и не пришлось столкнуться с этим зверем. Тем не менее, мне этот вопрос несколько раз задавали на собеседованиях и пришлось знакомиться.
Читать дальше →

Передача и вызов лямбд на сервере и отказаться от docker/deploy/…

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

При разработке клиент-серверного приложения, у меня всегда появляется вопрос, а как я его буду разворачивать на сервере, упаковать его в jar/war/docker после написания кода, а потом еще надо передать на сервер, и еще много сделать телодвижений чтоб просто засунуть кусок кода на сервере.

Было бы хорошо просто передать на сервер код, как лямбду, так же как мы передаем лямбду в функцию, так же на сервер ее передать.

Но у меня появилась мысль как сделать этот процесс проще, и у меня что-то получилось.

Читать далее

Как перейти с джуниор позиции на мидл: личный опыт

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

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

Два года я работал в одной конторе на позиции джуна, но роста там особо не было. Надеялся, что скоро закончу магистратуру, и меня повысят до милда. Но этого не произошло. К слову, бакалавриат я закончил в СПбГУТ им. М.А. Бонч-Бруевича, факультет инфокоммуникационных сетей и систем, но знаний, которые можно непосредственно применять в современной продуктовой разработке, к сожалению, не получил. В программировании на Java я самоучка, и технический бэкграунд мне сильно в этом помог. Java изучал на практике, вникая в документацию и смотря ролики на ютубе.

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

Избавляемся от мусора в Java

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

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

Кто занимается этой очисткой? Как и когда очищается память? Как выглядит структура памяти? Давайте разберем с этим подробнее.

Читать далее

Как мы сделали программу лояльности для 300 магазинов «У Палыча» на open source iDempiere ERP/CRM

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

Как мы сделали программу лояльности для 300 магазинов "У Палыча" на open source iDempiere ERP/CRM. Магазины разбросаны на площади 450 тысяч км. кв., что примерно равно площади Испании. Объезжать их все, даже на моноколесе, - дороговато. Вот как вышли из положения и что в итоге получилось. Уже 800'000 покупателей активированы в программе.

Ну, и как вы это сделали? Читать далее

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

API, ради которых наконец-то стоит обновиться с Java 8. Часть 3

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

Какие есть причины переходить на новые версии Java? Кто-то это сделает из-за новых языковых возможностей вроде выражений switch, блоков текста или записей. Кому-то понадобятся новые интересные возможности вроде модулей или низкопаузных сборщиков мусора. Кто-то это сделает просто из-за того, что обновив версию Java, их программа станет быстрее и будет есть меньше памяти. Но есть ещё одна, не менее важная причина. Это новые API, которые позволят писать меньше кода и избежать траты времени на поиск нужной функциональности во внешних библиотеках. А в некоторых случаях сделают ваш код быстрее.


В предыдущих двух частях мы уже рассмотрели по 10 новых API, которые появились в Java 9 и более поздних версиях (часть 1, часть 2). Сегодня мы рассмотрим ещё 10.


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

От студента до учителя: как разобраться в веб-разработке, если это не твой профиль

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

Хоть кому-то и может показаться, что веб-разработчик — это суровый технарь (айтишник же!), вход в эту профессию не сложнее, чем в Python . В неё часто переходят бывшие педагоги, юристы, бухгалтеры и другие гуманитарии. О том, с чего начать обучение, какие ошибки допускают новички, как освоиться в профессии и стоит ли самостоятельно учиться, рассказывает преподаватель веб-разработки в GeekBrains Алексей Кадочников.

Читать далее

Создаем plugin для IDEA для мониторинга транзакций в Spring

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

В статье показано, как быстро можно создать свой plugin для облегчения работы с Transactional в Spring. Писать будем на Kotlin и Java

Читать далее

Производительность: нюансы против очевидностей

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

Приветствую, это текстовая версия моего доклада на JPoint-2021. Как обычно я сделал упор на случаи из жизни и на повседневные вещи, используемые каждым разработчиком. Под кат приглашаются интересующиеся производительностью и им сочувствующие.

Читать далее

NullPointerException в чужой библиотеке, или некоторые манипуляции с байткодом

Время на прочтение14 мин
Охват и читатели3.2K
Привет, Хабр! Был тёплый пятничный вечер, хотелось скорее бежать домой, пересесть из компьютерного кресла на кресло настоящее в полутора метрах, а тесты всё никак не проходили. Причём не проходили они самым изощрённым образом: падая прямо где-то в недрах библиотеки.

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

Вот как-то так:
java.lang.NullPointerException: null
at org.dbunit.ext.postgresql.UuidType.typeCast (UuidType.java:67)
at org.dbunit.dataset.datatype.AbstractDataType.compare (AbstractDataType.java:83)
at org.dbunit.assertion.comparer.value.IsActualEqualToExpectedValueComparer.isExpected (IsActualEqualToExpectedValueComparer.java:22)
...
at java.util.concurrent.FutureTask.run (FutureTask.java:264)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
at java.lang.Thread.run (Thread.java:834)


Что использованная в проекте версия 2.6.0, что самая новая 2.7.0 – увы.

Вечер был тёплый, ноутбук грелся, но вентилятор не включал во имя тишины и троттлился до желанных в многие годы назад 600 МГц, и были варианты действий:

0. Зарепортить баг в dbunit и ждать новой его версии, если pull-request вообще примут.
1. Закостылить тесты, чтобы они не проверяли те uuid-колонки, которые null, хотя именно это они и должны были проверять.
2. Вообще убрать тесты. Кстати, кто-нибудь пишет тесты на тесты?..
3. Закончить рабочий день и нырнуть с головой в исследования.
Сделать вид, будто сегодня пятница

JPoint 2021: тенденции и тренды мира Java

Время на прочтение7 мин
Охват и читатели6.4K
В третьем онлайн-сезоне конференций, проводимых JUG Ru Group, с 13 по 17 апреля 2021 года успешно прошла Java-конференция JPoint 2021.



Что было интересного на конференции? Какой тематики были доклады? Кто из спикеров и про что рассказывал? Что изменилось в организации конференции и долго ли ждать возвращение офлайн-формата? Можно ли что-то ещё придумать оригинальное при написании обзора о конференции?
Читать дальше →

Расширение Keycloak для перехвата и обработки событий в системе

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

Продолжаю тему моего коллеги о Keycloak.

Кому не нужна вода, а просто пример кода, прыгайте сразу сюда.

Keycloak довольно часто используется в качестве решения для управления идентификацией и доступом для современных приложений в рамках enterprise приложений.

Keycloak написан на языке Java, и создатели изначально заложили очень удобную возможность расширять функционал готового решения так называемыми аддонами или официально: extensions.

Расширение представляет собой обычный проект на Java, состоящий из классов, расширяющих дефолтные классы/интерфейсы Keycloak с необходим дополнительным функционалом. Причём расширить можно функционал чуть ли не любого класса Keycloak и для любых целей: от минимального изменения текста сообщения о некорректном вводе пользователем пароля, до привязки Discord'а, как Identity provider'а.

В данной статье речь пойдёт о расширении дефолтного слушателя событий в Keycloak.

Читать далее

Вклад авторов