Задать вопрос
  • Можно ли изучать nodejs без знаний js?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Да, вполне можно, т.к. JS является основой NodeJS, то в процессе изучения ноды необходимо будет изучить и JS. Начните с JavaScript Garden и постепенно изучайте NodeJS, решая реальные задачи.
    Ответ написан
    4 комментария
  • Как ограничить по времени, доступ по пин-коду?

    Radjah
    @Radjah
    Нужно как минимум хранить время создания кода. Если не хочется городить MySQL/MariaDB/PostgreSQL/etc, то можно сделать sqlite-базу. По крайней мере не придётся велосипедить средства для поиска и удаления записей.
    Ответ написан
    Комментировать
  • Как сделать веб-сервис и не утонуть в процессе?

    @asd111
    Сначала нужно спроектировать весь проект и только потом начинать писать.
    1. Расписываешь все урлы и пишешь какие данные будут приходить на данный урл и какие будут уходить.
    2. Проектируешь базу данных.
    3. Пишешь код.
    Почитай что нибудь на тему жизненного цикла программного обеспечения, там разъясняется как писать большие проекты.
    Ответ написан
    1 комментарий
  • Как объединить большое количество условий?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Сделайте объект: то, с чем сравниваете, будет именами свойств; то, что выводите, будет их значениями; то, что проверяете - ключ, по которому будет извлекаться значение. Если ничего не получили, подставляете дефолтное значение. Типа вот так:

    alert(({
      1: 'b',
      2: 'c',
    })[a] || 'd');

    Если вдруг среди значений будут такие, чьим логическим эквивалентом является false, то извлекайте значение из объекта только в том случае, если ключ существует:

    const obj = {
      1: 'b',
      2: 'c',
      7: null,
      8: NaN,
    };
    const defaultValue = 'd';

    alert(obj.hasOwnProperty(a) ? obj[a] : defaultValue);
    Ответ написан
    Комментировать
  • Разделить строку на сегменты примерно по 50 символов?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Ответ написан
    Комментировать
  • Как сгенерировать случайный многоугольник без взаимопересечений?

    У меня первая мысль была такая:
    1. Создать треугольник. Добавить все его рёбра в список.
    2. Взять случайное ребро из списка, оно будет основанием нового треугольника.
    3. Сгенерировать точку так, чтобы получился новый треугольник, ни одно из рёбер которого не пересекает рёбра из списка. Два новых ребра добавить в список, основание убрать.
    4. Повторять с п.2 пока не будет достигнута требуемая площадь многоугольника.
    Ответ написан
    5 комментариев
  • Как автоматически отправить первое сообщение ВКонтакте при переходе пользователя по с ссылке с сайта без использования сторонних сервисов?

    YardalGedal
    @YardalGedal
    yeah boy
    Можно.
    Задайте стандартное сообщение в настройках сообщества (вкладка "сообщения").

    Далее с сайта перенаправьте пользователя на адрес vk.me/{community_screen_name}
    Ответ написан
    2 комментария
  • Какой key code у enter на mac os?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Что значит "не могу проверить"?

    Сделайте программку, которая при нажатии на любую клавишу выводит её код. Это самый надёжный способ узнать с учётом вашей среды.

    P.S.
    vd1jy.png
    Ответ написан
    2 комментария
  • Замедляют ли невидимые части широкой таблицы её скроллинг?

    @forspamonly2
    корректный виртуальный рендеринг таблиц - крайне нетривиальная штука. одни только правила объединения ячеек чего стоят.

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

    а если у вас ячейки от него не зависят и гарантированно имеют фиксированный размер, то можно попробовать сделать table-layout: fixed и тормозов станет меньше. может вам и этого хватит, чтобы без виртуального рендеринга обойтись.
    Ответ написан
    Комментировать
  • Замедляют ли невидимые части широкой таблицы её скроллинг?

    Sanasol
    @Sanasol Куратор тега Веб-разработка
    нельзя просто так взять и загуглить ошибку
    Вопрос: утяжеляют ли этот велосипед невидимые за окном колонки?

    да поэтому придумали отложенный рендеринг и всякое такое.

    Т.е. выводится и строится html только для того что в данный момент должно быть видно.
    Скролл соответственно полностью виртуальный и рендерит с нуля данные при прокручивании.

    https://datatables.net/examples/ajax/defer_render.html
    Ответ написан
    Комментировать
  • Как запускать screen без приветственного экрана?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    1. Просто запускайте скрин с указанной командой, например

    screen bash

    screen "/home/.../Telegram/Telegram -many -workdir /home/.../account-one"


    2. Можно запустить скрит в детач режиме и подключиться к нему:
    screen -d -m
    screen -r
    /home/.../Telegram/Telegram -many -workdir /home/.../account-one


    3. В бэкграунде обычно команды запускают через &
    /home/.../Telegram/Telegram -many -workdir /home/.../account-one &

    или через & и nohup
    nohup /home/.../Telegram/Telegram -many -workdir /home/.../account-one &
    Ответ написан
    1 комментарий
  • Можно ли с помощью Service Worker перехватить и изменить http запрос?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Одна из задач Service Worker - именно программируемый прокси на стороне клиента.
    То есть на Ваш вопрос "можно?" - я бы ответил, да - это одна из основных функций Service Worker.
    Но есть одно но, Service Worker работает только с тем доменном, с которого загружен его код. То есть можно перехватывать только запросы к своему домену. Притом, данная функция доступна только для не кросдоменных запросов (тех что идут со страниц своего же домена). Стоит так же упомянуть экспериментальное событие foreignfetch упомянутое в сводке фич chrome на google developers за сентябрь "16 - оно позволяет перехватывать обращение к своему домену с чужих ресурсов, но о нем не знает ни mdn, ни caniuse - как следствие событие потенциально работает только в chrome 54+.
    Так же стоит учитывать, что поддержка Service Worker хорошо реализована только в Chrome и Firefox. В Edge появилась с 17 версии (вышедшей вместе с win10 April"18 update), в safari тоже появилась недавно (11.1 - десктоп, 11.4 - iOS)

    Если это все устраивает, то:
    Читаем эту статью на mdn: https://developer.mozilla.org/ru/docs/Web/API/Serv...
    Так как из стать выше для Вашей задачи можно почерпнуть только работу с событием fetch (с событием foreignfetch работаем аналогично) и большинство примеров нацелены на программируемый кэш, а для подделки запросов нужно генерировать свой объект Responce - читаем эту статью: https://developer.mozilla.org/en-US/docs/Web/API/R... (only English)
    Так же читаем про Request: https://developer.mozilla.org/en-US/docs/Web/API/R...

    Вся суть будет сводится примерно к следующему коду Service Worker:
    self.addEventListener('fetch', event => {
      const {request} = event;
      // обрабатываем request чтоб понять, что от нас хотят
      //...
      if(/* условие, что запрос нужно подменить */) {
        event.respondWith(new Response('Hello world', /* вместо строки можно Blob или ArrayBuffer */ {
          headers: { 'Content-Type': 'text/plain' }
        }));
      } else {
        event.respondWith(fetch(request)); // если не наш случай, отправляем запрос на сервер,
        // тут так же можно заморочится с кэшем
      }
    });


    Если же какие то условия не подходят, то единственным выходом будет навязывать юзеру наше расширение для браузера... благо с последней политикой партии втихаря их уже не поставить.
    Ответ написан
    Комментировать
  • Почему "ошибка", а не "undefined"?

    rockon404
    @rockon404
    Frontend Developer
    В строгом режиме будет ошибка.

    Перед началом прохождения теста внизу страницы приведен список пояснений:
    5b75d0748abda042496138.png
    Ответ написан
    Комментировать
  • Какой метод перебора массивов JS использовать и как?

    0xD34F
    @0xD34F Куратор тега JavaScript
    map/filter:

    arr.map((n, i) => n ? i : null).filter(n => n !== null)
    // или
    arr.map((n, i) => n ? i : NaN).filter(n => n === n)
    // или
    arr.map((n, i) => !!n && i).filter(Number.isInteger)
    // или
    arr.map((n, i) => !n || i).filter(n => n !== !0)

    reduce:

    arr.reduce((acc, n, i) => n ? [ ...acc, i ] : acc, [])
    // или
    arr.reduce((acc, n, i) => (n && acc.push(i), acc), [])

    или, если надо изменить текущий массив, а не создавать новый

    for (let i = arr.length; i--;) {
      if (arr[i]) {
        arr[i] = i;
      } else {
        for (let j = i; ++j < arr.length; arr[j - 1] = arr[j]) ;
        arr.pop();
      }
    }
    
    // или
    
    arr.reduceRight((_, n, i, a) => n ? a[i] = i : a.splice(i, 1), 0);
    
    // или
    
    arr.splice(0, arr.length, ...любое_выражение_с_map/filter_или_reduce_из_показанных_выше);
    
    // или
    
    arr.length -= arr.reduce((acc, n, i, a) => (
      a[i - acc] = i,
      acc + !n
    ), 0);
    Ответ написан
    Комментировать
  • С помощью чего можно реализовать такой график?

    @DimaDolgoter
    Ответ написан
    Комментировать
  • Как перевернуть строку рекурсией?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const reverse = str =>
      str.length < 2 ? str : reverse(str.slice(1)) + str[0];

    или

    const reverse = ([ c, ...str ]) =>
      c ? reverse(str) + c : '';
    Ответ написан
    8 комментариев
  • Переопределение функции после выполнения?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Но если на функцию ссылается объект...

    Ну так это совсем другая ссылка, не та, что вы используете при переопределении.

    Указывайте контекст при переопределении, т.е., замените

    foo = function () {

    на

    this.foo = function () {
    Ответ написан
    Комментировать
  • Почему не удается сжать видео после оцифровки видеокассеты???

    nidalee
    @nidalee
    А можно еще попробовать в H265 с битрейтом, эдак, на 8М (можно подкрутить по вкусу).
    ffmpeg -i "VHS-01.mpg" -c:v libx265 -b:v 8M -c:a aac -b:a 128k "VHS-01.mp4"
    Сжиматься должно еще дольше, чем по совету с H264, но и объем будет меньше. H265 на данный момент сжимает лучше всех.
    А если вам времени совсем не жалко, то:
    ffmpeg -y -i "VHS-01.mpg" -c:v libx265 -b:v 8M -x265-params pass=1 -an -f mp4 NUL && ^
    ffmpeg -i "VHS-01.mpg" -c:v libx265 -b:v 8M -x265-params pass=2 -c:a aac -b:a 128k "VHS-01.mp4"
    Это все под Windows, если что. Я делаю через bat-файлы.
    Вот здесь подробнее, плюс разобраны примеры с CRF.

    Если у вас есть видеокарта NVIDIA достаточно новая, то можно скачать Adobe Media Encoder и\или Adobe Premiere, поставить на него плагин и просчитать через NVENC - там есть и H264, и H265 (предупреждаю, на пиратку версии 2018+ H.265 встает кое-как). Правда, сжимают они все же хуже ffmpeg-а (по соотношению качество\объём).
    Ответ написан
    1 комментарий
  • Как сделать функцию которая принимает любое количество массивов и удаляет из каждого массива первый элемент?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    changeCollection как этой главной функции указать то что будет принимать сколько угодное количество массивов , а последним будет обработчик ?
    В современном js вот так: changeCollection(...arrays, handler)
    В arrays будет массив с переданными массивами.

    Если по классике, то вот так:
    function changeCollection() {
        var handler = arguments[arguments.length - 1];
        
        for (var i = 0; i < arguments.length - 1; i++) {
          var array = arguments[i];
          
          handler(array);
        }
    }


    Кстати, обратите внимание, что массивы в js передаются по ссылке, поэтому изменяя переданные аргументы вы изменяете и оригиналы:
    function changeCollection() {
      var handler = arguments[arguments.length - 1];
        
      for (var i = 0; i < arguments.length - 1; i++) {
        var array = arguments[i];
          
        handler(array);
      }
    }
    
    function deleteFunc(array) {
      array.shift();
    }
    
    var one = [1 ,2 ,3];
    var two = ['b', 'c'];
    
    changeCollection(one, two, deleteFunc)
    
    console.log(one, two); // [2, 3] ['c']

    Если вас такое поведение не устраивает, нужно делать копии и изменять и возвращать их. Для этого лучше воспользоваться готовыми библиотеками и не писать свой велосипед. В современном js, опять же, можно воспользоваться встроенными средствами: const clone = [...original];. Но если у вас внутри массивов не примитивы и вы изменяете элементы, то нужно делать глубокое копирование.
    Ответ написан
    3 комментария
  • Как сделать разный интервал на таймер?

    SagePtr
    @SagePtr
    Еда - это святое
    Никак. Можно функцию вызывать через setTimeout (он одноразовый в отличие от setInterval) и внутри функции по-новой назначать setTimeout, с той же функцией, но уже другим временем.
    Ответ написан
    Комментировать