• На собеседовании сказали, что не все функции - замыкания. Так ли это?

    @Vitsliputsli
    dollar,
    Очевидно, что любая функция может использовать внешние переменные. Причём, это верно практически для любого ЯП.

    Прям "практически для любого ЯП"? Навскидку, это не так для Cи, C++, Java, PHP.
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    @Vitsliputsli
    DollyPapper,
    Execution Scope это стек вызовов, и на стеке как раз хранятся локальные переменные контекста, лексическое окружение дает нам возможность их видеть, а вот возможность на них сослаться и не отпускать, даже когда родительская функция померла и есть замыкание

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

    @Vitsliputsli
    Матвей Румынин,
    И все же, если мы говорим про js, то в данном примере действительно замыкания нет ;-)

    Ну как же нет, когда вы сами в своем ответе привели статью, где определение замыкания следующее:
    Замыкание (Closure) или более полно — лексическое замыкание (Lexical closure) — это совокупность блока кода и данных того контекста, в котором этот блок порождён.

    Что абсолютно соответствует функции созданной автором.
  • Как разделять названия коммитов на гите на фронт и бэк?

    @Vitsliputsli
    Георгий Кузнецов, посмотрите на варианты решения с 1 репом: помечать коммиты. Т.е. тот кто будет работать с репом в голове должен отсеивать ненужные коммиты. Зачем? Если можно этого не делать. Не только коммиты, но и релизы общие. Если работаете по gitflow и создаёте release из dev, то например front будет ждать back, даже если мог бы зарелизится без него. То же самое с пулреками, все в одной куче, ревьюиров дефолтных не назначить, придётся выбирать для каждого пулрека. Разграничить доступ тоже нельзя, весь код в одном месте.
  • Выполнение команды Jenkins от имени пользователя?

    @Vitsliputsli
    Что значит 'доступы только по Jenkins'?
    Настройте sudo для пользователя Jenkins и пишите от имени других пользователей.

    Но обычно, Jenkins пишет от имени своего пользователя и таким не занимается. А пользователям на сервере делать нечего.
  • Как разделять названия коммитов на гите на фронт и бэк?

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

    @Vitsliputsli
    evgeniy_lm,
    Сисадмин который все зацикливает на себя и обкладывает во круг себя "секретами" и "тайнами" это не плохой сисадмин, это просто идиот, по этому подобные случаи рассматривать вообще глупо.

    как раз нет, он далеко не идиот, а очень хитрожопый тип.

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

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

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

    @Vitsliputsli
    focusss, либо так:
    $newArr = [$arrOne[0], $arrTwo[0], $arrOne[1], $arrOne[2], $arrTwo[1]];
    либо опишите алгоритм, которым нужно руководствоваться, без него можно бесконечно гадать.
  • Как вырасти до системного администратора?

    @Vitsliputsli
    Игорь,
    знал бы ты, сколько систем оказалось похоронено, потому что знал только сисадмин. ))

    Знаем таких, их полно на любой работе, тех кто все зацикливает на себя, строит все из говна и палок и постоянно бегает вокруг этого, подсовывая новые палки, и когда он исчезает, все разваливается от легкого дуновения ветерка.
    Это говорит лишь о низкой квалификации и боязни, что его заменят. От таких стоит держаться подальше.
  • Дописать в файл json и прочесть его php?

    @Vitsliputsli
    Immortal_pony, для интеграции с внешними системами лучше подготовить API, а не подстраивать свое хранилище под них и позволять им напрямую лазить в него.
    Товарищи склоняющие к CSV вместо json исходят из того, что так им привычнее. Только вот сейчас 2022 и формировать отдельные строчки в логе как json это нормальная, обычная практика, и как софт уже может формировать в таком виде логи, так и системы организации логов, тот же logstash могут читать их.
    А учитывая, что автор пишет построчно, а при чтении готов читать только часть, ту которая последняя после ротации файла, то на мой взгляд писать лог отдельными строками внутри которых json - самый оптимальный вариант.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, вопрос в том, что стоит в BETWEEN, если возможно, то лучше чтобы там стоял id, если это невозможно, то по тому полю, которое в BETWEEN должен быть построен индекс.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, вот эта штука:
    (BETWEEN 1 AND 50000, BETWEEN 50000 AND 100000 и так далее).
    делается циклом for в php, и не нужно множество файлов.

    К четвертому require_once скорость опять упала до черепашьей

    Здесь нужно понимать, что вы запрашиваете, а может и как обрабатываете.
    Скорее всего, как я уже писал:
    Если используете BETWEEN и блоки, то вероятно идете по полю без индекса, из-за этого при каждой итерации он перечитывает всю таблицу сначала до нужной позиции. Используйте primary key в between, либо стройте индекс по фильтруемому полю.
  • Полнотекстовый поиск PostgreSQL внутри JSON, индекс внутри JSON?

    @Vitsliputsli
    rPman, ну т.е. под закачиком понималось лицо ответственное за компонент с основной базой данной. Тогда да, либо договариваться с этим лицом, либо дублировать у себя базу в том виде, в каком она будет соответствовать требованиям, опять же если это допустимо политикой.
  • Полнотекстовый поиск PostgreSQL внутри JSON, индекс внутри JSON?

    @Vitsliputsli
    rPman,
    я понимаю, существуют задачи (выдуманные) когда заказчик хочет чтобы база данных - это железобетонно

    Можете пояснить? Как заказчик связан с технической реализацией?
    А если вдруг он решает все вопросы по технической реализации, то тогда и проблемы с ней надо адресовать ему.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy,
    Но остановилось, сделав где-то 2/3 от общего объёма.

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

    Мысль пришла в файле сделать последовательно три копии этого же файла. В первой с помощью BETWEEN прописать первую треть, во второй - вторую, в третьей - третью.

    ну хоть так, если не знаете, как сделать такой цикл в коде.

    Вот только надо понять, что МЕЖДУ этими копиями прописать. Может, тот же самый sleep...

    да ничего не надо, уж между запусками 3 скриптов точно ничего не надо.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, надо понимать что делают sql запросы (да и php тоже). При простом добавлении данных сильной деградации быть не должно.
    Если используете BETWEEN и блоки, то вероятно идете по полю без индекса, из-за этого при каждой итерации он перечитывает всю таблицу сначала до нужной позиции. Используйте primary key в between, либо стройте индекс по фильтруемому полю.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, не усложняйте раньше времени, не заморачивайтесь ни sleep, ни блоками, запустите ваш скрипт для начала просто в cli, проверьте отрабатывает ли он там.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, sleep никак не поможет вам с 504 ошибкой nginx, если вы про это.
  • В чем ошибка применения функции sleep()?

    @Vitsliputsli
    Korneliy, nginx ни с чем не справляется, он просто ждет определенное время и если не получил ответ от php выдает эту злосчастную ошибку. А php продолжает в это время работать, как и mysql.
    Для вашей задачи nginx вообще не к месту, а запустить скрипт php из консоли в данном случае проще, чем делать это через веб.
    Блоки нужны для другой цели, чтобы СУБД не повесилась от огромного кол-ва работы которую вы на нее взвалили. Чтобы другие процессы могли ей пользоваться свободно, пока идут такие крупные чтения/вставки. Троттлинг, sleep, который "ставит выполнение php на паузу" тоже для этих целей. Поэтому размер блоков и величину троттлинга нужно подбирать экспериментально.