Задать вопрос
  • Какая архитектура приложения лучше?

    @exmach
    Frontend Developer
    Монолит (предположу, что вы описываете inertia js) лучше-удобнее для работы fullstack-разработчика в одиночку, если отдельные люди на фронте и бэке, то монолитная структура проекта превращает их работу в ад (по личному опыту говорю).

    Из технических плюсов - монолит считается чуточку быстрее за счет такой спаренности приложений, но это быстродействие ограничивается примерно до 100 мс (в лучшем случае, в среднем значительно меньше), что критично лишь для очень нагруженных приложений.
    Ответ написан
  • Как в триггере сделать проверку, что изменение вызвал другой триггер?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В общем случае невозможно определить, чем вызвано изменение данных, приведшее к срабатыванию триггера. Так что определить встроенными средствами - нельзя.

    Для решения задачи необходимо использовать внешние средства передачи данных. Поскольку весь каскад триггеров работает в одном соединении, проще всего использовать определённые пользователем переменные с предопределёнными именами, которые инициализируются на старте триггера и сбрасываются на его финише:

    CREATE TRIGGER trigger_name
    EVENT ACTION ON table_name
    FOR EACH ROW
    BEGIN
        SET @trigger_name_table_name = CONCAT('executed, ', 'column_value=', NEW.column);
    -- trigger action
        SET @trigger_name_table_name = NULL;
    END;

    Если в теле триггера определены EXIT хэндлеры - они тоже должны выполнять соответствующие сбросы.
    Ответ написан
    Комментировать
  • Как запускать компьютер с помощью кнопки на сайте?

    GavriKos
    @GavriKos
    Микропетпроджект - https://home-cloud.store/
    WakeOnLan +нечто мониорящее ваш сайт на предмет нажатости кнопки
    Ответ написан
    Комментировать
  • Как сдедать скрипт, который будет обратно кодировать код?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Никак.
    Лицензия получается XOR'ом ключа с вычисляемой (на самом деле, фиксированной) гаммой.
    Зная только часть лицензии можно получить только соответствующую часть ключа.
    Если знать все части лицензии, то достаточно записать их через '|', проXORить с вычисленной гамой и закодировать в BASE64.
    Ответ написан
    4 комментария
  • Как правильно отправить в базу данных сразу несколько ссылок на картинки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    То есть весь вопрос сводится к "при записи я кодирую данные c помощью json_encode, а при выводе не раскодирую, но виноваты создатели этого сайта".

    Но главные проблемы этого кода конечно не в json.
    Во-первых, этот код позволяет заливать РНР файлы, и первый же малолетний придурок этим воспользуется.
    Во-вторых, этот код пропускает SQL инъекцию, и первый же малолетний придурок этим воспользуется.
    Остальное уже мелочи.

    Но если отвечать на вопрос в целом, то да - вставлять все ссылки в одно поле это действительно неправильно.
    Плюс, в БД всегда должны храниться только сырые данные, а любое форматирование добавляться только при выводе. То есть сохранять надо только сами имена файлов.

    Но в данном случае вообще непонятно, зачем сохранять ссылки в БД.
    При заливке берётся id созданного пользователя, создаётся папка с таким именем, и в неё заливаются файлы.
    При выводе файлы читаются из этой папки и выводятся.
    Ответ написан
  • Есть ли риск спалить системник при использовании блока питания с 450 ватт?

    При повышении нагрузки либо будет аварийное выключение из-за просадки напряжения, либо будет перегрев БП.
    При перегреве БП будет либо аварийное выключение БП, вместе со всем компьютером, либо произойдёт повреждение компонентов БП.
    При этом может произойти возгорание БП, а потом и всего компьютера, если разгорится хорошо.
    Также может произойти какой-нибудь интересный электрический эффект, из-за чего может произойти КЗ или ещё что неприятное, из-за чего даже без возгорания твои дорогие комплектующие, в лучшем случае, придётся ремонтировать.

    В целом, даже если 450вт фактически хватает - он будет на предельных значениях работь, а тут и КПД ниже, и нагрев больше.
    + со временем (с годами) общая мощность БП может падать.

    Так что лучше в ближайшее время купить более мощный БП.
    Ответ написан
    Комментировать
  • Есть ли принципиальные преимущества Intel+NVidia перед AMD+AMD?

    @rPman
    'были времена', когда продукция amd как процессоры и видеокарты от них были дешевле до 30% при равной производительности

    Так intel для своих процессоров чаще меняет сокеты, а значит апгрейд подразумевает замену не только процессора но и материнской платы, когда как у amd его socket am4 да и предыдущий am3 держались на столько долго что у некоторых материнки могут работать десятилетиями, и при этом достаточно мощный процессор и оперативная память.

    У видеокарт от amd (точнее это не их вина но это не важно) была небольшая проблема поддержки ускорения в не игровых приложениях, так как большинство разработчиков крупных приложений в первую очередь вводили поддержку nvidia.

    Вот и смотри, получается быть приверженцем amd может оказаться дешевле но можно поймать проблему не совместимости (кстати сейчас это уже не так заметно, все больше софта поддерживают gpgpu от amd, точнее opencl, а значит кроссплатформенно)

    p.s. сейчас, благодаря локальному проигрышу гонки производства процессоров, intel сильно понизили стоимость своих процессоров, как минимум из среднего сегмента, а значит можно собрать intel конфигурацию заметно дешевле amd при лучшей производительности, но кризис сначала ковид, потом проблемы с поставками а потому и война внесли много хаоса в этот выбор
    Ответ написан
    Комментировать
  • Нужно ли использовать interface?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Нет, ничего указывать не надо.
    Тут и без интерфейсов получатся отличные самолёты из соломы и палок.
    Ответ написан
  • Как запустить php скрипт после ajax запроса?

    @rPman
    Вопрос немного не понятен.
    * Если задача в php скрипте как то отличить обычную загрузку страницы от запроса, то к запросу нужно добавить параметры, это нормальный способ, специально для этого созданный. Параметры могут быть добавлены напрямую в ссылку, это формат запроса http get (используется по умолчанию) или как дополнительные поля запроса http post, в любом случае метод ajax jquery все делает автоматически и достаточно указать данные в settings в виде массива key->value в параметре data
    * Если проблема в том что запрос выполняется параллельно загрузки данных браузером и может быть прерван принудительно браузером или при проблемах с соединением, то типичный способ - запускать свои задачи отдельным приложением (сервисом), с которым веб приложение (то что внутри index.php) должно как то общаться (обычно используют тот же http протокол но это не обязательно, например один из способов - оставить в базе данных задачу, список которых и будет мониторить это приложение). Способов тьма, написано куча решений, особенно когда речь идет о высоконагруженных задачах, но настоятельно рекомендуется решить подобную задачу самостоятельно, благо там нет ничего сложного.
    В данном решении должно появиться понятие задачи, у которой есть статусы новая, исполняется, завершена, ошибка,... а на стороне клиента это соответственно должно обрабатываться.

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

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Читайте обе.
    Ответ написан
    2 комментария
  • Как отсортировать массив по дате в формате от и до?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Зависит от формата даты. пример массива не помешает. так же как и вариант "такое хочу получить".
    2) Если данные получены из бд, правильным ответом будет добавить сортировку в запрос.
    Ответ написан
    21 комментарий
  • Как вернуть html код в ответ ajax запросу?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Вы уже возвращаете ответ через echo.
    Проблема в том, что вы не понимаете собственный код. Сначала вы вызываете ferchAll, а потом пытаетесь работать с результатом как с одной записью, а не их набором. Скрипт ваш падает из-за этой ошибки, а сервер не настроен для разработки и ошибки не показывает.

    PDOStatement::fetchAll() возвращает массив, содержащий все оставшиеся строки результирующего набора. Массив представляет каждую строку либо в виде массива значений одного столбца, либо в виде объекта, имена свойств которого совпадают с именами столбцов.
    https://www.php.net/manual/ru/pdostatement.fetchall.php

    P.S. И это если игнорировать неправильные кавычки.
    Ответ написан
    Комментировать
  • Как вернуть html код в ответ ajax запросу?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы пытаетесь выполнить внешнюю команду с именем <div
    Изучайте синтаксис PHP. Посмотрите, чем обратные апострофы отличаются от прямых и от двойных.
    Ответ написан
    Комментировать
  • Как в Laravel после регистрации/авторизации оставаться на той же странице?

    iMedved2009
    @iMedved2009
    Не люблю людей
    return redirect()->back();
    А на роуты login и register просто повесить миддлваре аля guest который будет редиректить куда надо.
    Ответ написан
    2 комментария
  • Как скомпилировать хоть 1 проект с гитхаба на с/с++?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Судя по ридмихе, нужно просто уметь пользоваться gcc и make.
    Ответ написан
    Комментировать
  • Как обновить git для windows?

    Krasnodar_etc
    @Krasnodar_etc
    fundraiseup
    Download and install Git for Windows 2.37.2(2) [N/y]?

    Вас спрашивают, хотите ли вы установить новую версию? Нажмите "y" (от yes) и enter
    Ответ написан
    3 комментария
  • Какую IDE выбрать для разработки на Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    https://www.jetbrains.com/idea/
    CE подойдет
    Ответ написан
    Комментировать
  • Зачем задавать приватный модификатор доступа для свойств класса?

    Adamos
    @Adamos
    class VeryOpenOne
    {
    public $property;
    }
    $voo = new VeryOpenOne();
    $name = 'pro' . 'perty';
    $voo->$name = 'Пытаясь отрефакторить тот класс, ' .
      'ты хрен найдешь, что в этой строчке меняется эта переменная. ' .
      'Никакое самое умное IDE не поможет';
    Ответ написан
    1 комментарий
  • Зачем задавать приватный модификатор доступа для свойств класса?

    Maksclub
    @Maksclub Куратор тега PHP
    У вас очень логичный вопрос на счет сеттера: сеттер полностью уничтожает задумку с инкапсуляцией. Правильно это называется "семантическое нарушение инкапсуляции" — то есть как-бы мы инкапсулировали, но по факту назад открыли прямую запись в свойство напрямую. Все доводы "ну мы можем в сеттере валидировать" не корректны

    Правильным способом будет не использовать сеттеры. Вот моя статья на эту тему:
    https://habr.com/ru/post/469323/

    Более подробно: каждый класс нужно проектирвовать так, чтобы данные внутри были максимально связаны. Например каждый метод работать должен в хорошем случае с максимальным числом полей класса, тогда у него высокий cohesion... В тоже время снаружи наужно работать с максимальн омалым числом метода, тогда будет низкая связанность (coupling). Это пара принципов из GRASP.
    Когда вы делаете сеттеры и геттеры, то у вас данные внутри между собой почти никак не взаимодействут: с геттером работают снаружи, с сеттером работаю снаружи — весь класс нараспашку, а в нем в 100% случаев появляются данные, которые вместе не должны находиться и никак не связаны — анрушена и абстракция и инвариант и много чего еще...

    Про инвариант отдельно: например есть платеж, у него есть значение, с которым платеж инициирвоан (initValue), есть значение холда (holdAmount) и есть значение чарджа на списание (chargeAmount)
    Когда вы работаете с платежом, контролируя ивнариант в самом классе, то ваш каждый метод првоеряет др значения и позволяет перейти к др состоянию... методов будет 2-3, все инкапсулировано и безопасно.

    Например:
    class Payment {
         pub func charge(amount int) void {
              if (this.holdAmount < amount && this.initAmount < amount) {
                   throw new PaymentException('Unavailable charge amount')
              }
    
               if (this.status === PaymentStatus:finish) {
                   throw new PaymentException('Payment already fisnished')
              }
    
              this.chargeAmount = amount
              this.holdAmount -= amount
              this.status = PaymentStatus:finish
         }
    }


    Тут в одном методе полные проверки и класс сам контролирует все состояние внутри, также соблюдается закон Деметры. У даннго кода высокий cohesion (из GRASP), тк внутри идет плотная работа с внутр данными (значит они корректно тут закроекны) и низкий coupling ( с теми данными для данного кейса только один метод работы, все внутри)

    Когда вы раскроете сеттерами и геттерами, то ваше состояние становится непредсказуемо и полагается только на то, что снаружи точно подумали об инварианте (нет)
    Ответ написан
    18 комментариев