Задать вопрос
  • Как тестировать запросы и ответы из базы данных через phpunit?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Мне кажется, что найденные варианты работают не так. Используются они оба, а какой именно - зависит от того, что именно вы тестируете - запрос или ответ.

    Если говорить про "запросы к БД", то для таких тестов "массив с данными" использовать просто глупо. Это получится какой-то формальный тест: "проверяем, что метод возвращает массив из трех строк - и тут же возвращаем этот самый массив". В чем смысл? Если вы тестируете запрос к БД, то и надо тестировать запрос к БД. По-другому никак.

    Здесь я отвлекусь, и порассуждаю на тему того, что на самом деле тестирование - это гораздо более трудоёмкая задача, чем обычно считается. И как следствие, большая часть тестов - это такая вот туфта. Либо тест заранее возвращает нужные данные, либо тестирует один-два кейса. А вариантов неправильных входящих данных ведь может быть огромное количество. То есть по-хорошему на такой заведомо сложный (и принципиально неделимый!) метод нужно десятка два тестов.

    И сюда же использование для тестов БД другой системы. Например основная БД MySQL, а для тестов используется Sqlite. Тут сразу можно сказать, что это профанация. Различие даже в какой-то одной настройке БД может повлиять на результаты запроса (и теста как следствие) - а тут и вовсе используется совсем другая БД.

    С другой стороны, работу с БД скорее стоит тестировать не в юнит тестах, а скажем в интеграционных. Но не будем углубляться.


    Массив же "с данными, симулирующими ответ из базы данных" используется на следующему уровне, там где требуется "ответ из базы данных". Взьмём метод, который использует данные, полученные из БД. Например авторизация юзера. Этот метод должен не сам лезть в базу, а дёргать отдельный метод, вполне возможно, что совсем другого класса. И вот чтобы протестировать авторизацию, вы и мокаете метод для работы с БД, и из этого мока возвращаете тот самый массив без всякого обращения к бд.

    Здесь нелишне будет напомнить название доклада с одной из последних конференций по пхп. Дословно не помню, но что-то вроде "Делайте методы как можно короче. Ваши тесты скажут вам спасибо." Собственно, именно при тестировании очень быстро начинаешь понимать удобство атомарных (то есть выполняющих какую-то одну простую операцию) методов. А без тестов пройдёт довольно много времени, пока не понадобится этот длинный метод отрефакторить, и по итогам менять кучу кода, который его вызывает.

    Так что разбивайте ваши длинные методы на мелкие, и тогда вопрос, как их тестировать, в большинстве случаев отпадёт сам собой.
    Ответ написан
    1 комментарий
  • Почему не отправляет формы в телеграм?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Кажинный раз одно и то же.
    Для начала выберем самый извращённый способ отправки HTTPs-запроса через fopen.
    Затем вместо нормальной обработки ошибки выведем одно слово Error.
    Ну и напоследок будем гадать что бы это слово могло за собой скрывать.

    Перепишите запрос на curl, включите вывод ошибок, выводите полностью пришедший от сервера ответ и не гадайте по одному слову.
    Ответ написан
    Комментировать
  • Почему не отправляет формы в телеграм?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Возьми curl (а лучше сразу guzzle) вместо fopen и читай нормальные http ошибки, там все напишут
    Ответ написан
    Комментировать
  • Есть ли способ для быстрого перевода готового html сайта в мобильную версию?

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Нагрузка на ЦПУ при этом пике 30-40%
    это че за нагрузка при 3рпс? Профилирование нагрузки - первый шаг, балансер и горизонтальное расширение это шаг стопитьсот, когда вы упираетесь в потолок того что может вытянуть сервак. 90% что проблемы в количестве (и качестве) запросов к бд, крайне маловероятно что код у вас настолько сложный, что не вытягивает...

    обращается к основной БД через коннект по приватному IP адресу в сети серверов Амазон.
    Тестом запустите подряд 20-30 разных запросов с разным размером ответа, каждый замерьте, подозреваю что будете не очень приятно удивлены...

    запросы на дополнительном сервере начинают отрабатывать по 5, 15 а иногда и 50 секунд.
    А на основном все остается норм? В любом случае - профайлинг наше все, + под нагрузочным тестированием хоть как-то.
    Ответ написан
    2 комментария
  • Как проксировать запросы к API?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    При использовании postman ничего проксировать не надо, он делает запросы без ограничений. Т.о. ошибки у вас возникают не по этой причине, а из-за кривых запросов и\или кривого сервера. Пытайтесь дальше.

    P.S. Ограничения есть в браузере, если вы будете писать клиентское приложение то изучить, что такое CORS вам придётся в любом случае.
    Ответ написан
    Комментировать
  • Почему низкая нагрузка на ГП и ЦП в некоторых играх?

    @Aleksvel
    Процессор отличный , видеокарта отличная , память и ssd здесь вообще не причём .
    А вот материнская плата может дать проблемы . У неё зона VRM без охлаждения . На плате 8 кубиков - это дроссели а рядом с ними по 3 штуки - это полевые транзисторы , вот им нужно охлаждение , у вас они без радиаторов , а рассколятся они могут больше 100градусов при бусте процессора 4200гц.и проц ведёт себя не стабильно .
    Есть комплекты для самостоятельной установки охлада , или поменяйте процессорный куллер с башенного типа на обычный , который будет обдувать зону VRM питания процессора.
    Ответ написан
    1 комментарий
  • Как организовать умное кеширование MYSQL?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Как всегда, в заголовке одно, а в тексте вопроса совсем другое. И никакое кэширование автору делать на самом деле неохота - это же переделывать всё придется.

    При этом чего именно нужно автору, из вопроса непонятно. То ли проблема с потреблением памяти, то ли скорость запросов, то ли вообще никаких проблем нет, а просто поговорить на с кем.

    Ускорение запросов решается за счет создания индексов. Не "есть индексация", а конкретные осмысленные индексы для каждого используемого запроса. Если конкретный запрос тормозит, ему надо сделать explain, и на основе полученного результата подумать и реализовать индексы.
    При этом нормально индексы работают только если все они помещаются в памяти. А это значит, что по поводу "7 гигов занято" надо не плакать а радоваться.
    Существование "таблиц" для новых и старых сообщений в рамках одной таблицы - это партиционирование, например по дате. Но опять же, сначала надо определиться задачей, которую мы решаем.
    Ответ написан
    7 комментариев
  • Как создать ЭлементДанных "среднее PING" в Zabbix?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Среднее значение считается функцией .avg(604800) > -1, цифра - это количество секунд в неделе (7 дней), а условие > -1 - ну что бы хоть что-то в условии было.
    Что бы событие срабатывало раз в неделю - можно поставить интервал "По расписанию", и указать конкретный момент времени в неделе, когда элемент данных активен. Разумеется в условии восстановления нужно написать какое-нибудь выражение 1 > 0, оно всегда TRUE, и проблема будет закрываться сразу. А в извещении используйте стандартный макрос {ITEM.VALUE}.

    Правда не представляю, сколько времени Zabbix будет вытаскивать данные из базы и считать среднее арифмитическое. Ещё больше не представляю, какому воспалённому мозгу нужна такая средняя температура по больнице.
    Ответ написан
    5 комментариев
  • Синхронизация двух директорий через ssh?

    saboteur_kiev
    @saboteur_kiev Куратор тега SSH
    software engineer
    Мне постоянно советуют rsync

    Неужели такая странная хотелка, что нет готового решения?

    Так тебе и советуют готовое отличное решение.

    , но это же просто продвинутая замена scp. Там даже для обратной синхронизации надо его запускать второй раз с другим направлением.

    Нет, это не замена scp. То, что используется тот же протокол не значит что работает одинаково. rsync умеет обновлять файлы частично, экономит трафик.

    Вот пишу я какой-то код на ноуте. А запускаю на сервере. Как мне самым простым способом синхронизировать две директории — локальную и серверную?

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

    В твоих требованиях противоречия.
    То тебе нужно, чтоыб какие-то файлы не синкались. То есть уже нужно поддерживать список исключений и возможно настраивать его на каждом сервере.
    Потом у тебя день поработать на каком-то сервере, а завтра на другом. То есть ситуация, когда у тебя 5-10 серверов и ноут будут синкаться друг с другом?
    Потом ты хочешь "готовое решения", но не хочешь ставить его на каждый сервер/ноут и настраивать. Ну вот есть какой-нить unison, который синкает в обе стороны за один запуск, но его нужно будет и ставить и настраивать как и synthing, который ты не хочешь ставить или настраивать.

    Я бы не парился, а просто юзал приватный git репозиторий, который легко поставить везде. И в гите не обязательно сотни веток и даже коммит можешь просто ребейзить постоянно, чтобы был один.
    Или rsync который уже обычно есть почти везде и который понятно как работает.

    Или уж настрой тот же synthing, а настройку добавь себе в гитхаб, чтобы можно было скриптом скачать готовый сетап и все.
    Ответ написан
    8 комментариев
  • Синхронизация двух директорий через ssh?

    Vindicar
    @Vindicar
    RTFM!
    Да, странная. Обычно бэкапы делаются по расписанию, а для этих целей rsync хватает.
    А твой скрипт после написания и отладки как раз и превратится в неполное подобие syncthing, nextcloud и т.п.
    Ответ написан
    1 комментарий
  • Можно ли сделать копию сайта на шаблоне aspro?

    @koder_1
    Битрикс программист
    Решение аспро привязывается к определенному ключу битрикс.
    Нужно не переносить на тестовый битрикс, а именно копировать сайт.
    Ответ написан
    1 комментарий
  • Почему такая разница в цене видеокарт 4060?

    xez
    @xez
    TL Junior Roo
    Предположу, что вас интересует не вопрос "почему такая цена", а вопрос "чем они отличаются".

    Насчет "чем отличиются" есть вот такое видео, надеюсь, станет понятнее.
    Ответ написан
    Комментировать
  • Как запаролить сайт?

    @tyxeo
    дальний знакомый Мурыча
    используй на сервере базовую аутентификацию
    Ответ написан
    Комментировать
  • Не могу настроить сетку Bootstrap 5. Где ошибка?

    delphinpro
    @delphinpro
    frontend developer
    Зачем привязка к бутстрапу, если на css вам хватит двух-трех строк кода для описания желаемого?

    мобильники - вообще ничего не делаете. Блоки и так уже идут в столбик.

    Дальше простой запрос

    @media (min-width: 768px) /* ширина по вашему хотению */ {
      .block {  
        display: grid;
        grid-template-columns: repeat(3, 1fr);
      }
      .yellow {
        grid-column: span 3;
      }
    }
    Ответ написан
    Комментировать
  • Как увеличить производительность проекта на python?

    все упирается в бд, на ум сразу пришло вынести эту часть в микросервис
    Какой ещё микросервис? Микросервис, который делает что?

    В-нулевых, нужно конкретизировать что значит "упирается в БД". Тормозят какие-то конкретные запросы? СУБД не хватает ресурсов? Слишком медленный диск? Или, может, под "упирается в БД" вы понимаете всю бизнес-логику приложения, которую вы называете "берет из бд нужные данные" (и тогда становится понятно про микросервис)?
    Во-первых, нужно вынести СУБД на отдельную машину, желательно на голое железо (если речь про реальный хайлоад, а не про кривой код и конфиги).
    В-третьих, под это железо нужно СУБД корректно сконфигурировать.
    В-четвёртых, нужно добавить кэширование.
    В-пятых, нужно проверить алгоритмы и пофиксить узкие места (на последнем месте, потому что это самое трудоёмкое).

    Я понимаю, что python и django не самые быстрые инструменты (мягко скажем)
    Я вас уверяю, что проблема в вашей компетенции (мягко скажем), а не в инструментах. Есть достаточно проектов, написанных на Джанго, которые вывозят большие нагрузки.
    Вы, в принципе, правильно сделали, что попытались поначалу закидать проблему железом - оно обычно дешевле, чем время разработчиков. Но параллельно надо и оптимизацией заниматься, и это требует системности, которой в вопросе не очень-то видно. Ну и компетенций разных - если тормозят алгоритмы - это одно, если конкретные SQL-запросы - это другое, если СУБД задыхается в принципе - это третье.
    Ответ написан
    5 комментариев
  • Как быть при утечке памяти? Можно ли "очистить" ОЗУ скриптом?

    saboteur_kiev
    @saboteur_kiev Куратор тега Windows
    software engineer
    Вы вообще не в ту сторону шагаете.Какие тут скрипты??

    Утечки памяти это не проблема операционной системы (ну разве что утечки именно в ней).

    Утечки памяти, это проблемы конкретных приложений, которые запрашивают память для создания какой-то переменной или массива переменных, чтобы разместить в них данные. Затем, когда переменные больше не нужны, забывают их удалить. И в следующий раз снова запрашивают еще память. так потихоньку приложение растет и растет.
    При этом никто не может сказать со стороны - ни скрипты, ни операционная система, какую именно память приложение использует активно, а про какую уже "забыло".

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

    Тут нужно разбираться с вашими приложениями, с теми кто их писал.
    Иначе - ну ребутать разросшиеся приложения регулярно, если этот вариант возможен.
    Ответ написан
    Комментировать
  • Какую видеокарту и материнскую плату выбрать для процессора Ryzen 7 5700x?

    я сейчас думаю о покупке видеокарты(бюджет +- 80к)

    Можно на эти деньги найти RTX 4070ti

    и материнской платы(+-20к)

    что-нибудь на B550 с нормальным питанием ищи, что будет у тебя в наличии.
    Обзоров достаточно.

    чтобы все было совместимо и было на одинаковом уровне если так можно сказать

    Что такое "одинаковый уровень"?
    Ответ написан
    Комментировать
  • Как правильно организовать выборку зашифрованных данных PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Никак.

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

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

    Единственное возможное исключение: если ваша функция шифрования обязуется быть immutable в терминах postgresql, т.е. на один и тот же ключ и исходные данные генерировать всегда один и тот же бинарно идентичный результат. Тогда делаете индекс по parent_iin и ищете по условию where parent_iin = функция_шифрования(данные, ключ) то есть по зашифрованному представлению данных.
    Ответ написан
    Комментировать