Обновить
128K+

Java *

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

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

Программируем в облаке: обзор популярных IDE

Время на прочтение6 мин
Охват и читатели57K
Лет пять назад online IDE были такими себе игрушками, вызывающими дикий восторг у гиков и любителей всего нового. Да, что тут говорить, вероятнее всего, сами создатели таких сервисов не до конца понимали, куда же заведут их стремления и проделанная работа. Все начиналось с банального онлайн блокнота с парой-тройкой менюшек и компилятора для пары-тройки языков. Вообще, довольно-таки интересно наблюдать развитие этого рынка. Так, в 2011 был опубликован обзор облачных IDE, среди которых есть и герои нынешней статьи. Два года спустя появилась еще одна статья со сравнением двух сильнейших игроков рынка — Codenvy и Cloud9. Что ж, на дворе 2015 год, а, следовательно, время для очередного обзора.
Читать дальше →

Инстанцировать не инстанциируемое

Время на прочтение4 мин
Охват и читатели13K
Идея этого топика родилась из этого комментария.

Итак имеем: класс без конструкторов, необходимо создать экземпляр этого класса. На Java такого сделать нельзя, так что придется напрямую манипулировать байткодом. Идея состоит в том, чтобы вызвать NEW, но при этом не вызывать <init>. Но тут есть трудность, спецификация JVM говорит что так делать нельзя,
но очень хочется

Arduino & OpenHAB

Время на прочтение8 мин
Охват и читатели54K
В предыдущей статье мы познакомились с промышленным стандартом Modbus и встроили его поддержку в Arduino, осталось состыковать устройство с платформой OpenHAB.

В этот раз мы узнаем, как настроить плагин и интерфейс OpenHAB для работы с устройством, основы адресации и отладки протокола Modbus. В работе представлен эксперимент с исходным кодом плагина, а на страничке vk.com/myremoter можно обсудить открытый контроллер умного дома, который мы будем использовать в следующих экспериментах.

Но, давайте ещё раз посмотрим, какие преимущества даст нам применение стандарта Modbus?
Современный дом — сложное инженерное сооружение, где управление освещением не самая главная функция. Кроме датчиков в доме устанавливают системы кондиционирования и вентиляции, управления отоплением, дренажными насосами и скважинами. Такие задачи можно поручить специальному или промышленному контроллеру, в этом случае протокол Modbus поможет объединить все инженерные системы в единую сеть, а простой и недорогой контроллер, работающий на одной с ними шине, добавит дополнительный контроль и функционал, сэкономив немало средств. В пользу этого низкие требования к оборудованию, открытость стандарта, массовость его применения, хотя, быть может, основной секрет популярности Modbus его гибкость при стыковке программ и оборудования.

Ну что же, пора приступать к работе.
Читать дальше →

Вышел FindBugs 3.0.1

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

Новая версия FindBugs доступна для скачивания на официальном сайте. Несмотря на то что поменялась только третья цифра в номере версии, вас ждёт множество новых интересных детекторов, а также улучшение старых. Если основная фича 3.0.0 заключалась в поддержке Java 8 и новых детекторов практически не было, то в 3.0.1 упор был сделан на функционал. Здесь я хочу вкратце осветить некоторые новые детекторы, разработанные лично мной.

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

Hibernate, multi-tenancy и авто-обновление схемы БД

Время на прочтение7 мин
Охват и читатели16K
Хотите пользоваться преимуществами (и недостатками) авто-обновления схемы БД при использовании Hibernate, но у вас имеется multi-tenant архитектура? Добро пожаловать под кат.
Читать дальше →

Поиск текстов, не соответствующих тематике и нахождение похожих статей

Время на прочтение5 мин
Охват и читатели30K
У меня есть сайт со статьями схожей тематики. На сайте было две проблемы: спамерские сообщения и дубликаты статей, причём дубликаты часто являлись не точными копиями.

Данный пост повествует о том, как я решил эти проблемы.

Дано:
  • общее количество статей 140 000;
  • количество спама: примерно 16%;
  • количество не чётких дубликатов: примерно 63%;

Задача: избавиться от спама и дубликатов, а так же не допустить их дальнейшего появления.



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

Владимир Иванов, Oracle — Глубокое погружение в invokedynamic

Время на прочтение1 мин
Охват и читатели11K
Этот анонс посвящается тем, кто ныл всю зиму, что на JUG.ru давно не было хардкора.

В среду, 11 марта, в петербургском офисе компании Oracle состоится встреча JUG.ru c Владимиром Ивановым, инженером команды HotSpot JVM.

Тема встречи — инструкция invokedynamic и ее реализация в JDK/JVM.



В Java 7 на уровне байткода появилась новая инструкция — invokedynamic. Инструкция с программируемым связыванием позволила динамическим языкам на Java платформе достичь новых высот производительности. JRuby активно использует invokedynamic начиная с Java 7, а в Java 8 появилась среда исполнения для JavaScript, полностью основанная на новом API.
Подробности

Пишем поисковый плагин для Elasticsearch

Время на прочтение7 мин
Охват и читатели11K
Elaticsearch — популярный поисковый сервер и NoSQL база данных. Одной из интересных его особенностей является поддержка плагинов, которые могут расширить встроенный функционал и добавить немного бизнес-логики на уровень поиска. В этой статье я хочу рассказать о том, как написать такой плагин и тесты к нему.
Читать дальше →

Правильная платформа для Java EE приложений: как z/OS + DB2 оказались в 3 раза быстрее Linux + Oracle

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

Введение


В настоящее время все больше и больше корпоративных приложений разрабатываются на основе переносимых кроссплатформенных технологий, таких как Java Enterprise Edition. В состав данной платформы входит набор программных интерфейсов, позволяющих разработчикам абстрагироваться от конкретных СУБД и механизмов очередей сообщений. Это позволяет развернуть приложение практически на любой платформе, в том числе и на мейнфрейме.

В сообществе специалистов по информационным технологиям распространено представление, что мейнфреймы – это очень надежная, но уступающая по производительности привычным решениям на основе процессоров Intel и операционной системе Linux платформа. В данной статье мы хотели бы поделиться результатами тестирования производительности одной и той же банковской платежной системы, работающей на IBM zEnterprise EC12, но в одном случае использующей Linux и СУБД Oracle, а в другом – операционную систему z/OS и СУБД DB2.
Читать дальше →

10 самых распространённых ошибок, которые делают новички в Java

Время на прочтение14 мин
Охват и читатели107K
Здравствуйте, меня зовут Александр Акбашев, я Lead QA Engineer в проекте Skyforge. А также по совместительству ассистент tully в Технопарке на курсе «Углубленное программирование на Java». Наш курс идет во втором семестре Технопарка, и мы получаем студентов, прошедших курсы по C++ и Python. Поэтому я давно хотел подготовить материал, посвященный самым распространенным ошибкам новичков в Java. К сожалению, написать такую статью я так и не собрался. К счастью, такую статью написал наш соотечественник — Михаил Селиванов, правда, на английском. Ниже представлен перевод данной статьи с небольшими комментариями. По всем замечаниям, связанным с переводом, прошу писать в личные сообщения.



Изначально язык Java создавался для интерактивного телевидения, однако со временем стал использоваться везде, где только можно. Его разработчики руководствовались принципами объектно-ориентированного программирования, отказавшись от излишней сложности, свойственной тем же С и С++. Платформонезависимость виртуальной машины Java сформировала в своё время новый подход к программированию. Добавьте к этому плавную кривую обучения и лозунг «Напиши однажды, запускай везде», что почти всегда соответствует истине. Но всё-таки ошибки до сих пор встречаются, и здесь я хотел бы разобрать наиболее распространённые из них.
Читать дальше →

Анонс второй встречи Java User Group Севастополь

Время на прочтение2 мин
Охват и читатели4K
Добрый день!

JUG — Java User Group, встречи JUG.SEV — это обсуждение различных технологий из мира Java, обмен опытом, а также просто интересное общение в Севастополе! Мы регулярно проводим встречи JUG.SEV с лекциями Java экспертов на самые интересные темы.
Наш сайт jugsev.ru, сообщество в ВК — vk.com/jugsev

Приглашаем всех java-разработчиков на вторую встречу JUG.SEV!

image

Программа встречи:
Читать дальше →

Автоматическое тестирование Java Swing приложений

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


Добрый день! Полтора года назад моей команде пришлось протестировать Java Swing приложение, которое могло иметь разные визуализации, натянутые на общий процесс. Статей тогда по этой теме было немного, конкретные решения отсутствовали вообще. TestComplete и прочие скриптовые технологии (да простят меня сторонники TestComplete) использовать не хотелось, так как приложение должно иметь гибкую архитектуру, расширяемую и изменяемую в рамках Agile процесса.

Сутки поиска в Google, анализ десятков примеров и технологий привели меня к двум возможным вариантам:
  • Fest
  • Jemmy

Не погружаясь в глубины глубин сравнения, я выбрал Fest библиотеку. С её помощью и, конечно, Junit, Mockito мы начали тестировать наше приложение. Об этом и расскажу ниже.
Читать дальше →

Доказательство некорректности алгоритма сортировки Android, Java и Python

Время на прочтение13 мин
Охват и читатели77K
Тим Петерс разработал гибридный алгоритм сортировки Timsort в 2002 году. Алгоритм представляет собой искусную комбинацию идей сортировки слиянием и сортировки вставками и заточен на эффективную работу с реальными данными. Впервые Timsort был разработан для Python, но затем Джошуа Блох (создатель коллекций Java, именно он, кстати, отметил, что большинство алгоритмов двоичного поиска содержит ошибку) портировал его на Java (методы java.util.Collections.sort и java.util.Arrays.sort). Сегодня Timsort является стандартным алгоритмом сортировки в Android SDK, Oracle JDK и OpenJDK. Учитывая популярность этих платформ, можно сделать вывод, что счёт компьютеров, облачных сервисов и мобильных устройств, использующих Timsort для сортировки, идёт на миллиарды.

Но вернёмся в 2015-й год. После того как мы успешно верифицировали Java-реализации сортировки подсчётом и поразрядной сортировки (J. Autom. Reasoning 53(2), 129-139) нашим инструментом формальной верификации под названием KeY, мы искали новый объект для изучения. Timsort казался подходящей кандидатурой, потому что он довольно сложный и широко используется. К сожалению, мы не смогли доказать его корректность. Причина этого при детальном рассмотрении оказалась проста: в реализации Timsort есть баг. Наши теоретические исследования указали нам, где искать ошибку (любопытно, что ошибка была уже в питоновской реализации). В данной статье рассказывается, как мы этого добились.

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

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

Java EE, JCA и jNode 2.X announce

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

Доброго времени суток, %username%.
Скажу сразу, на 99% данный пост про Java EE Connector Architecture, с примерами кода. Откуда взялся 1% про Fidonet вы поймете в самом конце.

Резюме для ленивых
JMS и JCA — родственники, входящие принимает MessageDrivenBean, исходящие отправляются через ConnectionFactory.
Минимальный пакет для входящего соединения — 4 класса, для исходящего — 8 классов и настройка адаптера на стороне сервера приложений.
Дальше — только подробности и боль


Для начала — история вопроса и решение бизнес-задачи.

Постановка задачи


Мне поставили задачу об интеграции существующей бизнес-системы («система А» ) с другой системой, которая была разработана много лет назад и понимает только собственный протокол передачи данных («система B»). Модифицировать чужие системы нельзя, соответственно задача свелась к написанию некой шины/прокси. Интеграция состоит в передаче туда-сюда сообщений с конвертацией их в процессе из одного формата в другой.

Система «А» имела много современных механизмов интеграции, самым простым для использования были признаны веб-сервисы. Под это дело был оперативно запилен стандартный интеграционный скелет для JEE — JAX-WS+EJB+JMS для гарантированной доставки сообщения.
А вот для работы с системой «B» стандартных средств не было. Робкие попытки поработать с сетью из контекста EJB успехом не увенчались, гугл подсказал два варианта решения проблемы: костылить сервлеты для работы с non-http или написать JCA-адаптер. Понятно, что был выбран второй путь — с JCA я до этого не работал, а узнать что-то новое всегда интересно.
Читать дальше →

Liquibase и changeset’ы на чистом SQL

Время на прочтение3 мин
Охват и читатели74K
Не все знают, но начиная с версии 2.0 Liquibase поддерживает возможность использования файлов с «чистым SQL» в качестве файлов changeset’ов. Под катом хочу немного описать, из чего они состоят.
Читать дальше →

Consulo: Code Coverage, Unity3D и прочие изменения

Время на прочтение3 мин
Охват и читатели10K
Для тех кто пропустил мои посты:Consulo — это форк IntelliJ IDEA Community Edition, который имеет поддержку .NET(C# на текущий момент, и на этот сектор пока идет большой акцент), Java.

В этой мини-статье я поделюсь с вами с тем, что удалось сделать за последние 2 месяца.





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

JPoint 2015: обзор заявок от докладчиков

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

На прошедших выходных мы закончили принимать заявки от докладчиков на JPoint 2015. Среди них попались как интересные, так и не очень. Прием заявок почти закрылся. Сегодня мы примем от вас последние заявки и закроемся ровно в полночь. Если вы хотите выступить на JPoint — срочно заполните заявку, и мы в течение суток свяжемся с вами.



Под катом вы найдете короткий обзор поданных докладов и традиционную голосовалку.
Читать дальше →

Учебный план по JDBC

Время на прочтение2 мин
Охват и читатели21K
Добрый день.

Я занимаюсь IT-образованием.
В данный момент готовлю курс «JDBC for Java Developer» для одной западной MOOC-платформы. Думаю этот детальный план может быть полезен кому-то для подготовки к собеседованию.

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

По некоторому размышлению выходит, что за 4-5 часов видео (стандартный формат на платформе) максимум полезного, что можно рассказать в 5-10 минутных кусочках, попадает в Первую часть (6 тем: «Intro», «Connect to database», «Query database», «ResultSet», «Optimizations», «Transactions» + 35 вложенных подтем).

Ценное, но не помещающееся, пошло во Вторую часть (3 темы: «ThreadLocal Tx-Manager», «Distributed Transactions», «Query Meta-Information» + 10 вложенных подтем).

Ожидается, что слушатель после курса будет готов приступить к технологиям «следующего уровня» после JDBC — Spring JDBC Template, JavaEE transactions, ORM.

Знаю, что разумное замечание состоит в том, что можно «просто почитать JDBC 4.2 Specification». Да, можно. Этот план и строится как анализ спецификации + предлагаемые целевые варианты использования (Dao Patter, TxManager, Connection pooling, ...).

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

Динамическая компиляция Java-кода своими руками

Время на прочтение14 мин
Охват и читатели31K
В этой статье я расскажу о нашей реализации hot deploy — быстрой доставки изменений Java-кода в работающее приложение.

Для начала немного истории. Мы уже несколько лет делаем корпоративные приложения на платформе CUBA. Они очень разные по размеру и функциональности, но все они похожи в одном — в них много пользовательского интерфейса.

В какой-то момент мы поняли, что разрабатывать пользовательский интерфейс, постоянно перезагружая сервер — крайне утомительно. Использование Hot Swap сильно ограничивает (нельзя добавлять и переименовывать поля, методы класса). Каждая перезагрузка сервера отнимала минимум 10 секунд времени, плюс необходимость повторного логина и перехода на тот экран, который ты разрабатываешь.

Пришлось задуматься о полноценном hot deploy. Под катом — наше решение проблемы с кодом и демо-приложением.
Читать дальше →

Простой webdev на Java 8

Время на прочтение6 мин
Охват и читатели19K
Хочу рассказать о том, как мне пришла в голову идея заняться веб-разработкой на Java.

Итак, как только я созрел для этого дела, составил небольшой список, которому должны соответствовать выбранные мною инструменты разработки:
  • Сборка при помощи maven;
  • Простой процесс деплоя и запуска;
  • Библиотеки должны быть легковесны;
  • Возможность использования шаблонизатора.

Усиленно погуглив, я нашел то, что мне нужно: Spark, jade4j и OrmLite.

Итак, инструменты выбраны, рассмотрим каждый из них в отдельности.
Читать дальше →