Хабрахабр

Программа Joker 2020: Java изнутри и снаружи

До конференции Joker меньше полутора месяцев, и пришло время рассказать Хабру, о чём будут её доклады.

Если говорить в целом, то так. Помимо докладов, будут воркшопы: они хорошо подходят онлайн-формату. Будут интересные новые спикеры вроде Питера Лори (на Stack Overflow — второй в мире по тегу «jvm»). Конечно, будут и хорошо знакомые имена: Тагир Валеев, Евгений Борисов и не только. Докладов по Spring в этот раз набралось на целый блок.

А за конкретикой приглашаем под кат — там описан каждый доклад.

Чтобы быть уверенными, что конференция будет полезной, про каждый доклад мы задаём программному комитету несколько вопросов:

  • чем интересна тема,
  • чем ценен спикер,
  • кому будет полезно,
  • почему стоит слушать это здесь и сейчас.

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

А вот блоки, на которые можно поделить программу:

— Вне категории
— Воркшопы
— VM/runtime
— Тулинг и фреймворки
— Spring
— Языки
— … и не только

Вне категории

Есть два доклада, на которые хочется обратить особое внимание, а не просто причислять их к какой-то категории. Во-первых, в их случае особенно важно, кто именно будет выступать — вероятно, тут многие зрители придут не «на тему», а «на спикера». Во-вторых, тему «заменят ли роботы программистов» толком и не категоризируешь!

«Novel but practical uses of Java», Peter Lawrey

Если вы пользуетесь Stack Overflow, возможно, Питер Лори уже не раз вам помог: он один из топовых отвечающих по тегам «jvm» и «java». А ещё он архитектор опенсорсных библиотек OpenHFT — про Chronicle Queue и Chronicle Map вы могли слышать. Но, в отличие от многих других Java-звёзд, Питер ни разу не прилетал на российские конференции. К счастью, для участия в онлайн-формате лететь не требуется, и теперь он впервые выступит на Joker.

Доклад будет как раз связан с OpenHFT. В этих библиотеках не раз прибегали к «нестандартному» использованию Java, пользуясь довольно экзотическими фичами. И на Joker Питер расскажет в подробностях о них: тут речь пойдёт не про какую-то одну ситуацию, а про целый ряд примеров «диковатой Java».

«Заменят ли роботы программистов», Тагир Валеев

С «Идеей» кто к нам входит в дом? Джависту каждому знаком? Если Питер Лоури будет на Joker впервые, то доклады Тагира Валеева (lany) здесь давно знают и любят. Только недавно мы расшифровали его предыдущий доклад о маленьких оптимизациях в Java 9-16, а у него уже готов новый: в этот раз на более общую тему, чем обычно.

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

Воркшопы

У онлайн-конференций есть неожиданное преимущество: когда сидишь не в зале, а за компьютером, можешь как следует рассмотреть код в IDE спикера и быстро переключиться в свою IDE. Чтобы использовать это преимущество, мы добавили в программу два больших практических выступления, где не просто расскажут о чём-то со слайдами, а покажут всё на практике.

«Хватит писать тесты, пора писать спецификации», Алексей Нестеров

В этом воркшопе-стриме-live-сессии Алексей покажет, как с нуля создать и запустить TDD-цикл для Spring Boot-приложения, с примерами на JUnit 5.

Чем интересна тема: Все любят рассказывать, как нужно тестировать, насколько полезно TDD. А вот показать, да так, чтобы было понятно, — сложная задача. В этом воркшопе участники смогут ощутить реальную пользу от написания тестов, на практике познакомиться с подходами TDD на примере Spring-приложений и даже обсудить со спикером тонкости и скользкие моменты.
Чем ценен спикер: У Алексея огромный опыт в разработке enterprise приложений на Java. Он разработчик в Spring Cloud Services в VMware, долгое время занимался консалтингом, и точно знает, как нужно писать и тестировать приложения на современных Java-технологиях. Алексей может быть известен широкой публике как один из голосов подкаста Радио-Т.

«GraalVM», Thomas Wuerthinger / Олег Шелаев

Чем хороша тема: GraalVM — один из самых интересных проектов в экосистеме, которая может повлиять на практически все проекты. От улучшения производительности до популяризации АОТ-компиляции, до открытия экосистем других языков программирования. Каждый должен знать хотя бы базовые вещи про GraalVM. Поэтому воркшоп, где участники могут потрогать GraalVM сами и задать вопросы людям из команды GraalVM — отличная возможность для этого.
Чем ценны спикеры: Томас — оригинальный автор GraalVM-компилятора, основатель проекта и его лидер. А Олег, пожалуй, больше всех в мире рассказывает про GraalVM, поэтому знает, какие практические вопросы возникают у людей и какие объяснения оказываются самыми понятными. В общем, кто, если не они?

VM/runtime

Мы за то, чтобы разработчик понимал платформу, на которой работает, и на Joker всегда было что-то про «кишочки». Но нам интересны не просто абстрактные знания «что там внутри», а их влияние на реальную жизнь прикладного разработчика. Как известно, все абстракции протекают — а доклады, объясняющие «что там за абстракциями», помогают выйти сухим из воды.

«Have you really taken the time to know me: A G1 GC saga», Monica Beckwith

Многие заинтересовались сборщиком мусора G1, когда в Java 9 он стал дефолтным. Но с тех пор легко было не следить за его развитием, а со времён «девятки» в нём появилось немало нового.

Моника Беквит (обладательница звания Java Champion, эксперт в области GC) поможет наверстать, рассказав всё. Тем, у кого в продакшне Java 11+, доклад может моментально помочь правильнее «подкрутить ручки», а остальным даст полезную информацию на будущее.

«Project Loom: Modern scalable concurrency for the Java platform», Alan Bateman

Чем интересна тема: Эффективное использование многочисленных ядер современных процессоров — сложная, но всё более важная задача. Java была одним из первых языков программирования со встроенной поддержкой concurrency. Ее concurrency-модель, основанная на нативных тредах, хорошо масштабируется для тысяч параллельно выполняющихся стримов, но оказывается слишком тяжеловесной для современного реактивного программирования с сотнями тысяч параллельных потоков.

Ответ на эту проблему — Project Loom. Он определяет и реализует в Java новые легковесные параллельные примитивы.

Чем ценен спикер: Алан Бейтман, руководитель проекта OpenJDK Core Libraries Project, потратил большую часть последних лет на проектирование Loom таким образом, чтобы он естественно и органично вписывался в богатый набор существующих библиотек Java и парадигм программирования.

«Thread Safety with Phaser, StampedLock and VarHandle», Heinz Kabutz / John Green

Чем хороша тема: Компьютер многое умеет делать параллельно, а программистам интересно выжимать из компьютеров максимальные возможности.
Чем ценны спикеры: Хайнц известен многим любителям Java как автор популярного блога javaspecialists.eu, его доклады всегда в топе мировых Java-конференций. С докладом выступает совместно со своим коллегой Джоном Грином.
Кому будет полезно: Программистам, заинтересованным в многопоточном программировании на JVM.

«Coordinated Restore at Checkpoint: Быстрый старт OpenJDK», Антон Козлов

Цель проекта Coordinated Restore at Checkpoint — запускать Java-приложения за десятки миллисекунд. Проект не связан с GraalVM Native Image, поэтому не имеет свойственных ему проблем для использования, зато приносит новые. Сейчас он в активной разработке.

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

Чем интересна тема: Тема «быстрого старта Java-процесса» проходит красной нитью по всем докладам 2020 года. То Micronaut, то Spring — все как один говорят, что они легковесные, быстрозапускаемые и т.п.
Чем ценен спикер: Антон является автором/коммитером технологии, про которую говорит.

«JVM-профайлер, который смог (стать кроссплатформенным)», Кирилл Тимофеев

В JetBrains пару лет назад добавили поддержку async-profiler для Mac и Linux. Начали им пользоваться и поняли, что нужен async-profiler, работающий на Windows. На Linux и Mac async-profiler использует механизм POSIX-сигналов и нативную раскрутку стеков. Команде нужно было разобраться, как конкретно работает AsyncGetCallTraces, сравнить его внутреннее устройство с JFR. А если окажется, что их устраивает работа AsyncGetCallTraces, то нужно научиться эмулировать механизм сигналов и раскручивать нативные стеки. Кроме этого нужно решить разные ОС-специфичные проблемы, которые возникнут по пути.

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

«Docker Who: Маленькие контейнеры сквозь время и пространство», Дмитрий Чуйко

Ваш проект недавно перешел на микросервисную архитектуру? Деплоймент значительно ускорился, но и затраты от передачи данных выросли? Размер самих контейнеров здесь важнее всего. Уменьшить их — значит сильно сэкономить на трафике.

Инженеры BellSoft разработали решение полной поддержки Alpine Linux в OpenJDK. А вместе с этим и настоящий ТАРДИС: контейнеры, которые занимают на диске несколько мегабайт, но внутри несут огромный потенциал. С выходом JDK 16, в рамках JEP 386 проект Portola интегрируется в основную ветку OpenJDK. Необходимость в «костыльном» слое glibc отпадет, все процессы встанут на свои места. Ваша компания сможет пользоваться крошечными образами контейнеров вне зависимости от поставщика дистрибутива. Они доступны уже давно, но официальный статус порта HotSpot для библиотеки musl расширит область его применения и упростит разработки.

В своем докладе Дмитрий (BellSoft) расскажет, какие преимущества принесет поддержка Alpine Linux сообществу OpenJDK и объяснит, как бесплатно оптимизировать Docker образы, поменяв всего пару строк кода. А в конце предложит инструмент для выбора оптимального контейнера под нужды вашего проекта.

Тут, в отличие от блока «VM/runtime», никаких вопросов о применимости сразу не возникает: это о том, чем Java-разработчики непосредственно пользуются. Кто-то из спикеров лично создал технологию, о которой будет рассказывать, а кто-то не имеет к ней личного отношения, зато отлично умеет ей пользоваться.

«Hidden pearls for high-performance-persistence in Java», Sven Ruppert

В этом выступлении Свен покажет несколько технологических стеков, помогающих справляться с персистентными данными, не заставляя иметь дело с классическими технологическими монстрами горизонтального масштабирования, такими как Kubernetes, Hadoop и многими другими.

Чем интересна тема: Вопрос о том, как разместить данные из памяти JVM в более персистентное хранилище, всегда актуален.
Чем ценен спикер: Свен — опытный специалист: говорит чётко, понятно и по теме. А ещё у него очень красивые предзаписи — скоро сами увидите!
Кому будет полезно: Будет полезно большинству практикующих инженеров – доклад расширит кругозор о доступных решениях для persistence.

«Keeping growing software projects under control with Gradle», Jendrik Johannes

Доклад рассмотрит на практическом примере, как Gradle могает справляться со сложностями, возникающими при росте проекта.

Чем интересна тема: Чем больше проект, тем сложнее скрипты сборки. Бытует миф, что Gradle — это всегда императивные скрипты, и что разобраться в них невозможно. Мифы нужно развенчивать. Spring Framework, Spring Boot, Hibernate ORM, Micronaut Core, Kotlin — что объединяет все эти проекты? Правильно: они собираются Gradle-скриптами.
Чем хорош спикер: Работает в Gradle, видел много разных Gradle-скриптов, и он автор проекта Idiomatic Gradle, где показаны подходы по разделению скрипта сборки на независимые части.
Почему здесь и сейчас: Это новый доклад. В очередной версии Gradle 6. 7 как раз идут улучшения и в отношении возможностей, и в отношении документации для многомодульных проектов, поэтому самое время узнать из первых уст и попробовать на практике.

«Аерон. High performance-транспорт для low latency-микросервисов», Иван Землянский

Aeron — новый транспорт от Real Logic, в состав которого входит небезызвестный автор disruptor Мартин Томпсон. После многих лет работы в сфере HFT он собрал команду и сделал новый транспорт с минимальными накладными расходами.

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

«Kafka streams testing: A deep dive», John Roesler / Иван Пономарёв

Хотя Kafka Streams «поставляется в комплекте» с TopologyTestDriver, что делает юнит-тестирование стриминговых приложений весьма приятным, все не так просто: есть ограничения и определенные классы дефектов, которые данная технология игнорирует. С помощью интеграционных тестов можно проверить поведение реального кластера, но это еще менее просто: мы вступаем на скользкий путь асинхронных тестов с таймаутами, ненадежностью и неразрешимыми вопросами.

Вывод: необходимо использовать оба подхода и голову.

Чем ценен спикер: Кто лучше может рассказать о правильном использовании технологии, чем один из коренных ее разработчиков John Roesler и инженер со шрамами от ее использования Иван Пономарёв?
Чем интересна тема: Ложное чувство уверенности, что твой код протестирован и готов для выкладки на бой, может привести к катастрофическим последствиям, если не знать, как правильно писать тесты для нетривиальной технологии. Этот доклад как раз об этом.
Кому будет полезно: Всем, кто использует Kafka Streams и любит себя достаточно, чтобы писать тесты на свой код.

«Change data capture pipelines with Debezium and Kafka streams», Gunnar Morling

В докладе вместе с Гуннаром мы выведем CDC на новый уровень, изучая преимущества интеграции Debezium с потоковыми запросами через Kafka Streams.

Чем интересна тема: Комбинацией «Kafka Streams, Debezium, Quarkus»
Чем ценен спикер: Доклад от создателя Debezium
Кому будет полезно: Всем энтерпрайз-разработчикам.

«Как мы делали SQL в Hazelcast», Владимир Озеров

В этом докладе Владимир расскажет, как он и его команда создавали Hazelcast Mustang — новый распределенный SQL-движок, который появился в последней версии Hazelcast IMDG. Будут подробно рассмотрены ключевые технические решения, принятые командой, затрагивающие оптимизатор, сетевой протокол и параллельное выполнение запросов.

Чем интересна тема: Задача подключать SQL к своему приложению довольно актуальна. За недавнее время SQL-запросы появились (или существенно доработались) у очень многих продуктов: Hazelcast, Apache Ignite, Kafka, и т.п. В Apache Calcite сейчас довольно бурно идёт работа от разных вендоров.
Чем ценен спикер: Владимир принимал непосредственное участие в реализации SQL в Hazelcast.
Кому будет полезно: Тем, кто интересуется, как прикручивать SQL-движки к своим хранилищам, особенно на базе Apache Calcite.

Чем интересна тема: Тема микрофреймворков популярна, и зачастую возиникает вопрос: «А нужно ли тащить Spring Boot / Micronaut / далее по списку ради простейшего сервиса?» И, правильно, нужно это не всегда. Библиотека http4k интересна по множеству факторов: легковесность, Kotlin, тестируемость.
Чем ценны спикеры David Denton и Ivan Sanchez — это два ключевых разработчика в проекте http4k. Они могут и хорошо рассказать, и на вопросы про свой опыт ответить.
Кому будет полезно: На доклад стоит идти тем, кто видел Kotlin и ещё не использовал http4k. Те, кто уже использовал http4k не факт, что узнают много нового именно на самом докладе, но им, безусловно, стоит заглянуть, т.к. задать вопросы авторам и решить свою проблему это дорогого стоит.

Spring

Доклады, так или иначе связанные со Spring, можно было бы включить в блок «тулинг/фреймворки». Но в этот раз их набралось столько, что это тянет на отдельный блок!

«Spring Patterns для взрослых», Евгений Борисов

Тем, кто работает со Spring, представлять Евгения Борисова не требуется — его майский доклад «Spring-построитель» набрал уже больше 40 000 просмотров. Распотрошив Spring и собрав его заново, теперь он наконец научит нас правильно им пользоваться. На фестивале TechTrain была лайтовая версия этого доклада, а теперь будет «для взрослых».

Сколько дизайн-паттернов вы знаете? 24? 36? 100? А сколько из них вы применяете в реальной жизни? 3? 5? 10?

Евгений покажет, как при помощи Spring можно легко и просто реализовывать наиболее популярные паттерны, с которыми мы сталкиваемся в повседневной жизни. Chain of responsibility, strategy, command, lazy initialization, scala traits, AOP, proxy, decorator, и прочие паттерны и концепции, внедренные при помощи Spring, сделают ваш код мягким и шелковистым. А перхоть вашего boilerplate в виде switch-ей, статических методов, наследования, и прочей устаревшей шелухи, посыпется с вашего проекта под радостные крики сонара. Код станет более читабельным, гибким и поддерживаемым. Такой код проще обкладывать тестами и, наконец, это просто красиво.

«The path towards Spring Boot native applications», Sébastien Deleuze

Чем интересна тема: GraalVM native image — очень модный способ для улучшения производительности Java в serverless или маленьких эфемерных контейнерах. Об этом все говорят, но так как все используют Spring, который изначально сталкивался с некоторыми трудностями конфигурации динамических частей для работы в native image, широко технология ещё не применяется. Этот доклад рассказывает про текущую разработку поддержки GraalVM native image в Spring-приложениях, важных моментах в этой интеграции, как подходить к запуску Spring на native image, что сейчас работает и когда будет работать остальное.
Чем ценен спикер: Кто, если не Себастьян? Лид проекта Spring GraalVM native, коммитер Спринг и один из двоих людей (второй Энди Клемент), лучше всего понимающих, как и почему работает (или ещё не работает) эта комбинация.
Кому будет полезно: Если вы используете Spring и деплоите приложения в облака — вам стоит посетить этот доклад. Если вы когда-нибудь думали, а не бросить ли Spring и переписать всё на Quarkus, Micronaut и так далее, вам сюда. И, на самом деле, этот доклад очень хорошо помогает понять некоторые детали GraalVM native image, которые помогут вам разобраться с ним даже без Spring.
Почему здесь и сейчас: Джокер — в конце ноября, релиз GraalVM 20. 3 релиз — 18-го, следующий 0.х релиз Spring GraalVM native — скорее всего, через пару дней после. То есть новости про это всё будут самыми свежими. Задать вопросы Себастьяну — многого стоит! Спринг и native image может вполне когда-нибудь стать каждодневной реальностью — к этому надо быть готовым заранее.

«Spring: Your next Java micro-framework», Алексей Нестеров

Часто люди видят Spring Boot как что-то противоположное «микро» фреймворкам на Java, хотя даже не всегда могут определить что значит «микро». Для разных людей это может означать что-то совершенно разное, но чаще всего под этим имеют в виду производительность в рантайме и продуктивность разработки, в сочетании с простотой кода.

Алексей покажет, что вовсе не обязательно бросать горячо любимый Spring Boot, чтобы получить многие фичи, которые предлагают микрофреймворки! Быстрый запуск и перезапуск, LiveReload, запуск и удаленная разработка прямо в контейнере, компиляция в нативный код, конфигурация приложения без аннотаций — и многое другое, что вы ожидаете от микрофреймворка.

«Rsocket + Spring: A full throttle introduction», Mark Heckler / Олег Докука

Чем интересна тема: Реактивное программирование — новый тренд, ну а Спринг — всегда в моде! Марк держит руку на пульсе первого и является экспертом второго. Он поделится инсайдами в работе свеженького реактивного протокола RSocket в Спринге.
Чем ценны спикеры: Марк — Developer Advocate в Spring, и его задача — разбираться во всем, что так или иначе связано с данным фреймворком. А у Олега на наших конференциях был уже целый ряд успешных докладов, связанных с реактивным программированием. Раз тут тема одновременно про Spring и реактивщину, тут они явно нашли друг друга!

«Spring Boot «fat» JAR: Тонкие части толстого артефакта», Владимир Плизга

Одна из известнейших фич Spring Boot — упаковка целого приложения в т.н. «толстый» JAR, который потом «just runs». Это реально работает, и для многих ситуаций этого достаточно. Но если вы не доверяете магии и/или столкнулись с проблемами при развертывании «толстого» JAR, то вам пора вникнуть в устройство этого механизма.

И тут выясняется, что «just runs» обходится далеко не бесплатно: есть ограничения по загрузке классов, вопросы к скорости запуска, конфликты со встроенными утилитами JDK, отличия в режимах dev/test/prod, а в некоторых случаях применение этой фичи и вовсе излишне.

В этих и других тонкостях «толстого» JAR мы и разберемся в докладе. Заглянем в его устройство и поймём, в каких случаях он хорош, а в каких лучше обойтись без него (и что тогда выбрать вместо). Особое внимание уделим развертыванию в контейнерах.

Доклад рассчитан на практикующих инженеров, поставляющих приложения на Spring Boot в production.

«Работа с шардированными данными в памяти со вкусом Spring Data», Алексей Кузин

Spring Data — мощная и широко используемая часть фреймворка Spring, которая предоставляет абстракции поверх работы с разными хранилищами данных. В сети есть масса информации по использованию готовых модулей Spring Data, но для внесения изменений или разработки своего модуля приходится глубоко залезать в исходники. На примере коннектора для Tarantool Алексей покажет, как разработать свою реализацию коннектора для распределённого хранилища данных в памяти, какие проблемы с производительностью могут возникнуть, и как их решать.

Доклад предназначен для тех, кто интересуется деталями реализации фреймворка Spring и хочет узнать больше о деталях работы с NoSQL БД.

Чем ценен спикер: У Алексея огромный опыт в Java, и огромный опыт с базой Tarantool. Он разработчик интеграции SpringData — Tarantool, и получается рассказ из первых уст.

JVM-языки

Может ли Java-конференция обойтись без холивара «за каким JVM-языком будущее»? Если серьёзно, то мы не за пустые холивары, а за обоснованный конструктив и за то, чтобы уделять внимание всей экосистеме.

«Интервью и Q&A: Эволюция Java и Kotlin. Что нас ждет?», Роман Елизаров

Java эволюционирует. Каждые полгода мы видим какие-то новые фишки, как например: text blocks, sealed classes, records, switch instanceof — все те удобства, которые раньше были доступны только пользователям других, более современных языков на JVM, например, Kotlin.

Что же будет делать Kotlin? Сидеть и ждать, надеясь на те удобства, где Java не сможет его никогда догнать, или же будет продолжать двигаться вперед? Что можно еще улучшать в языке, который вырос благодаря массивному упрощению количества воды, которую приходится писать в Java-коде? Есть ли запас? От чего вообще страдают программисты и где язык програмирования может улучшать их жизнь?

Об этом всём мы расспросим Романа Елизарова, который отвечал и за дизайн корутин в Kotlin, и за доклады о них: например, его доклад с JPoint набрал больше 20 000 просмотров.

«Back from the 70s — the Concurnas concurrency model!», Jason Tatton

Concurrency — это трудно, а справляться с concurrency в гетерогенных средах CPU/GPU — еще сложнее! Это относится и к Java со ее встроенной поддержкой concurrency-программирования. Concurnas — это новый и свежий подход к решению этой проблемы на JVM.

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

Полезно будет всем, кто интересуется новыми языковыми трендами или ищет новые идеи для построения надежных высокопроизводительных конкуррентных, распределенных и параллельных систем.

… и не только

А кроме всего перечисленного, есть ещё и такие доклады:

  • Ещё не анонсированные: сейчас остаются несколько последних слотов. Чтобы узнать их судьбу, можно заглядывать на сайт Joker или подписаться на конференцию в соцсетях (Telegram, ВК, FB, Twitter).

  • С «соседних» конференций. Тут такая история. Мы проводим целый сезон из 8 IT-конференций по разным темам (от тестирования до DevOps). И видим, что многим интересно разное: «С Java-конференции хочу многое послушать, с девопсовой кое-что тоже, а с . NET-конференции послушал бы про Domain-Driven Design». Поэтому мы сделали билет-абонемент Full Pass, дающий доступ ко всем конференциям сезона сразу: конечно, никто не станет смотреть все восемь от и до, но вот выборочно подключаться к интересным докладам можно.

Так что, если вам интересны смежные темы и мир вокруг, заходите на сайт всего сезона и смело изучайте там всё. А если интересен именно Joker и ничего больше — тогда идите сразу на его сайт.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»