This media is not supported in your browser
VIEW IN TELEGRAM
Иногда тебе нужно выполнить подзапрос, который зависит от строки из внешнего запроса, например, выбрать последние покупки для каждого пользователя или самые дорогие товары из категории.
Обычный JOIN не справится, но есть мощный инструмент - LATERAL JOIN. Он позволяет вызывать подзапрос для каждой строки внешней таблицы, сохраняя контекст.
Этот приём часто заменяет громоздкие запросы или оконные функции и работает значительно быстрее на PostgreSQL.
Используй его, когда нужно сделать что-то «на лету» для каждой записи.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25👍11🔥4😢1
🤖 OpenTrack: Открытая система трекинга движений
OpenTrack — это кодовая база для трекинга движений гуманоидов, использующая MuJoCo для симуляции и поддерживающая многопроцессорное обучение. Проект ориентирован на исследование и разработку в области робототехники.
🚀 Основные моменты:
- Открытый исходный код для трекинга движений
- Поддержка многопроцессорного обучения
- Использует MuJoCo для симуляции
- Реализует различные сценарии обучения
📌 GitHub: https://github.com/GalaxyGeneralRobotics/OpenTrack
OpenTrack — это кодовая база для трекинга движений гуманоидов, использующая MuJoCo для симуляции и поддерживающая многопроцессорное обучение. Проект ориентирован на исследование и разработку в области робототехники.
🚀 Основные моменты:
- Открытый исходный код для трекинга движений
- Поддержка многопроцессорного обучения
- Использует MuJoCo для симуляции
- Реализует различные сценарии обучения
📌 GitHub: https://github.com/GalaxyGeneralRobotics/OpenTrack
❤9🔥5👍4
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("Все потоки завершены корректно.")
❤19👍4🔥3😁3
⚡️ Pytest markers: ускоряем разработку и тестирование
Когда проект растёт — часть тестов становится медленной (ML-тренировка, GPU-инференс, интеграционные проверки).
Pytest позволяет помечать такие тесты и запускать только нужные группы.
В примере:
-
-
-
Команды:
# Запустить только быстрые
pytest -m fast
# Запустить всё, кроме slow
pytest -m "not slow"
Идеально, когда нужно:
- быстро прогнать код перед пушем
- запускать тяжёлые тесты по расписанию/в CI
- разделить ML-тесты по ресурсам (CPU/GPU)
Используйте маркеры — и ваша разработка станет быстрее и чище 🧪⚙️
#pytest #python #testing #mlengineering #unittesting #devtools
Когда проект растёт — часть тестов становится медленной (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
👍12❤8🔥5
🧠 Дискретные диффузионные модели для генерации текста
Репозиторий предлагает аннотированную реализацию модели дискретной диффузии для генерации текста, основанную на архитектуре "baby GPT" от Андрея Карпаты. Используя подход денойзинга, модель восстанавливает и генерирует текст, обучаясь на примерах, таких как произведения Шекспира.
🚀 Основные моменты:
- Обучение на текстах с использованием дискретных диффузионных моделей.
- Параллельная генерация токенов вместо последовательной.
- Включает математическую основу и адаптацию существующих архитектур.
- Применение к различным наборам данных и настройкам модели.
📌 GitHub: https://github.com/ash80/diffusion-gpt
#python
Репозиторий предлагает аннотированную реализацию модели дискретной диффузии для генерации текста, основанную на архитектуре "baby GPT" от Андрея Карпаты. Используя подход денойзинга, модель восстанавливает и генерирует текст, обучаясь на примерах, таких как произведения Шекспира.
🚀 Основные моменты:
- Обучение на текстах с использованием дискретных диффузионных моделей.
- Параллельная генерация токенов вместо последовательной.
- Включает математическую основу и адаптацию существующих архитектур.
- Применение к различным наборам данных и настройкам модели.
📌 GitHub: https://github.com/ash80/diffusion-gpt
#python
❤8👍4🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Тестируй Python-код не «на ощупь», а через три уровня.
Сначала юнит-тесты для базовой логики, затем фикстуры для реального окружения (файлы, БД, HTTP-моки), и сверху — hypothesis для автоматического поиска скрытых багов.
Так тесты будут короткими, а покрытие и надёжность — максимальными.
Сначала юнит-тесты для базовой логики, затем фикстуры для реального окружения (файлы, БД, 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
🔥20❤8👍3😱2
This media is not supported in your browser
VIEW IN TELEGRAM
Теперь доступен полный стек для кастомизации и тонкой настройки модели:
- из видео в 3D-сцену за одну секунду
- преобразование ЛЮБОГО входа (картинка, видео, 3D-приоры) в ЛЮБОЙ выход: 3DGS, depth, камеры, normal-карты, point-cloud
- готовый код для обучения и свои пайплайны
Можно сразу пробовать онлайн-демо или собирать свою модель.
Демо: https://huggingface.co/spaces/tencent/HunyuanWorld-Mirror
Код: https://github.com/Tencent-Hunyuan/HunyuanWorld-Mirror
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍6🔥3😱1
Почему «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/
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/
👍15🔥7❤6
В продакшене важно правильно сигнализировать системе об успехе или ошибке.
В Python это делается через sys.exit(<код>):
0 — успешное завершение
неноль — ошибка, которую может поймать CI/CD, Docker, cron или любой supervisor
В примере выше try/except использует это правило:
- при ошибке деления выводится сообщение и скрипт завершается с кодом 1
- при успешной операции — вывод “Operation successful!” и код 0
Такой паттерн обязателен для CLI-утилит, сервисных скриптов, пайплайнов и автоматизации: он делает выполнение предсказуемым и даёт внешним системам корректно реагировать на сбои.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤6🔥4🤩1
Что умеет:
- следит за локальными и удалёнными Docker-хостами в одном окне
- умно перезапускает контейнеры с настраиваемой логикой повторов
- шлёт алерты в Telegram, Slack, Discord, Gotify и почту
- обновляет контейнеры по расписанию
- позволяет разворачивать Docker Run и Compose-пресеты прямо из UI
- показывает health-чеки и события в реальном времени
Github: https://github.com/darthnorse/dockmon
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤5👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Напиши функцию, которая распарсит вложенные структуры (списки, кортежи, множества, генераторы) в одну последовательность, но не трогает строки и не падает из-за циклов.
Вот как сделать это без рекурсии, только через стек:
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)))
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍7🔥4🤩2
⚡️ Rust vs Python - как найти баланс между скоростью и простотой
JetBrains выпустили подробный разбор, где сравнивают Python и Rust без фанатизма — по скорости, синтаксису, памяти, экосистеме, конкурентности и даже по карьерным сценариям.
Главный вывод: Python нужен там, где важна скорость разработки и богатая экосистема, Rust, когда критична производительность, безопасность и масштабируемость. Всё чаще их используют вместе: Python для логики, Rust для самых горячих участков.
Ключевые моменты
Рост и популярность
- Python уверенно расширяет аудиторию: быстрый вход, огромная экосистема, удобство для ML, веба и автоматизации.
- Rust годами остаётся самым любимым языком разработчиков — благодаря безопасности памяти, скорости и надёжности.
Типы и управление памятью
- Python — динамическая типизация и удобный GC: легко начать, но ошибки всплывают в рантайме.
- Rust — строгая типизация, система владения и заимствований, отсутствие GC: ошибки ловятся на этапе компиляции, производительность предсказуема.
Производительность и конкурентность
- Python ограничен GIL: хорош для I/O, но CPU-параллелизм требует multiprocessing или расширений.
- Rust не имеет GIL — настоящая параллельность, «бесстрашная» конкурентность и контроль безопасности компилятором.
Экосистема
- Python — PyPI, Jupyter, зрелые фреймворки для DS/ML, веба, автоматизации.
- Rust — Cargo и crates.io, сильная база для CLI, системного софта, WebAssembly.
Комбинация Python + Rust
- Тренд — ускорять Python-проекты Rust-модулями.
- Библиотеки типа pydantic-core или Ruff показывают огромный прирост скорости.
- PyO3 делает интеграцию очень простой: Rust-код можно вызывать как обычный Python-модуль.
Карьера
- Python - широкие вакансии, огромный спрос в данных и ML.
- Rust - меньше позиций, но выше специализация в инфраструктуре, системной разработке и высоконагруженных сервисах.
Как выбирать
- Нужна скорость разработки и гибкость — Python.
- Нужна производительность и надёжность — Rust.
- Нужны и то, и другое — гибридный подход Python + Rust.
Подробный разбор - в блоге JetBrains:
https://blog.jetbrains.com/rust/2025/11/10/rust-vs-python-finding-the-right-balance-between-speed-and-simplicity/
#Rust #Python #Programming #Backend #Performance
@pythonl
JetBrains выпустили подробный разбор, где сравнивают Python и Rust без фанатизма — по скорости, синтаксису, памяти, экосистеме, конкурентности и даже по карьерным сценариям.
Главный вывод: Python нужен там, где важна скорость разработки и богатая экосистема, Rust, когда критична производительность, безопасность и масштабируемость. Всё чаще их используют вместе: Python для логики, Rust для самых горячих участков.
Ключевые моменты
Рост и популярность
- Python уверенно расширяет аудиторию: быстрый вход, огромная экосистема, удобство для ML, веба и автоматизации.
- Rust годами остаётся самым любимым языком разработчиков — благодаря безопасности памяти, скорости и надёжности.
Типы и управление памятью
- Python — динамическая типизация и удобный GC: легко начать, но ошибки всплывают в рантайме.
- Rust — строгая типизация, система владения и заимствований, отсутствие GC: ошибки ловятся на этапе компиляции, производительность предсказуема.
Производительность и конкурентность
- Python ограничен GIL: хорош для I/O, но CPU-параллелизм требует multiprocessing или расширений.
- Rust не имеет GIL — настоящая параллельность, «бесстрашная» конкурентность и контроль безопасности компилятором.
Экосистема
- Python — PyPI, Jupyter, зрелые фреймворки для DS/ML, веба, автоматизации.
- Rust — Cargo и crates.io, сильная база для CLI, системного софта, WebAssembly.
Комбинация Python + Rust
- Тренд — ускорять Python-проекты Rust-модулями.
- Библиотеки типа pydantic-core или Ruff показывают огромный прирост скорости.
- PyO3 делает интеграцию очень простой: Rust-код можно вызывать как обычный Python-модуль.
Карьера
- Python - широкие вакансии, огромный спрос в данных и ML.
- Rust - меньше позиций, но выше специализация в инфраструктуре, системной разработке и высоконагруженных сервисах.
Как выбирать
- Нужна скорость разработки и гибкость — Python.
- Нужна производительность и надёжность — Rust.
- Нужны и то, и другое — гибридный подход Python + Rust.
Подробный разбор - в блоге JetBrains:
https://blog.jetbrains.com/rust/2025/11/10/rust-vs-python-finding-the-right-balance-between-speed-and-simplicity/
#Rust #Python #Programming #Backend #Performance
@pythonl
❤20👍9🔥2😁2
Forwarded from C# (C Sharp) programming
This media is not supported in your browser
VIEW IN TELEGRAM
🔹 300+ новых функций и почти 5000 исправлений ошибок
🔹 Интеграция с GitHub Copilot стала глубже: теперь он помогает в анализе, рефакторинге и генерации кода
🔹 Редизайн интерфейса — 11 новых цветовых тем, улучшенная навигация и читаемость
🔹 Производительность выросла: количество зависаний интерфейса снизилось на 50 %
🔹 Более 4000 расширений от Visual Studio 2022 полностью совместимы с новой версией
Самое время обновиться - новая версия ощутимо быстрее и умнее.
https://visualstudio.microsoft.com/downloads/
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥7👍4😢1
This media is not supported in your browser
VIEW IN TELEGRAM
В продвинутых asyncio-сетях главная редкая проблема — неконтролируемый рост буфера, когда клиент принимает данные слишком медленно. Python по умолчанию спокойно складывает мегабайты в память, пока сокет забит.
Решение - вручную ограничить размер буфера транспорта через `set write buffer limits и всегда ждать writer.drain. Тогда при медленном клиенте корутины просто «замрут» в drain(), а не раздуют памяиь.
Подписывайся, больше фишек каждый день !
пример контролируемой по памяти передачи данных
import asyncio
async def handle(reader, writer):
writer.transport.set_write_buffer_limits(high=500_000, low=200_000)
while True:
writer.write(b"x" * 65536)
await writer.drain() # остановит корутину, если клиент не успевает
async def main():
server = await asyncio.start_server(handle, "0.0.0.0", 8888)
async with server:
await server.serve_forever()
asyncio.run(main())
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍5🔥4😁2
Лаборатория eigen ai labs выпустила новую LoRA под названием Eigen-Banana. Она ориентирована на быстрые и точные правки изображений по текстовым подсказкам. Работает на высоких скоростях и хорошо понимает как английские, так и китайские запросы.
Важно: лицензия разрешает только некоммерческое использование.
Ссылка: https://huggingface.co/eigen-ai-labs/eigen-banana-qwen-image-edit
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥6👍3
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ ПРИЁМ ДЛЯ ГЛАДКОЙ ПЕРЕДАЧИ ДАННЫХ В ASYNCIO
В сетевом Python можно «мягко» ограничивать скорость передачи данных без троттлинга на уровне сокета.
Приём - отправлять данные кусками и вставлять короткий
Полезно в высоконагруженных стримерах.
@pythonl
В сетевом Python можно «мягко» ограничивать скорость передачи данных без троттлинга на уровне сокета.
Приём - отправлять данные кусками и вставлять короткий
await asyncio sleep после каждого drain(): это отдаёт управление циклу, даёт шанс другим корутинам и предотвращает монополизацию CPU. Полезно в высоконагруженных стримерах.
простой «мягкий» троттлинг передачи данных
import asyncio
CHUNK = 32_000
async def send_smooth(writer, data: bytes):
for i in range(0, len(data), CHUNK):
writer.write(data[i:i+CHUNK])
await writer.drain()
await asyncio.sleep(0) # отдаём управление циклу
async def handle(reader, writer):
payload = b"x" * 5_000_000
await send_smooth(writer, payload)
writer.close()
await writer.wait_closed()
async def main():
srv = await asyncio.start_server(handle, "0.0.0.0", 8888)
async with srv:
await srv.serve_forever()
asyncio.run(main())
@pythonl
❤12👍8🔥4🤩1
🔥 Подборка полезных ресурсов для программистов.
Здесь ты найдёшь всё это - коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonlbooks
Linux: t.iss.one/linuxacademiya
Devops: t.iss.one/DevOPSitsec
Собеседования DS: t.iss.one/machinelearning_interview
C++ t.iss.one/cpluspluc
Docker: t.iss.one/DevopsDocker
Хакинг: t.iss.one/linuxkalii
Data Science: t.iss.one/data_analysis_ml
Javascript: t.iss.one/javascriptv
C#: t.iss.one/csharp_1001_notes
Java: t.iss.one/java_library
Базы данных: t.iss.one/sqlhub
Python собеседования: t.iss.one/python_job_interview
Мобильная разработка: t.iss.one/mobdevelop
Golang: t.iss.one/Golang_google
React: t.iss.one/react_tg
Rust: t.iss.one/rust_code
ИИ: t.iss.one/vistehno
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Frontend: t.iss.one/front
Big Data: t.iss.one/bigdatai
МАТЕМАТИКА: t.iss.one/data_math
Kubernets: t.iss.one/kubernetc
Разработка игр: https://t.iss.one/gamedev
Haskell: t.iss.one/haskell_tg
Физика: t.iss.one/fizmat
💼 Папка с вакансиями: t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy
Папка Linux:https://t.iss.one/addlist/w4Doot-XBG4xNzYy
😆ИТ-Мемы: t.iss.one/memes_prog
🇬🇧Английский: t.iss.one/english_forprogrammers
🧠ИИ: t.iss.one/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.iss.one/addlist/BkskQciUW_FhNjEy
Сохрани себе, чтобы не потерять!
Здесь ты найдёшь всё это - коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonlbooks
Linux: t.iss.one/linuxacademiya
Devops: t.iss.one/DevOPSitsec
Собеседования DS: t.iss.one/machinelearning_interview
C++ t.iss.one/cpluspluc
Docker: t.iss.one/DevopsDocker
Хакинг: t.iss.one/linuxkalii
Data Science: t.iss.one/data_analysis_ml
Javascript: t.iss.one/javascriptv
C#: t.iss.one/csharp_1001_notes
Java: t.iss.one/java_library
Базы данных: t.iss.one/sqlhub
Python собеседования: t.iss.one/python_job_interview
Мобильная разработка: t.iss.one/mobdevelop
Golang: t.iss.one/Golang_google
React: t.iss.one/react_tg
Rust: t.iss.one/rust_code
ИИ: t.iss.one/vistehno
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Frontend: t.iss.one/front
Big Data: t.iss.one/bigdatai
МАТЕМАТИКА: t.iss.one/data_math
Kubernets: t.iss.one/kubernetc
Разработка игр: https://t.iss.one/gamedev
Haskell: t.iss.one/haskell_tg
Физика: t.iss.one/fizmat
💼 Папка с вакансиями: t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy
Папка Linux:https://t.iss.one/addlist/w4Doot-XBG4xNzYy
😆ИТ-Мемы: t.iss.one/memes_prog
🇬🇧Английский: t.iss.one/english_forprogrammers
🧠ИИ: t.iss.one/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.iss.one/addlist/BkskQciUW_FhNjEy
Сохрани себе, чтобы не потерять!
👍7❤5🔥2🤩1
⚡ Microsoft выкатили **amplifier** - новую экспериментальную платформу для сборки AI-инструментов без лишнего кода.
Что это:
- способ описать экспертный процесс в виде шагов и автоматически превратить его в работающий инструмент;
- возможность комбинировать такие инструменты между собой, создавая цепочки автоматизации;
- платформа для исследований, поэтому всё ещё активно меняется.
Чем хорош инструмент:
- позволяет быстро превращать повторяющиеся задачи в автономные AI-процессы;
- помогает строить «агентов» с ролями — исследователь, критик, исполнитель;
- снижает порог входа: достаточно описать логику, а не писать всю реализацию.
Это пока исследовательский проект, но потенциал — большой.
👉 Репозиторий: https://github.com/microsoft/amplifier
@pythonl
Что это:
- способ описать экспертный процесс в виде шагов и автоматически превратить его в работающий инструмент;
- возможность комбинировать такие инструменты между собой, создавая цепочки автоматизации;
- платформа для исследований, поэтому всё ещё активно меняется.
Чем хорош инструмент:
- позволяет быстро превращать повторяющиеся задачи в автономные AI-процессы;
- помогает строить «агентов» с ролями — исследователь, критик, исполнитель;
- снижает порог входа: достаточно описать логику, а не писать всю реализацию.
Это пока исследовательский проект, но потенциал — большой.
👉 Репозиторий: https://github.com/microsoft/amplifier
@pythonl
❤8👍8🔥2😁2
🧩 Удобная библиотека для логирования с контекстом
Unilogging упрощает процесс логирования в Python-приложениях, используя Dependency Injection для управления контекстом логов. Это позволяет легко отслеживать события, связанные с конкретными запросами, без необходимости передавать данные через все уровни приложения.
🚀Основные моменты:
- Логирование с использованием контекста для упрощения отслеживания запросов.
- Поддержка Dependency Injection для гибкости и удобства.
- Минимизация дублирования кода при передаче данных логирования.
- Интеграция с FastAPI и другими фреймворками.
📌 GitHub: https://github.com/goduni/unilogging
@pythonl
Unilogging упрощает процесс логирования в Python-приложениях, используя Dependency Injection для управления контекстом логов. Это позволяет легко отслеживать события, связанные с конкретными запросами, без необходимости передавать данные через все уровни приложения.
🚀Основные моменты:
- Логирование с использованием контекста для упрощения отслеживания запросов.
- Поддержка Dependency Injection для гибкости и удобства.
- Минимизация дублирования кода при передаче данных логирования.
- Интеграция с FastAPI и другими фреймворками.
📌 GitHub: https://github.com/goduni/unilogging
@pythonl
❤8👍5🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Хитрый трюк по работе со статикой
Если заранее посчитать ETag для статических файлов, сервер сможет мгновенно отвечать 304 Not Modified без чтения с диска. Это резко ускоряет отдачу статики на Python.
Если заранее посчитать ETag для статических файлов, сервер сможет мгновенно отвечать 304 Not Modified без чтения с диска. Это резко ускоряет отдачу статики на Python.
import os, hashlib
from http.server import SimpleHTTPRequestHandler, HTTPServer
STATIC = "static"
etag = {f: hashlib.md5(open(os.path.join(STATIC, f),"rb").read()).hexdigest()
for f in os.listdir(STATIC)}
class H(SimpleHTTPRequestHandler):
def end_headers(self):
name = self.path.lstrip("/")
if name in etag:
self.send_header("ETag", etag[name])
super().end_headers()
HTTPServer(("0.0.0.0", 8000), H).serve_forever()
❤19👍5🔥5😁3