Задать вопрос
  • Как происходит деплой без Kubernetes через GitHub CI/CD?

    liaFcipE
    @liaFcipE
    CI/CD фактически можно воспринимать как bash скрипт, который автоматически запускается при заданных событиях, можно делать буквально все то, что бы вы делали руками на сервере или локальной тачке.

    Да, нет никакой проблемы сделать docker build => push и далее, зайдя на сервак перезапустить сервис, будь то docker-compose или что-то еще.

    Можно сделать и без похода на сервер через SSH, если на вашем сервере будет какой-то синхронизатор, который будет время от времени смотреть в docker registry новые версии образов и запускать их, в таком случае в CI вы просто собираете образ и кидаете в registry.
    Ответ написан
    Комментировать
  • Апгрейда разраба с помощью нейросетки, с чего начать в 2025 году?

    liaFcipE
    @liaFcipE
    Пробовал кучу моделей, не сказал бы, что их много (качественных)
    Ничего лучше claude-sonnet как по мне нет, никакие DeepSeek, chat-gpt5-high, gemini, гроки и прочее и рядом не стояли в плане понимания и написания кода как агент.

    Купите ему просто за 20 баксов в месяц про подписку на cursor, пусть просто посидит с claude-sonnet-4.

    Я с помощью нее рефачил и разбирался в таких кучах мусора, что многим и не снилось, главное смотреть что оно тебе генерит и пинки давать, когда выдает всякий булшит.
    Ответ написан
    3 комментария
  • В чем разница между selenium, playwright и puppeteer?

    liaFcipE
    @liaFcipE
    > но сейчас часть сайтов возвращает html без таблиц с ценами, почему?

    Потому, что эра SSG ушла, все пилят модные SPA, все твои таблицы в рантайме рисует дажваскрипт, делая запросы к апи.

    > Для чего нужны selenium, playwright и puppeteer, если я могу через fetch и axios все получить?

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

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

    > Если все же использовать selenium, playwright и puppeteer, что из них лучше на данный момент? Можно ли их с nodejs использовать?

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

    Мне пупеттир нравится, я им пользовался, удобный API.

    > CDP в контексте парсинга

    Это просто базовые возможности тех фреймворков для визуального тестирования, протокол, который позволяет управлять браузером програмно, выполнить какой-то JS в контексте страницы, тригернуть ивенты, хукнуть сетевые запросы, юзкейсов масса.

    > - Что использовать для отправки сообщений в телегу?
    Да хоть курл кидай на вебхук ТГ апи, что удобно, библиотек в npm миллион, отсортируй по звездам или скачкам.
    Ответ написан
    Комментировать
  • Как автоматически откатить в CI/CD миграции при помощи Goose, если их было несколько?

    liaFcipE
    @liaFcipE
    1. Делать фулл снепшот данных, если там не гигабайты, особенно на стейджинге - дешево и просто

    2. Можно перед релизом запоминать результат goose version и где-то сторить, чтобы при откате сделать goose down-to $DB_VERSION_BEFORE_RELEASE

    3. Не сторить, просто делать при откате goose down, откатит на одну версию назад, все зависит от ваших пайплайнов

    4. Поменять движок миграций на более функциональный

    UPD: goose тоже хранит историю миграций, вы открывали доку?
    Ответ написан
    1 комментарий
  • Как одновременно заставить работать корпоративный VPN и "свой" и где взять все домены\подсети заблоченных сайтов?

    liaFcipE
    @liaFcipE Автор вопроса
    Если сперва запустить Amnezia VPN с раздельным тунелированием, а потом - Cisco Any Connect
    То они более не конфликтуют и работают вместе (Windows).
    Ответ написан
    Комментировать
  • Как из строки с путём получить элемент массива?

    liaFcipE
    @liaFcipE
    <?php
    
    $string = "k1/k2/k3";
    $keys = explode('/', $string);
    
    $arr = [];
    
    $current = &$arr;
    foreach ($keys as $key) {
        $current = &$current[$key];
    }
    
    $current = "last nested item";
    var_dump($arr);
    
    /*
    array(1) {
      ["k1"]=>
      array(1) {
        ["k2"]=>
        array(1) {
          ["k3"]=>
          &string(16) "last nested item"
        }
      }
    }
    */


    Как воображение вообще дошло до '[\'' . $v . '\']'?
    Ответ написан
    5 комментариев
  • Почему более 100% загрузка ЦП в Docker на сервере Debian с 1 ГБ оперативной памяти VPS?

    liaFcipE
    @liaFcipE
    > У меня странная вещь с моим VPS
    > 1 ядром \ 1 ГБ ОЗУ
    > WireGuard, Pteradacryc Daemon NODE + Docker. А сам Docker запускает небольшой игровой сервер на 350-450 МБ.

    А что странного то тут?) У вас буквально VPS за сотку, а вы там докер запускаете)
    Вы буквально удивляетесь, почему ваш ВАЗ 2110 не разгоняется за 5 сек до 200 км/час))
    Ответ написан
  • Как очистить HTML от всех аттрибутов?

    liaFcipE
    @liaFcipE
    В любом +\- редакторе есть замена по регуляркам, просто сделать замену навскидку по <\s*([a-zA-Z0-9]+)([^>]*[^\/])> на пустую строку (регулярку не проверял).

    А так, скрипт на лобом языке написать 5 минут, даже без особых навыков, в эру то чатов жпт... Ему можно даже просто скормить HTML и порпросить почистить.
    Ответ написан
  • Обьясните в чём суть инкапсуляции?

    liaFcipE
    @liaFcipE
    В основном это защита от самого себя и своих коллег-обезъян. В первую очередь это контроль доступа, предотвращение кривого изменения состояния объекта и наконец возможность изменять внутреннюю реализацию без изменения внешнего интерфейса.

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

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