Найти тему
За последний год канал сильно вырос, поэтому решил познакомиться со всеми новичками и начну с того, что обновлю свое представление Меня зовут Павлин Николай и я CTO в компании Nova. Мы разрабатываем hardware-решения для мониторинга состояния здоровья. Результаты нашего труда в виде компактного кардиомонитора можно купить на озоне Что произошло нового за последний год: 1) Разработали продукт на базе ИИ — киоучат, сейчас готовим крупный апдейт v.2 2) Попали в Сколково уже с Nova Cardio (до этого там был наш другой проект) 3) Готовим к выводу на рынок новый продукт в разрезе мониторинга сердца (ждите анонсов, будет актуально для широкой аудитории) Из моего прошлого опыта: - Участвовал в разработке автоматизированной системы по охране труда - Разрабатывал систему по обработке и визуализации данных с БПЛА в 3D - Привлек и провел проекты по разработки ИС для дочерних компаний Сбера и МТС - Преподавал 1.5 года в МТУСИ, а теперь там принимаю дипломы В свободное время с командой участвуем в хакатонах и побеждаем в них - для меня это не только соревнование, но и возможность протестировать новые идеи и подходы Хочу напомнить, что у нас есть группа для общения, а то похоже, мало кто о ней знает, но там я стараюсь отвечать на ваши вопросы Чтобы я выделил из своего видео-контента: Как выбрать клавиатуру для разработки Курс FastAPI Шаблон для FastAPI приложений Генератор промтов Курс по Docker Еще можно почитать статьи: Code Review Асинхронность Управление памятью И конечно скачать мою книжку по лучшим Python практикам Найти код из роликов можно на GitHub, а "подружиться" на LinkedIn Для тех, кому нравится, что я делаю, и хочет поддержать — всегда есть бусти, а у бустеров теперь еще есть и закрытый чат. Там вы получаете возможность смотреть видео раньше + уникальные видео, которые не выходят на ютубе БУСТЕРЫ, НЕ ЗАБЫВАЙТЕ В НЕГО ЗАЙТИ А вы давно здесь? Расскажите, как нашли канал и что вас в нем зацепило? Может, какое-то видео помогло решить проблему или статья натолкнула на новую идею? Делитесь в комментариях — интересно узнать, что для вас оказалось действительно полезным!
1 день назад
Продолжаем наполнять выходные видеоконтентом! В новом видео на boosty в свободном формате разбираем какие бывают PDF и самое важное - как быстро и правильно извлекать из них текстовые данные, которые потом можно передавать в LLM или использовать для других задач Я говорил ранее, что уникальные видео для Boosty будут выходить для подписчиков уровня повыше (премиум), но в отпуск одно видео пропустили, хоть потом и вышел очень крутой ролик про Celery Поэтому решил для этого видео убить двух зайцев: - Сначала делаем его доступным для всех текущих подписчиков - Через пару дней он останется только для премиум-подписчиков Так что вроде и все посмотрят полезную тему, но уникальный контент остается уникальным Видео пригодится всем, кто решает задачи работы с LLM и стоит перед проблемой цифровизации PDF в целом. Тема более чем актуальная, потому что для работы с LLM часто приходится разбирать неструктурированные данные, а решения из коробки имеют свои недостатки, про которые как раз в видео и расскажу
2 дня назад
Хочу рассказать о Django 5.2 - версии, которая будет с LTS (long-term support). Для тех, кто использует Django в проде, это действительно важное обновление Что самого интересного добавили: - Наконец-то появилась поддержка составных первичных ключей, чего многие ждали годами - Исправили тот самый нюанс с аннотациями и values Видео уже на youtube Посмотреть уникальные видео на Boosty Посмотреть на Youtube
3 дня назад
В ответ на пост Вечером забыл приложить ссылку на github, с примерами можно ознакомиться и без просмотра видео
5 дней назад
Разбираем Celery на атомы: новое видео для подписчиков бусти На бусти вышло новое видео - Celery от А до Я! Полтора часа глубокого погружения в технологию, которая решает головную боль любого проекта с отложенными задачами Те, кто смотрел мой курс по Docker, поймут о чем я - это контент того же уровня, где мы не просто поверхностно касаемся темы, а разбираем все внутренности и подводные камни Что я раскрываю в этом видео: - Почему Redis или RabbitMQ и когда что выбирать - Как правильно интегрировать Celery с Django - Как настроить периодические задачи - Секреты настройки flower для мониторинга - Решения нюансов с воркерами, которые съедают всю память - Что делать, когда задачи просто исчезают из очереди Хотел выложить еще на прошлой неделе, но был в отпуске - ловите пару фото пальм в качестве компенсации за ожидание (я ведь своего рода еще и фотограф) Это видео буквально сэкономит вам дни на отладке и настройке - то, что я узнавал годами, упаковано в полтора часа концентрированного опыта Поддержать и посмотреть уникальные видео на Boosty Посмотреть на Youtube
5 дней назад
Асинхронное программирование в Python: от простого к сложному. Часть 3 Сегодня разберем интересную часть асинхронного программирования - примитивы синхронизации. Это инструменты, которые помогают нам управлять доступом к ресурсам и координировать работу корутин В этой части разберем: - Semaphore - Lock - Event - Condition Начнем с Semaphore - это механизм управления пулом ресурсов: async def process_data(semaphore, url): async with semaphore: # Ждем доступный слот в пуле async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.json() async def main(): # Максимум 10 одновременных подключений semaphore = asyncio.Semaphore(10) urls = [f"https://api.example.com/data/{i}" for i in range(100)] tasks = [process_data(semaphore, url) for url in urls] results = await asyncio.gather(*tasks) Практические применения Semaphore: - Ограничение количества одновременных запросов к API (избегаем бана) - Контроль количества одновременных подключений к базе данных - Ограничение параллельной загрузки файлов на сервер - Управление количеством одновременно обрабатываемых задач в пуле воркеров Lock - механизм взаимного исключения. Представьте, что у вас есть кэш, который может обновляться из разных корутин: class AsyncCache: def __init__(self): self.lock = asyncio.Lock() self.cache = {} async def get_data(self, key): # Чтение можно делать без блокировки if key in self.cache: return self.cache[key] # Обновление кэша требует взаимного исключения async with self.lock: # Проверяем еще раз после получения блокировки if key in self.cache: return self.cache[key] data = await fetch_expensive_data(key) self.cache[key] = data return data Практические применения Lock: - Защита кэша при конкурентных обновлениях - Атомарное обновление счетчиков (например, статистики) Event - механизм сигнализации. Пример: у вас есть несколько процессов, которые должны начать работу только после инициализации системы: async def worker(event, worker_id): print(f"Процесс {worker_id} ожидает инициализации системы") await event.wait() print(f"Процесс {worker_id} начал обработку") async def main(): # Создаем событие system_ready = asyncio.Event() # Запускаем обработчики workers = [asyncio.create_task(worker(system_ready, i)) for i in range(5)] # Инициализируем систему print("Загрузка конфигурации...") await load_config() print("Подключение к базе данных...") await init_database() # Сигнализируем о готовности системы system_ready.set() await asyncio.gather(*workers) Практические применения Event: - Синхронизация старта нескольких сервисов - Реализация паттерна publish-subscribe Condition - комбинация Lock и Event. Удобен, когда нужно ждать определенного условия: class ResourcePool: def __init__(self): self.condition = asyncio.Condition() self.available_resources = [] async def acquire_resource(self): async with self.condition: while not self.available_resources: # Ждем появления свободных ресурсов await self.condition.wait() return self.available_resources.pop() async def release_resource(self, resource): async with self.condition: self.available_resources.append(resource) # Уведомляем ожидающие корутины self.condition.notify() Практические применения Condition: - Управление пулом подключений к базе данных - Координация процессов обработки и подготовки данных В следующей части поговорим про продвинутую работу с Task и TaskGroup Поддержать и посмотреть уникальные видео на Boosty Посмотреть на Youtube
1 неделю назад
Тут без экспертизы не разобраться
2 недели назад
Асинхронное программирование в Python: от простого к сложному. Часть 2 Продолжаем разбираться с асинхронным программированием. В прошлый раз мы познакомились с базовыми концептами, а сегодня поговорим о задачах (Task) и главных инструментах для управления ими Начнем с самого важного - что такое Task? Task - это "обертка" вокруг корутины, которая позволяет: - Отслеживать состояние выполнения (запущена, завершена, отменена) - Получать результат выполнения - Управлять жизненным циклом (запуск, отмена, ожидание) - Обрабатывать ошибки У Task есть несколько полезных свойств и методов: task = asyncio.create_task(some_coro()) # Свойства таски print(task.done()) # Завершена ли задача print(task.cancelled()) # Была ли отменена print(task.get_name()) # Имя задачи print(task.get_coro()) # Получить корутину print(task._state) # Текущее состояние (PENDING, RUNNING, FINISHED, CANCELLED) # Методы управления task.cancel() # Отменить задачу task.set_name("my_task") # Установить имя result = await task # Дождаться результата Теперь про инструменты для работы с несколькими задачами. Их два основных: 1. gather() - когда нужно запустить все задачи параллельно и дождаться их результатов: # Запускаем все задачи параллельно results = await asyncio.gather( task1(), task2(), task3(), return_exceptions=True # Не падаем при ошибках ) # Результаты в том же порядке, что и задачи for result in results: if isinstance(result, Exception): print(f"Ошибка: {result}") else: process_result(result) 2. wait() - когда нужен более гибкий контроль: # Создаем задачи tasks = [ asyncio.create_task(long_operation1()), asyncio.create_task(long_operation2()), asyncio.create_task(long_operation3()) ] # Варианты return_when: # FIRST_COMPLETED - дождаться первой завершенной задачи # FIRST_EXCEPTION - дождаться первой ошибки или завершения всех задач # ALL_COMPLETED - дождаться завершения всех задач # Пример: ждем первую завершенную done, pending = await asyncio.wait( tasks, timeout=10, return_when=asyncio.FIRST_COMPLETED ) # Пример: ждем все с таймаутом done, pending = await asyncio.wait( tasks, timeout=5, return_when=asyncio.ALL_COMPLETED ) # Обработка результатов for task in done: try: result = task.result() process_result(result) except Exception as e: handle_error(e) # Отменяем незавершенные for task in pending: task.cancel() Про отмену задач: CancelledError возникает в трех случаях: - Явный вызов task.cancel() - Таймаут в wait() - Отмена родительской задачи Правильная обработка отмены: async def process_queue(): # Создаем подключение к базе db = await create_db_connection() # Создаем подзадачи для обработки worker_tasks = [] try: while True: # Получаем новые задания messages = await db.fetch_messages(limit=10) # Создаем задачи для обработки for msg in messages: task = asyncio.create_task( process_message(msg, db), name=f"worker-{msg.id}" ) worker_tasks.append(task) # Ждем немного перед следующей проверкой await asyncio.sleep(1) except asyncio.CancelledError: # 1. Отменяем все рабочие задачи for task in worker_tasks: if not task.done(): task.cancel() # 2. Ждем их завершение if worker_tasks: await asyncio.wait(worker_tasks) # 3. Закрываем соединение с БД await db.close() # 4. Пробрасываем отмену дальше raise В следующей части поговорим про управление ресурсами: Semaphore, Lock и Event Поддержать и посмотреть уникальные видео на Boosty Посмотреть на Youtube
2 недели назад
Сегодня на ютубе вышел ролик про то, как можно сделать Джанго асинхронной, если вы и пользуете DRF Уже успел появиться интересный комментарий по поводу Django ninja, если используете его, то могу посоветовать еще присмотреться к Django Shinobi - это форк ninja, но в котором пофикшены многие проблемы, которые висят в первом в issues Поддержать и посмотреть уникальные видео на Boosty Посмотреть на Youtube
2 недели назад
Запускаем Share.subscribe('premium') — официально В последнее время я заметил рост количества подписчиков на Boosty не только на базовом уровне за 175 рублей, но и на более высоких тарифах (отдельный респект тому, кто выбрал enterpriese , спасибо Андрей). Это натолкнуло меня на мысль, что пора создать дополнительный контент для тех, кто активно поддерживает канал. Что нового? Я принял решение выкладывать для уровня Share.subscribe('premium') видео, которые будут эксклюзивны для Boosty. На это есть две основные причины: 1) Личная — если вы выбираете этот уровень подписки, то вы уже знакомы с моим форматом, включая все его особенности: я люблю повторять по несколько раз важные моменты для лучшего запоминания, иногда объясняю даже базовые концепции и периодически переключаюсь на вебкамеру вместо кода. В этих эксклюзивных роликах для Boosty я не буду использовать стандартные "уловки YouTube" для повышения вовлеченности. Это позволит мне чуть больше быть собой + сэкономить время на монтаж 2) Профессиональная — я хочу делиться с вами темами, которые редко освещаются на YouTube, но очень востребованы в реальной разработке и могут быть полезны для ваших проектов Первое видео для premium-уровня уже на Boosty, и оно посвящено управлению уровнями доступа в Django REST Framework — теме, которая критически важна для любого коммерческого проекта! Разбираем следующие темы: - Как ограничивать видимость данных на уровне ORM - Продвинутые техники управления выводом с помощью сериалайзеров - Какую библиотеку мы используем у себя на проектах для гибкого управления разрешениями Важно отметить: эти видео когда-нибудь могут появиться в свободном доступе, но конкретных сроков я не устанавливаю Что с текущими подписчиками? Я понимаю, что может возникнуть вопрос: "Я подписался на обычный план, а теперь оказывается часть контента доступна только на более высоких уровнях?" Полностью понимаю эту озабоченность! Поэтому для всех текущих бустеров я подготовил специальную акцию: В течение этой недели вы можете бесплатно активировать премиум на один месяц. Обратите внимание на условия автопродления (не знаю, как они работают, бусти про это не пишет) — это не попытка заработать на вас несколько сотен рублей, а искреннее желание компенсировать появление нового уровня подписки. Акция будет активна только одну неделю Очевидный лайфхак, поэтому проговорю его сам: если вы хотите максимизировать соотношение "полученный контент / потраченные рубли" — можете подписаться в конце недели, а затем воспользоваться акцией, таким образом получится оформить подписку на 5 недель Поддержать и посмотреть уникальные видео на Boosty Посмотреть на Youtube
2 недели назад
Утилита для создания красивых скриншотов кода Часто видел, как делятся красиво оформленными кусочками кода, но никогда не вдавался в подробности, как они это делают Случайно нашел и делюсь с вами - ТЫК, пример красоты приложил в посту Поддержать и посмотреть уникальные видео на Boosty Посмотреть на Youtube
2 недели назад
О, мой любимый терминал теперь и на windows! Смело могу рекомендовать, тем более, что стал доступен не только для мако-линуховодов Про плюсы, которые выделяю для себя рассказывал в этом видео Ссылочка на скачку с моей рефералкой (я там уже срубил благодаря вам стикеры и футболку, сможем добить до толстовки?)
2 недели назад