Как я реверс-инженерил китайский блютуз контроллер

Создание цветомузыки посредством реверс инженеринга блютуз контроллера и анализа звукового потока через golang.

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

Создание цветомузыки посредством реверс инженеринга блютуз контроллера и анализа звукового потока через golang.
Приветствую IT-специалистов, решивших прочитать мою статью, я - python разработчик любитель (изучающий язык уже 5 лет, но не имеющий коммерческого опыта), который решил создать игру на очень медленном языке программирования. В процессе разработки я сталкиваюсь с различными проблемами и в мой мозг приходят весьма интересные решения для оптимизации, которыми я бы хотел поделиться с теми, кто тоже захотел написать крутую игру на python.


Эта статья вдохновлена моим обучением. Когда несколько лет назад я решил ознакомиться с созданием телеграм ботов, то обнаружил практически полное отсутствие информации (на русском языке, с примерами). Из-за этого, изучение такой простой и понятной темы сильно затянулось на несколько долгих дней.
Эта статья направлена именно на новичков, в ней я постараюсь объяснить тему ботов на примере сбора обратной связи.

Современный мир интернета вещей (IoT) и смарт-устройств требует гибкости и мощности при управлении сетевым оборудованием. Найти подходящее решение, сочетающее в себе одновременно простоту, надежность и доступность, может быть сложной задачей. Сегодня я хочу рассмотреть одну из таких комбинаций: одноплатный компьютер Orange Pi с операционкой OpenWRT + Python.
Orange Pi – мощная и компактная альтернатива другим одноплатным компьютерам. Он обладает большой вычислительной мощностью, расширяемыми возможностями и множеством интерфейсов. OpenWRT, в свою очередь, легкая и гибкая ОС, специально разработанная для маршрутизаторов и сетевых устройств. ОС предлагает широкие возможности настройки и расширения сетевых функций. Ну и Python – один из самых популярных языков программирования в мире, предоставляет простоту и эффективность для разработки скриптов и автоматизации задач.

Привет, Хабр! Наконец, после множества бессонных ночей, я завершил работу над второй частью обновления open-source проекта Wunjo AI и воплотил своё видение приложения. В этом обновлении основное внимание уделено звуку: улучшено клонирование голоса, извлечение вокала или мелодии из песен и повышение качества речи. Но это не все, также появились новые функции для работы с видео и создания дипфейков. Давайте рассмотрим все по порядку: начнем с звука и перейдем к видео и дипфейкам. В конце статьи вы найдете ролик, в котором объясняется работа с видео в приложении и функционирование нейронных сетей для создания дипфейков и не только.
Если вам интересно, вы можете прочитать предыдущие статьи на Хабре о создании дипфейков в Wunjo AI и функциях работы с дипфейками и изменениями видео с помощью текста.
Давайте начнем с звука. Одной из основных задач во второй части обновления была работа над звуком. Изначально в Wunjo AI использовалась адаптированная версия Real Time Voice Cloning, но подход был полностью переработан, что привело к улучшенной версии клонирования голоса. Теперь я использую кодировщик, обученный на аудиоматериале через Real Time Voice Cloning, в сочетании с HuBERT Soft. Этот метод позволяет точнее копировать скорость и тембр речи на этапе синтеза звука и перед работой вокодера. Кроме того, на основе исходного аудио, очищенного от шумов, определяется пол голоса (мужской или женский), а затем настройки вокодера подбираются в соответствии с типом голоса.
Однако эта статья сконцентрирована на более простых аспектах без технических деталей. Давайте взглянем на процесс клонирования голоса в Wunjo AI.

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

Целью данной лабораторной работы является создание веб-приложения для работы с абстрактными элементами (items). Для достижения этой цели мы будем использовать язык программирования Python, веб-фреймворк FastAPI и контейнеризацию с помощью Docker. Работа включает в себя установку необходимых инструментов, написание кода приложения, и контейнеризацию для обеспечения удобства развертывания.

Представим следующую ситуацию. Ваш python веб-сервер собирает какие-то метрики prometheus_client-ом: счётчики, гистограммы и т. д, например, количество входящих запросов. Вы также настроили приложение, чтобы /metrics возвращал все ваши метрики. Если режим работы prometheus_client-a оставить по умолчанию, при запуске приложения gunicorn-ом с более чем одним воркером вы сталкиваетесь с проблемой консистентности метрик.

Привет, Хабр!
С вами Вадим Дарморезов, участник профессионального сообщества NTA.
Сегодня рассмотрю кейс поиска изображений-«близнецов», которые были размещены в pdf-файлах, насчитывающих десятки, а порой и сотни страниц.
В проектах, связанных с распознаванием лиц своеобразными «флагманами» являются библиотеки dlib/face‑recognition и свёрточные нейронные сети. При этом на просторах русскоязычного интернета довольно мало статей о библиотеке insightface. Именно о ее использовании хотелось бы поговорить более подробно. Всем, кому это интересно, добро пожаловать по кат.

Привет, Хабр!
MLOps, или Machine Learning Operations, это практика объединения машинного обучения и операционных процессов. Она направлена на упрощение и ускорение цикла разработки, тестирования, развертывания и мониторинга моделей машинного обучения. В MLOps применяются принципы DevOps, такие как автоматизация, непрерывная интеграция и доставка, для создания более эффективных и масштабируемых решений в области машинного обучения.
Объемы данных растут экспоненциально, способность быстро и эффективно обрабатывать эти данные становится ключевой для успеха. MLOps позволяет не просто создавать модели машинного обучения, но и быстро адаптироваться к изменениям, обновлять модели и поддерживать их работоспосоность на высоком уровне. Это важно, поскольку модель, которая работала хорошо вчера, может устареть сегодня из-за изменения данных или условий окружающей среды.

В октябре прошла 85-я встреча сообщества разработчиков MoscowPython, которая была частично посвящена кибербезопасности. Почему? Все просто: эксперты и зрители собрались в недавно открывшемся кибербез-хабе «Кибердом». На встрече прозвучали четыре доклада, авторы двух из них — сотрудники нашей компании, при поддержке которой проходило событие.
Если пропустили прямую трансляцию и хотите узнать о Python больше — этот материал для вас. Под катом собрали все самое интересное с митапа.

DALL-E 3, новая версия модели для генерации изображений от OpenAI, стала доступна публично через ChatGPT в октябре 2023 года и сразу стала очень популярной благодаря существенно лучшему качеству генерируемых изображений, по сравнению с предыдущими версиями модели.
В этом туториале добавляем генерацию изображений с помощью DALL-E 3 в наш Telegram чат-бот!

Появление в библиотеке pandas режима Copy‑on‑Write (CoW, копирование при записи) — это изменение, нарушающее обратную совместимость, которое окажет некоторое воздействие на существующий код, использующий pandas. Мы разберёмся с тем, как адаптировать код к новым реалиям, сделать так, чтобы он работал бы без ошибок тогда, когда режим CoW будет включён по умолчанию. Сейчас сделать это планируется в версии pandas 3.0, выход которой ожидается в апреле 2024 года. В первом материале из этой серии мы разбирались с особенностями поведения CoW, во втором — говорили об оптимизации производительности, имеющей отношение к новому режиму работы pandas.
Мы планируем добавить в систему «тревожный режим», в котором она будет выдавать предупреждения при выполнении любой операции, поведение которой меняется при включении CoW. Эти предупреждения будут привлекать к себе очень много внимания пользователей, поэтому к возможности их появления стоит относиться с осторожностью. В этом материале рассматриваются некоторые типичные проблемы кода и то, как его можно адаптировать для того чтобы его поведение не изменилось бы после включения CoW.

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


В 2020, когда случился локдаун, и к большому сожалению, появилось очень много свободного времени, мне захотелось познакомиться с Python. Начальный опыт c Pascal был еще со школы и универа, поэтому оставалось лишь придумать задачу и пойти её самоотверженно решать на питоне. Интересной задачей показалось смастерить игру змейку, прикрутить к ней мозги в виде перцептрона с парой скрытых слоёв, и путем кнута и яблока обучить цифровое животное выживать в жестоких реалиях двумерного мира :)
«У самурая нет цели, есть только путь»
Первый блин на производстве не отличается красотой, но опыт был получен. Наиболее привлекательным мне пришелся генетический алгоритм: отбор успешных змеек, скрещивание, частичная мутация генов и так тысячи раз до результата. Змейки, без указания им правил выживания, в тысячном поколении «понимали», что нужно стремиться съесть яблоко и никуда не врезаться, это вызывало ощущение прикосновения к чуду "It's Alive!!!"
Спустя пару лет, закончив курс по аналитике данных, появилось желание переписать проект, попрактиковаться в более серьезных разделах python и сделать тренажёр со сбором статистики.

Давайте рассмотрим распространенную проблему с пропущенными данными и способы ее решения.
Иногда, когда мы анализируем данные, некоторые значения могут быть утеряны. Обычно пропущенные данные обозначаются в виде вопросительных знаков, нулей или пустых ячеек. Например, в таблице нормализованных потерь присутствует пропущенное значение, представленное как NaN.
Кстати, подписывайтесь на наши социальные сети, мы туда еженедельно публикуем топовый контент! Вот наш канал в телеграм и группа ВК.
Таблица 1: Пример набора данных о машинах
| Марка | Модель | Год выпуска | Цена | Нормализованные потери | Тип топлива |
|---------|---------|-------------|------|------------------------|-------------|
| Toyota | Corolla | 2019 | 15000| 134 | Бензин |
| Honda | Civic | 2020 | 17000| NaN | Дизель |
| Ford | Mustang | 2018 | 25000| 235 | NaN |
| Subaru | Outback | 2017 | NaN | 178 | Бензин |
| Hyundai | Elantra | 2021 | 18000| 156 | Гибрид |
| Nissan | Sentra | 2019 | 15500| 170 | Бензин |
Давайте сразу создадим датафрейм, чтобы мы дальше могли уже сразу обсуждать варианты обработки пропущенных данных на этом примере.

Если вы когда-либо работали с рекомендательными системами, то знаете, что все необходимые и самые часто используемые инструменты разбросаны по разным библиотекам. Более того, каждая из таких библиотек имеет много уникальных особенностей, к которым нужно приноровиться (например, разные форматы данных на вход).
Выходит, что чтобы просто протестировать на своей задаче базовый пул подходов, нужно немало помучиться. Получается довольно грустно.
К такому же выводу, видимо, пришли ребята из МТС – и выкатили в опенсурс RecTools. Это библиотека, где собраны самые часто используемые модели для рекомендательных систем. Также с её помощью можно максимально просто и быстро оценивать необходимые метрики.
Давайте же посмотрим, что RecTools умеет, и как с этим работать.