Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как расширить зону WIFI микротика с помощью другого, подсоединив второй по кабелю?

Лучший ответ:
Элементарно.Второй микротик подключаете к локальной сети кабелем в LAN порт (те порты которые у вас в свитч)Отключаете на нем DHCPНастраиваете WiFi с тем же SSID и паролем.И все будет работать.
Небольшой тюнинг - 
Частоту ставите другую для минимизации взаимных помех, или автовыбор.
По размещению желательно тоже смотреть чтобы они меньше пересекались  и мешали друг другу - используя естественные препятствия на пути WiFi сигнала и убавляя мощность передатчика.
Есть схема посложнее в микротике есть встроенный CapsMan можно настроить через него при условии что оба девайса микротик.
Это посложнее, но более эффективно в плане управляемости.
Почти бесшовный роуминг.
Принцип работы в обоих случаях одинаков просто во втором случае уже управляемая сеть со всеми плюшками.

Худший ответ:
Развертывание единого Hotspot
через Mesh на базе о...
Вопрос: Есть дешевые качественные хост-провайдеры?

Лучший ответ:
Лучший  хостинг 2022 года, который даёт пробный период на 14 дней

Худший ответ:
По ссылке 13 хостеров нашлось. Вполне возможно, что кого-то вы еще не пробовали.
Вопрос: Python. Определение площади фигуры найденной при помощи OpenCV?

Лучший ответ:
Она уже рассчитана, это M["m00"].

Худший ответ:
Способов много.
Если полигон векторизован, т.е., известны координаты концов всех его рёбер, то полигон триангулируется в набор треугольников (предварительно он разбивается на набор выпуклых многоугольников) и у каждого считается его площадь.
Если же это растр, то да, надо считать площадь залитой фигуры. Здесь основная проблема в определении начальной точки, которая однозначно будет лежать внутри многоугольника.
Вопрос: Как называется формат маской «225.255.255.0» и «/24»? И как перевести «225.255.255.0» в «/24»?

Лучший ответ:
225.255.255.0 - переводим в двоичную СС -> 11111111.11111111.11111111.00000000 - 24 единицы, поэтому /24 в краткой записи, так как маска всегда имеет вид сначала подряд единицы, в конце - подряд нули

Худший ответ:
недавно столкнулся с подобным: просто написал "маска сети онлайн" — все время забываю как там единицы по октетам распределять )
Вопрос: Выигрывает ли nodejs в производительности php на примере обычного сайта?

Лучший ответ:
В общем случае все зависит от того как написать, можно и на ноде понаписать таких тормозов, что хорошо оптимизированный php, особенно 7, будет просто летать на фоне этого.
Ну и в большинстве серверных приложений основная нагрузка приходится на БД, а значит и скорость в большей части будет зависеть от нее.
Но за счет асинхронной работы нода однозначно выиграет у php по потребляемым ресурсам, что в конечном итоге так же может сказаться на производительности.

Худший ответ:
Конечный, ультимативный, окончательный ответ даст только профайлер и то на двух ветках написанных очень знающими людьми.
Вопрос: Discord bot в js?

Лучший ответ:
Могу предложить попробовать заменить client.channels на bot.channels
Либо еще проще взять ИД канала из самого сообщенияbot.on("message", async message => {
    if(message.author.bot) return;
    if(message.channel.type === "dm") return;

    let prefix = botconfig.prefix;
    let messageArray = message.content.split(" ");
    let cmd = messageArray[0];
    let args = messageArray.slice(1);
    
    bot.channels.get(message.channel.id).send('My message')
		.then(msg => {
			
		})
		.catch((e) => {
			console.log(e);
		});
});

Худший ответ:
member.guild.channels.cache.get("ID").send("Discord bot в js?")
Вопрос: Как обновляют структуру БД и данные на продакшене?

Лучший ответ:
Поскольку вопрос о трансформации имеющихся данных - то индивидуально для каждой задачи.
Начать необходимо вот отсюда: https://habrahabr.ru/post/146901/
И, собственно, придти к выводу, что лучше оставить как есть в одном поле. Если в каких-то местах нужны другие формы обращений - прописать их явно, а не конструируя по имеющимся заблуждениям о фио.
А так:
0) делается дополнительный бекап
1) выкатывается alter table добавляющий новый поля
2) выкатывается приложение, умеющее писать синхронно старую и новую структуру, но читающее только старую
3) отдельным процессом в цикле небольшими частями преобразуются данные - это если подлежит автоматической обработке
4) выкатывается приложение использующее только новую структуру
5) архивируется и удаляется исходная структура
Для всего-то тысячи записей может проще будет залочить табличку на несколько секунд.
Если тривиальной автоматике обработка не подлежит, то часто вместо 3 пункта делают выгрузку primary key, source_data, как-нибудь изменяют и готовят csv primary key, source_data, new_data, копируют в temporary table, затем делают слияние мультитабличным update этих двух таблиц с recheck'ом по source_data. Затем выгружают данные для которых не было обновления, разбираются, ещё раз обновляют и т.д. до заполнения всего.

Худший ответ:
и запустить миграцию на продакшене, данные удалятся. 
Это какая-то плохая миграция, если данные удалятся. Ну точнее это не миграция а непонятно что.
https://book.cakephp.org/3.0/en/phinx/migrations.h...
Случай который у вас реализуется так (это если можно остановить работу приложения на время миграции, если нельзя то будет сложнее конечно):
1) создали новые колонки;
2) залили insert-ом с select-ом с разбиением на ходу;
3) удалили исходную колонку.
Пример как раз такого разбиения которое вам нужно https://github.com/LandRushGIS/Cadastre.Russia/blo...
Вопрос: Как проще всего разворачивать софт на железе заказчика?

Лучший ответ:
Для Linux систем более чем достаточно вариантов - ansible, Chef, Puppet, Salt.
Для Windows всё намного тяжелее, вы не описали для чего винда и насколько критична, но если есть возможность убрать её из связки то убирайте и жизнь станет легче.
Если нет возможности убрать Windows из цепочки, то значит пора уже вспомнить про MSI пакеты и нацчиться их делать (Advanced installer могу порекомендовать).

Худший ответ:
Дебиан как и любой юникс, можно перенести на другой комп, скопировав и восстановив все разделы винта даже если железо не совпадает. Ему пофиг на драйверы, это не виндоус.
Вопрос: Как избежать перегрузки node js?

Лучший ответ:
Очереди. Redis или что сложнее.

Худший ответ:
Гугли/ищи на ютубе уроки про промисы
Вопрос: Помощь в проводке кабеля, паранойя?

Лучший ответ:
Кабель вторым концом втыкается в порт на коммутаторе. Возможно, там было что-то криво настроено или отключено - вот он и переписывался.

Паранойю лечите в ближайшем профильном учреждении.

Худший ответ:
Не забывайте пить таблетки. Описанная ситуация абсолютно стандартная - так сказать рабочие моменты.
Вопрос: Как реализовать постоянную взаимосвязь ajax+php не перегружая сервер?

Лучший ответ:
Вариантов снять нагрузку - несколько (речь про AJAX):
1. Запрашивайте (раз в 5 секунд) только тогда, когда пользователь: водит мышку, скролит страницу, уходит или возвращается на вкладку в браузере, если блок с обновляемой информацией находится внутри границ viewport'a (или оказывается там).
Т.е., все случаи, когда пользователь не следит за обновлением информации, то и не нужно "мучить" сервер по-пусту...
2. На стороне сервера - кладите информацию (предназначенную для всех) в общий кэш: в память и затем проверяйте оттуда без обращения к БД.
3. Используйте проверку и обновление данные по cron, чтобы обновлять кэш (как для контента, предназначенного для всех, так и по-пользовательскому контенту) для всех, находящихся в данный момент on-line.
Или используйте сокеты (и, конечно, про кеш - не забывайте).

Худший ответ:
Лучше всего почитайте про long polling запросы - вот ваше решение.
Вопрос: С чего начать написание интернет магазина на laravel?

Лучший ответ:
Начать надо с документации.  Затем поработать хорошо над архитектурой. 
Опиши вначале все сущности / объекты, опиши их структуру. Нарисуй связи между ними. 
В какую бд это положить - вопрос последний. 
После этого начни описывать flow запроса - когда и что будет вызываться, как ты будешь расширять функциональность. 
Когда сделаешь эту «неприятную» работу, сам поймёшь как и что нужно писать (и в какой последовательности). 
Чем больше времени потратишь на этот этап и сделаешь его подробнее и лучше подработаешь, тем больше сэкономишь в итоге.

Худший ответ:
В целях обучения
правильнее разбирать готовый.
И еще - это на два порядка эффективнее.
Кто вам будет подсказывать все нюансы, а их там Тихий океан? 
Тут на Тостере будете сидеть ждать у моря погоды?))
Вопрос: Фокус с делегатом. Как его исполнить?

Лучший ответ:
namespace DelegateDemo
{
    public delegate string DemoDel(string s);
   
    class Program
    {  
        static void Main(string[] args)
        {
            ParamMethod(DelLink); // передача ссылки на метод DelLink в ParamMethod
            ParamMethod(s => "(" + s + ")"); // передача анонимной функции в ParamMethod
            Console.ReadKey();
        }

        static bool ParamMethod(DemoDel d)
        {
            if(d("что угодно") == "2")
            {
                Console.WriteLine("делегат вернул 2");
            }
            if(d("5") == "(5)" && d("100500") == "(100500)")
            {
                Console.WriteLine("делегат обернул число в скобки");
            }
        }
        static string DelLink(string s)
        {
            return "2";
        }
    }
}

Худший ответ:
Не особо вникал в Ваш вопрос, но по-поему Вы немного не до конца понимаете что делегат - ссылка на метод. Ваш ParamMethod принимает ССЫЛКУ на метод, а вы пытаетесь передать в агрументы вызов делегата, результатом которого, в данном случае, является string. 
Еще одним доказательством тому схожая ошибка в ParamMethod - вы пытаетесь сравнить ссылку на метод и строку.
Вопрос: Где учить Node.js/Js в Санкт-Петербурге?

Лучший ответ:
Нигде. Офлайн обучение в IT таким вещам:
1. дорого
2. долго
3. бесполезно

Худший ответ:
Есть вот такой движ
Вопрос: Как можно узнать количество нулей в числе?

Лучший ответ:
Вычислить логарифм по основанию 10.
10^x = a
x = log10(a)

Худший ответ:
int count = 0;
while (val >= 10) {
  count++;
  val /= 10;
}Интересуют только числа вида 10 в степени "кол-во нулей".
Если вдруг заинтересуют и другие - замените count++ на что-то вроде count += val % 10 ? 0 : 1.
Вопрос: Оценка времени на разработку модуля на Java + Vue.JS. 3 недели это много?

Лучший ответ:
входных данных для оценки трудозатрат мало.  "модуль" - значит куда-то встраивается ?  куда ? как ? какие требования в дизайну ? к коду ? к комментариям ? к тестам ? и вообще - что вам в итоге надо ?  Java - серверная часть - а что там ? или Java на локальном хосте в окошках?  или это JavaScript ?
не зная всего этого я бы тоже "заломил" 3 недели. хотя, возможно, ваша задача решается за 3 часа.
p.s. 8*15 = 120 часов...  а какой тариф у разработчика в час ? :)

Худший ответ:
С таким описанием и года может оказаться недостаточно. Точная формулировка - залог качественного и быстрого решения.
Вопрос: Как проверять внедряемую автоматизируемую систему?

Лучший ответ:
Это вы должны были исполнителю сказать, какие возможности вам необходимы, а не сначала выбрать систему а потом думать надо ли.
1) У вас должен быть план тестирования - тест кейсы на основе пользовательских сценариев (чтобы сделать вот это пользователь делает .......)
2) Вы должны написать что вам нужно и уже на основе этого исполнитель напишет инструкцию.
3) На основе инструкции.
Вообще звучит как "не знаем зачем оно нам нужно но сделали, теперь не знаем что делает с тем что сделали".
Я могу подключиться к этапу внедрения и навести порядок, если вам конечно это необходимо. Контакты в профиле.

Худший ответ:
Исполнитель вам должен предоставить специального человека "Внедренца" (Специалист по внедрению ERP), который сопровождает проект от анализа бизнес-процессов до обучения конечных пользователей и сдачи проекта.
Просите Внедренца у исполнителя, без внедренцев никак :)
Вопрос: Какие селекторы использовать?

Лучший ответ:
'.block>div:nth-child(2)>p:last-child'. В последнее время начал задуматься правильно ли использовать такие длинные селекторы, или лучше добавлять в html больше классов и искать по ним?
Чаще всего нет, читай про бэм

Худший ответ:
Никогда не используйте обращения напрямую к тегам. Нужно знать как работает браузер. Если Вы пишете селектор вида .text .link a то браузер берет все теги а и начинает их фильтровать справа на лево.
Вопрос: Нормальна ли такая реализация функции?

Лучший ответ:
Дичь конечно.
Не надо определять переменные с именами как у каких-то глобальных объектов, так что window - долой. Ну и в целом - как-то многословно, это могла бы быть и одна строка:const closeInfoWindows = (...windows) => windows.forEach(w => w && w.close());

Худший ответ:
Ничего плохого. Непонятно, зачем нужна проверка if window, какого-то окна может не быть?
Вопрос: Какую файловую систему выбрать для старого ноутбука?

Лучший ответ:
с интересом посмотрю на линух на фат...

Худший ответ:
любую
Вопрос: Какой дистрибутив Linux выбрать для хостинга Apache + PHP сайтов?

Лучший ответ:
Зачем вам Hyper-V? Лишние накладные расходы на ровном месте.
Дистрибутив особой роли не играет, на самом деле. Сетевой стек один и тот же, только некоторые настройки по умолчанию различаются, но их вполне и изменить можно.
А вот проблема у вас, вероятнее, не в CLOSE_WAIT, всё же,  и не в сетевом стеке, а в том, что все процессы апача заняты обработкой существующих запросов, т.е. отдачей ваших аудио данных. И лучше бы это делать не с помощью Apache вовсе.

Худший ответ:
Конкретно в своей практике сталкивался с проблемой в модуле apache remoteip, но это очень специфичный случай был. Не увидел в вашем вопросе отчёта с вкладки Network браузера. Там есть параметр TTFB, который может косвенно указать с какой стороны проблема. Ещё бывает apache долго думает, когда режется частота процессора, но это больше для хостинга актуально. Ну и время выполнения php не помешает замерить.
Вопрос: Хостинг или VPS?

Лучший ответ:
Судя по вашим запросам вам надо брать мощный выделенный сервер, а не говнохостинг и впс у бегета

Худший ответ:
Во первых VPS это одна из разновидностей хостинга.
Во вторых от количества товаров ничего не зависит - современным СУБД на эти смешные тысячи наплевать - они и миллиардами записей легко ворочат.
В третьих VPS подразумевает, что администрированием вы будете заниматься сами. В shared/vip-shared и т.п. - администрируют за вас специалисты хостинга.
В четвертых сам хостинг стоит такие копейки, что можно взять одно, а потом переехать на другое запросто
В пятых - я бы взял для начала vip shared
Вопрос: Как перерасти из кодера в программиста?

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

Худший ответ:
>>Программист - специалист, которые разбирается во многих аспектах языка на котором работает, а также в смежных областях, вроде математики.
Математика уже "Смежная область"? Дональд Кнут плачет кровавыми слезами.  
>>На данный момент я могу себя позиционировать как C++ кодер - знание и использование всех стандартов до 17 включительно, 
Со всеми версиями компиляторов и фрэймворков?  Хотел бы я посмотреть на человека, который знает весь Boost/Qt/SDL/Gtk.  
Это как сказать, что я знаю Таэквондо, вин-чун,  тайский бокс, джиу-джитсу и много других страшных слов.
Вопрос: Как удалить папку в Github именно с сайта, а не через git?

Лучший ответ:
только один способ - удалить все файлы в папке.
способ так себе по удобству, поэтому проще установить любой git-клиент.

Худший ответ:
Нажимаешь в папке которую нужно удалить в  правом верхнем углу на три точки и после delete directory.Удаляет только нужную папку. Да я проверял. Сам зашел чтобы найти ответ потом нашел его самостоятельно и решил поделиться. Парень сверху пиздит) Шутка. Нормальный тип
Вопрос: Как знания html и css довести до идеала?

Лучший ответ:
Простой пример задания:
Здесь 3 слоя, 3 стиля, нет ни одного изображения, нет SVG, нет clip-path; полностью "резиновое" поведение с пропорциональным сохранением всех расстояний.
Могу написать ряд задач (с прямоугольными областями и расстояниями), которые нужно сделать на "чистом" CSS.
Если сможете - можно переходить на следующий уровень изучения CSS.

Худший ответ:
Много практики, качай PSD шаблони и верстай, смотри новие уроки
Вопрос: Как отключить скрипт на пользовательском типе записей через функцию?

Лучший ответ:
От себя добавлю что отключение скриптов только на некоторых страницах бессмысленно, так как все стили/скрипты кешируются браузером и не выполняются запросы на сервер при загрузке страницы, если вы делаете это для чистоты кода - это лишняя трата времени. Лучше собрать все скрипты в один файл и сжать, если вы будете для этого использовать плагины - то на вот таких страницах где вы отключаете скрипты будут генерироваться новые js/css (а это лишняя нагрузка на сервер и увеличение скорости загрузки страницы).

Худший ответ:
add_action ( 'wp_print_scripts', 'my_deregister_javascript', 100 );
function my_deregister_javascript () {
    global $post;
	if ( $post->post_type == 'product' || $post->ID == 'ID_shop_страницы' ) {
		wp_deregister_script ( 'contact-form-7' );
	}
}
Вопрос: Зачем нужен свой собственный DNS?

Лучший ответ:
Ещё для ускорения этой работы домены и ip кэшируются в... браузере, наверное?
В DNS-кэше ОС и роутера, если он поддерживает такую фичу.олько вот зачем он нужен, свой?
В локальной сети для того, чтобы обращаться к устройствам по имени и не забивать всем статический IP. Вы присваиваете сетевому принтеру имя "RetailsPrinter" и разливаете настройки, где он подрубается по имени, а имя берётся из DNS-сервера и даже если IP сменится, он всё равно будет доступен.
Понятное дело, что нет никакого резона обращаться с такими просьбами к DNS-регистратору.
Ну и для ускорения DNS-резолвинга, например.
Для ограничений доступа ещё.

Худший ответ:
> пока изучал всю эту тему ни раз сталкивался с тем, что можно поставить свой собственный DNS. 
> Только вот зачем он нужен, свой? Внятного ответа так и не нашел.
Найдете ответы сами как понадобиться.
Свои ДНС-серверы используют для ускорения запросов, когда нужно организовать собственное пространство имен в своей корпоративной сети, к примеру.
Вопрос: Как обернуть переменную PHP в тег?

Лучший ответ:
<a href="<?= $doc['url'] ?>">Ссылка</a>

Худший ответ:
...
echo "<a href='{$doc['url']}'>Перейти</a>";
...
Вопрос: Как убрать пункт из хлебных крошек?

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

Худший ответ:
отфильтровать массив $APPLICATION->arAdditionalChain
но помни, что большая сила - это большая ответственность
Вопрос: Что это за раритетный компьютер?

Лучший ответ:
Это Пентагон с контроллером параллельного порта (ВВ55) и дисковода (ВГ93).
Модель (48 vs 128) можно посчитать по количеству микросхем ОЗУ (565ру5).
Не выкидывайте, а продайте. Ценителей таких штук полно.
А еще лучше - попробуйте оживить.

Худший ответ:
Ты бы не порты выписывал, потому что это просто стандартные разъёмы - можешь загуглить, а микросхемки повыписывал и фотку клавиатуры сделал получше. Например, центральный процессор - рядом с двумя белыми ПЗУ-шками, внизу две такие же большие микрухи.
А так, да, на спектрум похож, но не факт, что это он. Микрокомпьютеров было полно
Вопрос: Как можно проследить историю электронного письма?

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

Худший ответ:
Как вариант можно снимать хэш файла и хранить у себя. При необходимости просто сравнить с эталоном.
Вопрос: Linux: Что делать с root после того как создал пользователя с обычными правами?

Лучший ответ:
Выполнять строго после того, как убедитесь в работе sudo и возможности подключиться по ssh другим пользователем.
PermitRootLogin no в /etc/ssh/sshd_config (запрет на вход руту по ssh) и sudo passwd --lock root (запрет на локальный логин руту по паролю).

Худший ответ:
Если работа из-под root не предполагается (в 99.9% случаев можно заменить на sudo), то достаточно сделать описанное выше: отключить root в ssh и запретить локальный логин.
Если всё-таки зачем-то нужен root (или в первое время боитесь работы с sudo), то можно переименовать root в другой нестандартный username, чтобы злоумышленник подбирал не только пароль, но и логин.
Вопрос: Как установить, что именно сломалось в ноутбуке?

Лучший ответ:
Это Кали вас похакало.
Шучу. Линукс, скорее всего, тут ни при чём.

Похоже на отвал оперативной памяти видеокарты. Если есть возможность (я не гуглил), то отключите дискретную и переключитесь в BIOS на встроенную.

Худший ответ:
Крайне похоже на битую память. Если у видюхи нет собственной - то это либо системная побилась, либо сама видюха. Системную тестим стандартно, видюху могут починить в мастерской.
Вопрос: React, где лучше хранить такие данные?

Лучший ответ:
Redux. Просто не используйте их в верстке, а чтобы не было ререндера, используйте shouldComponentUpdate

Худший ответ:
Доброго.
Посмотрите на это - https://github.com/r-park/soundcloud-redux
Здесь есть плеер, изменение уровня громкости с хранением в Redux. Да и сама структура проекта сделала достаточно грамотно.
Вопрос: Как сделать ссылку на пользователя у которого нет username?

Лучший ответ:
Никак, это ограничение связано с политикой конфиденциальности Telegram и предотвращением злоупотреблений.
Можно упомянуть пользователя при отправке сообщений (BOT API), но это не то, что Вам нужно:[inline mention of a user](tg://user?id=<user_id>)Links tg://user?id= can be used to mention a user by their id without using a username. Please note:
    These links will work only if they are used inside an inline link. For example, they will not work, when used in an inline keyboard button or in a message text.
    These mentions are only guaranteed to work if the user has contacted the bot in the past, has sent a callback query to the bot via inline button or is a member in the group where he was mentioned.
https://core.telegram.org/bots/api#markdown-style

Худший ответ:
Думаю так в принципе нельзя сделать абсолютно ни как :)
Мне тоже эта штука мешает.
Вопрос: Как создать jar архив в Idea?

Лучший ответ:
Никак. И Idea здесь не при чём. Это работа компилятора Java, причём закреплённая стандартом языка и виртуальной машины.

Худший ответ:
В jar хранится уже скомпилированный в .class файлы код.

А такие вещи как foreach, lambda... называются синтаксический сахар, созданы для удобства написания, но в . Class java их разбирает.

Например lambda будет вложенным классом
Вопрос: Как работает анонимная функция?

Лучший ответ:
const createFirstFun = function(fun)   {
// эта фигня вернет функцию которую можно будет вызвать()
    return function(sometext){      
      // эта фигня будет вызывать переданный сверху fun() с аргументом sometext
      fun(sometext.toUpperCase())      
  }
}


const scream = createFirstFun(
	// вот этот всё внутри createFirstFun станет параметром fun
	function(text) {return alert(text)}
);

// так как createFirstFun вернет функцию которую можно будет вызвать()
// то мы и вызываем эту возвращенную функцию с параметром sometext = 'Hello'
scream('Hello');
ну как-то так

Худший ответ:
Замыкания. Возврат функции