Обновить
1024K+

Python *

Высокоуровневый язык программирования

440,18
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Архивист — ламповый консольный API-архиватор

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели4.7K

Две причины побудили меня написать эту статью и небольшой MVP.

1. Потребность в большем объеме сырых данных с наших рынков. Большую часть из них я могу получать посредством API. Такую возможность предоставляет и Московская биржа, и Т-Банк и Финам. Причем, речь идет не о разовой загрузке больших архивов, а скорей о регулярных задачах, которые должны выполняться с определенной периодичностью.

2. Ностальгия по ламповому TUI(Text User Interface). В этом направлении всегда было место для творчества в условиях ограничений в части отображения (картинки и графики особо не покажешь). Но есть и преимущество - консольное приложение в сравнении с GUI - не столь требовательно к ресурсам и по сути может работать везде, где есть текстовая консоль, ну а в случае моего MVP - еще и Python.

В статье описал личную историю вдохновления, ссылку на код проекта ну и небольшую инструкцию.

Читать далее

Я удалил backpropagation из нейросети. Она обучилась методами XIX века

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели28K

Все началось с того, что я открыл PyTorch и удалил из модели .backward(). Взял и стер как строчку, которая «вроде ничего не делала». Только вот эта строчка делала вообще все.

Я хотел понять одну вещь: а что, если забыть, что backpropagation существует? Не как упражнение, чтобы вспомнить основы, а буквально обучить нейросеть, ни разу не посчитав градиент. То есть без всего того математического аппарата, который мы с вами воспринимаем как воздух.

И у меня получилось. Правда попутно я обнаружил, что Adam — это, по сути, уравнение движения с трением, записанное на Python. (Лагранж бы такое одобрил, наверное).

Читать далее

Как я парсил банковские платёжки всех российских банков на Python: история боли, костылей и XML-матрёшек

Время на прочтение17 мин
Охват и читатели6.2K

Привет, Хабр! (И тебе, случайный бухгалтер, который думает, что «выгрузить из банка» - это нажать одну кнопку. И тебе, 1С-разработчик, который слышит «парсинг PDF» и сразу уходит на больничный. И тебе, Python-разработчик, который уверен, что pip install magic_solution решит любую проблему.)

Сегодня расскажу, как мне поставили задачу, от которой у SAP-а ушло, видимо, несколько команд и много времени, а мне дали на это… ну, скажем так, поменьше. Задача звучала элегантно, но всегда есть но, и не одно))

(Спойлер для тех, кому лень читать: я узнал, что Сбербанк формирует WORD-документы с такой XML-вложенностью, что в ней можно заблудиться, ВТБ зачем-то маскирует WORD под RTF, а файл на 10 000 платёжек из 37 мегабайт разворачивается в 1 гигабайт XML. И да, всё по итогу заработало.)

Читать далее

Интерактивные графики в Python: Изучаем основные фишки Plotly

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели6.8K

Помните, как вы в очередной раз гуглили, как повернуть подписи осей в Matplotlib на 45 градусов? Или как на созвоне вас просили объяснить «вон ту аномальную точку» на красивом графике Seaborn, и вам приходилось судорожно лезть в Jupyter писать новые фильтры, потому что график — это просто статичная картинка? Знакомая боль.

А теперь представьте: вы пишете всего одну строчку кода, и график оживает прямо в браузере. Наводите курсор — появляются точные цифры. Выделяете область мышкой — график приближается. Кликаете по легенде — скрываются лишние данные. Всё это умеет Plotly.

Читать далее

Slow Feature Analysis. Разбор метода и реализация на Python с нуля

Уровень сложностиСложный
Время на прочтение8 мин
Охват и читатели8.7K

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

Читать далее

Как я реализовал Blue-Green деплой с нулевым даунтаймом на Docker Compose

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели10K

Недавно я внедрил blue‑green деплой в проде. Реализация довольно простая и кастомная, но справляется со своей задачей на ура! Также сообщу, что используется обычный докер композ на виртуалке — возможно, кому‑то такой подход будет полезен.

Для фоновых процессов (воркеров)

В приложение добавляется специальный инфрастуктурный singleton класс с флагом is_accepting, и обертка на consumers. В каждом консьюмере перед обработкой проверяем этот флаг: если True — обрабатываем задачу, если False — переносим задачу на повторную обработку (например, в rabbitmq делаем сразу nack(requeue=true))

Читать далее

[Парсинг | Python] — ниша в которую легко вкатится и сложно продолжить

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели12K

Привет Хабр!

Сегодня я бы хотел написать об такой нише как парсинг, так-как я пристрастился к Python только благодаря тому что я люблю халяву свободные данные, а так-же и с пониманием того что данные в удобном формате это не просто куча структурированных данных это будущее. Что сейчас мы и видим в эру ИИ.

Парсинг наше всё!

Книга: «Паттерны Coding Interview. Подготовка к сложному техническому интервью»

Время на прочтение2 мин
Охват и читатели9.8K

Привет, Хаброжители! Хотите успешно пройти Coding Interview в ведущую IT-компанию? Эта книга меняет правила игры в подготовке к кодинг-интервью. Алекс Сюй предлагает структурированный подход к распространенным паттернам, разбирает сложные концепции и делает реальные задачи намного доступнее.

Практические примеры, детальные объяснения и реальные задачи помогут не только пережить интервью, но и отточить навыки кодинга. А практические советы помогут понять на что именно обращают внимание эксперты, проводящие собеседования.

Читать далее

Объяснение лямбда исчисления через Python

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели11K

Реализация ключевых конструкций лямбда‑исчисления на Python и объяснение их работы. Подойдёт даже тем, кто не очень знаком с Python.

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

Читать далее

Весна на «б». Как Пастернак радуется весне одной буквой

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели7.3K

Как Пастернак призывал весну и какие интересные лексические средства использовал для выражения этого ожидания. С помощью Python раскрываю скрытые паттерны в стихотворении Бориса Пастернака

Читать далее

Исправление обработки блока reasoning content в CoT-моделях для LangChain

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели6K

В процессе работы с фреймворком LangChain была обнаружена существенная проблема в чат-классах (ChatOpenAI, ChatDeepSeek и др.) при интеграции с различными провайдерами и агрегаторами LLM. Ни один из них не сохраняет содержимое блока рассуждений (reasoning content) в финальном ответе, что увеличивает время ожидания ответа пользователем и негативно сказывается на UX ИИ-приложений, использующих CoT-модели.

В данной статье я расскажу как можно решить эту проблему на примере модели stepfun/step-3.5-flash и провайдера polza.ai.

Читать далее

Собираем AI-агента нового поколения: Python, RAG и внешние инструменты через MCP (Model Context Protocol)

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели16K

Ещё пару лет назад типичное LLM-приложение выглядело как последовательная цепочка вызовов: взяли промпт, добавили контекст из векторной базы, отправили в модель, получили ответ. LangChain популяризировал эту парадигму — chains, retrievers, memory — и это работало для простых сценариев вроде «ответь на вопрос по документации».
Но бизнес-задачи редко укладываются в линейный пайплайн. Пользователь хочет не просто получить ответ, а чтобы система совершила действие: создала тикет в Jira, отправила письмо, запросила данные из CRM, проверила погоду и только потом сформулировала ответ. Именно здесь на сцену выходят AI-агенты — системы, которые не просто генерируют текст, а автономно принимают решение, какой инструмент вызвать, в каком порядке, и интерпретируют результат. Проблема в том, что до недавнего времени подключение каждого нового инструмента требовало написания «клея» — кастомных функций, обёрнутых в @tool декоратор LangChain, с ручным управлением аутентификацией, обработкой ошибок и сериализацией данных. Для продакшена это быстро превращалось в зоопарк нестандартных интеграций, который сложно поддерживать и масштабировать.
Model Context Protocol (MCP) от Anthropic решает эту проблему, предлагая единый стандарт для подключения инструментов и источников данных к LLM-приложениям. Вместо того чтобы для каждого API писать свой адаптер, мы просто запускаем MCP-сервер, который предоставляет инструменты по стандартизированному протоколу. Агент подключается к этому серверу через MCP-клиент и получает доступ ко всем инструментам без лишнего кода.
В этой статье мы соберём полноценного агента, который:
1. Умеет работать с внешним миром через MCP (узнавать погоду и создавать GitHub Issues);
2. Имеет доступ к внутренней базе знаний через RAG;
3. Принимает решения по ReAct-подходу с использованием LangGraph.

Разбираем код и архитектуру

Зачем вам нужен прокси для Langfuse

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели5.7K

Langfuse, помимо трассирования запросов, удобно использовать для prompt management и LLM-as-a-judge.  Но в закрытой корпоративной среде он упирается в простую вещь:  LF работает со статическим API key, а ваш LLM gateway — нет. То есть gateway требует короткоживущий JWT, а Langfuse не умеет его получать.  И в этот момент интеграция ломается.

Мы столкнулись именно с такой ситуацией. Модели self-hosted, OpenAI подобный API, но для доступа к нему на каждый запрос нужен JWT, который выдаётся централизованным провайдером. Langfuse в LLM Connection умеет передать API key и заголовки, но не сможет сам сходить в auth-сервис, получить временный токен и подставить его в запрос.

В этой статье я рассказываю о своем опыте решения этой проблемы на продакшен уровне.

Читать далее

Ближайшие события

Первый серьёзный проект на Python: Manga-Day — асинхронный парсер манги и путь к микросервисам

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели8.4K

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

Читать далее

Парсинг тарифов интернета и ТВ: Анализируем тарифы провайдеров с инструментами Pandas, Seaborn, Matplotlib

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели7.1K

Даже на относительно небольшой выборке данных анализ получился весьма интересным. Я провел исследование тарифных сеток двух крупных провайдеров России — Ростелекому и Дом.ру, в шести городах‑миллионниках: Москва, Санкт‑Петербург, Екатеринбург, Казань, Новосибирск, Красноярск. И вот какой результат получил, расскажу и покажу всё на графиках:

Читать далее

Как я изобрёл велосипед: создание языка программирования с нуля ради одной игры и Telegram-бота

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели11K

Разработка собственного языка программирования с нуля: от лексера и парсера до компилятора и интерпретатора. Разбираем архитектуру, построение AST, обратную польскую нотацию, обработку ошибок со стрелочками и двустороннюю интеграцию с Python.

А в качестве демонстрации — пишем на получившемся языке игру на Pygame и Telegram-бота с long polling. Язык называется LawScript, и он умеет больше, чем кажется.

Читать далее

Домашний Netflix за вечер: Transmission + Jellyfin + Telegram-бот на Docker с поддержкой NAS

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели17K

У меня дома стоит роутер Keenetic с USB-диском на 2 ТБ. Долгое время он работал просто как сетевое хранилище — файлы лежат, Transmission на роутере крутится, всё вроде бы работает. Но дефолтный интерфейс Transmission выглядит как привет из 2009 года, управлять им с телефона неудобно, а посмотреть скачанное на телевизоре — вообще отдельный квест.

Однажды вечером решил это исправить. Итог — три Docker-контейнера, которые поднимаются одной командой, и теперь выглядит это так:

Читать далее

Интеграция Google Gemini API в асинхронный Telegram-бот на aiogram 3.x и Python

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели8.4K

В прошлую пятницу, ровно в 18:47, когда я уже мысленно открывал великолепный, наполненный витаминами, напиток,, мне прилетело сообщение от тимлида: «Бот лежит, пользователи жалуются, Gemini API возвращает 429». Наш корпоративный Telegram-бот, который должен был помогать саппорту отвечать на тикеты, просто встал колом. Причина оказалась до банальности простой: мы не учли rate limiting и думали, что 50 RPM (запросов в минуту) на бесплатном тарифе — это «бесконечно много». С тех пор мы переписали архитектуру, добавили очереди, кэширование и middleware для retry. В этой статье разберу, как с нуля подружить Gemini API с Telegram-ботом на aiogram 3.x, не наступая на те же грабли.

Читать далее

Опыт разработки picows, самой быстрой библиотеки веб-сокетов для asyncio

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели7.6K

Всем привет!

Меня зовут Тарас, я автор библиотеки picows — ультрабыстрых вебсокетов для asyncio. В этой статье я расскажу, почему вообще появилась ещё одна библиотека для вебсокетов, покажу результаты бенчмарков и заодно порассуждаю о производительности в asyncio.

Предистория

В далёком-предалёком 2021 году мне довелось поучаствовать в разработке алготрейдинг-платформы для криптовалютных бирж. Выбор языка пал на Python из-за разнообразия ML-библиотек, возможность быстро собирать прототипы и проверять идеи, отсутствия этапа компиляции и в целом наличия богатой экосистемы. Если какая-то идея взлетит, критичный участок всегда можно оптимизировать, хотя бы частично переписав его на C/C++/Cython.

Читать далее

Как работает CMA-ES для оптимизации гиперпараметров в Optuna

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.4K

Представьте, что вам нужно найти минимум сложной функции, о которой у вас есть минимальная информация: нет градиента, производных, а иногда даже явного аналитического выражения, но есть возможность подставлять значения и смотреть результат.

В таких задачах классические методы оптимизации часто оказываются бесполезны: они застревают в локальных минимумах или требуют информации, которой нет.

Здесь нам поможет CMA-ES — алгоритм, который не просто перебирает точки, а постепенно учится форме функции и подстраивает стратегию поиска.

В этой статье разберём, как он устроен и почему работает так эффективно.

Читать далее