Python_BE1
9 subscribers
748 photos
252 videos
7 files
672 links
Канал по Python, полезный и интересный контент для всех уровней.
По вопросам сотрудничества @cyberJohnny
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🥚 3D Пасхальное яйцо от Google ,которое можно получить, вбив в поиск эту функцию:

1.2+(sqrt(1-(sqrt(x^2+y^2))^2) + 1 - x^2-y^2) * (sin (10 * (x*3+

Если найдете пасхулку кулича, скиньте в комменты 👇

@python_be1
⚡️ Огромный курс по созданию языковых моделей с ПОЛНОГО НУЛЯ выложил Стэнфорд — «СS336: Language Modeling from scratch» прямо сейчас преподают в университете и сразу же выкладывают на Ютуб для ВСЕХ.

• Кто угодно может БЕСПЛАТНО научиться создавать собственные ИИ-модели с нуля.
• Это огромный полноценный курс: от архитектуры и токенизаторов до обучения с подкреплением и масштабирования.
• Все темы преподы объясняют пошагово, от простого к сложному. Поймет даже новичок в кодинге.
• К каждой лекции есть множество дополнительных материалов и домашних заданий.

Сайт курса — здесь. (https://stanford-cs336.github.io/spring2025/) Плейлист на Ютубе — тут. (https://youtube.com/playlist?list=PLoROMvodv4rOY23Y0BoGoBGgQ1zmU_MT_)
👍

@python_be1
🌱 Что выведет код?

@python_be1
суть программы вот в чем, 4 двигателя крутятся с одинаковым шагом но с разным промежутком времени, в результате программа работает с задержкой от того что должно быть по факту, если я увеличиваю скорость F1000 вместо F500 то программа работает быстрей, сами же двигатели не синхронно вращаются, в начале вроде как все как и должно быть, но под конец движения, какие-то двигателя вовремя заканчивают движения а какие-то только догоняют причем не зависимо от метода! время на паузы на трех двигателях 0.0157, а одном 0.0078 в секундах кстати на котором 0.0078 он и отстает

@python_be1
🗣 Dia — это новаяоткрытая модель текст‑в‑речь от Nari Labs с 1.6 млрд параметров, способная генерировать полноценный диалог с богатой экспрессией.

Ключевые возможности:
- Ультра‑реалистичный диалог. Генерация согласованных реплик двух «говорящих» персонажей, помеченных тэгами [S1] и [S2] в одном тексте.

- Эмоции и тон. Можно задавать тональность и интонацию через акустический запрос (audio prompt), а также управлять «невербалкой»: смех, кашель, вздохи и т. д.

- Voice cloning. Клонирование голоса по короткому образцу: подгрузите аудио и его транскрипт, и модель адаптируется под заданный тембр
GitHub

Модель написана на Python (100 % кода) с использованием PyTorch 2.0 и CUDA 12.6

Производительность и требования:

Полная версия требует ≈10 GB VRAM; в будущем планируется квантование модели.

Установка и запуск:
`pip install git+https://github.com/nari-labs/dia.git
git clone https://github.com/nari-labs/dia.git
cd dia
uv run app.py ` # или python app.py

В интерфейсе Gradio сразу можно оценить разницу с ElevenLabs и Sesame CSM‑1B

Лицензия: Apache 2.0.

Dia отлично подходит для ML‑исследований в TTS: вы получаете открытые весовые файлы, гибкий API для скриптов и UI для быстрой проверки гипотез.

На данный момент Dia поддерживает генерацию речи только на английском языке

Demo (https://yummy-fir-7a4.notion.site/dia)
Github (https://github.com/nari-labs/dia)
HF (https://huggingface.co/nari-labs/Dia-1.6B)

@python_be1
🖥 ex — это утилита для создания одного исполняемого файла .pex, внутри которого содержится вся ваша программа на Python и её зависимости. По сути это самодостаточная, переносимая среда выполнения, похожая на virtualenv, но упакованная в один файл.

Зачем это нужно?

Простота развёртывания: чтобы установить и запустить приложение, достаточно скопировать файл app.pex и запустить его — никакой дополнительной настройки.

Портируемость: один файл может включать сборки для разных платформ (Linux, macOS).

Изоляция зависимостей: все библиотеки (включая C‑расширения) уже внутри, конфликтов версий нет.

Как пользоваться:

Устанавливаем сам инструмент:

`pip install pex`
Собираем .pex-файл:

`pex requests -o fetch.pex —script=requests`
После этого fetch.pex — готовый исполняемый файл, который при запуске сразу импортирует и запускает библиотеку requests.

Интеграция с другими сборщиками:
Системы вроде `Pants, Buck и {py}gradle `умеют автоматически собирать .pex-архивы из вашего кода.

Лицензия: Apache 2.0

GitHub: https://github.com/pex-tool/pex
Документация: https://docs.pex-tool.org/

@python_be1
🖥 Новинка в Python 3.14: t-строки — типобезопасные f-строки

Python 3.14 вводит t"..." — новый синтаксис для строк, ориентированных на безопасность типов и интеграцию с системами шаблонов, SQL, HTML и др.

🔹 Что такое t-строка?
t"..." — это как f"...", но:

- интерполяция ограничена и контролируема;
- поддерживается строгое соответствие шаблону;
- можно передавать переменные явно, предотвращая SQL-инъекции и XSS.

🔸 Пример:
```

name = "Alice"
greeting = t"Hello, {name}!" # t-строка
Вместо немедленной подстановки, как в f"...", t"..." создает шаблон с выражениями как параметрами.
```

🔐 Зачем это нужно?
Безопасность при генерации SQL, HTML, JSON

Улучшение инструментов и проверки типов (через static analysis)

Контроль над контекстом исполнения (больше нельзя просто вставить переменную как есть — нужно передать её явно)

📦 Использование:
t-строки — это первый шаг к "template string literals" как в TypeScript.

Можно использовать с функциями:

```

def html(template: T[str]) -> SafeHTML:
...

html(t"<div>{user_input}</div>")
```

💡 Почему это важно?
Старый код:

```

f"SELECT * FROM users WHERE name = '{user_name}'"
может привести к SQL-инъекциям и XSS.
t-строки — безопасная альтернатива с встроенной защитой.

```

🛡 Пример: безопасный HTML
```

template = t"<p>{user_input}</p>"
html_output = html(template)
# <p>&lt;script&gt;alert('bad')&lt;/script&gt;</p>

```
Функция html() может вернуть не просто строку, а полноценный HTMLElement.
Больше никакой "грязи" — всё чисто и типобезопасно.

🔍 Работа с шаблоном
t-строки позволяют получить доступ к содержимому:

```

template = t"Hello {name}!"
template.strings # ("Hello ", "!")
template.values # (name,)
template.interpolations[0].format_spec # ">8"

```
Можно и вручную собрать шаблон:

```

Template("Hello ", Interpolation(value="World", expression="name"), "!")

```

🚀 Вывод:
t"..." — шаг к безопасным шаблонам и типизации строк в Python.
Готовься к будущему Python — безопасному по умолчанию.

📌 Подробнее здесь (https://davepeck.org/2025/04/11/pythons-new-t-strings/)

@python_be1
This media is not supported in your browser
VIEW IN TELEGRAM
Появилась новая нейронка для генерации веб-приложений — Adaptive. Пользователи уже успели сделать с ней клона ChatGPT и других сайтов.

В Adaptive можно добавлять ИИ-функции, встроить прием платежей и систему регистрации пользователей. При этом API-ключ других нейронок для работы не нужен.

Пробуем здесь (https://adaptive.ai/). Бесплатно дают сделать десять приложений.

@python_be1
Media is too big
VIEW IN TELEGRAM
🐱Статьи, графики, таблицы — новый ИИ-агент Suna делает всё за вас

Вышел бесплатный ИИ-инструмент Suna, который превращает любую задачу в детальный и чёткий доклад с графиками, таблицами и выводами.

Что умеет:
— Сам планирует, ищет и обрабатывает инфу — вы даёте только тему;
— Управляет браузером, Excel и даже кодом;
— Сканирует сотни источников;
— Генерирует визуально оформленные отчёты — всё уже готово к презентации.

Подходит для студентов, аналитиков, маркетологов и просто ленивых. Бесплатно.

Запускаем на ПК через GitHub (https://github.com/Kortix-ai/Suna) или онлайн — здесь (https://www.suna.so/).

5️⃣

@python_be1
Ваш первый бэкенд на Django — пошаговый учебник
Бесплатный самоучитель по Django (https://tutorial.djangogirls.org/), созданный специально для новичков. Шаг за шагом вы создадите веб-приложение (блог) на Python с использованием фреймворка Django.

По ходу дела объясняются все необходимые основы — от базового Python до шаблонов HTML/CSS. К концу у вас будет собственный рабочий блог на сервере и понимание принципов бэкенд-разработки.

#бэкенд #python #django

@python_be1
🖥 PDF Craft — библиотека на Python для конвертации PDF (в первую очередь сканированных книг) в Markdown и EPUB с использованием локальных AI-моделей и LLM для структурирования содержимого
GitHub

🌟 Основные возможности
- Извлечение текста и макета
Использует сочетание DocLayout-YOLO и собственных алгоритмов для детектирования и фильтрации заголовков, колонтитулов, сносок и номеров страниц

- Локальный OCR
Распознаёт текст на странице через OnnxOCR, поддерживает ускорение на GPU (CUDA)

- Определение порядка чтения
С помощью layoutreader строит поток текста в том порядке, в котором его воспринимает человек

- Конвертация в Markdown
Генерирует .md с относительными ссылками на изображения (иллюстрации, таблицы, формулы) в папке assets

- Конвертация в EPUB
На основе промежуточных результатов OCR передаёт данные в LLM (рекомендуется DeepSeek) для построения оглавления, глав, корректировки ошибок и включения аннотаций

Установка и требования
Python ≥ 3.10 (рекомендуется 3.10.16).

`pip install pdf-craft и pip install onnxruntime==1.21.0 (или onnxruntime-gpu==1.21.0 для CUDA).`

Для EPUB-конвейера нужен доступ к LLM-сервису (например, DeepSeek).

🟡 Github (https://github.com/oomol-lab/pdf-craft)

@python_be1
Товарищи! А есть библиотека для экспериментов, имитации процессов (химия, физика, оптика)? Везде только библиотеки для создания игр, это не совсем то что нужно...

@python_be1
1️⃣0️⃣0️⃣0️⃣ гайдов для разрабов в одном репозитории — разраб из Твиттера собирал огромный сундук знаний целых 10 лет.

В нем есть буквально ВСЁ: от шпаргалок по горячим клавишам для ускорения работы до фундаментальных гайдов по языкам программирования для веба, разработки ПО и курсов по устройству сетей, безопасности и многому другому.

• Инструменты для работы с CLI и GUI, вебом и локальными сетями.
• Список всех актуальных фреймворков и библиотек в 2025 году.
• Гайды по тестированию и хакингу приложений.
• Шпаргалки по взаимодействию с командной строкой.
• ТОННА блогов, Ютуб-каналов, колонок в онлайн-СМИ и журналах, чтобы поддерживать свежесть знаний и не отставать от прогресса.

Фолиант мудреца читаем — здесь. (https://github.com/trimstray/the-book-of-secret-knowledge?tab=readme-ov-file#manualshowtostutorials-toc)
👍

@python_be1
Что такое collections.Counter?

collections.Counter — это специальный класс, предоставляющий удобный способ подсчета хэшируемых объектов. Он является подклассом словаря и предоставляет функциональность для подсчета количества вхождений каждого элемента в последовательность (список, кортеж, строку и т.д.).

@python_be1
🖥Задача: "Динамическое кэширование с ограничением памяти и частотой запросов"
🔖 Условие:

Реализуйте класс `SmartCache`, который работает следующим образом:

- Метод `put(key: str, value: Any)`:
- Сохраняет значение по ключу.
- Если суммарный объем памяти, занимаемый всеми элементами, превышает лимит (например, 10 MB), автоматически удаляются наименее "ценные" элементы.

- Метод `get(key: str) -> Any`:
- Возвращает значение по ключу.
- Увеличивает счётчик использования элемента.
- Если элемент отсутствует — возвращает `None`.

Что значит "ценность" элемента:
- Ценность = количество обращений (`hit count`) к элементу.
- При очистке кэша сначала удаляются элементы с наименьшим количеством обращений.

Ограничения:
- Класс должен корректно считать объём памяти, занимаемый элементами.
- Нужно учитывать, что элементы могут быть сложными структурами (`dict`, `list`, вложенные объекты).
- Решение должно быть эффективным: операции должны быть быстрыми даже при большом количестве элементов.

---

▪️ Подсказки:

- Для оценки размера объектов можно использовать модуль `sys.getsizeof`, но для сложных вложенных структур нужен рекурсивный подсчет.
- Для хранения частоты обращений стоит использовать дополнительную структуру данных (`collections.Counter` или `dict`).
- При очистке лучше сначала группировать элементы по "ценности", а затем удалять самые "дешевые".

---

▪️ Что оценивается:

- Умение работать с ограничениями по памяти.
- Аккуратная обработка ссылок и размеров объектов.
- Эффективность очистки кэша.
- Чистота и читаемость кода.

---

▪️ Разбор возможного решения:

Идея архитектуры:

- Храним:
- `storage`: словарь `{key: value}`.
- `hits`: счётчик `{key: hit_count}`.
- `size`: общий размер всех объектов.
- При `put()`:
- Добавляем элемент.
- Пересчитываем суммарный размер.
- Если размер превышает лимит:
- Удаляем наименее популярные элементы до тех пор, пока не уложимся в лимит.
- При `get()`:
- Увеличиваем `hit_count` элемента.
- Возвращаем значение или `None`.

Оценка размера объектов:

- Простого `sys.getsizeof` недостаточно для коллекций.
- Нужна функция, рекурсивно подсчитывающая размер всех вложенных объектов.

Мини-пример функции подсчета размера:
```

import sys

def deep_getsizeof(obj, seen=None):
"""Рекурсивно считает память объекта и его вложенных объектов"""
size = sys.getsizeof(obj)
if seen is None:
seen = set()
obj_id = id(obj)
if obj_id in seen:
return 0
seen.add(obj_id)

if isinstance(obj, dict):
size += sum([deep_getsizeof(v, seen) + deep_getsizeof(k, seen) for k, v in obj.items()])
elif isinstance(obj, (list, tuple, set, frozenset)):
size += sum(deep_getsizeof(i, seen) for i in obj)
return size

```
Мини-пример интерфейса `SmartCache`:
```

class SmartCache:
def __init__(self, max_size_bytes):
self.max_size = max_size_bytes
self.storage = {}
self.hits = {}
self.total_size = 0

def put(self, key, value):
# добавить логику добавления и очистки при переполнении
pass

def get(self, key):
# увеличить hit_count и вернуть значение
pass

```

---

▪️ Дополнительные вопросы:

- Как ускорить очистку кэша без полного перебора всех элементов?
- Как сделать потокобезопасную версию кэша?
- Как адаптировать `SmartCache` для распределённой архитектуры (кэш между несколькими машинами)?

---

@python_be1
🖥 Задача: "Кэширование и ленивые вычисления в многопоточном окружении"

🔜 Условие:

Вам нужно реализовать декоратор `@thread_safe_cached`, который:

- Кэширует результат вызова функции по её аргументам (аналог `functools.lru_cache`, но свой).
- Если несколько потоков одновременно вызывают функцию с одинаковыми аргументами:
- Только один поток реально выполняет функцию,
- Остальные ждут, пока результат будет вычислен, и получают готовый результат.
- Кэш никогда не удаляется (неограниченный размер).

Ограничения:

- Решение должно работать для произвольных функций и аргументов (hashable).
- Нельзя использовать готовый `functools.lru_cache` или другие библиотеки кэширования.
- Нужно обеспечить корректную работу в многопоточной среде без гонок данных.

---

▪️ Подсказки:

- Для кэширования подойдёт `dict` с ключами по аргументам (`*args`, `**kwargs`).
- Для защиты доступа к кэшу понадобится `threading.Lock`.
- Для ожидания завершения вычисления другими потоками можно использовать `threading.Event`.
- Продумайте carefully: как отличить "результат уже посчитан" от "результат в процессе вычисления".

---

▪️ Что оценивается:

- Умение работать с многопоточностью в Python.
- Правильная организация кэширования.
- Чистота и лаконичность кода.
- Умение обрабатывать тонкие случаи, например: одновременные вызовы.

---

▪️ Разбор возможного решения:

Основная идея:

- Создать кэш `cache: Dict[Key, Result]`.
- Одновременно создать словарь "ожиданий" `in_progress: Dict[Key, threading.Event]`.
- Если кто-то начал считать значение:
- Остальные ждут `Event`, пока оно не будет установлено.

Пример реализации:
```

import threading
import functools

def thread_safe_cached(func):
cache = {}
in_progress = {}
lock = threading.Lock()

.wraps(func)
def wrapper(*args, **kwargs):
key = (args, frozenset(kwargs.items()))
with lock:
if key in cache:
return cache[key]
if key not in in_progress:
in_progress[key] = threading.Event()
in_progress[key].clear()
creator = True
else:
creator = False

if creator:
try:
result = func(*args, **kwargs)
with lock:
cache[key] = result
finally:
in_progress[key].set()
with lock:
del in_progress[key]
return result
else:
in_progress[key].wait()
with lock:
return cache[key]

return wrapper

```

---

▪️ Пояснения к коду:

- При первом вызове для новых аргументов поток создаёт `Event` и начинает считать результат.
- Остальные потоки видят `Event` и вызывают `wait()`, пока первый поток не установит `set()`.
- Как только результат посчитан, `Event` сигнализирует всем ждущим потокам, что данные готовы.
- Доступ к `cache` и `in_progress` защищён через `lock` для избежания гонок.

---

▪️ Возможные подводные камни:

- Если не удалять `Event` из `in_progress`, кэш постепенно раздуется мусором.
- Если ошибка случится внутри `func`, необходимо всё равно освободить `Event`, иначе потоки будут вечно ждать.
- Нельзя держать `lock` во время выполнения тяжёлой функции `func`, иначе все потоки будут блокироваться.

---

▪️ Вопросы на собеседовании по этой задаче:

- Как изменить реализацию, чтобы кэш имел ограничение по размеру (например, максимум 1000 элементов)?
- Как адаптировать декоратор под асинхронные функции (`async def`)?
- Что будет, если `func` иногда бросает исключения? Как кэшировать ошибки или не кэшировать их?
- Как изменить реализацию так, чтобы кэш удалял устаревшие данные через TTL (Time-To-Live)?

---

@python_be1
🔍 Что выведет код?

@python_be1
Что выведет этот код при запуске на Python 3.10+ (например, 3.11)?

📌 Подсказка: [спойлер: Подумайте о порядке проверок, о том, какие атрибуты попадают в others, и об использовании __match_args__.Ответ:Automatic mode
Mode manual, other keys: ['threshold', 'debug']
Low threshold 0
Краткое пояснение:

Для первого объекта (mode="auto", threshold=10) срабатывает первый case Config(mode="auto") → Automatic mode.

Для второго (mode="manual", threshold=5, debug=True) первый не совпадает, второй с threshold<5 не проходит (5 < 5 → False), зато третий case Config(mode=mode, **others) — биндинг mode='manual', остальные ключи (threshold и debug) попадают в others → Mode manual, other keys: ['threshold', 'debug'].

Для третьего (threshold=0) первый и третий не подходят (нет mode), а второй — case Config(threshold=threshold) if threshold<5 — срабатывает (0<5) → Low threshold 0.]

@python_be1