Задать вопрос
  • Как установить старый проект на Windows?

    liaFcipE
    @liaFcipE
    > Докер ужасно работает на Windows.
    Нормально все работает. никакой глобально разницы не вижу.
    Просто надо помнить, что если используется WSL2 - хранить файлы проекта надо так же в файловой системе WSL2, иначе будет тормознуто все.
    Ответ написан
    Комментировать
  • Как запустить composer i в контейнере PHP что бы он остался в статусе Up?

    liaFcipE
    @liaFcipE
    Ну потому, что ты запускаешь композер... И все, это весь твой ENTRYPOINT, который отработав отдает код 1. Ты же не запускаешь свой условный php-fpm и правда этому удивляешься?

    > что бы при старте контейнера в нем сразу загружались все перечисленные зависимости из файла composer.json

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

    Можно запустить любой готовый образ композера с командой install, чтобы у тебя приехали все зависимости.
    Можно зайти в шелл запущенного контейнера php и сделать composer i.
    Можно конечно написать рабочий Dockerfile, который делает RUN composer i, а в ENTRYPOINT'е имеет запуск демона php-fpm...
    Ответ написан
    Комментировать
  • Выключается монитор при включении холодильника (на 1-2с), варианты фикса?

    liaFcipE
    @liaFcipE Автор вопроса
    Внезапно исправилось тем, что просто подключил провод по более короткому Display Port (самый обычный нищий провод с коробки от моника).

    Было по 3ех метровому HDMI (покупал кстати отдельно и за дорого по меркам кабеля, он вроде весь в оплетке, толстенный, металлические насадки, DEXP Premium)

    Я буквально проверил так:

    Вырубил холодильник с розетки, воткнул обратно - монитор погас.
    Сменил кабель, сделал тоже самое - монитор не гаснет.
    Ответ написан
  • Существуют ли программы для реверс инженеринга минифицированного кода на JS?

    liaFcipE
    @liaFcipE
    Никак, вообще. Сборщиков и плагинов масса, замотать фарш после сборки JSX => JS обратно... Такая себе затея. В итоге ты никак не получишь нормального кода, который хоть чуточку можно поддерживать.

    Зачем вообще заниматься такой ерундой, если создать реплику почти любого фронтенда куда проще того, что ты хочешь сделать...
    Ответ написан
    4 комментария
  • Возможно ли через PWSH / CMD изменить заголовок запускаемой программы?

    liaFcipE
    @liaFcipE Автор вопроса
    Да, выгрузка user32.dll, но через PWSH, меня устраивает.

    # Helper functions for building the class
    $script:nativeMethods = @();
    function Register-NativeMethod([string]$dll, [string]$methodSignature)
    {
        $script:nativeMethods += [PSCustomObject]@{ Dll = $dll; Signature = $methodSignature; }
    }
    function Add-NativeMethods()
    {
        $nativeMethodsCode = $script:nativeMethods | % { "
            [DllImport(`"$($_.Dll)`")]
            public static extern $($_.Signature);
        " }
    
        Add-Type @"
            using System;
            using System.Runtime.InteropServices;
            public static class NativeMethods {
                $nativeMethodsCode
            }
    "@
    }
    
    Register-NativeMethod "user32.dll" "bool SetWindowText(IntPtr hWnd, string lpString)"
    Add-NativeMethods
    
    $myprocess = start-process Notepad -Passthru
    
    # If you change the title immediately nothing will happen because the process isn't done loading.
    sleep 1
    
    [NativeMethods]::SetWindowText($myprocess.MainWindowHandle, "something")


    соус
    Ответ написан
    Комментировать
  • Удобно ли использование windows приложений в macos?

    liaFcipE
    @liaFcipE
    Не имеет смысла, у меня есть и мак и айфон и даже айпад, ниразу ничего ни с чем не интегрировал, лишь разок подключал айфон как еще одну камеру, 1 раз за все время, на час.

    Parallels работает неплохо, но это не для простых юзеров, удобно не будет.
    Не мучайте родителей, проще для них и вас будет так же - Windows.

    Брать MacBook не на M процессорах смысла - 0, возьмите любой нормальный ноут на винде, тем более, что щас выбор огромный и цены нормальные.

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

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

    Лок файла у тебя вообще нет в репе, и ты его не случайно удалил, у тебя последний комит 8 месяцев назад, а сам лок файл вообще в гитигноре.

    Step-by-step гайд тут не сделать, сидеть и разбираться точечно.

    Тут лишь два совета могу дать:

    1. Всем проектам в package.json можно указать версию node & npm.
    2. Хранить лок файл, как вообще его можно не хранить, зачем вы его в игнор кинули?

    //

    В твоем проекте node-sass, в систему как минимум надо ставить Python2, хз как такое можно было сделать даже в 2020 году, делалось по очень пожилому гайду, проще все переделать нормально, да и быстрее скорее всего.

    Хотел глянуть что там, но ставить питон желания нет. Используй в будущем нормальный sass сборщик, на жаваскрипте, а не тот, что в бинарь собирается.
    Ответ написан
    1 комментарий
  • Не пойму работу Object.assign() для documentElement?

    liaFcipE
    @liaFcipE
    > не понимаю, почему не работает 2й.

    document.querySelector('.layers__container').style.transform = `rotateX(${moveY})`
    document.querySelector('.layers__container').style.transform = `rotateY(${moveX})`


    Потому, что ты перетираешь значение style.transform двумя разными значениями, второе заменяет первое.

    > метод Object.assign инлайново прописал для documentElement АТРИБУТ style.
    Не совсем, он буквально сделал:

    document.documentElement.style.prop1 = "value1";
    document.documentElement.style.prop2 = "value2";

    Сам он ничего не прописывал, это уже логика работы DOM ноды и ее API.
    Просто прочти документацию к Object.assign, лучше в отрыве от DOM API, ибо у DOM API и его объектов есть свои магические методы, геттеры, сеттеры и прочее:

    65a456eb32d63620125871.png

    > console.log(Object.entries(document.documentElement)) то выведутся все пары ключ+значение

    У "простых" объектов - да, но все сложнее. Если посмотреть MDN описание для Object.entries, то можно увидеть, что он отдает только перечисляемые свойства: An array of strings representing the given object's own enumerable string-keyed property keys.
    Ответ написан
    1 комментарий
  • Почему неправильно перемешиваются элементы в массиве?

    liaFcipE
    @liaFcipE
    1. Где декларация функции shuffle?
    2. Чего вы ожидали от вызова shuffle(questionsDat);?

    Даже если допустить, что функция у вас где-то есть, то что этот вызов должен сделать? В теории функция shuffle может напрямую изменить входящий массив, но обычно так никто не делает, обычно все идут по пути иммутабельности. Т.е. вам нужно использовать то, что возвращает shuffle.

    Если хотите мутировать исходный массив, можно взять Array.sort и Math.random.

    questionsDat.sort(() => .5 - Math.random())
    Ответ написан
  • Axios vs Fetch NodeJS - CPU and Memory usage сравнение?

    liaFcipE
    @liaFcipE
    Зачем вы сравниваете эффективность таких вещей? Там же разница будет на уровне погрешности (по моему мнению).

    Я на нашел сходу инфы о том, что нативный fetch основан на node:http, мне казалось это отдельный WebAPI, со своей спецификацией.

    Просто выберите то, что удобнее и проще. Fetch прост, с минимум фич, в то время как Axios - полноценный фреймворк, который что только не умеет.

    В крайнем случае - напишите бенчмарк, дело 5ти минут, но сомневаюсь, что там будет что-то интересное.
    Ответ написан
    Комментировать
  • Как сконфигурировать бэк и фронт через api?

    liaFcipE
    @liaFcipE
    Причем тут VDS, зачем вам вообще нода? Чистый Vue это больше о SPA. Вы о SPA или SSR/G?

    Если вы хотите классический SPA, то вам (не) нужна нода, она нужна для сборки и локальной разработки, но на выходе у вас статика (html, js, css и еще какой-то набор ассетов аля картинки, шрифты и так далее).

    Что там делает API и как он живет - фронту не важно и его не касается, ему не важно какой там стек, фронту важно одно - адрес, где бекенд живет и чтобы бекенд отдавал ответы на запросы в нужном фронту формате.

    Поэтому что вам конфигурировать? Что вы хотите?
    Ну в общих чертах вам нужен:

    nginx, который:
    - Отдает статику на 80/443 с вашим index.html и набором ассетов.
    - Дает доступ к API проксипасом на условный путь /api юзая php-fpm линком с другого контейнера.

    Как вы это упакуете на уровне докера - хз, делайте как удобно. Только понимайте, что фронт для локальной разработки нужно запускать в dev режиме, через nodejs, (HMR там и все такое) а для пре\прода - собирать в статику.

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

    Да и как вы хотите хранить проекты? Монореп или все таки разные репы? Если разные - можете вообще сделать для каждого проекта сборку в docker имаджы и сторить их где-то в Gitlab Registry или аналогах с независимым деплоем фронта и бека. кароче вариантов масса. Выбирайте по возможностям и средствам. Возможно вам проще нанять прошаренного девопса.
    Ответ написан
    Комментировать
  • Как сделать интервальное нажатие клавиш на 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 в качество, от чего будет еще мыльнее. Это напрямую с монитором и не связано по моему мнению.
    Ответ написан
    Комментировать