Обновить
512K+

Python *

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

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

Фотограмметрическая поворотка на Arduino за 2500 рублей

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

Ко мне на кафедре обратились двое старшекурсников. Они пишут программу для археологов: пользователь фотографирует, что нашел, программа лезет в модель (которая натренирована на исторические архивах) и возвращает карту вероятностей, где поблизости могут лежать неметаллические артефакты, которые металлоискатель не ловит. Дерево, керамика, кость, ткань и тд. Для обучения модели им нужен был большой датасет фотографий находок времен WW2 (значки, гильзы, медали, фрагменты обмундирования) под разными углами и наклонами.

Они прикинули два варианта: либо снимать каждый предмет вручную с разных ракурсов, перетаскивая штатив или поворачивая объект пальцами, либо сначала вылепить 3D-модель каждого артефакта вручную и потом программно крутить её в виртуальной сцене под разным светом, рендеря оттуда кадры для датасета. По обоим выходило пара месяцев работы.

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

Читать далее

Как мы укротили сложный процесс с помощью CQRS и стейт-машин

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

Привет, Хабр! Меня зовут Никита, я являюсь разработчиком в направлении SSL инфраструктурной команды биллинга в Timeweb Cloud. Сегодня я хочу рассказать, как мы наводили порядок в коде одного из наших микросервисов, почему отказались от лапши в контроллерах, и главное — почему мы решили выложить наш внутренний архитектурный фреймворк в Open Source. Если вы пишете на Python и хоть раз сталкивались с болью распределенных транзакций, отваливающихся внешних API и проблемой dual-write (двойной записи) — присаживайтесь поудобнее. Речь пойдет про наш open-source фреймворк python-cqrs (он же доступен на PyPI).

Читать далее

Разработка на Python: когда много думать = вредить проекту

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

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

Если и у вас есть желание написать какую-нибудь сложную абстракцию «на будущее» или применить новый паттерн просто потому, что вы его выучили — остановитесь на секунду.

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

Читать далее

Байты, нибблы, и подсветка: пишем свой TUI hex-редактор на Python

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

В жизни каждого разработчика иногда приходится рассматривать бинарные файлы через специальные HEX-редакторы.

Мы открываем его, видим три колонки цифр и букв, и кажется что все предельно ясно-понятно. Но почему адреса считаются шестнадцатеричными, что такое ниббл и зачем он вообще нужен? В этой статье мы не просто напишем свой hex-редактор на Python — мы разберем, как он устроен, от битового представления до цветовой подсветки. Выясним, чем подсветка по нибблам отличается от подсветки по категориям байтов, и почему градиенты в hex-дампе — это не просто украшение, а рабочий инструмент.

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

Будет и код, и архитектура, и результат, и практика.

Читать далее

predict_proba выдаёт 0.9 — но это не вероятность 90%

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

В ML легко перепутать аккуратное число с честной вероятностью: модель выдаёт predict_proba = 0.9, и кажется, что событие произойдёт в 90% случаев. Но это не всегда так.

В статье разбираем, почему выход модели может быть просто внутренней оценкой уверенности, чем калибровка отличается от AUC, как увидеть смещение через reliability diagram и Brier score — и когда вероятности нужно обязательно калибровать, прежде чем использовать их в бизнес‑решениях.

Читать далее

Новинка: Прикладные API для искусственного интеллекта и Data Science

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

В течение последних двух лет мы проделали большую работу по изданию неустаревающих книг, связанных с проектированием и развитием API. Как известно, сам вопрос «Что такое API?» довольно многогранен, и в своё время на Хабре развёрнутый ответ на него дала одна из наших топовых авторов Ольга Назина @Molechka — к настоящему моменту её статья собрала почти 1 350 000 просмотров и 1555 закладок. Книги Ольги Назиной не относятся к этой статье напрямую, но, если вы их ещё не читали, рекомендуем посмотреть все четыре. Будем исходить из того, что API — это предоставляемый программой интерфейс‑контракт, в котором заложены правила взаимодействия с ней, в частности, форматы принимаемых и выдаваемых данных. Нашим главным бестселлером в этой области является книга «Проектирование архитектуры API: Как правильно проектировать, развивать и эксплуатировать API» (вышла на русском языке в июне 2024 года), написанная великим Джеймсом Гофом в соавторстве с Дэниэлом Брайантом и Мэтью Оберном, а также ещё три крутые книги:

— «API как искусство: разработка, поддержка, интеграция» Сергея Константинова (вышла в мае 2024 года)
— «Архитектура бэкенда. API для надежных корпоративных приложений» Владислава Светлакова (вышла в августе 2025 года)
— «Web API. Сборник рецептов: Повысьте уровень JavaScript‑приложений» Джо Аттарди (вышла в сентябре 2025 года).

На этой в продаже появилась следующая книга, наполняющая эту нишу: «Прикладные API для искусственного интеллекта и Data Science» Райана Дэя — оригинал вышел в издательстве «O'Reilly“ в апреле 2025 года. Эта весьма оригинальная книга исследует работу с библиотеками Python и в качестве сквозного проекта рассматривает фэнтези‑футбол. Для нас это первый опыт издания книги с серьёзным включением FastAPI, но в перспективе мы не теряем надежд издать и исходно русскоязычную книгу об этом фреймворке.

Читать далее

Как за один вечер я написал сервис инвентаризации оргтехники для филиальной сети из 16 локаций

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

Знакомая работает в IT-департаменте организации с 16 филиалами и ~5000 единиц оргтехники на балансе. Попросила: “Сделай сервис, чтобы загрузить фотку шильдика, и он сказал, у кого эта железка стоит”. Звучит просто. На практике это вылилось в production-сервис с распознаванием по фото через Claude vision, ETL из бухгалтерских .xls (привет, xlrd 1.2), нормализацией грязных инвентарных номеров и автопушем в Google Sheets. Рассказываю про все грабли — от deadlock pandas vs xlrd до бага, который считал две разные железки одной

Читать далее

Ускоряем и оптимизируем numpy, pandas, scipy и sklearn

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

С момента публикации статьи на Хабре «Импортозамещаем numpy, pandas, scipy и sklearn» прошло почти три года. В течение этого времени я приостановил работу над проектом из-за нехватки времени, ресурсов и сил. К тому же, меня расстроило, что не смог выполнить просьбу пользователя @N-Cube, который активно интересовался моей библиотекой и хотел ускорить работу своего Jupyter Notebook.

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

За это время в библиотеки были добавлены поддержка CUDA, множество ручных SIMD-оптимизаций с динамическим выбором SIMD, несколько реализаций линейной регрессии и многое другое.

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

Я представлю несколько тестовых примеров в двух вариантах: с использованием AVX-2 на процессоре Intel® Core™ i7-4790K и AVX-512 на Intel® Xeon. Также покажу результаты замеров для каждого из них. Все тесты проводились без использования GPU, исключительно на процессоре. Это позволяет сравнивать производительность Python и моей библиотеки на равных условиях. Операционная система – Ubuntu 24.04, компилятор – GNU 13.3.0.

Читать далее

Как я делаю DIY-контроллер для ПК: громкость, приложения, MIDI, OBS

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

В 2024 году я не знал ничего про Arduino и Python. Но за неделю собрал на макетке рабочий прототип для управления музыкой, при помощи сил ИИ и интернета. На этом я не остановился и решил получить очень ценный опыт в разработке, сделав настоящий контроллер!

Что было дальше...

Миграция микросервисов на Python с помощью LLM: экономим месяцы для разработчиков

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

Привет, Хабр! Меня зовут Михаил, в Циане я занимаюсь развитием культуры и developer experience. Архитектура у нас микросервисная, за каждый микросервис отвечает конкретная команда. В любой команде обычно есть микросервисы, которые помогают ей достигать собственных целей, и микросервисы, которые достались по наследству — поскольку архитектура наша не всегда развивалась достаточно последовательно. Бывает, что сервис приходит с каким-нибудь разработчиком из другой команды. Бывает, что сервис когда-то отдали команде, потому что больше некому было отдать.

Наш бэкенд написан на Python и C#. Иногда в одной команде могут быть микросервисы и на Python, и на C#. Я считаю, что это нНе самый удобный расклад, я считаю: лучше все-таки иметь один стек в рамках одной команды. Если, например, в команде с питонистами и единственным шарпистом последний уходит в отпуск, то при поломке сервиса на C# остальной команде придется этого шарписта ждать. Либо срочно вызывать на подмогу другого шарписта.

Можно переписать все микросервисы на один язык. Довольно трудоемкая задача, если заниматься этим вручную. Разработчику нужно погрузиться в микросервис, максимально покрыть тестами бизнес-логику и аккуратно все переписать. Не забывая, что делать один в один нужно не всегда, поскольку архитектурные паттерны Python и C# различаются.

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

Читать далее

Как я научила Telegram-бота наводить порядок в чате с мемами: пересылка по хештегам в соответствующую тему

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

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

Читать далее

ГИС для Minecraft. Часть 1

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

Minecraft GIS + Google Sheets — отличный инструмент для обучения детей основам работы с данными!

Создаю свою ГИС для Майнкрафта с интеграцией в экосистему Google

Читать далее

Как и зачем мы писали семантический слой для ИИ аналитики – SLayer

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

Казалось бы, что может быть проще: даёшь LLM доступ к БД и просишь написать тебе нужный SQL! Но на практике и ИИ, и человек быстро сталкиваются с одинаковыми проблемами – взрывом кардинальности при JOIN’ах, ошибками в гранулярности, сложными подзапросами и отсутствием понятного бизнес-контекста.

Рассказываем, зачем и как мы проектировали семантический слой для детерминированной аналитики и адекватной работы ИИ-агентов с данными.

Давайте разбираться!

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

Как мы анализировали поведение пользователей Яндекс Музыки на 50 млн событий

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

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

Читать далее

Архитектура крипто-сканера для биржи: Open Interest, Funding Rate, EMA и MACD в реальном времени

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

В этой статье разберём архитектуру полноценного фьючерсного сканера для биржи BingX, построенного на Python. Система анализирует десятки и сотни торговых инструментов в реальном времени, фильтрует активы по Open Interest и Funding Rate, рассчитывает технические индикаторы EMA и MACD, а затем формирует торговые сигналы на основе синхронизации нескольких независимых факторов.

Речь пойдёт не о полноценной архитектуре рыночного анализатора, пригодного для дальнейшего масштабирования: подключения Telegram-уведомлений, машинного обучения, кластерного анализа, order flow и полностью автоматической торговли через API.

Все файлы загружены на GITHUB. В статье описываю в основном логическую часть и ньюансы. Так что крайне советую к параллельному изучению самого скрипта и кода.

Читать далее

TorFlash — приложение для Linux: поиск торрентов, скачивание и копирование на флешку в одно нажатие

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

У меня телевизор, который читает файлы с USB-флешки. Флешка отформатирована в FAT32, а значит — максимум 4 ГБ на файл. Типичный вечер выглядит так:

Linux-приложение для тех, кто смотрит фильмы с USB-флешки. Поиск торрентов по Rutor, NoNaMe-Club и RuTracker, скачивание через libtorrent и автоматическое копирование на флешку с умным разбиением MKV-файлов под FAT32. Один бинарник, PyQt5, open source.

Читать далее

MTProxy jumper — делаем автоматическое переключение прокси-серверов Telegram

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

В свете последних новостей вокруг Telegram провела некоторые эксперименты с протоколом MTProxy.

Основная идея: сделать ПО, выглядящее для Telegram-клиента как MTProxy-сервер, и осуществляющее дальнейший обмен данными со сторонними MTProxy-серверами.

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

Читать далее

CGE: визуализация кравлера и скрытых связей между поддоменами

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

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

Хотелось бы поделиться с вами моим open-source проектом для поиска директорий, поддоменов, ака crawler. Я не говорю, что он перевернёт мир краулеров или превзойдёт Katana, но, думаю, утилита будет крайне полезна для red team-команды.

https://github.com/a11mut3d/CGE

Проблемы, которые решает CGE

Современное веб-приложение — это не монолит, где всё в одном HTML, а куча микросервисов, API и в целом эндпоинтов. Составить карту всех запросов достаточно сложно, поэтому вы не видите картину целиком.

CGE помогает в этой задаче. Он:

— собирает все поддомены из SSL-сертификата (как в crt.sh); — краулит каждый эндпоинт, парсит HTML, JS, формы, аплоады, файлы; — отслеживает, куда идут запросы в реальном времени через взаимодействие с формами; — строит граф взаимодействия эндпоинта в реальном времени.

Как это выглядит

На данный момент у CGE есть 2 варианта использования: web UI и CLI.

Если про CLI особо и нечего расписывать (он просто выдаёт все найденные эндпоинты в консоль или по желанию сохраняет в файл), то на web UI давайте остановимся подробнее.

Веб-интерфейс я постарался сделать в стиле Obsidian (спойлер: получилось не очень).

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

Технические детали

Реализовать я решил на Python с использованием BS, requests, DNS. В качестве базы данных я решил использовать Neo4j.

Читать далее

Автопостинг на 8 платформах: архитектура waterfall, custom publisher'ы и API-ловушки

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

Построил pipeline публикации контента на 8 платформах. Время распространения статьи сократилось с 50 минут до 90 секунд. Рассказываю, почему waterfall обходит parallel, какие API-ловушки встретились, и почему без человека в цикле нельзя.

Читать далее

Контекстные менеджеры в Python за пределами with open(): пишем свои и упрощаем код

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

with open() знают все. Но контекстные менеджеры в Python — это не только про файлы. Они помогают безопасно управлять соединениями с БД, транзакциями, async‑ресурсами, временными настройками и cleanup‑логикой без бесконечных try/finally.

В статье разбираем, как работают контекстные менеджеры, как писать свои через contextlib и где они реально упрощают продакшен‑код.

Читать далее