Событие, которое точно стоит твоего внимания — PyCon Russia 2025 уже через неделю!
Это крупнейшая конференция по Python в России, где за два дня ты:
— узнаешь, как другие решают задачи, которые тебе тоже знакомы;
— услышишь доклады уровня middle+ и выше — без воды и маркетинга;
— пообщаешься с теми, кто пишет читаемый код, думает о проде и уважает import this.
Москва, 25–26 июля
2 трека (Python и Data), 3 воркшопа, живая программа, афтепати в первый день.
Вся программа и билеты на сайте, а общение в чате PyCon.
Реклама. ООО "Душевные конференции", ИНН 6671291133
Это крупнейшая конференция по Python в России, где за два дня ты:
— узнаешь, как другие решают задачи, которые тебе тоже знакомы;
— услышишь доклады уровня middle+ и выше — без воды и маркетинга;
— пообщаешься с теми, кто пишет читаемый код, думает о проде и уважает import this.
Москва, 25–26 июля
2 трека (Python и Data), 3 воркшопа, живая программа, афтепати в первый день.
Вся программа и билеты на сайте, а общение в чате PyCon.
Реклама. ООО "Душевные конференции", ИНН 6671291133
🔥2✍1
pyleak | Контроль утечек памяти
Минималистичная библиотека для поиска утечек памяти умеет группировать утекшие объекты по типу, упрощая диагностику. Основной интерфейс — контекстный менеджер
Репозиторий проекта
#инструмент
@zen_of_python
Минималистичная библиотека для поиска утечек памяти умеет группировать утекшие объекты по типу, упрощая диагностику. Основной интерфейс — контекстный менеджер
leak_checker()
, который можно легко встроить в тесты или отладочные блоки. Отличный выбор для тех, кто хочет контролировать потребление памяти без тяжёлых инструментов.Репозиторий проекта
#инструмент
@zen_of_python
👍3🌚1
Построчная безопасность (Row-Level Security) в SQL
RLS — одна из ключевых функций SQL, позволяющая реализовать контроль доступа на уровне отдельных строк таблицы. Вместо того чтобы писать сложные фильтры в каждом запросе, вы можете централизованно задать политику безопасности, которая будет автоматически применяться при чтении или изменении данных. Это упрощает архитектуру приложений и делает защиту данных более надежной.
Зачем это нужно
Обычно контроль доступа к данным реализуется в коде приложения. Например, чтобы пользователи видели только свои записи, вы добавляете фильтр
С помощью RLS вы перекладываете этот контроль внутрь базы данных. БД сама будет фильтровать строки в зависимости от настроек безопасности — даже если разработчик забудет что-то учесть в запросе.
Как работает RLS
Механизм реализуется через два ключевых механизма:
— Функция фильтрации определяет, какие строки доступны пользователю;
— Политика безопасности (Security Policy) привязывает эту функцию к конкретной таблице и операциям (SELECT, INSERT, UPDATE, DELETE).
Когда вы выполняете запрос к таблице с активной политикой RLS, SQL неявно вызывает фильтрующую функцию для каждой строки и исключает те, доступ к которым запрещён.
Пример
Шаг 1: Подготовка таблицы
Шаг 2: Создание функции фильтрации
Эта функция возвращает строку только в том случае, если регион совпадает с регионом, записанным в сессии.
Шаг 3: Создание политики безопасности
Теперь каждый запрос к таблице
Шаг 4: Установка параметра в сессии
Advanced RLS: Безопасность
Можно создать отдельную блокирующую политику (Block Predicate), чтобы запретить изменения недопустимых строк:
Теперь пользователь не сможет вставить или изменить строку, если не имеет на это права.
#основы
RLS — одна из ключевых функций SQL, позволяющая реализовать контроль доступа на уровне отдельных строк таблицы. Вместо того чтобы писать сложные фильтры в каждом запросе, вы можете централизованно задать политику безопасности, которая будет автоматически применяться при чтении или изменении данных. Это упрощает архитектуру приложений и делает защиту данных более надежной.
Зачем это нужно
Обычно контроль доступа к данным реализуется в коде приложения. Например, чтобы пользователи видели только свои записи, вы добавляете фильтр
WHERE user_id = @current_user
. Но что, если по какой-то причине фильтр не применится? Чувствительные данные могут стать «достоянием общественности».С помощью RLS вы перекладываете этот контроль внутрь базы данных. БД сама будет фильтровать строки в зависимости от настроек безопасности — даже если разработчик забудет что-то учесть в запросе.
Как работает RLS
Механизм реализуется через два ключевых механизма:
— Функция фильтрации определяет, какие строки доступны пользователю;
— Политика безопасности (Security Policy) привязывает эту функцию к конкретной таблице и операциям (SELECT, INSERT, UPDATE, DELETE).
Когда вы выполняете запрос к таблице с активной политикой RLS, SQL неявно вызывает фильтрующую функцию для каждой строки и исключает те, доступ к которым запрещён.
Пример
Шаг 1: Подготовка таблицы
CREATE TABLE Sales (
Id INT,
Amount MONEY,
Region NVARCHAR(50)
);
Шаг 2: Создание функции фильтрации
CREATE FUNCTION fn_securitypredicate(@Region AS NVARCHAR(50))
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS result WHERE @Region = SESSION_CONTEXT(N'region');
Эта функция возвращает строку только в том случае, если регион совпадает с регионом, записанным в сессии.
Шаг 3: Создание политики безопасности
CREATE SECURITY POLICY SalesFilter
ADD FILTER PREDICATE dbo.fn_securitypredicate(Region) ON dbo.Sales
WITH (STATE = ON);
Теперь каждый запрос к таблице
Sales
автоматически фильтруется.Шаг 4: Установка параметра в сессии
EXEC sp_set_session_context 'region', 'West';
SELECT * FROM Sales; -- покажет только строки с Region = 'West'
Advanced RLS: Безопасность
Можно создать отдельную блокирующую политику (Block Predicate), чтобы запретить изменения недопустимых строк:
CREATE FUNCTION fn_blockpredicate(@Region AS NVARCHAR(50))
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS result WHERE @Region = SESSION_CONTEXT(N'region');
CREATE SECURITY POLICY SalesBlocker
ADD BLOCK PREDICATE dbo.fn_blockpredicate(Region) ON dbo.Sales
AFTER INSERT, UPDATE
WITH (STATE = ON);
Теперь пользователь не сможет вставить или изменить строку, если не имеет на это права.
#основы
🔥6❤1✍1
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
В сети мельтешит мини-тренд «Алфавиты от ChatGPT», и админы заморочились на питоническую версию такого, со встроенными модулями, фреймворками, библиотеками и прочими технологиями. Что бы такого поставить на букву Y?
#кек
@zen_of_python
#кек
@zen_of_python
👍4
@pyainter_bot | ИИ-тренер по Python
Разработчики, которые доводят свои пет-проекты до ума, существуют... Один из них создал питонического тренера в Telegram для собеседований. Среди фичей:
— Система начисления очков;
— Множество разделов (Основы Python, ООП, Базы данных, Тестирование и проч.);
— Режим «злого учителя»: бот гоняет вас на слабые темы;
Проект опенсорсный. Если вам захотелось выставить свою LLM и задать ей свои промты, дерзайте.
Репозиторий проекта
#инструмент #собеседование
@zen_of_python
Разработчики, которые доводят свои пет-проекты до ума, существуют... Один из них создал питонического тренера в Telegram для собеседований. Среди фичей:
— Система начисления очков;
— Множество разделов (Основы Python, ООП, Базы данных, Тестирование и проч.);
— Режим «злого учителя»: бот гоняет вас на слабые темы;
Проект опенсорсный. Если вам захотелось выставить свою LLM и задать ей свои промты, дерзайте.
Репозиторий проекта
#инструмент #собеседование
@zen_of_python
❤🔥5👎2❤1
10 библиотек Python, которые меняют карьеру
В топе по версии Tproger оказались не новинки, а самая настоящая база. Даже в рамках Python-специальностей (Fullstack Python Developer, Data Scientist, Data Engineer и проч.) есть общий для всех знаменатель — pandas, FastAPI, Django. Взгляните, кто еще попал в подборку, там найдутся и новые «убийцы» привычных технологий.
#инструмент
@zen_of_python
В топе по версии Tproger оказались не новинки, а самая настоящая база. Даже в рамках Python-специальностей (Fullstack Python Developer, Data Scientist, Data Engineer и проч.) есть общий для всех знаменатель — pandas, FastAPI, Django. Взгляните, кто еще попал в подборку, там найдутся и новые «убийцы» привычных технологий.
#инструмент
@zen_of_python
👍3❤1🤔1
Forwarded from Типичный программист
Goalkicker: сайт с бесплатными папирами по программированию
Ресурс объединяет сотни PDF-книг по языкам и технологиям: Python, Go, JavaScript, C#, SQL, Docker и десятки других тем. Книги созданы на основе самых полезных ответов Stack Overflow, регулярно обновляются и доступны абсолютно бесплатно.
Так что если нужен быстрый чеклист, подсказка или мини-учебник — вот оно.
Ресурс объединяет сотни PDF-книг по языкам и технологиям: Python, Go, JavaScript, C#, SQL, Docker и десятки других тем. Книги созданы на основе самых полезных ответов Stack Overflow, регулярно обновляются и доступны абсолютно бесплатно.
Так что если нужен быстрый чеклист, подсказка или мини-учебник — вот оно.
🔥3👍1
TorchLeet | Литкод про PyTorch
Момент настал, и вы достаточно хардкорный питонист, чтобы осваивать PyTorch, со сложной документацией и безграничными возможностями. Если ваша цель — создать свою ChatGPT, вам точно понадобится хорошо знать этот фреймворк, и с этим поможет опенсорсный специализированный 'LeetCode'. Задачи разделены на четыре уровня сложности, среди тем: функция активации, потери, CNN, RNN, LSTM и даже LLM.
#инструмент
@zen_of_python
Момент настал, и вы достаточно хардкорный питонист, чтобы осваивать PyTorch, со сложной документацией и безграничными возможностями. Если ваша цель — создать свою ChatGPT, вам точно понадобится хорошо знать этот фреймворк, и с этим поможет опенсорсный специализированный 'LeetCode'. Задачи разделены на четыре уровня сложности, среди тем: функция активации, потери, CNN, RNN, LSTM и даже LLM.
#инструмент
@zen_of_python
✍1👍1
Почему некоторые исключения не попадают в лог и как это исправить
Если да — вы столкнулись с одной из малозаметных, но опасных особенностей Python — «непойманные исключения» (
В этом посте мы разберёмся, почему такое вообще случается, как надежно логировать любые исключения.
Рассмотрим следующий код:
В консоли вы увидите traceback:
А в
Никакой информации об ошибке. И это сгенерирует вам часы работы.
Почему так происходит?
Библиотека logging в Python не логирует ошибки сама по себе: она просто предоставляет инструменты для записи. Если программа падает из-за исключения, и это исключение не обрабатывается в
Плохое (но распространённое) решение
Один из способов «поймать всё» — обернуть
Это сработает:
— Вы можете пропустить системные исключения (
— Такой код трудно масштабировать: оборачивать каждый
— Это маскирует архитектурные проблемы: непойманные исключения — это чаще всего баг, а не ожидаемое поведение.
Правильное решение:
Python дает глобально обрабатывать непойманные исключения —
Теперь, если запустить скрипт:
— В
— Вы будете уверены, что даже критические ошибки попадут в лог, прежде чем приложение завершится.
Когда в Python возникает исключение, и его никто не перехватывает, вызывается sys.excepthook(type, value, traceback). По умолчанию она просто печатает детали в
— Логировать ошибки;
— Отправлять оповещения (например, в Telegram или на почту);
— Снимать дампы или делать очистку.
#основы
logging
— это уже целый стандарт записи ошибок в Python. Ваше приложение запускается, сообщения попадают в лог. Но вдруг в продакшене приложение внезапно «падает», а в логах — тишина. Знакомо? Если да — вы столкнулись с одной из малозаметных, но опасных особенностей Python — «непойманные исключения» (
uncaught exceptions
).В этом посте мы разберёмся, почему такое вообще случается, как надежно логировать любые исключения.
Рассмотрим следующий код:
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(filename="output.log", level=logging.INFO)
logger.info("Application started")
1 / 0 # деление на ноль
В консоли вы увидите traceback:
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
А в
output.log
будет только:
INFO:__main__:Application started
Никакой информации об ошибке. И это сгенерирует вам часы работы.
Почему так происходит?
Библиотека logging в Python не логирует ошибки сама по себе: она просто предоставляет инструменты для записи. Если программа падает из-за исключения, и это исключение не обрабатывается в
try / except
, то встроенный модуль никак не участвует в этом процессе. Потому что стандартный Python-интерпретатор выводит непойманные исключения напрямую в stderr, минуя logging.Плохое (но распространённое) решение
Один из способов «поймать всё» — обернуть
main()
в try / except
:
def main():
logger.info("Application started")
1 / 0
try:
main()
except Exception as e:
logger.exception("Unhandled exception:")
Это сработает:
logger.exception()
запишет ошибку и трейсбек. Но есть минусы:— Вы можете пропустить системные исключения (
KeyboardInterrupt
и проч., если ловите Exception
, а не BaseException
;— Такой код трудно масштабировать: оборачивать каждый
main()
в каждом скрипте — дублирование;— Это маскирует архитектурные проблемы: непойманные исключения — это чаще всего баг, а не ожидаемое поведение.
Правильное решение:
sys.excepthook
Python дает глобально обрабатывать непойманные исключения —
sys.excepthook
:
import sys
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(filename="output.log", level=logging.INFO)
def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical(
"Uncaught exception. Application will terminate.",
exc_info=(exc_type, exc_value, exc_traceback)
)
sys.excepthook = handle_uncaught_exception
logger.info("Application started")
1 / 0
Теперь, если запустить скрипт:
— В
output.log
появится подробный трейсбек ошибки;— Вы будете уверены, что даже критические ошибки попадут в лог, прежде чем приложение завершится.
Когда в Python возникает исключение, и его никто не перехватывает, вызывается sys.excepthook(type, value, traceback). По умолчанию она просто печатает детали в
stderr
. Но вы можете управлять процессом:— Логировать ошибки;
— Отправлять оповещения (например, в Telegram или на почту);
— Снимать дампы или делать очистку.
#основы
🔥16❤2😎1
Нейросети в контенте: опрос
Многие из нас в прямой или иной форме создаем контент, будь то личный блог или написание кода для проекта. В Tproger проводят опрос о роли LLM в работе айтишников. Проходите, опрос даже немного познавательный. Результатами мы обязательно поделимся.
#опрос
@zen_of_python
Многие из нас в прямой или иной форме создаем контент, будь то личный блог или написание кода для проекта. В Tproger проводят опрос о роли LLM в работе айтишников. Проходите, опрос даже немного познавательный. Результатами мы обязательно поделимся.
#опрос
@zen_of_python
❤1🗿1
Вышел Python 3.14 RC1: релиз-кандидат с ускоренным интерпретатором
Вышел первый релиз-кандидат Python 3.14 — финальный релиз ожидается в октябре. Среди главных новинок:
— JIT-компилятор теперь работает не только на Linux, но и на macOS и Windows;
— Благодаря PEP 779 Python получает полную поддержку свободных потоков — это шаг к более эффективной многопоточности;
— Появились t-строки — новый синтаксис для шаблонов с переменными прямо внутри строк
— Добавлен модуль
#факт
@zen_of_python
Вышел первый релиз-кандидат Python 3.14 — финальный релиз ожидается в октябре. Среди главных новинок:
— JIT-компилятор теперь работает не только на Linux, но и на macOS и Windows;
— Благодаря PEP 779 Python получает полную поддержку свободных потоков — это шаг к более эффективной многопоточности;
— Появились t-строки — новый синтаксис для шаблонов с переменными прямо внутри строк
— Добавлен модуль
compression.zstd
для работы с алгоритмом Zstandard прямо «из коробки» и многое другое.#факт
@zen_of_python
❤🔥4🔥2❤1
Опрос от Tproger: LifeStyle
Если вы тоже хотите знать больше о подписчиках по соседству, пройдите опрос Tproger. Он не только про специализацию и грейд, но больше про окружающую айтишники жизнь. Результатами обязательно поделимся.
#опрос
@zen_of_python
Если вы тоже хотите знать больше о подписчиках по соседству, пройдите опрос Tproger. Он не только про специализацию и грейд, но больше про окружающую айтишники жизнь. Результатами обязательно поделимся.
#опрос
@zen_of_python