Задать вопрос
  • На каком языке программирования писать сервер для игры?

    index0h
    @index0h
    prog199708, Как вариант можете начать с описания протокола клиент-сервер. Пока будете его описывать, многое прояснится. Например стоит ли вам "упаковывать" много сообщений за раз и отправлять по тику, либо отправлять по факту появления. Должно ли это дело работатть в браузере через веб сокеты, или у вас клиент полностью отдельным приложением
  • На каком языке программирования писать сервер для игры?

    index0h
    @index0h
    prog199708, ну, тогда хорошо напишите сервер, что бы выдерживал большую нагрузку и огромное количетсво запросов. а плохо не пишите.
  • Как синхронизировать в HttpFoundation глобальные переменные?

    index0h
    @index0h
    Tereverda, Еще раз, не нужно вам это.
    $_COOKIE содержит куки из текущего запроса клиента. Вы формируете ответ, добавляя в него новую куку.
    И в следующем запросе от клиента вы ее получите, а не в текущем. "Синхронизация" происходит как раз между запросами.
    Если вы так хотите проверить, а будет ли ваша новая кука отправлена клиенту, вытягивайте их из ответа
  • Как синхронизировать в HttpFoundation глобальные переменные?

    index0h
    @index0h
    Tereverda,
    Пример использования вы привели праивльный.
    Что касается глобально - забудьте это слово. Если вы хотите в конкретном месте проверить, а добавлена ли кука, передайте туда объект Response и уже внутри проверьте.
  • Как синхронизировать в HttpFoundation глобальные переменные?

    index0h
    @index0h
    Tereverda,
    Response - это компонент kernel верно?

    Ядро тут ни при чем. Что Symfony\Component\HttpFoundation\Request что Symfony\Component\HttpFoundation\Response - это составные части HttpFoundation. Этот пакет самодостаточен.
    с помощью Request только читаю данные?

    Верно. В некоторых случаях в Request действительно обновляется (например при процессинге роутинга), но это исключения.
    По хорошему получив объект Request в контроллере стоит сразу вытянуть из него все данные, что вы ожидаете, проверить и кастануть в необходимые типы.
  • Как написать свой аналог DOCS в Yii2?

    index0h
    @index0h
    vitaly_74, вы ничего не поняли от слова "совсем" ))) в написании гуглодоков Yii2 поможет на сколько же, на сколько отвертка в покраске стен. Судя по вашему тону, я обязан уточнить, вы там уроки сделали?
  • Как написать свой аналог DOCS в Yii2?

    index0h
    @index0h
    vitaly_74, вы ничего не поняли из моего ответа. Объем проекта уровня Google DOCS огромен, сотни если не тысячи человеко-лет.
    Вы откроете для себя много нового, если хотя бы попытаетесь отредактировать вордовский документ на пхп. Я уже молчу про то, что еще визуальный редактор потребуется.
    Yii2 вам тут не поможет, от слова совсем.
  • Как настроить многопользовательскую отладку через dbgp proxy?

    index0h
    @index0h
    Рекомендую посмотреть в сторону локальной разработки. Дев сервер - это прикольно, но времени он забирает много, плюс к тому вносит дополнительные риски.
  • Существует ли утилита, чтобы запускать несколько версий PHP в Ubuntu (вроде NVM для Node.js)?

    index0h
    @index0h
    Роми, в таком случае IDE стоит подстраивать под интерпретатор конкретного проекта
  • Дерево каталога на PHP, для очень большого проекта с большой нагрузкой?

    index0h
    @index0h
    Иногда лучший вариант - отказаться от деревьев, особенно когда дерево ресурсов с наследуемым правами разных пользователей.
    На одном из проектов на это дело было потрачено огромное количество времени, а профита практически нет. Бизнесу понадобилось несколько лет грызть кактус, что бы понять, что это было не нужно.
  • Как правильно покрыть тестами приведенный в примере код?

    index0h
    @index0h
    @HiDiv

    Так в том-то и дело, что по моей практике лучшие показатели (в плане гарантии работоспособности) дают "интеграционные тесты"

    Забавно, я сейчас работаю на проекте, в котором как раз такой подход и используется. Прошлый проект был покрыт практивески полностью юнитами и немного функциональными, а за интеграционные отвечали QA Auto.
    Интеграционные тесты - это конечно же классно, только false-positive и false-negative бывают довольно часто, дебажить и поддерживать подобные тесты, как правило на много сложнее. По опыту и того и другого могу с уверенностью сказать: интеграционные стоит отдать QA Auto.

    явно проверяется синтаксис "сгеренированного" sql-запроса и его "логическая" правильность.

    ухты, прикольно, а как вы проверяете синтаксис sql запроса? Я так понимаю это какой-то парсер, типа доктриновского dql?
    Что касается логической правильности юнитом вы ее не покроете, только явным дерганьем БД.

    С другой стороны есть отрицательный опыт, когда я полностью покрыл код модульными тестами (каждый метод в отдельности), но после выкатки на стейдж сразу все развалилось!

    Баги бывают, что поделать. Видимо ваш способ покрытия не очень))

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

    Верно, это очень дорого. По этой причине я бы рекомендовал вам следующий подход:
    - код в рамках только php, без внешних вызовов покрывать unit тестами. Например контроллер получает некий запрос, все зависимости, которые он использует мокаются. В моках проверяется, что они вызваны с правильными аргументами, так же проверяется возврат из контроллера. Грубо говоря по белому ящику.
    - код, который взаимодействует с внешними системами, типа БД, разнообразные клиенты API и т.д. покрывать функционально. Т.е. сам sql запрос покрывать смысла нет, а вот результат его выполнения стоит проверять с заранее заданными фикстурами.
    - интеграционные тесты лучше отдать QA Auto.

    Реально получается, что время на разработку автотестов приближается (если не больше) к времени разработки самого функционала...

    Это норм, при высоком покрытии тестами у вас кода тестов будет в 3+ раза больше, чем рабочего кода.

    Это неприемлемо для большинства коммерческих проектов!

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

    index0h
    @index0h
    насколько я понимаю, это "видение отдельной группой лиц".

    Эти правила написаны кровью и потом))

    Есть и другие источники, которые заслуживают доверия, например, книги Роберта Мартина и С. Макконнелла про чистый/совершенный код...

    Это тоже виденье отдельной группы лиц))
    Все вот эти практики SOLID, GRASP, всякие паттерны придуманы, что бы бороться с неизбежно возрастающей сложностью проекта. Основная проблема сложности в том, что она никуда не девается, а только меняет своё рсположение. Если вы будете каждую операцию выносить в отдельный метод - безусловно, каждый метод отдельно будет упрощаться, но сложность в целом перейдет выше, на уровень взаимодействия этих методов. То же самое происходит, когда вы выделяете некую функциональность в отдельный класс, сложность переходит на уровень взаимодействия классов и т.д.

    В остальном, с учетом потребности в моках, данное разделение мне не кажется избыточным.

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

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

    $db и $timedate на самом деле это вообще глобальные переменые-синглетроны и только в последнее время стали рекомендовать использовать getInstance, чтобы не зависеть от них.

    Это очень печально.

    Ну, а передавать их каждый раз в конструктор параметрами, зная все это как-то не очень...

    Очень зря вы так думаете.
  • XSS в обход sprintf (Задание из CTF, никакой чернухи)?

    index0h
    @index0h
    sprintf занимается только выводом по шаблону, не более и не менее того.
    т.е. если в выводимой строке будет находится нечто опасное - оно как есть будет выведено.
    экранирование, или удаление тегов, что реально может защитить от xss - это полностью отдельная функциональность. которая не входит в задачи sprintf.
  • Можно ли реализовать "умный" поиск по БД?

    index0h
    @index0h
    Drno,
    спорить не буду, не моя сфера. но откуда там возмется большой список слов то?

    вы когда в google запрос отправляете используете только 1-2 слова, или больше?

    И разве нельзя просто ограничить запрос по количеству слов?

    Конечно можно, но зачем? Возьмем для примера ограничение 2 слова, пользователь вводит "полнотелый кирпич лицевой красный", вы ему выдадите все по словам "полнтлеый кирпич", если он поменяет порядок слов - выборка изменится, но все равно не будет достаточно ограничена. Что не правильно и ухудшает пользовательский опыт.

    Использование в данном случае большого запроса с учетом каждого слова (без пунктуации и связок типа "и", "или", "а", ...) имело бы больше смысла.
  • Можно ли реализовать "умный" поиск по БД?

    index0h
    @index0h
    Drno,
    Берем оба слова в переменные, делаем по каждому выборку из базы, соединяем выборку в 1 список, отдаем ответ

    Отличная идея, что бы вывести бд из строя достаточно передать большой список слов))
  • Нужно ли фильтровать глобальные переменные в PHP?

    index0h
    @index0h
    Иван василичь, реомендую ознакомиться с https://github.com/index0h/php-conventions тут правила для прям сурового энтерпрайза, но для мелких проэктов они не то, что бы навредят
  • Нужно ли фильтровать глобальные переменные в PHP?

    index0h
    @index0h
    @jcmax
    Заюзайте https://symfony.com/doc/current/components/http_fo... в точке инициализации создавайте объект Request и уже его ганяйте по всему проекту, где это необходимо
  • Как добраться до сервиса из Entity?

    index0h
    @index0h
    Какую задачу вы пытаетесь решить?
  • Поможет ли суррогатный ключ увеличить скорость вставки в таблицу?

    index0h
    @index0h
    antiiii, FanatPHP говорит верно. Если у вас уже все прям так - лучше И докинуть ОЗУ И порезать индекс.
    Как вариант - стоит в принципе часть данных вынести в архив с самым минимумом индексов, грубо говоря PK и все.