Задать вопрос
  • Как получить четвертый элемент ассоциативного массива?

    Vamp
    @Vamp
    Массивы в php реализованы через структуру linked hash map. Так что порядок элементов сохраняется всегда.
  • Технический нейминг серверов. По какому принципу называть сервера?

    Vamp
    @Vamp
    Нравится эта идея. Но опять же хотелось бы покрывать не только физические, но и виртуальные

    Виртуальные как раз полезно называть логическими именами типа db1, mail3. Так как они могут легко мигрировать между физическими серверами и физическая привязка будет мешать. А вот назначение виртуалки меняется редко. Если виртуалку создают под почтовый сервер, то она будет до конца своей жизни почтовым сервером.

    Это получатся тоже самое, что и номер из таблицы m1,a0.

    Не совсем. Ваш номер из таблицы не несёт вообще никакой смысловой нагрузки и подходит только если вообще не к чему привязаться. То есть в ситуации когда сервера каждый день перезжают между стойками, ДЦ, городами и странами. Каждую неделю форматируются и превращаются из сервера БД в гипервизор, почтовый сервер или во что угодно ещё.

    Это супер универсальный вариант, подходящий к любой ситуации. Все остальные варианты так или иначе требуют некоторых усилий по поддержке, от которых никуда не деться.

    Ну и сервер может переехать на другую стойку, а это опять же путаница по хлеще чем мой пример с названием городов.

    Нет никакой путаницы. По крайней мере у меня сервер покидает стойку только если выводится из эксплуатации и его имя переходит новому серверу, который вставляется на замену. Но если ваша специфика предполагает частую перестановку серверов между стойками, то конечно тогда не стоит привязываться к номеру стойки и юниту в ней.

    Не бойтесь экспериментировать. С первого раза вы точно не придумаете идеальный нейминг. Это эволюционный процесс.
  • За Vulkan API будущее?

    Vamp
    @Vamp
    Александр Скуснов, тем, что он только на windows и xbox?
  • Как сделать проксирование на тот же домен в Nginx?

    Vamp
    @Vamp
    Денис Гончаренко, если IP динамический, то без костылей не получится, так как nginx производит резолвинг доменов только единожды в момент релоада конфигурации и дальше работает уже с IP адресом.

    Попробуйте костыль с переменной:
    server {
            listen          80;
            server_name     domain.com;
    
            resolver 8.8.8.8;
            set $backend "http://domain.com";
    
            location / {
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP  $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_pass $backend;
            }
    }
  • Как сделать проксирование на тот же домен в Nginx?

    Vamp
    @Vamp
    Опишите лучше проблему, которую вы пытаетесь решить таким странным образом.
  • Как правильно написать свой обработчик ошибок php?

    Vamp
    @Vamp
    IvanIF, будет то же самое как и при возникновении ошибки в любом другом месте - она попадёт в error_handler, превратится в ErrorException и полетит в ближайший catch блок.

    Вы можете делать вложенные конструкции
    try {
        // ...
    } catch (\PDOException $e) {
        try {
            // ...
        } catch (\Throwable $e2) {
            
        }
    }
  • Как правильно написать свой обработчик ошибок php?

    Vamp
    @Vamp
    IvanIF, у ErrorException есть поля для хранения имени файла и номера строки, на которой возникла ошибка. По сути ErrorException как раз и придуман для замены обычных ошибок на исключения.
  • Какие еще проекты сделать junior на php помимо дефолтных?

    Vamp
    @Vamp
    ivanivanov15122021, я наоборот считаю, что нужно начинать с хардкора. Когда меня спрашивают "что бы такое сделать для тренировки на пхп" я всегда отвечаю - "делай cms". Задача максимум. Во-первых её можно делать по частям, во-вторых, в cms есть работа с базой, файлами, регулярками, разработка архитектуры... чего там только нет. Практики будет выше крыши в совершенно разных областях. Ну и я избавлен от дальнейших вопросов "сделал, что дальше?" )). Если человек осилил создание cms, то что делать дальше он уже и так знает сам.
  • Как правильно написать свой обработчик ошибок php?

    Vamp
    @Vamp
    FanatPHP, \Throwable появился в 7.0, а неизвестно какое окружение у тс. Но ок, согласен. Надо приучать людей к современному php. А насчёт throw $e тут ещё вопрос. Может тс сделает обработку ошибки именно здесь.
  • Как настроить xdebug для докера на vps?

    Vamp
    @Vamp
    Александр Панков, ip адрес не меняется при рестарте. Только при пересоздании контейнера и то не всегда.

    Но если вы так часто переделываете контейнер, то можно открыть порт на бридже, в котором сидят контейнеры вашего compose проекта

    ssh -R 9003:172.23.0.1:9003 user@vpsaddr
    Соответственно xdebug.client_port=172.23.0.1

    Этот ip адрес поменяется только при пересоздании докер network.
  • Как настроить xdebug для докера на vps?

    Vamp
    @Vamp
    Александр Панков, не нужно пробрасывать, это делается только для входящих портов (когда трафик извне попадает внутро контейнера). А у вас исходящий порт (из контейнера на ваш комп). В моем ответе указаны все необходимые для достижения результата действия. Не нужно делать ничего дополнительно, сверх того, что я написал.

    Что выводит команда docker inspect ваш-контейнер | grep IPAddress?
  • Как настроить xdebug для докера на vps?

    Vamp
    @Vamp
    Выберите другой порт. Например, 9888. Тогда ssh проброс будет выглядеть несколько иначе
    ssh -R 9003:172.17.0.2:9888 user@vpsaddr и xdebug.client_port = 9888. На стороне phpstorm изменения не требуются, так как ssh будет пробрасывать коннекты на ваш локальный порт 9003.
  • Как происходит связывание с предыдущим узлом в LinkedStack?

    Vamp
    @Vamp
    Сергей Водаков, Брюс молодец. Написал хорошую книгу с правильными идеями. Одну из немногих, которые я советую людям.

    Но java изначально содержит в себе billion dollar mistake и ТС никуда от этого не денется. Он просто ещё не понимает всю глубину кроличьей норы нулов и полезность всех этих костылей для противостояния нулам. Поэтому и задаёт вопросы. Между прочим, правильные вопросы как для новичка.
  • ООП: Правильно ли архитектурно так делать?

    Vamp
    @Vamp
    topuserman, ну вообще не принято в dto делать логику. Dto объекты - просто удобный контейнер для данных.
  • Что за фигурные скобки в Java?

    Vamp
    @Vamp
    Василий Банников, в шарпе всё то же самое, только называется по-другому - статический конструктор, вместо блока статической инициализации.

    Вот только блок динамической инициализации там делать не стали. Но и в java он никогда не используется, поэтому разницы никакой по сути.

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

    Vamp
    @Vamp
    Вариант с Instant (а так же currentTimeMillis и другими методами, возвращающими календарное время) для измерения длительности процессов использовать не рекомендуется. Например, если на хосте между измерениями произошла синхронизация часов по протоколу NTP, то можно получить неадекватно большую или маленькую длительность измеряемого куска кода. А то и отрицательное значение. А если на основе данного числа принимаются какие-либо решения (например, в паттерне circuit breaker), то можно получить сбой на ровном месте.
  • Почему не работает dependency NametagEdit?

    Vamp
    @Vamp
    JiMoon, это не ошибка, а предупреждение. Прочитайте его внимательно. Там написано что конкретно случилось и что нужно сделать для исправления.
  • Как запустить 5000 потоков параллельно с GET запросами?

    Vamp
    @Vamp
    Иван Иванов, 10-15 - это совсем мало. Мне удавалось сделать 500 параллельных запросов (через guzzle) на машине гораздо более скромной, чем ваша. Вы скорее упретесь в ограничения на стороне прокси или сайтов, чем в своё железо.
  • Всегда ли нужно стремиться к неизменяемости объектов?

    Vamp
    @Vamp
    Никита, имеется ввиду сравнение объектов оператором == вместо Equals(Object). Но иммутабельность сама по себе не даёт такой возможности. Нужно ещё дополнительно обеспечить создание экземпляров вашего иммутабельного класса исключительно через кеширующую фабрику.
  • Java. Сокеты. Как заставить сервер постоянно слушать до нажатия кнопки?

    Vamp
    @Vamp
    Decaf, нужно для второго приложения выбрать другой номер порта. Нельзя создать ServerSocket на уже занятый кем-то порт.

    Либо закрыть ServerSocket в первом приложении перед созданием ServerSocket во втором.