Freelance-cafe (ТЦ Мытный двор, ул. 8 марта 8Д)

15/05/2014
JUG.EKB #1
Практики тестирования кода
Андрей Старовойт, JetBrains

Я расскажу про способы борьбы с ошибками прямо из IDE, минуя стадию запуска приложения.

Как не наступить на грабли, внедряя скрипты в java приложение
Сергей Целовальников, NAUMEN

Однажды вы решаете добавить динамики приложению и в вашем Java коде появляется Groovy, либо любой другой скриптовый язык. И Groovy приносит свою магию.
Сначала её мало, но затем её становится все больше и больше! Вместе со скриптами появляется много вопросов - а если?, а как?, а почему? А если я переименую этот класс? А как удобно писать скрипты? А почему скрипты сломались? И т.д.
Я расскажу как сделать так, чтобы написание скриптов приносило радость, их поддержка не была болью, а Groovy стал вашим лучшим другом!

Коворкинг «Соль» (Переулок Химиков 3, 4 этаж)

29/06/2014
JUG.EKB #2
Миллионы котировок в секунду на чистой Java
Роман Елизаров, Devexsperts

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

Оковы тяжкие падут: как перевести сборку проекта с Ant на Gradle
Андрей Хитрин, Naumen

Платформа Java успешно прошла испытание временем, зарекомендовав себя в качестве основы для разработки долгоживущих проектов. Однако, с возрастом у таких проектов накапливается немало недостатков. Одним из них может являться устаревшая система сборки приложения.
Что следует делать, если Вы хотите избавиться от колоссальных по размерам и сложных в поддержке скриптов Ant, которые используются для сборки Вашего приложения? Какие есть альтернативы? Какими преимуществами и недостатками обладают эти альтернативы? Как не набить шишек при переводе проекта с Ant на какой-нибудь Gradle?

Коворкинг «Соль» (Переулок Химиков 3, 4 этаж)

13/11/2014
JUG.EKB #3
Динамическая (JIT) компиляция в JVM
Владимир Иванов, Oracle

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

Наскальное программирование
Евгений Пальмов, Naumen

Платформа Java уже давно доказала своё право находиться на лидирующих позициях рынка, зарекомендовав себя как отличную основу для разработки проектов любого калибра. Однако есть ли жизнь после Java? А может быть Scala? В докладе будут рассмотрены основные возможности Scala, от самых основ и до метапрограммирования на макросах, а также как она предлагает с их помощью красиво и просто решать распространенные проблемы в Java, при этом повышая общее качество и скорость написания кода.

Коворкинг «Соль» (Переулок Химиков 3, 4 этаж)

14/05/2015
JUG.EKB #4
Разработка высоконагруженного сервера на Java
Андрей Паньгин, Одноклассники

Может ли один сервер на Java обрабатывать десятки тысяч запросов в секунду, принимать сотни тысяч подключений и отдавать гигабиты трафика? Где-где, а в компании Одноклассники точно знают, как этого добиться, ведь у них на Java работают свыше 8000 серверов, обслуживая 48 млн пользователей ежедневно. 
Андрей Паньгин, ведущий программист компании, расскажет про приёмы разработки высоконагруженных приложений. 
Из доклада вы узнаете, в чём недостатки стандартного сетевого Java API, почему возникают JVM паузы, зачем вылезать за пределы Java Heap и как реализовать эффективный механизм удалённых вызов. Будут затронуты вопросы I/O, кеширования, сериализации и межсерверного взаимодействия.

10 человеко-лет GWT
Денис Кирпиченков, Naumen

Данный доклад посвящен набору инструментов Web-разработки Google Web Toolkit. В своем рассказе я сделаю краткий обзор возможностей GWT, и поделюсь опытом разработки проекта на GWT объемом 10+ человеко-лет. 

Из доклада Вы узнаете:
  • о том что делать если стандартного протокола RPC недостаточно
  • как лучше организовать backend для GWT
  • совместная работа GWT с javascript
  • как добавить новые возможности в GWT
  • анализ unhandled exceptions
  • тюнинг процесса сборки GWT-проекта

Коворкинг «Соль» (Переулок Химиков 3, 4 этаж)

01/10/2015
JUG.EKB #5
Нужен ли нам JMS в мире современных Java-технологий?
Николай Алименков, EPAM/XPInjection

JMS известен в Java-мире как стандартное решение для реализации распределенной работы с помощью обмена сообщениями. Существует множество JMS провайдеров, как бесплатных, так и коммерческих. Большой процент разработчиков используют JMS везде, где нужно послать сообщение и обработать его на другом конце. Но существует множество альтернативных решений организовать эффективные очереди сообщений: AMQP, Redis, ZooKeeper, Apache Kafka или даже самописные очереди на Cassandra. Почему не использовать их вместо JMS? 
В этом докладе мы обсудим краеугольные проблемы любой распределенной системы, основанной на обмене сообщениями, и уже с этими знаниями взглянем еще разок на JMS и альтернативы с точки зрения практических сценариев из реальной жизни.

Yet another technology stack in web-app development
Григорий Кошелев, СКБ Контур

При разработке web-приложений перед Java-разработчиками встаёт вопрос выбора технологий. Часто разработчики хотят остаться в Java/XML-мире, выбирая GWT или JSF. Я постараюсь предложить решение, которое бы выходило за рамки Java/XML-мира, сохранив его плюсы и устранив некоторые его минусы. В основе решения со стороны сервера лежат Spring Framework и FreeMarker, а со стороны клиента – AngularJS и TypeScript. На докладе я расскажу про применение MVC одновременно на клиенте и сервере, двухуровневую шаблонизацию, особенность использования TypeScript.

Коворкинг «Соль» (Переулок Химиков 3, 4 этаж)

11/02/2016
JUG.EKB #6
Что должен знать о соцсетях каждый Java разработчик?
Алексей Рагозин, Deutsche bank

Протокол TCP существует уже более 30 лет. Сетевые коммуникации являются неотъемлемой частью практически любого современного приложения. Тем не менее, сетевое программирование продолжает оставаться зоной проблем и опасностей. Но несмотря на простой интерфейс, программирование "сокетов" далеко не простая задача. Тема этого доклада "правильное" использование TCP/IP и Java socket API. Знаете ли вы что происходит при закрытии сокета? Как опции TCP влияют на производительность? Какие исключения может кидать сокет в Java? - Не уверены, тогда этот доклад для вас.

Kotlin + Android: практический ликбез
Дмитрий Полищук, Яндекс

Весь мир ждет выхода первой версии нового языка программирования от JetBrains под названием Kotlin. Но в мире мобильной разработки под Android мы ожидаем его с еще большим трепетом. Этот язык уже сейчас решает большое количество наших задач, которые стандартными средствами решаются не очень красиво или нетривиально. Используя стандартную библиотеку языка Kotlin мы освобождаемся от всего того багажа утильных библиотек на java которые мы были вынуждены таскать из проекта в проект. У Kotlin отличный потенциал для разработки в реактивной парадигме, которая сейчас постоянно набирает популярность во всей индустрии и в том числе в разработке мобильных приложений. Но т.к. язык новый и сообщество очень молодое, то все шишки еще не набиты. Я расскажу про подводные камни при написании UI, реактивного программирования, DI и почему уже даже сейчас можно переходить с Java на Kotlin для Android. Доклад будет интересен не только мобильным разработчикам, но и всем, кто интересуется современными JVM языками.

Оптимизация GWT приложений
Андрей Каргаполов, Naumen

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

Будут затронуты следующие вопросы:
  • анализ объема клиентского кода приложения
  • Минимификация и оптимизация через ключи компиляции GWT
  • Сравнение разрешения зависимостей в рантайме и на этапе компиляции
  • Разделение клиентского кода на части и их отложенная подгрузка

Коворкинг «Соль» (Переулок Химиков 3, 4 этаж)

22/09/2016
JUG.EKB #7

Коворкинг «Соль» (Переулок Химиков 3, 4 этаж)

03/03/2017
JUG.EKB #8
G1 GC: опыт миграции
Александр Мохов, Naumen

Доклад посвящен практическим аспектам перевода высоконагруженного java-приложения с ParallelOld на G1 GC: на что следует обратить внимание, если вы хотите, чтобы доступность вашего приложения была более предсказуемой?

Микросервисы - Огонь, Вода и Медные трубы
Александр Тарасов, Одноклассники
Кирилл Толкачёв, Альфа-Лаборатория

Микросервисы это не нечто новое, уникальное, неизведанное. Идеи, заложенные в их концепцию, основные постулаты уже звучали раньше. Так почему же мы всё чаще слышим о микросервисах? Почему многие верят, что это серебряная пуля, которая спасет нас от кровавого энтерпрайза? Даст нам глоток свежего альпийского воздуха после многолетнего вдыхания городской пыли? Мы попытаемся разобраться, что такое микросервисы для нас и чем они отличаются от того, что было раньше? Разберем основные понятия и покажем как теперь разрабатывать enterprise-приложения с микросервисным подходом на нашем любимом языке программирования Java? И нужна ли Java вообще? С какими проблемами придется столкнуться, как их можно решить и какие инструменты в этом помогут?

1 часть трансляции
2 часть трансляции
3 часть трансляции

Коворкинг «Соль» (Переулок Химиков 3, 4 этаж)

05/10/2017
JUG.EKB #9
Application Performance Monitoring: сравнение возможностей, проблемы и решения
Ярослав Киселев, КРОК

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

Организация многопоточности по модели подписки в Java 9
Дмитрий Чуйко, BellSoft

В JDK 9 появится новый класс Flow. Настолько ли это нужно, если с версии 8 уже есть CompletableFuture? Разберёмся, почему не хватает уже доступных моделей многопоточности, и как похожие подходы реализованы за пределами стандартной библиотеки. Оказывается, реактивным может быть не только двигатель, но и Java-приложение в маленькой коробочке. 

И немного о самом Дмитрие: работает в компании BellSoft. Более 4 лет работал в Oracle в команде Java SE Performance. В настоящее время занимается оптимизацией Java для процессоров семейства ARMv8. Предыдущий многолетний опыт с Java продемонстрировал, что в проблемы производительности упираются приложения любых масштабов и на любом оборудовании.​

Коворкинг «Соль» (Переулок Химиков 3, 4 этаж)

01/03/2018
JUG.EKB #10
Спасти поиск в приложении и не сойти с ума
Дмитрий Колмогорцев, Naumen

Знакомьтесь, Дмитрий Колмогорцев (Naumen, Екатеринбург) - разработчик группы производительности Naumen SMP, имеет опыт в автотестировании.
Дмитрий сделает доклад на тему “Спасти поиск в приложении и не сойти с ума”.
Итак, вы решили что вам нужен полнотекстовый поиск,взяли Lucene и выкатили в прод. 
Все идет хорошо: люди находят желаемое, все счастливы. 
Шло время и вдруг пользователи начинают жаловаться — ничего не ищет/долго ищет. Кто знает, возможно это из-за чьего-то стойкого желания индексировать xlsx в 50 мб или из-за тихого хрипа в логе в виде обилия Exception`ов? 
Дмитрий расскажет о проблемах на нашем пути и о том, как можно уменьшить время поиска с минуты до секунды.

Эволюция синхронной системы со Spring 5/Progect reactor
Максим Гореликов, Альфа-Лаборатория

Вышла очередная версия Spring, в которой появилась поддержка reactive streams. Хочется попробовать создать реактивную систему и посмотреть что из этого выйдет. Проверим можно ли с помощью новых подходов создать систему, которая лучше держит резкие всплески нагрузки и можно ли как-то улучшить ситуацию когда ваши источники данных тормозят. Посмотрим, как интегрировали Project Reactor в Spring 5 и что это может дать обычному разработчику. Возьмем простую синхронную систему из нескольких сервисов и БД, будем по шагам решать ее проблемы с помощью реактивных подходов. Попробуем разобраться, как все это стыкуется и как используются потоки в различных ситуациях. Интересно будет всем тем, кто не пробовал писать реактивные сервисы на Java или еще не успел посмотреть Spring 5/Reactor, или все это использует, но не до конца понимает, как оно работает.

Лофт «Титры» (проспект Ленина, 50Д)
01/03/2018
JUG.EKB #11
Deep links, strong drinks
Андрей Чернопрудов, Naumen

Доклад про исследование и разработку, казалось бы, простой фичи: открытие ссылок. Мы обсудим полный цикл разработки, начиная от глубин сложного backend и заканчивая реализацией на каждом клиенте. Везде свои грабли, подводные камни и костыли — как вы и любите.

API на переправе не меняют - как построить стабильный API?
Алексей Стукалов и Юрий Артамонов, HAULMONT

Вам знакомо то чувство, когда обновление того или иного фреймворка на давнем и стабильном проекте взрывает код и превращает его в красно-перечеркнутое месиво? Будучи разработчиками платформы CUBA нам до боли это знакомо. Так за время существования платформы, она поменяла под собой 3 ORM-а, 3 мажорных версии Vaadin, не говоря уже о Spring Framework. При этом, одной из задач, решаемых платформой, является именно сохранение стабильного API, чтобы наши пользователи не страдали от вышеобозначенной проблемы и мигрировали на последние версии всех используемых в платформе библиотек. В этом выступлении мы поделимся своим опытом построения API, а также приемами, которые позволяют нам решать проблемы с переездом решений на базе CUBA на up-to-date стек.

Коворкинг «Соль» (Переулок Химиков 3, 4 этаж)

28/02/2019
JUG.EKB #12
Хватит это терпеть: внедряем свеженький SpringBoot в большой legacy-проект
Андрей Аркаев, Naumen

Java-мир сильно изменился с появлением SpringBoot и ощутимо облегчил жизнь Java-разработчиков во многих аспектах. И всё бы хорошо, но, когда у вас гигантская 12-летняя кодовая база и 140 различных инсталляций в продакшене, зачастую, об этом можно только мечтать. 
Мы решили, что так жить не хотим, и внедрили SpringBoot. На встрече поговорим о том, что конкретно нас сподвигло на изменения, как подготовить себя и команду, с какими проблемами нам пришлось столкнуться и, что в итоге у нас получилось.

Большое Enterprise приложение для маленькой такой компании
Владимир Янченко, Naumen

16 ядер и 24 гб памяти — средний сервер приложения для нашего Enterprise продукта. А что делать, если есть всего 2 гб памяти, 1 ядро и большое желание это запустить в production? 
Из доклада вы узнаете об архитектуре нашей облачной платформы, почему мы решили экономить на ресурсах и как это реализовали, какие проблемы ждут при поддержке 300+ java приложений и что необходимо для быстрого решения этих проблем.

Построение микросервисного приложения на Netflix OSS
Петр Попов, Tinkoff

Немного расскажу про Eureka, Zuul, Ribbon, Feign, Hystrix и про проблемы решаемые стеком. В рамках live coding сессии покажу как изготовить приложение с использованием стека
Атриум Палас Отель (ул. Куйбышева, 44)
12/09/2019
JUG.EKB #13
Мигрируй вчера
Юрий Калеми, Naumen

Миграция схемы и данных реляционных БД в тиражном продукте.
Вкратце о самой распространённой методике доставки обновлений – Blue Green Deployment: почему она не подходит в случае тиражного продукта, и какое мы нашли решение для уменьшения времени простоя при миграциях БД

Ах, эти строки
Сергей Цыпанов, EPAM

Строки. java.lang.String. Пожалуй, наиболее изученный класс в Java. Все его использовали бессчётное количество раз, и, кажется, что уже не осталось ничего, чем он может нас удивить. Но всегда ли правильно мы его используем? Рискну предположить, что далеко не всегда. Доклад о строках и связанных с ними граблях

Атриум Палас Отель (ул. Куйбышева, 44)
27/02/2020
JUG.EKB #14
Java 11: Золотей теленок
Владимир Тарасов, Naumen

Попытка извлечь стопроцентную выгоду из новой релизной модели Java лежит через тернистый путь смены Oracle JDK на OpenJDK, модуляризации приложения, бесконечных холиваров и внутреннего перелома сознания. Запуск на OpenJDK 11 c classpath сопровождается фразой – сбылись мечты идиота! Однако, вся подготовительная работа по переходу на modulepath, включающая перевод сторонних библиотек и написания module-info.java, получается не такой простой, как кажется на первый взгляд…

Kotlintest
Павел Финкельштейн, JetBrains

Пишете на Kotlin, но всё ещё используете джавовую инфраструктуру для тестирования? А ведь вместе с экосистемой Kotlin растёт и количество инструментов для тестирования на нём.
Я расскажу вам о том, как Kotlin может облегчить жизнь разработчику тестов независимо от того, кто он: разработчик, QA или кто-то ещё
12/11/2020
JUG.EKB #15 Online
Чем меньше, тем лучше. Эффективные Java-докеры
Дмитрий Чуйко, Bellsoft 

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

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

Дмитрий Чуйко, инженер по производительности в компании BellSoft, в докладе «Чем меньше, тем лучше. Эффективные Java-докеры» расскажет:

  • как небольшие контейнеры помогают деплойменту
  • что такое Alpine Linux с точки зрения JDK
  • что потенциально может пойти не так
  • какие другие применения нового порта JDK
А также сравнит результаты при использовании Alpine с альтернативным подходом к контейнеризации микросервисов, основанном на GraalVM native image.

Типизируй это немедленно
Павел Зыков, Naumen

Каждый программный продукт, внезапно, нужно разрабатывать и тестировать. Для этого нужны тестовые данные.

Подготавливать тестовые данные вручную, на каждом окружении — рутинно и муторно.
Держать копии базы данных на каждый случай тестирования — не хватит дисков.
Писать большой скрипт с SQL-вставками и другим лапшекодом — можно состариться.
Создать свой язык с блекджеком и ... — хм, а это интересно.

Павел Зыков, спикер на JUG.EKB #15, вместе с командой Naumen Service Desk решили проблему наполнения тестовыми данными при помощи DSL на Groovy.

Groovy — язык, который идеально подходит для реализации DSL (Domain-specific language), но из-за динамической типизации, чем сложнее DSL становился, тем тяжелее было найти в нем ошибку.
25/03/2021
JUG.EKB #16 Online
Kotlin для разработки серверных приложений. Взгляд Java-разработчика
Антон Архипов, JetBrains

Kotlin становится всё популярнее для разработки не только мобильных приложений, но и для создания сервисов. Многие Java-фреймворки стараются включить Kotlin в список поддерживаемых языков. Spring, Micronaut, Quarkus, Vaadin — имя им легион!

Антон Архипов, Developer Advocate в JetBrains, предлагает взглянуть на Kotlin глазами скептичного Java-разработчика:

  • Что же там такого хорошего?
  • Почему разработчики Spring вложились в поддержку Kotlin?
  • Стоит ли переходить на Kotlin если Java развивается?
  • Какие барьеры придется преодолеть для внедрения нового языка в разработку?

Отдел по борьбе с временными аномалиями: BTrace как рулетка времени
Мария Газизова, Naumen

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

Спикер JUG.EKB #16, Мария Газизова, вместе с командой Naumen Service Desk внедрили инструмент трассировки BTrace всего за пару недель и узнали, что добавляло работы. На митапе Мария расскажет нам:

  • как быстро внедрить инструмент трассировки
  • запустить его в сборке
  • на что обратить внимание при анализе получившихся результатов

Data Scientist в погоне за взмахом колибри
Артем Селезнев, Сбер

Провести технический анализ, сформировать портфель и предсказать будущую стоимость — можно всего за несколько секунд. Но как это сделать в своём проекте с минимальными затратами?

Проект высокочастотного формирования портфеля для активной торговли на рынке акций стал ключевым для путешествия в мир анализа данных на Java. Артём Селезнев, Team leader of data science team в СБЕРе, предлагает участникам митапа пройти его путь по анализу данных и построению предиктивных моделей для биржи.

 Мы окунемся в данные в виде таблиц и узнаем:

  • что скрывается под определениями: функция потерь или стохастический градиентный спуск;
  • что и как надо сделать, чтобы математическая формула начала нам показывать вероятности или примерные будущие значения.