Обновить
778.3

Python *

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

Сначала показывать
Период
Уровень сложности

Как избавиться от проприетарных ETL: кейс миграции на dbt

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

Несколько лет назад наш корпоративный слой данных жил на проприетарных технологиях. Данных было много, а основная СУБД — MPP-система Sybase IQ — долго не обновлялась. Мы регулярно сталкивались с тем, что у кластера «падали» ноды, каталог базы повреждался, порой даже терялись данные, а вендор не спешил выпускать исправления или даже признавать проблему. ETL-процессы работали через IBM DataStage, который также перестал развиваться. Все решения были закрыты, и мы не могли влиять на их улучшение. Vendor lock-in означает, что вы зависите от поставщика: если вендор не поддерживает нужные возможности, развитие замедляется, а долгоживущие ошибки остаются нерешенными. Такое положение становилось критичным.

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

В этой статье рассказываем о том, как мы перешли с проприетарных ETL-инструментов на open-source на базе dbt, какие проблемы решали по ходу внедрения, и как построили экосистему вокруг dbt для автоматизации рутинных задач.

Читать далее

Делаем аутентификацию без push и SMS: звонок с диктовкой кода роботом

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

Привет, Хабр! Я Катя Саяпина, менеджер продукта МТС Exolve. Сегодня расскажу, как сделать двухфакторную аутентификацию через звонок с применением технологии text-to-speech. Работает просто — пользователь получает код, продиктованный роботом во время голосового вызова. ​​Этот альтернативный SMS и push-уведомлениям способ доставки кода, при этом относительно простой в реализации, дешевле SMS и работает без интернета.

Я покажу, как это работает, на конкретном кейсе.

Читать далее

PEP 723 + uv: однофайловые скрипты с зависимостями

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

Привет, Хабр!

Если вы собираете прототип на C++, то один файл с main.cpp иногда реально компилируется в рабочую утилиту. Библиотеки либо завозятся пакетным менеджером заранее, либо у вас есть header-only зависимость и всё взлетает. В Python долгое время это было болью: любой однофайловый скрипт, который требует requests или rich, уже тянет за собой виртуальные окружения, инструкции в README и локальные фичи.

Есть рабочий стандарт для нормальных однофайловых сценариев с зависимостями — PEP 723: вы объявляете зависимости прямо в комментариях, а раннер ставит всё сам и запускает в изолированной среде. В связке с uv получается неплохой такой способ делиться скриптами, в том числе для пвспомогательных задач. И да, у этой красоты есть нюансы безопасности, о них поговорим отдельно.

Читать далее

Основные паттерны микросервисной архитектуры: Strangler Fig, API Gateway, Service Mesh и другие

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

Микросервисная архитектура стала де-факто стандартом для построения современных масштабируемых приложений. Вместо единого монолитного приложения система разбивается на набор мелких независимых сервисов, каждый из которых отвечает за свою четко обозначенную функцию. Такой подход позволяет упрощать разработку и развертывание отдельных компонентов, повышать отказоустойчивость и масштабируемость системы. Однако переход к микросервисам и их эффективное использование сопряжены с рядом сложных задач. Для их решения в практике выработаны архитектурные паттерны – типовые подходы и шаблоны проектирования.

В данной статье мы разберем несколько ключевых паттернов, связанных с микросервисами. Речь пойдет о паттернах миграции и интеграции (таких как Strangler Fig – «удушающее дерево» и API Gateway), о сетевых и структурных паттернах (Service MeshSidecar), о шаблонах работы с данными (Database per ServiceCQRS) и об особом подходе к хранению состояния (Event Sourcing). Для каждого паттерна мы рассмотрим его суть, назначение, примеры использования, а также плюсы и возможные сложности. К некоторым паттернам приведены упрощенные диаграммы и фрагменты кода, чтобы иллюстративно показать, как они работают на практике.

Читать далее

Анатомия WebSocket: человечный разбор RFC 6455

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

Как правило, работа с веб-сокетами сводится к паре строк: connect() и send(). Удобные абстракции библиотек превратили этот протокол в магическую трубу, по которой летают данные в обе стороны. Но магия заканчивается ровно в тот момент, когда соединение молча отваливается с кодом 1006, балансировщик рвет коннект, а в логах появляются странные ошибки фрагментации. В этой статье мы спустимся с небес высокоуровневых фреймворков на уровень байтов и битовых масок.

Мы пройдем полный путь WebSocket-соединения, опираясь на RFC 6455: от генерации ключа на стороне клиента до обмена закрывающими фреймами. Попутно разберем весь необходимый понятийный аппарат: что такое фреймы, какими они бывают, зачем их маскируют и фрагментируют и т.д. Цель не в том, чтобы научиться пользоваться конкретной библиотекой, а в том, чтобы понять, как протокол работает изнутри независимо от языка и реализации. Для иллюстраций по тексту статьи даны сниппеты на Python.

Погружаемся

От WSGI к ASGI: как Python научился работать с асинхронным вебом

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

WSGI и ASGI — то, на чем стоит весь современный веб на Python. Это стандарты, которые описывают интерфейс между веб-сервером и приложением. Благодаря им сервер и фреймворк не образуют жесткую пару: любой WSGI-сервер запускает любое WSGI-приложение, любой ASGI-сервер любое ASGI-приложение. Uvicorn не знает ничего о FastAPI, FastAPI не знает ничего о Uvicorn, они знают только о том, что передать на вход и что ожидать на выходе.

Разберем, как все это устроено.

Погружаемся

Fine-tuning Qwen-8B под проприетарный синтаксис (CADINP) на одной RTX 3090: опыт инженера-конструктора

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

Возможно ли на одной домашней видеокарте (RTX 3090) создать AI-ассистента, который знает узкоспециализированный инженерный язык лучше, чем GPT-4?

Я инженер-конструктор, и мне надоело писать рутинный код для SOFiSTiK руками. Поэтому я решил дообучить (fine-tune) модель Qwen 3 (8B) с дистилляцией логики DeepSeek под свои задачи.

В статье подробный технический разбор:
— Как собрать датасет с логикой Chain of Thought (CoT).
— Как бороться с Out of Memory в 24 ГБ VRAM на Windows + WSL.
— Рабочие конфиги Unsloth, параметры обучения и итоговая GGUF модель.

Раскрыть

Почему все ненавидят 1С, но продолжают на нём работать?

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

Привет, Хабр! И тебе, случайный читатель, который зашёл сюда в перерыве между поиском ответа на очередную ошибку в типовой конфигурации — возможно, с горящим взором и трясущимися от гнева руками.

Сегодня поговорим о феномене: странной, почти мазохистской привязанности 1С-разработчиков к своему инструменту. Это как брак, в котором ты ежедневно угрожаешь разводом, но остаёшься — потому что «а куда деваться?».

Читать далее

Роевой интеллект: как 15 строк кода заменяют централизованное управление дронами

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

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

*Код и симуляция: Python 3.8+, matplotlib, numpy

Проблема централизованного управления

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

Читать далее

Голосовой ввод для Windows через Vosk своими руками

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

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

Лучшим выходом из моей ситуации было создать свое минималистичное решение, и вот как это было:

Читать далее

CPython простыми словами: всё, что нужно знать начинающему

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

Привет, Хабр!

Сегодня вместе заглянем за дверки Python и разберемся, что же там внутри. Оказывается, под привычным синтаксисом Python скрывается целая машина – интерпретатор CPython, написанный на языке C.

Это самая популярная и каноничная реализация Python. Существует и другие реализации (PyPy, Jython, IronPython и т.д.), но 99% времени, говоря Python, имеют в виду именно CPython – оригинальный и наиболее поддерживаемый интерпретатор. Без строгой формальной спецификации языка Python, именно поведение CPython во многом определяет, что такое Python.

Изучить внутреннее устройство

Расширяем базовый функционал n8n: от RAG до кастомного агента с MCP

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

Компании и энтузиасты стремятся автоматизировать процессы, но не каждый готов писать код с нуля. Поэтому в последние годы особую популярность набрала no-code платформа n8n. С её помощью можно быстро собирать пайплайны различной сложности: от простых чат-ботов до умных ассистентов, которые управляют календарем и напоминают о задачах.  Обычно в статьях про n8n затрагивают только готовые блоки, собирают из них пайплайны автоматизации, но в то же время упоминают об ограниченности использования этой платформы. Действительно, базовых блоков в n8n может не хватать, чтобы закрыть все потребности пользователя, но сегодня я покажу, как можно обойти эти ограничения и расширить базовый функционал n8n.

Привет, Хабр! Меня зовут Музафаров Данил, я Data Scientist в компании Raft. В этом туториале я шаг за шагом покажу: как локально развернуть n8n, как добавить кастомные API и создать полноценного AI-агента с MCP tools с расширенным функционалом. Придется немного писать код, но главное, что это позволит оставить архитектуру решения на n8n, дополнив его кастомными тулами.

Читать далее

Тестовые идентификаторы: как и где расставлять правильно

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

По фактам: почему CSS и XPath — путь в ад, а test-id — спасение. В статье — реальные советы, как договориться с командой, внедрить test-id и писать автотесты, которые не разваливаются каждую пятницу.

Читать далее

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

Настраиваем контекст Copilot: что работает, а что нет

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

Недавно мы разбирались, как писать код с Cursor. Знать про настройку LLM необходимо всем, кто профессионально использует нейросети в своей работе. Предлагаем перевод еще одной статьи Романа Иманкулова. Автор исследовал GitHub Copilot, чтобы разобраться в составлении инструкций по кодированию и, таким образом, повлиять на предложения, которые генерирует Copilot.
Читать дальше →

Лучшие статьи Хабра в марте 2025 года

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

Снова приветствую вас на ежемесячном дайджесте! Цель - разобраться, чем жил Хабр в марте 2025: какие темы вызвали жаркие споры, а какие прошли незамеченными.

В прошлом месяце в комментариях прозвучала резкая критика: мол, топ статей превратился в «инфоцыганщину»: мотивацию, лёгкий заработок и истории успеха, вытесняющие глубокий технический контент. В этом выпуске мы не просто изучим статистику популярности, но и проверим, сохраняется ли тренд, а также разберём, какие статьи вызвали самый живой отклик - как восторженный, так и скептический.

Впереди - методология отбора, топ марта, анализ авторов и специальный раздел, где обсудим критику и её обоснованность.

Читать далее

Как разрабатывать утилиты для тестов embedded-прошивок без железа: практика Test Driven Development

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

Часто SDET-инженеры, работающие со встраиваемыми системами, не приступают к работе, пока не получат реальное железо: датчик, микроконтроллер или плату с новым чипом. Такой подход обычно оправдывают тем, что без физического девайса «на столе» писать корректно работающий софт невозможно. Очевидный минус: увеличивается время выхода продукта и нового функционала на рынок. Но разработку можно начать, даже не имея в своем распоряжении устройства: все дело в договоренности между командами.

Меня зовут Рустам Ахмадуллин, я старший инженер по системной верификации аппаратуры в YADRO. Расскажу на примере датчика температуры LM75A, как написать API без физического доступа к устройству и его прошивке. Разберем методологию Test Driven Development, при которой разработка начинается с написания автоматизированных тестов, а не самого кода.

Читать далее

Основы Python за 1 статью: от Hello World до рабочего скрипта

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

Python за одну статью? Да, если выкинуть оттуда ООП.

Новичков часто пугают сложной теорией, хотя для старта нужно всего 9 блоков знаний. Разбираем только то, что реально нужно для написания скриптов: синтаксис, структуры данных, функции и работу с файлами. В конце — пишем полноценную консольную игру. Лучший старт для новичка и шпаргалка для забывчивых.

Читать далее

«Python. Уроки для начинающих»: почему это не просто очередной учебник по языку

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

Самоучителей по языку Python сейчас выпускается много, и вот буквально несколько дней назад в «БХВ» вышло еще одно издание — книга Владимира Дронова «Python. Уроки для начинающих». Это не обычное пособие для тех, кто хочет освоить новый для себя язык программирования, а книга с уникальным подходом.

Что же в нем уникального?

CPython — Сборка мусора изнутри, ч.3

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

В прошлых частях мы поговорили о том, как происходит регистрация объектов в сборщике мусора, о том как происходит планирование и вызов сборки мусора, что такое молодое поколение и как устроена для него сборка мусора. В этой части пришло время поговорить об инкрементальной сборке мусора — главному нововведению версии 3.14 в части сборки мусора. Поговорим, как она устроена, какие даёт преимущества и какие имеет недостатки, а также затронем полную сборку мусора.

Если вам интересно, давайте попробуем разобраться.

Читать далее

Pydantic vs Adaptix – плюсы, минусы и области применения

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

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

Читать далее