Задать вопрос
  • В чём отличия языка Си и С++? Зачем нужен Си?


    На данный момент могу назвать только одно отличие, что динамические массивы удобно писать на Си

    Да что вы? А в C++ уже есть std::vector, который будет гораздо удобнее любого велосипеда на си.

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Автор вопроса не предоставил необходимой информации для ответа на свой вопрос.
    Из постановки вопроса не ясна структура сети. Скорее всего ваш компьютер находится за NAT и снаружи не виден под указанным вами IP-адресом. Погуглите как работает NAT и как пробросить порт за его пределы.
    Насколько я понял, автор вопроса через какой-то ресурс вроде https://whatismyipaddress.com выяснил свой ip-адрес и думает, что это внешний интерфейс его компьютера.

    Так не получится.

    Некоторые провайдеры дают белый IP-адрес при подключении через PPP. Но здесь, похоже не тот случай, ведь увтор вопроса обмолвился о локальном IP-адресе типа 172.x.x.x.

    Если подклчение происходит через роутер от провайдера и он предоставляет белый ip, то этот ip выделен вашему роутеру. Нужно читать что такое port forwarding, и с помощью него вам удастся захостить ваше веб-приложение.
    В случае с NAT я бы порекоменовал арендовать минимальную vds и хостить приложение там, либо пробросить через него порт по ssh на ваш домашний комп.
    Или гуглите читайте кучу статей как пробрасывать порты через нат, вот такую, например: https://habr.com/ru/post/279969/
    Ответ написан
  • STM32 ловит HardFault_Handler на операторе += как починить?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Вопрос номер раз: как такое вообще произошло?

    Насколько я понимаю STM32F207xx не поддерживает инструкцию uxtah, потому что это инструкция Thumb2 не реализованная в CortexM3.

    Вопрос номер два: как такое фиксить?

    Подозреваю, что ключом -march=, вероятно -march=armv6.
    Ответ написан
    1 комментарий
  • Какие минимальные знания С++ должны быть, чтобы начать изучать Unreal Engine 5?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что мне стоит делать дальше?

    Изучать обе параллельно.

    какие минимальные знания С++ должны быть, чтобы начать изучать Unreal Engine 5

    Понимание синтаксиса и способность читать документацию.
    Ответ написан
    Комментировать
  • Почему все говорят что писать ботов это сложно?

    Vindicar
    @Vindicar
    RTFM!
    А сложность начинается, как только задачи, стоящие перед ботом, перерастают уровень примера в документации видеотуториале пятилетней давности.

    Нужно сделать несколько под-команд у команды. Напишу цепочку if-elif-else, делов то. Ой, а теперь простыня кода на пять экранов, в которой фиг чего найдёшь. Потому что нет привычки структурировать код.

    Нужно, чтобы несколько команд/событий формировали цепочку (сценарий). Например, пользователь отправил тре сообщения, первое с именем, второе с возрастом, третье с адресом. Ой, а как это сделать вообще? Не зная понятия "конечный автомат" (finite state machine, FSM), очень трудно догадаться, как тут поступить.

    Нужно, чтобы ботом могли пользоваться несколько человек. Ой, их данные перепутались! Потому что бот использует глобальные переменные.

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

    Нужно добавить боту графический интерфейс - админку. Ой, а работает или интерфейс, или сам бот! Потому что нужно представлять, как устроено большинство GUI-фреймворков, и как устроена асинхронное приложение. А заодно понимать многопоточность, вопросы синхронизации действий между двумя потоками, и особенности работы с asyncio в многопоточных приложениях. Потому что одним потоком тут обойтись будет очень непросто.

    Нужно хранить данные в БД. Ой, а почему у меня проблемы при записи в БД имени пользователя? А потому что погромист собирает SQL-запрос через форматирование строк. Надо было почитать доки, чтобы наткнуться на prepared statements, они же parameterized queries.

    Нужно хранить данные в БД. Вот только данные имеют связи многие-ко-многим. Я знаю! Я буду просто добавлять или удалять столбцы в таблицу! Потому что не освоены даже азы проектирования БД. Тут уже nuff said. И да, я такое видел на этом сайте.

    Незнание средств языка и основных приемов построения алгоритмов и структур данных приводит к диким велосипедам, которые создают больше проблем, чем пользы. Особенно если к этому добавляется нежелание находить и читать документацию на фреймворк, на котором построен бот.
    Ответ написан
    2 комментария
  • Почему цикл в C++ застревает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Больших отличий я не заметил


    Я удалил неважные части кода, чтобы большое отличие стало более заметно. Вот что получилось из твоего кода:
    while (num_bor_1 <= num_bor_2)
      {
        if ((num_bor_1 % 2) != 1)
        {
          num_bor_1++;
        }
      }


    А вот что получилось из решения:
    do
      {
        num_bor_1++;
      } while (num_bor_1 < num_bor_2);
    Ответ написан
    Комментировать
  • *** stack smashing detected ***: terminated Как исправить и с чем связано?

    Alexandroppolus
    @Alexandroppolus
    кодир
    _playingField[20] - за пределами массива

    можно от _playingField[0] до _playingField[19]
    Ответ написан
    Комментировать
  • Почему возникает free(): double free detected in tcache 2? (в деструкторе)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему возникает free(): double free detected

    Потому что в этом классе не реализован конструктор копирования (а так же перемещения и операторы присваивания, но это пока не вызывает таких же ошибок). В результате при копировании объекта класса String копия получает то же значение str что и оригинал с которого она скопирована, в деструкторе копия удаляет str оригинала, а потом это же делает оригинал в своём деструкторе. См. правило трёх/пяти.
    Ответ написан
    Комментировать
  • Ошибка: 'NoneType' object has no attribute 'name'?

    Vindicar
    @Vindicar
    RTFM!
    Нужно включить голову и подумать.
    activity у пользователя есть не всегда. Если её нет, поле activity вернёт значение None.
    Перед тем, как обращаться к свойствам activity (например, name), нужно проверить, что оно не None.
    Ответ написан
    Комментировать
  • Какой видеокурс по работе с браузером Google Chrome порекомендуете?

    Не существует курсов по работе с браузером.
    Есть справка, которая открывается нажатием кнопки F1, где описано всё, что можно в браузере сделать.

    А куки чистятся в настройках.
    Настройки -> очистить историю -> поставить галку напротив cookie

    Хз как в хроме, но вот например раздел из справки к яндекс браузеру:
    https://yandex.ru/support/browser/personal-data-pr...
    Ответ написан
    Комментировать
  • Как правильно считать значение из бинарного файла C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    third = string(buffer1);
    fourth = string(buffer2);

    Должно быть
    third = string(buffer1, size3);
    fourth = string(buffer2, size4);

    поскольку строки прочитанные в buffer1 и buffer2 не 0-терминированные.

    И отдельно
    char buffer1[size3];

    char buffer2[size4];

    это не по стандарту С++, компилируется и работает только из-за расширений GNU.
    Ответ написан
    5 комментариев
  • Импликация (следование) в C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Нету в C++ отдельных операторов для этих логических функций. Потому что их все можно составить из И, ИЛИ и НЕ.

    Так, импликация - это !a || b. Эквивалентность - можно просто сравнить 2 переменные: a == b.
    Ответ написан
    1 комментарий
  • Что делать с этой проблемой?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Исходник в кодировке utf. 'А' действительно занимает 2 байта. Что видит компилятор? Видит 2 байта между кавычками и ругается.

    setlocale() - эта функция во время исполнения программы настроит, в какой кодировке у вас будет просиходить ввод/вывод с консоли. На кодировку исходника оно никак не влияет.

    Тут 2 варианта решения: Или поменяйте кодировку исходника и настройки локали, чтобы 'А' занимало один байт, или работайте с wstring.

    Чтобы не путаться с кодировками, напишите программу, которая выводит численное значение байт прочитанной строки. Запустите ее, введите туда 'А', смотрите, что оно выводит. Поэксперементируйте с разными настройками setlocale(). Если выводит 2 байта - вот эти два байта надо писать в case и использовать wstring. Если выводит один байт, вот его в case и вставляйте.
    Ответ написан
  • Какой есть легкий IDE для Python?

    "IDE" и "с низкими системными требованиями" в одном предложении быть не может.

    Так что предложить можно только какой-нибудь текстовый редактор:
    1. VS Code, хоть он и не такой уж и лёгкий.
    2. ST, но нужно будет потратить время на настройку
    3. Np++, но не такой удобный
    Ответ написан
    Комментировать
  • Как работает asyncio.sleep?

    Vindicar
    @Vindicar
    RTFM!
    Идея простая.
    Асинхронные приложения - это набор пар "операция - обработчик", где операция - это некоторый длительный процесс (скажем, вводы/вывод), который не требует постоянного внимания со стороны кода. Когда операция завершается, выполняется её обработчик. Этот обработчик может планировать другие операции, и так далее.

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

    Соответственно, await-вызов сохраняет текущий контекст корутины, и планирует новую длительную операцию. Какую - зависит от того, что идёт после await. Эта операция представлена тем или иными awiatable значением (Future, Task и т.п.).

    Рабочий цикл (loop, его также называют реактор) просто проверяет текущие операции. Как только одна из них завершилась, он выполняет её обработчик. А потом продолжает проверять остальные активные операции.

    Ключевой момент - выполняет обработчик, а только потом проверяет остальные операции. Т.е. если обработчик планирует операцию через await - это не проблема, она будет выполняться наравне с остальными. А вот если обработчик просто делает что-то длительное, он не возвращает управление циклу, и не даёт выполняться остальным операциям.

    asyncio.sleep() планирует ничего не делающую операцию, которая завершится успехом через заданное время. Поэтому её выполнение не мешает циклу-реактору. Просто ещё один await вызов, который приостанавливает текущую корутину и возвращает управление реактору.

    time.sleep() ничего не знает о реакторе и асинхронных операциях. Она приостанавливает выполнение обработчика, не прерывая его и не отдавая контроль реактору. Поэтому на время time.sleep() (или любой длительной синхронной операции) спит вся программа.
    Ответ написан
    5 комментариев
  • Как сделать вызов функции из терминала чтобы обработчик динамически искал и вызывал функцию?

    includedlibrary
    @includedlibrary
    Если я правильно понял, то подойдёт обычная хэш-таблица со строками в качестве ключей и указателями на функции в качестве значений. Когда пользователь делает ввод, вы ищете значение по ключу и вызываете найденную функцию, или возвращаете ошибку, если функция не найдена
    Ответ написан
    Комментировать
  • Как заставить def работать?

    Vindicar
    @Vindicar
    RTFM!
    Поучи язык. Просто поучи, без ботов.
    def объявляет функцию, но не вызывает её.
    Ты её объявляешь внутри record_volume(), но ничего с ней не делаешь.
    Ответ написан
    Комментировать
  • Как узнать размер незаполненного массива в c++?

    @rPman
    для массивов изменяемого размера используй std::vector (а так же для разнообразия std::deque, std::list, а если к примеру значения уникальные то std::map а вообще контейнеров списков в c++ много)

    это примерно в 2-3 раза медленнее и кушает память, бонусом будет контроль выхода за границы.

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

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    мне нравится вот это
    https://sqlitestudio.pl/
    Ответ написан
    Комментировать
  • Почему часто можно встретить отступление от структурного подхода?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Первый вариант легче читается. Особенно, если вариантов раннего выхода из функции несколько. Потому что меньше вложенность проверок, сразу видно что и при каких условиях возвращается.
    Ответ написан
    Комментировать