Задать вопрос
  • Нужно ли хорошо разбираться в алгоритмах джуну?

    @Vitsliputsli
    Часто ловлю себя на мысли что не сразу могу описать решение задачи в виде кода

    А сразу и не надо. Это только поначалу ощущение, что нужно сразу бежать писать код. Кодинг лишь одна из стадий разработки, зачастую не самая долгая, да и не самая интересная. И некое знание алгоритмов вряд ли здесь поможет, просто нужна тренировка.
    Алгоритмы крайне важны для определенных типов задач, причем их не надо учить, просто нужно знать какие есть типы, чтобы при необходимости было понятно что искать. Прочитайте книгу "грокаем алгоритмы", это не перегруженная терминами нудятина, читается очень легко, и даст представление об основных направлениях.
    Ответ написан
  • Как сделать поиск в строке с разделителем в mysql?

    @Vitsliputsli
    Не 10 запросов, а 10 find_in_set. Или 1 регулярка.
    Но лучше, нормализуйте базу.
    Ответ написан
    1 комментарий
  • Как перехватить все существующие типы исключений?

    @Vitsliputsli
    Я их ловлю не для того, чтобы вывести, а чтобы отправить себе в телеграм.

    Тогда просто настройте парсинг логов. Держать такую логику в обработчике исключений сомнительная затея, не говоря уже о том, что ошибка может произойти до регистрации обработчика, или в самом обработчике.
    А лучше настройте нормальную визуализацию ошибок, например Elastic+Kibana, а там уже по создавайте алерты по которым будут кидаться сообщения в телеграм. В сообщении будет просто ссылка на лог в Кибане, где можно будет увидеть не только ошибку, но и что ей предшествовало.
    Ответ написан
  • Почему PHP не исполняется построчно, хотя он интерпретируемый?

    @Vitsliputsli

    Интерпретируемые языки исполняются построчно

    Неа, интерпретируемые языки это те, которые исполняются не машиной, а программой-интерпретатором.
    Работа php скрипта начинается с парсинга кода. Проводится лексический и грамматический анализ. Будет ли использоваться какой-либо промежуточный байткод здесь пока не важно.
    В вашем примере, php парсер обнаружил неизвестную продукцию и сразу же кинул ошибку. Можно было, конечно, выполнить код до последней корректно определенной продукции, но зачем? Php старается уходить от устойчивости к стабильности, т.е. от "отработать хоть както" к "отработать обязательно корректно". "Хоть както" все равно можно, но это должен быть сознательный выбор.
    И, хотя в php нет предварительной компиляции, тем не менее ошибки синтаксиса легко обнаруживаемы при запуске, поэтому логично о них сообщать сразу.
    Что касается, зачем анализировать весь код, а не построчно, то это тупо быстрее даже без байткода, и дает преимущества по оптимизации. Например, если вы объявили переменную и присвоили ей значение, а дальше в коде нигде ее не меняли, то php сделает ее константой.
    Ответ написан
  • В чем может быть причина разницы результатов запроса в PDO и SQL(разница формата дат)?

    @Vitsliputsli
    to_date(date_begin::text, 'DD.MM.YYYY'::text)

    т.е. у нас есть поле date_begin в формате datetime, а мы его кастуем в текст. Затем из текста по какому-то непонятному формату получаем дату.

    А все это работает скорее всего потому, что в php при подключении к БД используется формат даты 'DD.MM.YYYY', поэтому эта бредятина работает, а когда напрямую подключились к базе, там вероятно дефолтный 'YYYY-MM-DD' и получается чушь на выходе.

    В общем удалите эту дикость и посмотрите как в PostgreSQL нормально получить date без промежуточного преобразования в строку.
    Ответ написан
    1 комментарий
  • Должен ли RESTful API возвращать 200 OK при запросе списка записей категории, если сама категория не существует?

    @Vitsliputsli
    Если 204, то тело должно быть пустое, следовательно нужно будет дополнительно обрабатывать код 204. Либо не писать дополнительную обработку, и сделать как автор и предположил. По-моему, нет смысла в погоне заиспользовать как можно больше http-кодов, усложняя код, пусть и незначительно.
    Касательно несуществующего ресурса, если он действительно несуществует как бизнесовая сущность, тогда 404. Если же мы просто не нашли подходящих строчек в базе, т.е. ресурс существует, но это пустой список, то удобнее ответить как и в предудущей ситуации.
    Ответ написан
    Комментировать
  • Как сокращенно записать условие в случае если значение не пустое?

    @Vitsliputsli
    Если someFunction возвращает bool, то
    if (someFunction(.....)) {
      doSomething();
    }

    Если не bool, то прописать условие.
    Ответ написан
    Комментировать
  • Есть ли смысл делить сеть на подсети, если она будет поделена на vlan-ы?

    @Vitsliputsli
    Если это физически одна сеть, делить на подсети смысла нет, ну может только ради широковещательных по ip. Найти машину хоть в своей, хоть не в своей не проблема.
    Если это сеть на обычных свитчах, вводить программно устанавливаемый vlan нет особого смысла по безопасности, только разве для приоритезации трафика.
    А вот если сеть с нормальными маршрутизаторами и они будут контролировать vlan, то да, это будет вполне безопасно.
    Ответ написан
    Комментировать
  • Ratchet WebSocket прошу посмотреть код с точки зрения нагрузки?

    @Vitsliputsli
    Проверьте, эмулируйте соединения.
    Скорее всего остановится в районе 1000. Тогда проверьте колво файловых дескрипторов на процесс. Либо увеличивайте их колво, либо запускайте несколько процессов, либо используйте другой язык.
    10к-20к - это много для одного процесса, если подразумевается, что они все одновременно ломанутся за подключением, то большинство будет долго ждать, и не секунды, а минуты.
    В коде логики практически нет, так что не должно из-за нее напрягаться. Хотя я особо не вчитывался, условия с неявными преобразованиями, ужасные названия переменных (типа $arrayCount[$items]) очень сильно мешают вникать.
    Ответ написан
    Комментировать
  • Почему возникает утечка памяти в php-fmp?

    @Vitsliputsli
    Утечка - это когда процесс не пользуется памятью, но и не высвобождает. По вашему описанию, php-fpm прекрасно использует память для других скриптов, а также высвобождает при необходимости. Т.е. это не утечка.

    Чтобы утечка проявила себя более явно установил memory_limit = 1G

    Выделение памяти операционкой это медленный процесс, поэтому при возможности выгоднее запросить побольше, вы выставили лимит в 1G, почему бы не зарезервировать сразу 18%.

    В общем, если без перезапуска php-fpm рано или поздно получите ошибку недостатка памяти, тогда можно будет говорить об утечке.
    Ответ написан
    6 комментариев
  • Как проверить, что прислан валидный отпечаток FingerprintJS?

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

    @Vitsliputsli

    Есть несколько больших postgresql таблиц(по ≈ 1млн строк в каждой).

    Слейти их все в одну таблицу и не нужен вам никакой параллелизм.
    Ответ написан
    Комментировать
  • Как безопасно раздать пользователям веб-ресурс из частной сети?

    @Vitsliputsli
    1. Как раздать доступ к этому вебресурсу своим пользователям без установки "лишней мишуры" (типа VPN-клиента), чтобы от пользователя требовалось только перейти по ссылке в браузере.
    2. Как обезопасить подсеть организации от этого возможного вектора атак?

    Чтобы для пользователей подключение было прозрачно, чтобы не давать им креды от VPN, чтобы они не творили, что вздумается в этом VPN, а пользовтели с другой стороны в вашей сети, в любом случае нужен шлюз, который будет контролировать подключение. На нем:
    Запретите все входящие пакеты из подсети VPN по всем протоколам, кроме tcp (но не установление соединения), по icmp пусть отвечает только шлюз.
    Запретите все исходящие пакеты в эту сеть, кроме icmp и нужного ip по протоколу tcp на нужный порт (или даже протоколу http/https, если есть такая возможность).

    Есть ли решение элегантнее и проще?

    Проще, шлюз без форвардинга, на нем nginx как proxy. При желании и его можно закрыть от сети VPN.
    Ответ написан
    2 комментария
  • Как проверить параметр в объекте не нулл?

    @Vitsliputsli
    method_exists
    property_exists

    По-хорошему, объект определенного типа всегда должен иметь метод или свойство.
    Ответ написан
    Комментировать
  • Почему использование оператора '??' убирает ошибку об неопределенной переменной?

    @Vitsliputsli
    По мне так странное поведение, по логике оно должно обезопасить от index offset в массиве а не скрывать не определенные переменные

    Что в php, что в js, он делает одно и тоже, а именно проверяет, что левое выражение определено и отлично от null. Только вот в js, неопределено undefined бывает 2х видов, одно вызывает ошибку, а другое нет.
    Поэтому вся ваша логика строится на том, что вы так привыкли, при взгляде со стороны: 2 вида одного и того же, но с разным поведением - вот это действительно странно.
    Ответ написан
    Комментировать
  • Найти наиболее узкую* маску подсети для IP-адресов 1.2.3.4 и 5.6.7.8. *узкая маска – с максимально возможным префиксом подсети?

    @Vitsliputsli
    Все верно, если сомневаетесь откройте калькулятор для подсетей. Как и написано, считаете по битам, где начинаются изменения, получаем 5, а это и есть маска 248.0.0.0. Т.е. у нас подсеть 0.0.0.0/5
    Где первый адрес: 0.0.0.1 00000000.00000000.00000000.0000001
    Последний адрес: 7.255.255.254 00000111.11111111.11111111.11111110

    Быть может вы спутали маску с обратной маской, обратная здесь 7.255.255.255
    Ответ написан
    Комментировать
  • Откуда программа должна знать id для поиска обьекта c его помощью?

    @Vitsliputsli
    Именно поэтому поиск в бд возможен не только по id, но и по любому другому полю. Да и id необязательно суррогатен, он может быть натуральным, т.е. отображать идентификатор из реальной жизни.
    Ответ написан
    2 комментария
  • Как отправить сигнал из одного PHP процесса в другой без использования БД?

    @Vitsliputsli
    Все тоже как для любого процесса. Если это просто сигнал без данных, то можно использовать сигналы linux. Если нужно передавать данные, то разного рода сокеты tcp, udp, unix, web. Либо именнованные каналы-конвейеры linux.
    Если про специфичное, как уже сказали, есть shared memory.
    Все зависит от задачи, по вашим требованиям и запись в файл подойдет, если /tmp в оперативе.
    Ответ написан
    Комментировать
  • Калькулятор возвращает неправильный результат?

    @Vitsliputsli
    Для создания калькулятора самый простой и быстрый способ это перевести в обратную польскую нотацию и вычислять по ней. Это упростит парсинг в разы, и решит текущие проблемы. В том числе решит проблему разного приоритета операций.
    Ответ написан