• В чем отличие EventLoop в браузере от EventLoop в Node.js?

    black1277
    @black1277
    Вольный стрелок
    Вы немного запутались. Начиная с 11-й версии Node.js, разница в поведении приведенного вами кода в браузере и ноде - была устранена. Касаемо 6 этапов или фаз, они происходят внутри движка libuv(libuv - это многоплатформенная библиотека C, которая обеспечивает поддержку асинхронного ввода-вывода на основе циклов событий).
    Разница в том, что в Node.js мы можем не дожидаться окончания всех этих фаз, а вклиниться на определенных этапах для исполнения микрозадач (при помощи setImmediate и process.nextTick), а в браузере идет взаимодействие с Web API’s (браузерные или веб API), из которого могут поступать новые события (клики, движения мыши и др.), добавляющие в очередь новые макрозадачи(если установлены обработчики этих событий). Кроме того, в браузере есть рендеринг, который не может быть выполнен пока идет выполнение задачи движком(из этого следует, что необходимо разбивать тяжелые и длительные задачи на части).
    Как я не пытался изложить точнее и короче, к моим словам можно придраться буквально к каждой фразе. Поэтому, лучше самому изучить первоисточник и пару статей на русском:
    What is the Event Loop?
    Объяснение работы EventLoop в JavaScript
    Игра по правилам: Event loop Node.js
    Как устроены цикл событий и стек вызовов в JavaScript
    Ответ написан
    1 комментарий
  • Как с JS узнать продолжительность видео-файла mp4?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Если пытаться прочитать продолжительность видеофайла сразу после объявления элемента видео, то браузер не успевает прочитать из файла эту информацию. Есть 4 способа это поправить. Можно обернуть функциями onloadeddata или onloadedmetadata:
    video.onloadeddata = () => alert(video.duration);
    В Вашем случае, когда нужно дёргать чем-то другим, это можно сделать кнопкой:
    <button onclick='console.log(video.duration)'> жми </button>
    Ответ написан
    Комментировать
  • Как сверстать такой треугольник с градиентом у border?

    RAX7
    @RAX7
    Первый вариант svg mask.
    плюсы: не требует js
    минусы: нельзя применить backdrop-filter


    Второй вариант svg clip-path.
    плюсы: можно применить backdrop-filter
    минусы: требует js и желательно ResizeObserver
    Ответ написан
    Комментировать
  • Как организовать сеть (теория)?

    FotoHunter
    @FotoHunter
    System Administrator & Engineer, а так же фотограф
    Я опишу свою рабочую схему, она проста и логична и очень легко масштабируется.
    1. за основу взята орг. структура организации и принцип паранои (бухгалтера падают в обморок если видят в сетевом окружении компьютер кадровиков или не дай бог простых смертных).
    Т. е. количество подсетей = количеству орг. подраздеьений.
    2. принцип раздачи сетей и vlan. VLAN ID N содержит сеть вида 192.168.n.x/24. n в диапазоне от 2 до 130 (да у меня дохрена подсетей кажлая размерностью условно от 2х до 200 устройств).
    С подсетями отличающихся от /24 могут возникать внезапные проблемы - некоторые устройства не могут с первого раза принять другую маску по DHCP (у меня сетевые принтеры и Windows 95 глючили). Сеть может быть и 10.x.y.z - это дело вкуса, мне интегратор пытался навязать схему где разряды это этаж и номер коммутатора, но это было бы логично для однородного жилого дома, но не для организации, где одно структурное подразделение может занимать помещения на разных этажах и подключены к разным коммутаторам.
    3. если сетевые принтеры закреплены за подразделениями и стоят в одном с ними кабинете, то принтер попадает в ту же подсеть, что и его подразделение.
    4. сервера сидят в своей обособленной мжнеджовой подсети, НО если это сервер бузгалтерии, то ему добавляется интерфейс с vlan и ip бухгалтерии, что бы минимизировать трафик через маршрутизатор и да у общего файлового сервера 130 vlan и ip.
    Когда по сети летит база на несколько гигабайт на скорости 800-900 мегабит возможны жесткие коллизии, особенно если она летит из одной подсети в другую через маршрутищатор.
    5. у меня в сети более 700 voip телефонов и под них сделано исключение - в их vlan подсеть /22
    6. система контроля доступа и видеокамеры вынесены вообще на отдельные коммутаторы.
    У видеокамер и к примеру у систем аудио/видеоконференций иногда бывают механизмы использующие бродкасты/мультикасты и это может стать очень большой проблемой - регается тонкой настройкой коммутаторов.
    7. комп через телефон - только при дефиците розеток. Схема рабочая, если коммутатор поддерживает макавторизацию на адрес (есть вариант на порт, тогда это не будет правильно работать). В общем лучше этого не делать.
    8. ещё у меня есть гостевая подсеть, куда попадают гости не входящие в структуру.
    9. точки доступа Wi-Fi силят в мэнеджовой сети, а вещают BSSID с гостевым vlan и возможностью авторизации по маку с возможностью привязки к vkan.
    10. у меня сеть enterprise уровня на железках huawei s5700 модно и на s2700 это реализовать + сервер управления сети (radius со специфичными настройками) + dhcp + dns. DHCP лучше делать на отдельном компьютере, а не на коммутаторе (коммутаторы иногда глючат, ограничены в функционале и из лучше не нагружать лишней нагрузкой). Маршрутизатор у меня на Linux по той же проблеме - у коммутатора были ограничения на количество правил (ACL), а на Linux можно было творить что угодно. Так же в мэнеджовой сети есть tftp сервер для хранения и раздачи конфигов коммутаторов.

    Вот так вкраце. И очень советую читать документацию и консультироваться у старших товарищей. Каждый элемент имеет огромное количество неочевидных нюансов.
    Ответ написан
    Комментировать
  • Как ограничить количество одновременно исполняемых Promise?

    @GrayHorse
    Это называется семафором (Semaphore).
    class Semaphore {
        constructor(max = 1) {
            if (max < 1) { max = 1; }
            this.max = max;
            this.count = 0;
            this.queue = [];
        }
        acquire() {
            let promise;
            if (this.count < this.max) {
                promise = Promise.resolve();
            } else {
                promise = new Promise(resolve => {
                    this.queue.push(resolve);
                });
            }
            this.count++;
            return promise;
        }
        release() {
            if (this.queue.length > 0) {
                const resolve = this.queue.shift();
                resolve();
            }
            this.count--;
        }
    }


    const semaphore = new Semaphore(10);
    for (const url of urls) {
        await semaphore.acquire();
        void downloadUrlSynchronized(url, semaphore);    
    }
    
    async function downloadUrlSynchronized(url, semaphore) {
        const resp = await fetch(url);
        const blob = await resp.blob();
        semaphore.release();
        // const name = new URL(url).pathname.slice(1);
        // downloadBlob(blob, name, url);
    }

    Загрузка (fetch) будет не больше 10 в один момент, что собственно и требовалось.

    ---
    На примере 3:
    61ee50a555b4a690601785.png
    Ответ написан
  • Почему clearTimeout не сбрасывает таймер?

    Stalker_RED
    @Stalker_RED
    Вы здесь в вопросе не указали, но в демке на jsfiddle видно, что этот ваш let timerId находится внутри mousemove
    При движении мыши mousemove срабатывает очень много раз, и при каждом срабатывании заново создается переменная timerId и пересоздаются обработчики клика.
    Короче - архитектура ни к черту :)
    Создайте ОДНУ переменную let timerId, повесьте ОДИН обработчик клика, и уже после клика определяйте левый он или правый.

    И на будущее - вместо onload и onclick лучше использовать addEventLitener('click', ...)
    Да, писанины чуть больше, но при попытке написать еще один onload он у вас перетрет предыдущий, а addEventListener можно навесить много раз.
    Ответ написан
    Комментировать
  • Стоит ли покупать macbook m1 для веб разработки?

    @cheeroque
    Мне кажется, что выпускать в 2020 году компьютер с 8 гигабайтами распаянной (нерасширяемой) оперативки — это откровенное издевательство над пользователями. Имел печальный опыт фронтенд-разработки на ПК с 8 ГБ памяти, даже врагу такого не пожелаю. Понятно, что macOS ≠ Windows, и сама система может иметь другие требования к железу, но когда одна вкладка браузера с открытыми девтулзами может выжрать пару гигов памяти, а в соседней ещё минимум столько же хочет сожрать Фигма — в общем-то пофигу, какая там у тебя ОС.

    При нехватке ОЗУ компьютер (по крайней мере, на Windows) активно пользуется свопом, который действительно лежит на SSD. Но скорее он вас убьёт своей неотзывчивостью, чем этот SSD.
    Ответ написан
    5 комментариев
  • Как включить зависимости в jar?

    alfss
    @alfss
    https://career.habr.com/alfss
    Гугли fatjar, shadowjar
    Ответ написан
    1 комментарий
  • Хотел бы узнать как вырубать один checkbox когда другой включён, можно ли это сделать через Scene Builder, или сразу в среде разработки?

    @oleg_ods
    Конкретно для Вашей цели использовать RadioButton, а не городить эти костыли с отключением checkbox
    Ответ написан
    Комментировать
  • Как защитить JS код?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Защитить JS нельзя, т.к. он выполняется на клиенте, а не на сервере.
    Можно усложнить чтение с помощью обфускации. Это отсеет 90% любителей, но особо упорных это не остановит и они прочтут твой код. Тем более, что есть инструменты, помогающие в деобфускации: деобфускаторы, бьютифайеры и пр.
    Хочешь скрыть код - уходи из фронтенда и добро пожаловать в бэкенд, на сервер.
    Ответ написан
    Комментировать
  • Как защитить JS код?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Спрятать не выйдет, а вот затруднить немного чтение вполне. Например с помощью обфускации. Но будьте готовы к увеличению объёма кода.
    Например console.log('Лол, кек, чебурек'); превратиться в
    var _0xac52=["\u041B\u043E\u043B\x2C\x20\u043A\u0435\u043A\x2C\x20\u0447\u0435\u0431\u0443\u0440\u0435\u043A","\x6C\x6F\x67"];console[_0xac52[1]](_0xac52[0])
    . Оно вам надо? ИМХО всё это детский сад.
    Ответ написан
    5 комментариев
  • Как отправить большой файл(аудио или видео) на сервер с android приложения правильно?

    CellycoMobiles
    @CellycoMobiles
    indi developer @CellycoMobiles
    Взрослые разработчики используют заголовки. Никто не ограничивает вас в использовании заголовка Content-Range в запросе.

    Прошу прощения, позволю себе использовать синтаксис httpie.

    POST "/upload/"
    Content-Type:[MEDIA_TYPE]
    Content-MD5:[BASE64_MD5_FILE]
    Content-Range: bytes [FROM_BYTES]-[TO_BYTES]/[FILE_SIZE]
    file@file.ext

    Один эндпойнт. Без бойлерплейта из трех разных запросов.
    bytes 0-? : создаёт файл, рекомендовал бы создавать с именем md5;
    bytes ? -? : запись в файл
    bytes ? - total_size : запись в файл, проверка контрольной суммы, переименование.

    Размер чанка = ширина канала >> 1
    Ответ написан
    Комментировать
  • Стоит-ли переходит с Blender 2.8 на 3Ds max?

    KeySVG
    @KeySVG
    аниматор svg / html5
    Посмотрите еженедельные подборки лучших работ на блендернэйшен или вот здесь https://blenderartists.org/c/artwork/forum-gallery - и если этот уровень вы уже прошли, переросли и это для вас примитив - то смело идите дальше по ступени. Хоть к 3д максу, хоть к майе.
    Если же нет - то смена платформы не поможет.
    Учебного материала вам не хватает?!?! Подпишитесь на уже упомянутый мной https://www.blendernation.com - и вам ЕЖЕдневно будет сыпатся столько учебного материала, что не будете успевать даже ознакомится, не то что пройти эти уроки.
    Ответ написан
    Комментировать
  • Как добавить сохранение в файл?

    @astral1004
    попробуйте гуглить java write text to file example
    Ответ написан
    Комментировать
  • Почему Pug конвертирует div в span, если добавить его внутри ссылки?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Pug не даёт вам совершить ошибку - блочный элемент нельзя вкладывать в инлайновый (строчный).
    Нужно поведение как у блочного элемента внутри строчного - задавайте ему тип через стили.
    <a href="/" class="link">
      <span>Link text</span>
    </a>

    .link span {
      display: block;
    }


    UPD:
    Как я стар... Внезапно, HTML5 этого не запрещает и это не считается ошибкой. Раньше нельзя было.
    Но ИМХО, это как с определением рода слова "кофе" - по нынешним меркам можно и в мужском, и в среднем, но тем не менее в приличном обществе "кофе" в среднем роде услышать сложно.

    Новый ответ на вопрос (bemto позволяет делать так):
    +b.A.test(href="#")
      +e.DIV.content
    Ответ написан
    Комментировать
  • Стоит ли доверять Windows 10?

    15432
    @15432
    Системный программист ^_^
    Несколько сторонних антивирусов ставить точно не стоит, они друг другу мешают и грузят систему. Моё мнение - для продвинутого пользователя антивирусы не требуются, достаточно не запускать подозрительные файлы и не тыкать по ярким заманивающим ссылкам.
    Ответ написан
    Комментировать
  • Можете помочь разобраться с заданием?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    надо найти купюру, совпадающую с суммой, обещание котороый вынудит фрилансера написать ответ
    Ответ написан
    Комментировать