Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Что такое замыкание?

Лучший ответ:
Мне кажется, самый простой пример замыкания - это счетчик. var counter = (function () {
	var current = 0;
	return function () {
		current++;
		return current;
	}
})();

console.log(counter()); // 1
console.log(counter()); // 2
В данном случае мы не имеем доступ к переменной current и функция гарантированно возвращает каждый раз уникальное значение.
Если бы это была простая функция, то переменная, содержащая состояние (current), должна была бы находиться вне функции. var current = 0;
var counter = function () {
	current++;
	return current;
}

console.log(counter()); // 1
current = 5;
console.log(counter()); // 6
А это уже нарушает принцип "черного ящика", т.к. переменной можно присвоить другое значение в любом месте.

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

Лучший ответ:
https://forum.vestacp.com/viewtopic.php?f=10&t=16556
https://forum.vestacp.com/viewtopic.php?f=10&t=16558
https://forum.vestacp.com/viewtopic.php?f=28&t=16555
VestaCP скомпроментирована. Причина в ней.
Народ указывает на /etc/cron.hourly/gcc.sh (XOR.DDoS) как вредоносную нагрузку.

Худший ответ:
Привет,
1. Убрать всякие панели (Весты, СэПэ и т.п.) и рулить сервером из консоли, своевременно обновляя софт.
2. Нанять специалиста, который проведет необходимый аудит и приведет сервер в норму.
Писать тут все то, что будет делать специалист - очень долго.
Вопрос: Есть ли у Skype API для отправки СМС через PHP?

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

Худший ответ:
Можно попробовать взаимодействовать с запущенным клиентом или веб-версией skype.
Либо, попробовать расковырять мобильное приложение (через Fiddler + встроенный расшифровщик HTTPS) и оттуда вытащить методы API
Вопрос: Разрыв соединения Tor+Vpn или Tor+Vpn+Tor как избежать деанонимизации?

Лучший ответ:
Для Tor внутри VPN на Linux - запускать в отдельном namespace, при падении VPN все соединения гарантированно помрут.

Худший ответ:
Маршрут по умолчанию должен всегда показывать на vpn.
Если отвалится vpn пакеты пойдут по дефолтному маршруту.
С DNS все немного сложнее.
Вопрос: Когда использовать классы, а когда функции?

Лучший ответ:
Согласен с Ларисой, но немного дополню.
Классы, собственно, введены для любителей ООП, и действительно - только эмулируют в JS классическое ООП.
Нужны они для того, чтобы инкапсуллировать части кода, иметь возможности классового наследования и проч. Но нужно не забывать, что в JS используется наследование на прототипах и никакого другого в нем нет.
Если понять вышесказанное, то от классов в JS лучше отказаться, и использовать встроенные инструменты. Сразу скажу единственный минус, который я не смог чисто обойти - отсутствие множественного наследования.
Итак, инкапсулляцию лучше всего делать, размещая все функции отдельного блока кода не в классе, а в качестве методов объекта.var obj1= {
prop1: value,
met1: function(arguments) {
body
}
// etc
}
При таком подходе мы имеем в глобальном скопе лишь одну переменную, но можем вполне использовать весь ее потенциал, как:obj1.met1();
И зачем нам нужны классы при таком подходе?
Если нам нужно унаследовать от другого объекта, самым простым способом будет разместить ссылку на родительский объект в свойстве __proto__ наследника.var parent= {...};
var child= {
__proto__: parent,
.....
}

Худший ответ:
JS-классы — это так называемый «синтаксический сахар» для тех, кому больше нравится или кто больше привык писать именно в таком виде. На самом деле — это другой (по синтаксису) способ объявлять функции-конструкторы.
Подробнее — здесь https://learn.javascript.ru/es-class и здесь https://habrahabr.ru/post/175029/ 
Про функции-конструкторы можно почитать здесь: https://developer.mozilla.org/ru/docs/Web/JavaScri...
Вопрос: Стоит ли делать отдельный том для файлов при разметке диска в Linux?

Лучший ответ:
Отдельный том скорее надо делать не для / , а для home. Это не обязательно, но если позволяет объем диска, то лучше выделить home на отдельный раздел.

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

Лучший ответ:
Если сортировка не важна, то как вариант:sort history.txt | uniq -u

Худший ответ:
рецепт
Вопрос: Как сделать запрос по зависимости один ко многим, с наименьшими затратами, в MySQL?

Лучший ответ:
В действительности вы описали связь "многие ко многим".
Один пользователь может быть связан с несколькими городами и к одному городу может быть привязано несколько пользователей.
Вам нужно реализовать подобную структуру в БД
А дальше нужны грамотные индексы по таблицам.
В таблице связей первичный ключ делаете составным из 2х полей

Худший ответ:
1. Делаете таблицу отношений между городами и пользователями
2. Заранее получаете список городов и пользователей, а также их отношения, НЕ одним запросом
3. В цикле php проверяете кто к кому относится
Вопрос: Как переустановить centos без потери данных?

Лучший ответ:
Если /home находится на отдельном разделе, то файлы на нём не будут тронуты (если только не отформатировать раздел при установке). 
Просто убедитесь, что НЕ стоят галочки в колонке "Format" на разделах, файлы на которых вы не хотите терять.

Худший ответ:
ну так же ж перенести данные из home на примонтированные диски, а потом назад их примонтировать после переустановки и обратно переместить в хоум всё... странный вопрос
Вопрос: Тарифные пакеты или индивидуальная цена для каждого проекта? Как вы определяете стоимость разработки?

Лучший ответ:
толку от тарифных планов. ты никогда не объединишь все проекты под тарифные планы. разработка сама по себе индивидуальна всегда.  считай дальше исходя от количества часов. берешь среднюю цену(пальцем в небо) и пишешь в прайсе своем с пометкой "от n руб". а дальше уже любой заказ индивидуально считаешь.

Худший ответ:
Три тарифных плана, думаю, излишне. Однако мне, как клиенту, обычно лучше видеть хотя бы ориентир цены заранее.
Как оно в большинстве случаев:Нужен сайт. Простая визитка. Вопрос - какую цену заложить? Вот тут и нужна Ваша цифра.
Далее уже выясняется, что сайт не простой и начинается реальная работа.
Как бывает на деле:-драсте, нам сайтик нужен. Визитка, страничек пять, тексты наши
-высылайте ТЗ, мы подумаем
Серьёзно? Мне ради визитки ТЗ писать, согласовывать, подписывать, утверждать? Я и обращаюсь к людям, которые сразу могут сказать реальную цену (хотя бы "от", а резервы заложить я сам управлюсь).
А, я же внятного ответа не написал.
Ценник писать сразу, брать реальный минимум плюс процентов 10-15
Вопрос: Как перевести секунды полученные из monotonic() в дату типа 03.04.2019 17:15?

Лучший ответ:
Никак. По монотонным часам нельзя определить ни дату, ни время.

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

Лучший ответ:
Современный способ по добавлению и удалению классов - classList API.document.getElementById('intro_btn').onclick = function() {
  document.getElementById('main').classList.add('main--main-bg');
}
Соответственно, на чистом js каждой кнопке даёте id, и присваиваете нужный класс. Если нужно убрать, то classList.remove('название_класса'), если включить/выключить - то toggle()

Худший ответ:
document.getElementById('intro_btn').onclick = function() {
  document.getElementById('main').classList.add('main--main-bg');
  this..classList.remove('main--main-bg');
}
а как с помощью этого кода на ту же кнопку удалить класс ? мне получается открыть кнопку , а чтобы убрать класс не получается, вот так я пробовал до все этого
Вопрос: Где больше практики?

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

Худший ответ:
А какая цель?
Вопрос: Как правильно собрать nginx с http2 в ubuntu 16.04?

Лучший ответ:
А зачем эти теложвижения, если есть готовые пакеты от разработчиков(https://nginx.org/ru/linux_packages.html)?

Худший ответ:
Ладно, я сам разобрался. Косяк в --sbin-path=/usr/local/sbin, ненадо туда ставить, снес там все что имело отношение к nginx, выставил --sbin-path=/usr/sbin/nginx и все заработало!
Вопрос: Как правильно снять значение нагрузки CPU с удаленного сервера windows или linux?

Лучший ответ:
Zabbix, nagios - системы для централизованного сбора статистики с хостов, как Win, *nix и прочего оборудования, поддерживающего SNMP. 
Если стандартного набора скриптов этих систем будет недостаточно, они могут выполнять и вот такие скрипты как найденный вами, возвращая результат серверу мониторинга, где вы централизованно сможете смотреть сатистику по всем своим системам.

Худший ответ:
нашел вариант для linuxpackage com.yeepay.g3.app.cd.utils;

import com.jcraft.jsch.*;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

private String ipAddress;

private String username;

private String password;

public static final int DEFAULT_SSH_PORT = 22;

public Test(final String ipAddress, final String username, final String password) {
    this.ipAddress = ipAddress;
    this.username = username;
    this.password = password;
}

public int execute(final String command) {
    int returnCode = 0;
    JSch jsch = new JSch();

    try {
        jsch.setKnownHosts("/Users/wtnull/.ssh/known_hosts");
        // Create and connect session.
        Session session = jsch.getSession(username, ipAddress, DEFAULT_SSH_PORT);
        session.setPassword(password);
        session.connect();

        // Create and connect channel.
        Channel channel = session.openChannel("exec");
        ((ChannelExec) channel).setCommand(command);

        channel.setInputStream(null);
        BufferedReader input = new BufferedReader(new InputStreamReader(channel.getInputStream()));

        channel.connect();
        System.out.println("The remote command is: " + command);

        // Get the output of remote command.
        String line;
        while ((line = input.readLine()) != null) {
            System.out.println(line);
        }
        input.close();

        // Get the return code only after the channel is closed.
        if (channel.isClosed()) {
            returnCode = channel.getExitStatus();
        }

        // Disconnect the channel and session.
        channel.disconnect();
        session.disconnect();
    } catch (JSchException | IOException e) {
        e.printStackTrace();
    }
    return returnCode;
}

public static void main(final String [] args) throws Exception {
    Test sshExecutor = new Test("172.17.102.180", "root", "123456");
    sshExecutor.execute("free -m");
}

}
Вопрос: Почему ssh-сервер всё равно запрашивает пароль?

Лучший ответ:
ssh -v -i ~/.ssh/devserver git@<адрес_сервера_разработки>
Так будет куда более понятно, что происходит с авторизацией.
Далее, где лежит приватный ключик у вас локально?
Какие права на authorized_keys? authorized_keys лежит в .ssh/ в домашней папке нужного пользователя?
P.S. Вообще, переносить ключик удобно с помощью ssh-copy-id.

Худший ответ:
При создании ключа просто не указывайте пароль)
Вопрос: Как перенести шрифты с Google Fonts?

Лучший ответ:
Нашел решение. Есть Тулза, https://google-webfonts-helper.herokuapp.com/fonts...,latin . Супер просто! Скачал файлы и вставил CSS - работает!

Худший ответ:
Гугл для разных браузеров отдает разные форматы между делом.
Может поэтому браузер не считал этот шрифт в ttf?
Сконвертируйте ttf во всех форматы и пропишите в css.
Вопрос: Как реализовать массив подстановок для запроса в MySQL?

Лучший ответ:
Внимание, а теперь правильный ответpublic function query($sql, $params = NULL){
        $sth = $this->dbh->prepare($sql);
        $sth->execute($params); // <----
        return $sth;
    }
Это базовая функция, которая должна использоваться при выполнении ВСЕХ запросов.
В том числе запросов на вставку, обновление и удаление, а также запросов, которые при всем желании не могут вернуть объект. Например$db->query("DELETE FROM t WHERE id=?", [$id]);
$count = $db->query("SELECT count(*) FROM t")->fetchColumn();
В принципе, этого уже достаточно, поскольку для получения списка объектов можно написать$list = $db->query("SELECT count(*) FROM t")->fetchAll(\PDO::FETCH_CLASS, "class");
Но если прям так очень хочется, то можно засунуть этот код в хелпер-функцию public function listObjects($sql, $class, $params){
        return $this->query($sql, $params)->fetchAll(\PDO::FETCH_CLASS, $class);
    }

Худший ответ:
Используя ...$arr вы не получите ключи в массиве. Поэтому почему бы не сделать третий агрумент обычным агрументом, и не передавать туда массив, который без изменений будет передаваться в execute?public function query($sql, $class, $params){ // $params = [":age"=>20]
        $sth = $this->dbh->prepare($sql);
        $res = $sth->execute($params); // <----
        if (false !== $res) {
            return $sth->fetchAll(\PDO::FETCH_CLASS, $class);
        }
        return [];
    }
Вопрос: Кому реально нужны правила по использованию cookie на сайте?

Лучший ответ:
Большинство сайтов используют cookie, так сказать косвенно. Вот на пример, вы ведёте свой личный блог. В нем нет никаких форм, комментариев, ничего. Пользователи просто зашли, почитали и ушли. Ваш сайт не использует cookie. Но стоит вам поставить аналитику — и уже аналитика будет добавлять для каждого посетителя cookie. 
Дело в том, что с их помощью вы можете отслеживать любую активность человека. Откуда он пришел, что смотрел, что делал. Об этом и стоит информировать пользователя. Поведение пользователя в интернете — это его личная, приватная информация. И вы обязаны его информировать о том, какие данные вы о нем собираете, и что вы с ними делаете.
Вот вы когда приходите в магазин — там обязано быть уведомление о том, что ведётся видеозапись. То же самое и тут.UPD
Недавно законы в этом отношении несколько ужесточились. Большие мешающие просмотру плашки с вопросом "А можно мы будем использовать cookie?" это на самом деле не такая серёзная проблема. Куда серёзнее:Сайт не предлагает вам вариант НЕ разрешать слежение за собой. Он просто информирует. "Ты уже тут, и я уже всё о тебе знаю"Сайт предлагает вариант "Не следить" но лишь формально. Не зависимо от вашего выбора, cookie всё равно будут собираться и обрабатываться.При выборе варианта "Не следить" вас попросу не пускают на сайт. Потому что дешевле заблокировать вам просмотр, чем переделать сайт таким образом, чтобы он корректно работал без cookie.

Худший ответ:
Если некая программа загружает на ваш компьютер определенный массив информации, и активно его использует, по идее неплохо было бы получить у вас на это согласие.
Это как и с базой персональных данных - нельзя просто так взять и записать ваши данные без вашего согласия.
Вопрос: "Глобальная" аутентификация в yii2?

Лучший ответ:
У вас для этого есть Access Control Filter. Объявляете его в behaviors() контроллера и будет вам счастье.

Худший ответ:
Не хватает функционала Middleware :) 
Базовые контроллеры делать под каждый раздел приложения — такое себе :)
Вот обсуждение по Middleware в Yii2
https://github.com/yiisoft/yii2/issues/15438* А можно Ларавел взять, там из коробки это все есть (...ехидный смех...)
Вопрос: Есть ли готовая обертка над Imagick/GD с богатым API?

Лучший ответ:
https://github.com/Intervention/image
Примерно так решается ваша задача:<?php

$path = 'path/to/img.png';

$width = $height = 300;
$background = '#ffffff';

$plain = Image::canvas($width, $height);
$plain->fill($background);

$img = Image::make($path);

$img->resize($width, null, function ($constraint) {
    $constraint->aspectRatio();
});

$plain->insert($img, 'center');
$plain->save('resized.png');

Худший ответ:
https://github.com/Intervention/image
Примерно так решается ваша задача:<?php

$path = 'path/to/img.png';

$width = $height = 300;
$background = '#ffffff';

$plain = Image::canvas($width, $height);
$plain->fill($background);

$img = Image::make($path);

$img->resize($width, null, function ($constraint) {
    $constraint->aspectRatio();
});

$plain->insert($img, 'center');
$plain->save('resized.png');
Вопрос: Можно ли запустить Windows приложение в Linux Docker container?

Лучший ответ:
ну читайте же внимательнее )You can run Windows-based containers on Windows Server 2016 and Windows 10. Windows-based containers require a Windows kernel to run, in the same way that Linux-based containers require a Linux kernel to run. You can even run Windows-based containers on a Windows virtual machine running on an macOS or Linux host. Docker Machine is not necessary if you run macOS 10.10.3 Yosemite, Windows Server 2016, or Windows 10.
https://docs.docker.com/engine/faq/

Худший ответ:
Нет.
Докер - это не особо большая НАДСТРОЙКА над ядром Линукса.
Он просто удобным способом позволяет изолировать и запускать родные приложения Линукса.
Из неродных вариантов - разве только запуск Линуксовых приложений из под Докера ФриБСД или напротив запуск Фришных приложение из под Докера Линуха - так как эти операционные системы близки.
С Виндовс сие невозможно в принципе.
Тот Докер что устанавливается в Виндовс - тянет за собой полноценный Линукс. И только это делает возможным запуска Линукс приложений в Докере Виндовс.
Обратная процедура также нетривиальна.
Если вам нужен аналог Докера для запуска приложений Виндовс - обратитесь к технологии Windows Container.
Вопрос: Интеграция сайта в wordpress. Возможно?

Лучший ответ:
ваш путь способ номер 1 или даже способ 1,1 что лучше, просто импортнуть базу в базу WP WC
второй способ он сильно геморройный, и много всякого придется пере/дописывать

Худший ответ:
Дав шага:
1, Из текущей базы сформировать csv или xml и импортировать в WC. 
2. Выкинуть то, что было раньше (насколько я понял оно уже не нужно, раз всё управление товарами перенесется на WC)
Пр необходимости
3. Настроить редиректы
Вопрос: C++ или C# в рамках OpenCV проекта?

Лучший ответ:
На С++ будет работать быстрее(если правильно написать).
На C# будет проще написать и быстрее написать. 
Я бы для такой задачи выбрал бы связку на C#:
1)sqllite или mssql express в качестве бд. Sqllite если все данные хранятся локально.
2) Для работы с бд в c# есть entity framework
3) В качестве библиотеки компьютерного зрения я бы выбрал EmguCv. (Почти тоже самое, что и OpenCVSharp, но документация лучше, поддерживается лучше и в общем информации больше)
4) Ну и в качестве интерфейса можно использовать winforms, хотя я бы написал на wpf
Обосновать такой выбор можно сокращением времени разработки.
По вопросу 1: Если бы это был реальный проект, то скорее всего часть для обработки изображений была бы написана на c++, а интерфейс на c#+wpf или с помощью какого нибудь фрейм ворка типа react.

Худший ответ:
На С++ будет работать быстрее(если правильно написать).
На C# будет проще написать и быстрее написать. 
Я бы для такой задачи выбрал бы связку на C#:
1)sqllite или mssql express в качестве бд. Sqllite если все данные хранятся локально.
2) Для работы с бд в c# есть entity framework
3) В качестве библиотеки компьютерного зрения я бы выбрал EmguCv. (Почти тоже самое, что и OpenCVSharp, но документация лучше, поддерживается лучше и в общем информации больше)
4) Ну и в качестве интерфейса можно использовать winforms, хотя я бы написал на wpf
Обосновать такой выбор можно сокращением времени разработки.
По вопросу 1: Если бы это был реальный проект, то скорее всего часть для обработки изображений была бы написана на c++, а интерфейс на c#+wpf или с помощью какого нибудь фрейм ворка типа react.
Вопрос: Как раздать интернет с линукса на андроид через usb кабель?

Лучший ответ:
Стандартный способ -- загрузить на хосте драйвер cdc_ether а на девайсе -- g_ether, после чего у обоих должен появиться интерфейс usb0.

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

Лучший ответ:
Так делайте НЕ типовой проект что бы выйти из зоны комфорта. Вы пытаетесь думать где применить варежки на Юге, хотя надо поехать на Север и там им сразу найдется применение.Всем нам хочется нормально жить, для чего зарабатывать деньги важнее, чем проводить эксперименты.
Вот вы сделали проекцию своего мнения на всех, а кто-то всё свободное и часть рабочего времени тратит на эксперименты, а зарабатывает мало ))какие узкие места в разрабатываемых проектах можно закрывать посредством Go, Elixir
Если там нагрузка будет только тестовая от вас то и PHP везде справится, а так... запилите pet-проект с API, откройте его миру бесплатно, немного продвижения и тогда вы увидите как текущие средства не справляются с нагрузкой и придёт время применять другие технологии.
Понятное дело, что как ни думай как в песочнице поработать экскаватором - все решения будут так себе.

Худший ответ:
Так вот, какие узкие места в разрабатываемых проектах можно закрывать посредством Go, Elixir, модных нынче функциональных языков? Для каких задач в реальном мире они предназначены лучше всего? Возможно они идеальны для написания каких-либо узкоспециализированных микросервисов, воркеров итд.Если пишите на PHP - пишите дальше на PHP. 
Для перечисленного на PHP - есть pthreads.
Добавлю это.
Если хотите большую ЗП, язык программирования - не главное!
Главное - ваше умение и способность создавать востребованный, удобный, конкурентоспособный, производительный и легко масштабируемый бизнес-сервис за минимальное время и стоимость.
Вопрос: Как сделать вертикальное выравнивание html элементов?

Лучший ответ:
Ну например.
https://codepen.io/aliencash/pen/PmeaPL
Только если вы не понимаете как это работает, какая вам от этого польза?

Худший ответ:
Выравнивание по высоте будет отличаться от того, в потоке располагается контейнер текста или вне потока.
Любимым решением для потока до появления flex был table-cell.<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Вертикальное выравнивание display: table-cell</title>
<style>
  .wrapper {
    display: table;
    width: 100%;
  }
  .cell {
    display: table-cell;
    height: 100px;
    vertical-align: middle;
  }
</style>
</head>
<body>
  <div class="wrapper">
    <p class="cell">Я выровнен по вертикали</p>
  </div>
</body>
</html>
Код взят с сайта verstaka.net/verstka/gorizontalnoe-i-vertikalnoe-v...
Вопрос: Как верстать макет, который размером 1900px?

Лучший ответ:
Если макет имеет разрешение более 1280px, то дизайнер, купивший неделю назад макбук для трушности, идиот, потому что не позаботился о совместимости его работы с нормальными мониторами. Чтобы сверстать такой макет, необходимо в фотошопе уменьшить размер изображения (с пропорциями) до стандартной ширины. Например, 960 пикселов. Можно и побольше, ориентируясь на макс. ширину Тостера или вашего собственного монитора, например.
Но как правило, корректно дропать размер сразу в 2 раза - зачастую, именно это и требуется. Если есть сомнения, можно уточнить у заказчика.
Если все же нужно, чтобы на 1900px выглядело именно так, лучший выход - дропнуть размер под комфортный для работы, а на более высокие разрешения просто увеличивать размер контента, пропорционально. Само собой, верстку нужно будет построить на основе процентов \ viewport units, и em.

Худший ответ:
- нужно было изначально уточнить детали проекта и отказаться от проекта если не можете исполнить
- купить монитор с 1900
- делать в масштабе ( думаю будет тот еще изврат)