Обновить
-6
Алексей@java3000

Администратор windows умеющий в программирование

Отправить сообщение

Анонсированы новые функции Java 9

Время на прочтение2 мин
Охват и читатели58K
Компания Oracle серьёзно взялась за разработку JDK9 и опубликовала первый список «предложений на улучшение» (JEP), в которых описаны новые функции Java 9. Список невелик и консервативен, но его наверняка дополнят в предстоящие почти два года до выпуска Java 9.

Программные интерфейсы


Представлены три новых программных интерфейса.

  • Обновление Process API для лучшего взаимодействия с не-Java процессами операционной системы (сейчас разработчики часто вынуждены использовать нативный код).
  • Новый HTTP-клиент с поддержкой HTTP 2.0, веб-сокетов и заменой устаревшему HttpURLConnection.
  • Облегчённый JSON API для обработки и генерации JSON-документов и потоков данных.

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

Hibernate и PostgreSQL JSON Type

Время на прочтение3 мин
Охват и читатели29K
Привет хабр! В этой статье не будет глубокого анализа json типа в PostgreSQL или очередных бесполезных попыток сравнить данную возможность PostgreSQL с NoSQL базами данных типа MongoDB. Я просто расскажу про то, как использовать Hibernate и PostgreSQL json. Думаю кому-нибудь это может оказаться полезно.

Объект внутри сущности


Предположим у вас есть реляционная модель данных. Вполне может возникнуть ситуация, что для некоторых из сущностей необходимо хранить какой либо объект(документ, если хотите). Конечно можно расширить для этого объекта модель данных одной(а может и несколькими) сущностью, или просто хранить этот объект в виде массива байт. Но у PostgreSQL уже достаточно давно появился тип данных json способный хранить json объект в соответствии с RFC 4627. Стало интересно, как это можно использовать, и какие возможности это может дать. При первом обращении к google я нашел несколько неструктурированных постов и Q&A которые что-то объясняли, но не давали полной картины. Немного потыкавшись и разобравшись что к чему, я пришел к выводу что использование этих полей очень удобно, и решил создать маленькую библиотечку, которая упростит использование json типов. Ниже я расскажу как ей пользоваться, ну и еще немного сравнения с первыми приходящими на ум альтернативами.
Читать дальше →

Домашняя бухгалтерия на платформе CUBA

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


Цель этой статьи — рассказать о возможностях платформы CUBA на примере создания небольшого полезного приложения.
CUBA предназначена для быстрой разработки бизнес-приложений на Java, мы уже писали о ней несколько статей на Хабре.

Обычно на платформе строятся либо реальные, но слишком большие и закрытые информационные системы, либо приложения в стиле “Hello World” или искусственные примеры типа “Библиотеки” на нашем сайте. Поэтому некоторое время назад я и решил попробовать убить сразу двух зайцев — написать для себя полезное приложение и выложить его в общий доступ как пример использования нашей платформы, благо предметная область простая и всем понятная.

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

Java для школьников: обучение через создание игр

Время на прочтение4 мин
Охват и читатели66K
Большинство современных детей играет в компьютерные игры. А хотелось ли вам самим когда-нибудь написать игру? Возможно, не только хотелось, но вы их и писали. Такое же желание посещает многих школьников. Правда, в отличие от вас, они не знают с чего начать, даже какой язык выбрать. Это и есть отправная точка, которая может стать хорошим стимулом для изучения программирования.
Одно дело играть, а другое дело разрабатывать. Пусть это небольшая двумерная компьютерная игра, но она «греет душу» намного сильнее, чем любая крутая купленная. И все потому, что эта игра ваша! Вы – ее создатель, разработчик, вы — творец! Вот появляется фон, вот — лабиринт, а потом и танк на игровом поле. Еще добавим программного кода, и танк начинает ездить по лабиринту. Так, шаг за шагом рождается игра, которая создается по сценарию ее творца. При этом каждая задумка требует усилий — подумать, написать, отладить. Не все получается сразу… А вот навыки программирования оттачиваются очень хорошо. Стоит написать несколько игрушек и вот уже обеспечен начальный уровень в программировании, заложен фундамент для будущей профессиональной деятельности.
Читать дальше →

Учимся готовить Log4j + Logstash + ElasticSearch + Kibana 3 + Auth (Google OAuth2/BasicAuth/CAS Authentication)

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

Задача


Настройка удобного средства для обработки и получения логов.

Условия


  1. Лицензия MIT или Apache 2.0
  2. Возможность приема и обработки многострочных сообщений
  3. Простота в настройке и использовании
  4. Возможность работы с логами из Log4j


Решение


Logstash + ElasticSearch + Kibana 3.
Читать дальше →

Создание простой программы с RMI и параллельным доступом на графический интерфейс в Java

Время на прочтение5 мин
Охват и читатели22K
Когда мне пришлось сильно углубиться в использование RMI, я поняла, какое большое значение играет умение правильно реализовать параллельность в самом графическом интерфейсе программы. На мое удивление в интернете не было достаточно материала на эту тему и особенно качественных примеров, хотя тема для любого программиста несоменно очень важная. Именно поэтому я решила поделиться своим опытом.

Кратко о RMI: программный интерфейс вызова удаленных методов в языке Java (источник). С помощью него можно например управлять данными на программе сервера с одного или множества компьютеров. Подробнее можно почитать на Хабре. Будем исходить из того, что с его основами вы уже знакомы. Необходимо так же иметь представление о нововведениях в Java 8, а именно — вам понадобятся лямбда-выражения. Хорошее объяснение есть здесь.
Читать дальше →

Отобразить уведомление на Android Wear, не показывая его на телефоне

Время на прочтение1 мин
Охват и читатели14K
Решил я все же, не смотря на свой скепсис, начать переносить приложения на Android Wear.

Первое дело — показывать уведомления, ИМХО, первая и важнейшая функция смарт-часов.
Открываю мануал и узнаю что уведомления на часы можно отправить только прицепом к общесистемному уведомлению Android. На Sony все было разделено и даже слишком, а тут все интегрировано и само собой работает. Гвоздями прибито.
Читать дальше →

Справочник по Java Collections Framework

Время на прочтение6 мин
Охват и читатели844K
Данная публикация не является полным разбором или анализом (не покрывает пакет java.util.concurrent). Это, скорее, справочник, который поможет начинающим разработчикам понять ключевые отличия одних коллекций от других, а более опытным разработчикам просто освежить материал в памяти.

Что такое Java Collections Framework?


Java Collection Framework — иерархия интерфейсов и их реализаций, которая является частью JDK и позволяет разработчику пользоваться большим количесвом структур данных из «коробки».

Базовые понятия


На вершине иерархии в Java Collection Framework располагаются 2 интерфейса: Collection и Map. Эти интерфейсы разделяют все коллекции, входящие во фреймворк на две части по типу хранения данных: простые последовательные наборы элементов и наборы пар «ключ — значение» (словари).

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

Пример магии Spring Data JPA Audit и Version

Время на прочтение4 мин
Охват и читатели43K
Пример работы магии Spring Boot, Spring Data JPA и аудита сущностей.

Хотя вся конфигурация будет описана в классах с использованием Java Config, в приложении есть файл application.properties. Используется он потому, что эти настройки Spring Boot подхватывает на самой ранней стадии инициализации, а некоторые дефолтные настройки стоит заменить.

В качестве базы данных будем использовать H2 Database Engine.

По-умолчанию Spring Boot для Spring Data JPA при подключении драйвера базы данных HSQL, H2 или Derby создаёт DataSource с in-memory базой данных и инициализирует её файлами schema.sql и data.sql из ресурсов приложения. Также по умолчанию используется hibernate.hbm2ddl.auto=create-drop, после чего мы получаем девственно чистую базу данных с таблицами, сгенерированными из сущностей. Зачем так сделано — загадка, но эту автогенерацию надо отключить параметром в файле application.properties: spring.jpa.hibernate.ddl-auto=none

Также помимо DataSource Spring Boot любезно создаст и EntityManagerFactory, который найдёт сущности в любом месте приложения.
Читать дальше →

Java ME: Структура мидлета

Время на прочтение4 мин
Охват и читатели7.8K
В данной статье мы подробно разберём один из вариантов построения структуры мидлета. Данный материал будет полезен для начинающих.

Представим себе следующую ситуацию


У нас есть 3 экрана:

  1. Экран «Сплэш» (который будет отображаться первым);
  2. Экран «Меню»;
  3. Экран «Игра».

Для примера я не буду писать 3D игры и меню с анимацией космических боёв, ибо это будет только отвлекать. Каждый из экранов будет выполнять следующие действия:

  • Экран «Сплэш» — выводит на 10 секунд текст «SPLASH»;
  • Экран «Меню» — выводит на 10 секунд текст «MENU»;
  • Экран «Игра» — выводит текст «GAME».

Итак, имея уже эти сведения, для наших экранов можно подобрать общий абстрактный класс, и имя ему — «Screen».

Что общего между всеми экранами?
Читать дальше →

Создание домашней аудиосистемы

Время на прочтение11 мин
Охват и читатели7.4K
Сразу оговорюсь, что я понимаю под домашней аудиосистемой.

Цель: управлять воспроизведением музыки в колонках с любого устройства в домашней сети.

Выглядит реализация следующим образом: в базе данных хранится информация о музыке, есть сервлет, который по запросу эту информацию вытягивает.
Управляется все через веб-интерфейс.
И, наконец, на андроид-устройстве, к которому подключены колонки, крутится аудио-сервер.

И так, поехали.

1. Готовим базу данных


В качестве базы данных будем использовать MySQL. База данных содержит две таблицы: mp3 — данные об аудиофайлах и mp3_tmp — таблица используется при обновлении базы данных. По структуре обе таблицы идентичны.

Таблицы содержат следующие поля:

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

Компактный Java сервлет для мобильного веб

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

Основная область программирования для меня, это разработка программного обеспечения для автоматизации учёта в торговли. С возможностью использовать для этого сервлеты Java я столкнулся в 2009 году, когда вместе с последней, вышедшей для десктопа, версией Openbravo POS шёл модуль ресторана для PDA. Основной идей тогда для разработчиков Openbravo POS было, чтобы не усложнять десктопную версию приложения, вынести узкую бизнес-логику в отдельное небольшое приложение, главной изюминкой которого был компактный веб-интерфейс для доступа с любого устройства, а не только того, где может быть запущена Java c Swing. При этом тогда предполагалось, что сервлет не только будет работать с одной и той-же базой, что и десктоп версия, но и контейнер для него будет интегрирован в приложение на десктопе, после запуска которого пользователь автоматический получал доступ к POS в радиусе действия Wi-Fi сети. В рамках комьюнити данная идея дальнейшего развития не получила, но я с 2012 для своих клиентов заложенными тогда принципы продолжаю пользоваться, и в данной статье расскажу читателям, как используя Stripes Framework в связке с jQuery Mobile и ORMLite, получить инструмент для быстрой разработки небольших сервлетов ориентированных на мобильный веб.
Читать дальше →

Голосовое управление web-плеером, или скрещиваем CMU Sphinx с Selenium WebDriver

Время на прочтение5 мин
Охват и читатели8.9K
В этой статье я описывал создание веб mp3 плеера и домашней аудиосистемы.
Сам плеер можно увидеть здесь.

Возникла идея — прикрутить к плееру голосовое управление.
После часа-другого поиска в интернете решение нашлось:
CMU Sphinx — для распознавания речи + Selenium WebDriver — для программного управления браузером.

Итак, начнем.
Читать дальше →

Краткий обзор новых возможностей JPA-RS в EclipseLink

Время на прочтение7 мин
Охват и читатели12K
EclipseLink — это ORM фрэймворк с открытым исходным кодом, разрабатываемый Eclipse Foundation. В конце года запланирован выход версии 2.6.0. проекта. В преддверии этого, я хочу ознакомить вас с некоторыми новыми возможностями службы JPA-RS, которая является частью EclipseLink.
JPA-RS позволяет автоматически генерировать RESTful сервисы на базе предоставленной пользователем JPA модели. При этом практически никакой дополнительной работы от пользователя не требуется.
Читать дальше →

TeaVM — ещё один способ запускать Java в браузере

Время на прочтение7 мин
Охват и читатели18K
Уважаемые читатели! Хочу поделиться с вами своим open-source проектом, над которым я работаю в своё свободное время уже достаточно давно, TeaVM. TeaVM представляет собой транслятор из байткода Java в JavaScript. Существует несколько попыток создать JVM на JavaScript, одна из самых удачных — Doppio. Однако, кроме академической, никакой ценности они не представляют, так как скорость интерпретации байт-кода оставляет желать лучшего. Более того, для интерпретации байткода необходимо как минимум загрузить этот байткод в браузер, а это вырождается в загрузку десятков мегабайт class-файлов.

В отличие от них, TeaVM не интерпретирует байткод, а генерирует JavaScript, который выполняет ровно то, что делал бы байткод, будь он запущен в реальной JVM. Проще говоря, TeaVM декомпилирует байткод Java, но не обратно в Java, а в JavaScript. Разумеется, всё это верно до определённых пределов. Во-первых, в JavaScript попросту отсутствуют некоторые вещи, привычные Java-разработчикам, такие как потоки, полноценная поддержка Юникода (например, поддержка классов символов, регулярные выражения), блокирующий ввод-вывод. Во-вторых, это обусловлено требованиями, которые я предъявлял к компилятору. Например, в TeaVM очень ограничена поддержка reflection. Это следствие одного из преимуществ TeaVM — сравнительно небольшой размер генерируемого файла. Нет, TeaVM не генерирует минимально возможный JavaScript, однако и не станет генерировать огромные многомегабайтные скрипты на каждый чих. Reflection делает невозможным какой-либо статический анализ, поэтому было принято решение от него отказаться.

Прежде чем я продолжу, я хочу для начала показать, на что способен TeaVM. Во-первых, он способен в реальном времени симулировать физику. Во-вторых, он ещё способен по этой физике рисовать красивые картинки в Canvas. Можно увидеть, что JavaScript-файлы сравнительно небольшие. Кстати, обсчёт физики я сам не реализовывал, я всего лишь взял имеющуюся библиотеку JBox2D.
Читать дальше →

JBOSS 4.2.3 Manual

Время на прочтение12 мин
Охват и читатели92K
Копаясь в своих старых записях совершенно случайно наткнулся на документ JBOSS 4.2.3 Manual, написанный мной (а по сути скомпилированный из разных источников) несколько лет назад. И чтобы не пропадать добру, решил немного поделиться знаниями с уважаемым Хабрасообществом.
Если вы являетесь специалистом с опытом более года — скорее всего ничего нового для себя не найдете и можете сразу проходить мимо, дабы не тратить свое время. Статья же может быть полезна следующим людям:
  • студентам, начинающим свой путь в IT карьере по Java направлению
  • java junior разработчикам
  • junior инженерам внедрения и техподдержки
  • junior deploy и build инжеренам

Понятно, что версия JBoss 4.2.3 достаточно древняя (сейчас актуален 8-ой JBoss, который по сути уже и не «Jboss»), но считаю, что она все еще может быть полезна, учитывая наличие большого количества старого унаследованного java-кода и приложений в жестоком интерпрайз секторе, которые все же необходимо иногда поддерживать.
Читать дальше →

Разбитие текста на предложения лингво-независимым методом на примере библиотеки AIF

Время на прочтение9 мин
Охват и читатели16K
В прошлой статье мы уже рассказывали о новой NLP библиотеке. Однако тогда мы рассказали «обовсем» и не о чем конкретном. Сегодня мы поговорим о теоретических аспектах разбития предложения на токены лингво-независимыми алгоритмами. Теоретические выкладки будут подкреплены практической реализацией в библиотеке AIF. Поехали…
Читать дальше →

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

Время на прочтение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?

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

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

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

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

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

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

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Десктоп разработчик, Администратор серверов
Младший
От 110 000 ₽
Java
Java Spring Framework
RESTful WebServices.
PostgreSQL
SQL
Hibernate
Linux
Базы данных
Microsoft SQL Server
Разработка программного обеспечения