This media is not supported in your browser
VIEW IN TELEGRAM
Unlimited-OCR — это модель на 3 млрд параметров, которая может распарсить целый PDF на 100 страниц за один проход — без разбиения по страницам и без потери контекста.
* контекстное окно 32K, читает весь документ за один проход
+ 93% на стандартных бенчмарках парсинга, на 6 пунктов выше baseline
* уровень ошибок ниже 0,11 после 40-й страницы — там, где все остальные OCR-инструменты начинают разваливаться
* мультиязычность из коробки, локальный запуск через Transformers, Ollama, llama.cpp или Docker
* Textract, Google Vision и Azure Document Intelligence берут от $1,50 до $15 за 1 000 страниц
1,9 млн скачиваний на Hugging Face, и при этом большинство людей о ней даже не слышали.
Она работает прямо на вашем компьютере. Бесплатно. Навсегда.
Ссылка на модель: http://huggingface.co/baidu/Unlimited-OCR
✈️ Python Ninja
* контекстное окно 32K, читает весь документ за один проход
+ 93% на стандартных бенчмарках парсинга, на 6 пунктов выше baseline
* уровень ошибок ниже 0,11 после 40-й страницы — там, где все остальные OCR-инструменты начинают разваливаться
* мультиязычность из коробки, локальный запуск через Transformers, Ollama, llama.cpp или Docker
* Textract, Google Vision и Azure Document Intelligence берут от $1,50 до $15 за 1 000 страниц
1,9 млн скачиваний на Hugging Face, и при этом большинство людей о ней даже не слышали.
Она работает прямо на вашем компьютере. Бесплатно. Навсегда.
Ссылка на модель: http://huggingface.co/baidu/Unlimited-OCR
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Foundations of Applied Mathematics — это бесплатная серия из четырёх учебников, созданная для программы по прикладной и вычислительной математике в Университете Бригама Янга.
В неё входят четыре тома:
Математический анализ
Алгоритмы, аппроксимация и оптимизация
Неопределённость и данные
Динамика и управление
Серия подходит студентам старших курсов бакалавриата и начальных курсов магистратуры. К ней также прилагаются лабораторные работы на Python и практические задания, поэтому математическая теория связана с численными вычислениями, алгоритмами, анализом данных и научными приложениями.
Особенно мне нравится, что это не только теоретические учебники. Сопутствующие материалы на Python помогают увидеть, как эти концепции применяются к реальным вычислительным задачам.
https://foundations-of-applied-mathematics.github.io
✈️ Python Ninja
В неё входят четыре тома:
Математический анализ
Алгоритмы, аппроксимация и оптимизация
Неопределённость и данные
Динамика и управление
Серия подходит студентам старших курсов бакалавриата и начальных курсов магистратуры. К ней также прилагаются лабораторные работы на Python и практические задания, поэтому математическая теория связана с численными вычислениями, алгоритмами, анализом данных и научными приложениями.
Особенно мне нравится, что это не только теоретические учебники. Сопутствующие материалы на Python помогают увидеть, как эти концепции применяются к реальным вычислительным задачам.
https://foundations-of-applied-mathematics.github.io
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
На этой неделе я нашёл, пожалуй, лучший оркестратор для ИИ-агентов. Он называется Herdr и по сути представляет собой 👍
Вы запускаете Claude Code, Codex или OpenCode в отдельных панелях, а боковая панель в реальном времени показывает, какой агент сейчас работает, какой уже закончил и какой заблокирован в ожидании вашего ввода.
Кроме того, терминал можно закрыть, а агенты продолжат работать. То есть поддерживается detach-режим.
Затем можно подключиться обратно по SSH откуда угодно, даже с телефона.
Всё это упаковано в один бинарник на Rust: быстрый, лёгкий, кроссплатформенный и с открытым исходным кодом. Работает в любом терминале, поддерживает настройку и плагины для расширения возможностей
https://herdr.dev/
✈️ Python Ninja
tmux, который понимает, что делают агенты. Вы запускаете Claude Code, Codex или OpenCode в отдельных панелях, а боковая панель в реальном времени показывает, какой агент сейчас работает, какой уже закончил и какой заблокирован в ожидании вашего ввода.
Кроме того, терминал можно закрыть, а агенты продолжат работать. То есть поддерживается detach-режим.
Затем можно подключиться обратно по SSH откуда угодно, даже с телефона.
Всё это упаковано в один бинарник на Rust: быстрый, лёгкий, кроссплатформенный и с открытым исходным кодом. Работает в любом терминале, поддерживает настройку и плагины для расширения возможностей
https://herdr.dev/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Совет по Python
Если нужно создать поле, которое не должно попадать в сгенерированный
Это особенно удобно для вычисляемых атрибутов
Поле area не передаётся при создании объекта и всегда вычисляется автоматически
✈️ Python Ninja
Если нужно создать поле, которое не должно попадать в сгенерированный
__init__ используйfield(init=False)Это особенно удобно для вычисляемых атрибутов
from dataclasses import dataclass, field
@dataclass
class Rectangle:
width: int
height: int
area: int = field(init=False)
def __post_init__(self):
self.area = self.width * self.height
Поле area не передаётся при создании объекта и всегда вычисляется автоматически
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Чтобы превратить вызовы LLM в понятные и компонуемые workflows, не нужен огромный фреймворк.
PocketFlow — минималистичный Python-фреймворк для разработчиков, которые создают агентов, RAG-пайплайны и другие LLM-приложения.
Он позволяет проектировать логику приложения в виде графа, соединяя небольшие узлы, которые используют общее состояние и направляют выполнение через именованные действия.
Ключевые возможности:
• Графовые flows — можно объединять узлы в цепочки, создавать ветвления по действиям, циклы и вложенные flows.
• Узлы из трёх этапов — подготовка, выполнение и постобработка разделены и работают с общим состоянием.
• Настройка повторных попыток — можно задать количество ретраев, задержки между ними и fallback-поведение при ошибках выполнения.
• Batch- и async-режимы — обработка списков элементов, повторный запуск flows с параметрами и параллельное выполнение асинхронных batch-задач.
• Практический cookbook — примеры агентов, RAG, workflows, стриминга и приложений с human-in-the-loop.
Проект с открытым исходным кодом и распространяется по лицензии MIT.
✈️ Python Ninja
PocketFlow — минималистичный Python-фреймворк для разработчиков, которые создают агентов, RAG-пайплайны и другие LLM-приложения.
Он позволяет проектировать логику приложения в виде графа, соединяя небольшие узлы, которые используют общее состояние и направляют выполнение через именованные действия.
Ключевые возможности:
• Графовые flows — можно объединять узлы в цепочки, создавать ветвления по действиям, циклы и вложенные flows.
• Узлы из трёх этапов — подготовка, выполнение и постобработка разделены и работают с общим состоянием.
• Настройка повторных попыток — можно задать количество ретраев, задержки между ними и fallback-поведение при ошибках выполнения.
• Batch- и async-режимы — обработка списков элементов, повторный запуск flows с параметрами и параллельное выполнение асинхронных batch-задач.
• Практический cookbook — примеры агентов, RAG, workflows, стриминга и приложений с human-in-the-loop.
Проект с открытым исходным кодом и распространяется по лицензии MIT.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Этот проект представляет собой полный курс по Python — от нулевого уровня до backend-разработки, который создавался в прямом эфире на Twitch.
Покрывает основы Python, продвинутые темы и разработку backend-приложений.
Включает создание REST API с аутентификацией и интеграцией с базой данных.
Весь код организован по директориям:
Видео-уроки содержат таймкоды для каждой темы.
✈️ Python Ninja
Покрывает основы Python, продвинутые темы и разработку backend-приложений.
Включает создание REST API с аутентификацией и интеграцией с базой данных.
Весь код организован по директориям:
Basic, Intermediate и Backend.Видео-уроки содержат таймкоды для каждой темы.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Готовимся к собеседованию позиции Middle и Senior
Отличный комплект для подготовки к техническим интервью по Python.
Первый материал - большой обзор на Хабре с вопросами, которые реально задаются на собеседованиях: Python, алгоритмы, HTTP, Git, SQL, Django, Flask, многопоточность, тестирование и др.
Второй ресурс: GitHub-репозиторий с подробными ответами и объяснениями по большинству этих тем. Вместе они станут отличной базой для подготовки к интервью уровня Middle и Senior.
✈ Python Ninja
Отличный комплект для подготовки к техническим интервью по Python.
Первый материал - большой обзор на Хабре с вопросами, которые реально задаются на собеседованиях: Python, алгоритмы, HTTP, Git, SQL, Django, Flask, многопоточность, тестирование и др.
Второй ресурс: GitHub-репозиторий с подробными ответами и объяснениями по большинству этих тем. Вместе они станут отличной базой для подготовки к интервью уровня Middle и Senior.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Бесплатный гайд по GitHub новичкам
Освоить GitHub - один из первых шагов в карьере разработчика. В официальном руководстве собраны ключевые темы: от создания репозитория до командной работы через Pull Request.
Хороший старт для студентов, джунов и всех, кто хочет программировать❤️ ❤️
☝️ Ссылка источник
✈ Python Ninja
Освоить GitHub - один из первых шагов в карьере разработчика. В официальном руководстве собраны ключевые темы: от создания репозитория до командной работы через Pull Request.
Хороший старт для студентов, джунов и всех, кто хочет программировать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Бесплатная книга «Python for Data Analysis третье издание»
Современный и практичный гид по работе с данными на Python, идеально подходящий для аналитиков, которые только начинают свой путь, и разработчиков, стремящихся освоить науку о данных через код
Книга включает живые примеры, реальные кейсы и достаточное внимание к практическим нюансам работы с данными. Материалы и примеры доступны на GitHub
Ставь лайкос и сохраняй в закладки❤️
☝️ Ссылка источник
✈️ Python Ninja
Современный и практичный гид по работе с данными на Python, идеально подходящий для аналитиков, которые только начинают свой путь, и разработчиков, стремящихся освоить науку о данных через код
Книга включает живые примеры, реальные кейсы и достаточное внимание к практическим нюансам работы с данными. Материалы и примеры доступны на GitHub
Ставь лайкос и сохраняй в закладки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Python шпаргалка: работа со списками
Полезная подборка примеров: от базовых методов (append, pop, sort) до встроенных функций (sum, max, enumerate, map) с пояснениями
Отличный справочник если часто работаешь со списками и хочется быстро вспомнить нужный приём
Ставь лайк если полезно❤️
✈️ Python Ninja
Полезная подборка примеров: от базовых методов (append, pop, sort) до встроенных функций (sum, max, enumerate, map) с пояснениями
Отличный справочник если часто работаешь со списками и хочется быстро вспомнить нужный приём
Ставь лайк если полезно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Нашли отличный репозиторий вката в Python и машинное обучение с нуля
На GitHub собрана масштабная база материалов по Python: от базового синтаксиса до анализа данных и ML-проектов. Тут есть всё: объяснения основ, куча примеров, задачки и даже мини-проекты по машинному обучению
Отличный вариант самостоятельного обучения, прокачки навыков и первого знакомства с ML-инструментами
Лайк на базу👦
☝️ Ссылка источник
✈️ Python Ninja
На GitHub собрана масштабная база материалов по Python: от базового синтаксиса до анализа данных и ML-проектов. Тут есть всё: объяснения основ, куча примеров, задачки и даже мини-проекты по машинному обучению
Отличный вариант самостоятельного обучения, прокачки навыков и первого знакомства с ML-инструментами
Лайк на базу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Если вы новичок в Python остановитесь и внимательно посмотрите 👇
НИКОГДА не изменяйте список во время итерации по нему
Когда вы изменяете список в процессе обхода, итератор «теряется». Он не понимает, что список изменился прямо во время его работы.
Например, этот код работает неправильно:
Мы используем метод remove(), чтобы удалить все двойки из списка. Но, как видно из результата, одна 2 всё равно остаётся.
Почему так происходит? Когда вы удаляете элемент из списка, все элементы сдвигаются влево. Но цикл продолжает идти вперёд по индексам. В итоге происходит следующее:
Правильный способ итерироваться по копии списка:
Когда вы проходите по копии (поверхностной копии), индексы исходного списка не «сбиваются».
🔥 Ещё лучше использовать генератор списка (list comprehension):
👑 Запомните: никогда не изменяйте список (или любую другую коллекцию) во время прямой итерации по нему. Итератор не умеет корректно работать со структурными изменениями:
Это плохая практика
✈️ Python Ninja
НИКОГДА не изменяйте список во время итерации по нему
Когда вы изменяете список в процессе обхода, итератор «теряется». Он не понимает, что список изменился прямо во время его работы.
Например, этот код работает неправильно:
items = [1, 2, 2, 3, 4]
for item in items:
if item == 2:
items.remove(item)
print(items)
# Output: [1, 2, 3, 4]
Мы используем метод remove(), чтобы удалить все двойки из списка. Но, как видно из результата, одна 2 всё равно остаётся.
Почему так происходит? Когда вы удаляете элемент из списка, все элементы сдвигаются влево. Но цикл продолжает идти вперёд по индексам. В итоге происходит следующее:
✅ первая 2 находится и удаляется✅ вторая 2 сдвигается на её место✅ цикл переходит к следующему индексу✅ и эта 2 просто пропускается
Правильный способ итерироваться по копии списка:
for item in items[:]:
if item == 2:
items.remove(item)
print(items)
# Output: [1, 3, 4]
Когда вы проходите по копии (поверхностной копии), индексы исходного списка не «сбиваются».
items = [x for x in items if x != 2]
✅ он может пропускать элементы✅ обрабатывать один и тот же элемент дважды✅ или даже вызывать ошибку RuntimeError (например, в словарях)
Это плохая практика
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Подборка ресурсов по MLOps для тех, кто хочет разобраться, как ML-системы доводят до production.
https://github.com/visenger/awesome-mlops
👉 @PythonPortal
https://github.com/visenger/awesome-mlops
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Совет по Python: Использование словаря в качестве оператора match-switch
Одна из интересных особенностей словарей — их можно использовать как операторы
В приведённом примере словарь
✈️ Python Ninja
Одна из интересных особенностей словарей — их можно использовать как операторы
switch. Этот подход удобен в простых сценариях принятия решений, где нужно сопоставить выбор с определённым действием или значениемВ приведённом примере словарь
switch_dict сопоставляет дни недели с задачами. Если день недели существует в словаре как ключ, возвращается соответствующая задача. Если день не найден, используется значение по умолчанию "invalid option", переданное в метод get(). Такой подход особенно полезен, когда у вас ограниченное количество вариантов и нужно обрабатывать их эффективноPlease open Telegram to view this post
VIEW IN TELEGRAM
❤3
SQL в Python: Сравнительное руководство по работе с данными
Знаешь SQL и хочешь понять, как делать то же самое в Pandas? Это руководство покажет как привычные SQL-запросы выглядят в мире Python👊
✈️ Python Ninja
Знаешь SQL и хочешь понять, как делать то же самое в Pandas? Это руководство покажет как привычные SQL-запросы выглядят в мире Python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Полезная тулза «Port Kill» приложение для быстрого управления процессами
Помогает разработчикам быстро находить и завершать процессы, мешающие работе на нужных портах
Автоматически определяет активные процессы ( Docker), показывает статус цветными индикаторами и позволяет завершать их выборочно или все сразу
Сохраняем пригодится❓
☝️ Ссылка источник
✈️ Python Ninja
Помогает разработчикам быстро находить и завершать процессы, мешающие работе на нужных портах
Автоматически определяет активные процессы ( Docker), показывает статус цветными индикаторами и позволяет завершать их выборочно или все сразу
Сохраняем пригодится
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
Упростить логирование в Python можно с помощью Loguru 🪵
Стандартный модуль
Loguru делает логирование по ощущениям почти таким же простым, как
timestamps;
уровни логов;
запись в файлы;
rotation;
retention;
подробный вывод исключений.
В статье сравниваются оба подхода и показывается, как Loguru позволяет сделать типичные задачи логирования короче и читабельнее.
✈️ Python Ninja
Стандартный модуль
logging умеет почти всё, но даже базовая настройка часто требует handlers, format strings и дополнительного конфигурационного кода.Loguru делает логирование по ощущениям почти таким же простым, как
print(), при этом поддерживает:timestamps;
уровни логов;
запись в файлы;
rotation;
retention;
подробный вывод исключений.
В статье сравниваются оба подхода и показывается, как Loguru позволяет сделать типичные задачи логирования короче и читабельнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Фатальная ошибка в pandas
Такой код не фильтрует значения
В
Поэтому такой фильтр не удаляет все пропущенные значения.
Вместо этого используйте:
или
Для проверки пропущенных значений в
✈️ Python Ninja
Такой код не фильтрует значения
NULL или None:df[df['user_id'] != None]
В
pandas пропущенные значения представлены как NaN или None, но оператор != работает с ними не так, как многие ожидают.Поэтому такой фильтр не удаляет все пропущенные значения.
Вместо этого используйте:
df[df['user_id'].notna()]
или
df.dropna(subset=['user_id'])
Для проверки пропущенных значений в
pandas всегда используйте методы isna() и notna(), а не операторы == или !=.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
В Python обычный 🐍
Например:
Если нужно сохранить все элементы, есть
Недостающие значения он по умолчанию заполняет
Небольшая штука, но полезно помнить, когда объединяете данные из источников разной длины.
✈️ Python Ninja
zip() может незаметно «съесть» часть данных, если списки разной длины. Например:
x = [1, 2, 3, 4, 5]
y = ['a', 'b', 'c']
list(zip(x, y))
# [(1, 'a'), (2, 'b'), (3, 'c')]
zip() останавливается, как только заканчивается самый короткий список — поэтому 4 и 5 просто не попадут в результат.Если нужно сохранить все элементы, есть
itertools.zip_longest():import itertools
list(itertools.zip_longest(x, y))
# [(1, 'a'), (2, 'b'), (3, 'c'), (4, None), (5, None)]
Недостающие значения он по умолчанию заполняет
None.Небольшая штука, но полезно помнить, когда объединяете данные из источников разной длины.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1