Allurium — java framework для автотестов. Мультиязычные, близкие к bdd репорты, без bdd структуры
В этой статье хочу поделиться инструментом, который я понемногу разрабатывал и улучшал при наличии свободного времени. Применяя для упрощения своих задач, над которыми я работал в разных компаниях за это время.
Работа в автоматизации тестирования стала моей оффициальной профессией несколько лет назад. За это время мне довелось позаниматься очень широким спектром задач, в зависимости от компаний, где я работал. Начиная с тестирования пользовательских интерфейсов различных сайтов, web и мобильных приложений, обязанности заводили меня глубоко в тестирование сложных API сервисов и даже автоматизацию десктопных программ.
Первые годы я плотно занимался тестированием Web приложений на Java, хотя начинал не с неё. Разумеется, перепробовав много подходов, я нашёл для себя любимый stack, который применял при наличии свободы выбора. Для меня это сложилось в TestNg + Selenium + Allure. Естественно, мне приходилось работать со знаменитым Cucumber, а потом и вообще с чудовищьным (на мой взгляд) Serenity и ещё многими другими решениями, включая кастомные разработки разных людей.
Моё расположение никогда не лежало в сторону BDD, так как чаще всего я сам читал отчёты и проверял тесты, и в 100% случаев сам составлял сценарии с Gherkin (иногда по предоставленным сценариям, чаще нет). Так называемое удобство, дающее BDD пользователю, сводилось к минимуму, а вот взамен требовало многое — небоскрёбы из обёрток классов, сложности с наследованием, необходимость создавать кучу дубликатов мизерных действий, абсолютное неудобство передачи данных между шагами и процессами и прочие трудности.
Читать: https://habr.com/ru/articles/893566/?utm_campaign=893566
@a_cup_of_java | Другие наши каналы
В этой статье хочу поделиться инструментом, который я понемногу разрабатывал и улучшал при наличии свободного времени. Применяя для упрощения своих задач, над которыми я работал в разных компаниях за это время.
Работа в автоматизации тестирования стала моей оффициальной профессией несколько лет назад. За это время мне довелось позаниматься очень широким спектром задач, в зависимости от компаний, где я работал. Начиная с тестирования пользовательских интерфейсов различных сайтов, web и мобильных приложений, обязанности заводили меня глубоко в тестирование сложных API сервисов и даже автоматизацию десктопных программ.
Первые годы я плотно занимался тестированием Web приложений на Java, хотя начинал не с неё. Разумеется, перепробовав много подходов, я нашёл для себя любимый stack, который применял при наличии свободы выбора. Для меня это сложилось в TestNg + Selenium + Allure. Естественно, мне приходилось работать со знаменитым Cucumber, а потом и вообще с чудовищьным (на мой взгляд) Serenity и ещё многими другими решениями, включая кастомные разработки разных людей.
Моё расположение никогда не лежало в сторону BDD, так как чаще всего я сам читал отчёты и проверял тесты, и в 100% случаев сам составлял сценарии с Gherkin (иногда по предоставленным сценариям, чаще нет). Так называемое удобство, дающее BDD пользователю, сводилось к минимуму, а вот взамен требовало многое — небоскрёбы из обёрток классов, сложности с наследованием, необходимость создавать кучу дубликатов мизерных действий, абсолютное неудобство передачи данных между шагами и процессами и прочие трудности.
Читать: https://habr.com/ru/articles/893566/?utm_campaign=893566
@a_cup_of_java | Другие наши каналы
👍3❤2
Жизненный цикл бина в Spring
Разобраться в жизненном цикле бина в Spring бывает непросто: информация разбросана, а объяснения часто сложные и перегруженные деталями. Эта статья — простой и понятный "чек-лист", где все этапы разобраны на живых примерах
Читать: https://habr.com/ru/articles/893614/?utm_campaign=893614
@a_cup_of_java | Другие наши каналы
Разобраться в жизненном цикле бина в Spring бывает непросто: информация разбросана, а объяснения часто сложные и перегруженные деталями. Эта статья — простой и понятный "чек-лист", где все этапы разобраны на живых примерах
Читать: https://habr.com/ru/articles/893614/?utm_campaign=893614
@a_cup_of_java | Другие наши каналы
👍9
Новое в Spring: обновления и релизы
Весной 2025 года в экосистеме Spring произошло множество значимых обновлений. Обновления коснулись таких компонентов, как Spring Boot, Security, Auth Server, GraphQL и многих других. Среди новшеств — улучшения в поддержке OpenTelemetry и новые свойства для Spring Batch. Эти обновления делают инструменты ещё более мощными и удобными для разработчиков.
Подробности: https://www.infoq.com/news/2025/03/spring-news-roundup-mar17-2025/
#en
@a_cup_of_java | Другие наши каналы
Весной 2025 года в экосистеме Spring произошло множество значимых обновлений. Обновления коснулись таких компонентов, как Spring Boot, Security, Auth Server, GraphQL и многих других. Среди новшеств — улучшения в поддержке OpenTelemetry и новые свойства для Spring Batch. Эти обновления делают инструменты ещё более мощными и удобными для разработчиков.
Подробности: https://www.infoq.com/news/2025/03/spring-news-roundup-mar17-2025/
#en
@a_cup_of_java | Другие наши каналы
❤3
Загляните в будущее Java: Quarkus и JBang
В мире Java новый подход Quarkus обеспечивает высокий уровень производительности, упрощая жизнь разработчиков. Платформа JBang предлагает лёгкий способ работы без сложных настроек, помогая как новичкам, так и профессионалам. Инновации делают Java-девелопмент проще и быстрее!
Подробности: https://www.infoq.com/podcasts/simplify-system-learning-ecosystems/
#en
@a_cup_of_java | Другие наши каналы
В мире Java новый подход Quarkus обеспечивает высокий уровень производительности, упрощая жизнь разработчиков. Платформа JBang предлагает лёгкий способ работы без сложных настроек, помогая как новичкам, так и профессионалам. Инновации делают Java-девелопмент проще и быстрее!
Подробности: https://www.infoq.com/podcasts/simplify-system-learning-ecosystems/
#en
@a_cup_of_java | Другие наши каналы
Новости Java: Выпуск JDK 24 и многое другое
Oracle представила JDK 24 с 24 JEPами, обновлён GraalVM для JDK 24 с новыми функциями GNN и SkipFlow. Apache Kafka 4.0 и обновление Spring прошли с учётом исправлений CVE. Также состоится JavaOne 2025. Следите за обновлениями, чтобы узнать больше!
Подробности: https://www.infoq.com/news/2025/03/java-news-roundup-mar17-2025/
#en
@a_cup_of_java | Другие наши каналы
Oracle представила JDK 24 с 24 JEPами, обновлён GraalVM для JDK 24 с новыми функциями GNN и SkipFlow. Apache Kafka 4.0 и обновление Spring прошли с учётом исправлений CVE. Также состоится JavaOne 2025. Следите за обновлениями, чтобы узнать больше!
Подробности: https://www.infoq.com/news/2025/03/java-news-roundup-mar17-2025/
#en
@a_cup_of_java | Другие наши каналы
RabbitMQ и Kotlin: делаем свою event-driven Jira на Spring
В этой статье мы рассмотрим, как можно в один клик развернуть RabbitMQ в облаке. Также напишем простое приложение на Spring Boot и Kotlin, которое будет взаимодействовать с этим брокером сообщений.
Читать: https://habr.com/ru/companies/dockhost/articles/893572/?utm_campaign=893572
@a_cup_of_java | Другие наши каналы
В этой статье мы рассмотрим, как можно в один клик развернуть RabbitMQ в облаке. Также напишем простое приложение на Spring Boot и Kotlin, которое будет взаимодействовать с этим брокером сообщений.
Читать: https://habr.com/ru/companies/dockhost/articles/893572/?utm_campaign=893572
@a_cup_of_java | Другие наши каналы
❤3
Автоматизация тестирования, которая не ломается при первом редизайне
Автоматизация тестирования, которая не ломается при первом редизайне
Как мы проектировали, внедряли и поддерживаем живую систему автотестов
Читать: https://habr.com/ru/companies/rostelecom/articles/894074/?utm_campaign=894074
@a_cup_of_java | Другие наши каналы
Автоматизация тестирования, которая не ломается при первом редизайне
Как мы проектировали, внедряли и поддерживаем живую систему автотестов
Читать: https://habr.com/ru/companies/rostelecom/articles/894074/?utm_campaign=894074
@a_cup_of_java | Другие наши каналы
Forwarded from Типичный программист
Разбираемся с System Design: всё, что нужно знать в одном репо с наглядными примерами
— Архитектура сервисов: монолит, микросервисы, API-шлюзы, балансировка нагрузки, БД.
— Протоколы: REST, gRPC, WebSockets, проектирование API, оптимизация нагрузки.
— DevOps: CI/CD, мониторинг, Kubernetes, контейнеризация, облака.
— Разбор архитектуры крупных компаний: Netflix, Twitter, Discord, Amazon Prime Video.
Погружаемся в системный дизайн — здесь.
#архитектура
— Архитектура сервисов: монолит, микросервисы, API-шлюзы, балансировка нагрузки, БД.
— Протоколы: REST, gRPC, WebSockets, проектирование API, оптимизация нагрузки.
— DevOps: CI/CD, мониторинг, Kubernetes, контейнеризация, облака.
— Разбор архитектуры крупных компаний: Netflix, Twitter, Discord, Amazon Prime Video.
Погружаемся в системный дизайн — здесь.
#архитектура
👍4❤3
Как мы перестроили комментарии в ОК: от линейного хаоса к веточной гармонии
Комментарии в соцсетях — это как чипсы: начал читать, остановиться невозможно. Но в ОК до 2024 года они были плоскими — вместо структурированного диалога под постом пользователи видели бесконечную ленту сообщений, где ответы терялись в хронологическом порядке. Представьте: под постом про котиков кто-то спросил про корм, но ответ на вопрос появился в самом низу, через 500 комментариев с обсуждением хвостатых. Найти ответ на вопрос в такой системе, если он вообще существует, — тот ещё квест.
Меня зовут Александр Косницкий. Я разработчик в компании ОК. В этой статье я расскажу, как мы переходили с линейной структуры отображения комментариев к древовидной: с чего начали, с чем сталкивались и что получили в результате.
Читать: https://habr.com/ru/companies/vk/articles/893916/?utm_campaign=893916
@a_cup_of_java | Другие наши каналы
Комментарии в соцсетях — это как чипсы: начал читать, остановиться невозможно. Но в ОК до 2024 года они были плоскими — вместо структурированного диалога под постом пользователи видели бесконечную ленту сообщений, где ответы терялись в хронологическом порядке. Представьте: под постом про котиков кто-то спросил про корм, но ответ на вопрос появился в самом низу, через 500 комментариев с обсуждением хвостатых. Найти ответ на вопрос в такой системе, если он вообще существует, — тот ещё квест.
Меня зовут Александр Косницкий. Я разработчик в компании ОК. В этой статье я расскажу, как мы переходили с линейной структуры отображения комментариев к древовидной: с чего начали, с чем сталкивались и что получили в результате.
Читать: https://habr.com/ru/companies/vk/articles/893916/?utm_campaign=893916
@a_cup_of_java | Другие наши каналы
Context Collapse: как микросервисы могут сойти с ума
Даже самая идеальная микросервисная архитектура может упасть. В статье обсудим зарубежный материал, где автор рассказывает о проблеме Context Collapse.
Читать: «Context Collapse: как микросервисы могут сойти с ума»
@a_cup_of_java | Другие наши каналы
Даже самая идеальная микросервисная архитектура может упасть. В статье обсудим зарубежный материал, где автор рассказывает о проблеме Context Collapse.
Читать: «Context Collapse: как микросервисы могут сойти с ума»
@a_cup_of_java | Другие наши каналы
Подводный камень в docker env и java
Столкнулся с небольшим с интересным моментом: внедрение переменных окружения (а ля environment variables) в стандартный микросервис написанный на Java (классика жанра – Spring Boot).
(Тема не сложная)
Читать: https://habr.com/ru/articles/894384/?utm_campaign=894384
@a_cup_of_java | Другие наши каналы
Столкнулся с небольшим с интересным моментом: внедрение переменных окружения (а ля environment variables) в стандартный микросервис написанный на Java (классика жанра – Spring Boot).
(Тема не сложная)
Читать: https://habr.com/ru/articles/894384/?utm_campaign=894384
@a_cup_of_java | Другие наши каналы
Создаем Spring Boot Starter для Kafka с Avro: пошаговое руководство
Интеграция Apache Kafka в проекты на Spring Boot часто требует много boilerplate-кода.
В этой статье я делюсь опытом создания кастомного стартера kafka-spring-boot-starter, который упрощает настройку продюсера и консюмера Kafka с поддержкой Avro-сериализации.
Рассказываю, как решал проблемы с тестами (например, auto.offset.reset=latest) и адаптировал стартер для гибкой работы со схемами.
Вы найдёте примеры конфигураций для надёжной доставки, потоковой обработки и ретраев, а также лучшие практики разработки стартеров.
Бонус в конце — удобный обзор ключевых настроек Kafka для продюсера и консюмера.
Читать: https://habr.com/ru/companies/sberbank/articles/894402/?utm_campaign=894402
@a_cup_of_java | Другие наши каналы
Интеграция Apache Kafka в проекты на Spring Boot часто требует много boilerplate-кода.
В этой статье я делюсь опытом создания кастомного стартера kafka-spring-boot-starter, который упрощает настройку продюсера и консюмера Kafka с поддержкой Avro-сериализации.
Рассказываю, как решал проблемы с тестами (например, auto.offset.reset=latest) и адаптировал стартер для гибкой работы со схемами.
Вы найдёте примеры конфигураций для надёжной доставки, потоковой обработки и ретраев, а также лучшие практики разработки стартеров.
Бонус в конце — удобный обзор ключевых настроек Kafka для продюсера и консюмера.
Читать: https://habr.com/ru/companies/sberbank/articles/894402/?utm_campaign=894402
@a_cup_of_java | Другие наши каналы
👍4
15 вопросов с собеседований по фронтенду для мидлов
Пов: вы пришли на собес на мидла. В статье — ищите вопросы и пытайтесь ответить сначала сами. Если не получается — ответы и решения тоже есть.
Читать: «15 вопросов с собеседований по фронтенду для мидлов»
@a_cup_of_java | Другие наши каналы
Пов: вы пришли на собес на мидла. В статье — ищите вопросы и пытайтесь ответить сначала сами. Если не получается — ответы и решения тоже есть.
Читать: «15 вопросов с собеседований по фронтенду для мидлов»
@a_cup_of_java | Другие наши каналы
❤1❤🔥1💊1
JavaOne 2025: второй день конференции!
На второй день JavaOne 2025 внимание было сосредоточено на FFM API, виртуальных потоках и развитии Jakarta EE. Обсуждали, как FFM API решает проблемы JNI, использование виртуальных потоков для улучшения микросервисов с Helidon и модернизацию Java с помощью Kubernetes.
Подробности: https://www.infoq.com/news/2025/03/day-two-java-one-2025/
#en
@a_cup_of_java | Другие наши каналы
На второй день JavaOne 2025 внимание было сосредоточено на FFM API, виртуальных потоках и развитии Jakarta EE. Обсуждали, как FFM API решает проблемы JNI, использование виртуальных потоков для улучшения микросервисов с Helidon и модернизацию Java с помощью Kubernetes.
Подробности: https://www.infoq.com/news/2025/03/day-two-java-one-2025/
#en
@a_cup_of_java | Другие наши каналы
Сравнение SpringRunner со SpringExtension и @SpringBootTest
Команда Spring АйО перевела статью о том, как и когда использовать
Читать: https://habr.com/ru/companies/spring_aio/articles/894400/?utm_campaign=894400
@a_cup_of_java | Другие наши каналы
Команда Spring АйО перевела статью о том, как и когда использовать
SpringRunner, SpringExtension и @SpringBootTest, когда их целесообразно комбинировать и как правильное понимание этих компонентов может помочь сделать тесты проще, быстрее и более узконаправленными. Читать: https://habr.com/ru/companies/spring_aio/articles/894400/?utm_campaign=894400
@a_cup_of_java | Другие наши каналы
Инъекция блокнотом или история о том, как мы новые диагностики делали
В этой статье я немного расскажу о том, как в Java осуществляется вызов команд уровня операционной системы. Также поговорим про OS Command и Argument Injections и про то, как мы делали диагностики, которые могут помочь в их обнаружении.
Читать: https://habr.com/ru/companies/pvs-studio/articles/894872/?utm_campaign=894872
@a_cup_of_java | Другие наши каналы
В этой статье я немного расскажу о том, как в Java осуществляется вызов команд уровня операционной системы. Также поговорим про OS Command и Argument Injections и про то, как мы делали диагностики, которые могут помочь в их обнаружении.
Читать: https://habr.com/ru/companies/pvs-studio/articles/894872/?utm_campaign=894872
@a_cup_of_java | Другие наши каналы
Начало начал
Всем привет! Долгое время был читателем, настало время стать пейсателем :-)
За долгие годы работы в области программирования на java, накопилась кое какая информация, которая, я думаю, поможет новичкам, в продвижении в этом направлении. Буду периодически постить, по мере наличия времени, так что на некоторую нерегулярность постов — не серчайте:-)
Кроме того, хотел сразу открыто сказать, что буду юзать для этого нейросеть, чтобы упростить сбор информации. Но — «под строгим родительским контролем»! :-B
Что впрочем не исключает того, что она (или я) — будем галлюцинировать и всячески бредить :-))).
Тем не менее, думаю, что такого ещё не было и, в целом, это будет интересно — потому что написание каких либо учебников — это всегда довольно тяжкий труд, но, надеюсь, с применением такого подхода, это будет несколько проще.
Ещё хотел сказать что будет и чего не будет: будет — теория, примеры. Не будет — медленной раскачки, плавных переходов между абзацами. То есть: всё сухо, чётко, конкретно. «Пускай безобразно — зато однообразно: всё прямоугольно и параллельно» :-))))
Двигаться в обучении мы будем не фрагментарно, а прямо с самого начала, поступательно, рассматривая весь необходимый круг вопросов.
Если у вас есть что сказать по теме — дать плюшек или кинуть ботинком — всегда велком, т.к. для конечного результата все эти уточнения — только на пользу…
Итак…
Читать: https://habr.com/ru/articles/891622/?utm_campaign=891622
@a_cup_of_java | Другие наши каналы
Всем привет! Долгое время был читателем, настало время стать пейсателем :-)
За долгие годы работы в области программирования на java, накопилась кое какая информация, которая, я думаю, поможет новичкам, в продвижении в этом направлении. Буду периодически постить, по мере наличия времени, так что на некоторую нерегулярность постов — не серчайте:-)
Кроме того, хотел сразу открыто сказать, что буду юзать для этого нейросеть, чтобы упростить сбор информации. Но — «под строгим родительским контролем»! :-B
Что впрочем не исключает того, что она (или я) — будем галлюцинировать и всячески бредить :-))).
Тем не менее, думаю, что такого ещё не было и, в целом, это будет интересно — потому что написание каких либо учебников — это всегда довольно тяжкий труд, но, надеюсь, с применением такого подхода, это будет несколько проще.
Ещё хотел сказать что будет и чего не будет: будет — теория, примеры. Не будет — медленной раскачки, плавных переходов между абзацами. То есть: всё сухо, чётко, конкретно. «Пускай безобразно — зато однообразно: всё прямоугольно и параллельно» :-))))
Двигаться в обучении мы будем не фрагментарно, а прямо с самого начала, поступательно, рассматривая весь необходимый круг вопросов.
Если у вас есть что сказать по теме — дать плюшек или кинуть ботинком — всегда велком, т.к. для конечного результата все эти уточнения — только на пользу…
Итак…
Читать: https://habr.com/ru/articles/891622/?utm_campaign=891622
@a_cup_of_java | Другие наши каналы
Реализация RPC во внутреннем взаимодействии модулей с Spring Boot
В какой-то момент я настолько устал настраивать все эти мелочи для REST-взаимодействия в микросервисах, что реализовал механизм, который сильно упрощает эту работу.
И я уверен, что вам стоит прочитать эту статью, если:
Вы используете Java и Spring Boot в своей работе.
Ваш проект строится на микросервисной архитектуре.
Вас раздражает бесконечное описание REST-контрактов и их поддержку.
А если у вас остались шрамы после попыток внедрения gRPC, то тем более рекомендую дочитать до конца.
В статье мы рассмотрим альтернативный подход к взаимодействию между сервисами — легковесное RPC-решение, которое удобно использовать внутри одного продукта. Оно не претендует на замену публичных API, но значительно упрощает жизнь внутри команды, где "правила игры" можно обсудить за кружкой пива.
Читать: https://habr.com/ru/articles/895172/?utm_campaign=895172
@a_cup_of_java | Другие наши каналы
В какой-то момент я настолько устал настраивать все эти мелочи для REST-взаимодействия в микросервисах, что реализовал механизм, который сильно упрощает эту работу.
И я уверен, что вам стоит прочитать эту статью, если:
Вы используете Java и Spring Boot в своей работе.
Ваш проект строится на микросервисной архитектуре.
Вас раздражает бесконечное описание REST-контрактов и их поддержку.
А если у вас остались шрамы после попыток внедрения gRPC, то тем более рекомендую дочитать до конца.
В статье мы рассмотрим альтернативный подход к взаимодействию между сервисами — легковесное RPC-решение, которое удобно использовать внутри одного продукта. Оно не претендует на замену публичных API, но значительно упрощает жизнь внутри команды, где "правила игры" можно обсудить за кружкой пива.
Читать: https://habr.com/ru/articles/895172/?utm_campaign=895172
@a_cup_of_java | Другие наши каналы
SAML2 ещё жив?! Как интегрировать Keycloak со Spring Boot в 2025 году
Команда Spring АйО перевела статью совместном использовании Spring Boot, SAML2 и Keycloak при запуске приложений. Здесь также приводятся некоторые кастомизированные решения, позволяющие более гибко работать с упомянутым набором технологий.
Читать: https://habr.com/ru/companies/spring_aio/articles/895022/?utm_campaign=895022
@a_cup_of_java | Другие наши каналы
Команда Spring АйО перевела статью совместном использовании Spring Boot, SAML2 и Keycloak при запуске приложений. Здесь также приводятся некоторые кастомизированные решения, позволяющие более гибко работать с упомянутым набором технологий.
Читать: https://habr.com/ru/companies/spring_aio/articles/895022/?utm_campaign=895022
@a_cup_of_java | Другие наши каналы
Explyt Spring Plugin. Патчим байткод Spring или как мы улучшили распознавание контекста приложений
Всем привет! Одной из уникальных особенностей нашего плагина, является практически стопроцентное понимание контекста Spring приложений. Где мы максимально нативным способом, через публичное Spring Boot Api, смогли получить доступ к контексту приложения и использовали эту информацию у себя в плагине для поддержки Spring Dependency Injection и навигации к “бинам”. Но время не стоит на месте, и мы сделали еще один шаг в сторону улучшения распознавания Spring Context, путем модификации текущего байт-кода Spring через параметр jvm: -javaagent, который позволил избавиться нам от большинства недостатков текущего подхода, кому интересно узнать детали реализации, то добро пожаловать под кат.
Читать: https://habr.com/ru/companies/explyt/articles/892726/?utm_campaign=892726
@a_cup_of_java | Другие наши каналы
Всем привет! Одной из уникальных особенностей нашего плагина, является практически стопроцентное понимание контекста Spring приложений. Где мы максимально нативным способом, через публичное Spring Boot Api, смогли получить доступ к контексту приложения и использовали эту информацию у себя в плагине для поддержки Spring Dependency Injection и навигации к “бинам”. Но время не стоит на месте, и мы сделали еще один шаг в сторону улучшения распознавания Spring Context, путем модификации текущего байт-кода Spring через параметр jvm: -javaagent, который позволил избавиться нам от большинства недостатков текущего подхода, кому интересно узнать детали реализации, то добро пожаловать под кат.
Читать: https://habr.com/ru/companies/explyt/articles/892726/?utm_campaign=892726
@a_cup_of_java | Другие наши каналы
Будущее Java — в вас!
На JavaOne 2025 обсудили важность сообщества Java, отметили его 30-летие и построили прогнозы развития на десятилетия вперед. Эксперты рассказали, как создавать приложения с ИИ на базе Helidon и LangChain4J. Праздник завершился песней "Happy Birthday" для Java.
Подробности: https://www.infoq.com/news/2025/03/day-three-java-one-2025/
#en
@a_cup_of_java | Другие наши каналы
На JavaOne 2025 обсудили важность сообщества Java, отметили его 30-летие и построили прогнозы развития на десятилетия вперед. Эксперты рассказали, как создавать приложения с ИИ на базе Helidon и LangChain4J. Праздник завершился песней "Happy Birthday" для Java.
Подробности: https://www.infoq.com/news/2025/03/day-three-java-one-2025/
#en
@a_cup_of_java | Другие наши каналы