Обновить
128K+

Java *

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

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

Опыт построения интеграционной платформы на базе ServiceMix (Camel) и RabbitMQ

Время на прочтение13 мин
Охват и читатели31K
Как только в компании появляется хотя бы две информационных системы, которым необходимо обмениваться данными, возникает вопрос, как организовать их взаимодействие. Вариантов множество: файловый обмен, линки между базами данных, web или rest сервисы, различные системы обмена сообщениями, устаревшие RPC и CORBA, новомодный gRPC и т.д. Выбор зависит от предпочтений участников проекта и от возможностей систем (архитектура системы, используемая платформа, наличие готового API и пр.). Предположим, выбрали какой-то способ обмена, системы начали взаимодействовать, все хорошо. Но потом возникает третья система, с которой тоже надо интегрироваться, потом четвертая и т.д. Нужно опять садиться и выбирать способ обмена, и не факт что удастся ограничиться уже используемыми технологиями (где-то это продиктовано ограничениями новых систем, где-то разработчик настоял на другой технологии или захотел попробовать что-то новое). С ростом количества систем растет количество и сложность взаимодействий между ними, растет количество используемых технологий. В итоге вся интеграционная архитектура компании начинает напоминать запутанный клубок разноцветных ниток, как-то связывающих системы компании, который все сложнее распутывать при разборе ошибок и доработках. Рано или поздно начинают приходить мысли о создании единой интеграционной среды, которая прозрачно и расширяемо свяжет все системы воедино.

В этой статье я расскажу об опыте использования Apache ServiceMix (Camel) и RabbitMQ для построения такой интеграционной среды.
Читать дальше →

Проблемы матчинга и как можно с ними бороться

Время на прочтение8 мин
Охват и читатели20K
Добрый день! Меня зовут Алексей Булавин, я представляю центр компетенций Сбертеха по Big Data. Представители бизнеса, владельцы продуктов и аналитики часто задают мне вопросы по одной и той же теме — матчинг. Что это такое? Зачем и как его делать? Особенно популярен вопрос «Почему он может не получиться?» В этой статье я постараюсь на них ответить.

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

Java и Linux — особенности эксплуатации

Время на прочтение23 мин
Охват и читатели65K
Java — очень распространённая платформа, на ней пишут очень разные вещи, начиная от Big Data, заканчивая микросервисами, монолитами, enterprise и прочим. И, как правило, всё это развёртывают на Linux серверах. При этом, соответственно, те люди, которые пишут на Java, зачастую делают это совсем на других операционных системах. Там они:

  • пишут код;
  • отлаживают, тестируют;
  • после этого упаковывают в jar;
  • отправляют на Linux, и оно работает.

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



С другой стороны, есть те, кто занимается администрированием серверов, на их сервера устанавливают JVM, отправляют jar и war-файлы, а с точки зрения мира Linux все это:

  • чужеродное;
  • проприетарное;
  • собирается не из исходников;
  • поставляется какими-то jar-архивами;
  • «отъедает» всю память на сервере;
  • вообще, ведёт себя не по-человечески.

Цель доклада Алексея Рагозина на Highload++, расшифровка которого идет далее, была в том, чтобы рассказать особенности Java для «линуксоидов» и, соответственно, Linux — Java-разработчикам.

Автоматическая генерация тестовых скриптов с помощью нейронных сетей

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

В последние годы использование технологий Deep Learning позволило достичь значительного прогресса в таких областях, как распознавание образов, автоматический перевод и др. Этот успех, а также разработки в области беспилотных автомобилей и достижения компьютера в игре GO, позволили фантазировать о том, что Искусственный Интеллект скоро будет делать ту работу, которую сейчас выполняют люди, и будет претендовать на их рабочие места.
Читать дальше →

Использование возможностей Groovy DSL для конфигурации Java-приложения

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

Предыстория


Всем привет! Я хотел бы рассказать историю о страшных конфигах и как их удалось причесать и сделать вменяемыми. Я работаю над довольно большим и относительно старым проектом, который постоянно допиливается и разрастается. Конфигурация задается с помощью маппинга xml-файлов на java-бины. Не самое лучшее решение, но оно имеет свои плюсы — например, при создании сервиса можно передать ему бин с конфигурацией, отвечающий за его раздел. Однако, есть и минусы. Самый существенный из них — нет нормального наследования профилей конфигурации. В какой-то момент я осознал, что для того, чтобы поменять одну настройку, я должен отредактировать около 30 xml-файлов, по одному для каждого из профилей. Так больше продолжаться не могло, и было принято волевое решение все переписать.


Требования


  • Наследование и переопределение (или fallback). Должна быть возможность задать некий базовый профиль, унаследовать от него дочерние и переопределить или добавить в них те места, которые необходимо
  • Маппинг в java-бины. Переписывать по всему проекту использование конфигурации с бинов на проперти вида mongodb.directory.host не хотелось, использовать map-ы из map-ов тоже.
  • Возможность писать в конфиге комментарии. Не критично, но удобно и приятно.

Хотелось бы, чтобы конфиг выглядел примерно так:


Типичный DSL-скрипт на groovy
name = "MyTest"
description = "Apache Tomcat"

http {
    port = 80
    secure = false
}
https {
    port = 443
    secure = true
}

mappings = [
        {
            url = "/"
            active = true
        },
        {
            url = "/login"
            active = false
        }
]

Как я этого добился — под катом.

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

Как спланировать ёмкость Apache Ignite кластера

Время на прочтение12 мин
Охват и читатели4.4K
Публикуем расшифровку видеозаписи выступления Алексея Гончарука (Apache Ignite PMC Member и Главный архитектор GridGain) на митапе Apache Ignite сообщества в Петербурге 29 марта. Загрузить слайды можно по ссылке.



Участников сообщества Apache Ignite часто спрашивают: «Сколько нужно узлов и памяти для того, чтобы загрузить такой-то объем данных?» Об этом и я хочу сегодня поговорить. Забегая вперёд: такое прогнозирование пока что является достаточно сложной, нетривиальной задачей. Для этого нужно немного разбираться в устройстве Apache Ignite. Также я расскажу, как упросить себе задачу прогнозирования, и какие можно применять оптимизации.

Guice всемогущий: assistedinject, multibindings, generics

Время на прочтение11 мин
Охват и читатели22K
В последнее время чаще стал встречать команды, которые используют Guice в качестве DI фреймворка. Стал его бояться (слезать с любимого Spring!?), и, как это обычно в жизни и бывает, страхи мои материализовались — я попал на проект, на котором активно используется Guice

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

В статье я в очередной раз покажу практическое использование Guice и некоторых его extensions: assistedinject, mutibindings , а также работу с generics. Сначала я опишу суть задачи, а затем итеративно приду к ее решению.
Читать дальше →

Высокие перегрузки: электронный архив на Alfresco ECM

Время на прочтение6 мин
Охват и читатели6.4K
Хотим поделиться опытом по автоматизации работ, связанных с фото-фиксацией грузов, в одной из самых крупных российских транспортных компаний. И рассказать о том, с какими вызовами пришлось столкнуться, и как мы их решали.

Задача фото-фиксации грузов на различных этапах транспортировки является типовой для транспортной компании. Сотрудники компании фотографируют груз, загружают изображение в ERP-систему, из которой он попадает в электронный архив (ЭА). Каждая фотография сопровождается метаинформацией: отделение отправитель, получатель, код и индекс рейса, и т.д. Основная задача электронного архива – организация гибкого, удобного и, главное, быстрого поиска фотографий по метаинформации за последние 3 года.
Читать дальше →

[Питер] Встреча JUG.ru с Олегом Чирухиным — GraalVM Всемогущий

Время на прочтение2 мин
Охват и читатели2.6K
Всем привет! Во вторник, 15 мая, мы делаем встречу JUG.ru, посвященную GraalVM. Встреча пройдет в петербургском офисе компании T-Systems.

Как вы заметили, я часто пишу на Хабр про Java. Пора нам немного расширить формат общения и встретиться вживую. В качестве темы встречи был выбран GraalVM — как нечто весьма перспективное и довольно популярное на Хабре.

Участие бесплатное, регистрация обязательная. Зарегистрироваться можно тут. Видеозаписи, скорей всего, будут, онлайн-трансляции — не будет.


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

Кросс-языковая разработка ПО

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

Задача


Вот бы, разрабатывая программу на одном языке, сразу получать исходники на других языках программирования… Я пишу на C# .NET, но в последнее время всё больше требуется интегрироваться с Java. Одно из решений — оформление web-сервисов для взаимодействия, но не то это, не то. Вроде и существуют конвертеры C# в Java, но эксперимент показал, что для реального проекта они (те, что удалось попробовать) не работают, хотя на «hello world» отрабатывают отлично. Переписать с нуля на Java весь проект нереально — он активно разрабатывается более 6 лет (Pullenti — обработка естественного языка), да и на C# он нужен. Пришлось мобилизоваться и в прошлом году написать этот конвертер, а в этом году и конвертер C# в Python.
Читать дальше →

Как я писал графического бота и во что это превратилось. PengueeBot

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

Предисловие


Понадобилось мне сделать бота для выполнения нескольких задач, требовательных к логике и скорости реакции. Лезть в API и ковырять бинарники программ не хотелось. Было решено пойти путём визуальной автоматизации. Нашел несколько ботов, но ни один из них так и не подошел под мои требования, оказавшись или слишком медленным, или скриптовая часть была сильно урезана или был недостаточный функционал для работы с визуальной составляющей. Так как у меня был успешный опыт использования визуального бота в прошлом (хоть и медленного и сильно урезанного в скриптовой части) – решил сделать свою реализацию.

Требуемый в начале функционал

Были необходимы следующие возможности:

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

Существующие аналоги

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

Не пишите лишнего

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

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


Дольше всего приходится вычитывать не хитрые алгоритмы, и не решения с алгебраическими типами данных и монадами, а огромные куски простого кода: методы на 500 строк, скрипты на 1000 строк, классы на 1500 строк. Все они доставляют индустрии проблем не меньше, чем печально известное NullPointerException.

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

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

Apache Kafka – мой конспект

Время на прочтение9 мин
Охват и читатели345K
Это мой конспект, в котором коротко и по сути затрону такие понятия Kafka как:

— Тема (Topic)
— Подписчики (consumer)
— Издатель (producer)
— Группа (group), раздел (partition)
— Потоки (streams)

Kafka — основное


При изучении Kafka возникали вопросы, ответы на которые мне приходилось эксперементально получать на примерах, вот это и изложено в этом конспекте. Как стартовать и с чего начать я дам одну из ссылок ниже в материалах.

Apache Kafka – диспетчер сообщений на Java платформе. В Kafka есть тема сообщения в которую издатели пишут сообщения и есть подписчики в темах, которые читают эти сообщения, все сообщения в процессе диспетчеризации пишутся на диск и не зависит от потребителей.
Читать дальше →

Вычисление логических выражений в строке внутри Java/Scala/Kotlin кода

Время на прочтение3 мин
Охват и читатели11K
Мне нужно было в рантайме вычислять истинность выражений типа

a>10 && b<c+5 && (a+b)<c*4

находящихся в строке Скалы.

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

Я оценивал разные библиотеки на то 1) могу ли они сделать то, что надо 2) скорость исполнения

Были проверены

  • интерполяция строк
  • Js Engine
  • javaluator
  • exp4j
  • evalEx
  • mxparser
  • MathEval
  • Groovy
  • Jexl

Результаты


Время пробега в мс для 1000 выражений (вернее одно и тоже выражение для 1000 разных набoров 3х переменных):

js 239 ms
mxParser 56713 ms
evalex 35 ms
groovy 118 ms
Jexl 62 ms

Остальные способы/библиотеки не сработали.

Под катом подробности:

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

Ищем спикеров на Java MeetUp upd 28.06

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


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

Мы знаем, как важно общаться с людьми из других команд и проектов, иметь возможность спросить совета, обсуждать только что появившиеся технологии и поделиться опытом. Поэтому 16 мая, в московском офисе Райффайзенбанка, мы организуем наш первый открытый Java MeetUp.
Подробности под катом.
Читать дальше →

Atlassian Jira Software функциональность в Jira плагине

Время на прочтение6 мин
Охват и читатели6.8K
Часто вижу вопросы о том, как сделать плагин с использованием функциональности из Jira Software. В интернете найти информацию сложно, поэтому я решил сделать статью, в которой расскажу, как подключить Jira Software функциональность к плагину для Jira.
Читать дальше →

О том, как я хотел учить других, а в результате научился сам

Время на прочтение6 мин
Охват и читатели12K
Привет, Хабр! Вот уже год как я работаю над онлайн-программой обучения Android-разработчиков в Академии e-Legion. Под катом рассказываю, как пришёл к идее стать преподом и с какими сложностями сталкиваюсь в процессе.


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

Модули Java 9 и внедрение зависимостей: используем Guice

Время на прочтение7 мин
Охват и читатели11K
Коллеги, привет!

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

Складывается впечатление, что модульная организация Java 9 потребует от программиста недюжинной изобретательности, и один из перспективных вариантов адаптации к такому дивному новому миру — это внедрение зависимостей. Именно по этому поводу внятно и интересно высказался в блоге O'Reilly уважаемый Пол Бэккер (Paul Bakker), один из авторов книги "Java 9 Modularity"


Приятного чтения и не забудьте проголосовать пожалуйста!
Читать дальше →

Виктор Гамов об Apache Kafka на jug.msk.ru

Время на прочтение2 мин
Охват и читатели7K
23 апреля 2018 года в московском офисе компании КРОК прошла встреча московского сообщества Java-разработчиков jug.msk.ru, на которой выступил Виктор Гамов. Тема выступления — продукт Apache Kafka.


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