• Как в БД проверять есть ли такое значение?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Добавлю к предыдущему ответу, что можно по факту выполнения запроса посмотреть сколько записей добавилось в БД и исходя из этого вывести пользователю соответствующий ответ на команду "старт": https://peps.python.org/pep-0249/#rowcount
    Ответ написан
    Комментировать
  • Как связать ESP8266 и Алису?

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

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

    По-хорошему надо делать, чтобы через Алису можно было разговаривать по домофону и получилось какое-то законченное устройство, которое можно было поставить параллельно штатному домофону или вместо него. Тут я пока не знаю что предложить.
    Ответ написан
  • TypeError: 'class Meta' got invalid attribute(s)?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    verbase_name -> verbose_name
    Ответ написан
    Комментировать
  • Как воссоздать инлайн кнопки из базы данных?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Нужно написать код, который сделает инлайн кнопку на основе текста. Что тут непонятного? Всё ж очевидно.
    Ответ написан
  • Как оптимизировать сервер на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В первую очередь нужно всё измерить. Просто методом тыка оптимизировать плохая идея, ведь вы не знаете какие места представляют "бутылочные горлышки".
    Нужно добавить логирование с замерами времени разных этапов.
    У вас все этапы выстроены друг за другом и пока происходит один этап больше ничего не происходит. Можно сформировать конвейер и разнести те задачи, какие можно по процессам. Для этого есть, например, очереди.
    Вы каждый раз загружаете модель, а это можно сделать лишь один раз вынеся за пределы цикла.

    Вот смотрю и вижу, что ваша задача очень похожа на задание. Если вы это написали самостоятельно, то должны были бы уже догадываться что с этим кодом не так. А так получается, что это не ваш код и вам задали вопрос как его оптимизировать, а вы пришли с этим заданием сюда. Так нельзя.
    Ответ написан
    2 комментария
  • Почему модуль winsound не воспроизводит звук?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    1) проверить пример из документации
    # Play wav file
    winsound.PlaySound('c:/windows/media/Chord.wav', winsound.SND_FILENAME)

    2) Убедиться, что по указанному пути есть файл и там нужный звук. Использовать полный абсолютный путь для начала, потом проверять текущий каталог.
    Ответ написан
    Комментировать
  • Как определить игрока быстрее всех нажавшего кнопку (web)?

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

    Минус у схемы только один, через отладочную панель можно жульничать.
    Чтобы жульничать было труднее, можно заставить клиенты подключиться к веб-сокету сервера и сигнал с реакцией прокидывать через него. Это тоже не убережет от жульничества с автоматизацией реакции.
    Наверно самое безопасное в плане жульничества решение потребовало бы стриминга видеопотока с физической реакцией игрока, а все подозрительные случаи выборочно потом проверять и модерировать людьми покадрово на предмет подделки видеосигнала.
    Ответ написан
    Комментировать
  • Ошибка аргументоа (мешает self), что делать?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    def download(link, path, mp, self):
    Нужно задекорировать метод как классовый или сттический. Если классовый, то надо указать первым аргументом cls
    Ответ написан
    Комментировать
  • Как скормить звук python чтобы после его распознания выполнялось действие?

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

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

    В любом случае звук - это массив чисел длинной Частота_дискретизации*Длительность.
    Этот массив можно обрезать по тишине слева и справа, выровнять по уровню, оценить поместится ли в оставшийся фрагмент искомый звук. Потом нужно понимать, что оставшийся массив - это многомерный вектор. Он указывает в некий объём многомерного пространства. Какие-то сати этого пространства "похожи на некий образцовый звук", а какие-то нет. Нужно написать функцию, принимающую вектор и возвращающую число - степень похожести звука на образец. Это делается нормированием.

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

    Изучать нужно по теме "Цифровая обработка сигналов", "сравнение звуков"
    Ответ написан
    3 комментария
  • Как прекратить вращение тела в игре?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Поставь "трение" на угловую скорость. Ну, в смысле, можно домножать угловую скорость на коэффициент меньше 1, а когда станет ниже порога, то обнулить. Или просто обнуляй угловую скорость, когда объект ляжет на грунт и выровняется.
    Ответ написан
    Комментировать
  • Как можно распарсить текст на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Схема проста и есть несколько вариантов:
    1) Пойти к фрилансерам и купить решение. Это самый простой быстрый и дешевый способ.
    2) Самостоятелбно:
    - Изучить основы питона
    - Разобраться что такое регулярные выражения
    - Написать функцию, которая из строки достаёт 2 нужных значения.
    - Применить функцию ко всем строкам.
    - ...
    - Профит!

    А вообще тут регекспы и не нужны вовсе. Достаточно разбить весь текст по символу абзаца на строки, а потом каждую строку разбить сплитом по пробельным символам (без аргументов). Всё, осталось взять только нужные столбцы получившейся таблицы.
    Ответ написан
    1 комментарий
  • Как реализовать условие правильно?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    жесть.
    1) правильно подсказали, что эта сумма вычисляется за одно действие.
    2) так нельзя обменять две переменные значениями
    start = end
    end = start

    3) питон позволяет сделать это одним присвоением: a, b = b, a
    Ответ написан
    Комментировать
  • Почему не работает throttled в aiogram?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Всё правильно вам подсказали, надо изменить порядок декораторов, они коммутативны.

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Смотря какие будут количества запросов. Есть же https://overpass-turbo.eu/, который может искать, если составить запрос по шаблону. Можно его в виде WEB API использовать. Результаты, можно получать в GeoJSON и его уже отображать на каком leaflet или аналогах.

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

    А, стоп, там про адрес же, а я думал по ключевым словам и боунд-боксу. Ну да, нужно поднимать сервис геокодирования. Вот, кстати попалась первой ссылкой достаточно развернутая статья. А ещё вот у ДаДаты есть сервис геокодирования, не знаю какие там лимиты для бесплатного использования.
    https://nominatim.org/ уже предложили выше в ответе.

    Тоже соглашусь, что соблазн юзать бесплатный ОСМ выльется в ограничения, лимиты, невысокую скорость и, если поднимать локальные опенсорсные сервисы, не мало человекочасов девопса.
    Ответ написан
    Комментировать
  • Как ускорить аудио под необходимый длину?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А что, пропорции в школе не учили считать?
    704 -- 1
    720 -- x
    Догадаетесь что на что умножить и что на что разделить надо?
    Только вот от таких манипуляций наверняка будут искажения и ухудшится качество. Зачем такое делать? Просто для красивой длины оно того не стоит. Это как ресайзить jpeg который уже в экранном разрешении на несколько десятков пикселей. Волна искажений пройдёт по всей картинке, возможно появятся ступеньки и артефакты. Но для картинок ресайз ещё можно как-то оправдать (хотя не низкого разрешения), типа надо куда-то встроить изображение, а вот с длительностью аудио не понятно зачем эта "красота".
    Ответ написан
    Комментировать
  • Как сделать выдачу статики с параллельным вызовом fastcgi без ожидания его завершения?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А для чего вам такое странное поведение?
    Вообще тут много вопросов из вашей постановки вытекает. Очень тревожных и странных вопросов.
    Начать можно с чего. Вы ставите вопрос так, будто хотите передавать данные "в скрипт". Надо перестраивать ход мысли. Вы передаёте данные в некий сторадж. Это может быть некая структура в памяти процесса (например вашего FastCGI-сервера), или в БД (postgres, sqlite, clickhouse, redis), или в очереди какой-нибудь (rabbit, кафка)... Данные не могут передаваться в код. Разве что в виде параметров и аргументов.
    Опять же, ваш FastCGI может быть запущен в нескольких инстансах, как вы будете заботиться о синхронзации? Прочитайте про CAP-теорему. Если вы городите какое-то самодельное решение, то вам придётся как следует понимать суть этой теоремы, проблемы, которые она обрисовывает и то, на каких двух стульях из трёх вы хотите сидеть.

    Если вы подробнее расскажете о своей задаче, то вам подскажут какими способами правильнее такие вещи делать. Пока что складывается ощущение, что в момент отдачи статики вы хотите делать http-запросы вашему бэкенду. Для чего? Считать статистику? Биллинг?

    Вообще лучше всеми этими вопросами не грузить ваш nginx, хотя там можно даже lua-скрипты встраивать с нетривиальной логикой. Для некоторых нужд можно парсить, например, логи nginx-а. Настроить так, чтобы в нужный пайп сыпалось только то, что требуется и отдельным микросервисом его вычитывать и делать что там вам требуется. Агрегировать? Статистику считать? Журналировать?
    Так же можно поднять какую-то очередь и заставить nginx туда писать по факту обращений.
    Вообще там много вопросов будет. А что если к файлу обратились, но контент не качали, только заголовок? А что если разрыв соединения? А что если один большой файл много раз фрагментами докачивали? А что если кто-то себе поставил перед вашим сервером кэширующий прокси?

    Теги вашего вопроса следует привести в соответствие с правилами. Тег Python не нужен, ведь вы не привели никакого кода и к питону ваш вопрос совершенно никакого отношения не имеет.
    Ответ написан
  • Как сделать плавный рывок для персонажа?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Посмотрите внимательно на содержимое цикла. Там условие выхода из цикла привязано к счетчику, а счетчик увеличивается только при некотором условии. Другими словами, если случилось так, что это условие неверно и вы в цикле, то счетчик не будет меняться и проверка условия будет молотить вечно, ведь ничего не меняется. Так получается бесконечный цикл.
    Вообще такие вещи лучше описывать параметрически. То есть можно описать функцию, которая возвращает координату абсолютную от времени.
    Обычно это делается так. Описывается класс, потомки от которого будут описывать характер движения. Паттерн называется "Стратегия".
    У персонажа есть состояние, например "равномерная ходьба". Это состояние определяет стратегию движения. То есть когда началась равномерная ходьба, создаётся инстанс этой стратегии, который запоминает время начала ходьбы, начальные координаты и определяет скорость. У стратегии движения есть метод, который возвращает координату от абсолютного времени. Под капотом из этого времени вычитается время начала движения, а потом по простой линейной формуле можно вычислить координату персонажа на любое заданное время. Как только состояние персонажа сменяется на "Рывок", создаётся новый инстанс новой стратегии под названием "Рывок". Она определяет внутри другую функцию вычисления координаты от времени. Скорость тоже может быть задана функцией внутри реализации стратегии.

    Такой подход позволит гибко менять динамику игры, настраивать ее в широких пределах, добавлять новые фишки, и при этом код не будет засоряться кучей нечитабельной логики с +\- единицами, будет меньше ошибок.
    Ответ написан
    Комментировать
  • Как создать свой сервис Аналитики\статистики?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    https://grafana.com/
    Есть и другие, но это по описанию подходит лучше всего.
    А данные надо хранить в БД, а не в экселе
    Ответ написан
    Комментировать
  • Как дружить сторонние ZigBee с Яндекс станцией?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    У меня вот такой вот хаб: https://aliexpress.ru/item/1005005669706698.html?s...
    Через интеграцию Tuya с алисой мгновенно подхватывает все устройства, и bt и зигби.
    Нареканий к нему вообще никаких нет. Накупил кучу дешманских блютусных датчиков из раздела всё за 180 на али (https://aliexpress.ru/item/1005005234497671.html?s...). Всё прекрасно работает. Вкупе с вайфай-розеткой отлично управляет вентиляцией в ванной по влажности.

    Весь свет у меня вот на таких модулях: https://aliexpress.ru/item/1005005721310513.html?s...
    Дёшево (брал по 180₽ и сейчас если попадается, то беру, но важно, чтобы именно Tuya), зато очень сердито. Поддерживает проходные выключатели, помещается в подрозетник если надо, управляется обычным выключателем. Один минус - wifi, но работают они очень хорошо, так что это от перфекционизма, что ли... Есть такие же варианты с зигби, но они дороже, у меня один есть, он еще не подключен.

    У меня Алисы старые, ещё без поддержки зигби, так что не знаю как она с этим протоколом будет работать. Шлюз что выше показывал отлично решает вопрос. Ещё есть розетка зигби, она стоит в другом конце квартиры чтобы расширять сеть, однако такое ощущение, что bt работает дальше.
    В хозяйстве одна только яндекс-розетка. Никакого смысла брать дорогую вместо дешевых вайфай не вижу.
    В общем, у меня сплошной зоопарк из (перманентно) wifi, zigbee и bluetooth устройств, но работает всё на редкость неплохо. При этом я еще HomeAssistant не настраивал. Не знаю как у моих приборов будет с локальностью. Роутер все вайфаи тянет без проблем, хотя перечень клиентов в админке пугал поначалу.
    Ответ написан
    Комментировать