Search
Write a publication
Pull to refresh
5
0
Send message

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

Reading time19 min
Views6.9K

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

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

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

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

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

Читать далее

Похищаем CheatEngine на C++ с нуля. Часть 0 — Введение

Level of difficultyMedium
Reading time8 min
Views8.7K

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

Что именно будем делать? Попробуем без особых знаний залезть в исходники софта для отладки и модификации кода, под названием Cheat Engine. Он создавался годами, а наша задача — апроприировать эти знания за короткий промежуток времени!

Читать далее

Уравнение пьезопроводности с точечным источником. Получение точного решения для случая с бесконечной границей

Level of difficultyMedium
Reading time4 min
Views2K

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

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

Читать далее

FastAPI + Redis + Celery: Создание системы временного хранения файлов с автоудалением и удобным веб-интерфейсом

Reading time46 min
Views21K

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

Мы пошагово разберем процесс разработки, начиная с настройки FastAPI для обработки HTTP-запросов, интеграции Redis для эффективного хранения метаданных файлов, и заканчивая использованием Celery для асинхронного выполнения задач по удалению устаревших файлов.

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

Читать далее

Рекурсивные запросы в SQLAlchemy

Reading time18 min
Views4.9K

Когда возникает необходимость работать с иерархической структурой данных, кажется, что решение давно найдено, ведь подобные задачи уже неоднократно решались. Возможно, даже выбран инструмент, например, Python и SQLAlchemy. Однако, углубляясь в задачу, понимаешь, что вариантов множество, даже в вопросе, как извлечь данные из базы: использовать стратегию selectin для загрузки родительских элементов? Или, возможно, стоит применить joinload? А может, лучше воспользоваться CTE‑запросами, которые рекомендуются в 90% статей? Но насколько CTE действительно эффективно по сравнению с другими методами? Более того, большинство примеров рассматривают ситуации в идеальных условиях, далёких от реальных проектов.

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

Погружаемся

Рекомендации по учёбе во ВТУЗах

Level of difficultyEasy
Reading time3 min
Views11K

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

Читать далее

Введение в ПЛИС: Материальное обеспечение курса

Level of difficultyEasy
Reading time10 min
Views7.9K

В рамках подготовки курса "Введение в ПЛИС" были отобраны несколько относительно недорогих, но функционально разносторонних плат. Здесь я бы хотел рассмотреть возможности, которые они дают в плане обучения студентов.

Читать далее

Путь к геометрии Лобачевского 1: скалярное произведение и метрика

Level of difficultyMedium
Reading time3 min
Views8.7K

Часть 2: сфера

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

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

Главным преимуществом цикла являются визуализации и интуитивная подводка к тому, откуда появляются описываемые объекты. В цикле отсутствует постулирование, вроде "вот такую штуку мы назовем прямой", а объекты выводятся из первых принципов. Приглашаю к прочтению!

Читать далее

Sentinel C++20. Пишем свой Sentinel

Reading time5 min
Views5.3K

О понятии Sentinel говорят мало, особенно в русскоязычном пространстве. Вместе с Юрием Вашинко, опытным тимлидом и спикером нашего курса «С++ разработчик» сегодня рассмотрим, что такое Sentinel и как его использовать:

Читать далее

Детекторный приёмник. Немного практики

Level of difficultyEasy
Reading time15 min
Views17K

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

Читать далее

Можно ли получить рут при помощи одной зажигалки?

Level of difficultyMedium
Reading time13 min
Views19K
Спойлер: ДА.

Элитный инструмент для хакинга; от вас скрывают, что он уже у вас есть

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

Для внесения аппаратных неисправностей обычно требуется специализированное (и дорогостоящее) оборудование. Его цена связана с высокой точностью времени и места внесения неисправностей. Для снижения цен было совершено множество отважных попыток такими проектами, как PicoEMP на основе RP2040 и вплоть до «Laser Fault Injection for The Masses». (Неожиданная популярность RP2040 связана с его низкой ценой и периферией PIO, обеспечивающей ввод-вывод с чёткими таймингами и задержками.)

Какое-то время назад я прочитал об использовании соединённой с индуктором пьезоэлектрической зажигалки для барбекю в качестве низкобюджетного устройства для внесения электромагнитных неисправностей (electro-magnetic fault injection, EMFI). Меня захватила эта идея. Я задался вопросом, а чего можно добиться при помощи такого примитивного устройства? На тот момент мне пришёл в голову лишь эксплойтинг работающей на Arduino программной реализации AES при помощи DFA. И это сработало!

Но этого мне было мало. Я хотел эксплойтить что-то более «реальное», но на то время у меня закончились идеи.

Перенесёмся в наше время: пару недель назад уже ожидалось объявление о выпуске Nintendo Switch 2. Предполагается, что системное ПО Switch 2 будет практически таким же, как и на Switch 1, а программные баги для изучения у нас закончились. Поэтому у меня возникла мотивация смахнуть пыл с моих навыков взлома оборудования, и я вернулся к мыслям о низкобюджетном EMFI.
Читать дальше →

Создание аппаратно-независимых библиотек для микроконтроллеров

Level of difficultyMedium
Reading time10 min
Views12K

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

Суть создания аппаратно-независимой библиотеки состоит в том, чтобы отвязаться от того уровня абстракции (библиотеки и фреймворки), который предоставляет производитель микроконтроллеров, внутри реализуемой библиотеки. Например, для STM32 - HAL, ESP32 - ESP-IDF или Arduino, для AVR зачастую используют Arduino. Это позволит использовать одну и ту же библиотеку на различных микроконтроллерах (и не только) без изменения кода библиотеки под каждый камень.

Читать далее

Надоело просто добавлять запись в log-файл. Что еще можно сделать с помощью syslog-ng в Astra Linux SE?

Level of difficultyEasy
Reading time22 min
Views8.8K

Всем привет! Меня зовут Михаил, и в своей предыдущей статье я кратко осветил цепочку прохождения логов в ОС Astra Linux SE. Продолжаем!

Любой человек, который регулярно сталкивается с темой логирования, рано или поздно задаётся вопросом: «А что ещё можно сделать с логами, помимо простого добавления записей в некоторый файл?». Поэтому сейчас поговорим о таком мощном инструменте обработки логов, как syslog-ng.

Читать

Запускаем Embedded Linux на Hard- и Soft-CPU Xilinx Zynq: проект программируемой логики

Level of difficultyHard
Reading time20 min
Views9.1K

Привет, Хабр! Меня зовут Павел Панкратов, я ведущий инженер-программист в дивизионе искусственного интеллекта YADRO. Этим текстом я запускаю цикл статей — экскурс в особенности работы с SoC, комбинирующей в себе реализованные в «железе» аппаратные блоки (Hard IP’s) и программируемую логику (Soft IP’s). Основная задача, которая объединит все три статьи, — параллельный запуск встраиваемой операционной системы на двух различных по архитектуре процессорах, представленных в виде Hard и Soft IP-блоков.

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

Читать далее

Переход с iptables на nftables. Краткий справочник

Reading time18 min
Views160K
image

В Debian теперь нет iptables. Во всяком случае, по умолчанию.

Узнал я об этом, когда на Debian 11 ввёл команду iptables и получил “command not found”. Сильно удивился и стал читать документацию. Оказалось, теперь нужно использовать nftables.

Хорошие новости: одна утилита nft заменяет четыре прежних — iptables, ip6tables, ebtables и arptables.

Плохие новости: документация (man nft) содержит больше 3 тысяч строк.

Чтобы вам не пришлось всё это читать, я написал небольшое руководство по переходу с iptables на nftables. Точнее, краткое практическое пособие по основам nftables. Без углубления в теорию и сложные места. С примерами.
Читать дальше →

Алгоритм сравнения отпечатков пальцев: комбинация классических алгоритмов

Level of difficultyHard
Reading time18 min
Views4.9K

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

Читать далее

Почтовый сервер на Linux

Reading time11 min
Views326K
Как наладить работу почтового сервера, умеющего принимать и отправлять электронную корреспонденцию, бороться со спамом, взаимодействовать с клиентами? На самом деле, всё довольно просто.

Сегодня поговорим о почтовых серверах на Linux. Мы расскажем о том, как настроить сервер, о широко распространённом в интернете протоколе SMTP, а также о других протоколах, таких, как POP и IMAP. В итоге вы окажетесь обладателем полноценной системы для работы с электронной почтой.



Начнём с SMTP-сервера на Linux
Читать дальше →

Линукс, ассемблер и X11

Level of difficultyHard
Reading time37 min
Views10K

Слегка устав от засилия объемных современных фреймворков и «продвинутых» технологий, решил устроить себе день психического здоровья. Ниже будет полный «back-to-roots»: чистый ассемблер и открытие окна в X-сервере, на линуксе. Никаких библиотек, фрейворков и виртуальных машин.

Погрузиться

Использование численного метода Монте-Карло для вычисления многомерных интегралов

Level of difficultyMedium
Reading time10 min
Views10K

Еще в 1940-х годах, Джон фон Нейман и Станислав Улам изобрели моделирование Монте-Карло или численный метод Монте-Карло. Они назвали его в честь известного места азартных игр в Монако, поскольку этот метод имеет те же случайные характеристики, что и игра в рулетку.

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

Метод Монте-Карло используется в реальной жизни, например, в задачах, связанных с физикой, создании искусственного интеллекта, прогнозировании погоды и так далее, а также имеет огромное применение в финансах, где числовой метод Монте-Карло используется для расчёта стоимости акций, прогнозировании продаж, управления проектами и многого другого.[1]

Основное преимущество использования Монте-Карло заключается в том, что этот метод обеспечивает множество возможных результатов и вероятность каждого из большого пула случайных выборок данных, однако, метод зависит от предположений, и это иногда может быть сложной задачей. Некоторые другие преимущества Монте‑Карло: он изучает поведение системы без её построения, обеспечивает в целом точные результаты, по сравнению с аналитическими моделями, помогает обнаружить неожиданное явление и поведение системы, а также выполнить анализ «что, если». [2]

Читать далее

Вычисляем миллиардное число Фибоначчи менее чем за 7 секунд

Reading time3 min
Views24K

Мы будем считать 1000,000,000 число Фибоначчи со всеми цифрами. Для этого я буду использовать продвинутый алгоритм для поиска чисел Фибоначчи. Тут не будет базовых алгоритмов на подобии матричного возведения в степень и проще. Но эта статья будет понятна и школьнику :-)

Читать далее

Information

Rating
Does not participate
Registered
Activity