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

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

Реклама и взаимопиар: @Murzyev1995
Сотрудничество и др.: @proDreams
Download Telegram
Вхожу в 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
Напиши свой ответ в комментариях. Если ты знаешь правильный ответ, то мы будем рады видеть тебя на нашем контесте.
🔥3
Напиши свой ответ в комментариях. Если ты знаешь правильный ответ, то мы будем рады видеть тебя на нашем контесте.
🔥2
Obsidian LiveSync - совместная работа над проектной документацией
Автор: Иван Ашихмин

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


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

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

#Гайды #Полезные_инструменты #Obsidian #LiveSync #плагины_Obsidian #Синхронизация_заметок
🔥7❤‍🔥1👌1
Напиши свой ответ в комментариях. Если ты знаешь правильный ответ, то мы будем рады видеть тебя на нашем контесте.
🔥3
Привет, друзья!

Снова пятница, а это значит, что настало время для нашего традиционного кинопоста!

Этот современный триллер рассказывает историю талантливого переводчика, который неожиданно оказывается втянутым в опасные международные интриги. Фильм наполнен напряженными моментами, острыми сюжетными поворотами и глубокими размышлениями о языке, культуре и доверии.

Фильм: Переводчик

Год: 2023

Во время спецоперации по поиску оружия талибов отряд сержанта Джона Кинли попадает в засаду. В живых остаются только сам Джон и местный переводчик Ахмед. Очнувшись на родине, Кинли не помнит, как ему удалось выжить, но понимает, что именно Ахмед спас ему жизнь, протащив на себе через опасную территорию. Теперь чувство вины не даёт Джону покоя, и он решает вернуться за Ахмедом и его семьёй, которых в Афганистане усиленно ищут талибы.

Приятного просмотра!
🔥8💩21🌚1
Напиши свой ответ в комментариях. Если ты знаешь правильный ответ, то мы будем рады видеть тебя на нашем контесте.
🔥3
Что выведет этот код? №41

Задача:

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

Посмотрите на код ниже и определите, что будет выведено:
🔥3
Напиши свой ответ в комментариях. Если ты знаешь правильный ответ, то мы будем рады видеть тебя на нашем контесте.
🔥2🤔1