Задать вопрос
  • Как обеспечить идемпотентность запросов к API?

    neuotq
    @neuotq
    Прокрастинация
    С кукисами и прочим оставьте это на стандарты что уже вам даёт WP(и/или плагины что вы там используете).
    После нажатия купить, у вас создаётся запись о покупке в БД, со статусом не оплачен. У покупки во всех системах для создания инет магазинов и тп уникальный айди, вот на основе его и можно генерировать уникальный (допустим
    с помощью crypt) ключ идемпотентности.
    После успешной оплаты в БД статус меняется на оплчен и этот заказ и его айди больше никогда не используется. Даже при повторной покупке это будет уже клон этой, но с новым айди.
    Таким образом и себя защитите и в целом простое и относительно надёжное решение.
    Могут быть нюансы только когда оплата прошла, а ваш сервис это узнать через обратный webhook не смогла(допустим был лаг и тп) и запись в БД не стала - оплачен. Но обычно платёжные шлюзы даёт проверять статусы оплаты и по запросу, поэтому если не приходит ответ там в течении какого-то времени, можно запрашивать в ручную. Ну и затем в любом случае устаревает запрос на оплату(почти во всех платёжках есть тайм аут на то, в какое время можно оплатить уже после создания инвойса на их стороне), так что и тут в целом все норм.
    Ответ написан
    4 комментария
  • Почему возникает утечка памяти в php-fmp?

    neuotq
    @neuotq
    Прокрастинация
    В прошлом месяце была большая дискуссия(а началась ещё год назад), закрывали пару багов в 8.1/8.2, пока ещё не в релизной версии.
    Ответ написан
    4 комментария
  • Как интегрировать существующий блог на Wordpres в веб приложение на Nuxt.js?

    neuotq
    @neuotq
    Прокрастинация
    У вас два варианта.
    1. Использлвовать REST API от вордпресса, плюс есть различные тематические плагины отдельно и API эндпоинты у разных популярных крупных плагинов.
    2. Если на одном сервере и тп, делать прямые запросы к БД в самом NUXT допустим через Prisma
    Ответ написан
    1 комментарий
  • Цепочка запроса с пустым значением?

    neuotq
    @neuotq
    Прокрастинация
    Понятно почему, потому в первом случае на subcat используете spread оператор, которые не сработает если объект не итерируемый.
    Во втором случае похожая проблема, у вас неопределена переменная(в данном случае свойство) и вы вызываете на ней метод сплит.
    Я бы упростил.
    // genre, search и тп как то подготовлены, в них значения верного типа либо нул
    // Например (упрощенный )
    const genre = req.query.genre ? req.query.genre.split(",") : null;
    
    const searchQuery = search ? { name: { $regex: search, $options: "i" } } : {};
    const genreQuery = genre ? { genre: { $in: genre } } : {};
    const subcategoryQuery = subCategory ? { genre: { $in: subCategory } } : {};
    const actorsQuery = actors ? { actors: { $in: actors } } : {};
    const movies = await Movie.find(
            { ...searchQuery, ...genreQuery, ...subcategoryQuery, ...actorsQuery }
        ).exec();

    Кстати, по поводу модели, может в жанрах и актерах не строку использовать? Правда останется проблема переименований, к примеру опечатка в имени актера , но это уже отдельная история, пусть будет за рамками.
    // "_id": "6420a90744a448b197042db0",
    // "name": "Stalker and Treasure",
    // genre":  [ "drama"],
    // "subcategory": "mysubcategory",
    // "actors": [ "A.Dolton", "M.Romario", "T.Milano" ],
    Ответ написан
  • Как решить задачу по изменению элементов JS c помощью input?

    neuotq
    @neuotq
    Прокрастинация
    Хорошо бы let не использовать если в этом нет необходимости(в данном случае не супер критично).
    Я бы посоветовал вывести нужные штуки в отдельные функции, которые вызываются по необходимости.
    Тогда будет универсальный подход и свобода действий.
    Отдельная функция на то, чтобы поставить слушалку события на клик, которая примет как параметр элемент - решит вашу проблему.
    Вот код и демо на кодпене
    Ответ написан
    Комментировать
  • Почему в python такой результат?

    neuotq
    @neuotq
    Прокрастинация
    Причины две.
    1. Списки - мутабельны, те меняется содержание
    2. Использование составного присваивания, которая в отличии от простого присваивания на самом деле пытается вызвать метод .__iadd__(),
    Во втором случае будет a.__iadd__(a), таким образом мы в мутабельный обект с помощью метода добавили новые данные. К примеру a.append(111) тоже изменит оригинал.
    Таким образом, используется та же переменная(тот же id в случае с +=)

    def appended1(с):
        print(f"Айди внутри функции1 перед операцией: {id(с)}")
        с *= 2
        print(f"Айди внутри функции1 после операциии: {id(с)}")
        return
    def appended2(d):
        print(f"Айди внутри функции1 перед операцией: {id(d)}")
        d = d*2
        print(f"Айди внутри функции1 после операциии: {id(d)}")
        return
    
    a = 2
    print(f"Айди вне функции1 перед операцией: {id(a)}")
    #Айди переменной внутри функции после операции другой
    appended1(a)
    print(a)
    print(f"Айди вне функции1 после операции: {id(a)}\n")
    
    b = 2
    print(f"Айди вне функции2 перед операцией: {id(b)}")
    #Айди переменной внутри функции после операции другой
    appended2(b)
    print(b)
    print(f"Айди вне функции2 после операции: {id(b)}\n\n")
    
    
    list_a = [1,2]
    print(f"Айди списка вне функции1 перед операцией: {id(list_a)}")
    #Все айдишники будут равны и до и после и вне и внутри функции
    appended1(list_a)
    print(list_a)
    print(f"Айди списка вне функции1 после операции: {id(list_a)}\n")
    
    list_b = [1,2]
    print(f"Айди списка вне функции2 перед операцией: {id(list_b)}")
    #Айди переменной внутри функции после операции другой
    appended2(list_b)
    print(list_b)
    print(f"Айди списка вне функции1 после операции: {id(list_b)}")
    Ответ написан
    Комментировать
  • Как получить число и вернуть измененное число в новом теге?

    neuotq
    @neuotq
    Прокрастинация
    Вы немного запутались где какие у вас объекты, внутренняя переменная в функции у вас можно вообще убрать и упростить, да и метода innerHTML у нее нет
    function replaceNum() {
        const price = document.querySelector('.amount').innerHTML;
        const res = document.querySelector('.res');
        const num = 2;
        res.innerHTML = `${price * num}`;
    }
    replaceNum();

    const вместое let - тк мы далее не меняем эти переменные.
    Далее домашка вам, добавить проверку на существовании элементов откуда берёте и куда добавляете число, а так же проверку на то что данные из amount - являются числом, а не чем-то другим, а так же можно добавить параметры функции, как раз элемент откуда берём, элемент куда и множители
    Ответ написан
    1 комментарий
  • Подойдёт ли процессор для RTX4070?

    neuotq
    @neuotq
    Прокрастинация
    Конечно же нужно исходить из задач.
    Чем больше в ваших задачах вовлечён процессор, тем больше шансов что он не подойдёт.
    С майнингом пока что проблем не будет(кроме невыгодности майнинга, хотя вроде там в плюс выходит, но не стабильно и долго отбиваться).
    Далее, допустим, ваша задача современные всякие штуки на нейронок, причем особенность где процессор играет минорную роль, грубо говоря только чтобы туда сюда данные и для отчетов, тут скорее подойдет чем нет, тк бутылочное горлышко будет только в определенные моменты, и не столь критично.
    Тоже касается некоторых проф программ и тп.
    Но как только есть оптимизации и процессора, то тут вы будете уже СИЛЬНО проигрывать, тк за 6 лет появились и активно используется куча аппаратных фич, а так же значительно возросла и сама производительность.
    Далее игры, тут тоже самое. Если игра не CPU ёмкая, то всё ок. Либо если вы играете на "ультрах при 4к с трассировкой", то у вас быстрее до узкого места дойдёт видеокарта(на заметной части современных красивых игр), чем до процессора.
    При 1080 почти точно проц будет бутылочным горлышком, но тут снова таки нюансы. У вас может быть монитор 60 - 75 Герц, тогда ставьте лок на 60 кадров и в целом почти хорошо (но нужно быть готовым до просадок на 1%), пока что.. Уже появляются игры которые обрубают относительно свежие процессоры, правда тут нередко сообщество выпускает народные патчи, но всё же.

    Поэтому, лучше взять слабый современный процессор(который почти всегда уже и мощнее хех), чем сидеть на этих ксеонах. Для них оптимально GTX, так что берите 1080 или 1660++.
    Ответ написан
  • Wordpress - Как передавать в форме данные: "Откуда пользователь перешел на сайт"?

    neuotq
    @neuotq
    Прокрастинация
    В форминаторе есть похожий функционал, с помощь. скрытого поля можно реализовать, вот здесь документация. Попробуйте может вам подойдёт.
    Ответ написан
    Комментировать
  • На какую CMS перевести сайт на Livestreet?

    neuotq
    @neuotq
    Прокрастинация
    Труда будет в любом случае много, слишком специфичное у них было решение.
    На вашем месте я бы собрал максимально похожий аналог на Wordpress.
    А затем написал персональный скрипт миграции каждого типа сущности.
    Wordpress в данный момент самый популярный инструмент, не умрет я думаю долго долго.
    Второй вариант, это написать собственный движок поверх текущей структуры БД(с минимальными изменениями), например с помощью Laravel.
    Обе задачи вполне можно потянуть небольшой командой разработчиков(даже одним, но я бы для надёжности взял пару). Можно найти на фриланс биржах или в любом другом месте на контракт.
    Лично я советую первый вариант с Wordpress, тк там уже огромное число готовых решений и расширении функционала у вас меньше будет забот. Да и обновления будет легче делать чем при собственном движке.
    К тому же при собственном движке вам крайне желательно иметь штатных разработчиков(может и не на полную ставку) которые будут осуществлять техническую поддержку: обновление, закрытие багов, фичи и тп
    Ответ написан
  • Как правильно обновлять данные react после обращения к api?

    neuotq
    @neuotq
    Прокрастинация
    Изменения в UI до прихода данных с сервера - тн оптимистический подход (Optimistic UI updates).
    Советую следовать простому правилу: делать оптимистичные обновления в интерфейсе всегда, кроме случаев когда это критично для пользовательских сценариев(очень редко когда и где нужно). В таком случае ваше приложение будет ощущаться намного более отзывчивым, приятным и быстрым. Ошибки и откаты можно сделать потом, после прихода с сервера ответа с ошибкой.
    Советую погуглить "Optimistic UI updates", статей на этот счёт в разном контексте огромное число.
    Ответ написан
    1 комментарий
  • Для чего нужен грид в 24 колонки?

    neuotq
    @neuotq
    Прокрастинация
    Чаще всего используют 12 колонок. Причина в сравнении с красивыми 10 проста - большее количество вариаций делений при относительно небольшом числе колонок, учитывая исходные что ширина бОльшей часть экранов кратно 8. Поэтому может вернее будет назвать эту систему системой 8-пиксельной, тк шаг в 8 пикселей для большинства размеров(при хард сетке всё кратно 8, при софт только расстояния между элементами). Таким образом легко быстро выстраивается модульная сетка с приятным ритмом.
    Поэтому многие системы/фреймворки по умолчанию настроены на 12 колонок.
    24 колонки - можно условно считать вариацией для любителей чуть большей вариативности и тонкостей с шириной/расстоянием между колонками и шага в 4 пикселя и тонкой настройки золотого сечения на странице.
    Отдельно стоят любители 16 колонок(относительно популярный вариант), это, как другие менее популярные, уже частные случаи сетки и дизайна, где все в ручную подбирается, либо изначально допускается меньшая вариативность размещения элементов/колонок/модулей. Поэтому прям зацикливаться не стоит, исходите из своих задач и требований, полёта фантазии дизайнера.
    Ответ написан
    Комментировать
  • Как отправить письмо с Ларавель из-под Опенсервер?

    neuotq
    @neuotq
    Прокрастинация
    Если я верно понимаю openserver использует sendmail и сам уже в своих настройках разруливает всё дальше. Значит вам нужно в настройках почты проекта на Laravel указать в качестве драйвера почты сендмейл в файле .env
    MAIL_DRIVER=sendmail
    Ну и произвести настройки почты уже в самом open server согласно их документации.
    Ответ написан
  • Почему в laravel нет файла webpack.mix.js?

    neuotq
    @neuotq
    Прокрастинация
    С относительно недавних пор Laravel перешёл с вебпака на Vite, поэтому теперь при установке по умолчанию используется именно Vite.
    Если прямо очень хочется вебпак и микс есть официальное руководство. Но я рекомендую без крайней необходимости не переключаться на микс, с Vite работать в целом гораздо комфортнее, он намного шустрее.
    Ответ написан
    Комментировать
  • Как оптимально искать в большом массиве?

    neuotq
    @neuotq
    Прокрастинация
    Очевидный двоичный поиск. Рекурсивная функция, берёте элемент который по середине, сравниваете, отсекаете соответсвующую половину, и повторяете снова. В интернете полно примеров.
    Ответ написан
    1 комментарий
  • Как в форму вставить блок?

    neuotq
    @neuotq
    Прокрастинация
    Поместите всё в один общий блок. Вот я схематично набросал
    Ответ написан
    2 комментария
  • Как получить обьекты из массива по их значению?

    neuotq
    @neuotq
    Прокрастинация
    Используйте filter
    let ar = [
    {
    'name' : 'Vasya',
    'isCool' : true
    },
    {
    'name' : 'Sanya',
    'isCool' : false
    }
    ];
    
    ar = ar.filter(el => el.isCool)
    Ответ написан
    1 комментарий
  • Как сравнить input с другим select?

    neuotq
    @neuotq
    Прокрастинация
    Тут конечно много вариантов, лучше в целом переписать на чем-нить реакт подобном и сравнивать по данным перед рендером. Но если ваш пример, то можно использовать те же dataset поля чтобы проверять что уже добавлен такой.
    В моем примере я проверяю просто категорию, вы уже сами добавите нужные вам доп проверки
    /* Добавляем в li dataset поле category-id в котором будем хранить категорию
    По желанию добавляешь и другие
    а если подкатегории входят в категорию и каждая имеет только одного родителя то можно обойтись одной подкатегорией
    */
    $("#categoryAll").append(
        `<li class="flex group-form-elements" data-category-id="${cat1}">
            <div>
              <input type="hidden" name="incidentmain[]" value="${cat1}" class="incedentSelected">
              <span>${txt1}</span>
            </div>
            <div>
              <input type="hidden" name="incidentsubcategory[]"  value="${cat2}" class="subcatSelected">
              <span>${txt2}</span>
            </div>
            <div>
              <input type="hidden" name="IncidentDetection[]" value="${cat3}">
              <span>${txt3}</span>
            </div>
            <div>
              <span class="delCategory button delete">Удалить</span>
            </div>
         </li>`
      );

    Ну и в самом коде в проверках ваших делаем запрос, если такой элемент находится обрубаем исполнение
    if ( document.querySelector(`[data-category-id="${cat1}"]`)) {
        alert("Такую категорию уже добавляли");
        return false;
      }

    Весь пример, дальше дорабатывайте под себя:
    Ответ написан
    1 комментарий
  • Имеет ли смысл писать на Хабр статьи с рецензиями прочитанных книг?

    neuotq
    @neuotq
    Прокрастинация
    Советую попробовать в любом случае. Особенно если затрагивать контекст АйТи и разработчиков, в том смысле что зачем им подобное и почему стоит обратить внимание. Ведь мы все тоже люди. Ну, а если что можно всё это приправить соусом развития софт скиллов, чтобы душнилам критикам нерелевантного контента проприглушать рот ;-)
    Ответ написан
    Комментировать
  • Как установить необязательный префикс?

    neuotq
    @neuotq
    Прокрастинация
    Способ есть, через динамическое возвращение в префиксе, ну грубо говоря:

    Route::middleware('default_locale')
    ->prefix(request()->segment(1) == 'ru' ? request()->segment(1) : null )
    ->group(function () {
        Route::get('/', function (){
          return view('playground', [
            'language' => app()->getLocale()
          ]);
        });
    });

    Можно ту штуку в префиксе вынести в отдельную функцию, я написал кратко чтобы была понятна сама идея доп штуки с проверкой на все локали я думаю вы сами допишете.
    Ну и изменить сам Миддлвар оставив там только логику установки локали не устанавливая переменную locale.
    Ответ написан
    3 комментария