Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как в гугл таблицах открыть доступ к определенному диапазону ячеек?

Лучший ответ:
1) Выделяете диапазон ячеек.
2) В меню Data кликаете Protected sheets and ranges
3) Запрещаете редактирования всем кроме себя
4) Скрываете эти столбцы (hide) !
при попытке открыть скрытый диапазон "левый" юзер получит сообщение "Произошла ошибка
Эта область защищена. Чтобы отредактировать ее, попросите владельца таблицы отключить защиту."

Худший ответ:
Никак. Минимальной единицей, для которой назначаются права доступа в Google Docs, является цельный документ.
Распределяйте фронт работ по отдельным файлам.
Вопрос: Как вставить html в сгенерированную, с помощью php, картинку?

Лучший ответ:
Берем phantomjs, пишем такой файл:// render.js
var webPage = require('webpage');
var page = webPage.create();

page.viewportSize = {
    width: 1920,
    height: 1080
};

page.open('http://toster.com', function (status) {
  var base64 = page.renderBase64('PNG');
  console.log(base64);
  phantom.exit();
});
затем из php вызываем <?= exec("phantomjs render.js") ?> и получаем base64 картинки с сайта.

Худший ответ:
Я бы сложил картинку в переменную а в нужном месте сделал echo
Вопрос: Что наследуется в ООП?

Лучший ответ:
Класс наследуется, интерфейс реализуется.interface I {}
class A {}
class B extends A implements I {}
Класс обычно называют чертежом объекта. А интерфейс - это контракт, который объект обязан выполнить.
Возьмем, например, Велосипед, Грузовик и Мотоцикл.Мотоцикл - это почти Велосипед, он делается по тому же чертежу с небольшими дополнениями. Это наследование. Грузовик при этом ни от Велосипеда, ни от Мотоцикла не наследуется, у него совсем другой чертёж.
Но каждый из этих объектов реализует контракт ТранспортноеСредство. Если у вас есть объект, являющийся ТранспортнымСредством, вы всегда уверены, что доедете из пункта А в пункт Б и при этом вам совершенно неважно сколько у этого объекта колёс.
А вот если у вас есть контракт Автомобиль, то вы знаете, что можете выполнить такие действия как ОткрытьКапот, ВключитьСтеклоочистители. Велосипед при этом не сможет реализовать такой интерфейс. А Грузовик будет реализовывать оба контракта: хотите - передвигайтесь, хотите - открывайте капот.

Худший ответ:
> Наследуется сам Класс или его Интерфейс?
Что значит "его интерфейс"?
Интерфейс - это отдельная архитектурная единица, такая же, как и класс. Описывается ключевым словом "interface". 
По умолчанию у класса нет никакого интерфейса (если он сам его не реализует).
---
Если класс наследует класс (в Java это extends), то наследуются его методы, поля, свойства. То есть дочерний класс приобретает все члены базового, и может еще добавить что-то от себя (или переопределить унаследованное). Методы наследуются вместе с их реализацией, т.е. для дочернего класса они будут работать так же, как и для базового.
К примеру, возьмем GUI: классы Button и Label наследуют базовый класс Control, при этом свойства Left, Top, Width, Height, унаследованные от Control, в обоих классах работают одинаково. При этом  реализация и заголовки этих методов прописаны только в Control.
Если класс реализует интерфейс (в Java это implements), то он получает от интерфейса заголовки методов, а реализовать их он должен сам, причем все. В интерфейсе реализаций методов нету, в этом его главное отличие от класса.int foo() // - это заголовок метода
{ 
// а здесь реализация (она же определение, тело...) метода (собственно код)
}
Вопрос: Что использовать на backend для SPA приложений?

Лучший ответ:
Yii2 или другой php фреймворк, то какой вообще в нем смысл если бОльшая часть его функционала будет не нужна, контроллеры, экшены, роутинг,
С чего это вдруг? Для REST API как раз контроллеры, роутинги и т.п. ой как нужныт.д, по сути мне от него нужны только модели будут и все.
А вот как раз модели лучше делать независимыми от фреймворка, т.к. модели это бизнес-логика, и когда она зависит от фреймворка это Bad Practice
Так же возникает вопрос в рациональности использовать базу mySql или же переходить на mongoDB
Рациональность использования базы данных никаким образом не относиться к взаимодействию с API. Без разницы используете ли Вы REST API или нет. Все зависит от того какие задачи решает Ваш проект, какие данные в нем хранятся, какие требования у Вас к базе и т.п. Во общем ответ на этот вопрос зависит от множества факторов и индивидуален для каждой задачи. Есть ряд задач для которых оптимальным является использование реляционной СУБД, есть задачи для которых лучше использовать документированную базу. Что лучше на данный момент использовать на бэкенде и что на практике используют чаще? 
Все опять таки зависит от Ваших требований и задач. Нужно сделать быстрое приложение за короткое время - используйте Yii, нужно сделать приложение с хорошо организованной архитектурой используйте Symfony

Худший ответ:
если вам не нужен серверный рендеринг то особого преимущества в node.js нет
если у вас все работает на mysql то смысла переходить на mongodb тоже  нет, nosq нужно использовать с умом и когда он нужен, если он не нужен то и не нужно его использовать Вот если я буду использовать Yii2 или другой php фреймворк, то какой вообще в нем смысл если бОльшая часть его функционала будет не нужна, контроллеры, экшены, роутинг, хелперы и т.д, по сути мне от него нужны только модели будут и все
а в чем проблема то ?
если вы хорошо знаете Yii2 используйте его, не знаете Yii2 но знаете php возьмите микрофреймоврк slim или аналог
Вопрос: Как заставить работать все процессоры на android 8.1?

Лучший ответ:
Отключение сна ядер с помощью Kernel Adiutor:
Вкладка ЦП - переменные регулятора цп - параметр "is_cpu_hotplug_disable" меняем значение 0 на 1. Т.е. при смене 0 на 1, ядра ЦП перестают отключаться, останавливаются на заданной минимальной частоте. Повышение частот происходит при загрузке ЦП в зависимости от настроек.

Худший ответ:
Поставить оригинальную прошивку
Вопрос: Какой стек технологий выбрать для приложения в трее под разные настольные ОС?

Лучший ответ:
Если надо максимально автономное и есть знание или желание познать С++ - то QT, если это не слишком принципиально - то можно и C# + Mono, но тут сложность в том, что кроме самого приложения надо тащить и устанавливать рантайм библиотеки - а это еще мегабайт 30-50.

Худший ответ:
Ещё есть Lazarus (Delphi-like)
Вопрос: Как удалить домен в яндекс.коннект?

Лучший ответ:
https://yandex.ru/support/connect/troubleshooting....
Теперь в нашем сервисе есть возможность самостоятельно удалить домен, даже если он единственный в Вашей организации. 
Если Вы хотите удалить свой домен из Яндекс.Коннект, пожалуйста, сделайте следующее: 
1. Перейдите в раздел Профиль организации
2. Нажмите значок ... (три точки в правом верхнем углу профиля Вашей организации ) 
3. Выберите пункт "Удалить организацию". 
Это получится сделать, если: 
1. Делать это из внешнего аккаунта администратора вида login@yandex.ru 
2. На домене нет ящиков пользователей (общий ящик организации вида all@domain.com удалится автоматически при удалении организации)
3. На домене никогда не были подключены платные сервисы в Яндекс.Коннект (Трекер или Расширенный тариф)

Худший ответ:
Было такое, тех. поддержка отвяжет домен в этом случае, нужно просто подождать.
Вопрос: Нужна ли обязательно батарея с поддежкой NFC для Samsung Galaxy Note 4?

Лучший ответ:
Отсутствие NFC.

Худший ответ:
попробовал вариант с батареей без NFC (в г. Краснодар на июнь 2017 - 700-800 р.),
продавец заверил что разницы никакой нет только с того что НЕТ NFC.
НО после ее тестирования в течении 20 минут, понял что видимо разница не только в отсутствии или наличии NFC. но и в наполнии аккумулятора есть (сначала это было на уровне чувств).
В итоге остановился на оригинале с NFC за 1000 р. (Сitilink в июне 2017 в краснодаре на них давал скидку).
После 20 минутного использования могу сказать разница есть, 
в пользу без NFC только цена.
Вопрос: Как сделать разыменование массива javascript?

Лучший ответ:
Разрушающее присваивание (destructuring assignment):

var a, b;
[a, b] = [1, 2];

Появилось в JavaScript 1.7, работает в Fx2.0+; вероятно, также в O11.50+ и IE9+.

Худший ответ:
В такой поздний час пришло в голову только такие варианты.
Глобальные переменные:

var arr = {'one' : 1, 'two' : 2};

for(var key in arr){
    if(arr.hasOwnProperty(key)){
        window[key] = arr[key];
    }
}
</script>

Если вместо window подставить this, то видимость переменных ограничится функцией.

И такой вариант, но использовать не рекомендую.

<source lang="javascript">
var arr = {'one' : 1, 'two' : 2};

for(var key in arr){
    if(arr.hasOwnProperty(key)){
        eval('var ' + key + '='+arr[key]);
    }
}
Вопрос: Является ли верным реализация menu таким образом?

Лучший ответ:
Ну во первых, <menu>  и вложенный в него<ul>,  уже не особо корректно.
Используйте просто ul > li либо menu > li.
Подробнее можете прочитать тут htmlbook.ru/html/menu
Во вторых объясните подробнее, что вы хотите делать с меню?
При наведении/клику на какой либо элемент , чтобы оно появлялось?

Худший ответ:
1. 
Если menu, то ul лишний https://webref.ru/html/menu
Если хочется ul, то nav
2. 
Чаще всего не надо 2 раза писать меню. 
Меню одно и меняется только его положение выстраивание с помощью CSS (например, flex).
Делается кнопочка, бутербродик, скрытая на десктопах, видимая на мобильных. 
На мобильных меню сначала скрыто и открывается по кнопочке.
Вопрос: Нужно ли NodeJS разработчику знать php?

Лучший ответ:
Забей, лучше удели больше времени node, фреймворки можешь посмотреть, не забивай голову php. Просто если знаешь php, то будет легче разобраться, поскольку много общих моментов есть.

Худший ответ:
Если планируете развиваться в сторону бек-энда - то да, стоит.
Есть вещи, которые на ноде очень хорошо делаются, а на php приходится извращаться (на текущей работе как раз с таким столкнулся).
Но, опять же, зависит от вашего уровня. Иногда надо не распыляться на языки и технологии, а сконцентрироваться и хорошо изучить узкий стек, тот же php/ооп/mysql/linux
Вопрос: Какой лучше использовать стартовый шаблон для Front-end?

Лучший ответ:
А в чем проблема сделать себе шаблон? Пример

Худший ответ:
optimizedhtml-start-template
Пользуюсь этой сборкой 
Там есть подробная инструкция, даже видео обзор
Вопрос: Какой выбрать лёгкий ноутбук для web-разработчика?

Лучший ответ:
Смотрите ноутбуки Apple. Из всех веб-разработчиков с которыми я общаюсь — все работают либо на MacBook (Pro, Air), либо на iMac и очень довольны:
— Нет вирусов, а значит зловредное ПО не утащит у вас пароли от FTP и не загрузит вирусов на ваши сайты, не нужно заморачиваться покупкой антивирусов
— OS X это Unix, а значит доступны все Unix-команды и т.д.
— Качественное железо

Худший ответ:
Подождать до июня =) Там HP новые Элитбуки представит — по всем параметрам вроде подходят. От себя — имею элитбук прошлого поколения, поменяю только на такой же, единственный недостаток — вес (но у меня 15" и в новых это исправлено).
Вопрос: Прикладное применение интерфейсов?

Лучший ответ:
Две последние буквы SOLID для вас ( https://en.wikipedia.org/wiki/SOLID_(object-orient... ). Вообще рекомендую прочитать всю эту статью, она очень дельная (+ все ссылки из секции Design and development principles). Использование этих принципов позволят писать относительно неплохой код даже без понимания (которое приходит с опытом обычно). Кстати, в этих статьях должны быть ссылки на книги по ОО-проектированию (ну в любом случае они неплохо гуглятся).
Необходимость в интерфейсах и абстрактных классах возникает в основном в больших коммерческих проектах. Использование интерфейсов позволяет понизить связанность компонентов системы (их уровень знания друг о друге), что, в свою очередь, позволяет легче модифицировать систему, работая в команде. Например пишет один программист какой-то класс для запуска задач и делает у него метод, который принимает интерфейс IRunnable (возможно с одним методом run()) и описывает контракт (правила, как метод run() должен себя вести). После этого, любому другому программисту достаточно будет реализовать интерфейс по контракту и он сможет пользоваться классом для запуска задач. При этом, класс для запуска задач вообще понятия не имеет о том что он запускает, ему важно знать, что это можно запустить, и любому другому классу нет необходимости знать, как его запускают, достаточно просто реализовать метод.

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

Лучший ответ:
Никак, так делать не надо. Вынесите код в класс-сервис и дёргайте его из обоих контроллеров. И вообще, логика в контроллерах это не есть хорошо.

Худший ответ:
Прочитайте про “laravel service layer” первые 5 ссылок в гугле
Вопрос: Как сделать круглые кнопки?

Лучший ответ:
или используй иконки с соотношением сторон 1:1или вместо картинок блок, картинки на back c этого блока background:cover; и блоку задать width height 1:1
ПС: иконки картинками это же преступление против логики. Сделай спрайтом или вообще иконочный шрифт или просто возьми готовое: https://fontawesome.com/

Худший ответ:
Чтобы были круглые высота должна быть равна ширине. Типа такого
Вопрос: Как сделать область видимости в javascript?

Лучший ответ:
Можно обратиться только к глобальному объекту, через window, self или this (последнее — для функции — не метода объекта). Даже для внутренних функций со своим скоупом this будет window.
<script>

(function(){
	var aa = function(){
		console.log(window==this, this)
	}
	aa()
})()

</script>
Локальный скоуп недоступен. Сделано, видимо, для возможности написания независимых скриптов на одной странице или, другими словами, для невлияния другого скрипта на первый через скоуп каким-либо образом (например, стирать переменные из него).

Худший ответ:
Возможно я не совсем понял вопроса, но…

var data = (function(){
    var a = "provate string";
    var b = "public string;";

    return {
        a: a
    };
})();


следующим способом обычно достигают имитации приватных свойств. Обычно используется для приватных методов/свойств и экспортирует объект содержащий геттеры и сеттеры.

Если вам необходимо иметь доступ ко всем внутренним переменным, то имеет смысл публиковать их через this.prototype. Тогда вам останется лишь создать инстанс вашей функции и обращаться к опубликованным свойствам. Возможно можно ограничиться лишь this но тут я вам точно не скажу. Надо пробовать.
Вопрос: Почему ошибка в getDate?

Лучший ответ:
Разумеется, потому что это строка.

Худший ответ:
попробуйте так:var timeDiff = Math.abs(new Date(firstDate).valueOf() - new Date(secondDate).valueOf());
Вопрос: Как перенести установленную Server 2012 r2 на новый сервер?

Лучший ответ:
Акронисом создать образ, при восстановлении поставить галку, на пункте "universal restore", всё заведётся, останется доустановить необходимые дрова, и удалить устройства с именем "VmWare", что бы не было путаницы.
Для этого можно выполнить БАТник, что то вроде такого:@Echo Off 
Prompt $p$g 
set DEVMGR_SHOW_NONPRESENT_DEVICES=1 
start devmgmt.msc 
exit
Данный скрипт покажет в "Диспетчере устройств" все скрытые/отключенные устройства.

Худший ответ:
А есть ли смысл переносить систему на железо? Поднимайте также на виртуалке vSphere, это гораздо удобнее.
Вопрос: Где можно получить сертификат фронтенд разработчика?

Лучший ответ:
Это все бумажки для подтирания ИМХО. Только одна ламинированная, а другая шершавая.
Запомните раз и на всегда! Работодатель хочет заработать на вас денег! Из этого он будет смотреть что вы умеете и тут 2 варианта: вы красиво вешаете лапшу и продаёте себя, либо у вас есть портфолио работ.
Так что по факту надежный вариант только 1 - делайте портфолио.
От бумажки только 2 толку - увеличение ЧСВ или прохождение реальных курсов.

Худший ответ:
На geekbrains
Только если тебе для работы, то он нисколько преимущества не даст
Вопрос: Как быть начинающему backend-разработчику?

Лучший ответ:
Странно. Вы говорите, что знаете 2 языка и имеете уже 5(!) относительно крупных проектов на гитхабе (плюс еще навыки работы с БД и фронтенд). По своему опыту могу сказать, что с таким багажом вполне можно устроиться джуном, и даже могут рассмотреть на удалёнку. Либо вы проживаете в каком-нибудь условном "Мухосранске" (не в обиду, образное выражение, сам практически из глухой провинции) и там совсем мало IT-компаний, либо что-то недоговариваете и описали ситуацию очень однобоко и субъективно.

Худший ответ:
Выбросьте из головы ограничивающее убеждение насчет того, что никому не нужны джуниоры и никто не станет тратить время на их обучение. Оно не верно по следующим причинам:
1) Мидлами и синьорами не рождаются. Большинство из них сначала работали джуниорами.
2) Дефицит кадров в отрасли таков, что хоть и не хотелось бы, но многим приходится брать джуниоров и натаскивать их.
3) Джуниоры дешевы. Поэтому опытный менеджер найдет для них задачи их уровня.
Кстати не факт, что вы правильно определили свой уровень, как джуниор. Это выясняется не самостоятельно, а при выполнении тестовых заданий и на собеседовании с участием технических специалистов.
Вопрос: Mikrotik: Как настроить доступность сервера через 2 провайдеров?

Лучший ответ:
Валентин выше правильно пишет -- самая простая схема -- это делать ещё и SNAT для трафика, прошедшего через 1-ый микротик к серверу. Но учтите, что при этоё схеме вы потеряете информацию о SRC IP клиента, т. к. с точки зрения сервера, запросы будут приходить от микротика.
И знания микротика здесь ни при чём, разберитесь с тем, как работает маршрутизация.
Дело в том, что на сервере, подключенном к микротику2, этот микротик является шлюзом по умолчанию. Когда вы делаете DNAT на микротике1, то получается следующее:Некий клиент из интернета, с белым адресом, скажем 1.2.3.4, шлёт пакет на белый адрес микротика1Микротик1 получает пакет и делает DNAT -- заменяет свой IP-адрес в поле "DST IP" на серый адрес вашего сервера (192.168.3.10 и отправляет пакет по EoIP в сторону микротика2Микротик2 получает пакет, видит, что это пакет в его внутреннюю сеть и перенаправляет пакет к серверу 192.168.3.10Сервер получает пакет от клиента с IP 1.2.3.4, обрабатывает запрос и отправляет ответ. Но этот ответ пойдёт через микротик2, т. к. именно микротик2 является шлюзом по умолчанию для сервера, а про существование микротик1 и то, что запрос от клиента 1.2.3.4 прошёл через микротик1, сервер вообще не в курсе
Если же вы сделаете ещё и SRC NAT клиентского пакета, т. е. поменяете адрес клиента (1.2.3.4) на адрес микротик1 (192.168.3.1), то сервер будет отвечать на этот адрес, и ответ сервера достинет микротик1, а он, в свою очередь, сделав обратную трансляцию по таблице NAT, вернёт ответ клиенту. Но, повторюсь, по этой схеме в логах сервера вы не увидите реальных IP клиентов, для запросов, пришедших через микротик1 IP клиента будет 192.168.3.1
P/S/: Напрасно вы сделали EoIP и одну плоскую клиентскую сеть за микротиками. Это только к путанице будет приводить.

Худший ответ:
А) чтобы сервер был доступен через два подключения к интернету с одним и тем же IP адресом, оператор должен выдать вам для сервера отдельную сетку (ну и соответственно смаршрутизировать ее).
Б) Вариантов как сделать то, что вы хотите, масса. Метка косами (mangle собственно), разные IP-адреса на сервере для разных туннелей, разные vrf на сервере в конце концов. Но мне кажется тут самый простой вариант НАТ. Когда трафик из интернета приходит к вам на микротик, вы делаете DNAT на серый IP-адрес. А сделайте ещё там же и SNAT на IP микротика. Тогда на микрот2 (и на сервер) придёт пакет с srs первого микрота, ответ сервер даст на него же. Единственный момент, на сервере тогда не оценишь трафик по входящим белым IP адресам.
В) Если берёте инет у одного и того же провайдера, то готовьтесь к тому, что главный узел предоставления интернета у этого провайдера один. Если он откажет (ну или плановые работы на нем будут проводить), интернет откажет на обоих микротиках.
Вопрос: Как реализовать кнопку Load More в Laravel?

Лучший ответ:
В контроллере public function loadMore(Request $request)
    {
        $article= Article::orderBy('id', 'desc')->paginate(2);
        if ($request->ajax()) {
            return $article->toJson();
        }
       abort(404);
}
JS$.ajax({
            type: 'GET',
            url: '/article?page=' + page,
            success: function (data) {
                let obj = JSON.parse(data);
                createArticleNode(obj);
                if (obj.to === obj.total) {
                    $('.button_more').hide();
                }
            }
        });
И нужно сделать функцию createArticleNode(obj), которая будет создавать dom-елементы

Худший ответ:
Если хотите готовое решение или мануал, то гуглите в направлении "ajax pagination".
Вопрос: Что почитать/посмотреть про устройство интернета?

Лучший ответ:
Компьютерные сети, Таненбаум: https://www.ozon.ru/context/detail/id/7309924/

Худший ответ:
я еле сдержался не написать ответ вам. Такие вещи написаны на 200% в гугле. Все что вы сейчас спросили это признак вашей ленивости. Не думаю что кто то станет тут статьи вам расписывать по 30 курсов.
Вопрос: Как выполнить SQL запрос страницы если было смещение?

Лучший ответ:
И это как раз вторая причина почему для пагинации не надо использовать offset. (первая причина - производительность offset)
Передавайте значения сортировки последнего видимого элемента списка и запрашивайте продолжен списка, а не offset.
https://use-the-index-luke.com/sql/partial-results...

Худший ответ:
Получайте количество записей в выборке перед каждым запросом, и рассчитывайте пагинацию с учетом новых данных.
Вопрос: Виртуальная машина — для чего нужна при разработке?

Лучший ответ:
1) Ставим НУЖНУЮ ОС, в нее софт ВНЕЗАПНОЙ версии, тестим НЕОЖИДАННЫЕЕ  баги.
2) Ставим НУЖНУЮ ОС, в ней собираем из исходников НЕОБХОДИМЫЙ софт.
3) Ставим НУЖНУЮ ОС ИНТЕРЕСУЮЩЕЙ версии, ТЕСТИМ, УЧИМСЯ, ПОВЫШАЕМ квалификацию.
4) Создаем НУЖНОЕ число виртулок, ставим в них НУЖНЫЕ версии ОС и софта, ОРГАНИЗУЕМ из них НЕОБХОДИМЫЙ стенд и ТЕСТИМ, УЧИМСЯ, ОТТАЧИВАЕМ навыки.
5) Создаем виртуалки, ДАЕМ УДАЛЕННЫЙ ДОСТУП разрабам, разрабы довольны и могут моделировать что хотят.
6) Поднимаем НУЖНЫЙ софт НУЖНЫЙХ версий, накатываем НЕОБХОДИМЫЕ конфиги, ДЕЛИМСЯ готовой виртуалкой с другими людьми.
7) Поднимаем НУЖНЫЙ софт НУЖНЫЙХ версий, накатываем НЕОБХОДИМЫЕ конфиги, ЗАБЫВАЕМ проблемы если сдох сервер т.к. можем куда угодно перенести  готовую виртуалки и без телодвижений запустить ее.
8) ЗАНИМАЕМСЯ исследованием безопасности софта\ос в виртуалке или вирусов.
9) СМОТРИМ порно\лук\i2p\... в виртуалке, не паримся за оставленные следы на компе.
10) ПОДНИМАЕМ какие угодно, каких угодно версий версий не переживая за основную ОС.
...) ....
1005000....) каждый находит свое применение.

Худший ответ:
Ставим апач и прочее В ВИРТУАЛКУ.
Чтобы не засирать ноут.
И тестировать на условно реальном окружении - в виртуалке должна крутиться +- та же ось и тот же софт что и на проде.
P.S. виртуалки в чистом виде УЖЕ не популярны. Уже популярны контейнеры и всякие варганты.
Вопрос: Хороший учебник по английскому?

Лучший ответ:
Серия учебников Мерфи. Общие рекомендации, читаешь и практикуешься. Без практики все херня. Забудешь нагромождение правил.

Худший ответ:
Серия учебников Мерфи. Общие рекомендации, читаешь и практикуешься. Без практики все херня. Забудешь нагромождение правил.