Обновить
1024K+

Python *

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

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

Собираем Docker-шаблон для Python с Poetry: шаг за шагом

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

Это Docker-шаблон для Python + Poetry, рассчитанный на реальную работу, а не учебные примеры: воспроизводимое окружение, удобный dev-workflow, отдельные сборки под прод, dev, Jupyter и AI-инструменты.

Автор использует его в основном для DS/ML-задач, где важнее скорость и предсказуемость, чем экономия пары мегабайт образа. Шаблон обкатан в бою, экономит время и легко кастомизируется под свои нужды.

👉 Репозиторий на GitHub:
https://github.com/jamm1985/vim-python-docker-template

Почти каждый Python-проект начинается одинаково: выбрать версию Python, настроить зависимости, виртуальное окружение, переменные среды, команды запуска. На практике самые болезненные места здесь — управление зависимостями и воспроизводимость окружения: разные версии библиотек, несовпадающие Python, локальные костыли, которые сложно повторить на другой машине или сервере.

Docker помогает изолировать окружение, но сам по себе он не решает Python-специфичные задачи. Его нужно правильно наполнить: учесть работу Poetry, кеширование зависимостей, структуру проекта и базовые практики, которые одинаково хорошо работают и в разработке, и в продакшене. Именно такой шаблон мы и будем собирать дальше.

В этой статье мы шаг за шагом соберём базовый Docker-шаблон для Python с Poetry, который удобно использовать и для разработки, и для прода. В основе будет минимальное и воспроизводимое окружение, а всё остальное - Vim как IDE, Jupyter, AI-инструменты вроде Codex или Gemini - вынесено в отдельные образы и слои, которые можно подключать по мере необходимости. Начнём с самого главного - разберём Dockerfile и поймём, как собрать прочную и расширяемую базу для Python-проекта.

Читать далее

Python collections: когда обычных списков и словарей мало

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

Списки (list) и словари (dict) — это фундамент Python, но часто мы заставляем их делать работу, для которой они не предназначены. Если вы до сих пор пишете if key not in d: d[key] = [], используете list.pop(0) на больших данных или пытаетесь запомнить, что в вашем кортеже лежит под индексом [3], — эта статья для вас.

Читать далее

Кроим ДНК на Python — CRISPR gRNA finder, Часть I: Введение и базовый поиск

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

Несколько лет назад я наткнулся на статью про CRISPR‑Cas9 и домашние биолаборатории — люди буквально у себя дома экспериментировали с редактированием генов. Я бэкенд‑разработчик, биологию последний раз открывал в школе, но желание разобраться никуда не делось. В этой статье разберёмся, как работает CRISPR на минимальном уровне, и напишем CLI‑утилиту на Python для поиска потенциальных guide RNA — «наводчиков» для молекулярных ножниц Cas9.

Читать далее

Ключевые слова в иностранном языке или как увеличить свой словарный запас?

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

Рассмотрим две проблемы при изучении иностранного языка. Это освоение грамматики и увеличение словарного запаса. Они не единственные, но важные. Про способы погружения в грамматику, на языке оригинала, можно прочитать в моей статье: «Уроки французского и пересоздание данных для изучения иностранного языка с помощью обучающей программы «L'école»», в https://habr.com/ru/articles/972594/ .

Там идея простая. Мы берем хороший учебник на языке оригинала, разбиваем текст на короткие смысловые фразы, снабжаем их фонетическим слогоделением и буквальным контекстным переводом (БКП). Затем, озвучиваем данные, например, с помощью TTS, для, в данном случае, обучающей программы «L'école» и создаем двуязычные html-тексты с транскрипцией (фонетическим слогоделение) или, другими словами, небольшую книгу в формате html.

Идея изучения грамматики основана на двух принципах:

– Мы читаем, громко, вслух фонетическую транскрипцию (предварительно осваиваем фонетический алфавит с помощью представленных уроков) и смотрим подстрочный перевод. Это для html-книг. А при работе в обучающей программе, мы можем, при желании, еще набирать текст руками (используя метод «запоминание руками», в режиме «Конспект»), слушать и проговаривать вслед интерактивную озвучку. При этом, не обязательно даже стремиться запоминать текст, при наборе его руками и повторении озвученной речи, уроки запоминаются «сами собой», особенно, если к ним периодически возвращаться.

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

Читать далее

Создаем свой проектный фреймворк автотестирования API [Часть 1/3]

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

Автоматизированное тестирование API часто начинается с простых решений в виде коллекций Postman или скриптов на коленке. Такой подход работает на старте, но быстро исчерпывает себя.

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

Статья поделена на три части.

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

Статья техническая и адресована инженерам-программистам в тестировании (SDET) и инженерам по автоматизации тестирования, которые перешли от написания обособленных тестов к осознанному проектированию тестового фреймворка или только начинают этот переход.

Читать далее

Универсальный автогенератор тестов API на базе Schemathesis

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

Универсальный автогенератор тестов API на базе Schemathesis

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

Читать далее

OI‑сигналы и автоматический трейдинг: пишем трейдинг телеграм бота

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

Цель этой статьи — максимально подробно и практично разобрать реальный Python‑проект автоматического трейдинга. Это рабочий бот, который непрерывно анализирует рынок Binance Futures, ищет сигналы по открытому интересу (Open Interest), применяет набор защитных фильтров, работает с множеством пользователей одновременно, управляется через Telegram‑интерфейс, и при необходимости открывает реальные сделки через API биржи BingX.

Я последовательно разберу всю логику и все функции основного файла main.py, объясняя, как и зачем они реализованы именно так.

Читать далее

Python: Почему [] в аргументах функции — это ловушка?

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

«Почему моя функция "помнит" данные из прошлого вызова?» — этот вопрос задает почти каждый, кто начинает глубоко изучать Python. На первый взгляд, пустой список в аргументах кажется логичным дефолтом, но на практике он превращается в мину замедленного действия. В этой статье мы разберем механику работы атрибута defaults, поймем разницу между временем определения и выполнения, и выясним, почему None — это не просто отсутствие значения, а спасение вашего кода от непредсказуемых багов.

Читать далее

Базовый RAG-компонент для локального семантического поиска на Питоне

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

quad_rag_core — лёгкое Python-ядро для локального RAG, которое автоматически отслеживает изменения в папках, индексирует их в Qdrant и поддерживает эмбеддинги в актуальном состоянии. Изначально проект задумывался как инструмент MCP (Model Context Protocol), но стал основой для любой системы локального семантического поиска.

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

В процессе работы с кодовой базой через LLM-агентов и при необходимости локального семантического поиска по файлам проекта обнаружилась проблема. Инструменты агентской разработки вроде Kilo Code предоставляют встроенную функцию семантического поиска, но в компании заявляют, что в будущем эта функциональность может стать платной. Сразу задумался о том чтобы сделать свою подсистему поиска. Простые запросы к MCP-серверу на поиск и обновление тут не подойдут - система поиска должна иметь полный контроль над контекстом - она должна автоматически узнавать, что файл удалён, функция изменена или добавлен новый документ, без необходимости перезапуска индексации.

От идеи к архитектуре

В начале планировался простой MCP-сервер, который принимает команды поиска и обновления, индексирует текстовые файлы и PDF, использует Qdrant как векторное хранилище и эмбеддит локально.

В ходе проектирования стало понятно: вся логика отслеживания файлов, парсинга, чанкинга и синхронизации с Qdrant — это переиспользуемое ядро, а не часть MCP-протокола.

Так появился quad_rag_core — отдельный Python-модуль, который не знает ничего про MCP или другие внешние интерфейсы, но готов к ним подключаться.

Читать далее

Параметры Python, которые должен знать питонист

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

Есть числа, которые полезно знать программистам на Python. Насколько быстро добавляется элемент в список? Как насчет открытия файла? Это занимает меньше миллисекунды? Если ваш алгоритм зависит от производительности, какую структуру данных вы должны использовать? Сколько памяти занимает число с плавающей запятой, один символ или пустая строка? Насколько быстр FastAPI по сравнению с Django?

Это перевод недавней работы Michael Kennedy с подробными пояснениями для начинающих питонистов, которых нет у автора.

Читать далее

Особенности работы с Telegram Mini App (Web App). От биометрии до датчиков

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

Всем привет! В этой статье я собрал практические фишки работы с Telegram Mini App: что здесь реально проще, чем в обычном вебе, какие возможности Telegram дает из коробки, и что чаще всего вызывает затруднения при разработке.

Читать далее

STAC — знакомство: Новая эпоха в работе с данными о Земле (часть 1)

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

Информационный хаос в геопространственной сфере

Задумывались ли вы, как в эпоху, когда мы можем мгновенно найти любую информацию в интернете, поиск спутникового снимка конкретного поля, леса или города за определённую дату до сих пор напоминает квест? Всего несколько лет назад мир геопространственных данных представлял собой хаотичный ландшафт изолированных архивов, каждый со своим уникальным форматом данных, структурой папок, проприетарным API и системой метаданных. Чтобы проанализировать один и тот же регион по данным разных спутников, учёным и инженерам приходилось тратить до 80% времени не на сам анализ, а на «добычу» и приведение данных к единому виду. Эта проблема интероперабельности (совместимости) была главным тормозом для развития целых направлений: от оперативного мониторинга чрезвычайных ситуаций до долгосрочного изучения климата.

Именно из этой «боли» родилась идея SpatioTemporal Asset Catalog (STAC) — Каталога пространственно‑временных активов. Изначально это была не инициатива госорганов или крупных корпораций, а практический ответ сообщества разработчиков и аналитиков на ежедневные сложности.

Материал будет интересен молодым специалистам в области ДЗЗ — будущим геоинформатикам, экологам, data scientist'ам. Знакомство с STAC перестаёт быть опциональным, это становится базовой цифровой грамотностью в области геоинформатики и наук о Земле, таким же необходимым инструментом, как, например, умение работать с SQL для backend‑разработчика. Это язык, на котором будет говорить «цифровая копия» нашей планеты, и те, кто освоит его первыми, получат ключ к решению самых амбициозных задач XXI века.

Читать далее

Ctrl+Z 200 раз в день: почему я решил собрать свой макропад

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

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

А в начале я не планировал становиться разработчиком макропада.

Читать далее

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

Локальный Tool Calling или «У нас есть BFCL-V4 дома»

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

В своей прошлой статье я рассказывал о компактной модели, которая по бенчмаркам смогла превзойти модели в 10 раз больше ее самой. О том, что это стало возможным благодаря особому подходу к обучения самой модели и что такую модель вполне реально запустить у себя локально.

Однако, когда дело касается локального запуска, думаю, далеко немногие из нас запускают модели в BF16 через vLLM на Nvidia H100. А значит, все эти красивые результаты по бенчмаркам на практике, вероятнее всего, очень далеки от того, что мы получим на практике.

И я решил это проверить.

Читать далее

Как я писал свой первый веб‑чат на React + FastAPI и всё сломал (а потом починил)

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

История о том, как я перешёл от просмотра вакансий к реальному проекту. Сделал простой веб-чат на React + TypeScript и FastAPI, задеплоил на Vercel и Render, и столкнулся со всеми классическими проблемами начинающего разработчика: Git-хаос, CORS-ошибки, забытые коммиты и node_modules в репозитории.

В статье - честный рассказ про мой первый пет-проект: выбор стека, структуру проекта, работу с REST API, настройку деплоя и документацию. Без приукрашиваний, с реальными граблями и ощущением победы, когда всё наконец заработало.

Читать далее

И еще немного о QR кодах

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

Изначально я хотел написать статью про коды Рида-Соломона с иллюстрацией на примере работы QR кодов, в процессе подготовки сделал инструмент для визуализации промежуточных этапов построения QR кодов и обнаружил что у меня уже есть достаточно отсутствующего на хабре материала, в связи с чем немного поменял план. Кому не интересно читать, QR с КДПВ сгенерированы с помощью qr-verbose

pip install qr-verbose

Документация (англ.)

Про QR коды на хабре писали много, например одна из самых популярных статей за всё время "Читаем QR код" и куча переводных статей. К сожалению у этих статей есть кое-что общее: если вы попытаетесь прочитать код версии 4 и больше а также некоторые коды версии 3 следуя описанию из статей, то потерпите фиаско. Не верите? Попробуйте прочитать нижний код с КДПВ.

В статье напомню как устроен QR код и какие проблемы начинаются с версии 3, а также надеюсь, что qr-verbose поможет разобраться тем, кто еще не разобрался.

Читать далее

Сервисы — место, где живет бизнес-логика

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

Сервисы — место, где живет бизнес-логика

Здравствуйте! Идея написать эту статью пришла мне в голову абсолютно спонтанно. Я работаю в компании и, так сложилось, что нас имеет мы имеем DRF монолит на писят два миллиона строк кода. И вот однажды, чью-то светлую голову посетила мысль — «а давайте писать код одинаково». Идея прозвучала чертвоски просто и соблазнительно. С этого момента мы завели себе ишака по имени «Django Service Layer», и все дружно начали на него наваливать. Теперь навалю и вам. Би-бу-бип.

Читать далее

Подземелье c LLM-экспертами: используем PocketFlow и MCP для объяснения настолок

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

Всем привет! Меня зовут Артем, я Data Scientist компании RAFT. Сегодня я расскажу об своем pet проекте по объяснению правил для настольных игр. Цель данного проекта — понять, как можно собрать RAG агента без использования больших библиотек.

Читать далее

Плагины с человеческим лицом: истории комьюнити OpenIDE

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

Мы в OpenIDE хорошо понимаем, что среда разработки — это не просто набор инструментов и функций. Это пространство, в котором разработчик проводит значительную часть своего времени: думает, экспериментирует, ошибается и создаёт новое. Именно поэтому для нас особенно важны открытость, доступность и ощущение живого диалога внутри экосистемы. 

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

И когда до Нового года остаётся совсем немного времени, а сил на сложные технические материалы почти не остаётся, мы решили немного сменить ритм. Вместо глубоких разборов — лёгкое, тёплое и предпраздничное чтение. Так появилась идея серии интервью с участниками нашего комьюнити — людьми, которые создают плагины для OpenIDE.

Читать далее

Как интегрировать аудит-логи с SIEM: от теории к практике на Wazuh и RuSIEM

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

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

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

При должном подходе аудит-логи — не просто набор технических сообщений, а инструмент, который помогает как предотвращаь проблемы, так и эффективно расследовать их при необходимости. Но чтобы начать анализировать события, которые происходят в системе, нужно сначала эти события получить и передать анализатору — SIEM-системе. Этому и будет посвящена данная статья.

Читать далее