• Что такое джиттер?

    CityCat4
    @CityCat4 Куратор тега Сетевое оборудование
    Внимание! Изменился адрес почты!
    Буквально - "дрожание". То есть непрогнозируемое и нерегулируемое изменение некоторого параметра. Применительно к wifi обычно означает бессистемно прыгающий пинг до целевого сервера.
    Высокий джиттер вполне серьезно осложняет IP-телефонию - появляется бульканье, сторонний шум, пропадают слова. Осложняет работу IPTV - изображение начинает ломаться, рассыпаться на квадратики, тормозить, дергаться... Критичен джиттер для реалтаймовых игр, там где перемещение мышки на милиметр больше или меньше вполне может означать смерть персонажа :D
    Ответ написан
    Комментировать
  • Что такое джиттер?

    Есть разные понятия джиттера, основное это резкое изменение фазы сигнала (например при последовательном воспроизведении двух музыкальных треков). Однако в сетях джиттером обычно называют просто "прыгающий пинг", т.е. разброс во времени прохождения сетевых пакетов. Т.е. если у вас все пакеты идут по 2 миллисекунды, то джиттера нет. Если все пакеты по 200 миллисекунд то джиттера тоже нет. Но если часть пакетов идет по 2 и часть по 200 - то это джиттер. Джиттер есть практически в любых броадкастных сетях, в т.ч. и в Ethernet, при высоких загрузках среды передачи. В WiFi выраженность джиттера будет зависеть от нескольких факторов, основной это загруженность используемого частного канала. В многоквартирном доме или офисном здании с кучей небольших компаний это может быть достаточно серьезной проблемой. Джиттер плох в основном для игр и реалтаймовых протоколов (голоса, видео).

    Если вы не наблюдаете рандомных задержек пинга даже при существенной нагрузке на сеть, то проблемы джиттера у вас нет.
    Ответ написан
    1 комментарий
  • В корпусе сбоку вентилятор должен работать на вдув или на выдув (фото)?

    Zoro
    @Zoro
    На вдув надо
    Ответ написан
    Комментировать
  • Почему выводится некорректное значение вещественного числа?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему если считывать число как long double, то результат получается нормальным,
    input 2 => output 8.000000 (%lf)

    потому что в scanf %lf -- это не long double, а просто double. %f -- это float, а long double -- это %Lf. См. man scanf.
    float и double обычно отличаются форматом представления, поэтому если вводить число не тем форматом scanf, то и значение получится не то, что ожидалось.
    Ответ написан
    Комментировать
  • Почему в С можно изменить константный символьный массив?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему в С допускают такое?

    То что у вас написано квалифицируется стандартом как Undefined behavior (с99 6.7.3:5):

    If an attempt is made to modify an object defined with a const-qualified type through use
    of an lvalue with non-const-qualified type, the behavior is undefined.


    Почему технически можно так сделать и этот код работает -- потому что массив string имеет автоматическое время жизни и компилятор помещает его на стек. Т.е. память фактически не является константной.

    Почему функция strchr принимает const char *, а возвращает char *? Чтобы показать, что сама она свой аргумент не изменяет, но чтобы не заставлять всех её пользователей делать приведение типа у результата. Я бы сказал, что проблема в этой функции, но она настолько старая, что никто не будет чинить её прототип.

    В С++ можно было бы решить эту проблему предоставив два перегруженных варианта strchr -- char *strchr(char *, char) и const char *strchr(const char *, char), но в С нет перегрузки функций.
    Ответ написан
    5 комментариев
  • Как sizeof вычисляет размер массива?

    @res2001
    Developer, ex-admin
    sizeof - это не функция (хоть и выглядит похоже) - это операция взятия размера.
    sizeof всегда вычисляется на этапе компиляции, т.е. в исполняемом файле вместо вызова sizeof уже будет вычисленная константа.
    Когда компилятор знает размер массива, как в вашем примере, он вернет полный размер массива.
    Но если передать в sizeof произвольный указатель (именно указатель, а не статический массив), он вернет размер указателя.

    Статический массив - это не указатель. Указатель - на этапе выполнения занимает в памяти место для хранения адреса. Статический массив занимает в памяти место для хранения данных массива.
    Поэтому статический массив - это не указатель. Хотя часто компилятор работает с именем статического массива как с указателем.
    Ответ написан
    8 комментариев
  • Специалисты из Нью-Йоркского университета предлагают добавлять "фальшивые баги" в ПО для борьбы со злоумышленниками. Как считаете, поможет ли?

    Stalker_RED
    @Stalker_RED
    То есть они взяли идею honeypot'ов, которой лет 30, и расширили ее с сетей на код? Да, при правильном исполнении можно значительно замедлить взлом а может даже засечь попытки.
    Ответ написан
    2 комментария
  • Как найти пересечения среди N временных отрезков?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Надо отсортировать по времени события вида {id: 2, type: "start"} или {id: 4, type: "end"}
    Один раз перебрать эти времена, двигаясь по одному, и отслеживая текущее окно: кто в нём. Из этого понятно, кто с кем пересекся.
    Ответ написан
    1 комментарий
  • Алгоритм разделения слов, которые, при опечатке, случайно "склеились" (написаны без пробела)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Без контекста бесполезно. В лучшем случае получите сам факт того, что данное слово может быть составлено из нескольких других слов. Но в большинстве случаев невозможно будет определить, а надо ли его разбивать.
    Например, знаменитое по Word'у "мультиканальный"
    Ответ написан
    Комментировать
  • Нарушаю ли я ООП используя partial классы?

    @basrach
    Нет.
    Partail классы это механизм компилятора. А ООП стиль написания программ. Понятия из разных областей и не пересекаются никак.
    Ответ написан
    Комментировать
  • Что значит, false); после функции в JS?

    Третий параметр к функции addEventListener
    alarmSound.addEventListener('ended', function() {}, false);

    Чтобы Вам было понятнее, этот код можно записать как
    function eventAction() {
    this.currentTime = 0;
        this.play();
    }
    function initAlarm() {
        alarmSound.play();
        alarmSound.addEventListener('ended', eventAction, false);
        document.getElementById("alarmOptions").style.display=""; // отображает две кнопки
    }
    Ответ написан
    Комментировать
  • Что такое бизнес логика android приложения?

    @MaxLich
    java developer
    Это часть кода, которая выполняет то, ради чего пишется это приложение. Кроме бизнес-логики, в приложении может быть код, который отвечает за отображение информации, управление информацией, работу с внешними ресурсами/сервисами, какой-то вспомогательный код (например, удалить все символы 'x' в строке), и т.д.
    Ответ написан
    Комментировать
  • Что такое бизнес логика android приложения?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Предположим, вы хотите написать программу, которая будет считать коммунальные расходы.

    Бизнес логика тут простейшая - нужно ежемесячно вводить показания счетчиков и формировать цену исходя из тарифа. Следовательно нужно дать возможность устанавливать тариф для каждого месяца и возможность вводить показания счетчика. Может вы ошибочно ввели неправильные показания счетчика - значит должна быть возможность удалить показания или редактировать.

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

    Бизнес-логика это часть тех.задания, когда программа делает то, что нужно клиенту. Технические алгоритмы клиенту не так важны. Будете вы пользоваться массивами или б-деревом, базой данных или хранить все в CSV файлике - это уже техническая часть.
    Ответ написан
    Комментировать
  • Зачем std::forward иметь две сигнатуры и явно указывать тип?

    makarenya
    @makarenya
    программист
    Попытка №2, в первой был бред:
    Основной проблемой является то, что внутри метода все параметры имеют тип l-value. То есть модификатор параметра && - это лишь требование, чтобы на место этого аргумента вызывающий код передал r-value (а для шаблонов даже этого не требует, благодаря склейки ссылок). И раз так, то ваш метод my_forward переделает вернёт l-value ссылки вообще для всех аргументов.

    Отсюда берётся необходимость явно указывать тип аргумента - чтобы использовался именно выведенный тип, а не l-value на этот тип. Ну и почему 2 специализации: если указать явно тип аргумента и явно специализировать функцию каким-нибудь r-value, то my_forward будет ожидать строго r-value, и являющееся l-value значение параметра туда не подойдёт.

    В объяснение моих мыслей, код
    #include <iostream>
    
    template<typename T>
    decltype(auto) my_forward(T&& arg)
    {
        return static_cast<T&&>(arg);
    }
    
    template <typename T, typename K>
    void forward(T&& t, K&& k)
    {
        std::cout << std::is_same<int&&, decltype(my_forward(t))>::value << std::endl;
        std::cout << std::is_same<int&, decltype(my_forward(k))>::value << std::endl;
        std::cout << std::is_same<int&&, decltype(std::forward<T>(t))>::value << std::endl;
        std::cout << std::is_same<int&, decltype(std::forward<K>(t))>::value << std::endl;
    }
    
    int main()
    {
        int lval = 10;
        forward(10, lval);
        return 0;
    }


    вернёт
    0
    1
    1
    1

    То есть предположение что my_forward вернуло int&& для первого параметра - не верно!
    Ответ написан
    4 комментария
  • Может ли некачественный обжим кабеля приводить к тому, что будет только 100Мб?

    Black_beard_ast
    @Black_beard_ast
    Sysadmin/Ops engineer.
    Да, теоретически возможно. При организации сети по каналу 100 Мбит/сек используются 2 пары витой пары и используются жилы 1, 2 , 3 и 6. При организации гигабитной сети используются 4 пары, т.е. все 8 жил витой пары. Если у вас где-то оборвана одна жила, возможно поэтому не работает на гигабите. Надо "прозванивать"!)
    Ответ написан
    Комментировать
  • Можно ли заменить конденсатор?

    GavriKos
    @GavriKos
    Если я не ошибаюсь, 25 вольт - это максимально допустимое напряжение, подаваемое на кондер, а не то сколько он выпустит.
    Ответ написан
    Комментировать
  • Можно ли заменить конденсатор?

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

    SagePtr
    @SagePtr
    Еда - это святое
    Старый добрый Брезенхэм
    Ответ написан
    Комментировать
  • Как вывести адрес объекта в си?

    15432
    @15432
    Системный программист ^_^
    А зачем вы используете %n?
    Надо ведь тоже %p или хотя бы %x
    Ответ написан
    1 комментарий
  • Что такое CRUD-приложение, и для чего он нужен?

    oxyberg
    @oxyberg
    Продуктовый дизайнер ВКонтакте
    via wiki:
    CRUD (сокр. от англ. create, read, update, delete — «создать, прочесть, обновить, удалить») — акроним, обозначающий четыре базовые функции, используемые при работе с персистентными хранилищами данных[1]:
    • создание;
    • чтение;
    • редактирование;
    • удаление.


    По всей видимости, приложение должно обеспечивать 4 операции с какой-то сущностью. Очень часто фреймворки могут автоматически генерировать код для таких операций.
    Ответ написан
    1 комментарий