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

    @Vitsliputsli
    Матвей Румынин, определения пишутся, чтобы что-то определить. Если чтобы правильно понять "определение", нужно присовокупить еще текст, который будет изменять его или вносить новые правила о которых не говорилось в "определении", то это уже не "определение", а бесполезный хлам.
    Автор спросил конкретную вещь, привел конкретное определение этой вещи, а ему начинают рассказывать, что определения не верны, что нужно "прочувствовать" опытным путем. Язык - это конкретная вещь, а не шаманство, автора тут можно понять, он подходит к делу как технарь, оперируя документаций, а ему "тут читай, тут не читай, тут мы рыбу заворачивали", причем еще и с нападками что ему никогда не понять тайных знаний "специалистов по жеэсу".
    "интерпретация в отрыве этого определения из контекста статьи неверна" - верно. Никто их в отрыве и не рассматривает. Никто не спорит, что в примере с 2 функциями - замыкание. Т.е. в статье все верно, но это вы ее считаете неверной, както умудряясь согласиться с примерами в статье, но не согласиться с определением в ней.
    p.s. Возьмем к примеру конструкцию for (;false;) { ... }, можно ли на этом примере объяснить что такое цикл? нет, нельзя. Перестает ли от этого такая конструкция быть циклом - нет, не перестает. Так и в статье, рассматривается вариант, где практически можно показать наиболее интересное использование.
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    @Vitsliputsli
    dollar, Матвей Румынин,
    По-простому можно считать, что "захваченные" переменные выделяются не на стеке, а в куче. А уж как именно движок понимает, что произошел захват, я вам не подскажу. По программисту обычно как бы очевидно, что захвачено, а что - нет.

    Да никак он не понимает, потому что нет никакого захвата, нет никакого специального механизма closure. Все тупо просто, вы создали ссылку на внешнюю (равно как и внутреннюю) переменную, она заносится в стек - и все. Есть ссылка вы можете обратиться к данным, что еще нужно? Ничего, ни у кого "захватывать" не нужно.
    С какого перепугу "захваченные" переменные будут выделяться не на стеке, а в куче?! Т.е. лежит у нас переменная в стеке, но мы без причины переносим ее в кучу, чтобы похерить производительность? Лежит ли значение переменной в стеке или там ссылка на ее значение в куче - это вопрос типа переменной и к closure вообще никакого отношения не имеет.
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    @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, либо стройте индекс по фильтруемому полю.