• Что должен уметь системный администратор?

    @Vitsliputsli
    fsgdoterr, нет, там ничего необычного. Из специфики - нужно будет устанавливать софтфон и настроить в нем параметры которые вам дадут. Что-то сложное, не на клиентских машинах. Раз все на винде, вряд ли много мест. Настраивать машины каждый день не нужно, чаще придётся гарнитуры пользователям менять.
  • Как в MySQL запросе добавить колонку в таблицу с проверкой наличия этой колонки?

    @Vitsliputsli
    Сергей Кореневский, уже предложил выше. Изменения структуры бд не должны проходить наугад. Любой вменяемый механизм миграций гарантирует наличие столбца, если миграция применена и его отсутствие, если не применена. Т.е. при нормальной работе, когда сохраняется контроль над базой, подобные костыли не нужны.
  • Как обработать все аргументы функции?

    @Vitsliputsli
    Shimpanze,
    function foo( string $str, array $arr = [], int $int = 123 ) {
    foreach( func_get_args() as $argument ) {
    if ( is_string( $argument ) ) {
    $argument = trim( $argument );
    }
    }
    var_dump( $str );
    }

    Если вы сами указали что только 1 аргумент string, на кой проверять их все?
    Если вашему классу на входе нужен аргумент без пробелов, то это не его зона ответственности делать trim, пусть это делает тот, кто валидирует неизвестные данные. Если есть опасность что в класс на вход придут некорректные данные, передавайте в него объект, который гарантирует, что внутри него все уже провалидировано и обработано.
  • Как в MySQL запросе добавить колонку в таблицу с проверкой наличия этой колонки?

    @Vitsliputsli
    Если вам нужно подобное, значит вы утратили контроль над структурой БД. Здесь нужно внедрить нормальный механизм миграций, вместо написания монструозных костылей.
  • Как выполнять задачу каждые 10 секунд в PHP?

    @Vitsliputsli
    Александр Андропов, и не забудьте, что при решение через cron понадобится впиливать контроль параллельного запуска, когда новый стартует, а старый еще не отработал.
  • Как выполнять задачу каждые 10 секунд в PHP?

    @Vitsliputsli
    inFureal, неизвестно подойдет это автору или нет. Но и не обязательно писать 10 в sleep, можно вычислять исходя из времени работы. Для таких частых запусков это лучшее решение, т.к. не надо запускать постоянно скрипт, он в памяти, и не надо контролировать параллельный запуск, когда скрипт предыдущего запуска еще не завершился.
  • Цикл с SQL запросом?

    @Vitsliputsli
    А еще можно посмотреть логи. И скорее всего, там обнаружится сообщение об ошибке в БД из-за нарушения уникальности в каком-либо поле.
  • Какая нужна теоретическая база на собеседовании джуна?

    @Vitsliputsli
    Роман Юрьевич Ипатьев, как по мне, пусть лучше джун из магических методов знает только конструктор/деструктор, про автолоад, что composer все сам делает, если соблюсти PSR (хотя может и имелось ввиду), а implements и use вообще не использует. Но знает SOLID, GRASP теоретически, и хотя бы нарушение Single Responsibility может определить по коду. Т.к. большинство магических методов нужны для специфических задач, и чем их меньше, тем лучше. Интерфейсы невозможно нормально применять не зная того же SOLID, а треды вообще не нужны. А про "контрол-клик" отличное замечание.
  • PHP 7.4: как проверить, что типизированное свойство инициализировано?

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

    @Vitsliputsli
    alexey_novorisov_89, выглядит излишней, потому что не сильно изменяет функционал оригинального класса PDO. Разумеется не нужно создавать новый объект в каждом классе, тем более в данном случае каждый новый объект - это новый коннект к базе.
    Т.е. вы создаете 1 объект в одном месте, а через конструктор или методы внедряете его в объект, где он необходим.
    Т.е. как вариант:
    public function __construct(iDatabase $db)
        {
            $this->db = $db;
        }
        ...
        $cities = new Cities($this->db)

    Получается, что создав объект DB в одном месте, чтобы дотянуть его до потребителя, его придется тащить через конструкторы промежуточных классов. Что бывает не очень удобно. В какой-то степени проблема решается DI-контейнерами, при условии создании всех объектов сразу и возможности вытащить создание подобных объектов в самое начало.
    То, что вы хотите сделать - это service locator. Не важно как вы организуете вызов, через глобальную переменную/функцию, через статическое свойство/метод. Не важно будете вы обращаться к конкретному классу/объекту или к контейнеру. Важно что вы обращаетесь к некому общему реестру и получаете объекты из него. Подход часто считают антипаттерном, хотя на мой взгляд, у него просто своя ограниченная сфера применимости. Для глобальных для всего приложения объектов он вполне подходит. Безусловно минусов у него хватает: вы привязываетесь к конкретному типу объектов, которые возвращает реестр, т.е. не сможете гибко менять этот объект (равно как и сам реестр). То, чего вы боялись, захочется сделать 2 коннекта к БД - нужно будет придумывать как это разруливать в каждом вызове service locator (хотя в большинстве задач коннектов к БД мало и это не представляет сложности). При тестировании может быть проблематично подменить объект запрашиваемый из service locator, но в вашем примере не проблема, т.к. сперва мы берем зависимость внедренную через конструктор. Также, обращения в service locator должны возвращать один и тот же объект, т.к. нельзя допустить создания новых объектов при каждом обращении.
    Т.е. ваш вопрос совсем не про конфиги, а про зависимости объектов. Можно создать его в новой формулировке, вдруг что интересного напишут, тема не однозначная все-таки.
  • Как сделать автоподключение базы данных?

    @Vitsliputsli
    alexey_novorisov_89, что касается классов, если не брать мелочи, то, обёртка пока выглядит лишней, но для изучения норм, но все равно непонятно, зачем mysql чего-то там, у вас pdo и общение с драйверами уже универсализировано насколько возможно. Т.е. должна быть обёртка для pdo, а не mysql.
    А "ВОТ ТУТ" это интересный вопрос, и он не про конфиги. Зависимости должны внедрятся - DI, вы же хотите их создать внутри (service locator, например), это антипаттерн. Т.е. либо не кошерно, но просто, например через service locator (его тоже не нужно совать в каждый класс, здесь он не нужен, перенесите на другой уровень), либо через какие нибудь хитрые DI контейнеры.
  • Как сделать автоподключение базы данных?

    @Vitsliputsli
    Антон, у него MVC, а в этой парадигме моделью будет все что вы перечислили, и маппер для полей в бд, и сервисный слой. Но что логически эти вещи должны быть разделены мысль правильная.
  • Как сделать автоподключение базы данных?

    @Vitsliputsli
    alexey_novorisov_89, да, типа того. Не очень понятно зачем константы, но без примера не угадаешь.
    Отдельная строка с названием драйвера конкретной БД, или название драйвера в составе строки dsn. Или просто dsn, если используете PDO, он сам подключит нужный драйвер.
  • Как сделать автоподключение базы данных?

    @Vitsliputsli
    Зачем объекты/классы в конфиге (и все таки класс или объект?)? Зачем в конфигурационном файле зависимость от реализации? Массива строк с необходимыми строковыми данными вполне достаточно, а уже на его основе создавайте нужные объекты. Посмотрите любой фреймворк.
    Был бы пример, было бы интереснее.
  • Почему встроенный в php сервер тормозит?

    @Vitsliputsli
    galliard, замерьте время выполнения разных этапов вашего скрипта и найдите на каком этапе наблюдаются проблемы.
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    @Vitsliputsli
    Saboteur,
    баш хранит историю команд в памяти и в файл ее скидывает только при выход

    да, согласен, именно так.

    Про Ctrl+C это не проблема, но кто-то должен продавить опцию запуска того же питона без возможности его прервать по ctrl-C, и внедрить это в глобальный репозиторий.

    Не нужно ничего продавливать. Как правило, языки умеют обрабатывать сигналы ОС. Просто нужно в коде описать обработчик сигнала (в python это pcntl_signal), и в нем задать, что ничего не делать при Ctrl+C. Т.е. там все уже есть.

    По "тривиальным задачам" именно так, нет смысла этим заниматься.
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    @Vitsliputsli
    Alex Wells,
    новые патч версии наоборот более стабильны. Возможно выше назвал их "минорными" - если так, то имел в виду именно патч. В них только багфиксы, они априори не могут быть менее стабильными)

    Не должны быть, но не факт. Но речь была о другом, если ежемесячно правятся баги - это явно не стабильная версия. Значит есть предыдущая мажорная или минорная версия, которая работает уже достаточно давно, и если там случается найти баг, то это очень редко, соответственно никто там каждый месяц уже не правит баги. Про это я и писал, что лучше подождать с новинками, но зато работать с более стабильным ПО, тем более когда речь идет о такой капризной штуке как СУБД.

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

    @Vitsliputsli
    Alex Wells, написал про bash подробнее чуть выше. А вот про обновление СУБД раз в месяц, соглашусь с Saboteur, если вы заботитесь о стабильности работы - это не лучший подход. Использовать нестабильные версии, которые правятся каждый месяц - это риск словить проблемы. Любая новая версия СУБД должна проходить проверки DBA и делать это каждый месяц нереально, лучше не использовать новый функционал, чем так рисковать. Разве что стабильность не является для вас важным фактором и вы готовы так рисковать.
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    @Vitsliputsli
    Saboteur, читаю что вы пишите, но у вас только эмоции и утверждения без обоснования: "синтаксис прекрасен", "нормальные люди", "это оверинженеринг" и все тут. Все что я пишу про bash нисколько его не принижает, это прекрасный инструмент, его внутренней реализации вполне хватает для его целей. До тех пор пока вы его не запихиваете в один ряд с языками программирования.

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

    Ладно, называйте их все языками программирования. Но все эти сравнения абсолютно не уместны. Bash и прочие шеллы - это совсем иное, чем python и языки программирования, совсем разное назначение. Про "библиотеки" слышать забавно, сами же писали про высокие затраты на fork.
    Другое дело никто не назовет это библиотеками, даже при микросервисной архитектуре, сервисы разносятся совсем не потому что ЯП не позволяет писать эти сервисы.
    И вообще, говорить про то, что любая консольная команда становится "библиотекой" можно только, если вы не писали на bash ничего более-менее сложного. Если бы писали, то знали, что вывод многих команд очень слабо подходит для машинной обработки, и дело не в хитрых манипуляциях в sed, а в том что нельзя гарантировать, что в выводе что-то неожиданно не изменится. Любой разработчик, знает что такое API, и знает что выше описанный подход - хрень полная.

    либо вы не понимаете, как работает баш, либо не знаете что в баш даже отдельно существуют типы данных integer string и array. И внутренняя реализация этого вполне достаточна для баш скриптов.

    Не игнорируйте, расскажите, как вы будете складывать числа с плавающей точкой в этом универсальном ЯП. Не забудьте рассказать про затраты на fork. Ну и параллельно, расскажите что же там за типы integer и array при таких вычислениях. Я прекрасно понимаю, что это вызов внешних команд, но не я заявлял, что они библиотеки.
    И это просто элементарные вычисления, мы даже близко не рассматривали математический аппарат настоящих ЯП, и тем более такого языка как python.

    Примитивный анализатор ;))))) это смешно.

    Примитивный - это не попытка обидеть вашу любимую игрушку, это констатация факта. Если в python вы положите команду в переменную, она не начнет выполнятся при выводе на экран. Чтобы добится такого же поведения в python, нужно взять динамический код, заменить переменные через тупо подстановку строк, а затем выполнить через внутреннюю команду исполнения кода. И, привет от инъекций кода. Кто писал внутренние языки прекрасно это знают, остальные знают по sql-инъекциям.
    Т.е. дело не просто в экранировании, проблема глубже в отсутствии разделения данных и кода, для командного процессора - это нормально, для ЯП - это ад.

    Проблема большинства ООП программистов - оверинженеринг. Огромный оверинженеринг.
    Контейнеры - то есть чтобы запустить скрипт установки mysql или скрипт для обновления версии httpd вы будете устанавливать докер и запускать контейнер?

    Это не проблема, мы сознательно жертвуем производительностью ради более удобной и легко контролируемой структуры. Либо не жертвуем в тех местах, где иные приоритеты (и вообще возьмем какой-нибудь Go или Си). Но писать про это предлагая взамен полное копирование всех страниц памяти интерпретатора (fork) даже при элементарных операциях - это показывать полное непонимание на чем можно экономить, а на чем нельзя.
    Тоже самое про контейнеры, вы не понимаете, что каждый инструмент имеет область применимости. Никто не придет к вам домой инспектировать ваш комп на наличие вагранта. Но при разработке стек бывает достаточно большой, с сложными зависимостями, сторого определенными версиями продуктов, и чтобы развернуть это все с нуля потребуется не час и не два.

    Не понимаю какое вообще отношение ООП имеет к if и for, вы точно считаете, что знаете что такое ООП? ;)

    Ну не я же писал, что циклов и ветвлений достаточно, а структуризация ненужный "оверинженерниг".

    Кроме того, я не сисадмин и в свое время работал с Си со всей заморочкой с указателями и работой с памятью.

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

    @Vitsliputsli
    Saboteur, именно так, примитивный, как уже написал, просто подстановка строки в строку. Вы либо не понимаете, как он работает, либо просто ничего другого не знаете. Но по делу, смотрю вам сказать нечего, "нормальные люди" это, конечно, "весомый" аргумент. Понимаю, что для сисадмина все разработчики занимаются фигнёй, ведь все можно просто и легко сделать в bash. Но, действительно, спорить бесполезно с человеком, кто не писал ничего сложнее скриптов автоматизации. Для которого использование переменных - это заменить подстроку в строке, типы данных не нужны, раз есть поток строк, а ООП бесполезная трата ресурсов, ведь все можно сделать через if и for. Ведь создать объект тяжёлая операция, а полное копирование памяти интерпретатора при fork бесплатное похоже? А fork при попытке сложить 2 числа вообще сказка! Поэтому у нормальных людей, раз уж вы так написали, bash для автоматизации запуска приложений и скриптов, а языки программирования для разработки этих приложений и скриптов. А остальные входят в клуб любителей путать молоток и микроскоп.