Задать вопрос
  • Как дать WSL2 больше процессора?

    1. Ты можешь при помощи команды wsl залезть непосредственно в тот WSL-образ, который используется докером.
    Там в /etc есть ещё один wsl.conf, в котором параметры из .wslconfig могут переопределяться.

    2. После изменения настроек нужно остановить WLS при помощи команды wsl --shutdown и подождать какое-то время.

    3. Если у тебя Pro-версия винды, то ты можешь через Hyper-V посмотреть, какие реально настройки по ресурсам выделены на виртуалку с WSL2
    Ответ написан
    Комментировать
  • Можно ли отключить LED-индикатор веб-камеры ноутбука?

    Зависит от конкретного ноутбука.
    Где-то этой лампочкой можно управлять программно (например она управляется чипом в камере), а где-то она включена в электрическую цепочку так, что если лампочка не горит - камера тоже не работает.

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

    Мне кажется, такой вариант вам может подойти:
    function generateJsonPatch(obj1, obj2) {
      const patch = [];
    
      // Рекурсивно обходим все свойства первого объекта
      for (const prop in obj1) {
        if (obj1.hasOwnProperty(prop)) {
          // Если свойство отсутствует во втором объекте, удаляем его
          if (!obj2.hasOwnProperty(prop)) {
            patch.push({op: "remove", path: `/${prop}`, oldVal: obj1[prop]});
          } else {
            // Если свойство является объектом или массивом, рекурсивно обходим его
            if (typeof obj1[prop] === "object") {
              patch.push(...generateJsonPatch(obj1[prop], obj2[prop]).map(p => {
                p.path = `/${prop}${p.path}`;
                return p;
              }));
            } else {
              // Если значение свойства отличается от значения во втором объекте, обновляем его
              if (obj1[prop] !== obj2[prop]) {
                patch.push({op: "replace", path: `/${prop}`, value: obj2[prop], oldVal: obj1[prop]});
              }
            }
          }
        }
      }
    
      // Обходим свойства второго объекта, которых нет в первом объекте
      for (const prop in obj2) {
        if (obj2.hasOwnProperty(prop) && !obj1.hasOwnProperty(prop)) {
          // Добавляем новое свойство
          patch.push({op: "add", path: `/${prop}`, value: obj2[prop], oldVal: undefined});
        }
      }
    
      return patch;
    }

    Вот что он выдаёт в вашем случае:
    [ { op: 'replace', path: '/colorQty', value: 1, oldVal: 0 } ]


    Код генерировал не я. Я попросил ChatGPT:
    prompt и оригинальный ответ



    Напиши функцию на javascript, которая принимает в себя два js-объекта или массива, на выходе я должен получить jsonpatch, который можно применить к первому объекту, чтобы получился объект идентичный второму

    ... вариант без oldValue ...

    добавь ещё в каждую операцию jsonpatch и старое значение, чтобы при чтении было понятно, что на что заменяется

    Вот обновлённый код функции generateJsonPatch с добавлением старого значения в каждую операцию jsonpatch:

    function generateJsonPatch(obj1, obj2) {
      const patch = [];
    
      // Рекурсивно обходим все свойства первого объекта
      for (const prop in obj1) {
        if (obj1.hasOwnProperty(prop)) {
          // Если свойство отсутствует во втором объекте, удаляем его
          if (!obj2.hasOwnProperty(prop)) {
            patch.push({op: "remove", path: `/${prop}`, oldVal: obj1[prop]});
          } else {
            // Если свойство является объектом или массивом, рекурсивно обходим его
            if (typeof obj1[prop] === "object") {
              patch.push(...generateJsonPatch(obj1[prop], obj2[prop]).map(p => {
                p.path = `/${prop}${p.path}`;
                return p;
              }));
            } else {
              // Если значение свойства отличается от значения во втором объекте, обновляем его
              if (obj1[prop] !== obj2[prop]) {
                patch.push({op: "replace", path: `/${prop}`, value: obj2[prop], oldVal: obj1[prop]});
              }
            }
          }
        }
      }
    
      // Обходим свойства второго объекта, которых нет в первом объекте
      for (const prop in obj2) {
        if (obj2.hasOwnProperty(prop) && !obj1.hasOwnProperty(prop)) {
          // Добавляем новое свойство
          patch.push({op: "add", path: `/${prop}`, value: obj2[prop], oldVal: undefined});
        }
      }
    
      return patch;
    }


    Каждая операция jsonpatch теперь содержит поле `oldVal`, которое хранит старое значение свойства, которое было изменено. Если свойство было удалено или добавлено, то `oldVal` будет иметь значение `undefined`.

    Пример использования:

    const obj1 = {a: {b: "hello"}, c: [1, 2, 3]};
    const obj2 = {a: {b: "world", d: "foo"}, c: [1, 2, 4, 5], e: "bar"};
    
    const patch = generateJsonPatch(obj1, obj2);
    
    console.log(patch);
    // Output:
    // [
    //   {"op":"replace","path":"/a/b","value":"world","oldVal":"hello"},
    //   {"op":"add","path":"/a/d","value":"foo","oldVal":undefined},
    //   {"op":"remove","path":"/c/2","oldVal":3},
    //   {"op":"add","path":"/c/3","value":5,"oldVal":undefined},
    //   {"op":"add","path":"/e","value":"bar","oldVal":undefined}
    // ]


    Обратите внимание, что поле oldVal в jsonpatch содержит информацию только о тех свойствах, которые были изменены или удалены. Если свойство не было изменено, то его oldVal будет иметь значение undefined.



    PS: сам удивился, на сколько он хорош в подобных задачах. Можно было бы написать и самому, точно также рекурсивно обойдя объекты, но эта шняга сэкономила достаточно много времени.
    Ответ написан
    3 комментария
  • Luajit и его портабельность?

    Все официально поддерживаемые платформы перечислены на официальном сайте проекта:
    https://luajit.org/install.html
    x86, x64, arm, arm64, ppc32, ppc/e500, mips32, mips64, risc-v (планируется)

    DynASM - это часть проекта luajit и вроде нет каких-то платформ, где он официально работает, но не работает luajit.
    Видел только всякие давно заброшенные эксперименты.
    Ответ написан
    Комментировать
  • Как сделать систему очков в телеграмм боте?

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

    Не особо понимаю, так как в моей схеме 2 маршрутизатора и один имеет выход в интернет, нужен ли другому тоже? Будет ли он работать без него?

    Ну у тебя на схеме компьютер тоже напрямую в интернет не воткнут.
    Почему у тебя не возник такой вопрос по поводу роутера, но не возник по поводу компьютера?
    И зачем тебе два свича на схеме?

    Домашний "Беспроводной роутер" - это несколько устройств в одном:
    1. Роутер
    2. Коммутатор
    3. Точка доступа

    Если твой роутер должен работать чисто как точка доступа и не создавать ещё одну сеть внутри себя - настрой его как точку доступа и подключи к свичу, как на твоей схеме.

    Если беспроводной роутер должен создать новую подсеть - настраивай его как обычно.

    Кабель от свича втыкай в WAN-порт в обоих случаях (как правило)

    В любой непонятной ситуации - читай мануалы. Если мануал противоречит ответу - верь мануалу.
    Перед тем как идти настраивать - проверь мануал.
    Ответ написан
  • Берут ли на работу в IT с психическим расстройством?

    1. Просто при найме на работу не болтай о своих диагнозах - это создаст лишнее предвзятое отношение, которое тебе точно не нужно.
    Благо при найме на работу справку от врача предъявлять не нужно ;)

    "ПРЛ" и "ОКР" для не-психиатра - это непонятные слова и это ожидаемо, что люди тут ориентируются на стереотипы.

    2. Если умственной работе это не мешает, приступы в середине рабочего дня у тебя не происходят, конфликтов с коллегами на этой почве у тебя не (можешь себя контролировать, помогает медикаментозная/поведенческая терапия или просто очень слабо проявляется), то всё будет ок.
    Если вас что-то беспокоит - лучше проконсультируйтесь со специалистом, а не с родственниками/знакомыми.

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

    можно что-то типа такого:
    SELECT d.id, name, p.type, pp.price_b, pp.price_c, pp.price_d FROM device d
    INNER JOIN (SELECT device_id, MAX(type) as "type" FROM price GROUP BY device_id) p ON p.device_id = d.id
    INNER JOIN price pp ON pp.type = p.type AND pp.device_id = d.id

    Но он не выдаёт товары без цены. Можно попробовать сделать LEFT JOIN, чтобы выводило товары без цены.

    Версия от ChatGPT

    Выглядит страшно, но работает
    SELECT d.id, 
        CASE 
            WHEN p3.type IS NOT NULL THEN p3.type 
            WHEN p2.type IS NOT NULL THEN p2.type 
            WHEN p1.type IS NOT NULL THEN p1.type 
        END AS type, 
        CASE 
            WHEN p3.type IS NOT NULL THEN p3.price_b 
            WHEN p2.type IS NOT NULL THEN p2.price_b 
            WHEN p1.type IS NOT NULL THEN p1.price_b 
        END AS price_b, 
        CASE 
            WHEN p3.type IS NOT NULL THEN p3.price_c 
            WHEN p2.type IS NOT NULL THEN p2.price_c 
            WHEN p1.type IS NOT NULL THEN p1.price_c 
        END AS price_c, 
        CASE 
            WHEN p3.type IS NOT NULL THEN p3.price_d 
            WHEN p2.type IS NOT NULL THEN p2.price_d 
            WHEN p1.type IS NOT NULL THEN p1.price_d 
        END AS price_d 
    FROM device d 
    LEFT JOIN (SELECT device_id, type, price_b, price_c, price_d 
               FROM price WHERE type = 3) p3 ON d.id = p3.device_id 
    LEFT JOIN (SELECT device_id, type, price_b, price_c, price_d 
               FROM price WHERE type = 2) p2 ON d.id = p2.device_id 
    LEFT JOIN (SELECT device_id, type, price_b, price_c, price_d 
               FROM price WHERE type = 1) p1 ON d.id = p1.device_id

    Ответ написан
  • Как бесплатно разместить бота?

    В Яндекс облаке есть free tier для serverless containers - просто упаковываешь своего бота в docker-котейнер. Не помню сколько там CPU минут бесплатно даётся, но для чего-то мелкого должно хватить.

    Ещё где-то порядка 50 копеек в месяц нужно будет выложить за container registry (по началу)
    Ответ написан
    Комментировать
  • Как перевести значение "1 день" в секунды? А еще как перевести значение "1 день" например в 19.05.2023 1:42?

    Простейшая арифметика из третьего класса школы + немного гуглежа по поводу работы со временем в js.
    function getTimerEndFromNow(prompt) {
     return getTimerEndFrom(new Date(), prompt);
    }
    
    function getTimerEndFrom(start, prompt) {
      return new Date(start.valueOf() + getSecondsByPrompt(prompt) * 1000);
    }
    
    function getSecondsByPrompt(prompt) {
      const [count, measure] = prompt.split(' ');
      return count * getSecondsByMeasure(measure);
    }
    
    function getSecondsByMeasure(measure) {
      switch(measure.toLowerCase()) {
        case 'день': return 60 * 60 * 24;
        case 'час': return 60 * 60;
        case 'минута': return 60;
        default: throw new Error(`Unknown measure ${measure}`);
      }
    }


    С ЭТИМ БЛИН ДАЖЕ БЕСПЛАТНЫЙ БОТ НА ОСНОВЕ GPT СПРАВЛЯЕТСЯ

    Запрос:

    /gpt
    Мне нужно перевести значение "1 день"/"1 час"/"1 минута" в секунды для таймера. А точнее функция, но я вообще не знаю как это сделать. И еще одну функцию для того что бы например таймер получил сегодня а пишется во сколько он закончится, точнее например в 19.05.2023 1:42

    Напиши функции на js

    Ответ:

    Для перевода "1 день"/"1 час"/"1 минута" в секунды можно использовать следующую функцию:

    function convertToSeconds(time) {
      const timeArr = time.split(' ');
      const value = parseInt(timeArr[0]);
      const unit = timeArr[1];
    
      switch (unit) {
        case 'день':
          return value * 24 * 60 * 60;
        case 'час':
          return value * 60 * 60;
        case 'минута':
          return value * 60;
        default:
          return 0;
      }
    }


    Пример использования:

    const secondsInDay = convertToSeconds('1 день'); // 86400
    const secondsInHour = convertToSeconds('1 час'); // 3600
    const secondsInMinute = convertToSeconds('1 минута'); // 60


    Для форматирования даты в строку можно использовать объект `Date` и методы `getFullYear()`, `getMonth()`, `getDate()`, `getHours()`, `getMinutes()`, `getSeconds()`:

    function formatDate(date) {
      const year = date.getFullYear();
      const month = addLeadingZero(date.getMonth() + 1);
      const day = addLeadingZero(date.getDate());
      const hours = addLeadingZero(date.getHours());
      const minutes = addLeadingZero(date.getMinutes());
      const seconds = addLeadingZero(date.getSeconds());
    
      return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`;
    }
    
    function addLeadingZero(value) {
      return value < 10 ? '0' + value : value;
    }


    Пример использования:

    const endDate = new Date(2023, 4, 19, 1, 42, 0);
    const formattedDate = formatDate(endDate); // '19.05.2023 01:42:00'


    Ответ написан
    7 комментариев
  • Как перевести деньги с иностранной карты на российскую?

    Можно на банковский счёт.
    Вроде с грузии в тинькофф должно нормально переводить денежки (спроси в поддержке на всякий случай, особенно по поводу комиссий).

    Ещё можно через p2p обменники.
    Сначала покупаешь монеты за деньги с payoneer или bank of georgia, а потом покупаешь рубли на тинькофф за эти моненты.
    Ответ написан
  • Что происходит с Xbox Series X?

    Диск медленный видимо.
    Например он может замедлиться из-за того что почти заполнен на полную.
    Емнип, из коробки в xsx SSD стоит не самый быстрый - можно попробовать заменить.
    Ответ написан
    Комментировать
  • Как скрестить SSO и ASP.NET Core Identity?

    Это реализуется через свой Authentication Provider:
    https://learn.microsoft.com/en-us/aspnet/core/secu...

    Авторизацию выбирай на свой вкус - её настройка никак не зависит от способа аутентификации:
    https://learn.microsoft.com/en-us/aspnet/core/secu...
    Ответ написан
    4 комментария
  • HP NVIDIA GeForce RTX 2060 Super редкая модель?

    Она поставляется только в комплекте с предсобранными компьютерами от HP.
    Не редкая - её просто редко продают отдельно от компьютера (только в случае апгрейда).
    Ничего особенно ценного в ней нет, а закрытое объявление на 70к - это, вероятно, ещё со времён дефицита.
    А ещё я только что нашёл объявление о продаже за 10к.
    Ответ написан
    Комментировать
  • Уход во время испытательного срока, нормально ли это?

    Да, это нормально.

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

    Если это вопрос только денег - имея оффер на руках можно попробовать попросить больше денег.
    Ответ написан
    Комментировать
  • Как запустить python скрипт/exe файл через arduino?

    Варианта два:
    1. Сложный и в теории правильный - по сути написать свой драйвер (а может и не драйвер), который будет постоянно в фоне сидеть и отслеживать, какие устройства подключаются, и при подключении твоей ардуины - запустит нужный код.

    2. Простой, но костыльный и пахнущий зловредами - BadUSB

    Зависит от твоей задачи.
    Ответ написан
    Комментировать
  • Два IP на одном домене. Как настроить переадресацию?

    Это разруливается не через DNS, а через балансировщик.
    У тебя будет, получается, три узла: Основной, Резервный, и Балансер.
    В DNS ты прописываешь балансер (через A/AAA или CNAME - не важно).
    Все запросы от клиентов идут на Балансер и он их пересылает на основной.
    В случае сбоя, Балансер каким-то образом выясняет состояние основного узла (может прямо запрашивать периодически какой-нибудь GET /health или смотреть на ответы, которые он даёт клиентам), и перераспределяет запросы на Резервный в случае, когда был выявлен сбой, и наоборот - в случае сбоя Резервного можно попробовать перенаправить запросы снова на Основной (тут уже как настроишь).

    Попытаться обойтись без балансера можно, но тогда ты столкнёшся с той ситуацией, с которой ты столкнулся:

    При коннекте к www.site1.ru провайдеры через раз подключаются к правильному айпи, то к основному, то к резервному.
    Соответственно где то на сайт заходит, где то нет так как конектится ко 2 айпи который в текущий момент сервер не использует.

    И уйти от этого не получиться, тк это не баг, а фича - DNS сервер провайдера будет кэшировть информацию о записях в твоём домене, чтобы не нагружать твой сервер лишними запросами и быстрее отдавать ответ своим абонентам, при этом при кэшировании может учитываться тот TTL, который ты сам указал.
    + Кэширование может, и скорее всего будет в том числе и на стороне конечного клиента.

    Придирки к терминологии

    Не существует "DNS регистраторов". Есть просто регистраторы, которые говорят что домен принадлежит тебе и позволяют назначить dns-сервера, которые будут этот домен обслуживать.
    И есть отдельно dns-хостинги, где ты можешь прописать различие записи в рамках домена.
    Ответ написан
    5 комментариев
  • НЕ ВЫДАЕТ 144 ГЕРЦ?

    Либо кабель некачественный, либо материнская плата/процессор не поддерживают 144гц в выбранном тобой разрешении
    Ответ написан
    Комментировать
  • Что использовать для хранения файлов, картинок?

    За банку пива можно хранить файлы в S3 - это удобно и хорошо масштабируется.
    Все облачные провайдеры предлагают подобную услугу.

    Если у тебя там счёт не на терабайты идёт и сервис не очень нагруженный - выйдет очень дёшево:
    (Яндекс в качестве примера)
    https://cloud.yandex.ru/docs/storage/pricing
    + Тебя может заинтересовать CDN, который достаточно хорошо с S3 интегрируется

    В базу данных сохраняй только идентификатор, по которому потом сможешь найти файл в хранилище.

    А бесплатным бывает только сыр в мышеловке
    Ответ написан
    2 комментария
  • Как запустить программу Siemens NX?

    Процессор устарел - обновляйся.
    Видимо Siemens NX нужны AVX-инструкции, которых нет в твоём атлоне.
    "Пропатчить" невозможно.

    Ну и встречный вопрос - зачем тебе Siemens NX?
    Ответ написан
    9 комментариев