В октябре Java-разработчиков ожидает немало интересного: на конференции Joker будут и хардкорные доклады, и любимые спикеры, и нестандартные форматы. О хардкоре: конечно, без него не обходится ни один Joker, но в этот раз программный комитет особенно доволен получившимся. В списке докладов под катом мы пометили хардкорные значком 🔥. О спикерах: будут и отлично знакомые участникам имена (Алексей Шипилёв, Джош Лонг, Евгений Борисов), и интересные новые. Например, будет парный доклад Мэтта Райбла и Брайана Демерса, а у обоих этих людей есть звание Java Champion — часто ли услышишь двух «чемпионов» сразу? О форматах: доклады важны, но в этот раз дело не ограничится ими. Например, Евгений Борисов в прямом эфире проведет техническое интервью на senior-разработчика.  Под катом — полная программа, разбитая на тематические блоки. Спецформаты VM/Runtime JVM-языки Тулинг и фреймворки Spring Кодогенерация Архитектура Data storage and processing Безопасность Тестирование  Конференцию откроет кейноут Никиты Поварова и Романа Поборчего из JetBrains «Самопишущийся код».  JetBrains JetBrains Участники предыдущего Joker могут помнить доклад @lany о том, заменят ли роботы программистов (мы даже сделали текстовую версию для Хабра). Но за прошедший год тема стала лишь актуальнее прежнего: например, был представлен инструмент GitHub Copilot.  Так что мы снова обращаемся к теме программ, которые пишут код. Осветят её двое спикеров из JetBrains — компании, где об инструментах написания кода знают очень много. Причём Никита Поваров отвечает именно за разработку различных ML-технологий, так что информация настолько из первых рук, насколько возможно. Никита и Роман разберут, как «самокодные» программы работают под капотом, подсветят их сильные и слабые стороны и расскажут, что в области автоматического написания программ делают в JetBrains. Из интересных форматов нас также ждет техническое интервью с Евгением Борисовым. Все вы знаете его как знатока и потрошителя Spring. А что, если бы вы попали к нему на техническое собеседование? Прошли бы?  EPAM Ради эксперимента мы решили выяснить, каково это: на этот раз вместо доклада Евгений проведет в прямом эфире собеседование, на котором будет гонять участников программного комитета Joker по хард-скиллам. А чтобы все было как в реальности, кандидаты не будут заранее знать вопросы. Будет и весело, и интересно, и познавательно — особенно если вы планируете сделать шаг по карьерной лестнице и готовитесь к серьёзному интервью. Кроме этого, возможны и другие не-докладные активности, но они добавятся позже — а пока разберёмся с более привычными докладами.  Java-объекты наизнанку 🔥 Red Hat В опросах «кого бы вы хотели увидеть на Joker» Алексей Шипилёв вечно в числе лидеров: его хардкорные доклады в Java-сообществе на вес золота. И если на прошлогоднем Joker он лишь участвовал в круглом столе, то вот теперь выступит с полноценным докладом. Один из часто задаваемых вопросов об объектах в Java — сколько же они занимают в памяти? В отсутствие языковой или библиотечной операции «sizeof», программистам остается гадать о футпринте их кода или ссылаться на легенды и рассказы специалистов. В этом докладе мы постараемся заглянуть в изнанку Java-объектов и увидеть, что в них лежит. После этого должны стать ясны многие трюки в футпринте объектов, станут понятны некоторые особенности рантаймов, и будет очевидно, что и как можно эксплуатировать в грязных низкоуровневых целях.    Project Lilliput: Shrinking object headers in the Hotspot JVM 🔥 Red Hat Тут тоже тема объектов и тоже спикер из Red Hat. В Hotspot JVM у Java-объектов есть объектный заголовок из 128 бит: 64-битное многоцелевое слово заголовка и 64-битный указатель класса. При типичных средних размерах объектов в 5-6 слов это довольно существенно: 2 из этих слов всегда заняты заголовком. Если бы можно было уменьшить размер заголовка, мы могли бы значительно снизить нагрузку на память, что напрямую приводит к уменьшению использования хипа, увеличению скорости аллокации объектов, снижению активности GC и улучшению локальности кеша. Роман представит проект Lilliput, над которым работает. Целью проекта является уменьшение размера заголовка в Hotspot до 64 бит или даже меньше. Сначала Роман обсудит текущее положение дел и проблемы, с которыми сталкивается команда при попытке уменьшить размер заголовка, а затем показать некоторые подходы к решению этих проблем. Глубокое погружение в технологию JVM гарантировано. Project Loom — друг или враг Reactive? VMware National Technical University of Ukraine Мы слышали о Project Loom — новых моделях программирования на платформе Java для высокопроизводительного облегченного параллелизма и потоков. Project Loom дает структурированный параллелизм в Java, позволяющий писать эффективные асинхронные приложения с помощью императивной парадигмы. После этого многие начали задаваться вопросом, останется ли функциональный и реактивный подход в экосистеме Java.    В этом докладе спикеры развеют миф о том, что Loom убивает Reactive, и обсудят, как он улучшит экосистему Reactive, сделает ее более надежной и простой в использовании.   Concurrent thread-stack processing in the Z Garbage Collector 🔥 Oracle  Изначально цель Z Garbage Collector (ZGC) заключалась в том, чтобы время паузы при сборке мусора не превышало 10 мс. Но когда в Oracle добились этой цели, на этом не остановились и решили сделать паузы вообще субмиллисекундными. А в таком случае больше не получится сканировать стеки потоков внутри пауз GC. Этот доклад посвящен JEP 376 «ZGC: Concurrent thread-stack processing», где эту задачу переносят в параллельные фазы. В общем, тут один из основных разработчиков ZGC расскажет в подробностях о том, что происходит внутри. Поможет ли это вам прямо на следующий день в рабочем проекте? Вряд ли. Но является ли это интереснейшим уникальным контентом из первых руки, позволяющим лучше понять, как работают используемые нами технологии? Безусловно. Выходя за рамки контейнера — компактные и быстрые контейнеры с нативным образом (и без) BellSoft Рано или поздно вы захотите повысить эффективность развертывания, не тратя время и ресурсы на исправление исходного кода. Предлагаем попробовать выйти за рамки привычного мышления (и за рамки традиционного контейнера), чтобы контейнеризация приложений стала продуктивней. Мы рассмотрим, как добиться этого двумя способами — с использованием традиционных контейнеров и нативных образов, обсудим преимущества и недостатки обоих вариантов и найдем наиболее подходящий подход для ваших задач. Мы затронем несколько тем, включая выбор JDK и флагов, сборки на основе статической компиляции и эффективность разных методов контейнеризации для одного и того же приложения. Нам предстоит проверить способы оптимизации как нативных образов, так и стандартных контейнеров с JDK, выбрав верную платформу, задав настройки компиляции и использовав дополнительные инструменты. Дмитрий расскажет о минималистичном Alpine Linux, полная поддержка которого недавно была реализована как для OpenJDK, так и для GraalVM. Вы научитесь оценивать поведение вашего приложения, чтобы уменьшить контейнеры, ускорить их работу и эффективно использовать все возможности разных платформ. Вместе мы научимся выходить за рамки возможного, чтобы обеспечить идеальную работу ваших служб и приложений. Static Java, GraalVM Native and OpenJDK 🔥 Red Hat Появление GraalVM Native меняет правила игры. Оно даёт новые возможности: например, Java-приложение может быстрее запускаться или требовать меньше памяти. Но за всё приходится платить. Новый подход с «нативной статической Java» отличается от привычного настолько, что возникают риски — в том числе риск расхождения спецификации и имплементации. Помочь справиться с этим призван проект Leyden из OpenJDK.  Эндрю Динн — инженер Red Hat, наиболее известный своей работой над Byteman и AArch64-портом OpenJDK, а теперь Эндрю причастен к проектам GraalVM и Leyden. Так что о том, как они работают, стоит слушать как раз его. Архитектура математических вычислений на Kotlin JetBrains Research Докладов про Kotlin в мире уже много, но тут не миллионый «hello world», а куда более наукоемкая тема. Речь пойдет про созданную Александром библиотеку KMath и не только. Будут рассмотрены разные подходы к математическим API и их реализациям на разных языках программирования (Python, C++, Julia, Java и Kotlin). Также поговорим о том, почему сложно сделать математику одновременно удобной и быстрой. Детально разберем проблему боксинга. Вы увидите, каким образом контекстно-ориентированный подход в Kotlin помогает решить не только проблему баланса между скоростью и удобством, но и позволяет сделать математические библиотеки модульными, и обеспечить их совместимость с высокопроизводительными платформенными библиотеками.  В заключение поговорим о том, есть ли будущее у математических библиотек за пределами C++ (и не только в Kotlin). Scala. Война Эффектов. ZIO vs Cats Effect 🔥 Тинькофф Современная бэкенд-разработка на Scala практически полностью покорилась структурной concurrency на базе разновидностей монады IO. Но сообщество выглядит расколотым между пользователями ZIO-экосистемы и Cats Effect. Поэтому в докладе разберемся: Как устроен IO и его вычисление? Какие конкурентные преимущества есть у каждой из экосистем? Какие нововведения мы увидели в Cats Effect 3? Как экосистемы и их участники борются друг с другом? Можно ли сочетать и как выбрать? Как эволюционировать свою библиотеку на Kotlin безболезненно для клиентов JetBrains Выпустить свою библиотеку — это полдела, дальше ее надо поддерживать. И тут, с одной стороны, надо не подвести сообщество, а с другой, не сойти с ума в процессе. Леонид — разработчик в команде Kotlin-библиотек в JetBrains и мейнтейнер kotlinx.serialization, так что многое знает по теме «как ее правильно поддерживать и обновлять». Мы поговорим о совместимости между разными версиями и различными инструментами, которые помогают разработчику не сломать её. Также затронем тему эволюции API, как лучше всего добавлять новые функции в библиотеку и отключать старые. Большинство тем будет проиллюстрировано примерами из всем известных библиотек на Kotlin — таких, как kotlinx.coroutines и kotlinx.serialization. "Simply reactive" with Vert.x, Mutiny, Hibernate Reactive and Quarkus Red Hat  Мы часто слышим, что асинхронное программирование и реактивность - это сложно. Тем не менее они необходимы для создания эффективных сервисов и повышения плотности развертывания вашей инфраструктуры. Меньше нерационально расходуемых ресурсов экономит операционные расходы. Мы изучим проверенный реактивный инструментарий Vert.x и использование его реактивных драйверов реляционных баз данных. Возьмем Mutiny, новую интуитивно понятную и удобную библиотеку реактивного программирования, где не требуется докторская степень по функциональному программированию. Затем возьмем Hibernate Reactive, чтобы задействовать возможности объектно-реляционного отображения, предлагаемые технологиями Hibernate уже более десяти лет. После этого сквозного путешествия в мир реактивных технологий мы, наконец, увидим, как использовать их все в приложении Quarkus. Если вы уже имели дело с Vert.x, то могли слышать о книге «Vert.x in Action» — а тут будет доклад от её автора. AI maintenance scheduling with OptaPlanner on Quarkus Red Hat Планирование технического обслуживания самолетов, железных дорог, электрических сетей или лифтов — сложная задача с подбором специалистов и минимизацией перемещений. Обязательно нужно уложиться в дедлайн, но при этом слишком раннее завершение работ — это пустая трата ресурсов: если вы убираетесь дома 7 дней подряд, это не значит, что дальше можно 7 недель подряд не убирать. Сегодня большинство компаний планируют техническое обслуживание неэффективно, часто вручную. Но усовершенствованные алгоритмы искусственного интеллекта для планирования могут выполнять эту работу гораздо лучше. Джеффри, создавший проект OptaPlanner, покажет, как написать приложение для планирования технического обслуживания с помощью OptaPlanner на Quarkus и Java (но Spring и/или Kotlin тоже подойдут). Оно будет генерировать наилучшее расписание, как для рабочих, так и для менеджеров, принимая во внимание жесткие и мягкие ограничения. Любопытный факт от JUG Ru Group: хотя мы не обслуживаем самолёты, а проводим IT-конференции, для нас OptaPlanner тоже оказался полезен.    Single Page Applications without REST API 72 Services LLC Одностраничные приложения (SPA) используют REST API в качестве моста между клиентом и сервером для связи. Этот API должен быть разработан и протестирован, а код доступа должен быть написан на стороне клиента. Этот процесс сложен и чреват ошибками. Vaadin Fusion использует другой подход и генерирует API и код доступа на стороне клиента на основе аннотированных классов Java. Этот доклад представляет собой введение в Vaadin Fusion. В отличие от хорошо известного Vaadin Flow, основанного на Java, Vaadin Fusion предлагает возможность разработки SPA с TypeScript и веб-компонентами во фронтенде и Java в бэкенде. gRPC client-side load balancing — зачем, что, как и WTF? Сбер Поговорим о популярной технологии организации взаимодействия — gRPC. Дмитрий расскажет об основных её особенностях и способах использования, уделив основное внимание вопросу балансировки нагрузки. Обычно для этой задачи используют дополнительные компоненты — nginx, envoy, istio и т.д., но в некоторых случаях добавление дополнительных элементов в систему нежелательно. Тем более, что Java-реализация gRPC способна на многое и сама, но заставить её работать не так просто... Чтобы разобраться, как активировать нужную функциональность, открытых мануалов катастрофически не хватает. Для выяснения истины мы с вами залезем поглубже в Java-код gRPC, разберемся в том, как оно задумывалось авторами и попробуем понять, как с этим жить дальше. JReleaser — releasing at the speed of light Oracle Ваш Java-проект достиг той стадии, когда неплохо было бы выложить бинарные файлы, но появляются новые вопросы: например, где их разместить? Как сделать так, чтобы пользователям было проще устанавливать и открывать их? Где следует анонсировать релизы? И самое главное, можно ли автоматизировать всё это?  На помощь приходит JReleaser — инструмент от Андреса, который дает ответы на эти и другие вопросы. JReleaser можно использовать для создания релизов на GiHub/GitLab/Gitea и публикации бинарных файлов, которые пользователи затем могут получать из различных каналов — таких как Homebrew, Snap, Scoop и др. Также релиз может автоматически генерировать анонсы в Twitter, Slack, Gitter, Discord и других каналах связи. Проблемы long-lived RPC стримов FlowTraders gRPC — широко известный RPC-фреймворк, обладающий отличной документацией и большой пользовательской аудиторией. Одной из его фишек является поддержка стриминга (многократной отправки сообщений в рамках одного вызова). Однако реализация даже самого простого варианта — стриминг на стороне сервера — оказывается довольно трудной. Какие проблемы таятся за красивым API, и что можно предпринять для их решения? Об этом пойдет речь в докладе.   Bootiful Spring GraphQL VMware Джош, тесно работающий с командой Spring, не нуждается в особом представлении — его доклады уже получали отличные оценки участников. Вопрос только в том, о чём он расскажет теперь.  Данные хотят быть свободными, и многое из того, что мы делаем в прекрасном мире микросервисов, связано с подключением данных. Это сложно. Существует противоречие между тем, как мы создаем хорошо упакованные микросервисы, и тем, как соединяем их данные с нашими клиентами. До сих пор. В 2015 году компания Facebook выложила в открытый доступ GraphQL (в том же году вышел фильм "Мстители: Эра Альтрона", фильм о суперкомпьютере-психопате, который хотел захватить мир. Совпадение? Не думаем...). GraphQL — это альтернатива ограничению REST на HTTP. Он предоставляет простой способ моделирования запросов (чтение, как HTTP GET), подписок (более долговечные, асинхронные уведомления, отправляемые клиенту) и мутаций (обновлений).  Относительно недавно анонсировали модуль GraphQL — Джош покажет, чем он вам может помочь.  Масштабируем Spring Boot микросервисы GridGain На ранних этапах написания приложения мы часто не задумываемся о том, как будем потом его масштабировать. В какой-то момент после релиза возникает такая необходимость, чтобы справиться с возросшей нагрузкой и улучшить доступность. Однако, приложение к этому может быть не готово. Что может помешать просто запустить несколько инстансов: schedulers; websockets; кэш приложения — простыеConcurrentHashMap или Spring Cache; сессии пользователей, хранящиеся в памяти. К счастью, каждый из этих пунктов можно быстро закрыть, если использовать правильные инструменты. Что нового в Spring Framework 6?  VMware BeZero Carbon Важная новость этой осени в мире Java — это анонс новой версии самого популярного фреймворка Spring Framework 6. Хотите узнать, что нового и интересного там появится? Какие любимые фичи останутся, а какие изменятся до неузнаваемости? Что сломается, а что будет работать без изменений? Неважно, ждете вы новый релиз с предвкушением или трепетом, приходите к нам, чтобы узнать ответы на все вопросы! Обратная совместимость, инструменты и подходы для контроля над dependency hell Сбер Сбер Сбербанк Онлайн (СБОЛ) используют десятки миллионов клиентов. Около 200+ бизнес-команд работают над своими приложениями в СБОЛе, подключая сотни third party-библиотек и внутренних библиотек микросервисной платформы Сбера. Спикеры из компании расскажут, как обеспечить работоспособность множества компонентов платформы в бизнес-приложении для СБОЛа, при условии, что библиотеки эволюционируют и версионируются. А также расскажут об обратной совместимости, инструментах и подходах для управления зависимостями.    Магия Spark: Как высокоуровневые конвейеры становятся распределенным хардкором 🔥  JetBrains Об использовании Spark докладов уже много, но тут история другая. Spark — самый популярный инструмент для построения конвейеров данных. Каждый дата-инженер знает Spark, бла-бла-бла... Отлично, но Spark — это всего лишь распределенные Java Streams, так? Но тогда как это работает? Получается, что нельзя просто вызвать «flatMap» или «groupBy» на удаленную машину. Вступает Codegen! Заинтересовались? Приходите и узнайте больше! Decomposing Compose 🔥  SonarSource Jetpack Compose начинался как UI-фреймворк для Android от Google, но затем в JetBrains затеяли проект Compose for Desktop, позволяющий легко переиспользовать UI-код между десктопом и смартфонами. Обе компании делают на него большую ставку — давайте тогда с ним разберёмся. Евгению в рамках работы над JaCoCo пришлось покопаться в недрах этой технологии, и в докладе он подробно рассмотрит, как Jetpack Compose и Compose для Desktop работают под капотом: от пользовательского кода, через среду исполнения, до компиляции и байт-кода. Если вы тоже хотите знать, как повседневные вещи работают изнутри, то приходите — будет весело и интересно. Расширяем возможности kotlinx.serialization с помощью Arrow Meta 🔥 Software Engineer На проекте, использующим Kotlin, хочется работать с Kotlin-first библиотеками. Например, хочется вместо Jackson использовать kotlinx.serialization. К сожалению, перевести существующий проект на любимые технологии не всегда возможно из-за разницы в подходах или отсутствии фич. Например, global naming strategy. Можно ли обойти ограничения библиотеки и добавить недостающее? Можно! С помощью Arrow Meta. Arrow Meta — это библиотека, позволяющая писать плагины для компилятора, линтеры и другие преобразователи исходного кода. В данном докладе мы поговорим о настройке проекта, возможностях библиотеки и разберём реальный use-case добавления global naming strategy в kotlinx.serialization. Доклад будет интересен продвинутой аудитории, преимущественно использующей Kotlin для backend-разработки.  SQL primary key, surrogate key, composite keys, foreign keys... and JPA Yugabyte В Java все объекты имеют идентификатор по адресу в памяти. При их сохранении в БД требуется ключ. И вот здесь начинаются холивары... Естественный ключ? Составной ключ? Суррогатный ключ? Последовательность или UUID? Давайте посмотрим на все эти варианты. На их плюсы и минусы для принятия разумного решения в каждом конкретном случае использования. Компромиссы, связанные с производительностью, гибкостью, масштабируемостью, поддержкой JPA или других фреймворков. На то, как все это выглядит в современном мире микросервисов и распределенных баз данных.   DDDamn good! Метр квадратный Ахтям расскажет, как строить современные распределенные системы. Доклад охватывает: Проблемы построения больших приложений. Лаконичное выражение идей DDD с использованием функционального программирования. Практическое применение DDD на MongoDB и Kafka. Использование подхода в продакшене. Начинающие инженеры узнают о проблемах построения больших приложений, а опытные архитекторы посмотрят на известные решения под другим углом.  Apache Cassandra — потоки и память 🔥 Netcracker Посмотрим на внутреннее устройство Apache Cassandra глазами Java-разработчика: Как организовано управление потоками, какие пулы бывают, как их мониторить. Использует ли Cassandra Disruptor? Какие задачи по многопоточности решали в Apache Cassandra? Память. Где живут данные в памяти в Apache Cassandra: в heap или в off-heap? Какие структуры данных используются, сколько памяти потребляется, как это можно мониторить? Доклад будет основан на базе недавно вышедшей Apache Cassandra 4.0. Целевая аудитория — Java-разработчики, которые разрабатывают подобного рода системы, а также те, кто эксплуатирует Apache Cassandra. JPA-паззлеры (и немного больше) Haulmont Поговорим про JPA и тонкие моменты, связанные с реализацией этой спецификации. Начнем с простых примеров: когда получается N+1 запрос и в каком случае Lazy не работает так, как интуитивно ожидается. Дальше углубимся в более сложные темы: поговорим про Entity Graphs и про то, какие неожиданности таит использование Lombok при использовании совместно с JPA. Также рассмотрим в чем особенности работы с JPA в Spring: как правильно размечать сущности, чтобы не было проблем с именами таблиц, и избежать неоднозначного именования методов в Spring Data JPA. Apache Calcite: Платформа для создания продвинутых SQL-оптимизаторов на Java 🔥 Querify Labs Оптимизатор запросов является одним из наиболее важных компонентов современных СУБД и data-management-систем, оказывая критическое влияние на производительность. Разработка оптимизатора «с нуля» — достаточно сложная и трудоемкая задача. Поэтому было бы круто иметь платформу, которая позволяла бы собирать оптимизаторы из готовых частей, а также расширять их под потребности конкретного продукта. Владимир расскажет про Apache Calcite — проект, который позволяет быстро создавать мощные cost-based-оптимизаторы, превосходящие по своим возможностям оптимизаторы многих современных СУБД. Мы рассмотрим теоретические проблемы оптимизации запросов, архитектуру и ключевые алгоритмы Apache Calcite, и примеры его использования в конкретных Java-продуктах. Многие участники уже знают Владимира — он долгое время работал над Apache Ignite и Hazelcast и освещал в докладах связанные с этим темы. Теперь он стал  основателем новой компании Querify Labs, а ещё с этого года начал коммитить в Apache Calcite — так что тема доклада ему хорошо известна.  On the way to Reactive Relational Database Connectivity 1.0 VMware Reactive Relational Database Connectivity (R2DBC) — это проект Reactive Foundation, который определяет, как приложения могут интегрироваться с базами данных, используя реактивное программирование на JVM. Инициатива была начата пару лет назад в ответ на недостающий стандарт Java, в то время как реактивные приложения столкнулись с требованиями персистентности. Недавно была выпущена версия 0.9 спецификации, и большинство драйверов R2DBC уже обновились. Приходите на этот доклад, чтобы получить краткий обзор стандарта R2DBC и того, что можно делать с его помощью сегодня. Мы обсудим будущее R2DBC и то, как он вписывается в современный ландшафт JVM. Вы узнаете об идеальных вариантах использования, доступности драйверов и клиентских библиотек.  Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra Okta Okta Два Java Champions из Okta — Мэтт и Брайан — расскажут о рекомендуемых шаблонах для защиты API вашего бэкенда, инфраструктуры, на которой они работают, а также ваших SPA и мобильных приложений. Мир перестал быть местом, где вам нужно защищать только пользовательский интерфейс ваших приложений. Необходимо также обратить внимание на конвейер зависимостей и фреймворки с открытым исходным кодом. Если приложение создано с безопасным кодом, то как насчет облака, на котором оно работает? Безопасны ли серверы? Что насчет учетных записей, которые вы используете для доступа к ним? Если все это заблокировать, как кодифицировать решение, чтобы его можно было переносить из облака в облако или обратно в локальную среду? Тут будут рассмотрены эти и многие другие концепции.  Practical steps for creating safer software (Code included) Sonatype Сейчас весь мир работает с помощью софта: это знаем и мы, и злоумышленники. Поэтому сейчас, как никогда ранее, важно понимать свою роль в том, чтобы разработка, сборка и развертывание были более безопасными. В этом докладе Стив расскажет вам об основах. Вы узнаете о трех принципах проектирования программного обеспечения, направленных на создание более безопасных и надежных решений. От кода до развертывания и производства есть шаги, которые вы можете предпринять, чтобы держать кибератаки на расстоянии вытянутой руки и уменьшить последствия, если что-то плохое произойдет. Это не только проблема разработчика, но мы должны сыграть решающую роль в борьбе с киберпреступностью. Для этого нам необходимо понимать, как наши действия помогают или мешают как злоумышленникам, так и другим участникам жизненного цикла программного обеспечения. Вы узнаете, как происходят атаки, что существует для защиты, и как ваш подход к кодированию и проектированию может ухудшить или, надеюсь, улучшить ситуацию.   И, наконец, картина «очень одинокий тестировщик»: тут у нас получился блок из одного доклада. Как правильно (не) использовать тестировщиков Qameta Software Вы замечали, что частенько от QA прилетают результаты проверок, которые совершенно некуда приткнуть? Несмотря на все девопсы, эджайлы и прочие скрамы, разработчики и тестировщики так и не научились жить в одном пайплайне.
 
Картина маслом: разработчики пишут себе юнит-тесты, автоматизаторы пилят е2е-проверки, а ручные тестировщики берут всё, что не приколочено, и проверяют! Несмотря на то, что у каждого из звеньев этого пути есть уникальные знания о том, как, что и когда надо бы тестировать.
 
– Должны ли разработчики писать больше тестов? 
– Как Test cases as Code помогут сделать так, чтобы «ручники» проверяли то, что действительно важно?
– Как собирать результаты общей работы в одном месте и получить реальную картину мира?
 
В этом докладе Артем в очередной раз постарается разбить стену непонимания между разработкой и QA на примере Java-проекта с использованием как новых, так и старых добрых инструментов. Хотите набросить? Заходите!
 Пока осилишь такой текст, уже забудешь, что в начале было.  Поэтому напоследок напомним главное: Joker пройдёт в онлайне 25-28 октября. Вся информация и билеты — на сайте. Редактор