Как стать автором
Поиск
Написать публикацию
Обновить
501.99

Python *

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

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

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

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

В прошлом месяце я уже анализировал самые популярные статьи Хабра за январь, чтобы узнать что вообще происходит в мире. Теперь пришло время посмотреть, изменилась ли картина в феврале. Какие темы остались актуальными, а какие ушли в тень? Давайте разберёмся, чем жил Хабр в феврале 2025 года.

Парсим и анализируем 🤖

Смогу ли я уложить оптимизирующий компилятор в тысячу строк питона? Прогон первый: mem2reg

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

Год назад мне пришлось взять на себя курс лекций по теории компиляторов. Вы встречались некомпетентными преподавателями? Это я, здравствуйте! Прежде чем учить других, я всё-таки решил заглянуть в учебник сам, и это вылилось в серию статей "компилятор за выходные" (да, я помню, что за мной должок с описанием лексера/парсера). В итоге я уложил компилятор со мной придуманного си-подобного языка на GNU ассемблер в шестьсот строк кода, причём без внешних зависимостей, включая парсинг.

Всё бы хорошо, вроде работает, но кажется, самое веселье осталось за бортом. Мой компилятор, по факту, это простой pretty print вокруг синтаксического дерева, подумаешь. А как работают оптимизирующие компиляторы? И поставил я себе задачу попробовать уложить игрушечный, но всё же рабочий оптимизирующий компилятор в тысячу строк кода. Как думаете, получится?

Итак, тема сегодняшнего разговора - вынос переменных из памяти в регистры, оно же оптимизационный проход mem2reg, см. кпдв.

Читать далее

Мне 34, я был в 65 странах, и у меня есть для вас лайфхак

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

Вы же попались на этот кликбейт?

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

За первый же месяц с ботом я купил перелёт в США и обратно в два раза дешевле стандартной цены. А сколько времени сберёг на мониторинг — не сосчитать. Поделюсь ссылками на мой проект в GitHub и названием бота. Вы сможете собрать похожее решение под свой запрос и летать в отпуск, испытывая меньше фрустрации от ценника на билеты и туры.

Читать далее

Pydantic 2: Полное руководство для Python-разработчиков — от основ до продвинутых техник

Время на прочтение26 мин
Количество просмотров66K

Друзья, сегодня мы погрузимся в мир Pydantic 2 – мощного инструмента для валидации данных в Python! Узнаем, почему эта библиотека стала незаменимой в 30% Python-проектов и как она упрощает работу с данными. От базовых концепций до продвинутых техник – мы охватим всё, что нужно знать современному Python-разработчику. Готовьтесь к практике – ведь только так можно по-настоящему освоить Pydantic и сделать ваш код более надёжным и эффективным.

Читать далее

Большое руководство по сетям и шифрованию трафика в Linux (часть 1)

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров26K

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

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

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

Читать далее

Как написать мод для TrackMania 2020 и не запутаться

Время на прочтение12 мин
Количество просмотров2.8K

Привет, Хабр! Меня зовут Вова, я разработчик в Selectel. В прошлом году серии TrackMania исполнилось 20 лет. Это игра моего детства и мне захотелось «размять свои юные олдскулы», посмотреть, что изменилось, и применить новые навыки.

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

Озеро для дата-склада: как мы нырнули в новые методы хранения данных и что из этого вышло

Время на прочтение12 мин
Количество просмотров7.4K

Привет, Хабр! Меня зовут Михаил Килинский, я — Senior Developer в проекте Data Warehouse «Лаборатории Касперского». Наша команда строит хранилища данных и разрабатывает ETL- и ELT-процессы, мы пишем на Python, SQL и C# (.NET), а весь код находится в монорепозитории.

Гибкие методологии построения хранилищ данных — очень популярный тренд. Причина — возрастающая сложность корпоративных моделей данных и необходимость интеграции большого числа разнородных источников, которые включают в себя не только традиционные СУБД и плоские файлы, но и различные real-time-брокеры сообщений, внешние API и базы данных NoSQL.

В этой статье хочу рассказать, как мы изначально хранили данные, почему решили внедрить методологии Data Lake и Data Vault и к чему это привело. Кроме того, покажу, как мы изобрели свой велосипед разработали свой фреймворк по автоматизации работы с помощью модели Data Vault.

Читать далее

Проблема альтернативной реализации

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

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

Как увеличить скорость python-скриптов: C-расширения и Python/C API

Время на прочтение19 мин
Количество просмотров6.9K

Во время разработки ПО мы сталкиваемся с выбором между удобством языка и его производительностью. Python завоевал популярность благодаря простоте и изящности, но когда дело доходит до низкоуровневых действий или махинаций, требующие производительность и быстроту, на помощь приходит C.

Мы будем изучать именно интеграцию расширений во времени сборки, а не просто загрузка библиотек через ctypes.

В этой статье я хочу рассказать о том, как интегрировать C-расширения с использованием библиотеки Python.h. Я также расскажу как создать свою python-библиотеку с C-расширениями. Также мы исследуем, как устроен Python — например, вспомним, что все является объектами. Я буду использовать poetry как менеджер рабочего окружения.

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

Не буду тянуть, начнем!

Читать далее

Самая наглядная и простая модель естественного отбора: птицы со всего одним геном. Важность разнообразия у потомков

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

Давайте рассмотрим наипростейшую модель естественного отбора. В сети встречал модель с двумя параметрами-генами, а у нас будет всего один, при сохранении наглядности. Модель настолько элементарна, что её можно обсудить даже со своим ребёнком (проверил со своей шестилетней дочкой).

NB: Весь код в статье интерактивный, кликайте, чтобы открыть, запустить, попробовать свои идеи сразу на ходу. Используется Python + p5py (который разрабатывался для книги для детей, преподавания в Универе, детских кружках и школе)

Внимание: 21 гифка, 29 фрагментов кода и 12 ссылок на запускаемый код.

Читать далее

Mount — ещё один способ уменьшения размера Docker-образа

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

Делюсь лайфхаком по уменьшению размеров Docker-образов. Как-то нам попалась на поддержку и развитие CRM-система, написанная на Ruby...

Обновили Ruby-пакеты и под них код, написали Dockerfile. Первая сборка была удручающей: образ в 2Гб. Это нормальный размер, если ты собираешь образ с Torch и другой ML-штуковиной, но CRM - нет. В результате дальнейших действий, удалось сократить размер образа до 200Мб.

Cделали следующее, чтобы сократить размер

Как ChatGPT удалил в нашем чате 555 спам-сообщений с точностью 98,38%

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

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

Сначала я написала простого бота на aiogram, который фильтровал сообщения по ключевым словам. Но этого оказалось недостаточно...

Код на Python, скрины и цифры

Автомодерация изображений: как исправлять нарушения, сохраняя количество и качество контента

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

Привет! Меня зовут Владимир Морозов, я старший дата-сайентист в отделе автоматической модерации Авито. Раньше мы блокировали объявления, которые нарушают правила публикации, а теперь исправляем — с помощью ML-системы. Так мы сохраняем количество контента, сокращаем стоимость модерации и улучшаем пользовательский опыт. В статье подробно расскажу обо всех этапах внедрения новой ML-механики: от идеи и исследования подходов до оптимизации нейронок и вывода в продакшен.

Читать далее

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

Вредоносные пакеты deepseeek и deepseekai были опубликованы в Python Package Index

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

В рамках исследования и отслеживания угроз группа Supply Chain Security департамента Threat Intelligence экспертного центра Positive Technologies (PT ESC) обнаружила и предотвратила вредоносную кампанию в главном репозитории пакетов Python Package Index (PyPI). Атака была нацелена на разработчиков, ML-специалистов и простых энтузиастов, которым могла быть интересна интеграция DeepSeek в свои системы.

Подробности

Вдохновился серией чёрного зеркала и сделал свой симулятор жизни

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

В серии чёрного зеркала (7 сезон 4 серия) в основе сюжета как программист сделал симулятор в котором развивались виртуальные существа (Тронглеты). Решил от части повторить, что бы существом управлял агент ИИ.

Сделал симулятор, где в рандом сгенерированном мире появляется агент. У него есть показатели:
- голод
- жажда
- комфорт
- его цель
- мысли
- глобальная цель.
Он может взаимодействовать с миром, находить предметы, крафтить любые предметы, придумывать, что нашел. Даже если в разработке я не закладывал какие-то предметы, объекты или механики он может всё равно их «найти». Например, нашел тростник который в будущем использовал для создания тетивы для лука. Он сам подбирает эмодзи, название предмета, придумывает механику и кладет себе в инвентарь. Для упрощения сделал пошаговую симуляцию.
Начало промта выглядит вот так (полный промт больше в 10 раз):

Про механику мира и разработку. Скриптом создаем карту 20х20 клеток. На нее случайно раскидываем эмодзи 🍓🌳🦌⛰🕳. Агенту отправляется видимость клеток на 3 вокруг нет. Он может ходить только на одну клетку заход. Ещё агенту задаются состояния:

Что у него есть голод 0/100
Комфорт
Жажда
Инвентарь
Взаимодействовать с миром он может, убрать объект логически, добавить объект логически, добавить и убрать предмет в инвентарь. По сути больше ничего, дальше он сам должен существовать в этом мире. Нет ни рецептов крафта, не сколько съеденная ягода восстанавливает голода. Но много про то "где" он находится и как "выживать" в этом мире (без подсказок)
Начало промта выглядит так:

Читать далее

Как я сделал RAG для своей компании

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

Появилась свободное время, и я решил сделать RAG (Retrieval Augmented Generation) для нашей компании. Компания небольшая, но документации технической и бизнес накопилось очень много, в основном на wiki.

Цель - подключить бота в slack, который быстро может выдать инфу по нужной теме.

Источник знаний:

Читать и срочно делать свой RAG

Моделирование управления AC двигателя — Field oriented control of PMSM с помощью opensource решений

Уровень сложностиСложный
Время на прочтение50 мин
Количество просмотров5.1K

В этой статье я хочу поделиться результатом своих исследований в области моделирования систем управления двигателями переменного тока. В качестве объекта управления был выбран синхронный двигатель с постоянными магнитами PMSM (Permanent Magnet Synchronous Machine) как наиболее распространенная машина в современных транспортных средствах. Основное внимание будет уделено построению математической модели системы, объекта управления, и алгоритмов для симуляции. Для реализации модели я выбрал open source решения: Python control, Scilab. Мне было интересно, возможно ли использование свободных средств моделирования для построения более-менее сложных и реальных систем. Далее я поделюсь своими впечатлениями. В первой части статьи приводится теоретический материал, где описываются основные уравнения двигателя и элементы теории управления. Для теоретической части необходимы базовые понимания электротехники, ниже приложу ссылки, где можно обновить знания. Я постарался проработать разные источники литературы, чтобы взять необходимый минимум, с которым самому пришлось столкнуться для понимания сути процессов управления двигателем. Читатель вправе пропустить матчасть и перейти сразу к описанию реализации, и при необходимости вернуться к некоторым теоретическим аспектам в этом материале, или других источниках. Реализация алгоритмов управления построена по классическому принципу с помощью диаграммы потоков.

Читать далее

Создаём генератор аудиокниг с персональным переводом

Уровень сложностиСредний
Время на прочтение39 мин
Количество просмотров6.9K


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

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

Самый популярный вариант «обучающего перевода», которым пользовались и вы, – интерактивный, в котором пользователь следит за текстом на языке оригинала, и сам раскрывает переводы и пояснения забытых или новых для себя слов. Можно ли совместить эти подходы, взяв преимущества каждого, и переложить их в формат аудиокниги? Этим сегодня и займёмся.
Читать дальше →

Ломаем капчу 4Chan

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

Этот проект начинался как обучающий: я хотел углубить свои знания в машинном обучении, и в частности в TensorFlow. В конечном итоге мне хотелось получить работающую в браузере модель машинного обучения, которая смогла бы надёжным образом (с точностью не менее 80%, а предпочтительно >90%) решала капчу 4Chan. Я достиг этих целей и расскажу в статье, каким образом мне это удалось!

Код я опубликовал на GitHub.

Читать далее

Pytest-xdist: как распараллелить тесты без конфликтов в базе

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

Привет! Я Андрей Сташок, бэкенд-разработчик в KTS. В этой статье я расскажу о запуске параллельных тестов через pytest-xdist.

Почему это важно?

Объясню на нашем примере. При разработке продуктов мы постоянно выполняем юнит-тестирование. Раньше мы проверяли все последовательно, и с расширением тестовой базы время проведения испытаний заметно возрастало. Распараллеливание через pytest-xdist помогло нам сильно ускориться, и сегодня я хочу поделиться этим трюком с вами.

Я расскажу, как запускать параллельные тесты для реляционной БД PostgreSQL (с драйверами asyncpg и psycopg2) и key-value БД Redis. Для подключения к реляционной БД мы будем использовать SQLAlchemy, а для Redis — библиотеку redis. Кроме того, я рассмотрю, как автоматизировать выполнение миграций при каждом запуске тестов с использованием alembic.

Читать далее

Вклад авторов