Прошедшие встречи

Как это было...


#6 13.05.2017

Шестая встреча JUG.SEV прошла 13 мая 2017 года, в конгресс-центре cевастопольского филиала МГУ по адресу ул. Героев Севастополя, 7.

Доклады

Генерирование документации к REST API с помощью Spring REST Docs

На сегодняшний день REST API активно применяется в промышленной разработке приложений. И успешность использования API зависит от того, насколько хорошо пользователь понимает, как использовать тот или иной метод: за что отвечает каждый параметр метода, что метод возвращает. В связи с этим у разработчиков REST API возникает необходимость поддерживать актуальную и понятную документацию. В своём докладе я расскажу о своём опыте автоматизации процесса генерирования документации к REST API на своём текущем проекте с использованием инструмента Spring REST Docs.

Видео доклада

May the streams be with you

                        
{
    title: "May the streams be with you",
    author: "Artem Nikiforov",
    summary: "Использование потоков данных, особенно потоков данных с заранее"+
    "неизвестным объемом, например генерящихся на лету требует особого "+
    "обращения в асинхронных системах. Одна из наиболее часто возникающих "+
    "проблем - это несоответсвие пропускных способностей поставщика данных "+
    "и его потребителя. Если поставщик данных в единицу времени производит "+
    "данных меньше, чем потребитель обрабатывает, то увеличивается время "+
    "обработки данных, возможен простой ресурсов. Если поставщик данных "+
    "производит данных больше, чем способен обработать потребитель, то "+
    "потребитель должен каким-то образом буферизовать поступающие данные, что "+
    "в общем случае может привести к переполнению буферов.\n"+
    "Основная задача Reactive Streams в общем и Akka streams в частности "+
    "заключается в управлении обменом данных в границах передачи элементов между "+
    "нитями(threads) или пулами нитей(thread-pools).\n"+
    "В ходе доклада будут показаны результаты исследовательских изысканий автора "+
    "относительно набора инструментов 'Akka streams'."
}
                        
                    
Видео доклада

Бесформенное программирование на Scala

Все мы, как программисты пишущие на строго типизированных языках, таких как Scala и Java, любим их за эту типизированность, ведь типы весьма специфичны, они позволяют нам проще судить о коде, позволяют избегать багов, и зачастую и ведут нас к решению той или иной задачи. Однако возникают ситуации, когда эта специфичность начинает играть против нас, и нам хочется использовать, то общее, что есть в наших конкретных типах, для написания одного общего кода, во избежание его дублирования. Это будет вводный рассказ о продвинутых фичах в Scala, таких как "implicits" и " type classes". Поговорим о том, что такое "Algebraic Data Types (ADT)" и чем они могут быть полезны. Рассмотрим понятия "Product" и "Coproduct". Научимся приводить конкретные типы к "Generic" представлению. Ну и наконец попробуем на реальном примере разобраться, как это можно использовать.

Видео доклада

Application Performance Monitoring: сравнение возможностей, проблемы и решения

Существует масса способов найти причину медленной работы приложения, сданного в эксплуатацию. Например, можно аккуратно добавить логирование времени выполнения потенциально медленных методов. Или можно попробовать получить тред-дампы продакшена, проанализировать их и понять, на что программа тратит большую часть времени исполнения. Но есть ли какой-то более простой и доступный способ? На помощь нам могут прийти специализированные решения класса Application Performance Monitoring (APM). Как обещают вендоры, APM могут показать, что происходит внутри приложения, и помочь в поиске узких мест. Только попробовав, можно узнать, насколько эти заявления соответствуют действительности. На примере опыта использования решений APM в реальных проектах мы разберемся в их полезности и сравним с классическими инструментами — такими, как логи и тред-дампы.

Видео доклада

#5 01.10.2016

Пятая встреча JUG.SEV прошла 1 октября 2016 года, в отеле ATRIUM - King's Way (пр. Героев Сталинграда, 47).

Доклады

Гуляем по heapdump-у

Если, понадеявшись на Garbage Collector, разработчик не уделяет достаточного внимания тому, как используется память в его приложении то JVM обязательно наградит вас OutOfMemoryError. Давайте разберемся, какие инструменты могут помочь разработчику в этой ситуации, какие данные можно получить из heap dump файла, а также попробуем сделать свой анализатор heap dump файлов.

Видео доклада

А давайте в наш продукт внедрим мобильное приложение?

Андрей поделится опытом внедрения мобильного приложения в реальную систему и расскажет, какие подводные камни ждут разработчиков. Андрей специализируется на backend разработке и создании мобильных приложений. За небольшой срок в 4 года он успел опробовать себя в разработке распределенных систем, проектированию мобильного API и разработке мобильных приложений на платформах Android и iOS.

Видео доклада

Ahead of time компиляция для Hotspot

Существуют различные реализации Java. В некоторых из них есть ahead-of-time (AOT) компиляторы, причём подход к решению различный, да и постановка задачи разная. В Hotspot есть JIT-компиляция, но нет стандартного AOT. Не обязательно, что так будет всегда. Мы поговорим о том, зачем может понадобится заранее получать нативный код, как это делается и работает в реализации для Hotspot. И с другой стороны, как Java-код может встраиваться в процесс JIT-компиляции.

Видео доклада

Тестирование с помощью docker

Довольно часто, чтобы протестировать некоторый код, необходимо настроить внешнюю инфраструктуру - установка/настройка специализированных приложений, конфигурирование операционной системы и т.д. Мы расскажем о том, как можно без особых усилий, с использованием такого инструмента как docker, настроить необходимое для тестирования внешнее окружение. Также поделимся личным опытом работы с docker и трудностями, которые возникли у нас в процессе автоматизации тестирования.

Видео доклада

#4 16.04.2016

Четвертая встреча JUG.SEV прошла 16 апреля 2016 года, в отеле ATRIUM - King's Way (пр. Героев Сталинграда, 47).

Доклады

How to GameDev in Java

Каждый разработчик наверняка хоть раз задумывался о создании своей игры. Однако на пути к заветной цели стоит множество препятствий, одним из которых является выбор стека технологий. На сегодняшний день существует множество игровых движков и библиотек. Не удивительно, что у начинающих разработчиков игр возникает ряд вопросов: "Какую библиотеку (движок) использовать? Зачем вообще использовать библиотеки? Можно ли написать свою игру без использования библиотек?" Поиску ответов на данные вопросы и будет посвящен данный доклад. Также вы узнаете:

  • Как написать свою первую игру, не используя ничего кроме языка Java.
  • С изучения каких библиотек стоит начинать при разработке игр.
  • Преимущества и недостатки Java технологий при разработке игр.

Видео доклада

Play with integrations on Play Framework

При разработке новой версии Информационной системы лицензирования образовательной деятельности (ИСЛОД) на Play Framework необходимо было интегрировать ее с комплексом систем Рособрнадзора. Все интеграции должны идти по протоколу SOAP. ИСЛОД должна быть потребителем части сервисов, а также выступать поставщиком. В Java-мире есть огромное колличество фреймворков для работы с SOAP. Однако, применение их на практике в рамках проекта на Play Framework имеет ряд проблем. В докладе пойдет речь о том, с какими проблемами мы столкнулись при разработке интеграций, используя Apache CXF; почему мы выбрали этот фреймворк; как, в итоге, удалось решить возникающие проблемы.

Видео доклада

Java Messaging с помощью AMQP и RabbitMQ

В последнее время набирают популярность асинхронные, событийно-ориентированные архитектуры приложений, микросервисы и т.п. На этой волне развиваются такие фреймворки и сервисы как Akka, Rx4Java, RabbitMQ, Kafka, и др. В потоке стремительно развивающихся технологий приходится периодически переоценивать сложившиеся традиции в использовании стандартов, протоколов и продуктов. Предлагается обсудить подход к организации потоков сообщений в Java Middleware (и не только), отступающий от стандарта JMS, (благословленного JCP) в сторону AMQP. Мы познакомимся с протоколом AMQP и его реализациями. Рассмотрим принципиальные отличия от JMS, поговорим об областях применимости - классах задач, когда использовать, например, RabbitMQ будет хорошей идеей, а когда - не очень. Сделаем обзор возможностей RabbitMQ, как использовать его через Spring и обсудим пару примеров применения технологии для конкретных задач.

Видео доклада, ч.1

Видео доклада, ч.2

Контроль codestyle в рельных условиях

Думаю что многие знают про инструменты автоматической проверки программного кода такие как PMD, FindBugs, Checkstyle. Многие компании используют те или иные инструменты, и Naumen не является исключением. У нас в проектах активно используют как PMD, так и FindBugs. Про них написано много статей в интернете, однако, большинство - это просто инструкции по настройке и ничего более. Год назад стартовал новый проект внутри компании и мы с самого начала решили держать код в чистоте. В качестве инструмента был выбран Checkstyle. Потому, в своем докладе я бы хотел поделиться опытом использования Checkstyle в реальном проекте, рассказать про положительные стороны внедрения этого инструмента с самого начала разработки.

Видео доклада

#3 26.09.2015

Третья встреча JUG.SEV прошла 26 сентября 2015, в отеле ATRIUM - King's Way (пр. Героев Сталинграда, 47).

Доклады

JMS как инструмент для масштабирования и построения распределенных систем

Павел Муравьев - ведущий инженер-программист компании NAUMEN, работает в отделе разработки продукта Service Desk. Специализируется на системах мониторинга, участвовал в разработке проектов распределенных асинхронных систем на базе JMS.

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

Подробнее о JMS и как превратить сеть в большой компьютер – в докладе.

Видео доклада

CompletableFuture уже здесь

Стандартная библиотека должна помогать выстраивать любые параллельные вычисления, да ещё бы так, чтобы хорошо использовать все ядра. В Java уже довольно давно существуют Thread, Future и ExecutorSevice. Однако часто использование потоков "вручную" порождает типичные ошибки и сложности. Бывает трудно добиться максимальной производительности, и не всегда получается вписаться в общий стиль обработки данных. Java 8 предлагает решения. Например, для модели pull удобнее использовать стримы (j.u.Streams), а для continuation - CompletableFuture. Посмотрим, как просто избавиться от блокирующих вызовов и ада коллбэков. Мы коснемся следующих тем:

  • Переход от блокирующегося исполнения на основе Future к подходу без блокировок на основе CompletableFuture.
  • Разбор API.
  • Накладные расходы.
  • Простое руководство для многоуровневых систем (на примере веб-сервера).
  • Что внутри и что дальше.

Видео доклада

Документирование RESTful API при помощи Swagger на основе Jersey

Сейчас довольно популярна схема приложения, когда оно делится на две части: клиентскую и серверную. Обе части приложения могут разрабатывать независимые команды. В таком случае зачастую недостаточно самодокументируемого кода, необходима документация, описывающая "точку соприкосновения" команд. В этом может помочь Swagger - интерактивная документация вашего RESTful API и простой вариант создания SDK. Jersey - это реализация RESTful API серверной части. Расскажу и покажу, как пользоваться этими средствами и попробую продемонстрировать генерацию SDK.

Видео доклада

Анализ производительности Java-приложения

Денис Кирпиченков - performance инженер направления Service Desk в NAUMEN.

Говорят, все довольные пользователи java-приложений счастливы одинаково, а все недовольные - несчастливы каждый по-своему. Но, что делать с одной, вероятно, общей проблемой пользователей - "После установки java-приложения стал жутко тормозить сервер"? О том, что делать с такими вопросами пользователей, на примере Web-приложения на Java, и будет посвящен данный доклад. Из доклада вы узнаете:

  • с чего лучше начинать работу с производительностью (java) приложения;
  • что можно сделать для упрощения анализа;
  • какие есть стандартные и нестандартные инструменты и подходы для решения подобных задач.

Видео доклада

#2 14.03.2015

Вторая встреча JUG.SEV прошла 14 марта 2015, в центре технологического предпринимательства "Слобода" (ул. Героев Сталинграда 49 А).

Доклады

Динамическая (JIT) компиляция в JVM

Владимир Иванов — ведущий инженер Oracle, работает в группе разработки виртуальной Java-машины HotSpot. Специализируется на JIT-компиляции и поддержке альтернативных языков на платформе Java. Владимир пришел в Sun Microsystems (приобретена Oracle) в 2005 году и с того момента поучаствовал в большом количестве проектов, связанных с Java (HotSpot JVM, RTSJ, JavaFX).

Java абстрагирует большое количество технических деталей о платформе, на которой исполняется Java-приложение. Java-платформа активно использует динамическую компиляцию в виртуальной Java-машине (JVM). Динамическая (Just-In-Time) компиляция повышает производительность за счет трансляции Java байткода в машинный код в процессе работы приложения. Принцип работы существенно отличается от статических компиляторов и для получения высокопроизводительного кода JVM использует другой набор методик компиляции. В докладе будут описаны общие принципы динамической компиляции и ее особенности в применении к Java. Обзор JIT-компиляторов в HotSpot JVM будет включать рассмотрение инструментов и методик анализа их работы (от высокоуровневых решений и до машинного кода) и диагностирования проблем.

Видео доклада

Не оказывайте сопротивления. Аналитики - ваши друзья!

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

Видео доклада

Инструменты работы с многопоточностью в Java

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

Видео доклада

#1 15.11.2014

Первая встреча JUG.SEV прошла 15 ноября 2014 года, в центре технологического предпринимательства "Слобода" (ул. Героев Сталинграда 49 А).

Доклады

Миллионы котировок в секунду на чистой Java

Доклад будет сконцентрирован на тех решениях и подходах, которые, исходя из реального опыта, позволяют достичь разумный компромисс между производительностью и сложностью, что во многом и обуславливает выбор платформы Java. Реальное сравнение с классическими поставщиками данных, имеющих десятилетнюю историю развития и поддержки своего программного обеспечения на языках низкого уровня, показывает что особенности Java не являются препятствием к созданию высокопроизводительных систем обработки данных, а скорее наоборот, позволяют догнать и обогнать конкурентов за счет наличия большего инструментария, увеличения продуктивности работы программистов, и упрощения отладки и поддержки.

Видео доклада

Scala - упрощая сложное

Поговорим о проблемах утилизации многоядерных и многопроцессорных систем, которые являются серьезными вызовами для разработки ПО. Почти все разработчики сталкивались или сталкиваются с "гонками", "дедлоками", неопределенностью порядка выпонения и не имеют простых средств для решения данных проблем. В докладе будет рассказано о соответствующих базовых технологиях, которые предоставляет Scala: параллельные коллекции, акторы и параллельные DSL. Будет возможность посмотреть можно ли легко и просто программировать в многопоточном окружении.

Видео доклада

Очень вкусный фрукт Guava

Guava - open-source библиотека, разработанная в основном инженерами компании Google, в которой есть множество полезных утилит для написания эффективного и красивого кода. В Guava решено множество типичных задач, которые часто возникают при работе с примитивами, строками, коллекциями, параллельными вычислениями, кэшированием данных и многим другим. В докладе поговорим о возможностях, которые предоставляет Guava, рассмотрим примеры использования утилит библиотеки.

Видео доклада

Java-based test automation tools

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

Видео доклада

Как сделать свою систему умнее или зачем нужна семантика

Количество информации в мире стремительно возрастает, в результате на поиск и анализ информации у людей уходит до 40% рабочего времени. Мы создаем сервис, обеспечивающий автоматическое структурирование информации и эффективный поиск в ней. Для этого мы используем инструменты вычислительной семантики и методы обработки естественного языка. Доклад посвящен автоматизированным средствам анализа текстов: структурирование и извлечение информации, возникающие проблемы и способы их решения.

Видео доклада

Потоковые и компонуемые приложения приложения с Play framework

Краткое введение в PlayFramework. Введение в то, как можно строить современные компонуемы web приложения с помощью Play, как эффективно стримить и рендерить страницы, значительно снижая время загрузки, используя BigPipe стиль с Play Enumerators, как структурировать Play приложения, чтобы их было легко понимать, поддерживать и тестировать.

Видео доклада