Код на салфетке
2.22K subscribers
748 photos
15 videos
2 files
791 links
Канал для тех, кому интересно программирование на Python и не только.

Сайт: https://pressanybutton.ru/
Чат: https://t.iss.one/+Li2vbxfWo0Q4ZDk6
Заметки автора: @writeanynotes

Реклама и взаимопиар: @Murzyev1995
Сотрудничество и др.: @proDreams
Download Telegram
Приветствую!

В длинных постах можно запутаться поэтому, собираю воедино всё, что есть на данный момент.


Оглавления:
Для удобства навигации есть посты с оглавлениями по темам:

"Сайт на Django"
"Telegram-бот на AIOgram3"
"Применение Docker"
"Полезные инструменты"
"Путь в IT."
"Код в мешке"
"Boosty эксклюзив"
"Сравнение Python и C"

Задачи "Что выведет этот код?"
Задачи "Найди ошибку в коде"


Ресурсы канала:

Уютный и немного безумный чат канала.
Бот с материалами к постам
Сайт со всеми постами
Канал в Dzen
Сообщество в VK


Поддержка.

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

Также поддержать канал можно:
Подпиской или донатом на Boosty.

Донатом в нашем Telegram-боте.
Отправив донат в DonationAlerts.

Или внеся сайт в исключения вашего блокировщика рекламы.
🔥8👍2👎1
Приветствую, друзья!

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

Фильм: Майор Гром: Игра

Год: 2024

Его жизнь идеальна: днём он ловит преступников вместе с напарником Димой Дубиным, а вечера проводит в компании журналистки Юлии Пчёлкиной. Полную идиллию прерывает появление в городе таинственного злодея, называющего себя Призраком. Он предлагает Грому сыграть в опасную игру, ставка в которой — жизни обычных людей.

Приятного просмотра!
10🔥5😁1🤡1
Что выведет этот код? №39

Задача:
Вы создаёте систему для отображения данных пользователей с различными префиксами и форматами вывода. Есть несколько функций, которые обрабатывают разные данные: ID пользователей и приветственные сообщения. Декоратор должен добавить динамический префикс в зависимости от значения, возвращённого функцией.
🔥5👍1
Привет, друзья!

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

Понедельник (23.09.2024) Дайджест за предыдущую неделю

Вторник (24.09.2024) Общая навигация по каналу

Среда (25.09.2024)

Четверг (26.09.2024) Фильтры для обработчиков сообщений в AIOgram 3

Пятница (27.09.2024) Пятничный кинорелакс

Суббота (28.09.2024) Задача


Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!

С уважением,
Команда канала "Код на салфетке".

#дайджест #материалы #новости #код_на_салфетке
🔥9👍2
Привет, друзья!

Не так давно мы объявили о поиске новых авторов на сайт и канал.

Собственно, рады представить вам Сергея, в качестве автора новой рубрики "Кусочки кода", а в последствии и других материалов.

В новой рубрике, Сергей в кратком формате будет рассказывать различные интересные вещи: Python, процессоры, контейнеры, операционные системы и так далее.

Давайте поддержим нового автора и смотивируем его не только на ведение небольшой рубрики, но и на большие материалы!
10🔥1331
Знаете ли вы, как глобальная блокировка интерпретатора (GIL) влияет на многопоточность в Python?

Глобальная блокировка интерпретатора (GIL) — это механизм в CPython, стандартной реализации Python, который предотвращает одновременное выполнение нескольких потоков байт-кода. Это означает, что даже на многоядерных процессорах, только один поток может выполнять Python-код в любой момент времени. GIL упрощает управление памятью и обеспечивает безопасность при работе с объектами Python, но одновременно ограничивает эффективность многопоточных приложений, особенно тех, которые интенсивно используют процессорные ресурсы.

Чтобы обойти ограничения GIL, разработчики используют многопроцессорность с помощью модуля multiprocessing, который создает отдельные процессы с собственными интерпретаторами Python и, соответственно, собственными GIL. Другим подходом является использование внешних библиотек, написанных на C, которые освобождают GIL во время выполнения длительных вычислений. Такие методы позволяют эффективно использовать многоядерные системы и повышать производительность приложений, несмотря на существование GIL.

Код на салфетке x Кусочки кода
10🔥8🤡1
Вхожу в IT - telegram bot (часть 1)
Автор: Eugene Kaddo

Данная статья открывает цикл статей о том как я вхожу в IT product уровня в сфере Telegram ботов на aiogram3. Тут я описываю сложности вхождения в коммерческий мир IT, высказываю свои мысли, рассказываю через какие трудности приходится пройти на старте продуктовой карьеры в IT.


Читать пост в Telegram

Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram

#Python #Стажировка #Бот #Aiogram #Курсы #Путь_в_IT #Обучение
🔥1031
Приветствую

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

Фильм: Репродукция

Год: 2018

Талантливый учёный-биолог теряет в автокатастрофе свою семью. Одержимый желанием вернуть к жизни жену и детей, он преступает законы научной этики и самой природы.

Приятного просмотра и до встречи на следующей неделе с новым кинопостом!
10🔥7
Что выведет этот код? №40

Задача:
Вы пишете асинхронную программу для запросов к API с таймаутами. Вам нужно, чтобы программа продолжала работу даже при возникновении таймаутов. Коллега предложил добавить логирование успешных запросов. Посмотрите на код, как думаете, что он выведет?
🔥6
🚀 Приглашаем на контест по разработке микросервиса!

Готовы проверить свои навыки программирования? Мы запускаем контест по разработке микросервиса для работы с API сайта статей. Ваше задание – создать сервис, который будет собирать данные о просмотрах статей, строить прогнозы и визуализировать данные в виде графиков.

🌟 Ваша задача:

• Реализовать запросы к API и сохранение данных.
• Построить прогнозы просмотров и графики.
• Отправить результаты через обратный API.

Контест будет проходить в течение 7-ми дней и вот как мы это видим:

День 1:
Мы проводим вводный стрим, на котором:
- познакомимся с участниками;
- покажем и объясним техническое задание;
- проведем небольшую лайв-кодинг сессию;
- создадим в телеграмм группу для участников контеста, в которой по ходу подготовки к контеста будем отвечать на возникающие вопросы;

День 2-6:
Каждый участник в своем темпе разрабатывает необходимый функционал и по мере готовности сдает проект

День 7:
Мы проводим заключительный стрим, на котором:
- подведем итоги;
- проведем код-ревью;
- соберем обратную связь;

Ну, а чтобы было чем занять свою голову до контеста - каждый день мы будем публиковать блиц-вопросы (как тот, что прикреплен к этому анонсу), которые помогут понять к чему следует готовиться

Для того, чтобы принять участие в контесте необходимо пройти регистрацию по ссылке.

Это отличная возможность прокачать навыки работы с API, базами данных и контейнеризацией! 💪

По окончании контеста, мы пригласим несколько человек в нашу Мастерскую Салфетки, где будем работать над совместными проектами и изучать новое.
🔥11👍21😁1
Напиши свой ответ в комментариях. Если ты знаешь правильный ответ, то мы будем рады видеть тебя на нашем контесте.
🔥9
Разберём вчерашнюю задачу на асинхронное программирование, где нужно запрашивать данные с нескольких API, логируя как успешные, так и неудачные запросы с таймаутами.

Задача:
Вы пишете асинхронную программу для запросов к API с таймаутами. Вам нужно, чтобы программа продолжала работу даже при возникновении таймаутов. Коллега предложил добавить логирование успешных запросов. Посмотрите на код, как думаете, что он выведет?

Код задачи:
import asyncio

async def fetch_data(api_name, delay):
await asyncio.sleep(delay)
if delay > 1:
raise asyncio.TimeoutError(f"Timeout for {api_name}")
return api_name

async def log_api_calls():
apis = [("API_1", 0.5), ("API_2", 1.5), ("API_3", 0.3)]
tasks = [fetch_data(api, delay) for api, delay in apis]

for task in asyncio.as_completed(tasks):
try:
api_name = await task
print(f"Logged: {api_name} success")
except asyncio.TimeoutError as e:
print(f"Logged error: {str(e)}")

asyncio.run(log_api_calls())


Разбор задачи:
1. Основная логика работы функции `fetch_data`:
- Эта асинхронная функция принимает два аргумента: api_name (название API) и delay (задержка перед выполнением).
- Функция "спит" указанное количество секунд с помощью await asyncio.sleep(delay).
- Если задержка больше 1 секунды, вызывается исключение asyncio.TimeoutError с сообщением о таймауте для конкретного API.
- Если задержка меньше или равна 1, функция возвращает название API.

2. Асинхронная обработка в `log_api_calls`:
- Мы создаём список API с задержками: apis = [("API_1", 0.5), ("API_2", 1.5), ("API_3", 0.3)].
- Для каждого API создаётся задача (task) вызова функции fetch_data. Эти задачи запускаются "параллельно" благодаря конструкции tasks = [fetch_data(api, delay) for api, delay in apis].
- Далее цикл asyncio.as_completed(tasks) перебирает задачи по мере их завершения. Это полезно для того, чтобы мы могли обрабатывать результаты задач в том порядке, в котором они завершились, а не в том, в котором они были созданы.

3. Логирование успешных запросов и ошибок:
- В цикле мы ожидаем завершения каждой задачи с помощью await task. Если задача успешно завершена, выводится сообщение: Logged: {api_name} success.
- Если задача завершается исключением asyncio.TimeoutError, мы перехватываем его и выводим сообщение об ошибке.

Что выведет программа:
1. API_1 с задержкой 0.5 секунд завершится успешно:
- Logged: API_1 success.

2. API_2 с задержкой 1.5 секунд вызовет таймаут:
- Logged error: Timeout for API_2.

3. API_3 с задержкой 0.3 секунды завершится успешно:
- Logged: API_3 success.

Итоговый вывод:
Logged: API_3 success
Logged error: Timeout for API_2
Logged: API_1 success


Пояснение:
Так как asyncio.as_completed(tasks) возвращает задачи по мере их завершения, порядок вывода не соответствует порядку запуска запросов. Мы видим, что сначала завершился запрос с минимальной задержкой (API_3), потом произошёл таймаут для API_2, а завершение API_1 произошло последним, так как его задержка чуть больше, чем у API_3, но меньше, чем у API_2.

Асинхронное программирование помогает запускать задачи "параллельно", не ожидая завершения каждой из них по порядку. Это делает работу с запросами более эффективной, так как мы не блокируем основной поток программы, дожидаясь ответа от каждого API.


P.S. На прошлой неделе было много всего и разбора не было, выложу его на неделе, если он нужен, т.к. позапрошлая задача действительно очень простая.
🔥5👍2
Напиши свой ответ в комментариях. Если ты знаешь правильный ответ, то мы будем рады видеть тебя на нашем контесте.
🔥7
Привет, друзья!

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

Понедельник (30.09.2024) Дайджест за предыдущую неделю

Вторник (01.10.2024) Знаете ли вы, как глобальная блокировка интерпретатора (GIL) влияет на многопоточность в Python?

Среда (02.10.2024)

Четверг (03.10.2024) Вхожу в IT - telegram bot (часть 1)

Пятница (04.10.2024) Пятничный кинорелакс

Суббота (05.10.2024) Задача и Приглашение на контест по разработке микросервиса

Воскресенье (06.10.2024) Текстовый разбор задачи


Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!

С уважением,
Команда канала "Код на салфетке".

#дайджест #материалы #новости #код_на_салфетке
🔥7👍3
Напиши свой ответ в комментариях. Если ты знаешь правильный ответ, то мы будем рады видеть тебя на нашем контесте.
🔥4
Знаете ли вы, как Namespace и cgroups обеспечивают изоляцию в контейнеризации?

Namespace и cgroups — это фундаментальные механизмы, используемые в контейнеризации для обеспечения изоляции и управления ресурсами приложений. Namespace изолирует различные аспекты системы, такие как процессы, сети, файловые системы и идентификаторы пользователей, создавая отдельные пространства для каждого контейнера, гарантируя, что процессы внутри контейнера не могут взаимодействовать или видеть процессы за его пределами.

Cgroups (control groups) управляют распределением системных ресурсов между контейнерами, такими как процессорное время, память, дисковая I/O и сетевые ресурсы. С помощью cgroups можно задавать лимиты на использование ресурсов, обеспечивая справедливое распределение и предотвращая чрезмерное потребление ресурсов одним контейнером. Вместе Namespace и cgroups обеспечивают надежную и эффективную изоляцию, позволяя контейнеризированным приложениям работать независимо и безопасно в масштабируемых средах.

Код на салфетке x Кусочки кода
🔥6