БЕСПЛАТНЫЙ демо-доступ к уроку “Концепции REST: архитектура, stateless, кеширование” истекает СЕГОДНЯ!
Переходите по ссылке 👉https://stepik.org/a/175243?utm_medium=tg Раздел 8: Проектирование API - REST. Если есть вопросы - пишите в комментариях.
Переходите по ссылке 👉https://stepik.org/a/175243?utm_medium=tg Раздел 8: Проектирование API - REST. Если есть вопросы - пишите в комментариях.
Anonymous Poll
31%
Уже посмотрел
54%
Успеваю изучить сегодня
15%
Я все это уже знаю
33👍6
Есть идея🔥 Мы вас слушаем и слышим!
Можем проводить воркшопы в закрытом канале регулярно! Как вам план?
Последний воркшоп по системному анализу зашел на УРА! И ваша обратная связь тоже очень мотивирует: подсвечиваете точки роста, подкидываете классные идеи на будущее.
В этом и есть сила комьюнити: мы растем друг об друга💪
Делитесь в комментариях идеями по темам воркшопов, какие есть сложности в проектах, какие задачи вам непонятны - все разберем👇
Можем проводить воркшопы в закрытом канале регулярно! Как вам план?
Последний воркшоп по системному анализу зашел на УРА! И ваша обратная связь тоже очень мотивирует: подсвечиваете точки роста, подкидываете классные идеи на будущее.
Воркшоп был классный, надеюсь Глеб будет чаще проводить такие форматы.
Вебинар был информативным и полезным. Понравился материал из презентации. Ключевые концепции объяснялись ясно и доступно.
Воркшоп был для меня полезным, так как набираюсь только опыта и навыков. Было бы интересно послушать какие-то сложные кейсы.
В этом и есть сила комьюнити: мы растем друг об друга💪
Делитесь в комментариях идеями по темам воркшопов, какие есть сложности в проектах, какие задачи вам непонятны - все разберем👇
65🔥21
Бронируем пятницу 13-го🔥
К новому воркшопу готовы?
Тема: Концепция продукта: от User Story к User Story Mapping
Дата: 13.12.24 в 19.00 по мск
Формат: онлайн-трансляция в закрытом чате
Что изучите за 2 часа?
❗️ Научитесь быстро формировать концепцию продукта, которую поймут и заказчики, и команда: от сырых идей к структурированной карте ценности.
Что будет полезного?
✔️поймете, как правильно писать User Stories, чтобы они отражали реальную пользу для бизнеса и пользователей
✔️ освоите User Story Mapping — технику, которая помогает создать визуальную карту продукта, выделить MVP и разложить функциональность по итерациям
Короче) Материала много - приходите на прямой эфир, сможете в процессе задавать уточняющие вопросы.
Кто еще не в нашем закрытом чате и хочет присоединиться к воркшопу?
👉Ставьте + в комментариях, добавим.
К новому воркшопу готовы?
Тема: Концепция продукта: от User Story к User Story Mapping
Дата: 13.12.24 в 19.00 по мск
Формат: онлайн-трансляция в закрытом чате
Что изучите за 2 часа?
❗️ Научитесь быстро формировать концепцию продукта, которую поймут и заказчики, и команда: от сырых идей к структурированной карте ценности.
Что будет полезного?
✔️поймете, как правильно писать User Stories, чтобы они отражали реальную пользу для бизнеса и пользователей
✔️ освоите User Story Mapping — технику, которая помогает создать визуальную карту продукта, выделить MVP и разложить функциональность по итерациям
Короче) Материала много - приходите на прямой эфир, сможете в процессе задавать уточняющие вопросы.
Кто еще не в нашем закрытом чате и хочет присоединиться к воркшопу?
👉Ставьте + в комментариях, добавим.
47🔥14
А вы готовы к воркшопу?
Мы - ДА🔥
Написали для вас полное руководство по User Story для чайников!
Изучайте и погружайтесь в тему перед практикумом🔥
❗️13 декабря в 19.00 (мск) в ЗАКРЫТОМ ЧАТЕ❗️
👉https://dzen.ru/a/Z1roWFjRrwS34X2R
Накидайте 🔥, кто ждет воркшоп!
Мы - ДА🔥
Написали для вас полное руководство по User Story для чайников!
Изучайте и погружайтесь в тему перед практикумом🔥
❗️13 декабря в 19.00 (мск) в ЗАКРЫТОМ ЧАТЕ❗️
👉https://dzen.ru/a/Z1roWFjRrwS34X2R
Накидайте 🔥, кто ждет воркшоп!
Дзен | Статьи
Всё о User Story для чайников. Полное руководство
Статья автора «API. Архитектура. Веб-сервисы» в Дзене ✍: В этой статье узнаете, как сфокусироваться на пользователе и создать продукт, который ему действительно нужен.
64🔥18
Media is too big
VIEW IN TELEGRAM
Получили награду от Stepik🔥
Приятно, конечно) Я — не мастер речей, не готовился даже) Дедлайн горел на проекте - вы меня поймете😅
Рады быть полезными для своего комьюнити, для каждого, что хочет попасть в сферу IT и строит свою карьеру в этой нише 🚀 Это наша общая победа!
Благодарю за поддержку и доверие нашему обучению❤️
Приятно, конечно) Я — не мастер речей, не готовился даже) Дедлайн горел на проекте - вы меня поймете😅
Рады быть полезными для своего комьюнити, для каждого, что хочет попасть в сферу IT и строит свою карьеру в этой нише 🚀 Это наша общая победа!
Благодарю за поддержку и доверие нашему обучению❤️
48🔥32❤🔥7
This media is not supported in your browser
VIEW IN TELEGRAM
Город засыпает…
И пошла жара 🔥😅
Ребята, вы - крутые😎
Ближе к воркшопу начинается движ, активно готовимся принимать контент!
Вопросы смело сможете тоже задавать по ходу - мы не на контрольной) Общаемся в формате win\win.
До встречи на эфире в 19.00🔥
И пошла жара 🔥😅
Ребята, вы - крутые😎
Ближе к воркшопу начинается движ, активно готовимся принимать контент!
Вопросы смело сможете тоже задавать по ходу - мы не на контрольной) Общаемся в формате win\win.
До встречи на эфире в 19.00🔥
51🔥11👍4
Вы просили — мы сделали!
Готовы к погружению в брокеры сообщений?🔥
❓ЧТО — Воркшоп "Брокеры сообщений: основы и интеграция с Apache Kafka
❓ГДЕ — Закрытая группа
❓КОГДА — 19 декабря в 19.00 мск
Покажем способ облегчить интеграцию сервисов в распределённой архитектуре с помощью Kafka. Это один из самых мощных инструментов для асинхронной коммуникации и event-driven подхода.
Что вас ждет?
✔️ разберём базовые концепции Kafka: топики, партиции, продюсеры, консюмеры (не волнуйтесь, все объясним максимально простыми словами)
✔️ научимся грамотно проектировать интеграции: от формата сообщений до стратегии хранения и т.д.
До встречи 19 декабря!
По традиции)))) Чтобы попасть в Закрытую группу для воркшопов (странно, что вы еще не там) — ставьте + в комментариях👇
Готовы к погружению в брокеры сообщений?🔥
❓ЧТО — Воркшоп "Брокеры сообщений: основы и интеграция с Apache Kafka
❓ГДЕ — Закрытая группа
❓КОГДА — 19 декабря в 19.00 мск
Покажем способ облегчить интеграцию сервисов в распределённой архитектуре с помощью Kafka. Это один из самых мощных инструментов для асинхронной коммуникации и event-driven подхода.
Что вас ждет?
✔️ разберём базовые концепции Kafka: топики, партиции, продюсеры, консюмеры (не волнуйтесь, все объясним максимально простыми словами)
✔️ научимся грамотно проектировать интеграции: от формата сообщений до стратегии хранения и т.д.
До встречи 19 декабря!
По традиции)))) Чтобы попасть в Закрытую группу для воркшопов (странно, что вы еще не там) — ставьте + в комментариях👇
🔥18👍4
Контрольный прогон перед воркшопом🔥
Вы же в теме брокеров?
Написали полезную статью: "Брокеры сообщений: основы и интеграция с Apache Kafka".
— что такое брокер сообщений
— как их использовать
— примеры интеграции через брокер
— почему именно Kafka
Изучайте статью и делитесь своим опытом работы с брокерами сообщений🔥
✅ Воркшоп 19 декабря в 19.00 (мск) в ЗАКРЫТОМ ЧАТЕ
Читаем тут 👉https://dzen.ru/a/Z2KP0k_qQwFmhJ4e
Накидайте 🔥, кому актуальна тема брокеров.
P.S. Делитесь с коллегами и давайте дискутировать - ждем вас в комментариях👇
Вы же в теме брокеров?
Написали полезную статью: "Брокеры сообщений: основы и интеграция с Apache Kafka".
— что такое брокер сообщений
— как их использовать
— примеры интеграции через брокер
— почему именно Kafka
Изучайте статью и делитесь своим опытом работы с брокерами сообщений🔥
✅ Воркшоп 19 декабря в 19.00 (мск) в ЗАКРЫТОМ ЧАТЕ
Читаем тут 👉https://dzen.ru/a/Z2KP0k_qQwFmhJ4e
Накидайте 🔥, кому актуальна тема брокеров.
P.S. Делитесь с коллегами и давайте дискутировать - ждем вас в комментариях👇
Дзен | Статьи
Брокеры сообщений: основы и интеграция с Apache Kafka
Статья автора «API. Архитектура. Веб-сервисы» в Дзене ✍: Как облегчить интеграцию сервисов в распределённой архитектуре с помощью Kafka?
🔥17
Это не прогрев...🔥
Просто мы тоже любим, когда нас хвалят)
Ваша обратная связь после воркшопа по User Story для нас очень ценна👆 Мы делаем работу над ошибками, учитываем ваши пожелания по актуальным темам для эфиров.
‼️В 19.00 готовы к новому воркшопу по Брокерам сообщений?
Ждем на трансляции в закрытом чате!
Просто мы тоже любим, когда нас хвалят)
Очень понравилось, что лектор въедливо все объяснял, не ленился отвечать на сообщения и давал простые примеры.
Очень здорово, что проводятся такие воркшопы. Уже пробую применить на практике.
Ваша обратная связь после воркшопа по User Story для нас очень ценна👆 Мы делаем работу над ошибками, учитываем ваши пожелания по актуальным темам для эфиров.
‼️В 19.00 готовы к новому воркшопу по Брокерам сообщений?
Ждем на трансляции в закрытом чате!
🔥10
Придете на воркшоп в 19.00 мск в закрытый чат? Тема: "Брокеры сообщений: основы и интеграция с Apache Kafka"
Anonymous Poll
49%
Конечно
13%
Не знаю
32%
Я пропустил, что за воркшоп и закрытый чат?
6%
Ставьте + на предыдущий пост, кто пропустил - добавим в чат воркшопа
Ребята, воркшоп прошел на УРА🔥🔥
Благодарим вас за активность и обратную связь❤️
Да, за один эфир разобрать все нереально - будем по Брокерам проводить еще воркшопы.
Вы за? Накидайте🔥, чтобы мы понимали ваш интерес к этой теме.
❗️Запись воркшопа уже в закрытом чате.
До встречи на эфирах и на курсе👍
Благодарим вас за активность и обратную связь❤️
Да, за один эфир разобрать все нереально - будем по Брокерам проводить еще воркшопы.
Вы за? Накидайте🔥, чтобы мы понимали ваш интерес к этой теме.
❗️Запись воркшопа уже в закрытом чате.
До встречи на эфирах и на курсе👍
🔥24
Подготовьтесь к Новому Году правильно🚀
Новогодний портал @openstudyit открыт🎄
Впереди новогодние каникулы: "Один дома", "Гарри Поттер", оливье, посиделки у ёлки с близкими❤️ Когда обязательная программа будет пройдена еще останется кучу времени на изучение новых навыков, которые позволят вам получить более крупные проекты и дополнительный доход!
🎁 Мы дарим вам праздничный промокод на все наши флагманские продукты: NEWYEAR2025 (срок действия - 31.12.2024)
✔️ API: Тариф Стандарт (без обратной связи)
✔️ API: Тариф С поддержкой наставника
✔️ API: Тариф Карьера в IT (с обратной связью и блоком "Карьера")
✔️ Курс Системный анализ по-взрослому
Цены и тарифы на курсы в новом году будут пересматриваться... Кто хотел прийти к нам учиться и откладывал - это время настало😉
Делитесь этим постом с коллегами/друзьями - будем рады новым ученикам и участникам нашего комьюнити👍
P.S. Если приведете на курс друга - сделаем индивидуальную скидку, пишите в личку Глебу Учителю👉 https://t.me/glebteach_bot
Новогодний портал @openstudyit открыт🎄
Искренне считаем, что лучшая инвестиция для вашего успешного будущего - это знания.
Впереди новогодние каникулы: "Один дома", "Гарри Поттер", оливье, посиделки у ёлки с близкими❤️ Когда обязательная программа будет пройдена еще останется кучу времени на изучение новых навыков, которые позволят вам получить более крупные проекты и дополнительный доход!
🎁 Мы дарим вам праздничный промокод на все наши флагманские продукты: NEWYEAR2025 (срок действия - 31.12.2024)
✔️ API: Тариф Стандарт (без обратной связи)
✔️ API: Тариф С поддержкой наставника
✔️ API: Тариф Карьера в IT (с обратной связью и блоком "Карьера")
✔️ Курс Системный анализ по-взрослому
Цены и тарифы на курсы в новом году будут пересматриваться... Кто хотел прийти к нам учиться и откладывал - это время настало😉
Делитесь этим постом с коллегами/друзьями - будем рады новым ученикам и участникам нашего комьюнити👍
P.S. Если приведете на курс друга - сделаем индивидуальную скидку, пишите в личку Глебу Учителю👉 https://t.me/glebteach_bot
🔥7❤🔥3👍3
Интересная задача по проектированию Kafka + ПОДАРОК для вас 🎁
Контекст
Представьте, вы проектируете микросервисное приложение для онлайн-магазина, в котором есть несколько бизнес-сущностей:
Заказы (Orders) — создание, обновление, отмена заказа.
Оплаты (Payments) — подтверждение, отмена, возвраты по оплатам.
Уведомления (Notifications) — рассылка писем, SMS и push-сообщений пользователям.
Каталог (Catalog) — обновление информации о товарах (цены, наличие, описание).
Аналитика (Analytics) — события просмотра товаров, клики, метрики работы пользователей.
Требования
Надёжность: нельзя потерять важные события (заказы, оплаты).
Масштабируемость: система должна выдерживать пиковые нагрузки (распродажи и т.п.).
Гибкость: возможность легко добавлять новые типы событий без переделки всей архитектуры.
Отслеживание порядка: изменения в заказе или платеже должны обрабатываться в строгом порядке для одного и того же order_id или payment_id.
Вопросы к вам
1️⃣ Как разделить события по топикам? Рассматривать ли один общий топик для всех событий, или сделать отдельные топики под заказы, оплаты, уведомления и т.д.? Почему именно так?
2️⃣ Как выбрать ключ (partition key)? По каким полям будете партиционировать: order_id, payment_id, user_id или другим?
3️⃣ Какую гарантию доставки применять?
At-most-once, At-least-once или Exactly-once? Где это критично и почему?
Пишите ваши ответы и обоснование в комментариях👇
Первые 5 человек, кто даст наиболее развёрнутый и правильный ответ, получат подарок от нас🎁
Контекст
Представьте, вы проектируете микросервисное приложение для онлайн-магазина, в котором есть несколько бизнес-сущностей:
Заказы (Orders) — создание, обновление, отмена заказа.
Оплаты (Payments) — подтверждение, отмена, возвраты по оплатам.
Уведомления (Notifications) — рассылка писем, SMS и push-сообщений пользователям.
Каталог (Catalog) — обновление информации о товарах (цены, наличие, описание).
Аналитика (Analytics) — события просмотра товаров, клики, метрики работы пользователей.
Требования
Надёжность: нельзя потерять важные события (заказы, оплаты).
Масштабируемость: система должна выдерживать пиковые нагрузки (распродажи и т.п.).
Гибкость: возможность легко добавлять новые типы событий без переделки всей архитектуры.
Отслеживание порядка: изменения в заказе или платеже должны обрабатываться в строгом порядке для одного и того же order_id или payment_id.
Вопросы к вам
1️⃣ Как разделить события по топикам? Рассматривать ли один общий топик для всех событий, или сделать отдельные топики под заказы, оплаты, уведомления и т.д.? Почему именно так?
2️⃣ Как выбрать ключ (partition key)? По каким полям будете партиционировать: order_id, payment_id, user_id или другим?
3️⃣ Какую гарантию доставки применять?
At-most-once, At-least-once или Exactly-once? Где это критично и почему?
Пишите ваши ответы и обоснование в комментариях👇
Первые 5 человек, кто даст наиболее развёрнутый и правильный ответ, получат подарок от нас🎁
🔥13👍3
Kafka для онлайн-магазина: решение❗️
Условия задачи ищите👉 ТУТ.
1. Разделение топиков
Самый надёжный способ — отдельные топики под каждый домен: orders, payments, catalog, notifications, analytics.
Так мы сможем:
— гибко настраивать число партиций и репликаций под нагрузку конкретного домена (например, у заказов обычно выше поток)
— сильно упростить логику в консьюмерах: сервис, слушающий заказы, подписывается только на orders, а не на общий поток всего подряд
— обеспечивать высокую отказоустойчивость: сбой или перегрузка в одном топике не влияет напрямую на другие
2. Ключ (Partition Key)
Чтобы сохранять порядок внутри одного объекта, ключ привязывают к ID этого объекта — order_id (для заказов), payment_id (для оплат).
— Если мы случайно используем, например, user_id вместо order_id, у одного пользователя могут быть несколько заказов, и их события перемешаются в одной партиции. Это нарушит требование «строгого порядка по заказу».
— Для уведомлений можно использовать notification_id (если важен порядок по конкретному уведомлению) или user_id (если важнее держать сообщения одного пользователя в одной партиции).
— Для каталога подойдут product_id или catalog_id, чтобы все изменения по одному товару сохраняли нужную последовательность.
3. Гарантия доставки
Чаще всего основная практика — At-least-once: события не теряются (в случае сбоя они переотправятся), но могут дублироваться. Такие дубли легко отсеять в сервисе (например, по ID события).
— Exactly-once (строго один раз) настраивается через транзакции в Kafka (idempotent producer, transactional consumer). Это более сложно и “дорого”, поэтому используют обычно там, где недопустимы дубли (например, в финансовых расчётах).
— At-most-once подходит, если потери событий не страшны (часть аналитики). Однако для важных доменов (заказы, оплаты, каталог) такой вариант рисковый.
❗️Нюансы, о которых лучше не забывать
1️⃣ Один общий топик для всего удобен «на бумаге», но на практике превращается в «бутылочное горлышко» и усложняет масштабирование.
2️⃣ Чрезмерное дробление (например, «orders.created», «orders.updated», «orders.canceled» отдельными топиками) может быть оправдано, если система очень большая и это действительно нужно для отдельных микросервисов. Но чаще достаточно одного топика на «orders» с указанием типа события.
3️⃣ «Exactly-once везде» звучит идеально, но реализация сложна: нужно аккуратно настроить транзакции, а это повышает нагрузку и сложность.
4️⃣ Можно делать ключ = session_id для заказа или оплаты, однако если это не 1:1 с order_id/payment_id, порядок внутри одного заказа может пострадать.
В итоге оптимальное решение:
✔️ Чётко разбитые топики (orders, payments и т.д.)
✔️ Ключи по сущностям (order_id, payment_id...)
✔️ Гарантия доставки at-least-once (самый частый баланс между надёжностью и сложностью).
Если у вас есть опыт (или «шишки») в настройке Kafka — обязательно поделитесь в комментариях👇
Ребята, кто описал решение задачи в комментариях — ответы верные, принимаются👍
Благодарим за активность! Проверяйте личку - направили в подарок полезные гайды по API🎁
Условия задачи ищите👉 ТУТ.
1. Разделение топиков
Самый надёжный способ — отдельные топики под каждый домен: orders, payments, catalog, notifications, analytics.
Так мы сможем:
— гибко настраивать число партиций и репликаций под нагрузку конкретного домена (например, у заказов обычно выше поток)
— сильно упростить логику в консьюмерах: сервис, слушающий заказы, подписывается только на orders, а не на общий поток всего подряд
— обеспечивать высокую отказоустойчивость: сбой или перегрузка в одном топике не влияет напрямую на другие
2. Ключ (Partition Key)
Чтобы сохранять порядок внутри одного объекта, ключ привязывают к ID этого объекта — order_id (для заказов), payment_id (для оплат).
— Если мы случайно используем, например, user_id вместо order_id, у одного пользователя могут быть несколько заказов, и их события перемешаются в одной партиции. Это нарушит требование «строгого порядка по заказу».
— Для уведомлений можно использовать notification_id (если важен порядок по конкретному уведомлению) или user_id (если важнее держать сообщения одного пользователя в одной партиции).
— Для каталога подойдут product_id или catalog_id, чтобы все изменения по одному товару сохраняли нужную последовательность.
3. Гарантия доставки
Чаще всего основная практика — At-least-once: события не теряются (в случае сбоя они переотправятся), но могут дублироваться. Такие дубли легко отсеять в сервисе (например, по ID события).
— Exactly-once (строго один раз) настраивается через транзакции в Kafka (idempotent producer, transactional consumer). Это более сложно и “дорого”, поэтому используют обычно там, где недопустимы дубли (например, в финансовых расчётах).
— At-most-once подходит, если потери событий не страшны (часть аналитики). Однако для важных доменов (заказы, оплаты, каталог) такой вариант рисковый.
❗️Нюансы, о которых лучше не забывать
1️⃣ Один общий топик для всего удобен «на бумаге», но на практике превращается в «бутылочное горлышко» и усложняет масштабирование.
2️⃣ Чрезмерное дробление (например, «orders.created», «orders.updated», «orders.canceled» отдельными топиками) может быть оправдано, если система очень большая и это действительно нужно для отдельных микросервисов. Но чаще достаточно одного топика на «orders» с указанием типа события.
3️⃣ «Exactly-once везде» звучит идеально, но реализация сложна: нужно аккуратно настроить транзакции, а это повышает нагрузку и сложность.
4️⃣ Можно делать ключ = session_id для заказа или оплаты, однако если это не 1:1 с order_id/payment_id, порядок внутри одного заказа может пострадать.
В итоге оптимальное решение:
✔️ Чётко разбитые топики (orders, payments и т.д.)
✔️ Ключи по сущностям (order_id, payment_id...)
✔️ Гарантия доставки at-least-once (самый частый баланс между надёжностью и сложностью).
Если у вас есть опыт (или «шишки») в настройке Kafka — обязательно поделитесь в комментариях👇
Ребята, кто описал решение задачи в комментариях — ответы верные, принимаются👍
Благодарим за активность! Проверяйте личку - направили в подарок полезные гайды по API🎁
🔥16❤🔥3
Зачем опытному разработчику, который метит в FAANG, изучать API?
#ученикиговорят
Классно, что к нам приходят учиться даже опытные разработчики. С нами вы не только прокачиваете навыки для построения карьеры в IT, но и попадаете в комьюнити более опытных коллег!
Ребята вовсю используют возможности новогодних бонусов от нас и заходят сейчас на обучение по максимально выгодным ценам👍
Прокачка новых скиллов и изучение навыков архитектуры для успешной карьеры в IT — это база! Как построить карьерный трек и успешно пройти собеседование мы рассказываем на тарифе "Карьера в IT":
✅ обратная связь от преподавателя по заданиям, много практики
✅ подготовка к собеседованию и создание эффективного резюме, которое заценит HR
✅ доступ к материалам и вашему личному кабинету бессрочный
Накидайте 🔥, кто хочет успешную карьеру в IT в новом году!
P.S. Промокод NEWYEAR2025 на все курсы еще действует (до 31.12.24)🎅
#ученикиговорят
С опытом многому научился, только хочется получить какой-то базы, прокачаться в архитектуре. Ваш курс прошёл, замечательный, множество полезной информации.
Классно, что к нам приходят учиться даже опытные разработчики. С нами вы не только прокачиваете навыки для построения карьеры в IT, но и попадаете в комьюнити более опытных коллег!
Ребята вовсю используют возможности новогодних бонусов от нас и заходят сейчас на обучение по максимально выгодным ценам👍
Прокачка новых скиллов и изучение навыков архитектуры для успешной карьеры в IT — это база! Как построить карьерный трек и успешно пройти собеседование мы рассказываем на тарифе "Карьера в IT":
✅ обратная связь от преподавателя по заданиям, много практики
✅ подготовка к собеседованию и создание эффективного резюме, которое заценит HR
✅ доступ к материалам и вашему личному кабинету бессрочный
Накидайте 🔥, кто хочет успешную карьеру в IT в новом году!
P.S. Промокод NEWYEAR2025 на все курсы еще действует (до 31.12.24)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍1