Обновить
512K+

Java *

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

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

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

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

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

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

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

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

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

Время на прочтение6 мин
Охват и читатели860K
Данная публикация не является полным разбором или анализом (не покрывает пакет 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 мин
Охват и читатели248K
Когда я начал изучать стандартный ввод/вывод в Java, то первое время был немного шокирован обилием интерфейсов и классов пакета java.io.*, дополненных еще и целым перечнем специфических исключений.

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

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

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

Consulo — IDE где Java и C# живут вместе

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

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



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

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

Интеграция Raspberry Pi с NetBeans 8.0

Время на прочтение3 мин
Охват и читатели9.7K
В марте этого года вышла новая версия NetBeans 8.0. Одной из её особенностей стала возможность работы через интерфейс NetBeans с встроенными версиями Java SE и ME. Разработчиками IDE от Oracle в качестве тестовой платформы предлагается использовать Raspberry Pi с устанавливаемой удалённо Java SE Embedded. Прежде я уже публиковал два перевода из журнала MagPi о Java программировании на Raspberry Pi, но в основном они были восприняты негативно, так как читатели не увидели в них чего-то особенного, характерного именно для такой связки, как Java и Raspberry Pi. Надеюсь, что после знакомства с этим уже оригинальным руководством, мне удастся немного смягчить позицию читателей в вопросе особенности подхода к Java программированию на встроенных системах типа Raspberry Pi.

Подготавливаем Raspberry Pi


Настроек Raspberry Pi немного. Ваш Raspberry Pi должен быть доступен в сети через SSH, а для вас на нём для чтения и записи должна быть доступна рабочая директория.

Подготавливаем NetBeans


Перед тем, как устанавливать новую платформу Java в NetBeans, я рекомендую прослушать небольшой доклад Льва Приймы по теме Java SE Embedded 8.


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

Поговорим за Hadoop

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

Введение

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

Что будет в этой статье:

  • Разберем, из чего состоит фреймворк и зачем он нужен;
  • разберем вопрос безболезненного развертывания кластера;
  • посмотрим на конкретный пример;
  • немного коснемся новых фич Hadoop 2 (Namenode Federation, Map/Reduce v2).


Чего не будет в этой статье:

  • вообще статья обзорная, поэтому без сложностей;
  • не будем лезть в тонкости экосистемы;
  • не будем зарываться глубоко в дебри API;
  • не будем рассматривать все околоdevops-задачи.

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

Возвращаем дочерний класс из родительского. Факультатив

Время на прочтение3 мин
Охват и читатели23K
С какой целью это может понадобиться? Например, если хочется использовать "текучий интерфейс". Правда, если часть методов разместить в родительском классе, то для них не получится сделать полноценный «текучий интерфейс» — эти методы требуется приводить (кастовать) к дочернему.

Казалось бы, печаль да и только, но если очень хочется, то ведь можется. Поэтому, давайте слегка нарушим правило и «известим» родительский класс о его наследниках.
Читать дальше →

Hibernate и PostgreSQL JSON Type

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

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


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

Простой USSD-запрос в Android 4.0+

Время на прочтение3 мин
Охват и читатели39K
В Android до сих пор нет API для USSD-запросов. Баг висит уже 6 лет!
Я находил разные способы создания и получения информации из USSD запросов, но в итоге ни один не устроил.
Затем я нашел упоминания о том, что с помощью обновленных в Android 4.0 служб спец. возможностей можно легко получать содержимое окон и так получить текст из окна и результатом USSD запроса. Попробовал — получается отлично! Без перезагрузок и надежно.
Читать дальше →

Баг Double.parseDouble() в Android

Время на прочтение2 мин
Охват и читатели27K
В поисках эпизодически вылезающей ошибки, наткнулся на неожиданное поведение метода Double.parseDouble(). Исполнение кода
Double.parseDouble("4cff9d79-a696-4dfc-89f9-a265ae117257");

не привело к выбрасыванию исключения NumberFormatException. Код вполне корректно отработал и выдал результат — Infinity.
Читать дальше →

Java и облако Microsoft — краткие очерки

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

Что нужно для того, чтобы запустить свое приложение Java в облаке Microsoft? Сколько усилий надо затратить и человекочасов разработчика для того, чтобы хотя бы протестировать проект и решить, стоит ли вообще его мигрировать, или стоит подождать или вообще отложить переезд. Эта небольшая статья призван заполнить нишу размером в микрон и провести краткий экскурс в сегодняшнюю ситуацию с Java на Microsoft Azure.
 
Читать дальше →