Задать вопрос
  • Правильно ли я делаю шаги по замене зависимостей на проде?

    @Vitsliputsli
    Укажите в команде composer update только тот пакет, который требуется обновить.

    слышал, что можно просто удалить .lock файл и сделать по новой composer install. Отличается ли данное поведение от того, что произойдет при composer update?

    Не отличается, не обнаружив .lock файл composer выполнит update вместо install.

    и по сути это все действия которые я должен сделать на продакшене в данном случае?

    Да, но не делайте этого под нагрузкой, сперва собирайте, а потом перенаправляйте нагрузку на новый код. Используйте blue/green, контейнеры, как написал Иван Шумов, или просто симлинки на одной и той же машине.
    Ответ написан
    Комментировать
  • Как реализовать функционал с учётом принципа инверсии зависимостей?

    @Vitsliputsli
    Какие еще классы разных API? REST API - это механизм взаимодействия, это внутренняя реализация, которая почему-то вытащена на верхний уровень, до уровня контроллеров. У вас должны быть бизнесовые сущности, и к объектам этих сущностей применяйте Принципы. А уже на более низком уровне для передачи данных бизнесовых сущностей используйте объект класса RestAPI, в котором, разумеется, не должно быть никаких завязок на специфику выше стоящих бизнесовых сущностей.
    Ваш метод send выглядит странно, зачем он вообще нужен? Динамические методы это очень неудобно, IDE по ним вам ничего не подскажет и придется разгадывать этот ребус самому, а ничего более этот метод не делает.
    Ответ написан
    Комментировать
  • Как на php будет выглядеть запись из JS "value = value || 0"?

    @Vitsliputsli
    если value существует, берем значение из value, иначе приравниваем 0.

    $value = $value ?? 0
    как уже предложили, но к
    value = value || 0
    это отношения не имеет. || - это оператор дизъюнкции, но в php он возвращает тип bool в отличии от js.
    Ответ написан
  • Целесообразно ли логирование выносить в отдельную базу?

    @Vitsliputsli
    Для разработки база должна разворачиваться из миграций, т.е. не должно быть никакой зависимости от прода. Если не используете их, то пора начать. Чтобы не писать их все с нуля, создайте дамп структуры и разворачивайте его, а новые изменения уже в миграциях. Необходимые для разработки и тестирования данные заполняйте фикстурами.
    Что касается логов в базе, то нужно понимать, как вы их используете, и уже исходя из этого выбирать решение.
    Ответ написан
    Комментировать
  • Зачем бэкенду уметь писать запросы к БД?

    @Vitsliputsli
    Ни любой бэкенд разработчик использует фреймворки, если большая часть функционала фреймворка не нужна, а производительность очень важна, то стоит задуматься о применимости фреймворка. Конечно, тут можно использовать микрофреймворки, а не писать свой функционал, но это другой вопрос. Что касается ORM, то даже если вы ими пользуетесь, вы должны понимать как они работают, ну и разумеется понимать как работают СУБД. Для отдельного класса задач ORM может и хватать, но те же индексы, если даже ORM их создает, в принципе не могут быть всегда оптимальными, т.к. ORM не может угадать будущую селективность полей. Опять же миграции, не понимая как работает тот или иной запрос SQL DDL (да и DML тоже), вы легко положите СУБД. Если миграция выполняется несколько часов, а вы ее запустите на СУБД без снятия нагрузки - будет весело. А снимать нагрузку каждый раз - это дорогое удовольствие. И это только часть проблем, которые могут возникнуть, если не понимать как работают СУБД.
    Ответ написан
    Комментировать
  • Clean code для любого яп?

    @Vitsliputsli
    Поинтересовался книгой Clean code, но примеры там на java. Так вот, вопрос заключается в том, что можно ли эту книгу читать не только джавистам?

    Язык значения не имеет, но конкретно по этой книжке, сперва прочитайте эту рецензию.
    Ответ написан
    Комментировать
  • Как подключиться один раз к базе?

    @Vitsliputsli
    Можно ли подключиться один раз к базе mysql и дальше делать с этой базой любые запросы?

    Можно.

    Если "документы .php" - это файлы используемые одним процессом php, то только так и надо. Если нужно чтобы разные процессы использовали одно подключение к БД, то это вопрос не к php, а к тому кто будет поддерживать это соединение и шарить на процессы php. Есть persistent connection на стороне СУБД, но его лучше не использовать, т.к. не всегда оно корректно работает. Есть всякие ProxySQL которые могут это организовать, это и есть оптимальный вариант.
    Ответ написан
    Комментировать
  • Функции по "Чистому коду" - нужно ли это?

    @Vitsliputsli
    Не совсем так, имеется ввиду создавать функции на все бизнесовых конструкции. К примеру, вам нужно взять хеш от чего-нибудь, вы можете это сделать одной языковой конструкцией, но когда в будущем понадобится поменять механизм хеширования, нужно будет править во многих местах. Поэтому оборачиваете это функцией и все обращения в коде только к ней. И вопрос не только правок, вы лучше контролируете код, зная что вот это, делает только конкретная функция, а не абы как и как кому захотелось.
    Ответ написан
    3 комментария
  • Работает ли logrotate без cron?

    @Vitsliputsli
    Почему нет? Cron без разницы что запускать, уберите logrotate из запуска cron и добавьте туда, куда посчитаете нужным.
    Ответ написан
    6 комментариев
  • Почему не работает итерация?

    @Vitsliputsli
    Как и написано в ошибке: An iterator cannot be used with foreach by reference - итератор не может использоваться в foreach через ссылку.
    mysqli_query возвращает итерируемый объект, т.е. объект, который имеет метод для получения итератора, который знает как итерировать объект. При итерации foreach обращается к соответствующему методу итератора, который возвращает нужное значение. Т.к. это просто значение, а не свойство объекта, обратиться по ссылке к нему не получится.
    Ответ написан
    Комментировать
  • Как присвоить вычисленное значение константе?

    @Vitsliputsli
    Это ограничение языка, возможно использование только простых выражений для объявления констант. Под простыми подразумеваются использующие операторы (например, конкатенация), но не функции (как в вашем примере). Хотя в документации об этом четко не сказано.
    Что касается остальных комментариев здесь, то нет, это не переменная, т.к. никто не пытался изменить значение. А использование других констант в объявлении константы вполне допустимо, в том числе и магических констант.
    Ответ написан
    Комментировать
  • Как настроить передачу данных между socket server и client?

    @Vitsliputsli
    Почему если fread() стоит раньше шем fwrite(), то консоль вообще ничего не показывает. А если fread поставить ниже fwite() то консоль выводит $msg.

    Вы запускаете сервер и он ждет подключения. Запускаете клиент он подключается к серверу. Затем сервер начинает слушать сокет $msg=fread($connect,1024). Если клиент после подключения сделает fwrite($socket_client,$ENQ), то отправит на сервер строку $ENQ, сервер примет ее, выведет на экран и закроет соединение. Если вместо fwrite напишите $msg= fread($socket_client, 1024), то клиент будет слушать сокет. В итоге, сервер и клиент оба слушают, оба ждут передачи, а так как никто из них ничего не шлет, то будут это делать до бесконечности.
    Ответ написан
    Комментировать
  • Где применяются key(), next(), current()?

    @Vitsliputsli
    Если мы говорим про итерирование стандартных массивов php, то эти массивы - двусвязные списки, и их перебор наиболее эффективен при использовании указателя, а не обращения по ключу. Поэтому перебирать их следует с помощью итераторов (либо foreach, либо ООП итераторы, либо процедурные итерационные функции next(), prev(), reset() и т.д.). В js простые массивы устроены иначе, поэтому и работать с ними рекомендуется по-другому.
    Для простого перебора слева направо всего массива достаточно foreach, но могут быть и более сложные варианты, тогда задействуются другие способы.
    Насчет while(key($user_ar)), уже написали: while проверяет условие на true/false, если key($user_ar) = 0, то после динамического преобразования в bool, это будет false.
    Ответ написан
    Комментировать
  • Везде ли нужно проверять на существование элемента в массиве?

    @Vitsliputsli
    Вы описываете 2 стандартных подхода:
    1) падаем в ошибку при любой непонятной ситуации;
    2) при непонятной ситуации пробуем продолжить работу, если это возможно.
    1 подход применяется в тех местах которые работают критически важными бизнесово данными. 2 подход для маловажных вещей, которые не способны исказить вещи из предыдущего предложения.
    Т.е. в большинстве случаев нужно падать в ошибку, и только если знаете, что ошибка не несет никакого серьезного аффекта (к примеру выводить текст на экран жирным шрифтом или нет), то можно продолжать работу.
    Ответ написан
    Комментировать
  • Как сделать удаление sed от переменной до конца строки?

    @Vitsliputsli
    Если необходимо удалить строки с номера в check до конца файла, то:
    sed -n "1,$((check-1))p"
    Ответ написан
    Комментировать
  • Есть ли lazy mode в регулярных выражениях AWK?

    @Vitsliputsli
    Если нужно обязательно через ip link show и awk:
    ip link show | awk '/185.230.140.160/{print p $0; p=""; next} {p=$0 ORS}'

    через ip link show и grep:
    ip link show | grep -B1 185.230.140.160
    Ответ написан
    Комментировать
  • Как идеально построено взаимодействие между фронтэнд и бэкэнд разработчиками?

    @Vitsliputsli
    Как уже ответили, смотреть в сторону swagger.
    Но даже без него, проблемы странные. На данный момент, все выглядит так, что бек взвалил на себя работу по отладке фронта, т.е. совсем не его работу, и зашивается. А фронт вместо того, чтобы работать, плюет в потолок, спихивая вину на бек, что у того, что-то не работает.
    Чтобы протестировать ему свою работу, он вынужден разворачивать на локальной машине еще фронтэнд и билдить его каждый раз, логиниться и там тестировать как все работает. Частенько он сталкивается с проблемами, что на фронтэнде не все работает без ошибок, а ему приходится думать по вине неправильности работы api это или по другим причинам.

    Абсолютно не нужно, ни разворачивать фронт, ни думать что там не работает во фронте и по какой причине. У бека и фронта есть задача по реализации api в ней описано, как обращаться и что должен возвращать каждый метод. Соответственно, бек проверяет работоспособность api путем отправки запросов (через тот же Postman), и тесты тут будут не лишними. Если ошибка обнаруживается на фронте, то к беку летит баг, куда обращались, что получили в ответ, что ожидали получить.
    Фронтэнд... Если какая ошибка то у него работа останавливается и он пишет просто в трелло "не работает метод такой то..."

    После этого мокирует данный метод и работает дальше.
    Ответ написан
    Комментировать
  • Что популярнее по вакансиям Go или Node.JS?

    @Vitsliputsli
    Node.js, все таки это javascript, для фронтендера удобнее. Разрабатывать на Go медленнее, чем на Node.js, PHP, python, поэтому для бека обычно выбирают последние, а там где нужна высокая производительность выбриают Go, причем точечно, редко на весь проект.
    Аргумент "очень молодой" странный, если имелось ввиду что слабо распространен, то нет - точечно, там где нужна высокая производительность применяется часто уже сейчас.
    Ответ написан
    Комментировать
  • Как удалить скрытые коммиты с GitHub?

    @Vitsliputsli
    Вы хотите странного, если коммиты делались, почему это не отображать?
    Но если очень хочется, при подобных действиях коммиты не удаляются, в дереве они не отображаются, т.к. ни к чему не привязаны. Чтобы удалить коммиты используйте git reflog expire или git reflog delete.
    Ответ написан
    Комментировать