Карта курса "Логгирование в Python" Карта на Patreon: www.patreon.com/posts/karta-kursa-v-32537851 Один из самых непонятных модулей в Python. Очень нужный, настолько нужный, что ни один проект без него не обходится, но крайне непонятный. Большая ошибка думать, что можно выполнить тестовое задание или проект для портфолио на github'e без использования системы логгирования. Разбираемся по шагам. 0. Введение (th-cam.com/video/CSCRx5DVUDI/w-d-xo.html) 1. Архитектура модуля logging. Простой логгер
Остальной курс на патреоне. Рекомендую тем, кто действительно хочет стать питонистом, посетить и стать патроном Олега. Он очень старается там полно видео и годноты. Всем добра.
надо сделать чтобы пользовательский логгер адаптер выводил строки с джейсоном. Коренной логгер выводит без проблем, но скрытое форматирование (implicit formatting) в адаптере не позволяет. Никак не разберусь в структуре этого модуля, что надо сделать, где копать. Круто, взял тир $10.)
Раньше хотел, а теперь буду сильно думать. Времени требует прорву, а результата почти нет от таких серий. Тут в коментах есть такой andrey shevchenko - так может он сделает?
@@zaemiel ,сделайте,пжл) . Результат Ваших работ -это то ,что многие как я узнают очень полезные навыки/знания доступным языком. А насчет дураков,не обращайте на них внимания,им до Вас как пешком до луны,единственное что они умеют-изливаться желчью в комментах,очевидно из-за зависти.
У меня ЛОГИ как-то в разнобой с print() а не по порядку( порядку написания их в коде) выфводятся, причем постояно рандомная последовательность будто в коде async присутсвует, но без await, в чем проблемма?
Sup, guys! Надеюсь у вас все чётко. Если интересутесь python/js/web/whatever то заходите на сервер в discord discord.gg/Yu4w8Eu соберем компашку адекватных разработчиков будем вместе работать над проектами и помогать друг-другу. Абсолютно не важно, новичок или гуру - заходите, вы ничего не теряете (ну разве, что кроме лени, т.к. есть каналы где планируются совместные styding/working sessions и это супер как мотивирует) Группа multilang, т.е. есть возможность подтянуть английский с ребятами по всему миру :) Не стесняйтесь, будет весело и продуктивно)
Я как понял если приоритет сообщения ниже чем у обработчика (handler) то он его игнорирует. Так в тот же момент вы задали логеру urllib3 приоритет уровня 'CRITICAL' так же оно выше чем базовый логер, почему оно не вывелось
Неправильно поняли. В обработчик экземпляр LogRecord попадет только в том случае, если логгер пропустит. Уровень - это нижняя граница, все что ниже этого уровня - игнорируется.
Теперь понятно почему видео появляется не так часто, но я думаю, что чем больше и чаще вы будете выкладывать видео, тем меньше будете обращать внимание на пиратство
Глупость какая. Хауди Хо вначале снимал образовательные видео, а потом перестал. Теперь снимает видосы в стиле "11 легких способов стать". Вам понятно почему? Sorax вначале снимал видео, а потом перестал. Вообще. От слова совсем. Вам понятно почему?
Идею вашу можно переформулировать так: "Выходя на улицу (рынок, магазины) кладите в карманы деньжат побольше. Ничего, что карманники вас пощипают, вы больше кладите и не будете расстраиваться". Примерно так.
@@zaemiel Обратите внимание, если еще не видели, на канал "IT каждый день". У автора очень хороший код, но нет желание что-то разжевывать. Но Вам Олег, огромное спасибо, за то, что вы все подробно разбираете. СПАСИБО!
Привет, Олег. Не забрасывай канал, объясняешь сложные вещи доступным языком. Стоит ли ожидать в будущем ролика Python Best Practices от тебя? Где бы ты рассказал о тонкостях языка, синтаксиса, как нужно писать, а как не стоит. Стараюсь всегда быть в курсе нового в мире Python и следующую строчку: logger.debug(f'Enter in the main() function: name = {name}') Я бы написал так: logger.debug(f'Enter in the main() function: {name = }')
Использование F строк для логирования - это дурной тон. Уровень логирования может изменится с DEBUG на ERROR а подстановка значений в F строки будет происходить не зависимо от уровня логирования. Получаются лишние накладные расходы.
Привет.Нужна консультация.Написал код с 2 функциями, обе запускаются в режиме мультипроцессинга.Сначала вызывается первая функция которая создаёт процессы иногда вызывающие вторую функцию так же создающую процессы.Первые секунд 20, обе функции вызываются и функционируют как положено, но затем происходит непонятно что и вторая функция перестаёт вызываться и создавать процессы.При этом первая функция продолжает выводить логи работы, но только до того момента где она должна была запустить вторую функцию
Доброго времени суток.Хочу поблагодарить вас за столь прекрасный канал и материал.Также хотел бы узнать не планируете ли вы сделать серию скринкастов или может целый курс на Patreon по ООП в питоне?
@@zaemiel Я конечно могу понять что автоимпорт и автодополнение зло, но: - подсветка ошибок и расхождений от PEP 8 - рефакторинг - поиск использования - быстрый переход к функциям или классам - удобный плагин для Git - дебаг - встроенная консоль - конфигурации для запуска проектов - удобная синхронизация проекта с сервером - документация по функциям и классам по hotkey Все это работает из коробки (ничего настраивать и доустанавливать не нужно) и тупо экономит время
PyCharm выручает, когда работаешь с большим проектом. Если же пишешь небольшой скрипт - использовать IDE избыточно. Это тоже самое, что забивать гвоздь кувалдой, а не молоточком.
@Sergey. Кроме интроспекции кода все остальное есть везде. Многие пользуются только vim'ом и у них все отлично. И вроде бы для vim'а можно было настроить интроспекцию кода. И я их могу понять. По поводу экономии времени - это очень смешное замечание на самом деле. Прошу понять меня правильно, я не над вами смеюсь, а над самой идеей "экономии времени" и "эффективности". Настоящая экономия времени и эффективность требует сил и железной дисциплины, а не "IDE с плагином для git" (это просто собирательный образ штуки, которая сделает меня эффективным). Чтобы получить настоящую экономию и эффективность делаем следующее: - продаем текущий телефон и покапаем телефон с кнопками. - блокируем все сайты кроме: stackoverflow, djangoproject, github и других, которые нужны для работы. - удаляем игры - выбрасываем книги - находим себе место, где никто не будет дергать и отвлекать - "переезжаем" туда. - каждый божий день начинаем с планирования и завершаем с написания отчета. Одно только это освободит просто годы времени. Звучит как бред? Да. И естественно никто так делать не будет. И я тоже не делаю. Потому что это тяжело и такое не продашь. Нам всем удобнее рассуждать об эффективности "лежа на диване". Но я это все осознаю. Поэтому PyCharm мне не нужна. Самые эффективные мои рабочие моменты достигались тогда, когда я был полностью поглощен задачей. 100% концентрация - вот что тупо экономит время. И этому нужно учится. Вот что мне нужно.
@@zaemiel спасибо за развёрнутый и интересный ответ. Да другие IDE можно настроить, но я не видел удобнее инструмента для diff'а изменений файлов, чем в IDEA (PyCharm). Я частенько нахожу ошибки в проекте при просмотре дифа файлов при комите. А теперь вопрос, чем вы пользуетесь для diff'а?
к сожалению законодательная / законоисполнительная база в России способствует и стимулирует безнаказанное воровство не только контента, интеллектуальной собственности, но и любой другой чужой собственности, до которой у человека дотянулись руки. Вы, Олег, к сожалению находитесь на территории беспредела. Мне лично это горестно. Вы, на мой взгляд, имеете право за свой достойный труд получить достойное вознаграждение. А когда в реальности через какое-то время вы обнаружите, что вы его не получили, потому что оно разворовано случайными людьми, вы прекратите это начинание. А я и мне подобные продолжат скитания по интернету в поисках ценной информации. Мне горько и обидно уже сегодня. Народ, уважайте чужой труд, пожалуйста !
Вы сами построили свое государство, поддерживаете войну, участвуете в захвате чужих территорий, убийствах, грабежах, насилии и прочим близкому вам неподобству. Но хорошо то, что скрыть уже не получится и ваши поколения долгие годы будут нести искупление, а вы дальше пишите код и делайте вид что ничего не происходит вокруг. Еще хочется себя пожалеть что у вас там все несправедливо?
Автор, тебе респект. Контент топовый, видосы смотрю постоянно. Но чувак, ты пей воду перед тем как видео записываешь, либо подкрути частоты на микрофоне, либо чувствительность убавь, что бы чамканье слышно не было. Это пиз**ц как раздражает
@@zaemiel я рад, что ты смог найти свой дзен среди дистрибутивов. У меня не получается. Дольше всех Debian продержался >3 лет. В Mint стал cinnamon жрать 100% cpu после обновления( В идеале хотелось бы дистр с rolling release cycle но пока там больше настраиваешь систему, чем программируешь...
Карта курса "Логгирование в Python"
Карта на Patreon:
www.patreon.com/posts/karta-kursa-v-32537851
Один из самых непонятных модулей в Python.
Очень нужный, настолько нужный, что ни один проект без него не обходится, но крайне непонятный.
Большая ошибка думать, что можно выполнить тестовое задание или проект для портфолио на github'e без использования системы логгирования.
Разбираемся по шагам.
0. Введение (th-cam.com/video/CSCRx5DVUDI/w-d-xo.html)
1. Архитектура модуля logging. Простой логгер
При переходе по ссылкам выдаёт 404(
@@viktornekrasov5024 нужно подписаться на Патреоне, тогда все заработает :)
Ссылка должна работать даже для незарегистрированных в Patreon посетителей.
@@viktornekrasov5024 В конце ссылки удалите ')' и всё будет работать.
Олег, можете помочь, прошел основы питона и ооп. Куд двигаться дальше? Путаюсь в плейлистах.
Олег где же ты? куда ушёл? ВЕРНИИИСЬ!
Олег, вы снимаете очень качественные видео уроки, и за это вам огромнейшее спасибо! Пожалуйста, вернитесь =)
очень круто
так подробно рассказываешь
все понятно
спасибо большое!!!
очень круто и подробно объясняется для самых маленьких ))))
Привет, когда же ждать продолжение твоих видео?
благодарю за столь содержательный и полезный контент. обязательно подпишусь в патроны!
Олег огромное спасибо, вы лучший!!!
Найкращий!
Спасибо большое, я только начинаю логировать, интересная тема
Остальной курс на патреоне. Рекомендую тем, кто действительно хочет стать питонистом, посетить и стать патроном Олега. Он очень старается там полно видео и годноты. Всем добра.
Спасибо, дядя Олег.
охренеть я бы лет двести самостоятельно по докам это курил
После просмотра роликов о ивент лупе понимаю как круто автор копает)
Спасибо, Олег! Благодаря Вам я теперь люблю модуль logging. С удовольствием подписался на Ваш Patreon и продолжаю изучение.
Спасибо, давно хотел разобраться!
Куда пропал ? Когда новые видео ?
Еее, спасибо тебе за твой труд! Еще не посмотрел, зашел влепить лайк, гляну позже)
хаха, я тоже)
Так и не зашёл?
смотрю ты записываешь ролики рано утром в пол седьмого, почему так рано? расскажи свой распорядок дня
Здравствуйте. Мне очень нравятся ваши видеоуроки. Могу ли я узнать будут ли новые уроки по Flask?
Ай ай ай хорошая работа олег.
Спасибо) осень подробно)
Когда же выйдет следующее видео??
Олег, большая просьба. Разберите тему объектно ориентированного программирования. Думаю, многим будет интересно
Посмотри на канале selfedu, там свежий и понятный плеист
@@pashakolosov3505 а чето нет Олега давно уже....Надеюсь что просто временно забил,а не чего такого серьезного!
Здравствуйте, будет ли курс по Django rest framework?
Полезное видео, спасибо
Спасибо!
Олег, можете записать видео про Django restframework ?
Олег, день добрый. Подскажите с вами как-то связаться можно для консультации? Контактов не нашел ни тут, ни на патреоне :(
надо сделать чтобы пользовательский логгер адаптер выводил строки с джейсоном. Коренной логгер выводит без проблем, но скрытое форматирование (implicit formatting) в адаптере не позволяет. Никак не разберусь в структуре этого модуля, что надо сделать, где копать.
Круто, взял тир $10.)
Олег, спасибо большое за такое четкое объяснение. Вы - большой молодец.
Олег, а скажите,пжл,а намечается ли курса по Django advanced ?
Раньше хотел, а теперь буду сильно думать. Времени требует прорву, а результата почти нет от таких серий.
Тут в коментах есть такой andrey shevchenko - так может он сделает?
@@zaemiel ,сделайте,пжл) . Результат Ваших работ -это то ,что многие как я узнают очень полезные навыки/знания доступным языком. А насчет дураков,не обращайте на них внимания,им до Вас как пешком до луны,единственное что они умеют-изливаться желчью в комментах,очевидно из-за зависти.
@@zaemiel ,а когда новые уроки(хотя бы примерные сроки) ?
У меня ЛОГИ как-то в разнобой с print() а не по порядку( порядку написания их в коде) выфводятся, причем постояно рандомная последовательность будто в коде async присутсвует, но без await, в чем проблемма?
сделай пожалуйста обзор на Django3 новые фичи и отличие от 2ой версии
блин, все так сложно... но мне нравится!)
Добрый день, слышал у вас появился канал на английском, можете ссылку дать. Будет ли урок по Scrapy? Если нет, купил бы у вас курс
Пожалуйста, сделай краткий курс по API VK и API INSTAGRAM на Python!!!
th-cam.com/video/UjMZ7lTYvyI/w-d-xo.html
Подскажите, где можно найти код реального проекта (например, того же телеграм-бота) с логированием?
А можно ли как-то убрать DEBUG:root: ?
Качественное объяснение, огромное спасибо!
Олег здравствуйте,скажите пожалуйста планируются ли на пэтреон новые ролики? когда ожидать?
Sup, guys! Надеюсь у вас все чётко. Если интересутесь python/js/web/whatever то заходите на сервер в discord discord.gg/Yu4w8Eu соберем компашку адекватных разработчиков будем вместе работать над проектами и помогать друг-другу.
Абсолютно не важно, новичок или гуру - заходите, вы ничего не теряете (ну разве, что кроме лени, т.к. есть каналы где планируются совместные styding/working sessions и это супер как мотивирует)
Группа multilang, т.е. есть возможность подтянуть английский с ребятами по всему миру :)
Не стесняйтесь, будет весело и продуктивно)
Я как понял если приоритет сообщения ниже чем у обработчика (handler) то он его игнорирует. Так в тот же момент вы задали логеру urllib3 приоритет уровня 'CRITICAL' так же оно выше чем базовый логер, почему оно не вывелось
Неправильно поняли. В обработчик экземпляр LogRecord попадет только в том случае, если логгер пропустит. Уровень - это нижняя граница, все что ниже этого уровня - игнорируется.
Большое спасибо за это видео! Очень понятное объяснение модуля logging =))
Отличные курсы, и ролик про логгирование на высоте, планируете сделать курс посвященный нейросетям на Python3?
гляньте у Андрея Созыкина
@@yodapunishesНашёл, большое спасибо.
Да, я хочу сделать
отличный урок! большое спасибо!
Олег вернииииись ми без тебя никто
Эх. Неужели, ты забросил канал, а ведь всё так хорошо начиналось...
Теперь понятно почему видео появляется не так часто, но я думаю, что чем больше и чаще вы будете выкладывать видео, тем меньше будете обращать внимание на пиратство
Глупость какая.
Хауди Хо вначале снимал образовательные видео, а потом перестал. Теперь снимает видосы в стиле "11 легких способов стать". Вам понятно почему?
Sorax вначале снимал видео, а потом перестал. Вообще. От слова совсем. Вам понятно почему?
Идею вашу можно переформулировать так:
"Выходя на улицу (рынок, магазины) кладите в карманы деньжат побольше. Ничего, что карманники вас пощипают, вы больше кладите и не будете расстраиваться".
Примерно так.
@@zaemiel Обратите внимание, если еще не видели, на канал "IT каждый день". У автора очень хороший код, но нет желание что-то разжевывать.
Но Вам Олег, огромное спасибо, за то, что вы все подробно разбираете.
СПАСИБО!
Спасибо большое за наводку
Как работать с request если на сайте 5 редиректов
Привет, Олег.
Не забрасывай канал, объясняешь сложные вещи доступным языком.
Стоит ли ожидать в будущем ролика Python Best Practices от тебя?
Где бы ты рассказал о тонкостях языка, синтаксиса, как нужно писать, а как не стоит.
Стараюсь всегда быть в курсе нового в мире Python и следующую строчку:
logger.debug(f'Enter in the main() function: name = {name}')
Я бы написал так:
logger.debug(f'Enter in the main() function: {name = }')
Aliaksandr Badretdzinau оппа) вот это поворот)
Спасибо.
>>> logger.degub(f'Enter in the main() function: {name = }')
И как? Работает?
Олег Молчанов Конечно. Не должно разве?
Надо пояснить тогда, что речь идёт только о 3.8
,@@yodapunishes f-string появились в Python 3.6.
Привет, у тебя есть видео уроки по ООП подходу?
Очень импонируют твои видео, спасибо тебе)
Добрый вечер,
Пока нет, но следующая серия будет по ООП.
@@zaemiel спасибо, лайк и совет друзьям уже сделал)
@@zaemiel Олеееег вернитесь. Вы мой краш, я ваш фанат, такой подачи нет ни у кого в русском сегменте! Мы вас очень ждем с ООП)!
@@Royalty645 у него есть канал на английском
Использование F строк для логирования - это дурной тон. Уровень логирования может изменится с DEBUG на ERROR а подстановка значений в F строки будет происходить не зависимо от уровня логирования. Получаются лишние накладные расходы.
по атрибутам объектов LogRecord и словарю extra - в других видео. Здесь чисто демонстрационный пример.
спасибо. Очень полезно
Привет.Нужна консультация.Написал код с 2 функциями, обе запускаются в режиме мультипроцессинга.Сначала вызывается первая функция которая создаёт процессы иногда вызывающие вторую функцию так же создающую процессы.Первые секунд 20, обе функции вызываются и функционируют как положено, но затем происходит непонятно что и вторая функция перестаёт вызываться и создавать процессы.При этом первая функция продолжает выводить логи работы, но только до того момента где она должна была запустить вторую функцию
Вторая функция в коде вызывается из первой с помощью pool1.starmap(function2, dict)
Мастер спорта!
thank you Oleg!!
Олег, а что вы можете сказать про Loguru?
Выглядит интересно, но я не пробовал. Большие дяди (Django, requests и прочие) используют logging.
Доброго времени суток.Хочу поблагодарить вас за столь прекрасный канал и материал.Также хотел бы узнать не планируете ли вы сделать серию скринкастов или может целый курс на Patreon по ООП в питоне?
Да, я планирую. Следующая серия будет по ООП. Здесь на TH-cam выложу.
@@zaemiel Спасибо, ждем!!!
Ти лучший
Почему вы не используете pycharm?
а зачем?
@@zaemiel Я конечно могу понять что автоимпорт и автодополнение зло, но:
- подсветка ошибок и расхождений от PEP 8
- рефакторинг
- поиск использования
- быстрый переход к функциям или классам
- удобный плагин для Git
- дебаг
- встроенная консоль
- конфигурации для запуска проектов
- удобная синхронизация проекта с сервером
- документация по функциям и классам по hotkey
Все это работает из коробки (ничего настраивать и доустанавливать не нужно) и тупо экономит время
PyCharm выручает, когда работаешь с большим проектом. Если же пишешь небольшой скрипт - использовать IDE избыточно.
Это тоже самое, что забивать гвоздь кувалдой, а не молоточком.
@Sergey. Кроме интроспекции кода все остальное есть везде.
Многие пользуются только vim'ом и у них все отлично. И вроде бы для vim'а можно было настроить интроспекцию кода. И я их могу понять.
По поводу экономии времени - это очень смешное замечание на самом деле. Прошу понять меня правильно, я не над вами смеюсь, а над самой идеей "экономии времени" и "эффективности".
Настоящая экономия времени и эффективность требует сил и железной дисциплины, а не "IDE с плагином для git" (это просто собирательный образ штуки, которая сделает меня эффективным).
Чтобы получить настоящую экономию и эффективность делаем следующее:
- продаем текущий телефон и покапаем телефон с кнопками.
- блокируем все сайты кроме: stackoverflow, djangoproject, github и других, которые нужны для работы.
- удаляем игры
- выбрасываем книги
- находим себе место, где никто не будет дергать и отвлекать - "переезжаем" туда.
- каждый божий день начинаем с планирования и завершаем с написания отчета.
Одно только это освободит просто годы времени.
Звучит как бред? Да. И естественно никто так делать не будет. И я тоже не делаю.
Потому что это тяжело и такое не продашь. Нам всем удобнее рассуждать об эффективности "лежа на диване".
Но я это все осознаю. Поэтому PyCharm мне не нужна.
Самые эффективные мои рабочие моменты достигались тогда, когда я был полностью поглощен задачей. 100% концентрация - вот что тупо экономит время. И этому нужно учится. Вот что мне нужно.
@@zaemiel спасибо за развёрнутый и интересный ответ. Да другие IDE можно настроить, но я не видел удобнее инструмента для diff'а изменений файлов, чем в IDEA (PyCharm). Я частенько нахожу ошибки в проекте при просмотре дифа файлов при комите. А теперь вопрос, чем вы пользуетесь для diff'а?
к сожалению законодательная / законоисполнительная база в России способствует и стимулирует безнаказанное воровство не только контента, интеллектуальной собственности, но и любой другой чужой собственности, до которой у человека дотянулись руки. Вы, Олег, к сожалению находитесь на территории беспредела. Мне лично это горестно. Вы, на мой взгляд, имеете право за свой достойный труд получить достойное вознаграждение. А когда в реальности через какое-то время вы обнаружите, что вы его не получили, потому что оно разворовано случайными людьми, вы прекратите это начинание. А я и мне подобные продолжат скитания по интернету в поисках ценной информации. Мне горько и обидно уже сегодня. Народ, уважайте чужой труд, пожалуйста !
Как же вы правы
Вы сами построили свое государство, поддерживаете войну, участвуете в захвате чужих территорий, убийствах, грабежах, насилии и прочим близкому вам неподобству. Но хорошо то, что скрыть уже не получится и ваши поколения долгие годы будут нести искупление, а вы дальше пишите код и делайте вид что ничего не происходит вокруг. Еще хочется себя пожалеть что у вас там все несправедливо?
@@mmospanenko вы это кто? ты сам-то откуда, зёма? из Таджикистана или из Педрушколендии? Чего тебе не сидится спокойно?
создайте кнопку спансировать, спасибо за контент
А почему Вы не молчите?
thx
🗽
Вернитесь(
Спасибо.
Автор, тебе респект. Контент топовый, видосы смотрю постоянно. Но чувак, ты пей воду перед тем как видео записываешь, либо подкрути частоты на микрофоне, либо чувствительность убавь, что бы чамканье слышно не было. Это пиз**ц как раздражает
Очень интересно, но ничего не понятно!)
мозг кипит.
Походу в минт 19.3 новый питон завезли, судя по f-string у Олега ))
это был mint 18.3 и Python 3.7.5. И его я использую сравнительно давно.
@@zaemiel я рад, что ты смог найти свой дзен среди дистрибутивов. У меня не получается. Дольше всех Debian продержался >3 лет. В Mint стал cinnamon жрать 100% cpu после обновления( В идеале хотелось бы дистр с rolling release cycle но пока там больше настраиваешь систему, чем программируешь...
@@eamarc да да да. целый день сидим и настраиваем. вот я например, перед тем как написать этот коммент, потратил час на настройку : )
О!!! Как раз к стати, а то намутил прогу на овер 10 .py файлов. Ошибки принтами отлавливаю :(
Так себе, нужно было начать с того, зачем этот лог нужен
т.е. первое видео на эту тему вы не видели. Прескорбно.
th-cam.com/video/CSCRx5DVUDI/w-d-xo.html
@@zaemiel а, ладно, вы как программист с нуля плейлист нумеруете))
в общем да. Нулевые у меня всегда введения, где нет практически никакой информации конкретно по теме. Поэтому они нулевые.
логирование в русском языке пишется с одной "Г".
Было бы хорошо если вы говорили бы чуть выразительнее, а то мне кажется с такими темпами зрителям и подписчикам станет скучно
Поскорее бы. И я наконец займусь вплотную моим английским каналом, который тоже почему-то смотрят. Там я еще и с акцентом говорю.
@@zaemiel А не подскажете адрес канала на английском? В описании этого канала не нашёл.
we want more video on javascript
No, we don't.
javascript is cancer
Вот это облом. Крайне неадекватно делать первое видео бесплатное, а потом отсылать в патрон.
Так что диз. и я пошел читать доку ....
мыло
Спасибо
Спасибо