Задать вопрос
  • Как сделать интервальное нажатие клавиш на MacOS Sonoma?

    liaFcipE
    @liaFcipE
    Нажималось где? Что-то на веб-странице или что-то из контролов самого браузера?
    Если на веб-странице - просто используй JavaScript, тригернуть клик на нужном DOM-элементе сможет даже человек с лишней (или недостающей) хромосомой:

    // click on button every 30s
    setTimeout(() => {
      document.querySelector("Селектор твоей кнопки").click();
    }, 30 * 1000);


    Этот код можно просто вставить в браузерную консоль, упаковать в браузерное расширение, использовать TamperMonkey для менеджмента скриптов или даже обернуть в скрпт для ноды на основе puppeteer.

    Если что-то их контролов браузера - бери AHK и ему подобные утилиты, которые работаю на MacOS. Там такой же, простецкий скриптовый язык, как JS.
    Ответ написан
    1 комментарий
  • Как правильно хранить данные и создавать новые блоки без перерисовки всего компонента при скролле?

    liaFcipE
    @liaFcipE
    В общем виде, я бы делал как-то так:

    const LIMIT = 10;
    
    const getProducts = async (offset, limit) => { ... }
    
    function App () {
      const [offset, setOffset] = useState(0);
      const [products, setProducts] = useState([])
    
      useEffect(() => {
        getProducts(offset, LIMIT).then(products => setProducts(v => [...v, ...products]))
      }, [offset]);
    
      return <RenderProducts onScroll={() => { // increment offset }} />
    }


    Конечно, ваш бекенд должен уметь отдавать данные по limit & offset.
    И лучше вынести всю работу с данными в стор, тогда не нужен будет уродливый useEffect.

    Что-то вроде (nanostores):

    // store.ts
    const LIMIT = 30;
    
    export const $products = map({
      offset: 0,
      products: [],
      isLoading: true
    })
    
    onMount($products, () => {
      fetchProducts()
    })
    
    const fetchProducts = action($products, "fetchProducts", async store => {
      const { products, offset } = store.get();
    
      // TODO: add error handling
      store.setKey("isLoading", true);
      const newPartOfProducts = await api.getProducts(offset, LIMIT);
      store.setKey("products", [...products, ...newPartOfProducts ]);
      store.setKey("isLoading", false);
    });
    
    const incrementOffset = action($products, "incrementOffset", store => {
      const { offset } = store.get();
      store.setKey("offset", offset + LIMIT);
      fetchProducts()
    })
    
    export const $productsMutations = { incrementOffset }
    
    // App.tsx
    
    function App () {
      const { isLoading, products } = useStore($products)
    
      return (
        <Fragment>
          <RenderProducts onScroll={$productsMutations.incrementOffset} products={products} />
          {isLoading && <LoadingIndicator />}
        </Fragment>
      )
    }
    Ответ написан
    6 комментариев
  • Как составить запросы postman?

    liaFcipE
    @liaFcipE
    Ну и дела, как же вас так учат? Неужели тебе просто дали задание и ранее не показывали как работать с Postman? Там же интерфейс, что справится даже моя бабуля.

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

    Давай откроем инструменты разработчика и зайдем во вкладку сеть, готово?
    Теперь нажмем на кнопку добавления товара и о чудо! В инструментах разрабочтика виден запрос add, его параметры и ответ:

    65064be46c94f492329084.png

    Теперь мы можем создать новый запрос в ранее созданой коллекции и понять следующее:

    - Запрос идет на адрес https://shop.mts.ru/api/v1/cart/add
    Можно сразу вынести https://shop.mts.ru - в переменные окружения (та самая environment), назовем ее base_url, теперь эндроинт запроса для нас - {{ base_url }}/api/v1/cart/add

    Что мы еще увидели в панели разработчика?
    - Тип запроса - POST
    - Тело запроса: {id: "677070"}, где 677070 - идентификатор добавляемого товара, его тоже можно вынести в переменные среды.

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

    Уловил примерно как это работает? Удачи.
    Ответ написан
    3 комментария
  • Почему получается число отличное от калькулятора?

    liaFcipE
    @liaFcipE Автор вопроса
    Спасибо всем, в 4 часа ночи, мне не удалось понять, что при конвертации шестнадцатеричного числа в десятичное я выйду за Number.MAX_SAFE_INTEGER.

    Решил с помощью BigInt, как и намекнул Rsa97

    function hexToSignedInt(hex) {
        hex.length % 2 !== 0 && (hex = "0" + hex);
        
        const hexAsNumber = BigInt("0x" + hex);
        const maximalValue = BigInt(Math.pow(2, hex.length / 2 * 8));
    
        if (hexAsNumber > maximalValue / 2n - 1n) {
           return Number(hexAsNumber - maximalValue)
        }
    
        return Number(hexAsNumber);
    }
    
    const result = hexToSignedInt("FFFFFFFFFFFFCCFF") // -13057n
    console.log(result);
    Ответ написан
    Комментировать
  • Как в VS code Remote SSH установить права доступа для графического интерфейса?

    liaFcipE
    @liaFcipE
    Не надо ему давать root и запускать от него. Дайте папке права юзера\группы, от короторой запускается бекенд вскода.
    Ответ написан
    Комментировать
  • Как собрать проект Node.js?

    liaFcipE
    @liaFcipE
    > на Ангуляре можно набрать ng build и он соберёт пачку файлов
    > не получится "установить зависимости"

    Прочитав комментарии объясню: никак.
    Ты не понимаешь как работает Nodejs, не понимаешь что такое бекенд и фронтенд.

    Твой код, с запуском node.js сервера (createServer из node:http) не может работать собственно без самой ноды.
    Сбор статики тебе не поможет, эта статика исполняется в браузере, на клиенте. В браузере нет Node.JS.
    Тебе же нужно совсем другое окружение и исполнение кода на сервере, самой нодой. И чуточку изучения матчасти.
    Ответ написан
    1 комментарий
  • Как завести видеокарту Sapphire Radeon RX 580 2048sp?

    liaFcipE
    @liaFcipE
    На чем сборка? OpenCore? Clover?

    Надеюсь OC. RX 580 это Polaris 10 and 20 series:
    Highest Supported OS: Current/Ventura (13)
    Initial Supported OS: Sierra (10.12)

    Для работы нужны классические: Lilu.kext, WhateverGreen.kext
    Все это есть в GPU Buyers Guide

    Если юзаешь OC - просто пройдись по гайду от начала до конца и собери новый конфиг, там есть куча нюансов с чипсетом, материнками, BIOS и прочее.

    Обрати внимание на ремарку:

    Regarding Polaris, basically every model of card is supported as long as it’s running either a Polaris or Baffin core. Lower end cards like the RX 550 may run a Lexa core, meaning no support in macOS.

    The only brands you should avoid with the Polaris series would be XFX (460/560 models), PowerColor, HIS and VisionTek as many users have had bootloader and macOS boot issues. Other users have found fixes/workarounds, though nothing consistent. This seems to be caused by having an odd VBIOS that doesn't communicate well with macOS and the only real solution is flashing another VBIOS, which is not ideal for most users.
    Ответ написан
  • Стоит ли переходить с FullHD на 2k?

    liaFcipE
    @liaFcipE
    Смотря какая диагональ, привычки, зрение. Твоя карта нормально выдаст fps в QHD.
    Перекатился с 24" fullhd на 32" QHD, во всем устраивает, тоже 3060 12gb.

    Для разработки прям вообще супер-удобно. Но у меня зрение не очень, поэтому взял большую диагональ.
    Все это довольно субъективно.

    > будет ли dlss в 2к так же делать картинку мыльной
    Мыло есть мыло, больше разрешение - надо больше ресурсов на рендер картинки, возможно где-то не сможешь поставить пресет DLSS в качество, от чего будет еще мыльнее. Это напрямую с монитором и не связано по моему мнению.
    Ответ написан
    Комментировать
  • Как заменить в массиве число нацело делящихся на 3 строкой "пропускам 3 "?

    liaFcipE
    @liaFcipE
    [1,2,3,6,4,12,3,8,15,55,54,4].map(v => v % 3 ? v : "skip 3")
    // (12) [1, 2, 'skip 3', 'skip 3', 4, 'skip 3', 'skip 3', 8, 'skip 3', 55, 'skip 3', 4]
    Ответ написан
    Комментировать
  • Можно ли заменить javascript языком dart/flutter?

    liaFcipE
    @liaFcipE
    Вы написали какую-то ерунду, из которой можно сделать лишь один вывод: вы не знаете JS.
    Изменений в языке, которые ломали бы текущий API - нет (почти), обратная совместимость - основной пункт новых спек языка. Сам язык обновляется, добавляется новый сахар, новые webAPI, etc.

    Но прикладной слой... Мода и подходы довольно часто меняются, но яблоко от яблони... Как правило делают что-то новое, почти с тем же API, конфигурацией, что и у предшественника, только проще, быстрее в работе, сборке или чем-то еще, возможно начинают использоваться какие-то новые, нативные фичи и прочее (это я про всякую сборку, тест-раннеры и др., но лично мне это наоборот нравится, есть свои плюсы)

    > может ли flutter заменить его

    Он точно так же в контекте браузера собирается в JS, как и например TS. Браузер, сейчас, не умеет исполнять ничего, кроме JS. Только, по моему мнению в вебе flutter никому не нужен, слабое комьюнити, а м.б. и Dart вместе с flutter отправится в https://killedbygoogle.com через какое-то время...
    Ответ написан
    1 комментарий
  • Это считается браком для монитора 144гц?

    liaFcipE
    @liaFcipE
    Это вполне нормально для черный - белый цветов, особенно на VA матрице и особенно на бюджетных.
    Это явление называется black level smearing.

    Со временем станет пофиг, привыкнешь.
    Как вариант - сделай фон рабочего стола не черной заливкой))

    Определенный игровой монитор с частотой 144 Гц может иметь указанную скорость отклика пикселя GtG (от серого к серому) 4 мс, однако это всего лишь маркетинговые махинации, поскольку на самом деле это не относится к средней скорости перехода пикселя, а скорее к максимально возможной.

    Таким образом, пиксели могут перейти от 80% серого к 60% серого за 4 миллисекунды, как указано, но , например, им может потребоваться более 30 миллисекунд, чтобы перейти от 0% серого (черного) к 20% серого .

    Мониторы с панелью VA, в частности, имеют очень медленные переходы пикселей от темных к серым или ярким оттенкам (время нарастания), что приводит к большому количеству видимых ореолов (т.е. следов) за быстро движущимися объектами, когда задействовано много темных пикселей. в сцене.

    Это затрагивает большинство мониторов VA, за исключением изогнутых игровых дисплеев Samsung Odyssey G9 , Neo G9 и G7 и KTC M27T20 .


    Ну или можешь попробровать чутка затюнить, но многого оно не даст.
    https://www.displayninja.com/what-is-va-smearing/
    Ответ написан
  • Как лучше создать дерево через Proxy?

    liaFcipE
    @liaFcipE
    const $ = new Proxy(
      {},
      {
        get(_, n) {
          return (children, attrs) => {
            const _ = document.createElement(n);
            [children]
              .flat()
              .forEach(v => v && _.appendChild(typeof v !== "object" ? document.createTextNode(v) : v));
            Object.entries(attrs || {})?.forEach(([k, v]) => _.setAttribute(k, v));
            return _;
          };
        },
      }
    );
    
    const DOM = $.div(
      [
        $.span("first child span"),
        $.span([
          "second child span",
          $.button("button inside second span", { type: "button", id: "nicebutton" }),
        ]),
      ],
      { id: "root" }
    );
    
    console.log(DOM);


    648c6fc8a7407953194956.png
    Ответ написан
    3 комментария
  • Lenovo. Как диагностировать проблему с ноутом?

    liaFcipE
    @liaFcipE
    Какой смысл диагностировать самостоятельно, почти с 100 вероятностью проблемы железа? Даже если в теории сможете - что это даст? Вы умете в компонентный ремонт и имеете весь нужный инструмент + склад с донорскими железками? Как правило, в сервисе диагностика бесплатная.
    Ответ написан
    1 комментарий
  • Как правильно выбрать вторую планку оперативной памяти типа SO-DIMM?

    liaFcipE
    @liaFcipE
    95%, что если ты возьмешь ту же частоту и тот же ранг - все будет ок.
    Частота роляет редко, но случаи бывали, обычно все упирается в ранг.

    Возьми свою плашку: если банки памяти распаяны с двух сторон - двухранговая (2Rx8), если только с одной - одноранговая (1Rx8). Просто бери подходящий ранг.

    ПС: лучше бы написал полную модель ноута.
    ПС2: можно купить сразу две плашки парой, что не сильно дороже, но тоже ранг смотри.
    Ответ написан
    2 комментария
  • Что делать если Microsoft Defender не даёт запустить скрипт Go?

    liaFcipE
    @liaFcipE
    Собери в бинарь, запусти, вылезет уведомление, что дефендер нашел вирус, нажми на уведомление, выбери действие - разрешить на устройстве. Ну или временно выруби реалтайм проверку дефендера, гуглится на изи.
    Ответ написан
    Комментировать