Обновить
512K+

Java *

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

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

Подтверждение входа с помощью Telegram на Spring Boot

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

Недавно столкнулся с проблемой: все приложения используют Telegram-бота в качестве подтверждения входа в аккаунт, а мое — нет. Я был настроен серьезно и провёл уйму времени в интернете в поиске туториала, но меня ждало разочарование. Задача сложная и имеет много подводных камней, а туториалов — ноль.


Следующую неделю я потратил на написание своей имплементации данной фичи и готов поделиться успехом.


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


Компилируем Kotlin в Runtime

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

Привет, хабр!


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


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


В качестве задачи можно взять относительно популярную вещь — мы сделаем некоторое подобие AOP для разбора ответов от базы данных. Таким образом, программист сможет разметить атрибутами свой код, а мы сгенерим и скомпилируем рабочий оптимизированный код сразу в runtime. Однако на самом деле, область применения подобной тактики намного шире: можно делать программируемую конфигурацию, можно оптимизировать существующий код (за счет замены условий на заранее подсчитанные значения, которые уже не изменятся). Ну и, конечно же, можно избежать копипаста даже в тех случаях, когда выразительности языка недостаточно, чтобы выделить обобщенный кусок кода.


Весь код доступен на GitHub, для запуска необходима Java 11. В статье я привожу сокращенные варианты кода, без логов, диагностики и т.д.

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

Торговля с помощью протокола FIX. Часть вторая: создание FIX-клиента

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


В предыдущей статье мы использовали приложение MiniFIX для подключения и отправки сообщений на тестовую биржу с помощью протокола FIX. В этой статье напишем собственную реализацию клиента для получения рыночных данных в виде небольшого SpringBoot-приложения. Код доступен в репозитории.


Для реализации приложения нам понадобится:


  • Java 8
  • Maven
  • Spring boot 2.2.5
  • Lombok
  • QuickFix/J
Читать дальше →

Project Panama: как сделать Java «ближе к железу»?

Время на прочтение28 мин
Охват и читатели16K
В феврале в нашей новосибирской Точке кипения прошел тринадцатый митап JUGNsk, где Владимир Иванов, ведущий инженер Oracle из группы разработки виртуальной Java-машины HotSpot, рассказал, что сейчас приходит на смену JNI при взаимодействии Java-кода с native-кодом. Читайте далее о FFI (Foreign Function Interface), jextract, Memory Access API и Foreign ABI (Application Binary Interface).



Статья подготовлена по мотивам доклада, видеозапись которого с сессией вопросов-ответов можно найти тут. Это не просто расшифровка, а доработанная самим Владимиром версия исходного материала.
Читать дальше →

«В идеале мы хотели бы вообще заменить Spring на Micronaut» — интервью с Грэмом Роше о перспективах развития Micronaut

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


Micronaut ворвался в нашу жизнь внезапно, без стука и без объявления войны. О нем пишут новости и читают доклады, и вряд ли найдется джавист, который ни разу не слышал это слово. Micronaut — это современный фреймворк для JVM для написания модульных микросервисов и serverless-приложений, использующий для этого фичи GraalVM.


В свою очередь, Grails — это фреймворк, который появился ещё в 2005 году и с тех пор непрерывно улучшается. В 2015 году Grails 3 переехал на SpringBoot, а версия 4.0.0 появилась в июле прошлого года. У Grails сохраняется своя аудитория, для которой он очень хорошо подходит и решает вполне конкретные проблемы.


Грэм Роше создал оба этих фреймворка. Мы пригласили Грэма в нашу виртуальную студию, чтобы обсудить, зачем было изобретать велосипеды и городить костыли, не закопать ли Grails и Spring Boot, как поддерживать Jakarta EE и не сломаться, что будет в Micronaut 2, стоит ли писать Micronaut поверх Micronaut и когда уже Java наконец помрёт.

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

Как устроен Selenium: Эпизоды 1 — 2

Время на прочтение6 мин
Охват и читатели9.7K
Перевод статьи подготовлен в преддверии старта курса «Java QA Engineer».




Эпизод 1 — Транспортировка


В результате диалога, произошедшего в последние выходные января 2020 года, который был посвящен одной из проблем в Selenium, где кто-то сказал мне «почему ты просто не сделаешь так…» в ответ на объяснение проблемы, я решил написать серию статей, объясняющих команды в Selenium WebDriver и почему мы в итоге пришли к дизайну, который имеем сегодня.

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

Почему?

По воле случая и благодаря тому, насколько хорошо он делает то, для чего предназначен, Selenium используется миллионами людей по всему миру. Именно так широчайший спектр компаний от небольших стартапов до Microsoft и Google следят за тем, чтобы их сайт работал в каждом браузере.
Читать дальше →

Selenium WebDriver на службе разработчика

Время на прочтение5 мин
Охват и читатели5K
Расшифровка доклада Дмитрия Костичева с Backend-stories // Видеоверсия внутри

Если вдруг у вас появилась необходимость интеграции на стороннем интернет-ресурсе, а разбираться в нем нет времени, на помощь придет Selenium. Дмитрий Костичев рассказал на примере своего проекта, как автоматизировать работу в браузере, не выходя из вашего сервиса.


Привет всем. Меня зовут Дмитрий и я сегодня поделюсь опытом использования Selenium в Backend-разработке. Для чего это вообще нужно? Selenium нужен для автоматизации взаимодействия с какими-то интернет-ресурсами, чтобы нивелировать человеческие факторы заполнений каких-то данных и т.д. Для разработки это может понадобиться в таких случаях, когда, например, на интернет-ресурсе не бывает API и так далее. И на примере моего проекта была задача — заполнить клиентские данные (перед этим сервис должен был правильно подготовить всю информацию) и зарегистрировать их на этом сайте, в данном случае MasterCard.


Hammock Driven Development — Rich Hickey (с русским переводом)

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

Я сделал перевод и набил субтитры на отличный доклад Рича Хикки — Hammock Driven Development (Разработка через гамак). Впервые на русском языке.

Доклад впервые был представлен в 2010 году на первой конференции Clojure Conj.
Читать дальше →

АНБ, Ghidra и единороги

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

АНБ, Ghidra и единороги

На этот раз взгляд команды PVS-Studio привлекла Ghidra — большой и злой фреймворк для реверс-инжиниринга, с помощью которого можно анализировать различные бинарные файлы и делать с ними всякие страшные вещи. Наиболее интересно в нём даже не то, что он бесплатен для использования или отлично расширяется плагинами, а то, что написали его в АНБ и выложили исходники на GitHub для всех желающих. С одной стороны, кажется, что у АНБ-то точно достаточно ресурсов для поддержания кодовой базы в чистоте. А с другой, не очень знакомые с ней новые контрибьюторы могли за прошедшее время случайно добавить незамеченных багов. Поэтому, вооружившись статическим анализом, мы решили поискать слабые места в этом проекте.
Читать дальше →

Spring Boot приложение с использованием Kafka Streams

Время на прочтение6 мин
Охват и читатели17K
Привет, Хабр! В этой статье мы рассмотрим, как в МегаФоне производят потоковую обработку данных, и разработаем простое Spring Boot приложение с использованием Kafka Streams.

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

Ностальгии пост: j2me, Gravity Defied, 64kb

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

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



  • Если что, я не имею к этой игре никакого отношения.

Например, игра с картинки выше не использовала floating-point числа, так как не все телефоны их поддерживали. "3д" и физика — полностью самописные на fixed-point вычислениях поверх целых чисел. Но мне кажется, перечисление особенностей одного приложения будет не сильно информативным. Для полноты картины я немного затрону возможности телефонов, j2me платформу и заодно сравню это с современной разработкой под Android.


Кроме того, j2me — это полноценная java старой версии (кажется, 1.3), я дописал некоторые недостающие классы и смог запустить .jar файлик с игрой на своём PC. Скриншот выше — оттуда. Не скажу, что от этого есть какая-то польза — просто API для j2me было очень простым и мне захотелось попробовать.

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

Путь самурая: от Servlet к Reactive Programming

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


Примерно 1-1,5 года назад Spring Webflux был на хайпе. Практически на любой Java-конференции можно было встретить доклады по Webflux, реактивному программированию, где-то даже проскакивали доклады про RSocket. Выступлений было много, сообщество маленькое, работающих проектов еще меньше. Возможно, тому виной была достаточно сырая технология в мире Spring и отсутствие поддержки со стороны многих модулей экосистемы, но мы рискнули.

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

Java-дайджест за 29 мая

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


  • 23 мая нашей любимой Java исполнилось 25 лет. Все эти годы один из самых популярных запросов в гугле — когда же Java наконец умрёт? Не дождётесь.


  • К летней конференции JPoint присоединяется сам Джоэл Спольски — один из двух создателей Stack Overflow. Олды должны хорошо помнить его по классической книге «Джоэл о программировании» и по всё ещё работающему оплоту Mercurial — системе контроля версий Kiln. Шипилёв, Гослинг, Хорстман — и вот теперь ещё и Спольски, это будет очень хороший JPoint.


  • Германия делает приложение для информирования про коронавирус, оно написано на Spring Boot и лежит на GitHub.


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

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

Практикумы от IBM: Quarkus (сверхбыстрая Java для микросервисов), Jakarta EE и OpenShift

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

Всем привет! Мы уже тоже подустали от вебинаров, их количество за последние пару месяцев перевалило все возможные границы. Поэтому для хабра стараемся подбирать для вас самые интересные и полезные).

На начало июня (надеемся, лето все-таки наступит) мы запланировали несколько практических сессий, которые, уверены, будут интересны разработчикам. Во-первых — расскажем про serverless и новейший сверхбыстрый quarkus (как вам, например, 14мс холодного старта?), во-вторых — Альберт Халиулов расскажет про особенности облачной разработки на Jakarta EE, Microprofile и Docker (каждому участнику выдадим готовую виртуалку для практикума). Ну и наконец 9 июня Валерий Корниенко расскажет как можно развернуть свой OpenShift в IBM Cloud за пару минут. Интересно? Если да — детали под катом.
Читать дальше →

Облачно-ориентированный обмен сообщениями на платформе Red Hat OpenShift с использованием Quarkus и AMQ Online

Время на прочтение7 мин
Охват и читатели1.7K
Всем привет! Вот и он – наш заключительный пост из серии про Quarkus! (Кстати, смотрите наш вебинар «Это Quarkus – Kubernetes native Java фреймворк». Покажем, как начать «с нуля» или перенести готовые решения)



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

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

Время на прочтение16 мин
Охват и читатели5K
Доброго времени суток, Хабр.

Приходилось ли вам задумываться как поменять время внутри базы данных? Легко? Ну в некоторых случаях да, несложно — linux команда date и дело в шляпе. А если нужно поменять время только внутри одного экземпляра бд если их на сервере несколько? А для отдельно взятого процесса базы данных? А? Эээ, так-то, дружок, в этом-то все и дело. Кто-то скажет, что это очередной сюр, не связанный с реальностью, который периодически выкладывают на Хабре. Но нет, задача вполне реальная и продиктована производственной необходимостью — тестированием кода. Хотя соглашусь, кейс тестирования может быть достаточно экзотический — проверить как ведет себя код на определенную дату в будущем. В данной статье я рассмотрю подробно как эта задача решалась, и заодно захватим немного сам процесс организации тестовых и dev-стендов для базы Oracle. Впереди длинное чтиво, устраивайтесь поудобнее и прошу под кат.
Читать дальше →

Торговля с помощью протокола FIX. Часть первая: настройка тестового окружения

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


В этом цикле статей создадим окружение для работы с тестовой биржей и обмена сообщениями с ней, разберёмся с основными биржевыми терминами и закрепим знания на практике.


UPD: Основная цель этого цикла статей — комплексно рассмотреть устройство биржи и базовые понятия (сделки, фьючерсы и т.д) в рамках работы с протоколом FIX. Здесь не будет привязки к какой-то конкретной бирже, будем использовать готовый пример сервера (симулятор биржи) и в дальнейшем реализуем клиента, которого можно будет доработать для взаимодействия с интересной вам реальной биржей.


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

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

Project Loom: виртуальные потоки в Java уже близко

Время на прочтение4 мин
Охват и читатели23K
Несколько дней назад Ron Pressler разродился статьей State of Loom, которую не полайкал только самый ленивый джавист. Статья действительно хорошая, в ней много интересных метафор, которые я собираюсь бессовестно использовать теперь без ссылки на первоисточник.

Со своей стороны я неосторожно позволил высказать некоторый скептицизм, когда же с этим Project Loom можно будет наконец-то реально поработать. Спустя буквально час прилетела ответочка от самого Ron'а — «а ты попробуй!». Что ж, пришлось пробовать.
Читать дальше →

Компилируем Spring Boot-приложение в нативное с помощью GraalVM

Время на прочтение10 мин
Охват и читатели9.8K
Перевод статьи подготовлен в преддверии старта курса «Разработчик на Spring Framework».





Привет, любители Spring’а! Добро пожаловать в очередной выпуск Spring Tips. Сегодня мы поговорим о недавно реализованной поддержке компиляции Spring Boot-приложений в GraalVM. Мы уже говорили о GraalVM и нативных приложениях в другом выпуске Spring Tips в теме про Spring Fu.



Немного вспомним, что такое GraalVM. GraalVM — замена стандартного компилятора C1 в OpenJDK. Подробнее об использовании GraalVM вы можете послушать в моем подкасте Bootiful Podcast с Крисом Талингером (Chris Thalinge) — контрибьютором GraalVM и инженером Twitter. При определенных условиях GraalVM позволяет быстрее запускать обычные Spring-приложения и, хотя бы по этой причине, он заслуживает внимания.

Исследование Курса по Реактивной Архитектуре: Открытия и Впечатления

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

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



Курс состоит из шести модулей, каждый из которых завершается финальным экзаменом и практическими заданиями, предоставляя всестороннее изучение реактивной архитектуры. Весь материал иллюстрируется на примере бизнеса сети ресторанов "Реактивное BBQ". В начале эта сеть использовала монолитную модель, но со временем она трансформировалась в сложную систему, которая требует более продвинутого ПО для поддержки своего растущего бизнеса.


Особо интересны два кейса из курса:


  • В первом случае рассматривается управление персоналом в ресторане, что демонстрирует принцип эластичности — один из ключевых аспектов реактивных систем.
Читать дальше →