Обновить
512K+

Java *

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

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

Пишем собственный шлюз для Thrift API

Время на прочтение14 мин
Охват и читатели13K
Микросервисы, как ни крути, — наше всё. Можно сопротивляться SOAP 2.0 сколь угодно долго, но рано или поздно или они придут за тобой и обратят в свою веру, или ты придёшь к ним сам и попросишь крестить себя огнём и мечом. Как и у любого архитектурного решения, у микросервисов есть свои минусы. Одним из них является необходимость в каждый микросервис включать какую-то логику по авторизации запросов от внешних систем или других микросервисов. Эта логика может быть напрямую «зашита» внутри микросервиса (и не важно, что это отдельная библиотека), делегирована другому микросервису, а может быть объявлена декларативно. Что значит декларативно? Например, можно договориться, что в каждый микросервис приходит особый HTTP-заголовок, или какая-то структура данных, в которой есть информация о пользователе, делающем запрос. И данным в этой структуре необходимо однозначно доверять. У всех трёх вариантов есть свои недостатки, но в рамках статьи мы разберём последний. Для его реализации обычно используется шаблон проектирования API Gateway:
image

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

Исследование распространенной малвари под Android

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

Часто вирусы для android приходят к нам при помощи рассылок. Раньше это были СМС, а теперь еще и современные мессенджеры. Мне было интересно посмотреть, что же сейчас на рынке вредоноса, поэтому зарегистрировалась и подала пару объявлений на avito.
Читать дальше →

Oracle прекращает выпуск браузерного плагина Java

Время на прочтение1 мин
Охват и читатели36K
К концу 2015 года разработчики ведущих браузеров или убрали поддержку встроенных плагинов, или анонсировали такие планы. Например, Mozilla собирается отказаться от поддержки плагинов NPAPI, потому что большинство их функций сейчас доступно через стандартные WebAPI. Chrome блокирует плагины NPAPI с апреля прошлого года. Браузер Edge тоже не поддерживает плагины. Таким образом, во всех ведущих браузерах скоро вообще не будет встроенной поддержки Flash, Silverlight, Java и др.

В связи с этим компания Oracle объявила, что начиная с версии JDK 9 прекратит выпуск браузерного плагина Java. Он будет удалён из Oracle JDK и JRE в будущем релизе Java SE.

Вполне логично: если плагин не поддерживается браузерами, то зачем его разрабатывать?
Читать дальше →

Алексей Рагозин и Артём Панасюк о распределённом нагрузочном тестировании на jug.msk.ru

Время на прочтение3 мин
Охват и читатели6.8K
На очередной встрече jug.msk.ru, прошедшей 20 января 2016 года традиционно в офисе компании КРОК, Алексей Рагозин и Артём Панасюк представили доклад «Распределённое нагрузочное тестирование на Java». Краткий рассказ с подробностями встречи далее.


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

Конфигурация приложений с помощью github

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


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

Я видел много проектов, где конфигурация подкладывается в файловую систему в виде properties/json/xml файлов с непостижимыми уму переоределениями в момент загрузки. И что же на самом деле использует приложение становится ясно только после просмотра лог файлов компонента либо во время отладки.
Git как хранилище конфигурации...

Видео лучших докладов Java-конференции JPoint 2015 — Часть 2

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


Как многие из вас знают, в конце апреля в Москве JUG.ru проведет четвертую по счету конференцию JPoint. Любителей окунуться в океан Java-технологий ждут два увлекательных дня с морем общения и кучей докладов. Месяц назад я начал рассказывать о лучших докладах прошлогодней JPoint. Сегодня пришло время второй части.

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

Top 5 докладов JPoint 2015

Рекурсия. Занимательные задачки

Время на прочтение14 мин
Охват и читатели419K
Здравствуй Хабрахабр!

В этой статье речь пойдет о задачах на рекурсию и о том как их решать.
image

Кратко о рекурсии


Рекурсия достаточно распространённое явление, которое встречается не только в областях науки, но и в повседневной жизни. Например, эффект Дросте, треугольник Серпинского и т. д. Один из вариантов увидеть рекурсию – это навести Web-камеру на экран монитора компьютера, естественно, предварительно её включив. Таким образом, камера будет записывать изображение экрана компьютера, и выводить его же на этот экран, получится что-то вроде замкнутого цикла. В итоге мы будем наблюдать нечто похожее на тоннель.

В программировании рекурсия тесно связана с функциями, точнее именно благодаря функциям в программировании существует такое понятие как рекурсия или рекурсивная функция. Простыми словами, рекурсия – определение части функции (метода) через саму себя, то есть это функция, которая вызывает саму себя, непосредственно (в своём теле) или косвенно (через другую функцию).

О рекурсии сказано много. Вот несколько хороших ресурсов:
Читать дальше →

OpenJDK 9 наконец-то портирован на iOS

Время на прочтение1 мин
Охват и читатели11K
Инструкции по сборке проекта под iOS уже были доступны уже в течение некоторого времени, однако у простых разработчиков как-то не получалось запускать что-то сложнее чем «здравствуй мир» на реальных девайсах.

40 Минут назад, некто Johan написал в рассылку mobile-dev@openjdk о том, что ему удалось запустить приложение использующее Gluon Charm (Material Design UI) в JavaFX (OpenJFX 9) в Java на iPad mini. На мой взгляд это существенно достижение!
Оригинал текста письма
Hi,
Thanks to the great instructions at
openjdk.java.net/projects/mobile/ios.html I have everything working
now on a real iPad.
I run an application using Gluon Charm (Material Design UI controls) on top
of JavaFX (OpenJFX 9) on top of Java on my iPad mini, so this is a
real-world complete stack.


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

Пример создания веб-приложения с помощью библиотек Vaadin

Время на прочтение7 мин
Охват и читатели23K
В 2016 многие из нас пообещали себе новые свершения, например, прочесть отложенную книгу, освоить новый вид спорта или язык программирования т.п. Изучение новых технологий в чем-то сродни вышеописанным действиям. Итак, для таких энтузиастов небольшой обзор про удобные «инструменты» для разработки web-приложений на языке Java.
Новый цикл статей будет посвящена Vaadin и Liquibase.
В первой статье хочу вам рассказать о нескольких этапах для начала знакомства с этим FrameWork-ом(Vaadin). Мы поговорим о «загрузке» шаблона и первичном добавлении элементов на «макет». Немного поговорим о Liquibase. В следующих статьях планируется добавить обработку файлов xml.
Читать дальше →

Data Driven Realtime Rule Engine в Wargaming: анализ данных. Часть 2

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

Блок RAW Data Collection описан в первой статье и представляет собой набор из standalone-адаптеров.
В основе следующих двух лежит параллельная потоковая обработка данных. В качестве фреймворка используется Spark Streaming. Почему именно он? Было решено, что стоит использовать единый дистрибутив Hadoop – Cloudera, который из коробки включает в себя Spark, HBase и Kafka. К тому же в компании на тот момент уже имелась экспертиза по Spark.
Читать дальше →

QA: Conference приглашает спикеров

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


Есть более свежий анонс: habrahabr.ru/company/luxoft/blog/280524

Через три месяца, в конце апреля, в пяти городах России (Санкт-Петербург, Москва, Омск, Новосибирск и Екатеринбург) пройдет крупнейшая в своем классе конференция по тестированию программных систем – QA: Conference. В ней мы постарались собрать воедино лучшие компоненты, которыми должна обладать хорошая конференция:
  • Лучшие специалисты по тестированию — в качестве спикеров
  • Низкая стоимость билетов — 3,000 рублей
  • Три потока вещания докладов — в трех залах
  • Два потока мастер-классов (приходите с ноутбуками и настроенным окружением)
  • Видеозапись докладов по всем городам. Ведь не все доклады Москвы будут в Омске, например. Но и не все доклады других городов будут в Москве. Участники получат записи всех докладов.

По мастер-классам предвосхищу вопрос: как же так, мастер-классы в параллели с докладами? Не совсем: мастер-классы закончатся через 3 часа после конференций. Т.е. вы сможете на них попасть как во время докладов (будет меньше народа), так и после докладов (чтобы не пропустить сами доклады, послушать и позадавать вопросы)

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

Stream API: универсальная промежуточная операция

Время на прочтение12 мин
Охват и читатели30K
Я разрабатываю бесплатную библиотеку StreamEx, которая расширяет стандартное Java 8 Stream API, добавляя туда новые операции, коллекторы и источники стримов. Обычно я не добавляю всё подряд, а всесторонне рассматриваю каждую потенциальную фичу. Например, при добавлении новой промежуточной (intermediate) операции встают такие вопросы:

  1. Будет ли она действительно промежуточной, то есть не будет трогать источник до выполнения терминальной операции?
  2. Будет ли она ленивой и вытаскивать из источника не больше данных, чем требуется?
  3. Сработает ли она на бесконечном стриме? Требует ли она ограниченный объём памяти?
  4. Будет ли она хорошо параллелиться?

Минусик по любому из этих пунктов заставляет серьёзно задуматься, добавлять ли такую операцию. Минусик по первому — это сразу нет. Например, у конкурентов в jOOλ есть операция shuffle(), которая выглядит как промежуточная, но на самом деле прямо сразу потребляет весь стрим в список, перемешивает его и создаёт новый стрим. Я такое не уважаю.

Минусики по остальными пунктам не означают сразу нет, потому что есть и стандартные операции, которые их нарушают. Второй пункт нарушает flatMap(), третий — sorted(), четвёртый — всякие limit() и takeWhile() (в JDK-9). Но всё-таки я стараюсь этого избегать. Однако на днях я открыл для себя операцию, которая плохо параллелится и в зависимости от использования может не сработать на бесконечном стриме, но всё же слишком хороша. Через неё удаётся буквально в несколько строчек выразить как практически любую существующую промежуточную операцию, так и кучу несуществующих. Я назвал операцию headTail().
Читать дальше →

Google Cloud Storage c Java: изображения и другие файлы в облаках

Время на прочтение15 мин
Охват и читатели15K
В продолжение серии статей о веб-разработке на Java на платформе Google App Engine / Google Cloud Endpoints рассмотрим сервис для облачного хранения файлов Google Cloud Storage.

В целом схема выглядит следующим образом: сервер на бэкэнде генерирует временную ссылку (адрес) для передачи файла в определенный контейнер (bucket) нашего хранилища, которая на фронтэнде вставляется в форму для передачи файла. Пользователь на указанный адрес посылает POST HTTP-request с одним или несколькими файлами в теле запроса, файлы принимаются и размещаются в хранилище, и HTTP-request вместе с данными о размещенных файлах принимается сервлетом, который обработав информацию о размещенных файлах, возвращает пользователю HTTP response: JSON или text/html, или в общем что пожелаем.

Файлы сохраняются в хранилище, у сервлета есть в распоряжении ключ который дает возможность доступа к файлу, в частности можно выдать файл пользователю с помощью другого сервлета либо создать «статичную» ссылку (https://).
Доступ к хранилищу также доступен через веб-интерфейс, и из командной строки с помощью утилиты gsutil.
Читать дальше →

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

Hibernate envers. Подмена ID пользователя совершившего изменение

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

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

Об аудировании в Hibernate написано уже немало. Я хочу рассказать о решении не совсем стандартной задачи — записи в таблицу ревизий ID любого пользователя, назначаемого непосредственно перед операцией записи сущности в базу данных. Стандартное решение, предложенное в официальной документации — использование ID пользователя, сохраненного в сессионном компоненте. Но возможна ситуация, когда ID пользователя необходимо подменить. Пример: пользователь совершает операции через взаимодействие с сервером телефонии посредством DTMF сигналов. В данном случае сессию создавать вообще не нужно. Я долго искал решение в интернете, но так ничего и не нашёл, поэтому предлагаю вашему вниманию свою версию. Возможно кому-то из новичков, вроде меня, она окажется полезной.
Подробности

Автоматизация Jira на Groovy

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

В крупных организациях часто возникает необходимость прикрутить к JIRA какой-либо дополнительный функционал, которого нет в стандартной поставке: автоматизацию, интеграцию с другими системами и прочие кастомизации. Зачастую это решается сторонними плагинами, в Atlassian Market их огромное количество. Но что делать, если подходящего плагина нет? Очевидно, написать свой. Ещё один вариант для расширения — плагины, добавляющие возможность использовать свои скрипты в JIRA: ScriptRunner (Groovy), Jira Scripting Suite (SIL), JJupin (Jython).

В этой статье я расскажу о самом популярном и функциональном из них — ScriptRunner от Adaptavist.
Читать дальше →

Пишем свой spring-boot-starter

Время на прочтение5 мин
Охват и читатели73K
Большинство java-разработчиков уже познакомились с проектом Spring Boot, позволяющим быстро написать приложение, использующее различные компоненты Spring Framework (Spring MVC, Spring Data и многие другие).

Всё удобство Spring Boot основано на использовании так называемых Starter, которые позволяют получить набор сконфигурированных бинов, готовых к использованию и доступных для конфигурации через properties-файлы. Но что делать, если для нужной технологии еще не написано стартера?
Читать дальше →

Опыт использования Intel Multi-OS Engine для разработки iOS-приложения на Java

Время на прочтение7 мин
Охват и читатели12K
В августе на Intel Developer Forum в Сан-Франциско мы представили нативное мобильное приложение для iPаd для мониторинга пациентов, разработанное с помощью платформы Intel Multi-OS Engine. Приложение предоставляет данные о наиболее важных параметрах состояния пациента, подключаясь к прикроватным мониторам по WiFi-сети (более подробно о самом приложении и его функционале можно почитать на нашем сайте).
В данной статье мы поделимся опытом использования платформы Intel Multi-OS Engine, которая позволяет разрабатывать нативные приложения для iOS на Java.
Читать дальше →

Анонс шестой встречи Java User Group EKB

Время на прочтение3 мин
Охват и читатели3K
Привет, Хабр!

JUG.EKB — Java User Group Екатеринбурга, на встречах JUG.EKB мы обсуждаем различные технологий из мира Java, делимся опытом и пьем кофе во имя Java!
Мы регулярно проводим встречи JUG.EKB с лекциями Java экспертов на самые интересные темы (и да, мы записываем видео каждой встречи!).
Наш сайт jugekb.ru, сообщество в ВК — vk.com/jugekb.

Приглашаем всех java разработчиков на шестую встречу JUG.EKB!
Зайди под кат, узнай подробности

Spring Boot — проблема с безопасностью исполняемых jar файлов запускаемых как init.d сервис

Время на прочтение2 мин
Охват и читатели7K
В spring boot появилась интересная возможность собрать «исполняемый» jar файл, который также может быть init.d сервисом. То есть достаточно будет прописать символьную ссылку из /etc/init.d/myapp на jar-файл и через update-rc.d настроить автозапуск сервиса. Технически jar файл становится bash-скриптом в конце которого находятся бинарные данные.

Описание данной возможности: docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html

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

Дайджест лучших вебинаров для программистов от GeekBrains

Время на прочтение3 мин
Охват и читатели15K
Друзья, вчера исполнилось 6 лет с того момента, как мы стали на путь обучения разработке.

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



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