Обновить
1024K+

Python *

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

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

Мемоизация в Python: как заставить код помнить

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

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

Решение — Мемоизация.

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

Читать далее

Оптимизация маршрутов доставки заказов маркетплейса или как мы победили в E-CUP 2025

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

Хабр, привет! Недавно завершилось ML-соревнование E-CUP 2025. Наша команда из X5 Tech заняла первое место в треке «Логистика: автопланирование курьеров», где было нужно оптимизировать время, затрачиваемое курьерами на доставку 20 000 заказов. В статье расскажем про подходы, которые использовали для решения этой задачи. Посмотрим, во сколько раз можно сжать JSON с матрицей расстояний. Какой код мы использовали для быстрого решения задачи TSP с помощью LKH-3. Обсудим, на что обращать внимание при кластеризации заказов.

Постановка задачи

Требовалось распределить порядка 20 000 заказов между 280 курьерами и построить для каждого из них маршрут так, чтобы минимизировать их суммарное время работы. Оно складывалось из времени перемещения курьеров между заказами и времени выполнения самих заказов (service time). За каждый невыполненный заказ добавлялся штраф 3000 секунд...

Читать далее

Ускорение вычислений в алгоритме DRS-виртуализации через векторизацию

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

Переписать решение с Python на Go и получить ускорение в 35 раз — звучит приятно. Но можно ведь пойти дальше, вспомнить о возможностях современных процессоров и увеличить отрыв Go до 200 раз! Статья написана по мотивам доклада для Golang Conf.

Привет, Хабр! Я — Игорь Вагулин, работаю тимлидом департамента IaaS в Cloud.ru, крупнейшем в России облачном провайдере IaaS- и PaaS-сервисов. Прогресс в производительности процессоров и видеокарт привел к тому, что мы можем использовать полный перебор там, где мы раньше обходились приближениями. Сегодня на примере алгоритма DRS-платформы Cloud.ru Evolution рассмотрим, как он может быть решен на разных версиях операций с плавающей точкой процессоров x86 и Arm, в чем сложности задействования SIMD-операций, почему это сложнее на Go и как это обойти.

Читать далее

Django ORM: как QuerySet ленится, цепляется и генерирует SQL

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

Django ORM прячет SQL за красивым Python-интерфейсом. Пишешь User.objects.filter(active=True).order_by('name')[:10] — получаешь список пользователей. Круто. Но когда запросы тормозят или N+1 пожирает базу, приходится понимать, что вообще происходит.

Разберём внутренности QuerySet: почему он ленивый, как работает chaining, когда запрос реально выполняется, и чем select_related отличается от prefetch_related на уровне SQL.

Читать далее

Mini Tower Kit для Raspberry Pi 5: Переделываем проект под Raspberry Pi 4 с Ubuntu Server

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

Переработка проекта Mini Tower Kit для Rasberry Pi 5 под Rasberry Pi 4 с приятным тюнингом или когда Pi 5 не завезли, а руки всё равно чешутся

Читать далее

Перечень всех «белых» IP-адресов Интернета

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

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

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

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

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

Читать далее

Линейная регрессия, встряска рейтинга и первое место. Часть 1: Ёлочка, живи

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

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

В задаче нужно было предсказать, "доживёт" ли ёлка до определённой даты, учитывая время рубки, наличие дома кота, вес гирлянды, далеко ли от ёлки стоит обогреватель (и есть ли он вообще) и прочие важные и не очень сведения.

Узнать, что влияет на "выживаемость" ёлки

Poisk: однофайловый поисковик для изолированной корпоративной сети

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

В изолированной корпоративной сети с полумиллионом файлов стандартный поиск превращается в рутину. Облачные сервисы недоступны, серверные решения избыточны, а встроенные инструменты ОС не справляются с объёмами и разнородностью клиентов (Windows и Linux).

Мы столкнулись с этой задачей и вместо развёртывания сложной инфраструктуры пошли другим путём: упаковали весь поисковик в один HTML-файл. Фоновая индексация на Python раз в сутки — и сотрудники получают мгновенный поиск по путям прямо в браузере.

В статье разбираем архитектуру решения: как относительные пути решают проблему разных точек монтирования, почему плоский JS-массив оказался эффективнее сложных структур, и как уместить индекс 560+ тысяч файлов в 120 МБ без потери скорости.

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

Читать далее

Генетический алгоритм как инструмент инженера: практический кейс раскроя полотен

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

Генетический алгоритм как инструмент инженера: практический кейс раскроя полотен

Генетический алгоритм — это «умный» инструмент для автоматизации раскроя материалов (металл, ткань, пластик). Вместо ручного подбора или полного перебора он по принципам естественного отбора ищет компактное размещение деталей, минимизируя отходы. В статье показан практический кейс на Python: как без сложной математики создать алгоритм, который экономит материал, время. Этот подход можно адаптировать под ваши производственные задачи.

Читать далее

Как я построила систему раннего обнаружения падений активности игровых провайдеров

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

Стек: Python, Airflow, ClickHouse, Slack

В iGaming падение активности игровых провайдеров почти никогда не выглядит как "обрыв". Чаще это медленное затухание: ставок становится меньше, затем еще меньше, игроки уходят постепенно. Формально провайдер продолжает работать, стандартный мониторинг молчит, а бизнес уже теряет деньги.

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

Вся логика работает внутри DAG в Airflow. Он запускается каждые 6 минут и анализирует активность игровых провайдеров в реальном времени. При обнаружении начала падения или восстановления система отправляет уведомления в Slack.

Читать далее

Как Питолис мир создавал

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

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

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

(спойлер: Что-то вроде даже получилось)

Вперёд, создавать миры

Работа с реестром Windows на Python на библиотеке Unishell 2.3.2

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

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

Читать далее

История одного коннектора: как мы научили Qlik говорить с каталогом данных

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

В статье рассказывается, как команда интегрировала Qlik с OpenMetadata, создав собственный коннектор вместо использования коробочного решения. Авторы объясняют, почему стандартный подход не обеспечивал нужного lineage и привязки к глоссарию, и как они решили проблему с помощью парсера скриптов Qlik, поддержки include-файлов и доменной модели Business Views. В результате удалось связать дашборды с источниками данных и бизнес-терминами, сократив время поиска отчётов с 2 часов до 2 минут и обеспечив покрытие lineage более чем для 85% приложений. Статья будет полезна тем, кто сталкивается с управлением метаданными в крупных BI-инфраструктурах.

Читать далее

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

Как мы мигрировали с Zeppelin и что из этого вышло. Часть 2. Формы

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

Это вторая (и заключительная) часть цикла статей о нашей миграции с Zeppelin. О причинах и первом опыте перехода с Zeppelin я рассказал здесь. В данной статье я хочу большее внимание уделить второму виду Zeppelin notebook, которые срочно нуждались в переносе.
Конечно, отчеты для клиентов не были настолько "забагованы" как рассылки: большая часть проблем с Zeppelin крылась именно в cron-е, который временами работал как хотел (или в интерпретаторах, мы так и не смогли разобраться, но ошибка интерпретатора возникала только когда запускали через cron). В отчетах этого звена не было, поэтому их перенос был плавным и основан скорее на особенностях UI/UX дизайна.
Данная статья может быть полезна аналитикам, которые не знают, какой инструмент использовать для своих задач и думают, что писать графический интерфейс крайне сложно (спойлер, нет), а также для команд, которые устали от Zeppelin как UI-инструмента (и от Zeppelin в целом)

Как аналитики пишут UI?

Qwen3-TTS: синтезируем голос на любом устройстве

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

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

Читать далее

Как зарабатывать на бирже, не предсказывая цену: математика против ML-интуиции

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

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

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

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

Человека зовут Дмитрий Шалаев. Эта наша совместная с ним статья. 

Сбор урожая с волатильности

Готовые промпты для программистов: шаблоны под Python, JavaScript и C++

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

2026 год на дворе. Нейросети уже пишут музыку, рисуют картины, сочиняют сценарии и даже спорят с вами в комментариях.

А вы всё ещё вручную переписываете for на list comprehension? Пора признать: кодинг тоже изменился. Теперь ваш главный навык – не только знать синтаксис, но и уметь чётко и ясно объяснять задачу тому самому ИИ-напарнику, который уже ждёт в соседней вкладке.

Но как объяснить, чтобы не получилось «ну ты понял»? Как заставить модель генерировать идиоматичный, чистый и работающий код с первого раза? Ответ – в промптах, продуманных, отточенных и готовых к использованию шаблонах.

Мы собрали для вас 10 таких промптов – от перевода кода между языками до рефакторинга и документирования. Ваш ChatGPT теперь станет в разы полезнее.

Погнали разбираться!

Читать далее

Как деанонимизировать поведение трансформера на временных рядах: визуальная диагностика и фальсифицируемые тесты

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

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

Читать далее

Как на потоке получать продуктовые инсайты из звонков в службу поддержки

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

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

В этом гайде разберём, как превратить записи звонков в продуктовые инсайты без ручного прослушивания — с помощью Python, звонков от МТС Exolve, интерфейса на Streamlit и нейронкой MWS GPT от МТС.

Читать далее

Параллелизация pytest: от xdist до Kubernetes

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

Тесты — это хорошо. Медленные тесты — это CI на 40 минут и разработчики, которые забывают их запускать локально. Разберём, как ускорить pytest от простого -n auto до распределённого запуска в Kubernetes.

Читать далее