Задать вопрос
  • Каким инструментом лучше организовать работу с IP-камерами на Qt?

    alxndrlsn
    @alxndrlsn Автор вопроса
    Инженер
    Все встало на свои места неожиданно: слегка разочаровавшись в QCamera, а также обнаружив, что ffserver больше не поддерживается с июля 2016 года,..

    July 10th, 2016, ffserver program being dropped(с)ffmpeg.орг/индекс.html#ffserver

    ..смотрел похожие классы и через QVideoWidget вышел на QMediaPlayer, который, начиная с версии Qt 5.12.2, позволяет использовать gst-pipeline при установленном GStreamer. Иными словами, в методе QMediaPlayer::setMedia(QMediaContent) можно вставить строку QUrl, содержащую обычную команду для gstreamer:
    что-то вроде этого (просто для примера):
    player->setMedia(QUrl(gst-pipeline: rtspsrc location=rtsp://user:passwrd@StaticCameraIP:port/path ! rtph264depay !  h264parse ! omxh264dec ! nvvidconv ! video/x-raw, width=1920, height=1080, format=BGRx ! videoconvert !  ximagesink sync=false));

    Работает хорошо, однако проверял в условиях цейтнота, поэтому столкнувшись с некоторым непонятным моментом, не нашел пока: как бороться с тем, что поток открывается в совершенно новом окне, игнорируя вызванный ранее QMediaPlayer::setVideoOutput(QVideoWidget). Возможно это потому, что у меня экземпляр QMediaPlayer не является дочерним по отношению к QVideoWidget. Но главное - работает!
    Ответ написан
    Комментировать
  • Как правильно совместить циклы с функциями?

    Vindicar
    @Vindicar
    RTFM!
    Ну простейший вариант:
    # типы данных. Они могут быть классами, или описаниями вида typing.Tuple[int, str]
    # так как ты не описал типы данных, я пишу тут заглушки typing.Any (т.е. что угодно)
    # эти типы лучше описать в отдельном файле, который будет импортироваться остальными
    Snaphot = typing.Any
    PreparedSnapshot = typing.Any
    SnapshotResult = typing.Any
    
    # функции обработки. они могу быть раскиданы по отдельным файлам, 
    # но они должны импортить нужные модули, в т.ч. описание типов данных
    # ни одна функция не должна выбрасывать исключения
    def get_snapshot(site: str, name: str) -> typing.Optional[Snapshot]:
        "Качает один снапшот с сайта и возвращает его, или None если была ошибка."
        ...
    
    def prepare_snapshot(snapshot: Snapshot) -> typing.Optional[PreparedSnapshot]:
        "Подготавливает один снапшот к обработке. Возвращает None при ошибке."
        ...
    
    def process_prepared_snapshot(snapshot: PreparedSnapshot) -> typing.Optional[SnapshotResult]:
        "Извлекает нужные сведения из одного снапшота и возвращает их как структуру данных, или None при неудаче."
        ...
    
    # эта функция будет в главном запускаемом файле
    # главный файл должен импортировать остальные
    targets = zip(...)  # ну или как ты там делаешь список
    # и вот тут уже главный цикл
    # вариант А - классический цикл
    results: typing.List[SnapshotResult] = []
    for site, name in targets:
        snap = get_snapshot(site, name)
        if snap is not None:
            prepared = prepare_snapshot(snap)
            if prepared is not None:
                result = process_prepared_snapshot(prepared)
                if result is not None:
                    results.append(result)
    # вариант Б - более функциональный подход
    # фильтрует коллекцию, отбрасывает None
    def skipNone(items):
        return filter(lambda item: item is not None, items)
    
    results: typing.List[SnapshotResult] = list(skipNone(
        map(process_prepared_snapshot, skipNone(
            map(prepare_snapshot, skipNone(
                get_snapshot(site, name) for site, name in targets
            ))
        ))
    ))
    # в любом случае, у тебя есть список результатов results, делай с ним что хочешь.


    К слову, у тебя очень кривой zip() в примере кода.
    aList = "http://сайт-со-снепшотами.com"
    bList = ['список',  'имен',  'для',  'снепшотов', 'и', 'так', 'далее'] 
        for a, b in zip(aList, bList):

    У тебя zip() даст
    ('h', 'список'), ('t', 'имен'), ('t', 'для'), ('p', 'снепшотов'), (':', 'и'), ('/', 'так'), ('/', 'далее'), ...
    Ответ написан
    4 комментария
  • Насколько совместимы китайские клавиатуры с Linux?

    DevMan
    @DevMan
    да кагбе любая клава работает в базе.
    вопросы могут быть только к дополнительным кнопкам.
    Ответ написан
    1 комментарий
  • Как с помощью while вывести подсчет количества строк в одной таблице по совпадению с данными из другой?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Во-первых, зачем тут первый запрос?
    Во-вторых, кроме количества совпадений надо наверное запрашивать и сам id? Ну по логике? если мы хотим вывести id, то надо наверное это поле указать в SELECT?
    В-третьих, надо добавить группировку, GROUP BY
    В-четвёртых, если надо вывести любые значения из первой, а не только те, у которых есть записи во второй, то нужен LEFT JOIN
    Ответ написан
    Комментировать
  • Что делать ошибка Pygame?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Всего-то надо соблюдать PEP8, тогда бы не перекрыли имя класса именем переменной.
    Ответ написан
    Комментировать
  • Что такое KDE Wallet?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    kde password manager
    предлагает вам сохранить пароль от вифи, чтобы больше не вводить...
    Ответ написан
    6 комментариев
  • Почему моя программа не работает так, как надо?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Иногда я смотрю на qna и удивляюсь. На букву о.
    Казалось бы, задачка примитивная, для первого класса, ошибки очевидные.
    Сейчас автору всё объяснят.
    Но тут собирается консилиум лучших умов, и начинается. "Дело тёмное, ничего непонятно...", "открывай файл на чтение", "файл надо переименовать".

    Судя по всему, задача действительно очень сложная, так что одними наводками не получится, надо привести полное решение

    filename = input('Введите имя файла: ')
    file1 = open(f'D:\\Txtfiles\\{filename}')
    contents = file1.read()
    print(contents)
    file2 = open(r'images\3.txt', 'w')
    n = 0
    file1.seek(0)
    for line in file1:
        n += 1
        file2.write(str(n) + ')' + line)
    file1.close()
    file2.close()

    можно так, а можно как Алан Габизов предложил, через splitlines
    Ответ написан
    4 комментария
  • Как правильно загружать изображения через API ВКонтакте?

    @EvgMul Автор вопроса
    С горем пополам разобрался в чем была проблема.
    Дело в том, что использование curl_setopt ( $ch, CURLOPT_POSTFIELDS, array( 'file1' => '@' . $file ) );
    начиная с версии 5.5. нежелательно. На моем сервере стоит 5.6.
    Вместо это строчки следует использовать
    curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => new CurlFile($file_path)]);
    Ответ написан
    Комментировать
  • Zoxsan@zoxsandev.ml?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Можно
    Ответ написан
    Комментировать
  • Как получить понимание разработки игры?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Из сбивчивых жалоб и стенаний автора можно только то что нет опыта и есть признаки выгорания от учёбы. У меня тоже такое было. Я выгорал. И самое лучшее в этот момент - бросить самообучение и заняться другим делом за которое платят и которое вполне осязаемо. Самая большая беда новичка - это амбиции. Это желание сразу сходу делать своё где есть все фичи в мире и можно грабить корованы и прочее. Это ошибка. Ошибка которая как раз приводит к выгоранию. Лучше написать морской бой в браузере который работает чем писать 3д шутер 10 лет и потом выкинуть его на свалку просто потому что он морально устарел. Одиночки вообще никакой игры не могут написать. Игра сегодня - это как съемки сериала. Требует слишком много разных знаний из разных областей и 1 чел никогда все не охватит.

    По поводу мотивации и геймдева. Лучше всего наверное влиться в команду которая уже делает игры. Влиться самым младшим подмастерьем и хотя-бы пол-годика поработать и понаблюдать как идет процесс разработки. Да. Надо будет приглушить амбиции. Но ничего не поделать. Я думаю что это единственный верный путь где не будет выгорания. Эмоциональный контакт с командой очень важен.
    Ответ написан
    Комментировать
  • Как получить понимание разработки игры?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    Тебе же прямо сказали. Нужно изучить язык программирования.
    Не на уровне "почитал книжку". Не на уровне интерн/джуниор. А на уровне уверенного разработчика.

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

    Поэтому правильный путь - это потратить МНОГО времени и МНОГО усилий.
    Ты же сам сказал, что все что ты изучил - там давали базовое понимание что это такое.

    Поэтому вместо того, чтобы делать крутую 3д игру, сперва начни делать приложения попроще.
    Добейся, чтобы у тебя просто двигался персонаж. Потом сделать лабиринт, чтобы со стенками взаимодействовал. Потом может быть попробуй добавить прыжок и высоту. И так потихоньку сделаешь основу для игры. Потом будешь добавлять и добавлять. Может через года два будет демо-версия с одним рабочим уровнем.
    Ответ написан
    Комментировать
  • Как отправить готовую написанную игру на другой компьютер?

    Nipheris
    @Nipheris Куратор тега C++
    Всё как и должно быть. Потому что не всегда C++ приложение можно просто так запустить на другой машине.
    На тулчейне от Microsoft (очевидно, вы используете Visual Studio для разработки, т.к. недостающие библиотеки из текста ваших ошибок - это студийный C++ рантайм) при использовании динамической линковки рантайма нужно приложить некоторые дополнительные усилия, чтобы этот рантайм появился на другой машине (т.к. его там ещё может не быть - ведь рантайм для каждой мажорной версии студийного компилятора свой). Вы можете как установить рантайм централизованно, так и положить его рядом с вашим приложением. Ну или вы можете слинковать рантайм статически.

    Задача, которую вам сейчас нужно решить, называется развёртыванием (deployment). Это абсолютно нормально, что вы столкнулись с необходимостью разобраться с этим, раз вы пользуетесь C++.

    Нет лучшего источника информации по этой задаче в рамках тулчейна Visual C++, чем вот эта страница: en/ru. Разбирайтесь, и у вас точно всё получится - абсолютно в каждом C++ проекте production-уровня эта задача решается тем или иным способом. Возможно вам потребуется дополнительно разобраться, что это вообще такое за "рантайм" и почему он требуется для работы вашего приложения.
    Ответ написан
    1 комментарий
  • Можно ли запустить несколько ядер linux?

    Adamos
    @Adamos
    Например, DKMS-драйвер видеокарты, который при каждом обновлении ядра компилируется под него заново.
    Ответ написан
    1 комментарий
  • Можно ли запустить несколько ядер linux?

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

    помешает проблема, что "две хозяйки на одной кухне не уживутся" :)
    ядро ориентировано на монопольное управление железом.
    потому все остальные ядра операционок (не обязательно линухи) надо запаковывать в средства виртуализации железа компутера.
    Ответ написан
    1 комментарий
  • Как корректно выводить таблицу в телеграм?

    Vindicar
    @Vindicar
    RTFM!
    tabulate рассчитана на использование моноширинного шрифта, как в терминале. С таким шрифтом можно подравнивать строки пробелами из расчёт 1 пробел на символ.
    Клиенты телеги, как и 99% приложений, используют по умолчанию пропорциональный шрифт. Там такой фокус не проходит.
    1920px-Propvsmono.svg.png
    Попробуй завернуть выводимую таблицу в ```три бэктика```, это markdown для использования моноширинного шрифта.
    Ответ написан
    Комментировать
  • Как понять работу следующего кода по перегрузке операторов?

    Vindicar
    @Vindicar
    RTFM!
    Потому что питон пытается "извернуться", если описаны не все операторы.
    Если выполняется a < b, но не описан оператор a.__lt__(), питон попробует вызвать b.__gt__().
    Аналогично, если не описан __ne__() а только __eq__(), и выполняется a != b, питон сделает not (a == b)
    Кое что есть тут
    Также советую глянуть в сторону functools.total_ordering.
    Ответ написан
    3 комментария
  • Как называется фильтр блокирующий инфракрасный свет?

    Инфракрасный отсекающий фильтр.
    Фильтр, отсекающий ИК-спектр.
    IR-Cut Filter.
    IR-Blocking Filter.
    Ответ написан
    Комментировать
  • Как называется фильтр блокирующий инфракрасный свет?

    @ewgenc
    ИК-фильтр стоит везде, во всей бытовой фото/видеоаппаратуре по умолчанию. Его нет например в аппаратах для астрофото или в специальной/медицинской технике.
    Ответ написан
    Комментировать