Обновить
512K+

Java *

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

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

Как ускорить сборку с Maven

Время на прочтение3 мин
Охват и читатели34K
Maven
Что делать, если сборка (build) с Maven проходит слишком медленно? Ведь когда сборка длится слишком долго, любой, даже самый терпеливый разработчик, может заскучать и отвлечься.

Для быстрого поиска в Google или для закладок, сразу предлагаю итоговое решение:
mvn package -am -o -Dmaven.test.skip -T 1C

— для сборки проекта без тестов.
Читать дальше →

Как написать SQL-запрос на Slick и не открыть портал в ад

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


Slick — это не только фамилия одной из величайших солисток всех времён, но и название популярного Scala-фреймворка для работы с базами данных. Этот фреймворк исповедует «функционально-реляционный маппинг», реализует реактивные паттерны и обладает официальной поддержкой Lightbend. Однако отзывы разработчиков о нём, прямо скажем, смешанные — многие считают его неоправданно сложным, и это отчасти обоснованно. В этой статье я поделюсь своими впечатлениями о том, на что стоит обратить внимание при его использовании начинающему Scala-разработчику, чтобы в процессе написания запросов случайно не открыть портал в ад.
Читать дальше →

Используем RxJava и Retrofit на Android, учитывая поворот экрана

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

Решил я однажды таки попробовать дико популярный нынче Rx. А заодно и Retrofit. И посмотреть, как с их помощью реализовать стандартную задачу: получить с сервера набор данных, отобразить их и при этом ничего не терять при поворотах экрана и не делать лишних запросов. Первый вариант у меня получился сразу почти — просто взял и вызвал cache() на Observable, получаемый из синглтона, но он меня не устраивал — для принудительного обновления приходилось, по какой-то причине, пересоздавать экземпляры классов Retrofit и его же реализации моего интерфейса для API. Пересоздание же самого Observable эффекта не давало — всегда возвращались старые данные вместо запуска нового сетевого запроса и получения новых данных.


После долгих мучений с новой для себя технологией выяснил, что во всём был виновен cache() (точнее, наверное, моё неправильное оного понимание). В итоге сделал так: фрагмент запускает метод, подписывающий Subscriber синглтона на Observable retrofit-a, коий запускает onNext и onError BehaviorSubject-a, на который подписывается уже Subscriber фрагмента. Код на GitHub тут, подробности — под катом.

Читать без регистрации и СМС

Некоторая практика применения Hibernate

Время на прочтение16 мин
Охват и читатели15K
Поскольку в процессе продолжения обучения решил разобраться с Hibernate для организации работы с базами данных посредством максимального ухода от использования SQL-запросов, то было решено сформировать некий абстрактный пример. Он должен быть с одной стороны простым, а с другой дать возможность проверить работоспособность всех типовых операций, которые при обращении к БД возникают.

Ниже представляю на суд свое творение. Изначально я опирался на следующий материал. Как по мне он довольно интересен, но всегда интересно сформировать полное приложение, пусть и простое. Итак, что же получилось…
Читать дальше →

Введение в JavaFx и работа с layout в примерах

Время на прочтение7 мин
Охват и читатели87K
Доброго времени суток. В этой статье я расскажу основы работы с классами пакета javafx.scene.layout.* (BorderPane, AnchorPane, StackPane, GridPane, FlowPane, TilePane, HBox, VBox) и их особенностями в пошаговых примера и иллюстрациях. Также в кратце пробежимся по иерархии классов JavaFx.


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

JavaFX наглядное создание простого приложения и нативная упаковка в Eclipse

Время на прочтение3 мин
Охват и читатели49K
Сегодня я вам расскажу, как поэтапно с нуля создать простое приложение на JavaFX, что для этого потребуется, покажу как сделать установщик Windows (msi) для вашего приложения.


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

Oracle прекратила разработку Java EE?

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


Прошло два года с момента выпуска Java 8 и многие с нетерпением ожидают выхода Java 9, который отодвинули на март 2017 года.

Тем временем в лагере разработчиков Java накаляются страсти. Будущее серверной платформы Java Platform, Enterprise Edition (Java EE) выглядит крайне смутно. Месяц назад компания Oracle объявила о значительной задержке с выпуском Java EE 8, и это был первый звонок. Как сейчас стало известно изданию Ars Technica, компания Oracle вовсе прекратила финансирование и разработку Java EE. Издание пишет, что традиционная бизнес-модель Oracle сейчас напрямую угрожает самому существованию платформы Java.

Созданная в Sun открытая платформа, в которую вложено столько усилий OpenSource сообщества, которая работает на сотнях тысяч серверов и корпоративных приложений, в том числе в высокопроизводительных проектах, может остаться без финансовой поддержки.

Если что-то не приносит денег, то нет причин это разрабатывать, считает Oracle. Обычный бизнес, ничего личного. И ничего нового для всех, кто знает историю Oracle.
Читать дальше →

Работа с Bluetooth LE из Java-приложений

Время на прочтение6 мин
Охват и читатели22K
Сегодня расскажем о том, как, пользуясь Java, создавать приложения для IoT, которые могут работать с удалёнными Bluetooth Low Energy-устройствами. Разработку таких приложений, благодаря проекту с открытым исходным кодом TinyB, поддерживает Intel IoT Development Kit. TinyB предоставляет разработчику простые API для C++ и Java, которые позволяют работать с BLE-устройствами. Здесь рассмотрим API TinyB для Java, а эксперименты будем проводить на Intel Edison.


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

Instant Run: как это работает?

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

Всем привет! Данная статья является переводом заметки Android-разработчика и автора книги «Android 4. Программирование приложений для планшетных компьютеров и смартфонов» Рето Майера. Над переводом работал Android-отдел компании Лайв Тайпинг. Оригинальная статья доступна здесь.


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


Взять, к примеру, Instant Run. Это фича Android Studio, которая при помощи «магии» сокращает время, затрачиваемое на сборку и деплой инкрементальных изменений кода в процессе написания / тестирования / дебаггинга.


Я называю это магией потому, что со стороны всё выглядит именно так. После первого нажатия Run или Debug всё работает так, как того и следует ожидать. Однако каждый раз, когда в код вносятся изменения и снова нажимается кнопка Run или Debug (но в этот раз — с иконкой в виде молнии), изменения деплоятся на мой телефон настолько быстро, что я не успеваю это заметить.


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

Shake Detector для Android на RxJava

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


Вступление


Началось все с того, что была поставлена задача отменять последнее действие в приложении при встряхивании устройства. Но как понять, что случилось это самое встряхивание? Через пару минут изучения вопроса стало ясно, что надо подписываться на события от акселерометра и дальше пытаться как-то определить, что устройство встряхнули.
Обнаружились и готовые решения. Все они были довольно похожи, но в чистом виде они меня не устраивали, и я написал собственный «велосипед». Это был класс, который подписывался на события от сенсора и менял свое состояние по мере их поступления. Потом пару раз я и мои коллеги подкручивали шестеренки этого велосипеда, и в результате он стал напоминать нечто из «Безумного Макса». Я пообещал, что, как выдастся свободное время, приведу это безобразие в порядок.

И вот, читая недавно статьи по RxJava, я вспомнил про эту задачу. «Хм, — подумал я, — RxJava выглядит очень подходящим инструментом для такого рода проблем». Не откладывая в долгий ящик, взял и написал решение на RxJava. Результат меня поразил: вся логика заняла 8 (восемь!) строк! Я решил поделиться своим опытом с другим разработчикам. Так появилась на свет эта статья.

Надеюсь, этот простой пример поможет принять решение тем, кто размышляет о применении RxJava в своих проектах.

Статья ориентирована на читателей, имеющих базовый опыт разработки под Android. Исходный код готового приложения можно посмотреть на GitHub.

Приступим!
Читать дальше →

Теория и практика AOP. Как мы это делаем в Яндексе

Время на прочтение8 мин
Охват и читатели22K
Одна из ключевых особенностей работы в Яндексе — это свобода выбора технологий. В Авто.ру, где я работаю, нам приходится поддерживать большой пласт исторических решений, поэтому любая новая технология или библиотека встречается двумя вопросами коллег:

— Насколько это увеличит дистрибутив?
— Как это поможет нам писать меньше и эффективнее?



Сейчас мы используем RxJava, Dagger 2, Retrolambda и AspectJ. И если о первых трёх технологиях слышал каждый разработчик, а многие даже применяют их у себя, то о четвёртой знают только хардкорные джависты, пишущие большие серверные проекты и разного рода энтерпрайзы.

Передо мной стояла цель ответить на эти два вопроса и обосновать использование AOP-методологии в Android-проекте. А это значит — написать код и показать наглядно, как аспектно-ориентированное программирование поможет нам ускорить и облегчить работу разработчиков. Но обо всём по порядку.

Запасаемся поп-корном и готовим мозг к загрузке

Java & PostgreSQL — встреча с Альваро Эрнандесом, Санкт-Петербург

Время на прочтение2 мин
Охват и читатели4.2K
В среду, 6 июля, в 20:00, в питерском офисе компании Oracle состоится встреча JUG.ru с Альваро Эрнандесом, экспертом по PostgreSQL. Тема встречи — особенности взаимодействия Java с PostgreSQL.

Язык встречи — английский. Участие — бесплатное. Количество мест ограничено, необходима регистрация по ссылке.

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

Как я писал классические танки с интеллектом

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

Вступление


Я являюсь независимым разработчиком приложений под Android (а конкретней — полтора года разработки интеллектуальной версии классической всеми любимой культовой игры "Танчики 1990").


Почему я решил написать эту игру: к играм я имею ещё более непосредственное отношение (играю в них). В плэймаркете я не увидел ни одной 2D-игры, где присутствовал бы алгоритм принятия решений о поиске кратчайшего пути. Я не говорю о более сложных играх, написанных на мощных движках. От чего зависит процент таких игр, я не знаю. Или это следствие идейной составляющей, или же результат конъюнктуры игрового рынка в целом, мне неизвестно. Моё личное мнение: таких игр должно быть больше.


Под интеллектуальной составляющей игры мы будем понимать ботов, имитирующих живых партнёров (оппонентов, союзников), в зависимости от игрового процесса в целом.


Имитация оппонента в контексте мною написанной игры — это скорее "псевдоинтеллект" (оптимизированное варьирование между целями — задачами и, как следствие, между поиском путей).


Как алгоритм поиска пути я использовал А* (A-star). Вот его моя реализация на java:

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

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

Как работает умный обработчик служебных смс (показывает только важную информацию)

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

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


1. Как это работает


В манифесте прописываем разрешение на получение и чтение SMS


<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>`
Читать дальше →

Реализация интерактивных диаграмм с помощью ООП на примере прототипа редактора UML-диаграмм. Часть 2

Время на прочтение9 мин
Охват и читатели7.9K
Это — окончание предыдущей публикации, в которой я рассказывал, как с нуля создавать интерфейс с интерактивной графикой в объектно-ориентированной среде разработки. В первой части мы рассмотрели ключевые архитектурные идеи этой системы: использование композиции, делегирования и шаблонных методов.

Сейчас я перехожу к более рутинным вопросам и рассмотрю построение класса, отвечающего за обработку событий мыши и масштабирование, панорамирование, выделение объектов и drag&drop.

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

Особенности работы JIT-компиляторов в HotSpot JVM — встреча с Дагом Хокинсом, Санкт-Петербург

Время на прочтение2 мин
Охват и читатели6.7K
В четверг, 30 июня, в 20:00, в питерском офисе компании Luxoft состоится встреча JUG.ru с Дагом Хокинсом, JVM-инженером в Azul Systems. Тема встречи — особенности работы JIT-компиляторов в HotSpot JVM.

Язык встречи — английский. Участие — бесплатное. Количество мест ограничено, необходима регистрация по ссылке.

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

Как стать профессиональным веб-разработчиком: практическое руководство

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

Дорога длинна и трудна, но интересна и полезна!

Статья задумывалась как практическое руководство для желающих стать профессиональным веб-разработчиком. Я уже более 20 лет пишу код для веба. Я ежедневно работаю с веб-разработчиками и помогаю им. В статье я опишу, что вам нужно выучить, когда вам нужно это выучить и где взять информацию (чаще всего даже бесплатно). Затем я дам совет по получению реального опыта, и что самое важное – по получению денег за написание кода.

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

Что нужно помнить:

1. Статью разрешается пролистывать

Руководство может помочь вам вне зависимости от вашего положения на дороге к профессиональной разработке. Прокрутите его к тому заголовку, который лучше всего описывает ваше сегодняшнее положение, и читайте оттуда. Если вы только начали этот путь, или пока размышляете об этом – последуйте совету Короля из «Алисы в стране чудес»:

Начните с начала, и продолжайте, пока не дойдёте до конца; и там уже остановитесь.
Читать дальше →

Нейронная сеть как предиктор для кодирования изображений формата PNG

Время на прочтение5 мин
Охват и читатели15K
Предлагаю вашему вниманию перевод статьи Neural Network As Predictor For Image Coding (PNG). Блог автора находится здесь.

Тема исследования


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

Сжатие


Классически PNG-компрессия делится на два шага:

  1. Предварительная фильтрация (с использованием предикторов);
  2. Компрессия (с помощью DEFLATE).

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

Java библиотека для эффективной передачи CSS и JavaScript

Время на прочтение8 мин
Охват и читатели9.1K
В данной статье описывается способ передачи JavaScript и CSS методом соединения ресурсов, с последующими их минимизацией и сжатием, при помощи небольшой Java библиотеки «Combinatorius», что позволяет ускорить и упростить передачу контента.

Демо: combinatorius.dkiriusin.com
GitHub: github.com/deniskiriusin/combinatorius

Основные возможности библиотеки


  1. Соединение JavaScript и CSS в один JavaScript и CSS ресурс соответственно для сокращения количества HTTP запросов.
  2. Локальное кэширование сгенерированных данных для улучшения времени отклика.
  3. Правильные Expires и Cache-Control HTTP заголовки для помощи браузеру с условными запросами.
  4. Поддержка ETag для определения соответствия между кэшем браузера с данными на сервере.
  5. Сжатие методом gzip для уменьшения размера HTTP ответа.
  6. Поддержка YUI Compressor.
  7. Поддержка версий передаваемых ресурсов (fingerprinting & static resources versioning).
  8. Поддержка CSS тем через параметры URL или Cookies.
  9. Простая конфигурация.
Читать дальше →

Реализация интерактивных диаграмм с помощью ООП на примере прототипа редактора UML-диаграмм. Часть 1

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

В этой статье мы подробно разберём создание «с нуля» компоненты с интерактивными, «перетаскиваемыми» элементами в объектно-ориентированной среде разработки. В качестве примера мы построим прототип UML-редактора.

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