Обновить
128K+

Java *

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

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

Интересный способ запуска Selenium тестов на заднем плане

Время на прочтение4 мин
Охват и читатели24K
image
В последнее время у нас на проекте остро стал вопрос о запуске Selenium тестов на заднем плане. Одно из правил в нашей команде гласит, что мы не комитим код, пока не прошли все авто-тесты. Для проекта нашего размера это вполне реально. Проекты у нас меняются каждые 2-3 месяца и обычно занимает от 5 до 15 минут прогнать все тесты. Операционная система, в которой мы работаем — Ubuntu, у всех по два монитора (спасибо заказчику). Поэтому, поглядывая на тесты, удобно поделать что-то еще. Поревьювить таски, например, или начать делать новую задачу. Главная проблема заключается в том, что во время прохождения тестов на компьютере ничего сделать невозможно. А именно, каждое действие веб-драйвера делает его окно активным. Таким образом, можно только нормально послушать музыку. В лучшем случае — почитать или посмотреть видео. А вот если печатать — то почти стопроцентно завалишь какой-нибудь тест. Из-за этой проблемы каждый team member тратил кучу драгоценного времени впустую. Так я начал инвистигейшн данной проблемы.
Читать дальше →

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

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

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

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

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

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


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

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

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

Java one в San Francisco

Время на прочтение5 мин
Охват и читатели6.6K
Думаю, что многие хабра жители знают, что такое Java One. Немало здесь и тех, кто был на локальных Java One — в Москве. Мне же уже достаточно давно хотелось побывать на главном и изначальном Java One — в San Francisco — и это наконец-то удалось. Приглашаю всех интересующихся услышать мои впечатления от эвента и некоторых его сессий.

Дюк, талисман Java и Java one
Дюк, талисман Java и Java one
Подробности и фотографии

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

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

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


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

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

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

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

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

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

Пример магии 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, который найдёт сущности в любом месте приложения.
Читать дальше →

Новая языково-независимая NLP библиотека

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

Введение


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

Это простое наблюдение дает возможность предполагать, что для понимания языка вовсе не нужно иметь знания о нем. Достаточно лишь эмпирии (опыта), который можно почерпнуть от окружающих. Но именно об этом забывают практически все современные НЛП библиотеки, пытаясь построить все-обемлящую языковую модель.

Для более четкого понимания представьте себя слепым и глухим. И, даже родись в таком состоянии, вы бы могли взаимодействовать с миром и освоить язык. Само собой, что ваше представление о мире было бы иным, нежели у всех вокруг. Но вы могли бы все таким же образом взаимодействовать с миром. Некому бы было объяснить Вам что происходит и что такое язык ив се же, как то, тактильно анализирую шрифт Брайля Вы бы понемного сдвинулись с мертвой точки.

А это значит, что для понимания сообщения на каком-либо языке нам не нужно ничего, кроме самого сообщения. При условии, что это сообщение достаточно большое. Именно эта идея и положена в основу библиотеки под названием AIF. За деталями прошу пожаловать под кат.
Читать дальше →

Почему я плагин для Maven писал

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

Все началась, когда я поменял работу и сходу попал на большой проект. Большой для меня это несколько вендоров, десяток систем, 5-ти ступенчатый релизный цикл, 1000+ инженеров в разных локациях. Исходники «жили» в нескольких svn репозиториях с большим количеством maven модулей, каждый из которых мог использоваться в одной или нескольких системах. Каждый модуль был подключен в основную систему через бинарную зависимость. В конце релизного цикла необходимо было выпустить новые версии модулей и собранных на их основе систем. Под катом я опишу проблему эффективности этого процесса, с которой я попытался побороться — и что из этого вышло.
Читать дальше →

Побеждаем NPE hell в Java 6 и 7, используя Intellij Idea

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

Disclaimer


  • Статья не претендует на открытие Америки и носит популяризаторско-реферативный характер. Способы борьбы с NPE в коде далеко не новые, но намного менее известные, чем этого хотелось бы.
  • Разовый NPE — это, наверное, самая простая из все возможных ошибок. Речь идет именно о ситуации, когда из-за отсутствия политики их обработки наступает засилье NPE.
  • В статье не рассматриваются подходы, не применимые для Java 6 и 7 (монада MayBe, JSR-308 и Type Annotations).
  • Повсеместное защитное программирование не рассматривается в качестве метода борьбы, так как сильно замусоривает код, снижает производительность и в итоге все равно не дает нужного эффекта.
  • Возможны некоторые расхождения в используемой терминологии и общепринятой. Так же описание используемых проверок Intellij Idea не претендует на полноту и точность, так как взято из документации и наблюдаемого поведения, а не исходного кода.


JSR-305 спешит на помощь


Здесь я хочу поделиться используемой мной практикой, которая помогает мне успешно писать почти полностью NPE-free код. Основная ее идея состоит в использовании аннотаций о необязательности значений из библиотеки, реализующей JSR-305 (com.google.code.findbugs: jsr305: 1.3.9):

  • @Nullable — аннотированное значение является необязательным;
  • @Nonnull — соответственно наоборот.

Естественно обе аннотации применимы к полям объектов и классов, аргументам и возвращаемым значениям методов, локальным переменным. Таким образом эти аннотации дополняют информацию о типе в части обязательности наличия значения.
Читать дальше →

Шумоподавление путем объединения изображений на Java

Время на прочтение5 мин
Охват и читатели22K
Здраствуй, Хабр! Хочу поделиться кодом простой программы, которую я использую для уменьшения шума с цифровых фотограффий.

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

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

Итак, ниже представлены 4 изображения, демонстрирующие некие фотографии одного и того-же обьекта, со случайным шумом на каждом снимке. В качестве объекта представлены красные круги, в качестве шума — белые.

пример снимков
Читать дальше →

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

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

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


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

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


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

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

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

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

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

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

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

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

Hazelcast 3.3 — что нового?

Время на прочтение1 мин
Охват и читатели9.9K
Позавчера, 9 сентября, вышла новая версия Hazelcast — 3.3.

Кратко: Heartbeat для клиентов, кластеризация сессий для Tomcat 6 и 7, новая Replicated Map, улучшенная WAN Replication, улучшенный Data Aggregation, функциональность EvictAll и LoadAll для IMap.

Подробнее ...

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

Учимся готовить 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.
Читать дальше →

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

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

Статья-рецепт про удобную разработку на GWT в IDEA с помощью DCEVM

Время на прочтение4 мин
Охват и читатели15K
В IDEA 13-ой версии, в отличие от Eclipse, при запуске проекта GWT с помощью стандартного плагина (и, как в последствие выяснилось, и без него, а просто запуск GWT DevMode — приложение для запуска в режиме разработки и debug'а, а конкретно com.google.gwt.dev.DevMode из gwt-dev.jar — как Java Application) при изменении UI кода нужно обновлять браузер, что бы изменения сработали. В случае GWT это очень критично — так как при обновлении страницы происходит повторное подключение к Code Server (сервер с исходным кодом проекта, нужен, что бы можно производить debug Java кода), а это занимает от 10 секунд до нескольких минут. Здесь я расскажу о способе, как менять код практически без перезагрузки страницы.
Читать дальше →

Еще одна библиотека для работы с 433 MHz устройствами

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

Хочу поделиться JAVA библиотекой для работы с радио-устройствами домашней автоматизации (обычно 433.92 МГц) над которой я работаю в последнее время. Она еще достаточно сырая для серьезного использования, но для домашних поделок — в самый раз
Адрес на github — github.com/eschava/rf-protocols-java

Предпосылки к созданию


После покупки Cubietruck решил перенести на него все задачи умного дома, которые выполнялись на Ардуино. В основном это прием и передача радио-сообщений устройствам домашней автоматизации (розетки, датчики, отопление)
Все, что было найдено в сети, было либо сделано только для Raspberry Pi, либо слишком заточено под какую-то определенную функциональность. Поэтому решил реализовать все самому, используя привычный язык разработки (Java) и сделать как можно более гибким и расширяемым (реестр фабрик и все такое, как это принято в джаве)

Для работы с RF устройствами посредством GPIO портов выбрал достаточно малоизвестную, но многообещающую библиотеку libbulldog которая позволяет абстрагироваться от платформы на которой все запущено. На данный момент поддерживаются (теоретически) Raspberry Pi, BeagleBoard, Cubieboard, но тестировалось только на Cubieboard3 (aka Cubietruck) который есть у меня в наличии.
Также поддерживается (опять же теоретически) популярная библиотека для Raspberry PI Pi4j, но, к сожалению, не было возможности опробовать ее на практике

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

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

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


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

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

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

Кейс Crocs: оптимизация продаж на сто миллионов. Часть 2

Время на прочтение7 мин
Охват и читатели3.1K
В прошлом посте мы начали рассказ о нашей оптимизации чекаут-процесса для Crocs и ознакомились с самыми широко распространенными вариациями тестирования онлайн ресурсов: А/Б и многовариантным тестированием. Стоит отметить, что в случае e-commerce основой успеха в этой части является возможность эффективного тестирования всего сайта и отдельных его элементов. В свою очередь, возможность тестирования и улучшения результатов тестирования напрямую зависит от технических возможностей отдельного взятого веб-ресурса. В проектах с большим оборотом функционал тестирования становится архиважным. Сегодня же мы расскажем об организации фреймворка для автоматизированного регрессионного тестирования, который был внедрен для Crocs, об использованных при этом ключевых технологиях, и о реализации самого кода.


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

Основные отличия Java IO и Java NIO

Время на прочтение7 мин
Охват и читатели246K
Когда я начал изучать стандартный ввод/вывод в Java, то первое время был немного шокирован обилием интерфейсов и классов пакета java.io.*, дополненных еще и целым перечнем специфических исключений.

Потратив изрядное количество часов на изучение и реализацию кучи разнообразных туториалов из Интернета, начал чувствовать себя уверенно и вздохнул с облегчением. Но в один прекрасный момент понял, что для меня все только начинается, так как существует еще и пакет java.nio.*, известный ещё под названием Java NIO или Java New IO. Вначале казалось, что это тоже самое, ну типа вид сбоку. Однако, как оказалось, есть существенные отличия, как в принципе работы, так и в решаемых с их помощью задачах.

Разобраться во всем этом мне здорово помогла статья Джакоба Дженкова (Jakob Jenkov) – “Java NIO vs. IO”. Ниже она приводиться в адаптированном виде.

Поспешу заметить, что статья не является руководством по использованию Java IO и Java NIO. Её цель – дать людям, начинающим изучать Java, возможность понять концептуальные отличия между двумя указанными инструментами организации ввода/вывода.
Читать дальше →