Обновить
512K+

Java *

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

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

Об Oracle Coherence по-русски: Зачем он нужен?

Время на прочтение12 мин
Охват и читатели22K
В данной статье вы найдете ответ на поставленный вопрос, а также в ней будут объяснены базовые понятия по технологии распределенных вычислений в Oracle Coherence. Это вводная статья, главной задачей которой является объяснение “словаря” терминов, которым пользуются разработчики Coherence. Я приведу термины в том числе и на английском языке, для облегчения поиска информации для тех, кто захочет узнать больше в этом направлении.
Для тех, кому эта тема интересна, прошу под кат
Читать дальше →

Kotlin для Android, или лёгкий способ перестать программировать на Java

Время на прочтение1 мин
Охват и читатели41K
На нашей конференции мобильных разработчиков #MBLTDev, которая прошла в конце октября в Москве, продуктолог компании JetBrains Илья Рыженков рассказал доклад о языке программирования под Android Kotlin.

Kotlin был разработан в компании JetBrains и публично представлен в 2011 году. В 2012 был открыт исходный код.


Презентация

Илья рассказал про историю создания языка, преимуществах программирования на Kotlin, отличия Kotlin от Java и о том, что на нем можно делать. А также показал несколько примеров кода на Kotlin для платформы Android.
Читать дальше →

Статически проверяемые ссылки на свойства Java-бинов

Время на прочтение5 мин
Охват и читатели8.6K
Когда долго и серьезно используешь какой-либо инструмент, неминуемо возникают претензии к нему — неудобства, с которыми сперва миришься, но в какой-то момент понимаешь, что проще один раз исправить, чем все время страдать. Хорош тот инструмент, который позволяет «допилить» сам себя.

Java — хороший инструмент, поэтому об одном таком неудобстве и о том, как мы его исправляли, и пойдет речь.
Читать дальше →

10 возможностей быть продуктивнее с Eclipse для Java разработчиков

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


Многие из вас знают, как эффективно повышает производительность использование горячих клавиш, шаблонов кода и очень клёвой строки поиска (Quick Access), но я бы хотел рассказать о десяти возможностях, которые знают не все.
Стать продуктивнее

Consulo: ~1000 коммитов, или как прошла осень

Время на прочтение3 мин
Охват и читатели17K
Для тех, кто пропустил мои посты:

Consulo — это форк IntelliJ IDEA Community Edition, который имеет поддержку .NET(C# на текущий момент, и на этот сектор пока идет большой акцент), Java, Javascript(NodeJS) и многое другое. Проект собрал множество открытых плагинов в себе. При этом код остался открытым.

Несмотря на то, что многие мои знакомые уже вовсю используют его в production разработки Unity3D под Mac OS, я все еще не могу похвастаться stable релизом.


Ниже я расскажу вам, как прошла моя осень, и как эти три месяца постоянной работы повлияли на плагины .NET + C#, и на многое другое.
Читать дальше →

Java-конференция Joker 2014 глазами докладчика из Сибири

Время на прочтение4 мин
Охват и читатели16K
Недавно в Санкт-Петербурге прошла Java — конференция Joker 2014. На мой взгляд, самая технически насыщенная и масштабная из всех подобных в России.

Доклады прошлого года мне понравились, и я решил принять участие в Java — вакханалии этого года в качестве докладчика. В статье я предлагаю свой взгляд на события, качество докладов, а также мнение тов. Джигурды о выходе Java 9.



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

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

Мониторинг серверов через очередь заданий на JAVA

Время на прочтение3 мин
Охват и читатели11K
Недавно был озадачен проблемой мониторинга нескольких десятков серверов (ну наверно редко кто не сталкивался с такой задачей). Проблему можно описать несколькими правилами:

  1. Нужно периодически пинговать сервер
  2. Иногда выполнять какое-либо действие с сервером (например, исполнение команды через ssh), которое засабмитил пользователь
  3. Действия с серверами могут нескольких типов, у каждого действия свой приоритет
  4. Таски (из п.1-3) нельзя выполнять одновременно для каждого сервера
  5. Таски могут завершаться с неудачей, например по причине отсутствия связи с сервером, нужно ждать пока связь восстановится и пытатся выполнить запланированную задачу


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

Стоит ли использовать Spring Boot в вашем следующем проекте?

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


Большинство моих профессиональных Java проектов за последнее десятилетие были основаны на Spring или JEE. Обе платформы развиваются достаточно уверенно, однако все ещё страдают от различных проблем.

Spring и JEE по-прежнему остаются золотыми стандартами для масштабных Java-проектов и больших команд разработчиков, трудящихся над сложными enterprise-решениями. Однако, неизбежным следствием зрелости Java-сообщества стала частичная потеря прежнего энтузиазма и инновационности, что существенно ударило по авторитету обоих.
Читать дальше →

Элегантный Builder на Java

Время на прочтение7 мин
Охват и читатели154K
Наверняка большинство сколько-нибудь опытных программистов знакомы с паттерном Builder. Он позволяет сделать инициализацию структур данных более наглядной, гибкой при этом сохраняя такое полезное их свойство как неизменяемость (immutability). Вот классический пример с первой страницы выдачи гугла на запрос «java builder pattern example». При всех своих преимуществах, самый главный недостаток данной реализации паттерна — в два раза больше кода, по сравнению с обычным плоским бином. Если генерация этого дополнительного кода не проблема для любой популярной IDE, то редактировать такой класс становится достаточно утомительно и читабельность страдает в любом случае.
Что же делать?

Notifications на основе билдера с кастомным лейаутом и картинкой

Время на прочтение9 мин
Охват и читатели6.8K
Приветствую!

Балуюсь разработками приложений под Android, но до сих пор не использовал Builder для создания уведомлений, а делал это старым добрым методом, как описано, например, в данной статье. Однако данный метод не только уже устарел, но даже больше — он является deprecated. Кроме того, передо мной еще стояла задача выводить в каждом Notification-е свою картинку, которой при том нет в составе проекта и я не могу на нее сослаться через R.drawable, как, например, аватарка пользователя, которого я добавляю в процессе использования приложения и т.п. Если интересно — добро пожаловать под кат.
Читать дальше →

Самопальный фрэймворк Arachnidium для тестирования web и мобильных приложений. Part 2. Немного о настройках

Время на прочтение4 мин
Охват и читатели4.5K
И снова всем привет!

По итогам опроса, который я оставил в свой предыдущей статье «Самопальный фрэймворк Arachnidium для тестирования web и мобильных приложений. Get started!» большинство проголосовало «ЗА». Что же, show must go on!

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

Данный пост как-бы визуализирует главу Configuration моей собственной документации (пока это вики странички на github), которую в ближайшее время предстоит актуализировать. Здесь будет представлен простой пример подготовки настройки, а так же пример того, как я предполагаю использовать свой формат в контексте автоматизации тестов при помощи Selenium и Appium. Статья содержит интересное и наглядное, как мне думается, видео.

План:
— Что за проблему я попробовал решить?
— Простая демонстрация
— Демонстрация на примере кросс-браузерного теста
— Чего не хватает
— Анонс

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

Чистый код с Google Guava

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

StringBuilder sb = new StringBuilder();
for (Iterator<String> i = debtors.iterator(); i.hasNext();) {
  if (sb.length() != 0) {
    sb.append(", ");
  }
  sb.append(i.next());
}
out.println("Debtors: " + sb.toString());

Понятно, что этот код мог бы быть более прямолинейным, например, в Java 8 можно написать так:

out.println("Debtors: " + String.join(", ", debtors));

Вот так сразу гораздо понятнее, что происходит. Google Guava – это набор open-source библиотек для Java, помогающий избавиться от подобных часто встречающихся шаблонов кода. Поскольку Guava появилась задолго до Java 8, в Guava тоже есть способ конкатенации строк: Joiner.on(", ").join(debtors).
Рассмотрим часто встречаемые шаблоны кода

Маршруты на картах Google в Android-приложении

Время на прочтение7 мин
Охват и читатели49K
Недавно у меня возникла необходимость отображать маршрут между двумя точками на карте Google в моем приложении. На Хабре уже были публикации на эту тему. Например, «Маршруты на картах Google в вашем Android-приложении». Однако этим материалам уже довольного много времени и они не используют новых возможностей. Хочу показать еще один способ рисования маршрутов, может быть, кому-то он окажется полезен.
Читать дальше →

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

Wicket+лямбды: типобезопасная и лаконичная реализация IModel

Время на прочтение4 мин
Охват и читатели5.1K
Стандартная задача при разработке веб-приложения: есть объект данных, требуется эти данные отобразить (вывести в HTML). В Apache Wicket данные для этого привязываются к компонентам (которые и будут заниматься отображением) с помощью моделей (реализующих интерфейс IModel).

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

    T getObject();

Абстракция простая и лаконичная, но не всё так просто на практике. Под катом — сказ о том, как Java 8 помогла победить многословность и небезопасность стандартных подходов.
Читать дальше →

Как работает декомпиляция в .Net или Java на примере .Net

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

Сегодня хотелось бы поговорить про декомпиляцию приложений (все применительно к той же Java, да и любому языку с некоторыми допущениями и ограничениями, но поскольку сам я — .Net разработчик, примеры будут совсем немного MSIL'овизированы :) ).

Для вводной, перечислю текущие средства декомпиляции в мире .Net:
  • JetBrains dotPeek (поддержка R# хоткеев, сервер символов)
  • Telerik JustDecompile (также не плохой, множество хоткеев)
  • RedGate Reflector (аналог dotPeek, но платный. Изначально был основным в мире .Net, но пока был бесплатным)
  • icsharpcode ILSpy (хороший, opensource. Полезен, когда вы сами пишете код, использующий Mono.Cecil, т.к. Это даст лучшее понимание его работы)
  • 9rays Spices .Net Decompiler
  • Dis# с функцией inplace editor

Для программной декомпиляции:
  • Mono.Cecil (основной, самый крутой декомпилятор в мире .Net. На выходе получаете объектное «зеркало» содержимого сборки. Т.е. Максимально-упрощенно, без наворотов типа конвертации массива IL в DOM).
  • ICSharpCode.Decompiler (надстройка над mono.cecil, переводящая array[MSIL] в DOM, где есть циклы, switches и if'ы. Является частью SharpDevelop/ILSpy)
  • Harmony Core (аналогичное от меня, но сохраняющее информацию о символах. В среднем состоянии, не готова для прода, помощь приветствуется).


А теперь, хотелось бы описать как они работают (вам же интересно, как работает машинка от JetBrains?). Чтобы как минимум понять, насколько это сложно: написать свой декомпилятор .Net сборки обратно в код на C#.



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

Конфигурирование бинов с помощью аннотаций: решение проблемы с отсутствием наследования для интерфейсов аннотаций

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

Описание проблемы


Пусть у нас есть некоторый класс X, параметризующийся из контейнера свойств PX и есть класс Y, расширяющий X, параметризующийся контейнером PY, расширяющим PX.

Если контейнерами свойств выступают аннотации, то мы имеем два класса:

@PX(propertyX1 = <valueX1>, ..., propertyXN = <valueXN>)
class X {
...
}

И есть класс:
@PY(propertyY1 = <valueY1>, ..., propertyYN = <valueYN>)
class Y extends X {
...
}

Java (в том числе и Java 8) не предоставляют возможность наследования аннотаций, поэтому написать что-то вроде примера ниже нельзя:

public @interface PX extends PY {
}

Разумеется, это не проблема, вот решение:

@PX
class X {

  protected final ... propertyX1;
  ...
  protected final ... propertyY1;

  X() {
    final PX px = getClass().getAnnotation(PX.class);
    propertyX1 = px.propertyX1();
    ...
    propertyXN = px.propertyXN();
  }
}

@PY
class Y extends X {

   Y() {
      final PY py = getClass().getAnnotation(PY.class);
      propertyY1 = py.propertyY1();
      ...
      propertyYN = py.propertyYN();
   }
}


В чем здесь недостаток? Недостаток в том, что мы обрекаем себя на то, что если у класса не будет аннотаций, то он будет сконфигурирован дефолтными значениями (аннотации PX и PY должны быть @Inherited для этого).

Как быть, если нам, к примеру, надо инжектировать проперти из файла .properties или взять их из какого-либо другого источника, например из спрингового Environment?

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

Docker в браузере, или как создать и «расшарить» среду разработки

Время на прочтение7 мин
Охват и читатели28K
Docker нынче не использует только ленивый. Вокруг этой технологии заварилась очень интересная каша, не в последнюю очередь благодаря технологиям и продуктам, интегрировавшим Docker, который стал частью их инфраструктуры. Раннеры на Docker-е — это уже чуть ли не “must” для облачных IDE. Что уж говорить, если Google однозначно признали преимущества запуска приложений в контейнерах, а не на “чистом железе”. Впрочем, это тема другой дискуссии.

Создание среды разработки в браузере

Итак, Docker, скорее всего, изменит лицо технологического мира. Вернее, он уже его меняет. Все мало-мальски активные компании уже выложили свои докер образы, в которых запускаются их продукты. Ни тебе настройки среды, ни установки переменных окружения… Скачал образ, примонтировал локальные ресурсы, если нужно (“сорцы” проекта, локальный репозиторий и так далее), и горя не знаешь.
Читать дальше →

Android AutoCompleteTextView с подсказками из веб-сервиса

Время на прочтение7 мин
Охват и читатели36K
Для одного из своих Android-приложений Book Tracker я реализовал кастомный AutoCompleteTextView с подсказками для названий книг, которые динамически подгружаются с Google Books по мере ввода названия книги.

Задача перед компонентом стояла следующая:
  • Загрузка данных должна осуществляться в отдельном потоке, чтобы не блокировать UI-поток;
  • Загрузка подсказок должна начинаться только, если пользователь приостанавливает набор (чтобы предотвратить отправку множества запросов к серверу после каждого введенного символа);
  • Подсказки должны загружаться, если пользователь ввел строку некоторой минимальной длины (нет смысла начинать загрузку данных для строки из двух или трех символов);
  • При запросе к серверу в правой части поля должен быть показан анимированный прогресс, чтобы информировать пользователя о загрузке.

Финальный результат:



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

Конференция HDConf: видео-отчет

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

4 октября в Минске конференция Highload Dev Conf собрала более 350 разработчиков. С докладами выступили специалисты в разработке высоконагруженных систем из компаний Одноклассники, Amazon, Altoros, Wargaming, Coub, Aviasales, Badoo и др.

В прошлой статье мы опубликовали фотоотчёт конференции и слайды докладов. Как и обещали загрузили видео докладов.
Читать дальше →

Запускаем Java Runtime на 256KB оперативной памяти

Время на прочтение3 мин
Охват и читатели27K
image
Действительно, с выходом Java ME Embedded 8.1, полноценный Java-рантайм теперь доступен на плате Freescale K64F, которая несет на борту 256KB RAM и оснащена процессором на базе архитектуры ARM Cortex M4. Еще одной важной особенностью нового выпуска Java ME SDK стала поддержка Eclipse IDE. Страница нового релиза Java ME Embedded 8.1 здесь: http://www.oracle.com/technetwork/java/embedded/javame/embed-me/overview/index.html

Платформа Java ME Embedded 8.1 специально создана для того, чтобы перенести все полезные функциональные возможности Java на устройства с ограниченными аппаратными возможностями и даже, микроконтроллеры. Появление платформы Java ME Embedded, во многом, обусловлено развитием нового направления в информационных технологиях, Интернета Вещей (Internet of Things, IOT). Развитие IoT связано как с новыми возможностями, так и с новыми проблемами. Часть задач, таких как безопасность, работа с сетевыми подключениями, общение с внешними интерфейсами UART, I2C, SPI, GPIO успешно решает Java ME Embedded 8.1. Использование Java вместо нативных инструментов сокращает время выпуска продукта и открывает доступ к значительным трудовым ресурсам. Кстати, а вы знаете, что команда разработки Java ME Embedded почти полностью находится в Санкт-Петербурге? Что еще интересного приготовили наши разработчики вы узнаете дальше…
Читать дальше →