Обновить
560.43

Python *

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

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

PyWinAuto + Maya 3D — записки начинающего автоматизатора

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

Почему важно узнавать подробности до старта работы

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

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

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

Превращение месяцев в недели — тут.

Поиск объектов на фото с помощью Python

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

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

Полный код и все исходники можно найти на моем Github.

Для того, чтобы написать легковесное приложение для обнаружения объектов на изображении, установим необходимые библиотеки:

Читать далее

Выбираемся из лабиринта при помощи алгоритма «поиск в ширину» (BFS) на Python

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

Учимся использовать и реализовывать на Python алгоритм поиска в ширину (BFS) для решения реальных задач.

Давайте поговорим о популярном алгоритме, который называется «Поиск в ширину» (BFS). Затем реализуем этот алгоритм, чтобы найти решение для реальной задачи: как выбраться из лабиринта.

Алгоритмы поиска применяются для решения таких задач, которые можно смоделировать как графы. Каждый узел графа – это экземпляр задачи. Каждый поисковый алгоритм начинается с узла (исходный экземпляр – состояние) и наращивает вслед за этим узлом новые (то есть, новые экземпляры задачи), решая задачу допустимыми способами. Этот процесс останавливается, как только алгоритм находит решение (успех – конечное состояние) или не может создать ни одного нового узла (провал). Среди самых популярных алгоритмов поиска – поиск в глубину (DFS), поиск в ширину (BFS), жадный алгоритм, поиск по критерию стоимости (UCS), A*-поиск, т.д. В этой статье речь пойдет о поиске в ширину.

Читать далее

Компонентные тесты в собственном соку

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

Всем привет! Я QA Engineer в Scalable Solutions. Наша команда отвечает за работу сердца биржи – биржевого ядра, которое процессит регистрацию, сведение торговых заявок, проведение различных проверок и выполняет ряд других важных операций. Мы уже писали про специфику тестирования высоконагруженного бэкенда в финтехе, но сегодня я хочу рассказать, какое место в нашем процессе занимают компонентные тесты, и как мы их готовим.

Читать далее

Python-скрипт для поиска совпадений в текстовых файлах. Графический. Для Inkscape

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

Сравниваем два текстовых файла средствами графического редактора Inkscape

Читать далее

Как установить лицензионную защиту кода на Python и обезопасить данные с помощью HASP?

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

Всем привет, я Вячеслав Жуйко – Lead команды разработки Audiogram в MTS AI.

При переходе от On-Cloud размещений ПО на On-Premises в большинстве случае перед вами неизбежно встанет задача защиты интеллектуальной собственности – и она особенно критична для рынка AI, где задействуются модели, обладающие высокой ценностью для компании. К тому же, в этой сфере широко используется интерпретируемый язык Python, ПО на котором содержит алгоритмы, являющиеся интеллектуальной собственностью компании, но фактически распространяется в виде исходных кодов. Это не является проблемой для On-Cloud решений, но в случае с On-Premises требует особой защиты как от утечек кода, так и самих данных.

Рассказываю реальную историю решения этой, казалось бы, не самой тривиальной задачи. Итак, обо всем по порядку.

Читать далее

Эволюция игрового фреймворка. Сервер на Python. Часть 2 из 2. Слои логики

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

В прошлый раз мы отделили логику от инфраструктуры и разбили последнюю на четыре слоя: Server → Parser → Application → Repository. Классы инфраструктуры составляют основной фреймворк, который берет на себя всю рутинную работу, а нам предоставляет писать одну только логику.

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

Если сильно обобщить, то контроллеры занимаются преобразованием одних команд в другие с сопутствующим изменением состояния приложения (Repository). В зависимости от команды и текущего состояния пользователя Application выбирает соответствующий контроллер и передает ему ссылку на Repository. Контроллер обрабатывает команду, изменяет состояние хранилища и возвращает другие команды, которые должны быть отправлены инфраструктурой по назначению. В общей схеме контроллеры занимают промежуточное место между движком и хранилищем:

... → Application → Controller → Repository.

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

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

При такой организации кода отдельные игры — это лишь соответствующая настройка и использование классов из жанровой библиотеки. Идеальный проект тогда будет состоять вообще из одного main-скрипта в пару строк и yml-файла конфигурации.

О том, как писать классы такого уровня обобщения, чтобы исходный код проектов состоял всего из нескольких строк, как раз и пойдет речь в данной статье:

Читать далее

Эволюция игрового фреймворка. Сервер на Python. Часть 1. Слои инфраструктуры

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

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

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

В качестве языка программирования выберем Python за его простоту и элегантность. Мы начнем в сокетов (asyncio), а закончим HTTP-сервером. Наша задача состоит в том, чтобы код логики не зависел от типа сервера и задействованных сетевых протоколов.

Читать далее

Как организовать код в Python-проекте, чтобы потом не пожалеть

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

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

Бенджамин Франклин

Python отличается от таких языков программирования, как C# или Java, заставляющих программиста давать классам имена, соответствующие именам файлов, в которых находится код этих классов.

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

Читать далее

Что не так с курсами по программированию, и зачем мы запустили еще один по Python

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

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

Читать далее

OpenCV — быстрый старт: базовые операции с изображениями

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

Судя по количеству закладок на первой части, работа моя  —  не зряшная.
В прошлый раз разбирали скучное открывание-закрывание картинки, в этот раз засунем в неё руки поглубже:

 • Доступ к пикселям и работа с ними
 • Масштабирование картинки
 • Обрезка
 • Отражение

Айда разбираться

Управление громкостью звука жестами на Python

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

В данной статье хочу рассказать про один проект из курса по OpenCV Python. Посмотреть полный код можно на Github.

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

Читать далее

Компиляторы против компиляторов

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

Давно хотел познакомиться с Rust. Язык с экосистемой сборки из коробки, компилятор в машинный код, но самое главное — автоматическое управление памятью, но без сборщика мусора. С учетом того, что управление памятью обещается как zero-cost в runtime — просто сказка! По ходу изучения и возник вопрос – а насколько код Rust быстрее/медленнее компилятора в машинный код давно известного, например, Delphi?

Посмотреть на финалистов

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

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

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

Начнем с того, что это статья посягается на святой устой комьюнити Python разработчиков, устой звучит так "синтаксис python - идеален, стандартные библиотеки - идеальны, и полноценны, GIL - это неизбежная жертва для такого прекрасного языка как Python ... может быть в конце столетия люди придумают как его обойти, но, а пока так ?". Приносим глубокие извинения за такую статью, это чисто юмористичная статья, не стоит принимать ей в серьез.

В общем решить эту проблему можно 50 строчками, вот код для импорта модуля из любого места, без плясок с бубнами и `sys.path`

Читать далее

Создание бота на основе discord.py. Часть 2

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

Это вторая статья из серии статей про создание бота на основе discord.py. В этой статье рассмотрим работу версиям, конфигами, а так же новым синтаксисом.

Читать далее

Параллельная обработка и преобразование json-фалов в pandas

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

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

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

Разберем преобразование множества json файлов различной структуры в привычный аналитикам pandas.DataFrame.

Читать далее

OpenCV — быстрый старт: начало работы с изображениями

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

Перевожу родной OpenCV-шный стартовый . И он хорош! (Сложно сказать, чем не понравились те, что уже есть.)
Изначально туториал в виде ноутбука, поэтому что-то я убрал. А что-то добавил. В общем, это помесь перевода с пересказом.

туториал

Айда разбираться

Как я начал писать симулятор распределённой системы, а закончил WebAssembly

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

Несколько месяцев назад мне захотелось сдуть пыль со своего аккаунта в Steam и поиграть в старые игры про программирование.

While True Learn в очередной раз показалась слишком скучной, я пару дней позалипал в TIS-100, реализуя свой многопоточный процессор, но в конечном итоге осознал, что интереснее не играть в игры про программирование, а самому писать такие игры.

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

Читать далее

Как работают регулярные выражения, или Движок regex с анимацией

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

К старту курса по Fullstack-разработке на Python показываем, как работают регулярные выражения, на примере их движка с визуализацией, которую вы видите на КДПВ. Под катом подробности и код.

Читать далее

Обхода блокировок много не бывает на роутерах Keenetic

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

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

В данной статье будет описана работа телеграм-бота, написанного на python. С его помощью будет возможна установка данного обхода с небольшими предварительными настройками, а также работа со списками блокировок.

Читать далее

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