🖥 PSF отвергла грант $1.5 млн на усиление безопасности PyPI
Python Software Foundation отказалась от гранта Национального научного фонда США на $1.5 млн из-за условий, запрещающих любые инициативы, которые продвигают или поддерживают DEI. Ограничение распространялось не только на работы по гранту, а на всю деятельность организации в период действия финансирования, что создавало юридические и финансовые риски.
Почему отказали:
- Условия противоречат миссии PSF, где ценности разнообразия, равенства и инклюзивности закреплены явно.
- В случае трактовки нарушения NSF может потребовать вернуть уже израсходованные средства.
- Организация не готова сворачивать DEI-политику ради получения финансирования.
На что планировалось потратить деньги:
- Построить проактивную защиту PyPI: проверка пакетов до публикации, а не после.
- Автоматическое ревью с анализом функциональности и сигнатур типовых вредоносных техник.
- Инструменты, пригодные для адаптации в других экосистемах пакетов вроде npm и crates.io.
Контекст:
- Сумма для PSF заметная: бюджет порядка нескольких миллионов долларов в год при небольшой команде.
- Отказ — это выбор в пользу долгосрочного доверия сообщества и сохранения открытой, инклюзивной культуры.
Вывод:
- Безопасность экосистемы — приоритет, но не ценой отказа от базовых принципов. PSF продолжит укреплять защиту цепочки поставки Python-пакетов без компромиссов с миссией.
Новость: https://pyfound.blogspot.com/2025/10/NSF-funding-statement.html
@Python_Community_ru
Python Software Foundation отказалась от гранта Национального научного фонда США на $1.5 млн из-за условий, запрещающих любые инициативы, которые продвигают или поддерживают DEI. Ограничение распространялось не только на работы по гранту, а на всю деятельность организации в период действия финансирования, что создавало юридические и финансовые риски.
Почему отказали:
- Условия противоречат миссии PSF, где ценности разнообразия, равенства и инклюзивности закреплены явно.
- В случае трактовки нарушения NSF может потребовать вернуть уже израсходованные средства.
- Организация не готова сворачивать DEI-политику ради получения финансирования.
На что планировалось потратить деньги:
- Построить проактивную защиту PyPI: проверка пакетов до публикации, а не после.
- Автоматическое ревью с анализом функциональности и сигнатур типовых вредоносных техник.
- Инструменты, пригодные для адаптации в других экосистемах пакетов вроде npm и crates.io.
Контекст:
- Сумма для PSF заметная: бюджет порядка нескольких миллионов долларов в год при небольшой команде.
- Отказ — это выбор в пользу долгосрочного доверия сообщества и сохранения открытой, инклюзивной культуры.
Вывод:
- Безопасность экосистемы — приоритет, но не ценой отказа от базовых принципов. PSF продолжит укреплять защиту цепочки поставки Python-пакетов без компромиссов с миссией.
Новость: https://pyfound.blogspot.com/2025/10/NSF-funding-statement.html
@Python_Community_ru
🤔3👍2
Управление мониторами с Monitor Control 🖥️
Приложение для управления внешними мониторами через системный трей. Позволяет настраивать яркость, громкость и переключать источники входа с плавной анимацией и поддержкой нескольких мониторов.
🚀Основные моменты:
- Управление яркостью и громкостью с анимацией
- Переключение между HDMI, DisplayPort и USB-C
- Поддержка нескольких мониторов
- Современный интерфейс в системном трее
- Автоматическое обновление информации о мониторах
📌 GitHub: https://github.com/Toxblh/Monic
@Python_Community_ru
Приложение для управления внешними мониторами через системный трей. Позволяет настраивать яркость, громкость и переключать источники входа с плавной анимацией и поддержкой нескольких мониторов.
🚀Основные моменты:
- Управление яркостью и громкостью с анимацией
- Переключение между HDMI, DisplayPort и USB-C
- Поддержка нескольких мониторов
- Современный интерфейс в системном трее
- Автоматическое обновление информации о мониторах
📌 GitHub: https://github.com/Toxblh/Monic
@Python_Community_ru
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 PostgreSQL: LATERAL JOIN
Иногда тебе нужно выполнить подзапрос, который зависит от строки из внешнего запроса, например, выбрать последние покупки для каждого пользователя или самые дорогие товары из категории.
Обычный JOIN не справится, но есть мощный инструмент - LATERAL JOIN. Он позволяет вызывать подзапрос для каждой строки внешней таблицы, сохраняя контекст.
Этот приём часто заменяет громоздкие запросы или оконные функции и работает значительно быстрее на PostgreSQL.
Используй его, когда нужно сделать что-то «на лету» для каждой записи.
@Python_Community_ru
Иногда тебе нужно выполнить подзапрос, который зависит от строки из внешнего запроса, например, выбрать последние покупки для каждого пользователя или самые дорогие товары из категории.
Обычный JOIN не справится, но есть мощный инструмент - LATERAL JOIN. Он позволяет вызывать подзапрос для каждой строки внешней таблицы, сохраняя контекст.
Этот приём часто заменяет громоздкие запросы или оконные функции и работает значительно быстрее на PostgreSQL.
Используй его, когда нужно сделать что-то «на лету» для каждой записи.
@Python_Community_ru
🤖 OpenTrack: Открытая система трекинга движений
OpenTrack — это кодовая база для трекинга движений гуманоидов, использующая MuJoCo для симуляции и поддерживающая многопроцессорное обучение. Проект ориентирован на исследование и разработку в области робототехники.
🚀 Основные моменты:
- Открытый исходный код для трекинга движений
- Поддержка многопроцессорного обучения
- Использует MuJoCo для симуляции
- Реализует различные сценарии обучения
📌 GitHub: https://github.com/GalaxyGeneralRobotics/OpenTrack
@Python_Community_ru
OpenTrack — это кодовая база для трекинга движений гуманоидов, использующая MuJoCo для симуляции и поддерживающая многопроцессорное обучение. Проект ориентирован на исследование и разработку в области робототехники.
🚀 Основные моменты:
- Открытый исходный код для трекинга движений
- Поддержка многопроцессорного обучения
- Использует MuJoCo для симуляции
- Реализует различные сценарии обучения
📌 GitHub: https://github.com/GalaxyGeneralRobotics/OpenTrack
@Python_Community_ru
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Python трюк: безопасное завершение потоков через флаг события
Многие просто daemon=True ставят и надеются, что всё само завершится. Но это ломает контроль и может привести к утечкам. Проще и надёжнее — использовать общий Event, чтобы уведомлять потоки о завершении.
import threading
import time
stop_event = threading.Event()
def worker():
while not stop_event.is_set():
print("Работаю...")
time.sleep(0.3)
print("Останавливаюсь корректно.")
thread = threading.Thread(target=worker)
thread.start()
time.sleep(1.2)
stop_event.set() # посылаем сигнал остановки
thread.join()
print("Все потоки завершены корректно.")
@Python_Community_ru
Многие просто daemon=True ставят и надеются, что всё само завершится. Но это ломает контроль и может привести к утечкам. Проще и надёжнее — использовать общий Event, чтобы уведомлять потоки о завершении.
import threading
import time
stop_event = threading.Event()
def worker():
while not stop_event.is_set():
print("Работаю...")
time.sleep(0.3)
print("Останавливаюсь корректно.")
thread = threading.Thread(target=worker)
thread.start()
time.sleep(1.2)
stop_event.set() # посылаем сигнал остановки
thread.join()
print("Все потоки завершены корректно.")
@Python_Community_ru
🔥2
⚡️ Pytest markers: ускоряем разработку и тестирование
Когда проект растёт — часть тестов становится медленной (ML-тренировка, GPU-инференс, интеграционные проверки).
Pytest позволяет помечать такие тесты и запускать только нужные группы.
В примере:
- @pytest.mark.fast — быстрые юнит-тесты
- @pytest.mark.slow — долгие тесты (например, обучение модели)
- @pytest.mark.gpu — тесты, требующие GPU
Команды:
# Запустить только быстрые
pytest -m fast
# Запустить всё, кроме slow
pytest -m "not slow"
Идеально, когда нужно:
- быстро прогнать код перед пушем
- запускать тяжёлые тесты по расписанию/в CI
- разделить ML-тесты по ресурсам (CPU/GPU)
Используйте маркеры — и ваша разработка станет быстрее и чище 🧪⚙️
#pytest #python #testing #mlengineering #unittesting #devtools
@Python_Community_ru
Когда проект растёт — часть тестов становится медленной (ML-тренировка, GPU-инференс, интеграционные проверки).
Pytest позволяет помечать такие тесты и запускать только нужные группы.
В примере:
- @pytest.mark.fast — быстрые юнит-тесты
- @pytest.mark.slow — долгие тесты (например, обучение модели)
- @pytest.mark.gpu — тесты, требующие GPU
Команды:
# Запустить только быстрые
pytest -m fast
# Запустить всё, кроме slow
pytest -m "not slow"
Идеально, когда нужно:
- быстро прогнать код перед пушем
- запускать тяжёлые тесты по расписанию/в CI
- разделить ML-тесты по ресурсам (CPU/GPU)
Используйте маркеры — и ваша разработка станет быстрее и чище 🧪⚙️
#pytest #python #testing #mlengineering #unittesting #devtools
@Python_Community_ru
👍1
Media is too big
VIEW IN TELEGRAM
Не ждали, а она тут — новая версия Python 3.14 🚀
И лучше просто кликнуть сейчас по ссылке и послушать краткий обзор от Евгения Афонасьева, тимлида разработки Antifraud в Авито, чем потом упускать полезные фичи и искать этот пост.
В ролике разобрали как небольшие обновления, так и те, что лучше внедрять в свою работу уже сейчас.
📺 Смотрим и обсуждаем по ссылке!
И лучше просто кликнуть сейчас по ссылке и послушать краткий обзор от Евгения Афонасьева, тимлида разработки Antifraud в Авито, чем потом упускать полезные фичи и искать этот пост.
В ролике разобрали как небольшие обновления, так и те, что лучше внедрять в свою работу уже сейчас.
Please open Telegram to view this post
VIEW IN TELEGRAM
🧠 Дискретные диффузионные модели для генерации текста
Репозиторий предлагает аннотированную реализацию модели дискретной диффузии для генерации текста, основанную на архитектуре "baby GPT" от Андрея Карпаты. Используя подход денойзинга, модель восстанавливает и генерирует текст, обучаясь на примерах, таких как произведения Шекспира.
🚀 Основные моменты:
- Обучение на текстах с использованием дискретных диффузионных моделей.
- Параллельная генерация токенов вместо последовательной.
- Включает математическую основу и адаптацию существующих архитектур.
- Применение к различным наборам данных и настройкам модели.
📌 GitHub: https://github.com/ash80/diffusion-gpt
#python
@Python_Community_ru
Репозиторий предлагает аннотированную реализацию модели дискретной диффузии для генерации текста, основанную на архитектуре "baby GPT" от Андрея Карпаты. Используя подход денойзинга, модель восстанавливает и генерирует текст, обучаясь на примерах, таких как произведения Шекспира.
🚀 Основные моменты:
- Обучение на текстах с использованием дискретных диффузионных моделей.
- Параллельная генерация токенов вместо последовательной.
- Включает математическую основу и адаптацию существующих архитектур.
- Применение к различным наборам данных и настройкам модели.
📌 GitHub: https://github.com/ash80/diffusion-gpt
#python
@Python_Community_ru
This media is not supported in your browser
VIEW IN TELEGRAM
Тестируй Python-код не «на ощупь», а через три уровня.
Сначала юнит-тесты для базовой логики, затем фикстуры для реального окружения (файлы, БД, HTTP-моки), и сверху — hypothesis для автоматического поиска скрытых багов.
Так тесты будут короткими, а покрытие и надёжность — максимальными.
import pytest
from hypothesis import given, strategies as st
# 1) Простой юнит-тест
def test_add():
assert add(2, 3) == 5
2) Фикстура для окружения (временный файл)
@pytest.fixture
def temp_file(tmp_path):
file_path = tmp_path / "data.txt"
file_path.write_text("42")
return file_path
def test_read_data(temp_file):
assert read_data(temp_file) == 42
3) Property-based тест (генерация случайных входных данных)
@given(st.integers(), st.integers())
def test_add_random(a, b):
assert add(a, b) == a + b
Быстрый запуск только упавших тестов:
pytest --lf
@Python_Community_ru
Сначала юнит-тесты для базовой логики, затем фикстуры для реального окружения (файлы, БД, HTTP-моки), и сверху — hypothesis для автоматического поиска скрытых багов.
Так тесты будут короткими, а покрытие и надёжность — максимальными.
import pytest
from hypothesis import given, strategies as st
# 1) Простой юнит-тест
def test_add():
assert add(2, 3) == 5
2) Фикстура для окружения (временный файл)
@pytest.fixture
def temp_file(tmp_path):
file_path = tmp_path / "data.txt"
file_path.write_text("42")
return file_path
def test_read_data(temp_file):
assert read_data(temp_file) == 42
3) Property-based тест (генерация случайных входных данных)
@given(st.integers(), st.integers())
def test_add_random(a, b):
assert add(a, b) == a + b
Быстрый запуск только упавших тестов:
pytest --lf
@Python_Community_ru
Почему «Async Django» часто решает не ту проблему
Django теперь умеет ASGI и async-views, но автор статьи отмечает: переход на async сам по себе почти ничего не ускоряет. Чтобы получить выгоду, весь код должен быть переписан под асинхронность, а в реальных проектах прирост обычно минимальный.
Где async реально нужен?
В задачах с большим количеством ожидания: внешние API, WebSockets, стриминг ответов. Там async даёт ощутимую экономию.
Но есть нюанс:
Django стал «двухрежимным» фреймворком - синхронные и асинхронные части живут рядом, усложняя архитектуру. ORM всё ещё в основном синхронная, и это становится бутылочным горлышком.
Поэтому для большинства проектов выгоднее оставить sync Django и вынести тяжёлые операции в фоновые задачи (Celery, RQ). Это проще, надёжнее и предсказуемее.
Итог:
Async Django - круто с инженерной точки зрения, но бизнес-ценность есть далеко не в каждом сценарии. Для большинства приложений классический Django остаётся лучшим выбором.
https://www.loopwerk.io/articles/2025/async-django-why/
@Python_Community_ru
Django теперь умеет ASGI и async-views, но автор статьи отмечает: переход на async сам по себе почти ничего не ускоряет. Чтобы получить выгоду, весь код должен быть переписан под асинхронность, а в реальных проектах прирост обычно минимальный.
Где async реально нужен?
В задачах с большим количеством ожидания: внешние API, WebSockets, стриминг ответов. Там async даёт ощутимую экономию.
Но есть нюанс:
Django стал «двухрежимным» фреймворком - синхронные и асинхронные части живут рядом, усложняя архитектуру. ORM всё ещё в основном синхронная, и это становится бутылочным горлышком.
Поэтому для большинства проектов выгоднее оставить sync Django и вынести тяжёлые операции в фоновые задачи (Celery, RQ). Это проще, надёжнее и предсказуемее.
Итог:
Async Django - круто с инженерной точки зрения, но бизнес-ценность есть далеко не в каждом сценарии. Для большинства приложений классический Django остаётся лучшим выбором.
https://www.loopwerk.io/articles/2025/async-django-why/
@Python_Community_ru
🖥 Аккуратный выход из Python-скриптов через sys.exit
В продакшене важно правильно сигнализировать системе об успехе или ошибке.
В Python это делается через sys.exit():
0 — успешное завершение
неноль — ошибка, которую может поймать CI/CD, Docker, cron или любой supervisor
В примере выше try/except использует это правило:
- при ошибке деления выводится сообщение и скрипт завершается с кодом 1
- при успешной операции — вывод “Operation successful!” и код 0
Такой паттерн обязателен для CLI-утилит, сервисных скриптов, пайплайнов и автоматизации: он делает выполнение предсказуемым и даёт внешним системам корректно реагировать на сбои.
@Python_Community_ru
В продакшене важно правильно сигнализировать системе об успехе или ошибке.
В Python это делается через sys.exit():
0 — успешное завершение
неноль — ошибка, которую может поймать CI/CD, Docker, cron или любой supervisor
В примере выше try/except использует это правило:
- при ошибке деления выводится сообщение и скрипт завершается с кодом 1
- при успешной операции — вывод “Operation successful!” и код 0
Такой паттерн обязателен для CLI-утилит, сервисных скриптов, пайплайнов и автоматизации: он делает выполнение предсказуемым и даёт внешним системам корректно реагировать на сбои.
@Python_Community_ru
🖥 Современная панель для мониторинга Docker-контейнеров в реальном времени
Что умеет:
- следит за локальными и удалёнными Docker-хостами в одном окне
- умно перезапускает контейнеры с настраиваемой логикой повторов
- шлёт алерты в Telegram, Slack, Discord, Gotify и почту
- обновляет контейнеры по расписанию
- позволяет разворачивать Docker Run и Compose-пресеты прямо из UI
- показывает health-чеки и события в реальном времени
Github: https://github.com/darthnorse/dockmon
@Python_Community_ru
Что умеет:
- следит за локальными и удалёнными Docker-хостами в одном окне
- умно перезапускает контейнеры с настраиваемой логикой повторов
- шлёт алерты в Telegram, Slack, Discord, Gotify и почту
- обновляет контейнеры по расписанию
- позволяет разворачивать Docker Run и Compose-пресеты прямо из UI
- показывает health-чеки и события в реальном времени
Github: https://github.com/darthnorse/dockmon
@Python_Community_ru
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Python задака
Напиши функцию, которая распарсит вложенные структуры (списки, кортежи, множества, генераторы) в одну последовательность, но не трогает строки и не падает из-за циклов.
Вот как сделать это без рекурсии, только через стек:
def flatten(obj):
stack = [obj]
seen = set()
while stack:
x = stack.pop()
if isinstance(x, (str, bytes)):
yield x
elif isinstance(x, (list, tuple, set)):
xid = id(x)
if xid in seen:
continue
seen.add(xid)
stack.extend(reversed(list(x)))
else:
yield x
# пример
data = [1, [2, 3], ("ab", [4, 5]), 6]
data.append(data) # создаём цикл
print(list(flatten(data)))
@Python_Community_ru
Напиши функцию, которая распарсит вложенные структуры (списки, кортежи, множества, генераторы) в одну последовательность, но не трогает строки и не падает из-за циклов.
Вот как сделать это без рекурсии, только через стек:
def flatten(obj):
stack = [obj]
seen = set()
while stack:
x = stack.pop()
if isinstance(x, (str, bytes)):
yield x
elif isinstance(x, (list, tuple, set)):
xid = id(x)
if xid in seen:
continue
seen.add(xid)
stack.extend(reversed(list(x)))
else:
yield x
# пример
data = [1, [2, 3], ("ab", [4, 5]), 6]
data.append(data) # создаём цикл
print(list(flatten(data)))
@Python_Community_ru