Апрель 14

Два сапога Java: как прошли JBreak и JPoint

Новосибирская конференция JBreak и московская JPoint — два сапога пара: обе проходят весной, обе проводятся JUG.ru, обе — главные Java-конференции своего региона. А в этом году мы и вовсе устроили их на одной неделе (и даже выжили после такого). Поэтому рассказы «как всё прошло» для JBreak и JPoint решили объединить в один, скажем так, «breakpoint». Под катом — подробности и о Новосибирске, и о Москве.
Читать дальше →

Раздел: Без рубрики | Комментарии к записи Два сапога Java: как прошли JBreak и JPoint отключены
Апрель 14

Статический анализ -> уязвимость -> профит

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

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

Раздел: Без рубрики | Комментарии к записи Статический анализ -> уязвимость -> профит отключены
Апрель 11

Как это работает в мире java. Пул потоков

Основной принцип программирования гласит: не изобретать велосипед. Но иногда, чтобы понять, что происходит и как использовать инструмент неправильно, нам нужно это сделать. Сегодня изобретаем паттерн многопоточного выполнения задач.

Представим, что у вас которая вызывает большую загрузку процессора:

public class Counter {

    public Double count(double a) {
        for (int i = 0; i < 1000000; i++) {
            a = a + Math.tan(a);
        }

        return a;
    }
}

Мы хотим как можно быстрее обработать ряд таких задач, попробуем*:

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

Раздел: Без рубрики | Комментарии к записи Как это работает в мире java. Пул потоков отключены
Апрель 11

Performance это праздник

Вернувшись с JPoint 2017, где с огромнейшим удовольствием пообщался с большим числом мегакрутых программистов решил надеть шляпу и покопаться в разного рода оптимизациях.

https://xkcd.com/1781/

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

Раздел: Без рубрики | Комментарии к записи Performance это праздник отключены
Апрель 11

[Перевод — recovery mode ] IntelliJ против Eclipse: JetBrains Toolbox или Yatta Launcher?

От переводчика:
Ниже приводится перевод с немецкого презабавного интервью с Фредериком Эбельсхойзером, где он раскрывает отношение компании Yatta к недавно вышедшему JetBrains Toolbox.

image

Создатели IntelliJ IDEA опубликовали приложение JetBrains Toolbox для сборки и настройки продуктов JetBrains. Аналогом для Eclipse является Yatta Launcher. Мы (автор текста, JAXenter — прим.пер.) побеседовали с Фредериком Эбельсхойзером (Yatta) о сходстве этих двух инструментов и о давнем соперничестве между Eclipse и IntelliJ.

JAXenter: JetBrains недавно выпустила свой «Toolbox». Вы, в свою очередь, стартовали с Yatta Launcher — аналогичным проектом для Eclipse. Можно ли, на ваш взгляд, провести параллель между этими двумя инструментами?

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

Раздел: Без рубрики | Комментарии к записи [Перевод — recovery mode ] IntelliJ против Eclipse: JetBrains Toolbox или Yatta Launcher? отключены
Апрель 11

Как подружиться с Realm

В этой статье мы хотели бы поделиться опытом использования набирающей популярность библиотеки для хранения данных — Realm. Перед любым проектом вначале разработки встает вопрос что использовать для хранения данных — что-то проверенное или попробовать инструменты из разряда для хипстеров.

image

Мы — небольшой стартап, разрабатывающий детский лаунчер. Хотя мы стартап и у нас небольшая команда, но большое внимание мы уделяем качеству кода. За два года разработки довольно сильно менялись требования, функционал и выбранные нами технологии. Вплоть до того, что мы перешли с полностью нативного приложения на гибридное, на основе Cordova. Также, одним из этих изменений стал переход с BaaS от Facebook’а Parse на Realm. В этой статье мы хотим рассказать о проблемах, с которыми мы столкнулись при переходе на Realm и стоит ли пробовать новые библиотеки, если со старыми уже "подружились".

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

Раздел: Без рубрики | Комментарии к записи Как подружиться с Realm отключены
Апрель 10

[Из песочницы] Все новое — это хорошо забытое старое

Вереница фреймворков и библиотек по очереди восседающих на троне трендов JavaScript мира это уже не новость. Разработчики из других областей даже подшучивают над нами на этот счет.

Вот и мне, в процессе работы, пришлось попрыгать по различным библиотекам и фреймворкам — qooxdoo, jQuery, Ext JS, Backbone.js, Knockout.js, Ember.js, Angular, React.

Не всегда выбор того или иного фреймворка был добровольный, модель outsource и outstaffing накладывает определенные ограничения на мою работу. Я думаю люди из этой же области поймут меня.
Читать дальше →

Раздел: Без рубрики | Комментарии к записи [Из песочницы] Все новое — это хорошо забытое старое отключены
Апрель 9

[Из песочницы] Пишем 2d-игру на Java

Доброго времени суток всем!

В этой статье будет описываться создание 2D игры на Java. Сразу предупреждаю, вы должны хотя бы базово знать язык Java, поскольку на подробное объяснение каждой строки у меня нету времени. И очень прошу вас, не списывать просто код, а пытаться понять что означает каждая строка, и писать со смыслом. И еще, я использую Eclipse, но вы можете использовать любой IDE.

Задача:

Я планирую создать игру, напоминающую шутер с видом от 3 лица.

Начало:

Ну что, приступим!

Для начала создадим проект. Назовем его «Just game». И сразу создаем класс Display.java. В него пишем:

public static void main(String[] args) {
		JFrame frame = new JFrame(/* название нашей игры */);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
		frame.setUndecorated(true);
		frame.setVisible(true);
	}

Теперь разберемся, что мы сделали.
Читать дальше →

Раздел: Без рубрики | Комментарии к записи [Из песочницы] Пишем 2d-игру на Java отключены
Апрель 9

[Из песочницы] Пишем 2d-игру на Java

Доброго времени суток всем!

В этой статье будет описываться создание 2D игры на Java. Сразу предупреждаю, вы должны хотя бы базово знать язык Java, поскольку на подробное объяснение каждой строки у меня нету времени. И очень прошу вас, не списывать просто код, а пытаться понять что означает каждая строка, и писать со смыслом. И еще, я использую Eclipse, но вы можете использовать любой IDE.

Задача:

Я планирую создать игру, напоминающую шутер с видом от 3 лица.

Начало:

Ну что, приступим!

Для начала создадим проект. Назовем его «Just game». И сразу создаем класс Display.java. В него пишем:

public static void main(String[] args) {
		JFrame frame = new JFrame(/* название нашей игры */);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
		frame.setUndecorated(true);
		frame.setVisible(true);
	}

Теперь разберемся, что мы сделали.
Читать дальше →

Раздел: Без рубрики | Комментарии к записи [Из песочницы] Пишем 2d-игру на Java отключены
Апрель 8

Проблема использования CompletableFuture в нескольких потоках и её решение

image
В Java 8 появился новый класс CompletableFuture, который позволяет удобно писать асинхронный код.
При использовании CompletableFuture из нескольких потоков я столкнулся с его неочевидным поведением, а именно с тем, что callbacks на нём могут выполнятся совсем не в тех потоках, как ожидалось. Об этом и о том, как мне удалось решить проблему — я и расскажу в этой статье.

Мною разрабатывался асинхронный, неблокирующийся однопоточный клиент к серверу, который использовал потоконебезопасные структуры данных. Тесты проходили без проблем, но benchmarks иногда падали c ConcurrentModificationException на внутренних структурах однопоточного клиента.
Читать дальше →

Раздел: Без рубрики | Комментарии к записи Проблема использования CompletableFuture в нескольких потоках и её решение отключены