• Как стать Middle и т.д в Gamedev Unity?

    neuotq
    @neuotq
    Прокрастинация
    Изучил библиотеки научился программировать - джун
    Научился работать в команде, ответственность, исполнительность, поработал за деньги программистом - миддл
    Берешь на себя ответсвенность, самостоятельно решаешь и закрываешь задачи, и тп и тд - сеньёр помидор.
    Так что, чтобы стать миддлом вам нужен коммерческий опыт разработки, желательно закрыть пару проектов/сложных вех/фич в команде.
    Ответ написан
  • Почему при подключении k4 телевизора LG OLED42C4RLA к Mini-PC Intel i7-1165G7 с iGPU Intel Iris Xe Graphics (96EU) по HDMI2.0 частота только 30Hz?

    neuotq
    @neuotq
    Прокрастинация
    По HDMI 2 - не выйдет 60 Гц на 4к телевизоре, формально пропускной способности хватает, но эффективная не дотягивает.
    Вот таблица с примерами расчётов: https://www.intel.com/content/www/us/en/support/ar...
    Вам нужно попробовать найти хороший адаптер/кабель DP -> HDMI 2.1, с поддержкой высокоскоростного соединения. Конкретную модель не подскажу, отмечу только что в продаже очень много дешевых который как раз так и тянут только 4k@30Hz. Поэтому при покупке адаптера отдельно именно на этот момент обратите внимание.
    Ответ написан
    3 комментария
  • Как предотвратить работу onBlur?

    neuotq
    @neuotq
    Прокрастинация
    Функция конечно перегружена, я бы её немного декомпозировал(но ладно, отдельная проблема).
    Как минимум я вижу что не убираются слушатели событий, то точно нужны(перед добавлением)
    те, возможно баг как раз в этом:
    inputElement.removeEventListener("keydown", ...);
     inputElement.removeEventListener("blur", ...);

    И там лучше передать созданные функции типа handleKeydown/handleBlur

    И еще нормально выделить гарды на проверку данных, те что
    if (query.length < 3) {
        return;
      }
    и другие
    например с инпутом сразу:
    if (!inputElement) return;
    Короче пройтись, чтобы легче читалось и понимать что происходит.
    Точнее сказать сразу сложно, без живой отладки. Если выгрузите где-то, будет понятнее.
    Ответ написан
  • Cypress "syntax error, unrecognized expression". Что за ошибка и как решить?

    neuotq
    @neuotq
    Прокрастинация
    cy.get - уже обертка над функцией с селектором к DOM дереву, поэтому параметром туда нужно ваш селектор.
    cy.get('.content .container-fluid .d-flex .cursor-pointer')
    Ответ написан
    Комментировать
  • Как обойти DOM дерево с поиском нужно класса на JS?

    neuotq
    @neuotq
    Прокрастинация
    Алгоритм:
    0. В любом случае есть родительский контейнер, поэтому работаешь от него. Лучше чтобы у него был id, тогда при работе функции отслеживания ты сможешь её запускать с нужным айди, она будет универсально и поддерживать множество независимых подобных контейнеров с этим меню.
    1. По клику ищешь текущий isActive (с учетом специфичности родительского контейнера) и снимаешь все активные.
    2. Делаешь кликнутый активным.

    Условный пример. Не продашн рэди) Но смысл ясен.

    Ответ написан
    Комментировать
  • Причины проблем Hydration Nuxt3?

    neuotq
    @neuotq
    Прокрастинация
    Простой и скорее всего верный вариант отключить SSR для защищенных роутов в настройках
    https://nuxt.com/docs/guide/concepts/rendering#hyb...
    Ответ написан
  • Habr.com где посмотреть авторов?

    neuotq
    @neuotq
    Прокрастинация
    Попробуйте в гугл запрос вроде habr.com/ru/ "users/" site:habr.com или поиграйтесь с api.
    Там и там есть свои и общие минусы конечно. Но при желании достичь цели можно.
    Ответ написан
  • Возможно ли получить тип пропсов у child?

    neuotq
    @neuotq
    Прокрастинация
    Немного не ясно что вы хотите, вот это получать?
    type ReturnElementProps<T> = T extends React.ReactElement<infer P> ? P : never;
    
    type FormItemProps<
      C extends React.ReactElement,
      P extends ReturnElementProps<C>
    > = {
      getValueFromEvent: (...args: Parameters<P["onChange"]>) => void;
      children: C;
    };
    
    const FormItem = <
      C extends React.ReactElement,
      P extends ReturnElementProps<C>
    >(
      props: FormItemProps<C, P>
    ) => {
      // из пропсов вашего компонента берём дочерний элемент
      const { children } = props;
      // из пропсов дочернего берем onChange
      const { onChange } = children.props;
      //тест
      console.log("Child onChange cb", onChange.toString());
      return children;
    };
    
    export default function App() {
      return (
        <div className="App">      
          <FormItem getValueFromEvent={(event) => event}>
            <input onChange={(e) => console.log("Children e", e.target.value)} />
          </FormItem>
        </div>
      );
    }
    Ответ написан
    4 комментария
  • Laravel + Inertia. Как настроить формат JSON?

    neuotq
    @neuotq
    Прокрастинация
    Inertia конечно же не избавляет от процесса рендера на клиенте, эта библиотека убирает не нужную(там где она не нужна) возню и прослойку в виде api, позволяя строить номодный фронтенд в прямой связи с классическим бекендом. Если вам нужен серверный рендер, то такая опция есть, но нужно будет ставить и настраивать SSR и node на сервере. После этого частично рендер будет происходить на сервере(по аналогии как это в фреймвораках типа Nuxt/Next).
    Либо же взглянуть на совсем иной подход в виде Livewire, где мы получаем ту же "реактивность" и прочее, но обмен данными уже идет в виде блоков html. Что кстати более логично если мы строим приложение вокруг веба, без разделения на API/бэкенд - фронтенд. Как бы апгрейд классического подхода, зачастую имееющий МНОГО плюсов, если не собираетесь строить сильный API, кучу разных приложений для него и тп. А всё будет вокруг веба.
    Ответ написан
    Комментировать
  • Как убрать лишний "мусор" при всталвке из word в CKeditor 5?

    neuotq
    @neuotq
    Прокрастинация
    Для этого используйте фичу по вставке из офиса.
    https://ckeditor.com/docs/ckeditor5/latest/feature...

    Добавить в плагины:
    //****
     // CKEditor
        ClassicEditor.create($('#data')[0], {
            htmlSupport: { allow: htmlSupport },
            removePlugins: [ 'Link', 'SourceEditing' ],
            plugins: [ PasteFromOffice],
            fontSize: { options: [ 8, 10, 12, 14, 18, 20, 24, 28, 36 ] },
        })
        .then(editor => {
            CKEditor = { field: 'data', data : editor };
        })
        .catch(error => {
            console.error(error);
        });
    Ответ написан
    Комментировать
  • Как исправить Ошибки при ajax запросов в vk api?

    neuotq
    @neuotq
    Прокрастинация
    dataType: 'JSONP' - почему JSONP? Удалить или заменить на json. Так же там может вылетать ответ с лимитом обращений к api.
    Ответ написан
  • Как определить грань межу использованием nuxt и использованием привычных решений вроде express для backend-части?

    neuotq
    @neuotq
    Прокрастинация
    Изначально nuxtjs(и его вдохновитель nextjs) - фреймворки, которые представляют собой готовый рецепт и набор правил для построения приложений на библиотеке Vue.js или React. Хотя можно обойтись без них и строить приложения как душе угодно, но удобнее иметь набор правил в сообществе и в команде. В процессе разработки фронтенд-приложений постепенно появляется необходимость в различных оптимизациях, в том числе в скорости и SEO, поэтому активно развивается бэкэнд для фронтенда. Он используется в основном для дополнительного кеширования и рендеринга на стороне сервера.

    Конечно, вы можете подключаться к базе данных для получения информации. Для этого есть специализированные плагины и практики(можно прям гуглить nuxt 3 mysql). В целом, у вас есть доступ ко всем возможностям Node.js, так что всё в ваших руках. Чаще всего используются какие-либо ORM (Object-Relational Mapping), которые облегчают доступ к БД, убирая рутину на себя и предоставляя удобный доступ к данным. Например, Prisma.

    В целом, обычно в Nuxt.js и подобных фреймворках напрямую с БД не работают, так как это ломает классическую архитектуру подобных приложений с разделением логики, масштабирования и т.п. Так что даже если на бэкенде Node.js, то это отдельные независимые сервисы, которые предоставляют каким-либо образом доступ к подготовленным данным из БД (например через REST API), а уже приложение на Next.js обращается к нему и в своей бэкенд-части и через браузер.

    Резюмируя: Nuxt - для отображения интерфейса/фронтенда, даже при использовании рендринга на стороне сервера, получение обновление данных через API(REST/GraphQL/... ).
    Express/Nest(что угодно другое бэкэндерское) - ядро бизнес логики, обработка данных, работа с БД, постороение API и тп.
    Это если кратко, а так гуглите про архитектуру приложений, информации море, тема обширная.
    Ответ написан
    1 комментарий
  • Я тут таймер сделал, но почему то когда я переключаю окно на что-то другое, таймер останавливается. В чем проблема?

    neuotq
    @neuotq
    Прокрастинация
    Так задумано. Неактивные вкладки имеют низкий приоритет, поэтому там не гарантируется исполнение в риалтайме js.
    Выход переписать например на webworker.
    В целом тема обширная, можешь гуглить JavaScript inactive tabs
    Ответ написан
    1 комментарий
  • Как после исполнения команды `Fetch origin` в `GitHub Desktop` вернуть локальные изменения в GitHub?

    neuotq
    @neuotq
    Прокрастинация
    Команда git fetch просто скачивает изменения, не применяя их. А вот git pull делает fetch, а затем уже rebase/merge.
    Поэтому если вы сделали просто fetch, то не должны были потерять ваши локальные незакомиченные изменения.
    Короче говоря, всё должно было сохраниться. Если только выполнилась команда fetch.
    Ответ написан
  • Как запретить сжатие блока по ширине при фиксированном позиционировании?

    neuotq
    @neuotq
    Прокрастинация
    Ну так у вас ширина bonus_window не задана его, те фактически блок на всю доступную ему ширину. Ширину уменьшается, блок соответственно тоже будет сжиматься.
    Делайте ему жесткие размеры ширины bonus_window, можно даже добавить и ключи по media queries для разных размеров экрана.
    Ну и лучше позиционировать по правому краю, чтобы не заходил блок за пределы экрана, либо тогда учитывать это в тех же media queries, зная под какую ширину экрана, какой размер блока(и конечно же внутренних элементов) вас устроит.
    Ответ написан
    Комментировать
  • Как отключить скролл страници при фокусе определенного элемента?

    neuotq
    @neuotq
    Прокрастинация
    Вам нужно следить за событиями keydown, далее снимаем действие по умолчанию с помощью preventDefault.
    Таким образом в самом общем случае отключения реакции на все кнопки будет:

    document.addEventListener('keydown', e => {
      e.preventDefault();
      return false;
    });


    Далее ищите нужные коды для своих кнопок, отключаете поведение по умлочанию, добавляете своё поведение.
    Например:

    document.addEventListener('keydown', e => {
       if (e.key === 'ArrowDown') {
        e.preventDefault();
        //Ваша логика
        return false;
      }
    });
    Ответ написан
    Комментировать
  • Что значат цифры 5200 в спецификации процессора AMD 7600X?

    neuotq
    @neuotq
    Прокрастинация
    5200 - официально, те то что гарантирует производитель.
    Но энтузиасты, геймеры разгоняют память до 6000, работает без проблем.
    У AMD это технология EXPO, есть даже список официальный поддерживаемых модулей с частотами разгона. Я думаю есть и не официальные, на форумах/группах энтузиастов оверклокеров.
    Ответ написан
  • Нужен ли отдельный linux user для сайта?

    neuotq
    @neuotq
    Прокрастинация
    Практик очень много, тут лучше идти в сторону лучших практик от devops, это большая тема, но полезная.

    Но если упрощенно и по старинке и быстро.
    1. Доступ на сервер только по ssh ключам, никаких паролей.
    2. Отдельный момент по sudo
    2.1 Для пользователя админа в целом оставляем запрос пароля на sudo
    2.2 Для сервисных аккаунтов(условные www-data и компашка,которые для служб, сервисов, автоматика того же ларавел) делаем sudo без пароля для избранных команд/программ. Таким образом автоматизация будет работать сама, независимо и стабильно.
    3. Бонус пункт. Подумать о переходе на докер контейнеры на сервере, многие штуки упрощаются. Можно начать с интеграции того же laradock как самый быстрый и лёгкий старт.
    PS почему rsync? Почему хотя бы не скрипты которые фетчат гит репо. rsync для некоторых сценариев бекапа еще понятно, но для деплоя кода ну не знаю. Более прозрачная схема через гит и билд на сервере. В крайнем случае в тот же гит можно и сбилженные релизы добавлять и их разворачивать на сервере.
    Ответ написан
  • Мертвы ли шаблонизаторы?

    neuotq
    @neuotq
    Прокрастинация
    Легкое гугление вам покажет что это не так, даже из устаревшего списка много кто живой и развивается.
    Но зачастую сами шаблоны сильно зависят от архитектуры и целей приложения. В мире JS с своими SSR React/Vue и ко в купе с тем что node все ближе по похожести на браузерный js, то вопрос разных шаблонизаторов не стоит столь остро. В реакте с его JSX и прочими штуками зачем мне pug, там даже особо код и читабельнотсь не улучшится. А по функционалу тем более, ну и плюс лишняя зависимость. Ну и подобная логика в других проектах.
    Так чо шаблонизаторы живы, умирают не нужные. Много где есть свои встроенные штуки. В любом случае на чистом html) пишут редко, либо что-то мелкое.
    А во многих других фреймворках/языках с ними всё ок, развиваются активно.
    Ответ написан
    Комментировать
  • Как при клике убрать активный класс?

    neuotq
    @neuotq
    Прокрастинация
    Немного упростим главный код и исправим названия класса.
    Активный класс, если это БЭМ или типа БЭМ, должен быть не _active, а fits-cars-showmore-content_active, ну и с остальными соответственно.
    Так же разделим название для data атрибутов, чтобы у кнопок и контента они различались, так желательно в данной семантике. Либо в дата атрибут передавать айди кого будем дёргать. Тут уже на усмотрение разработчика в зависимости от дельнейшего пути
    Сам цикл упростим (но желательно конечно вернуть/добавить проверки аргументов, существования элементов и тп, я убрал для наглядности.).
    const autoBtns = document.querySelectorAll('.block-tabs-main-home__item');
    	autoBtns.forEach(
        btn => {
          btn.addEventListener("click", (e) => {			
            const contentId = btn.getAttribute("data-content-id");     
            document
                .querySelectorAll(`[data-id="${contentId}"], .fits-cars-showmore-content_active`)
                .forEach( (el) =>
                  el.classList.toggle('fits-cars-showmore-content_active')
                )
    	        }
          );
        }
      );

    Обновил пример, забыл что вы хотели закрывать и другие. В любом случае действий мы выполняем меньше, чем обходя безусловно все элементы. Здесь мы обходим только те кто открыт и тот у кого айди совпадается
    Рабочий пример
    Ответ написан
    Комментировать