Python/ django
60.4K subscribers
2.12K photos
76 videos
48 files
2.85K links
по всем вопросам @haarrp

@itchannels_telegram - 🔥 все ит-каналы

@ai_machinelearning_big_data -ML

@ArtificialIntelligencedl -AI

@datascienceiot - 📚

@pythonlbooks

РКН: clck.ru/3FmxmM
Download Telegram
Что отличает настоящих профессионалов в аналитике данных?

Настоящие профессионалы в аналитике данных выделяются не просто техническими навыками, а глубоким пониманием бизнес-контекста. Они видят, как сухие цифры превращаются в стратегические решения, влияющие на прибыль компании и ее развитие.

Многие зацикливаются на изучении инструментов, упуская из виду главное — для чего эти инструменты нужны. Можно идеально владеть Python и SQL, но так и не научиться решать реальные бизнес-задачи.

Где учат аналитике, которая нужна бизнесу? В магистратуре НИУ ВШЭ и Karpov Courses «Аналитика больших данных». Посмотрите бесплатный вводный курс и узнайте, как строится программа и что даст вам диплом..

Спикеры курса — эксперты с реальным опытом: Анатолий Карпов (ex-VK, самый популярный эксперт в сфере аналитике, по данным NEWHR), Нерсес Багиян (Head of DS в Raiffeisen CIB) и другие.

Реклама. ООО "КАРПОВ КУРСЫ". ИНН 7811764627. erid: 2W5zFJaLkFa
🎨 MonsterUI — стильный UI для FastHTML на Python (от Answer.AI)

MonsterUI — это высокоуровневый слой поверх FastHTML, который позволяет быстро создавать красивые веб-интерфейсы на чистом Python без писанины HTML/CSS.

⚙️ Проблема
FastHTML и так упрощает фронтенд, но стильность UI требует громоздких классов или CSS-фреймворков (Tailwind, Bootstrap).
MonsterUI решает это, предоставляя готовые компоненты и умные настройки по умолчанию.

Главные возможности
• Полюбившиеся Tailwind/FrankenUI/DaisyUI скрылки под капотом
• Удобные базовые компоненты: Button, Card, LabelInput и др.
• Семантический текст и стили (H1, P, Blockquote, etc.), оформленные по умолчанию
• Умные layout-хелперы: DivVStacked, Grid, DivFullySpaced и другие
• «Высокоуровневые» компоненты: навбар, модалка, таблицы — готовые шаблоны
• Автоматический рендер Markdown и подсветка кода
• Темы с выбором цветовой схемы, поддержкой light/dark режимов

🚀 Пример компонента


def TeamCard(name, role, location="Remote"):
icons = ("mail", "linkedin", "github")
return Card(
DivLAligned(
DiceBearAvatar(name, h=24, w=24),
Div(H3(name), P(role))),
footer=DivFullySpaced(
DivHStacked(UkIcon("map-pin", height=16), P(location)),
DivHStacked(*(UkIconLink(icon, height=16) for icon in icons))))


Всё чисто, семантично, без CSS-уродства и классов.

🔧 Старт


pip install MonsterUI



from fasthtml.common import *
from monsterui.all import *

app, rt = fast_app(hdrs=Theme.blue.headers())

@rt
def index():
return Card(H1("Hello MonsterUI"), P("Приложение готово!"))

serve()


Преимущества:
• Быстрый старт с современным UI
• Чистый, читаемый Python-код
• Гибкость в кастомизации через Tailwind
• Подтверждённая пригодность в продакшене

🔗 Подробнее: https://www.answer.ai/posts/2025/01/15/monsterui.html

@pythonl

#Python #WebDev #FastHTML #MonsterUI #Tailwind #HTMX #UI #OpenSource
🐍 Python-задача: что выведет этот код с вложенными генераторами?


gen = (x for x in range(3))

def wrap(g):
return (x * 2 for x in g)

gen2 = wrap(gen)

print(list(gen))
print(list(gen2))


🔍 Варианты:
• a) [0, 1, 2], [0, 2, 4]
• b) [0, 1, 2], []
• c) [], [0, 2, 4]
• d) [0, 1, 2], Ошибка

💡 Разбор:

- `gen = (x for x in range(3))` — генератор 0, 1, 2
- `wrap(gen)` — создаёт **новый генератор**, который берёт значения из `gen` и умножает на 2

Но генераторы **исчерпаемы**: после первого полного прохода `list(gen)` → `gen` становится пустым

Значит:

- `list(gen)` → `[0, 1, 2]`
- `gen2 = wrap(gen)` теперь ссылается на **пустой** `gen`
- `list(gen2)` → `[]`

**Правильный ответ: b) `[0, 1, 2]`, `[]`**

🧠 **Вывод:** если оборачиваешь генератор — не "прожигай" его до передачи дальше. Генераторы нельзя перезапустить или "перемотать".

🛠️ Совет: если данные нужны повторно — сохрани их в список:

```
python
data = list(gen)
```

или используй itertools.tee для разветвления итератора.

@pythonl
This media is not supported in your browser
VIEW IN TELEGRAM
🌟 alphaXiv —выпустили расширение для хрома

alphaXiv упрощает работу с научными статьями (arXiv, bioRxiv, PDF):

● чат с ИИ прямо в документе: выделение текста открывает диалог
● ссылки на другие статье через “@” для быстрого вызова статей
● позволяет генерировать блог одним кликом: иллюстрации к статьям, ключевые идеи, перевод
● закладки и автоматические BibTeX-цитаты для хранения и ссылок

https://chromewebstore.google.com/detail/alphaxiv-understand-resea/liihfcjialakefgidmaadhajjikbjjab

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как написать ещё более ужасный Python-код: часть 2

Первая часть - Как написать худший возможный Python-код здесь.

Если тебе показалось, что хуже уже некуда — ты просто не включал всё сразу.

Вот продолжение правил, которые гарантируют страдания будущих читателей твоего кода.

14. Используй side‑effects везде
Изменяй список внутри функции, возвращай None, пусть никто не знает, что произошло.


def corrupt(data):
for i in range(len(data)):
data[i] = None

15. Ломай SRP (Single Responsibility Principle)
Пусть одна функция отправляет запрос, пишет лог, делает retry, парсит ответ и сохраняет в БД.


def handle_user_request(request):
log_request(request)
try:
response = requests.post(...)
save_to_db(json.loads(response.text)["data"])
except:
retry_later(request)


16. Используй вложенные функции ради хаоса
Функции в функциях в функциях. Замыкания? Да, но не ради пользы, а ради анархии.


def outer():
def middle():
def inner():
print("deep")
inner()
middle()


17. Импортируй всё звёздочкой
Пусть никто не знает, откуда приходят функции. Магия.


from somewhere.unknown import *


18. Используй случайную логику
Добавь random в бизнес-функции. Почему бы и нет?


import random

def calculate_discount():
return random.choice([0, 5, 10, 50])


19. Используй структуры не по назначению
Сохраняй все данные в строках. JSON, XML, дата, числа — всё строкой.


user = {
"name": "Alice",
"age": "27",
"is_active": "true",
"joined": "2023-12-01"
}


20. Игнорируй ошибки
Тихо, мирно, try/except без except. Или просто pass. Не паникуй.



try:
do_critical_operation()
except:
pass


21. Логируй всё подряд
Каждый шаг. Каждую переменную. Каждую мысль.


print("entering loop")
print("value of x:", x)
print("loop end")


22. Используй глобальные настройки через переменные
Никаких config-файлов. Пусть все настройки — глобальные переменные.


DEBUG_MODE = True
RETRY_COUNT = 3

23. Пиши асинхронный код синхронно
async с time.sleep, await с requests.get. Главное — выглядеть современно.


import time

async def fetch_data():
time.sleep(3)
return "data"

24. Храни всё в одной функции
1000 строк? Один def main(). Абсолютно всё. Другие функции — для слабаков.


def main():
# 600 строк бизнес-логики
pass



🧠 Заключение

Если ты следуешь этим правилам — ты либо пишешь код, который никто не осмелится менять,
либо работаешь на тёмной стороне. Но лучше всё же пересмотреть подход.

"Simple is better than complex.
Complex is better than complicated.
Readability counts."
— The Zen of Python

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
📦 InvenTree — умная система учета для мастерских и инженерных проектов. Этот open-source инструмент — достойная замена Excel, которая поможет вам перестать страдать от перегруженных корпоративных систем.

Инструмент предлагает продуманный баланс между простотой и функциональностью: отслеживание деталей, управление несколькими складами, работа с партиями и серийными номерами — всё в одном месте.
📌 Особенности проекта:
— Гибкая интеграция через REST API и Python-модули
— Мобильные приложения для iOS/Android со сканированием штрих-кодов
— Плагинная система для кастомизации под конкретные нужды
— Простой деплой — от Docker до однострочной установки на Linux

🤖 GitHub

@pythonl
🎭 Playwright MCP: AI-доступ к браузеру через Model Context Protocol

Playwright MCP — это сервер Model Context Protocol поверх Microsoft Playwright, который позволяет LLM управлять полноценным браузером через структурированные данные, а не по скриншотам.

Доступ к accessibility tree
– MCP-клиенты получают иерархию элементов страницы (кнопки, поля, ссылки) вместо изображений, что делает навигацию быстрой и детерминированной :contentReference[oaicite:0]{index=0}
Множественные подключения
– Поддержка нескольких клиентов к одной сессии: одновременное тестирование, отладка и мониторинг без лишних запусках браузера :contentReference[oaicite:1]{index=1}
AI-автогенерация тестов
– В режиме Agent Mode Playwright MCP может самостоятельно исследовать приложение и писать готовые тесты на основе его поведения :contentReference[oaicite:2]{index=2}
Высокая производительность
– Обходится без тяжёлых компьютерного зрения и OCR, экономит ресурсы и снижает флакущие ошибки сравнения скриншотов
Простая настройка
– Установка через npm/yarn и запуск:

npm install playwright
npx playwright launch --server

– Клиентское подключение через WebSocket:

const { chromium } = require('playwright');
const browser = await chromium.connectOverCDP('ws://localhost:PORT');


🔗 Репозиторий: https://github.com/microsoft/playwright-mcp

@pythonl
🛠️ Copier — удобный инструмент для создания и обновления проектов из шаблонов. Эта Python-утилита умеет работать как с локальными путями, так и с Git-репозиториями, подставляя переменные в файлы любого формата. Главная фишка Copier — это аккуратная работа с существующими файлами: он не перезаписывает их без явного указания.

Инструмент будет полезен тем, кто часто создаёт однотипные проекты или хочет автоматизировать их обновление. Шаблоны поддерживают сложную логику через Jinja2, а настройки задаются в простом YAML-формате. Для начала работы достаточно установить Copier через pipx или pip. Проект развивается при поддержке сообщества и доступен под лицензией MIT.

🤖 GitHub

@pythonl
🖥 5 необычных Python‑проекта для продвинутых разработчиков — которые можно собрать за выходные

Хочешь не просто пописать код, а взорвать мозг? Вот 5 уникальных идей, которые объединяют ИИ, терминальные интерфейсы, сетевое взаимодействие и системное программирование. Каждый проект можно собрать за 1–2 дня, если знаешь, с какой стороны подойти.

🧠 1. Self-Healing CLI‑агент (автоматический отладчик ошибок)

🔹 Идея: Напиши CLI-инструмент, который анализирует ошибки в Python‑скриптах и предлагает (или вносит) правки к коду автоматически с помощью LLM.

🔧 Как реализовать:
• Используй subprocess для запуска целевого скрипта и перехвата stderr
• Извлеки traceback → отправь в OpenAI / LM Studio через API
• Получи фикс → распарси результат и применяй его к AST с помощью RedBaron или ast
• Верифицируй: перезапусти код и проверь, исчезла ли ошибка
• Добавь флаг --auto-fix и интерактивный режим

🧩 Применение: автопомощник в CI/CD, дебагер в редакторах, обучающий инструмент

📡 2. P2P-блокнот с mesh-синхронизацией

🔹 Идея: Заметки, которые синхронизируются без облака — через локальную сеть или Bluetooth, используя ZeroConf.

🔧 Как реализовать:
zeroconf для автоматического обнаружения других устройств
sqlite как локальное хранилище + watchdog для отслеживания изменений
pynacl для шифрования трафика
• Используй TCP/UDP сокеты для передачи изменений
• Можно добавить визуальный CLI с urwid или textual

🧩 Применение: приватные P2P‑заметки, оффлайн-заметки в экспедициях, лайтовый knowledge base

🧬 3. AI‑отладчик чужого репозитория

🔹 Идея: Инструмент, который загружает чужой репозиторий, строит граф зависимостей и автоматически находит баги, недочёты, недокументированный код — и объясняет их.

🔧 Как реализовать:
gitpython для клонирования проекта
networkx или pydeps для визуализации модульной структуры
mypy, flake8, pylint и bandit для анализа
• Сводка отправляется в LLM (например, OpenAI API) для пояснений: "вот потенциально уязвимый участок, вот почему"
• Визуализируй через rich, graphviz, или в браузере через streamlit

🧩 Применение: ревью чужого кода, onboarding новых участников в open-source

🎮 4. CLI-игра с live‑физикой прямо в терминале

🔹 Идея: Реализуй рогалик или простую 2D-игру с настоящей физикой (гравитацией, столкновениями) в терминале.

🔧 Как реализовать:
curses или blessed для отрисовки
pymunk или box2d для физики (адаптируй под 2D-сцену)
• Все объекты — текстовые символы
• События обрабатываются через asyncio, и всё должно работать в real‑time
• Можно добавить оружие, отскоки, ловушки и интерактивные зоны

🧩 Применение: визуальное развлечение, обучение физике, красивое демо для хакатона

🕵️ 5. AI-инспектор Linux-системы

🔹 Идея: Создай скрипт, который в реальном времени следит за файлами, сетями, процессами, и при странной активности — показывает, почему это может быть подозрительно (с пояснением от ИИ).

🔧 Как реализовать:
• Используй psutil, inotify, socket, netifaces
• Собирай метрики: кто пишет в /tmp, кто открывает нестандартные порты, кто занимает слишком много CPU
• Фильтруй необычные события → формируй контекст → передавай в LLM
• ИИ объясняет: "этот процесс пытается слушать порт 4444 в фоне — это может быть реверс‑шелл"
• CLI-интерфейс через rich или textual

🧩 Применение: оффлайн-альтернатива Falcon / CrowdStrike, полезный тул

💡 Всё это можно собрать за 1–2 дня, если уже умеешь работать с Python-инструментами, API и системными вызовами. И каждый проект можно расширять в полноценный open-source продукт.

@pythonl

#python #weekendprojects #ai #cli #sysadmin #funprojects #hackathon #opensource
Please open Telegram to view this post
VIEW IN TELEGRAM
🚦 premier — удобный инструмент для ограничения частоты вызовов в Python

Что это такое:
premier — это библиотека для контроля скорости вызовов функций в Python. Она помогает ограничить нагрузку на API, базу данных или любой другой ресурс, чтобы не получить отказ или блокировку.

📌 Возможности:
• Поддержка популярных алгоритмов: token bucket, fixed window, leaky bucket
• Работает как с обычными, так и с асинхронными функциями
• Поддерживает Redis и другие хранилища для распределённого ограничения
• Гибкая настройка: лимиты, ключи, длительность окна, своя логика
• Простое применение через декораторы

🧪 Пример:


from premier import throttler, ThrottleAlgo, RedisHandler

@throttler.fixed_window(quota=3, duration=5)
def request(url: str):
# максимум 3 вызова каждые 5 секунд
...

@throttler.token_bucket(quota=5, duration=60)
async def async_request(...):
# асинхронный токен-бакет
...


🔧 Где применить:
• Ограничение частоты запросов к внешним API
• Защита от перегрузки микросервисов
• Контроль доступа к ресурсам внутри приложения
• Настройка rate-limit в фоновом обработчике или очереди

Почему стоит попробовать:
premier — лёгкая, понятная и гибкая библиотека. Она упрощает внедрение rate limiting, особенно если нужно масштабироваться или работать в асинхронной среде.

Если строишь что-то распределённое или просто не хочешь случайно “положить” сервис из-за частых вызовов — premier отлично подойдёт.

📌 Github

@pythonl
🎯 Хочешь следить за загрузкой своей GPU прямо из Python?

Вот простой скрипт, который показывает текущую загрузку видеокарты NVIDIA (через `nvidia-smi`). Подходит для мониторинга в ML-задачах, инференсе и просто для интереса.

📦 Зависимости: установленный nvidia-smi и Python 3.6+

🧠 Код:


import subprocess

def get_gpu_utilization():
try:
result = subprocess.check_output(
['nvidia-smi', '--query-gpu=utilization.gpu,memory.used,memory.total',
'--format=csv,nounits,noheader'],
encoding='utf-8'
)
lines = result.strip().split('\n')
for idx, line in enumerate(lines):
gpu_util, mem_used, mem_total = map(str.strip, line.split(','))
print(f"🖥 GPU {idx}: {gpu_util}% load | {mem_used} MiB / {mem_total} MiB")
except FileNotFoundError:
print(" nvidia-smi not found. Make sure NVIDIA drivers are installed.")
except Exception as e:
print(f"⚠️ Error: {e}")

get_gpu_utilization()


📊 Вывод будет примерно такой:

GPU 0: 23% load | 412 MiB / 8192 MiB

🔥 Советы:
• Можно запускать в цикле для live-мониторинга
• Легко интегрировать в Telegram-бота или Slack-уведомления
• Работает на всех машинах с установленным NVIDIA драйвером и nvidia-smi

@pythonl
🔟 однострочных функций, полезных для продвинутых Python-разработчиков:

1. Разворачиваем вложенных списков любой глубины

flatten = lambda lst: [x for sub in lst for x in (flatten(sub) if isinstance(sub, list) else [sub])]


2. Декоратор для мемоизации результатов функции

memoize = lambda f: (lambda *args, _cache={}, **kwargs: _cache.setdefault((args, tuple(kwargs.items())), f(*args, **kwargs)))


3. Разбиение списка на куски длины n

chunked = lambda lst, n: [lst[i:i+n] for i in range(0, len(lst), n)]


4. Уникализация последовательности с сохранением порядка

uniq = lambda seq: list(dict.fromkeys(seq))


5. Глубокий доступ к вложенным ключам словаря

deep_get = lambda d, *keys: __import__('functools').reduce(lambda a, k: a.get(k) if isinstance(a, dict) else None, keys, d)


6. Преобразование Python-объекта в читаемый JSON

pretty_json = lambda obj: __import__('json').dumps(obj, ensure_ascii=False, indent=2)


7. Чтение последних n строк файла (аналог tail)

tail = lambda f, n=10: list(__import__('collections').deque(open(f), maxlen=n))


8. Выполнение shell-команды и возврат вывода

sh = lambda cmd: __import__('subprocess').run(cmd, shell=True, check=True, capture_output=True).stdout.decode().strip()


9. Быстрое объединение путей

path_join = lambda *p: __import__('os').path.join(*p)


10. Группировка списка словарей по значению ключа

group_by = lambda seq, key: {k: [d for d in seq if d.get(key) == k] for k in set(d.get(key) for d in seq)}


@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
⚔️ LIEF — мощная библиотека для работы с исполняемыми файлами, которая поддерживает ELF, PE и MachO-форматы. Этот проект позволяет не только анализировать структуру бинарников, но и модифицировать их — добавлять секции, менять символы или даже работать с Objective-C метаданными.

Инструмент выделяется кроссплатформенностью и мультиязычным API (Python, Rust, C++). Библиотека умеет дизассемблировать код под разные архитектуры и интегрируется с Ghidra/BinaryNinja. Будет полезно для реверс-инжиниринга, анализа вредоносного ПО или кастомной линковки.

🤖 GitHub

@pythonl
Общий сбор питонистов на митапе ЮMoney ™️

Питоняшки — бесплатный митап ЮMoney для Python-разработчиков.

3 июля, в четверг, в 19:00 (мск) — приходите на митап в Санкт-Петербурге или подключайтесь онлайн.

О чём будут доклады?

🟣 Это не те метрики, что вы ищете. Разберёмся, почему стандартного экспортёра может не хватать, и как написать свой на Python.
🟣 Кодогенерация: как компьютеры учатся писать код за нас. Поговорим про прошлое, настоящее и будущее кодогенерации в разных языках программирования.
🟣 Ruff: как не положить всё, переходя на новые правила? Поговорим про линтеры, форматтеры и подводные камни при переходе на Ruff.
🟣 Секреты успеха змеи в мире пауков. Обсудим, как мы применяли scrapy и playwright в ЮMoney, чтобы создать сервис модерации сайтов.

Зарегистрируйтесь, чтобы принять участие. Все подробности — на сайте митапа Питоняшки 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ PyOpenCL — ускоряем Python вычисления на GPU. Этот проект даёт доступ к технологии OpenCL прямо из Python, позволяя задействовать не только видеокарты, но и любые параллельные вычислительные устройства. Он сочетает низкоуровневый контроль с автоматической обработкой ошибок и привязкой жизненного цикла объектов.

Инструмент имеет обширную документацию с примерами: от простого поэлементного умножения массивов до сложных алгоритмов с использованием локальной памяти GPU. Проект работает с реализациями OpenCL от Apple, AMD и Nvidia, а установка через Conda занимает буквально пару команд.

🤖 GitHub

@pythonl
🧩 Задача для разминки

Что выведет этот код? Попробуй догадаться без запуска.


class Sneaky:
def __eq__(self, other):
print("Comparing!")
return True

a = Sneaky()
b = [a]

print(a in b)
print(a == b[0])
print(b.count(a))


🤔 Подумай: сколько раз вызовется eq?

🎯 Разбор:

print(a in b)
🔍 Проверка a in b вызывает b.__contains__(a), который по умолчанию использует ==.
👉 Вызовется eq, будет True.

print(a == b[0])
🔍 Прямое сравнение — снова eq.

print(b.count(a))
🔍 list.count сравнивает каждый элемент с ==. В нашем списке один элемент — a.
👉 Опять вызывается eq.

💥 Вывод будет:


Comparing!
True
Comparing!
True
Comparing!
1



📌 Вывод: __eq__ сработал 3 раза, и каждый раз напечатал "Comparing!".

🧠 Уловка: Python-списки используют ==, даже если это один и тот же объект! Да, a == a всё равно вызовет __eq__, если он определён.

⚠️ Фишка для интервью:
Можно подменить поведение ==, но is (сравнение идентичности) всегда быстрее и не вызывает магии.

@pythonl
🔥 CAI — ИИ для поиска багов от Alias Robotics

Что это такое?
CAI — лёгкий фреймворк для создания AI-агентов, которые помогают автоматизировать поиск и проверку уязвимостей.

Как это работает?
- Загружаете YAML-конфиги
Опишите сценарии поиска багов, тестов и отчётов в простых текстовых файлах.
- LLM-агенты
AI-модель эмулирует протоколы (SSH, HTTP, TCP и другие) и взаимодействует с целевыми системами как настоящий тестировщик.
- Генерация и «разогрев» данных
Создавайте синтетические запросы для обучения и быстро запускайте агента на своих данных.
- Оффлайн-оценка
Собирайте результаты тестов и анализируйте их без постоянного подключения к интернету.

Зачем использовать CAI?
- Ускоряет подготовку и запуск тестов безопасности
- Позволяет гибко настраивать шаги проверки
- Повышает прозрачность и повторяемость отчётов о найденных уязвимостях

Установка и запуск:

git clone https://github.com/aliasrobotics/cai.git
cd cai
# отредактируйте config.yaml и запустите агента


📌 Github

@pythonl