Задать вопрос
  • Что такое мидлвар простыми словами?

    Без middleware, веб-запрос сразу попадает в обработку скажем, методом контроллера.

    По пути можно навставлять разных «примочек», которые на вход получают запрос, и на выход отдают его же, дальше по цепочке. Но могут и как-то изменить его, или отказать в дальнейшей передаче — например, если отсутствуют куки авторизации. Эти примочки по пути — и есть middleware.

    картинка с гитарой

    Тут педаль distortion – middleware, который изменяет сигнал, делая его громче, дольше и хардкорнее.
    61e2a865dffd8532029159.jpeg
    Ответ написан
    Комментировать
  • Как укоротить синстаксис деструктуризации?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    С деструктуризацией неизбежно двойное повторение всех имен свойств — то, чего вы, как я понял, хотите избежать.

    Можно вспомогательной функцией:
    const pickProps = (object, ...keys) => keys.reduce((acc, c) => ({ ...acc, [c]: object[c] }), {});

    использование
    let payload = {
      data: pickProps(
        this,
        'customer',
        'tool_type',
        'tool_brand',
        'tool_model',
        'tool_serial_code',
        'defect_type',
        'defect_description',
        'request_type',
        'request_description',
        'status'
      ),
    }
    Ответ написан
    2 комментария
  • Как зная число, высчитывать от него значение?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Если имелось в виду, что нужна функция, которая проходит через эти точки, то это
    y = 4 - x / 2
    Ответ написан
    Комментировать
  • Как наложить с помощью ffmpeg эффект на определенное время?

    см. Timeline editing. Примеры:
    smartblur = enable='between(t,10,3*60)',
    curves    = enable='gte(t,3)' : preset=cross_process
    Выражения типа between() и gte() описаны в Expression evaluation

    Вывод команды ffmpeg -filters покажет, какие из фильтров подерживают timeline (буква "T").
    Фильтры colorchannelmixer и eq из вашей команды — поддерживают:
    Filters:
      T.. = Timeline support
      .S. = Slice threading
      ..C = Command support
      A = Audio input/output
      V = Video input/output
      N = Dynamic number and/or type of input/output
      | = Source or sink filter
    
     TSC colorchannelmixer V->V       Adjust colors by mixing color channels.
     T.C eq                V->V       Adjust brightness, contrast, gamma, and saturation.
    spoiler
    Нет, готовую команду под вашу задачу не напишу.
    Ответ написан
    1 комментарий
  • Как решить такую задачу?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Решите как-нибудь в лоб, «по-глупому», лишь бы работало.
    function getLargestExpressionResult(a, b) {
      let x, max = a + b;
    
      x = a - b;
      if (x > max) max = x;
    
      x = a * b;
      if (x > max) max = x;
    
      x = a / b;
      if (x > max) max = x;
    
      return max;
    }
    Затем попробуйте оптимизировать, сократить, написать красивее и т.п., если время позволяет.

    const getLargestExpressionResult = (a, b) => '+-*/'
      .split('')
      .map(op => eval([+a, op, +b].join('')))
      .sort((a, b) => a - b)
      .pop();
    Это плохой переусложнённый пример, т.к. тут много строк и eval() — потенциальная дыра в безопасности.
    Не используйте eval() ©
    Ответ написан
    1 комментарий
  • Как сделать такой или похожий эффект в FFMPEG?

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

    Фильтром split разложить вход на, скажем, 20 выходов. Каждый увеличить, обрезая края, фильром crop; размыть boxblur и наложить обычным overlay или лучше blend с режимом "overlay", "softlight" или "bleach" или другим – надо экспериментировать.
    Ответ написан
    2 комментария
  • Как выполнить функцию?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const foo = () => (123321).toString();
    
    foo() // "123321"
    Ответ написан
    4 комментария
  • Для чего используется React?

    React, Vue и пр. хороши использованием теневого DOM: в котором просчитывают весь интерфейс, и в настоящий тормозной DOM вырисовывают только то, что изменилось.

    Таким образом, их здорово использовать, чтобы интерфейс получался быстро реагирующим на действия пользователя.

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Есть готовые модули для работы с точкоразделённой нотацией. Например set-value

    Задача сводится к разбору (адресной) строки на параметры с помощью встроенного URLSearchParams, и построению объекта.
    Ответ написан
    Комментировать
  • Как на maсbook заставить работать мышь также, как на Windows?

    Слева сверху яблоко, System Preferences, Mouse - Scroll & Zoom

    Scroll direction: Natural
    Ответ написан
  • Почему код не работает?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Отсутствие связывания с this у стрелочных функций.

    Решение: использовать аргумент функции — событие.
    Ответ написан
    Комментировать
  • Где можно пообщаться неформально насчет программирования?

    sergiks
    @sergiks Куратор тега Веб-разработка
    ♬♬
    Освоение широкой темы веб-дева и около сродни познанию мира новорождённым; изучению нового языка от азов к уровню, где местные с их диалектом и сленгом примут за своего; открытию карты игрового мира.

    Карту можно прокручивать в сторону, открывая её вширь, или уточнять детали, zoom-in.

    Вряд ли нужен гид, который подскажет, куда стоит крутить в первую очередь, и где остановиться и рассмотреть детали. Это самостоятельный путь Воина. (Оммммм : )

    В реальности, я бы исходил из текущих проектов, а так же варился в контексте статей и вопросов на том же Хабре. Чем шире кастрюля, крупнее аудитория — тем объёмнее охват технологий, о которых там можно узнать прямо или косвенно.

    Узкий по участникам и темам какой-то Tg чат тут проигрывает — он более подвержен недостаткам «инфо пузыря», изолированного от окружающего.

    &tldr; читайте Хабр и крупные англоязычные ресурсы.
    Ответ написан
    Комментировать
  • Как привязать значение переменной к определенному значению свойства объекта?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const data = [{"id":1,"status":"CREATED"},{"id":2,"status":"CANCELED"}];
    
    const RU_CREATED = 'СОЗДАНО';
    const RU_CANCELED = 'ОТМЕНЕНО';
    
    const translate = (data, lang) => data.forEach(item => {
      console.log(`id: ${item.id}, status: ${eval(lang + '_' + item.status)}`);
    });
    
    translate(data, 'RU');
    // id: 1, status: СОЗДАНО
    // id: 2, status: ОТМЕНЕНО
    В проде конечно не стоит использовать eval(), и вместо этого сделать не константы, а «словарь» — объект с ключами как статусы, и значениями их переводами:
    const dict = {
      RU: {
        CREATED: 'СОЗДАНО',
        CANCELED: 'ОТМЕНЕНО',
      },
      DE: {
        CREATED: 'ERSTELLT',
        CANCELED: 'ABGESAGT',
      },
    };
    Ответ написан
    Комментировать
  • Как начать ввод в текстовое поле input при нажатии на любую кнопку на клавиатуре с помощью js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    слушать document на событие "keydown" — при срабатывании помещать фокус на элемент (и опционально вводить туда введенный символ, когда источник события не то же самое текстовое поле)

    Не сработает, если пользователь ещё никак не взаимодействовал со страницей: не кликал, например.
    Ответ написан
    Комментировать
  • Как использовать не целые числа, а числа с точкой, например, 2.29 в FFmpeg?

    Вот описание вариантов указания времени в FFMPEG. В том числе:
    [-][HH:]MM:SS[.m...] — ваш вариант, вполне легитимный.

    Но видео это последовательность отдельных кадров, и, в зависимости от кодека, не ко всем из них можно подрулить — только к «ключевым». Там может быть один ключевой кадр, скажем, на 8. Полной картинкой записывается кадр, а следующие 7 — это только diff'ы, изменения относительно ключевого.

    Как вариант, попробуйте ещё указать то же время в ms:
    -ss 2208ms
    Ответ написан
  • Как удалить элемент массива в localstorage, по нажатию на крестик, и перезаписать массив?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. меньше вложенности
    if (data) { ... длинная простыня кода }, при отсутствии else лучше заменить на:

    if (! data) return;
    ...тот же код, на уровень левее

    2. некруто объявлять функции внутри if() и тем более внутри цикла for()

    3. DRY ("Don't Repeat Yourself" – «не повторяйся»). При обнаружении сохранённых элементов в LS, и при создании новых, происходит одно и то же действие: создание элемента списка, навешнивание событий и пр. В функцию его.

    По сути вопроса опять предложу переосмыслить архитектуру. Без деталей, в общем: есть массив (пустой, или заполненный из localStorage). Свежесозданные задания попадают в массив. Удаляемые — удаляются из массива.
    При изменениях массива — сохранять обновлённый в LS; стирать всё нарисованное ранее, и рисовать весь список с нуля, как будто только загрузили страницу. Ничего, это быстро )
    Ответ написан
    1 комментарий
  • Как при обновлении страницы показывать окно при localStorage?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно ли пофиксить? — можно.
    Сделать эту рабочую задачу за вас? — нет.
    1. Смотрите, что происходит при нажатии на кнопки «есть 18» / «нет 18». Ничего.
    2. Смотрите, когда что-то записывается в localStorage. Сразу.

    Эти два момента неправильны и должны быть взаимосвязаны, чтобы вы получали зарплату )
    Ответ написан
    1 комментарий
  • Как сделать эффект 3D в ffmpeg?

    Фильтр rgbashift сделает не совсем так, но похоже: им можно разнести в стороны красный, синий и зелёный цвета. Но там появятся ещё дополнительные, скажем, ярко-желтые, зелёные зоны. Не совсем как на фото.
    ffmpeg \
      -i head-1920.jpg \
      -vf rgbashift=rh=20:bh=-20 \
      -hide_banner -y \
      test-result.jpg
    Ответ написан
    4 комментария
  • Как найти максимально похожий цвет?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Самое простое — считать сумму квадратов расстояний по каждому из компонентов: R, G и B.

    Для пары 0000DD, 0000C8 «расстояние» будет такое:
    (0x00 - 0x00)^2 + (0x00 - 0x00)^2 + (0xDD - 0xC8)^2 = 441
    Так посчитать до каждого из определённых цветов, найти минимум.

    Можно сравнивать в других цветовых моделях. Например, в HSV (оттенок, насыщенность, яркость) — если посчитаете, что насыщенный красный и тусклый красный точно того же оттенка «ближе», чем той же яркости оранжевый. Речь о возможно разных «весах» каналов в деле определения близости двух цветов.
    Ответ написан
    Комментировать
  • Как подсоединить обработчики к данным которые я вывожу из localstorage?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Ответ на поставленный вопрос «Почему?» — потому, что из LocalStorage вытаскиваете HTML разметку и вставляете её, но слушатели событий к элементам не привязаны. Только при создании новой задачи у вас срабатывает b1.addEventListener('click', () => {

    Стоит разделять данные и их отображение.
    У todo приложения данные – это массив задач. Данные сохраняются в LS. Задача, минимально, это строка текста.
    Текстовое поле, кнопка для удаления — это всё уже мишура, отображение. Генерится динамически из данных.

    Три штуки в этом приложении:
    1. массив с задачами (задача просто строка, что там ввел юзер)
    2. отрисовка интерфейса из массива
    3. изменение массива через действия в интерфейсе
    И работают они по кругу )

    Что-то изменили – изменился массив – отрисовалось с нуля заново всё, как при первой загрузке.
    Так не накосячите со слушателями событий, в том числе.
    Но придётся усложнить данные: не просто строки, ещё и состояние выполнено/не_выполнено.

    К примеру, можно так держать данные:
    const tasks = [
      {text: "Заварить кофе", isDone: false},
      {text: "Пожарить яичницу", isDone: false},
      {text: "продрать глаза", isDone: true},
    ];
    Сохранять в LS сериализованный в JSON этот массив:
    const itemKey = 'tasks';
    localStorage.setItem(itemKey, JSON.stringify(tasks));
    Ответ написан
    Комментировать