Задать вопрос
  • Как автоматически отправить первое сообщение ВКонтакте при переходе пользователя по с ссылке с сайта без использования сторонних сервисов?

    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, с той же функцией, но уже другим временем.
    Ответ написан
    Комментировать
  • Как работает этот кусок кода на js?

    0xD34F
    @0xD34F
    Но что возвращает return this.on(...); ? Если ничего, то в чем суть?

    А вы откройте код метода on, и посмотрите. Я бы предположил, что он возвращает this - чтобы сделать возможным method chaining.

    UPD. Ну да, так и есть. Нашёл код модуля, о котором вы говорите - VideoStream наследуется от EventEmitter'а, в документации к которому насчёт метода on прямым текстом сказано, что

    Returns a reference to the EventEmitter, so that calls can be chained
    Ответ написан
    1 комментарий
  • Где почитать о шаблонах проектирования javascript?

    @AlexKindGeek
    Мне понравилась эта
    Ответ написан
    Комментировать
  • Как создать массив из объекта?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const arr = Object.entries(obj).map(([ k, v ]) => ({ id: +k, name: v.nameEn }));
    Ответ написан
    Комментировать
  • Как самому оценить достиг ли ты junior web development?

    rockon404
    @rockon404
    Frontend Developer
    Пройдите техническое интервью в любую нормальную компанию на позицию junior web developer и узнайте.
    Подобные интервью хорошо выявляют слабые места и пробелы в знаниях, если они есть.
    Ответ написан
    Комментировать
  • Что такое производная?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Изучил много литературы на эту тему, попытался разобраться досконально с этой производной, знаю определения формулы, понимаю геометрический и физический смысл производной.

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

    Не могли бы вы объяснить это простыми словами

    Давай с элементарного геометрического смысла и начнём: пусть у тебя есть график дифференцируемой функции y=f(x), это такая непрерывная линия. А ты -- очень маленький и стоишь на этой линии. y показывает на север, x -- на восток, а линия, например, уходит на северо-восток. Ты настолько маленький, что тебе кажется, что линия вблизи тебя -- прямая. Производная f'(x) говорит тебе, насколько линия наклонена к направлению на восток в точке x. Т.е. если f'(x) = 2 в точке x где ты стоишь, то если ты пройдёшь 1 шаг на восток, нужно будет пройти 2 шага на север, чтобы вернуться на линию.

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