Задать вопрос
  • Proof of work как защита от разного вида спама?

    Lite_stream
    @Lite_stream Автор вопроса
    >например антивирусы могут ругаться, принимая за майнер, ОС видя 100% загрузку процесса
    Неужели загрузка лишь одного ядра (а сейчас их в среднем 4-6) будет сочтена за майнер? В крайнем случае можно этот хэш оффлоадить, скажем на 20% и будет высчитываться те же 10-15 секунд, правда тогда атакующему потребуется 8-12 секунд

    >для пользователя 10-15 секунд это очень большое время
    Ну опять же, с точки зрение UX-а он будет думать, что там видос обрабатывается, не должно испортить ему настроение. В крайнем случае можно будет снизить до 3-4 секунд, исходя из подсчётов ниже, даже хэш, где таргет в среднем вычисляется 3 сек даст колоссальную защиту

    >а для атакующего 10-15 секунд CPU может быть вполне приемлемое время
    Я бы так и не сказал: если за те же 10 сек он мог сделать, скажем, по 3к (зависит от внешнего прокси сервера :) ) запросов в сек, что за 10 сек было бы 30к, то с PoW это было бы не 30к, а 10 * количество ядер атакующего пользователя (хотя тут надо найти такую хэш функцию, которая не очень на GPU вычисляется, то есть вообще нет смысла считать не GPU её, только CPU)

    Вот подумал ещё, можно выдавать пользователю такой токен, на каждую загрузку/обновление видоса, что после каждого такого действия (загрузки/обновление видоса) сервер выдаёт ему новый токен (при этом токен хранится в бд на сервере), в таком случае:
    • unix дата не нужна, так как повторно отправить видос с таким же хэшем не выйдет, потому что для n + 1 отправления потребуется токен, который был на предоставлен на n-ом отправлении, а его очевидно нет
    • данные видео тоже не нужны, так как 1 post запрос - 1 новый токен
    • id пользователя не нужен, так как 1 токен - 1 юзер
    Итого, хэш:
    токен + nonce
  • Какие ограничения ввела QT после 24-го февраля?

    Lite_stream
    @Lite_stream Автор вопроса
    Александр Ананьев, ну, оплата единовременна, а лицензия будет постоянно висеть на 3-м лице
  • Какие ограничения ввела QT после 24-го февраля?

    Lite_stream
    @Lite_stream Автор вопроса
    Александр Ананьев, ну тут проблем не должно быть, просто оплатить посредником с доступом к swift
  • Какие ограничения ввела QT после 24-го февраля?

    Lite_stream
    @Lite_stream Автор вопроса
    >Qt Group заблокировала загрузку своих продуктов с российских IP-адресов и убрала поддержку русского языка с сайта
    >«Это сейчас ограничили», — отметил источник РБК на ИТ-рынке. Невозможно скачать некоторые инструменты и готовые сборки для различных операционных систем, например Windows, но сам исходный код остается доступен.
    Сначала говорится именно об ограничении скачивания продуктов QT

    >Представитель пресс-службы «Яндекса» подтвердил, что Qt Group cейчас не дает скачивать свои платные продукты в России, но бесплатные все еще доступны.
    Затем в статье идёт акцент на скачивание именно платных продуктов, что навевает мысль не просто об ограничении скачивания, а именно покупке лицензии
  • Какие ограничения ввела QT после 24-го февраля?

    Lite_stream
    @Lite_stream Автор вопроса
    GavriKos, просто предположение в вопросе выше сформировалось на основе этого комментария модератора на форуме qt
    62d5d71a6b0ee426776932.png
  • Какие ограничения ввела QT после 24-го февраля?

    Lite_stream
    @Lite_stream Автор вопроса
    А, если скоро заканчивается, то как обстоят дела с обновлением ?
  • Существует ли тенденция избегать size_t, если это возможно?

    Lite_stream
    @Lite_stream Автор вопроса
    Евгений Шатунов,
    Чисто к слову. Для size_t Integral promotion не выполняется по своему определению.

    Так size_t это же unsigned int просто
  • Существует ли тенденция избегать size_t, если это возможно?

    Lite_stream
    @Lite_stream Автор вопроса
    где есть свой STL

    EASTL ?)

    Спасибо за развёрнутый ответ
    Хз, у меня какая-то фобию unsigned'ов из-за их хитрвых приведений, сначала к singed, потом обратно. Поэтому подумал, что не я 1 такой и что люди пытаюстя по возможности unsigned'ы, и в частности size_t не использовать
  • Существует ли тенденция избегать size_t, если это возможно?

    Lite_stream
    @Lite_stream Автор вопроса
    Евгений Шатунов, например, чтобы случайно не написать что-то вроде
    if ((sizeof(int) - 10) > 100)
        {
            std::cout << "Greater than 100" << "\n";
        }
        else
        {
            std::cout << "Less or equal than 100" << "\n";
        }

    Программист, в реальном коде (где -10 и 100 не являлись бы константами) ожидал бы попасть в else блок, а не if
    Не просто же так в яндекс код стайле запрещено отнимать от беззнаковых типов, насколько мне известно
  • Существует ли тенденция избегать size_t, если это возможно?

    Lite_stream
    @Lite_stream Автор вопроса
    Армянское Радио, ну ок, поищу там, может быть что-нибудь найду
  • Существует ли тенденция избегать size_t, если это возможно?

    Lite_stream
    @Lite_stream Автор вопроса
    Армянское Радио,
    floppa322, так вы все равно предлагаете прикрывать дыру газеткой, причем опасным способом. Вот родился у вас массив в 4 млрд элементов, в int его размер не уместился. В дебаге вы упадете, а в релизе у вас полезет UB, причем с возможной порчей данных, которую юзер не заметит и сохранит. Так что если уж вы нашли фатальную проблему (которую сами себе создали), нужно падать безусловно, а не только в дебажных сборках.

    Здесь компромисс нужен, ведь можно точно так же упасть из-за тех же неучтённых приведений знаковых/беззнаковых типов

    Проблема должна решаться для каждого кода индивидуально, а не глобальной заменой всех переменных в программе на int_fast* с сомнительной конвертацией.

    Ну, поскольку, гайдлайнов я не нашёл по тому же int_fast*, могу предположить, что в 99% случаях нужно использовать int_fast32 вместо int'а (из-за скорости) или беззнакового size_t (из-за приведения знаковых/беззнаковых типов), за исключением массивов, потому что скорее всего массив int будет работать быстрее массива int_fast32 из-за того, что будет вдвое меньше памяти занимать, а следовательно будет в 2 раза меньше кэш промахов. Ну и в объектах, из которых могут быть составлены большие массивы, тоже, наверное, следует использовать int вместо int_fast32 по тем же причинам. В общем скорее всего int_fast32 лучше использовать как локальные переменные, либо в объектах, но с осторожностью, когда не предполагается больших массивов из таких объектов
  • Существует ли тенденция избегать size_t, если это возможно?

    Lite_stream
    @Lite_stream Автор вопроса

    floppa322, разработчики стандарта языка не такие уж и глупцы, раз обвешали всю стандартную библиотеку этим size_t.

    Предполагаю, что это просто легаси. Ну и в любом случае, методы контейнеров вроде size(), должны возвращать такой тип, чтобы, например, на 64 битной системе можно было в вектор положить больше, чем int_64, то есть unsigned long. Но в реальности то в контенерах почти никогда столько элементов не лежит, а в свою очередь беззнаковые типы несут некоторую боль
    И size_t (cppreference.com)

    std::size_t can store the maximum size of a theoretically possible object of any type (including array). A type whose size cannot be represented by std::size_t is ill-formed (since C++14) On many platforms (an exception is systems with segmented addressing) std::size_t can safely store the value of any non-member pointer, in which case it is synonymous with std::uintptr_t.

    std::size_t is commonly used for array indexing and loop counting. Programs that use other types, such as unsigned int, for array indexing may fail on, e.g. 64-bit systems when the index exceeds UINT_MAX or if it relies on 32-bit modular arithmetic.

    И int_fast*
    (stdint.h)
    /* Signed.  */
    typedef signed char		int_fast8_t;
    #if __WORDSIZE == 64
    typedef long int		int_fast16_t;
    typedef long int		int_fast32_t;
    typedef long int		int_fast64_t;
    #else
    typedef int			int_fast16_t;
    typedef int			int_fast32_t;
    __extension__
    typedef long long int		int_fast64_t;
    #endif

    Зависят от разрядности системы (64/32). Но при этом знаковый int_fast* устраняет проблемы signed/unsigned promotion'ов, в отличие от беззнакового size_t


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

    Наоборот же беззнаковые (size_t) в знаковые
  • Существует ли тенденция избегать size_t, если это возможно?

    Lite_stream
    @Lite_stream Автор вопроса

    Построить компилятору более простой и, следовательно, более быстрый код, в котором будут отсутствовать лишние преобразования 32-битных и 64-битных данных. Особенно это полезно при работе с адресной арифметикой и индексации массивов.
    Избежать ряда ошибок при обработке большого объема входных данных, когда количество обрабатываемых элементов превышает количество UINT_MAX.
    Избежать ряда других, более специфичных ошибок.
    Сделать код более переносимым между 64-битными Windows и Linux системами, в которых используются различные модели данных. Так, например, в Linux системах для индексации больших массивов можно использовать тип unsigned long, а в Windows нет.


    Тогда лучше использовать знаковый int_fast32 нет опасных promotion'ов и в 64 битных системах работать быстро будет
  • Как сделать проверку скорости передачи\приёма данных?

    Lite_stream
    @Lite_stream
    Если делать вручную на уровне UDP, то можно (для входящих пакетов), используя алгоритм экспоненциального сглаживания, имея размер пакета, вычислить входную пропускную способность
    Для исходящих пакетов почти то же самое, нужно только в структуре для ack'ов пакетов хранить ещё его размер, и когда приходит очередной ack по алгоритму упомянутому выше вычислять значение
    Вот тут примерно описывается как там всё устроено, можно также почитать остальные его статьи, если потребуется ещё какая-то инфа по сетям
  • Можно ли объявить переменную-член класса с помощью метапрограммирования?

    Lite_stream
    @Lite_stream Автор вопроса
    Благодарю за ответ
    Только хотелось бы без специализации, чтобы код не дублировать
  • Можно ли объявить переменную-член класса с помощью метапрограммирования?

    Lite_stream
    @Lite_stream Автор вопроса
    Только тебе снова придется справляться с проблемой отсутствия поля в твоем классе и я бы хотел сперва узнать, как ты планируешь это обходить.


    ну, если someCondition false, то члена в классе не должно быть
    соответственно во всех методах, где этот член используется можно будет проверку if constexpr (someCondition)
  • Assignment operator VS Destructor + Placement new, где аргумент placement new - prvalue?

    Lite_stream
    @Lite_stream Автор вопроса
    Спасибо за подробный ответ. Ивиняюсь, забыл уточнить в вопросе, что контейнер по изначальной задумке не должен был быть безопасным относительно исключений, как, например, вектор


    И часто забываемый, но крайне важный пункт про проектирование. Здесь нарушен Single responsibility принцип, что возможно и породило этот вопрос. Т.е. у Вас метод по добавлению элемента может удалять/заменять элементы, что должно вызвать вопросы. Более того, вы решили за клиента вашего API (даже если это и Вы сами) как нужно обрабатывать исключительную ситуацию по переполнению. Потом например вы решите, что в одном месте стоит сложить старые элементы в отдельную очередь в другом залогировать или удалять не по одному, а сразу половину буффера. Все это потребует переписывания метода add, а зачем и почему? Попробуйте убрать эту часть кода заменив на выбрасывание исключения или вариант с возвращением успешности операции (менее грамотное решение, но это уже из области субъективной оценки) и посмотреть как увеличится прозрачность и простота написания клиентского кода для этого метода. Еще стоит посмотреть на сходное проектное решение в std::vector и его методе pop_back. Подумайте почему он не возвращает удаленный элемент?


    Тут подразумевается add() у циклического буфера, поэтому клиент знает, что метод добавляет новый элемент в хвост, затираяя старый
  • Assignment operator VS Destructor + Placement new, где аргумент placement new - prvalue?

    Lite_stream
    @Lite_stream Автор вопроса
    Евгений Шатунов,
    я накидал небольшой пример такой перегрузки шаблонов.

    Спасибо, посмотрю