Задать вопрос
  • Мессенджер, не требующий для входа номера телефона/e-mail, и не заблокированный в РФ?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    Жил да был черный кот за углом...
    В Вашем вопросе два качественных определения. Чтобы на него ответить, сначала пожалуйста определите, что такое "достаточно безопасный" и что такое "без бубна".
    Оператор мессенджера по определению имеет доступ ко всей переписке (а вся трепотня про end-to-end encryption - это всего лишь трепотня - кто ее проверял-то?). Поэтому если Вас так заботит факт "нечитаемости" - подымайте свой сервак.
    Ответ написан
    3 комментария
  • Нормально ли использовать var вместо явной типизации в C#?

    xez
    @xez
    TL Junior Roo
    Вполне норм. Просто тип определяется справа, а не слева.
    Подсказки ide должны решить вопрос понимания человеком, что там за тип.
    Ответ написан
    5 комментариев
  • Как сделать проверку на авторизацию Websocket?

    @Everything_is_bad
    Я знаю, что протокол передачи данных другой, из-за чего я не могу получать куки с токеном при отправке сообщения.
    не совсем так, ты можешь получить куку (а так же заголовки) в момент коннекта к ws, это фактически http запрос, этого достаточно.
    Ответ написан
    Комментировать
  • Откуда появляется это странное число?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Читайте код внимательно:
    Ввод:
    for (int i=0; i<x; i++){

    Вывод:
    for (int i = 0; i <= x; i++){

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

    @Mercury13
    Программист на «си с крестами» и не только
    Итак, перед нами конфликт первой и второй функции, и надо первую как-то ограничить.

    Вариант 1. Концепция Си++20.
    template <class T>
    concept Printable = requires(T x) {
            std::cout << x;
    };
    
    struct Class {
        template<Printable Text>
        Class& operator<<(const Text& text) {
            cout << text << endl;
            return *this;
        }


    Вариант 2. Обратная концепция.
    template<uint8_t i>
    struct Id {
        constexpr static uint8_t id = i;
        using SpecialPrint = void;
        // какие-то элементы класса с методами
    };
    . . . . .
    template <class T>
    concept SpecialPrintable = requires {
        typename T::SpecialPrint;
    };
    
    struct Class {
        template<class Text>
        Class& operator<<(const Text& text) {
            cout << text << endl;
            return *this;
        }
        
        template <SpecialPrintable Special>
        Class& operator<<(const Special& text) {
            specialPrint(text);        
            return *this;
        }
        
        template<uint8_t i>
        void specialPrint(const Id<i>& text) {
            cout << (int)i << endl;
        }
    };


    А на 17 без концепций…
    template<uint8_t i>
    struct Id {
        constexpr static uint8_t id = i;
        using SpecialPrint = void;
        // какие-то элементы класса с методами
    };
    . . . . .
    
    template<class T, class Dummy = void>
    struct IsSpecPrintable { static constexpr bool value = false; };
    
    template<class T>
    struct IsSpecPrintable<T, typename T::SpecialPrint> { static constexpr bool value = true; };
    
    struct Class {
        template <class T>
        Class& operator<<(const T& text)
        {
            if constexpr (IsSpecPrintable<T>::value) {
                specialPrint(text);
            } else {
                normalPrint(text);
            }
            return *this;
        }
    
        template<class Text>
        void normalPrint(const Text& text) {
            cout << text << endl;
        }
    
        template<uint8_t i>
        void specialPrint(const Id<i>& text) {
            cout << (int)i << endl;
        }
    };
    Ответ написан
    1 комментарий
  • Как правильно сделать тестовый стенд?

    @Drno
    В одну сеть их поместите для начала
    Ответ написан
    Комментировать
  • Что значит такое объявления полей в С++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Да. Field - ссылка на приватное поле. Но она константная, поэтому так дается доступ к приватному полю только на чтение.

    Это становится понятнее, если воспринимать ссылки как указатели, которые не могут быть нулевыми, не могут менять адресс, куда они указывают, и должны быть инициализированны.
    Ответ написан
    5 комментариев
  • Как сделать одномерный массив в си?

    @res2001
    Developer, ex-admin
    Если количество цифр фиксировано, то просто перечислите в формате scanf сразу их все.
    Если количество цифр может меняться, то ...
    Вводить как строку и потом парсить ее с помощью strtol, кода будет, конечно, больше, чем сейчас.
    Строку вводить в какой-то достаточно большой буфер длинной в 1 или 4 кб.
    При превышении буфера можно выдавать ошибку.
    Или ввод оформить в цикл, на случай, если буфер заполнится, а Enter пользователь еще не нажал. Выход из цикла по нахождению символа '/n' в буфере. В таком случае буфер можно делать меньше. Но тут возникает дополнительная проблема с неоконченным вводом, т.е. пользователь вводит число 123456 и допустим 123 прилетело в конец прошлого буфера, а 456 в начало следующего. Это надо будет решать в коде.

    Есть проблема с фиксированным размером массива.
    Если нужен произвольный размер входных данных, то можно, предварительно выделять массив какого-нибудь начального размера, если в ходе парсинга размер массива превысится, то сделать realloc увеличив размер массива в 2 раза. Ну и надо отдельно хранить количество реально заполненных элементов массива.
    А вообще, массив может оказаться не нужен, если взглянуть на задачу целиком.
    Ответ написан
    1 комментарий
  • Как сделать одномерный массив в си?

    includedlibrary
    @includedlibrary
    Либо заранее просить пользователя ввести размер и использовать for:
    int size;
    scanf("%d", &size);
    int *list = malloc(sizeof(int) * size);
    for(int i = 0; i < size; i++)
        scanf("%d", &list[i]);


    Либо как сделали вы.

    Такой код, кстати, list[size++] = n; в какой-то момент приведёт к segfaul, потому что list, очевидно, фиксированного размера, а работа предполагается с массивом переменной длины. Почитайте про malloc/realloc
    Ответ написан
    Комментировать
  • Что именно дают миллиарды транзисторов в процессоре для работы программы?

    15432
    @15432
    Системный программист ^_^
    1) Больше фич. Всякие AVX, MMX, а также умная конвейеризация, Hyper-Threading, спекулятивное исполнение, предсказание веток - при правильном применении сильно ускоряет вычисление
    2) Больше ядер. В один кристалл всё больше процессорных ядер запихивают, можно распараллелить задачи, тоже получим прирост в скорости работы
    3) Больше кэш-памяти. Та самая SRAM, которая входит в процессор и тоже состоит из транзисторов. Сильно ускоряет работу с памятью и задержки выполнения инструкций
    4) Больше контроллеров. В процы сейчас встраивают всё, что попало - шины данных, контроллер DRAM, PCIE, северный мост, отдельное ядро сопроцессора (Intel ME, AMD PSP), GPU и даже NPU где-то добавляют. Тоже считается за "больше транзисторов".
    Ответ написан
    4 комментария
  • Где проходит граница между опенсорсом и коммерческим продуктом, основанным на опенсорсе?

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

    Но всегда вспоминайте создателя Nginx (Игорь Сысо́ев) который работая в Рамблер его писал. а потом Рамблер хитрожопо решил его отжать - хорошо что не вышло.
    Ответ написан
    Комментировать
  • 4g и Wi-Fi почему одна частота сигнала, но разная дальность?

    b1ora
    @b1ora
    Контакты в профиле
    1. Мощность базовой станции
    2. Чувствительность базовой станции
    3. Секторные антенны
    Ответ написан
    13 комментариев
  • Как исправить ошибку error: linking with `link.exe` failed: exit code: 1120?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Надо линкеру указать dll-ку в которой эта функция определена. В документации не указано, в какой именно библиотеке оно лежит, но можно пропробовать Gdi32.dll или Ddraw.dll. Надо где-то в настройках проекта на вкладке про линкер указать эти dll.
    Ответ написан
    Комментировать
  • Какие можно посмотреть курсы/уроки по практике на rust?

    vabka
    @vabka Куратор тега Rust
    Оставлю шутки, про "выучил раст" в стороне и пойду по порядку, тем более что судя по недавним вопросам - заявление крайне смелое.

    0. По хорошему стоит подтянуть математику, тк она помогает абстрактно мыслить, а без этого в разработке будет крайне тяжело. (Опять же по соседним вопросам - математика не дотягивает даже до 9 класса мбоу сош).
    В принципе на этом моменте тебе больше не нужно будет задавать подобные вопросы.

    1. Проверь, что ты действительно прочитал хотябы растбук и понял его.

    2. Определись с тем, что ты будешь делать.
    Смотри что тебе больше нравится в индустрии и тем, где тебе будет приемлимо заработать. Тут решишь, что тебе приятнее - крипта, фриланс, свой какой-то мини бизнес, или найм в какую-то крупную компанию.

    3. Найди библиотеки, фреймворки для этого. Читай документацию, смотри примеры, делай какой-нибудь личный проект для практики. Сделай до завершённого состояния.

    4. На этом шаге можно уже смело пытаться заработать в п2

    Всё очень абстрактно, тк сильно зависит от того, что ты сам хочешь.
    В принципе за пару лет вполне реально управиться.

    PS: в последнее время мне нравятся видосы decrusting ... от чела https://youtube.com/@jonhoo?si=9VbtXlH4dgdCrwQ-
    Три часа непрерывного разбора всех абстракций какой-то библиотеки
    Ответ написан
    Комментировать
  • Насколько безопасно использовать GoodbyeDPI?

    Думаю, тут лучше всего процитировать автора

    Я бы не стал устанавливать GoodbyeDPI на серьёзную машину, на которой множество конфиденциальных данных, особенно на рабочий компьютер/ноутбук с доступом в корпоративную сеть. Причин несколько:

    Я не профессиональный программист вообще и на C в частности;
    • Код использует UB и математику с указателями, потому что в C иначе не получается — куча пространства для ошибок;
    • Программа не проходила аудита кода даже моими глазами;
    • Драйвер WinDivert не проходил аудита кода и периодически вызывает несовместимости с другими драйверами с BSOD'ами (даже если ошибка не непосредственно в WinDivert).
    • Программа была написана по приколу, чтобы потренироваться в фильтрации пакетов на Windows. Я не пользуюсь Windows чёртову дюжину лет. Иными словами, я очень нерегулярно сам использую GoodbyeDPI.

    Что может произойти?
    • В программе найдут уязвимость, связанную с обработкой данных в пакете, с переполнением буфера, с возможностью эксплуатации на стороне сервера ⇒ вам прогрузят код с привилегиями SYSTEM, украдут все данные и заразят компьютер.
    • В драйвере WinDivert найдут аналогичную уязвимость ⇒ вам прогрузят код с привилегиями ядра, украдут все данные и заразят компьютер потенциально так, что антивирусы не обнаружат заражение.

    Это всё применимо к совершенно любой программе в целом, но к GoodbyeDPI в этом плане стоит относиться особенно настороженно, т.к. и сама программа, и драйвер запущены с максимальными привилегиями, а код и того, и другого написан любителями.
    До сих пор периодически пишут об ошибках запуска на необновленных Windows 7 c MS17-010, на таких системах потенциальные проблемы от GoodbyeDPI вообще не имеют никакого значения — вас куда быстрее проэксплуатируют через другой десяток уязвимостей :D

    ValdikSS
    https://ru.stackoverflow.com/questions/1589764/Без...
    Ответ написан
    3 комментария
  • Почему данные не реактивны?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    В vue 2 добавленые после создания ключи объектов не реактивы из-за технических ограничений. (Раньше это большими буквами в доках писалось).
    Надо использовать this.$set \ Vue.set при добавлении нового ключа.

    В твоём случае можно переделать так:
    const templates = reactive(keyBy(templatesArr, 'id'))
    for (let templateId in templates) {
      const devices = devicesArr.filter(device => device.templateId === templateId)
      Vue.set(templates[templateId], 'devices', devices);
      Vue.set(templates[templateId], 'settings', {});
    }
    
    // либо просто так:
    const templates = keyBy(templatesArr, 'id');
    for (let templateId in templates) {
      const devices = devicesArr.filter(device => device.templateId === templateId)
      Object.assign(templates[templateId], { devices }, {settings: {}})
    }
    reactive(templates);


    P.S. не помню чтоб в vue 2 было reactive, вместо него был Vue.observable. Но может добавили, хз, лень смотреть.:)
    Ответ написан
    Комментировать
  • Почему else игнорирует существование if?

    Maksim_64
    @Maksim_64
    Data Analyst
    Проблема в типах данных cofe и flor - строки, а должны быть int.
    cofe = int(input('Сколько вы хотите кофе?: '))
    flor = int(input('Введите на каком вы этаже:'))

    Исключения не выходит из-за логического and if cofe in [1, 2, 3] and flor >= 100: он оценивает первое условие как False и не переходит ко второму.
    Ответ написан
    1 комментарий
  • Как раздельно инициализировать структуру?

    vabka
    @vabka Куратор тега Rust
    Тебе ссылка через & не подойдёт тут.
    Используй Arc и Weak.
    Либо делай window тоже как ссылку на окно, которое создано в main.
    Ответ написан
    3 комментария
  • Как правильно составить регулярное выражение для проверки доменного имени?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Почему строка $arr[] = 'si$te.com'; определяется как доменное имя?

    Потому что te.com определяется как доменное имя, а условие, что попадать под маску должна полная строка у вас не наложено. Ну и, на самом деле, национальные домены первого уровня в punycode могут содержать цифры.
    - $reg   = '#[a-z0-9]+[_-]?[a-z0-9]+\.[a-z]{2,}#';
    + $reg   = '#^(?:[a-z0-9][a-z0-9-_]*\.)+(?:[a-z]{2,}|xn--[a-z0-9]{4,})$#i';
    Ответ написан
    5 комментариев
  • Как убрать "Property does not exist on type" в рекурсивном интерфейсе?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    На каждом уровне проверять, что значение не string и не number. Иначе никак, ты сам задал такой тип, и ts не даст тебе совершить ошибку.

    Если у тебя только 2 уровня, то не надо рекурсии:
    interface CSS {
        [k: string]: {
            [k: string]: string | number 
        }
    }


    Если ты хочешь сузить тип при создании констатны, можно сделать так:
    const css = {
        default: {
            color: '#676767',
            border: '1px solid',
            border_color: '#C4C4C4',
            border_radius: '110px',
    
            padding: '16px 21px',
        }
    } satisfies CSS;
    Ответ написан
    Комментировать