Задать вопрос
  • Как на 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.
    Ответ написан
    Комментировать
  • Почему мои SQL запросы неправильные?

    @Vitsliputsli
    1. Вы пишите ORDERS_ID = 'гречка', по ТЗ "ORDERS_ID — ID заказов, int;"
    2. Вы пишите Orders.ORDERS_ID = Users.USER_ID, по ТЗ "ORDERS_ID — ID заказов, int; USER_ID — ID пользователей, int;", т.е. совсем разные вещи, нет смысла по ним соединять таблицы.
    3. Вы пишите EMPLOYEE_ID = 'менеджер', по ТЗ "EMPLOYEE_ID — ID сотрудника, int;"

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