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

    @Vitsliputsli
    Изменится, но не значительно. И дело не в сетевом лаге, это вообще другой вопрос, а в других расходах на запрос.
    Не понял, почему здесь пишут про использование/не использование индекса, в вопросе вы пишите про обращение по id, это надеюсь primary key, а значит в любом случае у нас поиск по этому индексу. Скорее всего как primary key вы используете число (int, bigint и т.п.), а значит у нас индекс BTree (с hash там вообще будет печально с производительностью). Сложность поиска по BTree - это log(n), где n - это порядок дерева. Только вот сложность и производительность не сильно коррелируют. Ведь когда вы будете менять высоту дерева это не просто обратиться к другому адресу в памяти, это нужно как минимум узнать загружена ли эта страница и получить ее адрес. Все это очень усложняет выбор дерева, теоретически не ответишь, нужно смотреть реализацию в MySQL.
    Ответ написан
    Комментировать
  • Как забрать все строки из таблицы?

    @Vitsliputsli
    Судя по слову current и доке, ваш $results - это итератор. Т.е. скорее всего, даже не нужно получать массив, просто идите foreach по $results, или используйте другие свойства итератора.
    Ответ написан
  • Получение запроса с php в python?

    @Vitsliputsli
    Передать данные на вход как аргументы запуска, либо прямо во входящий поток. Через внешнее хранилище, начиная с переменных окружения, заканчивая СУБД. Через отдельный канал, tcp, unix, web socket.
    Примерно так, с учетом как сформулирована задача. Потому как языки программирования это хорошо, но куда важнее как запускаются и работают процессы. И, если пишите не страшные костыли, то не нужно передавать весь массив post.
    Ответ написан
  • Как выглядит пример задачи по SCRUM?

    @Vitsliputsli
    Главное понять зачем вам Scrum, если потому что это "модно и молодежно", то тупо следуйте традициям. Как правило, Scrum внедряется именно для этого.
    Если же вам действительно нужно планироваться на некий интервал времени, т.е. бизнес должен быть уверен, что в большинстве случаев к концу спринта будет готов функционал, который был оговорен в начале спринта, то это правильный выбор.
    Если вам не принципиально четкое планирование на интервал спринта, то Scrum добавит лишь много накладных расходов, которые отсутствуют например в Kanban. С другой стороны, если вы не планируете краткие интервалы, то будет очень сложно проводить оценки для долговременного планирования.
    Все это лишь моя точка зрения, agile-coach продаст вам другое видение, но человек который не отвечает за результат, не входит в команду и бездумно внедряет лишь традиции приведет команду к краху. Scrum это про планирование, сам по себе он не увеличит производительность и стабильность работы проекты, но это дает любой Agile, подразумевающий что ваша команда самоорганизующаяся. Если же разработка только перекладывает вину на бизнес, тестирование на разработку, фронт на бек и т.д. все будет печально.
    пример

    Прям пример конкретный расписать очень затратно, но как некий базис, с опиcанием ошибок упрощения, пожалуйста.
    Product Owner (PO) заводит Epic для создания форума типа этого, с описанием нужного функционала (не обязательно ТЗ, достаточно функциональных требований).
    Проводится грумминг беклога проекта, не суть важно каким составом и как вы будете это делать, главное что в результате в беклоге проекта должны быть созданы Stories - это разбитый на подзадачи Epic, каждая Story - это законченная бизнес-ценность, т.е. никаких разработческих задач, только то, что можно будет "потрогать" бизнесу.
    Каждая Story должна быть оценена в Story Points (SP) (надеюсь, понятно, что SP - это не трудозатраты и не часы разработки). Декомпозиция на dev-задачи это уже развлекухи разработки, на доске Scrum они не нужны.
    "Страница логина пользователя" 3SP
    "Создание нового вопроса пользователем" 13SP
    "Отображение ленты вопросов для пользователя" 8SP
    "Создание ответов на вопросы" 8SP
    "Создание тегов-тем для вопросов" 21SP
    Следующий этап - планирование спринта. Зная velocity команды мы можем спланировать сколько задач поместится в планируемый спринт, разумеется задачи могут зависить друг от друга - это тоже надо учитывать. Например, при Velocity=30SP, мы можем взять в беклог спринта:
    "Страница логина пользователя" 3SP
    "Создание нового вопроса пользователем" 13SP
    "Отображение ленты вопросов для пользователя" 8SP
    Итого 24SP, остальные уже не помещаются. Здесь видно, что при velocity=24SP, задача в 21SP занимает почти целый спринт, это очень опасная ситуация. Когда у нас в спринте несколько десятков задач, то ошибка в их оценке может быть в плюс, а может в минус, в среднем одно другое компенсирует, а вот с нашим делением будут большие проблемы. Поэтому Story также нужно дробить сильнее, чтобы задач в спринте было много.
    На daily meeting кроме всего прочего не лишним будет смотреть на метрики спринта, одна из важнейших - график сгорания, отклонения в нем позволяют нам сделать вывод, что мы не успеваем реализовать все к концу спринта, а значит надо понять какие задачи не будут сделаны и предупредить бизнес. Стоит ли говорить, что если PO не появляется на ежедневных встречах и не следит за прогрессом, он не сможет вовремя скорректировать работу. Если PO не является реальным владельцем продукта и по каждому чиху будет брать время, чтобы уточнить у реального, то гибкость (agile) будет очень сомнительной.
    В конце спринта на проде у нас должны быть 3 вышепреечисленные задачи. Пользователь сможет зайти, создать вопрос и просмотреть созданные им и не только им вопросы. Т.е. вроде как мы доставили определенный бизнесовый функционал, но на MVP это не тянет, отвечать на вопросы еще нельзя, поэтому для использования проект не готов. Не всегда за 1 спринт получается выкатить MVP, но благодаря тому что мы уже чтото выкатили, на это можно посмотреть вживую и получить обратную связь с корректировками, а значит это agile.
    А далее, все тоже самое, регулярный грумминг, в начале спринта - планирование.
    Баги и неожиданные срочные задачи идут параллельным потоком, оценке подвергаются только business stories, т.к. важно сколько вы сделали бизнесового функционала в спринт. Поэтому баги нужно решать отдельно, крупные изменения в инфраструктуре отдельно, старайтесь это делать параллельно основным задачам в спринте, но кто-то прибегает даже к выделенным "техническим" спринтам.
    SP - это относительная величина, сравнивать их между командами бессмысленно, поэтому Velocity это тоже умозрительная эфимерная величина, она может меняться, подстраивайте ее исходя из того, сколько команда реально делает за последние спринты, а не год назад. Попытка улучшать производительность ориентируясь на Velocity печальна, как только мы вводим контроль на основе правильной метрики, метрика перестает быть таковой, поэтому введение KPI очень сложно и не везде осуществимо.
    Ответ написан
    Комментировать
  • Как работает блокировка в Postgresql?

    @Vitsliputsli
    Да, блокировка осуществляется только для выбранных записей, они блокируются до выполнения update. Пока они заблокированы, другие select for update skip locked их не увидят.
    Ответ написан
    Комментировать
  • Как называется такая практика и является ли она приемлемой?

    @Vitsliputsli
    Последний коммит в ветке сегодня, завтра уже может и не быть таковым.
    Merge коммиты не "затирает" - пишите команды, которые используете.
    Ответ написан
    2 комментария
  • Можно ли считать большинство ошибок в PHP исключениями?

    @Vitsliputsli
    Из-за исторического наследия в php получается такая неоднозначность. В данной цитите вы все верно поняли, здесь под исключением понимаются все выбрасываемое, т.е. реализующее интерфейс Throwable и затем идет уточнение, что не все, а только то, что реализует класс Error (кроме Error интерфейс Throwable реализует также класс Exception). Т.е. есть класс Exception, а есть устоявшийся термин исключение, в который в php входят Exception и Error.
    Обработчик ошибок позволит вам не писать прямо в коде обработку исключений в catch, а вынести это в отдельный блок кода. Т.е. нужно обработать конкретную ошибку - пишите catch и делайте это сразу, нужно обрабатывать похожие ошибки в различных участках кода - лучше вынести это в обработчик.
    Ответ написан
    Комментировать
  • Зачем именно нужны связи в бд?

    @Vitsliputsli
    Как уже правильно написали, ваш вопрос больше не про связи, а про ограничения (связь у вас присутствует: message.user_id -> user.id). Чаще всего, для контроля целостности базы данных используют ограничения на стороне этой же базы данных. Вы можете сделать этот контроль и в приложении: в этом простом случае, при удалении записи в user нужно будет чтото делать и с зависимыми записями message и все это нужно будет описывать (а ведь связь может быть не прямая, но и через другие записи). Когда база разрастется, появится много новых и сложных связей, вам придется все это контролировать, причем если вы забыли добавить контроль нового элемента вы сразу можете и не заметить, что консистентность нарушена.
    При определенных условиях контроль действительно переносят в приложение, но когда понимают чем рискуют, а выигрыш перевешивает. Но это не тот случай, добавить ограничение будет эффективнее.
    Ответ написан
    Комментировать
  • Не могу вывести переменные из объекта php?

    @Vitsliputsli
    options это массив из 2х объектов, а уже у этих объектов есть свойство value.
    Ответ написан
    Комментировать
  • Как называть классы, при использовании пространства имен?

    @Vitsliputsli

    Писать пространство имен полностью, что не очень красиво AnotherPHPProject\Strings()

    Не устаю писать, красиво это не когда мало букв, а когда все понятно с первого взгляда.
    IDE подставит за вас длинный namespace. А по нему отлично видно, что данный класс не внутренний, а подключенная внешняя зависимость.
    А вот алиасы часто использовать не очень хорошо, т.к. по нему сразу не видно, что это за класс.
    Ответ написан
    1 комментарий
  • Можно поменять терминал в phpstorm на tilix?

    @Vitsliputsli
    Потому что bash это консольное приложение, tilix GUI.
    Ответ написан
    Комментировать
  • Как правильно писать код, чтобы не было PHP Notice: Undefined index?

    @Vitsliputsli
    везде делать проверку на существование такого элемента с индексом?

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

    @Vitsliputsli
    При использовании ==, php перед сравнением выполнит неявные преобразования, если значения имеют разные типы, то одно из значений будет преобразовано к типу другого, и когда они будут иметь схожие типы будет выполнено сравнение. В мануле php вы можете найти правила преобразований.
    Ответ написан
  • Как написать многострочный скрипт в одну строку?

    @Vitsliputsli
    echo -e "echo 1 \n echo 2" | bash
    подготовить строку можно так:
    sed '/:a;N;$!ba;s/\n/\\n/g' test.sh
    но еще нужно сделать экранирование кавычек двойных, если встречаются.
    Ответ написан
    7 комментариев
  • Что делать, если не можешь понять?

    @Vitsliputsli
    В любом обучении должен быть системный подход. Сперва базис, простое, потом комплексное, сложное.
    Если результат нулевой, скорее всего пытаетесь изучать что-либо не имея представления о базисных вещах.
    Ответ написан
    Комментировать
  • Возможно ли вывести график из zabbix на свой сайт?

    @Vitsliputsli
    У Zabbix есть API пользуйтесь им, если почему-то хочется самому строить график по данным.
    Либо забирайте картинки и выводите на сайте их, для этого достаточно в url поменять charts.php на chart2.php и он вернет картинку.
    Ответ написан
    Комментировать
  • Создание классов в цикле?

    @Vitsliputsli
    Код простейшего генератора:
    $className = 'Home';
    $classFileName = __DIR__ . '/home.php';
    
    $template = <<<'EOD'
    <?php
      class <<CLASS_NAME>> {        
        function __construct(public $name, public $age){}	 
       
        function show_values(){
        echo "$this->name <br> $this->age <br><br>"; 	 	 
        }	 	 	        
      }
    EOD;
    
    $classCode = str_replace('<<CLASS_NAME>>', $className, $template);
    file_put_contents($classFileName, $classCode);

    Хотя пока неизвестна истинная задача, может нужно не это.
    Ответ написан
    5 комментариев
  • Readonly и объект?

    @Vitsliputsli
    readonly не следит за изменением свойств объекта, если вам нужен иммутабельный объект - делайте специальный объект, либо создавайте его особым образом.
    Ответ написан
  • Как поменять 2 функции в один класс?

    @Vitsliputsli
    ООП - это больше про объекты и их связи. Да, в какой-то степени боремся и с повторяемостью кода, но это не главное. Т.е. нужно смотреть на то, что это за объекты, если они родственные, то можно сделать абстрактный класс, но быть может больше подойдет инстанцирование в один класс разных объектов и вызов одноименной функции. А где-то вообще будет вызов динамический, а где-то быть может стоит и продублировать код. Все зависит от самих объектов и их связей.
    Ответ написан
    Комментировать