Задать вопрос
  • Как найти вершину наклоненного DIV?

    @Absolute138
    Ответ написан
    Комментировать
  • Как изменить структуру массива с помощью reduce?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    [1,2,3].reduce((acc, current, index) => {
      acc.push({ x: current, y: index * 10 })
      return acc
    }, [])
    Ответ написан
    5 комментариев
  • Чем вызвана ошибка "Хххх is not a constructor"при подключении класса через require в Node.js?

    @ChernovGV Автор вопроса
    Уважаемый Lynn «Кофеман», оказался прав!

    Lynn «Кофеман»:
    Вангую циклическую зависимость

    Дело в том, что require в JS это не тоже самое что import в java, или use в php.
    Получается в JS классы не могут импортироваться друг для друга.
    Ответ написан
    1 комментарий
  • Почему в Java есть метки, но нету оператора goto?

    Jacen11
    @Jacen11
    с метками тоже ничего нормального. Не надо это все использовать просто потому что с ними нереально разобраться как работает код
    Ответ написан
    Комментировать
  • На каком уровне джуниор веб-программисту надо знать устройство компьютера?

    Zoominger
    @Zoominger Куратор тега Веб-разработка
    System Integrator
    Совершенно ни на каком. Достаточно знать, где кнопка включения и что такое "перезагрузить ПК".
    Ответ написан
    4 комментария
  • Почему в Java есть метки, но нету оператора goto?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Оператор goto может совершить переход в любую точку программы, в то время как оператор break ваша_метка; может быть использована для быстрого выхода из двух и более циклов. Именно из-за этого использовать метку с оператором break вы можете в циклах, а не везде, в отличие goto. Насколько мне известно, использование метки не является правилом хорошего тона в Java и скорее всего код можно рефакторить так, чтобы у вас не было кучи вложенностей циклов.
    Ответ написан
    Комментировать
  • Как преодолеть NAT (webrtc)?

    Если кратко, то существуют 4 вида NAT-а, которые нужно как-то преодолевать, 3 из них лекго преодолеваются при помощи STUN-серверов (они используются только в момент соединения пиров друг с другом - то-есть весь трафик через них не идет, есть куча бесплатных stun-серверов), четвертый - самый проблемный, под него подпадают примерно 15% всех peer-to-peer соеднинений в Интернете - это так называемый двойной NAT (когда оба пира скрыты за NAT-ом). Для преодоления этого четвертого вида NAT-а нужен TURN-сервер. Его особенность в том, что он работает как прокси - то-есть пропускает весь трафик через себя - отсюда вы должны понять, что бесплатных TURN-серверов вы не найдете. Те аккаунты, что вы привели сверху скорее всего уже давно отключены.

    Отличный список STUN-серверов можно взять здесь - https://github.com/DamonOehlman/freeice он там постоянно проверяется и обновляется.

    Проблемя с двойным NAT-ом решается одним из трех способов:
    1. где-то находите временно халявный аккаунт на TURN-сервер (но аккаунт внезапно могут отключить)
    2. покупаете платный аккаунт на уже существующем сервере и платите за трафик, например здесь - https://my.xirsys.com/signup/plans/standard/monthly
    3. Разворачиваете свой turn-сервер. Мы, например, так и сделали. Взяли убунту за $5 в месяц на digitalocean и поставили там за пол дня опенсурсный, бесплатный turn-server - turnserver.open-sys.org/downloads
    Ответ написан
    3 комментария
  • Почему XOR 0 убирает дробную часть числа?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Почему число получается целым, уже объяснил Stranger in the Q
    Я же постараюсь объяснить, как это работает, и почему оно не лучше Math.floor:
    В js тип number представлен числами двойной точности по стандарту кодирования IEEE 754, а это значит, что 53 бита выделяются под значимую часть (старший бит - бит знака, если 1 - то число отрицательное) и 11 бит под экспоненту (старший бит опять же бит знака), всего выходит 64 бита. Притом данный стандарт позволяет абсолютно точно работать с целыми числами до ±252 и поэтому до не давнего времени в js честного int не было.
    Теперь к бинарным (не нравится мне перевод "побитовый") операциям, как известно "исключающее или" (xor, ^) с нулем, а так же "или" (or, |) с нулем не меняют число, возвращая другой операнд в неизменном виде. Но тут вклинивается стандарт js и говорит, что бинарные операции выполняются над signed int32 представлением числа и при представлении можно просто отбросить все лишнее, что движки и делают.
    Как отбросить все лишние? Да просто, движок js прекрасно знает, в какой части числа расположена значимая часть, он просто берет младшие 32 бита значимой части и кладет их в int32 контейнер ну и еще переносит бит знака на свое место. Обратное преобразование похоже - в нулевой float64 контейнер раскладываем: старший бит (знак) на свое место, остальные 31 бит - на свое.

    А теперь давайте поэкспериментируем в обычной браузерной консоли:
    Math.floor(1.1) // 1
    parseInt(1.1) // 1
    1.1 | 0 // 1
    1.1 ^ 0 // 1 - как уже писал выше, эффект будет 1 в 1, как и с |
    
    // пока все было ок, но как насчет отрицательных чисел?
    Math.floor(-1.1) // -2 - округляем в сторону -Infinity
    parseInt(-1.1) // -1 - отбрасываем экспоненту
    -1.1 | 0 // -1 - отбрасываем экспоненту и не только (но тут не имеет значения пока)
    
    // попробуем с чем-нибудь побольше
    2 ** 31 // 2147483648
    2147483648 | 0 // -2147483648
    /*
    не зная как преобразовывается число выше, это было бы не очевидно
    но смотрим выше "он просто берет младшие 32 бита значимой части и кладет их в int32 контейнер"
    2 ** 31 в двоичном виде - это единичка и 31 нолик
    и эта единичка попала в бит знака при переноси в int32
    тем самым мы получили самое маленькое число в int32
    */
    
    // давайте еще пример, набью как я большое число от балды:
    34646456436346346212424 // 3.464645643634635e+22
    34646456436346346212424 | 0 // 1178599424
    /*
    ну в первом примере мы видим интересную особенность чисел с плавающей запятой
    мы можем хранить не только дробные числа, но и очень большие целые, правда с потерей точности
    e+22 - это и есть экспонента, это значит число до e нужно умножить на основание системы счисления (10) в степени +22
    а при бинарной операции эта экспонента отбрасывается, как и старшие биты значимой части
    в 32 младших битах осталось 1178599424
    забавно, что я случайно вбил такое число, у которого 32 бит содержал 0 (шансы были 50/50)
    если бы там оказалась 1, то я бы вновь получил отрицательное число
    */
    Ответ написан
    Комментировать
  • Каков мой уровень верстальщика?

    Zoominger
    @Zoominger
    System Integrator
    https://drive.google.com/

    Сразу могу сказать, что г-но. Вы ни хостинг не осилили, ни открытие доступа. Такие люди по определению не могут сделать что-то достойное.
    И это не глум, откроете - я уверен, что там будет г-но.
    Ответ написан
    5 комментариев
  • Видеоуроки - долго, и много воды. Стоит ли тратить на них время?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    Нет, не стоит.
    Вы тупо будете слушать, как картавый мычащий Васян пересказывает какой-нибудь learnjavascript, пропуская половину тем, которые сам не понимает.
    И таких видео - 90%.
    Ответ написан
    12 комментариев
  • Анимация на canvas/js?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    На CSS вы это никак не сделаете - там неравномерное растяжение картинок присутствует. Тут "начальник отдела разработки" либо не шарит во фронтенде, либо пытается сбить цену. Но штука из разряда "ябзаверстал", а я тут как раз собираю коллекцию примеров с шейдерами, так что набросал похожий эффект для нее, только без кляксы в центре (там есть немного лишнего кода, но это издержки, чтобы серия примеров не сильно отличалась).


    * Если вдруг будете копировать себе, не забывайте про лицензию.
    Ответ написан
    8 комментариев