Задать вопрос
  • Объясните, почему так работает код?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    потому, что воспринимает как десятичную точку
    2000.123

    Вот так, например, сработает: 2000.0.toLocaleString() — тут уже понятно, что не десятичная точка. Но я — за скобки!
    Ответ написан
    2 комментария
  • Как организовать хранение покупок при продаже услуг с разными характеристиками?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега MySQL
    У меня был проект с такой задачей (и тоже ресторанный). Особенностей у него три:
    • "магазины" могут закрываться, а набор товаров полностью меняется несколько раз в год;
    • заказов относительно немного, 200-400 тысяч в год;
    • история нужна для личного кабинета и набор полей там довольно ограничен.

    Исходя из этого, выбрали именно JSON, в который складывались все связанные модели ("магазин", "товар" и т.п.) в сериализованном виде. В таком виде они хранятся год-два на всякий случай, потом старые записи переносятся в архивную таблицу, где только реально используемые на странице истории поля со скалярными типами (путь к картинке, название "магазина" и т.п.).

    Но тут надо бы реальную задачу понимать. Может, не надо джойнить, а проще денормализовать данные и вести отдельные таблицы какой-то статистики? Или просто отдельно хранить те поля, по которым предполагается джойнить, а всё остальное пихать в JSON?
    В отрыве от конкретных задач вариант широкой "дырявой" таблицы мне кажется самым плохим, вариант с таблицей покупки, к которой полиморфично (properties_type, properties_id) привязаны таблицы со значениями свойств каждого типа сущности выглядит немного лучше.
    Ответ написан
    2 комментария
  • Как вывести теги из таблицы базы данных?

    sslion
    @sslion
    explode - читай
    Там ничего сложного в логике...
    Ответ написан
    Комментировать
  • Почему методы массива могут принимать параметр колбек, а промис нет?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Либо
    Promise.all([4, 5, 6])
      .then(console.log)
      .catch(console.log);

    либо
    Promise.all([4, 5, 6])
      .then(data => console.log(data))
      .catch(err => console.log(err));
    Ответ написан
    Комментировать
  • Почему docker при запуске не может найти пакет xdebug?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Пакет называется php-xdebug, а не xdebug, но даже если указать имя правильно пакет не установиться, потому что в репозитрии его на самом деле нет. Устанавливай его из pecl или используй Debian в качестве базового образа и устанавливай пакеты из репозитория https://packages.sury.org/php/ (я бы даже рекомендовал делать так потому что образ получиться меньше размером).
    Ответ написан
    Комментировать
  • Как в js обновить список нод в querySelectorAll и их EventListener после удаления ноды?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    слушайте событие клика как jQuery – не на каждой кнопке по отдельности, а один раз на общем родителе: на этом .show-cart

    В обработчике проверяйте, по чему именн, там, где-то в дочерних, кликнули (см. event.target). Если у кликнутого есть класс .delete-item, то действуем далее.

    Слушать на общем родителе – называется волшебным термином «делегирование событий».
    Ответ написан
    1 комментарий
  • Как уменьшить вес gif с помощью php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    GIF использует lzw-сжатие без потерь. Уменьшить размер файла можно только убрав часть информации, то есть уменьшив разрешение изображения или количество цветов.
    Ответ написан
    1 комментарий
  • Почему не работает toLocaleString() после toFixed()?

    IvanU7n
    @IvanU7n
    nothing interesting here
    потому что Number.toFixed() на удивление возвращает строку, для строки нужно что-то типа .replace('.', ',')

    ПЛЮС: ну или сношения с Math.round() и потом .toLocaleString()
    да и .toLocaleString() использует локаль браузера, которая не всегда бывает нужная, да ещё и вставит пробелы или запятые между разрядами
    уж если нужен конкретный формат, то ЕМНИП .toLocaleString() принимает локаль в качестве параметра
    Ответ написан
    6 комментариев
  • Какой язык программирования выбрать для разработки астропроцессора?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    В принципе любой. Если ближе к образцу - то он на JS. Для веб полно графических либ и движков.
    Ответ написан
    3 комментария
  • В чем может быть причина сильного увеличения длительности ответа запросов при установке Load Balancer на 2 сервера со стаком MySQL, PHP, Nginx?

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

    Рекомендую вам найти слабое звено, начиная с самого конца:

    1. Создайте тестовое окружение в тех же облаках, с такими же компонентами, с идентичным конфигом и воспроизведите поведение при помощи какой-нибудь утилиты, которая будет нагружать эту конфигурацию, пуляя в неё запросы с необходимой частотой.

    2. Когда тестовое окружение будет так же тормозить, начните искать слабое звено. Рекомендую начать с конца.

    3. Замените весь ваш прекрасный PHP код на один единственный файл index.php с Hello World. Если проблема уйдёт, значит виновата ваша программа. Чтобы найти место уже в программе, рекомендую запустить Prometheus + Grafana, установить библиотеку в ваш PHP, и писать в мониторинг длительность каждой сложной операции (длительность всего запроса, длительность запросов к базе, длительность запросов во внешние API, длительность каких-то подозрительных циклов, алгоритмов и т.д.) Так вы сможете найти точное место в программе, где происходит затуп. Это надо будет сделать и на проде после решения проблемы, чтобы вы всегда знали, что происходит с вашим проектом.

    4. Если проблема не в программе, проверьте конфиг PHP. Может быть, у вас там тупо мало воркеров включено, может быть не включён OPcache и т.д. Почитайте, как правильно настраивать PHP на проде.

    5. Если проблема не в этом, то... https://youtu.be/bq3HksAwb2Q?si=NsBZeYeHsq69JW6o
    Ответ написан
    Комментировать
  • Влияет ли на быстродействие и потребление памяти, отказ от обращения к свойствам класса, внутри методов?

    @iljaGolubev
    Быстрее будет присвоение $someProperty = $this->someProperty до цикла.
    Но это именно про приведённый код с учетом, что цикл 1000 внутри someMethod. Прирост скорости настолько незначительный, что в реальных условиях может выиграть и echo $this->someProperty;
    Но ведь в реальности такой код не имеет смысла...
    Если уж заменять, то с реальными циклами и требуемым окружением.

    По памяти разницы нет - создание новой переменной без изменения не выделяет дополнительную память.
    `CV` - compiled variable == ссылка на реальную переменную.

    // для echo $someProperty;
    0000 EXT_STMT
    0001 T0 = FETCH_OBJ_R THIS string("someProperty")
    0002 ECHO T0
    0003 EXT_STMT
    
    // для echo $this->someProperty;
    0000 EXT_STMT
    0001 T1 = FETCH_OBJ_R THIS string("someProperty")
    0002 ASSIGN CV0($someProperty) T1
    0003 EXT_STMT
    0004 ECHO CV0($someProperty)
    0005 EXT_STMT


    Мини-микро-нано прирост скорости возможет только из-за того, что в цикле для `echo $someProperty; ` будет выполняться только ECHO, тогда как для `echo $this->someProperty; ` две инструкции FETCH_OBJ_R и ECHO.
    Ответ написан
    Комментировать
  • Как с помощью девтулзов определить что меняет текст HTML элемента?

    @its2easyy
    Если в инспекторе удалить textarea, то можно увидеть что блок с кодом со страницы не пропал. Если это повторить ещё несколько раз, каждый раз тыкая в то место, где визуально находиться элемент, то можно дойти до .react-code-lines где и лежат блоки с текстом. А через поиск они не находятся, потому что они не идут одной непрерывной строкой
    670e7aa26dea8421875672.png
    Ответ написан
    1 комментарий
  • Как правильно передать строку из js в php при помощи ajax?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Ответ написан
    Комментировать
  • Как отфильтровать по вложенной коллекции laravel?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Красиво у каждого своё, плюс оно зависит от нюансов проекта.
    При условии, что мы не знаем заранее количество ключей lvlX, я бы написал так:
    // Если нужно полностью удалить элемент, внутри которого есть хотя бы один нулевой lvl
    array_filter(
        $a,
        function (array $item): bool {
            foreach ($item as $key => $value) {
                if (preg_match('~^lvl\d+$~', $key) === 1 && ($value['count'] === 0 || $value['min'] === 0 || $value['max'] === 0)) {
                    return false;
                }
            }
    
            return true;
        }
    );
    
    // Если нужно удалять только сами нулевые lvl
    array_map(
        function (array $item): array {
            return array_filter(
                $item,
                function ($value, string $key): bool {
                    return preg_match('~^lvl\d+$~', $key) !== 1 || ($value['count'] !== 0 && $value['min'] !== 0 && $value['max'] !== 0);
                },
                ARRAY_FILTER_USE_BOTH
            );
        },
        $a
    );

    Код нужно адаптировать в зависимости от того, где там у вас реально коллекция, а где массив, но это уже тривиальная задача.
    Ну и здесь предполагается, что структура каждого lvl фиксированная, то есть там всегда есть указанные ключи, чтобы не загромождать код проверками isset().

    Ну а самое красивое, на мой вкус, переделать структуру на более адекватную:
    [
        [
            'name' => 'Alex',
            'levels' => [
                ['index' => 1, 'count' => 5, 'min' => 12, 'max' => 5],
                ['index' => 2, 'count' => 0, 'min' => 5, 'max' => 7],
                ['index' => 3, 'count' => 18, 'min' => 0, 'max' => 8],
            ],
        ],
        [
            'name' => 'Igor',
            'levels' => [
                ['index' => 1, 'count' => 5, 'min' => 12, 'max' => 5],
                ['index' => 2, 'count' => 0, 'min' => 5, 'max' => 7],
                ['index' => 3, 'count' => 18, 'min' => 0, 'max' => 8],
            ],
        ]
    ];
    Тогда и код фильтрации будет простым и понятным.

    Если же ключи lvl1, lvl2 и lvl3 фиксированные, то, на мой вкус, лучше их захардкодить, это тоже значительно упростит жизнь в будущем, когда вы этот код откроете через пару лет и будете пытаться вспомнить что это за нагромождение из map, filter и регулярок.
    Ответ написан
    2 комментария
  • Как настроить ssh подключение для рута без пароля?

    akelsey
    @akelsey
    serg-novoch, непонятно зачем в рута лезть ключем из папки рут, логично что пользователь feanor не имеет доступа в /root на хосте где лежат ключи.

    логичнее конечно отказаться от подключения к руту, оно вроде как нафиг не нужно, но в крайнем случае если уж приспичило, скопировать ключ
    /root/.ssh/prod в /home/feanor/.ssh/prod_root
    дать ему права для пользователя feanor и поправить в config путь к ключу
    Ответ написан
    1 комментарий
  • Как передать большой файл по ssh без промежуточного хранения?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    tar -cz /home/target | sshpass -p 'pwd' ssh -p 23 username@server.com 'cat > /home/backups/destination.tar.gz'


    Все должно так работать. Если у вас ошибка от tar, то может это не stdout а stderr?
    Приведите текст что там не так. Файл в конечно счете правильный выходит?
    Ответ написан
    Комментировать
  • Почему ajax выполняется по очереди?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вангую - на бэке PHP и сессии. Причём, открываются сессии в начале скрипта, а закрываются никогда, то есть по завершении скрипта.
    Тогда пока работает скрипт, файл сессии держится открытым и второй скрипт в той же сессии будет ждать освобождения файла. Файл сессии надо освобождать как можно раньше. session_start, считали нужные данные и сразу же session_write_close. Если надо что-то изменить в сессионных данных в процессе работы скрипта, то снова открыть сессию, записать изменения, закрыть.
    Ответ написан
    Комментировать
  • Почему не работает подсветка php в vs code?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    На первом скрине не PHP-код, а обычный текст, так как нет открывающего тэга <?php
    Цвет отдельных участков кода определяется цветовой темой, Settings -> Workbench -> Appearance -> Color Theme.
    Ответ написан
    Комментировать