Обновить
128K+

Java *

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

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

Maven, где мои артефакты? Еще одна статья про управление зависимостями

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

Java XML API: выбираем правильно. StAX: работаем с удовольствием

Время на прочтение5 мин
Охват и читатели62K
Здравствуйте!
Несмотря на снижение популярности формата XML с начала 2000х, он прочно занял свои ниши. Я сталкивался с обработкой XML ~ в 60% проектов и посвятил ей занятие своей стажировки Masterjava. Наиболее частые его применения: XHTML, SOAP, различные конфигурации (например Tomcat, SoapUI, IntelliJ IDEA, Spring XML конфигурация), импорт-экспорт данных.

В Java есть несколько API для работы с XML и для разработчика важно понимать, какое из API требуется выбрать в каждой конкретной ситуации. В этой статье я кратко перечислю все Java XML API, их назначение и примеры использования, и подробнее остановлюсь на работе с достаточно редкой, но в ряде случаев единственно верной технологией StAX. Предполагается что с элементами XML вы уже знакомы.
Читать дальше →

Планирование задач в Android с использованием JobScheduler и IntentService

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


Иногда при разработке под OS Android возникает необходимость выполнять ресурсоемкие операции периодически, регулярно или по запросу, и для этих операций важно, например, наличие интернета или чтобы устройство "не спало". Чаще всего при решении подобных задач применяются AlarmManager, WakefulBroadcastReceiver, либо же вообще WakeLock контролируется вручную. Все это не рекомендуется в документации для разработчиков под Android, а WakefulBroadcastReceiver уже отмечен как deprecated с API level 26.0.0.


Что же мы можем сделать, чтобы следовать рекомендациям Google и создавать приложения с более гибким поведением на версиях Android 5.0+, в которых энергосбережению уделяется все больше внимания? Если вы готовы выставить минимальный API level 21.0.0 для своего приложения, предлагаю под катом пример использования JobScheduler в связке с IntentService для последовательного выполнения трудоемких задач.

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

Онлайн-квест от MBLTdev: призы и ответы

Время на прочтение2 мин
Охват и читатели6K
Привет, Хабр! В среду мы запилили квест, и судя по потоку комментариев и сообщений, квест вам понравился и заставил поломать голову. Мы рады! В этом посте подведём итоги: раскроем правильные ответы и вручим призы.

Статистика




Призы


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

  • Годовые подписки на продукты JetBrains получили Инсаф, Михаил и Даниил.
  • Билеты на конференцию мобильных разработчиков MBLTdev 2017 — Алексей Лагута, Михаил и Артём.
  • Футболки MBLTdev 2017 — Устинов Валерий, Руслан Ахтямов и Павел Камаев.
  • Скидка 20% на билеты на MBLTdev 2017 — наш подарок всем кто прошёл квест до конца.

Теперь расскажем, как надо было решать задания. Под катом — ответы.
Читать дальше →

Spark — Потрясающий веб-микрофреймворк для Java

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

Небольшое вступление


Spark — это просто чудесный микрофреймворк для создания веб-приложений на джаве без особых усилий.  Spark стремится к простоте и обеспечивает только минимальный набор функций. Тем не менее он предоставляет все необходимое для создания веб-приложения, которые поместятся в несколько строк кода. С синтаксисом, вдохновленным Sinatra, код выглядит очень чистым.
Читать дальше →

Много, быстро, распределенно: как выбирать In-Memory Data Grid-решение

Время на прочтение11 мин
Охват и читатели14K
Нужен был способ дать машине память, чтобы она могла, в терминологии Тьюринга, быстро зарывать данные и так же быстро их выкапывать.
Нил Стивенсон, «Криптономикон»

IMDG
Фото модуля памяти на магнитных сердечниках в мейнфрейме IBM 1401, использованное в качестве фона на этом изображении, напоминает нам о временах, когда компьютеры были большими, а память — дорогой. Сегодня, как мы узнаем из поста ниже, все поменялось...

IMDG, гриды, In-Memory Data Grids — как только не называют системы, которые оказались темой поста. И хотя название совершенно правдиво, да и гриды, как инструмент, всё более популярны, многие до сих пор путают их то с системами распределённых кэшей, то с NoSQL-базами данных, а то и вовсе полагают, что «если разместить MySQL на RAM-диске, то получится почти IMDG».

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

Какие?

«Если бы сейчас начали сначала, снова выбрали бы Scala»: Tinkoff.ru о Scala-разработке

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


У Scala репутация языка, с которым сложности подстерегают с разных сторон: порог входа выше, чем у Java, а разработчиков куда меньше (так что может быть сложнее собрать команду). В итоге российские компании нечасто решаются его использовать. Но в Tinkoff.ru активно используют далеко не первый год — и мы решили расспросить компанию, как на практике живётся с Scala. Поскольку сложности могут быть и техническими, и кадровыми, вопросы задали двум разным сотрудникам: руководителю отдела разработки программных интерфейсов Роману Докучаеву и руководителю HR-проектов Ольге Шпунтенко.

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

Скажи «нет» Electron! Пишем быстрое десктопное приложение на JavaFX

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

Если вы не знаете Electron, то это по сути веб-браузер (Chromium) в котором работает только ваше веб-приложение… словно настоящая десктопная программа (нет, это не шутка)… это даёт возможность использовать веб-стек и разрабатывать кросс-платформенные десктопные приложения.

Самые новые, хипстерские десктопные приложения в наше время сделаны на Electron, в том числе Slack, VS Code, Atom и GitHub Desktop. Необычайный успех.

Мы писали десктопные программы десятилетиями. С другой стороны, веб только начал развиваться менее 20 лет назад, и на протяжении почти всего этого времени он служил только для доставки документов и анимированных «гифок». Никто не использовал его для создания полноценных приложений, даже самых простых!
Читать дальше →

Онлайн-квест от MBLTdev. Призы от JetBrains

Время на прочтение1 мин
Охват и читатели17K
Я хочу сыграть с тобой в одну игру…Твоё первое задание — найти вход в квест. Ищи подсказку в видео.


Самые быстрые получат призы:

— годовые подписки на любой продукт от JetBrains,
— классные футболки,
— билеты и скидки на конференцию мобильных разработчиков MBLTdev 2017.

UPD: Подведём итоги и раздадим призы в понедельник 9-го октября.

Иван Пономарёв и Николай Поташников об отображении табличных данных, Celesta и Flute на jug.msk.ru

Время на прочтение2 мин
Охват и читатели2.6K
21 сентября 2017 года на встрече московского сообщества Java-разработчиков выступили Иван Пономарёв и Николай Поташников. Иван — с докладом «Скрытая сложность повседневной задачи: отображение табличных данных», совместный рассказ обоих докладчиков — про программные продукты Celesta и Flute открытой платформы для создания бизнес-логики в Java-экосистеме.


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

Что последует за вебом?

Время на прочтение18 мин
Охват и читатели41K
В первой части я утверждал, что пришло время подумать, как заменить современную веб-платформу для приложений. Причины — её низкая производительность и в принципе нерешаемые проблемы безопасности.

Кое-кто решил, что я пишу слишком в негативном ключе и не обращаю внимания на положительные стороны веба. Так и есть: первая часть была в стиле «Обсудим факт, что мы попали в глубокую яму», а вторая часть — «Как разработать кое-что получше?» Это огромная тема, так что она на самом деле двумя частями не ограничится.

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

Работа с ресурсами, или как я пропихивал @Cleanup

Время на прочтение15 мин
Охват и читатели7.6K
Это вымышленная история, и все совпадения случайны.

Наконец-то команда разработки компании Unknown Ltd. выпустила релиз вовремя. Руководитель отдела разработки Эндрю, системный архитектор Юг и простой рядовой разработчик Боб собрались на планирование.
Читать дальше →

Продолжение поста от школьников. Как Хабрахабр смог изменить нашу судьбу?

Время на прочтение3 мин
Охват и читатели24K
К публикации «Разработка прибыльной Android игры двумя школьниками».

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

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

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

Как запустить Java-приложение с несколькими версиями одной библиотеки в 2017 году

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

Как запустить Java-приложение с несколькими версиями одной библиотеки в 2017 году


КДПВ, ничего интересного


Хочу поделиться решениями одной проблемы, с которой мне пришлось столкнуться, плюс исследование данного вопроса в контексте Java 9.


дисклеймер

Писатель из меня ещё тот (пишу в первый раз), поэтому закидывание вкусными помидорами с указанием причин только приветствуется.
Сразу договоримся, что статья не годится в качестве руководства по:


  • Java 9
  • Elasticsearch
  • Maven

Если по последним именам информации в сети полно, то по первому… со временем появится, по крайней мере здесь есть необходимая информация.


Представим себе простую ситуацию: разворачиваем кластер Elasticsearch и загружаем в него данные. Мы пишем приложение, которое занимается поиском в этом кластере. Поскольку постоянно выходят новые версии Elasticsearch, мы привносим в кластер новые проблемы фичи с помощью rolling upgrade. Но вот незадача — в какой-то момент у нас сменился формат хранимых данных (например, чтобы максимально эффективно использовать какую-то из новых фич) и делать reindex нецелесообразно. Нам подойдёт такой вариант: ставим новый кластер на этих же машинах — первый кластер со старой схемой данных остаётся на месте только для поиска, а поступающие данные загружаем во второй с новой схемой. Тогда нашему поисковому компоненту потребуется держать на связи уже 2 кластера.

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

Пять вещей, которые нужно знать о Spring Framework 5

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

На этой неделе, сразу за релизом Java 9 вышла новая мажорная версия одного из самых популярных фреймворков для разработки приложения на Java — Spring Framework версии 5. Под катом подробности и краткое описание, что же поменялось.

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

Apache® Ignite™ + Persistent Data Store — In-Memory проникает на диски. Часть I — Durable Memory

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


В Apache Ignite, начиная с версии 2.1 появилась собственная реализация Persistence.

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

Всё началось с фундаментальных проблем предыдущего механизма, который позволял интегрировать In-Memory Data Grid с внешними постоянными хранилищами, например, Cassandra или Postgres.

Такой подход накладывал определенные ограничения — например, было невозможно выполнять SQL или распределенные вычисления поверх данных, которые находятся не в памяти, а в таком внешнем хранилище, был невозможен холодный запуск и низкий RTO (Recovery Time Objective) без существенных дополнительных усложнений.

Если вы используете Apache Ignite Persistence, то оставляете себе все обычные возможности Apache Ignite — ACID, распределенные транзакции, распределенный SQL99, доступ через Java/.NET API или интерфейсы JDBC/ODBC, распределенные вычисления и так далее. Но теперь то, что вы используете, может работать как поверх памяти, так и поверх диска, который расширяет память, на инсталляциях от одного узла до нескольких тысяч узлов.

Давайте посмотрим, как устроен Apache Ignite Persistence внутри. Сегодня я рассмотрю его основу — Durable Memory, а в следующей публикации — сам дисковый компонент.
Читать дальше →

В поисках перформанса, часть 2: Профилирование Java под Linux

Время на прочтение11 мин
Охват и читатели21K
Бытует мнение, что бесконечно можно смотреть на огонь, воду и то, как другие работают, но есть и ещё кое-что! Мы уверены, что можно бесконечно говорить с Сашей goldshtn Гольдштейном о перформансе. Мы уже брали у Саши интервью перед JPoint 2017, но тогда разговор касался конкретно BPF, которому был посвящен доклад Саши.

На этот раз мы решили копнуть глубже и узнать фундаментальные проблемы мониторинга производительности и варианты их решения.


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

MBLTdev 2017: хардкорные доклады по Android-разработке

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

Остался месяц до MBLTdev 2017. 27 октября в пространстве Digital October уже в 4-й раз пройдёт ежегодная конференция мобильных разработчиков.

Под катом: описания докладов Android-трека (про iOS рассказали вчера), CodeLabs, небольшой опрос и подарки от JetBrains и Skyeng.
Читать дальше →

Stream API & ForkJoinPool

Время на прочтение7 мин
Охват и читатели42K
Продолжаем серию полезностей, которыми мы делимся с вами. Теперь уже вновь по Java.

Если вы уже знакомы со Stream API и использовали его, то знаете, что это удобный способ обработки данных. С помощью различных встроенных операций, таких как map, filter, sort и других можно преобразовать входящие данные и получить результат. До появления стримов разработчик был вынужден императивно описывать процесс обработки, то есть создавать цикл for по элементам, затем сравнивать, анализировать и сортировать при необходимости. Stream API позволяет декларативно описать, что требуется получить без необходимости описывать, как это делать. Чем-то это напоминает SQL при работе с базами данных.



Стримы сделали Java-код компактнее и читаемее. Еще одной идеей при создании Stream API было предоставить разработчику простой способ распараллеливания задач, чтобы можно было получить выигрыш в производительности на многоядерных машинах. При этом нужно было избежать сложности, присущей многопоточному программированию. И это удалось сделать, в Stream API есть методы BaseStream::parallel и Collection.parallelStream(), которые возвращают параллельный стрим.
Читать дальше →

Перформанс: что в имени тебе моём? — Алексей Шипилёв об оптимизации в крупных проектах

Время на прочтение26 мин
Охват и читатели36K
Оптимизация производительности издавна не даёт покоя разработчикам, представляясь своеобразным «золотым ключиком» к интересным решениям и хорошему послужном списку. Большую обзорную экскурсию по ключевым вехам оптимизации больших проектов  – от общих принципов до ловушек и противоречий —  на прошедшем JPoint 2017 провёл Алексей Шипилёв, эксперт по производительности.



Под катом — расшифровка его доклада.